-Indices and tables
Welcome to GHData’s documentation!¶
+
+
@@ -64,7 +64,7 @@ Welcome to Augur’s documentation!¶
Indices and tables
Table Of Contents
@@ -96,7 +96,7 @@ Quick search
- ©2017, The GHData Team.
+ ©2017, The Augur Team.
|
Powered by Sphinx 1.5.6
diff --git a/docs/python/.build/html/objects.inv b/docs/python/.build/html/objects.inv
index ef1ad5994d..a390a0ef2b 100644
--- a/docs/python/.build/html/objects.inv
+++ b/docs/python/.build/html/objects.inv
@@ -1,5 +1,5 @@
# Sphinx inventory version 2
-# Project: GHData
+# Project: Augur
# Version:
# The remainder of this file is compressed using zlib.
xm0>
diff --git a/docs/python/.build/html/old/ghdata.html b/docs/python/.build/html/old/ghdata.html
index 3c2ee429ad..30bbc76559 100644
--- a/docs/python/.build/html/old/ghdata.html
+++ b/docs/python/.build/html/old/ghdata.html
@@ -6,7 +6,7 @@
- ghdata package — GHData documentation
+ augur package — Augur documentation
@@ -42,16 +42,16 @@
-
-ghdata package¶
+
+augur package¶
Submodules¶
-
-ghdata.ghdata module¶
+
+augur.augur module¶
-
-ghdata.server module¶
+
+augur.server module¶
Module contents¶
@@ -66,10 +66,10 @@ Module contents
Table Of Contents
-- ghdata package
+- augur package
@@ -84,7 +84,7 @@ Related Topics
This Page
@@ -103,14 +103,14 @@ Quick search
- ©2017, The GHData Team.
+ ©2017, The Augur Team.
|
Powered by Sphinx 1.5.6
& Alabaster 0.7.10
|
- Page source
diff --git a/docs/python/.build/html/old/index.html b/docs/python/.build/html/old/index.html
index b918639300..d09d53f8f5 100644
--- a/docs/python/.build/html/old/index.html
+++ b/docs/python/.build/html/old/index.html
@@ -6,7 +6,7 @@
- GHData — GHData documentation
+ Augur — Augur documentation
@@ -42,23 +42,23 @@
-
-GHData¶
-GHData is a library that makes GitHub Health and Sustainability metrics avaliable as Pandas DataFrames. It can also be used as a server and deliver these metrics through a REST API.
-Most of the interesting documentation can be found in the ghdata package docs.
+
+Augur¶
+Augur is a library that makes GitHub Health and Sustainability metrics avaliable as Pandas DataFrames. It can also be used as a server and deliver these metrics through a REST API.
+Most of the interesting documentation can be found in the augur package docs.
Contents¶
- ©2017, The GHData Team.
+ ©2017, The Augur Team.
|
Powered by Sphinx 1.5.6
diff --git a/docs/python/.build/html/old/modules.html b/docs/python/.build/html/old/modules.html
index 4a044fcdb2..9e4b66a552 100644
--- a/docs/python/.build/html/old/modules.html
+++ b/docs/python/.build/html/old/modules.html
@@ -6,7 +6,7 @@
- ghdata — GHData documentation
+ augur — Augur documentation
@@ -42,15 +42,15 @@
-
-ghdata¶
+
+augur¶
-- ghdata package
@@ -91,7 +91,7 @@
Quick search
- ©2017, The GHData Team.
+ ©2017, The Augur Team.
|
Powered by Sphinx 1.5.6
diff --git a/docs/python/.build/html/search.html b/docs/python/.build/html/search.html
index c19707666d..95f5fe4ef1 100644
--- a/docs/python/.build/html/search.html
+++ b/docs/python/.build/html/search.html
@@ -6,7 +6,7 @@
- Search — GHData documentation
+ Search — Augur documentation
@@ -90,7 +90,7 @@ Related Topics
- ©2017, The GHData Team.
+ ©2017, The Augur Team.
|
Powered by Sphinx 1.5.6
diff --git a/docs/python/.build/html/searchindex.js b/docs/python/.build/html/searchindex.js
index 3f350c6230..0e507a59ce 100644
--- a/docs/python/.build/html/searchindex.js
+++ b/docs/python/.build/html/searchindex.js
@@ -1 +1 @@
-Search.setIndex({docnames:["index","old/ghdata","old/index","old/modules"],envversion:51,filenames:["index.rst","old/ghdata.rst","old/index.rst","old/modules.rst"],objects:{},objnames:{},objtypes:{},terms:{also:2,api:2,avali:2,can:2,content:3,datafram:2,deliv:2,doc:2,document:2,found:2,github:2,health:2,index:0,interest:2,librari:2,make:2,metric:2,modul:[0,2,3],most:2,packag:[2,3],page:0,panda:2,rest:2,search:0,server:[2,3],submodul:[2,3],sustain:2,through:2,used:2},titles:["Welcome to GHData’s documentation!","ghdata package","GHData","ghdata"],titleterms:{content:[1,2],document:0,ghdata:[0,1,2,3],indic:0,modul:1,packag:1,server:1,submodul:1,tabl:0,welcom:0}})
\ No newline at end of file
+Search.setIndex({docnames:["index","old/augur","old/index","old/modules"],envversion:51,filenames:["index.rst","old/augur.rst","old/index.rst","old/modules.rst"],objects:{},objnames:{},objtypes:{},terms:{also:2,api:2,avali:2,can:2,content:3,datafram:2,deliv:2,doc:2,document:2,found:2,github:2,health:2,index:0,interest:2,librari:2,make:2,metric:2,modul:[0,2,3],most:2,packag:[2,3],page:0,panda:2,rest:2,search:0,server:[2,3],submodul:[2,3],sustain:2,through:2,used:2},titles:["Welcome to Augur’s documentation!","augur package","Augur","augur"],titleterms:{content:[1,2],document:0,augur:[0,1,2,3],indic:0,modul:1,packag:1,server:1,submodul:1,tabl:0,welcom:0}})
\ No newline at end of file
diff --git a/docs/python/Makefile b/docs/python/Makefile
index 03e754fc62..82d390137f 100644
--- a/docs/python/Makefile
+++ b/docs/python/Makefile
@@ -4,7 +4,7 @@
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
-SPHINXPROJ = GHData
+SPHINXPROJ = Augur
SOURCEDIR = source
BUILDDIR = build
diff --git a/docs/python/build/html/_sources/index.rst.txt b/docs/python/build/html/_sources/index.rst.txt
index c8d912140d..3a97ee59c5 100644
--- a/docs/python/build/html/_sources/index.rst.txt
+++ b/docs/python/build/html/_sources/index.rst.txt
@@ -1,16 +1,16 @@
-.. GHData documentation master file, created by
+.. Augur documentation master file, created by
sphinx-quickstart on Tue Oct 24 12:27:08 2017.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
-Welcome to GHData's documentation!
+Welcome to Augur's documentation!
==================================
.. toctree::
:maxdepth: 2
:caption: Contents:
-.. automodule:: ghdata
+.. automodule:: augur
:members:
diff --git a/docs/python/build/html/genindex.html b/docs/python/build/html/genindex.html
index 557e174a66..32bb3e6262 100644
--- a/docs/python/build/html/genindex.html
+++ b/docs/python/build/html/genindex.html
@@ -7,7 +7,7 @@
- Index — GHData documentation
+ Index — Augur documentation
@@ -53,7 +53,7 @@ Index
G
@@ -89,7 +89,7 @@ Quick search
- ©2017, GHData Contributors.
+ ©2017, Augur Contributors.
|
Powered by Sphinx 1.5.6
diff --git a/docs/python/build/html/index.html b/docs/python/build/html/index.html
index 163ecad19a..de62b7edb7 100644
--- a/docs/python/build/html/index.html
+++ b/docs/python/build/html/index.html
@@ -6,7 +6,7 @@
- Welcome to GHData’s documentation! — GHData documentation
+ Welcome to Augur’s documentation! — Augur documentation
@@ -42,11 +42,11 @@
-
Indices and tables¶
@@ -64,7 +64,7 @@ Indices and tables
Table Of Contents
@@ -96,7 +96,7 @@ Quick search
- ©2017, GHData Contributors.
+ ©2017, Augur Contributors.
|
Powered by Sphinx 1.5.6
diff --git a/docs/python/build/html/py-modindex.html b/docs/python/build/html/py-modindex.html
index 5227dd3192..19adbd1526 100644
--- a/docs/python/build/html/py-modindex.html
+++ b/docs/python/build/html/py-modindex.html
@@ -6,7 +6,7 @@
- Python Module Index — GHData documentation
+ Python Module Index — Augur documentation
@@ -63,7 +63,7 @@ Python Module Index
- ghdata
+ augur
@@ -94,7 +94,7 @@ Quick search
- ©2017, GHData Contributors.
+ ©2017, Augur Contributors.
|
Powered by Sphinx 1.5.6
diff --git a/docs/python/build/html/search.html b/docs/python/build/html/search.html
index 4dac7ce5a6..3da99b3df5 100644
--- a/docs/python/build/html/search.html
+++ b/docs/python/build/html/search.html
@@ -6,7 +6,7 @@
- Search — GHData documentation
+ Search — Augur documentation
@@ -90,7 +90,7 @@ Related Topics
- ©2017, GHData Contributors.
+ ©2017, Augur Contributors.
|
Powered by Sphinx 1.5.6
diff --git a/docs/python/build/html/searchindex.js b/docs/python/build/html/searchindex.js
index 203dc6aefa..115c0af1be 100644
--- a/docs/python/build/html/searchindex.js
+++ b/docs/python/build/html/searchindex.js
@@ -1 +1 @@
-Search.setIndex({docnames:["index"],envversion:51,filenames:["index.rst"],objects:{"":{ghdata:[0,0,0,"-"]}},objnames:{"0":["py","module","Python module"]},objtypes:{"0":"py:module"},terms:{index:0,modul:0,page:0,search:0},titles:["Welcome to GHData’s documentation!"],titleterms:{document:0,ghdata:0,indic:0,tabl:0,welcom:0}})
\ No newline at end of file
+Search.setIndex({docnames:["index"],envversion:51,filenames:["index.rst"],objects:{"":{augur:[0,0,0,"-"]}},objnames:{"0":["py","module","Python module"]},objtypes:{"0":"py:module"},terms:{index:0,modul:0,page:0,search:0},titles:["Welcome to Augur’s documentation!"],titleterms:{document:0,augur:0,indic:0,tabl:0,welcom:0}})
\ No newline at end of file
diff --git a/docs/python/make.bat b/docs/python/make.bat
index d7f8d6921a..61658dfbc2 100644
--- a/docs/python/make.bat
+++ b/docs/python/make.bat
@@ -9,7 +9,7 @@ if "%SPHINXBUILD%" == "" (
)
set SOURCEDIR=source
set BUILDDIR=build
-set SPHINXPROJ=GHData
+set SPHINXPROJ=Augur
if "%1" == "" goto help
diff --git a/docs/python/source/conf.py b/docs/python/source/conf.py
index 869e7bc5fe..331e5e0ff2 100644
--- a/docs/python/source/conf.py
+++ b/docs/python/source/conf.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
-# GHData documentation build configuration file, created by
+# Augur documentation build configuration file, created by
# sphinx-quickstart on Tue Oct 24 12:27:08 2017.
#
# This file is execfile()d with the current directory set to its
@@ -54,9 +54,9 @@
master_doc = 'index'
# General information about the project.
-project = 'GHData'
-copyright = '2017, GHData Contributors'
-author = 'GHData Contributors'
+project = 'Augur'
+copyright = '2017, Augur Contributors'
+author = 'Augur Contributors'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
@@ -110,7 +110,7 @@
# -- Options for HTMLHelp output ------------------------------------------
# Output file base name for HTML help builder.
-htmlhelp_basename = 'GHDatadoc'
+htmlhelp_basename = 'Augurdoc'
# -- Options for LaTeX output ---------------------------------------------
@@ -137,8 +137,8 @@
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
- (master_doc, 'GHData.tex', 'GHData Documentation',
- 'GHData Contributors', 'manual'),
+ (master_doc, 'Augur.tex', 'Augur Documentation',
+ 'Augur Contributors', 'manual'),
]
@@ -147,7 +147,7 @@
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
- (master_doc, 'ghdata', 'GHData Documentation',
+ (master_doc, 'augur', 'Augur Documentation',
[author], 1)
]
@@ -158,8 +158,8 @@
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
- (master_doc, 'GHData', 'GHData Documentation',
- author, 'GHData', 'One line description of project.',
+ (master_doc, 'Augur', 'Augur Documentation',
+ author, 'Augur', 'One line description of project.',
'Miscellaneous'),
]
diff --git a/docs/python/source/index.rst b/docs/python/source/index.rst
index c8d912140d..3a97ee59c5 100644
--- a/docs/python/source/index.rst
+++ b/docs/python/source/index.rst
@@ -1,16 +1,16 @@
-.. GHData documentation master file, created by
+.. Augur documentation master file, created by
sphinx-quickstart on Tue Oct 24 12:27:08 2017.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
-Welcome to GHData's documentation!
+Welcome to Augur's documentation!
==================================
.. toctree::
:maxdepth: 2
:caption: Contents:
-.. automodule:: ghdata
+.. automodule:: augur
:members:
diff --git a/examples/.ipynb_checkpoints/contributor-classification-checkpoint.ipynb b/examples/.ipynb_checkpoints/contributor-classification-checkpoint.ipynb
index eccbe9973e..2412484450 100644
--- a/examples/.ipynb_checkpoints/contributor-classification-checkpoint.ipynb
+++ b/examples/.ipynb_checkpoints/contributor-classification-checkpoint.ipynb
@@ -8,11 +8,11 @@
},
"outputs": [],
"source": [
- "import ..ghdata\n",
+ "import ..augur\n",
"import pandas as pd\n",
"import numpy as np\n",
"\n",
- "ghtorrent = ghdata.GHTorrent(\"mysql+pymysql://msr:ghtorrent@opendata.missouri.edu/msr\")"
+ "ghtorrent = augur.GHTorrent(\"mysql+pymysql://msr:ghtorrent@opendata.missouri.edu/msr\")"
]
},
{
@@ -30,10 +30,10 @@
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mcakephpid\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mghtorrent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrepoid\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mowner\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"cakephp\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrepo\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"cakephp\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mclassified_contributors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mghtorrent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclassify_contributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcakephpid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0;32mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mclassified_contributors\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
- "\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/ghdata/ghtorrent.pyc\u001b[0m in \u001b[0;36mclassify_contributors\u001b[0;34m(self, repoid)\u001b[0m\n\u001b[1;32m 331\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclassify_contributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 332\u001b[0m \u001b[0mcontributors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 333\u001b[0;31m contributors.apply(lambda row:\n\u001b[0m\u001b[1;32m 334\u001b[0m \u001b[0mconsole\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 335\u001b[0m )\n",
+ "\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/augur/ghtorrent.pyc\u001b[0m in \u001b[0;36mclassify_contributors\u001b[0;34m(self, repoid)\u001b[0m\n\u001b[1;32m 331\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclassify_contributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 332\u001b[0m \u001b[0mcontributors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 333\u001b[0;31m contributors.apply(lambda row:\n\u001b[0m\u001b[1;32m 334\u001b[0m \u001b[0mconsole\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 335\u001b[0m )\n",
"\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/pandas/core/frame.pyc\u001b[0m in \u001b[0;36mapply\u001b[0;34m(self, func, axis, broadcast, raw, reduce, args, **kwds)\u001b[0m\n\u001b[1;32m 4150\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mreduce\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4151\u001b[0m \u001b[0mreduce\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4152\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_apply_standard\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreduce\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mreduce\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4153\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4154\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_apply_broadcast\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/pandas/core/frame.pyc\u001b[0m in \u001b[0;36m_apply_standard\u001b[0;34m(self, func, axis, ignore_failures, reduce)\u001b[0m\n\u001b[1;32m 4246\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4247\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mseries_gen\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4248\u001b[0;31m \u001b[0mresults\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4249\u001b[0m \u001b[0mkeys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4250\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
- "\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/ghdata/ghtorrent.pyc\u001b[0m in \u001b[0;36m\u001b[0;34m(row)\u001b[0m\n\u001b[1;32m 332\u001b[0m \u001b[0mcontributors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 333\u001b[0m contributors.apply(lambda row:\n\u001b[0;32m--> 334\u001b[0;31m \u001b[0mconsole\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 335\u001b[0m )\n",
+ "\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/augur/ghtorrent.pyc\u001b[0m in \u001b[0;36m\u001b[0;34m(row)\u001b[0m\n\u001b[1;32m 332\u001b[0m \u001b[0mcontributors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 333\u001b[0m contributors.apply(lambda row:\n\u001b[0;32m--> 334\u001b[0;31m \u001b[0mconsole\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 335\u001b[0m )\n",
"\u001b[0;31mNameError\u001b[0m: (\"global name 'console' is not defined\", u'occurred at index login')"
]
}
@@ -59,10 +59,10 @@
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mclassified_contributors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mghtorrent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclassify_contributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcakephpid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
- "\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/ghdata/ghtorrent.pyc\u001b[0m in \u001b[0;36mclassify_contributors\u001b[0;34m(self, repoid)\u001b[0m\n\u001b[1;32m 331\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclassify_contributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 332\u001b[0m \u001b[0mcontributors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 333\u001b[0;31m contributors.apply(lambda row:\n\u001b[0m\u001b[1;32m 334\u001b[0m \u001b[0mconsole\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 335\u001b[0m )\n",
+ "\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/augur/ghtorrent.pyc\u001b[0m in \u001b[0;36mclassify_contributors\u001b[0;34m(self, repoid)\u001b[0m\n\u001b[1;32m 331\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclassify_contributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 332\u001b[0m \u001b[0mcontributors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 333\u001b[0;31m contributors.apply(lambda row:\n\u001b[0m\u001b[1;32m 334\u001b[0m \u001b[0mconsole\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 335\u001b[0m )\n",
"\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/pandas/core/frame.pyc\u001b[0m in \u001b[0;36mapply\u001b[0;34m(self, func, axis, broadcast, raw, reduce, args, **kwds)\u001b[0m\n\u001b[1;32m 4150\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mreduce\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4151\u001b[0m \u001b[0mreduce\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4152\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_apply_standard\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreduce\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mreduce\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4153\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4154\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_apply_broadcast\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/pandas/core/frame.pyc\u001b[0m in \u001b[0;36m_apply_standard\u001b[0;34m(self, func, axis, ignore_failures, reduce)\u001b[0m\n\u001b[1;32m 4246\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4247\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mseries_gen\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4248\u001b[0;31m \u001b[0mresults\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4249\u001b[0m \u001b[0mkeys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4250\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
- "\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/ghdata/ghtorrent.pyc\u001b[0m in \u001b[0;36m\u001b[0;34m(row)\u001b[0m\n\u001b[1;32m 332\u001b[0m \u001b[0mcontributors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 333\u001b[0m contributors.apply(lambda row:\n\u001b[0;32m--> 334\u001b[0;31m \u001b[0mconsole\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 335\u001b[0m )\n",
+ "\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/augur/ghtorrent.pyc\u001b[0m in \u001b[0;36m\u001b[0;34m(row)\u001b[0m\n\u001b[1;32m 332\u001b[0m \u001b[0mcontributors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 333\u001b[0m contributors.apply(lambda row:\n\u001b[0;32m--> 334\u001b[0;31m \u001b[0mconsole\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 335\u001b[0m )\n",
"\u001b[0;31mNameError\u001b[0m: (\"global name 'console' is not defined\", u'occurred at index login')"
]
}
diff --git a/examples/.ipynb_checkpoints/contributor_exploration-checkpoint.ipynb b/examples/.ipynb_checkpoints/contributor_exploration-checkpoint.ipynb
index 2bf90c7442..fc20f80430 100644
--- a/examples/.ipynb_checkpoints/contributor_exploration-checkpoint.ipynb
+++ b/examples/.ipynb_checkpoints/contributor_exploration-checkpoint.ipynb
@@ -8,7 +8,7 @@
},
"outputs": [],
"source": [
- "import ghdata"
+ "import augur"
]
},
{
@@ -19,7 +19,7 @@
},
"outputs": [],
"source": [
- "ghtorrent = ghdata.GHTorrent(\"mysql+pymysql://\")"
+ "ghtorrent = augur.GHTorrent(\"mysql+pymysql://\")"
]
}
],
diff --git a/examples/contributor-classification.ipynb b/examples/contributor-classification.ipynb
index 247d23fe7d..f6e4af5197 100644
--- a/examples/contributor-classification.ipynb
+++ b/examples/contributor-classification.ipynb
@@ -8,11 +8,11 @@
},
"outputs": [],
"source": [
- "import ghdata\n",
+ "import augur\n",
"import pandas as pd\n",
"import numpy as np\n",
"\n",
- "ghtorrent = ghdata.GHTorrent(\"mysql+pymysql://root:ghtorrent@localhost/msr14\")"
+ "ghtorrent = augur.GHTorrent(\"mysql+pymysql://root:ghtorrent@localhost/msr14\")"
]
},
{
diff --git a/frontend/app/GHData.js b/frontend/app/Augur.js
similarity index 72%
rename from frontend/app/GHData.js
rename to frontend/app/Augur.js
index f844e1fd4f..f845a0c362 100644
--- a/frontend/app/GHData.js
+++ b/frontend/app/Augur.js
@@ -1,27 +1,27 @@
import VueVega from 'vue-vega'
const queryString = require('query-string')
-export default function GHData () {
+export default function Augur () {
window.jQuery = require('jquery')
window.Vue = require('vue')
window.Vuex = require('vuex')
- let GHDataAPI = require('GHDataAPI').default
- window.GHDataAPI = new GHDataAPI()
- window.GHDataRepos = {}
- window.GHDataStats = require('GHDataStats').default
+ let AugurAPI = require('AugurAPI').default
+ window.AugurAPI = new AugurAPI()
+ window.AugurRepos = {}
+ window.AugurStats = require('AugurStats').default
window.$ = window.jQuery
window._ = require('lodash')
window.d3 = require('d3')
window.VueVega = VueVega
window.SvgSaver = require('svgsaver')
- let GHDataApp = require('./components/GHDataApp')
+ let AugurApp = require('./components/AugurApp')
Vue.use(Vuex)
Vue.use(VueVega)
Vue.config.productionTip = false
- window.ghdata = new Vuex.Store({
+ window.augur = new Vuex.Store({
state: {
baseRepo: null,
comparedRepos: [],
@@ -35,25 +35,25 @@ export default function GHData () {
},
mutations: {
setBaseRepo (state, payload) {
- let repo = window.GHDataAPI.Repo(payload.url)
- if (!window.GHDataRepos[repo.toString()]) {
- window.GHDataRepos[repo.toString()] = repo
+ let repo = window.AugurAPI.Repo(payload.url)
+ if (!window.AugurRepos[repo.toString()]) {
+ window.AugurRepos[repo.toString()] = repo
}
state.baseRepo = repo.toString()
if (!payload.keepCompared) {
state.comparedRepos = []
}
- let title = repo.owner + '/' + repo.name + '- GHData'
+ let title = repo.owner + '/' + repo.name + '- Augur'
let queryString = '?repo=' + repo.owner + '+' + repo.name
window.history.pushState(null, title, queryString)
},
addComparedRepo (state, payload) {
- let repo = window.GHDataAPI.Repo(payload.url)
- if (!window.GHDataRepos[repo.toString()]) {
- window.GHDataRepos[repo.toString()] = repo
+ let repo = window.AugurAPI.Repo(payload.url)
+ if (!window.AugurRepos[repo.toString()]) {
+ window.AugurRepos[repo.toString()] = repo
}
state.comparedRepos.push(repo.toString())
- let title = 'GHData'
+ let title = 'Augur'
let queryString = window.location.search + '&comparedTo[]=' + repo.owner + '+' + repo.name
window.history.pushState(null, title, queryString)
},
@@ -89,22 +89,22 @@ export default function GHData () {
compare: "each",
byDate: false,
}
- window.history.pushState(null, 'GHData', '/')
+ window.history.pushState(null, 'Augur', '/')
} // end reset
} // end mutations
})
- GHDataApp.store = window.ghdata
- window.GHDataApp = new Vue(GHDataApp).$mount('#app')
+ AugurApp.store = window.augur
+ window.AugurApp = new Vue(AugurApp).$mount('#app')
// Load state from query string
let parsed = queryString.parse(location.search, { arrayFormat: 'bracket' })
if (parsed.repo) {
- window.GHDataApp.$store.commit('setBaseRepo', { url: parsed.repo.replace(' ', '/') })
+ window.AugurApp.$store.commit('setBaseRepo', { url: parsed.repo.replace(' ', '/') })
}
if (parsed.comparedTo) {
parsed.comparedTo.forEach((repo) => {
- window.GHDataApp.$store.commit('addComparedRepo', { url: repo.replace(' ', '/') })
+ window.AugurApp.$store.commit('addComparedRepo', { url: repo.replace(' ', '/') })
})
}
diff --git a/frontend/app/GHDataAPI.js b/frontend/app/AugurAPI.js
similarity index 99%
rename from frontend/app/GHDataAPI.js
rename to frontend/app/AugurAPI.js
index ad9e1c9a7a..86db0514f0 100644
--- a/frontend/app/GHDataAPI.js
+++ b/frontend/app/AugurAPI.js
@@ -1,6 +1,6 @@
var $ = require('jquery')
-export default class GHDataAPI {
+export default class AugurAPI {
constructor(hostURL, version, autobatch) {
this._version = version || 'unstable'
this._host = hostURL || 'http://' + window.location.host + '/api/'
diff --git a/frontend/app/GHDataStats.js b/frontend/app/AugurStats.js
similarity index 83%
rename from frontend/app/GHDataStats.js
rename to frontend/app/AugurStats.js
index 192ae2b7cd..c9b8f8d8c2 100644
--- a/frontend/app/GHDataStats.js
+++ b/frontend/app/AugurStats.js
@@ -1,11 +1,11 @@
-export default class GHDataStats {
+export default class AugurStats {
static convertDates (data, earliest, latest) {
earliest = earliest || new Date('01-01-2005')
latest = latest || new Date()
if (Array.isArray(data[0])) {
data = data.map((datum) => {
- return GHDataStats.convertDates(datum)
+ return AugurStats.convertDates(datum)
})
} else {
@@ -22,7 +22,7 @@ export default class GHDataStats {
static convertKey (data, key) {
if (Array.isArray(data[0])) {
data = data.map((datum) => {
- return GHDataStats.convertKey(datum, key)
+ return AugurStats.convertKey(datum, key)
})
} else {
const EARLIEST = new Date('01-01-2005')
@@ -40,7 +40,7 @@ export default class GHDataStats {
static aboveAverage(data, key) {
let flat = data.map((e) => {return e[key]})
- let mean = GHDataStats.averageArray(flat)
+ let mean = AugurStats.averageArray(flat)
return data.filter((e) => {
return e[key] > mean
})
@@ -48,17 +48,17 @@ export default class GHDataStats {
static standardDeviation(ary, key, mean) {
let flat = ary.map((e) => {return e[key]})
- mean = mean || GHDataStats.averageArray(flat)
+ mean = mean || AugurStats.averageArray(flat)
let distances = flat.map((e) => {
return (e - mean) * (e - mean)
})
- return Math.sqrt(GHDataStats.averageArray(distances))
+ return Math.sqrt(AugurStats.averageArray(distances))
}
static describe(ary, key) {
let flat = ary.map((e) => {return e[key]})
- let mean = GHDataStats.averageArray(flat)
- let stddev = GHDataStats.standardDeviation(ary, key, mean)
+ let mean = AugurStats.averageArray(flat)
+ let stddev = AugurStats.standardDeviation(ary, key, mean)
let variance = stddev * stddev
return {
'mean': mean,
@@ -94,7 +94,7 @@ export default class GHDataStats {
}
let average = {date: new Date(date)}
- average[key] = GHDataStats.averageArray(averageWindow.slice(0, windowSizeInDays));
+ average[key] = AugurStats.averageArray(averageWindow.slice(0, windowSizeInDays));
averageWindow.shift()
rolling.push(average);
}
@@ -105,7 +105,7 @@ export default class GHDataStats {
if (!data) {
return []
}
- baseline = baseline || GHDataStats.averageArray( data.map((e) => {return e[key]}) )
+ baseline = baseline || AugurStats.averageArray( data.map((e) => {return e[key]}) )
data = data.map((datum) => {
datum['value'] = (datum[key] / baseline)
return datum
@@ -126,17 +126,17 @@ export default class GHDataStats {
}
let data = {}
- data['base'] = GHDataStats.rollingAverage(
- GHDataStats.convertDates(
- GHDataStats.convertKey(
+ data['base'] = AugurStats.rollingAverage(
+ AugurStats.convertDates(
+ AugurStats.convertKey(
baseData,
Object.keys(baseData[0])[1]
), config.earliest, config.latest
), undefined, config.period)
- data['compare'] = GHDataStats.rollingAverage(
- GHDataStats.convertDates(
- GHDataStats.convertKey(
+ data['compare'] = AugurStats.rollingAverage(
+ AugurStats.convertDates(
+ AugurStats.convertKey(
compareData,
Object.keys(compareData[0])[1]
), config.earliest, config.latest
@@ -174,7 +174,7 @@ export default class GHDataStats {
static zscores(data, key) {
key = key || 'value'
- let stats = GHDataStats.describe(data, key)
+ let stats = AugurStats.describe(data, key)
return data.map((e) => {
let newObj = {}
if (e.date) {
diff --git a/frontend/app/assets/index.html b/frontend/app/assets/index.html
index 79b19479aa..13fa0e1339 100644
--- a/frontend/app/assets/index.html
+++ b/frontend/app/assets/index.html
@@ -2,7 +2,7 @@
- GHData
+ Augur
@@ -13,10 +13,10 @@
-
+
diff --git a/frontend/app/components/AugurApp.vue b/frontend/app/components/AugurApp.vue
new file mode 100644
index 0000000000..15feb51878
--- /dev/null
+++ b/frontend/app/components/AugurApp.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/app/components/GHDataCards.vue b/frontend/app/components/AugurCards.vue
similarity index 100%
rename from frontend/app/components/GHDataCards.vue
rename to frontend/app/components/AugurCards.vue
diff --git a/frontend/app/components/GHDataHeader.vue b/frontend/app/components/AugurHeader.vue
similarity index 100%
rename from frontend/app/components/GHDataHeader.vue
rename to frontend/app/components/AugurHeader.vue
diff --git a/frontend/app/components/GHDataApp.vue b/frontend/app/components/GHDataApp.vue
deleted file mode 100644
index 7371d94aa2..0000000000
--- a/frontend/app/components/GHDataApp.vue
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/app/components/charts/BubbleChart.vue b/frontend/app/components/charts/BubbleChart.vue
index 3f9b19a068..d1cc604f30 100644
--- a/frontend/app/components/charts/BubbleChart.vue
+++ b/frontend/app/components/charts/BubbleChart.vue
@@ -10,7 +10,7 @@
@@ -13,10 +13,10 @@
-
+
diff --git a/frontend/public/static/app.css.map b/frontend/public/static/app.css.map
index da29f5d2d2..539478a9c2 100644
--- a/frontend/public/static/app.css.map
+++ b/frontend/public/static/app.css.map
@@ -1 +1 @@
-{"version":3,"sources":["app/include/kube/kube.css","app/include/metricsgraphics.css","app/styles/ghdata.styl"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5mEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"public/static/app.css","sourcesContent":["/*\n\tKube. CSS & JS Framework\n\tVersion 6.5.2\n\tUpdated: February 2, 2017\n\n\thttp://imperavi.com/kube/\n\n\tCopyright (c) 2009-2017, Imperavi LLC.\n\tLicense: MIT\n*/\nhtml {\n box-sizing: border-box; }\n\n*,\n*:before,\n*:after {\n box-sizing: inherit; }\n\n* {\n margin: 0;\n padding: 0;\n outline: 0;\n -webkit-overflow-scrolling: touch; }\n\nimg,\nvideo,\naudio {\n max-width: 100%; }\n\nimg,\nvideo {\n height: auto; }\n\nsvg {\n max-height: 100%; }\n\niframe {\n border: none; }\n\n::-moz-focus-inner {\n border: 0;\n padding: 0; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n vertical-align: middle;\n position: relative;\n bottom: 0.15rem;\n font-size: 115%;\n margin-right: 3px; }\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; }\n\ninput[type=\"search\"]::-webkit-search-decoration,\ninput[type=\"search\"]::-webkit-search-cancel-button {\n -webkit-appearance: none; }\n\n.black {\n color: #0d0d0e; }\n\n.inverted {\n color: #fff; }\n\n.error {\n color: #f03c69; }\n\n.success {\n color: #35beb1; }\n\n.warning {\n color: #f7ba45; }\n\n.focus {\n color: #1c86f2; }\n\n.aluminum {\n color: #f8f8f8; }\n\n.silver {\n color: #e0e1e1; }\n\n.lightgray {\n color: #d4d4d4; }\n\n.gray {\n color: #bdbdbd; }\n\n.midgray {\n color: #676b72; }\n\n.darkgray {\n color: #313439; }\n\n.bg-black {\n background-color: #0d0d0e; }\n\n.bg-inverted {\n background-color: #fff; }\n\n.bg-error {\n background-color: #f03c69; }\n\n.bg-success {\n background-color: #35beb1; }\n\n.bg-warning {\n background-color: #f7ba45; }\n\n.bg-focus {\n background-color: #1c86f2; }\n\n.bg-aluminum {\n background-color: #f8f8f8; }\n\n.bg-silver {\n background-color: #e0e1e1; }\n\n.bg-lightgray {\n background-color: #d4d4d4; }\n\n.bg-gray {\n background-color: #bdbdbd; }\n\n.bg-midgray {\n background-color: #676b72; }\n\n.bg-darkgray {\n background-color: #313439; }\n\n.bg-highlight {\n background-color: #edf2ff; }\n\nhtml,\nbody {\n font-size: 16px;\n line-height: 24px; }\n\nbody {\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n color: #313439;\n background-color: transparent; }\n\na {\n color: #3794de; }\n\na:hover {\n color: #f03c69; }\n\nh1.title, h1, h2, h3, h4, h5, h6 {\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n font-weight: bold;\n color: #0d0d0e;\n text-rendering: optimizeLegibility;\n margin-bottom: 16px; }\n\nh1.title {\n font-size: 60px;\n line-height: 64px;\n margin-bottom: 8px; }\n\nh1,\n.h1 {\n font-size: 48px;\n line-height: 52px; }\n\nh2,\n.h2 {\n font-size: 36px;\n line-height: 40px; }\n\nh3,\n.h3 {\n font-size: 24px;\n line-height: 32px; }\n\nh4,\n.h4 {\n font-size: 21px;\n line-height: 32px; }\n\nh5,\n.h5 {\n font-size: 18px;\n line-height: 28px; }\n\nh6,\n.h6 {\n font-size: 16px;\n line-height: 24px; }\n\nh1 a, .h1 a,\nh2 a, .h2 a,\nh3 a, .h3 a,\nh4 a, .h4 a,\nh5 a, .h5 a,\nh6 a, .h6 a {\n color: inherit; }\n\np + h2,\np + h3,\np + h4,\np + h5,\np + h6,\nul + h2,\nul + h3,\nul + h4,\nul + h5,\nul + h6,\nol + h2,\nol + h3,\nol + h4,\nol + h5,\nol + h6,\ndl + h2,\ndl + h3,\ndl + h4,\ndl + h5,\ndl + h6,\nblockquote + h2,\nblockquote + h3,\nblockquote + h4,\nblockquote + h5,\nblockquote + h6,\nhr + h2,\nhr + h3,\nhr + h4,\nhr + h5,\nhr + h6,\npre + h2,\npre + h3,\npre + h4,\npre + h5,\npre + h6,\ntable + h2,\ntable + h3,\ntable + h4,\ntable + h5,\ntable + h6,\nform + h2,\nform + h3,\nform + h4,\nform + h5,\nform + h6,\nfigure + h2,\nfigure + h3,\nfigure + h4,\nfigure + h5,\nfigure + h6 {\n margin-top: 24px; }\n\nul,\nul ul,\nul ol,\nol,\nol ul,\nol ol {\n margin: 0 0 0 24px; }\n\nol ol li {\n list-style-type: lower-alpha; }\n\nol ol ol li {\n list-style-type: lower-roman; }\n\nnav ul,\nnav ol {\n margin: 0;\n list-style: none; }\n nav ul ul,\n nav ul ol,\n nav ol ul,\n nav ol ol {\n margin-left: 24px; }\n\ndl dt {\n font-weight: bold; }\n\ndd {\n margin-left: 24px; }\n\np, blockquote, hr, pre, ol, ul, dl, table, fieldset, figure, address, form {\n margin-bottom: 16px; }\n\nhr {\n border: none;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n margin-top: -1px; }\n\nblockquote {\n padding-left: 1rem;\n border-left: 4px solid rgba(0, 0, 0, 0.1);\n font-style: italic;\n color: rgba(49, 52, 57, 0.65); }\n blockquote p {\n margin-bottom: .5rem; }\n\ntime, cite, small, figcaption {\n font-size: 87.5%; }\n\ncite {\n opacity: .6; }\n\nabbr[title], dfn[title] {\n border-bottom: 1px dotted rgba(0, 0, 0, 0.5);\n cursor: help; }\n\nvar {\n font-size: 16px;\n opacity: .6;\n font-style: normal; }\n\nmark, code, samp, kbd {\n position: relative;\n top: -1px;\n padding: 4px 4px 2px 4px;\n display: inline-block;\n line-height: 1;\n color: rgba(49, 52, 57, 0.85); }\n\ncode {\n background: #e0e1e1; }\n\nmark {\n background: #f7ba45; }\n\nsamp {\n color: #fff;\n background: #1c86f2; }\n\nkbd {\n border: 1px solid rgba(0, 0, 0, 0.1); }\n\nsub,\nsup {\n font-size: x-small;\n line-height: 0;\n margin-left: 1rem/4;\n position: relative; }\n\nsup {\n top: 0; }\n\nsub {\n bottom: 1px; }\n\npre, code, samp, var, kbd {\n font-family: Consolas, Monaco, \"Courier New\", monospace; }\n\npre, code, samp, var, kbd, mark {\n font-size: 87.5%; }\n\npre,\npre code {\n background: #f8f8f8;\n padding: 0;\n top: 0;\n display: block;\n line-height: 20px;\n color: rgba(49, 52, 57, 0.85);\n overflow: none;\n white-space: pre-wrap; }\n\npre {\n padding: 1rem; }\n\nfigcaption {\n opacity: .6; }\n\nfigure figcaption {\n position: relative;\n top: -1rem/2; }\n\nfigure pre {\n background: none;\n border: 1px solid rgba(0, 0, 0, 0.1);\n border-radius: 4px; }\n\nfigure .video-container,\nfigure pre {\n margin-bottom: 8px; }\n\n.text-left {\n text-align: left; }\n\n.text-center {\n text-align: center; }\n\n.text-right {\n text-align: right; }\n\nul.unstyled {\n margin-left: 0; }\n\nul.unstyled,\nul.unstyled ul {\n list-style: none; }\n\n.monospace {\n font-family: Consolas, Monaco, \"Courier New\", monospace; }\n\n.upper {\n text-transform: uppercase; }\n\n.lower {\n text-transform: lowercase; }\n\n.italic {\n font-style: italic !important; }\n\n.strong {\n font-weight: bold !important; }\n\n.normal {\n font-weight: normal !important; }\n\n.muted {\n opacity: .55; }\n\na.muted {\n color: #0d0d0e; }\n\na.muted:hover {\n opacity: 1; }\n\n.black {\n color: #0d0d0e; }\n\n.smaller {\n font-size: 12px;\n line-height: 20px; }\n\n.small {\n font-size: 14px;\n line-height: 20px; }\n\n.big {\n font-size: 18px;\n line-height: 28px; }\n\n.large {\n font-size: 20px;\n line-height: 32px; }\n\n.end {\n margin-bottom: 0 !important; }\n\n.highlight {\n background-color: #edf2ff; }\n\n.nowrap,\n.nowrap td {\n white-space: nowrap; }\n\n@media (min-width: 1230px) and (max-width: 1024px) {\n .columns-2,\n .columns-3,\n .columns-4 {\n column-gap: 24px; }\n .columns-2 {\n column-count: 2; }\n .columns-3 {\n column-count: 3; }\n .columns-4 {\n column-count: 4; } }\n\n.row {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap; }\n @media (max-width: 1230px) {\n .row {\n flex-direction: column;\n flex-wrap: nowrap; } }\n .row.gutters,\n .row.gutters > .row {\n margin-left: -2%; }\n @media (max-width: 1230px) {\n .row.gutters,\n .row.gutters > .row {\n margin-left: 0; } }\n .row.gutters > .col,\n .row.gutters > .row > .col {\n margin-left: 2%; }\n @media (max-width: 1230px) {\n .row.gutters > .col,\n .row.gutters > .row > .col {\n margin-left: 0; } }\n .row.around {\n justify-content: space-around; }\n .row.between {\n justify-content: space-between; }\n .row.auto .col {\n flex-grow: 1; }\n\n.col-1 {\n width: 8.33333%; }\n\n.offset-1 {\n margin-left: 8.33333%; }\n\n.col-2 {\n width: 16.66667%; }\n\n.offset-2 {\n margin-left: 16.66667%; }\n\n.col-3 {\n width: 25%; }\n\n.offset-3 {\n margin-left: 25%; }\n\n.col-4 {\n width: 33.33333%; }\n\n.offset-4 {\n margin-left: 33.33333%; }\n\n.col-5 {\n width: 41.66667%; }\n\n.offset-5 {\n margin-left: 41.66667%; }\n\n.col-6 {\n width: 50%; }\n\n.offset-6 {\n margin-left: 50%; }\n\n.col-7 {\n width: 58.33333%; }\n\n.offset-7 {\n margin-left: 58.33333%; }\n\n.col-8 {\n width: 66.66667%; }\n\n.offset-8 {\n margin-left: 66.66667%; }\n\n.col-9 {\n width: 75%; }\n\n.offset-9 {\n margin-left: 75%; }\n\n.col-10 {\n width: 83.33333%; }\n\n.offset-10 {\n margin-left: 83.33333%; }\n\n.col-11 {\n width: 91.66667%; }\n\n.offset-11 {\n margin-left: 91.66667%; }\n\n.col-12 {\n width: 100%; }\n\n.offset-12 {\n margin-left: 100%; }\n\n.gutters > .col-1 {\n width: calc(8.33333% - 2%); }\n\n.gutters > .offset-1 {\n margin-left: calc(8.33333% + 2%) !important; }\n\n.gutters > .col-2 {\n width: calc(16.66667% - 2%); }\n\n.gutters > .offset-2 {\n margin-left: calc(16.66667% + 2%) !important; }\n\n.gutters > .col-3 {\n width: calc(25% - 2%); }\n\n.gutters > .offset-3 {\n margin-left: calc(25% + 2%) !important; }\n\n.gutters > .col-4 {\n width: calc(33.33333% - 2%); }\n\n.gutters > .offset-4 {\n margin-left: calc(33.33333% + 2%) !important; }\n\n.gutters > .col-5 {\n width: calc(41.66667% - 2%); }\n\n.gutters > .offset-5 {\n margin-left: calc(41.66667% + 2%) !important; }\n\n.gutters > .col-6 {\n width: calc(50% - 2%); }\n\n.gutters > .offset-6 {\n margin-left: calc(50% + 2%) !important; }\n\n.gutters > .col-7 {\n width: calc(58.33333% - 2%); }\n\n.gutters > .offset-7 {\n margin-left: calc(58.33333% + 2%) !important; }\n\n.gutters > .col-8 {\n width: calc(66.66667% - 2%); }\n\n.gutters > .offset-8 {\n margin-left: calc(66.66667% + 2%) !important; }\n\n.gutters > .col-9 {\n width: calc(75% - 2%); }\n\n.gutters > .offset-9 {\n margin-left: calc(75% + 2%) !important; }\n\n.gutters > .col-10 {\n width: calc(83.33333% - 2%); }\n\n.gutters > .offset-10 {\n margin-left: calc(83.33333% + 2%) !important; }\n\n.gutters > .col-11 {\n width: calc(91.66667% - 2%); }\n\n.gutters > .offset-11 {\n margin-left: calc(91.66667% + 2%) !important; }\n\n.gutters > .col-12 {\n width: calc(100% - 2%); }\n\n.gutters > .offset-12 {\n margin-left: calc(100% + 2%) !important; }\n\n@media (max-width: 1230px) {\n [class^='offset-'],\n [class*=' offset-'] {\n margin-left: 0; } }\n\n.first {\n order: -1; }\n\n.last {\n order: 1; }\n\n@media (max-width: 1230px) {\n .row .col {\n margin-left: 0;\n width: 100%; }\n .row.gutters .col {\n margin-bottom: 16px; }\n .first-sm {\n order: -1; }\n .last-sm {\n order: 1; } }\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n max-width: 100%;\n width: 100%;\n empty-cells: show;\n font-size: 15px;\n line-height: 24px; }\n\ntable caption {\n text-align: left;\n font-size: 14px;\n font-weight: 500;\n color: #676b72; }\n\nth {\n text-align: left;\n font-weight: 700;\n vertical-align: bottom; }\n\ntd {\n vertical-align: top; }\n\ntr.align-middle td,\ntd.align-middle {\n vertical-align: middle; }\n\nth,\ntd {\n padding: 1rem 1rem;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05); }\n th:first-child,\n td:first-child {\n padding-left: 0; }\n th:last-child,\n td:last-child {\n padding-right: 0; }\n\ntfoot th,\ntfoot td {\n color: rgba(49, 52, 57, 0.5); }\n\ntable.bordered td,\ntable.bordered th {\n border: 1px solid rgba(0, 0, 0, 0.05); }\n\ntable.striped tr:nth-child(odd) td {\n background: #f8f8f8; }\n\ntable.bordered td:first-child,\ntable.bordered th:first-child,\ntable.striped td:first-child,\ntable.striped th:first-child {\n padding-left: 1rem; }\n\ntable.bordered td:last-child,\ntable.bordered th:last-child,\ntable.striped td:last-child,\ntable.striped th:last-child {\n padding-right: 1rem; }\n\ntable.unstyled td,\ntable.unstyled th {\n border: none;\n padding: 0; }\n\nfieldset {\n font-family: inherit;\n border: 1px solid rgba(0, 0, 0, 0.1);\n padding: 2rem;\n margin-bottom: 2rem;\n margin-top: 2rem; }\n\nlegend {\n font-weight: bold;\n font-size: 12px;\n text-transform: uppercase;\n padding: 0 1rem;\n margin-left: -1rem;\n top: 2px;\n position: relative;\n line-height: 0; }\n\ninput,\ntextarea,\nselect {\n display: block;\n width: 100%;\n font-family: inherit;\n font-size: 15px;\n height: 40px;\n outline: none;\n vertical-align: middle;\n background-color: #fff;\n border: 1px solid #d4d4d4;\n border-radius: 3px;\n box-shadow: none;\n padding: 0 12px; }\n\ninput.small,\ntextarea.small,\nselect.small {\n height: 36px;\n font-size: 13px;\n padding: 0 12px;\n border-radius: 3px; }\n\ninput.big,\ntextarea.big,\nselect.big {\n height: 48px;\n font-size: 17px;\n padding: 0 12px;\n border-radius: 3px; }\n\ninput:focus,\ntextarea:focus,\nselect:focus {\n outline: none;\n background-color: #fff;\n border-color: #1c86f2;\n box-shadow: 0 0 1px #1c86f2 inset; }\n\ninput.error,\ntextarea.error,\nselect.error {\n background-color: rgba(240, 60, 105, 0.1);\n border: 1px solid #f583a0; }\n input.error:focus,\n textarea.error:focus,\n select.error:focus {\n border-color: #f03c69;\n box-shadow: 0 0 1px #f03c69 inset; }\n\ninput.success,\ntextarea.success,\nselect.success {\n background-color: rgba(53, 190, 177, 0.1);\n border: 1px solid #6ad5cb; }\n input.success:focus,\n textarea.success:focus,\n select.success:focus {\n border-color: #35beb1;\n box-shadow: 0 0 1px #35beb1 inset; }\n\ninput:disabled, input.disabled,\ntextarea:disabled,\ntextarea.disabled,\nselect:disabled,\nselect.disabled {\n resize: none;\n opacity: 0.6;\n cursor: default;\n font-style: italic;\n color: rgba(0, 0, 0, 0.5); }\n\nselect {\n -webkit-appearance: none;\n background-image: url('data:image/svg+xml;utf8,');\n background-repeat: no-repeat;\n background-position: right 1rem center; }\n\nselect[multiple] {\n background-image: none;\n height: auto;\n padding: .5rem .75rem; }\n\ntextarea {\n height: auto;\n padding: 8px 12px;\n line-height: 24px;\n vertical-align: top; }\n\ninput[type=\"file\"] {\n width: auto;\n border: none;\n padding: 0;\n height: auto;\n background: none;\n box-shadow: none;\n display: inline-block; }\n\ninput[type=\"search\"],\ninput.search {\n background-repeat: no-repeat;\n background-position: 8px 53%;\n background-image: url('data:image/svg+xml;utf8,');\n padding-left: 32px; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n display: inline-block;\n width: auto;\n height: auto;\n padding: 0; }\n\nlabel {\n display: block;\n color: #313439;\n margin-bottom: 4px;\n font-size: 15px; }\n label.checkbox,\n label .desc,\n label .success,\n label .error {\n text-transform: none;\n font-weight: normal; }\n label.checkbox {\n font-size: 16px;\n line-height: 24px;\n cursor: pointer;\n color: inherit; }\n label.checkbox input {\n margin-top: 0; }\n\n.form-checkboxes label.checkbox {\n display: inline-block;\n margin-right: 16px; }\n\n.req {\n position: relative;\n top: 1px;\n font-weight: bold;\n color: #f03c69;\n font-size: 110%; }\n\n.desc {\n color: rgba(49, 52, 57, 0.5);\n font-size: 12px;\n line-height: 20px; }\n\nspan.desc {\n margin-left: 4px; }\n\ndiv.desc {\n margin-top: 4px;\n margin-bottom: -8px; }\n\n.form-buttons button,\n.form-buttons .button {\n margin-right: 8px; }\n\nform,\n.form-item {\n margin-bottom: 2rem; }\n\n.form > .form-item:last-child {\n margin-bottom: 0; }\n\n.form .row:last-child .form-item {\n margin-bottom: 0; }\n\n.form span.success,\n.form span.error {\n font-size: 12px;\n line-height: 20px;\n margin-left: 4px; }\n\n.form-inline input,\n.form-inline textarea,\n.form-inline select {\n display: inline-block;\n width: auto; }\n\n.append,\n.prepend {\n display: flex; }\n .append input,\n .prepend input {\n flex: 1; }\n .append .button,\n .append span,\n .prepend .button,\n .prepend span {\n flex-shrink: 0; }\n .append span,\n .prepend span {\n display: flex;\n flex-direction: column;\n justify-content: center;\n font-weight: normal;\n border: 1px solid #d4d4d4;\n background-color: #f8f8f8;\n padding: 0 .875rem;\n color: rgba(0, 0, 0, 0.5);\n font-size: 12px;\n white-space: nowrap; }\n\n.prepend input {\n border-radius: 0 3px 3px 0; }\n\n.prepend .button {\n margin-right: -1px;\n border-radius: 3px 0 0 3px !important; }\n\n.prepend span {\n border-right: none;\n border-radius: 3px 0 0 3px; }\n\n.append input {\n border-radius: 3px 0 0 3px; }\n\n.append .button {\n margin-left: -1px;\n border-radius: 0 3px 3px 0 !important; }\n\n.append span {\n border-left: none;\n border-radius: 0 3px 3px 0; }\n\nbutton,\n.button {\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n font-size: 15px;\n color: #fff;\n background-color: #1c86f2;\n border-radius: 3px;\n min-height: 40px;\n padding: 8px 20px;\n font-weight: 500;\n text-decoration: none;\n cursor: pointer;\n display: inline-block;\n line-height: 20px;\n border: 1px solid transparent;\n vertical-align: middle;\n -webkit-appearance: none; }\n button i,\n .button i {\n position: relative;\n top: 1px;\n margin: 0 2px; }\n\ninput[type=\"submit\"] {\n width: auto; }\n\nbutton:hover,\n.button:hover {\n outline: none;\n text-decoration: none;\n color: #fff;\n background-color: #4ca0f5; }\n\n.button:disabled,\n.button.disabled {\n cursor: default;\n font-style: normal;\n color: rgba(255, 255, 255, 0.7);\n background-color: rgba(28, 134, 242, 0.7); }\n\n.button.small {\n font-size: 13px;\n min-height: 36px;\n padding: 6px 20px;\n border-radius: 3px; }\n\n.button.big {\n font-size: 17px;\n min-height: 48px;\n padding: 13px 24px;\n border-radius: 3px; }\n\n.button.large {\n font-size: 19px;\n min-height: 56px;\n padding: 20px 36px;\n border-radius: 3px; }\n\n.button.outline {\n background: none;\n border-width: 2px;\n border-color: #1c86f2;\n color: #1c86f2; }\n .button.outline:hover {\n background: none;\n color: rgba(28, 134, 242, 0.6);\n border-color: rgba(28, 134, 242, 0.5); }\n .button.outline:disabled, .button.outline.disabled {\n background: none;\n color: rgba(28, 134, 242, 0.7);\n border-color: rgba(28, 134, 242, 0.5); }\n\n.button.inverted {\n color: #000;\n background-color: #fff; }\n .button.inverted:hover {\n color: #000;\n background-color: white; }\n .button.inverted:disabled, .button.inverted.disabled {\n color: rgba(0, 0, 0, 0.7);\n background-color: rgba(255, 255, 255, 0.7); }\n .button.inverted.outline {\n background: none;\n color: #fff;\n border-color: #fff; }\n .button.inverted.outline:hover {\n color: rgba(255, 255, 255, 0.6);\n border-color: rgba(255, 255, 255, 0.5); }\n .button.inverted.outline:disabled, .button.inverted.outline.disabled {\n background: none;\n color: rgba(255, 255, 255, 0.7);\n border-color: rgba(255, 255, 255, 0.5); }\n .button.inverted:hover {\n opacity: .7; }\n\n.button.round {\n border-radius: 56px; }\n\n.button.raised {\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); }\n\n.button.upper {\n text-transform: uppercase;\n letter-spacing: .04em;\n font-size: 13px; }\n .button.upper.small {\n font-size: 11px; }\n .button.upper.big {\n font-size: 13px; }\n .button.upper.large {\n font-size: 15px; }\n\n.button.secondary {\n color: #fff;\n background-color: #313439; }\n .button.secondary:hover {\n color: #fff;\n background-color: #606670; }\n .button.secondary:disabled, .button.secondary.disabled {\n color: rgba(255, 255, 255, 0.7);\n background-color: rgba(49, 52, 57, 0.7); }\n .button.secondary.outline {\n background: none;\n color: #313439;\n border-color: #313439; }\n .button.secondary.outline:hover {\n color: rgba(49, 52, 57, 0.6);\n border-color: rgba(49, 52, 57, 0.5); }\n .button.secondary.outline:disabled, .button.secondary.outline.disabled {\n background: none;\n color: rgba(49, 52, 57, 0.7);\n border-color: rgba(49, 52, 57, 0.5); }\n\n.label {\n display: inline-block;\n font-size: 13px;\n background: #e0e1e1;\n line-height: 18px;\n padding: 0 10px;\n font-weight: 500;\n color: #313439;\n border: 1px solid transparent;\n vertical-align: middle;\n text-decoration: none;\n border-radius: 4px; }\n .label a,\n .label a:hover {\n color: inherit;\n text-decoration: none; }\n\n.label.big {\n font-size: 14px;\n line-height: 24px;\n padding: 0 12px; }\n\n.label.upper {\n text-transform: uppercase;\n font-size: 11px; }\n\n.label.outline {\n background: none;\n border-color: #bdbdbd; }\n\n.label.badge {\n text-align: center;\n border-radius: 64px;\n padding: 0 6px; }\n .label.badge.big {\n padding: 0 8px; }\n\n.label.tag {\n padding: 0;\n background: none;\n border: none;\n text-transform: uppercase;\n font-size: 11px; }\n .label.tag.big {\n font-size: 13px; }\n\n.label.success {\n background: #35beb1;\n color: #fff; }\n .label.success.tag, .label.success.outline {\n background: none;\n border-color: #35beb1;\n color: #35beb1; }\n\n.label.error {\n background: #f03c69;\n color: #fff; }\n .label.error.tag, .label.error.outline {\n background: none;\n border-color: #f03c69;\n color: #f03c69; }\n\n.label.warning {\n background: #f7ba45;\n color: #0d0d0e; }\n .label.warning.tag, .label.warning.outline {\n background: none;\n border-color: #f7ba45;\n color: #f7ba45; }\n\n.label.focus {\n background: #1c86f2;\n color: #fff; }\n .label.focus.tag, .label.focus.outline {\n background: none;\n border-color: #1c86f2;\n color: #1c86f2; }\n\n.label.black {\n background: #0d0d0e;\n color: #fff; }\n .label.black.tag, .label.black.outline {\n background: none;\n border-color: #0d0d0e;\n color: #0d0d0e; }\n\n.label.inverted {\n background: #fff;\n color: #0d0d0e; }\n .label.inverted.tag, .label.inverted.outline {\n background: none;\n border-color: #fff;\n color: #fff; }\n\n.breadcrumbs {\n font-size: 14px;\n margin-bottom: 24px; }\n .breadcrumbs ul {\n display: flex;\n align-items: center; }\n .breadcrumbs.push-center ul {\n justify-content: center; }\n .breadcrumbs span,\n .breadcrumbs a {\n font-style: normal;\n padding: 0 10px;\n display: inline-block;\n white-space: nowrap; }\n .breadcrumbs li:after {\n display: inline-block;\n content: '/';\n color: rgba(0, 0, 0, 0.3); }\n .breadcrumbs li:last-child:after {\n display: none; }\n .breadcrumbs li:first-child span,\n .breadcrumbs li:first-child a {\n padding-left: 0; }\n .breadcrumbs li.active a {\n color: #313439;\n text-decoration: none;\n cursor: text; }\n\n.pagination {\n margin: 24px 0;\n font-size: 14px; }\n .pagination ul {\n display: flex;\n margin: 0; }\n .pagination.align-center ul {\n justify-content: center; }\n .pagination span,\n .pagination a {\n border-radius: 3px;\n display: inline-block;\n padding: 8px 12px;\n line-height: 1;\n white-space: nowrap;\n border: 1px solid transparent; }\n .pagination a {\n text-decoration: none;\n color: #313439; }\n .pagination a:hover {\n color: rgba(0, 0, 0, 0.5);\n border-color: #e0e1e1; }\n .pagination span,\n .pagination li.active a {\n color: rgba(0, 0, 0, 0.5);\n border-color: #e0e1e1;\n cursor: text; }\n .pagination.upper {\n font-size: 12px; }\n\n.pager span {\n line-height: 24px; }\n\n.pager span,\n.pager a {\n padding-left: 16px;\n padding-right: 16px;\n border-radius: 64px;\n border-color: rgba(0, 0, 0, 0.1); }\n\n.pager li {\n flex-basis: 50%; }\n\n.pager li.next {\n text-align: right; }\n\n.pager.align-center li {\n flex-basis: auto;\n margin-left: 4px;\n margin-right: 4px; }\n\n.pager.flat span,\n.pager.flat a {\n border: none;\n display: block;\n padding: 0; }\n\n.pager.flat a {\n font-weight: bold; }\n .pager.flat a:hover {\n background: none;\n text-decoration: underline; }\n\n@media (max-width: 1230px) {\n .pager.flat ul {\n flex-direction: column; }\n .pager.flat li {\n flex-basis: 100%;\n margin-bottom: 8px;\n text-align: left; } }\n\n@font-face {\n font-family: 'Kube';\n src: url(\"data:application/x-font-ttf;charset=utf-8;base64,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\") format(\"truetype\");\n font-weight: normal;\n font-style: normal; }\n\n[class^=\"kube-\"], [class*=\" kube-\"], .close, .caret {\n /* use !important to prevent issues with browser extensions that change fonts */\n font-family: 'Kube' !important;\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n line-height: 1;\n /* Better Font Rendering =========== */\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale; }\n\n.kube-calendar:before {\n content: \"\\e900\"; }\n\n.caret.down:before,\n.kube-caret-down:before {\n content: \"\\e901\"; }\n\n.caret.left:before,\n.kube-caret-left:before {\n content: \"\\e902\"; }\n\n.caret.right:before,\n.kube-caret-right:before {\n content: \"\\e903\"; }\n\n.caret.up:before,\n.kube-caret-up:before {\n content: \"\\e904\"; }\n\n.close:before,\n.kube-close:before {\n content: \"\\e905\"; }\n\n.kube-menu:before {\n content: \"\\e906\"; }\n\n.kube-search:before {\n content: \"\\e907\"; }\n\n.gutters .column.push-left,\n.push-left {\n margin-right: auto; }\n\n.gutters .column.push-right,\n.push-right {\n margin-left: auto; }\n\n.gutters .column.push-center,\n.push-center {\n margin-left: auto;\n margin-right: auto; }\n\n.gutters .column.push-middle,\n.push-middle {\n margin-top: auto;\n margin-bottom: auto; }\n\n.push-bottom {\n margin-top: auto; }\n\n@media (max-width: 1230px) {\n .gutters .column.push-left-sm,\n .push-left-sm {\n margin-left: 0; }\n .gutters .column.push-center-sm,\n .push-center-sm {\n margin-left: auto;\n margin-right: auto; }\n .push-top-sm {\n margin-top: 0; } }\n\n.align-middle {\n align-items: center; }\n\n.align-right {\n justify-content: flex-end; }\n\n.align-center {\n justify-content: center; }\n\n@media (max-width: 1230px) {\n .align-left-sm {\n justify-content: flex-start; } }\n\n.float-right {\n float: right; }\n\n.float-left {\n float: left; }\n\n@media (max-width: 1230px) {\n .float-right {\n float: none; }\n .float-left {\n float: none; } }\n\n.fixed {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 100;\n width: 100%; }\n\n.w5 {\n width: 5%; }\n\n.w10 {\n width: 10%; }\n\n.w15 {\n width: 15%; }\n\n.w20 {\n width: 20%; }\n\n.w25 {\n width: 25%; }\n\n.w30 {\n width: 30%; }\n\n.w35 {\n width: 35%; }\n\n.w40 {\n width: 40%; }\n\n.w45 {\n width: 45%; }\n\n.w50 {\n width: 50%; }\n\n.w55 {\n width: 55%; }\n\n.w60 {\n width: 60%; }\n\n.w65 {\n width: 65%; }\n\n.w70 {\n width: 70%; }\n\n.w75 {\n width: 75%; }\n\n.w80 {\n width: 80%; }\n\n.w85 {\n width: 85%; }\n\n.w90 {\n width: 90%; }\n\n.w95 {\n width: 95%; }\n\n.w100 {\n width: 100%; }\n\n.w-auto {\n width: auto; }\n\n.w-small {\n width: 480px; }\n\n.w-medium {\n width: 600px; }\n\n.w-big {\n width: 740px; }\n\n.w-large {\n width: 840px; }\n\n@media (max-width: 1230px) {\n .w-auto-sm {\n width: auto; }\n .w100-sm,\n .w-small,\n .w-medium,\n .w-big,\n .w-large {\n width: 100%; } }\n\n.max-w5 {\n max-width: 5%; }\n\n.max-w10 {\n max-width: 10%; }\n\n.max-w15 {\n max-width: 15%; }\n\n.max-w20 {\n max-width: 20%; }\n\n.max-w25 {\n max-width: 25%; }\n\n.max-w30 {\n max-width: 30%; }\n\n.max-w35 {\n max-width: 35%; }\n\n.max-w40 {\n max-width: 40%; }\n\n.max-w45 {\n max-width: 45%; }\n\n.max-w50 {\n max-width: 50%; }\n\n.max-w55 {\n max-width: 55%; }\n\n.max-w60 {\n max-width: 60%; }\n\n.max-w65 {\n max-width: 65%; }\n\n.max-w70 {\n max-width: 70%; }\n\n.max-w75 {\n max-width: 75%; }\n\n.max-w80 {\n max-width: 80%; }\n\n.max-w85 {\n max-width: 85%; }\n\n.max-w90 {\n max-width: 90%; }\n\n.max-w95 {\n max-width: 95%; }\n\n.max-w100 {\n max-width: 100%; }\n\n.max-w-small {\n max-width: 480px; }\n\n.max-w-medium {\n max-width: 600px; }\n\n.max-w-big {\n max-width: 740px; }\n\n.max-w-large {\n max-width: 840px; }\n\n@media (max-width: 1230px) {\n .max-w-auto-sm,\n .max-w-small,\n .max-w-medium,\n .max-w-big,\n .max-w-large {\n max-width: auto; } }\n\n.min-w5 {\n min-width: 5%; }\n\n.min-w10 {\n min-width: 10%; }\n\n.min-w15 {\n min-width: 15%; }\n\n.min-w20 {\n min-width: 20%; }\n\n.min-w25 {\n min-width: 25%; }\n\n.min-w30 {\n min-width: 30%; }\n\n.min-w35 {\n min-width: 35%; }\n\n.min-w40 {\n min-width: 40%; }\n\n.min-w45 {\n min-width: 45%; }\n\n.min-w50 {\n min-width: 50%; }\n\n.min-w55 {\n min-width: 55%; }\n\n.min-w60 {\n min-width: 60%; }\n\n.min-w65 {\n min-width: 65%; }\n\n.min-w70 {\n min-width: 70%; }\n\n.min-w75 {\n min-width: 75%; }\n\n.min-w80 {\n min-width: 80%; }\n\n.min-w85 {\n min-width: 85%; }\n\n.min-w90 {\n min-width: 90%; }\n\n.min-w95 {\n min-width: 95%; }\n\n.min-w100 {\n min-width: 100%; }\n\n.h25 {\n height: 25%; }\n\n.h50 {\n height: 50%; }\n\n.h100 {\n height: 100%; }\n\n.group:after {\n content: '';\n display: table;\n clear: both; }\n\n.flex {\n display: flex; }\n\n@media (max-width: 1230px) {\n .flex-column-sm {\n flex-direction: column; }\n .flex-w100-sm {\n flex: 0 0 100%; } }\n @media (max-width: 1230px) and (max-width: 1230px) {\n .flex-w100-sm {\n flex: 0 0 100% !important; } }\n\n.invisible {\n visibility: hidden; }\n\n.visible {\n visibility: visible; }\n\n.display-block {\n display: block; }\n\n.hide {\n display: none !important; }\n\n@media (max-width: 1230px) {\n .hide-sm {\n display: none !important; } }\n\n@media (min-width: 1230px) {\n .show-sm {\n display: none !important; } }\n\n@media print {\n .hide-print {\n display: none !important; }\n .show-print {\n display: block !important; } }\n\n.no-scroll {\n overflow: hidden;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100% !important; }\n\n.scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll; }\n\n.video-container {\n height: 0;\n padding-bottom: 56.25%;\n position: relative;\n margin-bottom: 16px; }\n .video-container iframe,\n .video-container object,\n .video-container embed {\n position: absolute;\n top: 0;\n left: 0;\n width: 100% !important;\n height: 100% !important; }\n\n.close {\n display: inline-block;\n min-height: 16px;\n min-width: 16px;\n line-height: 16px;\n vertical-align: middle;\n text-align: center;\n font-size: 12px;\n opacity: .6; }\n .close:hover {\n opacity: 1; }\n .close.small {\n font-size: 8px; }\n .close.big {\n font-size: 18px; }\n .close.white {\n color: #fff; }\n\n.caret {\n display: inline-block; }\n\n.button .caret {\n margin-right: -8px; }\n\n.overlay {\n position: fixed;\n z-index: 200;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(255, 255, 255, 0.95); }\n .overlay > .close {\n position: fixed;\n top: 1rem;\n right: 1rem; }\n\n@media print {\n * {\n background: transparent !important;\n color: black !important;\n box-shadow: none !important;\n text-shadow: none !important; }\n a,\n a:visited {\n text-decoration: underline; }\n pre, blockquote {\n border: 1px solid #999;\n page-break-inside: avoid; }\n p, h2, h3 {\n orphans: 3;\n widows: 3; }\n thead {\n display: table-header-group; }\n tr, img {\n page-break-inside: avoid; }\n img {\n max-width: 100% !important; }\n h2, h3, h4 {\n page-break-after: avoid; }\n @page {\n margin: 0.5cm; } }\n\n@keyframes slideUp {\n to {\n height: 0;\n padding-top: 0;\n padding-bottom: 0; } }\n\n@keyframes slideDown {\n from {\n height: 0;\n padding-top: 0;\n padding-bottom: 0; } }\n\n@keyframes fadeIn {\n from {\n opacity: 0; }\n to {\n opacity: 1; } }\n\n@keyframes fadeOut {\n from {\n opacity: 1; }\n to {\n opacity: 0; } }\n\n@keyframes flipIn {\n from {\n opacity: 0;\n transform: scaleY(0); }\n to {\n opacity: 1;\n transform: scaleY(1); } }\n\n@keyframes flipOut {\n from {\n opacity: 1;\n transform: scaleY(1); }\n to {\n opacity: 0;\n transform: scaleY(0); } }\n\n@keyframes zoomIn {\n from {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3); }\n 50% {\n opacity: 1; } }\n\n@keyframes zoomOut {\n from {\n opacity: 1; }\n 50% {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3); }\n to {\n opacity: 0; } }\n\n@keyframes slideInRight {\n from {\n transform: translate3d(100%, 0, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideInLeft {\n from {\n transform: translate3d(-100%, 0, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideInDown {\n from {\n transform: translate3d(0, -100%, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideOutLeft {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(-100%, 0, 0); } }\n\n@keyframes slideOutRight {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(100%, 0, 0); } }\n\n@keyframes slideOutUp {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(0, -100%, 0); } }\n\n@keyframes rotate {\n from {\n transform: rotate(0deg); }\n to {\n transform: rotate(360deg); } }\n\n@keyframes pulse {\n from {\n transform: scale3d(1, 1, 1); }\n 50% {\n transform: scale3d(1.03, 1.03, 1.03); }\n to {\n transform: scale3d(1, 1, 1); } }\n\n@keyframes shake {\n 15% {\n transform: translateX(0.5rem); }\n 30% {\n transform: translateX(-0.4rem); }\n 45% {\n transform: translateX(0.3rem); }\n 60% {\n transform: translateX(-0.2rem); }\n 75% {\n transform: translateX(0.1rem); }\n 90% {\n transform: translateX(0); }\n 90% {\n transform: translateX(0); } }\n\n.fadeIn {\n animation: fadeIn 250ms; }\n\n.fadeOut {\n animation: fadeOut 250ms; }\n\n.zoomIn {\n animation: zoomIn 200ms; }\n\n.zoomOut {\n animation: zoomOut 500ms; }\n\n.slideInRight {\n animation: slideInRight 500ms; }\n\n.slideInLeft {\n animation: slideInLeft 500ms; }\n\n.slideInDown {\n animation: slideInDown 500ms; }\n\n.slideOutLeft {\n animation: slideOutLeft 500ms; }\n\n.slideOutRight {\n animation: slideOutRight 500ms; }\n\n.slideOutUp {\n animation: slideOutUp 500ms; }\n\n.slideUp {\n overflow: hidden;\n animation: slideUp 200ms ease-in-out; }\n\n.slideDown {\n overflow: hidden;\n animation: slideDown 80ms ease-in-out; }\n\n.flipIn {\n animation: flipIn 250ms cubic-bezier(0.5, -0.5, 0.5, 1.5); }\n\n.flipOut {\n animation: flipOut 500ms cubic-bezier(0.5, -0.5, 0.5, 1.5); }\n\n.rotate {\n animation: rotate 500ms; }\n\n.pulse {\n animation: pulse 250ms 2; }\n\n.shake {\n animation: shake 500ms; }\n\n.dropdown {\n position: absolute;\n z-index: 100;\n top: 0;\n right: 0;\n width: 280px;\n color: #000;\n font-size: 15px;\n background: #fff;\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);\n border-radius: 3px;\n max-height: 300px;\n margin: 0;\n padding: 0;\n overflow: hidden; }\n .dropdown.dropdown-mobile {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n max-height: none;\n border: none; }\n .dropdown .close {\n margin: 20px auto; }\n .dropdown.open {\n overflow: auto; }\n .dropdown ul {\n list-style: none;\n margin: 0; }\n .dropdown ul li {\n border-bottom: 1px solid rgba(0, 0, 0, 0.07); }\n .dropdown ul li:last-child {\n border-bottom: none; }\n .dropdown ul a {\n display: block;\n padding: 12px;\n text-decoration: none;\n color: #000; }\n .dropdown ul a:hover {\n background: rgba(0, 0, 0, 0.05); }\n\n.message {\n font-family: Consolas, Monaco, \"Courier New\", monospace;\n font-size: 14px;\n line-height: 20px;\n background: #e0e1e1;\n color: #313439;\n padding: 1rem;\n padding-right: 2.5em;\n padding-bottom: .75rem;\n margin-bottom: 24px;\n position: relative; }\n .message a {\n color: inherit; }\n .message h2,\n .message h3,\n .message h4,\n .message h5,\n .message h6 {\n margin-bottom: 0; }\n .message .close {\n position: absolute;\n right: 1rem;\n top: 1.1rem; }\n\n.message.error {\n background: #f03c69;\n color: #fff; }\n\n.message.success {\n background: #35beb1;\n color: #fff; }\n\n.message.warning {\n background: #f7ba45; }\n\n.message.focus {\n background: #1c86f2;\n color: #fff; }\n\n.message.black {\n background: #0d0d0e;\n color: #fff; }\n\n.message.inverted {\n background: #fff; }\n\n.modal-box {\n position: fixed;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n overflow-x: hidden;\n overflow-y: auto;\n z-index: 200; }\n\n.modal {\n position: relative;\n margin: auto;\n margin-top: 16px;\n padding: 0;\n background: #fff;\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);\n border-radius: 8px;\n color: #000; }\n @media (max-width: 1230px) {\n .modal input,\n .modal textarea {\n font-size: 16px; } }\n .modal .close {\n position: absolute;\n top: 18px;\n right: 16px;\n opacity: .3; }\n .modal .close:hover {\n opacity: 1; }\n\n.modal-header {\n padding: 24px 32px;\n font-size: 18px;\n font-weight: bold;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05); }\n .modal-header:empty {\n display: none; }\n\n.modal-body {\n padding: 36px 56px; }\n\n@media (max-width: 1230px) {\n .modal-header,\n .modal-body {\n padding: 24px; } }\n\n.offcanvas {\n background: #fff;\n position: fixed;\n padding: 24px;\n height: 100%;\n top: 0;\n left: 0;\n z-index: 300;\n overflow-y: scroll; }\n\n.offcanvas .close {\n position: absolute;\n top: 8px;\n right: 8px; }\n\n.offcanvas-left {\n border-right: 1px solid rgba(0, 0, 0, 0.1); }\n\n.offcanvas-right {\n left: auto;\n right: 0;\n border-left: 1px solid rgba(0, 0, 0, 0.1); }\n\n.offcanvas-push-body {\n position: relative; }\n\n.tabs {\n margin-bottom: 24px;\n font-size: 14px; }\n .tabs li em,\n .tabs li.active a {\n color: #313439;\n border: 1px solid rgba(0, 0, 0, 0.1);\n cursor: default;\n text-decoration: none;\n background: none; }\n .tabs em,\n .tabs a {\n position: relative;\n top: 1px;\n font-style: normal;\n display: block;\n padding: .5rem 1rem;\n border: 1px solid transparent;\n color: rgba(0, 0, 0, 0.5);\n text-decoration: none; }\n .tabs a:hover {\n -moz-transition: all linear 0.2s;\n transition: all linear 0.2s;\n color: #313439;\n text-decoration: underline;\n background-color: #e0e1e1; }\n\n@media (min-width: 1230px) {\n .tabs ul {\n display: flex;\n margin-top: -1px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1); }\n .tabs li em,\n .tabs li.active a {\n border-bottom: 1px solid #fff; } }\n",".mg-active-datapoint {\n fill: black;\n font-size: 0.9rem;\n font-weight: 400;\n opacity: 0.8;\n}\n\n.mg-area1-color {\n fill: #0000ff;\n}\n\n.mg-area2-color {\n fill: #05b378;\n}\n\n.mg-area3-color {\n fill: #db4437;\n}\n\n.mg-area4-color {\n fill: #f8b128;\n}\n\n.mg-area5-color {\n fill: #5c5c5c;\n}\n\ntext.mg-barplot-group-label {\n font-weight:900;\n}\n\n.mg-barplot rect.mg-bar {\n shape-rendering: auto;\n}\n\n.mg-barplot rect.mg-bar.default-bar {\n fill: #b6b6fc;\n}\n\n.mg-barplot rect.mg-bar.default-active {\n fill: #9e9efc;\n}\n\n.mg-barplot .mg-bar-prediction {\n fill: #5b5b5b;\n}\n\n.mg-barplot .mg-bar-baseline {\n stroke: #5b5b5b;\n stroke-width: 2;\n}\n\n.mg-bar-target-element {\n font-size:11px;\n padding-left:5px;\n padding-right:5px;\n font-weight:300;\n}\n\n.mg-baselines line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-baselines text {\n fill: black;\n font-size: 0.9rem;\n opacity: 0.6;\n stroke: none;\n}\n\n.mg-baselines-small text {\n font-size: 0.6rem;\n}\n\n.mg-category-guides line {\n stroke: #b3b2b2;\n}\n\n.mg-header {\n cursor: default;\n font-size: 1.2rem;\n}\n\n.mg-header .mg-chart-description {\n fill: #ccc;\n font-family: FontAwesome;\n font-size: 1.2rem;\n}\n\n.mg-header .mg-warning {\n fill: #ccc;\n font-family: FontAwesome;\n font-size: 1.2rem;\n}\n\n.mg-points circle {\n opacity: 0.65;\n}\n\n.mg-popover {\n font-size: 0.95rem;\n}\n\n.mg-popover-content {\n cursor: auto;\n line-height: 17px;\n}\n\n.mg-data-table {\n margin-top: 30px;\n}\n\n.mg-data-table thead tr th {\n border-bottom: 1px solid darkgray;\n cursor: default;\n font-size: 1.1rem;\n font-weight: normal;\n padding: 5px 5px 8px 5px;\n text-align: right;\n}\n\n.mg-data-table thead tr th .fa {\n color: #ccc;\n padding-left: 4px;\n}\n\n.mg-data-table thead tr th .popover {\n font-size: 1rem;\n font-weight: normal;\n}\n\n.mg-data-table .secondary-title {\n color: darkgray;\n}\n\n.mg-data-table tbody tr td {\n margin: 2px;\n padding: 5px;\n vertical-align: top;\n}\n\n.mg-data-table tbody tr td.table-text {\n opacity: 0.8;\n padding-left: 30px;\n}\n\n.mg-y-axis line.mg-extended-yax-ticks {\n opacity: 0.4;\n}\n\n.mg-x-axis line.mg-extended-xax-ticks {\n opacity: 0.4;\n}\n\n.mg-histogram .axis path,\n.mg-histogram .axis line {\n fill: none;\n opacity: 0.7;\n shape-rendering: auto;\n stroke: #ccc;\n}\n\ntspan.hist-symbol {\n fill: #9e9efc;\n}\n\n.mg-histogram .mg-bar rect {\n fill: #b6b6fc;\n shape-rendering: auto;\n}\n\n.mg-histogram .mg-bar rect.active {\n fill: #9e9efc;\n}\n\n.mg-least-squares-line {\n stroke: red;\n stroke-width: 1px;\n}\n\n.mg-lowess-line {\n fill: none;\n stroke: red;\n}\n\n.mg-line1-color {\n stroke: #4040e8;\n}\n\n.mg-hover-line1-color {\n fill: #4040e8;\n}\n\n.mg-line2-color {\n stroke: #05b378;\n}\n\n.mg-hover-line2-color {\n fill: #05b378;\n}\n\n.mg-line3-color {\n stroke: #db4437;\n}\n\n.mg-hover-line3-color {\n fill: #db4437;\n}\n\n.mg-line4-color {\n stroke: #f8b128;\n}\n\n.mg-hover-line4-color {\n fill: #f8b128;\n}\n\n.mg-line5-color {\n stroke: #5c5c5c;\n}\n\n.mg-hover-line5-color {\n fill: #5c5c5c;\n}\n\n.mg-line-legend text {\n font-size: 0.9rem;\n font-weight: 300;\n stroke: none;\n}\n\n.mg-line1-legend-color {\n color: #4040e8;\n fill: #4040e8;\n}\n\n.mg-line2-legend-color {\n color: #05b378;\n fill: #05b378;\n}\n\n.mg-line3-legend-color {\n color: #db4437;\n fill: #db4437;\n}\n\n.mg-line4-legend-color {\n color: #f8b128;\n fill: #f8b128;\n}\n\n.mg-line5-legend-color {\n color: #5c5c5c;\n fill: #5c5c5c;\n}\n\n.mg-main-area-solid svg .mg-main-area {\n fill: #ccccff;\n opacity: 1;\n}\n\n.mg-markers line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-markers text {\n fill: black;\n font-size: 0.8rem;\n opacity: 0.6;\n}\n\n.mg-missing-text {\n opacity: 0.9;\n}\n\n.mg-missing-background {\n stroke: blue;\n fill: none;\n stroke-dasharray: 10,5;\n stroke-opacity: 0.05;\n stroke-width: 2;\n}\n\n.mg-missing .mg-main-line {\n opacity: 0.1;\n}\n\n.mg-missing .mg-main-area {\n opacity: 0.03;\n}\n\npath.mg-main-area {\n opacity: 0.2;\n stroke: none;\n}\n\npath.mg-confidence-band {\n fill: #ccc;\n opacity: 0.4;\n stroke: none;\n}\n\npath.mg-main-line {\n fill: none;\n opacity: 0.8;\n stroke-width: 1.1px;\n}\n\n.mg-points circle {\n fill-opacity: 0.4;\n stroke-opacity: 1;\n}\n\ncircle.mg-points-mono {\n fill: #0000ff;\n stroke: #0000ff;\n}\n\ntspan.mg-points-mono {\n fill: #0000ff;\n stroke: #0000ff;\n}\n\n/* a selected point in a scatterplot */\n.mg-points circle.selected {\n fill-opacity: 1;\n stroke-opacity: 1;\n}\n\n.mg-voronoi path {\n fill: none;\n pointer-events: all;\n stroke: none;\n stroke-opacity: 0.1;\n}\n\n.mg-x-rug-mono,\n.mg-y-rug-mono {\n stroke: black;\n}\n\n.mg-x-axis line,\n.mg-y-axis line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-x-axis text,\n.mg-y-axis text,\n.mg-histogram .axis text {\n fill: black;\n font-size: 0.9rem;\n opacity: 0.6;\n}\n\n.mg-x-axis .label,\n.mg-y-axis .label,\n.mg-axis .label {\n font-size: 0.8rem;\n text-transform: uppercase;\n font-weight: 400;\n}\n\n.mg-x-axis-small text,\n.mg-y-axis-small text,\n.mg-active-datapoint-small {\n font-size: 0.6rem;\n}\n\n.mg-x-axis-small .label,\n.mg-y-axis-small .label {\n font-size: 0.65rem;\n}\n\n.mg-european-hours {\n}\n\n.mg-year-marker text {\n fill: black;\n font-size: 0.7rem;\n opacity: 0.6;\n}\n\n.mg-year-marker line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-year-marker-small text {\n font-size: 0.6rem;\n}\n","body {\n background: #eaeaea;\n padding-bottom: 216px;\n}\nheader {\n width: 100%;\n min-height: 216px;\n padding: 48px;\n margin-bottom: 24px;\n background: #fafafa;\n}\nheader .search {\n margin-top: 48px;\n}\n#logo {\n display: block;\n margin: 0 auto;\n max-width: 400px;\n}\n.content {\n margin: auto;\n width: 95%;\n max-width: 1080px;\n}\nsection#landing h1 {\n font-size: 25px;\n}\nsection {\n padding: 36px;\n float: right;\n margin: 0 0 24px 0;\n background: #fafafa;\n box-shadow: 5px 5px 20px 2px rgba(0,0,0,0.03);\n}\nsection h2 {\n font-size: 21px;\n line-height: 32px;\n color: #7d7d7d;\n margin-bottom: 50px;\n}\nsection small {\n display: block;\n width: 100%;\n margin-top: 30px;\n padding-right: 20px;\n text-align: right;\n color: #aaa;\n}\nsection small a {\n color: #aaf;\n text-decoration: none;\n}\nsection.unmaterialized {\n box-shadow: 0 0 0 0;\n background: #f0f0f0;\n padding: 24px 24px 48px 24px;\n border-right: 1px solid #dedede;\n border-bottom: 1px solid #dedede;\n}\n#controls {\n padding: 36px;\n background: #f0f0f0;\n border-right: 1px solid #dedede;\n border-bottom: 1px solid #dedede;\n margin-bottom: 20px;\n}\n.fixed {\n position: relative;\n}\n@media (min-width: 1230px) {\n #cards {\n padding-bottom: 100px;\n position: relative;\n z-index: 9;\n }\n section {\n z-index: 10;\n width: calc(100% - 345px);\n float: right;\n }\n #landing {\n width: 100%;\n }\n .fixed-container {\n z-index: 0;\n position: absolute;\n top: 245px;\n left: calc(50% - (540px));\n }\n .fixed {\n position: fixed !important;\n top: 25px;\n }\n #controls {\n width: 325px;\n float: left;\n }\n}\ncite.metric {\n display: block;\n width: 100%;\n height: 0;\n float: right;\n text-align: center;\n font-size: 12px;\n color: #ccc;\n font-style: normal;\n padding-left: 50px;\n margin: 200px 0px -185px 0;\n}\ncite.metric a {\n color: #aaa;\n text-decoration: underline;\n}\n.linechart {\n height: 210px;\n margin-bottom: 30px;\n}\n.mg-line-legend {\n display: none;\n}\n.legend {\n position: relative;\n margin: 0;\n padding: 0;\n height: 0;\n top: 31px;\n left: 55px;\n fontSize: 14px;\n fontWeight: bold;\n opacity: 0.8;\n}\n.mg-baselines {\n opacity: 0.5;\n}\n.loader {\n width: 100%;\n text-align: center;\n line-height: 10;\n animation: outro 1s, loader 1.5s infinite;\n}\n.intro {\n animation: intro 2s;\n}\n@media print {\n body {\n zoom: 75%;\n }\n section {\n min-width: 800px;\n min-height: 10.5in;\n page-break-after: always;\n }\n section.unmaterialized {\n display: none;\n }\n}\n.hidden,\n.hidden > *,\n.hidden > small {\n display: none !important;\n}\n@-moz-keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-webkit-keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-o-keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-moz-keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-webkit-keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-o-keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-moz-keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n@-webkit-keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n@-o-keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n@keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n"]}
\ No newline at end of file
+{"version":3,"sources":["app/include/kube/kube.css","app/include/metricsgraphics.css","app/styles/augur.styl"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5mEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"public/static/app.css","sourcesContent":["/*\n\tKube. CSS & JS Framework\n\tVersion 6.5.2\n\tUpdated: February 2, 2017\n\n\thttp://imperavi.com/kube/\n\n\tCopyright (c) 2009-2017, Imperavi LLC.\n\tLicense: MIT\n*/\nhtml {\n box-sizing: border-box; }\n\n*,\n*:before,\n*:after {\n box-sizing: inherit; }\n\n* {\n margin: 0;\n padding: 0;\n outline: 0;\n -webkit-overflow-scrolling: touch; }\n\nimg,\nvideo,\naudio {\n max-width: 100%; }\n\nimg,\nvideo {\n height: auto; }\n\nsvg {\n max-height: 100%; }\n\niframe {\n border: none; }\n\n::-moz-focus-inner {\n border: 0;\n padding: 0; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n vertical-align: middle;\n position: relative;\n bottom: 0.15rem;\n font-size: 115%;\n margin-right: 3px; }\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; }\n\ninput[type=\"search\"]::-webkit-search-decoration,\ninput[type=\"search\"]::-webkit-search-cancel-button {\n -webkit-appearance: none; }\n\n.black {\n color: #0d0d0e; }\n\n.inverted {\n color: #fff; }\n\n.error {\n color: #f03c69; }\n\n.success {\n color: #35beb1; }\n\n.warning {\n color: #f7ba45; }\n\n.focus {\n color: #1c86f2; }\n\n.aluminum {\n color: #f8f8f8; }\n\n.silver {\n color: #e0e1e1; }\n\n.lightgray {\n color: #d4d4d4; }\n\n.gray {\n color: #bdbdbd; }\n\n.midgray {\n color: #676b72; }\n\n.darkgray {\n color: #313439; }\n\n.bg-black {\n background-color: #0d0d0e; }\n\n.bg-inverted {\n background-color: #fff; }\n\n.bg-error {\n background-color: #f03c69; }\n\n.bg-success {\n background-color: #35beb1; }\n\n.bg-warning {\n background-color: #f7ba45; }\n\n.bg-focus {\n background-color: #1c86f2; }\n\n.bg-aluminum {\n background-color: #f8f8f8; }\n\n.bg-silver {\n background-color: #e0e1e1; }\n\n.bg-lightgray {\n background-color: #d4d4d4; }\n\n.bg-gray {\n background-color: #bdbdbd; }\n\n.bg-midgray {\n background-color: #676b72; }\n\n.bg-darkgray {\n background-color: #313439; }\n\n.bg-highlight {\n background-color: #edf2ff; }\n\nhtml,\nbody {\n font-size: 16px;\n line-height: 24px; }\n\nbody {\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n color: #313439;\n background-color: transparent; }\n\na {\n color: #3794de; }\n\na:hover {\n color: #f03c69; }\n\nh1.title, h1, h2, h3, h4, h5, h6 {\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n font-weight: bold;\n color: #0d0d0e;\n text-rendering: optimizeLegibility;\n margin-bottom: 16px; }\n\nh1.title {\n font-size: 60px;\n line-height: 64px;\n margin-bottom: 8px; }\n\nh1,\n.h1 {\n font-size: 48px;\n line-height: 52px; }\n\nh2,\n.h2 {\n font-size: 36px;\n line-height: 40px; }\n\nh3,\n.h3 {\n font-size: 24px;\n line-height: 32px; }\n\nh4,\n.h4 {\n font-size: 21px;\n line-height: 32px; }\n\nh5,\n.h5 {\n font-size: 18px;\n line-height: 28px; }\n\nh6,\n.h6 {\n font-size: 16px;\n line-height: 24px; }\n\nh1 a, .h1 a,\nh2 a, .h2 a,\nh3 a, .h3 a,\nh4 a, .h4 a,\nh5 a, .h5 a,\nh6 a, .h6 a {\n color: inherit; }\n\np + h2,\np + h3,\np + h4,\np + h5,\np + h6,\nul + h2,\nul + h3,\nul + h4,\nul + h5,\nul + h6,\nol + h2,\nol + h3,\nol + h4,\nol + h5,\nol + h6,\ndl + h2,\ndl + h3,\ndl + h4,\ndl + h5,\ndl + h6,\nblockquote + h2,\nblockquote + h3,\nblockquote + h4,\nblockquote + h5,\nblockquote + h6,\nhr + h2,\nhr + h3,\nhr + h4,\nhr + h5,\nhr + h6,\npre + h2,\npre + h3,\npre + h4,\npre + h5,\npre + h6,\ntable + h2,\ntable + h3,\ntable + h4,\ntable + h5,\ntable + h6,\nform + h2,\nform + h3,\nform + h4,\nform + h5,\nform + h6,\nfigure + h2,\nfigure + h3,\nfigure + h4,\nfigure + h5,\nfigure + h6 {\n margin-top: 24px; }\n\nul,\nul ul,\nul ol,\nol,\nol ul,\nol ol {\n margin: 0 0 0 24px; }\n\nol ol li {\n list-style-type: lower-alpha; }\n\nol ol ol li {\n list-style-type: lower-roman; }\n\nnav ul,\nnav ol {\n margin: 0;\n list-style: none; }\n nav ul ul,\n nav ul ol,\n nav ol ul,\n nav ol ol {\n margin-left: 24px; }\n\ndl dt {\n font-weight: bold; }\n\ndd {\n margin-left: 24px; }\n\np, blockquote, hr, pre, ol, ul, dl, table, fieldset, figure, address, form {\n margin-bottom: 16px; }\n\nhr {\n border: none;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n margin-top: -1px; }\n\nblockquote {\n padding-left: 1rem;\n border-left: 4px solid rgba(0, 0, 0, 0.1);\n font-style: italic;\n color: rgba(49, 52, 57, 0.65); }\n blockquote p {\n margin-bottom: .5rem; }\n\ntime, cite, small, figcaption {\n font-size: 87.5%; }\n\ncite {\n opacity: .6; }\n\nabbr[title], dfn[title] {\n border-bottom: 1px dotted rgba(0, 0, 0, 0.5);\n cursor: help; }\n\nvar {\n font-size: 16px;\n opacity: .6;\n font-style: normal; }\n\nmark, code, samp, kbd {\n position: relative;\n top: -1px;\n padding: 4px 4px 2px 4px;\n display: inline-block;\n line-height: 1;\n color: rgba(49, 52, 57, 0.85); }\n\ncode {\n background: #e0e1e1; }\n\nmark {\n background: #f7ba45; }\n\nsamp {\n color: #fff;\n background: #1c86f2; }\n\nkbd {\n border: 1px solid rgba(0, 0, 0, 0.1); }\n\nsub,\nsup {\n font-size: x-small;\n line-height: 0;\n margin-left: 1rem/4;\n position: relative; }\n\nsup {\n top: 0; }\n\nsub {\n bottom: 1px; }\n\npre, code, samp, var, kbd {\n font-family: Consolas, Monaco, \"Courier New\", monospace; }\n\npre, code, samp, var, kbd, mark {\n font-size: 87.5%; }\n\npre,\npre code {\n background: #f8f8f8;\n padding: 0;\n top: 0;\n display: block;\n line-height: 20px;\n color: rgba(49, 52, 57, 0.85);\n overflow: none;\n white-space: pre-wrap; }\n\npre {\n padding: 1rem; }\n\nfigcaption {\n opacity: .6; }\n\nfigure figcaption {\n position: relative;\n top: -1rem/2; }\n\nfigure pre {\n background: none;\n border: 1px solid rgba(0, 0, 0, 0.1);\n border-radius: 4px; }\n\nfigure .video-container,\nfigure pre {\n margin-bottom: 8px; }\n\n.text-left {\n text-align: left; }\n\n.text-center {\n text-align: center; }\n\n.text-right {\n text-align: right; }\n\nul.unstyled {\n margin-left: 0; }\n\nul.unstyled,\nul.unstyled ul {\n list-style: none; }\n\n.monospace {\n font-family: Consolas, Monaco, \"Courier New\", monospace; }\n\n.upper {\n text-transform: uppercase; }\n\n.lower {\n text-transform: lowercase; }\n\n.italic {\n font-style: italic !important; }\n\n.strong {\n font-weight: bold !important; }\n\n.normal {\n font-weight: normal !important; }\n\n.muted {\n opacity: .55; }\n\na.muted {\n color: #0d0d0e; }\n\na.muted:hover {\n opacity: 1; }\n\n.black {\n color: #0d0d0e; }\n\n.smaller {\n font-size: 12px;\n line-height: 20px; }\n\n.small {\n font-size: 14px;\n line-height: 20px; }\n\n.big {\n font-size: 18px;\n line-height: 28px; }\n\n.large {\n font-size: 20px;\n line-height: 32px; }\n\n.end {\n margin-bottom: 0 !important; }\n\n.highlight {\n background-color: #edf2ff; }\n\n.nowrap,\n.nowrap td {\n white-space: nowrap; }\n\n@media (min-width: 1230px) and (max-width: 1024px) {\n .columns-2,\n .columns-3,\n .columns-4 {\n column-gap: 24px; }\n .columns-2 {\n column-count: 2; }\n .columns-3 {\n column-count: 3; }\n .columns-4 {\n column-count: 4; } }\n\n.row {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap; }\n @media (max-width: 1230px) {\n .row {\n flex-direction: column;\n flex-wrap: nowrap; } }\n .row.gutters,\n .row.gutters > .row {\n margin-left: -2%; }\n @media (max-width: 1230px) {\n .row.gutters,\n .row.gutters > .row {\n margin-left: 0; } }\n .row.gutters > .col,\n .row.gutters > .row > .col {\n margin-left: 2%; }\n @media (max-width: 1230px) {\n .row.gutters > .col,\n .row.gutters > .row > .col {\n margin-left: 0; } }\n .row.around {\n justify-content: space-around; }\n .row.between {\n justify-content: space-between; }\n .row.auto .col {\n flex-grow: 1; }\n\n.col-1 {\n width: 8.33333%; }\n\n.offset-1 {\n margin-left: 8.33333%; }\n\n.col-2 {\n width: 16.66667%; }\n\n.offset-2 {\n margin-left: 16.66667%; }\n\n.col-3 {\n width: 25%; }\n\n.offset-3 {\n margin-left: 25%; }\n\n.col-4 {\n width: 33.33333%; }\n\n.offset-4 {\n margin-left: 33.33333%; }\n\n.col-5 {\n width: 41.66667%; }\n\n.offset-5 {\n margin-left: 41.66667%; }\n\n.col-6 {\n width: 50%; }\n\n.offset-6 {\n margin-left: 50%; }\n\n.col-7 {\n width: 58.33333%; }\n\n.offset-7 {\n margin-left: 58.33333%; }\n\n.col-8 {\n width: 66.66667%; }\n\n.offset-8 {\n margin-left: 66.66667%; }\n\n.col-9 {\n width: 75%; }\n\n.offset-9 {\n margin-left: 75%; }\n\n.col-10 {\n width: 83.33333%; }\n\n.offset-10 {\n margin-left: 83.33333%; }\n\n.col-11 {\n width: 91.66667%; }\n\n.offset-11 {\n margin-left: 91.66667%; }\n\n.col-12 {\n width: 100%; }\n\n.offset-12 {\n margin-left: 100%; }\n\n.gutters > .col-1 {\n width: calc(8.33333% - 2%); }\n\n.gutters > .offset-1 {\n margin-left: calc(8.33333% + 2%) !important; }\n\n.gutters > .col-2 {\n width: calc(16.66667% - 2%); }\n\n.gutters > .offset-2 {\n margin-left: calc(16.66667% + 2%) !important; }\n\n.gutters > .col-3 {\n width: calc(25% - 2%); }\n\n.gutters > .offset-3 {\n margin-left: calc(25% + 2%) !important; }\n\n.gutters > .col-4 {\n width: calc(33.33333% - 2%); }\n\n.gutters > .offset-4 {\n margin-left: calc(33.33333% + 2%) !important; }\n\n.gutters > .col-5 {\n width: calc(41.66667% - 2%); }\n\n.gutters > .offset-5 {\n margin-left: calc(41.66667% + 2%) !important; }\n\n.gutters > .col-6 {\n width: calc(50% - 2%); }\n\n.gutters > .offset-6 {\n margin-left: calc(50% + 2%) !important; }\n\n.gutters > .col-7 {\n width: calc(58.33333% - 2%); }\n\n.gutters > .offset-7 {\n margin-left: calc(58.33333% + 2%) !important; }\n\n.gutters > .col-8 {\n width: calc(66.66667% - 2%); }\n\n.gutters > .offset-8 {\n margin-left: calc(66.66667% + 2%) !important; }\n\n.gutters > .col-9 {\n width: calc(75% - 2%); }\n\n.gutters > .offset-9 {\n margin-left: calc(75% + 2%) !important; }\n\n.gutters > .col-10 {\n width: calc(83.33333% - 2%); }\n\n.gutters > .offset-10 {\n margin-left: calc(83.33333% + 2%) !important; }\n\n.gutters > .col-11 {\n width: calc(91.66667% - 2%); }\n\n.gutters > .offset-11 {\n margin-left: calc(91.66667% + 2%) !important; }\n\n.gutters > .col-12 {\n width: calc(100% - 2%); }\n\n.gutters > .offset-12 {\n margin-left: calc(100% + 2%) !important; }\n\n@media (max-width: 1230px) {\n [class^='offset-'],\n [class*=' offset-'] {\n margin-left: 0; } }\n\n.first {\n order: -1; }\n\n.last {\n order: 1; }\n\n@media (max-width: 1230px) {\n .row .col {\n margin-left: 0;\n width: 100%; }\n .row.gutters .col {\n margin-bottom: 16px; }\n .first-sm {\n order: -1; }\n .last-sm {\n order: 1; } }\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n max-width: 100%;\n width: 100%;\n empty-cells: show;\n font-size: 15px;\n line-height: 24px; }\n\ntable caption {\n text-align: left;\n font-size: 14px;\n font-weight: 500;\n color: #676b72; }\n\nth {\n text-align: left;\n font-weight: 700;\n vertical-align: bottom; }\n\ntd {\n vertical-align: top; }\n\ntr.align-middle td,\ntd.align-middle {\n vertical-align: middle; }\n\nth,\ntd {\n padding: 1rem 1rem;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05); }\n th:first-child,\n td:first-child {\n padding-left: 0; }\n th:last-child,\n td:last-child {\n padding-right: 0; }\n\ntfoot th,\ntfoot td {\n color: rgba(49, 52, 57, 0.5); }\n\ntable.bordered td,\ntable.bordered th {\n border: 1px solid rgba(0, 0, 0, 0.05); }\n\ntable.striped tr:nth-child(odd) td {\n background: #f8f8f8; }\n\ntable.bordered td:first-child,\ntable.bordered th:first-child,\ntable.striped td:first-child,\ntable.striped th:first-child {\n padding-left: 1rem; }\n\ntable.bordered td:last-child,\ntable.bordered th:last-child,\ntable.striped td:last-child,\ntable.striped th:last-child {\n padding-right: 1rem; }\n\ntable.unstyled td,\ntable.unstyled th {\n border: none;\n padding: 0; }\n\nfieldset {\n font-family: inherit;\n border: 1px solid rgba(0, 0, 0, 0.1);\n padding: 2rem;\n margin-bottom: 2rem;\n margin-top: 2rem; }\n\nlegend {\n font-weight: bold;\n font-size: 12px;\n text-transform: uppercase;\n padding: 0 1rem;\n margin-left: -1rem;\n top: 2px;\n position: relative;\n line-height: 0; }\n\ninput,\ntextarea,\nselect {\n display: block;\n width: 100%;\n font-family: inherit;\n font-size: 15px;\n height: 40px;\n outline: none;\n vertical-align: middle;\n background-color: #fff;\n border: 1px solid #d4d4d4;\n border-radius: 3px;\n box-shadow: none;\n padding: 0 12px; }\n\ninput.small,\ntextarea.small,\nselect.small {\n height: 36px;\n font-size: 13px;\n padding: 0 12px;\n border-radius: 3px; }\n\ninput.big,\ntextarea.big,\nselect.big {\n height: 48px;\n font-size: 17px;\n padding: 0 12px;\n border-radius: 3px; }\n\ninput:focus,\ntextarea:focus,\nselect:focus {\n outline: none;\n background-color: #fff;\n border-color: #1c86f2;\n box-shadow: 0 0 1px #1c86f2 inset; }\n\ninput.error,\ntextarea.error,\nselect.error {\n background-color: rgba(240, 60, 105, 0.1);\n border: 1px solid #f583a0; }\n input.error:focus,\n textarea.error:focus,\n select.error:focus {\n border-color: #f03c69;\n box-shadow: 0 0 1px #f03c69 inset; }\n\ninput.success,\ntextarea.success,\nselect.success {\n background-color: rgba(53, 190, 177, 0.1);\n border: 1px solid #6ad5cb; }\n input.success:focus,\n textarea.success:focus,\n select.success:focus {\n border-color: #35beb1;\n box-shadow: 0 0 1px #35beb1 inset; }\n\ninput:disabled, input.disabled,\ntextarea:disabled,\ntextarea.disabled,\nselect:disabled,\nselect.disabled {\n resize: none;\n opacity: 0.6;\n cursor: default;\n font-style: italic;\n color: rgba(0, 0, 0, 0.5); }\n\nselect {\n -webkit-appearance: none;\n background-image: url('data:image/svg+xml;utf8,');\n background-repeat: no-repeat;\n background-position: right 1rem center; }\n\nselect[multiple] {\n background-image: none;\n height: auto;\n padding: .5rem .75rem; }\n\ntextarea {\n height: auto;\n padding: 8px 12px;\n line-height: 24px;\n vertical-align: top; }\n\ninput[type=\"file\"] {\n width: auto;\n border: none;\n padding: 0;\n height: auto;\n background: none;\n box-shadow: none;\n display: inline-block; }\n\ninput[type=\"search\"],\ninput.search {\n background-repeat: no-repeat;\n background-position: 8px 53%;\n background-image: url('data:image/svg+xml;utf8,');\n padding-left: 32px; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n display: inline-block;\n width: auto;\n height: auto;\n padding: 0; }\n\nlabel {\n display: block;\n color: #313439;\n margin-bottom: 4px;\n font-size: 15px; }\n label.checkbox,\n label .desc,\n label .success,\n label .error {\n text-transform: none;\n font-weight: normal; }\n label.checkbox {\n font-size: 16px;\n line-height: 24px;\n cursor: pointer;\n color: inherit; }\n label.checkbox input {\n margin-top: 0; }\n\n.form-checkboxes label.checkbox {\n display: inline-block;\n margin-right: 16px; }\n\n.req {\n position: relative;\n top: 1px;\n font-weight: bold;\n color: #f03c69;\n font-size: 110%; }\n\n.desc {\n color: rgba(49, 52, 57, 0.5);\n font-size: 12px;\n line-height: 20px; }\n\nspan.desc {\n margin-left: 4px; }\n\ndiv.desc {\n margin-top: 4px;\n margin-bottom: -8px; }\n\n.form-buttons button,\n.form-buttons .button {\n margin-right: 8px; }\n\nform,\n.form-item {\n margin-bottom: 2rem; }\n\n.form > .form-item:last-child {\n margin-bottom: 0; }\n\n.form .row:last-child .form-item {\n margin-bottom: 0; }\n\n.form span.success,\n.form span.error {\n font-size: 12px;\n line-height: 20px;\n margin-left: 4px; }\n\n.form-inline input,\n.form-inline textarea,\n.form-inline select {\n display: inline-block;\n width: auto; }\n\n.append,\n.prepend {\n display: flex; }\n .append input,\n .prepend input {\n flex: 1; }\n .append .button,\n .append span,\n .prepend .button,\n .prepend span {\n flex-shrink: 0; }\n .append span,\n .prepend span {\n display: flex;\n flex-direction: column;\n justify-content: center;\n font-weight: normal;\n border: 1px solid #d4d4d4;\n background-color: #f8f8f8;\n padding: 0 .875rem;\n color: rgba(0, 0, 0, 0.5);\n font-size: 12px;\n white-space: nowrap; }\n\n.prepend input {\n border-radius: 0 3px 3px 0; }\n\n.prepend .button {\n margin-right: -1px;\n border-radius: 3px 0 0 3px !important; }\n\n.prepend span {\n border-right: none;\n border-radius: 3px 0 0 3px; }\n\n.append input {\n border-radius: 3px 0 0 3px; }\n\n.append .button {\n margin-left: -1px;\n border-radius: 0 3px 3px 0 !important; }\n\n.append span {\n border-left: none;\n border-radius: 0 3px 3px 0; }\n\nbutton,\n.button {\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n font-size: 15px;\n color: #fff;\n background-color: #1c86f2;\n border-radius: 3px;\n min-height: 40px;\n padding: 8px 20px;\n font-weight: 500;\n text-decoration: none;\n cursor: pointer;\n display: inline-block;\n line-height: 20px;\n border: 1px solid transparent;\n vertical-align: middle;\n -webkit-appearance: none; }\n button i,\n .button i {\n position: relative;\n top: 1px;\n margin: 0 2px; }\n\ninput[type=\"submit\"] {\n width: auto; }\n\nbutton:hover,\n.button:hover {\n outline: none;\n text-decoration: none;\n color: #fff;\n background-color: #4ca0f5; }\n\n.button:disabled,\n.button.disabled {\n cursor: default;\n font-style: normal;\n color: rgba(255, 255, 255, 0.7);\n background-color: rgba(28, 134, 242, 0.7); }\n\n.button.small {\n font-size: 13px;\n min-height: 36px;\n padding: 6px 20px;\n border-radius: 3px; }\n\n.button.big {\n font-size: 17px;\n min-height: 48px;\n padding: 13px 24px;\n border-radius: 3px; }\n\n.button.large {\n font-size: 19px;\n min-height: 56px;\n padding: 20px 36px;\n border-radius: 3px; }\n\n.button.outline {\n background: none;\n border-width: 2px;\n border-color: #1c86f2;\n color: #1c86f2; }\n .button.outline:hover {\n background: none;\n color: rgba(28, 134, 242, 0.6);\n border-color: rgba(28, 134, 242, 0.5); }\n .button.outline:disabled, .button.outline.disabled {\n background: none;\n color: rgba(28, 134, 242, 0.7);\n border-color: rgba(28, 134, 242, 0.5); }\n\n.button.inverted {\n color: #000;\n background-color: #fff; }\n .button.inverted:hover {\n color: #000;\n background-color: white; }\n .button.inverted:disabled, .button.inverted.disabled {\n color: rgba(0, 0, 0, 0.7);\n background-color: rgba(255, 255, 255, 0.7); }\n .button.inverted.outline {\n background: none;\n color: #fff;\n border-color: #fff; }\n .button.inverted.outline:hover {\n color: rgba(255, 255, 255, 0.6);\n border-color: rgba(255, 255, 255, 0.5); }\n .button.inverted.outline:disabled, .button.inverted.outline.disabled {\n background: none;\n color: rgba(255, 255, 255, 0.7);\n border-color: rgba(255, 255, 255, 0.5); }\n .button.inverted:hover {\n opacity: .7; }\n\n.button.round {\n border-radius: 56px; }\n\n.button.raised {\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); }\n\n.button.upper {\n text-transform: uppercase;\n letter-spacing: .04em;\n font-size: 13px; }\n .button.upper.small {\n font-size: 11px; }\n .button.upper.big {\n font-size: 13px; }\n .button.upper.large {\n font-size: 15px; }\n\n.button.secondary {\n color: #fff;\n background-color: #313439; }\n .button.secondary:hover {\n color: #fff;\n background-color: #606670; }\n .button.secondary:disabled, .button.secondary.disabled {\n color: rgba(255, 255, 255, 0.7);\n background-color: rgba(49, 52, 57, 0.7); }\n .button.secondary.outline {\n background: none;\n color: #313439;\n border-color: #313439; }\n .button.secondary.outline:hover {\n color: rgba(49, 52, 57, 0.6);\n border-color: rgba(49, 52, 57, 0.5); }\n .button.secondary.outline:disabled, .button.secondary.outline.disabled {\n background: none;\n color: rgba(49, 52, 57, 0.7);\n border-color: rgba(49, 52, 57, 0.5); }\n\n.label {\n display: inline-block;\n font-size: 13px;\n background: #e0e1e1;\n line-height: 18px;\n padding: 0 10px;\n font-weight: 500;\n color: #313439;\n border: 1px solid transparent;\n vertical-align: middle;\n text-decoration: none;\n border-radius: 4px; }\n .label a,\n .label a:hover {\n color: inherit;\n text-decoration: none; }\n\n.label.big {\n font-size: 14px;\n line-height: 24px;\n padding: 0 12px; }\n\n.label.upper {\n text-transform: uppercase;\n font-size: 11px; }\n\n.label.outline {\n background: none;\n border-color: #bdbdbd; }\n\n.label.badge {\n text-align: center;\n border-radius: 64px;\n padding: 0 6px; }\n .label.badge.big {\n padding: 0 8px; }\n\n.label.tag {\n padding: 0;\n background: none;\n border: none;\n text-transform: uppercase;\n font-size: 11px; }\n .label.tag.big {\n font-size: 13px; }\n\n.label.success {\n background: #35beb1;\n color: #fff; }\n .label.success.tag, .label.success.outline {\n background: none;\n border-color: #35beb1;\n color: #35beb1; }\n\n.label.error {\n background: #f03c69;\n color: #fff; }\n .label.error.tag, .label.error.outline {\n background: none;\n border-color: #f03c69;\n color: #f03c69; }\n\n.label.warning {\n background: #f7ba45;\n color: #0d0d0e; }\n .label.warning.tag, .label.warning.outline {\n background: none;\n border-color: #f7ba45;\n color: #f7ba45; }\n\n.label.focus {\n background: #1c86f2;\n color: #fff; }\n .label.focus.tag, .label.focus.outline {\n background: none;\n border-color: #1c86f2;\n color: #1c86f2; }\n\n.label.black {\n background: #0d0d0e;\n color: #fff; }\n .label.black.tag, .label.black.outline {\n background: none;\n border-color: #0d0d0e;\n color: #0d0d0e; }\n\n.label.inverted {\n background: #fff;\n color: #0d0d0e; }\n .label.inverted.tag, .label.inverted.outline {\n background: none;\n border-color: #fff;\n color: #fff; }\n\n.breadcrumbs {\n font-size: 14px;\n margin-bottom: 24px; }\n .breadcrumbs ul {\n display: flex;\n align-items: center; }\n .breadcrumbs.push-center ul {\n justify-content: center; }\n .breadcrumbs span,\n .breadcrumbs a {\n font-style: normal;\n padding: 0 10px;\n display: inline-block;\n white-space: nowrap; }\n .breadcrumbs li:after {\n display: inline-block;\n content: '/';\n color: rgba(0, 0, 0, 0.3); }\n .breadcrumbs li:last-child:after {\n display: none; }\n .breadcrumbs li:first-child span,\n .breadcrumbs li:first-child a {\n padding-left: 0; }\n .breadcrumbs li.active a {\n color: #313439;\n text-decoration: none;\n cursor: text; }\n\n.pagination {\n margin: 24px 0;\n font-size: 14px; }\n .pagination ul {\n display: flex;\n margin: 0; }\n .pagination.align-center ul {\n justify-content: center; }\n .pagination span,\n .pagination a {\n border-radius: 3px;\n display: inline-block;\n padding: 8px 12px;\n line-height: 1;\n white-space: nowrap;\n border: 1px solid transparent; }\n .pagination a {\n text-decoration: none;\n color: #313439; }\n .pagination a:hover {\n color: rgba(0, 0, 0, 0.5);\n border-color: #e0e1e1; }\n .pagination span,\n .pagination li.active a {\n color: rgba(0, 0, 0, 0.5);\n border-color: #e0e1e1;\n cursor: text; }\n .pagination.upper {\n font-size: 12px; }\n\n.pager span {\n line-height: 24px; }\n\n.pager span,\n.pager a {\n padding-left: 16px;\n padding-right: 16px;\n border-radius: 64px;\n border-color: rgba(0, 0, 0, 0.1); }\n\n.pager li {\n flex-basis: 50%; }\n\n.pager li.next {\n text-align: right; }\n\n.pager.align-center li {\n flex-basis: auto;\n margin-left: 4px;\n margin-right: 4px; }\n\n.pager.flat span,\n.pager.flat a {\n border: none;\n display: block;\n padding: 0; }\n\n.pager.flat a {\n font-weight: bold; }\n .pager.flat a:hover {\n background: none;\n text-decoration: underline; }\n\n@media (max-width: 1230px) {\n .pager.flat ul {\n flex-direction: column; }\n .pager.flat li {\n flex-basis: 100%;\n margin-bottom: 8px;\n text-align: left; } }\n\n@font-face {\n font-family: 'Kube';\n src: url(\"data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBfgAAAC8AAAAYGNtYXAXVtKOAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZsMn2SAAAAF4AAADeGhlYWQMP9EUAAAE8AAAADZoaGVhB8IDzQAABSgAAAAkaG10eCYABd4AAAVMAAAAMGxvY2EFWASuAAAFfAAAABptYXhwABcAmwAABZgAAAAgbmFtZfMJxocAAAW4AAABYnBvc3QAAwAAAAAHHAAAACAAAwPHAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBwPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qf//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAAKAAAAAAQAA8AADwAUACQANABEAFYAaAB4AIgAmAAAEyIGFREUFjMhMjY1ETQmIwUhESEREzgBMSIGFRQWMzI2NTQmIzM4ATEiBhUUFjMyNjU0JiMzOAExIgYVFBYzMjY1NCYjATIWHQEUBiMiJj0BNDYzOAExITIWHQEUBiMiJj0BNDYzOAExATgBMSIGFRQWMzI2NTQmIzM4ATEiBhUUFjMyNjU0JiMzOAExIgYVFBYzMjY1NCYjwFBwcFACgFBwcFD9IQM+/MKrHioqHh4qKh70HioqHh4qKh70HisrHh0rKh7+MBQdHRQUHBwUAbgUHBwUFB0dFP4wHioqHh4qKh70HioqHh4qKh70HisrHh0rKh4DYHBQ/iBQcHBQAeBQcF/9XwKh/n8qHh4qKh4eKioeHioqHh4qKh4eKioeHioCQBwVjhUcHBWOFRwcFY4VHBwVjhUc/rAqHh4qKh4eKioeHioqHh4qKh4eKioeHioAAAABAQAAwAMAAcAACwAAAQcXBycHJzcnNxc3AwDMAjMDAzMCzDTMzAGVqAIrAgIrAqgrqKgAAQGAAEACgAJAAAsAACUnByc3JzcXNxcHFwJVqAIrAgIrAqgrqKhAzAIzAwMzAsw0zMwAAAEBgABAAoACQAALAAABFzcXBxcHJwcnNycBq6gCKwICKwKoK6ioAkDMAjMDAzMCzDTMzAABAQAAwAMAAcAACwAAJTcnNxc3FwcXBycHAQDMAjMDAzMCzDTMzOuoAisCAisCqCuoqAAAAgAP/+UD1AOqAAQACAAAEwEHATcFAScBSwOJPPx3PAOJ/Hc8A4kDqvx3PAOJPDz8dzwDiQAAAAADAIAAgAOAAwAAAwAHAAsAADc1IRUBIRUhESEVIYADAP0AAwD9AAMA/QCAgIABgIABgIAAAgBPAA8DsgNxABgALQAAJQcBDgEjIi4CNTQ+AjMyHgIVFAYHAQEiDgIVFB4CMzI+AjU0LgIjA7JY/t4lWTBBc1YxMVZzQUFzVTIcGQEi/dgxVkAlJUBWMTFWQCUlQFYxZ1gBIRkcMlVzQUFzVjExVnNBMFkm/uACuyVAVjExVkAlJUBWMTFWQCUAAAABAAAAAQAABhlWm18PPPUACwQAAAAAANSQRjkAAAAA1JBGOQAA/+UEAAPAAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAQAAAEAAAAAAAAAAAAAAAAAAAAMBAAAAAAAAAAAAAAAAgAAAAQAAAAEAAEABAABgAQAAYAEAAEABAAADwQAAIAEAABPAAAAAAAKABQAHgDYAPIBDAEmAUABXAF2AbwAAAABAAAADACZAAoAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEABAAAAAEAAAAAAAIABwBFAAEAAAAAAAMABAAtAAEAAAAAAAQABABaAAEAAAAAAAUACwAMAAEAAAAAAAYABAA5AAEAAAAAAAoAGgBmAAMAAQQJAAEACAAEAAMAAQQJAAIADgBMAAMAAQQJAAMACAAxAAMAAQQJAAQACABeAAMAAQQJAAUAFgAXAAMAAQQJAAYACAA9AAMAAQQJAAoANACAS3ViZQBLAHUAYgBlVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwS3ViZQBLAHUAYgBlS3ViZQBLAHUAYgBlUmVndWxhcgBSAGUAZwB1AGwAYQByS3ViZQBLAHUAYgBlRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\") format(\"truetype\");\n font-weight: normal;\n font-style: normal; }\n\n[class^=\"kube-\"], [class*=\" kube-\"], .close, .caret {\n /* use !important to prevent issues with browser extensions that change fonts */\n font-family: 'Kube' !important;\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n line-height: 1;\n /* Better Font Rendering =========== */\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale; }\n\n.kube-calendar:before {\n content: \"\\e900\"; }\n\n.caret.down:before,\n.kube-caret-down:before {\n content: \"\\e901\"; }\n\n.caret.left:before,\n.kube-caret-left:before {\n content: \"\\e902\"; }\n\n.caret.right:before,\n.kube-caret-right:before {\n content: \"\\e903\"; }\n\n.caret.up:before,\n.kube-caret-up:before {\n content: \"\\e904\"; }\n\n.close:before,\n.kube-close:before {\n content: \"\\e905\"; }\n\n.kube-menu:before {\n content: \"\\e906\"; }\n\n.kube-search:before {\n content: \"\\e907\"; }\n\n.gutters .column.push-left,\n.push-left {\n margin-right: auto; }\n\n.gutters .column.push-right,\n.push-right {\n margin-left: auto; }\n\n.gutters .column.push-center,\n.push-center {\n margin-left: auto;\n margin-right: auto; }\n\n.gutters .column.push-middle,\n.push-middle {\n margin-top: auto;\n margin-bottom: auto; }\n\n.push-bottom {\n margin-top: auto; }\n\n@media (max-width: 1230px) {\n .gutters .column.push-left-sm,\n .push-left-sm {\n margin-left: 0; }\n .gutters .column.push-center-sm,\n .push-center-sm {\n margin-left: auto;\n margin-right: auto; }\n .push-top-sm {\n margin-top: 0; } }\n\n.align-middle {\n align-items: center; }\n\n.align-right {\n justify-content: flex-end; }\n\n.align-center {\n justify-content: center; }\n\n@media (max-width: 1230px) {\n .align-left-sm {\n justify-content: flex-start; } }\n\n.float-right {\n float: right; }\n\n.float-left {\n float: left; }\n\n@media (max-width: 1230px) {\n .float-right {\n float: none; }\n .float-left {\n float: none; } }\n\n.fixed {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 100;\n width: 100%; }\n\n.w5 {\n width: 5%; }\n\n.w10 {\n width: 10%; }\n\n.w15 {\n width: 15%; }\n\n.w20 {\n width: 20%; }\n\n.w25 {\n width: 25%; }\n\n.w30 {\n width: 30%; }\n\n.w35 {\n width: 35%; }\n\n.w40 {\n width: 40%; }\n\n.w45 {\n width: 45%; }\n\n.w50 {\n width: 50%; }\n\n.w55 {\n width: 55%; }\n\n.w60 {\n width: 60%; }\n\n.w65 {\n width: 65%; }\n\n.w70 {\n width: 70%; }\n\n.w75 {\n width: 75%; }\n\n.w80 {\n width: 80%; }\n\n.w85 {\n width: 85%; }\n\n.w90 {\n width: 90%; }\n\n.w95 {\n width: 95%; }\n\n.w100 {\n width: 100%; }\n\n.w-auto {\n width: auto; }\n\n.w-small {\n width: 480px; }\n\n.w-medium {\n width: 600px; }\n\n.w-big {\n width: 740px; }\n\n.w-large {\n width: 840px; }\n\n@media (max-width: 1230px) {\n .w-auto-sm {\n width: auto; }\n .w100-sm,\n .w-small,\n .w-medium,\n .w-big,\n .w-large {\n width: 100%; } }\n\n.max-w5 {\n max-width: 5%; }\n\n.max-w10 {\n max-width: 10%; }\n\n.max-w15 {\n max-width: 15%; }\n\n.max-w20 {\n max-width: 20%; }\n\n.max-w25 {\n max-width: 25%; }\n\n.max-w30 {\n max-width: 30%; }\n\n.max-w35 {\n max-width: 35%; }\n\n.max-w40 {\n max-width: 40%; }\n\n.max-w45 {\n max-width: 45%; }\n\n.max-w50 {\n max-width: 50%; }\n\n.max-w55 {\n max-width: 55%; }\n\n.max-w60 {\n max-width: 60%; }\n\n.max-w65 {\n max-width: 65%; }\n\n.max-w70 {\n max-width: 70%; }\n\n.max-w75 {\n max-width: 75%; }\n\n.max-w80 {\n max-width: 80%; }\n\n.max-w85 {\n max-width: 85%; }\n\n.max-w90 {\n max-width: 90%; }\n\n.max-w95 {\n max-width: 95%; }\n\n.max-w100 {\n max-width: 100%; }\n\n.max-w-small {\n max-width: 480px; }\n\n.max-w-medium {\n max-width: 600px; }\n\n.max-w-big {\n max-width: 740px; }\n\n.max-w-large {\n max-width: 840px; }\n\n@media (max-width: 1230px) {\n .max-w-auto-sm,\n .max-w-small,\n .max-w-medium,\n .max-w-big,\n .max-w-large {\n max-width: auto; } }\n\n.min-w5 {\n min-width: 5%; }\n\n.min-w10 {\n min-width: 10%; }\n\n.min-w15 {\n min-width: 15%; }\n\n.min-w20 {\n min-width: 20%; }\n\n.min-w25 {\n min-width: 25%; }\n\n.min-w30 {\n min-width: 30%; }\n\n.min-w35 {\n min-width: 35%; }\n\n.min-w40 {\n min-width: 40%; }\n\n.min-w45 {\n min-width: 45%; }\n\n.min-w50 {\n min-width: 50%; }\n\n.min-w55 {\n min-width: 55%; }\n\n.min-w60 {\n min-width: 60%; }\n\n.min-w65 {\n min-width: 65%; }\n\n.min-w70 {\n min-width: 70%; }\n\n.min-w75 {\n min-width: 75%; }\n\n.min-w80 {\n min-width: 80%; }\n\n.min-w85 {\n min-width: 85%; }\n\n.min-w90 {\n min-width: 90%; }\n\n.min-w95 {\n min-width: 95%; }\n\n.min-w100 {\n min-width: 100%; }\n\n.h25 {\n height: 25%; }\n\n.h50 {\n height: 50%; }\n\n.h100 {\n height: 100%; }\n\n.group:after {\n content: '';\n display: table;\n clear: both; }\n\n.flex {\n display: flex; }\n\n@media (max-width: 1230px) {\n .flex-column-sm {\n flex-direction: column; }\n .flex-w100-sm {\n flex: 0 0 100%; } }\n @media (max-width: 1230px) and (max-width: 1230px) {\n .flex-w100-sm {\n flex: 0 0 100% !important; } }\n\n.invisible {\n visibility: hidden; }\n\n.visible {\n visibility: visible; }\n\n.display-block {\n display: block; }\n\n.hide {\n display: none !important; }\n\n@media (max-width: 1230px) {\n .hide-sm {\n display: none !important; } }\n\n@media (min-width: 1230px) {\n .show-sm {\n display: none !important; } }\n\n@media print {\n .hide-print {\n display: none !important; }\n .show-print {\n display: block !important; } }\n\n.no-scroll {\n overflow: hidden;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100% !important; }\n\n.scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll; }\n\n.video-container {\n height: 0;\n padding-bottom: 56.25%;\n position: relative;\n margin-bottom: 16px; }\n .video-container iframe,\n .video-container object,\n .video-container embed {\n position: absolute;\n top: 0;\n left: 0;\n width: 100% !important;\n height: 100% !important; }\n\n.close {\n display: inline-block;\n min-height: 16px;\n min-width: 16px;\n line-height: 16px;\n vertical-align: middle;\n text-align: center;\n font-size: 12px;\n opacity: .6; }\n .close:hover {\n opacity: 1; }\n .close.small {\n font-size: 8px; }\n .close.big {\n font-size: 18px; }\n .close.white {\n color: #fff; }\n\n.caret {\n display: inline-block; }\n\n.button .caret {\n margin-right: -8px; }\n\n.overlay {\n position: fixed;\n z-index: 200;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(255, 255, 255, 0.95); }\n .overlay > .close {\n position: fixed;\n top: 1rem;\n right: 1rem; }\n\n@media print {\n * {\n background: transparent !important;\n color: black !important;\n box-shadow: none !important;\n text-shadow: none !important; }\n a,\n a:visited {\n text-decoration: underline; }\n pre, blockquote {\n border: 1px solid #999;\n page-break-inside: avoid; }\n p, h2, h3 {\n orphans: 3;\n widows: 3; }\n thead {\n display: table-header-group; }\n tr, img {\n page-break-inside: avoid; }\n img {\n max-width: 100% !important; }\n h2, h3, h4 {\n page-break-after: avoid; }\n @page {\n margin: 0.5cm; } }\n\n@keyframes slideUp {\n to {\n height: 0;\n padding-top: 0;\n padding-bottom: 0; } }\n\n@keyframes slideDown {\n from {\n height: 0;\n padding-top: 0;\n padding-bottom: 0; } }\n\n@keyframes fadeIn {\n from {\n opacity: 0; }\n to {\n opacity: 1; } }\n\n@keyframes fadeOut {\n from {\n opacity: 1; }\n to {\n opacity: 0; } }\n\n@keyframes flipIn {\n from {\n opacity: 0;\n transform: scaleY(0); }\n to {\n opacity: 1;\n transform: scaleY(1); } }\n\n@keyframes flipOut {\n from {\n opacity: 1;\n transform: scaleY(1); }\n to {\n opacity: 0;\n transform: scaleY(0); } }\n\n@keyframes zoomIn {\n from {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3); }\n 50% {\n opacity: 1; } }\n\n@keyframes zoomOut {\n from {\n opacity: 1; }\n 50% {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3); }\n to {\n opacity: 0; } }\n\n@keyframes slideInRight {\n from {\n transform: translate3d(100%, 0, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideInLeft {\n from {\n transform: translate3d(-100%, 0, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideInDown {\n from {\n transform: translate3d(0, -100%, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideOutLeft {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(-100%, 0, 0); } }\n\n@keyframes slideOutRight {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(100%, 0, 0); } }\n\n@keyframes slideOutUp {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(0, -100%, 0); } }\n\n@keyframes rotate {\n from {\n transform: rotate(0deg); }\n to {\n transform: rotate(360deg); } }\n\n@keyframes pulse {\n from {\n transform: scale3d(1, 1, 1); }\n 50% {\n transform: scale3d(1.03, 1.03, 1.03); }\n to {\n transform: scale3d(1, 1, 1); } }\n\n@keyframes shake {\n 15% {\n transform: translateX(0.5rem); }\n 30% {\n transform: translateX(-0.4rem); }\n 45% {\n transform: translateX(0.3rem); }\n 60% {\n transform: translateX(-0.2rem); }\n 75% {\n transform: translateX(0.1rem); }\n 90% {\n transform: translateX(0); }\n 90% {\n transform: translateX(0); } }\n\n.fadeIn {\n animation: fadeIn 250ms; }\n\n.fadeOut {\n animation: fadeOut 250ms; }\n\n.zoomIn {\n animation: zoomIn 200ms; }\n\n.zoomOut {\n animation: zoomOut 500ms; }\n\n.slideInRight {\n animation: slideInRight 500ms; }\n\n.slideInLeft {\n animation: slideInLeft 500ms; }\n\n.slideInDown {\n animation: slideInDown 500ms; }\n\n.slideOutLeft {\n animation: slideOutLeft 500ms; }\n\n.slideOutRight {\n animation: slideOutRight 500ms; }\n\n.slideOutUp {\n animation: slideOutUp 500ms; }\n\n.slideUp {\n overflow: hidden;\n animation: slideUp 200ms ease-in-out; }\n\n.slideDown {\n overflow: hidden;\n animation: slideDown 80ms ease-in-out; }\n\n.flipIn {\n animation: flipIn 250ms cubic-bezier(0.5, -0.5, 0.5, 1.5); }\n\n.flipOut {\n animation: flipOut 500ms cubic-bezier(0.5, -0.5, 0.5, 1.5); }\n\n.rotate {\n animation: rotate 500ms; }\n\n.pulse {\n animation: pulse 250ms 2; }\n\n.shake {\n animation: shake 500ms; }\n\n.dropdown {\n position: absolute;\n z-index: 100;\n top: 0;\n right: 0;\n width: 280px;\n color: #000;\n font-size: 15px;\n background: #fff;\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);\n border-radius: 3px;\n max-height: 300px;\n margin: 0;\n padding: 0;\n overflow: hidden; }\n .dropdown.dropdown-mobile {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n max-height: none;\n border: none; }\n .dropdown .close {\n margin: 20px auto; }\n .dropdown.open {\n overflow: auto; }\n .dropdown ul {\n list-style: none;\n margin: 0; }\n .dropdown ul li {\n border-bottom: 1px solid rgba(0, 0, 0, 0.07); }\n .dropdown ul li:last-child {\n border-bottom: none; }\n .dropdown ul a {\n display: block;\n padding: 12px;\n text-decoration: none;\n color: #000; }\n .dropdown ul a:hover {\n background: rgba(0, 0, 0, 0.05); }\n\n.message {\n font-family: Consolas, Monaco, \"Courier New\", monospace;\n font-size: 14px;\n line-height: 20px;\n background: #e0e1e1;\n color: #313439;\n padding: 1rem;\n padding-right: 2.5em;\n padding-bottom: .75rem;\n margin-bottom: 24px;\n position: relative; }\n .message a {\n color: inherit; }\n .message h2,\n .message h3,\n .message h4,\n .message h5,\n .message h6 {\n margin-bottom: 0; }\n .message .close {\n position: absolute;\n right: 1rem;\n top: 1.1rem; }\n\n.message.error {\n background: #f03c69;\n color: #fff; }\n\n.message.success {\n background: #35beb1;\n color: #fff; }\n\n.message.warning {\n background: #f7ba45; }\n\n.message.focus {\n background: #1c86f2;\n color: #fff; }\n\n.message.black {\n background: #0d0d0e;\n color: #fff; }\n\n.message.inverted {\n background: #fff; }\n\n.modal-box {\n position: fixed;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n overflow-x: hidden;\n overflow-y: auto;\n z-index: 200; }\n\n.modal {\n position: relative;\n margin: auto;\n margin-top: 16px;\n padding: 0;\n background: #fff;\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);\n border-radius: 8px;\n color: #000; }\n @media (max-width: 1230px) {\n .modal input,\n .modal textarea {\n font-size: 16px; } }\n .modal .close {\n position: absolute;\n top: 18px;\n right: 16px;\n opacity: .3; }\n .modal .close:hover {\n opacity: 1; }\n\n.modal-header {\n padding: 24px 32px;\n font-size: 18px;\n font-weight: bold;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05); }\n .modal-header:empty {\n display: none; }\n\n.modal-body {\n padding: 36px 56px; }\n\n@media (max-width: 1230px) {\n .modal-header,\n .modal-body {\n padding: 24px; } }\n\n.offcanvas {\n background: #fff;\n position: fixed;\n padding: 24px;\n height: 100%;\n top: 0;\n left: 0;\n z-index: 300;\n overflow-y: scroll; }\n\n.offcanvas .close {\n position: absolute;\n top: 8px;\n right: 8px; }\n\n.offcanvas-left {\n border-right: 1px solid rgba(0, 0, 0, 0.1); }\n\n.offcanvas-right {\n left: auto;\n right: 0;\n border-left: 1px solid rgba(0, 0, 0, 0.1); }\n\n.offcanvas-push-body {\n position: relative; }\n\n.tabs {\n margin-bottom: 24px;\n font-size: 14px; }\n .tabs li em,\n .tabs li.active a {\n color: #313439;\n border: 1px solid rgba(0, 0, 0, 0.1);\n cursor: default;\n text-decoration: none;\n background: none; }\n .tabs em,\n .tabs a {\n position: relative;\n top: 1px;\n font-style: normal;\n display: block;\n padding: .5rem 1rem;\n border: 1px solid transparent;\n color: rgba(0, 0, 0, 0.5);\n text-decoration: none; }\n .tabs a:hover {\n -moz-transition: all linear 0.2s;\n transition: all linear 0.2s;\n color: #313439;\n text-decoration: underline;\n background-color: #e0e1e1; }\n\n@media (min-width: 1230px) {\n .tabs ul {\n display: flex;\n margin-top: -1px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1); }\n .tabs li em,\n .tabs li.active a {\n border-bottom: 1px solid #fff; } }\n",".mg-active-datapoint {\n fill: black;\n font-size: 0.9rem;\n font-weight: 400;\n opacity: 0.8;\n}\n\n.mg-area1-color {\n fill: #0000ff;\n}\n\n.mg-area2-color {\n fill: #05b378;\n}\n\n.mg-area3-color {\n fill: #db4437;\n}\n\n.mg-area4-color {\n fill: #f8b128;\n}\n\n.mg-area5-color {\n fill: #5c5c5c;\n}\n\ntext.mg-barplot-group-label {\n font-weight:900;\n}\n\n.mg-barplot rect.mg-bar {\n shape-rendering: auto;\n}\n\n.mg-barplot rect.mg-bar.default-bar {\n fill: #b6b6fc;\n}\n\n.mg-barplot rect.mg-bar.default-active {\n fill: #9e9efc;\n}\n\n.mg-barplot .mg-bar-prediction {\n fill: #5b5b5b;\n}\n\n.mg-barplot .mg-bar-baseline {\n stroke: #5b5b5b;\n stroke-width: 2;\n}\n\n.mg-bar-target-element {\n font-size:11px;\n padding-left:5px;\n padding-right:5px;\n font-weight:300;\n}\n\n.mg-baselines line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-baselines text {\n fill: black;\n font-size: 0.9rem;\n opacity: 0.6;\n stroke: none;\n}\n\n.mg-baselines-small text {\n font-size: 0.6rem;\n}\n\n.mg-category-guides line {\n stroke: #b3b2b2;\n}\n\n.mg-header {\n cursor: default;\n font-size: 1.2rem;\n}\n\n.mg-header .mg-chart-description {\n fill: #ccc;\n font-family: FontAwesome;\n font-size: 1.2rem;\n}\n\n.mg-header .mg-warning {\n fill: #ccc;\n font-family: FontAwesome;\n font-size: 1.2rem;\n}\n\n.mg-points circle {\n opacity: 0.65;\n}\n\n.mg-popover {\n font-size: 0.95rem;\n}\n\n.mg-popover-content {\n cursor: auto;\n line-height: 17px;\n}\n\n.mg-data-table {\n margin-top: 30px;\n}\n\n.mg-data-table thead tr th {\n border-bottom: 1px solid darkgray;\n cursor: default;\n font-size: 1.1rem;\n font-weight: normal;\n padding: 5px 5px 8px 5px;\n text-align: right;\n}\n\n.mg-data-table thead tr th .fa {\n color: #ccc;\n padding-left: 4px;\n}\n\n.mg-data-table thead tr th .popover {\n font-size: 1rem;\n font-weight: normal;\n}\n\n.mg-data-table .secondary-title {\n color: darkgray;\n}\n\n.mg-data-table tbody tr td {\n margin: 2px;\n padding: 5px;\n vertical-align: top;\n}\n\n.mg-data-table tbody tr td.table-text {\n opacity: 0.8;\n padding-left: 30px;\n}\n\n.mg-y-axis line.mg-extended-yax-ticks {\n opacity: 0.4;\n}\n\n.mg-x-axis line.mg-extended-xax-ticks {\n opacity: 0.4;\n}\n\n.mg-histogram .axis path,\n.mg-histogram .axis line {\n fill: none;\n opacity: 0.7;\n shape-rendering: auto;\n stroke: #ccc;\n}\n\ntspan.hist-symbol {\n fill: #9e9efc;\n}\n\n.mg-histogram .mg-bar rect {\n fill: #b6b6fc;\n shape-rendering: auto;\n}\n\n.mg-histogram .mg-bar rect.active {\n fill: #9e9efc;\n}\n\n.mg-least-squares-line {\n stroke: red;\n stroke-width: 1px;\n}\n\n.mg-lowess-line {\n fill: none;\n stroke: red;\n}\n\n.mg-line1-color {\n stroke: #4040e8;\n}\n\n.mg-hover-line1-color {\n fill: #4040e8;\n}\n\n.mg-line2-color {\n stroke: #05b378;\n}\n\n.mg-hover-line2-color {\n fill: #05b378;\n}\n\n.mg-line3-color {\n stroke: #db4437;\n}\n\n.mg-hover-line3-color {\n fill: #db4437;\n}\n\n.mg-line4-color {\n stroke: #f8b128;\n}\n\n.mg-hover-line4-color {\n fill: #f8b128;\n}\n\n.mg-line5-color {\n stroke: #5c5c5c;\n}\n\n.mg-hover-line5-color {\n fill: #5c5c5c;\n}\n\n.mg-line-legend text {\n font-size: 0.9rem;\n font-weight: 300;\n stroke: none;\n}\n\n.mg-line1-legend-color {\n color: #4040e8;\n fill: #4040e8;\n}\n\n.mg-line2-legend-color {\n color: #05b378;\n fill: #05b378;\n}\n\n.mg-line3-legend-color {\n color: #db4437;\n fill: #db4437;\n}\n\n.mg-line4-legend-color {\n color: #f8b128;\n fill: #f8b128;\n}\n\n.mg-line5-legend-color {\n color: #5c5c5c;\n fill: #5c5c5c;\n}\n\n.mg-main-area-solid svg .mg-main-area {\n fill: #ccccff;\n opacity: 1;\n}\n\n.mg-markers line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-markers text {\n fill: black;\n font-size: 0.8rem;\n opacity: 0.6;\n}\n\n.mg-missing-text {\n opacity: 0.9;\n}\n\n.mg-missing-background {\n stroke: blue;\n fill: none;\n stroke-dasharray: 10,5;\n stroke-opacity: 0.05;\n stroke-width: 2;\n}\n\n.mg-missing .mg-main-line {\n opacity: 0.1;\n}\n\n.mg-missing .mg-main-area {\n opacity: 0.03;\n}\n\npath.mg-main-area {\n opacity: 0.2;\n stroke: none;\n}\n\npath.mg-confidence-band {\n fill: #ccc;\n opacity: 0.4;\n stroke: none;\n}\n\npath.mg-main-line {\n fill: none;\n opacity: 0.8;\n stroke-width: 1.1px;\n}\n\n.mg-points circle {\n fill-opacity: 0.4;\n stroke-opacity: 1;\n}\n\ncircle.mg-points-mono {\n fill: #0000ff;\n stroke: #0000ff;\n}\n\ntspan.mg-points-mono {\n fill: #0000ff;\n stroke: #0000ff;\n}\n\n/* a selected point in a scatterplot */\n.mg-points circle.selected {\n fill-opacity: 1;\n stroke-opacity: 1;\n}\n\n.mg-voronoi path {\n fill: none;\n pointer-events: all;\n stroke: none;\n stroke-opacity: 0.1;\n}\n\n.mg-x-rug-mono,\n.mg-y-rug-mono {\n stroke: black;\n}\n\n.mg-x-axis line,\n.mg-y-axis line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-x-axis text,\n.mg-y-axis text,\n.mg-histogram .axis text {\n fill: black;\n font-size: 0.9rem;\n opacity: 0.6;\n}\n\n.mg-x-axis .label,\n.mg-y-axis .label,\n.mg-axis .label {\n font-size: 0.8rem;\n text-transform: uppercase;\n font-weight: 400;\n}\n\n.mg-x-axis-small text,\n.mg-y-axis-small text,\n.mg-active-datapoint-small {\n font-size: 0.6rem;\n}\n\n.mg-x-axis-small .label,\n.mg-y-axis-small .label {\n font-size: 0.65rem;\n}\n\n.mg-european-hours {\n}\n\n.mg-year-marker text {\n fill: black;\n font-size: 0.7rem;\n opacity: 0.6;\n}\n\n.mg-year-marker line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-year-marker-small text {\n font-size: 0.6rem;\n}\n","body {\n background: #eaeaea;\n padding-bottom: 216px;\n}\nheader {\n width: 100%;\n min-height: 216px;\n padding: 48px;\n margin-bottom: 24px;\n background: #fafafa;\n}\nheader .search {\n margin-top: 48px;\n}\n#logo {\n display: block;\n margin: 0 auto;\n max-width: 400px;\n}\n.content {\n margin: auto;\n width: 95%;\n max-width: 1080px;\n}\nsection#landing h1 {\n font-size: 25px;\n}\nsection {\n padding: 36px;\n float: right;\n margin: 0 0 24px 0;\n background: #fafafa;\n box-shadow: 5px 5px 20px 2px rgba(0,0,0,0.03);\n}\nsection h2 {\n font-size: 21px;\n line-height: 32px;\n color: #7d7d7d;\n margin-bottom: 50px;\n}\nsection small {\n display: block;\n width: 100%;\n margin-top: 30px;\n padding-right: 20px;\n text-align: right;\n color: #aaa;\n}\nsection small a {\n color: #aaf;\n text-decoration: none;\n}\nsection.unmaterialized {\n box-shadow: 0 0 0 0;\n background: #f0f0f0;\n padding: 24px 24px 48px 24px;\n border-right: 1px solid #dedede;\n border-bottom: 1px solid #dedede;\n}\n#controls {\n padding: 36px;\n background: #f0f0f0;\n border-right: 1px solid #dedede;\n border-bottom: 1px solid #dedede;\n margin-bottom: 20px;\n}\n.fixed {\n position: relative;\n}\n@media (min-width: 1230px) {\n #cards {\n padding-bottom: 100px;\n position: relative;\n z-index: 9;\n }\n section {\n z-index: 10;\n width: calc(100% - 345px);\n float: right;\n }\n #landing {\n width: 100%;\n }\n .fixed-container {\n z-index: 0;\n position: absolute;\n top: 245px;\n left: calc(50% - (540px));\n }\n .fixed {\n position: fixed !important;\n top: 25px;\n }\n #controls {\n width: 325px;\n float: left;\n }\n}\ncite.metric {\n display: block;\n width: 100%;\n height: 0;\n float: right;\n text-align: center;\n font-size: 12px;\n color: #ccc;\n font-style: normal;\n padding-left: 50px;\n margin: 200px 0px -185px 0;\n}\ncite.metric a {\n color: #aaa;\n text-decoration: underline;\n}\n.linechart {\n height: 210px;\n margin-bottom: 30px;\n}\n.mg-line-legend {\n display: none;\n}\n.legend {\n position: relative;\n margin: 0;\n padding: 0;\n height: 0;\n top: 31px;\n left: 55px;\n fontSize: 14px;\n fontWeight: bold;\n opacity: 0.8;\n}\n.mg-baselines {\n opacity: 0.5;\n}\n.loader {\n width: 100%;\n text-align: center;\n line-height: 10;\n animation: outro 1s, loader 1.5s infinite;\n}\n.intro {\n animation: intro 2s;\n}\n@media print {\n body {\n zoom: 75%;\n }\n section {\n min-width: 800px;\n min-height: 10.5in;\n page-break-after: always;\n }\n section.unmaterialized {\n display: none;\n }\n}\n.hidden,\n.hidden > *,\n.hidden > small {\n display: none !important;\n}\n@-moz-keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-webkit-keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-o-keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-moz-keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-webkit-keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-o-keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-moz-keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n@-webkit-keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n@-o-keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n@keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n"]}
\ No newline at end of file
diff --git a/frontend/public/static/app.js b/frontend/public/static/app.js
index 09439e76e5..f358082114 100644
--- a/frontend/public/static/app.js
+++ b/frontend/public/static/app.js
@@ -153,30 +153,30 @@ var __makeRelativeRequire = function(require, mappings, pref) {
return require(name);
}
};
-require.register("GHData.js", function(exports, require, module) {
+require.register("Augur.js", function(exports, require, module) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
-exports.default = GHData;
+exports.default = Augur;
var queryString = require('query-string');
-function GHData() {
+function Augur() {
window.jQuery = require('jquery');
window.Vue = require('vue');
window.Vuex = require('vuex');
- var GHDataAPI = require('GHDataAPI').default;
- window.GHDataAPI = new GHDataAPI();
- window.GHDataRepos = {};
- window.GHDataStats = require('GHDataStats').default;
+ var AugurAPI = require('AugurAPI').default;
+ window.AugurAPI = new AugurAPI();
+ window.AugurRepos = {};
+ window.AugurStats = require('AugurStats').default;
window.$ = window.jQuery;
- var GHDataApp = require('./components/GHDataApp');
+ var AugurApp = require('./components/AugurApp');
Vue.use(Vuex);
- window.ghdata = new Vuex.Store({
+ window.augur = new Vuex.Store({
state: {
baseRepo: null,
comparedRepos: [],
@@ -188,25 +188,25 @@ function GHData() {
},
mutations: {
setBaseRepo: function setBaseRepo(state, payload) {
- var repo = window.GHDataAPI.Repo(payload.url);
- if (!window.GHDataRepos[repo.toString()]) {
- window.GHDataRepos[repo.toString()] = repo;
+ var repo = window.AugurAPI.Repo(payload.url);
+ if (!window.AugurRepos[repo.toString()]) {
+ window.AugurRepos[repo.toString()] = repo;
}
state.baseRepo = repo.toString();
if (!payload.keepCompared) {
state.comparedRepos = [];
}
- var title = repo.owner + '/' + repo.name + '- GHData';
+ var title = repo.owner + '/' + repo.name + '- Augur';
var queryString = '?repo=' + repo.owner + '+' + repo.name;
window.history.pushState(null, title, queryString);
},
addComparedRepo: function addComparedRepo(state, payload) {
- var repo = window.GHDataAPI.Repo(payload.url);
- if (!window.GHDataRepos[repo.toString()]) {
- window.GHDataRepos[repo.toString()] = repo;
+ var repo = window.AugurAPI.Repo(payload.url);
+ if (!window.AugurRepos[repo.toString()]) {
+ window.AugurRepos[repo.toString()] = repo;
}
state.comparedRepos.push(repo.toString());
- var title = 'GHData';
+ var title = 'Augur';
var queryString = window.location.search + '&comparedTo[]=' + repo.owner + '+' + repo.name;
window.history.pushState(null, title, queryString);
},
@@ -234,29 +234,29 @@ function GHData() {
compare: "each",
byDate: false
};
- window.history.pushState(null, 'GHData', '/');
+ window.history.pushState(null, 'Augur', '/');
} // end reset
} // end mutations
});
- GHDataApp.store = window.ghdata;
- window.GHDataApp = new Vue(GHDataApp).$mount('#app');
+ AugurApp.store = window.augur;
+ window.AugurApp = new Vue(AugurApp).$mount('#app');
// Load state from query string
var parsed = queryString.parse(location.search, { arrayFormat: 'bracket' });
if (parsed.repo) {
- window.GHDataApp.$store.commit('setBaseRepo', { url: parsed.repo.replace(' ', '/') });
+ window.AugurApp.$store.commit('setBaseRepo', { url: parsed.repo.replace(' ', '/') });
}
if (parsed.comparedTo) {
parsed.comparedTo.forEach(function (repo) {
- window.GHDataApp.$store.commit('addComparedRepo', { url: repo.replace(' ', '/') });
+ window.AugurApp.$store.commit('addComparedRepo', { url: repo.replace(' ', '/') });
});
}
}
});
-;require.register("GHDataAPI.js", function(exports, require, module) {
+;require.register("AugurAPI.js", function(exports, require, module) {
'use strict';
Object.defineProperty(exports, "__esModule", {
@@ -269,16 +269,16 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
var $ = require('jquery');
-var GHDataAPI = function () {
- function GHDataAPI(hostURL, version) {
- _classCallCheck(this, GHDataAPI);
+var AugurAPI = function () {
+ function AugurAPI(hostURL, version) {
+ _classCallCheck(this, AugurAPI);
this._version = version || 'unstable';
this._host = hostURL || 'http://' + window.location.hostname + ':5000/';
this.__cache = {};
}
- _createClass(GHDataAPI, [{
+ _createClass(AugurAPI, [{
key: 'Repo',
value: function Repo(owner, repoName) {
var _this = this;
@@ -358,13 +358,13 @@ var GHDataAPI = function () {
}
}]);
- return GHDataAPI;
+ return AugurAPI;
}();
-exports.default = GHDataAPI;
+exports.default = AugurAPI;
});
-;require.register("GHDataStats.js", function(exports, require, module) {
+;require.register("AugurStats.js", function(exports, require, module) {
'use strict';
Object.defineProperty(exports, "__esModule", {
@@ -375,19 +375,19 @@ var _createClass = function () { function defineProperties(target, props) { for
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-var GHDataStats = function () {
- function GHDataStats() {
- _classCallCheck(this, GHDataStats);
+var AugurStats = function () {
+ function AugurStats() {
+ _classCallCheck(this, AugurStats);
}
- _createClass(GHDataStats, null, [{
+ _createClass(AugurStats, null, [{
key: 'convertDates',
value: function convertDates(data, earliest, latest) {
earliest = earliest || new Date('01-01-2005');
latest = latest || new Date();
if (Array.isArray(data[0])) {
data = data.map(function (datum) {
- return GHDataStats.convertDates(datum);
+ return AugurStats.convertDates(datum);
});
} else {
@@ -405,7 +405,7 @@ var GHDataStats = function () {
value: function convertKey(data, key) {
if (Array.isArray(data[0])) {
data = data.map(function (datum) {
- return GHDataStats.convertKey(datum, key);
+ return AugurStats.convertKey(datum, key);
});
} else {
var EARLIEST = new Date('01-01-2005');
@@ -429,11 +429,11 @@ var GHDataStats = function () {
var flat = ary.map(function (e) {
return e[key];
});
- mean = mean || GHDataStats.averageArray(flat);
+ mean = mean || AugurStats.averageArray(flat);
var distances = flat.map(function (e) {
return (e - mean) * (e - mean);
});
- return Math.sqrt(GHDataStats.averageArray(distances));
+ return Math.sqrt(AugurStats.averageArray(distances));
}
}, {
key: 'describe',
@@ -441,8 +441,8 @@ var GHDataStats = function () {
var flat = ary.map(function (e) {
return e[key];
});
- var mean = GHDataStats.averageArray(flat);
- var stddev = GHDataStats.standardDeviation(ary, key, mean);
+ var mean = AugurStats.averageArray(flat);
+ var stddev = AugurStats.standardDeviation(ary, key, mean);
var variance = stddev * stddev;
return {
'mean': mean,
@@ -479,7 +479,7 @@ var GHDataStats = function () {
}
var average = { date: new Date(date) };
- average[key] = GHDataStats.averageArray(averageWindow.slice(0, windowSizeInDays));
+ average[key] = AugurStats.averageArray(averageWindow.slice(0, windowSizeInDays));
averageWindow.shift();
rolling.push(average);
}
@@ -491,7 +491,7 @@ var GHDataStats = function () {
if (!data) {
return [];
}
- baseline = baseline || GHDataStats.averageArray(data.map(function (e) {
+ baseline = baseline || AugurStats.averageArray(data.map(function (e) {
return e[key];
}));
data = data.map(function (datum) {
@@ -515,9 +515,9 @@ var GHDataStats = function () {
};
var data = {};
- data['base'] = GHDataStats.rollingAverage(GHDataStats.convertDates(GHDataStats.convertKey(baseData, Object.keys(baseData[0])[1]), config.earliest, config.latest), undefined, config.period);
+ data['base'] = AugurStats.rollingAverage(AugurStats.convertDates(AugurStats.convertKey(baseData, Object.keys(baseData[0])[1]), config.earliest, config.latest), undefined, config.period);
- data['compare'] = GHDataStats.rollingAverage(GHDataStats.convertDates(GHDataStats.convertKey(compareData, Object.keys(compareData[0])[1]), config.earliest, config.latest), undefined, config.period);
+ data['compare'] = AugurStats.rollingAverage(AugurStats.convertDates(AugurStats.convertKey(compareData, Object.keys(compareData[0])[1]), config.earliest, config.latest), undefined, config.period);
var smaller = data['base'][0].date < data['compare'][0].date ? 'base' : 'compare';
var larger = data['base'][0].date < data['compare'][0].date ? 'compare' : 'base';
@@ -551,7 +551,7 @@ var GHDataStats = function () {
key: 'zscores',
value: function zscores(data, key) {
key = key || 'value';
- var stats = GHDataStats.describe(data, key);
+ var stats = AugurStats.describe(data, key);
return data.map(function (e) {
var newObj = {};
if (e.date) {
@@ -569,10 +569,10 @@ var GHDataStats = function () {
}
}]);
- return GHDataStats;
+ return AugurStats;
}();
-exports.default = GHDataStats;
+exports.default = AugurStats;
});
;require.register("components/BaseRepoActivityCard.vue", function(exports, require, module) {
@@ -695,36 +695,36 @@ if (module.hot) {(function () { var hotAPI = require("vue-hot-reload-api")
})()}
});
-;require.register("components/GHDataApp.vue", function(exports, require, module) {
+;require.register("components/AugurApp.vue", function(exports, require, module) {
;(function(){
'use strict';
-var _GHDataHeader = require('./GHDataHeader.vue');
+var _AugurHeader = require('./AugurHeader.vue');
-var _GHDataHeader2 = _interopRequireDefault(_GHDataHeader);
+var _AugurHeader2 = _interopRequireDefault(_AugurHeader);
var _SidebarControls = require('./SidebarControls.vue');
var _SidebarControls2 = _interopRequireDefault(_SidebarControls);
-var _GHDataCards = require('./GHDataCards.vue');
+var _AugurCards = require('./AugurCards.vue');
-var _GHDataCards2 = _interopRequireDefault(_GHDataCards);
+var _AugurCards2 = _interopRequireDefault(_AugurCards);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
module.exports = {
components: {
- 'ghdata-header': _GHDataHeader2.default,
+ 'augur-header': _AugurHeader2.default,
SidebarControls: _SidebarControls2.default,
- 'ghdata-cards': _GHDataCards2.default
+ 'augur-cards': _AugurCards2.default
}
};
})()
if (module.exports.__esModule) module.exports = module.exports.default
var __vue__options__ = (typeof module.exports === "function"? module.exports.options: module.exports)
if (__vue__options__.functional) {console.error("[vueify] functional components are not supported and should be defined in plain js files using render functions.")}
-__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('ghdata-header'),_vm._v(" "),_c('div',{staticClass:"content"},[_c('sidebar-controls'),_vm._v(" "),_c('ghdata-cards')],1)],1)}
+__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('augur-header'),_vm._v(" "),_c('div',{staticClass:"content"},[_c('sidebar-controls'),_vm._v(" "),_c('augur-cards')],1)],1)}
__vue__options__.staticRenderFns = []
if (module.hot) {(function () { var hotAPI = require("vue-hot-reload-api")
hotAPI.install(require("vue"), true)
@@ -738,7 +738,7 @@ if (module.hot) {(function () { var hotAPI = require("vue-hot-reload-api")
})()}
});
-;require.register("components/GHDataCards.vue", function(exports, require, module) {
+;require.register("components/AugurCards.vue", function(exports, require, module) {
;(function(){
'use strict';
@@ -801,7 +801,7 @@ if (module.hot) {(function () { var hotAPI = require("vue-hot-reload-api")
})()}
});
-;require.register("components/GHDataHeader.vue", function(exports, require, module) {
+;require.register("components/AugurHeader.vue", function(exports, require, module) {
;(function(){
'use strict';
@@ -901,9 +901,9 @@ Object.defineProperty(exports, "__esModule", {
value: true
});
-var _GHDataStats = require('../../GHDataStats');
+var _AugurStats = require('../../AugurStats');
-var _GHDataStats2 = _interopRequireDefault(_GHDataStats);
+var _AugurStats2 = _interopRequireDefault(_AugurStats);
var _d = require('d3');
@@ -923,19 +923,19 @@ exports.default = {
var _this = this;
if (this.repo) {
- window.GHDataRepos[this.repo].dependents().then(function (dependents) {
+ window.AugurRepos[this.repo].dependents().then(function (dependents) {
_this.$refs['dependents'].innerHTML = '';
for (var i = 0; i < dependents.length && i < 10; i++) {
_this.$refs['dependents'].innerHTML += dependents[i].name + '
';
}
});
- window.GHDataRepos[this.repo].dependencies().then(function (dependencies) {
+ window.AugurRepos[this.repo].dependencies().then(function (dependencies) {
_this.$refs['dependencies'].innerHTML = '';
for (var i = 0; i < dependencies.dependencies.length && i < 10; i++) {
_this.$refs['dependents'].innerHTML += dependencies.dependencies[i].name + '
';
}
});
- window.GHDataRepos[this.repo].dependencyStats().then(function (depstats) {
+ window.AugurRepos[this.repo].dependencyStats().then(function (depstats) {
_this.$refs['totaldependents'].innerHTML = depstats['dependent_repositories'];
_this.$refs['totaldependencies'].innerHTML = depstats['dependencies'];
});
@@ -969,9 +969,9 @@ var _metricsGraphics = require('metrics-graphics');
var _metricsGraphics2 = _interopRequireDefault(_metricsGraphics);
-var _GHDataStats = require('../GHDataStats');
+var _AugurStats = require('../AugurStats');
-var _GHDataStats2 = _interopRequireDefault(_GHDataStats);
+var _AugurStats2 = _interopRequireDefault(_AugurStats);
var _d = require('d3');
@@ -1020,9 +1020,9 @@ var _d = require('d3');
var d3 = _interopRequireWildcard(_d);
-var _GHDataStats = require('GHDataStats');
+var _AugurStats = require('AugurStats');
-var _GHDataStats2 = _interopRequireDefault(_GHDataStats);
+var _AugurStats2 = _interopRequireDefault(_AugurStats);
var _vuex = require('vuex');
@@ -1073,15 +1073,15 @@ exports.default = {
if (this.$refs.chart) {
this.$refs.chart.className = 'linechart loader';
}
- window.GHDataRepos[this.repo][this.source]().then(function (baseData) {
+ window.AugurRepos[this.repo][this.source]().then(function (baseData) {
_this.$refs.chartStatus.innerHTML = '';
if (baseData && baseData.length) {
- config.data = _GHDataStats2.default.convertDates(baseData, _this.earliest, _this.latest);
+ config.data = _AugurStats2.default.convertDates(baseData, _this.earliest, _this.latest);
} else {
config.data = [];
}
if (_this.comparedTo) {
- return GHDataRepos[_this.comparedTo][_this.source]();
+ return AugurRepos[_this.comparedTo][_this.source]();
}
return new Promise(function (resolve, reject) {
resolve();
@@ -1091,16 +1091,16 @@ exports.default = {
if (config.data && compareData && compareData.length) {
if (config.compare == 'each') {
var key = Object.keys(compareData[0])[1];
- var compare = _GHDataStats2.default.rollingAverage(_GHDataStats2.default.zscores(compareData, key), 'value', _this.period);
- var base = _GHDataStats2.default.rollingAverage(_GHDataStats2.default.zscores(config.data, key), 'value', _this.period);
+ var compare = _AugurStats2.default.rollingAverage(_AugurStats2.default.zscores(compareData, key), 'value', _this.period);
+ var base = _AugurStats2.default.rollingAverage(_AugurStats2.default.zscores(config.data, key), 'value', _this.period);
config.data = [base, compare];
- config.legend = [window.GHDataRepos[_this.repo].toString(), window.GHDataRepos[_this.comparedTo].toString()];
+ config.legend = [window.AugurRepos[_this.repo].toString(), window.AugurRepos[_this.comparedTo].toString()];
config.colors = config.colors || ['#FF3647', '#999'];
} else {
console.log('rendering percentage');
config.format = 'percentage';
config.baselines = [{ value: 1, label: config.baseline }];
- config.data = _GHDataStats2.default.makeRelative(config.data, compareData, {
+ config.data = _AugurStats2.default.makeRelative(config.data, compareData, {
earliest: config.earliest,
latest: config.latest,
byDate: config.byDate,
@@ -1110,8 +1110,8 @@ exports.default = {
} else {
if (!_this.disableRollingAverage) {
config.legend = config.legend || [config.title.toLowerCase(), _this.period + ' day average'];
- var rolling = _GHDataStats2.default.rollingAverage(config.data, keys[0], _this.period);
- config.data = _GHDataStats2.default.convertKey(_GHDataStats2.default.combine(config.data, rolling), keys[0]);
+ var rolling = _AugurStats2.default.rollingAverage(config.data, keys[0], _this.period);
+ config.data = _AugurStats2.default.convertKey(_AugurStats2.default.combine(config.data, rolling), keys[0]);
config.colors = config.colors || ['#CCC', '#FF3647'];
config.y_accessor = 'value';
}
diff --git a/frontend/public/static/app.js.map b/frontend/public/static/app.js.map
index 3c1804f6e6..ade04debbf 100644
--- a/frontend/public/static/app.js.map
+++ b/frontend/public/static/app.js.map
@@ -1 +1 @@
-{"version":3,"sources":["app/GHData.js","app/GHDataAPI.js","app/GHDataStats.js","app/components/BaseRepoActivityCard.vue","app/components/BaseRepoEcosystemCard.vue","app/components/ComparedRepoActivityCard.vue","app/components/GHDataApp.vue","app/components/GHDataCards.vue","app/components/GHDataHeader.vue","app/components/SidebarControls.vue","app/components/charts/DependencyOverview.vue","app/components/charts/EmptyChart.vue","app/components/charts/LineChart.vue","app/include/kube/kube.js","app/include/metricsgraphics.js","app/include/mg_line_brushing.js"],"names":["GHData","queryString","require","window","jQuery","Vue","Vuex","GHDataAPI","default","GHDataRepos","GHDataStats","$","GHDataApp","use","ghdata","Store","state","baseRepo","comparedRepos","trailingAverage","startDate","Date","endDate","compare","byDate","mutations","setBaseRepo","payload","repo","Repo","url","toString","keepCompared","title","owner","name","history","pushState","addComparedRepo","push","location","search","setDates","parseInt","setCompare","reset","store","$mount","parsed","parse","arrayFormat","$store","commit","replace","comparedTo","forEach","hostURL","version","_version","_host","hostname","__cache","repoName","splitURL","split","length","Endpoint","endpoint","self","params","callback","btoa","created_at","now","Promise","resolve","reject","JSON","data","get","then","stringify","Timeseries","func","relativeTo","baselineRepo","commits","forks","issues","pulls","stars","tags","downloads","uniqueCommitters","pullsAcceptanceRate","issuesResponseTime","contributors","contributions","committerLocations","communityAge","linkingWebsites","busFactor","dependents","dependencies","dependencyStats","earliest","latest","Array","isArray","map","datum","convertDates","d","date","filter","key","convertKey","EARLIEST","value","ary","reduce","a","e","mean","flat","averageArray","distances","Math","sqrt","stddev","standardDeviation","variance","windowSizeInDays","rolling","averageWindow","i","lastFound","after","before","setDate","getDate","iter","average","slice","shift","baseline","baseData","compareData","config","undefined","period","base","rollingAverage","Object","keys","smaller","larger","result","toPush","x","stats","describe","newObj","zscore","from","arguments","Error","fn","jquery","Function","prototype","inherits","parent","F","f","prop","super","Kube","element","options","$element","opts","extend","defaults","namespace","$target","target","getInstance","hasTarget","type","args","call","splice","_fireCallback","_data","callbacks","isFunction","apply","events","eventNamespace","len","handler","Plugin","create","classname","pluginname","toLowerCase","method","val","each","$this","methodVal","error","autoload","arr","s","trim","join","autoloadQueue","startAutoload","MutationObserver","observer","mutation","newNodes","addedNodes","nodeType","startAutoloadOnce","observe","document","subtree","childList","$nodes","not","$el","indexOf","attr","watch","on","Animation","effect","completeCallback","prefixes","queue","start","isSlideEffect","setElementHeight","addToQueue","clean","animate","height","removeElementHeight","css","isHideableEffect","effects","inArray","isToggleEffect","storeHideClasses","hasClass","revertHideClasses","addClass","removeData","removeHideClass","removeClass","makeSimpleEffects","_callback","complete","proxy","makeComplete","make","event","one","off","animation","Detect","isMobile","test","navigator","userAgent","isDesktop","isMobileScreen","width","isTabletScreen","isDesktopScreen","FormData","app","set","formdata","appendForms","appendFields","$fields","str","append","$forms","formsData","serializeArray","serialize","Response","obj","item","parseItem","html","stripslashes","top","href","notify","Utils","disableBodyScroll","$body","windowWidth","innerWidth","documentElementRect","documentElement","getBoundingClientRect","right","abs","left","isOverflowing","body","clientWidth","scrollbarWidth","measureScrollbar","scrollDiv","createElement","className","offsetWidth","removeChild","enableBodyScroll","Message","closeSelector","closeEvent","animationOpen","animationClose","$close","find","close","stop","open","preventDefault","isOpened","onOpened","onClosed","Sticky","offset","offsetTop","getOffsetTop","load","scroll","isFix","fixed","unfixed","scrollTop","Toggleme","toggleEvent","text","toggle","revertText","storeText","setTimeout","replaceText","Offcanvas","direction","clickOutside","utils","detect","buildTargetWidth","buildAnimationDirection","getCloseLink","closeAll","pushBody","$elms","isTag","tagName","closest","pullBody","handleKeyboard","which","properties","Collapse","active","toggleClass","boxClass","hashes","currentHash","currentItem","$items","getItems","loadItems","$boxes","getBoxes","setActiveItem","el","getItem","hash","getItemBy","addActive","$box","$caret","$parent","removeActive","openAll","num","eq","Dropdown","caretUp","buildClose","buildCaret","buildMobileAnimation","disableEvents","getCaret","buildCaretPosition","innerHeight","toggleCaretOpen","toggleCaretClose","setPosition","shouldNotBeClosed","enableEvents","isNavigationFixed","getPlacement","getOffset","position","getPosition","coords","placement","leftFix","outerHeight","Tabs","equals","live","buildLiveTabs","tabsCollection","hashesCollection","$tabs","getTabs","getLocationHash","setItemHeight","toArray","collectItem","$tab","$layers","$liveTabsList","buildLiveItem","tab","$li","$a","index","getLiveItemId","getLiveItemTitle","first","next","fetchElement","prev","pushStateOpen","pushStateClose","isHash","minHeight","getItemMaxHeight","max","h","modalcurrent","modalwindow","show","modal","Modal","header","maxHeight","overlay","buildModal","$modal","$header","buildOverlay","$overlay","prepend","buildHeader","buildContent","findActions","resize","handleEnter","getData","ajax","getTime","cache","success","buildWidth","bottom","percent","match","buildPosition","windowHeight","buildHeight","padding","margin","modalHeight","handleEscape","setHeader","setContent","content","setWidth","getModal","getBody","getHeader","root","factory","define","amd","exports","module","MG","d3","global","convert","accessor","time_format","parse_time","timeParse","number","Number","utc","specifier","utcFormat","timeFormat","mg_jquery_exists","mg_get_rollover_time_format","fmt","processed","x_time_frame","utc_time","mg_data_in_plot_bounds","x_accessor","min_x","max_x","y_accessor","min_y","max_y","is_array","thing","is_function","is_empty_array","is_object","is_array_of_arrays","all_elements","sum","is_array_of_objects","is_array_of_objects_or_empty","pluck","count_array_elements","b","mg_get_bottom","mg_get_plot_bottom","buffer","mg_get_top","mg_get_plot_top","mg_get_left","mg_get_plot_left","mg_get_right","mg_get_plot_right","mg_exit_and_remove","elem","exit","remove","mg_selectAll_and_remove","svg","cl","selectAll","mg_add_g","classed","mg_remove_element","select","mg_make_rug","rug_class","mg_get_svg_child_of","all_data","mg_flatten_array","rug","enter","mg_add_color_accessor_to_rug","rug_mono_class","color_accessor","scalefns","colorf","mg_rotate_labels","labels","rotation_degree","dy","transform","mg_elements_are_overlapping","node","mg_is_horizontally_overlapping","mg_prevent_horizontal_overlap","newY","mg_prevent_vertical_overlap","sort","reverse","overlap_amount","label_i","label_j","j","mg_is_vertically_overlapping","sibling","element_bbox","sibling_bbox","mg_is_horiz_overlap","mg_infer_type","ns","testPoint","selector_or_node","flat_data","concat","mg_next_id","_next_elem_id","mg_target_ref","mg_normalize","HTMLElement","target_ref","getAttribute","setAttribute","console","warn","string","get_pixel_dimension","dimension","style","get_width","get_height","isNumeric","n","isNaN","parseFloat","isFinite","iterator","context","breaker","k","merge_with_defaults","source","number_of_values","values","has_values_below","has_too_many_zeros","zero_count","mg_is_date","mg_is_object","mg_is_array","mg_is_function","clone","copy","setTime","hasOwnProperty","arr_diff","seen","diff","warn_deprecation","message","untilVersion","trace","truncate_text","textObj","textString","bbox","textContent","getBBox","wrap_text","token","tspanAttrs","words","word","line","lineNumber","lineHeight","y","tspan","pop","getComputedTextLength","register","chartType","descriptor","charts","_hooks","add_hook","hooks","already_registered","hook","call_hook","constructor","globals","deprecations","rollover_callback","replacement","rollout_callback","x_rollover_format","y_rollover_format","show_years","xax_start_at_min","interpolate_tension","link","data_graphic","missing_is_zero","missing_is_hidden","missing_is_hidden_accessor","legend","legend_target","animate_on_load","title_y_position","center_title_full_width","full_width","full_height","small_height_threshold","small_width_threshold","xax_count","xax_tick_length","axes_not_compact","yax_count","yax_tick_length","x_extended_ticks","y_extended_ticks","y_scale_type","min_y_from_data","point_size","xax_units","x_label","x_sort","x_axis","y_axis","x_axis_position","y_axis_position","x_axis_type","y_axis_type","ygroup_accessor","xgroup_accessor","y_padding_percentage","y_outer_padding_percentage","ygroup_padding_percentage","ygroup_outer_padding_percentage","x_padding_percentage","x_outer_padding_percentage","xgroup_padding_percentage","xgroup_outer_padding_percentage","y_categorical_show_guides","x_categorical_show_guide","rotate_x_labels","rotate_y_labels","y_label","yax_units","yax_units_append","x_rug","y_rug","mouseover_align","x_mouseover","y_mouseover","transition_on_update","mouseover","click","show_rollover_text","show_confidence_band","xax_format","area","chart_type","decimals","format","inflator","linked","linked_format","list","baselines","markers","scales","european_clock","show_year_markers","show_secondary_x_label","interpolate","curveCatmullRom","alpha","custom_line_color_map","colors","max_data_size","aggregate_rollover","show_tooltips","selected_chart","deprecation","warned","Tooltip","enabled","timeout","hoverState","inState","init","VERSION","TRANSITION_DURATION","DEFAULTS","selector","template","trigger","delay","container","viewport","getOptions","$viewport","hover","focus","triggers","eventIn","eventOut","leave","_options","fixTitle","getDefaults","hide","getDelegateOptions","currentTarget","Event","tip","clearTimeout","isInStateTrue","hasContent","inDom","contains","ownerDocument","isDefaultPrevented","that","$tip","tipId","getUID","autoToken","autoPlace","detach","display","appendTo","insertAfter","pos","actualWidth","actualHeight","offsetHeight","orgPlacement","viewportDim","calculatedOffset","getCalculatedOffset","applyPlacement","prevHoverState","support","transition","emulateTransitionEnd","marginTop","marginLeft","setOffset","using","props","round","delta","getViewportAdjustedDelta","isVertical","arrowDelta","arrowOffsetPosition","replaceArrow","arrow","getTitle","removeAttr","$e","isBody","elRect","elOffset","outerDims","viewportPadding","viewportDimensions","topEdgeOffset","bottomEdgeOffset","leftEdgeOffset","rightEdgeOffset","o","prefix","random","getElementById","$arrow","enable","disable","toggleEnabled","destroy","option","old","tooltip","Constructor","noConflict","Popover","getContent","children","end","popover","chart_title","chartTitle","insert","description","$chartTitle","mg_add_scale_function","scalefcn_name","scale","inflation","di","mg_position","mg_cat_position","MGScale","scaleArgs","use_inflator","zero_bottom","scaleType","_namespace","namespace_accessor_name","scale_name","toUpperCase","scalefn_name","scaleName","inflateDomain","tf","zeroBottom","numericalDomainFromData","other_flat_data_arrays","illustrative_data","is_time_series","mg_min_max_numerical","time_scale","scaleUtc","scaleTime","scaleLog","scaleLinear","domain","categoricalDomain","scaleOrdinal","categoricalDomainFromData","categoricalVariables","scaleBand","numericalRange","range","categoricalRangeBands","halfway","paddingPercentage","outerPaddingPercentage","paddingInner","paddingOuter","bandwidth","categoricalRange","categoricalColorRange","schemeCategory20","schemeCategory10","clamp","yn","scale_factory","additional_data_arrays","dp","extents","extent","min_val","max_val","mg_force_xax_count_to_be_two","mg_categorical_group_color_scale","mg_add_color_categorical_scale","color","mg_get_categorical_domain","mg_get_color_domain","color_domain","color_type","mg_get_color_range","color_range","processScaleTicks","axis","scale_ticks","ticks","log10","log","LN10","number_of_ticks","data_is_int","rugPlacement","axisArgs","coordinates","x1","x2","rug_buffer_size","y1","y2","rimPlacement","tick_length","toFixed","labelPlacement","tickLength","dx","textAnchor","mg_compute_yax_format","mg_default_xax_format","selectXaxFormat","c","mg_default_bar_xax_format","secondaryLabels","g","time_series","mg_get_yformat_and_secondary_time_function","addSecondaryLabelElements","timeframe","yformat","secondary","time_frame","secondary_function","years","first_tick","X","yg","yearMarkerLine","yearMarkerText","textFcn","xAxisTextElement","addNumericalLabels","_d","addTickLines","ticksClass","extendedTicksClass","extendedTicks","initializeAxisRim","rim","initializeRug","rug_positions","categoricalLabelPlacement","group","groupScale","cat","categoricalLabels","nsClass","groupAccessor","group_g","groups","String","rotateLabels","categoricalGuides","scalef","groupf","alreadyPlotted","grs","last","x11","x21","y11","y21","x12","x22","y12","y22","zeroLine","mgDrawAxis","categorical","numerical","axisName","axisClass","label","show_bar_zero","mg_bar_add_zero_line","axisFactory","t","draw","axis_factory","yf","mg_change_y_extents_for_bars","my","min","trio","baseline_accessor","predictor_accessor","yax_format","pf","d_","r","Y","categorical_groups","YGROUP","set_min_max_y","buff","mg_y_domain_range","mg_define_y_scales","Y_axis","mg_add_y_label","mg_add_y_axis_rim","y_ticks","y1scale","y2scale","mg_add_y_axis_tick_lines","mg_add_y_axis_tick_labels","mg_process_scale_ticks","mg_add_categorical_labels","mg_add_group_label","mg_add_graphic_labels","mg_draw_group_lines","ygroup_height","mg_y_categorical_show_guides","ygroupf","y_axis_categorical","xf","mg_add_processed_object","mg_select_xax_format","mg_add_x_ticks","mg_add_x_tick_labels","mg_add_x_label","x_axis_categorical","additional_buffer","mg_add_categorical_scale","categorical_variables","mg_add_x_axis_categorical_labels","bar_outer_padding_percentage","truncate_x_labels","idx","mg_point_add_color_scale","mg_point_add_size_scale","min_size","max_size","size_domain","size_range","size_accessor","mg_get_size_domain","mg_get_size_range","size","x_label_nudge_x","mg_get_time_frame","mg_milisec_diff","mg_sec_diff","mg_day_diff","mg_four_days","mg_many_days","mg_many_months","mg_years","mg_get_time_format","main_time_format","mg_process_time_format","main_x_time_format","original_data","flattened","test_point_x","original_x_accessor","is_float","mg_add_x_axis_rim","mg_add_x_axis_tick_lines","x_ticks","last_i","mg_add_primary_x_axis_label","mg_add_secondary_x_axis_label","mg_add_secondary_x_axis_elements","timeDays","timeYears","mg_add_year_marker_line","mg_add_year_marker_text","mg_min_max_x_for_nonbars","mx","extent_x","mg_min_max_x_for_bars","mg_min_max_x_for_dates","yesterday","tomorrow","mg_min_max_x_for_numbers","mg_min_max_x_for_strings","mg_sort_through_data_type_and_set_x_min_max_accordingly","mg_merge_args_with_defaults","mg_is_time_series","first_elem","mg_init_compute_width","svg_width","mg_categorical_calculate_height","mg_init_compute_height","svg_height","mg_remove_svg_if_chart_type_has_changed","empty","mg_add_svg_if_it_doesnt_exist","mg_add_clip_path_for_plot_area","mg_adjust_width_and_height_if_changed","mg_set_viewbox_for_scaling","mg_remove_missing_classes_and_text","mg_remove_outdated_lines","nodes","array_full_series","lines_to_remove","num_of_new","num_of_existing","mg_raise_container_error","categoricalInitialization","mg_categorical_count_number_of_groups","mg_categorical_count_number_of_lanes","mg_categorical_calculate_group_length","mg_categorical_calculate_bar_thickness","accessor_string","total_bars","group_bars","bars_per_group","groupHeight","gh","step","bar_thickness","groupContribution","marginContribution","mg_barchart_extrapolate_group_and_thickness_from_height","mg_return_label","mg_remove_existing_markers","mg_in_range","mg_x_position","mg_x_position_fixed","_mg_x_pos","mg_y_position_fixed","_mg_y_pos","mg_place_annotations","checker","class_name","line_fcn","text_fcn","mg_place_markers","mg_place_marker_lines","mg_place_marker_text","mg_place_baselines","mg_place_baseline_lines","mg_place_baseline_text","gm","x_pos_fixed","lineclass","textclass","gb","y_pos","mg_clear_mouseover_container","mg_setup_mouseover_container","text_anchor","mouseover_x","active_datapoint","active_datapoint_y_nudge","y_position","yPos","mg_mouseover_tspan","bold","font_size","pts","mg_reset_text_container","textContainer","mg_mouseover_row","row_number","rargs","rrr","mg_mouseover_text","text_container","mouseover_row","MG_WindowResizeTracker","targets","Observer","WebKitMutationObserver","window_listener","parentNode","aspect","newWidth","remove_target","removeEventListener","add_target","addEventListener","targetNode","some","removedNodes","disconnect","mg_window_resize_tracker","mg_window_listeners","mg_if_aspect_ratio_resize_svg","dropdown","backdrop","is","getParent","isActive","clearMenus","relatedTarget","keydown","stopPropagation","desc","button_layout","feature_set","public_name","sorters","manual","manual_map","manual_callback","_strip_punctuation","punctuationless","finalString","manual_button","feature","button","features","feat","mapDtoF","dropdownLiAClick","manual_feature","mg_line_color_text","line_id","mg_line_graph_generators","plot","mg_add_line_generator","mg_add_area_generator","mg_add_flat_line_generator","mg_add_confidence_band_generator","existing_band","confidence_area","defined","y0","l","u","curve","flat_line","data_median","mg_add_confidence_band","which_line","confidenceBand","duration","mg_add_area","areas","display_area","appendChild","update_transition_duration","mg_default_color_for_path","this_path","mg_color_line","mg_add_line_element","median","mg_add_line","existing_line","lineTransition","attrTween","path_tween","mg_add_legend_element","this_legend","legend_text","anchor_point","anchor_orientation","legend_group","mg_plot_legend_if_legend_target","mg_add_legend_group","mg_remove_existing_line_rollover_elements","mg_add_rollover_circle","circle","mg_set_unique_line_id_for_each_series","mg_nest_data_for_voronoi","merge","mg_line_class_string","class_string","v","formatter","id","mg_add_voronoi_rollover","rollover_on","rollover_off","rollover_move","voronoi","polygons","mg_configure_voronoi_rollover","nest_data_for_aggregate_rollover","data_nested","nest","entries","entry","mg_add_aggregate_rollover","line_classes","lc","mg_line_class","mg_line_color_class","mg_rollover_id_class","mg_rollover_format_id","mg_configure_aggregate_rollover","mg_configure_singleton_rollover","mg_add_single_line_rollover","mg_is_singleton","rect","rect_first","__data__","mg_is_standard_multiline","mg_is_aggregated_rollover","mg_draw_all_line_elements","mg_remove_dangling_bands","this_data","mg_line_main_plot","use_data_y_min","continueWithDefault","mg_line_rollover_setup","graph","rolloverOn","rolloverOff","rolloverMove","mg_update_rollover_circle","mg_update_aggregate_rollover_circle","mg_update_generic_rollover_circle","mg_trigger_linked_mouseovers","mg_trigger_linked_mouseouts","datums","mg_remove_active_data_points_for_aggregate_rollover","mg_remove_active_data_points_for_generic_rollover","mg_remove_active_text","lineChart","internal_error","raw_data_transformation","process_line","mainPlot","rollover","windowListeners","row","mg_format_x_aggregate_mouseover","mg_format_x_mouseover","mg_format_y_mouseover","mouseout","mousemove","histogram","process_histogram","bar","bar_margin","format_rollover_number","mo","binned","bins","processed_x_accessor","processed_y_accessor","processed_dx_accessor","point_mouseover","mg_color_point_mouseover","mg_filter_out_plot_bounds","new_data","pointChart","process_point","xMaker","yMaker","xgroup_height","XGROUP","xgroupf","xoutf","youtf","colorScale","least_squares","add_ls","sizef","paths","active_point_size_increase","update","x_categorical_show_guides","ls","lowess","label_accessor","scaffold","mg_targeted_legend","div","orientation","outer_span","COLOR","legend_on_graph","lineCount","sub_container","barChart","ycolor_accessor","xcolor_accessor","barplot","fresh_render","bars","predictor_bars","pp","pp0","baseline_marks","perform_load_animation","should_transition","transition_duration","appropriate_size","length_type","width_type","length_coord","width_coord","length_scalefn","width_scalefn","length_scale","width_scale","length_accessor","width_accessor","length_coord_map","width_coord_map","length_map","width_map","reference_length_map","reference_length_coord_fn","reference_accessor","w","reference_data","reference_bars","reference_thickness","comparison_accessor","comparison_thickness","comparison_data","comparison_marks","comparison_width","rollover_x","rollover_anchor","rollover_align","is_vertical","data_accessor","label_units","rgb","darker","mg_format_data_for_mouseover","secondary_label_accessor","predictor_proportion","truncate_y_labels","data_table","standard_col","font_weight","columns","formatting_options","_format_element","fo","_add_column","_args","arg_type","standard_column","bullet","sparkline","table","colgroup","thead","tbody","this_column","this_title","tr","th","td_accessor","td_type","td_value","th_text","td_text","td","col","this_col","value_formatter","this_format","currency","secondary_accessor","mg_missing_add_text","missing_text","mg_missing_x_scale","mg_missing_y_scale","mg_make_fake_data","mg_add_missing_background_rect","mg_missing_add_line","mg_missing_add_area","mg_remove_all_children","mg_missing_remove_legend","missingData","show_missing_background","x_scale_type","single_object","array_of_objects","array_of_arrays","nested_array_of_arrays","nested_array_of_objects","mg_process_multiple_x_accessors","mg_process_multiple_y_accessors","mg_process_multiple_accessors","which_accessor","ya","series","processed_data","start_date","upto","setHours","existing_o","our_data","extracted_data","hist","thresholds","x0","this_pt","next_pt","original_y_accessor","process_categorical_variables","pd","bar_orientation","ls_line","fit","add_lowess","lowess_line","lowess_robust","inc","_l","yhat","_calculate_lowess_fit","x_proto","y_proto","zip","yi","q","quantile","ri","_bisquare_weight","p","x_","y_","xi","_x","_y","_xy","_xx","xhat","numerator","denominator","beta","_pow_weight","pow","_tricube_weight","_neighborhood_width","xis","_manhattan","_weighted_means","wxy","wsum","wxyi","xbar","ybar","_weighted_beta","denom","_weighted_least_squares","beta_i","_wm","residuals","floor","sorted_x","x_max","x_min","xy","smallest","largest","xi_neighbors","x_i","x0_i","delta_i","xyi","_output","fmt_string","time_rollover_format","fd","number_rollover_format","mg_format_y_rollover","formatted_y","mg_format_x_rollover","formatted_x","mouseover_fcn","check_time","formatted_data","time_fmt","mg_format_number_mouseover","d1","precision","path0","path1","cloneNode","n0","getTotalLength","n1","dt","points","p0","getPointAtLength","p1","render_markup_for_server","virtual_window","virtual_d3","original_d3","original_window","original_document","targetFn","render_markup_for_client","render_markup","init_virtual_window","jsdom","force","doc","QuerySelector","defaultView","AddBrushingCapability","line_brushing","set_brush_as_base","current","brushHistory","brushed","original","steps","zoom_in","zoom_out","get_brush_interval","resolution","brushing_interval","interval","timeDay","count","is_within_bounds","brushing","brushing_history","chartContext","isDragging","mouseDown","originX","brushingGroup","extentRect","mouse","opacity","mouseX","newX","xScale","yScale","flatData","boundedData","yBounds","xBounds","extentX0","extentX1","mapDtoX","mapDtoY","brushed_max_x","brushed_min_x","brushed_max_y","brushed_min_y","iterations","xValX0","invert","xValX1","previousBrush","after_brushing","brushing_manual_redraw","processXAxis","processYAxis","afterRollover"],"mappings":"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A;AACA;AACA;AACA;AACA;AAlCA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAvCA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAnCA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAvCA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3DA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3BA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAzDA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAhEA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3CA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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","file":"public/static/app.js","sourcesContent":["const queryString = require('query-string')\n\nexport default function GHData () {\n window.jQuery = require('jquery')\n window.Vue = require('vue')\n window.Vuex = require('vuex')\n let GHDataAPI = require('GHDataAPI').default\n window.GHDataAPI = new GHDataAPI()\n window.GHDataRepos = {}\n window.GHDataStats = require('GHDataStats').default\n window.$ = window.jQuery\n\n let GHDataApp = require('./components/GHDataApp')\n\n Vue.use(Vuex)\n\n window.ghdata = new Vuex.Store({\n state: {\n baseRepo: null,\n comparedRepos: [],\n trailingAverage: 180,\n startDate: new Date(\"1 January 2005\"),\n endDate: new Date(),\n compare: \"each\",\n byDate: false,\n },\n mutations: {\n setBaseRepo (state, payload) {\n let repo = window.GHDataAPI.Repo(payload.url)\n if (!window.GHDataRepos[repo.toString()]) {\n window.GHDataRepos[repo.toString()] = repo\n }\n state.baseRepo = repo.toString()\n if (!payload.keepCompared) {\n state.comparedRepos = []\n }\n let title = repo.owner + '/' + repo.name + '- GHData' \n let queryString = '?repo=' + repo.owner + '+' + repo.name\n window.history.pushState(null, title, queryString)\n },\n addComparedRepo (state, payload) {\n let repo = window.GHDataAPI.Repo(payload.url)\n if (!window.GHDataRepos[repo.toString()]) {\n window.GHDataRepos[repo.toString()] = repo\n }\n state.comparedRepos.push(repo.toString())\n let title = 'GHData' \n let queryString = window.location.search + '&comparedTo[]=' + repo.owner + '+' + repo.name\n window.history.pushState(null, title, queryString)\n },\n setDates (state, payload) {\n if (payload.startDate) {\n state.startDate = new Date(payload.startDate)\n }\n if (payload.endDate) {\n state.endDate = new Date(payload.endDate)\n }\n if (payload.trailingAverage) {\n state.trailingAverage = parseInt(payload.trailingAverage, 10)\n }\n },\n setCompare (state, payload) {\n state.compare = payload.compare\n },\n reset (state) {\n state = {\n baseRepo: null,\n comparedRepos: [],\n trailingAverage: 180,\n startDate: new Date(\"1 January 2005\"),\n endDate: new Date(),\n compare: \"each\",\n byDate: false,\n }\n window.history.pushState(null, 'GHData', '/')\n } // end reset\n } // end mutations\n })\n\n GHDataApp.store = window.ghdata\n window.GHDataApp = new Vue(GHDataApp).$mount('#app')\n\n // Load state from query string\n let parsed = queryString.parse(location.search, { arrayFormat: 'bracket' })\n if (parsed.repo) {\n window.GHDataApp.$store.commit('setBaseRepo', { url: parsed.repo.replace(' ', '/') })\n }\n if (parsed.comparedTo) {\n parsed.comparedTo.forEach((repo) => {\n window.GHDataApp.$store.commit('addComparedRepo', { url: repo.replace(' ', '/') })\n })\n }\n\n}","var $ = require('jquery')\n\nexport default class GHDataAPI {\n constructor(hostURL, version) {\n this._version = version || 'unstable'\n this._host = hostURL || 'http://' + window.location.hostname + ':5000/'\n this.__cache = {}\n }\n\n Repo(owner, repoName) {\n\n if (repoName) {\n var repo = {owner: owner, name: repoName}\n } else if (owner) {\n let splitURL = owner.split('/')\n if (splitURL.length < 3) {\n var repo = {owner: splitURL[0], name: splitURL[1]}\n } else {\n var repo = {owner: splitURL[3], name: splitURL[4]}\n }\n }\n\n repo.toString = () => { return repo.owner + '/' + repo.name }\n\n var Endpoint = (endpoint) => {\n var self = this;\n var url = this._host + this._version + '/' + repo.owner + '/' + repo.name + '/' + endpoint;\n return function (params, callback) {\n if (self.__cache[btoa(url)]) {\n if (self.__cache[btoa(url)].created_at > Date.now() - 1000 * 60) {\n return new Promise((resolve, reject) => {\n resolve(JSON.parse(self.__cache[btoa(url)].data))\n })\n }\n }\n return $.get(url, params, callback).then((data) => {\n self.__cache[btoa(url)] = {\n created_at: Date.now(),\n data: JSON.stringify(data)\n }\n if (typeof callback === 'function') {\n callback(data)\n }\n return new Promise((resolve, reject) => {\n resolve(data)\n })\n })\n }\n }\n\n var Timeseries = (endpoint) => {\n let func = Endpoint('timeseries/' + endpoint)\n func.relativeTo = (baselineRepo, params, callback) => {\n var url = 'timeseries/' + endpoint + '/relative_to/' + baselineRepo.owner + '/' + baselineRepo.name;\n return Endpoint(url)()\n }\n return func\n }\n\n repo.commits = Timeseries('commits')\n repo.forks = Timeseries('forks')\n repo.issues = Timeseries('issues')\n repo.pulls = Timeseries('pulls')\n repo.stars = Timeseries('stargazers')\n repo.tags = Timeseries('tags')\n repo.downloads = Timeseries('downloads')\n repo.uniqueCommitters = Timeseries('unique_committers')\n\n\n repo.pullsAcceptanceRate = Endpoint('pulls/acceptance_rate')\n repo.issuesResponseTime = Endpoint('issues/response_time')\n repo.contributors = Endpoint('contributors')\n repo.contributions = Endpoint('contributions')\n repo.committerLocations = Endpoint('committer_locations')\n repo.communityAge = Endpoint('community_age')\n repo.linkingWebsites = Endpoint('linking_websites')\n repo.busFactor = Endpoint('bus_factor')\n repo.dependents = Endpoint('dependents')\n repo.dependencies = Endpoint('dependencies')\n repo.dependencyStats = Endpoint('dependency_stats')\n\n return repo\n\n }\n}\n","export default class GHDataStats {\n\n static convertDates (data, earliest, latest) {\n earliest = earliest || new Date('01-01-2005')\n latest = latest || new Date()\n if (Array.isArray(data[0])) {\n data = data.map((datum) => {\n return GHDataStats.convertDates(datum)\n })\n } else {\n \n data = data.map((d) => {\n d.date = new Date(d.date)\n return d\n }).filter((d) => {\n return earliest < d.date && d.date < latest\n })\n }\n return data\n }\n\n static convertKey (data, key) {\n if (Array.isArray(data[0])) {\n data = data.map((datum) => {\n return GHDataStats.convertKey(datum, key)\n })\n } else {\n const EARLIEST = new Date('01-01-2005')\n data = data.map((d) => {\n d.value = d[key];\n return d;\n })\n }\n return data\n }\n\n static averageArray(ary) {\n return ary.reduce((a, e) => {return a + e}, 0) / (ary.length);\n }\n\n static standardDeviation(ary, key, mean) {\n let flat = ary.map((e) => {return e[key]})\n mean = mean || GHDataStats.averageArray(flat)\n let distances = flat.map((e) => {\n return (e - mean) * (e - mean)\n })\n return Math.sqrt(GHDataStats.averageArray(distances))\n }\n\n static describe(ary, key) {\n let flat = ary.map((e) => {return e[key]})\n let mean = GHDataStats.averageArray(flat)\n let stddev = GHDataStats.standardDeviation(ary, key, mean)\n let variance = stddev * stddev\n return {\n 'mean': mean,\n 'stddev': stddev,\n 'variance': variance\n }\n }\n\n static rollingAverage(data, key, windowSizeInDays) {\n key = key || 'value'\n windowSizeInDays = windowSizeInDays || 180\n let rolling = [];\n let averageWindow = [];\n let i = 0;\n let lastFound = -1;\n\n let after = new Date()\n let before = new Date()\n\n for (let date = new Date(data[0].date); date <= data[data.length - 1].date; date.setDate(date.getDate() + 1)) {\n \n after.setDate(date.getDate() - windowSizeInDays)\n\n if (averageWindow.length < windowSizeInDays) {\n for (; i < data.length && averageWindow.length <= windowSizeInDays; i++) {\n if (lastFound > -1) {\n for (let iter = new Date(data[lastFound].date); iter <= data[i].date; iter.setDate(iter.getDate() + 1)) {\n averageWindow.push( (data[i][key] + data[lastFound][key]) / 2 )\n }\n }\n lastFound = i\n }\n }\n\n let average = {date: new Date(date)}\n average[key] = GHDataStats.averageArray(averageWindow.slice(0, windowSizeInDays));\n averageWindow.shift()\n rolling.push(average);\n }\n return rolling\n }\n\n static convertToPercentages(data, key, baseline) {\n if (!data) {\n return []\n }\n baseline = baseline || GHDataStats.averageArray( data.map((e) => {return e[key]}) )\n data = data.map((datum) => {\n datum['value'] = (datum[key] / baseline)\n return datum\n })\n return data\n }\n\n static makeRelative(baseData, compareData, config) {\n\n config.byDate = (config.byDate != undefined)\n config.earliest = config.earliest || new Date('01-01-2005')\n config.latest = config.latest || new Date()\n config.period = config.period || 180\n\n let iter = {\n base: 0,\n compare: 0\n }\n let data = {}\n\n data['base'] = GHDataStats.rollingAverage(\n GHDataStats.convertDates(\n GHDataStats.convertKey(\n baseData, \n Object.keys(baseData[0])[1]\n ), config.earliest, config.latest\n ), undefined, config.period) \n\n data['compare'] = GHDataStats.rollingAverage(\n GHDataStats.convertDates(\n GHDataStats.convertKey(\n compareData, \n Object.keys(compareData[0])[1]\n ), config.earliest, config.latest\n ), undefined, config.period) \n\n let smaller = (data['base'][0].date < data['compare'][0].date) ? 'base' : 'compare'\n let larger = (data['base'][0].date < data['compare'][0].date) ? 'compare' : 'base'\n let result = []\n\n if (config.byDate) {\n for (; iter[smaller] < data[smaller].length; iter[smaller]++) {\n if (data['base'].date == data['compare'].date) {\n break\n }\n }\n }\n\n while (iter['base'] < data['base'].length && iter['compare'] < data['compare'].length) {\n let toPush = {\n value: data['compare'][iter.compare].value / data['base'][iter.base].value,\n }\n if (config.byDate) {\n toPush.date = data['base'][iter.base].date\n } else {\n toPush.x = iter.base\n }\n result.push(toPush)\n iter['base']++\n iter['compare']++\n }\n\n return result\n }\n\n static zscores(data, key) {\n key = key || 'value'\n let stats = GHDataStats.describe(data, key)\n return data.map((e) => {\n let newObj = {}\n if (e.date) {\n newObj.date = new Date(e.date)\n }\n let zscore = ((e[key] - stats['mean']) / stats['stddev'])\n newObj.value = zscore\n return newObj\n })\n }\n\n static combine() {\n return Array.from(arguments)\n }\n\n}",";(function(){\n'use strict';\n\nvar _LineChart = require('./charts/LineChart');\n\nvar _LineChart2 = _interopRequireDefault(_LineChart);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n components: {\n LineChart: _LineChart2.default\n },\n computed: {\n repo: function repo() {\n return this.$store.state.repo;\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('h1',[_vm._v(\"Activity\")]),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.$store.state.baseRepo))]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"commits\",\"title\":\"Commits / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"forks\",\"title\":\"Forks / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"issues\",\"title\":\"Issues / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-6\"},[_c('line-chart',{attrs:{\"source\":\"pulls\",\"title\":\"Pulls Requests / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Contributors\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"col col-6\"},[_c('line-chart',{attrs:{\"source\":\"uniqueCommitters\",\"title\":\"Unique Committers\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Contributors\",\"disableRollingAverage\":\"1\"}})],1)]),_vm._v(\" \"),_vm._m(0,false,false)])}\n__vue__options__.staticRenderFns = [function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('small',[_vm._v(\"Data provided by \"),_c('a',{attrs:{\"href\":\"http://ghtorrent.org/msr14.html\"}},[_vm._v(\"GHTorrent\")]),_vm._v(\" \"),_c('span',{staticClass:\"ghtorrent-version\"}),_vm._v(\" and the \"),_c('a',{attrs:{\"href\":\"https://developer.github.com/\"}},[_vm._v(\"GitHub API\")])])}]\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-7655e5a2\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-7655e5a2\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _LineChart = require('./charts/LineChart');\n\nvar _LineChart2 = _interopRequireDefault(_LineChart);\n\nvar _DependencyOverview = require('./charts/DependencyOverview');\n\nvar _DependencyOverview2 = _interopRequireDefault(_DependencyOverview);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n components: {\n LineChart: _LineChart2.default,\n DependencyOverview: _DependencyOverview2.default\n },\n computed: {\n repo: function repo() {\n return this.$store.state.repo;\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('h1',[_vm._v(\"Ecosystem\")]),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.$store.state.baseRepo))]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"downloads\",\"title\":\"Downloads / Day\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"stars\",\"title\":\"Stars / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('dependency-overview')],1)])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-2a4aa320\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-2a4aa320\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _LineChart = require('./charts/LineChart');\n\nvar _LineChart2 = _interopRequireDefault(_LineChart);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n props: ['comparedTo'],\n components: {\n LineChart: _LineChart2.default\n },\n computed: {\n repo: function repo() {\n return this.$store.state.repo;\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('div',{class:{ hidden: !this.repo },attrs:{\"id\":\"base-template\"}}),_vm._v(\" \"),_c('h1',[_vm._v(\"Activity Comparison\")]),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.comparedTo)+\" compared to \"+_vm._s(_vm.$store.state.baseRepo))]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"timeseries/forks\",\"title\":\"Forks / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"forks\",\"title\":\"Forks / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"issues\",\"title\":\"Issues / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"pullsAcceptanceRate\",\"title\":\"Pull Requests Created to Closed Ratio / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"uniqueCommitters\",\"title\":\"Unique Committers\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Contributors\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_vm._m(0,false,false)])}\n__vue__options__.staticRenderFns = [function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('small',[_vm._v(\"Data provided by \"),_c('a',{attrs:{\"href\":\"http://ghtorrent.org/msr14.html\"}},[_vm._v(\"GHTorrent\")]),_vm._v(\" \"),_c('span',{staticClass:\"ghtorrent-version\"}),_vm._v(\" and the \"),_c('a',{attrs:{\"href\":\"https://developer.github.com/\"}},[_vm._v(\"GitHub API\")])])}]\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-7c1c00fd\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-7c1c00fd\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _GHDataHeader = require('./GHDataHeader.vue');\n\nvar _GHDataHeader2 = _interopRequireDefault(_GHDataHeader);\n\nvar _SidebarControls = require('./SidebarControls.vue');\n\nvar _SidebarControls2 = _interopRequireDefault(_SidebarControls);\n\nvar _GHDataCards = require('./GHDataCards.vue');\n\nvar _GHDataCards2 = _interopRequireDefault(_GHDataCards);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n components: {\n 'ghdata-header': _GHDataHeader2.default,\n SidebarControls: _SidebarControls2.default,\n 'ghdata-cards': _GHDataCards2.default\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('ghdata-header'),_vm._v(\" \"),_c('div',{staticClass:\"content\"},[_c('sidebar-controls'),_vm._v(\" \"),_c('ghdata-cards')],1)],1)}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-f1292d0e\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-f1292d0e\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _BaseRepoActivityCard = require('./BaseRepoActivityCard');\n\nvar _BaseRepoActivityCard2 = _interopRequireDefault(_BaseRepoActivityCard);\n\nvar _BaseRepoEcosystemCard = require('./BaseRepoEcosystemCard');\n\nvar _BaseRepoEcosystemCard2 = _interopRequireDefault(_BaseRepoEcosystemCard);\n\nvar _ComparedRepoActivityCard = require('./ComparedRepoActivityCard');\n\nvar _ComparedRepoActivityCard2 = _interopRequireDefault(_ComparedRepoActivityCard);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n components: {\n BaseRepoActivityCard: _BaseRepoActivityCard2.default,\n BaseRepoEcosystemCard: _BaseRepoEcosystemCard2.default,\n ComparedRepoActivityCard: _ComparedRepoActivityCard2.default\n },\n computed: {\n baseRepo: function baseRepo() {\n return this.$store.state.baseRepo;\n },\n comparedRepos: function comparedRepos() {\n return this.$store.state.comparedRepos;\n }\n },\n methods: {\n onRepo: function onRepo(e) {\n this.$store.commit('setBaseRepo', {\n url: e.target.value\n });\n },\n onCompare: function onCompare(e) {\n this.$store.commit('addComparedRepo', {\n url: e.target.value\n });\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"cards\",staticClass:\"content\"},[_c('section',{class:{ hidden: _vm.baseRepo, unmaterialized: true }},[_c('h3',[_vm._v(\"Enter a GitHub URL to get started\")]),_vm._v(\" \"),_c('input',{staticClass:\"search reposearch\",attrs:{\"type\":\"text\",\"placeholder\":\"GitHub URL\"},on:{\"change\":_vm.onRepo}})]),_vm._v(\" \"),_c('div',{class:{ hidden: !_vm.baseRepo }},[_c('base-repo-activity-card'),_vm._v(\" \"),_c('base-repo-ecosystem-card')],1),_vm._v(\" \"),_vm._l((_vm.comparedRepos),function(repo){return _c('div',{class:{ hidden: !_vm.comparedRepos.length },attrs:{\"id\":\"comparisonCards\"}},[_c('compared-repo-activity-card',{attrs:{\"comparedTo\":repo}})],1)}),_vm._v(\" \"),_c('section',{class:{ hidden: !_vm.baseRepo, unmaterialized: true }},[_c('h3',[_vm._v(\"Compare repository\")]),_vm._v(\" \"),_c('input',{staticClass:\"search reposearch\",attrs:{\"type\":\"text\",\"placeholder\":\"GitHub URL\"},on:{\"change\":_vm.onCompare}})])],2)}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-323615bb\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-323615bb\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nmodule.exports = {\n methods: {\n onRepo: function onRepo(e) {\n this.$store.commit('setBaseRepo', {\n url: e.target.value\n });\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('header',{staticClass:\"hide-print\"},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"row\"},[_vm._m(0,false,false),_vm._v(\" \"),_c('div',{staticClass:\"col col-5 push-right\"},[_c('div',{staticClass:\"form-item\"},[_c('input',{staticClass:\"search reposearch\",attrs:{\"type\":\"text\",\"name\":\"headersearch\",\"placeholder\":\"GitHub URL\"},on:{\"change\":_vm.onRepo}})])])])])])}\n__vue__options__.staticRenderFns = [function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"col col-4\"},[_c('img',{attrs:{\"src\":\"static/logo.png\",\"id\":\"logo\",\"alt\":\"CHAOSS: Community Health Analytics for Open Source Software\"}})])}]\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-30d34965\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-30d34965\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nmodule.exports = {\n methods: {\n onStartDateChange: function onStartDateChange(e) {\n var _this = this;\n\n if (this.startDateTimeout) {\n clearTimeout(this.startDateTimeout);\n }\n this.startDateTimeout = setTimeout(function () {\n _this.$store.commit('setDates', {\n startDate: e.target.value\n });\n }, 500);\n },\n onEndDateChange: function onEndDateChange(e) {\n var _this2 = this;\n\n if (this.endDateTimeout) {\n clearTimeout(this.endDateTimeout);\n delete this.endDateTimeout;\n }\n this.endDateTimeout = setTimeout(function () {\n _this2.$store.commit('setDates', {\n endDate: e.target.value\n });\n }, 500);\n },\n onTrailingAverageChange: function onTrailingAverageChange(e) {\n this.$store.commit('setDates', {\n trailingAverage: e.target.value\n });\n },\n onCompareChange: function onCompareChange(e) {\n this.$store.commit('setCompare', {\n compare: e.target.value\n });\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"row\",attrs:{\"id\":\"controls\"}},[_c('div',{staticClass:\"col col-12\"},[_c('div',{staticClass:\"form\"},[_c('h4',[_vm._v(\"Base Repository\")]),_vm._v(\" \"),_c('div',{staticClass:\"form-item\"},[_c('label',[_vm._v(\"Start Date \"),_c('input',{attrs:{\"type\":\"date\"},on:{\"change\":_vm.onStartDateChange}})])]),_vm._v(\" \"),_c('div',{staticClass:\"form-item\"},[_c('label',[_vm._v(\"End Date \"),_c('input',{attrs:{\"type\":\"date\"},on:{\"change\":_vm.onEndDateChange}})])]),_vm._v(\" \"),_c('div',{staticClass:\"form-item\"},[_c('label',[_vm._v(\"Trailing Average\")]),_vm._v(\" \"),_c('div',{staticClass:\"append\"},[_c('input',{attrs:{\"type\":\"number\",\"min\":\"2\",\"id\":\"averagetimespan\",\"value\":\"180\"},on:{\"change\":_vm.onTrailingAverageChange}}),_c('span',[_vm._v(\"days\")])])]),_vm._v(\" \"),_c('h4',[_vm._v(\"Comparisons\")]),_vm._v(\" \"),_c('div',{staticClass:\"form-item form-checkboxes\"},[_c('label',{staticClass:\"checkbox\"},[_c('input',{attrs:{\"name\":\"comparebaseline\",\"value\":\"each\",\"checked\":\"\",\"type\":\"radio\"},on:{\"change\":_vm.onCompareChange}}),_vm._v(\"Z-score trailing average\")]),_vm._v(\" \"),_c('label',{staticClass:\"checkbox\"},[_c('input',{attrs:{\"name\":\"comparebaseline\",\"value\":\"percentage\",\"type\":\"radio\"},on:{\"change\":_vm.onCompareChange}}),_vm._v(\"100% is the compared project\")])])])])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-0df51156\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-0df51156\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _GHDataStats = require('../../GHDataStats');\n\nvar _GHDataStats2 = _interopRequireDefault(_GHDataStats);\n\nvar _d = require('d3');\n\nvar d3 = _interopRequireWildcard(_d);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n props: [],\n computed: {\n repo: function repo() {\n return this.$store.state.baseRepo;\n },\n dependencies: function dependencies() {\n var _this = this;\n\n if (this.repo) {\n window.GHDataRepos[this.repo].dependents().then(function (dependents) {\n _this.$refs['dependents'].innerHTML = '';\n for (var i = 0; i < dependents.length && i < 10; i++) {\n _this.$refs['dependents'].innerHTML += dependents[i].name + '
';\n }\n });\n window.GHDataRepos[this.repo].dependencies().then(function (dependencies) {\n _this.$refs['dependencies'].innerHTML = '';\n for (var i = 0; i < dependencies.dependencies.length && i < 10; i++) {\n _this.$refs['dependents'].innerHTML += dependencies.dependencies[i].name + '
';\n }\n });\n window.GHDataRepos[this.repo].dependencyStats().then(function (depstats) {\n _this.$refs['totaldependents'].innerHTML = depstats['dependent_repositories'];\n _this.$refs['totaldependencies'].innerHTML = depstats['dependencies'];\n });\n }\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Total Dependents\")]),_vm._v(\" \"),_c('div',{ref:\"totaldependents\",staticClass:\"deps\"},[_vm._v(\"\\n Loading...\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Total Dependencies\")]),_vm._v(\" \"),_c('div',{ref:\"totaldependencies\",staticClass:\"deps\"},[_vm._v(\"\\n Loading...\\n \")])])]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Top Dependents\")]),_vm._v(\" \"),_c('div',{ref:\"dependents\",staticClass:\"deps\"},[_vm._v(\"\\n Loading...\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Top Dependencies\")]),_vm._v(\" \"),_c('div',{ref:\"dependencies\",staticClass:\"deps\",domProps:{\"innerHTML\":_vm._s(_vm.dependencies)}},[_vm._v(\"\\n Loading...\\n \")])])])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-210450fe\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-210450fe\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _metricsGraphics = require('metrics-graphics');\n\nvar _metricsGraphics2 = _interopRequireDefault(_metricsGraphics);\n\nvar _GHDataStats = require('../GHDataStats');\n\nvar _GHDataStats2 = _interopRequireDefault(_GHDataStats);\n\nvar _d = require('d3');\n\nvar d3 = _interopRequireWildcard(_d);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n_metricsGraphics2.default.data_graphic({\n title: \"Missing Data\",\n error: 'Data unavaliable for ' + title,\n chart_type: 'missing-data',\n missing_text: title + ' could not be loaded',\n target: undefined.$refs.chart,\n full_width: true,\n height: 200\n});\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"chart\",staticClass:\"linechart\"})}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-ebdae2a4\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-ebdae2a4\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _d = require('d3');\n\nvar d3 = _interopRequireWildcard(_d);\n\nvar _GHDataStats = require('GHDataStats');\n\nvar _GHDataStats2 = _interopRequireDefault(_GHDataStats);\n\nvar _vuex = require('vuex');\n\nvar _metricsgraphics = require('../../include/metricsgraphics');\n\nvar _metricsgraphics2 = _interopRequireDefault(_metricsgraphics);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nconsole.log(d3);\n\nexports.default = {\n props: ['source', 'citeUrl', 'citeText', 'title', 'percentage', 'comparedTo', 'disableRollingAverage'],\n computed: {\n repo: function repo() {\n return this.$store.state.baseRepo;\n },\n period: function period() {\n return this.$store.state.trailingAverage;\n },\n earliest: function earliest() {\n return this.$store.state.startDate;\n },\n latest: function latest() {\n return this.$store.state.endDate;\n },\n compare: function compare() {\n return this.$store.state.compare;\n },\n chart: function chart() {\n var _this = this;\n\n var config = {};\n\n config.earliest = this.earliest || new Date('01-01-2005');\n config.latest = this.latest || new Date();\n config.title = this.title || \"Activity\";\n config.full_width = true;\n config.height = 200;\n config.x_accessor = 'date';\n config.format = this.percentage ? 'percentage' : undefined;\n config.compare = this.compare;\n\n\n if (this.repo) {\n if (this.$refs.chart) {\n this.$refs.chart.className = 'linechart loader';\n }\n window.GHDataRepos[this.repo][this.source]().then(function (baseData) {\n _this.$refs.chartStatus.innerHTML = '';\n if (baseData && baseData.length) {\n config.data = _GHDataStats2.default.convertDates(baseData, _this.earliest, _this.latest);\n } else {\n config.data = [];\n }\n if (_this.comparedTo) {\n return GHDataRepos[_this.comparedTo][_this.source]();\n }\n return new Promise(function (resolve, reject) {\n resolve();\n });\n }).then(function (compareData) {\n var keys = Object.keys(config.data[0]).splice(1);\n if (config.data && compareData && compareData.length) {\n if (config.compare == 'each') {\n var key = Object.keys(compareData[0])[1];\n var compare = _GHDataStats2.default.rollingAverage(_GHDataStats2.default.zscores(compareData, key), 'value', _this.period);\n var base = _GHDataStats2.default.rollingAverage(_GHDataStats2.default.zscores(config.data, key), 'value', _this.period);\n config.data = [base, compare];\n config.legend = [window.GHDataRepos[_this.repo].toString(), window.GHDataRepos[_this.comparedTo].toString()];\n config.colors = config.colors || ['#FF3647', '#999'];\n } else {\n console.log('rendering percentage');\n config.format = 'percentage';\n config.baselines = [{ value: 1, label: config.baseline }];\n config.data = _GHDataStats2.default.makeRelative(config.data, compareData, {\n earliest: config.earliest,\n latest: config.latest,\n byDate: config.byDate,\n period: _this.period\n });\n }\n } else {\n if (!_this.disableRollingAverage) {\n config.legend = config.legend || [config.title.toLowerCase(), _this.period + ' day average'];\n var rolling = _GHDataStats2.default.rollingAverage(config.data, keys[0], _this.period);\n config.data = _GHDataStats2.default.convertKey(_GHDataStats2.default.combine(config.data, rolling), keys[0]);\n config.colors = config.colors || ['#CCC', '#FF3647'];\n config.y_accessor = 'value';\n }\n }\n\n if (keys.length > 1) {\n config.legend_target = _this.$refs.legend;\n $(_this.$refs.chart).hover(function () {\n _this.$refs.legend.style.display = 'none';\n }, function () {\n _this.$refs.legend.style.display = 'block';\n });\n }\n\n _this.$refs.chart.className = 'linechart intro';\n config.target = _this.$refs.chart;\n _metricsgraphics2.default.data_graphic(config);\n });\n return '' + this.title + '...';\n }\n }\n } };\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('cite',{staticClass:\"metric\"},[_vm._v(\"Metric: \"),_c('a',{attrs:{\"href\":_vm.citeUrl,\"target\":\"_blank\"}},[_vm._v(_vm._s(_vm.citeText))])]),_vm._v(\" \"),_c('div',{ref:\"chart\",staticClass:\"linechart\"},[_c('div',{ref:\"legend\",staticClass:\"legend\"}),_vm._v(\" \"),_c('span',{ref:\"chartStatus\",domProps:{\"innerHTML\":_vm._s(_vm.chart)}})])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-4035d73d\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-4035d73d\", __vue__options__)\n }\n})()}","/*\n\tKube. CSS & JS Framework\n\tVersion 6.5.2\n\tUpdated: February 2, 2017\n\n\thttp://imperavi.com/kube/\n\n\tCopyright (c) 2009-2017, Imperavi LLC.\n\tLicense: MIT\n*/\nif (typeof jQuery === 'undefined') {throw new Error('Kube\\'s requires jQuery')};\n;(function($) { var version = $.fn.jquery.split('.'); if (version[0] == 1 && version[1] < 8) {throw new Error('Kube\\'s requires at least jQuery v1.8'); }})(jQuery);\n\n;(function()\n{\n // Inherits\n Function.prototype.inherits = function(parent)\n {\n var F = function () {};\n F.prototype = parent.prototype;\n var f = new F();\n\n for (var prop in this.prototype) f[prop] = this.prototype[prop];\n this.prototype = f;\n this.prototype.super = parent.prototype;\n };\n\n // Core Class\n var Kube = function(element, options)\n {\n options = (typeof options === 'object') ? options : {};\n\n this.$element = $(element);\n this.opts = $.extend(true, this.defaults, $.fn[this.namespace].options, this.$element.data(), options);\n this.$target = (typeof this.opts.target === 'string') ? $(this.opts.target) : null;\n };\n\n // Core Functionality\n Kube.prototype = {\n getInstance: function()\n {\n return this.$element.data('fn.' + this.namespace);\n },\n hasTarget: function()\n {\n return !(this.$target === null);\n },\n callback: function(type)\n {\n\t\tvar args = [].slice.call(arguments).splice(1);\n\n // on element callback\n if (this.$element)\n {\n args = this._fireCallback($._data(this.$element[0], 'events'), type, this.namespace, args);\n }\n\n // on target callback\n if (this.$target)\n {\n args = this._fireCallback($._data(this.$target[0], 'events'), type, this.namespace, args);\n\t\t}\n\n\t\t// opts callback\n\t\tif (this.opts && this.opts.callbacks && $.isFunction(this.opts.callbacks[type]))\n\t\t{\n return this.opts.callbacks[type].apply(this, args);\n\t\t}\n\n\t\treturn args;\n },\n _fireCallback: function(events, type, eventNamespace, args)\n {\n if (events && typeof events[type] !== 'undefined')\n {\n\t\t\tvar len = events[type].length;\n\t\t\tfor (var i = 0; i < len; i++)\n\t\t\t{\n\t\t\t\tvar namespace = events[type][i].namespace;\n\t\t\t\tif (namespace === eventNamespace)\n\t\t\t\t{\n\t\t\t\t\tvar value = events[type][i].handler.apply(this, args);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n return (typeof value === 'undefined') ? args : value;\n }\n };\n\n // Scope\n window.Kube = Kube;\n\n})();\n/**\n * @library Kube Plugin\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Plugin = {\n create: function(classname, pluginname)\n {\n pluginname = (typeof pluginname === 'undefined') ? classname.toLowerCase() : pluginname;\n\n $.fn[pluginname] = function(method, options)\n {\n var args = Array.prototype.slice.call(arguments, 1);\n var name = 'fn.' + pluginname;\n var val = [];\n\n this.each(function()\n {\n var $this = $(this), data = $this.data(name);\n options = (typeof method === 'object') ? method : options;\n\n if (!data)\n {\n // Initialization\n $this.data(name, {});\n $this.data(name, (data = new Kube[classname](this, options)));\n }\n\n // Call methods\n if (typeof method === 'string')\n {\n if ($.isFunction(data[method]))\n {\n var methodVal = data[method].apply(data, args);\n if (methodVal !== undefined)\n {\n val.push(methodVal);\n }\n }\n else\n {\n $.error('No such method \"' + method + '\" for ' + classname);\n }\n }\n\n });\n\n return (val.length === 0 || val.length === 1) ? ((val.length === 0) ? this : val[0]) : val;\n };\n\n $.fn[pluginname].options = {};\n\n return this;\n },\n autoload: function(pluginname)\n {\n var arr = pluginname.split(',');\n var len = arr.length;\n\n for (var i = 0; i < len; i++)\n {\n var name = arr[i].toLowerCase().split(',').map(function(s) { return s.trim() }).join(',');\n this.autoloadQueue.push(name);\n }\n\n return this;\n },\n autoloadQueue: [],\n startAutoload: function()\n {\n if (!window.MutationObserver || this.autoloadQueue.length === 0)\n {\n return;\n }\n\n var self = this;\n\t\tvar observer = new MutationObserver(function(mutations)\n\t\t{\n\t\t\tmutations.forEach(function(mutation)\n\t\t\t{\n\t\t\t\tvar newNodes = mutation.addedNodes;\n\t\t\t if (newNodes.length === 0 || (newNodes.length === 1 && newNodes.nodeType === 3))\n\t\t\t {\n\t\t\t\t return;\n\t\t\t\t}\n\n self.startAutoloadOnce();\n\t\t\t});\n\t\t});\n\n\t\t// pass in the target node, as well as the observer options\n\t\tobserver.observe(document, {\n\t\t\t subtree: true,\n\t\t\t childList: true\n\t\t});\n },\n startAutoloadOnce: function()\n {\n var self = this;\n var $nodes = $('[data-component]').not('[data-loaded]');\n\t\t$nodes.each(function()\n\t\t{\n\t\t\tvar $el = $(this);\n\t\t\tvar pluginname = $el.data('component');\n\n if (self.autoloadQueue.indexOf(pluginname) !== -1)\n {\n\t\t\t$el.attr('data-loaded', true);\n $el[pluginname]();\n }\n });\n\n },\n watch: function()\n {\n Kube.Plugin.startAutoloadOnce();\n Kube.Plugin.startAutoload();\n }\n };\n\n $(window).on('load', function()\n {\n Kube.Plugin.watch();\n });\n\n}(Kube));\n/**\n * @library Kube Animation\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Animation = function(element, effect, callback)\n {\n this.namespace = 'animation';\n this.defaults = {};\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.effect = effect;\n this.completeCallback = (typeof callback === 'undefined') ? false : callback;\n this.prefixes = ['', '-moz-', '-o-animation-', '-webkit-'];\n this.queue = [];\n\n this.start();\n };\n\n Kube.Animation.prototype = {\n start: function()\n {\n\t\tif (this.isSlideEffect()) this.setElementHeight();\n\n\t\t\tthis.addToQueue();\n\t\t\tthis.clean();\n\t\t\tthis.animate();\n },\n addToQueue: function()\n {\n this.queue.push(this.effect);\n },\n setElementHeight: function()\n {\n this.$element.height(this.$element.height());\n },\n removeElementHeight: function()\n {\n this.$element.css('height', '');\n },\n isSlideEffect: function()\n {\n return (this.effect === 'slideDown' || this.effect === 'slideUp');\n },\n isHideableEffect: function()\n {\n var effects = ['fadeOut', 'slideUp', 'flipOut', 'zoomOut', 'slideOutUp', 'slideOutRight', 'slideOutLeft'];\n\n\t\t\treturn ($.inArray(this.effect, effects) !== -1);\n },\n isToggleEffect: function()\n {\n return (this.effect === 'show' || this.effect === 'hide');\n },\n storeHideClasses: function()\n {\n if (this.$element.hasClass('hide-sm')) this.$element.data('hide-sm-class', true);\n else if (this.$element.hasClass('hide-md')) this.$element.data('hide-md-class', true);\n },\n revertHideClasses: function()\n {\n if (this.$element.data('hide-sm-class')) this.$element.addClass('hide-sm').removeData('hide-sm-class');\n else if (this.$element.data('hide-md-class')) this.$element.addClass('hide-md').removeData('hide-md-class');\n else this.$element.addClass('hide');\n },\n removeHideClass: function()\n {\n if (this.$element.data('hide-sm-class')) this.$element.removeClass('hide-sm');\n else if (this.$element.data('hide-md-class')) this.$element.removeClass('hide-md');\n else this.$element.removeClass('hide');\n },\n animate: function()\n {\n this.storeHideClasses();\n if (this.isToggleEffect())\n\t\t\t{\n\t\t\t\treturn this.makeSimpleEffects();\n }\n\n this.$element.addClass('kubeanimated');\n\t\t\tthis.$element.addClass(this.queue[0]);\n this.removeHideClass();\n\n\t\t\tvar _callback = (this.queue.length > 1) ? null : this.completeCallback;\n\t\t\tthis.complete('AnimationEnd', $.proxy(this.makeComplete, this), _callback);\n },\n makeSimpleEffects: function()\n {\n\t\tif (this.effect === 'show') this.removeHideClass();\n else if (this.effect === 'hide') this.revertHideClasses();\n\n if (typeof this.completeCallback === 'function') this.completeCallback(this);\n },\n\t\tmakeComplete: function()\n\t\t{\n if (this.$element.hasClass(this.queue[0]))\n {\n\t\t\t\tthis.clean();\n\t\t\t\tthis.queue.shift();\n\n\t\t\t\tif (this.queue.length) this.animate();\n\t\t\t}\n\t\t},\n complete: function(type, make, callback)\n\t\t{\n\t\tvar event = type.toLowerCase() + ' webkit' + type + ' o' + type + ' MS' + type;\n\n\t\t\tthis.$element.one(event, $.proxy(function()\n\t\t\t{\n\t\t\t\tif (typeof make === 'function') make();\n\t\t\t\tif (this.isHideableEffect()) this.revertHideClasses();\n\t\t\t\tif (this.isSlideEffect()) this.removeElementHeight();\n\t\t\t\tif (typeof callback === 'function') callback(this);\n\n\t\t\t\tthis.$element.off(event);\n\n\t\t\t}, this));\n\t\t},\n\t\tclean: function()\n\t\t{\n\t\t\tthis.$element.removeClass('kubeanimated').removeClass(this.queue[0]);\n\t\t}\n };\n\n // Inheritance\n Kube.Animation.inherits(Kube);\n\n}(Kube));\n\n// Plugin\n(function($)\n{\n $.fn.animation = function(effect, callback)\n {\n var name = 'fn.animation';\n\n return this.each(function()\n {\n var $this = $(this), data = $this.data(name);\n\n $this.data(name, {});\n $this.data(name, (data = new Kube.Animation(this, effect, callback)));\n });\n };\n\n $.fn.animation.options = {};\n\n})(jQuery);\n/**\n * @library Kube Detect\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Detect = function() {};\n\n Kube.Detect.prototype = {\n\tisMobile: function()\n\t{\n\t\treturn /(iPhone|iPod|BlackBerry|Android)/.test(navigator.userAgent);\n\t},\n\tisDesktop: function()\n\t{\n\t\treturn !/(iPhone|iPod|iPad|BlackBerry|Android)/.test(navigator.userAgent);\n\t},\n\tisMobileScreen: function()\n\t{\n\t\treturn ($(window).width() <= 768);\n\t},\n\tisTabletScreen: function()\n\t{\n\t\treturn ($(window).width() >= 768 && $(window).width() <= 1024);\n\t},\n\tisDesktopScreen: function()\n\t{\n\t\treturn ($(window).width() > 1024);\n\t}\n };\n\n\n}(Kube));\n/**\n * @library Kube FormData\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.FormData = function(app)\n {\n this.opts = app.opts;\n };\n\n Kube.FormData.prototype = {\n set: function(data)\n {\n this.data = data;\n },\n get: function(formdata)\n\t{\n\t\tthis.formdata = formdata;\n\n if (this.opts.appendForms) this.appendForms();\n if (this.opts.appendFields) this.appendFields();\n\n return this.data;\n\t},\n\tappendFields: function()\n\t{\n\t\tvar $fields = $(this.opts.appendFields);\n\t\tif ($fields.length === 0)\n\t\t{\n\t\t\treturn;\n }\n\n\t\tvar self = this;\n var str = '';\n\n if (this.formdata)\n {\n $fields.each(function()\n\t\t\t{\n\t\t\t\tself.data.append($(this).attr('name'), $(this).val());\n\t\t\t});\n }\n else\n {\n\t\t\t$fields.each(function()\n\t\t\t{\n\t\t\t\tstr += '&' + $(this).attr('name') + '=' + $(this).val();\n\t\t\t});\n\n\t\t\tthis.data = (this.data === '') ? str.replace(/^&/, '') : this.data + str;\n }\n\t},\n\tappendForms: function()\n\t{\n\t\tvar $forms = $(this.opts.appendForms);\n\t\tif ($forms.length === 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n if (this.formdata)\n {\n var self = this;\n var formsData = $(this.opts.appendForms).serializeArray();\n $.each(formsData, function(i,s)\n {\n\t\t\tself.data.append(s.name, s.value);\n });\n }\n else\n {\n var str = $forms.serialize();\n\n this.data = (this.data === '') ? str : this.data + '&' + str;\n }\n\t}\n };\n\n\n}(Kube));\n/**\n * @library Kube Response\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Response = function(app) {};\n\n Kube.Response.prototype = {\n parse: function(str)\n\t{\n\t\tif (str === '') return false;\n\n\t\tvar obj = {};\n\n\t\ttry {\n\t\t\tobj = JSON.parse(str);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (obj[0] !== undefined)\n\t\t{\n\t\t\tfor (var item in obj)\n\t\t\t{\n\t\t\t\tthis.parseItem(obj[item]);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.parseItem(obj);\n\t\t}\n\n\t\treturn obj;\n\t},\n\tparseItem: function(item)\n\t{\n\t\tif (item.type === 'value')\n\t\t{\n\t\t\t$.each(item.data, $.proxy(function(key, val)\n\t\t\t{\n\t\t\t\tval = (val === null || val === false) ? 0 : val;\n\t\t\t\tval = (val === true) ? 1 : val;\n\n\t\t\t\t$(key).val(val);\n\n\t\t\t}, this));\n\t\t}\n\t\telse if (item.type === 'html')\n\t\t{\n\t\t\t$.each(item.data, $.proxy(function(key, val)\n\t\t\t{\n\t\t\t\tval = (val === null || val === false) ? '' : val;\n\n\t\t\t\t$(key).html(this.stripslashes(val));\n\n\t\t\t}, this));\n\t\t}\n\t\telse if (item.type === 'addClass')\n\t\t{\n\t\t\t$.each(item.data, function(key, val)\n\t\t\t{\n\t\t\t\t$(key).addClass(val);\n\t\t\t});\n }\n\t\telse if (item.type === 'removeClass')\n\t\t{\n\t\t\t$.each(item.data, function(key, val)\n\t\t\t{\n\t\t\t\t$(key).removeClass(val);\n\t\t\t});\n }\n\t\telse if (item.type === 'command')\n\t\t{\n\t\t\t$.each(item.data, function(key, val)\n\t\t\t{\n\t\t\t\t$(val)[key]();\n\t\t\t});\n\t\t}\n\t\telse if (item.type === 'animation')\n\t\t{\n\t\t\t$.each(item.data, function(key, data)\n\t\t\t{\n\t\t\t\tdata.opts = (typeof data.opts === 'undefined') ? {} : data.opts;\n\n\t\t\t\t$(key).animation(data.name, data.opts);\n\t\t\t});\n\t\t}\n\t\telse if (item.type === 'location')\n\t\t{\n\t\t\ttop.location.href = item.data;\n\t\t}\n\t\telse if (item.type === 'notify')\n\t\t{\n\t\t\t$.notify(item.data);\n\t\t}\n\n\t\treturn item;\n\t},\n stripslashes: function(str)\n\t{\n\t\treturn (str+'').replace(/\\0/g, '0').replace(/\\\\([\\\\'\"])/g, '$1');\n }\n };\n\n\n}(Kube));\n/**\n * @library Kube Utils\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Utils = function() {};\n\n Kube.Utils.prototype = {\n disableBodyScroll: function()\n\t{\n\t\tvar $body = $('html');\n\t\tvar windowWidth = window.innerWidth;\n\n\t\tif (!windowWidth)\n\t\t{\n\t\t\tvar documentElementRect = document.documentElement.getBoundingClientRect();\n\t\t\twindowWidth = documentElementRect.right - Math.abs(documentElementRect.left);\n\t\t}\n\n\t\tvar isOverflowing = document.body.clientWidth < windowWidth;\n\t\tvar scrollbarWidth = this.measureScrollbar();\n\n\t\t$body.css('overflow', 'hidden');\n\t\tif (isOverflowing) $body.css('padding-right', scrollbarWidth);\n\t},\n\tmeasureScrollbar: function()\n\t{\n\t\tvar $body = $('body');\n\t\tvar scrollDiv = document.createElement('div');\n\t\tscrollDiv.className = 'scrollbar-measure';\n\n\t\t$body.append(scrollDiv);\n\t\tvar scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n\t\t$body[0].removeChild(scrollDiv);\n\t\treturn scrollbarWidth;\n\t},\n\tenableBodyScroll: function()\n\t{\n\t\t$('html').css({ 'overflow': '', 'padding-right': '' });\n\t}\n };\n\n\n}(Kube));\n/**\n * @library Kube Message\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Message = function(element, options)\n {\n this.namespace = 'message';\n this.defaults = {\n closeSelector: '.close',\n closeEvent: 'click',\n animationOpen: 'fadeIn',\n animationClose: 'fadeOut',\n callbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Message.prototype = {\n start: function()\n {\n this.$close = this.$element.find(this.opts.closeSelector);\n this.$close.on(this.opts.closeEvent + '.' + this.namespace, $.proxy(this.close, this));\n this.$element.addClass('open');\n },\n stop: function()\n {\n this.$close.off('.' + this.namespace);\n this.$element.removeClass('open');\n },\n open: function(e)\n {\n if (e) e.preventDefault();\n\n if (!this.isOpened())\n {\n this.callback('open');\n this.$element.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n }\n },\n isOpened: function()\n {\n return this.$element.hasClass('open');\n },\n onOpened: function()\n {\n this.callback('opened');\n this.$element.addClass('open');\n },\n close: function(e)\n {\n if (e) e.preventDefault();\n\n if (this.isOpened())\n {\n this.callback('close');\n this.$element.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n }\n },\n onClosed: function()\n {\n this.callback('closed');\n this.$element.removeClass('open');\n }\n };\n\n // Inheritance\n Kube.Message.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Message');\n Kube.Plugin.autoload('Message');\n\n}(Kube));\n/**\n * @library Kube Sticky\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Sticky = function(element, options)\n {\n this.namespace = 'sticky';\n this.defaults = {\n classname: 'fixed',\n offset: 0, // pixels\n callbacks: ['fixed', 'unfixed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Sticky.prototype = {\n start: function()\n {\n\t this.offsetTop = this.getOffsetTop();\n\n\t this.load();\n\t $(window).scroll($.proxy(this.load, this));\n\t},\n\tgetOffsetTop: function()\n\t{\n\t\treturn this.$element.offset().top;\n\t},\n\tload: function()\n\t{\n\t\treturn (this.isFix()) ? this.fixed() : this.unfixed();\n\t},\n\tisFix: function()\n\t{\n return ($(window).scrollTop() > (this.offsetTop + this.opts.offset));\n\t},\n\tfixed: function()\n\t{\n\t\tthis.$element.addClass(this.opts.classname).css('top', this.opts.offset + 'px');\n\t\tthis.callback('fixed');\n\t},\n\tunfixed: function()\n\t{\n\t\tthis.$element.removeClass(this.opts.classname).css('top', '');\n\t\tthis.callback('unfixed');\n }\n };\n\n // Inheritance\n Kube.Sticky.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Sticky');\n Kube.Plugin.autoload('Sticky');\n\n}(Kube));\n/**\n * @library Kube Toggleme\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Toggleme = function(element, options)\n {\n this.namespace = 'toggleme';\n this.defaults = {\n toggleEvent: 'click',\n target: null,\n text: '',\n animationOpen: 'slideDown',\n animationClose: 'slideUp',\n callbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Toggleme.prototype = {\n start: function()\n {\n if (!this.hasTarget()) return;\n\n this.$element.on(this.opts.toggleEvent + '.' + this.namespace, $.proxy(this.toggle, this));\n },\n stop: function()\n {\n this.$element.off('.' + this.namespace);\n this.revertText();\n },\n toggle: function(e)\n {\n if (this.isOpened()) this.close(e);\n else this.open(e);\n },\n open: function(e)\n {\n if (e) e.preventDefault();\n\n if (!this.isOpened())\n {\n this.storeText();\n this.callback('open');\n this.$target.animation('slideDown', $.proxy(this.onOpened, this));\n\n // changes the text of $element with a less delay to smooth\n setTimeout($.proxy(this.replaceText, this), 100);\n\t\t}\n },\n close: function(e)\n {\n if (e) e.preventDefault();\n\n if (this.isOpened())\n {\n this.callback('close');\n this.$target.animation('slideUp', $.proxy(this.onClosed, this));\n\t\t}\n },\n\tisOpened: function()\n {\n return (this.$target.hasClass('open'));\n },\n onOpened: function()\n {\n this.$target.addClass('open');\n\t\tthis.callback('opened');\n },\n onClosed: function()\n {\n this.$target.removeClass('open');\n this.revertText();\n\t\tthis.callback('closed');\n },\n storeText: function()\n {\n this.$element.data('replacement-text', this.$element.html());\n },\n revertText: function()\n {\n var text = this.$element.data('replacement-text');\n if (text) this.$element.html(text);\n\n this.$element.removeData('replacement-text');\n },\n replaceText: function()\n {\n if (this.opts.text !== '')\n {\n this.$element.html(this.opts.text);\n }\n }\n };\n\n // Inheritance\n Kube.Toggleme.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Toggleme');\n Kube.Plugin.autoload('Toggleme');\n\n}(Kube));\n/**\n * @library Kube Offcanvas\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Offcanvas = function(element, options)\n {\n this.namespace = 'offcanvas';\n this.defaults = {\n\t\ttarget: null, // selector\n\t\tpush: true, // boolean\n\t\twidth: '250px', // string\n\t\tdirection: 'left', // string: left or right\n\t\ttoggleEvent: 'click',\n\t\tclickOutside: true, // boolean\n\t\tanimationOpen: 'slideInLeft',\n\t\tanimationClose: 'slideOutLeft',\n\t\tcallbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Services\n this.utils = new Kube.Utils();\n this.detect = new Kube.Detect();\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Offcanvas.prototype = {\n start: function()\n {\n if (!this.hasTarget()) return;\n\n this.buildTargetWidth();\n this.buildAnimationDirection();\n\n this.$close = this.getCloseLink();\n this.$element.on(this.opts.toggleEvent + '.' + this.namespace, $.proxy(this.toggle, this));\n this.$target.addClass('offcanvas');\n\t},\n\tstop: function()\n\t{\n\t\tthis.closeAll();\n\n this.$element.off('.' + this.namespace);\n this.$close.off('.' + this.namespace);\n $(document).off('.' + this.namespace);\n\t},\n\ttoggle: function(e)\n\t{\n\t\tif (this.isOpened()) this.close(e);\n\t\telse this.open(e);\n },\n\tbuildTargetWidth: function()\n\t{\n this.opts.width = ($(window).width() < parseInt(this.opts.width)) ? '100%' : this.opts.width;\n\t},\n\tbuildAnimationDirection: function()\n\t{\n if (this.opts.direction === 'right')\n {\n this.opts.animationOpen = 'slideInRight';\n\t\t\tthis.opts.animationClose = 'slideOutRight';\n }\n\t},\n\tgetCloseLink: function()\n\t{\n return this.$target.find('.close');\n\t},\n\topen: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n if (!this.isOpened())\n {\n this.closeAll();\n\t\t\tthis.callback('open');\n\n this.$target.addClass('offcanvas-' + this.opts.direction);\n this.$target.css('width', this.opts.width);\n\n this.pushBody();\n\n\t\t\tthis.$target.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n\t\t}\n\t},\n\tcloseAll: function()\n\t{\n\t\tvar $elms = $(document).find('.offcanvas');\n\t\tif ($elms.length !== 0)\n\t\t{\n $elms.each(function()\n {\n var $el = $(this);\n\n if ($el.hasClass('open'))\n {\n $el.css('width', '').animation('hide');\n $el.removeClass('open offcanvas-left offcanvas-right');\n }\n\n });\n\n $(document).off('.' + this.namespace);\n $('body').css('left', '');\n\t\t}\n\t},\n\tclose: function(e)\n\t{\n\t\tif (e)\n\t\t{\n\t\tvar $el = $(e.target);\n\t\tvar isTag = ($el[0].tagName === 'A' || $el[0].tagName === 'BUTTON');\n\t\tif (isTag && $el.closest('.offcanvas').length !== 0 && !$el.hasClass('close'))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\te.preventDefault();\n }\n\n if (this.isOpened())\n\t\t{\n\t\t\tthis.utils.enableBodyScroll();\n\t\t\tthis.callback('close');\n this.pullBody();\n\t\t\tthis.$target.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n\t\t}\n\t},\n\tisOpened: function()\n {\n return (this.$target.hasClass('open'));\n },\n\tonOpened: function()\n\t{\n\t\tif (this.opts.clickOutside) $(document).on('click.' + this.namespace, $.proxy(this.close, this));\n\t\tif (this.detect.isMobileScreen()) $('html').addClass('no-scroll');\n\n $(document).on('keyup.' + this.namespace, $.proxy(this.handleKeyboard, this));\n this.$close.on('click.' + this.namespace, $.proxy(this.close, this));\n\n\t\tthis.utils.disableBodyScroll();\n this.$target.addClass('open');\n this.callback('opened');\n\t},\n\tonClosed: function()\n\t{\n\t\tif (this.detect.isMobileScreen()) $('html').removeClass('no-scroll');\n\n this.$target.css('width', '').removeClass('offcanvas-' + this.opts.direction);\n\n this.$close.off('.' + this.namespace);\n\t\t$(document).off('.' + this.namespace);\n\n this.$target.removeClass('open');\n\t\tthis.callback('closed');\n\t},\n\thandleKeyboard: function(e)\n\t{\n\t\tif (e.which === 27) this.close();\n\t},\n\tpullBody: function()\n\t{\n if (this.opts.push)\n {\n $('body').animate({ left: 0 }, 350, function() { $(this).removeClass('offcanvas-push-body'); });\n }\n\t},\n\tpushBody: function()\n\t{\n if (this.opts.push)\n {\n var properties = (this.opts.direction === 'left') ? { 'left': this.opts.width } : { 'left': '-' + this.opts.width };\n $('body').addClass('offcanvas-push-body').animate(properties, 200);\n }\n\t}\n };\n\n // Inheritance\n Kube.Offcanvas.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Offcanvas');\n Kube.Plugin.autoload('Offcanvas');\n\n}(Kube));\n/**\n * @library Kube Collapse\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Collapse = function(element, options)\n {\n this.namespace = 'collapse';\n this.defaults = {\n target: null,\n toggle: true,\n active: false, // string (hash = tab id selector)\n toggleClass: 'collapse-toggle',\n boxClass: 'collapse-box',\n callbacks: ['open', 'opened', 'close', 'closed'],\n\n // private\n hashes: [],\n\t\tcurrentHash: false,\n\t\tcurrentItem: false\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Collapse.prototype = {\n start: function()\n {\n // items\n this.$items = this.getItems();\n this.$items.each($.proxy(this.loadItems, this));\n\n // boxes\n this.$boxes = this.getBoxes();\n\n // active\n this.setActiveItem();\n },\n getItems: function()\n {\n return this.$element.find('.' + this.opts.toggleClass);\n },\n getBoxes: function()\n {\n return this.$element.find('.' + this.opts.boxClass);\n },\n\tloadItems: function(i, el)\n\t{\n\t\tvar item = this.getItem(el);\n\n\t\t// set item identificator\n\t\titem.$el.attr('rel', item.hash);\n\n // active\n\t\tif (!$(item.hash).hasClass('hide'))\n\t\t{\n\t\t\tthis.opts.currentItem = item;\n\t\t\tthis.opts.active = item.hash;\n\n item.$el.addClass('active');\n }\n\n\t\t// event\n\t\titem.$el.on('click.collapse', $.proxy(this.toggle, this));\n\n\t},\n\tsetActiveItem: function()\n\t{\n\t\tif (this.opts.active !== false)\n\t\t{\n\t\t\tthis.opts.currentItem = this.getItemBy(this.opts.active);\n\t\t\tthis.opts.active = this.opts.currentItem.hash;\n\t\t}\n\n if (this.opts.currentItem !== false)\n {\n\t\t this.addActive(this.opts.currentItem);\n\t\t this.opts.currentItem.$box.removeClass('hide');\n\t\t}\n\t},\n\taddActive: function(item)\n\t{\n\t\titem.$box.removeClass('hide').addClass('open');\n\t\titem.$el.addClass('active');\n\n\t\tif (item.$caret !== false) item.$caret.removeClass('down').addClass('up');\n\t\tif (item.$parent !== false) item.$parent.addClass('active');\n\n\t\tthis.opts.currentItem = item;\n\t},\n\tremoveActive: function(item)\n\t{\n\t\titem.$box.removeClass('open');\n\t\titem.$el.removeClass('active');\n\n\t\tif (item.$caret !== false) item.$caret.addClass('down').removeClass('up');\n\t\tif (item.$parent !== false) item.$parent.removeClass('active');\n\n\t\tthis.opts.currentItem = false;\n\t},\n toggle: function(e)\n {\n if (e) e.preventDefault();\n\n var target = $(e.target).closest('.' + this.opts.toggleClass).get(0) || e.target;\n var item = this.getItem(target);\n\n if (this.isOpened(item.hash)) this.close(item.hash);\n else this.open(e)\n },\n openAll: function()\n {\n this.$items.addClass('active');\n this.$boxes.addClass('open').removeClass('hide');\n },\n open: function(e, push)\n {\n\t\tif (typeof e === 'undefined') return;\n\t\tif (typeof e === 'object') e.preventDefault();\n\n var target = $(e.target).closest('.' + this.opts.toggleClass).get(0) || e.target;\n\t\tvar item = (typeof e === 'object') ? this.getItem(target) : this.getItemBy(e);\n\n\t\tif (item.$box.hasClass('open'))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.opts.toggle) this.closeAll();\n\n\t\tthis.callback('open', item);\n\t\tthis.addActive(item);\n\n item.$box.animation('slideDown', $.proxy(this.onOpened, this));\n },\n onOpened: function()\n {\n\t\tthis.callback('opened', this.opts.currentItem);\n },\n closeAll: function()\n {\n this.$items.removeClass('active').closest('li').removeClass('active');\n this.$boxes.removeClass('open').addClass('hide');\n },\n close: function(num)\n {\n\t\tvar item = this.getItemBy(num);\n\n\t\tthis.callback('close', item);\n\n\t\tthis.opts.currentItem = item;\n\n\t\titem.$box.animation('slideUp', $.proxy(this.onClosed, this));\n },\n onClosed: function()\n {\n var item = this.opts.currentItem;\n\n\t\tthis.removeActive(item);\n\t\tthis.callback('closed', item);\n },\n isOpened: function(hash)\n {\n return $(hash).hasClass('open');\n },\n\tgetItem: function(element)\n\t{\n\t\tvar item = {};\n\n\t\titem.$el = $(element);\n\t\titem.hash = item.$el.attr('href');\n\t\titem.$box = $(item.hash);\n\n\t\tvar $parent = item.$el.parent();\n\t\titem.$parent = ($parent[0].tagName === 'LI') ? $parent : false;\n\n\t\tvar $caret = item.$el.find('.caret');\n\t\titem.$caret = ($caret.length !== 0) ? $caret : false;\n\n\t\treturn item;\n\t},\n\tgetItemBy: function(num)\n\t{\n\t\tvar element = (typeof num === 'number') ? this.$items.eq(num-1) : this.$element.find('[rel=\"' + num + '\"]');\n\n\t\treturn this.getItem(element);\n }\n };\n\n // Inheritance\n Kube.Collapse.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Collapse');\n Kube.Plugin.autoload('Collapse');\n\n}(Kube));\n/**\n * @library Kube Dropdown\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Dropdown = function(element, options)\n {\n this.namespace = 'dropdown';\n this.defaults = {\n\t\ttarget: null,\n\t\ttoggleEvent: 'click',\n\t\theight: false, // integer\n\t\twidth: false, // integer\n\t\tanimationOpen: 'slideDown',\n\t\tanimationClose: 'slideUp',\n\t\tcaretUp: false,\n callbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Services\n this.utils = new Kube.Utils();\n this.detect = new Kube.Detect();\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Dropdown.prototype = {\n start: function()\n {\n this.buildClose();\n this.buildCaret();\n\n if (this.detect.isMobile()) this.buildMobileAnimation();\n\n this.$target.addClass('hide');\n this.$element.on(this.opts.toggleEvent + '.' + this.namespace, $.proxy(this.toggle, this));\n\n\t},\n\tstop: function()\n\t{\n\t\tthis.$element.off('.' + this.namespace);\n this.$target.removeClass('open').addClass('hide');\n\t\tthis.disableEvents();\n\t},\n\tbuildMobileAnimation: function()\n\t{\n this.opts.animationOpen = 'fadeIn';\n this.opts.animationClose = 'fadeOut';\n\t},\n\tbuildClose: function()\n\t{\n this.$close = this.$target.find('.close');\n\t},\n\tbuildCaret: function()\n\t{\n this.$caret = this.getCaret();\n\t\tthis.buildCaretPosition();\n\t},\n\tbuildCaretPosition: function()\n\t{\n\t\tvar height = this.$element.offset().top + this.$element.innerHeight() + this.$target.innerHeight();\n\n\t\tif ($(document).height() > height)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n this.opts.caretUp = true;\n\t\tthis.$caret.addClass('up');\n\t},\n\tgetCaret: function()\n\t{\n\t\treturn this.$element.find('.caret');\n\t},\n\ttoggleCaretOpen: function()\n\t{\n\t\tif (this.opts.caretUp) this.$caret.removeClass('up').addClass('down');\n\t\telse this.$caret.removeClass('down').addClass('up');\n\t},\n\ttoggleCaretClose: function()\n\t{\n\t\tif (this.opts.caretUp) this.$caret.removeClass('down').addClass('up');\n\t\telse this.$caret.removeClass('up').addClass('down');\n\t},\n\ttoggle: function(e)\n\t{\n\t\tif (this.isOpened()) this.close(e);\n\t\telse this.open(e);\n\t},\n\topen: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n this.callback('open');\n\t\t$('.dropdown').removeClass('open').addClass('hide');\n\n\t\tif (this.opts.height) this.$target.css('min-height', this.opts.height + 'px');\n\t\tif (this.opts.width) this.$target.width(this.opts.width);\n\n\t\tthis.setPosition();\n\t\tthis.toggleCaretOpen();\n\n\t\tthis.$target.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n\t},\n\tclose: function(e)\n\t{\n if (!this.isOpened())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (e)\n\t\t{\n\t\t\tif (this.shouldNotBeClosed(e.target))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tthis.utils.enableBodyScroll();\n\t\tthis.callback('close');\n\t\tthis.toggleCaretClose();\n\n\t\tthis.$target.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n\t},\n\tonClosed: function()\n\t{\n this.$target.removeClass('open');\n\t\tthis.disableEvents();\n\t\tthis.callback('closed');\n\t},\n\tonOpened: function()\n\t{\n\t\tthis.$target.addClass('open');\n\t\tthis.enableEvents();\n\t\tthis.callback('opened');\n\t},\n\tisOpened: function()\n\t{\n\t\treturn (this.$target.hasClass('open'));\n\t},\n\tenableEvents: function()\n\t{\n\t\tif (this.detect.isDesktop())\n\t\t{\n\t\t\tthis.$target.on('mouseover.' + this.namespace, $.proxy(this.utils.disableBodyScroll, this.utils))\n\t\t\t .on('mouseout.' + this.namespace, $.proxy(this.utils.enableBodyScroll, this.utils));\n\t\t}\n\n\t\t$(document).on('scroll.' + this.namespace, $.proxy(this.setPosition, this));\n\t\t$(window).on('resize.' + this.namespace, $.proxy(this.setPosition, this));\n\t\t$(document).on('click.' + this.namespace + ' touchstart.' + this.namespace, $.proxy(this.close, this));\n\t\t$(document).on('keydown.' + this.namespace, $.proxy(this.handleKeyboard, this));\n\t\tthis.$target.find('[data-action=\"dropdown-close\"]').on('click.' + this.namespace, $.proxy(this.close, this));\n\t},\n\tdisableEvents: function()\n\t{\n\t\tthis.$target.off('.' + this.namespace);\n\t\t$(document).off('.' + this.namespace);\n\t\t$(window).off('.' + this.namespace);\n\t},\n\thandleKeyboard: function(e)\n\t{\n\t\tif (e.which === 27) this.close(e);\n\t},\n\tshouldNotBeClosed: function(el)\n\t{\n if ($(el).attr('data-action') === 'dropdown-close' || el === this.$close[0])\n {\n return false;\n\t\t}\n\t\telse if ($(el).closest('.dropdown').length === 0)\n\t\t{\n\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t},\n isNavigationFixed: function()\n\t{\n\t\treturn (this.$element.closest('.fixed').length !== 0);\n\t},\n\tgetPlacement: function(height)\n\t{\n\t\treturn ($(document).height() < height) ? 'top' : 'bottom';\n\t},\n\tgetOffset: function(position)\n\t{\n\t\treturn (this.isNavigationFixed()) ? this.$element.position() : this.$element.offset();\n\t},\n\tgetPosition: function()\n\t{\n\t\treturn (this.isNavigationFixed()) ? 'fixed' : 'absolute';\n\t},\n\tsetPosition: function()\n\t{\n\t\tif (this.detect.isMobile())\n\t\t{\n this.$target.addClass('dropdown-mobile');\n return;\n\t\t}\n\n\t\tvar position = this.getPosition();\n\t\t\tvar coords = this.getOffset(position);\n\t\t\tvar height = this.$target.innerHeight();\n\t\t\tvar width = this.$target.innerWidth();\n\t\t\tvar placement = this.getPlacement(coords.top + height + this.$element.innerHeight());\n\t\t\tvar leftFix = ($(window).width() < (coords.left + width)) ? (width - this.$element.innerWidth()) : 0;\n\t\t\tvar top, left = coords.left - leftFix;\n\n\t\t\tif (placement === 'bottom')\n\t\t\t{\n\t\t\tif (!this.isOpened()) this.$caret.removeClass('up').addClass('down');\n\n\t\t\t\tthis.opts.caretUp = false;\n\t\t\t\ttop = coords.top + this.$element.outerHeight() + 1;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.opts.animationOpen = 'show';\n\t\t\t\tthis.opts.animationClose = 'hide';\n\n if (!this.isOpened()) this.$caret.addClass('up').removeClass('down');\n\n\t\t\t\tthis.opts.caretUp = true;\n\t\t\t\ttop = coords.top - height - 1;\n\t\t\t}\n\n\t\t\tthis.$target.css({ position: position, top: top + 'px', left: left + 'px' });\n\t}\n };\n\n // Inheritance\n Kube.Dropdown.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Dropdown');\n Kube.Plugin.autoload('Dropdown');\n\n}(Kube));\n/**\n * @library Kube Tabs\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Tabs = function(element, options)\n {\n this.namespace = 'tabs';\n this.defaults = {\n\t\tequals: false,\n\t\tactive: false, // string (hash = tab id selector)\n\t\tlive: false, // class selector\n\t\thash: true, //boolean\n\t\tcallbacks: ['init', 'next', 'prev', 'open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Tabs.prototype = {\n start: function()\n {\n if (this.opts.live !== false) this.buildLiveTabs();\n\n this.tabsCollection = [];\n this.hashesCollection = [];\n this.currentHash = [];\n this.currentItem = false;\n\n // items\n this.$items = this.getItems();\n this.$items.each($.proxy(this.loadItems, this));\n\n // tabs\n\t\tthis.$tabs = this.getTabs();\n\n // location hash\n\t\tthis.currentHash = this.getLocationHash();\n\n\t\t// close all\n\t\tthis.closeAll();\n\n // active & height\n\t\tthis.setActiveItem();\n\t\tthis.setItemHeight();\n\n // callback\n\t\tthis.callback('init');\n\n\t},\n\tgetTabs: function()\n\t{\n\t\treturn $(this.tabsCollection).map(function()\n\t\t{\n\t\treturn this.toArray();\n });\n\t},\n\tgetItems: function()\n\t{\n\t\treturn this.$element.find('a');\n\t},\n\tloadItems: function(i, el)\n\t{\n\t\tvar item = this.getItem(el);\n\n\t\t// set item identificator\n\t\titem.$el.attr('rel', item.hash);\n\n\t\t// collect item\n this.collectItem(item);\n\n // active\n\t\tif (item.$parent.hasClass('active'))\n\t\t{\n\t\t\tthis.currentItem = item;\n\t\t\tthis.opts.active = item.hash;\n\t\t}\n\n\t\t// event\n\t\titem.$el.on('click.tabs', $.proxy(this.open, this));\n\n\t},\n\tcollectItem: function(item)\n\t{\n\t\tthis.tabsCollection.push(item.$tab);\n\t\tthis.hashesCollection.push(item.hash);\n\t},\n\tbuildLiveTabs: function()\n\t{\n\t\tvar $layers = $(this.opts.live);\n\n\t\tif ($layers.length === 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.$liveTabsList = $('
');\n\t\t$layers.each($.proxy(this.buildLiveItem, this));\n\n\t\tthis.$element.html('').append(this.$liveTabsList);\n\n\t},\n\tbuildLiveItem: function(i, tab)\n\t{\n\t\tvar $tab = $(tab);\n\t\tvar $li = $('');\n\t\tvar $a = $('');\n\t\tvar index = i + 1;\n\n\t\t$tab.attr('id', this.getLiveItemId($tab, index));\n\n\t\tvar hash = '#' + $tab.attr('id');\n\t\tvar title = this.getLiveItemTitle($tab);\n\n\t\t$a.attr('href', hash).attr('rel', hash).text(title);\n\t\t$li.append($a);\n\n\t\tthis.$liveTabsList.append($li);\n\t},\n\tgetLiveItemId: function($tab, index)\n\t{\n\t\treturn (typeof $tab.attr('id') === 'undefined') ? this.opts.live.replace('.', '') + index : $tab.attr('id');\n\t},\n\tgetLiveItemTitle: function($tab)\n\t{\n\t\treturn (typeof $tab.attr('data-title') === 'undefined') ? $tab.attr('id') : $tab.attr('data-title');\n\t},\n\tsetActiveItem: function()\n\t{\n\t\tif (this.currentHash)\n\t\t{\n\t\t\tthis.currentItem = this.getItemBy(this.currentHash);\n\t\t\tthis.opts.active = this.currentHash;\n\t\t}\n\t\telse if (this.opts.active === false)\n\t\t{\n\t\t\tthis.currentItem = this.getItem(this.$items.first());\n\t\t\tthis.opts.active = this.currentItem.hash;\n\t\t}\n\n\t\tthis.addActive(this.currentItem);\n\t},\n\taddActive: function(item)\n\t{\n\t\titem.$parent.addClass('active');\n\t\titem.$tab.removeClass('hide').addClass('open');\n\n\t\tthis.currentItem = item;\n\t},\n\tremoveActive: function(item)\n\t{\n\t\titem.$parent.removeClass('active');\n\t\titem.$tab.addClass('hide').removeClass('open');\n\n\t\tthis.currentItem = false;\n\t},\n\tnext: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n\t\tvar item = this.getItem(this.fetchElement('next'));\n\n\t\tthis.open(item.hash);\n\t\tthis.callback('next', item);\n\n\t},\n\tprev: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n\t\tvar item = this.getItem(this.fetchElement('prev'));\n\n\t\tthis.open(item.hash);\n\t\tthis.callback('prev', item);\n\t},\n\tfetchElement: function(type)\n\t{\n var element;\n\t\tif (this.currentItem !== false)\n\t\t{\n\t\t\t// prev or next\n\t\t\telement = this.currentItem.$parent[type]().find('a');\n\n\t\t\tif (element.length === 0)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// first\n\t\t\telement = this.$items[0];\n\t\t}\n\n\t\treturn element;\n\t},\n\topen: function(e, push)\n\t{\n\t\tif (typeof e === 'undefined') return;\n\t\tif (typeof e === 'object') e.preventDefault();\n\n\t\tvar item = (typeof e === 'object') ? this.getItem(e.target) : this.getItemBy(e);\n\t\tthis.closeAll();\n\n\t\tthis.callback('open', item);\n\t\tthis.addActive(item);\n\n\t\t// push state (doesn't need to push at the start)\n this.pushStateOpen(push, item);\n\t\tthis.callback('opened', item);\n\t},\n\tpushStateOpen: function(push, item)\n\t{\n\t\tif (push !== false && this.opts.hash !== false)\n\t\t{\n\t\t\thistory.pushState(false, false, item.hash);\n\t\t}\n\t},\n\tclose: function(num)\n\t{\n\t\tvar item = this.getItemBy(num);\n\n\t\tif (!item.$parent.hasClass('active'))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.callback('close', item);\n\t\tthis.removeActive(item);\n\t\tthis.pushStateClose();\n\t\tthis.callback('closed', item);\n\n\t},\n\tpushStateClose: function()\n\t{\n if (this.opts.hash !== false)\n {\n\t\t\thistory.pushState(false, false, ' ');\n\t\t}\n\t},\n\tcloseAll: function()\n\t{\n\t\tthis.$tabs.removeClass('open').addClass('hide');\n\t\tthis.$items.parent().removeClass('active');\n\t},\n\tgetItem: function(element)\n\t{\n\t\tvar item = {};\n\n\t\titem.$el = $(element);\n\t\titem.hash = item.$el.attr('href');\n\t\titem.$parent = item.$el.parent();\n\t\titem.$tab = $(item.hash);\n\n\t\treturn item;\n\t},\n\tgetItemBy: function(num)\n\t{\n\t\tvar element = (typeof num === 'number') ? this.$items.eq(num-1) : this.$element.find('[rel=\"' + num + '\"]');\n\n\t\treturn this.getItem(element);\n\t},\n\tgetLocationHash: function()\n\t{\n\t\tif (this.opts.hash === false)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn (this.isHash()) ? top.location.hash : false;\n\t},\n\tisHash: function()\n\t{\n\t\treturn !(top.location.hash === '' || $.inArray(top.location.hash, this.hashesCollection) === -1);\n\t},\n\tsetItemHeight: function()\n\t{\n\t\tif (this.opts.equals)\n\t\t{\n\t\tvar minHeight = this.getItemMaxHeight() + 'px';\n\t\t\tthis.$tabs.css('min-height', minHeight);\n\t\t}\n\t},\n\tgetItemMaxHeight: function()\n\t{\n\t\tvar max = 0;\n\t\tthis.$tabs.each(function()\n\t\t{\n\t\t\tvar h = $(this).height();\n\t\t\tmax = h > max ? h : max;\n\t\t});\n\n\t\treturn max;\n\t}\n };\n\n // Inheritance\n Kube.Tabs.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Tabs');\n Kube.Plugin.autoload('Tabs');\n\n}(Kube));\n/**\n * @library Kube Modal\n * @author Imperavi LLC\n * @license MIT\n */\n(function($)\n{\n $.modalcurrent = null;\n\t$.modalwindow = function(options)\n\t{\n\tvar opts = $.extend({}, options, { show: true });\n\tvar $element = $('');\n\n\t$element.modal(opts);\n\t};\n\n})(jQuery);\n\n(function(Kube)\n{\n Kube.Modal = function(element, options)\n {\n this.namespace = 'modal';\n this.defaults = {\n target: null,\n show: false,\n\t\turl: false,\n\t\theader: false,\n\t\twidth: '600px', // string\n\t\theight: false, // or string\n\t\tmaxHeight: false,\n\t\tposition: 'center', // top or center\n\t\toverlay: true,\n\t\tappendForms: false,\n\t\tappendFields: false,\n\t\tanimationOpen: 'show',\n\t\tanimationClose: 'hide',\n\t\tcallbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Services\n this.utils = new Kube.Utils();\n this.detect = new Kube.Detect();\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Modal.prototype = {\n start: function()\n {\n if (!this.hasTarget())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n if (this.opts.show) this.load();\n\t\telse this.$element.on('click.' + this.namespace, $.proxy(this.load, this));\n\t},\n\tbuildModal: function()\n\t{\n\t\tthis.$modal = this.$target.find('.modal');\n\t\tthis.$header = this.$target.find('.modal-header');\n\t\tthis.$close = this.$target.find('.close');\n\t\tthis.$body = this.$target.find('.modal-body');\n\t},\n\tbuildOverlay: function()\n\t{\n\t\tif (this.opts.overlay === false)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif ($('#modal-overlay').length !== 0)\n\t\t{\n\t\t\tthis.$overlay = $('#modal-overlay');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.$overlay = $('').addClass('hide');\n\t\t\t$('body').prepend(this.$overlay);\n\t\t}\n\n\t\tthis.$overlay.addClass('overlay');\n\t},\n\tbuildHeader: function()\n\t{\n\t\tif (this.opts.header) this.$header.html(this.opts.header);\n\t},\n\tload: function(e)\n\t{\n\t\tthis.buildModal();\n\t\tthis.buildOverlay();\n\t\tthis.buildHeader();\n\n if (this.opts.url) this.buildContent();\n else this.open(e);\n\t},\n\topen: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n if (this.isOpened())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.detect.isMobile()) this.opts.width = '96%';\n\t\tif (this.opts.overlay) this.$overlay.removeClass('hide');\n\n\t\tthis.$target.removeClass('hide');\n\t\tthis.$modal.removeClass('hide');\n\n this.enableEvents();\n\t\tthis.findActions();\n\n\t\tthis.resize();\n\t\t$(window).on('resize.' + this.namespace, $.proxy(this.resize, this));\n\n\t\tif (this.detect.isDesktop()) this.utils.disableBodyScroll();\n\n\t\t// enter\n\t\tthis.$modal.find('input[type=text],input[type=url],input[type=email]').on('keydown.' + this.namespace, $.proxy(this.handleEnter, this));\n\n\t\tthis.callback('open');\n\t\tthis.$modal.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n },\n close: function(e)\n {\n if (!this.$modal || !this.isOpened())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (e)\n\t\t{\n\t\t\tif (this.shouldNotBeClosed(e.target))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tthis.callback('close');\n\t\tthis.disableEvents();\n\n\t\tthis.$modal.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n\n if (this.opts.overlay) this.$overlay.animation(this.opts.animationClose);\n },\n\tonOpened: function()\n\t{\n\t\tthis.$modal.addClass('open');\n this.callback('opened');\n\n $.modalcurrent = this;\n\t},\n\tonClosed: function()\n\t{\n\t\tthis.callback('closed');\n\n this.$target.addClass('hide');\n this.$modal.removeClass('open');\n\n\t\tif (this.detect.isDesktop()) this.utils.enableBodyScroll();\n\n\t\tthis.$body.css('height', '');\n $.modalcurrent = null;\n\t},\n\tisOpened: function()\n\t{\n\t\treturn (this.$modal.hasClass('open'));\n\t},\n\tgetData: function()\n\t{\n var formdata = new Kube.FormData(this);\n formdata.set('');\n\n return formdata.get();\n\t},\n\tbuildContent: function()\n\t{\n\t\t$.ajax({\n\t\t\turl: this.opts.url + '?' + new Date().getTime(),\n\t\t\tcache: false,\n\t\t\ttype: 'post',\n\t\t\tdata: this.getData(),\n\t\t\tsuccess: $.proxy(function(data)\n\t\t\t{\n\t\t\t\tthis.$body.html(data);\n\t\t\t\tthis.open();\n\n\t\t\t}, this)\n\t\t});\n\t},\n\tbuildWidth: function()\n\t{\n\t\tvar width = this.opts.width;\n\t\tvar top = '2%';\n\t\tvar bottom = '2%';\n\t\tvar percent = width.match(/%$/);\n\n\t\tif ((parseInt(this.opts.width) > $(window).width()) && !percent)\n\t\t{\n width = '96%';\n\t\t}\n\t\telse if (!percent)\n\t\t{\n top = '16px';\n bottom = '16px';\n\t\t}\n\n\t\tthis.$modal.css({ 'width': width, 'margin-top': top, 'margin-bottom': bottom });\n\n\t},\n\tbuildPosition: function()\n\t{\n\t\tif (this.opts.position !== 'center')\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tvar windowHeight = $(window).height();\n\t\tvar height = this.$modal.outerHeight();\n\t\tvar top = (windowHeight/2 - height/2) + 'px';\n\n\t\tif (this.detect.isMobile()) top = '2%';\n\t\telse if (height > windowHeight) top = '16px';\n\n\t\tthis.$modal.css('margin-top', top);\n\t},\n\tbuildHeight: function()\n\t{\n\t\tvar windowHeight = $(window).height();\n\n\t\tif (this.opts.maxHeight)\n\t\t{\n\t\t\tvar padding = parseInt(this.$body.css('padding-top')) + parseInt(this.$body.css('padding-bottom'));\n\t\t\tvar margin = parseInt(this.$modal.css('margin-top')) + parseInt(this.$modal.css('margin-bottom'));\n\t\t\tvar height = windowHeight - this.$header.innerHeight() - padding - margin;\n\n\t\t\tthis.$body.height(height);\n\t\t}\n\t\telse if (this.opts.height !== false)\n\t\t{\n\t\t\tthis.$body.css('height', this.opts.height);\n\t\t}\n\n\t\tvar modalHeight = this.$modal.outerHeight();\n\t\tif (modalHeight > windowHeight)\n\t\t{\n\t\t\tthis.opts.animationOpen = 'show';\n\t\t\tthis.opts.animationClose = 'hide';\n\t\t}\n\t},\n\tresize: function()\n\t{\n\t\tthis.buildWidth();\n\t\tthis.buildPosition();\n\t\tthis.buildHeight();\n\t},\n\tenableEvents: function()\n\t{\n\t\tthis.$close.on('click.' + this.namespace, $.proxy(this.close, this));\n\t\t$(document).on('keyup.' + this.namespace, $.proxy(this.handleEscape, this));\n\t\tthis.$target.on('click.' + this.namespace, $.proxy(this.close, this));\n\t},\n\tdisableEvents: function()\n\t{\n\t\tthis.$close.off('.' + this.namespace);\n\t\t$(document).off('.' + this.namespace);\n\t\tthis.$target.off('.' + this.namespace);\n\t\t$(window).off('.' + this.namespace);\n\t},\n\tfindActions: function()\n\t{\n\t\tthis.$body.find('[data-action=\"modal-close\"]').on('mousedown.' + this.namespace, $.proxy(this.close, this));\n\t},\n\tsetHeader: function(header)\n\t{\n\t\tthis.$header.html(header);\n\t},\n\tsetContent: function(content)\n\t{\n\t\tthis.$body.html(content);\n\t},\n\tsetWidth: function(width)\n\t{\n\t\tthis.opts.width = width;\n\t\tthis.resize();\n\t},\n\tgetModal: function()\n\t{\n return this.$modal;\n\t},\n\tgetBody: function()\n\t{\n return this.$body;\n\t},\n\tgetHeader: function()\n\t{\n return this.$header;\n\t},\n\thandleEnter: function(e)\n\t{\n\t\tif (e.which === 13)\n\t\t{\n\t\te.preventDefault();\n\t\tthis.close(false);\n }\n\t},\n\thandleEscape: function(e)\n\t{\n\t\treturn (e.which === 27) ? this.close(false) : true;\n\t},\n\tshouldNotBeClosed: function(el)\n\t{\n if ($(el).attr('data-action') === 'modal-close' || el === this.$close[0])\n {\n return false;\n\t\t}\n\t\telse if ($(el).closest('.modal').length === 0)\n\t\t{\n\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n };\n\n // Inheritance\n Kube.Modal.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Modal');\n Kube.Plugin.autoload('Modal');\n\n}(Kube));","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define(['d3'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('d3'));\n } else {\n root.MG = factory(root.d3);\n }\n}(this, function(d3) {\n(typeof window === 'undefined' ? global : window).MG = {version: '2.11'};\n\n//a set of helper functions, some that we've written, others that we've borrowed\n\nMG.convert = {};\n\nMG.convert.date = function(data, accessor, time_format) {\n time_format = (typeof time_format === \"undefined\") ? '%Y-%m-%d' : time_format;\n var parse_time = d3.timeParse(time_format);\n data = data.map(function(d) {\n d[accessor] = parse_time(d[accessor].trim());\n return d;\n });\n\n return data;\n}\n\nMG.convert.number = function(data, accessor) {\n data = data.map(function(d) {\n d[accessor] = Number(d[accessor]);\n return d;\n });\n\n return data;\n}\n\nMG.time_format = function(utc, specifier) {\n return utc ? d3.utcFormat(specifier) : d3.timeFormat(specifier);\n}\n\nfunction mg_jquery_exists() {\n if (typeof jQuery !== 'undefined' || typeof $ !== 'undefined') {\n return true;\n } else {\n return false;\n }\n}\n\nfunction mg_get_rollover_time_format(args) {\n var fmt;\n switch (args.processed.x_time_frame) {\n case 'millis':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %H:%M:%S.%L');\n break;\n case 'seconds':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %H:%M:%S');\n break;\n case 'less-than-a-day':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %I:%M%p');\n break;\n case 'four-days':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %I:%M%p');\n break;\n default:\n fmt = MG.time_format(args.utc_time, '%b %e, %Y');\n }\n return fmt;\n}\n\nfunction mg_data_in_plot_bounds(datum, args) {\n return datum[args.x_accessor] >= args.processed.min_x &&\n datum[args.x_accessor] <= args.processed.max_x &&\n datum[args.y_accessor] >= args.processed.min_y &&\n datum[args.y_accessor] <= args.processed.max_y;\n}\n\nfunction is_array(thing) {\n return Object.prototype.toString.call(thing) === '[object Array]';\n}\n\nfunction is_function(thing) {\n return Object.prototype.toString.call(thing) === '[object Function]';\n}\n\nfunction is_empty_array(thing) {\n return is_array(thing) && thing.length === 0;\n}\n\nfunction is_object(thing) {\n return Object.prototype.toString.call(thing) === '[object Object]';\n}\n\nfunction is_array_of_arrays(data) {\n var all_elements = data.map(function(d) {\n return is_array(d) === true && d.length > 0;\n });\n\n return d3.sum(all_elements) === data.length;\n}\n\nfunction is_array_of_objects(data) {\n // is every element of data an object?\n var all_elements = data.map(function(d) {\n return is_object(d) === true;\n });\n\n return d3.sum(all_elements) === data.length;\n}\n\nfunction is_array_of_objects_or_empty(data) {\n return is_empty_array(data) || is_array_of_objects(data);\n}\n\nfunction pluck(arr, accessor) {\n return arr.map(function(d) {\n return d[accessor] });\n}\n\nfunction count_array_elements(arr) {\n return arr.reduce(function(a, b) { a[b] = a[b] + 1 || 1;\n return a; }, {});\n}\n\nfunction mg_get_bottom(args) {\n return args.height - args.bottom;\n}\n\nfunction mg_get_plot_bottom(args) {\n // returns the pixel location of the bottom side of the plot area.\n return mg_get_bottom(args) - args.buffer;\n}\n\nfunction mg_get_top(args) {\n return args.top;\n}\n\nfunction mg_get_plot_top(args) {\n // returns the pixel location of the top side of the plot area.\n return mg_get_top(args) + args.buffer;\n}\n\nfunction mg_get_left(args) {\n return args.left;\n}\n\nfunction mg_get_plot_left(args) {\n // returns the pixel location of the left side of the plot area.\n return mg_get_left(args) + args.buffer;\n}\n\nfunction mg_get_right(args) {\n return args.width - args.right;\n}\n\nfunction mg_get_plot_right(args) {\n // returns the pixel location of the right side of the plot area.\n return mg_get_right(args) - args.buffer;\n}\n\n//////// adding elements, removing elements /////////////\n\nfunction mg_exit_and_remove(elem) {\n elem.exit().remove();\n}\n\nfunction mg_selectAll_and_remove(svg, cl) {\n svg.selectAll(cl).remove();\n}\n\nfunction mg_add_g(svg, cl) {\n return svg.append('g').classed(cl, true);\n}\n\nfunction mg_remove_element(svg, elem) {\n svg.select(elem).remove();\n}\n\n//////// axis helper functions ////////////\n\nfunction mg_make_rug(args, rug_class) {\n var svg = mg_get_svg_child_of(args.target);\n var all_data = mg_flatten_array(args.data);\n var rug = svg.selectAll('line.' + rug_class).data(all_data);\n\n rug.enter()\n .append('line')\n .attr('class', rug_class)\n .attr('opacity', 0.3);\n\n //remove rug elements that are no longer in use\n mg_exit_and_remove(rug);\n\n //set coordinates of new rug elements\n mg_exit_and_remove(rug);\n return rug;\n}\n\nfunction mg_add_color_accessor_to_rug(rug, args, rug_mono_class) {\n if (args.color_accessor) {\n rug.attr('stroke', args.scalefns.colorf);\n rug.classed(rug_mono_class, false);\n } else {\n rug.attr('stroke', null);\n rug.classed(rug_mono_class, true);\n }\n}\n\nfunction mg_rotate_labels(labels, rotation_degree) {\n if (rotation_degree) {\n labels.attr({\n dy: 0,\n transform: function() {\n var elem = d3.select(this);\n return 'rotate(' + rotation_degree + ' ' + elem.attr('x') + ',' + elem.attr('y') + ')';\n }\n });\n }\n}\n\n//////////////////////////////////////////////////\n\nfunction mg_elements_are_overlapping(labels) {\n labels = labels.node();\n if (!labels) {\n return false;\n }\n\n for (var i = 0; i < labels.length; i++) {\n if (mg_is_horizontally_overlapping(labels[i], labels)) return true;\n }\n\n return false;\n}\n\nfunction mg_prevent_horizontal_overlap(labels, args) {\n if (!labels || labels.length == 1) {\n return;\n }\n\n //see if each of our labels overlaps any of the other labels\n for (var i = 0; i < labels.length; i++) {\n //if so, nudge it up a bit, if the label it intersects hasn't already been nudged\n if (mg_is_horizontally_overlapping(labels[i], labels)) {\n var node = d3.select(labels[i]);\n var newY = +node.attr('y');\n if (newY + 8 >= args.top) {\n newY = args.top - 16;\n }\n node.attr('y', newY);\n }\n }\n}\n\nfunction mg_prevent_vertical_overlap(labels, args) {\n if (!labels || labels.length == 1) {\n return;\n }\n\n labels.sort(function(b, a) {\n return d3.select(a).attr('y') - d3.select(b).attr('y');\n });\n\n labels.reverse();\n\n var overlap_amount, label_i, label_j;\n\n //see if each of our labels overlaps any of the other labels\n for (var i = 0; i < labels.length; i++) {\n //if so, nudge it up a bit, if the label it intersects hasn't already been nudged\n label_i = d3.select(labels[i]).text();\n\n for (var j = 0; j < labels.length; j++) {\n label_j = d3.select(labels[j]).text();\n overlap_amount = mg_is_vertically_overlapping(labels[i], labels[j]);\n\n if (overlap_amount !== false && label_i !== label_j) {\n var node = d3.select(labels[i]);\n var newY = +node.attr('y');\n newY = newY + overlap_amount;\n node.attr('y', newY);\n }\n }\n }\n}\n\nfunction mg_is_vertically_overlapping(element, sibling) {\n var element_bbox = element.getBoundingClientRect();\n var sibling_bbox = sibling.getBoundingClientRect();\n\n if (element_bbox.top <= sibling_bbox.bottom && element_bbox.top >= sibling_bbox.top) {\n return sibling_bbox.bottom - element_bbox.top;\n }\n\n return false;\n}\n\nfunction mg_is_horiz_overlap(element, sibling) {\n var element_bbox = element.getBoundingClientRect();\n var sibling_bbox = sibling.getBoundingClientRect();\n\n if (element_bbox.right >= sibling_bbox.left || element_bbox.top >= sibling_bbox.top) {\n return sibling_bbox.bottom - element_bbox.top;\n }\n return false;\n}\n\nfunction mg_is_horizontally_overlapping(element, labels) {\n var element_bbox = element.getBoundingClientRect();\n\n for (var i = 0; i < labels.length; i++) {\n if (labels[i] == element) {\n continue;\n }\n\n //check to see if this label overlaps with any of the other labels\n var sibling_bbox = labels[i].getBoundingClientRect();\n if (element_bbox.top === sibling_bbox.top &&\n !(sibling_bbox.left > element_bbox.right || sibling_bbox.right < element_bbox.left)\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction mg_infer_type(args, ns) {\n // must return categorical or numerical.\n var testPoint = mg_flatten_array(args.data);\n\n testPoint = testPoint[0][args[ns + '_accessor']];\n return typeof testPoint === 'string' ? 'categorical' : 'numerical';\n }\n\nfunction mg_get_svg_child_of(selector_or_node) {\n return d3.select(selector_or_node).select('svg');\n}\n\nfunction mg_flatten_array(arr) {\n var flat_data = [];\n return flat_data.concat.apply(flat_data, arr);\n}\n\nfunction mg_next_id() {\n if (typeof MG._next_elem_id === 'undefined') {\n MG._next_elem_id = 0;\n }\n\n return 'mg-' + (MG._next_elem_id++);\n}\n\nfunction mg_target_ref(target) {\n if (typeof target === 'string') {\n return mg_normalize(target);\n\n } else if (target instanceof window.HTMLElement) {\n var target_ref = target.getAttribute('data-mg-uid');\n if (!target_ref) {\n target_ref = mg_next_id();\n target.setAttribute('data-mg-uid', target_ref);\n }\n\n return target_ref;\n\n } else {\n console.warn('The specified target should be a string or an HTMLElement.', target);\n return mg_normalize(target);\n }\n}\n\nfunction mg_normalize(string) {\n return string\n .replace(/[^a-zA-Z0-9 _-]+/g, '')\n .replace(/ +?/g, '');\n}\n\nfunction get_pixel_dimension(target, dimension) {\n return Number(d3.select(target).style(dimension).replace(/px/g, ''));\n}\n\nfunction get_width(target) {\n return get_pixel_dimension(target, 'width');\n}\n\nfunction get_height(target) {\n return get_pixel_dimension(target, 'height');\n}\n\nfunction isNumeric(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\n\nvar each = function(obj, iterator, context) {\n // yanked out of underscore\n var breaker = {};\n if (obj === null) return obj;\n if (Array.prototype.forEach && obj.forEach === Array.prototype.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length === +obj.length) {\n for (var i = 0, length = obj.length; i < length; i++) {\n if (iterator.call(context, obj[i], i, obj) === breaker) return;\n }\n } else {\n for (var k in obj) {\n if (iterator.call(context, obj[k], k, obj) === breaker) return;\n }\n }\n\n return obj;\n};\n\nfunction merge_with_defaults(obj) {\n // taken from underscore\n each(Array.prototype.slice.call(arguments, 1), function(source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === void 0) obj[prop] = source[prop];\n }\n }\n });\n\n return obj;\n}\n\nMG.merge_with_defaults = merge_with_defaults;\n\nfunction number_of_values(data, accessor, value) {\n var values = data.filter(function(d) {\n return d[accessor] === value;\n });\n\n return values.length;\n}\n\nfunction has_values_below(data, accessor, value) {\n var values = data.filter(function(d) {\n return d[accessor] <= value;\n });\n\n return values.length > 0;\n}\n\nfunction has_too_many_zeros(data, accessor, zero_count) {\n return number_of_values(data, accessor, 0) >= zero_count;\n}\n\nfunction mg_is_date(obj) {\n return Object.prototype.toString.call(obj) === '[object Date]';\n}\n\nfunction mg_is_object(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nfunction mg_is_array(obj) {\n if (Array.isArray) {\n return Array.isArray(obj);\n }\n\n return Object.prototype.toString.call(obj) === '[object Array]';\n}\n\nfunction mg_is_function(obj) {\n return Object.prototype.toString.call(obj) === '[object Function]';\n}\n\n// deep copy\n// http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object\nMG.clone = function(obj) {\n var copy;\n\n // Handle the 3 simple types, and null or undefined\n if (null === obj || \"object\" !== typeof obj) return obj;\n\n // Handle Date\n if (mg_is_date(obj)) {\n copy = new Date();\n copy.setTime(obj.getTime());\n return copy;\n }\n\n // Handle Array\n if (mg_is_array(obj)) {\n copy = [];\n for (var i = 0, len = obj.length; i < len; i++) {\n copy[i] = MG.clone(obj[i]);\n }\n return copy;\n }\n\n // Handle Object\n if (mg_is_object(obj)) {\n copy = {};\n for (var attr in obj) {\n if (obj.hasOwnProperty(attr)) copy[attr] = MG.clone(obj[attr]);\n }\n return copy;\n }\n\n throw new Error(\"Unable to copy obj! Its type isn't supported.\");\n};\n\n// give us the difference of two int arrays\n// http://radu.cotescu.com/javascript-diff-function/\nfunction arr_diff(a, b) {\n var seen = [],\n diff = [],\n i;\n for (i = 0; i < b.length; i++)\n seen[b[i]] = true;\n for (i = 0; i < a.length; i++)\n if (!seen[a[i]])\n diff.push(a[i]);\n return diff;\n}\n\nMG.arr_diff = arr_diff;\n\n/**\n Print warning message to the console when a feature has been scheduled for removal\n\n @author Dan de Havilland (github.com/dandehavilland)\n @date 2014-12\n*/\nfunction warn_deprecation(message, untilVersion) {\n console.warn('Deprecation: ' + message + (untilVersion ? '. This feature will be removed in ' + untilVersion + '.' : ' the near future.'));\n console.trace();\n}\n\nMG.warn_deprecation = warn_deprecation;\n\n/**\n Truncate a string to fit within an SVG text node\n CSS text-overlow doesn't apply to SVG <= 1.2\n\n @author Dan de Havilland (github.com/dandehavilland)\n @date 2014-12-02\n*/\nfunction truncate_text(textObj, textString, width) {\n var bbox,\n position = 0;\n\n textObj.textContent = textString;\n bbox = textObj.getBBox();\n\n while (bbox.width > width) {\n textObj.textContent = textString.slice(0, --position) + '...';\n bbox = textObj.getBBox();\n\n if (textObj.textContent === '...') {\n break;\n }\n }\n}\n\nMG.truncate_text = truncate_text;\n\n/**\n Wrap the contents of a text node to a specific width\n\n Adapted from bl.ocks.org/mbostock/7555321\n\n @author Mike Bostock\n @author Dan de Havilland\n @date 2015-01-14\n*/\nfunction wrap_text(text, width, token, tspanAttrs) {\n text.each(function() {\n var text = d3.select(this),\n words = text.text().split(token || /\\s+/).reverse(),\n word,\n line = [],\n lineNumber = 0,\n lineHeight = 1.1, // ems\n y = text.attr(\"y\"),\n dy = 0,\n tspan = text.text(null)\n .append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"y\", dy + \"em\")\n .attr(tspanAttrs || {});\n\n while (!!(word = words.pop())) {\n line.push(word);\n tspan.text(line.join(\" \"));\n if (width === null || tspan.node().getComputedTextLength() > width) {\n line.pop();\n tspan.text(line.join(\" \"));\n line = [word];\n tspan = text\n .append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"y\", ++lineNumber * lineHeight + dy + \"em\")\n .attr(tspanAttrs || {})\n .text(word);\n }\n }\n });\n}\n\nMG.wrap_text = wrap_text;\n\nfunction register(chartType, descriptor, defaults) {\n MG.charts[chartType] = {\n descriptor: descriptor,\n defaults: defaults || {}\n };\n}\n\nMG.register = register;\n\n/**\n Record of all registered hooks.\n For internal use only.\n*/\nMG._hooks = {};\n\n/**\n Add a hook callthrough to the stack.\n\n Hooks are executed in the order that they were registered.\n*/\nMG.add_hook = function(name, func, context) {\n var hooks;\n\n if (!MG._hooks[name]) {\n MG._hooks[name] = [];\n }\n\n hooks = MG._hooks[name];\n\n var already_registered =\n hooks.filter(function(hook) {\n return hook.func === func;\n })\n .length > 0;\n\n if (already_registered) {\n throw 'That function is already registered.';\n }\n\n hooks.push({\n func: func,\n context: context\n });\n};\n\n/**\n Execute registered hooks.\n\n Optional arguments\n*/\nMG.call_hook = function(name) {\n var hooks = MG._hooks[name],\n result = [].slice.apply(arguments, [1]),\n processed;\n\n if (hooks) {\n hooks.forEach(function(hook) {\n if (hook.func) {\n var params = processed || result;\n\n if (params && params.constructor !== Array) {\n params = [params];\n }\n\n params = [].concat.apply([], params);\n processed = hook.func.apply(hook.context, params);\n }\n });\n }\n\n return processed || result;\n};\n\nMG.globals = {};\nMG.deprecations = {\n rollover_callback: { replacement: 'mouseover', version: '2.0' },\n rollout_callback: { replacement: 'mouseout', version: '2.0' },\n x_rollover_format: { replacement: 'x_mouseover', version: '2.10' },\n y_rollover_format: { replacement: 'y_mouseover', version: '2.10' },\n show_years: { replacement: 'show_secondary_x_label', version: '2.1' },\n xax_start_at_min: { replacement: 'axes_not_compact', version: '2.7' },\n interpolate_tension: { replacement: 'interpolate', version: '2.10' }\n};\nMG.globals.link = false;\nMG.globals.version = \"1.1\";\n\nMG.charts = {};\n\nMG.data_graphic = function(args) {\n 'use strict';\n var defaults = {\n missing_is_zero: false, // if true, missing values will be treated as zeros\n missing_is_hidden: false, // if true, missing values will appear as broken segments\n missing_is_hidden_accessor: null, // the accessor that determines the boolean value for missing data points\n legend: '' , // an array identifying the labels for a chart's lines\n legend_target: '', // if set, the specified element is populated with a legend\n error: '', // if set, a graph will show an error icon and log the error to the console\n animate_on_load: false, // animate lines on load\n top: 65, // the size of the top margin\n title_y_position: 10, // how many pixels from the top edge (0) should we show the title at\n center_title_full_width: false, // center the title over the full graph (i.e. ignore left and right margins)\n bottom: 45, // the size of the bottom margin\n right: 10, // size of the right margin\n left: 50, // size of the left margin\n buffer: 8, // the buffer between the actual chart area and the margins\n width: 350, // the width of the entire graphic\n height: 220, // the height of the entire graphic\n full_width: false, // sets the graphic width to be the width of the parent element and resizes dynamically\n full_height: false, // sets the graphic width to be the width of the parent element and resizes dynamically\n small_height_threshold: 120, // the height threshold for when smaller text appears\n small_width_threshold: 160, // the width threshold for when smaller text appears\n xax_count: 6, // number of x axis ticks\n xax_tick_length: 5, // x axis tick length\n axes_not_compact: true,\n yax_count: 3, // number of y axis ticks\n yax_tick_length: 5, // y axis tick length\n x_extended_ticks: false, // extends x axis ticks across chart - useful for tall charts\n y_extended_ticks: false, // extends y axis ticks across chart - useful for long charts\n y_scale_type: 'linear',\n max_x: null,\n max_y: null,\n min_x: null,\n min_y: null, // if set, y axis starts at an arbitrary value\n min_y_from_data: false, // if set, y axis will start at minimum value rather than at 0\n point_size: 2.5, // the size of the dot that appears on a line on mouse-over\n x_accessor: 'date',\n xax_units: '',\n x_label: '',\n x_sort: true,\n x_axis: true,\n y_axis: true,\n x_axis_position: 'bottom',\n y_axis_position: 'left',\n x_axis_type: null, // TO BE INTRODUCED IN 2.10\n y_axis_type: null, // TO BE INTRODUCED IN 2.10\n ygroup_accessor: null,\n xgroup_accessor:null,\n y_padding_percentage: 0.05, // for categorical scales\n y_outer_padding_percentage: .1, // for categorical scales\n ygroup_padding_percentage:.25, // for categorical scales\n ygroup_outer_padding_percentage: 0, // for categorical scales\n x_padding_percentage: 0.05, // for categorical scales\n x_outer_padding_percentage: .1, // for categorical scales\n xgroup_padding_percentage:.25, // for categorical scales\n xgroup_outer_padding_percentage: 0, // for categorical scales\n y_categorical_show_guides: false,\n x_categorical_show_guide: false,\n rotate_x_labels: 0,\n rotate_y_labels: 0,\n y_accessor: 'value',\n y_label: '',\n yax_units: '',\n yax_units_append: false,\n x_rug: false,\n y_rug: false,\n mouseover_align: 'right', // implemented in point.js\n x_mouseover: null,\n y_mouseover: null,\n transition_on_update: true,\n mouseover: null,\n click: null,\n show_rollover_text: true,\n show_confidence_band: null, // given [l, u] shows a confidence at each point from l to u\n xax_format: null, // xax_format is a function that formats the labels for the x axis.\n area: true,\n chart_type: 'line',\n data: [],\n decimals: 2, // the number of decimals in any rollover\n format: 'count', // format = {count, percentage}\n inflator: 10/9, // for setting y axis max\n linked: false, // links together all other graphs with linked:true, so rollovers in one trigger rollovers in the others\n linked_format: '%Y-%m-%d', // What granularity to link on for graphs. Default is at day\n list: false,\n baselines: null, // sets the baseline lines\n markers: null, // sets the marker lines\n scalefns: {},\n scales: {},\n utc_time: false,\n european_clock: false,\n show_year_markers: false,\n show_secondary_x_label: true,\n target: '#viz',\n interpolate: d3.curveCatmullRom.alpha(0), // interpolation method to use when rendering lines; increase tension if your data is irregular and you notice artifacts\n custom_line_color_map: [], // allows arbitrary mapping of lines to colors, e.g. [2,3] will map line 1 to color 2 and line 2 to color 3\n colors: null, // UNIMPLEMENTED - allows direct color mapping to line colors. Will eventually require\n max_data_size: null, // explicitly specify the the max number of line series, for use with custom_line_color_map\n aggregate_rollover: false, // links the lines in a multi-line chart\n show_tooltips: true // if enabled, a chart's description will appear in a tooltip (requires jquery)\n };\n\n MG.call_hook('global.defaults', defaults);\n\n if (!args) { args = {}; }\n\n var selected_chart = MG.charts[args.chart_type || defaults.chart_type];\n merge_with_defaults(args, selected_chart.defaults, defaults);\n\n if (args.list) {\n args.x_accessor = 0;\n args.y_accessor = 1;\n }\n\n // check for deprecated parameters\n for (var key in MG.deprecations) {\n if (args.hasOwnProperty(key)) {\n var deprecation = MG.deprecations[key],\n message = 'Use of `args.' + key + '` has been deprecated',\n replacement = deprecation.replacement,\n version;\n\n // transparently alias the deprecated\n if (replacement) {\n if (args[replacement]) {\n message += '. The replacement - `args.' + replacement + '` - has already been defined. This definition will be discarded.';\n } else {\n args[replacement] = args[key];\n }\n }\n\n if (deprecation.warned) {\n continue;\n }\n\n deprecation.warned = true;\n\n if (replacement) {\n message += ' in favor of `args.' + replacement + '`';\n }\n\n warn_deprecation(message, deprecation.version);\n }\n }\n\n MG.call_hook('global.before_init', args);\n\n new selected_chart.descriptor(args);\n\n return args.data;\n};\n\nif (mg_jquery_exists()) {\n /* ========================================================================\n * Bootstrap: tooltip.js v3.3.5\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n +function ($) {\n 'use strict';\n\n // TOOLTIP PUBLIC CLASS DEFINITION\n // ===============================\n\n var Tooltip = function (element, options) {\n this.type = null\n this.options = null\n this.enabled = null\n this.timeout = null\n this.hoverState = null\n this.$element = null\n this.inState = null\n\n this.init('tooltip', element, options)\n }\n\n Tooltip.VERSION = '3.3.5'\n\n Tooltip.TRANSITION_DURATION = 150\n\n Tooltip.DEFAULTS = {\n animation: true,\n placement: 'top',\n selector: false,\n template: '',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n container: false,\n viewport: {\n selector: 'body',\n padding: 0\n }\n }\n\n Tooltip.prototype.init = function (type, element, options) {\n this.enabled = true\n this.type = type\n this.$element = $(element)\n this.options = this.getOptions(options)\n this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n this.inState = { click: false, hover: false, focus: false }\n\n if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n }\n\n var triggers = this.options.trigger.split(' ')\n\n for (var i = triggers.length; i--;) {\n var trigger = triggers[i]\n\n if (trigger == 'click') {\n this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n } else if (trigger != 'manual') {\n var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'\n var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n }\n }\n\n this.options.selector ?\n (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n this.fixTitle()\n }\n\n Tooltip.prototype.getDefaults = function () {\n return Tooltip.DEFAULTS\n }\n\n Tooltip.prototype.getOptions = function (options) {\n options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n if (options.delay && typeof options.delay == 'number') {\n options.delay = {\n show: options.delay,\n hide: options.delay\n }\n }\n\n return options\n }\n\n Tooltip.prototype.getDelegateOptions = function () {\n var options = {}\n var defaults = this.getDefaults()\n\n this._options && $.each(this._options, function (key, value) {\n if (defaults[key] != value) options[key] = value\n })\n\n return options\n }\n\n Tooltip.prototype.enter = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n }\n\n if (self.tip().hasClass('in') || self.hoverState == 'in') {\n self.hoverState = 'in'\n return\n }\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'in'\n\n if (!self.options.delay || !self.options.delay.show) return self.show()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'in') self.show()\n }, self.options.delay.show)\n }\n\n Tooltip.prototype.isInStateTrue = function () {\n for (var key in this.inState) {\n if (this.inState[key]) return true\n }\n\n return false\n }\n\n Tooltip.prototype.leave = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n }\n\n if (self.isInStateTrue()) return\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'out'\n\n if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'out') self.hide()\n }, self.options.delay.hide)\n }\n\n Tooltip.prototype.show = function () {\n var e = $.Event('show.bs.' + this.type)\n\n if (this.hasContent() && this.enabled) {\n this.$element.trigger(e)\n\n var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n if (e.isDefaultPrevented() || !inDom) return\n var that = this\n\n var $tip = this.tip()\n\n var tipId = this.getUID(this.type)\n\n this.setContent()\n $tip.attr('id', tipId)\n this.$element.attr('aria-describedby', tipId)\n\n if (this.options.animation) $tip.addClass('fade')\n\n var placement = typeof this.options.placement == 'function' ?\n this.options.placement.call(this, $tip[0], this.$element[0]) :\n this.options.placement\n\n var autoToken = /\\s?auto?\\s?/i\n var autoPlace = autoToken.test(placement)\n if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n $tip\n .detach()\n .css({ top: 0, left: 0, display: 'block' })\n .addClass(placement)\n .data('bs.' + this.type, this)\n\n this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n this.$element.trigger('inserted.bs.' + this.type)\n\n var pos = this.getPosition()\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (autoPlace) {\n var orgPlacement = placement\n var viewportDim = this.getPosition(this.$viewport)\n\n placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :\n placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :\n placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :\n placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :\n placement\n\n $tip\n .removeClass(orgPlacement)\n .addClass(placement)\n }\n\n var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n this.applyPlacement(calculatedOffset, placement)\n\n var complete = function () {\n var prevHoverState = that.hoverState\n that.$element.trigger('shown.bs.' + that.type)\n that.hoverState = null\n\n if (prevHoverState == 'out') that.leave(that)\n }\n\n $.support.transition && this.$tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n }\n }\n\n Tooltip.prototype.applyPlacement = function (offset, placement) {\n var $tip = this.tip()\n var width = $tip[0].offsetWidth\n var height = $tip[0].offsetHeight\n\n // manually read margins because getBoundingClientRect includes difference\n var marginTop = parseInt($tip.css('margin-top'), 10)\n var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n // we must check for NaN for ie 8/9\n if (isNaN(marginTop)) marginTop = 0\n if (isNaN(marginLeft)) marginLeft = 0\n\n offset.top += marginTop\n offset.left += marginLeft\n\n // $.fn.offset doesn't round pixel values\n // so we use setOffset directly with our own function B-0\n $.offset.setOffset($tip[0], $.extend({\n using: function (props) {\n $tip.css({\n top: Math.round(props.top),\n left: Math.round(props.left)\n })\n }\n }, offset), 0)\n\n $tip.addClass('in')\n\n // check to see if placing tip in new offset caused the tip to resize itself\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (placement == 'top' && actualHeight != height) {\n offset.top = offset.top + height - actualHeight\n }\n\n var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n if (delta.left) offset.left += delta.left\n else offset.top += delta.top\n\n var isVertical = /top|bottom/.test(placement)\n var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n $tip.offset(offset)\n this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n }\n\n Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n this.arrow()\n .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n .css(isVertical ? 'top' : 'left', '')\n }\n\n Tooltip.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n\n $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n $tip.removeClass('fade in top bottom left right')\n }\n\n Tooltip.prototype.hide = function (callback) {\n var that = this\n var $tip = $(this.$tip)\n var e = $.Event('hide.bs.' + this.type)\n\n function complete() {\n if (that.hoverState != 'in') $tip.detach()\n that.$element\n .removeAttr('aria-describedby')\n .trigger('hidden.bs.' + that.type)\n callback && callback()\n }\n\n this.$element.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n $tip.removeClass('in')\n\n $.support.transition && $tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n\n this.hoverState = null\n\n return this\n }\n\n Tooltip.prototype.fixTitle = function () {\n var $e = this.$element\n if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n }\n }\n\n Tooltip.prototype.hasContent = function () {\n return this.getTitle()\n }\n\n Tooltip.prototype.getPosition = function ($element) {\n $element = $element || this.$element\n\n var el = $element[0]\n var isBody = el.tagName == 'BODY'\n\n var elRect = el.getBoundingClientRect()\n if (elRect.width == null) {\n // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n }\n var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()\n var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n return $.extend({}, elRect, scroll, outerDims, elOffset)\n }\n\n Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n }\n\n Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n var delta = { top: 0, left: 0 }\n if (!this.$viewport) return delta\n\n var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n var viewportDimensions = this.getPosition(this.$viewport)\n\n if (/right|left/.test(placement)) {\n var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll\n var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n if (topEdgeOffset < viewportDimensions.top) { // top overflow\n delta.top = viewportDimensions.top - topEdgeOffset\n } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n }\n } else {\n var leftEdgeOffset = pos.left - viewportPadding\n var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n delta.left = viewportDimensions.left - leftEdgeOffset\n } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n }\n }\n\n return delta\n }\n\n Tooltip.prototype.getTitle = function () {\n var title\n var $e = this.$element\n var o = this.options\n\n title = $e.attr('data-original-title')\n || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)\n\n return title\n }\n\n Tooltip.prototype.getUID = function (prefix) {\n do prefix += ~~(Math.random() * 1000000)\n while (document.getElementById(prefix))\n return prefix\n }\n\n Tooltip.prototype.tip = function () {\n if (!this.$tip) {\n this.$tip = $(this.options.template)\n if (this.$tip.length != 1) {\n throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n }\n }\n return this.$tip\n }\n\n Tooltip.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n }\n\n Tooltip.prototype.enable = function () {\n this.enabled = true\n }\n\n Tooltip.prototype.disable = function () {\n this.enabled = false\n }\n\n Tooltip.prototype.toggleEnabled = function () {\n this.enabled = !this.enabled\n }\n\n Tooltip.prototype.toggle = function (e) {\n var self = this\n if (e) {\n self = $(e.currentTarget).data('bs.' + this.type)\n if (!self) {\n self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n $(e.currentTarget).data('bs.' + this.type, self)\n }\n }\n\n if (e) {\n self.inState.click = !self.inState.click\n if (self.isInStateTrue()) self.enter(self)\n else self.leave(self)\n } else {\n self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n }\n }\n\n Tooltip.prototype.destroy = function () {\n var that = this\n clearTimeout(this.timeout)\n this.hide(function () {\n that.$element.off('.' + that.type).removeData('bs.' + that.type)\n if (that.$tip) {\n that.$tip.detach()\n }\n that.$tip = null\n that.$arrow = null\n that.$viewport = null\n })\n }\n\n\n // TOOLTIP PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.tooltip')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.tooltip\n\n $.fn.tooltip = Plugin\n $.fn.tooltip.Constructor = Tooltip\n\n\n // TOOLTIP NO CONFLICT\n // ===================\n\n $.fn.tooltip.noConflict = function () {\n $.fn.tooltip = old\n return this\n }\n\n }(jQuery);\n\n\n /* ========================================================================\n * Bootstrap: popover.js v3.3.5\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n +function ($) {\n 'use strict';\n\n // POPOVER PUBLIC CLASS DEFINITION\n // ===============================\n\n var Popover = function (element, options) {\n this.init('popover', element, options)\n }\n\n if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n Popover.VERSION = '3.3.5'\n\n Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n placement: 'right',\n trigger: 'click',\n content: '',\n template: ''\n })\n\n\n // NOTE: POPOVER EXTENDS tooltip.js\n // ================================\n\n Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n Popover.prototype.constructor = Popover\n\n Popover.prototype.getDefaults = function () {\n return Popover.DEFAULTS\n }\n\n Popover.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n var content = this.getContent()\n\n $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n ](content)\n\n $tip.removeClass('fade top bottom left right in')\n\n // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n // this manually by checking the contents.\n if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n }\n\n Popover.prototype.hasContent = function () {\n return this.getTitle() || this.getContent()\n }\n\n Popover.prototype.getContent = function () {\n var $e = this.$element\n var o = this.options\n\n return $e.attr('data-content')\n || (typeof o.content == 'function' ?\n o.content.call($e[0]) :\n o.content)\n }\n\n Popover.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n }\n\n\n // POPOVER PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.popover')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.popover\n\n $.fn.popover = Plugin\n $.fn.popover.Constructor = Popover\n\n\n // POPOVER NO CONFLICT\n // ===================\n\n $.fn.popover.noConflict = function () {\n $.fn.popover = old\n return this\n }\n\n }(jQuery);\n}\n\nfunction chart_title(args) {\n 'use strict';\n\n var svg = mg_get_svg_child_of(args.target);\n\n //remove the current title if it exists\n svg.select('.mg-header').remove();\n\n if (args.target && args.title) {\n var chartTitle = svg.insert('text')\n .attr('class', 'mg-header')\n .attr('x', args.center_title_full_width ? args.width /2 : (args.width + args.left - args.right) / 2)\n .attr('y', args.title_y_position)\n .attr('text-anchor', 'middle')\n .attr('dy', '0.55em');\n\n //show the title\n chartTitle.append('tspan')\n .attr('class', 'mg-chart-title')\n .text(args.title);\n\n //show and activate the description icon if we have a description\n if (args.show_tooltips && args.description && mg_jquery_exists()) {\n chartTitle.append('tspan')\n .attr('class', 'mg-chart-description')\n .attr('dx', '0.3em')\n .text('\\uf059');\n\n //now that the title is an svg text element, we'll have to trigger\n //mouseenter, mouseleave events manually for the popover to work properly\n var $chartTitle = $(chartTitle.node());\n $chartTitle.popover({\n html: true,\n animation: false,\n placement: 'top',\n content: args.description,\n container: args.target,\n trigger: 'manual',\n template: ''\n }).on('mouseenter', function() {\n d3.selectAll(args.target)\n .selectAll('.mg-popover')\n .remove();\n\n $(this).popover('show');\n $(d3.select(args.target).select('.popover').node())\n .on('mouseleave', function () {\n $chartTitle.popover('hide');\n });\n }).on('mouseleave', function () {\n setTimeout(function () {\n if (!$('.popover:hover').length) {\n $chartTitle.popover('hide');\n }\n }, 120);\n });\n } else if (args.show_tooltips && args.description && typeof $ === 'undefined') {\n args.error = 'In order to enable tooltips, please make sure you include jQuery.';\n }\n }\n\n if (args.error) {\n error(args);\n }\n}\n\nMG.chart_title = chart_title;\n\nfunction mg_add_scale_function(args, scalefcn_name, scale, accessor, inflation) {\n args.scalefns[scalefcn_name] = function(di) {\n if (inflation === undefined) return args.scales[scale](di[accessor]);\n else return args.scales[scale](di[accessor]) + inflation;\n };\n}\n\nfunction mg_position(str, args) {\n if (str === 'bottom' || str === 'top') {\n return [mg_get_plot_left(args), mg_get_plot_right(args)];\n }\n\n if (str === 'left' || str === 'right') {\n return [mg_get_plot_bottom(args), args.top];\n }\n}\n\nfunction mg_cat_position(str, args) {\n if (str === 'bottom' || str === 'top') {\n return [mg_get_plot_left(args), mg_get_plot_right(args)]\n }\n\n if (str === 'left' || str === 'right') {\n return [mg_get_plot_bottom(args), mg_get_plot_top(args)];\n }\n}\n\nfunction MGScale(args) {\n // big wrapper around d3 scale that automatically formats & calculates scale bounds\n // according to the data, and handles other niceties.\n var scaleArgs = {}\n scaleArgs.use_inflator = false;\n scaleArgs.zero_bottom = false;\n scaleArgs.scaleType = 'numerical';\n\n this.namespace = function(_namespace) {\n scaleArgs.namespace = _namespace;\n scaleArgs.namespace_accessor_name = scaleArgs.namespace + '_accessor';\n scaleArgs.scale_name = scaleArgs.namespace.toUpperCase();\n scaleArgs.scalefn_name = scaleArgs.namespace + 'f';\n return this;\n }\n\n this.scaleName = function(scaleName) {\n scaleArgs.scale_name = scaleName.toUpperCase();\n scaleArgs.scalefn_name = scaleName +'f';\n return this;\n }\n\n this.inflateDomain = function(tf) {\n scaleArgs.use_inflator = tf;\n return this;\n }\n\n this.zeroBottom = function(tf) {\n scaleArgs.zero_bottom = tf;\n return this;\n }\n\n /////////////////////////////////////////////////////////////////////////////////////////////////////////\n /// all scale domains are either numerical (number, date, etc.) or categorical (factor, label, etc) /////\n /////////////////////////////////////////////////////////////////////////////////////////////////////////\n // these functions automatically create the d3 scale function and place the domain.\n\n this.numericalDomainFromData = function() {\n var other_flat_data_arrays = [];\n\n if (arguments.length > 0) {\n other_flat_data_arrays = arguments;\n }\n\n // pull out a non-empty array in args.data.\n var illustrative_data;\n for (var i = 0; i < args.data.length; i++) {\n if (args.data[i].length > 0) {\n illustrative_data = args.data[i];\n }\n }\n scaleArgs.is_time_series = mg_is_date(illustrative_data[0][args[scaleArgs.namespace_accessor_name]])\n ? true\n : false;\n\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n\n mg_min_max_numerical(args, scaleArgs, other_flat_data_arrays, scaleArgs.use_inflator);\n\n var time_scale = (args.utc_time)\n ? d3.scaleUtc()\n : d3.scaleTime();\n\n args.scales[scaleArgs.scale_name] = (scaleArgs.is_time_series)\n ? time_scale\n : (mg_is_function(args[scaleArgs.namespace + '_scale_type']))\n ? args.y_scale_type()\n : (args[scaleArgs.namespace + '_scale_type'] === 'log')\n ? d3.scaleLog()\n : d3.scaleLinear();\n\n args.scales[scaleArgs.scale_name].domain([args.processed['min_' + scaleArgs.namespace], args.processed['max_' + scaleArgs.namespace]]);\n scaleArgs.scaleType = 'numerical';\n\n return this;\n }\n\n this.categoricalDomain = function(domain) {\n args.scales[scaleArgs.scale_name] = d3.scaleOrdinal().domain(domain);\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n return this;\n }\n\n this.categoricalDomainFromData = function() {\n // make args.categorical_variables.\n // lets make the categorical variables.\n var all_data = mg_flatten_array(args.data)\n //d3.set(data.map(function(d){return d[args.group_accessor]})).values()\n scaleArgs.categoricalVariables = d3.set(all_data.map(function(d) {\n return d[args[scaleArgs.namespace_accessor_name]] })).values();\n args.scales[scaleArgs.scale_name] = d3.scaleBand()\n .domain(scaleArgs.categoricalVariables);\n\n scaleArgs.scaleType = 'categorical';\n return this;\n }\n\n /////////////////////////////////////////////////////////////////////////////////////////////////////////////\n ////////// all scale ranges are either positional (for axes, etc) or arbitrary (colors, size, etc) //////////\n /////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n this.numericalRange = function(range) {\n if (typeof range === 'string') {\n args\n .scales[scaleArgs.scale_name]\n .range(mg_position(range, args));\n } else {\n args\n .scales[scaleArgs.scale_name]\n .range(range);\n }\n\n return this;\n }\n\n this.categoricalRangeBands = function(range, halfway) {\n if (halfway === undefined) halfway = false;\n\n var namespace = scaleArgs.namespace;\n var paddingPercentage = args[namespace + '_padding_percentage'];\n var outerPaddingPercentage = args[namespace + '_outer_padding_percentage'];\n if (typeof range === 'string') {\n // if string, it's a location. Place it accordingly.\n args.scales[scaleArgs.scale_name]\n .range(mg_position(range, args))\n .paddingInner(paddingPercentage)\n .paddingOuter(outerPaddingPercentage);\n } else {\n args.scales[scaleArgs.scale_name]\n .range(range)\n .paddingInner(paddingPercentage)\n .paddingOuter(outerPaddingPercentage);\n }\n\n mg_add_scale_function(\n args,\n scaleArgs.scalefn_name,\n scaleArgs.scale_name,\n args[scaleArgs.namespace_accessor_name],\n halfway\n ? args.scales[scaleArgs.scale_name].bandwidth() / 2\n : 0\n );\n\n return this;\n }\n\n this.categoricalRange = function(range) {\n args.scales[scaleArgs.scale_name].range(range);\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n return this;\n }\n\n this.categoricalColorRange = function() {\n args.scales[scaleArgs.scale_name] = args.scales[scaleArgs.scale_name].domain().length > 10\n ? d3.scaleOrdinal(d3.schemeCategory20)\n : d3.scaleOrdinal(d3.schemeCategory10);\n\n args\n .scales[scaleArgs.scale_name]\n .domain(scaleArgs.categoricalVariables);\n\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n return this;\n }\n\n this.clamp = function(yn) {\n args.scales[scaleArgs.scale_name].clamp(yn);\n return this;\n }\n\n return this;\n}\n\nMG.scale_factory = MGScale;\n\n/////////////////////////////// x, x_accessor, markers, baselines, etc.\nfunction mg_min_max_numerical(args, scaleArgs, additional_data_arrays) {\n // A BIT OF EXPLANATION ABOUT THIS FUNCTION\n // This function pulls out all the accessor values in all the arrays in args.data.\n // We also have this additional argument, additional_data_arrays, which is an array of arrays of raw data values.\n // These values also get concatenated to the data pulled from args.data, and the extents are calculate from that.\n // They are optional.\n //\n // This may seem arbitrary, but it gives us a lot of flexibility. For instance, if we're calculating\n // the min and max for the y axis of a line chart, we're going to want to also factor in baselines (horizontal lines\n // that might potentially be outside of the y value bounds). The easiest way to do this is in the line.js code\n // & scale creation to just flatten the args.baselines array, pull out hte values, and feed it in\n // so it appears in additional_data_arrays.\n var namespace = scaleArgs.namespace;\n var namespace_accessor_name = scaleArgs.namespace_accessor_name;\n var use_inflator = scaleArgs.use_inflator;\n var zero_bottom = scaleArgs.zero_bottom;\n\n var accessor = args[namespace_accessor_name];\n\n // add together all relevant data arrays.\n var all_data = mg_flatten_array(args.data)\n .map(function(dp) {\n return dp[accessor] })\n .concat(mg_flatten_array(additional_data_arrays));\n\n // do processing for log\n if (args[namespace + '_scale_type'] === 'log') {\n all_data = all_data.filter(function(d) {\n return d > 0;\n });\n }\n\n // use inflator?\n var extents = d3.extent(all_data);\n var min_val = extents[0];\n var max_val = extents[1];\n\n // bolt scale domain to zero when the right conditions are met:\n // not pulling the bottom of the range from data\n // not zero-bottomed\n // not a time series\n if (zero_bottom && !args['min_' + namespace + '_from_data'] && min_val > 0 && !scaleArgs.is_time_series) {\n min_val = args[namespace + '_scale_type'] === 'log' ? 1 : 0;\n }\n\n if (args[namespace + '_scale_type'] !== 'log' && min_val < 0 && !scaleArgs.is_time_series) {\n min_val = min_val - (min_val - min_val * args.inflator) * use_inflator;\n }\n\n if (!scaleArgs.is_time_series) {\n max_val = (max_val < 0) ? max_val + (max_val - max_val * args.inflator) * use_inflator : max_val * (use_inflator ? args.inflator : 1);\n }\n\n min_val = args['min_' + namespace] || min_val;\n max_val = args['max_' + namespace] || max_val;\n // if there's a single data point, we should custom-set the min and max values.\n\n if (min_val === max_val && !(args['min_' + namespace] && args['max_' + namespace])) {\n\n if (mg_is_date(min_val)) {\n max_val = new Date(MG.clone(min_val).setDate(min_val.getDate() + 1));\n min_val = new Date(MG.clone(min_val).setDate(min_val.getDate() - 1));\n } else if (typeof min_val === 'number') {\n min_val = min_val - 1;\n max_val = min_val + 1;\n mg_force_xax_count_to_be_two(args);\n }\n }\n\n args.processed['min_' + namespace] = min_val;\n args.processed['max_' + namespace] = max_val;\n\n MG.call_hook('x_axis.process_min_max', args, args.processed.min_x, args.processed.max_x);\n MG.call_hook('y_axis.process_min_max', args, args.processed.min_y, args.processed.max_y);\n}\n\nfunction mg_categorical_group_color_scale(args) {\n if (args.color_accessor !== false) {\n if (args.ygroup_accessor) {\n // add a custom accessor element.\n if (args.color_accessor === null) {\n args.color_accessor = args.y_accessor;\n } else {}\n }\n if (args.color_accessor !== null) {\n new MG.scale_factory(args)\n .namespace('color')\n .categoricalDomainFromData()\n .categoricalColorRange();\n }\n }\n}\n\nfunction mg_add_color_categorical_scale(args, domain, accessor) {\n args.scales.color = d3.scaleOrdinal(d3.schemeCategory20).domain(domain);\n args.scalefns.color = function(d) {\n return args.scales.color(d[accessor]);\n };\n}\n\nfunction mg_get_categorical_domain(data, accessor) {\n return d3.set(data.map(function(d) {\n return d[accessor]; }))\n .values();\n}\n\nfunction mg_get_color_domain(args) {\n var color_domain;\n if (args.color_domain === null) {\n if (args.color_type === 'number') {\n color_domain = d3.extent(args.data[0], function(d) {\n return d[args.color_accessor]; });\n } else if (args.color_type === 'category') {\n color_domain = mg_get_categorical_domain(args.data[0], args.color_accessor);\n\n }\n } else {\n color_domain = args.color_domain;\n }\n return color_domain;\n}\n\nfunction mg_get_color_range(args) {\n var color_range;\n if (args.color_range === null) {\n if (args.color_type === 'number') {\n color_range = ['blue', 'red'];\n } else {\n color_range = null;\n }\n } else {\n color_range = args.color_range;\n }\n return color_range;\n}\n\nfunction processScaleTicks (args, axis) {\n var accessor = args[axis + '_accessor'];\n var scale_ticks = args.scales[axis.toUpperCase()].ticks(args[axis + 'ax_count']);\n var max = args.processed['max_' + axis];\n\n function log10 (val) {\n if (val === 1000) {\n return 3;\n }\n if (val === 1000000) {\n return 7;\n }\n return Math.log(val) / Math.LN10;\n }\n\n if (args[axis + '_scale_type'] === 'log') {\n // get out only whole logs\n scale_ticks = scale_ticks.filter(function (d) {\n return Math.abs(log10(d)) % 1 < 1e-6 || Math.abs(log10(d)) % 1 > 1 - 1e-6;\n });\n }\n\n // filter out fraction ticks if our data is ints and if xmax > number of generated ticks\n var number_of_ticks = scale_ticks.length;\n\n // is our data object all ints?\n var data_is_int = true;\n args.data.forEach(function (d, i) {\n d.forEach(function (d, i) {\n if (d[accessor] % 1 !== 0) {\n data_is_int = false;\n return false;\n }\n });\n });\n\n if (data_is_int && number_of_ticks > max && args.format === 'count') {\n // remove non-integer ticks\n scale_ticks = scale_ticks.filter(function (d) {\n return d % 1 === 0;\n });\n }\n args.processed[axis + '_ticks'] = scale_ticks;\n}\n\nfunction rugPlacement (args, axisArgs) {\n var position = axisArgs.position;\n var ns = axisArgs.namespace;\n var coordinates = {};\n if (position === 'left') {\n coordinates.x1 = mg_get_left(args) + 1;\n coordinates.x2 = mg_get_left(args) + args.rug_buffer_size;\n coordinates.y1 = args.scalefns[ns + 'f'];\n coordinates.y2 = args.scalefns[ns + 'f'];\n }\n if (position === 'right') {\n coordinates.x1 = mg_get_right(args) - 1,\n coordinates.x2 = mg_get_right(args) - args.rug_buffer_size,\n coordinates.y1 = args.scalefns[ns + 'f'];\n coordinates.y2 = args.scalefns[ns + 'f'];\n }\n if (position === 'top') {\n coordinates.x1 = args.scalefns[ns + 'f'];\n coordinates.x2 = args.scalefns[ns + 'f'];\n coordinates.y1 = mg_get_top(args) + 1;\n coordinates.y2 = mg_get_top(args) + args.rug_buffer_size;\n }\n if (position === 'bottom') {\n coordinates.x1 = args.scalefns[ns + 'f'];\n coordinates.x2 = args.scalefns[ns + 'f'];\n coordinates.y1 = mg_get_bottom(args) - 1;\n coordinates.y2 = mg_get_bottom(args) - args.rug_buffer_size;\n }\n return coordinates;\n}\n\nfunction rimPlacement (args, axisArgs) {\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var tick_length = args.processed[ns + '_ticks'].length;\n var ticks = args.processed[ns + '_ticks'];\n var scale = args.scales[ns.toUpperCase()];\n var coordinates = {};\n\n if (position === 'left') {\n coordinates.x1 = mg_get_left(args);\n coordinates.x2 = mg_get_left(args);\n coordinates.y1 = scale(ticks[0]).toFixed(2);\n coordinates.y2 = scale(ticks[tick_length - 1]).toFixed(2);\n }\n if (position === 'right') {\n coordinates.x1 = mg_get_right(args);\n coordinates.x2 = mg_get_right(args);\n coordinates.y1 = scale(ticks[0]).toFixed(2);\n coordinates.y2 = scale(ticks[tick_length - 1]).toFixed(2);\n }\n if (position === 'top') {\n coordinates.x1 = mg_get_left(args);\n coordinates.x2 = mg_get_right(args);\n coordinates.y1 = mg_get_top(args);\n coordinates.y2 = mg_get_top(args);\n }\n if (position === 'bottom') {\n coordinates.x1 = mg_get_left(args);\n coordinates.x2 = mg_get_right(args);\n coordinates.y1 = mg_get_bottom(args);\n coordinates.y2 = mg_get_bottom(args);\n }\n\n if (position === 'left' || position === 'right') {\n if (args.axes_not_compact) {\n coordinates.y1 = mg_get_bottom(args);\n coordinates.y2 = mg_get_top(args);\n } else if (tick_length) {\n coordinates.y1 = scale(ticks[0]).toFixed(2);\n coordinates.y2 = scale(ticks[tick_length - 1]).toFixed(2);\n }\n }\n\n return coordinates;\n}\n\nfunction labelPlacement (args, axisArgs) {\n var position = axisArgs.position;\n var ns = axisArgs.namespace;\n var tickLength = args[ns + 'ax_tick_length'];\n var scale = args.scales[ns.toUpperCase()];\n var coordinates = {};\n\n if (position === 'left') {\n coordinates.x = mg_get_left(args) - tickLength * 3 / 2;\n coordinates.y = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.dx = -3;\n coordinates.dy = '.35em';\n coordinates.textAnchor = 'end';\n coordinates.text = function (d) {\n return mg_compute_yax_format(args)(d);\n };\n }\n if (position === 'right') {\n coordinates.x = mg_get_right(args) + tickLength * 3 / 2;\n coordinates.y = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.dx = 3;\n coordinates.dy = '.35em';\n coordinates.textAnchor = 'start';\n coordinates.text = function (d) {\n return mg_compute_yax_format(args)(d); };\n }\n if (position === 'top') {\n coordinates.x = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.y = (mg_get_top(args) - tickLength * 7 / 3).toFixed(2);\n coordinates.dx = 0;\n coordinates.dy = '0em';\n coordinates.textAnchor = 'middle';\n coordinates.text = function (d) {\n return mg_default_xax_format(args)(d);\n };\n }\n if (position === 'bottom') {\n coordinates.x = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.y = (mg_get_bottom(args) + tickLength * 7 / 3).toFixed(2);\n coordinates.dx = 0;\n coordinates.dy = '.50em';\n coordinates.textAnchor = 'middle';\n coordinates.text = function (d) {\n return mg_default_xax_format(args)(d);\n };\n }\n\n return coordinates;\n}\n\nfunction selectXaxFormat (args) {\n var c = args.chart_type;\n if (!args.processed.xax_format) {\n if (args.xax_format) {\n args.processed.xax_format = args.xax_format;\n } else {\n if (c === 'line' || c === 'point' || c === 'histogram') {\n args.processed.xax_format = mg_default_xax_format(args);\n } else if (c === 'bar') {\n args.processed.xax_format = mg_default_bar_xax_format(args);\n }\n }\n }\n}\n\nfunction secondaryLabels (g, args, axisArgs) {\n if (args.time_series && (args.show_years || args.show_secondary_x_label)) {\n var tf = mg_get_yformat_and_secondary_time_function(args);\n addSecondaryLabelElements(args, axisArgs, g, tf.timeframe, tf.yformat, tf.secondary);\n }\n}\n\nfunction addSecondaryLabelElements (args, axisArgs, g, time_frame, yformat, secondary_function) {\n var years = secondary_function(args.processed.min_x, args.processed.max_x);\n if (years.length === 0) {\n var first_tick = args.scales.X.ticks(args.xax_count)[0];\n years = [first_tick];\n }\n\n var yg = mg_add_g(g, 'mg-year-marker');\n if (time_frame === 'default' && args.show_year_markers) {\n yearMarkerLine(args, axisArgs, yg, years, yformat);\n }\n if (time_frame != 'years') yearMarkerText(args, axisArgs, yg, years, yformat);\n}\n\nfunction yearMarkerLine (args, axisArgs, g, years, yformat) {\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('line')\n .attr('x1', function (d) {\n return args.scales.X(d).toFixed(2); })\n .attr('x2', function (d) {\n return args.scales.X(d).toFixed(2); })\n .attr('y1', mg_get_top(args))\n .attr('y2', mg_get_bottom(args));\n}\n\nfunction yearMarkerText (args, axisArgs, g, years, yformat) {\n var position = axisArgs.position;\n var ns = axisArgs.namespace;\n var scale = args.scales[ns.toUpperCase()];\n var x, y, dy, textAnchor, textFcn;\n var xAxisTextElement = d3.select(args.target)\n .select('.mg-x-axis text').node().getBoundingClientRect();\n\n if (position === 'top') {\n x = function (d, i) {\n return scale(d).toFixed(2); };\n y = (mg_get_top(args) - args.xax_tick_length * 7 / 3) - (xAxisTextElement.height);\n dy = '.50em';\n textAnchor = 'middle';\n textFcn = function (d) {\n return yformat(new Date(d)); };\n }\n if (position === 'bottom') {\n x = function (d, i) {\n return scale(d).toFixed(2); };\n y = (mg_get_bottom(args) + args.xax_tick_length * 7 / 3) + (xAxisTextElement.height * 0.8);\n dy = '.50em';\n textAnchor = 'middle';\n textFcn = function (d) {\n return yformat(new Date(d)); };\n }\n\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('text')\n .attr('x', x)\n .attr('y', y)\n .attr('dy', dy)\n .attr('text-anchor', textAnchor)\n .text(textFcn);\n}\n\nfunction addNumericalLabels (g, args, axisArgs) {\n var ns = axisArgs.namespace;\n var coords = labelPlacement(args, axisArgs);\n var ticks = args.processed[ns + '_ticks'];\n\n var labels = g.selectAll('.mg-yax-labels')\n .data(ticks).enter()\n .append('text')\n .attr('x', coords.x)\n .attr('dx', coords.dx)\n .attr('y', coords.y)\n .attr('dy', coords.dy)\n .attr('text-anchor', coords.textAnchor)\n .text(coords.text);\n\n // move the labels if they overlap\n if (ns == 'x') {\n selectXaxFormat(args);\n if (args.time_series && args.european_clock) {\n labels.append('tspan').classed('mg-european-hours', true).text(function (_d, i) {\n var d = new Date(_d);\n if (i === 0) return d3.timeFormat('%H')(d);\n else return '';\n });\n labels.append('tspan').classed('mg-european-minutes-seconds', true).text(function (_d, i) {\n var d = new Date(_d);\n return ':' + args.processed.xax_format(d);\n });\n } else {\n labels.text(function (d) {\n return args.xax_units + args.processed.xax_format(d);\n });\n }\n secondaryLabels(g, args, axisArgs);\n }\n\n if (mg_elements_are_overlapping(labels)) {\n labels.filter(function (d, i) {\n return (i + 1) % 2 === 0;\n }).remove();\n\n var svg = mg_get_svg_child_of(args.target);\n svg.selectAll('.mg-' + ns + 'ax-ticks').filter(function (d, i) {\n return (i + 1) % 2 === 0; })\n .remove();\n }\n}\n\nfunction addTickLines (g, args, axisArgs) {\n // name\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var scale = args.scales[ns.toUpperCase()];\n\n var ticks = args.processed[ns + '_ticks'];\n var ticksClass = 'mg-' + ns + 'ax-ticks';\n var extendedTicksClass = 'mg-extended-' + ns + 'ax-ticks';\n var extendedTicks = args[ns + '_extended_ticks'];\n var tickLength = args[ns + 'ax_tick_length'];\n\n var x1, x2, y1, y2;\n\n if (position === 'left') {\n x1 = mg_get_left(args);\n x2 = extendedTicks ? mg_get_right(args) : mg_get_left(args) - tickLength;\n y1 = function (d) {\n return scale(d).toFixed(2);\n };\n y2 = function (d) {\n return scale(d).toFixed(2);\n };\n }\n if (position === 'right') {\n x1 = mg_get_right(args);\n x2 = extendedTicks ? mg_get_left(args) : mg_get_right(args) + tickLength;\n y1 = function (d) {\n return scale(d).toFixed(2);\n };\n y2 = function (d) {\n return scale(d).toFixed(2);\n };\n }\n if (position === 'top') {\n x1 = function (d) {\n return scale(d).toFixed(2);\n };\n x2 = function (d) {\n return scale(d).toFixed(2);\n };\n y1 = mg_get_top(args);\n y2 = extendedTicks ? mg_get_bottom(args) : mg_get_top(args) - tickLength;\n }\n if (position === 'bottom') {\n x1 = function (d) {\n return scale(d).toFixed(2);\n };\n x2 = function (d) {\n return scale(d).toFixed(2);\n };\n y1 = mg_get_bottom(args);\n y2 = extendedTicks ? mg_get_top(args) : mg_get_bottom(args) + tickLength;\n }\n\n g.selectAll('.' + ticksClass)\n .data(ticks).enter()\n .append('line')\n .classed(extendedTicksClass, extendedTicks)\n .attr('x1', x1)\n .attr('x2', x2)\n .attr('y1', y1)\n .attr('y2', y2);\n}\n\nfunction initializeAxisRim (g, args, axisArgs) {\n var namespace = axisArgs.namespace;\n var tick_length = args.processed[namespace + '_ticks'].length;\n\n var rim = rimPlacement(args, axisArgs);\n\n if (!args[namespace + '_extended_ticks'] && !args[namespace + '_extended_ticks'] && tick_length) {\n g.append('line')\n .attr('x1', rim.x1)\n .attr('x2', rim.x2)\n .attr('y1', rim.y1)\n .attr('y2', rim.y2);\n }\n}\n\nfunction initializeRug (args, rug_class) {\n var svg = mg_get_svg_child_of(args.target);\n var all_data = mg_flatten_array(args.data);\n var rug = svg.selectAll('line.' + rug_class).data(all_data);\n\n // set the attributes that do not change after initialization, per\n rug.enter().append('svg:line').attr('class', rug_class).attr('opacity', 0.3);\n\n // remove rug elements that are no longer in use\n mg_exit_and_remove(rug);\n\n // set coordinates of new rug elements\n mg_exit_and_remove(rug);\n return rug;\n}\n\nfunction rug (args, axisArgs) {\n 'use strict';\n args.rug_buffer_size = args.chart_type === 'point' ? args.buffer / 2 : args.buffer * 2 / 3;\n\n var rug = initializeRug(args, 'mg-' + axisArgs.namespace + '-rug');\n var rug_positions = rugPlacement(args, axisArgs);\n rug.attr('x1', rug_positions.x1)\n .attr('x2', rug_positions.x2)\n .attr('y1', rug_positions.y1)\n .attr('y2', rug_positions.y2);\n\n mg_add_color_accessor_to_rug(rug, args, 'mg-' + axisArgs.namespace + '-rug-mono');\n}\n\nfunction categoricalLabelPlacement (args, axisArgs, group) {\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var scale = args.scales[ns.toUpperCase()];\n var groupScale = args.scales[(ns + 'group').toUpperCase()];\n var coords = {};\n coords.cat = {};\n coords.group = {};\n // x, y, dy, text-anchor\n\n if (position === 'left') {\n coords.cat.x = mg_get_plot_left(args) - args.buffer;\n coords.cat.y = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = 'end';\n coords.group.x = mg_get_plot_left(args) - args.buffer;\n coords.group.y = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 : 0);\n coords.group.dy = '.35em';\n coords.group.textAnchor = args['rotate_' + ns + '_labels'] ? 'end' : 'end';\n }\n\n if (position === 'right') {\n coords.cat.x = mg_get_plot_right(args) - args.buffer;\n coords.cat.y = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = 'start';\n coords.group.x = mg_get_plot_right(args) - args.buffer;\n coords.group.y = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 : 0);\n coords.group.dy = '.35em';\n coords.group.textAnchor = 'start';\n }\n\n if (position === 'top') {\n coords.cat.x = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.y = mg_get_plot_top(args) + args.buffer;\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n coords.group.x = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 : 0);\n coords.group.y = mg_get_plot_top(args) + args.buffer;\n coords.group.dy = '.35em';\n coords.group.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n }\n\n if (position === 'bottom') {\n coords.cat.x = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.y = mg_get_plot_bottom(args) + args.buffer;\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n coords.group.x = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 - scale.bandwidth() / 2 : 0);\n coords.group.y = mg_get_plot_bottom(args) + args.buffer;\n coords.group.dy = '.35em';\n coords.group.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n }\n\n return coords;\n}\n\nfunction categoricalLabels (args, axisArgs) {\n var ns = axisArgs.namespace;\n var nsClass = 'mg-' + ns + '-axis';\n var scale = args.scales[ns.toUpperCase()];\n var groupScale = args.scales[(ns + 'group').toUpperCase()];\n var groupAccessor = ns + 'group_accessor';\n\n var svg = mg_get_svg_child_of(args.target);\n mg_selectAll_and_remove(svg, '.' + nsClass);\n var g = mg_add_g(svg, nsClass);\n var group_g;\n var groups = groupScale.domain && groupScale.domain()\n ? groupScale.domain()\n : ['1'];\n\n groups.forEach(function (group) {\n // grab group placement stuff.\n var coords = categoricalLabelPlacement(args, axisArgs, group);\n\n group_g = mg_add_g(g, 'mg-group-' + mg_normalize(group));\n if (args[groupAccessor] !== null) {\n var labels = group_g.append('text')\n .classed('mg-barplot-group-label', true)\n .attr('x', coords.group.x)\n .attr('y', coords.group.y)\n .attr('dy', coords.group.dy)\n .attr('text-anchor', coords.group.textAnchor)\n .text(group);\n\n } else {\n var labels = group_g.selectAll('text')\n .data(scale.domain())\n .enter()\n .append('text')\n .attr('x', coords.cat.x)\n .attr('y', coords.cat.y)\n .attr('dy', coords.cat.dy)\n .attr('text-anchor', coords.cat.textAnchor)\n .text(String);\n }\n if (args['rotate_' + ns + '_labels']) {\n rotateLabels(labels, args['rotate_' + ns + '_labels']);\n }\n });\n}\n\nfunction categoricalGuides (args, axisArgs) {\n // for each group\n // for each data point\n\n var ns = axisArgs.namespace;\n var scalef = args.scalefns[ns + 'f'];\n var groupf = args.scalefns[ns + 'groupf'];\n var groupScale = args.scales[(ns + 'group').toUpperCase()];\n var scale = args.scales[ns.toUpperCase()];\n var position = axisArgs.position;\n\n var svg = mg_get_svg_child_of(args.target);\n var alreadyPlotted = [];\n\n var x1, x2, y1, y2;\n var grs = (groupScale.domain && groupScale.domain()) ? groupScale.domain() : [null];\n\n mg_selectAll_and_remove(svg, '.mg-category-guides');\n var g = mg_add_g(svg, 'mg-category-guides');\n\n grs.forEach(function (group) {\n scale.domain().forEach(function (cat) {\n if (position === 'left' || position === 'right') {\n x1 = mg_get_plot_left(args);\n x2 = mg_get_plot_right(args);\n y1 = scale(cat) + groupScale(group) + scale.bandwidth() / 2;\n y2 = scale(cat) + groupScale(group) + scale.bandwidth() / 2;\n }\n\n if (position === 'top' || position === 'bottom') {\n x1 = scale(cat) + groupScale(group) + scale.bandwidth() / 2 * (group === null);\n x2 = scale(cat) + groupScale(group) + scale.bandwidth() / 2 * (group === null);\n y1 = mg_get_plot_bottom(args);\n y2 = mg_get_plot_top(args);\n }\n\n g.append('line')\n .attr('x1', x1)\n .attr('x2', x2)\n .attr('y1', y1)\n .attr('y2', y2)\n .attr('stroke-dasharray', '2,1');\n });\n\n var first = groupScale(group) + scale(scale.domain()[0]) + scale.bandwidth() / 2 * (group === null || (position !== 'top' && position != 'bottom'));\n var last = groupScale(group) + scale(scale.domain()[scale.domain().length - 1]) + scale.bandwidth() / 2 * (group === null || (position !== 'top' && position != 'bottom'));\n\n if (position === 'left' || position === 'right') {\n x11 = mg_get_plot_left(args);\n x21 = mg_get_plot_left(args);\n y11 = first;\n y21 = last;\n\n x12 = mg_get_plot_right(args);\n x22 = mg_get_plot_right(args);\n y12 = first;\n y22 = last;\n }\n\n if (position === 'bottom' || position === 'top') {\n x11 = first;\n x21 = last;\n y11 = mg_get_plot_bottom(args);\n y21 = mg_get_plot_bottom(args);\n\n x12 = first;\n x22 = last;\n y12 = mg_get_plot_top(args);\n y22 = mg_get_plot_top(args);\n }\n\n g.append('line')\n .attr('x1', x11)\n .attr('x2', x21)\n .attr('y1', y11)\n .attr('y2', y21)\n .attr('stroke-dasharray', '2,1');\n\n g.append('line')\n .attr('x1', x12)\n .attr('x2', x22)\n .attr('y1', y12)\n .attr('y2', y22)\n .attr('stroke-dasharray', '2,1');\n });\n}\n\nfunction rotateLabels (labels, rotation_degree) {\n if (rotation_degree) {\n labels.attr('transform', function () {\n var elem = d3.select(this);\n return 'rotate(' + rotation_degree + ' ' + elem.attr('x') + ',' + elem.attr('y') + ')';\n });\n\n }\n}\n\nfunction zeroLine (args, axisArgs) {\n var svg = mg_get_svg_child_of(args.target);\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var scale = args.scales[ns.toUpperCase()];\n var x1, x2, y1, y2;\n if (position === 'left' || position === 'right') {\n x1 = mg_get_plot_left(args);\n x2 = mg_get_plot_right(args);\n y1 = scale(0) + 1;\n y2 = scale(0) + 1;\n }\n if (position === 'bottom' || position === 'top') {\n y1 = mg_get_plot_top(args);\n y2 = mg_get_plot_bottom(args);\n x1 = scale(0) - 1;\n x2 = scale(0) - 1;\n }\n\n svg.append('line')\n .attr('x1', x1)\n .attr('x2', x2)\n .attr('y1', y1)\n .attr('y2', y2)\n .attr('stroke', 'black');\n}\n\nvar mgDrawAxis = {};\n\nmgDrawAxis.categorical = function (args, axisArgs) {\n var ns = axisArgs.namespace;\n\n categoricalLabels(args, axisArgs);\n categoricalGuides(args, axisArgs);\n};\n\nmgDrawAxis.numerical = function (args, axisArgs) {\n var namespace = axisArgs.namespace;\n var axisName = namespace + '_axis';\n var axisClass = 'mg-' + namespace + '-axis';\n var svg = mg_get_svg_child_of(args.target);\n\n mg_selectAll_and_remove(svg, '.' + axisClass);\n\n if (!args[axisName]) {\n return this;\n }\n\n var g = mg_add_g(svg, axisClass);\n\n processScaleTicks(args, namespace);\n initializeAxisRim(g, args, axisArgs);\n addTickLines(g, args, axisArgs);\n addNumericalLabels(g, args, axisArgs);\n\n // add label\n if (args[namespace + '_label']) {\n axisArgs.label(svg.select('.mg-' + namespace + '-axis'), args);\n }\n\n // add rugs\n if (args[namespace + '_rug']) {\n rug(args, axisArgs);\n }\n\n if (args.show_bar_zero) {\n mg_bar_add_zero_line(args);\n }\n\n return this;\n};\n\nfunction axisFactory (args) {\n var axisArgs = {};\n axisArgs.type = 'numerical';\n\n this.namespace = function (ns) {\n // take the ns in the scale, and use it to\n axisArgs.namespace = ns;\n return this;\n };\n\n this.rug = function (tf) {\n axisArgs.rug = tf;\n return this;\n };\n\n this.label = function (tf) {\n axisArgs.label = tf;\n return this;\n };\n\n this.type = function (t) {\n axisArgs.type = t;\n return this;\n };\n\n this.position = function (pos) {\n axisArgs.position = pos;\n return this;\n };\n\n this.zeroLine = function (tf) {\n axisArgs.zeroLine = tf;\n return this;\n };\n\n this.draw = function () {\n mgDrawAxis[axisArgs.type](args, axisArgs);\n return this;\n };\n\n return this;\n\n}\n\nMG.axis_factory = axisFactory;\n\n/* ================================================================================ */\n/* ================================================================================ */\n/* ================================================================================ */\n\nfunction y_rug (args) {\n 'use strict';\n\n if (!args.y_rug) {\n return;\n }\n\n args.rug_buffer_size = args.chart_type === 'point'\n ? args.buffer / 2\n : args.buffer * 2 / 3;\n\n var rug = mg_make_rug(args, 'mg-y-rug');\n\n rug.attr('x1', args.left + 1)\n .attr('x2', args.left + args.rug_buffer_size)\n .attr('y1', args.scalefns.yf)\n .attr('y2', args.scalefns.yf);\n\n mg_add_color_accessor_to_rug(rug, args, 'mg-y-rug-mono');\n}\n\nMG.y_rug = y_rug;\n\nfunction mg_change_y_extents_for_bars (args, my) {\n if (args.chart_type === 'bar') {\n my.min = 0;\n my.max = d3.max(args.data[0], function (d) {\n var trio = [];\n trio.push(d[args.y_accessor]);\n\n if (args.baseline_accessor !== null) {\n trio.push(d[args.baseline_accessor]);\n }\n\n if (args.predictor_accessor !== null) {\n trio.push(d[args.predictor_accessor]);\n }\n\n return Math.max.apply(null, trio);\n });\n }\n return my;\n}\n\nfunction mg_compute_yax_format (args) {\n var yax_format = args.yax_format;\n if (!yax_format) {\n if (args.format === 'count') {\n // increase decimals if we have small values, useful for realtime data\n if (args.processed.max_y < 0.0001) {\n args.decimals = 6;\n } else if (args.processed.max_y < 0.1) {\n args.decimals = 4;\n }\n\n yax_format = function (d) {\n var pf;\n\n if (d < 1.0 && d > -1.0 && d !== 0) {\n // don't scale tiny values\n pf = d3.format(',.' + args.decimals + 'f');\n } else if (d < 1000) {\n pf = d3.format(',.0f');\n } else {\n pf = d3.format(',.2s');\n }\n\n // are we adding units after the value or before?\n if (args.yax_units_append) {\n return pf(d) + args.yax_units;\n } else {\n return args.yax_units + pf(d);\n }\n };\n } else { // percentage\n yax_format = function (d_) {\n var n = d3.format('.0%');\n return n(d_);\n };\n }\n }\n return yax_format;\n}\n\nfunction mg_bar_add_zero_line (args) {\n var svg = mg_get_svg_child_of(args.target);\n var extents = args.scales.X.domain();\n if (0 >= extents[0] && extents[1] >= 0) {\n var r = args.scales.Y.range();\n var g = args.categorical_groups.length\n ? args.scales.YGROUP(args.categorical_groups[args.categorical_groups.length - 1])\n : args.scales.YGROUP();\n\n svg.append('svg:line')\n .attr('x1', args.scales.X(0))\n .attr('x2', args.scales.X(0))\n .attr('y1', r[0] + mg_get_plot_top(args))\n .attr('y2', r[r.length - 1] + g)\n .attr('stroke', 'black')\n .attr('opacity', .2);\n }\n}\n\nfunction set_min_max_y (args) {\n // flatten data\n // remove weird data, if log.\n var data = mg_flatten_array(args.data);\n\n if (args.y_scale_type === 'log') {\n data = data.filter(function (d) {\n return d[args.y_accessor] > 0;\n });\n }\n\n if (args.baselines) {\n data = data.concat(args.baselines);\n }\n\n var extents = d3.extent(data, function (d) {\n return d[args.y_accessor];\n });\n\n var my = {};\n my.min = extents[0];\n my.max = extents[1];\n // the default case is for the y-axis to start at 0, unless we explicitly want it\n // to start at an arbitrary number or from the data's minimum value\n if (my.min >= 0 && !args.min_y && !args.min_y_from_data) {\n my.min = 0;\n }\n\n mg_change_y_extents_for_bars(args, my);\n my.min = (args.min_y !== null) ? args.min_y : my.min;\n\n my.max = (args.max_y !== null) ? args.max_y : (my.max < 0) ? my.max + (my.max - my.max * args.inflator) : my.max * args.inflator;\n\n if (args.y_scale_type !== 'log' && my.min < 0) {\n my.min = my.min - (my.min - my.min * args.inflator);\n }\n\n if (!args.min_y && args.min_y_from_data) {\n var buff = (my.max - my.min) * .01;\n my.min = extents[0] - buff;\n my.max = extents[1] + buff;\n }\n args.processed.min_y = my.min;\n args.processed.max_y = my.max;\n}\n\nfunction mg_y_domain_range (args, scale) {\n scale.domain([args.processed.min_y, args.processed.max_y])\n .range([mg_get_plot_bottom(args), args.top]);\n return scale;\n}\n\nfunction mg_define_y_scales (args) {\n var scale = (mg_is_function(args.y_scale_type))\n ? args.y_scale_type()\n : (args.y_scale_type === 'log')\n ? d3.scaleLog()\n : d3.scaleLinear();\n\n if (args.y_scale_type === 'log') {\n if (args.chart_type === 'histogram') {\n // log histogram plots should start just below 1\n // so that bins with single counts are visible\n args.processed.min_y = 0.2;\n } else {\n if (args.processed.min_y <= 0) {\n args.processed.min_y = 1;\n }\n }\n }\n args.scales.Y = mg_y_domain_range(args, scale);\n args.scales.Y.clamp(args.y_scale_type === 'log');\n\n // used for ticks and such, and designed to be paired with log or linear\n args.scales.Y_axis = mg_y_domain_range(args, d3.scaleLinear());\n}\n\nfunction mg_add_y_label (g, args) {\n if (args.y_label) {\n g.append('text')\n .attr('class', 'label')\n .attr('x', function () {\n return -1 * (mg_get_plot_top(args) +\n ((mg_get_plot_bottom(args)) - (mg_get_plot_top(args))) / 2);\n })\n .attr('y', function () {\n return args.left / 2;\n })\n .attr('dy', '0.4em')\n .attr('text-anchor', 'middle')\n .text(function (d) {\n return args.y_label;\n })\n .attr('transform', function (d) {\n return 'rotate(-90)';\n });\n }\n}\n\nfunction mg_add_y_axis_rim (g, args) {\n var tick_length = args.processed.y_ticks.length;\n if (!args.x_extended_ticks && !args.y_extended_ticks && tick_length) {\n var y1scale, y2scale;\n\n if (args.axes_not_compact && args.chart_type !== 'bar') {\n y1scale = args.height - args.bottom;\n y2scale = args.top;\n } else if (tick_length) {\n y1scale = args.scales.Y(args.processed.y_ticks[0]).toFixed(2);\n y2scale = args.scales.Y(args.processed.y_ticks[tick_length - 1]).toFixed(2);\n } else {\n y1scale = 0;\n y2scale = 0;\n }\n\n g.append('line')\n .attr('x1', args.left)\n .attr('x2', args.left)\n .attr('y1', y1scale)\n .attr('y2', y2scale);\n }\n}\n\nfunction mg_add_y_axis_tick_lines (g, args) {\n g.selectAll('.mg-yax-ticks')\n .data(args.processed.y_ticks).enter()\n .append('line')\n .classed('mg-extended-yax-ticks', args.y_extended_ticks)\n .attr('x1', args.left)\n .attr('x2', function () {\n return (args.y_extended_ticks) ? args.width - args.right : args.left - args.yax_tick_length;\n })\n .attr('y1', function (d) {\n return args.scales.Y(d).toFixed(2);\n })\n .attr('y2', function (d) {\n return args.scales.Y(d).toFixed(2);\n });\n}\n\nfunction mg_add_y_axis_tick_labels (g, args) {\n var yax_format = mg_compute_yax_format(args);\n g.selectAll('.mg-yax-labels')\n .data(args.processed.y_ticks).enter()\n .append('text')\n .attr('x', args.left - args.yax_tick_length * 3 / 2)\n .attr('dx', -3)\n .attr('y', function (d) {\n return args.scales.Y(d).toFixed(2);\n })\n .attr('dy', '.35em')\n .attr('text-anchor', 'end')\n .text(function (d) {\n var o = yax_format(d);\n return o;\n });\n}\n\n// TODO ought to be deprecated, only used by histogram\nfunction y_axis (args) {\n if (!args.processed) {\n args.processed = {};\n }\n\n var svg = mg_get_svg_child_of(args.target);\n MG.call_hook('y_axis.process_min_max', args, args.processed.min_y, args.processed.max_y);\n mg_selectAll_and_remove(svg, '.mg-y-axis');\n\n if (!args.y_axis) {\n return this;\n }\n\n var g = mg_add_g(svg, 'mg-y-axis');\n mg_add_y_label(g, args);\n mg_process_scale_ticks(args, 'y');\n mg_add_y_axis_rim(g, args);\n mg_add_y_axis_tick_lines(g, args);\n mg_add_y_axis_tick_labels(g, args);\n\n if (args.y_rug) {\n y_rug(args);\n }\n\n return this;\n}\n\nMG.y_axis = y_axis;\n\nfunction mg_add_categorical_labels (args) {\n var svg = mg_get_svg_child_of(args.target);\n mg_selectAll_and_remove(svg, '.mg-y-axis');\n var g = mg_add_g(svg, 'mg-y-axis');\n var group_g;(args.categorical_groups.length ? args.categorical_groups : ['1']).forEach(function (group) {\n group_g = mg_add_g(g, 'mg-group-' + mg_normalize(group));\n\n if (args.ygroup_accessor !== null) {\n mg_add_group_label(group_g, group, args);\n } else {\n var labels = mg_add_graphic_labels(group_g, group, args);\n mg_rotate_labels(labels, args.rotate_y_labels);\n }\n });\n}\n\nfunction mg_add_graphic_labels (g, group, args) {\n return g.selectAll('text').data(args.scales.Y.domain()).enter().append('svg:text')\n .attr('x', args.left - args.buffer)\n .attr('y', function (d) {\n return args.scales.YGROUP(group) + args.scales.Y(d) + args.scales.Y.bandwidth() / 2;\n })\n .attr('dy', '.35em')\n .attr('text-anchor', 'end')\n .text(String);\n}\n\nfunction mg_add_group_label (g, group, args) {\n g.append('svg:text')\n .classed('mg-barplot-group-label', true)\n .attr('x', args.left - args.buffer)\n .attr('y', args.scales.YGROUP(group) + args.scales.YGROUP.bandwidth() / 2)\n .attr('dy', '.35em')\n .attr('text-anchor', 'end')\n .text(group);\n}\n\nfunction mg_draw_group_lines (args) {\n var svg = mg_get_svg_child_of(args.target);\n var groups = args.scales.YGROUP.domain();\n var first = groups[0];\n var last = groups[groups.length - 1];\n\n svg.select('.mg-category-guides').selectAll('mg-group-lines')\n .data(groups)\n .enter().append('line')\n .attr('x1', mg_get_plot_left(args))\n .attr('x2', mg_get_plot_left(args))\n .attr('y1', function (d) {\n return args.scales.YGROUP(d);\n })\n .attr('y2', function (d) {\n return args.scales.YGROUP(d) + args.ygroup_height;\n })\n .attr('stroke-width', 1);\n}\n\nfunction mg_y_categorical_show_guides (args) {\n // for each group\n // for each data point\n var svg = mg_get_svg_child_of(args.target);\n var alreadyPlotted = [];\n args.data[0].forEach(function (d) {\n if (alreadyPlotted.indexOf(d[args.y_accessor]) === -1) {\n svg.select('.mg-category-guides').append('line')\n .attr('x1', mg_get_plot_left(args))\n .attr('x2', mg_get_plot_right(args))\n .attr('y1', args.scalefns.yf(d) + args.scalefns.ygroupf(d))\n .attr('y2', args.scalefns.yf(d) + args.scalefns.ygroupf(d))\n .attr('stroke-dasharray', '2,1');\n }\n });\n}\n\nfunction y_axis_categorical (args) {\n if (!args.y_axis) {\n return this;\n }\n\n mg_add_categorical_labels(args);\n // mg_draw_group_scaffold(args);\n if (args.show_bar_zero) mg_bar_add_zero_line(args);\n if (args.ygroup_accessor) mg_draw_group_lines(args);\n if (args.y_categorical_show_guides) mg_y_categorical_show_guides(args);\n return this;\n}\n\nMG.y_axis_categorical = y_axis_categorical;\n\nfunction x_rug(args) {\n 'use strict';\n\n if(!args.x_rug) {\n return;\n }\n\n args.rug_buffer_size = args.chart_type === 'point'\n ? args.buffer / 2\n : args.buffer;\n\n var rug = mg_make_rug(args, 'mg-x-rug');\n\n rug.attr('x1', args.scalefns.xf)\n .attr('x2', args.scalefns.xf)\n .attr('y1', args.height - args.bottom - args.rug_buffer_size)\n .attr('y2', args.height - args.bottom);\n\n mg_add_color_accessor_to_rug(rug, args, 'mg-x-rug-mono');\n}\n\nMG.x_rug = x_rug;\n\nfunction mg_add_processed_object(args) {\n if (!args.processed) {\n args.processed = {};\n }\n}\n\n// TODO ought to be deprecated, only used by histogram\nfunction x_axis(args) {\n 'use strict';\n\n var svg = mg_get_svg_child_of(args.target);\n mg_add_processed_object(args);\n\n mg_select_xax_format(args);\n mg_selectAll_and_remove(svg, '.mg-x-axis');\n\n if (!args.x_axis) {\n return this;\n }\n\n var g = mg_add_g(svg, 'mg-x-axis');\n\n mg_add_x_ticks(g, args);\n mg_add_x_tick_labels(g, args);\n if (args.x_label) { mg_add_x_label(g, args); }\n if (args.x_rug) { x_rug(args); }\n\n return this;\n}\n\nMG.x_axis = x_axis;\n\nfunction x_axis_categorical(args) {\n var svg = mg_get_svg_child_of(args.target);\n var additional_buffer = 0;\n if (args.chart_type === 'bar') {\n additional_buffer = args.buffer + 5;\n }\n\n mg_add_categorical_scale(args, 'X', args.categorical_variables.reverse(), args.left, mg_get_plot_right(args) - additional_buffer);\n mg_add_scale_function(args, 'xf', 'X', 'value');\n mg_selectAll_and_remove(svg, '.mg-x-axis');\n\n var g = mg_add_g(svg, 'mg-x-axis');\n\n if (!args.x_axis) {\n return this;\n }\n\n mg_add_x_axis_categorical_labels(g, args, additional_buffer);\n return this;\n}\n\nfunction mg_add_x_axis_categorical_labels(g, args, additional_buffer) {\n var labels = g.selectAll('text')\n .data(args.categorical_variables)\n .enter()\n .append('text');\n\n labels\n .attr('x', function(d) {\n return args.scales.X(d) + args.scales.X.bandwidth() / 2 + (args.buffer) * args.bar_outer_padding_percentage + (additional_buffer / 2);\n })\n .attr('y', mg_get_plot_bottom(args))\n .attr('dy', '.35em')\n .attr('text-anchor', 'middle')\n .text(String);\n\n if (args.truncate_x_labels) {\n labels.each(function(d, idx) {\n var elem = this, width = args.scales.X.bandwidth();\n truncate_text(elem, d, width);\n });\n }\n mg_rotate_labels(labels, args.rotate_x_labels);\n}\n\nMG.x_axis_categorical = x_axis_categorical;\n\nfunction mg_point_add_color_scale(args) {\n var color_domain, color_range;\n\n if (args.color_accessor !== null) {\n color_domain = mg_get_color_domain(args);\n color_range = mg_get_color_range(args);\n\n if (args.color_type === 'number') {\n args.scales.color = d3.scaleLinear()\n .domain(color_domain)\n .range(color_range)\n .clamp(true);\n } else {\n args.scales.color = args.color_range !== null\n ? d3.scaleOrdinal().range(color_range)\n : (color_domain.length > 10\n ? d3.scaleOrdinal(d3.schemeCategory20)\n : d3.scaleOrdinal(d3.schemeCategory10));\n\n args.scales.color.domain(color_domain);\n }\n mg_add_scale_function(args, 'color', 'color', args.color_accessor);\n }\n}\n\nfunction mg_get_color_domain(args) {\n var color_domain;\n if (args.color_domain === null) {\n if (args.color_type === 'number') {\n color_domain = d3.extent(args.data[0], function(d) {\n return d[args.color_accessor];\n });\n } else if (args.color_type === 'category') {\n color_domain = d3.set(args.data[0]\n .map(function(d) {\n return d[args.color_accessor];\n }))\n .values();\n\n color_domain.sort();\n }\n } else {\n color_domain = args.color_domain;\n }\n return color_domain;\n}\n\nfunction mg_get_color_range(args) {\n var color_range;\n if (args.color_range === null) {\n if (args.color_type === 'number') {\n color_range = ['blue', 'red'];\n } else {\n color_range = null;\n }\n } else {\n color_range = args.color_range;\n }\n return color_range;\n}\n\nfunction mg_point_add_size_scale(args) {\n var min_size, max_size, size_domain, size_range;\n if (args.size_accessor !== null) {\n size_domain = mg_get_size_domain(args);\n size_range = mg_get_size_range(args);\n\n args.scales.size = d3.scaleLinear()\n .domain(size_domain)\n .range(size_range)\n .clamp(true);\n\n mg_add_scale_function(args, 'size', 'size', args.size_accessor);\n }\n}\n\nfunction mg_get_size_domain(args) {\n return (args.size_domain === null)\n ? d3.extent(args.data[0], function(d) { return d[args.size_accessor]; })\n : args.size_domain;\n}\n\nfunction mg_get_size_range(args) {\n var size_range;\n if (args.size_range === null) {\n size_range = [1, 5];\n } else {\n size_range = args.size_range;\n }\n return size_range;\n}\n\nfunction mg_add_x_label(g, args) {\n if (args.x_label) {\n g.append('text')\n .attr('class', 'label')\n .attr('x', function() {\n return mg_get_plot_left(args) + (mg_get_plot_right(args) - mg_get_plot_left(args)) / 2;\n })\n .attr('dx', args.x_label_nudge_x != null ? args.x_label_nudge_x : 0)\n .attr('y', function() {\n var xAxisTextElement = d3.select(args.target)\n .select('.mg-x-axis text').node().getBoundingClientRect();\n return mg_get_bottom(args) + args.xax_tick_length * (7 / 3) + xAxisTextElement.height * 0.8 + 10;\n })\n .attr('dy', '.5em')\n .attr('text-anchor', 'middle')\n .text(function(d) {\n return args.x_label;\n });\n }\n}\n\nfunction mg_default_bar_xax_format(args) {\n return function(d) {\n if (d < 1.0 && d > -1.0 && d !== 0) {\n // don't scale tiny values\n return args.xax_units + d.toFixed(args.decimals);\n } else {\n var pf = d3.format(',.0f');\n return args.xax_units + pf(d);\n }\n };\n}\n\nfunction mg_get_time_frame(diff) {\n // diff should be (max_x - min_x) / 1000, in other words, the difference in seconds.\n var time_frame;\n if (mg_milisec_diff(diff)) {\n time_frame = 'millis';\n } else if (mg_sec_diff(diff)) {\n time_frame = 'seconds';\n } else if (mg_day_diff(diff)) {\n time_frame = 'less-than-a-day';\n } else if (mg_four_days(diff)) {\n time_frame = 'four-days';\n } else if (mg_many_days(diff)) { // a handful of months?\n time_frame = 'many-days';\n } else if (mg_many_months(diff)) {\n time_frame = 'many-months';\n } else if (mg_years(diff)) {\n time_frame = 'years';\n } else {\n time_frame = 'default';\n }\n return time_frame;\n}\n\nfunction mg_milisec_diff(diff) {\n return diff < 10;\n}\n\nfunction mg_sec_diff(diff) {\n return diff < 60;\n}\n\nfunction mg_day_diff(diff) {\n return diff / (60 * 60) <= 24;\n}\n\nfunction mg_four_days(diff) {\n return diff / (60 * 60) <= 24 * 4;\n}\n\nfunction mg_many_days(diff) {\n return diff / (60 * 60 * 24) <= 93;\n}\n\nfunction mg_many_months(diff) {\n return diff / (60 * 60 * 24) < 365 * 2;\n}\n\nfunction mg_years(diff) {\n return diff / (60 * 60 * 24) >= 365 * 2;\n}\n\nfunction mg_get_time_format(utc, diff) {\n var main_time_format;\n if (mg_milisec_diff(diff)) {\n main_time_format = MG.time_format(utc, '%M:%S.%L');\n } else if (mg_sec_diff(diff)) {\n main_time_format = MG.time_format(utc, '%M:%S');\n } else if (mg_day_diff(diff)) {\n main_time_format = MG.time_format(utc, '%H:%M');\n } else if (mg_four_days(diff)) {\n main_time_format = MG.time_format(utc, '%H:%M');\n } else if (mg_many_days(diff)) {\n main_time_format = MG.time_format(utc, '%b %d');\n } else if (mg_many_months(diff)) {\n main_time_format = MG.time_format(utc, '%b');\n } else {\n main_time_format = MG.time_format(utc, '%Y');\n }\n return main_time_format;\n}\n\nfunction mg_process_time_format(args) {\n var diff;\n var main_time_format;\n var time_frame;\n\n if (args.time_series) {\n diff = (args.processed.max_x - args.processed.min_x) / 1000;\n time_frame = mg_get_time_frame(diff);\n main_time_format = mg_get_time_format(args.utc_time, diff);\n }\n\n args.processed.main_x_time_format = main_time_format;\n args.processed.x_time_frame = time_frame;\n}\n\nfunction mg_default_xax_format(args) {\n if (args.xax_format) {\n return args.xax_format;\n }\n\n var data = args.processed.original_data || args.data;\n var flattened = mg_flatten_array(data)[0];\n var test_point_x = flattened[args.processed.original_x_accessor || args.x_accessor];\n if (test_point_x === undefined) {\n test_point_x = flattened;\n }\n\n return function(d) {\n mg_process_time_format(args);\n\n if (mg_is_date(test_point_x)) {\n return args.processed.main_x_time_format(new Date(d));\n } else if (typeof test_point_x === 'number') {\n var is_float = d % 1 !== 0;\n var pf;\n\n if (is_float) {\n pf = d3.format(',.' + args.decimals + 'f');\n } else if (d < 1000) {\n pf = d3.format(',.0f');\n } else {\n pf = d3.format(',.2s');\n }\n return args.xax_units + pf(d);\n } else {\n return args.xax_units + d;\n }\n };\n}\n\nfunction mg_add_x_ticks(g, args) {\n mg_process_scale_ticks(args, 'x');\n mg_add_x_axis_rim(args, g);\n mg_add_x_axis_tick_lines(args, g);\n}\n\nfunction mg_add_x_axis_rim(args, g) {\n var tick_length = args.processed.x_ticks.length;\n var last_i = args.scales.X.ticks(args.xax_count).length - 1;\n\n if (!args.x_extended_ticks) {\n g.append('line')\n .attr('x1', function() {\n if (args.xax_count === 0) {\n return mg_get_plot_left(args);\n } else if (args.axes_not_compact && args.chart_type !== 'bar') {\n return args.left;\n } else {\n return (args.scales.X(args.scales.X.ticks(args.xax_count)[0])).toFixed(2);\n }\n })\n .attr('x2', function() {\n if (args.xax_count === 0 || (args.axes_not_compact && args.chart_type !== 'bar')) {\n return mg_get_right(args);\n } else {\n return args.scales.X(args.scales.X.ticks(args.xax_count)[last_i]).toFixed(2);\n }\n })\n .attr('y1', args.height - args.bottom)\n .attr('y2', args.height - args.bottom);\n }\n}\n\nfunction mg_add_x_axis_tick_lines(args, g) {\n g.selectAll('.mg-xax-ticks')\n .data(args.processed.x_ticks).enter()\n .append('line')\n .attr('x1', function(d) {\n return args.scales.X(d).toFixed(2); })\n .attr('x2', function(d) {\n return args.scales.X(d).toFixed(2); })\n .attr('y1', args.height - args.bottom)\n .attr('y2', function() {\n return (args.x_extended_ticks) ? args.top : args.height - args.bottom + args.xax_tick_length;\n })\n .attr('class', function() {\n if (args.x_extended_ticks) {\n return 'mg-extended-xax-ticks';\n }\n })\n .classed('mg-xax-ticks', true);\n}\n\nfunction mg_add_x_tick_labels(g, args) {\n mg_add_primary_x_axis_label(args, g);\n mg_add_secondary_x_axis_label(args, g);\n}\n\nfunction mg_add_primary_x_axis_label(args, g) {\n var labels = g.selectAll('.mg-xax-labels')\n .data(args.processed.x_ticks).enter()\n .append('text')\n .attr('x', function(d) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('y', (args.height - args.bottom + args.xax_tick_length * 7 / 3).toFixed(2))\n .attr('dy', '.50em')\n .attr('text-anchor', 'middle');\n\n if (args.time_series && args.european_clock) {\n labels.append('tspan').classed('mg-european-hours', true).text(function(_d, i) {\n var d = new Date(_d);\n if (i === 0) return d3.timeFormat('%H')(d);\n else return '';\n });\n labels.append('tspan').classed('mg-european-minutes-seconds', true).text(function(_d, i) {\n var d = new Date(_d);\n return ':' + args.processed.xax_format(d);\n });\n } else {\n labels.text(function(d) {\n return args.xax_units + args.processed.xax_format(d);\n });\n }\n\n // CHECK TO SEE IF OVERLAP for labels. If so,\n // remove half of them. This is a dirty hack.\n // We will need to figure out a more principled way of doing this.\n if (mg_elements_are_overlapping(labels)) {\n labels.filter(function(d, i) {\n return (i + 1) % 2 === 0;\n }).remove();\n\n var svg = mg_get_svg_child_of(args.target);\n svg.selectAll('.mg-xax-ticks')\n .filter(function(d, i) {\n return (i + 1) % 2 === 0;\n })\n .remove();\n }\n}\n\nfunction mg_add_secondary_x_axis_label(args, g) {\n if (args.time_series && (args.show_years || args.show_secondary_x_label)) {\n var tf = mg_get_yformat_and_secondary_time_function(args);\n mg_add_secondary_x_axis_elements(args, g, tf.timeframe, tf.yformat, tf.secondary);\n }\n}\n\nfunction mg_get_yformat_and_secondary_time_function(args) {\n var tf = {};\n tf.timeframe = args.processed.x_time_frame;\n switch (tf.timeframe) {\n case 'millis':\n case 'seconds':\n tf.secondary = d3.timeDays;\n if (args.european_clock) tf.yformat = MG.time_format(args.utc_time, '%b %d');\n else tf.yformat = MG.time_format(args.utc_time, '%I %p');\n break;\n case 'less-than-a-day':\n tf.secondary = d3.timeDays;\n tf.yformat = MG.time_format(args.utc_time, '%b %d');\n break;\n case 'four-days':\n tf.secondary = d3.timeDays;\n tf.yformat = MG.time_format(args.utc_time, '%b %d');\n break;\n case 'many-days':\n tf.secondary = d3.timeYears;\n tf.yformat = MG.time_format(args.utc_time, '%Y');\n break;\n case 'many-months':\n tf.secondary = d3.timeYears;\n tf.yformat = MG.time_format(args.utc_time, '%Y');\n break;\n default:\n tf.secondary = d3.timeYears;\n tf.yformat = MG.time_format(args.utc_time, '%Y');\n }\n return tf;\n}\n\nfunction mg_add_secondary_x_axis_elements(args, g, time_frame, yformat, secondary_function) {\n var years = secondary_function(args.processed.min_x, args.processed.max_x);\n if (years.length === 0) {\n var first_tick = args.scales.X.ticks(args.xax_count)[0];\n years = [first_tick];\n }\n\n var yg = mg_add_g(g, 'mg-year-marker');\n if (time_frame === 'default' && args.show_year_markers) {\n mg_add_year_marker_line(args, yg, years, yformat);\n }\n if (time_frame != 'years') mg_add_year_marker_text(args, yg, years, yformat);\n}\n\nfunction mg_add_year_marker_line(args, g, years, yformat) {\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('line')\n .attr('x1', function(d) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('x2', function(d) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('y1', mg_get_top(args))\n .attr('y2', mg_get_bottom(args));\n}\n\nfunction mg_add_year_marker_text(args, g, years, yformat) {\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('text')\n .attr('x', function(d, i) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('y', function() {\n var xAxisTextElement = d3.select(args.target)\n .select('.mg-x-axis text').node().getBoundingClientRect();\n return (mg_get_bottom(args) + args.xax_tick_length * 7 / 3) + (xAxisTextElement.height * 0.8);\n })\n .attr('dy', '.50em')\n .attr('text-anchor', 'middle')\n .text(function(d) {\n return yformat(new Date(d));\n });\n}\n\nfunction mg_min_max_x_for_nonbars(mx, args, data) {\n var extent_x = d3.extent(data, function(d) {\n return d[args.x_accessor];\n });\n mx.min = extent_x[0];\n mx.max = extent_x[1];\n}\n\nfunction mg_min_max_x_for_bars(mx, args, data) {\n mx.min = d3.min(data, function(d) {\n var trio = [\n d[args.x_accessor],\n (d[args.baseline_accessor]) ? d[args.baseline_accessor] : 0,\n (d[args.predictor_accessor]) ? d[args.predictor_accessor] : 0\n ];\n return Math.min.apply(null, trio);\n });\n\n if (mx.min > 0) mx.min = 0;\n\n mx.max = d3.max(data, function(d) {\n var trio = [\n d[args.x_accessor],\n (d[args.baseline_accessor]) ? d[args.baseline_accessor] : 0,\n (d[args.predictor_accessor]) ? d[args.predictor_accessor] : 0\n ];\n return Math.max.apply(null, trio);\n });\n return mx;\n}\n\nfunction mg_min_max_x_for_dates(mx) {\n var yesterday = MG.clone(mx.min).setDate(mx.min.getDate() - 1);\n var tomorrow = MG.clone(mx.min).setDate(mx.min.getDate() + 1);\n mx.min = yesterday;\n mx.max = tomorrow;\n}\n\nfunction mg_min_max_x_for_numbers(mx) {\n // TODO do we want to rewrite this?\n mx.min = mx.min - 1;\n mx.max = mx.max + 1;\n}\n\nfunction mg_min_max_x_for_strings(mx) {\n // TODO shouldn't be allowing strings here to be coerced into numbers\n mx.min = Number(mx.min) - 1;\n mx.max = Number(mx.max) + 1;\n}\n\nfunction mg_force_xax_count_to_be_two(args) {\n args.xax_count = 2;\n}\n\nfunction mg_sort_through_data_type_and_set_x_min_max_accordingly(mx, args, data) {\n if (args.chart_type === 'line' || args.chart_type === 'point' || args.chart_type === 'histogram') {\n mg_min_max_x_for_nonbars(mx, args, data);\n\n } else if (args.chart_type === 'bar') {\n mg_min_max_x_for_bars(mx, args, data);\n }\n // if data set is of length 1, expand the range so that we can build the x-axis\n if (mx.min === mx.max && !(args.min_x && args.max_x)) {\n if (mg_is_date(mx.min)) {\n mg_min_max_x_for_dates(mx);\n } else if (typeof min_x === 'number') {\n mg_min_max_x_for_numbers(mx);\n } else if (typeof min_x === 'string') {\n mg_min_max_x_for_strings(mx);\n }\n // force xax_count to be 2\n mg_force_xax_count_to_be_two(args);\n }\n}\n\nfunction mg_select_xax_format(args) {\n var c = args.chart_type;\n if (!args.processed.xax_format) {\n if (args.xax_format) {\n args.processed.xax_format = args.xax_format;\n } else {\n if (c === 'line' || c === 'point' || c === 'histogram') {\n args.processed.xax_format = mg_default_xax_format(args);\n } else if (c === 'bar') {\n args.processed.xax_format = mg_default_bar_xax_format(args);\n }\n }\n }\n}\n\nfunction mg_merge_args_with_defaults(args) {\n var defaults = {\n target: null,\n title: null,\n description: null\n };\n\n if (!args) {\n args = {};\n }\n\n if (!args.processed) {\n args.processed = {};\n }\n\n args = merge_with_defaults(args, defaults);\n return args;\n}\n\nfunction mg_is_time_series(args) {\n var first_elem = mg_flatten_array(args.processed.original_data || args.data)[0];\n args.time_series = mg_is_date(first_elem[args.processed.original_x_accessor || args.x_accessor]);\n}\n\nfunction mg_init_compute_width(args) {\n var svg_width = args.width;\n if (args.full_width) {\n svg_width = get_width(args.target);\n }\n if (args.x_axis_type === 'categorical' && svg_width === null) {\n svg_width = mg_categorical_calculate_height(args, 'x');\n }\n\n args.width = svg_width;\n}\n\nfunction mg_init_compute_height(args) {\n var svg_height = args.height;\n if (args.full_height) {\n svg_height = get_height(args.target);\n }\n if (args.y_axis_type === 'categorical' && svg_height === null) {\n svg_height = mg_categorical_calculate_height(args, 'y');\n }\n\n args.height = svg_height;\n}\n\nfunction mg_remove_svg_if_chart_type_has_changed(svg, args) {\n if ((!svg.selectAll('.mg-main-line').empty() && args.chart_type !== 'line') ||\n (!svg.selectAll('.mg-points').empty() && args.chart_type !== 'point') ||\n (!svg.selectAll('.mg-histogram').empty() && args.chart_type !== 'histogram') ||\n (!svg.selectAll('.mg-barplot').empty() && args.chart_type !== 'bar')\n ) {\n svg.remove();\n }\n}\n\nfunction mg_add_svg_if_it_doesnt_exist(svg, args) {\n if (mg_get_svg_child_of(args.target).empty()) {\n svg = d3.select(args.target)\n .append('svg')\n .classed('linked', args.linked)\n .attr('width', args.width)\n .attr('height', args.height);\n }\n return svg;\n}\n\nfunction mg_add_clip_path_for_plot_area(svg, args) {\n svg.selectAll('.mg-clip-path').remove();\n svg.append('defs')\n .attr('class', 'mg-clip-path')\n .append('clipPath')\n .attr('id', 'mg-plot-window-' + mg_target_ref(args.target))\n .append('svg:rect')\n .attr('x', mg_get_left(args))\n .attr('y', mg_get_top(args))\n .attr('width', args.width - args.left - args.right - args.buffer)\n .attr('height', args.height - args.top - args.bottom - args.buffer + 1);\n}\n\nfunction mg_adjust_width_and_height_if_changed(svg, args) {\n if (args.width !== Number(svg.attr('width'))) {\n svg.attr('width', args.width);\n }\n if (args.height !== Number(svg.attr('height'))) {\n svg.attr('height', args.height);\n }\n}\n\nfunction mg_set_viewbox_for_scaling(svg, args) {\n // we need to reconsider how we handle automatic scaling\n svg.attr('viewBox', '0 0 ' + args.width + ' ' + args.height);\n if (args.full_width || args.full_height) {\n svg.attr('preserveAspectRatio', 'xMinYMin meet');\n }\n}\n\nfunction mg_remove_missing_classes_and_text(svg) {\n // remove missing class\n svg.classed('mg-missing', false);\n\n // remove missing text\n svg.selectAll('.mg-missing-text').remove();\n svg.selectAll('.mg-missing-pane').remove();\n}\n\nfunction mg_remove_outdated_lines(svg, args) {\n // if we're updating an existing chart and we have fewer lines than\n // before, remove the outdated lines, e.g. if we had 3 lines, and we're calling\n // data_graphic() on the same target with 2 lines, remove the 3rd line\n\n var i = 0;\n\n if (svg.selectAll('.mg-main-line').nodes().length >= args.data.length) {\n // now, the thing is we can't just remove, say, line3 if we have a custom\n // line-color map, instead, see which are the lines to be removed, and delete those\n if (args.custom_line_color_map.length > 0) {\n var array_full_series = function(len) {\n var arr = new Array(len);\n for (var i = 0; i < arr.length; i++) { arr[i] = i + 1; }\n return arr;\n };\n\n // get an array of lines ids to remove\n var lines_to_remove = arr_diff(\n array_full_series(args.max_data_size),\n args.custom_line_color_map);\n\n for (i = 0; i < lines_to_remove.length; i++) {\n svg.selectAll('.mg-main-line.mg-line' + lines_to_remove[i] + '-color')\n .remove();\n }\n } else {\n // if we don't have a custom line-color map, just remove the lines from the end\n var num_of_new = args.data.length;\n var num_of_existing = (svg.selectAll('.mg-main-line').nodes()) ? svg.selectAll('.mg-main-line').nodes().length : 0;\n\n for (i = num_of_existing; i > num_of_new; i--) {\n svg.selectAll('.mg-main-line.mg-line' + i + '-color')\n .remove();\n }\n }\n }\n}\n\nfunction mg_raise_container_error(container, args) {\n if (container.empty()) {\n console.warn('The specified target element \"' + args.target + '\" could not be found in the page. The chart will not be rendered.');\n return;\n }\n}\n\nfunction categoricalInitialization(args, ns) {\n var which = ns === 'x' ? args.width : args.height;\n mg_categorical_count_number_of_groups(args, ns);\n mg_categorical_count_number_of_lanes(args, ns);\n mg_categorical_calculate_group_length(args, ns, which);\n if (which) mg_categorical_calculate_bar_thickness(args, ns);\n}\n\n\nfunction mg_categorical_count_number_of_groups(args, ns) {\n var accessor_string = ns + 'group_accessor';\n var accessor = args[accessor_string];\n args.categorical_groups = [];\n if (accessor) {\n var data = args.data[0];\n args.categorical_groups = d3.set(data.map(function(d) {\n return d[accessor] })).values();\n }\n}\n\nfunction mg_categorical_count_number_of_lanes(args, ns) {\n var accessor_string = ns + 'group_accessor';\n var groupAccessor = args[accessor_string];\n\n args.total_bars = args.data[0].length;\n if (groupAccessor) {\n var group_bars = count_array_elements(pluck(args.data[0], groupAccessor));\n group_bars = d3.max(Object.keys(group_bars).map(function(d) {\n return group_bars[d] }));\n args.bars_per_group = group_bars;\n } else {\n args.bars_per_group = args.data[0].length;\n }\n}\n\nfunction mg_categorical_calculate_group_length(args, ns, which) {\n var groupHeight = ns + 'group_height';\n if (which) {\n var gh = ns === 'y' ?\n (args.height - args.top - args.bottom - args.buffer * 2) / (args.categorical_groups.length || 1) :\n (args.width - args.left - args.right - args.buffer * 2) / (args.categorical_groups.length || 1);\n\n args[groupHeight] = gh;\n } else {\n var step = (1 + args[ns + '_padding_percentage']) * args.bar_thickness;\n args[groupHeight] = args.bars_per_group * step + args[ns + '_outer_padding_percentage'] * 2 * step; //args.bar_thickness + (((args.bars_per_group-1) * args.bar_thickness) * (args.bar_padding_percentage + args.bar_outer_padding_percentage*2));\n }\n}\n\nfunction mg_categorical_calculate_bar_thickness(args, ns) {\n // take one group height.\n var step = (args[ns + 'group_height']) / (args.bars_per_group + args[ns + '_outer_padding_percentage']);\n args.bar_thickness = step - (step * args[ns + '_padding_percentage']);\n}\n\nfunction mg_categorical_calculate_height(args, ns) {\n var groupContribution = (args[ns + 'group_height']) * (args.categorical_groups.length || 1);\n\n var marginContribution = ns === 'y'\n ? args.top + args.bottom + args.buffer * 2\n : args.left + args.right + args.buffer * 2;\n\n return groupContribution + marginContribution +\n (args.categorical_groups.length * args[ns + 'group_height'] * (args[ns + 'group_padding_percentage'] + args[ns + 'group_outer_padding_percentage']));\n}\n\nfunction mg_barchart_extrapolate_group_and_thickness_from_height(args) {\n // we need to set args.bar_thickness, group_height\n}\n\nfunction init(args) {\n 'use strict';\n args = arguments[0];\n args = mg_merge_args_with_defaults(args);\n // If you pass in a dom element for args.target, the expectation\n // of a string elsewhere will break.\n var container = d3.select(args.target);\n mg_raise_container_error(container, args);\n\n var svg = container.selectAll('svg');\n\n // some things that will need to be calculated if we have a categorical axis.\n if (args.y_axis_type === 'categorical') { categoricalInitialization(args, 'y'); }\n if (args.x_axis_type === 'categorical') { categoricalInitialization(args, 'x'); }\n\n mg_is_time_series(args);\n mg_init_compute_width(args);\n mg_init_compute_height(args);\n\n mg_remove_svg_if_chart_type_has_changed(svg, args);\n svg = mg_add_svg_if_it_doesnt_exist(svg, args);\n\n mg_add_clip_path_for_plot_area(svg, args);\n mg_adjust_width_and_height_if_changed(svg, args);\n mg_set_viewbox_for_scaling(svg, args);\n mg_remove_missing_classes_and_text(svg);\n chart_title(args);\n mg_remove_outdated_lines(svg, args);\n\n return this;\n}\n\nMG.init = init;\n\nfunction mg_return_label(d) {\n return d.label;\n}\n\nfunction mg_remove_existing_markers(svg) {\n svg.selectAll('.mg-markers').remove();\n svg.selectAll('.mg-baselines').remove();\n}\n\nfunction mg_in_range(args) {\n return function(d) {\n return (args.scales.X(d[args.x_accessor]) >= mg_get_plot_left(args)) && (args.scales.X(d[args.x_accessor]) <= mg_get_plot_right(args));\n };\n}\n\nfunction mg_x_position(args) {\n return function(d) {\n return args.scales.X(d[args.x_accessor]);\n };\n}\n\nfunction mg_x_position_fixed(args) {\n var _mg_x_pos = mg_x_position(args);\n return function(d) {\n return _mg_x_pos(d).toFixed(2);\n };\n}\n\nfunction mg_y_position_fixed(args) {\n var _mg_y_pos = args.scales.Y;\n return function(d) {\n return _mg_y_pos(d.value).toFixed(2);\n };\n}\n\nfunction mg_place_annotations(checker, class_name, args, svg, line_fcn, text_fcn) {\n var g;\n if (checker) {\n g = svg.append('g').attr('class', class_name);\n line_fcn(g, args);\n text_fcn(g, args);\n }\n}\n\nfunction mg_place_markers(args, svg) {\n mg_place_annotations(args.markers, 'mg-markers', args, svg, mg_place_marker_lines, mg_place_marker_text);\n}\n\nfunction mg_place_baselines(args, svg) {\n mg_place_annotations(args.baselines, 'mg-baselines', args, svg, mg_place_baseline_lines, mg_place_baseline_text);\n}\n\nfunction mg_place_marker_lines(gm, args) {\n var x_pos_fixed = mg_x_position_fixed(args);\n gm.selectAll('.mg-markers')\n .data(args.markers.filter(mg_in_range(args)))\n .enter()\n .append('line')\n .attr('x1', x_pos_fixed)\n .attr('x2', x_pos_fixed)\n .attr('y1', args.top)\n .attr('y2', mg_get_plot_bottom(args))\n .attr('class', function(d) {\n return d.lineclass;\n })\n .attr('stroke-dasharray', '3,1');\n}\n\nfunction mg_place_marker_text(gm, args) {\n gm.selectAll('.mg-markers')\n .data(args.markers.filter(mg_in_range(args)))\n .enter()\n .append('text')\n .attr('class', function(d) {\n return d.textclass || ''; })\n .classed('mg-marker-text', true)\n .attr('x', mg_x_position(args))\n .attr('y', args.x_axis_position === 'bottom' ? mg_get_top(args) * 0.95 : mg_get_bottom(args) + args.buffer)\n .attr('text-anchor', 'middle')\n .text(mg_return_label)\n .each(function(d) {\n if (d.click) {\n d3.select(this).style('cursor', 'pointer')\n .on('click', d.click);\n }\n });\n\n mg_prevent_horizontal_overlap(gm.selectAll('.mg-marker-text').nodes(), args);\n}\n\nfunction mg_place_baseline_lines(gb, args) {\n var y_pos = mg_y_position_fixed(args);\n gb.selectAll('.mg-baselines')\n .data(args.baselines)\n .enter().append('line')\n .attr('x1', mg_get_plot_left(args))\n .attr('x2', mg_get_plot_right(args))\n .attr('y1', y_pos)\n .attr('y2', y_pos);\n}\n\nfunction mg_place_baseline_text(gb, args) {\n var y_pos = mg_y_position_fixed(args);\n gb.selectAll('.mg-baselines')\n .data(args.baselines)\n .enter().append('text')\n .attr('x', mg_get_plot_right(args))\n .attr('y', y_pos)\n .attr('dy', -3)\n .attr('text-anchor', 'end')\n .text(mg_return_label);\n}\n\nfunction markers(args) {\n 'use strict';\n\n var svg = mg_get_svg_child_of(args.target);\n mg_remove_existing_markers(svg);\n mg_place_markers(args, svg);\n mg_place_baselines(args, svg);\n return this;\n}\n\nMG.markers = markers;\n\nfunction mg_clear_mouseover_container(svg) {\n svg.selectAll('.mg-active-datapoint-container').selectAll('*').remove();\n}\n\nfunction mg_setup_mouseover_container(svg, args) {\n svg.select('.mg-active-datapoint').remove();\n var text_anchor = args.mouseover_align === 'right'\n ? 'end'\n : (args.mouseover_align === 'left'\n ? 'start'\n : 'middle');\n\n var mouseover_x = (args.mouseover_align === 'right')\n ? mg_get_plot_right(args)\n : (args.mouseover_align === 'left'\n ? mg_get_plot_left(args)\n : (args.width - args.left - args.right) / 2 + args.left);\n\n var active_datapoint = svg.select('.mg-active-datapoint-container')\n .append('text')\n .attr('class', 'mg-active-datapoint')\n .attr('xml:space', 'preserve')\n .attr('text-anchor', text_anchor);\n\n // set the rollover text's position; if we have markers on two lines,\n // nudge up the rollover text a bit\n var active_datapoint_y_nudge = 0.75;\n\n var y_position = (args.x_axis_position === 'bottom')\n ? mg_get_top(args) * active_datapoint_y_nudge\n : mg_get_bottom(args) + args.buffer * 3;\n\n if (args.markers) {\n var yPos;\n svg.selectAll('.mg-marker-text')\n .each(function() {\n if (!yPos) {\n yPos = d3.select(this).attr('y');\n } else if (yPos !== d3.select(this).attr('y')) {\n active_datapoint_y_nudge = 0.56;\n }\n });\n }\n\n active_datapoint\n .attr('transform', 'translate(' + mouseover_x + ',' + (y_position) + ')');\n}\n\nfunction mg_mouseover_tspan(svg, text) {\n var tspan = '';\n var cl = null;\n if (arguments.length === 3) cl = arguments[2];\n tspan = svg.append('tspan').text(text);\n if (cl !== null) tspan.classed(cl, true);\n this.tspan = tspan;\n\n this.bold = function() {\n this.tspan.attr('font-weight', 'bold');\n return this;\n };\n\n this.font_size = function(pts) {\n this.tspan.attr('font-size', pts);\n return this;\n }\n\n this.x = function(x) {\n this.tspan.attr('x', x);\n return this;\n };\n this.y = function(y) {\n this.tspan.attr('y', y);\n return this;\n };\n this.elem = function() {\n return this.tspan;\n };\n return this;\n}\n\nfunction mg_reset_text_container(svg) {\n var textContainer = svg.select('.mg-active-datapoint');\n textContainer\n .selectAll('*')\n .remove();\n return textContainer;\n}\n\nfunction mg_mouseover_row(row_number, container, rargs) {\n var lineHeight = 1.1;\n this.rargs = rargs;\n\n var rrr = container.append('tspan')\n .attr('x', 0)\n .attr('y', (row_number * lineHeight) + 'em');\n\n this.text = function(text) {\n return mg_mouseover_tspan(rrr, text);\n }\n return this;\n}\n\nfunction mg_mouseover_text(args, rargs) {\n var lineHeight = 1.1;\n this.row_number = 0;\n this.rargs = rargs;\n mg_setup_mouseover_container(rargs.svg, args);\n\n this.text_container = mg_reset_text_container(rargs.svg);\n\n this.mouseover_row = function(rargs) {\n var that = this;\n var rrr = mg_mouseover_row(that.row_number, that.text_container, rargs);\n that.row_number += 1;\n return rrr;\n }\n\n return this;\n}\n\nfunction MG_WindowResizeTracker() {\n var targets = [];\n\n var Observer;\n if (typeof MutationObserver !== \"undefined\") {\n Observer = MutationObserver;\n } else if (typeof WebKitMutationObserver !== \"undefined\") {\n Observer = WebKitMutationObserver;\n }\n\n function window_listener() {\n targets.forEach(function(target) {\n var svg = d3.select(target).select('svg');\n\n // skip if svg is not visible\n if (!svg.empty() && (svg.node().parentNode.offsetWidth > 0 || svg.node().parentNode.offsetHeight > 0)) {\n var aspect = svg.attr('width') !== 0 ? (svg.attr('height') / svg.attr('width')) : 0;\n\n var newWidth = get_width(target);\n\n svg.attr('width', newWidth);\n svg.attr('height', aspect * newWidth);\n }\n });\n }\n\n function remove_target(target) {\n var index = targets.indexOf(target);\n if (index !== -1) {\n targets.splice(index, 1);\n }\n\n if (targets.length === 0) {\n window.removeEventListener('resize', window_listener, true);\n }\n }\n\n return {\n add_target: function(target) {\n if (targets.length === 0) {\n window.addEventListener('resize', window_listener, true);\n }\n\n if (targets.indexOf(target) === -1) {\n targets.push(target);\n\n if (Observer) {\n var observer = new Observer(function(mutations) {\n var targetNode = d3.select(target).node();\n\n if (!targetNode || mutations.some(\n function(mutation) {\n for (var i = 0; i < mutation.removedNodes.length; i++) {\n if (mutation.removedNodes[i] === targetNode) {\n return true;\n }\n }\n })) {\n observer.disconnect();\n remove_target(target);\n }\n });\n\n observer.observe(d3.select(target).node().parentNode, { childList: true });\n }\n }\n }\n };\n}\n\nvar mg_window_resize_tracker = new MG_WindowResizeTracker();\n\nfunction mg_window_listeners(args) {\n mg_if_aspect_ratio_resize_svg(args);\n}\n\nfunction mg_if_aspect_ratio_resize_svg(args) {\n // have we asked the svg to fill a div, if so resize with div\n if (args.full_width || args.full_height) {\n mg_window_resize_tracker.add_target(args.target);\n }\n}\n\nif (mg_jquery_exists()) {\n /*!\n * Bootstrap v3.3.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n /*!\n * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=c3834cc5b59ef727da53)\n * Config saved to config.json and https://gist.github.com/c3834cc5b59ef727da53\n */\n\n /* ========================================================================\n * Bootstrap: dropdown.js v3.3.1\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n +function ($) {\n 'use strict';\n\n if(typeof $().dropdown == 'function')\n return true;\n\n // DROPDOWN CLASS DEFINITION\n // =========================\n\n var backdrop = '.dropdown-backdrop';\n var toggle = '[data-toggle=\"dropdown\"]';\n var Dropdown = function (element) {\n $(element).on('click.bs.dropdown', this.toggle);\n };\n\n Dropdown.VERSION = '3.3.1';\n\n Dropdown.prototype.toggle = function (e) {\n var $this = $(this);\n\n if ($this.is('.disabled, :disabled')) return;\n\n var $parent = getParent($this);\n var isActive = $parent.hasClass('open');\n\n clearMenus();\n\n if (!isActive) {\n if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n // if mobile we use a backdrop because click events don't delegate\n $('').insertAfter($(this)).on('click', clearMenus);\n }\n\n var relatedTarget = { relatedTarget: this };\n $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget));\n\n if (e.isDefaultPrevented()) return;\n\n $this\n .trigger('focus')\n .attr('aria-expanded', 'true');\n\n $parent\n .toggleClass('open')\n .trigger('shown.bs.dropdown', relatedTarget);\n }\n\n return false;\n };\n\n Dropdown.prototype.keydown = function (e) {\n if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return;\n\n var $this = $(this);\n\n e.preventDefault();\n e.stopPropagation();\n\n if ($this.is('.disabled, :disabled')) return;\n\n var $parent = getParent($this);\n var isActive = $parent.hasClass('open');\n\n if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {\n if (e.which == 27) $parent.find(toggle).trigger('focus');\n return $this.trigger('click');\n }\n\n var desc = ' li:not(.divider):visible a';\n var $items = $parent.find('[role=\"menu\"]' + desc + ', [role=\"listbox\"]' + desc);\n\n if (!$items.length) return;\n\n var index = $items.index(e.target);\n\n if (e.which == 38 && index > 0) index--; // up\n if (e.which == 40 && index < $items.length - 1) index++; // down\n if (!~index) index = 0;\n\n $items.eq(index).trigger('focus');\n };\n\n function clearMenus(e) {\n if (e && e.which === 3) return;\n $(backdrop).remove();\n $(toggle).each(function () {\n var $this = $(this);\n var $parent = getParent($this);\n var relatedTarget = { relatedTarget: this };\n\n if (!$parent.hasClass('open')) return;\n\n $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget));\n\n if (e.isDefaultPrevented()) return;\n\n $this.attr('aria-expanded', 'false');\n $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget);\n });\n }\n\n function getParent($this) {\n var selector = $this.attr('data-target');\n\n if (!selector) {\n selector = $this.attr('href');\n selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, ''); // strip for ie7\n }\n\n var $parent = selector && $(selector);\n\n return $parent && $parent.length ? $parent : $this.parent();\n }\n\n\n // DROPDOWN PLUGIN DEFINITION\n // ==========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data('bs.dropdown');\n\n if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)));\n if (typeof option == 'string') data[option].call($this);\n });\n }\n\n var old = $.fn.dropdown;\n\n $.fn.dropdown = Plugin;\n $.fn.dropdown.Constructor = Dropdown;\n\n\n // DROPDOWN NO CONFLICT\n // ====================\n\n $.fn.dropdown.noConflict = function () {\n $.fn.dropdown = old;\n return this;\n };\n\n\n // APPLY TO STANDARD DROPDOWN ELEMENTS\n // ===================================\n\n $(document)\n .on('click.bs.dropdown.data-api', clearMenus)\n .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation(); })\n .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n .on('keydown.bs.dropdown.data-api', '[role=\"menu\"]', Dropdown.prototype.keydown)\n .on('keydown.bs.dropdown.data-api', '[role=\"listbox\"]', Dropdown.prototype.keydown);\n\n }(jQuery);\n}\n\nMG.button_layout = function(target) {\n 'use strict';\n this.target = target;\n this.feature_set = {};\n this.public_name = {};\n this.sorters = {};\n this.manual = [];\n this.manual_map = {};\n this.manual_callback = {};\n\n this._strip_punctuation = function(s) {\n var punctuationless = s.replace(/[^a-zA-Z0-9 _]+/g, '');\n var finalString = punctuationless.replace(/ +?/g, '');\n return finalString;\n };\n\n this.data = function(data) {\n this._data = data;\n return this;\n };\n\n this.manual_button = function(feature, feature_set, callback) {\n this.feature_set[feature] = feature_set;\n this.manual_map[this._strip_punctuation(feature)] = feature;\n this.manual_callback[feature] = callback; // the default is going to be the first feature.\n return this;\n };\n\n this.button = function(feature) {\n if (arguments.length > 1) {\n this.public_name[feature] = arguments[1];\n }\n\n if (arguments.length > 2) {\n this.sorters[feature] = arguments[2];\n }\n\n this.feature_set[feature] = [];\n return this;\n };\n\n this.callback = function(callback) {\n this._callback = callback;\n return this;\n };\n\n this.display = function() {\n var callback = this._callback;\n var manual_callback = this.manual_callback;\n var manual_map = this.manual_map;\n\n var d, f, features, feat;\n features = Object.keys(this.feature_set);\n\n var mapDtoF = function(f) {\n return d[f]; };\n\n var i;\n\n // build out this.feature_set with this.data\n for (i = 0; i < this._data.length; i++) {\n d = this._data[i];\n f = features.map(mapDtoF);\n for (var j = 0; j < features.length; j++) {\n feat = features[j];\n if (this.feature_set[feat].indexOf(f[j]) === -1) {\n this.feature_set[feat].push(f[j]);\n }\n }\n }\n\n for (feat in this.feature_set) {\n if (this.sorters.hasOwnProperty(feat)) {\n this.feature_set[feat].sort(this.sorters[feat]);\n }\n }\n\n $(this.target).empty();\n\n $(this.target).append(\"\");\n\n var dropdownLiAClick = function() {\n var k = $(this).data('key');\n var feature = $(this).data('feature');\n var manual_feature;\n $('.' + feature + '-btns button.btn span.title').html(k);\n if (!manual_map.hasOwnProperty(feature)) {\n callback(feature, k);\n } else {\n manual_feature = manual_map[feature];\n manual_callback[manual_feature](k);\n }\n\n return false;\n };\n\n for (var feature in this.feature_set) {\n features = this.feature_set[feature];\n $(this.target + ' div.segments').append(\n '' + // This never changes.\n '' +\n '' +\n (!this.manual_callback.hasOwnProperty(feature) ? '- All
' : \"\") +\n (!this.manual_callback.hasOwnProperty(feature) ? '' : \"\") +\n '
' + '');\n\n for (i = 0; i < features.length; i++) {\n if (features[i] !== 'all' && features[i] !== undefined) { // strange bug with undefined being added to manual buttons.\n $(this.target + ' div.' + this._strip_punctuation(feature) + '-btns ul.dropdown-menu').append(\n '- ' + features[i] + '
'\n );\n }\n }\n\n $('.' + this._strip_punctuation(feature) + '-btns .dropdown-menu li a').on('click', dropdownLiAClick);\n }\n\n return this;\n };\n\n return this;\n};\n\n(function() {\n 'use strict';\n\n function mg_line_color_text(elem, d, args) {\n elem.classed('mg-hover-line' + d.line_id + '-color', args.colors === null)\n .attr('fill', args.colors === null ? '' : args.colors[d.line_id - 1]);\n }\n\n function mg_line_graph_generators(args, plot, svg) {\n mg_add_line_generator(args, plot);\n mg_add_area_generator(args, plot);\n mg_add_flat_line_generator(args, plot);\n mg_add_confidence_band_generator(args, plot, svg);\n }\n\n function mg_add_confidence_band_generator(args, plot, svg) {\n plot.existing_band = svg.selectAll('.mg-confidence-band').nodes();\n if (args.show_confidence_band) {\n plot.confidence_area = d3.area()\n .defined(plot.line.defined())\n .x(args.scalefns.xf)\n .y0(function(d) {\n var l = args.show_confidence_band[0];\n if (d[l] != undefined) {\n return args.scales.Y(d[l]);\n } else {\n return args.scales.Y(d[args.y_accessor]);\n }\n })\n .y1(function(d) {\n var u = args.show_confidence_band[1];\n if (d[u] != undefined) {\n return args.scales.Y(d[u]);\n } else {\n return args.scales.Y(d[args.y_accessor]);\n }\n })\n .curve(args.interpolate);\n }\n }\n\n function mg_add_area_generator(args, plot) {\n plot.area = d3.area()\n .defined(plot.line.defined())\n .x(args.scalefns.xf)\n .y0(args.scales.Y.range()[0])\n .y1(args.scalefns.yf)\n .curve(args.interpolate);\n }\n\n function mg_add_flat_line_generator(args, plot) {\n plot.flat_line = d3.line()\n .defined(function(d) {\n return (d['_missing'] === undefined || d['_missing'] !== true) && d[args.y_accessor] !== null;\n })\n .x(args.scalefns.xf)\n .y(function() {\n return args.scales.Y(plot.data_median); })\n .curve(args.interpolate);\n }\n\n function mg_add_line_generator(args, plot) {\n plot.line = d3.line()\n .x(args.scalefns.xf)\n .y(args.scalefns.yf)\n .curve(args.interpolate);\n\n // if missing_is_zero is not set, then hide data points that fall in missing\n // data ranges or that have been explicitly identified as missing in the\n // data source.\n if (!args.missing_is_zero) {\n // a line is defined if the _missing attrib is not set to true\n // and the y-accessor is not null\n plot.line = plot.line.defined(function(d) {\n return (d['_missing'] === undefined || d['_missing'] !== true) && d[args.y_accessor] !== null;\n });\n }\n }\n\n function mg_add_confidence_band(args, plot, svg, which_line) {\n if (args.show_confidence_band) {\n var confidenceBand;\n if (svg.select('.mg-confidence-band-' + which_line).empty()) {\n svg.append('path')\n .attr('class', 'mg-confidence-band mg-confidence-band-' + which_line)\n }\n\n // transition this line's confidence band\n confidenceBand = svg.select('.mg-confidence-band-' + which_line);\n\n confidenceBand\n .transition()\n .duration(function() {\n return (args.transition_on_update) ? 1000 : 0;\n })\n .attr('d', plot.confidence_area(args.data[which_line - 1]))\n .attr('clip-path', 'url(#mg-plot-window-' + mg_target_ref(args.target) + ')')\n }\n }\n\n function mg_add_area(args, plot, svg, which_line, line_id) {\n var areas = svg.selectAll('.mg-main-area.mg-area' + line_id);\n if (plot.display_area) {\n // if area already exists, transition it\n if (!areas.empty()) {\n svg.node().appendChild(areas.node());\n\n areas.transition()\n .duration(plot.update_transition_duration)\n .attr('d', plot.area(args.data[which_line]))\n .attr('clip-path', 'url(#mg-plot-window-' + mg_target_ref(args.target) + ')');\n } else { // otherwise, add the area\n svg.append('path')\n .classed('mg-main-area', true)\n .classed('mg-area' + line_id, true)\n .classed('mg-area' + line_id + '-color', args.colors === null)\n .attr('d', plot.area(args.data[which_line]))\n .attr('fill', args.colors === null ? '' : args.colors[line_id - 1])\n .attr('clip-path', 'url(#mg-plot-window-' + mg_target_ref(args.target) + ')');\n }\n } else if (!areas.empty()) {\n areas.remove();\n }\n }\n\n function mg_default_color_for_path(this_path, line_id) {\n this_path.classed('mg-line' + (line_id) + '-color', true);\n }\n\n function mg_color_line(args, this_path, which_line, line_id) {\n if (args.colors) {\n // for now, if args.colors is not an array, then keep moving as if nothing happened.\n // if args.colors is not long enough, default to the usual line_id color.\n if (args.colors.constructor === Array) {\n this_path.attr('stroke', args.colors[which_line]);\n if (args.colors.length < which_line + 1) {\n // Go with default coloring.\n // this_path.classed('mg-line' + (line_id) + '-color', true);\n mg_default_color_for_path(this_path, line_id);\n }\n } else {\n // this_path.classed('mg-line' + (line_id) + '-color', true);\n mg_default_color_for_path(this_path, line_id);\n }\n } else {\n // this is the typical workflow\n // this_path.classed('mg-line' + (line_id) + '-color', true);\n mg_default_color_for_path(this_path, line_id);\n }\n }\n\n function mg_add_line_element(args, plot, this_path, which_line) {\n if (args.animate_on_load) {\n plot.data_median = d3.median(args.data[which_line], function(d) {\n return d[args.y_accessor]; });\n this_path.attr('d', plot.flat_line(args.data[which_line]))\n .transition()\n .duration(1000)\n .attr('d', plot.line(args.data[which_line]))\n .attr('clip-path', 'url(#mg-plot-window-' + mg_target_ref(args.target) + ')');\n } else { // or just add the line\n this_path.attr('d', plot.line(args.data[which_line]))\n .attr('clip-path', 'url(#mg-plot-window-' + mg_target_ref(args.target) + ')');\n }\n }\n\n function mg_add_line(args, plot, svg, existing_line, which_line, line_id) {\n if (!existing_line.empty()) {\n svg.node().appendChild(existing_line.node());\n\n var lineTransition = existing_line.transition()\n .duration(plot.update_transition_duration);\n\n if (!plot.display_area && args.transition_on_update && !args.missing_is_hidden) {\n lineTransition.attrTween('d', path_tween(plot.line(args.data[which_line]), 4));\n } else {\n lineTransition.attr('d', plot.line(args.data[which_line]));\n }\n } else { // otherwise...\n // if we're animating on load, animate the line from its median value\n var this_path = svg.append('path')\n .attr('class', 'mg-main-line mg-line' + line_id);\n\n mg_color_line(args, this_path, which_line, line_id);\n mg_add_line_element(args, plot, this_path, which_line);\n }\n }\n\n function mg_add_legend_element(args, plot, which_line, line_id) {\n var this_legend;\n if (args.legend) {\n if (is_array(args.legend)) {\n this_legend = args.legend[which_line];\n } else if (is_function(args.legend)) {\n this_legend = args.legend(args.data[which_line]);\n }\n\n if (args.legend_target) {\n if (args.colors && args.colors.constructor === Array) {\n plot.legend_text = \"— \" +\n this_legend + ' ' + plot.legend_text;\n } else {\n plot.legend_text = \"— \" +\n this_legend + ' ' + plot.legend_text;\n }\n } else {\n var anchor_point, anchor_orientation, dx;\n if (args.y_axis_position === 'left') {\n anchor_point = args.data[which_line][args.data[which_line].length - 1];\n anchor_orientation = 'start';\n dx = args.buffer;\n } else {\n anchor_point = args.data[which_line][0];\n anchor_orientation = 'end';\n dx = -args.buffer;\n }\n var legend_text = plot.legend_group.append('svg:text')\n .attr('x', args.scalefns.xf(anchor_point))\n .attr('dx', dx)\n .attr('y', args.scalefns.yf(anchor_point))\n .attr('dy', '.35em')\n .attr('font-size', 10)\n .attr('text-anchor', anchor_orientation)\n .attr('font-weight', '300')\n .text(this_legend);\n\n if (args.colors && args.colors.constructor === Array) {\n if (args.colors.length < which_line + 1) {\n legend_text.classed('mg-line' + (line_id) + '-legend-color', true);\n } else {\n legend_text.attr('fill', args.colors[which_line]);\n }\n } else {\n legend_text.classed('mg-line' + (line_id) + '-legend-color', true);\n }\n\n mg_prevent_vertical_overlap(plot.legend_group.selectAll('.mg-line-legend text').nodes(), args);\n }\n }\n }\n\n function mg_plot_legend_if_legend_target(target, legend) {\n if (target) {\n d3.select(target).html(legend);\n }\n }\n\n function mg_add_legend_group(args, plot, svg) {\n if (args.legend) plot.legend_group = mg_add_g(svg, 'mg-line-legend');\n }\n\n function mg_remove_existing_line_rollover_elements(svg) {\n // remove the old rollovers if they already exist\n mg_selectAll_and_remove(svg, '.mg-rollover-rect');\n mg_selectAll_and_remove(svg, '.mg-voronoi');\n\n // remove the old rollover text and circle if they already exist\n mg_selectAll_and_remove(svg, '.mg-active-datapoint');\n mg_selectAll_and_remove(svg, '.mg-line-rollover-circle');\n //mg_selectAll_and_remove(svg, '.mg-active-datapoint-container');\n }\n\n function mg_add_rollover_circle(args, svg) {\n // append circle\n var circle = svg.selectAll('.mg-line-rollover-circle')\n .data(args.data)\n .enter().append('circle')\n .attr('cx', 0)\n .attr('cy', 0)\n .attr('r', 0);\n\n if (args.colors && args.colors.constructor === Array) {\n circle\n .attr('class', function(d) {\n return 'mg-line' + d.line_id;\n })\n .attr('fill', function(d, i) {\n return args.colors[i];\n })\n .attr('stroke', function(d, i) {\n return args.colors[i];\n });\n } else {\n circle.attr('class', function(d, i) {\n return [\n 'mg-line' + d.line_id,\n 'mg-line' + d.line_id + '-color',\n 'mg-area' + d.line_id + '-color'\n ].join(' ');\n });\n }\n circle.classed('mg-line-rollover-circle', true);\n }\n\n function mg_set_unique_line_id_for_each_series(args) {\n // update our data by setting a unique line id for each series\n // increment from 1... unless we have a custom increment series\n var line_id = 1;\n for (var i = 0; i < args.data.length; i++) {\n for (var j = 0; j < args.data[i].length; j++) {\n // Index is saved as original line id for the legend values\n args.data[i][j].index = line_id;\n // if custom line-color map is set, use that instead of line_id (For colors)\n if (args.custom_line_color_map.length > 0) {\n args.data[i][j].line_id = args.custom_line_color_map[i];\n } else {\n args.data[i][j].line_id = line_id;\n }\n }\n line_id++;\n }\n }\n\n function mg_nest_data_for_voronoi(args) {\n return d3.merge(args.data);\n }\n\n function mg_line_class_string(args) {\n return function(d) {\n var class_string;\n\n if (args.linked) {\n var v = d[args.x_accessor];\n var formatter = MG.time_format(args.utc_time, args.linked_format);\n\n // only format when x-axis is date\n var id = (typeof v === 'number') ? (d.line_id - 1) : formatter(v);\n class_string = 'roll_' + id + ' mg-line' + d.line_id;\n\n if (args.color === null) {\n class_string += ' mg-line' + d.line_id + '-color';\n }\n return class_string;\n\n } else {\n class_string = 'mg-line' + d.line_id;\n if (args.color === null) class_string += ' mg-line' + d.line_id + '-color';\n return class_string;\n }\n };\n }\n\n function mg_add_voronoi_rollover(args, svg, rollover_on, rollover_off, rollover_move) {\n var voronoi = d3.voronoi()\n .x(function(d) {\n return args.scales.X(d[args.x_accessor]).toFixed(2); })\n .y(function(d) {\n return args.scales.Y(d[args.y_accessor]).toFixed(2); })\n .extent([\n [args.buffer, args.buffer + args.title_y_position],\n [args.width - args.buffer, args.height - args.buffer]\n ]);\n\n var g = mg_add_g(svg, 'mg-voronoi');\n g.selectAll('path')\n .data(voronoi.polygons(mg_nest_data_for_voronoi(args)))\n .enter()\n .append('path')\n .filter(function(d) {\n return d !== undefined && d.length > 0; })\n .attr('d', function(d) {\n return d == null ? null : 'M' + d.join('L') + 'Z'; })\n .datum(function(d) {\n return d == null ? null : d.data; }) // because of d3.voronoi, reassign d\n .attr('class', mg_line_class_string(args))\n .on('mouseover', rollover_on)\n .on('mouseout', rollover_off)\n .on('mousemove', rollover_move);\n\n mg_configure_voronoi_rollover(args, svg);\n }\n\n function nest_data_for_aggregate_rollover(args) {\n var data_nested = d3.nest()\n .key(function(d) {\n return d[args.x_accessor]; })\n .entries(d3.merge(args.data));\n data_nested.forEach(function(entry) {\n var datum = entry.values[0];\n entry.key = datum[args.x_accessor];\n });\n\n if (args.x_sort) {\n return data_nested.sort(function(a, b) {\n return new Date(a.key) - new Date(b.key); });\n } else {\n return data_nested;\n }\n }\n\n function mg_add_aggregate_rollover(args, svg, rollover_on, rollover_off, rollover_move) {\n // Undo the keys getting coerced to strings, by setting the keys from the values\n // This is necessary for when we have X axis keys that are things like\n var data_nested = nest_data_for_aggregate_rollover(args);\n\n var xf = data_nested.map(function(di) {\n return args.scales.X(di.key);\n });\n\n var g = svg.append('g')\n .attr('class', 'mg-rollover-rect');\n\n g.selectAll('.mg-rollover-rects')\n .data(data_nested).enter()\n .append('rect')\n .attr('x', function(d, i) {\n if (xf.length === 1) return mg_get_plot_left(args);\n else if (i === 0) return xf[i].toFixed(2);\n else return ((xf[i - 1] + xf[i]) / 2).toFixed(2);\n })\n .attr('y', args.top)\n .attr('width', function(d, i) {\n if (xf.length === 1) return mg_get_plot_right(args);\n else if (i === 0) return ((xf[i + 1] - xf[i]) / 2).toFixed(2);\n else if (i === xf.length - 1) return ((xf[i] - xf[i - 1]) / 2).toFixed(2);\n else return ((xf[i + 1] - xf[i - 1]) / 2).toFixed(2);\n })\n .attr('class', function(d) {\n var line_classes = d.values.map(function(datum) {\n var lc = mg_line_class(datum.line_id);\n if (args.colors === null) lc += ' ' + mg_line_color_class(datum.line_id);\n return lc;\n }).join(' ');\n if (args.linked && d.values.length > 0) {\n line_classes += ' ' + mg_rollover_id_class(mg_rollover_format_id(d.values[0], 0, args));\n }\n\n return line_classes;\n })\n .attr('height', args.height - args.bottom - args.top - args.buffer)\n .attr('opacity', 0)\n .on('mouseover', rollover_on)\n .on('mouseout', rollover_off)\n .on('mousemove', rollover_move);\n\n mg_configure_aggregate_rollover(args, svg);\n }\n\n function mg_configure_singleton_rollover(args, svg) {\n svg.select('.mg-rollover-rect rect')\n .on('mouseover')(args.data[0][0], 0);\n }\n\n function mg_configure_voronoi_rollover(args, svg) {\n for (var i = 0; i < args.data.length; i++) {\n var j = i + 1;\n\n if (args.custom_line_color_map.length > 0 &&\n args.custom_line_color_map[i] !== undefined) {\n j = args.custom_line_color_map[i];\n }\n\n if (args.data[i].length === 1 && !svg.selectAll('.mg-voronoi .mg-line' + j).empty()) {\n svg.selectAll('.mg-voronoi .mg-line' + j)\n .on('mouseover')(args.data[i][0], 0);\n\n svg.selectAll('.mg-voronoi .mg-line' + j)\n .on('mouseout')(args.data[i][0], 0);\n }\n }\n }\n\n function mg_line_class(line_id) {\n return 'mg-line' + line_id;\n }\n\n function mg_line_color_class(line_id) {\n return 'mg-line' + line_id + '-color';\n }\n\n function mg_rollover_id_class(id) {\n return 'roll_' + id;\n }\n\n function mg_rollover_format_id(d, i, args) {\n var v = d[args.x_accessor];\n var formatter = MG.time_format(args.utc_time, args.linked_format);\n // only format when x-axis is date\n var id = (typeof v === 'number') ? i : formatter(v);\n return id;\n }\n\n function mg_add_single_line_rollover(args, svg, rollover_on, rollover_off, rollover_move) {\n // set to 1 unless we have a custom increment series\n var line_id = 1;\n if (args.custom_line_color_map.length > 0) {\n line_id = args.custom_line_color_map[0];\n }\n\n var g = svg.append('g')\n .attr('class', 'mg-rollover-rect');\n\n var xf = args.data[0].map(args.scalefns.xf);\n\n g.selectAll('.mg-rollover-rects')\n .data(args.data[0]).enter()\n .append('rect')\n .attr('class', function(d, i) {\n var cl = mg_line_color_class(line_id) + ' ' + mg_line_class(d.line_id);\n if (args.linked) cl += cl + ' ' + mg_rollover_id_class(mg_rollover_format_id(d, i, args));\n return cl;\n })\n .attr('x', function(d, i) {\n // if data set is of length 1\n if (xf.length === 1) return mg_get_plot_left(args);\n else if (i === 0) return xf[i].toFixed(2);\n else return ((xf[i - 1] + xf[i]) / 2).toFixed(2);\n })\n .attr('y', function(d, i) {\n return (args.data.length > 1) ? args.scalefns.yf(d) - 6 // multi-line chart sensitivity\n : args.top;\n })\n .attr('width', function(d, i) {\n // if data set is of length 1\n if (xf.length === 1) return mg_get_plot_right(args);\n else if (i === 0) return ((xf[i + 1] - xf[i]) / 2).toFixed(2);\n else if (i === xf.length - 1) return ((xf[i] - xf[i - 1]) / 2).toFixed(2);\n else return ((xf[i + 1] - xf[i - 1]) / 2).toFixed(2);\n })\n .attr('height', function(d, i) {\n return (args.data.length > 1) ? 12 // multi-line chart sensitivity\n : args.height - args.bottom - args.top - args.buffer;\n })\n .attr('opacity', 0)\n .on('mouseover', rollover_on)\n .on('mouseout', rollover_off)\n .on('mousemove', rollover_move);\n\n if (mg_is_singleton(args)) {\n mg_configure_singleton_rollover(args, svg);\n }\n }\n\n function mg_configure_aggregate_rollover(args, svg) {\n var rect = svg.selectAll('.mg-rollover-rect rect');\n var rect_first = rect.nodes()[0][0] || rect.nodes()[0];\n if (args.data.filter(function(d) { return d.length === 1; }).length > 0) {\n rect.on('mouseover')(rect_first.__data__, 0);\n }\n }\n\n function mg_is_standard_multiline(args) {\n return args.data.length > 1 && !args.aggregate_rollover;\n }\n\n function mg_is_aggregated_rollover(args) {\n return args.data.length > 1 && args.aggregate_rollover;\n }\n\n function mg_is_singleton(args) {\n return args.data.length === 1 && args.data[0].length === 1;\n }\n\n function mg_draw_all_line_elements(args, plot, svg) {\n mg_remove_dangling_bands(plot, svg);\n\n for (var i = args.data.length - 1; i >= 0; i--) {\n var this_data = args.data[i];\n\n // passing the data for the current line\n MG.call_hook('line.before_each_series', [this_data, args]);\n\n // override increment if we have a custom increment series\n var line_id = i + 1;\n if (args.custom_line_color_map.length > 0) {\n line_id = args.custom_line_color_map[i];\n }\n\n args.data[i].line_id = line_id;\n\n if (this_data.length === 0) {\n continue;\n }\n var existing_line = svg.select('path.mg-main-line.mg-line' + (line_id));\n\n mg_add_confidence_band(args, plot, svg, line_id);\n mg_add_area(args, plot, svg, i, line_id);\n mg_add_line(args, plot, svg, existing_line, i, line_id);\n mg_add_legend_element(args, plot, i, line_id);\n\n // passing the data for the current line\n MG.call_hook('line.after_each_series', [this_data, existing_line, args]);\n }\n }\n\n function mg_remove_dangling_bands(plot, svg) {\n if (plot.existing_band[0] && plot.existing_band[0].length > svg.selectAll('.mg-main-line').node().length) {\n svg.selectAll('.mg-confidence-band').remove();\n }\n }\n\n function mg_line_main_plot(args) {\n var plot = {};\n var svg = mg_get_svg_child_of(args.target);\n\n // remove any old legends if they exist\n mg_selectAll_and_remove(svg, '.mg-line-legend');\n mg_add_legend_group(args, plot, svg);\n\n plot.data_median = 0;\n plot.update_transition_duration = (args.transition_on_update) ? 1000 : 0;\n plot.display_area = args.area && !args.use_data_y_min && args.data.length <= 1 && args.aggregate_rollover === false;\n plot.legend_text = '';\n mg_line_graph_generators(args, plot, svg);\n plot.existing_band = svg.selectAll('.mg-confidence-band').nodes();\n\n // should we continue with the default line render? A `line.all_series` hook should return false to prevent the default.\n var continueWithDefault = MG.call_hook('line.before_all_series', [args]);\n if (continueWithDefault !== false) {\n mg_draw_all_line_elements(args, plot, svg);\n }\n\n mg_plot_legend_if_legend_target(args.legend_target, plot.legend_text);\n }\n\n function mg_line_rollover_setup(args, graph) {\n var svg = mg_get_svg_child_of(args.target);\n\n if (svg.selectAll('.mg-active-datapoint-container').nodes().length === 0) {\n mg_add_g(svg, 'mg-active-datapoint-container');\n }\n\n mg_remove_existing_line_rollover_elements(svg);\n mg_add_rollover_circle(args, svg);\n mg_set_unique_line_id_for_each_series(args);\n\n if (mg_is_standard_multiline(args)) {\n mg_add_voronoi_rollover(args, svg, graph.rolloverOn(args), graph.rolloverOff(args), graph.rolloverMove(args));\n } else if (mg_is_aggregated_rollover(args)) {\n mg_add_aggregate_rollover(args, svg, graph.rolloverOn(args), graph.rolloverOff(args), graph.rolloverMove(args));\n } else {\n mg_add_single_line_rollover(args, svg, graph.rolloverOn(args), graph.rolloverOff(args), graph.rolloverMove(args));\n }\n }\n\n function mg_update_rollover_circle(args, svg, d) {\n if (args.aggregate_rollover && args.data.length > 1) {\n // hide the circles in case a non-contiguous series is present\n svg.selectAll('circle.mg-line-rollover-circle')\n .style('opacity', 0);\n\n d.values.forEach(function(datum) {\n if (mg_data_in_plot_bounds(datum, args)) mg_update_aggregate_rollover_circle(args, svg, datum);\n });\n } else if ((args.missing_is_hidden && d['_missing']) || d[args.y_accessor] === null) {\n // disable rollovers for hidden parts of the line\n // recall that hidden parts are missing data ranges and possibly also\n // data points that have been explicitly identified as missing\n return;\n } else {\n // show circle on mouse-overed rect\n if (mg_data_in_plot_bounds(d, args)) {\n mg_update_generic_rollover_circle(args, svg, d);\n }\n }\n }\n\n function mg_update_aggregate_rollover_circle(args, svg, datum) {\n svg.select('circle.mg-line-rollover-circle.mg-line' + datum.line_id)\n .attr('cx', args.scales.X(datum[args.x_accessor]).toFixed(2))\n .attr('cy', args.scales.Y(datum[args.y_accessor]).toFixed(2))\n .attr('r', args.point_size)\n .style('opacity', 1);\n }\n\n function mg_update_generic_rollover_circle(args, svg, d) {\n svg.selectAll('circle.mg-line-rollover-circle.mg-line' + d.line_id)\n .classed('mg-line-rollover-circle', true)\n .attr('cx', function() {\n return args.scales.X(d[args.x_accessor]).toFixed(2);\n })\n .attr('cy', function() {\n return args.scales.Y(d[args.y_accessor]).toFixed(2);\n })\n .attr('r', args.point_size)\n .style('opacity', 1);\n }\n\n function mg_trigger_linked_mouseovers(args, d, i) {\n if (args.linked && !MG.globals.link) {\n MG.globals.link = true;\n if (!args.aggregate_rollover || d.value !== undefined || d.values.length > 0) {\n var datum = d.values ? d.values[0] : d;\n var id = mg_rollover_format_id(datum, i, args);\n // trigger mouseover on matching line in .linked charts\n d3.selectAll('.' + mg_line_class(datum.line_id) + '.' + mg_rollover_id_class(id))\n .each(function(d) {\n d3.select(this)\n .on('mouseover')(d, i);\n });\n }\n }\n }\n\n function mg_trigger_linked_mouseouts(args, d, i) {\n if (args.linked && MG.globals.link) {\n MG.globals.link = false;\n\n var formatter = MG.time_format(args.utc_time, args.linked_format);\n var datums = d.values ? d.values : [d];\n datums.forEach(function(datum) {\n var v = datum[args.x_accessor];\n var id = (typeof v === 'number') ? i : formatter(v);\n\n // trigger mouseout on matching line in .linked charts\n d3.selectAll('.roll_' + id)\n .each(function(d) {\n d3.select(this)\n .on('mouseout')(d);\n });\n });\n }\n }\n\n function mg_remove_active_data_points_for_aggregate_rollover(args, svg) {\n svg.selectAll('circle.mg-line-rollover-circle').filter(function(circle) {\n return circle.length > 1;\n })\n .style('opacity', 0);\n }\n\n function mg_remove_active_data_points_for_generic_rollover(args, svg, d) {\n svg.selectAll('circle.mg-line-rollover-circle.mg-line' + d.line_id)\n .style('opacity', function() {\n var id = d.line_id - 1;\n\n if (args.custom_line_color_map.length > 0 &&\n args.custom_line_color_map.indexOf(d.line_id) !== undefined\n ) {\n id = args.custom_line_color_map.indexOf(d.line_id);\n }\n\n if (args.data[id].length === 1) {\n return 1;\n } else {\n return 0;\n }\n });\n }\n\n function mg_remove_active_text(svg) {\n svg.select('.mg-active-datapoint').text('');\n }\n\n function lineChart(args) {\n this.init = function(args) {\n this.args = args;\n\n if (!args.data || args.data.length === 0) {\n args.internal_error = 'No data was supplied';\n internal_error(args);\n return this;\n } else {\n args.internal_error = undefined;\n }\n\n raw_data_transformation(args);\n process_line(args);\n\n MG.call_hook('line.before_destroy', this);\n\n init(args);\n\n // TODO incorporate markers into calculation of x scales\n new MG.scale_factory(args)\n .namespace('x')\n .numericalDomainFromData()\n .numericalRange('bottom')\n\n var baselines = (args.baselines || []).map(function(d) {\n return d[args.y_accessor];\n });\n\n new MG.scale_factory(args)\n .namespace('y')\n .zeroBottom(true)\n .inflateDomain(true)\n .numericalDomainFromData(baselines)\n .numericalRange('left');\n\n var svg = mg_get_svg_child_of(args.target);\n\n if (args.x_axis) {\n new MG.axis_factory(args)\n .namespace('x')\n .type('numerical')\n .position(args.x_axis_position)\n .rug(x_rug(args))\n .label(mg_add_x_label)\n .draw();\n }\n\n if (args.y_axis) {\n new MG.axis_factory(args)\n .namespace('y')\n .type('numerical')\n .position(args.y_axis_position)\n .rug(y_rug(args))\n .label(mg_add_y_label)\n .draw();\n }\n\n this.markers();\n this.mainPlot();\n this.rollover();\n this.windowListeners();\n\n MG.call_hook('line.after_init', this);\n\n return this;\n };\n\n this.mainPlot = function() {\n mg_line_main_plot(args);\n return this;\n };\n\n this.markers = function() {\n markers(args);\n return this;\n };\n\n this.rollover = function() {\n var that = this;\n mg_line_rollover_setup(args, that);\n MG.call_hook('line.after_rollover', args);\n\n return this;\n };\n\n this.rolloverOn = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n var fmt = mg_get_rollover_time_format(args);\n\n return function(d, i) {\n mg_update_rollover_circle(args, svg, d);\n mg_trigger_linked_mouseovers(args, d, i);\n\n svg.selectAll('text')\n .filter(function(g, j) {\n return d === g;\n })\n .attr('opacity', 0.3);\n\n // update rollover text except for missing data points\n if (args.show_rollover_text &&\n !((args.missing_is_hidden && d['_missing']) || d[args.y_accessor] === null)\n ) {\n var mouseover = mg_mouseover_text(args, { svg: svg });\n var row = mouseover.mouseover_row();\n if (args.aggregate_rollover) {\n row.text((args.aggregate_rollover && args.data.length > 1\n ? mg_format_x_aggregate_mouseover\n : mg_format_x_mouseover)(args, d));\n }\n\n var pts = args.aggregate_rollover && args.data.length > 1\n ? d.values\n : [d];\n\n pts.forEach(function(di) {\n if (args.aggregate_rollover) {\n row = mouseover.mouseover_row();\n }\n\n if (args.legend) {\n mg_line_color_text(row.text(args.legend[di.index - 1] + ' ').bold().elem(), di, args);\n }\n\n mg_line_color_text(row.text('\\u2014 ').elem(), di, args);\n if (!args.aggregate_rollover) {\n row.text(mg_format_x_mouseover(args, di));\n }\n\n row.text(mg_format_y_mouseover(args, di, args.time_series === false));\n })\n }\n\n if (args.mouseover) {\n args.mouseover(d, i);\n }\n };\n };\n\n this.rolloverOff = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n mg_trigger_linked_mouseouts(args, d, i);\n if (args.aggregate_rollover) {\n mg_remove_active_data_points_for_aggregate_rollover(args, svg);\n } else {\n mg_remove_active_data_points_for_generic_rollover(args, svg, d);\n }\n\n if (args.data[0].length > 1) {\n mg_clear_mouseover_container(svg);\n }\n\n if (args.mouseout) {\n args.mouseout(d, i);\n }\n };\n };\n\n this.rolloverMove = function(args) {\n return function(d, i) {\n if (args.mousemove) {\n args.mousemove(d, i);\n }\n };\n };\n\n this.windowListeners = function() {\n mg_window_listeners(this.args);\n return this;\n };\n\n this.init(args);\n }\n\n MG.register('line', lineChart);\n}).call(this);\n\n(function() {\n 'use strict';\n\n function histogram(args) {\n this.init = function(args) {\n this.args = args;\n\n raw_data_transformation(args);\n process_histogram(args);\n init(args);\n\n new MG.scale_factory(args)\n .namespace('x')\n .numericalDomainFromData()\n .numericalRange('bottom');\n\n var baselines = (args.baselines || []).map(function(d) {\n return d[args.y_accessor]\n });\n\n new MG.scale_factory(args)\n .namespace('y')\n .zeroBottom(true)\n .inflateDomain(true)\n .numericalDomainFromData(baselines)\n .numericalRange('left');\n\n x_axis(args);\n y_axis(args);\n\n this.mainPlot();\n this.markers();\n this.rollover();\n this.windowListeners();\n\n return this;\n };\n\n this.mainPlot = function() {\n var svg = mg_get_svg_child_of(args.target);\n\n //remove the old histogram, add new one\n svg.selectAll('.mg-histogram').remove();\n\n var g = svg.append('g')\n .attr('class', 'mg-histogram');\n\n var bar = g.selectAll('.mg-bar')\n .data(args.data[0])\n .enter().append('g')\n .attr('class', 'mg-bar')\n .attr('transform', function(d) {\n return \"translate(\" + args.scales.X(d[args.x_accessor]).toFixed(2) + \",\" + args.scales.Y(d[args.y_accessor]).toFixed(2) + \")\";\n });\n\n //draw bars\n bar.append('rect')\n .attr('x', 1)\n .attr('width', function(d, i) {\n if (args.data[0].length === 1) {\n return (args.scalefns.xf(args.data[0][0]) - args.bar_margin).toFixed(0);\n } else if (i !== args.data[0].length - 1) {\n return (args.scalefns.xf(args.data[0][i + 1]) - args.scalefns.xf(d)).toFixed(0);\n } else {\n return (args.scalefns.xf(args.data[0][1]) - args.scalefns.xf(args.data[0][0])).toFixed(0);\n }\n })\n .attr('height', function(d) {\n if (d[args.y_accessor] === 0) {\n return 0;\n }\n\n return (args.height - args.bottom - args.buffer - args.scales.Y(d[args.y_accessor])).toFixed(2);\n });\n\n return this;\n };\n\n this.markers = function() {\n markers(args);\n return this;\n };\n\n this.rollover = function() {\n var svg = mg_get_svg_child_of(args.target);\n\n if (svg.selectAll('.mg-active-datapoint-container').nodes().length === 0) {\n mg_add_g(svg, 'mg-active-datapoint-container');\n }\n\n //remove the old rollovers if they already exist\n svg.selectAll('.mg-rollover-rect').remove();\n svg.selectAll('.mg-active-datapoint').remove();\n\n var g = svg.append('g')\n .attr('class', 'mg-rollover-rect');\n\n //draw rollover bars\n var bar = g.selectAll('.mg-bar')\n .data(args.data[0])\n .enter().append('g')\n .attr('class', function(d, i) {\n if (args.linked) {\n return 'mg-rollover-rects roll_' + i;\n } else {\n return 'mg-rollover-rects';\n }\n })\n .attr('transform', function(d) {\n return \"translate(\" + (args.scales.X(d[args.x_accessor])) + \",\" + 0 + \")\";\n });\n\n bar.append('rect')\n .attr('x', 1)\n .attr('y', args.buffer + args.title_y_position)\n .attr('width', function(d, i) {\n //if data set is of length 1\n if (args.data[0].length === 1) {\n return (args.scalefns.xf(args.data[0][0]) - args.bar_margin).toFixed(0);\n } else if (i !== args.data[0].length - 1) {\n return (args.scalefns.xf(args.data[0][i + 1]) - args.scalefns.xf(d)).toFixed(0);\n } else {\n return (args.scalefns.xf(args.data[0][1]) - args.scalefns.xf(args.data[0][0])).toFixed(0);\n }\n })\n .attr('height', function(d) {\n return args.height;\n })\n .attr('opacity', 0)\n .on('mouseover', this.rolloverOn(args))\n .on('mouseout', this.rolloverOff(args))\n .on('mousemove', this.rolloverMove(args));\n\n return this;\n };\n\n this.rolloverOn = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n svg.selectAll('text')\n .filter(function(g, j) {\n return d === g;\n })\n .attr('opacity', 0.3);\n\n var fmt = args.processed.xax_format || MG.time_format(args.utc_time, '%b %e, %Y');\n var num = format_rollover_number(args);\n\n svg.selectAll('.mg-bar rect')\n .filter(function(d, j) {\n return j === i;\n })\n .classed('active', true);\n\n //trigger mouseover on all matching bars\n if (args.linked && !MG.globals.link) {\n MG.globals.link = true;\n\n //trigger mouseover on matching bars in .linked charts\n d3.selectAll('.mg-rollover-rects.roll_' + i + ' rect')\n .each(function(d) { //use existing i\n d3.select(this).on('mouseover')(d, i);\n });\n }\n\n //update rollover text\n if (args.show_rollover_text) {\n var mo = mg_mouseover_text(args, { svg: svg });\n var row = mo.mouseover_row();\n row.text('\\u259F ').elem()\n .classed('hist-symbol', true);\n\n row.text(mg_format_x_mouseover(args, d)); // x\n row.text(mg_format_y_mouseover(args, d, args.time_series === false));\n }\n\n if (args.mouseover) {\n mg_setup_mouseover_container(svg, args);\n args.mouseover(d, i);\n }\n };\n };\n\n this.rolloverOff = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n if (args.linked && MG.globals.link) {\n MG.globals.link = false;\n\n //trigger mouseout on matching bars in .linked charts\n d3.selectAll('.mg-rollover-rects.roll_' + i + ' rect')\n .each(function(d) { //use existing i\n d3.select(this).on('mouseout')(d, i);\n });\n }\n\n //reset active bar\n svg.selectAll('.mg-bar rect')\n .classed('active', false);\n\n //reset active data point text\n mg_clear_mouseover_container(svg);\n\n if (args.mouseout) {\n args.mouseout(d, i);\n }\n };\n };\n\n this.rolloverMove = function(args) {\n return function(d, i) {\n if (args.mousemove) {\n args.mousemove(d, i);\n }\n };\n };\n\n this.windowListeners = function() {\n mg_window_listeners(this.args);\n return this;\n };\n\n this.init(args);\n }\n\n var defaults = {\n binned: false,\n bins: null,\n processed_x_accessor: 'x',\n processed_y_accessor: 'y',\n processed_dx_accessor: 'dx',\n bar_margin: 1\n };\n\n MG.register('histogram', histogram, defaults);\n}).call(this);\n\nfunction point_mouseover(args, svg, d) {\n var mouseover = mg_mouseover_text(args, { svg: svg });\n var row = mouseover.mouseover_row();\n\n if (args.color_accessor !== null && args.color_type === 'category') {\n var label = d[args.color_accessor];\n row.text(label + ' ').bold().elem().attr('fill', args.scalefns.colorf(d));\n }\n\n mg_color_point_mouseover(args, row.text('\\u25CF ').elem(), d); // point shape\n\n row.text(mg_format_x_mouseover(args, d)); // x\n row.text(mg_format_y_mouseover(args, d, args.time_series === false));\n}\n\nfunction mg_color_point_mouseover(args, elem, d) {\n if (args.color_accessor !== null) {\n elem.attr('fill', args.scalefns.colorf(d));\n elem.attr('stroke', args.scalefns.colorf(d));\n } else {\n elem.classed('mg-points-mono', true);\n }\n}\n\n\n(function() {\n 'use strict';\n\n function mg_filter_out_plot_bounds(data, args) {\n // max_x, min_x, max_y, min_y;\n var x = args.x_accessor;\n var y = args.y_accessor;\n var new_data = data.filter(function(d) {\n return (args.min_x === null || d[x] >= args.min_x) &&\n (args.max_x === null || d[x] <= args.max_x) &&\n (args.min_y === null || d[y] >= args.min_y) &&\n (args.max_y === null || d[y] <= args.max_y);\n })\n return new_data;\n }\n\n function pointChart(args) {\n this.init = function(args) {\n this.args = args;\n\n // infer y_axis and x_axis type;\n args.x_axis_type = mg_infer_type(args, 'x');\n args.y_axis_type = mg_infer_type(args, 'y');\n\n raw_data_transformation(args);\n\n process_point(args);\n init(args);\n\n var xMaker, yMaker;\n\n if (args.x_axis_type === 'categorical') {\n xMaker = MG.scale_factory(args)\n .namespace('x')\n .categoricalDomainFromData()\n .categoricalRangeBands([0, args.xgroup_height], args.xgroup_accessor === null);\n\n if (args.xgroup_accessor) {\n new MG.scale_factory(args)\n .namespace('xgroup')\n .categoricalDomainFromData()\n .categoricalRangeBands('bottom');\n\n } else {\n args.scales.XGROUP = function(d) {\n return mg_get_plot_left(args) };\n args.scalefns.xgroupf = function(d) {\n return mg_get_plot_left(args) };\n }\n\n args.scalefns.xoutf = function(d) {\n return args.scalefns.xf(d) + args.scalefns.xgroupf(d)\n };\n } else {\n xMaker = MG.scale_factory(args)\n .namespace('x')\n .inflateDomain(true)\n .zeroBottom(args.y_axis_type === 'categorical')\n .numericalDomainFromData((args.baselines || []).map(function(d) {\n return d[args.x_accessor] }))\n .numericalRange('bottom');\n\n args.scalefns.xoutf = args.scalefns.xf;\n }\n\n // y-scale generation. This needs to get simplified.\n if (args.y_axis_type === 'categorical') {\n yMaker = MG.scale_factory(args)\n .namespace('y')\n .zeroBottom(true)\n .categoricalDomainFromData()\n .categoricalRangeBands([0, args.ygroup_height], true);\n\n if (args.ygroup_accessor) {\n\n new MG.scale_factory(args)\n .namespace('ygroup')\n .categoricalDomainFromData()\n .categoricalRangeBands('left');\n\n } else {\n args.scales.YGROUP = function() {\n return mg_get_plot_top(args) };\n args.scalefns.ygroupf = function(d) {\n return mg_get_plot_top(args) };\n\n }\n args.scalefns.youtf = function(d) {\n return args.scalefns.yf(d) + args.scalefns.ygroupf(d) };\n\n } else {\n var baselines = (args.baselines || []).map(function(d) {\n return d[args.y_accessor] });\n yMaker = MG.scale_factory(args)\n .namespace('y')\n .inflateDomain(true)\n .zeroBottom(args.x_axis_type === 'categorical')\n .numericalDomainFromData(baselines)\n .numericalRange('left');\n\n args.scalefns.youtf = function(d) {\n return args.scalefns.yf(d) };\n }\n\n /////// COLOR accessor\n if (args.color_accessor !== null) {\n var colorScale = MG.scale_factory(args).namespace('color');\n if (args.color_type === 'number') {\n // do the color scale.\n // etiher get color range, or what.\n colorScale\n .numericalDomainFromData(mg_get_color_domain(args))\n .numericalRange(mg_get_color_range(args))\n .clamp(true);\n } else {\n if (args.color_domain) {\n colorScale\n .categoricalDomain(args.color_domain)\n .categoricalRange(args.color_range);\n } else {\n colorScale\n .categoricalDomainFromData()\n .categoricalColorRange();\n }\n }\n }\n\n if (args.size_accessor) {\n new MG.scale_factory(args).namespace('size')\n .numericalDomainFromData()\n .numericalRange(mg_get_size_range(args))\n .clamp(true);\n }\n\n new MG.axis_factory(args)\n .namespace('x')\n .type(args.x_axis_type)\n .zeroLine(args.y_axis_type === 'categorical')\n .position(args.x_axis_position)\n .rug(x_rug(args))\n .label(mg_add_x_label)\n .draw();\n\n new MG.axis_factory(args)\n .namespace('y')\n .type(args.y_axis_type)\n .zeroLine(args.x_axis_type === 'categorical')\n .position(args.y_axis_position)\n .rug(y_rug(args))\n .label(mg_add_y_label)\n .draw();\n\n this.mainPlot();\n this.markers();\n this.rollover();\n this.windowListeners();\n\n return this;\n };\n\n this.markers = function() {\n markers(args);\n if (args.least_squares) {\n add_ls(args);\n }\n\n return this;\n };\n\n this.mainPlot = function() {\n var svg = mg_get_svg_child_of(args.target);\n var g;\n\n var data = mg_filter_out_plot_bounds(args.data[0], args);\n //remove the old points, add new one\n svg.selectAll('.mg-points').remove();\n\n g = svg.append('g')\n .classed('mg-points', true);\n\n\n var pts = g.selectAll('circle')\n .data(data)\n .enter().append('circle')\n .attr('class', function(d, i) {\n return 'path-' + i;\n })\n .attr('cx', args.scalefns.xoutf)\n .attr('cy', function(d) {\n return args.scalefns.youtf(d);\n });\n\n //are we coloring our points, or just using the default color?\n if (args.color_accessor !== null) {\n pts.attr('fill', args.scalefns.colorf);\n pts.attr('stroke', args.scalefns.colorf);\n } else {\n pts.classed('mg-points-mono', true);\n }\n\n if (args.size_accessor !== null) {\n pts.attr('r', args.scalefns.sizef);\n } else {\n pts.attr('r', args.point_size);\n }\n\n return this;\n };\n\n this.rollover = function() {\n var svg = mg_get_svg_child_of(args.target);\n\n if (svg.selectAll('.mg-active-datapoint-container').nodes().length === 0) {\n mg_add_g(svg, 'mg-active-datapoint-container');\n }\n\n //remove the old rollovers if they already exist\n svg.selectAll('.mg-voronoi').remove();\n\n //add rollover paths\n var voronoi = d3.voronoi()\n .x(args.scalefns.xoutf)\n .y(args.scalefns.youtf)\n .extent([\n [args.buffer, args.buffer + args.title_y_position],\n [args.width - args.buffer, args.height - args.buffer]\n ]);\n\n var paths = svg.append('g')\n .attr('class', 'mg-voronoi');\n\n paths.selectAll('path')\n .data(voronoi.polygons(mg_filter_out_plot_bounds(args.data[0], args)))\n .enter().append('path')\n .attr('d', function(d) {\n return d == null ? null : 'M' + d.join(',') + 'Z'; })\n .attr('class', function(d, i) {\n return 'path-' + i;\n })\n .style('fill-opacity', 0)\n .on('mouseover', this.rolloverOn(args))\n .on('mouseout', this.rolloverOff(args))\n .on('mousemove', this.rolloverMove(args));\n\n if (args.data[0].length === 1) {\n point_mouseover(args, svg, args.data[0][0]);\n }\n\n return this;\n };\n\n this.rolloverOn = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n svg.selectAll('.mg-points circle')\n .classed('selected', false);\n\n //highlight active point\n var pts = svg.selectAll('.mg-points circle.path-' + i)\n .classed('selected', true);\n\n if (args.size_accessor) {\n pts.attr('r', function(di) {\n return args.scalefns.sizef(di) + args.active_point_size_increase;\n });\n } else {\n pts.attr('r', args.point_size + args.active_point_size_increase);\n }\n\n //trigger mouseover on all points for this class name in .linked charts\n if (args.linked && !MG.globals.link) {\n MG.globals.link = true;\n\n //trigger mouseover on matching point in .linked charts\n d3.selectAll('.mg-voronoi .path-' + i)\n .each(function() {\n d3.select(this).on('mouseover')(d, i);\n });\n }\n\n if (args.show_rollover_text) {\n point_mouseover(args, svg, d.data);\n }\n\n if (args.mouseover) {\n args.mouseover(d, i);\n }\n };\n };\n\n this.rolloverOff = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n if (args.linked && MG.globals.link) {\n MG.globals.link = false;\n\n d3.selectAll('.mg-voronoi .path-' + i)\n .each(function() {\n d3.select(this).on('mouseout')(d, i);\n });\n }\n\n //reset active point\n var pts = svg.selectAll('.mg-points circle')\n .classed('unselected', false)\n .classed('selected', false);\n\n if (args.size_accessor) {\n pts.attr('r', args.scalefns.sizef);\n } else {\n pts.attr('r', args.point_size);\n }\n\n //reset active data point text\n if (args.data[0].length > 1) mg_clear_mouseover_container(svg);\n\n if (args.mouseout) {\n args.mouseout(d, i);\n }\n };\n };\n\n this.rolloverMove = function(args) {\n return function(d, i) {\n if (args.mousemove) {\n args.mousemove(d, i);\n }\n };\n };\n\n this.update = function(args) {\n return this;\n };\n\n this.windowListeners = function() {\n mg_window_listeners(this.args);\n return this;\n };\n\n this.init(args);\n }\n\n var defaults = {\n y_padding_percentage: 0.05, // for categorical scales\n y_outer_padding_percentage: .2, // for categorical scales\n ygroup_padding_percentage: 0, // for categorical scales\n ygroup_outer_padding_percentage: 0, // for categorical scales\n x_padding_percentage: 0.05, // for categorical scales\n x_outer_padding_percentage: .2, // for categorical scales\n xgroup_padding_percentage: 0, // for categorical scales\n xgroup_outer_padding_percentage: 0, // for categorical scales\n y_categorical_show_guides: true,\n x_categorical_show_guides: true,\n buffer: 16,\n ls: false,\n lowess: false,\n point_size: 2.5,\n label_accessor: null,\n size_accessor: null,\n color_accessor: null,\n size_range: null, // when we set a size_accessor option, this array determines the size range, e.g. [1,5]\n color_range: null, // e.g. ['blue', 'red'] to color different groups of points\n size_domain: null,\n color_domain: null,\n active_point_size_increase: 1,\n color_type: 'number' // can be either 'number' - the color scale is quantitative - or 'category' - the color scale is qualitative.\n };\n\n MG.register('point', pointChart, defaults);\n}).call(this);\n\n(function() {\n 'use strict';\n\n // TODO add styles to stylesheet instead\n function scaffold(args) {\n var svg = mg_get_svg_child_of(args.target);\n // main margins\n svg.append('line')\n .attr('x1', 0)\n .attr('x2', args.width)\n .attr('y1', args.top)\n .attr('y2', args.top)\n .attr('stroke', 'black');\n svg.append('line')\n .attr('x1', 0)\n .attr('x2', args.width)\n .attr('y1', args.height-args.bottom)\n .attr('y2', args.height-args.bottom)\n .attr('stroke', 'black');\n\n svg.append('line')\n .attr('x1', args.left)\n .attr('x2', args.left)\n .attr('y1', 0)\n .attr('y2', args.height)\n .attr('stroke', 'black');\n\n svg.append('line')\n .attr('x1', args.width-args.right)\n .attr('x2', args.width-args.right)\n .attr('y1', 0)\n .attr('y2', args.height)\n .attr('stroke', 'black');\n\n // plot area margins\n svg.append('line')\n .attr('x1', 0)\n .attr('x2', args.width)\n .attr('y1', args.height-args.bottom-args.buffer)\n .attr('y2', args.height-args.bottom-args.buffer)\n .attr('stroke', 'gray');\n\n svg.append('line')\n .attr('x1', 0)\n .attr('x2', args.width)\n .attr('y1', args.top+args.buffer)\n .attr('y2', args.top+args.buffer)\n .attr('stroke', 'gray');\n\n svg.append('line')\n .attr('x1', args.left + args.buffer)\n .attr('x2', args.left + args.buffer)\n .attr('y1', 0)\n .attr('y2', args.height)\n .attr('stroke', 'gray');\n svg.append('line')\n .attr('x1', args.width -args.right - args.buffer)\n .attr('x2', args.width -args.right - args.buffer)\n .attr('y1', 0)\n .attr('y2', args.height)\n .attr('stroke', 'gray');\n }\n\n // barchart re-write.\n function mg_targeted_legend(args) {\n var labels;\n var plot = '';\n if (args.legend_target) {\n\n var div = d3.select(args.legend_target).append('div').classed('mg-bar-target-legend', true);\n \n if (args.orientation == 'horizontal') labels = args.scales.Y.domain()\n else labels = args.scales.X.domain();\n\n labels.forEach(function(label) {\n var outer_span = div.append('span').classed('mg-bar-target-element', true);\n outer_span.append('span')\n .classed('mg-bar-target-legend-shape', true)\n .style('color', args.scales.COLOR(label))\n .text('\\u25FC ');\n outer_span.append('span')\n .classed('mg-bar-target-legend-text', true)\n .text(label);\n\n });\n }\n }\n\n function legend_on_graph(svg, args) {\n // draw each element at the top right\n // get labels\n\n var labels;\n if (args.orientation=='horizontal') labels = args.scales.Y.domain()\n else labels = args.scales.X.domain();\n\n var lineCount = 0;\n var lineHeight = 1.1;\n var g = svg.append('g').classed(\"mg-bar-legend\", true);\n var textContainer = g.append('text');\n\n //\n\n textContainer\n .selectAll('*')\n .remove();\n textContainer\n .attr('width', args.right)\n .attr('height', 100)\n .attr('text-anchor', 'start');\n\n labels.forEach(function(label) {\n var sub_container = textContainer.append('tspan')\n .attr('x', mg_get_plot_right(args))\n .attr('y', args.height / 2)\n .attr('dy', (lineCount * lineHeight) + 'em');\n sub_container.append('tspan')\n .text('\\u25a0 ')\n .attr('fill', args.scales.COLOR(label))\n .attr('font-size', 20)\n sub_container.append('tspan')\n .text(label)\n .attr('font-weight', 300)\n .attr('font-size', 10);\n lineCount++;\n })\n\n // d.values.forEach(function (datum) {\n // formatted_y = mg_format_y_rollover(args, num, datum);\n\n // if (args.y_rollover_format !== null) {\n // formatted_y = number_rollover_format(args.y_rollover_format, datum, args.y_accessor);\n // } else {\n // formatted_y = args.yax_units + num(datum[args.y_accessor]);\n // }\n\n // sub_container = textContainer.append('tspan').attr('x', 0).attr('y', (lineCount * lineHeight) + 'em');\n // formatted_y = mg_format_y_rollover(args, num, datum);\n // mouseover_tspan(sub_container, '\\u2014 ')\n // .color(args, datum);\n // mouseover_tspan(sub_container, formatted_x + ' ' + formatted_y);\n\n // lineCount++;\n // });\n }\n\n function barChart(args) {\n this.args = args;\n\n this.init = function(args) {\n this.args = args;\n args.x_axis_type = mg_infer_type(args, 'x');\n args.y_axis_type = mg_infer_type(args, 'y');\n\n // this is specific to how rects work in svg, let's keep track of the bar orientation to\n // plot appropriately.\n if (args.x_axis_type == 'categorical') {\n args.orientation = 'vertical';\n } else if (args.y_axis_type == 'categorical') {\n args.orientation = 'horizontal';\n } else if (args.x_axis_type != 'categorical' && args.y_axis_type != 'categorical') {\n // histogram.\n args.orientation = 'vertical';\n }\n\n raw_data_transformation(args);\n\n process_point(args);\n init(args);\n\n var xMaker, yMaker;\n\n if (args.x_axis_type === 'categorical') {\n xMaker = MG.scale_factory(args)\n .namespace('x')\n .categoricalDomainFromData()\n .categoricalRangeBands([0, args.xgroup_height], args.xgroup_accessor === null);\n\n if (args.xgroup_accessor) {\n new MG.scale_factory(args)\n .namespace('xgroup')\n .categoricalDomainFromData()\n .categoricalRangeBands('bottom');\n\n } else {\n args.scales.XGROUP = function(d) {\n return mg_get_plot_left(args) };\n args.scalefns.xgroupf = function(d) {\n return mg_get_plot_left(args) };\n }\n\n args.scalefns.xoutf = function(d) {\n return args.scalefns.xf(d) + args.scalefns.xgroupf(d)\n };\n } else {\n xMaker = MG.scale_factory(args)\n .namespace('x')\n .inflateDomain(true)\n .zeroBottom(args.y_axis_type === 'categorical')\n .numericalDomainFromData((args.baselines || []).map(function(d) {\n return d[args.x_accessor] }))\n .numericalRange('bottom');\n\n args.scalefns.xoutf = args.scalefns.xf;\n }\n\n // y-scale generation. This needs to get simplified.\n if (args.y_axis_type === 'categorical') {\n yMaker = MG.scale_factory(args)\n .namespace('y')\n .zeroBottom(true)\n .categoricalDomainFromData()\n .categoricalRangeBands([0, args.ygroup_height], true);\n\n if (args.ygroup_accessor) {\n\n new MG.scale_factory(args)\n .namespace('ygroup')\n .categoricalDomainFromData()\n .categoricalRangeBands('left');\n\n } else {\n args.scales.YGROUP = function() {\n return mg_get_plot_top(args) };\n args.scalefns.ygroupf = function(d) {\n return mg_get_plot_top(args) };\n\n }\n args.scalefns.youtf = function(d) {\n return args.scalefns.yf(d) + args.scalefns.ygroupf(d) };\n\n } else {\n var baselines = (args.baselines || []).map(function(d) {\n return d[args.y_accessor] });\n\n yMaker = MG.scale_factory(args)\n .namespace('y')\n .inflateDomain(true)\n .zeroBottom(args.x_axis_type === 'categorical')\n .numericalDomainFromData(baselines)\n .numericalRange('left');\n\n args.scalefns.youtf = function(d) {\n return args.scalefns.yf(d) };\n }\n\n if (args.ygroup_accessor !== null) {\n args.ycolor_accessor = args.y_accessor;\n MG.scale_factory(args)\n .namespace('ycolor')\n .scaleName('color')\n .categoricalDomainFromData()\n .categoricalColorRange();\n }\n\n if (args.xgroup_accessor !== null) {\n args.xcolor_accessor = args.x_accessor;\n MG.scale_factory(args)\n .namespace('xcolor')\n .scaleName('color')\n .categoricalDomainFromData()\n .categoricalColorRange();\n }\n\n // if (args.ygroup_accessor !== null) {\n // MG.scale_factory(args)\n // .namespace('ygroup')\n // .categoricalDomainFromData()\n // .categoricalColorRange();\n // }\n\n new MG.axis_factory(args)\n .namespace('x')\n .type(args.x_axis_type)\n .zeroLine(args.y_axis_type === 'categorical')\n .position(args.x_axis_position)\n .draw();\n\n new MG.axis_factory(args)\n .namespace('y')\n .type(args.y_axis_type)\n .zeroLine(args.x_axis_type === 'categorical')\n .position(args.y_axis_position)\n .draw();\n\n //mg_categorical_group_color_scale(args);\n\n this.mainPlot();\n this.markers();\n this.rollover();\n this.windowListeners();\n //scaffold(args)\n\n return this;\n };\n\n this.mainPlot = function() {\n var svg = mg_get_svg_child_of(args.target);\n var data = args.data[0];\n var barplot = svg.select('g.mg-barplot');\n var fresh_render = barplot.empty();\n\n var bars;\n var predictor_bars;\n var pp, pp0;\n var baseline_marks;\n\n var perform_load_animation = fresh_render && args.animate_on_load;\n var should_transition = perform_load_animation || args.transition_on_update;\n var transition_duration = args.transition_duration || 1000;\n\n // draw the plot on first render\n if (fresh_render) {\n barplot = svg.append('g')\n .classed('mg-barplot', true);\n }\n\n bars = barplot.selectAll('.mg-bar')\n .data(data)\n .enter()\n .append('rect')\n .classed('mg-bar', true)\n .classed('default-bar', args.scales.hasOwnProperty('COLOR') ? false : true);\n\n // TODO - reimplement\n\n // reference_accessor {}\n\n // if (args.predictor_accessor) {\n // predictor_bars = barplot.selectAll('.mg-bar-prediction')\n // .data(data.filter(function(d) {\n // return d.hasOwnProperty(args.predictor_accessor) }));\n\n // predictor_bars.exit().remove();\n\n // predictor_bars.enter().append('rect')\n // .classed('mg-bar-prediction', true);\n // }\n\n // if (args.baseline_accessor) {\n // baseline_marks = barplot.selectAll('.mg-bar-baseline')\n // .data(data.filter(function(d) {\n // return d.hasOwnProperty(args.baseline_accessor) }));\n\n // baseline_marks.exit().remove();\n\n // baseline_marks.enter().append('line')\n // .classed('mg-bar-baseline', true);\n // }\n\n var appropriate_size;\n\n // setup transitions\n // if (should_transition) {\n // bars = bars.transition()\n // .duration(transition_duration);\n\n // if (predictor_bars) {\n // predictor_bars = predictor_bars.transition()\n // .duration(transition_duration);\n // }\n\n // if (baseline_marks) {\n // baseline_marks = baseline_marks.transition()\n // .duration(transition_duration);\n // }\n // }\n\n //appropriate_size = args.scales.Y_ingroup.rangeBand()/1.5;\n var length, width, length_type, width_type, length_coord, width_coord,\n length_scalefn, width_scalefn, length_scale, width_scale,\n length_accessor, width_accessor, length_coord_map, width_coord_map,\n length_map, width_map;\n\n var reference_length_map, reference_length_coord_fn;\n\n if (args.orientation == 'vertical') {\n length = 'height';\n width = 'width';\n length_type = args.y_axis_type;\n width_type = args.x_axis_type;\n length_coord = 'y';\n width_coord = 'x';\n length_scalefn = length_type == 'categorical' ? args.scalefns.youtf : args.scalefns.yf;\n width_scalefn = width_type == 'categorical' ? args.scalefns.xoutf : args.scalefns.xf;\n length_scale = args.scales.Y;\n width_scale = args.scales.X;\n length_accessor = args.y_accessor;\n width_accessor = args.x_accessor;\n\n length_coord_map = function(d) {\n var l;\n l = length_scalefn(d);\n if (d[length_accessor] < 0) {\n l = length_scale(0);\n }\n return l;\n }\n\n length_map = function(d) {\n return Math.abs(length_scalefn(d) - length_scale(0));\n }\n\n reference_length_map = function(d) {\n return Math.abs(length_scale(d[args.reference_accessor]) - length_scale(0));\n }\n\n reference_length_coord_fn = function(d){\n return length_scale(d[args.reference_accessor]);\n }\n }\n\n if (args.orientation == 'horizontal') {\n length = 'width';\n width = 'height';\n length_type = args.x_axis_type;\n width_type = args.y_axis_type;\n length_coord = 'x';\n width_coord = 'y';\n length_scalefn = length_type == 'categorical' ? args.scalefns.xoutf : args.scalefns.xf;\n width_scalefn = width_type == 'categorical' ? args.scalefns.youtf : args.scalefns.yf;\n length_scale = args.scales.X;\n width_scale = args.scales.Y;\n length_accessor = args.x_accessor;\n width_accessor = args.y_accessor;\n\n length_coord_map = function(d) {\n var l;\n l = length_scale(0);\n return l;\n }\n\n length_map = function(d) {\n return Math.abs(length_scalefn(d) - length_scale(0));\n }\n\n reference_length_map = function(d) {\n return Math.abs(length_scale(d[args.reference_accessor]) - length_scale(0));\n }\n\n reference_length_coord_fn = function(d){\n return length_scale(0);\n }\n }\n\n // if (perform_load_animation) {\n // bars.attr(length, 0);\n\n // if (predictor_bars) {\n // predictor_bars.attr(length, 0);\n // }\n\n // // if (baseline_marks) {\n // // baseline_marks.attr({\n // // x1: args.scales.X(0),\n // // x2: args.scales.X(0)\n // // });\n // // }\n // }\n\n bars.attr(length_coord, length_coord_map);\n\n // bars.attr(length_coord, 40)\n //bars.attr(width_coord, 70)\n\n\n\n bars.attr(width_coord, function(d) {\n var w;\n if (width_type == 'categorical') {\n w = width_scalefn(d);\n } else {\n w = width_scale(0);\n if (d[width_accessor] < 0) {\n w = width_scalefn(d);\n }\n }\n w = w - args.bar_thickness/2;\n return w;\n });\n\n if (args.scales.COLOR) {\n bars.attr('fill', args.scalefns.colorf)\n }\n\n bars\n .attr(length, length_map)\n .attr(width, function(d) {\n return args.bar_thickness;\n });\n\n\n\n\n if (args.reference_accessor !== null) {\n var reference_data = data.filter(function(d){\n return d.hasOwnProperty(args.reference_accessor);\n })\n var reference_bars = barplot.selectAll('.mg-categorical-reference')\n .data(reference_data)\n .enter()\n .append('rect');\n\n reference_bars\n .attr(length_coord, reference_length_coord_fn)\n .attr(width_coord, function(d) {\n return width_scalefn(d) - args.reference_thickness/2\n })\n .attr(length, reference_length_map)\n .attr(width, args.reference_thickness);\n }\n\n if (args.comparison_accessor !== null) {\n var comparison_thickness = null;\n if (args.comparison_thickness === null) {\n comparison_thickness = args.bar_thickness/2;\n } else {\n comparison_thickness = args.comparison_thickness;\n }\n\n\n var comparison_data = data.filter(function(d) {\n return d.hasOwnProperty(args.comparison_accessor);\n })\n var comparison_marks = barplot.selectAll('.mg-categorical-comparison')\n .data(comparison_data)\n .enter()\n .append('line');\n\n comparison_marks\n .attr(length_coord + '1', function(d){return length_scale(d[args.comparison_accessor])})\n .attr(length_coord + '2', function(d){return length_scale(d[args.comparison_accessor])})\n .attr(width_coord + '1', function(d){\n return width_scalefn(d) - comparison_thickness/2;\n })\n .attr(width_coord + '2', function(d) {\n return width_scalefn(d) + comparison_thickness/2;\n })\n .attr('stroke', 'black')\n .attr('stroke-width', args.comparison_width);\n }\n\n //bars.attr(width_coord, );\n // bars.attr('width', 50);\n // bars.attr('height', 50);\n // bars.attr('y', function(d){\n // var y = args.scales.Y(0);\n // if (d[args.y_accessor] < 0) {\n // y = args.scalefns.yf(d);\n // }\n // return y;\n // });\n\n // bars.attr('x', function(d){\n // return 40;\n // })\n\n // bars.attr('width', function(d){\n // return 100;\n // });\n\n // bars.attr('height', 100);\n\n // bars.attr('fill', 'black');\n // bars.attr('x', function(d) {\n // var x = args.scales.X(0);\n // if (d[args.x_accessor] < 0) {\n // x = args.scalefns.xf(d);\n // }\n // return x;\n // })\n // TODO - reimplement.\n // if (args.predictor_accessor) {\n // predictor_bars\n // .attr('x', args.scales.X(0))\n // .attr('y', function(d) {\n // return args.scalefns.ygroupf(d) + args.scalefns.yf(d) + args.scales.Y.rangeBand() * (7 / 16) // + pp0 * appropriate_size/(pp*2) + appropriate_size / 2;\n // })\n // .attr('height', args.scales.Y.rangeBand() / 8) //appropriate_size / pp)\n // .attr('width', function(d) {\n // return args.scales.X(d[args.predictor_accessor]) - args.scales.X(0);\n // });\n // }\n\n // TODO - reimplement.\n // if (args.baseline_accessor) {\n\n // baseline_marks\n // .attr('x1', function(d) {\n // return args.scales.X(d[args.baseline_accessor]); })\n // .attr('x2', function(d) {\n // return args.scales.X(d[args.baseline_accessor]); })\n // .attr('y1', function(d) {\n // return args.scalefns.ygroupf(d) + args.scalefns.yf(d) + args.scales.Y.rangeBand() / 4\n // })\n // .attr('y2', function(d) {\n // return args.scalefns.ygroupf(d) + args.scalefns.yf(d) + args.scales.Y.rangeBand() * 3 / 4\n // });\n // }\n if (args.legend || (args.color_accessor !== null && args.ygroup_accessor !== args.color_accessor)) {\n if (!args.legend_target) legend_on_graph(svg, args);\n else mg_targeted_legend(args);\n }\n return this;\n };\n\n this.markers = function() {\n markers(args);\n return this;\n };\n\n this.rollover = function() {\n var svg = mg_get_svg_child_of(args.target);\n var g;\n\n if (svg.selectAll('.mg-active-datapoint-container').nodes().length === 0) {\n mg_add_g(svg, 'mg-active-datapoint-container');\n }\n\n //remove the old rollovers if they already exist\n svg.selectAll('.mg-rollover-rect').remove();\n svg.selectAll('.mg-active-datapoint').remove();\n\n // get orientation\n var length, width, length_type, width_type, length_coord, width_coord,\n length_scalefn, width_scalefn, length_scale, width_scale,\n length_accessor, width_accessor;\n\n var length_coord_map, width_coord_map, length_map, width_map;\n\n if (args.orientation == 'vertical') {\n length = 'height';\n width = 'width';\n length_type = args.y_axis_type;\n width_type = args.x_axis_type;\n length_coord = 'y';\n width_coord = 'x';\n length_scalefn = length_type == 'categorical' ? args.scalefns.youtf : args.scalefns.yf;\n width_scalefn = width_type == 'categorical' ? args.scalefns.xoutf : args.scalefns.xf;\n length_scale = args.scales.Y;\n width_scale = args.scales.X;\n length_accessor = args.y_accessor;\n width_accessor = args.x_accessor;\n\n length_coord_map = function(d){\n return mg_get_plot_top(args);\n }\n\n length_map = function(d) {\n return args.height -args.top-args.bottom-args.buffer*2\n }\n }\n\n if (args.orientation == 'horizontal') {\n length = 'width';\n width = 'height';\n length_type = args.x_axis_type;\n width_type = args.y_axis_type;\n length_coord = 'x';\n width_coord = 'y';\n length_scalefn = length_type == 'categorical' ? args.scalefns.xoutf : args.scalefns.xf;\n width_scalefn = width_type == 'categorical' ? args.scalefns.youtf : args.scalefns.yf;\n length_scale = args.scales.X;\n width_scale = args.scales.Y;\n length_accessor = args.x_accessor;\n width_accessor = args.y_accessor;\n\n length_coord_map = function(d){\n var l;\n l = length_scale(0);\n return l;\n }\n\n length_map = function(d) {\n return args.width -args.left-args.right-args.buffer*2\n }\n }\n\n //rollover text\n var rollover_x, rollover_anchor;\n if (args.rollover_align === 'right') {\n rollover_x = args.width - args.right;\n rollover_anchor = 'end';\n } else if (args.rollover_align === 'left') {\n rollover_x = args.left;\n rollover_anchor = 'start';\n } else {\n rollover_x = (args.width - args.left - args.right) / 2 + args.left;\n rollover_anchor = 'middle';\n }\n\n svg.append('text')\n .attr('class', 'mg-active-datapoint')\n .attr('xml:space', 'preserve')\n .attr('x', rollover_x)\n .attr('y', args.top * 0.75)\n .attr('dy', '.35em')\n .attr('text-anchor', rollover_anchor);\n\n g = svg.append('g')\n .attr('class', 'mg-rollover-rect');\n\n //draw rollover bars\n var bars = g.selectAll(\".mg-bar-rollover\")\n .data(args.data[0]).enter()\n .append(\"rect\")\n .attr('class', 'mg-bar-rollover');\n\n bars.attr('opacity', 0)\n .attr(length_coord, length_coord_map)\n .attr(width_coord, function(d) {\n var w;\n if (width_type == 'categorical') {\n w = width_scalefn(d);\n } else {\n w = width_scale(0);\n if (d[width_accessor] < 0) {\n w = width_scalefn(d);\n }\n }\n w = w - args.bar_thickness/2;\n return w;\n });\n\n bars.attr(length, length_map)\n bars.attr(width, function(d) {\n return args.bar_thickness;\n });\n\n bars\n .on('mouseover', this.rolloverOn(args))\n .on('mouseout', this.rolloverOff(args))\n .on('mousemove', this.rolloverMove(args));\n\n return this;\n };\n\n this.rolloverOn = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n var label_accessor = this.is_vertical ? args.x_accessor : args.y_accessor;\n var data_accessor = this.is_vertical ? args.y_accessor : args.x_accessor;\n var label_units = this.is_vertical ? args.yax_units : args.xax_units;\n\n return function(d, i) {\n\n var fmt = MG.time_format(args.utc_time, '%b %e, %Y');\n var num = format_rollover_number(args);\n\n //highlight active bar\n var bar = svg.selectAll('g.mg-barplot .mg-bar')\n .filter(function(d, j) {\n return j === i;\n }).classed('active', true);\n\n if (args.scales.hasOwnProperty('COLOR')) {\n bar.attr('fill', d3.rgb(args.scalefns.colorf(d)).darker());\n } else {\n bar.classed('default-active', true);\n }\n\n //update rollover text\n if (args.show_rollover_text) {\n var mouseover = mg_mouseover_text(args, { svg: svg });\n var row = mouseover.mouseover_row();\n\n if (args.ygroup_accessor) row.text(d[args.ygroup_accessor] + ' ').bold();\n\n row.text(mg_format_x_mouseover(args, d));\n row.text(args.y_accessor + ': ' + d[args.y_accessor]);\n if (args.predictor_accessor || args.baseline_accessor) {\n row = mouseover.mouseover_row();\n\n if (args.predictor_accessor) row.text(mg_format_data_for_mouseover(args, d, null, args.predictor_accessor, false))\n if (args.baseline_accessor) row.text(mg_format_data_for_mouseover(args, d, null, args.baseline_accessor, false))\n }\n }\n if (args.mouseover) {\n args.mouseover(d, i);\n }\n };\n };\n\n this.rolloverOff = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n //reset active bar\n var bar = svg.selectAll('g.mg-barplot .mg-bar.active').classed('active', false);\n\n if (args.scales.hasOwnProperty('COLOR')) {\n bar.attr('fill', args.scalefns.colorf(d));\n } else {\n bar.classed('default-active', false);\n }\n\n //reset active data point text\n svg.select('.mg-active-datapoint')\n .text('');\n\n mg_clear_mouseover_container(svg);\n\n if (args.mouseout) {\n args.mouseout(d, i);\n }\n };\n };\n\n this.rolloverMove = function(args) {\n return function(d, i) {\n if (args.mousemove) {\n args.mousemove(d, i);\n }\n };\n };\n\n this.windowListeners = function() {\n mg_window_listeners(this.args);\n return this;\n };\n\n this.init(args);\n }\n\n var defaults = {\n y_padding_percentage: 0.05, // for categorical scales\n y_outer_padding_percentage: .2, // for categorical scales\n ygroup_padding_percentage: 0, // for categorical scales\n ygroup_outer_padding_percentage: 0, // for categorical scales\n x_padding_percentage: 0.05, // for categorical scales\n x_outer_padding_percentage: .2, // for categorical scales\n xgroup_padding_percentage: 0, // for categorical scales\n xgroup_outer_padding_percentage: 0, // for categorical scales\n buffer: 16,\n y_accessor: 'factor',\n x_accessor: 'value',\n reference_accessor: null,\n comparison_accessor: null,\n secondary_label_accessor: null,\n color_accessor: null,\n color_type: 'category',\n color_domain: null,\n reference_thickness: 1,\n comparison_width: 3,\n comparison_thickness: null,\n legend: false,\n legend_target: null,\n mouseover_align: 'right',\n baseline_accessor: null,\n predictor_accessor: null,\n predictor_proportion: 5,\n show_bar_zero: true,\n binned: true,\n truncate_x_labels: true,\n truncate_y_labels: true\n };\n\n MG.register('bar', barChart, defaults);\n\n}).call(this);\n\n/*\nData Tables\n\nAlong with histograms, bars, lines, and scatters, a simple data table can take you far.\nWe often just want to look at numbers, organized as a table, where columns are variables,\nand rows are data points. Sometimes we want a cell to have a small graphic as the main\ncolumn element, in which case we want small multiples. sometimes we want to\n\nvar table = New data_table(data)\n .target('div#data-table')\n .title({accessor: 'point_name', align: 'left'})\n .description({accessor: 'description'})\n .number({accessor: ''})\n\n*/\n\nMG.data_table = function(args) {\n 'use strict';\n this.args = args;\n this.args.standard_col = { width: 150, font_size: 12, font_weight: 'normal' };\n this.args.columns = [];\n this.formatting_options = [\n ['color', 'color'],\n ['font-weight', 'font_weight'],\n ['font-style', 'font_style'],\n ['font-size', 'font_size']\n ];\n\n this._strip_punctuation = function(s) {\n var punctuationless = s.replace(/[^a-zA-Z0-9 _]+/g, '');\n var finalString = punctuationless.replace(/ +?/g, '');\n return finalString;\n };\n\n this._format_element = function(element, value, args) {\n this.formatting_options.forEach(function(fo) {\n var attr = fo[0];\n var key = fo[1];\n if (args[key]) element.style(attr,\n typeof args[key] === 'string' ||\n typeof args[key] === 'number' ?\n args[key] : args[key](value));\n });\n };\n\n this._add_column = function(_args, arg_type) {\n var standard_column = this.args.standard_col;\n var args = merge_with_defaults(MG.clone(_args), MG.clone(standard_column));\n args.type = arg_type;\n this.args.columns.push(args);\n };\n\n this.target = function() {\n var target = arguments[0];\n this.args.target = target;\n return this;\n };\n\n this.title = function() {\n this._add_column(arguments[0], 'title');\n return this;\n };\n\n this.text = function() {\n this._add_column(arguments[0], 'text');\n return this;\n };\n\n this.bullet = function() {\n /*\n text label\n main value\n comparative measure\n any number of ranges\n\n additional args:\n no title\n xmin, xmax\n format: percentage\n xax_formatter\n */\n return this;\n };\n\n this.sparkline = function() {\n return this;\n };\n\n this.number = function() {\n this._add_column(arguments[0], 'number');\n return this;\n };\n\n this.display = function() {\n var args = this.args;\n\n chart_title(args);\n\n var target = args.target;\n var table = d3.select(target).append('table').classed('mg-data-table', true);\n var colgroup = table.append('colgroup');\n var thead = table.append('thead');\n var tbody = table.append('tbody');\n var this_column;\n var this_title;\n\n var tr, th, td_accessor, td_type, td_value, th_text, td_text, td;\n var col;\n var h;\n\n tr = thead.append('tr');\n\n for (h = 0; h < args.columns.length; h++) {\n var this_col = args.columns[h];\n td_type = this_col.type;\n th_text = this_col.label;\n th_text = th_text === undefined ? '' : th_text;\n th = tr.append('th')\n .style('width', this_col.width)\n .style('text-align', td_type === 'title' ? 'left' : 'right')\n .text(th_text);\n\n if (args.show_tooltips && this_col.description && mg_jquery_exists()) {\n th.append('i')\n .classed('fa', true)\n .classed('fa-question-circle', true)\n .classed('fa-inverse', true);\n\n $(th.node()).popover({\n html: true,\n animation: false,\n content: this_col.description,\n trigger: 'hover',\n placement: 'top',\n container: $(th.node())\n });\n }\n }\n\n for (h = 0; h < args.columns.length; h++) {\n col = colgroup.append('col');\n if (args.columns[h].type === 'number') {\n col.attr('align', 'char').attr('char', '.');\n }\n }\n\n for (var i = 0; i < args.data.length; i++) {\n tr = tbody.append('tr');\n for (var j = 0; j < args.columns.length; j++) {\n this_column = args.columns[j];\n td_accessor = this_column.accessor;\n td_value = td_text = args.data[i][td_accessor];\n td_type = this_column.type;\n\n if (td_type === 'number') {\n //td_text may need to be rounded\n if (this_column.hasOwnProperty('round') && !this_column.hasOwnProperty('format')) {\n // round according to the number value in this_column.round\n td_text = d3.format('0,.' + this_column.round + 'f')(td_text);\n }\n\n if (this_column.hasOwnProperty('value_formatter')) {\n // provide a function that formats the text according to the function this_column.format.\n td_text = this_column.value_formatter(td_text);\n }\n\n if (this_column.hasOwnProperty('format')) {\n // this is a shorthand for percentage formatting, and others if need be.\n // supported: 'percentage', 'count', 'temperature'\n\n if (this_column.round) {\n td_text = Math.round(td_text, this_column.round);\n }\n\n var this_format = this_column.format;\n var formatter;\n\n if (this_format === 'percentage') formatter = d3.format('.0%');\n if (this_format === 'count') formatter = d3.format(',.0f');\n if (this_format === 'temperature') formatter = function(t) {\n return t + '°'; };\n\n td_text = formatter(td_text);\n }\n\n if (this_column.hasOwnProperty('currency')) {\n // this is another shorthand for formatting according to a currency amount, which gets appended to front of number\n td_text = this_column.currency + td_text;\n }\n }\n\n td = tr.append('td')\n .classed('table-' + td_type, true)\n .classed('table-' + td_type + '-' + this._strip_punctuation(td_accessor), true)\n .attr('data-value', td_value)\n .style('width', this_column.width)\n .style('text-align', td_type === 'title' || td_type === 'text' ? 'left' : 'right');\n\n this._format_element(td, td_value, this_column);\n\n if (td_type === 'title') {\n this_title = td.append('div').text(td_text);\n this._format_element(this_title, td_text, this_column);\n\n if (args.columns[j].hasOwnProperty('secondary_accessor')) {\n td.append('div')\n .text(args.data[i][args.columns[j].secondary_accessor])\n .classed(\"secondary-title\", true);\n }\n } else {\n td.text(td_text);\n }\n }\n }\n\n return this;\n };\n\n return this;\n};\n\n(function() {\n 'use strict';\n\n function mg_missing_add_text(svg, args) {\n svg.selectAll('.mg-missing-text').data([args.missing_text])\n .enter().append('text')\n .attr('class', 'mg-missing-text')\n .attr('x', args.width / 2)\n .attr('y', args.height / 2)\n .attr('dy', '.50em')\n .attr('text-anchor', 'middle')\n .text(args.missing_text);\n }\n\n function mg_missing_x_scale(args) {\n args.scales.X = d3.scaleLinear()\n .domain([0, args.data.length])\n .range([mg_get_plot_left(args), mg_get_plot_right(args)]);\n args.scalefns.yf = function(di) {\n return args.scales.Y(di.y); };\n }\n\n function mg_missing_y_scale(args) {\n args.scales.Y = d3.scaleLinear()\n .domain([-2, 2])\n .range([args.height - args.bottom - args.buffer * 2, args.top]);\n args.scalefns.xf = function(di) {\n return args.scales.X(di.x); };\n }\n\n function mg_make_fake_data(args) {\n var data = [];\n for (var x = 1; x <= 50; x++) {\n data.push({ 'x': x, 'y': Math.random() - (x * 0.03) });\n }\n args.data = data;\n }\n\n function mg_add_missing_background_rect(g, args) {\n g.append('svg:rect')\n .classed('mg-missing-background', true)\n .attr('x', args.buffer)\n .attr('y', args.buffer + args.title_y_position * 2)\n .attr('width', args.width - args.buffer * 2)\n .attr('height', args.height - args.buffer * 2 - args.title_y_position * 2)\n .attr('rx', 15)\n .attr('ry', 15);\n }\n\n function mg_missing_add_line(g, args) {\n var line = d3.line()\n .x(args.scalefns.xf)\n .y(args.scalefns.yf)\n .curve(args.interpolate);\n\n g.append('path')\n .attr('class', 'mg-main-line mg-line1-color')\n .attr('d', line(args.data));\n }\n\n function mg_missing_add_area(g, args) {\n var area = d3.area()\n .x(args.scalefns.xf)\n .y0(args.scales.Y.range()[0])\n .y1(args.scalefns.yf)\n .curve(args.interpolate);\n\n g.append('path')\n .attr('class', 'mg-main-area mg-area1-color')\n .attr('d', area(args.data));\n }\n\n function mg_remove_all_children(args) {\n d3.select(args.target).selectAll('svg *').remove();\n }\n\n function mg_missing_remove_legend(args) {\n if (args.legend_target) {\n d3.select(args.legend_target).html('');\n }\n }\n\n function missingData(args) {\n this.init = function(args) {\n this.args = args;\n\n mg_init_compute_width(args);\n mg_init_compute_height(args);\n\n // create svg if one doesn't exist\n\n var container = d3.select(args.target);\n mg_raise_container_error(container, args);\n var svg = container.selectAll('svg');\n mg_remove_svg_if_chart_type_has_changed(svg, args);\n svg = mg_add_svg_if_it_doesnt_exist(svg, args);\n mg_adjust_width_and_height_if_changed(svg, args);\n mg_set_viewbox_for_scaling(svg, args);\n mg_remove_all_children(args);\n\n svg.classed('mg-missing', true);\n mg_missing_remove_legend(args);\n\n chart_title(args);\n\n // are we adding a background placeholder\n if (args.show_missing_background) {\n mg_make_fake_data(args);\n mg_missing_x_scale(args);\n mg_missing_y_scale(args);\n var g = mg_add_g(svg, 'mg-missing-pane');\n\n mg_add_missing_background_rect(g, args);\n mg_missing_add_line(g, args);\n mg_missing_add_area(g, args);\n }\n\n mg_missing_add_text(svg, args);\n\n this.windowListeners();\n\n return this;\n };\n\n this.windowListeners = function() {\n mg_window_listeners(this.args);\n return this;\n };\n\n this.init(args);\n }\n\n var defaults = {\n top: 40, // the size of the top margin\n bottom: 30, // the size of the bottom margin\n right: 10, // size of the right margin\n left: 0, // size of the left margin\n buffer: 8, // the buffer between the actual chart area and the margins\n legend_target: '',\n width: 350,\n height: 220,\n missing_text: 'Data currently missing or unavailable',\n scalefns: {},\n scales: {},\n show_tooltips: true,\n show_missing_background: true\n };\n\n MG.register('missing-data', missingData, defaults);\n}).call(this);\n\nfunction mg_process_scale_ticks(args, axis) {\n var accessor;\n var scale_ticks;\n var max;\n\n if (axis === 'x') {\n accessor = args.x_accessor;\n scale_ticks = args.scales.X.ticks(args.xax_count);\n max = args.processed.max_x;\n } else if (axis === 'y') {\n accessor = args.y_accessor;\n scale_ticks = args.scales.Y.ticks(args.yax_count)\n max = args.processed.max_y;\n }\n\n function log10(val) {\n if (val === 1000) {\n return 3;\n }\n if (val === 1000000) {\n return 7;\n }\n return Math.log(val) / Math.LN10;\n }\n\n if ((axis === 'x' && args.x_scale_type === 'log') || (axis === 'y' && args.y_scale_type === 'log')) {\n // get out only whole logs\n scale_ticks = scale_ticks.filter(function(d) {\n return Math.abs(log10(d)) % 1 < 1e-6 || Math.abs(log10(d)) % 1 > 1 - 1e-6;\n });\n }\n\n // filter out fraction ticks if our data is ints and if xmax > number of generated ticks\n var number_of_ticks = scale_ticks.length;\n\n // is our data object all ints?\n var data_is_int = true;\n args.data.forEach(function(d, i) {\n d.forEach(function(d, i) {\n if (d[accessor] % 1 !== 0) {\n data_is_int = false;\n return false;\n }\n });\n });\n\n if (data_is_int && number_of_ticks > max && args.format === 'count') {\n // remove non-integer ticks\n scale_ticks = scale_ticks.filter(function(d) {\n return d % 1 === 0;\n });\n }\n\n if (axis === 'x') {\n args.processed.x_ticks = scale_ticks;\n } else if (axis === 'y') {\n args.processed.y_ticks = scale_ticks;\n }\n}\n\nfunction raw_data_transformation(args) {\n 'use strict';\n\n // dupe our data so we can modify it without adverse effect\n args.data = MG.clone(args.data);\n\n // we need to account for a few data format cases:\n // #0 {bar1:___, bar2:___} // single object (for, say, bar charts)\n // #1 [{key:__, value:__}, ...] // unnested obj-arrays\n // #2 [[{key:__, value:__}, ...], [{key:__, value:__}, ...]] // nested obj-arrays\n // #3 [[4323, 2343],..] // unnested 2d array\n // #4 [[[4323, 2343],..] , [[4323, 2343],..]] // nested 2d array\n args.single_object = false; // for bar charts.\n args.array_of_objects = false;\n args.array_of_arrays = false;\n args.nested_array_of_arrays = false;\n args.nested_array_of_objects = false;\n\n // is the data object a nested array?\n\n if (is_array_of_arrays(args.data)) {\n args.nested_array_of_objects = args.data.map(function(d) {\n return is_array_of_objects_or_empty(d);\n }); // Case #2\n args.nested_array_of_arrays = args.data.map(function(d) {\n return is_array_of_arrays(d);\n }); // Case #4\n } else {\n args.array_of_objects = is_array_of_objects(args.data); // Case #1\n args.array_of_arrays = is_array_of_arrays(args.data); // Case #3\n }\n\n if (args.chart_type === 'line') {\n if (args.array_of_objects || args.array_of_arrays) {\n args.data = [args.data];\n }\n } else {\n if (!(mg_is_array(args.data[0]))) {\n args.data = [args.data];\n }\n }\n // if the y_accessor is an array, break it up and store the result in args.data\n mg_process_multiple_x_accessors(args);\n mg_process_multiple_y_accessors(args);\n\n // if user supplies keyword in args.color, change to arg.colors.\n // this is so that the API remains fairly sensible and legible.\n if (args.color !== undefined) {\n args.colors = args.color;\n }\n\n // if user has supplied args.colors, and that value is a string, turn it into an array.\n if (args.colors !== null && typeof args.colors === 'string') {\n args.colors = [args.colors];\n }\n\n // sort x-axis data\n if (args.chart_type === 'line' && args.x_sort === true) {\n for (var i = 0; i < args.data.length; i++) {\n args.data[i].sort(function(a, b) {\n return a[args.x_accessor] - b[args.x_accessor];\n });\n }\n }\n\n return this;\n}\n\nfunction mg_process_multiple_accessors(args, which_accessor) {\n // turns an array of accessors into ...\n if (mg_is_array(args[which_accessor])) {\n args.data = args.data.map(function(_d) {\n return args[which_accessor].map(function(ya) {\n return _d.map(function(di) {\n di = MG.clone(di);\n\n if (di[ya] === undefined) {\n return undefined;\n }\n\n di['multiline_' + which_accessor] = di[ya];\n return di;\n }).filter(function(di) {\n return di !== undefined;\n });\n });\n })[0];\n args[which_accessor] = 'multiline_' + which_accessor;\n }\n}\n\nfunction mg_process_multiple_x_accessors(args) {\n mg_process_multiple_accessors(args, 'x_accessor');\n}\n\nfunction mg_process_multiple_y_accessors(args) {\n mg_process_multiple_accessors(args, 'y_accessor');\n}\n\nMG.raw_data_transformation = raw_data_transformation;\n\nfunction process_line(args) {\n 'use strict';\n\n var time_frame;\n\n // do we have a time-series?\n var is_time_series = d3.sum(args.data.map(function(series) {\n return series.length > 0 && mg_is_date(series[0][args.x_accessor]);\n })) > 0;\n\n // are we replacing missing y values with zeros?\n if ((args.missing_is_zero || args.missing_is_hidden) && args.chart_type === 'line' && is_time_series) {\n for (var i = 0; i < args.data.length; i++) {\n // we need to have a dataset of length > 2, so if it's less than that, skip\n if (args.data[i].length <= 1) {\n continue;\n }\n\n var first = args.data[i][0];\n var last = args.data[i][args.data[i].length - 1];\n\n // initialize our new array for storing the processed data\n var processed_data = [];\n\n // we'll be starting from the day after our first date\n var start_date = MG.clone(first[args.x_accessor]).setDate(first[args.x_accessor].getDate() + 1);\n\n // if we've set a max_x, add data points up to there\n var from = (args.min_x) ? args.min_x : start_date;\n var upto = (args.max_x) ? args.max_x : last[args.x_accessor];\n\n time_frame = mg_get_time_frame((upto - from) / 1000);\n\n if (['four-days', 'many-days', 'many-months', 'years', 'default'].indexOf(time_frame) !== -1 && args.missing_is_hidden_accessor === null) {\n for (var d = new Date(from); d <= upto; d.setDate(d.getDate() + 1)) {\n var o = {};\n d.setHours(0, 0, 0, 0);\n\n // add the first date item, we'll be starting from the day after our first date\n if (Date.parse(d) === Date.parse(new Date(start_date))) {\n processed_data.push(MG.clone(args.data[i][0]));\n }\n\n // check to see if we already have this date in our data object\n var existing_o = null;\n args.data[i].forEach(function(val, i) {\n if (Date.parse(val[args.x_accessor]) === Date.parse(new Date(d))) {\n existing_o = val;\n\n return false;\n }\n });\n\n // if we don't have this date in our data object, add it and set it to zero\n if (!existing_o) {\n o[args.x_accessor] = new Date(d);\n o[args.y_accessor] = 0;\n o['_missing'] = true; //we want to distinguish between zero-value and missing observations\n processed_data.push(o);\n }\n\n // if the data point has, say, a 'missing' attribute set or if its\n // y-value is null identify it internally as missing\n else if (existing_o[args.missing_is_hidden_accessor] || existing_o[args.y_accessor] === null) {\n existing_o['_missing'] = true;\n processed_data.push(existing_o);\n }\n\n //otherwise, use the existing object for that date\n else {\n processed_data.push(existing_o);\n }\n }\n } else {\n for (var j = 0; j < args.data[i].length; j += 1) {\n var obj = MG.clone(args.data[i][j]);\n obj['_missing'] = args.data[i][j][args.missing_is_hidden_accessor];\n processed_data.push(obj);\n }\n }\n\n // update our date object\n args.data[i] = processed_data;\n }\n }\n\n return this;\n}\n\nMG.process_line = process_line;\n\nfunction process_histogram(args) {\n 'use strict';\n\n // if args.binned == false, then we need to bin the data appropriately.\n // if args.binned == true, then we need to make sure to compute the relevant computed data.\n // the outcome of either of these should be something in args.computed_data.\n // the histogram plotting function will be looking there for the data to plot.\n\n // we need to compute an array of objects.\n // each object has an x, y, and dx.\n\n // histogram data is always single dimension\n var our_data = args.data[0];\n\n var extracted_data;\n if (args.binned === false) {\n // use d3's built-in layout.histogram functionality to compute what you need.\n\n if (typeof(our_data[0]) === 'object') {\n // we are dealing with an array of objects. Extract the data value of interest.\n extracted_data = our_data\n .map(function(d) {\n return d[args.x_accessor];\n });\n } else if (typeof(our_data[0]) === 'number') {\n // we are dealing with a simple array of numbers. No extraction needed.\n extracted_data = our_data;\n } else {\n console.log('TypeError: expected an array of numbers, found ' + typeof(our_data[0]));\n return;\n }\n\n var hist = d3.histogram();\n if (args.bins) {\n hist.thresholds(args.bins);\n }\n\n var bins = hist(extracted_data);\n args.processed_data = bins.map(function(d) {\n return { 'x': d.x0, 'y': d.length };\n });\n } else {\n // here, we just need to reconstruct the array of objects\n // take the x accessor and y accessor.\n // pull the data as x and y. y is count.\n\n args.processed_data = our_data.map(function(d) {\n return { 'x': d[args.x_accessor], 'y': d[args.y_accessor] };\n });\n\n var this_pt;\n var next_pt;\n\n // we still need to compute the dx component for each data point\n for (var i = 0; i < args.processed_data.length; i++) {\n this_pt = args.processed_data[i];\n if (i === args.processed_data.length - 1) {\n this_pt.dx = args.processed_data[i - 1].dx;\n } else {\n next_pt = args.processed_data[i + 1];\n this_pt.dx = next_pt.x - this_pt.x;\n }\n }\n }\n\n // capture the original data and accessors before replacing args.data\n if (!args.processed) {\n args.processed = {};\n }\n args.processed.original_data = args.data;\n args.processed.original_x_accessor = args.x_accessor;\n args.processed.original_y_accessor = args.y_accessor;\n\n args.data = [args.processed_data];\n args.x_accessor = args.processed_x_accessor;\n args.y_accessor = args.processed_y_accessor;\n\n return this;\n}\n\nMG.process_histogram = process_histogram;\n\n// for use with bar charts, etc.\nfunction process_categorical_variables(args) {\n 'use strict';\n\n var extracted_data, processed_data = {},\n pd = [];\n //var our_data = args.data[0];\n var label_accessor = args.bar_orientation === 'vertical' ? args.x_accessor : args.y_accessor;\n var data_accessor = args.bar_orientation === 'vertical' ? args.y_accessor : args.x_accessor;\n\n return this;\n}\n\nMG.process_categorical_variables = process_categorical_variables;\n\nfunction process_point(args) {\n 'use strict';\n\n var data = args.data[0];\n var x = data.map(function(d) {\n return d[args.x_accessor];\n });\n var y = data.map(function(d) {\n return d[args.y_accessor];\n });\n\n if (args.least_squares) {\n args.ls_line = least_squares(x, y);\n }\n\n return this;\n}\n\nMG.process_point = process_point;\n\nfunction add_ls(args) {\n var svg = mg_get_svg_child_of(args.target);\n var data = args.data[0];\n var min_x = d3.min(data, function(d) {\n return d[args.x_accessor]; });\n var max_x = d3.max(data, function(d) {\n return d[args.x_accessor]; });\n\n d3.select(args.target).selectAll('.mg-least-squares-line').remove();\n\n svg.append('svg:line')\n .attr('x1', args.scales.X(min_x))\n .attr('x2', args.scales.X(max_x))\n .attr('y1', args.scales.Y(args.ls_line.fit(min_x)))\n .attr('y2', args.scales.Y(args.ls_line.fit(max_x)))\n .attr('class', 'mg-least-squares-line');\n}\n\nMG.add_ls = add_ls;\n\nfunction add_lowess(args) {\n var svg = mg_get_svg_child_of(args.target);\n var lowess = args.lowess_line;\n\n var line = d3.svg.line()\n .x(function(d) {\n return args.scales.X(d.x); })\n .y(function(d) {\n return args.scales.Y(d.y); })\n .interpolate(args.interpolate);\n\n svg.append('path')\n .attr('d', line(lowess))\n .attr('class', 'mg-lowess-line');\n}\n\nMG.add_lowess = add_lowess;\n\nfunction lowess_robust(x, y, alpha, inc) {\n // Used http://www.unc.edu/courses/2007spring/biol/145/001/docs/lectures/Oct27.html\n // for the clear explanation of robust lowess.\n\n // calculate the the first pass.\n var _l;\n var r = [];\n var yhat = d3.mean(y);\n var i;\n for (i = 0; i < x.length; i += 1) { r.push(1); }\n _l = _calculate_lowess_fit(x, y, alpha, inc, r);\n var x_proto = _l.x;\n var y_proto = _l.y;\n\n // Now, take the fit, recalculate the weights, and re-run LOWESS using r*w instead of w.\n\n for (i = 0; i < 100; i += 1) {\n r = d3.zip(y_proto, y).map(function(yi) {\n return Math.abs(yi[1] - yi[0]);\n });\n\n var q = d3.quantile(r.sort(), 0.5);\n\n r = r.map(function(ri) {\n return _bisquare_weight(ri / (6 * q));\n });\n\n _l = _calculate_lowess_fit(x, y, alpha, inc, r);\n x_proto = _l.x;\n y_proto = _l.y;\n }\n\n return d3.zip(x_proto, y_proto).map(function(d) {\n var p = {};\n p.x = d[0];\n p.y = d[1];\n return p;\n });\n}\n\nMG.lowess_robust = lowess_robust;\n\nfunction lowess(x, y, alpha, inc) {\n var r = [];\n for (var i = 0; i < x.length; i += 1) { r.push(1); }\n var _l = _calculate_lowess_fit(x, y, alpha, inc, r);\n}\n\nMG.lowess = lowess;\n\nfunction least_squares(x_, y_) {\n var x, y, xi, yi,\n _x = 0,\n _y = 0,\n _xy = 0,\n _xx = 0;\n\n var n = x_.length;\n if (mg_is_date(x_[0])) {\n x = x_.map(function(d) {\n return d.getTime();\n });\n } else {\n x = x_;\n }\n\n if (mg_is_date(y_[0])) {\n y = y_.map(function(d) {\n return d.getTime();\n });\n } else {\n y = y_;\n }\n\n var xhat = d3.mean(x);\n var yhat = d3.mean(y);\n var numerator = 0,\n denominator = 0;\n\n for (var i = 0; i < x.length; i++) {\n xi = x[i];\n yi = y[i];\n numerator += (xi - xhat) * (yi - yhat);\n denominator += (xi - xhat) * (xi - xhat);\n }\n\n var beta = numerator / denominator;\n var x0 = yhat - beta * xhat;\n\n return {\n x0: x0,\n beta: beta,\n fit: function(x) {\n return x0 + x * beta;\n }\n };\n}\n\nMG.least_squares = least_squares;\n\nfunction _pow_weight(u, w) {\n if (u >= 0 && u <= 1) {\n return Math.pow(1 - Math.pow(u, w), w);\n } else {\n return 0;\n }\n}\n\nfunction _bisquare_weight(u) {\n return _pow_weight(u, 2);\n}\n\nfunction _tricube_weight(u) {\n return _pow_weight(u, 3);\n}\n\nfunction _neighborhood_width(x0, xis) {\n return Array.max(xis.map(function(xi) {\n return Math.abs(x0 - xi);\n }));\n}\n\nfunction _manhattan(x1, x2) {\n return Math.abs(x1 - x2);\n}\n\nfunction _weighted_means(wxy) {\n var wsum = d3.sum(wxy.map(function(wxyi) {\n return wxyi.w; }));\n\n return {\n xbar: d3.sum(wxy.map(function(wxyi) {\n return wxyi.w * wxyi.x;\n })) / wsum,\n ybar: d3.sum(wxy.map(function(wxyi) {\n return wxyi.w * wxyi.y;\n })) / wsum\n };\n}\n\nfunction _weighted_beta(wxy, xbar, ybar) {\n var num = d3.sum(wxy.map(function(wxyi) {\n return Math.pow(wxyi.w, 2) * (wxyi.x - xbar) * (wxyi.y - ybar);\n }));\n\n var denom = d3.sum(wxy.map(function(wxyi) {\n return Math.pow(wxyi.w, 2) * Math.pow(wxyi.x - xbar, 2);\n }));\n\n return num / denom;\n}\n\nfunction _weighted_least_squares(wxy) {\n var ybar, xbar, beta_i, x0;\n\n var _wm = _weighted_means(wxy);\n\n xbar = _wm.xbar;\n ybar = _wm.ybar;\n\n var beta = _weighted_beta(wxy, xbar, ybar);\n\n return {\n beta: beta,\n xbar: xbar,\n ybar: ybar,\n x0: ybar - beta * xbar\n\n };\n}\n\nfunction _calculate_lowess_fit(x, y, alpha, inc, residuals) {\n // alpha - smoothing factor. 0 < alpha < 1/\n //\n //\n var k = Math.floor(x.length * alpha);\n\n var sorted_x = x.slice();\n\n sorted_x.sort(function(a, b) {\n if (a < b) {\n return -1; } else if (a > b) {\n return 1; }\n\n return 0;\n });\n\n var x_max = d3.quantile(sorted_x, 0.98);\n var x_min = d3.quantile(sorted_x, 0.02);\n\n var xy = d3.zip(x, y, residuals).sort();\n\n var size = Math.abs(x_max - x_min) / inc;\n\n var smallest = x_min;\n var largest = x_max;\n var x_proto = d3.range(smallest, largest, size);\n\n var xi_neighbors;\n var x_i, beta_i, x0_i, delta_i, xbar, ybar;\n\n // for each prototype, find its fit.\n var y_proto = [];\n\n for (var i = 0; i < x_proto.length; i += 1) {\n x_i = x_proto[i];\n\n // get k closest neighbors.\n xi_neighbors = xy.map(function(xyi) {\n return [\n Math.abs(xyi[0] - x_i),\n xyi[0],\n xyi[1],\n xyi[2]\n ];\n }).sort().slice(0, k);\n\n // Get the largest distance in the neighbor set.\n delta_i = d3.max(xi_neighbors)[0];\n\n // Prepare the weights for mean calculation and WLS.\n\n xi_neighbors = xi_neighbors.map(function(wxy) {\n return {\n w: _tricube_weight(wxy[0] / delta_i) * wxy[3],\n x: wxy[1],\n y: wxy[2]\n };\n });\n\n // Find the weighted least squares, obviously.\n var _output = _weighted_least_squares(xi_neighbors);\n\n x0_i = _output.x0;\n beta_i = _output.beta;\n\n //\n y_proto.push(x0_i + beta_i * x_i);\n }\n\n return { x: x_proto, y: y_proto };\n}\n\nfunction format_rollover_number(args) {\n var num;\n if (args.format === 'count') {\n num = function(d) {\n var is_float = d % 1 !== 0;\n var pf;\n\n if (is_float) {\n pf = d3.format(',.' + args.decimals + 'f');\n } else {\n pf = d3.format(',.0f');\n }\n\n // are we adding units after the value or before?\n if (args.yax_units_append) {\n return pf(d) + args.yax_units;\n } else {\n return args.yax_units + pf(d);\n }\n };\n } else {\n num = function(d_) {\n var fmt_string = (args.decimals ? '.' + args.decimals : '') + '%';\n var pf = d3.format(fmt_string);\n return pf(d_);\n };\n }\n return num;\n}\n\nvar time_rollover_format = function(f, d, accessor, utc) {\n var fd;\n if (typeof f === 'string') {\n fd = MG.time_format(utc, f)(d[accessor]);\n } else if (typeof f === 'function') {\n fd = f(d);\n } else {\n fd = d[accessor];\n }\n return fd;\n}\n\n// define our rollover format for numbers\nvar number_rollover_format = function(f, d, accessor) {\n var fd;\n if (typeof f === 'string') {\n fd = d3.format('s')(d[accessor]);\n } else if (typeof f === 'function') {\n fd = f(d);\n } else {\n fd = d[accessor];\n }\n return fd;\n}\n\nfunction mg_format_y_rollover(args, num, d) {\n var formatted_y;\n if (args.y_mouseover !== null) {\n if (args.aggregate_rollover) {\n formatted_y = number_rollover_format(args.y_mouseover, d, args.y_accessor);\n } else {\n formatted_y = number_rollover_format(args.y_mouseover, d, args.y_accessor);\n }\n } else {\n if (args.time_series) {\n if (args.aggregate_rollover) {\n formatted_y = num(d[args.y_accessor]);\n } else {\n formatted_y = args.yax_units + num(d[args.y_accessor]);\n }\n } else {\n formatted_y = args.y_accessor + ': ' + args.yax_units + num(d[args.y_accessor]);\n }\n }\n return formatted_y;\n}\n\nfunction mg_format_x_rollover(args, fmt, d) {\n var formatted_x;\n if (args.x_mouseover !== null) {\n if (args.time_series) {\n if (args.aggregate_rollover) {\n formatted_x = time_rollover_format(args.x_mouseover, d, 'key', args.utc);\n } else {\n formatted_x = time_rollover_format(args.x_mouseover, d, args.x_accessor, args.utc);\n }\n } else {\n formatted_x = number_rollover_format(args.x_mouseover, d, args.x_accessor);\n }\n } else {\n if (args.time_series) {\n var date;\n\n if (args.aggregate_rollover && args.data.length > 1) {\n date = new Date(d.key);\n } else {\n date = new Date(+d[args.x_accessor]);\n date.setDate(date.getDate());\n }\n\n formatted_x = fmt(date) + ' ';\n } else {\n formatted_x = args.x_accessor + ': ' + d[args.x_accessor] + ' ';\n }\n }\n return formatted_x;\n}\n\nfunction mg_format_data_for_mouseover(args, d, mouseover_fcn, accessor, check_time) {\n var formatted_data, formatter;\n var time_fmt = mg_get_rollover_time_format(args);\n if (typeof d[accessor] === 'string') {\n formatter = function(d) {\n return d;\n }\n } else {\n formatter = format_rollover_number(args);\n }\n\n if (mouseover_fcn !== null) {\n if (check_time) formatted_data = time_rollover_format(mouseover_fcn, d, accessor, args.utc);\n else formatted_data = number_rollover_format(mouseover_fcn, d, accessor);\n\n } else {\n if (check_time) formatted_data = time_fmt(new Date(+d[accessor])) + ' ';\n else formatted_data = (args.time_series ? '' : accessor + ': ') + formatter(d[accessor]) + ' ';\n }\n return formatted_data;\n}\n\nfunction mg_format_number_mouseover(args, d) {\n return mg_format_data_for_mouseover(args, d, args.x_mouseover, args.x_accessor, false);\n}\n\nfunction mg_format_x_mouseover(args, d) {\n return mg_format_data_for_mouseover(args, d, args.x_mouseover, args.x_accessor, args.time_series);\n}\n\nfunction mg_format_y_mouseover(args, d) {\n return mg_format_data_for_mouseover(args, d, args.y_mouseover, args.y_accessor, false);\n}\n\nfunction mg_format_x_aggregate_mouseover(args, d) {\n return mg_format_data_for_mouseover(args, d, args.x_mouseover, 'key', args.time_series)\n}\n\nMG.format_rollover_number = format_rollover_number;\n\n// http://bl.ocks.org/mbostock/3916621\nfunction path_tween(d1, precision) {\n return function() {\n var path0 = this,\n path1 = path0.cloneNode(),\n n0 = path0.getTotalLength() || 0,\n n1 = (path1.setAttribute(\"d\", d1), path1).getTotalLength() || 0;\n\n // Uniform sampling of distance based on specified precision.\n var distances = [0],\n i = 0,\n dt = precision / Math.max(n0, n1);\n while ((i += dt) < 1) distances.push(i);\n distances.push(1);\n\n // Compute point-interpolators at each distance.\n var points = distances.map(function(t) {\n var p0 = path0.getPointAtLength(t * n0),\n p1 = path1.getPointAtLength(t * n1);\n return d3.interpolate([p0.x, p0.y], [p1.x, p1.y]);\n });\n\n return function(t) {\n return t < 1 ? \"M\" + points.map(function(p) {\n return p(t);\n }).join(\"L\") : d1;\n };\n };\n}\n\nMG.path_tween = path_tween;\n\n// influenced by https://bl.ocks.org/tomgp/c99a699587b5c5465228\n\nfunction render_markup_for_server(callback) {\n var virtual_window = MG.virtual_window;\n var virtual_d3 = d3.select(virtual_window.document);\n var target = virtual_window.document.createElement('div');\n\n var original_d3 = global.d3;\n var original_window = global.window;\n var original_document = global.document;\n global.d3 = virtual_d3;\n global.window = virtual_window;\n global.document = virtual_window.document;\n\n var error;\n try {\n callback(target);\n } catch(e) {\n error = e;\n }\n\n global.d3 = original_d3;\n global.window = original_window;\n global.document = original_document;\n\n if (error) {\n throw error;\n }\n\n /* for some reason d3.select parses jsdom elements incorrectly\n * but it works if we wrap the element in a function.\n */\n return virtual_d3.select(function targetFn() {\n return target;\n }).html();\n}\n\nfunction render_markup_for_client(callback) {\n var target = document.createElement('div');\n callback(target);\n return d3.select(target).html();\n}\n\nfunction render_markup(callback) {\n switch(typeof window) {\n case 'undefined':\n return render_markup_for_server(callback);\n default:\n return render_markup_for_client(callback);\n }\n}\n\nfunction init_virtual_window(jsdom, force) {\n if (MG.virtual_window && !force) {\n return;\n }\n\n var doc = jsdom.jsdom({\n html: '',\n features: { QuerySelector: true }\n });\n MG.virtual_window = doc.defaultView;\n}\n\nMG.render_markup = render_markup;\nMG.init_virtual_window = init_virtual_window;\n\n// call this to add a warning icon to a graph and log an error to the console\nfunction error(args) {\n console.error('ERROR : ', args.target, ' : ', args.error);\n\n d3.select(args.target).select('.mg-chart-title')\n .append('tspan')\n .attr('class', 'fa fa-x fa-exclamation-circle mg-warning')\n .attr('dx', '0.3em')\n .text('\\uf06a');\n}\n\nfunction internal_error(args) {\n console.error('INTERNAL ERROR : ', args.target, ' : ', args.internal_error);\n}\n\nMG.error = error;\n\nreturn MG;\n}));\n","import * as d3 from 'd3'\nimport {jQuery as $} from 'jquery'\n\nexport default function AddBrushingCapability (MG) {\n\n /*\n The MIT License (MIT)\n\n Copyright (c) 2015 Dan de Havilland\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n */\n\n MG.line_brushing = {\n set_brush_as_base: function(target) {\n var svg = d3.select(target).select('svg'),\n current,\n history = brushHistory[target];\n\n svg.classed('mg-brushed', false);\n\n if (history) {\n history.brushed = false;\n\n current = history.current;\n history.original = current;\n\n args.min_x = current.min_x;\n args.max_x = current.max_x;\n args.min_y = current.min_y;\n args.max_y = current.max_y;\n\n history.steps = [];\n }\n },\n\n zoom_in: function(target, options) {\n\n },\n\n zoom_out: function(target, options) {\n\n }\n };\n\n /* helpers */\n function get_brush_interval(args) {\n var resolution = args.brushing_interval,\n interval;\n\n if (!resolution) {\n if (args.time_series) {\n resolution = d3.timeDay;\n } else {\n resolution = 1;\n }\n }\n\n // work with N as integer\n if (typeof resolution === 'number') {\n interval = {\n round: function(val) {\n return resolution * Math.round(val / resolution);\n },\n offset: function(val, count) {\n return val + (resolution * count);\n }\n };\n }\n // work with d3.time.[interval]\n else if (typeof resolution.round === 'function'\n && typeof resolution.offset === 'function' ) {\n interval = resolution;\n }\n else {\n console.warn('The `brushing_interval` provided is invalid. It must be either a number or expose both `round` and `offset` methods');\n }\n\n return interval;\n }\n\n function is_within_bounds(datum, args) {\n var x = +datum[args.x_accessor],\n y = +datum[args.y_accessor];\n\n return x >= (+args.processed.min_x || x)\n && x <= (+args.processed.max_x || x)\n && y >= (+args.processed.min_y || y)\n && y <= (+args.processed.max_y || y);\n }\n\n\n /**\n Brushing for line charts\n\n 1. hooks\n */\n\n var brushHistory = {},\n args;\n\n MG.add_hook('global.defaults', function(args) {\n // enable brushing unless it's explicitly disabled\n args.brushing = args.brushing !== false;\n if (args.brushing) {\n args.brushing_history = args.brushing_history !== false;\n args.aggregate_rollover = true;\n }\n });\n\n function brushing() {\n var chartContext = this;\n\n args = this.args;\n\n if (args.brushing === false) {\n return this;\n }\n\n if (!brushHistory[args.target] || !brushHistory[args.target].brushed) {\n brushHistory[args.target] = {\n brushed: false,\n steps: [],\n original: {\n min_x: +args.processed.min_x,\n max_x: +args.processed.max_x,\n min_y: +args.processed.min_y,\n max_y: +args.processed.max_y\n }\n };\n }\n\n var isDragging = false,\n mouseDown = false,\n originX,\n svg = d3.select(args.target).select('svg'),\n body = d3.select('body'),\n rollover = svg.select('.mg-rollover-rect, .mg-voronoi'),\n brushingGroup,\n extentRect;\n\n rollover.classed('mg-brush-container', true);\n\n brushingGroup = rollover.insert('g', '*')\n .classed('mg-brush', true);\n\n extentRect = brushingGroup.append('rect')\n .attr('opacity', 0)\n .attr('y', args.top)\n .attr('height', args.height - args.bottom - args.top - args.buffer)\n .classed('mg-extent', true);\n\n // mousedown, start area selection\n svg.on('mousedown', function() {\n mouseDown = true;\n isDragging = false;\n originX = d3.mouse(this)[0];\n svg.classed('mg-brushed', false);\n svg.classed('mg-brushing-in-progress', true);\n extentRect.attr({\n x: d3.mouse(this)[0],\n opacity: 0,\n width: 0\n });\n });\n\n // mousemove / drag, expand area selection\n svg.on('mousemove', function() {\n if (mouseDown) {\n isDragging = true;\n rollover.classed('mg-brushing', true);\n\n var mouseX = d3.mouse(this)[0],\n newX = Math.min(originX, mouseX),\n width = Math.max(originX, mouseX) - newX;\n\n extentRect\n .attr('x', newX)\n .attr('width', width)\n .attr('opacity', 1);\n }\n });\n\n // mouseup, finish area selection\n svg.on('mouseup', function() {\n mouseDown = false;\n svg.classed('mg-brushing-in-progress', false);\n\n var xScale = args.scales.X,\n yScale = args.scales.Y,\n flatData = [].concat.apply([], args.data),\n boundedData,\n yBounds,\n xBounds,\n extentX0 = +extentRect.attr('x'),\n extentX1 = extentX0 + (+extentRect.attr('width')),\n interval = get_brush_interval(args),\n offset = 0,\n mapDtoX = function(d) { return +d[args.x_accessor]; },\n mapDtoY = function(d) { return +d[args.y_accessor]; };\n\n // if we're zooming in: calculate the domain for x and y axes based on the selected rect\n if (isDragging) {\n isDragging = false;\n\n if (brushHistory[args.target].brushed) {\n brushHistory[args.target].steps.push({\n max_x: args.brushed_max_x || args.processed.max_x,\n min_x: args.brushed_min_x || args.processed.min_x,\n max_y: args.brushed_max_y || args.processed.max_y,\n min_y: args.brushed_min_y || args.processed.min_y\n });\n }\n\n brushHistory[args.target].brushed = true;\n\n boundedData = [];\n // is there at least one data point in the chosen selection? if not, increase the range until there is.\n var iterations = 0;\n while (boundedData.length === 0 && iterations <= flatData.length) {\n\n var xValX0 = xScale.invert(extentX0);\n var xValX1 = xScale.invert(extentX1);\n xValX0 = xValX0 instanceof Date ? xValX0 : interval.round(xValX0);\n xValX1 = xValX1 instanceof Date ? xValX1 : interval.round(xValX1);\n\n args.brushed_min_x = xValX0;\n args.brushed_max_x = Math.max(interval.offset(args.min_x, 1), xValX1);\n\n boundedData = flatData.filter(function(d) {\n var val = d[args.x_accessor];\n return val >= args.brushed_min_x && val <= args.brushed_max_x;\n });\n\n iterations++;\n }\n\n xBounds = d3.extent(boundedData, mapDtoX);\n args.brushed_min_x = +xBounds[0];\n args.brushed_max_x = +xBounds[1];\n xScale.domain(xBounds);\n\n yBounds = d3.extent(boundedData, mapDtoY);\n // add 10% padding on the y axis for better display\n // @TODO: make this an option\n args.brushed_min_y = yBounds[0] * 0.9;\n args.brushed_max_y = yBounds[1] * 1.1;\n yScale.domain(yBounds);\n }\n // zooming out on click, maintaining the step history\n else if (args.brushing_history) {\n if (brushHistory[args.target].brushed) {\n var previousBrush = brushHistory[args.target].steps.pop();\n if (previousBrush) {\n args.brushed_max_x = previousBrush.max_x;\n args.brushed_min_x = previousBrush.min_x;\n args.brushed_max_y = previousBrush.max_y;\n args.brushed_min_y = previousBrush.min_y;\n\n xBounds = [args.brushed_min_x, args.brushed_max_x];\n yBounds = [args.brushed_min_y, args.brushed_max_y];\n xScale.domain(xBounds);\n yScale.domain(yBounds);\n } else {\n brushHistory[args.target].brushed = false;\n\n delete args.brushed_max_x;\n delete args.brushed_min_x;\n delete args.brushed_max_y;\n delete args.brushed_min_y;\n\n xBounds = [\n brushHistory[args.target].original.min_x,\n brushHistory[args.target].original.max_x\n ];\n\n yBounds = [\n brushHistory[args.target].original.min_y,\n brushHistory[args.target].original.max_y\n ];\n }\n }\n }\n\n // has anything changed?\n if (xBounds && yBounds) {\n if (xBounds[0] < xBounds[1]) {\n // trigger the brushing callback\n\n var step = {\n min_x: xBounds[0],\n max_x: xBounds[1],\n min_y: yBounds[0],\n max_y: yBounds[1]\n };\n\n brushHistory[args.target].current = step;\n\n if (args.after_brushing) {\n args.after_brushing.apply(this, [step]);\n }\n }\n\n // redraw the chart\n if (!args.brushing_manual_redraw) {\n MG.data_graphic(args);\n }\n }\n });\n\n return this;\n }\n\n MG.add_hook('line.after_init', function(lineChart) {\n brushing.apply(lineChart);\n });\n\n function processXAxis(args, min_x, max_x) {\n if (args.brushing) {\n args.processed.min_x = args.brushed_min_x ? Math.max(args.brushed_min_x, min_x) : min_x;\n args.processed.max_x = args.brushed_max_x ? Math.min(args.brushed_max_x, max_x) : max_x;\n }\n }\n\n MG.add_hook('x_axis.process_min_max', processXAxis);\n\n function processYAxis(args) {\n if (args.brushing && (args.brushed_min_y || args.brushed_max_y)) {\n args.processed.min_y = args.brushed_min_y;\n args.processed.max_y = args.brushed_max_y;\n }\n }\n\n MG.add_hook('y_axis.process_min_max', processYAxis);\n\n function afterRollover(args) {\n if (args.brushing_history && brushHistory[args.target] && brushHistory[args.target].brushed) {\n var svg = d3.select(args.target).select('svg');\n svg.classed('mg-brushed', true);\n }\n }\n\n MG.add_hook('line.after_rollover', afterRollover);\n\n return ;\n}"]}
\ No newline at end of file
+{"version":3,"sources":["app/Augur.js","app/AugurAPI.js","app/AugurStats.js","app/components/BaseRepoActivityCard.vue","app/components/BaseRepoEcosystemCard.vue","app/components/ComparedRepoActivityCard.vue","app/components/AugurApp.vue","app/components/AugurCards.vue","app/components/AugurHeader.vue","app/components/SidebarControls.vue","app/components/charts/DependencyOverview.vue","app/components/charts/EmptyChart.vue","app/components/charts/LineChart.vue","app/include/kube/kube.js","app/include/metricsgraphics.js","app/include/mg_line_brushing.js"],"names":["Augur","queryString","require","window","jQuery","Vue","Vuex","AugurAPI","default","AugurRepos","AugurStats","$","AugurApp","use","augur","Store","state","baseRepo","comparedRepos","trailingAverage","startDate","Date","endDate","compare","byDate","mutations","setBaseRepo","payload","repo","Repo","url","toString","keepCompared","title","owner","name","history","pushState","addComparedRepo","push","location","search","setDates","parseInt","setCompare","reset","store","$mount","parsed","parse","arrayFormat","$store","commit","replace","comparedTo","forEach","hostURL","version","_version","_host","hostname","__cache","repoName","splitURL","split","length","Endpoint","endpoint","self","params","callback","btoa","created_at","now","Promise","resolve","reject","JSON","data","get","then","stringify","Timeseries","func","relativeTo","baselineRepo","commits","forks","issues","pulls","stars","tags","downloads","uniqueCommitters","pullsAcceptanceRate","issuesResponseTime","contributors","contributions","committerLocations","communityAge","linkingWebsites","busFactor","dependents","dependencies","dependencyStats","earliest","latest","Array","isArray","map","datum","convertDates","d","date","filter","key","convertKey","EARLIEST","value","ary","reduce","a","e","mean","flat","averageArray","distances","Math","sqrt","stddev","standardDeviation","variance","windowSizeInDays","rolling","averageWindow","i","lastFound","after","before","setDate","getDate","iter","average","slice","shift","baseline","baseData","compareData","config","undefined","period","base","rollingAverage","Object","keys","smaller","larger","result","toPush","x","stats","describe","newObj","zscore","from","arguments","Error","fn","jquery","Function","prototype","inherits","parent","F","f","prop","super","Kube","element","options","$element","opts","extend","defaults","namespace","$target","target","getInstance","hasTarget","type","args","call","splice","_fireCallback","_data","callbacks","isFunction","apply","events","eventNamespace","len","handler","Plugin","create","classname","pluginname","toLowerCase","method","val","each","$this","methodVal","error","autoload","arr","s","trim","join","autoloadQueue","startAutoload","MutationObserver","observer","mutation","newNodes","addedNodes","nodeType","startAutoloadOnce","observe","document","subtree","childList","$nodes","not","$el","indexOf","attr","watch","on","Animation","effect","completeCallback","prefixes","queue","start","isSlideEffect","setElementHeight","addToQueue","clean","animate","height","removeElementHeight","css","isHideableEffect","effects","inArray","isToggleEffect","storeHideClasses","hasClass","revertHideClasses","addClass","removeData","removeHideClass","removeClass","makeSimpleEffects","_callback","complete","proxy","makeComplete","make","event","one","off","animation","Detect","isMobile","test","navigator","userAgent","isDesktop","isMobileScreen","width","isTabletScreen","isDesktopScreen","FormData","app","set","formdata","appendForms","appendFields","$fields","str","append","$forms","formsData","serializeArray","serialize","Response","obj","item","parseItem","html","stripslashes","top","href","notify","Utils","disableBodyScroll","$body","windowWidth","innerWidth","documentElementRect","documentElement","getBoundingClientRect","right","abs","left","isOverflowing","body","clientWidth","scrollbarWidth","measureScrollbar","scrollDiv","createElement","className","offsetWidth","removeChild","enableBodyScroll","Message","closeSelector","closeEvent","animationOpen","animationClose","$close","find","close","stop","open","preventDefault","isOpened","onOpened","onClosed","Sticky","offset","offsetTop","getOffsetTop","load","scroll","isFix","fixed","unfixed","scrollTop","Toggleme","toggleEvent","text","toggle","revertText","storeText","setTimeout","replaceText","Offcanvas","direction","clickOutside","utils","detect","buildTargetWidth","buildAnimationDirection","getCloseLink","closeAll","pushBody","$elms","isTag","tagName","closest","pullBody","handleKeyboard","which","properties","Collapse","active","toggleClass","boxClass","hashes","currentHash","currentItem","$items","getItems","loadItems","$boxes","getBoxes","setActiveItem","el","getItem","hash","getItemBy","addActive","$box","$caret","$parent","removeActive","openAll","num","eq","Dropdown","caretUp","buildClose","buildCaret","buildMobileAnimation","disableEvents","getCaret","buildCaretPosition","innerHeight","toggleCaretOpen","toggleCaretClose","setPosition","shouldNotBeClosed","enableEvents","isNavigationFixed","getPlacement","getOffset","position","getPosition","coords","placement","leftFix","outerHeight","Tabs","equals","live","buildLiveTabs","tabsCollection","hashesCollection","$tabs","getTabs","getLocationHash","setItemHeight","toArray","collectItem","$tab","$layers","$liveTabsList","buildLiveItem","tab","$li","$a","index","getLiveItemId","getLiveItemTitle","first","next","fetchElement","prev","pushStateOpen","pushStateClose","isHash","minHeight","getItemMaxHeight","max","h","modalcurrent","modalwindow","show","modal","Modal","header","maxHeight","overlay","buildModal","$modal","$header","buildOverlay","$overlay","prepend","buildHeader","buildContent","findActions","resize","handleEnter","getData","ajax","getTime","cache","success","buildWidth","bottom","percent","match","buildPosition","windowHeight","buildHeight","padding","margin","modalHeight","handleEscape","setHeader","setContent","content","setWidth","getModal","getBody","getHeader","root","factory","define","amd","exports","module","MG","d3","global","convert","accessor","time_format","parse_time","timeParse","number","Number","utc","specifier","utcFormat","timeFormat","mg_jquery_exists","mg_get_rollover_time_format","fmt","processed","x_time_frame","utc_time","mg_data_in_plot_bounds","x_accessor","min_x","max_x","y_accessor","min_y","max_y","is_array","thing","is_function","is_empty_array","is_object","is_array_of_arrays","all_elements","sum","is_array_of_objects","is_array_of_objects_or_empty","pluck","count_array_elements","b","mg_get_bottom","mg_get_plot_bottom","buffer","mg_get_top","mg_get_plot_top","mg_get_left","mg_get_plot_left","mg_get_right","mg_get_plot_right","mg_exit_and_remove","elem","exit","remove","mg_selectAll_and_remove","svg","cl","selectAll","mg_add_g","classed","mg_remove_element","select","mg_make_rug","rug_class","mg_get_svg_child_of","all_data","mg_flatten_array","rug","enter","mg_add_color_accessor_to_rug","rug_mono_class","color_accessor","scalefns","colorf","mg_rotate_labels","labels","rotation_degree","dy","transform","mg_elements_are_overlapping","node","mg_is_horizontally_overlapping","mg_prevent_horizontal_overlap","newY","mg_prevent_vertical_overlap","sort","reverse","overlap_amount","label_i","label_j","j","mg_is_vertically_overlapping","sibling","element_bbox","sibling_bbox","mg_is_horiz_overlap","mg_infer_type","ns","testPoint","selector_or_node","flat_data","concat","mg_next_id","_next_elem_id","mg_target_ref","mg_normalize","HTMLElement","target_ref","getAttribute","setAttribute","console","warn","string","get_pixel_dimension","dimension","style","get_width","get_height","isNumeric","n","isNaN","parseFloat","isFinite","iterator","context","breaker","k","merge_with_defaults","source","number_of_values","values","has_values_below","has_too_many_zeros","zero_count","mg_is_date","mg_is_object","mg_is_array","mg_is_function","clone","copy","setTime","hasOwnProperty","arr_diff","seen","diff","warn_deprecation","message","untilVersion","trace","truncate_text","textObj","textString","bbox","textContent","getBBox","wrap_text","token","tspanAttrs","words","word","line","lineNumber","lineHeight","y","tspan","pop","getComputedTextLength","register","chartType","descriptor","charts","_hooks","add_hook","hooks","already_registered","hook","call_hook","constructor","globals","deprecations","rollover_callback","replacement","rollout_callback","x_rollover_format","y_rollover_format","show_years","xax_start_at_min","interpolate_tension","link","data_graphic","missing_is_zero","missing_is_hidden","missing_is_hidden_accessor","legend","legend_target","animate_on_load","title_y_position","center_title_full_width","full_width","full_height","small_height_threshold","small_width_threshold","xax_count","xax_tick_length","axes_not_compact","yax_count","yax_tick_length","x_extended_ticks","y_extended_ticks","y_scale_type","min_y_from_data","point_size","xax_units","x_label","x_sort","x_axis","y_axis","x_axis_position","y_axis_position","x_axis_type","y_axis_type","ygroup_accessor","xgroup_accessor","y_padding_percentage","y_outer_padding_percentage","ygroup_padding_percentage","ygroup_outer_padding_percentage","x_padding_percentage","x_outer_padding_percentage","xgroup_padding_percentage","xgroup_outer_padding_percentage","y_categorical_show_guides","x_categorical_show_guide","rotate_x_labels","rotate_y_labels","y_label","yax_units","yax_units_append","x_rug","y_rug","mouseover_align","x_mouseover","y_mouseover","transition_on_update","mouseover","click","show_rollover_text","show_confidence_band","xax_format","area","chart_type","decimals","format","inflator","linked","linked_format","list","baselines","markers","scales","european_clock","show_year_markers","show_secondary_x_label","interpolate","curveCatmullRom","alpha","custom_line_color_map","colors","max_data_size","aggregate_rollover","show_tooltips","selected_chart","deprecation","warned","Tooltip","enabled","timeout","hoverState","inState","init","VERSION","TRANSITION_DURATION","DEFAULTS","selector","template","trigger","delay","container","viewport","getOptions","$viewport","hover","focus","triggers","eventIn","eventOut","leave","_options","fixTitle","getDefaults","hide","getDelegateOptions","currentTarget","Event","tip","clearTimeout","isInStateTrue","hasContent","inDom","contains","ownerDocument","isDefaultPrevented","that","$tip","tipId","getUID","autoToken","autoPlace","detach","display","appendTo","insertAfter","pos","actualWidth","actualHeight","offsetHeight","orgPlacement","viewportDim","calculatedOffset","getCalculatedOffset","applyPlacement","prevHoverState","support","transition","emulateTransitionEnd","marginTop","marginLeft","setOffset","using","props","round","delta","getViewportAdjustedDelta","isVertical","arrowDelta","arrowOffsetPosition","replaceArrow","arrow","getTitle","removeAttr","$e","isBody","elRect","elOffset","outerDims","viewportPadding","viewportDimensions","topEdgeOffset","bottomEdgeOffset","leftEdgeOffset","rightEdgeOffset","o","prefix","random","getElementById","$arrow","enable","disable","toggleEnabled","destroy","option","old","tooltip","Constructor","noConflict","Popover","getContent","children","end","popover","chart_title","chartTitle","insert","description","$chartTitle","mg_add_scale_function","scalefcn_name","scale","inflation","di","mg_position","mg_cat_position","MGScale","scaleArgs","use_inflator","zero_bottom","scaleType","_namespace","namespace_accessor_name","scale_name","toUpperCase","scalefn_name","scaleName","inflateDomain","tf","zeroBottom","numericalDomainFromData","other_flat_data_arrays","illustrative_data","is_time_series","mg_min_max_numerical","time_scale","scaleUtc","scaleTime","scaleLog","scaleLinear","domain","categoricalDomain","scaleOrdinal","categoricalDomainFromData","categoricalVariables","scaleBand","numericalRange","range","categoricalRangeBands","halfway","paddingPercentage","outerPaddingPercentage","paddingInner","paddingOuter","bandwidth","categoricalRange","categoricalColorRange","schemeCategory20","schemeCategory10","clamp","yn","scale_factory","additional_data_arrays","dp","extents","extent","min_val","max_val","mg_force_xax_count_to_be_two","mg_categorical_group_color_scale","mg_add_color_categorical_scale","color","mg_get_categorical_domain","mg_get_color_domain","color_domain","color_type","mg_get_color_range","color_range","processScaleTicks","axis","scale_ticks","ticks","log10","log","LN10","number_of_ticks","data_is_int","rugPlacement","axisArgs","coordinates","x1","x2","rug_buffer_size","y1","y2","rimPlacement","tick_length","toFixed","labelPlacement","tickLength","dx","textAnchor","mg_compute_yax_format","mg_default_xax_format","selectXaxFormat","c","mg_default_bar_xax_format","secondaryLabels","g","time_series","mg_get_yformat_and_secondary_time_function","addSecondaryLabelElements","timeframe","yformat","secondary","time_frame","secondary_function","years","first_tick","X","yg","yearMarkerLine","yearMarkerText","textFcn","xAxisTextElement","addNumericalLabels","_d","addTickLines","ticksClass","extendedTicksClass","extendedTicks","initializeAxisRim","rim","initializeRug","rug_positions","categoricalLabelPlacement","group","groupScale","cat","categoricalLabels","nsClass","groupAccessor","group_g","groups","String","rotateLabels","categoricalGuides","scalef","groupf","alreadyPlotted","grs","last","x11","x21","y11","y21","x12","x22","y12","y22","zeroLine","mgDrawAxis","categorical","numerical","axisName","axisClass","label","show_bar_zero","mg_bar_add_zero_line","axisFactory","t","draw","axis_factory","yf","mg_change_y_extents_for_bars","my","min","trio","baseline_accessor","predictor_accessor","yax_format","pf","d_","r","Y","categorical_groups","YGROUP","set_min_max_y","buff","mg_y_domain_range","mg_define_y_scales","Y_axis","mg_add_y_label","mg_add_y_axis_rim","y_ticks","y1scale","y2scale","mg_add_y_axis_tick_lines","mg_add_y_axis_tick_labels","mg_process_scale_ticks","mg_add_categorical_labels","mg_add_group_label","mg_add_graphic_labels","mg_draw_group_lines","ygroup_height","mg_y_categorical_show_guides","ygroupf","y_axis_categorical","xf","mg_add_processed_object","mg_select_xax_format","mg_add_x_ticks","mg_add_x_tick_labels","mg_add_x_label","x_axis_categorical","additional_buffer","mg_add_categorical_scale","categorical_variables","mg_add_x_axis_categorical_labels","bar_outer_padding_percentage","truncate_x_labels","idx","mg_point_add_color_scale","mg_point_add_size_scale","min_size","max_size","size_domain","size_range","size_accessor","mg_get_size_domain","mg_get_size_range","size","x_label_nudge_x","mg_get_time_frame","mg_milisec_diff","mg_sec_diff","mg_day_diff","mg_four_days","mg_many_days","mg_many_months","mg_years","mg_get_time_format","main_time_format","mg_process_time_format","main_x_time_format","original_data","flattened","test_point_x","original_x_accessor","is_float","mg_add_x_axis_rim","mg_add_x_axis_tick_lines","x_ticks","last_i","mg_add_primary_x_axis_label","mg_add_secondary_x_axis_label","mg_add_secondary_x_axis_elements","timeDays","timeYears","mg_add_year_marker_line","mg_add_year_marker_text","mg_min_max_x_for_nonbars","mx","extent_x","mg_min_max_x_for_bars","mg_min_max_x_for_dates","yesterday","tomorrow","mg_min_max_x_for_numbers","mg_min_max_x_for_strings","mg_sort_through_data_type_and_set_x_min_max_accordingly","mg_merge_args_with_defaults","mg_is_time_series","first_elem","mg_init_compute_width","svg_width","mg_categorical_calculate_height","mg_init_compute_height","svg_height","mg_remove_svg_if_chart_type_has_changed","empty","mg_add_svg_if_it_doesnt_exist","mg_add_clip_path_for_plot_area","mg_adjust_width_and_height_if_changed","mg_set_viewbox_for_scaling","mg_remove_missing_classes_and_text","mg_remove_outdated_lines","nodes","array_full_series","lines_to_remove","num_of_new","num_of_existing","mg_raise_container_error","categoricalInitialization","mg_categorical_count_number_of_groups","mg_categorical_count_number_of_lanes","mg_categorical_calculate_group_length","mg_categorical_calculate_bar_thickness","accessor_string","total_bars","group_bars","bars_per_group","groupHeight","gh","step","bar_thickness","groupContribution","marginContribution","mg_barchart_extrapolate_group_and_thickness_from_height","mg_return_label","mg_remove_existing_markers","mg_in_range","mg_x_position","mg_x_position_fixed","_mg_x_pos","mg_y_position_fixed","_mg_y_pos","mg_place_annotations","checker","class_name","line_fcn","text_fcn","mg_place_markers","mg_place_marker_lines","mg_place_marker_text","mg_place_baselines","mg_place_baseline_lines","mg_place_baseline_text","gm","x_pos_fixed","lineclass","textclass","gb","y_pos","mg_clear_mouseover_container","mg_setup_mouseover_container","text_anchor","mouseover_x","active_datapoint","active_datapoint_y_nudge","y_position","yPos","mg_mouseover_tspan","bold","font_size","pts","mg_reset_text_container","textContainer","mg_mouseover_row","row_number","rargs","rrr","mg_mouseover_text","text_container","mouseover_row","MG_WindowResizeTracker","targets","Observer","WebKitMutationObserver","window_listener","parentNode","aspect","newWidth","remove_target","removeEventListener","add_target","addEventListener","targetNode","some","removedNodes","disconnect","mg_window_resize_tracker","mg_window_listeners","mg_if_aspect_ratio_resize_svg","dropdown","backdrop","is","getParent","isActive","clearMenus","relatedTarget","keydown","stopPropagation","desc","button_layout","feature_set","public_name","sorters","manual","manual_map","manual_callback","_strip_punctuation","punctuationless","finalString","manual_button","feature","button","features","feat","mapDtoF","dropdownLiAClick","manual_feature","mg_line_color_text","line_id","mg_line_graph_generators","plot","mg_add_line_generator","mg_add_area_generator","mg_add_flat_line_generator","mg_add_confidence_band_generator","existing_band","confidence_area","defined","y0","l","u","curve","flat_line","data_median","mg_add_confidence_band","which_line","confidenceBand","duration","mg_add_area","areas","display_area","appendChild","update_transition_duration","mg_default_color_for_path","this_path","mg_color_line","mg_add_line_element","median","mg_add_line","existing_line","lineTransition","attrTween","path_tween","mg_add_legend_element","this_legend","legend_text","anchor_point","anchor_orientation","legend_group","mg_plot_legend_if_legend_target","mg_add_legend_group","mg_remove_existing_line_rollover_elements","mg_add_rollover_circle","circle","mg_set_unique_line_id_for_each_series","mg_nest_data_for_voronoi","merge","mg_line_class_string","class_string","v","formatter","id","mg_add_voronoi_rollover","rollover_on","rollover_off","rollover_move","voronoi","polygons","mg_configure_voronoi_rollover","nest_data_for_aggregate_rollover","data_nested","nest","entries","entry","mg_add_aggregate_rollover","line_classes","lc","mg_line_class","mg_line_color_class","mg_rollover_id_class","mg_rollover_format_id","mg_configure_aggregate_rollover","mg_configure_singleton_rollover","mg_add_single_line_rollover","mg_is_singleton","rect","rect_first","__data__","mg_is_standard_multiline","mg_is_aggregated_rollover","mg_draw_all_line_elements","mg_remove_dangling_bands","this_data","mg_line_main_plot","use_data_y_min","continueWithDefault","mg_line_rollover_setup","graph","rolloverOn","rolloverOff","rolloverMove","mg_update_rollover_circle","mg_update_aggregate_rollover_circle","mg_update_generic_rollover_circle","mg_trigger_linked_mouseovers","mg_trigger_linked_mouseouts","datums","mg_remove_active_data_points_for_aggregate_rollover","mg_remove_active_data_points_for_generic_rollover","mg_remove_active_text","lineChart","internal_error","raw_data_transformation","process_line","mainPlot","rollover","windowListeners","row","mg_format_x_aggregate_mouseover","mg_format_x_mouseover","mg_format_y_mouseover","mouseout","mousemove","histogram","process_histogram","bar","bar_margin","format_rollover_number","mo","binned","bins","processed_x_accessor","processed_y_accessor","processed_dx_accessor","point_mouseover","mg_color_point_mouseover","mg_filter_out_plot_bounds","new_data","pointChart","process_point","xMaker","yMaker","xgroup_height","XGROUP","xgroupf","xoutf","youtf","colorScale","least_squares","add_ls","sizef","paths","active_point_size_increase","update","x_categorical_show_guides","ls","lowess","label_accessor","scaffold","mg_targeted_legend","div","orientation","outer_span","COLOR","legend_on_graph","lineCount","sub_container","barChart","ycolor_accessor","xcolor_accessor","barplot","fresh_render","bars","predictor_bars","pp","pp0","baseline_marks","perform_load_animation","should_transition","transition_duration","appropriate_size","length_type","width_type","length_coord","width_coord","length_scalefn","width_scalefn","length_scale","width_scale","length_accessor","width_accessor","length_coord_map","width_coord_map","length_map","width_map","reference_length_map","reference_length_coord_fn","reference_accessor","w","reference_data","reference_bars","reference_thickness","comparison_accessor","comparison_thickness","comparison_data","comparison_marks","comparison_width","rollover_x","rollover_anchor","rollover_align","is_vertical","data_accessor","label_units","rgb","darker","mg_format_data_for_mouseover","secondary_label_accessor","predictor_proportion","truncate_y_labels","data_table","standard_col","font_weight","columns","formatting_options","_format_element","fo","_add_column","_args","arg_type","standard_column","bullet","sparkline","table","colgroup","thead","tbody","this_column","this_title","tr","th","td_accessor","td_type","td_value","th_text","td_text","td","col","this_col","value_formatter","this_format","currency","secondary_accessor","mg_missing_add_text","missing_text","mg_missing_x_scale","mg_missing_y_scale","mg_make_fake_data","mg_add_missing_background_rect","mg_missing_add_line","mg_missing_add_area","mg_remove_all_children","mg_missing_remove_legend","missingData","show_missing_background","x_scale_type","single_object","array_of_objects","array_of_arrays","nested_array_of_arrays","nested_array_of_objects","mg_process_multiple_x_accessors","mg_process_multiple_y_accessors","mg_process_multiple_accessors","which_accessor","ya","series","processed_data","start_date","upto","setHours","existing_o","our_data","extracted_data","hist","thresholds","x0","this_pt","next_pt","original_y_accessor","process_categorical_variables","pd","bar_orientation","ls_line","fit","add_lowess","lowess_line","lowess_robust","inc","_l","yhat","_calculate_lowess_fit","x_proto","y_proto","zip","yi","q","quantile","ri","_bisquare_weight","p","x_","y_","xi","_x","_y","_xy","_xx","xhat","numerator","denominator","beta","_pow_weight","pow","_tricube_weight","_neighborhood_width","xis","_manhattan","_weighted_means","wxy","wsum","wxyi","xbar","ybar","_weighted_beta","denom","_weighted_least_squares","beta_i","_wm","residuals","floor","sorted_x","x_max","x_min","xy","smallest","largest","xi_neighbors","x_i","x0_i","delta_i","xyi","_output","fmt_string","time_rollover_format","fd","number_rollover_format","mg_format_y_rollover","formatted_y","mg_format_x_rollover","formatted_x","mouseover_fcn","check_time","formatted_data","time_fmt","mg_format_number_mouseover","d1","precision","path0","path1","cloneNode","n0","getTotalLength","n1","dt","points","p0","getPointAtLength","p1","render_markup_for_server","virtual_window","virtual_d3","original_d3","original_window","original_document","targetFn","render_markup_for_client","render_markup","init_virtual_window","jsdom","force","doc","QuerySelector","defaultView","AddBrushingCapability","line_brushing","set_brush_as_base","current","brushHistory","brushed","original","steps","zoom_in","zoom_out","get_brush_interval","resolution","brushing_interval","interval","timeDay","count","is_within_bounds","brushing","brushing_history","chartContext","isDragging","mouseDown","originX","brushingGroup","extentRect","mouse","opacity","mouseX","newX","xScale","yScale","flatData","boundedData","yBounds","xBounds","extentX0","extentX1","mapDtoX","mapDtoY","brushed_max_x","brushed_min_x","brushed_max_y","brushed_min_y","iterations","xValX0","invert","xValX1","previousBrush","after_brushing","brushing_manual_redraw","processXAxis","processYAxis","afterRollover"],"mappings":"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A;AACA;AACA;AACA;AACA;AAlCA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAvCA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAnCA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAvCA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3DA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3BA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAzDA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAhEA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3CA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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","file":"public/static/app.js","sourcesContent":["const queryString = require('query-string')\n\nexport default function Augur () {\n window.jQuery = require('jquery')\n window.Vue = require('vue')\n window.Vuex = require('vuex')\n let AugurAPI = require('AugurAPI').default\n window.AugurAPI = new AugurAPI()\n window.AugurRepos = {}\n window.AugurStats = require('AugurStats').default\n window.$ = window.jQuery\n\n let AugurApp = require('./components/AugurApp')\n\n Vue.use(Vuex)\n\n window.augur = new Vuex.Store({\n state: {\n baseRepo: null,\n comparedRepos: [],\n trailingAverage: 180,\n startDate: new Date(\"1 January 2005\"),\n endDate: new Date(),\n compare: \"each\",\n byDate: false,\n },\n mutations: {\n setBaseRepo (state, payload) {\n let repo = window.AugurAPI.Repo(payload.url)\n if (!window.AugurRepos[repo.toString()]) {\n window.AugurRepos[repo.toString()] = repo\n }\n state.baseRepo = repo.toString()\n if (!payload.keepCompared) {\n state.comparedRepos = []\n }\n let title = repo.owner + '/' + repo.name + '- Augur' \n let queryString = '?repo=' + repo.owner + '+' + repo.name\n window.history.pushState(null, title, queryString)\n },\n addComparedRepo (state, payload) {\n let repo = window.AugurAPI.Repo(payload.url)\n if (!window.AugurRepos[repo.toString()]) {\n window.AugurRepos[repo.toString()] = repo\n }\n state.comparedRepos.push(repo.toString())\n let title = 'Augur' \n let queryString = window.location.search + '&comparedTo[]=' + repo.owner + '+' + repo.name\n window.history.pushState(null, title, queryString)\n },\n setDates (state, payload) {\n if (payload.startDate) {\n state.startDate = new Date(payload.startDate)\n }\n if (payload.endDate) {\n state.endDate = new Date(payload.endDate)\n }\n if (payload.trailingAverage) {\n state.trailingAverage = parseInt(payload.trailingAverage, 10)\n }\n },\n setCompare (state, payload) {\n state.compare = payload.compare\n },\n reset (state) {\n state = {\n baseRepo: null,\n comparedRepos: [],\n trailingAverage: 180,\n startDate: new Date(\"1 January 2005\"),\n endDate: new Date(),\n compare: \"each\",\n byDate: false,\n }\n window.history.pushState(null, 'Augur', '/')\n } // end reset\n } // end mutations\n })\n\n AugurApp.store = window.augur\n window.AugurApp = new Vue(AugurApp).$mount('#app')\n\n // Load state from query string\n let parsed = queryString.parse(location.search, { arrayFormat: 'bracket' })\n if (parsed.repo) {\n window.AugurApp.$store.commit('setBaseRepo', { url: parsed.repo.replace(' ', '/') })\n }\n if (parsed.comparedTo) {\n parsed.comparedTo.forEach((repo) => {\n window.AugurApp.$store.commit('addComparedRepo', { url: repo.replace(' ', '/') })\n })\n }\n\n}","var $ = require('jquery')\n\nexport default class AugurAPI {\n constructor(hostURL, version) {\n this._version = version || 'unstable'\n this._host = hostURL || 'http://' + window.location.hostname + ':5000/'\n this.__cache = {}\n }\n\n Repo(owner, repoName) {\n\n if (repoName) {\n var repo = {owner: owner, name: repoName}\n } else if (owner) {\n let splitURL = owner.split('/')\n if (splitURL.length < 3) {\n var repo = {owner: splitURL[0], name: splitURL[1]}\n } else {\n var repo = {owner: splitURL[3], name: splitURL[4]}\n }\n }\n\n repo.toString = () => { return repo.owner + '/' + repo.name }\n\n var Endpoint = (endpoint) => {\n var self = this;\n var url = this._host + this._version + '/' + repo.owner + '/' + repo.name + '/' + endpoint;\n return function (params, callback) {\n if (self.__cache[btoa(url)]) {\n if (self.__cache[btoa(url)].created_at > Date.now() - 1000 * 60) {\n return new Promise((resolve, reject) => {\n resolve(JSON.parse(self.__cache[btoa(url)].data))\n })\n }\n }\n return $.get(url, params, callback).then((data) => {\n self.__cache[btoa(url)] = {\n created_at: Date.now(),\n data: JSON.stringify(data)\n }\n if (typeof callback === 'function') {\n callback(data)\n }\n return new Promise((resolve, reject) => {\n resolve(data)\n })\n })\n }\n }\n\n var Timeseries = (endpoint) => {\n let func = Endpoint('timeseries/' + endpoint)\n func.relativeTo = (baselineRepo, params, callback) => {\n var url = 'timeseries/' + endpoint + '/relative_to/' + baselineRepo.owner + '/' + baselineRepo.name;\n return Endpoint(url)()\n }\n return func\n }\n\n repo.commits = Timeseries('commits')\n repo.forks = Timeseries('forks')\n repo.issues = Timeseries('issues')\n repo.pulls = Timeseries('pulls')\n repo.stars = Timeseries('stargazers')\n repo.tags = Timeseries('tags')\n repo.downloads = Timeseries('downloads')\n repo.uniqueCommitters = Timeseries('unique_committers')\n\n\n repo.pullsAcceptanceRate = Endpoint('pulls/acceptance_rate')\n repo.issuesResponseTime = Endpoint('issues/response_time')\n repo.contributors = Endpoint('contributors')\n repo.contributions = Endpoint('contributions')\n repo.committerLocations = Endpoint('committer_locations')\n repo.communityAge = Endpoint('community_age')\n repo.linkingWebsites = Endpoint('linking_websites')\n repo.busFactor = Endpoint('bus_factor')\n repo.dependents = Endpoint('dependents')\n repo.dependencies = Endpoint('dependencies')\n repo.dependencyStats = Endpoint('dependency_stats')\n\n return repo\n\n }\n}\n","export default class AugurStats {\n\n static convertDates (data, earliest, latest) {\n earliest = earliest || new Date('01-01-2005')\n latest = latest || new Date()\n if (Array.isArray(data[0])) {\n data = data.map((datum) => {\n return AugurStats.convertDates(datum)\n })\n } else {\n \n data = data.map((d) => {\n d.date = new Date(d.date)\n return d\n }).filter((d) => {\n return earliest < d.date && d.date < latest\n })\n }\n return data\n }\n\n static convertKey (data, key) {\n if (Array.isArray(data[0])) {\n data = data.map((datum) => {\n return AugurStats.convertKey(datum, key)\n })\n } else {\n const EARLIEST = new Date('01-01-2005')\n data = data.map((d) => {\n d.value = d[key];\n return d;\n })\n }\n return data\n }\n\n static averageArray(ary) {\n return ary.reduce((a, e) => {return a + e}, 0) / (ary.length);\n }\n\n static standardDeviation(ary, key, mean) {\n let flat = ary.map((e) => {return e[key]})\n mean = mean || AugurStats.averageArray(flat)\n let distances = flat.map((e) => {\n return (e - mean) * (e - mean)\n })\n return Math.sqrt(AugurStats.averageArray(distances))\n }\n\n static describe(ary, key) {\n let flat = ary.map((e) => {return e[key]})\n let mean = AugurStats.averageArray(flat)\n let stddev = AugurStats.standardDeviation(ary, key, mean)\n let variance = stddev * stddev\n return {\n 'mean': mean,\n 'stddev': stddev,\n 'variance': variance\n }\n }\n\n static rollingAverage(data, key, windowSizeInDays) {\n key = key || 'value'\n windowSizeInDays = windowSizeInDays || 180\n let rolling = [];\n let averageWindow = [];\n let i = 0;\n let lastFound = -1;\n\n let after = new Date()\n let before = new Date()\n\n for (let date = new Date(data[0].date); date <= data[data.length - 1].date; date.setDate(date.getDate() + 1)) {\n \n after.setDate(date.getDate() - windowSizeInDays)\n\n if (averageWindow.length < windowSizeInDays) {\n for (; i < data.length && averageWindow.length <= windowSizeInDays; i++) {\n if (lastFound > -1) {\n for (let iter = new Date(data[lastFound].date); iter <= data[i].date; iter.setDate(iter.getDate() + 1)) {\n averageWindow.push( (data[i][key] + data[lastFound][key]) / 2 )\n }\n }\n lastFound = i\n }\n }\n\n let average = {date: new Date(date)}\n average[key] = AugurStats.averageArray(averageWindow.slice(0, windowSizeInDays));\n averageWindow.shift()\n rolling.push(average);\n }\n return rolling\n }\n\n static convertToPercentages(data, key, baseline) {\n if (!data) {\n return []\n }\n baseline = baseline || AugurStats.averageArray( data.map((e) => {return e[key]}) )\n data = data.map((datum) => {\n datum['value'] = (datum[key] / baseline)\n return datum\n })\n return data\n }\n\n static makeRelative(baseData, compareData, config) {\n\n config.byDate = (config.byDate != undefined)\n config.earliest = config.earliest || new Date('01-01-2005')\n config.latest = config.latest || new Date()\n config.period = config.period || 180\n\n let iter = {\n base: 0,\n compare: 0\n }\n let data = {}\n\n data['base'] = AugurStats.rollingAverage(\n AugurStats.convertDates(\n AugurStats.convertKey(\n baseData, \n Object.keys(baseData[0])[1]\n ), config.earliest, config.latest\n ), undefined, config.period) \n\n data['compare'] = AugurStats.rollingAverage(\n AugurStats.convertDates(\n AugurStats.convertKey(\n compareData, \n Object.keys(compareData[0])[1]\n ), config.earliest, config.latest\n ), undefined, config.period) \n\n let smaller = (data['base'][0].date < data['compare'][0].date) ? 'base' : 'compare'\n let larger = (data['base'][0].date < data['compare'][0].date) ? 'compare' : 'base'\n let result = []\n\n if (config.byDate) {\n for (; iter[smaller] < data[smaller].length; iter[smaller]++) {\n if (data['base'].date == data['compare'].date) {\n break\n }\n }\n }\n\n while (iter['base'] < data['base'].length && iter['compare'] < data['compare'].length) {\n let toPush = {\n value: data['compare'][iter.compare].value / data['base'][iter.base].value,\n }\n if (config.byDate) {\n toPush.date = data['base'][iter.base].date\n } else {\n toPush.x = iter.base\n }\n result.push(toPush)\n iter['base']++\n iter['compare']++\n }\n\n return result\n }\n\n static zscores(data, key) {\n key = key || 'value'\n let stats = AugurStats.describe(data, key)\n return data.map((e) => {\n let newObj = {}\n if (e.date) {\n newObj.date = new Date(e.date)\n }\n let zscore = ((e[key] - stats['mean']) / stats['stddev'])\n newObj.value = zscore\n return newObj\n })\n }\n\n static combine() {\n return Array.from(arguments)\n }\n\n}",";(function(){\n'use strict';\n\nvar _LineChart = require('./charts/LineChart');\n\nvar _LineChart2 = _interopRequireDefault(_LineChart);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n components: {\n LineChart: _LineChart2.default\n },\n computed: {\n repo: function repo() {\n return this.$store.state.repo;\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('h1',[_vm._v(\"Activity\")]),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.$store.state.baseRepo))]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"commits\",\"title\":\"Commits / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"forks\",\"title\":\"Forks / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"issues\",\"title\":\"Issues / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-6\"},[_c('line-chart',{attrs:{\"source\":\"pulls\",\"title\":\"Pulls Requests / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Contributors\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"col col-6\"},[_c('line-chart',{attrs:{\"source\":\"uniqueCommitters\",\"title\":\"Unique Committers\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Contributors\",\"disableRollingAverage\":\"1\"}})],1)]),_vm._v(\" \"),_vm._m(0,false,false)])}\n__vue__options__.staticRenderFns = [function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('small',[_vm._v(\"Data provided by \"),_c('a',{attrs:{\"href\":\"http://ghtorrent.org/msr14.html\"}},[_vm._v(\"GHTorrent\")]),_vm._v(\" \"),_c('span',{staticClass:\"ghtorrent-version\"}),_vm._v(\" and the \"),_c('a',{attrs:{\"href\":\"https://developer.github.com/\"}},[_vm._v(\"GitHub API\")])])}]\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-7655e5a2\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-7655e5a2\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _LineChart = require('./charts/LineChart');\n\nvar _LineChart2 = _interopRequireDefault(_LineChart);\n\nvar _DependencyOverview = require('./charts/DependencyOverview');\n\nvar _DependencyOverview2 = _interopRequireDefault(_DependencyOverview);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n components: {\n LineChart: _LineChart2.default,\n DependencyOverview: _DependencyOverview2.default\n },\n computed: {\n repo: function repo() {\n return this.$store.state.repo;\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('h1',[_vm._v(\"Ecosystem\")]),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.$store.state.baseRepo))]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"downloads\",\"title\":\"Downloads / Day\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"stars\",\"title\":\"Stars / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('dependency-overview')],1)])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-2a4aa320\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-2a4aa320\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _LineChart = require('./charts/LineChart');\n\nvar _LineChart2 = _interopRequireDefault(_LineChart);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n props: ['comparedTo'],\n components: {\n LineChart: _LineChart2.default\n },\n computed: {\n repo: function repo() {\n return this.$store.state.repo;\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('div',{class:{ hidden: !this.repo },attrs:{\"id\":\"base-template\"}}),_vm._v(\" \"),_c('h1',[_vm._v(\"Activity Comparison\")]),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.comparedTo)+\" compared to \"+_vm._s(_vm.$store.state.baseRepo))]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"timeseries/forks\",\"title\":\"Forks / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"forks\",\"title\":\"Forks / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"issues\",\"title\":\"Issues / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"pullsAcceptanceRate\",\"title\":\"Pull Requests Created to Closed Ratio / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"uniqueCommitters\",\"title\":\"Unique Committers\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Contributors\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_vm._m(0,false,false)])}\n__vue__options__.staticRenderFns = [function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('small',[_vm._v(\"Data provided by \"),_c('a',{attrs:{\"href\":\"http://ghtorrent.org/msr14.html\"}},[_vm._v(\"GHTorrent\")]),_vm._v(\" \"),_c('span',{staticClass:\"ghtorrent-version\"}),_vm._v(\" and the \"),_c('a',{attrs:{\"href\":\"https://developer.github.com/\"}},[_vm._v(\"GitHub API\")])])}]\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-7c1c00fd\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-7c1c00fd\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _AugurHeader = require('./AugurHeader.vue');\n\nvar _AugurHeader2 = _interopRequireDefault(_AugurHeader);\n\nvar _SidebarControls = require('./SidebarControls.vue');\n\nvar _SidebarControls2 = _interopRequireDefault(_SidebarControls);\n\nvar _AugurCards = require('./AugurCards.vue');\n\nvar _AugurCards2 = _interopRequireDefault(_AugurCards);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n components: {\n 'augur-header': _AugurHeader2.default,\n SidebarControls: _SidebarControls2.default,\n 'augur-cards': _AugurCards2.default\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('augur-header'),_vm._v(\" \"),_c('div',{staticClass:\"content\"},[_c('sidebar-controls'),_vm._v(\" \"),_c('augur-cards')],1)],1)}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-f1292d0e\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-f1292d0e\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _BaseRepoActivityCard = require('./BaseRepoActivityCard');\n\nvar _BaseRepoActivityCard2 = _interopRequireDefault(_BaseRepoActivityCard);\n\nvar _BaseRepoEcosystemCard = require('./BaseRepoEcosystemCard');\n\nvar _BaseRepoEcosystemCard2 = _interopRequireDefault(_BaseRepoEcosystemCard);\n\nvar _ComparedRepoActivityCard = require('./ComparedRepoActivityCard');\n\nvar _ComparedRepoActivityCard2 = _interopRequireDefault(_ComparedRepoActivityCard);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n components: {\n BaseRepoActivityCard: _BaseRepoActivityCard2.default,\n BaseRepoEcosystemCard: _BaseRepoEcosystemCard2.default,\n ComparedRepoActivityCard: _ComparedRepoActivityCard2.default\n },\n computed: {\n baseRepo: function baseRepo() {\n return this.$store.state.baseRepo;\n },\n comparedRepos: function comparedRepos() {\n return this.$store.state.comparedRepos;\n }\n },\n methods: {\n onRepo: function onRepo(e) {\n this.$store.commit('setBaseRepo', {\n url: e.target.value\n });\n },\n onCompare: function onCompare(e) {\n this.$store.commit('addComparedRepo', {\n url: e.target.value\n });\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"cards\",staticClass:\"content\"},[_c('section',{class:{ hidden: _vm.baseRepo, unmaterialized: true }},[_c('h3',[_vm._v(\"Enter a GitHub URL to get started\")]),_vm._v(\" \"),_c('input',{staticClass:\"search reposearch\",attrs:{\"type\":\"text\",\"placeholder\":\"GitHub URL\"},on:{\"change\":_vm.onRepo}})]),_vm._v(\" \"),_c('div',{class:{ hidden: !_vm.baseRepo }},[_c('base-repo-activity-card'),_vm._v(\" \"),_c('base-repo-ecosystem-card')],1),_vm._v(\" \"),_vm._l((_vm.comparedRepos),function(repo){return _c('div',{class:{ hidden: !_vm.comparedRepos.length },attrs:{\"id\":\"comparisonCards\"}},[_c('compared-repo-activity-card',{attrs:{\"comparedTo\":repo}})],1)}),_vm._v(\" \"),_c('section',{class:{ hidden: !_vm.baseRepo, unmaterialized: true }},[_c('h3',[_vm._v(\"Compare repository\")]),_vm._v(\" \"),_c('input',{staticClass:\"search reposearch\",attrs:{\"type\":\"text\",\"placeholder\":\"GitHub URL\"},on:{\"change\":_vm.onCompare}})])],2)}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-323615bb\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-323615bb\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nmodule.exports = {\n methods: {\n onRepo: function onRepo(e) {\n this.$store.commit('setBaseRepo', {\n url: e.target.value\n });\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('header',{staticClass:\"hide-print\"},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"row\"},[_vm._m(0,false,false),_vm._v(\" \"),_c('div',{staticClass:\"col col-5 push-right\"},[_c('div',{staticClass:\"form-item\"},[_c('input',{staticClass:\"search reposearch\",attrs:{\"type\":\"text\",\"name\":\"headersearch\",\"placeholder\":\"GitHub URL\"},on:{\"change\":_vm.onRepo}})])])])])])}\n__vue__options__.staticRenderFns = [function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"col col-4\"},[_c('img',{attrs:{\"src\":\"static/logo.png\",\"id\":\"logo\",\"alt\":\"CHAOSS: Community Health Analytics for Open Source Software\"}})])}]\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-30d34965\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-30d34965\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nmodule.exports = {\n methods: {\n onStartDateChange: function onStartDateChange(e) {\n var _this = this;\n\n if (this.startDateTimeout) {\n clearTimeout(this.startDateTimeout);\n }\n this.startDateTimeout = setTimeout(function () {\n _this.$store.commit('setDates', {\n startDate: e.target.value\n });\n }, 500);\n },\n onEndDateChange: function onEndDateChange(e) {\n var _this2 = this;\n\n if (this.endDateTimeout) {\n clearTimeout(this.endDateTimeout);\n delete this.endDateTimeout;\n }\n this.endDateTimeout = setTimeout(function () {\n _this2.$store.commit('setDates', {\n endDate: e.target.value\n });\n }, 500);\n },\n onTrailingAverageChange: function onTrailingAverageChange(e) {\n this.$store.commit('setDates', {\n trailingAverage: e.target.value\n });\n },\n onCompareChange: function onCompareChange(e) {\n this.$store.commit('setCompare', {\n compare: e.target.value\n });\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"row\",attrs:{\"id\":\"controls\"}},[_c('div',{staticClass:\"col col-12\"},[_c('div',{staticClass:\"form\"},[_c('h4',[_vm._v(\"Base Repository\")]),_vm._v(\" \"),_c('div',{staticClass:\"form-item\"},[_c('label',[_vm._v(\"Start Date \"),_c('input',{attrs:{\"type\":\"date\"},on:{\"change\":_vm.onStartDateChange}})])]),_vm._v(\" \"),_c('div',{staticClass:\"form-item\"},[_c('label',[_vm._v(\"End Date \"),_c('input',{attrs:{\"type\":\"date\"},on:{\"change\":_vm.onEndDateChange}})])]),_vm._v(\" \"),_c('div',{staticClass:\"form-item\"},[_c('label',[_vm._v(\"Trailing Average\")]),_vm._v(\" \"),_c('div',{staticClass:\"append\"},[_c('input',{attrs:{\"type\":\"number\",\"min\":\"2\",\"id\":\"averagetimespan\",\"value\":\"180\"},on:{\"change\":_vm.onTrailingAverageChange}}),_c('span',[_vm._v(\"days\")])])]),_vm._v(\" \"),_c('h4',[_vm._v(\"Comparisons\")]),_vm._v(\" \"),_c('div',{staticClass:\"form-item form-checkboxes\"},[_c('label',{staticClass:\"checkbox\"},[_c('input',{attrs:{\"name\":\"comparebaseline\",\"value\":\"each\",\"checked\":\"\",\"type\":\"radio\"},on:{\"change\":_vm.onCompareChange}}),_vm._v(\"Z-score trailing average\")]),_vm._v(\" \"),_c('label',{staticClass:\"checkbox\"},[_c('input',{attrs:{\"name\":\"comparebaseline\",\"value\":\"percentage\",\"type\":\"radio\"},on:{\"change\":_vm.onCompareChange}}),_vm._v(\"100% is the compared project\")])])])])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-0df51156\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-0df51156\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _AugurStats = require('../../AugurStats');\n\nvar _AugurStats2 = _interopRequireDefault(_AugurStats);\n\nvar _d = require('d3');\n\nvar d3 = _interopRequireWildcard(_d);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n props: [],\n computed: {\n repo: function repo() {\n return this.$store.state.baseRepo;\n },\n dependencies: function dependencies() {\n var _this = this;\n\n if (this.repo) {\n window.AugurRepos[this.repo].dependents().then(function (dependents) {\n _this.$refs['dependents'].innerHTML = '';\n for (var i = 0; i < dependents.length && i < 10; i++) {\n _this.$refs['dependents'].innerHTML += dependents[i].name + '
';\n }\n });\n window.AugurRepos[this.repo].dependencies().then(function (dependencies) {\n _this.$refs['dependencies'].innerHTML = '';\n for (var i = 0; i < dependencies.dependencies.length && i < 10; i++) {\n _this.$refs['dependents'].innerHTML += dependencies.dependencies[i].name + '
';\n }\n });\n window.AugurRepos[this.repo].dependencyStats().then(function (depstats) {\n _this.$refs['totaldependents'].innerHTML = depstats['dependent_repositories'];\n _this.$refs['totaldependencies'].innerHTML = depstats['dependencies'];\n });\n }\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Total Dependents\")]),_vm._v(\" \"),_c('div',{ref:\"totaldependents\",staticClass:\"deps\"},[_vm._v(\"\\n Loading...\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Total Dependencies\")]),_vm._v(\" \"),_c('div',{ref:\"totaldependencies\",staticClass:\"deps\"},[_vm._v(\"\\n Loading...\\n \")])])]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Top Dependents\")]),_vm._v(\" \"),_c('div',{ref:\"dependents\",staticClass:\"deps\"},[_vm._v(\"\\n Loading...\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Top Dependencies\")]),_vm._v(\" \"),_c('div',{ref:\"dependencies\",staticClass:\"deps\",domProps:{\"innerHTML\":_vm._s(_vm.dependencies)}},[_vm._v(\"\\n Loading...\\n \")])])])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-210450fe\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-210450fe\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _metricsGraphics = require('metrics-graphics');\n\nvar _metricsGraphics2 = _interopRequireDefault(_metricsGraphics);\n\nvar _AugurStats = require('../AugurStats');\n\nvar _AugurStats2 = _interopRequireDefault(_AugurStats);\n\nvar _d = require('d3');\n\nvar d3 = _interopRequireWildcard(_d);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n_metricsGraphics2.default.data_graphic({\n title: \"Missing Data\",\n error: 'Data unavaliable for ' + title,\n chart_type: 'missing-data',\n missing_text: title + ' could not be loaded',\n target: undefined.$refs.chart,\n full_width: true,\n height: 200\n});\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"chart\",staticClass:\"linechart\"})}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-ebdae2a4\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-ebdae2a4\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _d = require('d3');\n\nvar d3 = _interopRequireWildcard(_d);\n\nvar _AugurStats = require('AugurStats');\n\nvar _AugurStats2 = _interopRequireDefault(_AugurStats);\n\nvar _vuex = require('vuex');\n\nvar _metricsgraphics = require('../../include/metricsgraphics');\n\nvar _metricsgraphics2 = _interopRequireDefault(_metricsgraphics);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nconsole.log(d3);\n\nexports.default = {\n props: ['source', 'citeUrl', 'citeText', 'title', 'percentage', 'comparedTo', 'disableRollingAverage'],\n computed: {\n repo: function repo() {\n return this.$store.state.baseRepo;\n },\n period: function period() {\n return this.$store.state.trailingAverage;\n },\n earliest: function earliest() {\n return this.$store.state.startDate;\n },\n latest: function latest() {\n return this.$store.state.endDate;\n },\n compare: function compare() {\n return this.$store.state.compare;\n },\n chart: function chart() {\n var _this = this;\n\n var config = {};\n\n config.earliest = this.earliest || new Date('01-01-2005');\n config.latest = this.latest || new Date();\n config.title = this.title || \"Activity\";\n config.full_width = true;\n config.height = 200;\n config.x_accessor = 'date';\n config.format = this.percentage ? 'percentage' : undefined;\n config.compare = this.compare;\n\n\n if (this.repo) {\n if (this.$refs.chart) {\n this.$refs.chart.className = 'linechart loader';\n }\n window.AugurRepos[this.repo][this.source]().then(function (baseData) {\n _this.$refs.chartStatus.innerHTML = '';\n if (baseData && baseData.length) {\n config.data = _AugurStats2.default.convertDates(baseData, _this.earliest, _this.latest);\n } else {\n config.data = [];\n }\n if (_this.comparedTo) {\n return AugurRepos[_this.comparedTo][_this.source]();\n }\n return new Promise(function (resolve, reject) {\n resolve();\n });\n }).then(function (compareData) {\n var keys = Object.keys(config.data[0]).splice(1);\n if (config.data && compareData && compareData.length) {\n if (config.compare == 'each') {\n var key = Object.keys(compareData[0])[1];\n var compare = _AugurStats2.default.rollingAverage(_AugurStats2.default.zscores(compareData, key), 'value', _this.period);\n var base = _AugurStats2.default.rollingAverage(_AugurStats2.default.zscores(config.data, key), 'value', _this.period);\n config.data = [base, compare];\n config.legend = [window.AugurRepos[_this.repo].toString(), window.AugurRepos[_this.comparedTo].toString()];\n config.colors = config.colors || ['#FF3647', '#999'];\n } else {\n console.log('rendering percentage');\n config.format = 'percentage';\n config.baselines = [{ value: 1, label: config.baseline }];\n config.data = _AugurStats2.default.makeRelative(config.data, compareData, {\n earliest: config.earliest,\n latest: config.latest,\n byDate: config.byDate,\n period: _this.period\n });\n }\n } else {\n if (!_this.disableRollingAverage) {\n config.legend = config.legend || [config.title.toLowerCase(), _this.period + ' day average'];\n var rolling = _AugurStats2.default.rollingAverage(config.data, keys[0], _this.period);\n config.data = _AugurStats2.default.convertKey(_AugurStats2.default.combine(config.data, rolling), keys[0]);\n config.colors = config.colors || ['#CCC', '#FF3647'];\n config.y_accessor = 'value';\n }\n }\n\n if (keys.length > 1) {\n config.legend_target = _this.$refs.legend;\n $(_this.$refs.chart).hover(function () {\n _this.$refs.legend.style.display = 'none';\n }, function () {\n _this.$refs.legend.style.display = 'block';\n });\n }\n\n _this.$refs.chart.className = 'linechart intro';\n config.target = _this.$refs.chart;\n _metricsgraphics2.default.data_graphic(config);\n });\n return '' + this.title + '...';\n }\n }\n } };\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('cite',{staticClass:\"metric\"},[_vm._v(\"Metric: \"),_c('a',{attrs:{\"href\":_vm.citeUrl,\"target\":\"_blank\"}},[_vm._v(_vm._s(_vm.citeText))])]),_vm._v(\" \"),_c('div',{ref:\"chart\",staticClass:\"linechart\"},[_c('div',{ref:\"legend\",staticClass:\"legend\"}),_vm._v(\" \"),_c('span',{ref:\"chartStatus\",domProps:{\"innerHTML\":_vm._s(_vm.chart)}})])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-4035d73d\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-4035d73d\", __vue__options__)\n }\n})()}","/*\n\tKube. CSS & JS Framework\n\tVersion 6.5.2\n\tUpdated: February 2, 2017\n\n\thttp://imperavi.com/kube/\n\n\tCopyright (c) 2009-2017, Imperavi LLC.\n\tLicense: MIT\n*/\nif (typeof jQuery === 'undefined') {throw new Error('Kube\\'s requires jQuery')};\n;(function($) { var version = $.fn.jquery.split('.'); if (version[0] == 1 && version[1] < 8) {throw new Error('Kube\\'s requires at least jQuery v1.8'); }})(jQuery);\n\n;(function()\n{\n // Inherits\n Function.prototype.inherits = function(parent)\n {\n var F = function () {};\n F.prototype = parent.prototype;\n var f = new F();\n\n for (var prop in this.prototype) f[prop] = this.prototype[prop];\n this.prototype = f;\n this.prototype.super = parent.prototype;\n };\n\n // Core Class\n var Kube = function(element, options)\n {\n options = (typeof options === 'object') ? options : {};\n\n this.$element = $(element);\n this.opts = $.extend(true, this.defaults, $.fn[this.namespace].options, this.$element.data(), options);\n this.$target = (typeof this.opts.target === 'string') ? $(this.opts.target) : null;\n };\n\n // Core Functionality\n Kube.prototype = {\n getInstance: function()\n {\n return this.$element.data('fn.' + this.namespace);\n },\n hasTarget: function()\n {\n return !(this.$target === null);\n },\n callback: function(type)\n {\n\t\tvar args = [].slice.call(arguments).splice(1);\n\n // on element callback\n if (this.$element)\n {\n args = this._fireCallback($._data(this.$element[0], 'events'), type, this.namespace, args);\n }\n\n // on target callback\n if (this.$target)\n {\n args = this._fireCallback($._data(this.$target[0], 'events'), type, this.namespace, args);\n\t\t}\n\n\t\t// opts callback\n\t\tif (this.opts && this.opts.callbacks && $.isFunction(this.opts.callbacks[type]))\n\t\t{\n return this.opts.callbacks[type].apply(this, args);\n\t\t}\n\n\t\treturn args;\n },\n _fireCallback: function(events, type, eventNamespace, args)\n {\n if (events && typeof events[type] !== 'undefined')\n {\n\t\t\tvar len = events[type].length;\n\t\t\tfor (var i = 0; i < len; i++)\n\t\t\t{\n\t\t\t\tvar namespace = events[type][i].namespace;\n\t\t\t\tif (namespace === eventNamespace)\n\t\t\t\t{\n\t\t\t\t\tvar value = events[type][i].handler.apply(this, args);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n return (typeof value === 'undefined') ? args : value;\n }\n };\n\n // Scope\n window.Kube = Kube;\n\n})();\n/**\n * @library Kube Plugin\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Plugin = {\n create: function(classname, pluginname)\n {\n pluginname = (typeof pluginname === 'undefined') ? classname.toLowerCase() : pluginname;\n\n $.fn[pluginname] = function(method, options)\n {\n var args = Array.prototype.slice.call(arguments, 1);\n var name = 'fn.' + pluginname;\n var val = [];\n\n this.each(function()\n {\n var $this = $(this), data = $this.data(name);\n options = (typeof method === 'object') ? method : options;\n\n if (!data)\n {\n // Initialization\n $this.data(name, {});\n $this.data(name, (data = new Kube[classname](this, options)));\n }\n\n // Call methods\n if (typeof method === 'string')\n {\n if ($.isFunction(data[method]))\n {\n var methodVal = data[method].apply(data, args);\n if (methodVal !== undefined)\n {\n val.push(methodVal);\n }\n }\n else\n {\n $.error('No such method \"' + method + '\" for ' + classname);\n }\n }\n\n });\n\n return (val.length === 0 || val.length === 1) ? ((val.length === 0) ? this : val[0]) : val;\n };\n\n $.fn[pluginname].options = {};\n\n return this;\n },\n autoload: function(pluginname)\n {\n var arr = pluginname.split(',');\n var len = arr.length;\n\n for (var i = 0; i < len; i++)\n {\n var name = arr[i].toLowerCase().split(',').map(function(s) { return s.trim() }).join(',');\n this.autoloadQueue.push(name);\n }\n\n return this;\n },\n autoloadQueue: [],\n startAutoload: function()\n {\n if (!window.MutationObserver || this.autoloadQueue.length === 0)\n {\n return;\n }\n\n var self = this;\n\t\tvar observer = new MutationObserver(function(mutations)\n\t\t{\n\t\t\tmutations.forEach(function(mutation)\n\t\t\t{\n\t\t\t\tvar newNodes = mutation.addedNodes;\n\t\t\t if (newNodes.length === 0 || (newNodes.length === 1 && newNodes.nodeType === 3))\n\t\t\t {\n\t\t\t\t return;\n\t\t\t\t}\n\n self.startAutoloadOnce();\n\t\t\t});\n\t\t});\n\n\t\t// pass in the target node, as well as the observer options\n\t\tobserver.observe(document, {\n\t\t\t subtree: true,\n\t\t\t childList: true\n\t\t});\n },\n startAutoloadOnce: function()\n {\n var self = this;\n var $nodes = $('[data-component]').not('[data-loaded]');\n\t\t$nodes.each(function()\n\t\t{\n\t\t\tvar $el = $(this);\n\t\t\tvar pluginname = $el.data('component');\n\n if (self.autoloadQueue.indexOf(pluginname) !== -1)\n {\n\t\t\t$el.attr('data-loaded', true);\n $el[pluginname]();\n }\n });\n\n },\n watch: function()\n {\n Kube.Plugin.startAutoloadOnce();\n Kube.Plugin.startAutoload();\n }\n };\n\n $(window).on('load', function()\n {\n Kube.Plugin.watch();\n });\n\n}(Kube));\n/**\n * @library Kube Animation\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Animation = function(element, effect, callback)\n {\n this.namespace = 'animation';\n this.defaults = {};\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.effect = effect;\n this.completeCallback = (typeof callback === 'undefined') ? false : callback;\n this.prefixes = ['', '-moz-', '-o-animation-', '-webkit-'];\n this.queue = [];\n\n this.start();\n };\n\n Kube.Animation.prototype = {\n start: function()\n {\n\t\tif (this.isSlideEffect()) this.setElementHeight();\n\n\t\t\tthis.addToQueue();\n\t\t\tthis.clean();\n\t\t\tthis.animate();\n },\n addToQueue: function()\n {\n this.queue.push(this.effect);\n },\n setElementHeight: function()\n {\n this.$element.height(this.$element.height());\n },\n removeElementHeight: function()\n {\n this.$element.css('height', '');\n },\n isSlideEffect: function()\n {\n return (this.effect === 'slideDown' || this.effect === 'slideUp');\n },\n isHideableEffect: function()\n {\n var effects = ['fadeOut', 'slideUp', 'flipOut', 'zoomOut', 'slideOutUp', 'slideOutRight', 'slideOutLeft'];\n\n\t\t\treturn ($.inArray(this.effect, effects) !== -1);\n },\n isToggleEffect: function()\n {\n return (this.effect === 'show' || this.effect === 'hide');\n },\n storeHideClasses: function()\n {\n if (this.$element.hasClass('hide-sm')) this.$element.data('hide-sm-class', true);\n else if (this.$element.hasClass('hide-md')) this.$element.data('hide-md-class', true);\n },\n revertHideClasses: function()\n {\n if (this.$element.data('hide-sm-class')) this.$element.addClass('hide-sm').removeData('hide-sm-class');\n else if (this.$element.data('hide-md-class')) this.$element.addClass('hide-md').removeData('hide-md-class');\n else this.$element.addClass('hide');\n },\n removeHideClass: function()\n {\n if (this.$element.data('hide-sm-class')) this.$element.removeClass('hide-sm');\n else if (this.$element.data('hide-md-class')) this.$element.removeClass('hide-md');\n else this.$element.removeClass('hide');\n },\n animate: function()\n {\n this.storeHideClasses();\n if (this.isToggleEffect())\n\t\t\t{\n\t\t\t\treturn this.makeSimpleEffects();\n }\n\n this.$element.addClass('kubeanimated');\n\t\t\tthis.$element.addClass(this.queue[0]);\n this.removeHideClass();\n\n\t\t\tvar _callback = (this.queue.length > 1) ? null : this.completeCallback;\n\t\t\tthis.complete('AnimationEnd', $.proxy(this.makeComplete, this), _callback);\n },\n makeSimpleEffects: function()\n {\n\t\tif (this.effect === 'show') this.removeHideClass();\n else if (this.effect === 'hide') this.revertHideClasses();\n\n if (typeof this.completeCallback === 'function') this.completeCallback(this);\n },\n\t\tmakeComplete: function()\n\t\t{\n if (this.$element.hasClass(this.queue[0]))\n {\n\t\t\t\tthis.clean();\n\t\t\t\tthis.queue.shift();\n\n\t\t\t\tif (this.queue.length) this.animate();\n\t\t\t}\n\t\t},\n complete: function(type, make, callback)\n\t\t{\n\t\tvar event = type.toLowerCase() + ' webkit' + type + ' o' + type + ' MS' + type;\n\n\t\t\tthis.$element.one(event, $.proxy(function()\n\t\t\t{\n\t\t\t\tif (typeof make === 'function') make();\n\t\t\t\tif (this.isHideableEffect()) this.revertHideClasses();\n\t\t\t\tif (this.isSlideEffect()) this.removeElementHeight();\n\t\t\t\tif (typeof callback === 'function') callback(this);\n\n\t\t\t\tthis.$element.off(event);\n\n\t\t\t}, this));\n\t\t},\n\t\tclean: function()\n\t\t{\n\t\t\tthis.$element.removeClass('kubeanimated').removeClass(this.queue[0]);\n\t\t}\n };\n\n // Inheritance\n Kube.Animation.inherits(Kube);\n\n}(Kube));\n\n// Plugin\n(function($)\n{\n $.fn.animation = function(effect, callback)\n {\n var name = 'fn.animation';\n\n return this.each(function()\n {\n var $this = $(this), data = $this.data(name);\n\n $this.data(name, {});\n $this.data(name, (data = new Kube.Animation(this, effect, callback)));\n });\n };\n\n $.fn.animation.options = {};\n\n})(jQuery);\n/**\n * @library Kube Detect\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Detect = function() {};\n\n Kube.Detect.prototype = {\n\tisMobile: function()\n\t{\n\t\treturn /(iPhone|iPod|BlackBerry|Android)/.test(navigator.userAgent);\n\t},\n\tisDesktop: function()\n\t{\n\t\treturn !/(iPhone|iPod|iPad|BlackBerry|Android)/.test(navigator.userAgent);\n\t},\n\tisMobileScreen: function()\n\t{\n\t\treturn ($(window).width() <= 768);\n\t},\n\tisTabletScreen: function()\n\t{\n\t\treturn ($(window).width() >= 768 && $(window).width() <= 1024);\n\t},\n\tisDesktopScreen: function()\n\t{\n\t\treturn ($(window).width() > 1024);\n\t}\n };\n\n\n}(Kube));\n/**\n * @library Kube FormData\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.FormData = function(app)\n {\n this.opts = app.opts;\n };\n\n Kube.FormData.prototype = {\n set: function(data)\n {\n this.data = data;\n },\n get: function(formdata)\n\t{\n\t\tthis.formdata = formdata;\n\n if (this.opts.appendForms) this.appendForms();\n if (this.opts.appendFields) this.appendFields();\n\n return this.data;\n\t},\n\tappendFields: function()\n\t{\n\t\tvar $fields = $(this.opts.appendFields);\n\t\tif ($fields.length === 0)\n\t\t{\n\t\t\treturn;\n }\n\n\t\tvar self = this;\n var str = '';\n\n if (this.formdata)\n {\n $fields.each(function()\n\t\t\t{\n\t\t\t\tself.data.append($(this).attr('name'), $(this).val());\n\t\t\t});\n }\n else\n {\n\t\t\t$fields.each(function()\n\t\t\t{\n\t\t\t\tstr += '&' + $(this).attr('name') + '=' + $(this).val();\n\t\t\t});\n\n\t\t\tthis.data = (this.data === '') ? str.replace(/^&/, '') : this.data + str;\n }\n\t},\n\tappendForms: function()\n\t{\n\t\tvar $forms = $(this.opts.appendForms);\n\t\tif ($forms.length === 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n if (this.formdata)\n {\n var self = this;\n var formsData = $(this.opts.appendForms).serializeArray();\n $.each(formsData, function(i,s)\n {\n\t\t\tself.data.append(s.name, s.value);\n });\n }\n else\n {\n var str = $forms.serialize();\n\n this.data = (this.data === '') ? str : this.data + '&' + str;\n }\n\t}\n };\n\n\n}(Kube));\n/**\n * @library Kube Response\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Response = function(app) {};\n\n Kube.Response.prototype = {\n parse: function(str)\n\t{\n\t\tif (str === '') return false;\n\n\t\tvar obj = {};\n\n\t\ttry {\n\t\t\tobj = JSON.parse(str);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (obj[0] !== undefined)\n\t\t{\n\t\t\tfor (var item in obj)\n\t\t\t{\n\t\t\t\tthis.parseItem(obj[item]);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.parseItem(obj);\n\t\t}\n\n\t\treturn obj;\n\t},\n\tparseItem: function(item)\n\t{\n\t\tif (item.type === 'value')\n\t\t{\n\t\t\t$.each(item.data, $.proxy(function(key, val)\n\t\t\t{\n\t\t\t\tval = (val === null || val === false) ? 0 : val;\n\t\t\t\tval = (val === true) ? 1 : val;\n\n\t\t\t\t$(key).val(val);\n\n\t\t\t}, this));\n\t\t}\n\t\telse if (item.type === 'html')\n\t\t{\n\t\t\t$.each(item.data, $.proxy(function(key, val)\n\t\t\t{\n\t\t\t\tval = (val === null || val === false) ? '' : val;\n\n\t\t\t\t$(key).html(this.stripslashes(val));\n\n\t\t\t}, this));\n\t\t}\n\t\telse if (item.type === 'addClass')\n\t\t{\n\t\t\t$.each(item.data, function(key, val)\n\t\t\t{\n\t\t\t\t$(key).addClass(val);\n\t\t\t});\n }\n\t\telse if (item.type === 'removeClass')\n\t\t{\n\t\t\t$.each(item.data, function(key, val)\n\t\t\t{\n\t\t\t\t$(key).removeClass(val);\n\t\t\t});\n }\n\t\telse if (item.type === 'command')\n\t\t{\n\t\t\t$.each(item.data, function(key, val)\n\t\t\t{\n\t\t\t\t$(val)[key]();\n\t\t\t});\n\t\t}\n\t\telse if (item.type === 'animation')\n\t\t{\n\t\t\t$.each(item.data, function(key, data)\n\t\t\t{\n\t\t\t\tdata.opts = (typeof data.opts === 'undefined') ? {} : data.opts;\n\n\t\t\t\t$(key).animation(data.name, data.opts);\n\t\t\t});\n\t\t}\n\t\telse if (item.type === 'location')\n\t\t{\n\t\t\ttop.location.href = item.data;\n\t\t}\n\t\telse if (item.type === 'notify')\n\t\t{\n\t\t\t$.notify(item.data);\n\t\t}\n\n\t\treturn item;\n\t},\n stripslashes: function(str)\n\t{\n\t\treturn (str+'').replace(/\\0/g, '0').replace(/\\\\([\\\\'\"])/g, '$1');\n }\n };\n\n\n}(Kube));\n/**\n * @library Kube Utils\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Utils = function() {};\n\n Kube.Utils.prototype = {\n disableBodyScroll: function()\n\t{\n\t\tvar $body = $('html');\n\t\tvar windowWidth = window.innerWidth;\n\n\t\tif (!windowWidth)\n\t\t{\n\t\t\tvar documentElementRect = document.documentElement.getBoundingClientRect();\n\t\t\twindowWidth = documentElementRect.right - Math.abs(documentElementRect.left);\n\t\t}\n\n\t\tvar isOverflowing = document.body.clientWidth < windowWidth;\n\t\tvar scrollbarWidth = this.measureScrollbar();\n\n\t\t$body.css('overflow', 'hidden');\n\t\tif (isOverflowing) $body.css('padding-right', scrollbarWidth);\n\t},\n\tmeasureScrollbar: function()\n\t{\n\t\tvar $body = $('body');\n\t\tvar scrollDiv = document.createElement('div');\n\t\tscrollDiv.className = 'scrollbar-measure';\n\n\t\t$body.append(scrollDiv);\n\t\tvar scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n\t\t$body[0].removeChild(scrollDiv);\n\t\treturn scrollbarWidth;\n\t},\n\tenableBodyScroll: function()\n\t{\n\t\t$('html').css({ 'overflow': '', 'padding-right': '' });\n\t}\n };\n\n\n}(Kube));\n/**\n * @library Kube Message\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Message = function(element, options)\n {\n this.namespace = 'message';\n this.defaults = {\n closeSelector: '.close',\n closeEvent: 'click',\n animationOpen: 'fadeIn',\n animationClose: 'fadeOut',\n callbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Message.prototype = {\n start: function()\n {\n this.$close = this.$element.find(this.opts.closeSelector);\n this.$close.on(this.opts.closeEvent + '.' + this.namespace, $.proxy(this.close, this));\n this.$element.addClass('open');\n },\n stop: function()\n {\n this.$close.off('.' + this.namespace);\n this.$element.removeClass('open');\n },\n open: function(e)\n {\n if (e) e.preventDefault();\n\n if (!this.isOpened())\n {\n this.callback('open');\n this.$element.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n }\n },\n isOpened: function()\n {\n return this.$element.hasClass('open');\n },\n onOpened: function()\n {\n this.callback('opened');\n this.$element.addClass('open');\n },\n close: function(e)\n {\n if (e) e.preventDefault();\n\n if (this.isOpened())\n {\n this.callback('close');\n this.$element.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n }\n },\n onClosed: function()\n {\n this.callback('closed');\n this.$element.removeClass('open');\n }\n };\n\n // Inheritance\n Kube.Message.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Message');\n Kube.Plugin.autoload('Message');\n\n}(Kube));\n/**\n * @library Kube Sticky\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Sticky = function(element, options)\n {\n this.namespace = 'sticky';\n this.defaults = {\n classname: 'fixed',\n offset: 0, // pixels\n callbacks: ['fixed', 'unfixed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Sticky.prototype = {\n start: function()\n {\n\t this.offsetTop = this.getOffsetTop();\n\n\t this.load();\n\t $(window).scroll($.proxy(this.load, this));\n\t},\n\tgetOffsetTop: function()\n\t{\n\t\treturn this.$element.offset().top;\n\t},\n\tload: function()\n\t{\n\t\treturn (this.isFix()) ? this.fixed() : this.unfixed();\n\t},\n\tisFix: function()\n\t{\n return ($(window).scrollTop() > (this.offsetTop + this.opts.offset));\n\t},\n\tfixed: function()\n\t{\n\t\tthis.$element.addClass(this.opts.classname).css('top', this.opts.offset + 'px');\n\t\tthis.callback('fixed');\n\t},\n\tunfixed: function()\n\t{\n\t\tthis.$element.removeClass(this.opts.classname).css('top', '');\n\t\tthis.callback('unfixed');\n }\n };\n\n // Inheritance\n Kube.Sticky.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Sticky');\n Kube.Plugin.autoload('Sticky');\n\n}(Kube));\n/**\n * @library Kube Toggleme\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Toggleme = function(element, options)\n {\n this.namespace = 'toggleme';\n this.defaults = {\n toggleEvent: 'click',\n target: null,\n text: '',\n animationOpen: 'slideDown',\n animationClose: 'slideUp',\n callbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Toggleme.prototype = {\n start: function()\n {\n if (!this.hasTarget()) return;\n\n this.$element.on(this.opts.toggleEvent + '.' + this.namespace, $.proxy(this.toggle, this));\n },\n stop: function()\n {\n this.$element.off('.' + this.namespace);\n this.revertText();\n },\n toggle: function(e)\n {\n if (this.isOpened()) this.close(e);\n else this.open(e);\n },\n open: function(e)\n {\n if (e) e.preventDefault();\n\n if (!this.isOpened())\n {\n this.storeText();\n this.callback('open');\n this.$target.animation('slideDown', $.proxy(this.onOpened, this));\n\n // changes the text of $element with a less delay to smooth\n setTimeout($.proxy(this.replaceText, this), 100);\n\t\t}\n },\n close: function(e)\n {\n if (e) e.preventDefault();\n\n if (this.isOpened())\n {\n this.callback('close');\n this.$target.animation('slideUp', $.proxy(this.onClosed, this));\n\t\t}\n },\n\tisOpened: function()\n {\n return (this.$target.hasClass('open'));\n },\n onOpened: function()\n {\n this.$target.addClass('open');\n\t\tthis.callback('opened');\n },\n onClosed: function()\n {\n this.$target.removeClass('open');\n this.revertText();\n\t\tthis.callback('closed');\n },\n storeText: function()\n {\n this.$element.data('replacement-text', this.$element.html());\n },\n revertText: function()\n {\n var text = this.$element.data('replacement-text');\n if (text) this.$element.html(text);\n\n this.$element.removeData('replacement-text');\n },\n replaceText: function()\n {\n if (this.opts.text !== '')\n {\n this.$element.html(this.opts.text);\n }\n }\n };\n\n // Inheritance\n Kube.Toggleme.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Toggleme');\n Kube.Plugin.autoload('Toggleme');\n\n}(Kube));\n/**\n * @library Kube Offcanvas\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Offcanvas = function(element, options)\n {\n this.namespace = 'offcanvas';\n this.defaults = {\n\t\ttarget: null, // selector\n\t\tpush: true, // boolean\n\t\twidth: '250px', // string\n\t\tdirection: 'left', // string: left or right\n\t\ttoggleEvent: 'click',\n\t\tclickOutside: true, // boolean\n\t\tanimationOpen: 'slideInLeft',\n\t\tanimationClose: 'slideOutLeft',\n\t\tcallbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Services\n this.utils = new Kube.Utils();\n this.detect = new Kube.Detect();\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Offcanvas.prototype = {\n start: function()\n {\n if (!this.hasTarget()) return;\n\n this.buildTargetWidth();\n this.buildAnimationDirection();\n\n this.$close = this.getCloseLink();\n this.$element.on(this.opts.toggleEvent + '.' + this.namespace, $.proxy(this.toggle, this));\n this.$target.addClass('offcanvas');\n\t},\n\tstop: function()\n\t{\n\t\tthis.closeAll();\n\n this.$element.off('.' + this.namespace);\n this.$close.off('.' + this.namespace);\n $(document).off('.' + this.namespace);\n\t},\n\ttoggle: function(e)\n\t{\n\t\tif (this.isOpened()) this.close(e);\n\t\telse this.open(e);\n },\n\tbuildTargetWidth: function()\n\t{\n this.opts.width = ($(window).width() < parseInt(this.opts.width)) ? '100%' : this.opts.width;\n\t},\n\tbuildAnimationDirection: function()\n\t{\n if (this.opts.direction === 'right')\n {\n this.opts.animationOpen = 'slideInRight';\n\t\t\tthis.opts.animationClose = 'slideOutRight';\n }\n\t},\n\tgetCloseLink: function()\n\t{\n return this.$target.find('.close');\n\t},\n\topen: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n if (!this.isOpened())\n {\n this.closeAll();\n\t\t\tthis.callback('open');\n\n this.$target.addClass('offcanvas-' + this.opts.direction);\n this.$target.css('width', this.opts.width);\n\n this.pushBody();\n\n\t\t\tthis.$target.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n\t\t}\n\t},\n\tcloseAll: function()\n\t{\n\t\tvar $elms = $(document).find('.offcanvas');\n\t\tif ($elms.length !== 0)\n\t\t{\n $elms.each(function()\n {\n var $el = $(this);\n\n if ($el.hasClass('open'))\n {\n $el.css('width', '').animation('hide');\n $el.removeClass('open offcanvas-left offcanvas-right');\n }\n\n });\n\n $(document).off('.' + this.namespace);\n $('body').css('left', '');\n\t\t}\n\t},\n\tclose: function(e)\n\t{\n\t\tif (e)\n\t\t{\n\t\tvar $el = $(e.target);\n\t\tvar isTag = ($el[0].tagName === 'A' || $el[0].tagName === 'BUTTON');\n\t\tif (isTag && $el.closest('.offcanvas').length !== 0 && !$el.hasClass('close'))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\te.preventDefault();\n }\n\n if (this.isOpened())\n\t\t{\n\t\t\tthis.utils.enableBodyScroll();\n\t\t\tthis.callback('close');\n this.pullBody();\n\t\t\tthis.$target.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n\t\t}\n\t},\n\tisOpened: function()\n {\n return (this.$target.hasClass('open'));\n },\n\tonOpened: function()\n\t{\n\t\tif (this.opts.clickOutside) $(document).on('click.' + this.namespace, $.proxy(this.close, this));\n\t\tif (this.detect.isMobileScreen()) $('html').addClass('no-scroll');\n\n $(document).on('keyup.' + this.namespace, $.proxy(this.handleKeyboard, this));\n this.$close.on('click.' + this.namespace, $.proxy(this.close, this));\n\n\t\tthis.utils.disableBodyScroll();\n this.$target.addClass('open');\n this.callback('opened');\n\t},\n\tonClosed: function()\n\t{\n\t\tif (this.detect.isMobileScreen()) $('html').removeClass('no-scroll');\n\n this.$target.css('width', '').removeClass('offcanvas-' + this.opts.direction);\n\n this.$close.off('.' + this.namespace);\n\t\t$(document).off('.' + this.namespace);\n\n this.$target.removeClass('open');\n\t\tthis.callback('closed');\n\t},\n\thandleKeyboard: function(e)\n\t{\n\t\tif (e.which === 27) this.close();\n\t},\n\tpullBody: function()\n\t{\n if (this.opts.push)\n {\n $('body').animate({ left: 0 }, 350, function() { $(this).removeClass('offcanvas-push-body'); });\n }\n\t},\n\tpushBody: function()\n\t{\n if (this.opts.push)\n {\n var properties = (this.opts.direction === 'left') ? { 'left': this.opts.width } : { 'left': '-' + this.opts.width };\n $('body').addClass('offcanvas-push-body').animate(properties, 200);\n }\n\t}\n };\n\n // Inheritance\n Kube.Offcanvas.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Offcanvas');\n Kube.Plugin.autoload('Offcanvas');\n\n}(Kube));\n/**\n * @library Kube Collapse\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Collapse = function(element, options)\n {\n this.namespace = 'collapse';\n this.defaults = {\n target: null,\n toggle: true,\n active: false, // string (hash = tab id selector)\n toggleClass: 'collapse-toggle',\n boxClass: 'collapse-box',\n callbacks: ['open', 'opened', 'close', 'closed'],\n\n // private\n hashes: [],\n\t\tcurrentHash: false,\n\t\tcurrentItem: false\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Collapse.prototype = {\n start: function()\n {\n // items\n this.$items = this.getItems();\n this.$items.each($.proxy(this.loadItems, this));\n\n // boxes\n this.$boxes = this.getBoxes();\n\n // active\n this.setActiveItem();\n },\n getItems: function()\n {\n return this.$element.find('.' + this.opts.toggleClass);\n },\n getBoxes: function()\n {\n return this.$element.find('.' + this.opts.boxClass);\n },\n\tloadItems: function(i, el)\n\t{\n\t\tvar item = this.getItem(el);\n\n\t\t// set item identificator\n\t\titem.$el.attr('rel', item.hash);\n\n // active\n\t\tif (!$(item.hash).hasClass('hide'))\n\t\t{\n\t\t\tthis.opts.currentItem = item;\n\t\t\tthis.opts.active = item.hash;\n\n item.$el.addClass('active');\n }\n\n\t\t// event\n\t\titem.$el.on('click.collapse', $.proxy(this.toggle, this));\n\n\t},\n\tsetActiveItem: function()\n\t{\n\t\tif (this.opts.active !== false)\n\t\t{\n\t\t\tthis.opts.currentItem = this.getItemBy(this.opts.active);\n\t\t\tthis.opts.active = this.opts.currentItem.hash;\n\t\t}\n\n if (this.opts.currentItem !== false)\n {\n\t\t this.addActive(this.opts.currentItem);\n\t\t this.opts.currentItem.$box.removeClass('hide');\n\t\t}\n\t},\n\taddActive: function(item)\n\t{\n\t\titem.$box.removeClass('hide').addClass('open');\n\t\titem.$el.addClass('active');\n\n\t\tif (item.$caret !== false) item.$caret.removeClass('down').addClass('up');\n\t\tif (item.$parent !== false) item.$parent.addClass('active');\n\n\t\tthis.opts.currentItem = item;\n\t},\n\tremoveActive: function(item)\n\t{\n\t\titem.$box.removeClass('open');\n\t\titem.$el.removeClass('active');\n\n\t\tif (item.$caret !== false) item.$caret.addClass('down').removeClass('up');\n\t\tif (item.$parent !== false) item.$parent.removeClass('active');\n\n\t\tthis.opts.currentItem = false;\n\t},\n toggle: function(e)\n {\n if (e) e.preventDefault();\n\n var target = $(e.target).closest('.' + this.opts.toggleClass).get(0) || e.target;\n var item = this.getItem(target);\n\n if (this.isOpened(item.hash)) this.close(item.hash);\n else this.open(e)\n },\n openAll: function()\n {\n this.$items.addClass('active');\n this.$boxes.addClass('open').removeClass('hide');\n },\n open: function(e, push)\n {\n\t\tif (typeof e === 'undefined') return;\n\t\tif (typeof e === 'object') e.preventDefault();\n\n var target = $(e.target).closest('.' + this.opts.toggleClass).get(0) || e.target;\n\t\tvar item = (typeof e === 'object') ? this.getItem(target) : this.getItemBy(e);\n\n\t\tif (item.$box.hasClass('open'))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.opts.toggle) this.closeAll();\n\n\t\tthis.callback('open', item);\n\t\tthis.addActive(item);\n\n item.$box.animation('slideDown', $.proxy(this.onOpened, this));\n },\n onOpened: function()\n {\n\t\tthis.callback('opened', this.opts.currentItem);\n },\n closeAll: function()\n {\n this.$items.removeClass('active').closest('li').removeClass('active');\n this.$boxes.removeClass('open').addClass('hide');\n },\n close: function(num)\n {\n\t\tvar item = this.getItemBy(num);\n\n\t\tthis.callback('close', item);\n\n\t\tthis.opts.currentItem = item;\n\n\t\titem.$box.animation('slideUp', $.proxy(this.onClosed, this));\n },\n onClosed: function()\n {\n var item = this.opts.currentItem;\n\n\t\tthis.removeActive(item);\n\t\tthis.callback('closed', item);\n },\n isOpened: function(hash)\n {\n return $(hash).hasClass('open');\n },\n\tgetItem: function(element)\n\t{\n\t\tvar item = {};\n\n\t\titem.$el = $(element);\n\t\titem.hash = item.$el.attr('href');\n\t\titem.$box = $(item.hash);\n\n\t\tvar $parent = item.$el.parent();\n\t\titem.$parent = ($parent[0].tagName === 'LI') ? $parent : false;\n\n\t\tvar $caret = item.$el.find('.caret');\n\t\titem.$caret = ($caret.length !== 0) ? $caret : false;\n\n\t\treturn item;\n\t},\n\tgetItemBy: function(num)\n\t{\n\t\tvar element = (typeof num === 'number') ? this.$items.eq(num-1) : this.$element.find('[rel=\"' + num + '\"]');\n\n\t\treturn this.getItem(element);\n }\n };\n\n // Inheritance\n Kube.Collapse.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Collapse');\n Kube.Plugin.autoload('Collapse');\n\n}(Kube));\n/**\n * @library Kube Dropdown\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Dropdown = function(element, options)\n {\n this.namespace = 'dropdown';\n this.defaults = {\n\t\ttarget: null,\n\t\ttoggleEvent: 'click',\n\t\theight: false, // integer\n\t\twidth: false, // integer\n\t\tanimationOpen: 'slideDown',\n\t\tanimationClose: 'slideUp',\n\t\tcaretUp: false,\n callbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Services\n this.utils = new Kube.Utils();\n this.detect = new Kube.Detect();\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Dropdown.prototype = {\n start: function()\n {\n this.buildClose();\n this.buildCaret();\n\n if (this.detect.isMobile()) this.buildMobileAnimation();\n\n this.$target.addClass('hide');\n this.$element.on(this.opts.toggleEvent + '.' + this.namespace, $.proxy(this.toggle, this));\n\n\t},\n\tstop: function()\n\t{\n\t\tthis.$element.off('.' + this.namespace);\n this.$target.removeClass('open').addClass('hide');\n\t\tthis.disableEvents();\n\t},\n\tbuildMobileAnimation: function()\n\t{\n this.opts.animationOpen = 'fadeIn';\n this.opts.animationClose = 'fadeOut';\n\t},\n\tbuildClose: function()\n\t{\n this.$close = this.$target.find('.close');\n\t},\n\tbuildCaret: function()\n\t{\n this.$caret = this.getCaret();\n\t\tthis.buildCaretPosition();\n\t},\n\tbuildCaretPosition: function()\n\t{\n\t\tvar height = this.$element.offset().top + this.$element.innerHeight() + this.$target.innerHeight();\n\n\t\tif ($(document).height() > height)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n this.opts.caretUp = true;\n\t\tthis.$caret.addClass('up');\n\t},\n\tgetCaret: function()\n\t{\n\t\treturn this.$element.find('.caret');\n\t},\n\ttoggleCaretOpen: function()\n\t{\n\t\tif (this.opts.caretUp) this.$caret.removeClass('up').addClass('down');\n\t\telse this.$caret.removeClass('down').addClass('up');\n\t},\n\ttoggleCaretClose: function()\n\t{\n\t\tif (this.opts.caretUp) this.$caret.removeClass('down').addClass('up');\n\t\telse this.$caret.removeClass('up').addClass('down');\n\t},\n\ttoggle: function(e)\n\t{\n\t\tif (this.isOpened()) this.close(e);\n\t\telse this.open(e);\n\t},\n\topen: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n this.callback('open');\n\t\t$('.dropdown').removeClass('open').addClass('hide');\n\n\t\tif (this.opts.height) this.$target.css('min-height', this.opts.height + 'px');\n\t\tif (this.opts.width) this.$target.width(this.opts.width);\n\n\t\tthis.setPosition();\n\t\tthis.toggleCaretOpen();\n\n\t\tthis.$target.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n\t},\n\tclose: function(e)\n\t{\n if (!this.isOpened())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (e)\n\t\t{\n\t\t\tif (this.shouldNotBeClosed(e.target))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tthis.utils.enableBodyScroll();\n\t\tthis.callback('close');\n\t\tthis.toggleCaretClose();\n\n\t\tthis.$target.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n\t},\n\tonClosed: function()\n\t{\n this.$target.removeClass('open');\n\t\tthis.disableEvents();\n\t\tthis.callback('closed');\n\t},\n\tonOpened: function()\n\t{\n\t\tthis.$target.addClass('open');\n\t\tthis.enableEvents();\n\t\tthis.callback('opened');\n\t},\n\tisOpened: function()\n\t{\n\t\treturn (this.$target.hasClass('open'));\n\t},\n\tenableEvents: function()\n\t{\n\t\tif (this.detect.isDesktop())\n\t\t{\n\t\t\tthis.$target.on('mouseover.' + this.namespace, $.proxy(this.utils.disableBodyScroll, this.utils))\n\t\t\t .on('mouseout.' + this.namespace, $.proxy(this.utils.enableBodyScroll, this.utils));\n\t\t}\n\n\t\t$(document).on('scroll.' + this.namespace, $.proxy(this.setPosition, this));\n\t\t$(window).on('resize.' + this.namespace, $.proxy(this.setPosition, this));\n\t\t$(document).on('click.' + this.namespace + ' touchstart.' + this.namespace, $.proxy(this.close, this));\n\t\t$(document).on('keydown.' + this.namespace, $.proxy(this.handleKeyboard, this));\n\t\tthis.$target.find('[data-action=\"dropdown-close\"]').on('click.' + this.namespace, $.proxy(this.close, this));\n\t},\n\tdisableEvents: function()\n\t{\n\t\tthis.$target.off('.' + this.namespace);\n\t\t$(document).off('.' + this.namespace);\n\t\t$(window).off('.' + this.namespace);\n\t},\n\thandleKeyboard: function(e)\n\t{\n\t\tif (e.which === 27) this.close(e);\n\t},\n\tshouldNotBeClosed: function(el)\n\t{\n if ($(el).attr('data-action') === 'dropdown-close' || el === this.$close[0])\n {\n return false;\n\t\t}\n\t\telse if ($(el).closest('.dropdown').length === 0)\n\t\t{\n\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t},\n isNavigationFixed: function()\n\t{\n\t\treturn (this.$element.closest('.fixed').length !== 0);\n\t},\n\tgetPlacement: function(height)\n\t{\n\t\treturn ($(document).height() < height) ? 'top' : 'bottom';\n\t},\n\tgetOffset: function(position)\n\t{\n\t\treturn (this.isNavigationFixed()) ? this.$element.position() : this.$element.offset();\n\t},\n\tgetPosition: function()\n\t{\n\t\treturn (this.isNavigationFixed()) ? 'fixed' : 'absolute';\n\t},\n\tsetPosition: function()\n\t{\n\t\tif (this.detect.isMobile())\n\t\t{\n this.$target.addClass('dropdown-mobile');\n return;\n\t\t}\n\n\t\tvar position = this.getPosition();\n\t\t\tvar coords = this.getOffset(position);\n\t\t\tvar height = this.$target.innerHeight();\n\t\t\tvar width = this.$target.innerWidth();\n\t\t\tvar placement = this.getPlacement(coords.top + height + this.$element.innerHeight());\n\t\t\tvar leftFix = ($(window).width() < (coords.left + width)) ? (width - this.$element.innerWidth()) : 0;\n\t\t\tvar top, left = coords.left - leftFix;\n\n\t\t\tif (placement === 'bottom')\n\t\t\t{\n\t\t\tif (!this.isOpened()) this.$caret.removeClass('up').addClass('down');\n\n\t\t\t\tthis.opts.caretUp = false;\n\t\t\t\ttop = coords.top + this.$element.outerHeight() + 1;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.opts.animationOpen = 'show';\n\t\t\t\tthis.opts.animationClose = 'hide';\n\n if (!this.isOpened()) this.$caret.addClass('up').removeClass('down');\n\n\t\t\t\tthis.opts.caretUp = true;\n\t\t\t\ttop = coords.top - height - 1;\n\t\t\t}\n\n\t\t\tthis.$target.css({ position: position, top: top + 'px', left: left + 'px' });\n\t}\n };\n\n // Inheritance\n Kube.Dropdown.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Dropdown');\n Kube.Plugin.autoload('Dropdown');\n\n}(Kube));\n/**\n * @library Kube Tabs\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Tabs = function(element, options)\n {\n this.namespace = 'tabs';\n this.defaults = {\n\t\tequals: false,\n\t\tactive: false, // string (hash = tab id selector)\n\t\tlive: false, // class selector\n\t\thash: true, //boolean\n\t\tcallbacks: ['init', 'next', 'prev', 'open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Tabs.prototype = {\n start: function()\n {\n if (this.opts.live !== false) this.buildLiveTabs();\n\n this.tabsCollection = [];\n this.hashesCollection = [];\n this.currentHash = [];\n this.currentItem = false;\n\n // items\n this.$items = this.getItems();\n this.$items.each($.proxy(this.loadItems, this));\n\n // tabs\n\t\tthis.$tabs = this.getTabs();\n\n // location hash\n\t\tthis.currentHash = this.getLocationHash();\n\n\t\t// close all\n\t\tthis.closeAll();\n\n // active & height\n\t\tthis.setActiveItem();\n\t\tthis.setItemHeight();\n\n // callback\n\t\tthis.callback('init');\n\n\t},\n\tgetTabs: function()\n\t{\n\t\treturn $(this.tabsCollection).map(function()\n\t\t{\n\t\treturn this.toArray();\n });\n\t},\n\tgetItems: function()\n\t{\n\t\treturn this.$element.find('a');\n\t},\n\tloadItems: function(i, el)\n\t{\n\t\tvar item = this.getItem(el);\n\n\t\t// set item identificator\n\t\titem.$el.attr('rel', item.hash);\n\n\t\t// collect item\n this.collectItem(item);\n\n // active\n\t\tif (item.$parent.hasClass('active'))\n\t\t{\n\t\t\tthis.currentItem = item;\n\t\t\tthis.opts.active = item.hash;\n\t\t}\n\n\t\t// event\n\t\titem.$el.on('click.tabs', $.proxy(this.open, this));\n\n\t},\n\tcollectItem: function(item)\n\t{\n\t\tthis.tabsCollection.push(item.$tab);\n\t\tthis.hashesCollection.push(item.hash);\n\t},\n\tbuildLiveTabs: function()\n\t{\n\t\tvar $layers = $(this.opts.live);\n\n\t\tif ($layers.length === 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.$liveTabsList = $('
');\n\t\t$layers.each($.proxy(this.buildLiveItem, this));\n\n\t\tthis.$element.html('').append(this.$liveTabsList);\n\n\t},\n\tbuildLiveItem: function(i, tab)\n\t{\n\t\tvar $tab = $(tab);\n\t\tvar $li = $('');\n\t\tvar $a = $('');\n\t\tvar index = i + 1;\n\n\t\t$tab.attr('id', this.getLiveItemId($tab, index));\n\n\t\tvar hash = '#' + $tab.attr('id');\n\t\tvar title = this.getLiveItemTitle($tab);\n\n\t\t$a.attr('href', hash).attr('rel', hash).text(title);\n\t\t$li.append($a);\n\n\t\tthis.$liveTabsList.append($li);\n\t},\n\tgetLiveItemId: function($tab, index)\n\t{\n\t\treturn (typeof $tab.attr('id') === 'undefined') ? this.opts.live.replace('.', '') + index : $tab.attr('id');\n\t},\n\tgetLiveItemTitle: function($tab)\n\t{\n\t\treturn (typeof $tab.attr('data-title') === 'undefined') ? $tab.attr('id') : $tab.attr('data-title');\n\t},\n\tsetActiveItem: function()\n\t{\n\t\tif (this.currentHash)\n\t\t{\n\t\t\tthis.currentItem = this.getItemBy(this.currentHash);\n\t\t\tthis.opts.active = this.currentHash;\n\t\t}\n\t\telse if (this.opts.active === false)\n\t\t{\n\t\t\tthis.currentItem = this.getItem(this.$items.first());\n\t\t\tthis.opts.active = this.currentItem.hash;\n\t\t}\n\n\t\tthis.addActive(this.currentItem);\n\t},\n\taddActive: function(item)\n\t{\n\t\titem.$parent.addClass('active');\n\t\titem.$tab.removeClass('hide').addClass('open');\n\n\t\tthis.currentItem = item;\n\t},\n\tremoveActive: function(item)\n\t{\n\t\titem.$parent.removeClass('active');\n\t\titem.$tab.addClass('hide').removeClass('open');\n\n\t\tthis.currentItem = false;\n\t},\n\tnext: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n\t\tvar item = this.getItem(this.fetchElement('next'));\n\n\t\tthis.open(item.hash);\n\t\tthis.callback('next', item);\n\n\t},\n\tprev: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n\t\tvar item = this.getItem(this.fetchElement('prev'));\n\n\t\tthis.open(item.hash);\n\t\tthis.callback('prev', item);\n\t},\n\tfetchElement: function(type)\n\t{\n var element;\n\t\tif (this.currentItem !== false)\n\t\t{\n\t\t\t// prev or next\n\t\t\telement = this.currentItem.$parent[type]().find('a');\n\n\t\t\tif (element.length === 0)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// first\n\t\t\telement = this.$items[0];\n\t\t}\n\n\t\treturn element;\n\t},\n\topen: function(e, push)\n\t{\n\t\tif (typeof e === 'undefined') return;\n\t\tif (typeof e === 'object') e.preventDefault();\n\n\t\tvar item = (typeof e === 'object') ? this.getItem(e.target) : this.getItemBy(e);\n\t\tthis.closeAll();\n\n\t\tthis.callback('open', item);\n\t\tthis.addActive(item);\n\n\t\t// push state (doesn't need to push at the start)\n this.pushStateOpen(push, item);\n\t\tthis.callback('opened', item);\n\t},\n\tpushStateOpen: function(push, item)\n\t{\n\t\tif (push !== false && this.opts.hash !== false)\n\t\t{\n\t\t\thistory.pushState(false, false, item.hash);\n\t\t}\n\t},\n\tclose: function(num)\n\t{\n\t\tvar item = this.getItemBy(num);\n\n\t\tif (!item.$parent.hasClass('active'))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.callback('close', item);\n\t\tthis.removeActive(item);\n\t\tthis.pushStateClose();\n\t\tthis.callback('closed', item);\n\n\t},\n\tpushStateClose: function()\n\t{\n if (this.opts.hash !== false)\n {\n\t\t\thistory.pushState(false, false, ' ');\n\t\t}\n\t},\n\tcloseAll: function()\n\t{\n\t\tthis.$tabs.removeClass('open').addClass('hide');\n\t\tthis.$items.parent().removeClass('active');\n\t},\n\tgetItem: function(element)\n\t{\n\t\tvar item = {};\n\n\t\titem.$el = $(element);\n\t\titem.hash = item.$el.attr('href');\n\t\titem.$parent = item.$el.parent();\n\t\titem.$tab = $(item.hash);\n\n\t\treturn item;\n\t},\n\tgetItemBy: function(num)\n\t{\n\t\tvar element = (typeof num === 'number') ? this.$items.eq(num-1) : this.$element.find('[rel=\"' + num + '\"]');\n\n\t\treturn this.getItem(element);\n\t},\n\tgetLocationHash: function()\n\t{\n\t\tif (this.opts.hash === false)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn (this.isHash()) ? top.location.hash : false;\n\t},\n\tisHash: function()\n\t{\n\t\treturn !(top.location.hash === '' || $.inArray(top.location.hash, this.hashesCollection) === -1);\n\t},\n\tsetItemHeight: function()\n\t{\n\t\tif (this.opts.equals)\n\t\t{\n\t\tvar minHeight = this.getItemMaxHeight() + 'px';\n\t\t\tthis.$tabs.css('min-height', minHeight);\n\t\t}\n\t},\n\tgetItemMaxHeight: function()\n\t{\n\t\tvar max = 0;\n\t\tthis.$tabs.each(function()\n\t\t{\n\t\t\tvar h = $(this).height();\n\t\t\tmax = h > max ? h : max;\n\t\t});\n\n\t\treturn max;\n\t}\n };\n\n // Inheritance\n Kube.Tabs.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Tabs');\n Kube.Plugin.autoload('Tabs');\n\n}(Kube));\n/**\n * @library Kube Modal\n * @author Imperavi LLC\n * @license MIT\n */\n(function($)\n{\n $.modalcurrent = null;\n\t$.modalwindow = function(options)\n\t{\n\tvar opts = $.extend({}, options, { show: true });\n\tvar $element = $('');\n\n\t$element.modal(opts);\n\t};\n\n})(jQuery);\n\n(function(Kube)\n{\n Kube.Modal = function(element, options)\n {\n this.namespace = 'modal';\n this.defaults = {\n target: null,\n show: false,\n\t\turl: false,\n\t\theader: false,\n\t\twidth: '600px', // string\n\t\theight: false, // or string\n\t\tmaxHeight: false,\n\t\tposition: 'center', // top or center\n\t\toverlay: true,\n\t\tappendForms: false,\n\t\tappendFields: false,\n\t\tanimationOpen: 'show',\n\t\tanimationClose: 'hide',\n\t\tcallbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Services\n this.utils = new Kube.Utils();\n this.detect = new Kube.Detect();\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Modal.prototype = {\n start: function()\n {\n if (!this.hasTarget())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n if (this.opts.show) this.load();\n\t\telse this.$element.on('click.' + this.namespace, $.proxy(this.load, this));\n\t},\n\tbuildModal: function()\n\t{\n\t\tthis.$modal = this.$target.find('.modal');\n\t\tthis.$header = this.$target.find('.modal-header');\n\t\tthis.$close = this.$target.find('.close');\n\t\tthis.$body = this.$target.find('.modal-body');\n\t},\n\tbuildOverlay: function()\n\t{\n\t\tif (this.opts.overlay === false)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif ($('#modal-overlay').length !== 0)\n\t\t{\n\t\t\tthis.$overlay = $('#modal-overlay');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.$overlay = $('').addClass('hide');\n\t\t\t$('body').prepend(this.$overlay);\n\t\t}\n\n\t\tthis.$overlay.addClass('overlay');\n\t},\n\tbuildHeader: function()\n\t{\n\t\tif (this.opts.header) this.$header.html(this.opts.header);\n\t},\n\tload: function(e)\n\t{\n\t\tthis.buildModal();\n\t\tthis.buildOverlay();\n\t\tthis.buildHeader();\n\n if (this.opts.url) this.buildContent();\n else this.open(e);\n\t},\n\topen: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n if (this.isOpened())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.detect.isMobile()) this.opts.width = '96%';\n\t\tif (this.opts.overlay) this.$overlay.removeClass('hide');\n\n\t\tthis.$target.removeClass('hide');\n\t\tthis.$modal.removeClass('hide');\n\n this.enableEvents();\n\t\tthis.findActions();\n\n\t\tthis.resize();\n\t\t$(window).on('resize.' + this.namespace, $.proxy(this.resize, this));\n\n\t\tif (this.detect.isDesktop()) this.utils.disableBodyScroll();\n\n\t\t// enter\n\t\tthis.$modal.find('input[type=text],input[type=url],input[type=email]').on('keydown.' + this.namespace, $.proxy(this.handleEnter, this));\n\n\t\tthis.callback('open');\n\t\tthis.$modal.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n },\n close: function(e)\n {\n if (!this.$modal || !this.isOpened())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (e)\n\t\t{\n\t\t\tif (this.shouldNotBeClosed(e.target))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tthis.callback('close');\n\t\tthis.disableEvents();\n\n\t\tthis.$modal.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n\n if (this.opts.overlay) this.$overlay.animation(this.opts.animationClose);\n },\n\tonOpened: function()\n\t{\n\t\tthis.$modal.addClass('open');\n this.callback('opened');\n\n $.modalcurrent = this;\n\t},\n\tonClosed: function()\n\t{\n\t\tthis.callback('closed');\n\n this.$target.addClass('hide');\n this.$modal.removeClass('open');\n\n\t\tif (this.detect.isDesktop()) this.utils.enableBodyScroll();\n\n\t\tthis.$body.css('height', '');\n $.modalcurrent = null;\n\t},\n\tisOpened: function()\n\t{\n\t\treturn (this.$modal.hasClass('open'));\n\t},\n\tgetData: function()\n\t{\n var formdata = new Kube.FormData(this);\n formdata.set('');\n\n return formdata.get();\n\t},\n\tbuildContent: function()\n\t{\n\t\t$.ajax({\n\t\t\turl: this.opts.url + '?' + new Date().getTime(),\n\t\t\tcache: false,\n\t\t\ttype: 'post',\n\t\t\tdata: this.getData(),\n\t\t\tsuccess: $.proxy(function(data)\n\t\t\t{\n\t\t\t\tthis.$body.html(data);\n\t\t\t\tthis.open();\n\n\t\t\t}, this)\n\t\t});\n\t},\n\tbuildWidth: function()\n\t{\n\t\tvar width = this.opts.width;\n\t\tvar top = '2%';\n\t\tvar bottom = '2%';\n\t\tvar percent = width.match(/%$/);\n\n\t\tif ((parseInt(this.opts.width) > $(window).width()) && !percent)\n\t\t{\n width = '96%';\n\t\t}\n\t\telse if (!percent)\n\t\t{\n top = '16px';\n bottom = '16px';\n\t\t}\n\n\t\tthis.$modal.css({ 'width': width, 'margin-top': top, 'margin-bottom': bottom });\n\n\t},\n\tbuildPosition: function()\n\t{\n\t\tif (this.opts.position !== 'center')\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tvar windowHeight = $(window).height();\n\t\tvar height = this.$modal.outerHeight();\n\t\tvar top = (windowHeight/2 - height/2) + 'px';\n\n\t\tif (this.detect.isMobile()) top = '2%';\n\t\telse if (height > windowHeight) top = '16px';\n\n\t\tthis.$modal.css('margin-top', top);\n\t},\n\tbuildHeight: function()\n\t{\n\t\tvar windowHeight = $(window).height();\n\n\t\tif (this.opts.maxHeight)\n\t\t{\n\t\t\tvar padding = parseInt(this.$body.css('padding-top')) + parseInt(this.$body.css('padding-bottom'));\n\t\t\tvar margin = parseInt(this.$modal.css('margin-top')) + parseInt(this.$modal.css('margin-bottom'));\n\t\t\tvar height = windowHeight - this.$header.innerHeight() - padding - margin;\n\n\t\t\tthis.$body.height(height);\n\t\t}\n\t\telse if (this.opts.height !== false)\n\t\t{\n\t\t\tthis.$body.css('height', this.opts.height);\n\t\t}\n\n\t\tvar modalHeight = this.$modal.outerHeight();\n\t\tif (modalHeight > windowHeight)\n\t\t{\n\t\t\tthis.opts.animationOpen = 'show';\n\t\t\tthis.opts.animationClose = 'hide';\n\t\t}\n\t},\n\tresize: function()\n\t{\n\t\tthis.buildWidth();\n\t\tthis.buildPosition();\n\t\tthis.buildHeight();\n\t},\n\tenableEvents: function()\n\t{\n\t\tthis.$close.on('click.' + this.namespace, $.proxy(this.close, this));\n\t\t$(document).on('keyup.' + this.namespace, $.proxy(this.handleEscape, this));\n\t\tthis.$target.on('click.' + this.namespace, $.proxy(this.close, this));\n\t},\n\tdisableEvents: function()\n\t{\n\t\tthis.$close.off('.' + this.namespace);\n\t\t$(document).off('.' + this.namespace);\n\t\tthis.$target.off('.' + this.namespace);\n\t\t$(window).off('.' + this.namespace);\n\t},\n\tfindActions: function()\n\t{\n\t\tthis.$body.find('[data-action=\"modal-close\"]').on('mousedown.' + this.namespace, $.proxy(this.close, this));\n\t},\n\tsetHeader: function(header)\n\t{\n\t\tthis.$header.html(header);\n\t},\n\tsetContent: function(content)\n\t{\n\t\tthis.$body.html(content);\n\t},\n\tsetWidth: function(width)\n\t{\n\t\tthis.opts.width = width;\n\t\tthis.resize();\n\t},\n\tgetModal: function()\n\t{\n return this.$modal;\n\t},\n\tgetBody: function()\n\t{\n return this.$body;\n\t},\n\tgetHeader: function()\n\t{\n return this.$header;\n\t},\n\thandleEnter: function(e)\n\t{\n\t\tif (e.which === 13)\n\t\t{\n\t\te.preventDefault();\n\t\tthis.close(false);\n }\n\t},\n\thandleEscape: function(e)\n\t{\n\t\treturn (e.which === 27) ? this.close(false) : true;\n\t},\n\tshouldNotBeClosed: function(el)\n\t{\n if ($(el).attr('data-action') === 'modal-close' || el === this.$close[0])\n {\n return false;\n\t\t}\n\t\telse if ($(el).closest('.modal').length === 0)\n\t\t{\n\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n };\n\n // Inheritance\n Kube.Modal.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Modal');\n Kube.Plugin.autoload('Modal');\n\n}(Kube));","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define(['d3'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('d3'));\n } else {\n root.MG = factory(root.d3);\n }\n}(this, function(d3) {\n(typeof window === 'undefined' ? global : window).MG = {version: '2.11'};\n\n//a set of helper functions, some that we've written, others that we've borrowed\n\nMG.convert = {};\n\nMG.convert.date = function(data, accessor, time_format) {\n time_format = (typeof time_format === \"undefined\") ? '%Y-%m-%d' : time_format;\n var parse_time = d3.timeParse(time_format);\n data = data.map(function(d) {\n d[accessor] = parse_time(d[accessor].trim());\n return d;\n });\n\n return data;\n}\n\nMG.convert.number = function(data, accessor) {\n data = data.map(function(d) {\n d[accessor] = Number(d[accessor]);\n return d;\n });\n\n return data;\n}\n\nMG.time_format = function(utc, specifier) {\n return utc ? d3.utcFormat(specifier) : d3.timeFormat(specifier);\n}\n\nfunction mg_jquery_exists() {\n if (typeof jQuery !== 'undefined' || typeof $ !== 'undefined') {\n return true;\n } else {\n return false;\n }\n}\n\nfunction mg_get_rollover_time_format(args) {\n var fmt;\n switch (args.processed.x_time_frame) {\n case 'millis':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %H:%M:%S.%L');\n break;\n case 'seconds':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %H:%M:%S');\n break;\n case 'less-than-a-day':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %I:%M%p');\n break;\n case 'four-days':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %I:%M%p');\n break;\n default:\n fmt = MG.time_format(args.utc_time, '%b %e, %Y');\n }\n return fmt;\n}\n\nfunction mg_data_in_plot_bounds(datum, args) {\n return datum[args.x_accessor] >= args.processed.min_x &&\n datum[args.x_accessor] <= args.processed.max_x &&\n datum[args.y_accessor] >= args.processed.min_y &&\n datum[args.y_accessor] <= args.processed.max_y;\n}\n\nfunction is_array(thing) {\n return Object.prototype.toString.call(thing) === '[object Array]';\n}\n\nfunction is_function(thing) {\n return Object.prototype.toString.call(thing) === '[object Function]';\n}\n\nfunction is_empty_array(thing) {\n return is_array(thing) && thing.length === 0;\n}\n\nfunction is_object(thing) {\n return Object.prototype.toString.call(thing) === '[object Object]';\n}\n\nfunction is_array_of_arrays(data) {\n var all_elements = data.map(function(d) {\n return is_array(d) === true && d.length > 0;\n });\n\n return d3.sum(all_elements) === data.length;\n}\n\nfunction is_array_of_objects(data) {\n // is every element of data an object?\n var all_elements = data.map(function(d) {\n return is_object(d) === true;\n });\n\n return d3.sum(all_elements) === data.length;\n}\n\nfunction is_array_of_objects_or_empty(data) {\n return is_empty_array(data) || is_array_of_objects(data);\n}\n\nfunction pluck(arr, accessor) {\n return arr.map(function(d) {\n return d[accessor] });\n}\n\nfunction count_array_elements(arr) {\n return arr.reduce(function(a, b) { a[b] = a[b] + 1 || 1;\n return a; }, {});\n}\n\nfunction mg_get_bottom(args) {\n return args.height - args.bottom;\n}\n\nfunction mg_get_plot_bottom(args) {\n // returns the pixel location of the bottom side of the plot area.\n return mg_get_bottom(args) - args.buffer;\n}\n\nfunction mg_get_top(args) {\n return args.top;\n}\n\nfunction mg_get_plot_top(args) {\n // returns the pixel location of the top side of the plot area.\n return mg_get_top(args) + args.buffer;\n}\n\nfunction mg_get_left(args) {\n return args.left;\n}\n\nfunction mg_get_plot_left(args) {\n // returns the pixel location of the left side of the plot area.\n return mg_get_left(args) + args.buffer;\n}\n\nfunction mg_get_right(args) {\n return args.width - args.right;\n}\n\nfunction mg_get_plot_right(args) {\n // returns the pixel location of the right side of the plot area.\n return mg_get_right(args) - args.buffer;\n}\n\n//////// adding elements, removing elements /////////////\n\nfunction mg_exit_and_remove(elem) {\n elem.exit().remove();\n}\n\nfunction mg_selectAll_and_remove(svg, cl) {\n svg.selectAll(cl).remove();\n}\n\nfunction mg_add_g(svg, cl) {\n return svg.append('g').classed(cl, true);\n}\n\nfunction mg_remove_element(svg, elem) {\n svg.select(elem).remove();\n}\n\n//////// axis helper functions ////////////\n\nfunction mg_make_rug(args, rug_class) {\n var svg = mg_get_svg_child_of(args.target);\n var all_data = mg_flatten_array(args.data);\n var rug = svg.selectAll('line.' + rug_class).data(all_data);\n\n rug.enter()\n .append('line')\n .attr('class', rug_class)\n .attr('opacity', 0.3);\n\n //remove rug elements that are no longer in use\n mg_exit_and_remove(rug);\n\n //set coordinates of new rug elements\n mg_exit_and_remove(rug);\n return rug;\n}\n\nfunction mg_add_color_accessor_to_rug(rug, args, rug_mono_class) {\n if (args.color_accessor) {\n rug.attr('stroke', args.scalefns.colorf);\n rug.classed(rug_mono_class, false);\n } else {\n rug.attr('stroke', null);\n rug.classed(rug_mono_class, true);\n }\n}\n\nfunction mg_rotate_labels(labels, rotation_degree) {\n if (rotation_degree) {\n labels.attr({\n dy: 0,\n transform: function() {\n var elem = d3.select(this);\n return 'rotate(' + rotation_degree + ' ' + elem.attr('x') + ',' + elem.attr('y') + ')';\n }\n });\n }\n}\n\n//////////////////////////////////////////////////\n\nfunction mg_elements_are_overlapping(labels) {\n labels = labels.node();\n if (!labels) {\n return false;\n }\n\n for (var i = 0; i < labels.length; i++) {\n if (mg_is_horizontally_overlapping(labels[i], labels)) return true;\n }\n\n return false;\n}\n\nfunction mg_prevent_horizontal_overlap(labels, args) {\n if (!labels || labels.length == 1) {\n return;\n }\n\n //see if each of our labels overlaps any of the other labels\n for (var i = 0; i < labels.length; i++) {\n //if so, nudge it up a bit, if the label it intersects hasn't already been nudged\n if (mg_is_horizontally_overlapping(labels[i], labels)) {\n var node = d3.select(labels[i]);\n var newY = +node.attr('y');\n if (newY + 8 >= args.top) {\n newY = args.top - 16;\n }\n node.attr('y', newY);\n }\n }\n}\n\nfunction mg_prevent_vertical_overlap(labels, args) {\n if (!labels || labels.length == 1) {\n return;\n }\n\n labels.sort(function(b, a) {\n return d3.select(a).attr('y') - d3.select(b).attr('y');\n });\n\n labels.reverse();\n\n var overlap_amount, label_i, label_j;\n\n //see if each of our labels overlaps any of the other labels\n for (var i = 0; i < labels.length; i++) {\n //if so, nudge it up a bit, if the label it intersects hasn't already been nudged\n label_i = d3.select(labels[i]).text();\n\n for (var j = 0; j < labels.length; j++) {\n label_j = d3.select(labels[j]).text();\n overlap_amount = mg_is_vertically_overlapping(labels[i], labels[j]);\n\n if (overlap_amount !== false && label_i !== label_j) {\n var node = d3.select(labels[i]);\n var newY = +node.attr('y');\n newY = newY + overlap_amount;\n node.attr('y', newY);\n }\n }\n }\n}\n\nfunction mg_is_vertically_overlapping(element, sibling) {\n var element_bbox = element.getBoundingClientRect();\n var sibling_bbox = sibling.getBoundingClientRect();\n\n if (element_bbox.top <= sibling_bbox.bottom && element_bbox.top >= sibling_bbox.top) {\n return sibling_bbox.bottom - element_bbox.top;\n }\n\n return false;\n}\n\nfunction mg_is_horiz_overlap(element, sibling) {\n var element_bbox = element.getBoundingClientRect();\n var sibling_bbox = sibling.getBoundingClientRect();\n\n if (element_bbox.right >= sibling_bbox.left || element_bbox.top >= sibling_bbox.top) {\n return sibling_bbox.bottom - element_bbox.top;\n }\n return false;\n}\n\nfunction mg_is_horizontally_overlapping(element, labels) {\n var element_bbox = element.getBoundingClientRect();\n\n for (var i = 0; i < labels.length; i++) {\n if (labels[i] == element) {\n continue;\n }\n\n //check to see if this label overlaps with any of the other labels\n var sibling_bbox = labels[i].getBoundingClientRect();\n if (element_bbox.top === sibling_bbox.top &&\n !(sibling_bbox.left > element_bbox.right || sibling_bbox.right < element_bbox.left)\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction mg_infer_type(args, ns) {\n // must return categorical or numerical.\n var testPoint = mg_flatten_array(args.data);\n\n testPoint = testPoint[0][args[ns + '_accessor']];\n return typeof testPoint === 'string' ? 'categorical' : 'numerical';\n }\n\nfunction mg_get_svg_child_of(selector_or_node) {\n return d3.select(selector_or_node).select('svg');\n}\n\nfunction mg_flatten_array(arr) {\n var flat_data = [];\n return flat_data.concat.apply(flat_data, arr);\n}\n\nfunction mg_next_id() {\n if (typeof MG._next_elem_id === 'undefined') {\n MG._next_elem_id = 0;\n }\n\n return 'mg-' + (MG._next_elem_id++);\n}\n\nfunction mg_target_ref(target) {\n if (typeof target === 'string') {\n return mg_normalize(target);\n\n } else if (target instanceof window.HTMLElement) {\n var target_ref = target.getAttribute('data-mg-uid');\n if (!target_ref) {\n target_ref = mg_next_id();\n target.setAttribute('data-mg-uid', target_ref);\n }\n\n return target_ref;\n\n } else {\n console.warn('The specified target should be a string or an HTMLElement.', target);\n return mg_normalize(target);\n }\n}\n\nfunction mg_normalize(string) {\n return string\n .replace(/[^a-zA-Z0-9 _-]+/g, '')\n .replace(/ +?/g, '');\n}\n\nfunction get_pixel_dimension(target, dimension) {\n return Number(d3.select(target).style(dimension).replace(/px/g, ''));\n}\n\nfunction get_width(target) {\n return get_pixel_dimension(target, 'width');\n}\n\nfunction get_height(target) {\n return get_pixel_dimension(target, 'height');\n}\n\nfunction isNumeric(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\n\nvar each = function(obj, iterator, context) {\n // yanked out of underscore\n var breaker = {};\n if (obj === null) return obj;\n if (Array.prototype.forEach && obj.forEach === Array.prototype.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length === +obj.length) {\n for (var i = 0, length = obj.length; i < length; i++) {\n if (iterator.call(context, obj[i], i, obj) === breaker) return;\n }\n } else {\n for (var k in obj) {\n if (iterator.call(context, obj[k], k, obj) === breaker) return;\n }\n }\n\n return obj;\n};\n\nfunction merge_with_defaults(obj) {\n // taken from underscore\n each(Array.prototype.slice.call(arguments, 1), function(source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === void 0) obj[prop] = source[prop];\n }\n }\n });\n\n return obj;\n}\n\nMG.merge_with_defaults = merge_with_defaults;\n\nfunction number_of_values(data, accessor, value) {\n var values = data.filter(function(d) {\n return d[accessor] === value;\n });\n\n return values.length;\n}\n\nfunction has_values_below(data, accessor, value) {\n var values = data.filter(function(d) {\n return d[accessor] <= value;\n });\n\n return values.length > 0;\n}\n\nfunction has_too_many_zeros(data, accessor, zero_count) {\n return number_of_values(data, accessor, 0) >= zero_count;\n}\n\nfunction mg_is_date(obj) {\n return Object.prototype.toString.call(obj) === '[object Date]';\n}\n\nfunction mg_is_object(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nfunction mg_is_array(obj) {\n if (Array.isArray) {\n return Array.isArray(obj);\n }\n\n return Object.prototype.toString.call(obj) === '[object Array]';\n}\n\nfunction mg_is_function(obj) {\n return Object.prototype.toString.call(obj) === '[object Function]';\n}\n\n// deep copy\n// http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object\nMG.clone = function(obj) {\n var copy;\n\n // Handle the 3 simple types, and null or undefined\n if (null === obj || \"object\" !== typeof obj) return obj;\n\n // Handle Date\n if (mg_is_date(obj)) {\n copy = new Date();\n copy.setTime(obj.getTime());\n return copy;\n }\n\n // Handle Array\n if (mg_is_array(obj)) {\n copy = [];\n for (var i = 0, len = obj.length; i < len; i++) {\n copy[i] = MG.clone(obj[i]);\n }\n return copy;\n }\n\n // Handle Object\n if (mg_is_object(obj)) {\n copy = {};\n for (var attr in obj) {\n if (obj.hasOwnProperty(attr)) copy[attr] = MG.clone(obj[attr]);\n }\n return copy;\n }\n\n throw new Error(\"Unable to copy obj! Its type isn't supported.\");\n};\n\n// give us the difference of two int arrays\n// http://radu.cotescu.com/javascript-diff-function/\nfunction arr_diff(a, b) {\n var seen = [],\n diff = [],\n i;\n for (i = 0; i < b.length; i++)\n seen[b[i]] = true;\n for (i = 0; i < a.length; i++)\n if (!seen[a[i]])\n diff.push(a[i]);\n return diff;\n}\n\nMG.arr_diff = arr_diff;\n\n/**\n Print warning message to the console when a feature has been scheduled for removal\n\n @author Dan de Havilland (github.com/dandehavilland)\n @date 2014-12\n*/\nfunction warn_deprecation(message, untilVersion) {\n console.warn('Deprecation: ' + message + (untilVersion ? '. This feature will be removed in ' + untilVersion + '.' : ' the near future.'));\n console.trace();\n}\n\nMG.warn_deprecation = warn_deprecation;\n\n/**\n Truncate a string to fit within an SVG text node\n CSS text-overlow doesn't apply to SVG <= 1.2\n\n @author Dan de Havilland (github.com/dandehavilland)\n @date 2014-12-02\n*/\nfunction truncate_text(textObj, textString, width) {\n var bbox,\n position = 0;\n\n textObj.textContent = textString;\n bbox = textObj.getBBox();\n\n while (bbox.width > width) {\n textObj.textContent = textString.slice(0, --position) + '...';\n bbox = textObj.getBBox();\n\n if (textObj.textContent === '...') {\n break;\n }\n }\n}\n\nMG.truncate_text = truncate_text;\n\n/**\n Wrap the contents of a text node to a specific width\n\n Adapted from bl.ocks.org/mbostock/7555321\n\n @author Mike Bostock\n @author Dan de Havilland\n @date 2015-01-14\n*/\nfunction wrap_text(text, width, token, tspanAttrs) {\n text.each(function() {\n var text = d3.select(this),\n words = text.text().split(token || /\\s+/).reverse(),\n word,\n line = [],\n lineNumber = 0,\n lineHeight = 1.1, // ems\n y = text.attr(\"y\"),\n dy = 0,\n tspan = text.text(null)\n .append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"y\", dy + \"em\")\n .attr(tspanAttrs || {});\n\n while (!!(word = words.pop())) {\n line.push(word);\n tspan.text(line.join(\" \"));\n if (width === null || tspan.node().getComputedTextLength() > width) {\n line.pop();\n tspan.text(line.join(\" \"));\n line = [word];\n tspan = text\n .append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"y\", ++lineNumber * lineHeight + dy + \"em\")\n .attr(tspanAttrs || {})\n .text(word);\n }\n }\n });\n}\n\nMG.wrap_text = wrap_text;\n\nfunction register(chartType, descriptor, defaults) {\n MG.charts[chartType] = {\n descriptor: descriptor,\n defaults: defaults || {}\n };\n}\n\nMG.register = register;\n\n/**\n Record of all registered hooks.\n For internal use only.\n*/\nMG._hooks = {};\n\n/**\n Add a hook callthrough to the stack.\n\n Hooks are executed in the order that they were registered.\n*/\nMG.add_hook = function(name, func, context) {\n var hooks;\n\n if (!MG._hooks[name]) {\n MG._hooks[name] = [];\n }\n\n hooks = MG._hooks[name];\n\n var already_registered =\n hooks.filter(function(hook) {\n return hook.func === func;\n })\n .length > 0;\n\n if (already_registered) {\n throw 'That function is already registered.';\n }\n\n hooks.push({\n func: func,\n context: context\n });\n};\n\n/**\n Execute registered hooks.\n\n Optional arguments\n*/\nMG.call_hook = function(name) {\n var hooks = MG._hooks[name],\n result = [].slice.apply(arguments, [1]),\n processed;\n\n if (hooks) {\n hooks.forEach(function(hook) {\n if (hook.func) {\n var params = processed || result;\n\n if (params && params.constructor !== Array) {\n params = [params];\n }\n\n params = [].concat.apply([], params);\n processed = hook.func.apply(hook.context, params);\n }\n });\n }\n\n return processed || result;\n};\n\nMG.globals = {};\nMG.deprecations = {\n rollover_callback: { replacement: 'mouseover', version: '2.0' },\n rollout_callback: { replacement: 'mouseout', version: '2.0' },\n x_rollover_format: { replacement: 'x_mouseover', version: '2.10' },\n y_rollover_format: { replacement: 'y_mouseover', version: '2.10' },\n show_years: { replacement: 'show_secondary_x_label', version: '2.1' },\n xax_start_at_min: { replacement: 'axes_not_compact', version: '2.7' },\n interpolate_tension: { replacement: 'interpolate', version: '2.10' }\n};\nMG.globals.link = false;\nMG.globals.version = \"1.1\";\n\nMG.charts = {};\n\nMG.data_graphic = function(args) {\n 'use strict';\n var defaults = {\n missing_is_zero: false, // if true, missing values will be treated as zeros\n missing_is_hidden: false, // if true, missing values will appear as broken segments\n missing_is_hidden_accessor: null, // the accessor that determines the boolean value for missing data points\n legend: '' , // an array identifying the labels for a chart's lines\n legend_target: '', // if set, the specified element is populated with a legend\n error: '', // if set, a graph will show an error icon and log the error to the console\n animate_on_load: false, // animate lines on load\n top: 65, // the size of the top margin\n title_y_position: 10, // how many pixels from the top edge (0) should we show the title at\n center_title_full_width: false, // center the title over the full graph (i.e. ignore left and right margins)\n bottom: 45, // the size of the bottom margin\n right: 10, // size of the right margin\n left: 50, // size of the left margin\n buffer: 8, // the buffer between the actual chart area and the margins\n width: 350, // the width of the entire graphic\n height: 220, // the height of the entire graphic\n full_width: false, // sets the graphic width to be the width of the parent element and resizes dynamically\n full_height: false, // sets the graphic width to be the width of the parent element and resizes dynamically\n small_height_threshold: 120, // the height threshold for when smaller text appears\n small_width_threshold: 160, // the width threshold for when smaller text appears\n xax_count: 6, // number of x axis ticks\n xax_tick_length: 5, // x axis tick length\n axes_not_compact: true,\n yax_count: 3, // number of y axis ticks\n yax_tick_length: 5, // y axis tick length\n x_extended_ticks: false, // extends x axis ticks across chart - useful for tall charts\n y_extended_ticks: false, // extends y axis ticks across chart - useful for long charts\n y_scale_type: 'linear',\n max_x: null,\n max_y: null,\n min_x: null,\n min_y: null, // if set, y axis starts at an arbitrary value\n min_y_from_data: false, // if set, y axis will start at minimum value rather than at 0\n point_size: 2.5, // the size of the dot that appears on a line on mouse-over\n x_accessor: 'date',\n xax_units: '',\n x_label: '',\n x_sort: true,\n x_axis: true,\n y_axis: true,\n x_axis_position: 'bottom',\n y_axis_position: 'left',\n x_axis_type: null, // TO BE INTRODUCED IN 2.10\n y_axis_type: null, // TO BE INTRODUCED IN 2.10\n ygroup_accessor: null,\n xgroup_accessor:null,\n y_padding_percentage: 0.05, // for categorical scales\n y_outer_padding_percentage: .1, // for categorical scales\n ygroup_padding_percentage:.25, // for categorical scales\n ygroup_outer_padding_percentage: 0, // for categorical scales\n x_padding_percentage: 0.05, // for categorical scales\n x_outer_padding_percentage: .1, // for categorical scales\n xgroup_padding_percentage:.25, // for categorical scales\n xgroup_outer_padding_percentage: 0, // for categorical scales\n y_categorical_show_guides: false,\n x_categorical_show_guide: false,\n rotate_x_labels: 0,\n rotate_y_labels: 0,\n y_accessor: 'value',\n y_label: '',\n yax_units: '',\n yax_units_append: false,\n x_rug: false,\n y_rug: false,\n mouseover_align: 'right', // implemented in point.js\n x_mouseover: null,\n y_mouseover: null,\n transition_on_update: true,\n mouseover: null,\n click: null,\n show_rollover_text: true,\n show_confidence_band: null, // given [l, u] shows a confidence at each point from l to u\n xax_format: null, // xax_format is a function that formats the labels for the x axis.\n area: true,\n chart_type: 'line',\n data: [],\n decimals: 2, // the number of decimals in any rollover\n format: 'count', // format = {count, percentage}\n inflator: 10/9, // for setting y axis max\n linked: false, // links together all other graphs with linked:true, so rollovers in one trigger rollovers in the others\n linked_format: '%Y-%m-%d', // What granularity to link on for graphs. Default is at day\n list: false,\n baselines: null, // sets the baseline lines\n markers: null, // sets the marker lines\n scalefns: {},\n scales: {},\n utc_time: false,\n european_clock: false,\n show_year_markers: false,\n show_secondary_x_label: true,\n target: '#viz',\n interpolate: d3.curveCatmullRom.alpha(0), // interpolation method to use when rendering lines; increase tension if your data is irregular and you notice artifacts\n custom_line_color_map: [], // allows arbitrary mapping of lines to colors, e.g. [2,3] will map line 1 to color 2 and line 2 to color 3\n colors: null, // UNIMPLEMENTED - allows direct color mapping to line colors. Will eventually require\n max_data_size: null, // explicitly specify the the max number of line series, for use with custom_line_color_map\n aggregate_rollover: false, // links the lines in a multi-line chart\n show_tooltips: true // if enabled, a chart's description will appear in a tooltip (requires jquery)\n };\n\n MG.call_hook('global.defaults', defaults);\n\n if (!args) { args = {}; }\n\n var selected_chart = MG.charts[args.chart_type || defaults.chart_type];\n merge_with_defaults(args, selected_chart.defaults, defaults);\n\n if (args.list) {\n args.x_accessor = 0;\n args.y_accessor = 1;\n }\n\n // check for deprecated parameters\n for (var key in MG.deprecations) {\n if (args.hasOwnProperty(key)) {\n var deprecation = MG.deprecations[key],\n message = 'Use of `args.' + key + '` has been deprecated',\n replacement = deprecation.replacement,\n version;\n\n // transparently alias the deprecated\n if (replacement) {\n if (args[replacement]) {\n message += '. The replacement - `args.' + replacement + '` - has already been defined. This definition will be discarded.';\n } else {\n args[replacement] = args[key];\n }\n }\n\n if (deprecation.warned) {\n continue;\n }\n\n deprecation.warned = true;\n\n if (replacement) {\n message += ' in favor of `args.' + replacement + '`';\n }\n\n warn_deprecation(message, deprecation.version);\n }\n }\n\n MG.call_hook('global.before_init', args);\n\n new selected_chart.descriptor(args);\n\n return args.data;\n};\n\nif (mg_jquery_exists()) {\n /* ========================================================================\n * Bootstrap: tooltip.js v3.3.5\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n +function ($) {\n 'use strict';\n\n // TOOLTIP PUBLIC CLASS DEFINITION\n // ===============================\n\n var Tooltip = function (element, options) {\n this.type = null\n this.options = null\n this.enabled = null\n this.timeout = null\n this.hoverState = null\n this.$element = null\n this.inState = null\n\n this.init('tooltip', element, options)\n }\n\n Tooltip.VERSION = '3.3.5'\n\n Tooltip.TRANSITION_DURATION = 150\n\n Tooltip.DEFAULTS = {\n animation: true,\n placement: 'top',\n selector: false,\n template: '',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n container: false,\n viewport: {\n selector: 'body',\n padding: 0\n }\n }\n\n Tooltip.prototype.init = function (type, element, options) {\n this.enabled = true\n this.type = type\n this.$element = $(element)\n this.options = this.getOptions(options)\n this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n this.inState = { click: false, hover: false, focus: false }\n\n if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n }\n\n var triggers = this.options.trigger.split(' ')\n\n for (var i = triggers.length; i--;) {\n var trigger = triggers[i]\n\n if (trigger == 'click') {\n this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n } else if (trigger != 'manual') {\n var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'\n var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n }\n }\n\n this.options.selector ?\n (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n this.fixTitle()\n }\n\n Tooltip.prototype.getDefaults = function () {\n return Tooltip.DEFAULTS\n }\n\n Tooltip.prototype.getOptions = function (options) {\n options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n if (options.delay && typeof options.delay == 'number') {\n options.delay = {\n show: options.delay,\n hide: options.delay\n }\n }\n\n return options\n }\n\n Tooltip.prototype.getDelegateOptions = function () {\n var options = {}\n var defaults = this.getDefaults()\n\n this._options && $.each(this._options, function (key, value) {\n if (defaults[key] != value) options[key] = value\n })\n\n return options\n }\n\n Tooltip.prototype.enter = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n }\n\n if (self.tip().hasClass('in') || self.hoverState == 'in') {\n self.hoverState = 'in'\n return\n }\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'in'\n\n if (!self.options.delay || !self.options.delay.show) return self.show()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'in') self.show()\n }, self.options.delay.show)\n }\n\n Tooltip.prototype.isInStateTrue = function () {\n for (var key in this.inState) {\n if (this.inState[key]) return true\n }\n\n return false\n }\n\n Tooltip.prototype.leave = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n }\n\n if (self.isInStateTrue()) return\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'out'\n\n if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'out') self.hide()\n }, self.options.delay.hide)\n }\n\n Tooltip.prototype.show = function () {\n var e = $.Event('show.bs.' + this.type)\n\n if (this.hasContent() && this.enabled) {\n this.$element.trigger(e)\n\n var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n if (e.isDefaultPrevented() || !inDom) return\n var that = this\n\n var $tip = this.tip()\n\n var tipId = this.getUID(this.type)\n\n this.setContent()\n $tip.attr('id', tipId)\n this.$element.attr('aria-describedby', tipId)\n\n if (this.options.animation) $tip.addClass('fade')\n\n var placement = typeof this.options.placement == 'function' ?\n this.options.placement.call(this, $tip[0], this.$element[0]) :\n this.options.placement\n\n var autoToken = /\\s?auto?\\s?/i\n var autoPlace = autoToken.test(placement)\n if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n $tip\n .detach()\n .css({ top: 0, left: 0, display: 'block' })\n .addClass(placement)\n .data('bs.' + this.type, this)\n\n this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n this.$element.trigger('inserted.bs.' + this.type)\n\n var pos = this.getPosition()\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (autoPlace) {\n var orgPlacement = placement\n var viewportDim = this.getPosition(this.$viewport)\n\n placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :\n placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :\n placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :\n placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :\n placement\n\n $tip\n .removeClass(orgPlacement)\n .addClass(placement)\n }\n\n var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n this.applyPlacement(calculatedOffset, placement)\n\n var complete = function () {\n var prevHoverState = that.hoverState\n that.$element.trigger('shown.bs.' + that.type)\n that.hoverState = null\n\n if (prevHoverState == 'out') that.leave(that)\n }\n\n $.support.transition && this.$tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n }\n }\n\n Tooltip.prototype.applyPlacement = function (offset, placement) {\n var $tip = this.tip()\n var width = $tip[0].offsetWidth\n var height = $tip[0].offsetHeight\n\n // manually read margins because getBoundingClientRect includes difference\n var marginTop = parseInt($tip.css('margin-top'), 10)\n var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n // we must check for NaN for ie 8/9\n if (isNaN(marginTop)) marginTop = 0\n if (isNaN(marginLeft)) marginLeft = 0\n\n offset.top += marginTop\n offset.left += marginLeft\n\n // $.fn.offset doesn't round pixel values\n // so we use setOffset directly with our own function B-0\n $.offset.setOffset($tip[0], $.extend({\n using: function (props) {\n $tip.css({\n top: Math.round(props.top),\n left: Math.round(props.left)\n })\n }\n }, offset), 0)\n\n $tip.addClass('in')\n\n // check to see if placing tip in new offset caused the tip to resize itself\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (placement == 'top' && actualHeight != height) {\n offset.top = offset.top + height - actualHeight\n }\n\n var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n if (delta.left) offset.left += delta.left\n else offset.top += delta.top\n\n var isVertical = /top|bottom/.test(placement)\n var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n $tip.offset(offset)\n this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n }\n\n Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n this.arrow()\n .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n .css(isVertical ? 'top' : 'left', '')\n }\n\n Tooltip.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n\n $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n $tip.removeClass('fade in top bottom left right')\n }\n\n Tooltip.prototype.hide = function (callback) {\n var that = this\n var $tip = $(this.$tip)\n var e = $.Event('hide.bs.' + this.type)\n\n function complete() {\n if (that.hoverState != 'in') $tip.detach()\n that.$element\n .removeAttr('aria-describedby')\n .trigger('hidden.bs.' + that.type)\n callback && callback()\n }\n\n this.$element.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n $tip.removeClass('in')\n\n $.support.transition && $tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n\n this.hoverState = null\n\n return this\n }\n\n Tooltip.prototype.fixTitle = function () {\n var $e = this.$element\n if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n }\n }\n\n Tooltip.prototype.hasContent = function () {\n return this.getTitle()\n }\n\n Tooltip.prototype.getPosition = function ($element) {\n $element = $element || this.$element\n\n var el = $element[0]\n var isBody = el.tagName == 'BODY'\n\n var elRect = el.getBoundingClientRect()\n if (elRect.width == null) {\n // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n }\n var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()\n var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n return $.extend({}, elRect, scroll, outerDims, elOffset)\n }\n\n Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n }\n\n Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n var delta = { top: 0, left: 0 }\n if (!this.$viewport) return delta\n\n var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n var viewportDimensions = this.getPosition(this.$viewport)\n\n if (/right|left/.test(placement)) {\n var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll\n var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n if (topEdgeOffset < viewportDimensions.top) { // top overflow\n delta.top = viewportDimensions.top - topEdgeOffset\n } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n }\n } else {\n var leftEdgeOffset = pos.left - viewportPadding\n var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n delta.left = viewportDimensions.left - leftEdgeOffset\n } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n }\n }\n\n return delta\n }\n\n Tooltip.prototype.getTitle = function () {\n var title\n var $e = this.$element\n var o = this.options\n\n title = $e.attr('data-original-title')\n || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)\n\n return title\n }\n\n Tooltip.prototype.getUID = function (prefix) {\n do prefix += ~~(Math.random() * 1000000)\n while (document.getElementById(prefix))\n return prefix\n }\n\n Tooltip.prototype.tip = function () {\n if (!this.$tip) {\n this.$tip = $(this.options.template)\n if (this.$tip.length != 1) {\n throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n }\n }\n return this.$tip\n }\n\n Tooltip.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n }\n\n Tooltip.prototype.enable = function () {\n this.enabled = true\n }\n\n Tooltip.prototype.disable = function () {\n this.enabled = false\n }\n\n Tooltip.prototype.toggleEnabled = function () {\n this.enabled = !this.enabled\n }\n\n Tooltip.prototype.toggle = function (e) {\n var self = this\n if (e) {\n self = $(e.currentTarget).data('bs.' + this.type)\n if (!self) {\n self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n $(e.currentTarget).data('bs.' + this.type, self)\n }\n }\n\n if (e) {\n self.inState.click = !self.inState.click\n if (self.isInStateTrue()) self.enter(self)\n else self.leave(self)\n } else {\n self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n }\n }\n\n Tooltip.prototype.destroy = function () {\n var that = this\n clearTimeout(this.timeout)\n this.hide(function () {\n that.$element.off('.' + that.type).removeData('bs.' + that.type)\n if (that.$tip) {\n that.$tip.detach()\n }\n that.$tip = null\n that.$arrow = null\n that.$viewport = null\n })\n }\n\n\n // TOOLTIP PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.tooltip')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.tooltip\n\n $.fn.tooltip = Plugin\n $.fn.tooltip.Constructor = Tooltip\n\n\n // TOOLTIP NO CONFLICT\n // ===================\n\n $.fn.tooltip.noConflict = function () {\n $.fn.tooltip = old\n return this\n }\n\n }(jQuery);\n\n\n /* ========================================================================\n * Bootstrap: popover.js v3.3.5\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n +function ($) {\n 'use strict';\n\n // POPOVER PUBLIC CLASS DEFINITION\n // ===============================\n\n var Popover = function (element, options) {\n this.init('popover', element, options)\n }\n\n if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n Popover.VERSION = '3.3.5'\n\n Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n placement: 'right',\n trigger: 'click',\n content: '',\n template: ''\n })\n\n\n // NOTE: POPOVER EXTENDS tooltip.js\n // ================================\n\n Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n Popover.prototype.constructor = Popover\n\n Popover.prototype.getDefaults = function () {\n return Popover.DEFAULTS\n }\n\n Popover.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n var content = this.getContent()\n\n $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n ](content)\n\n $tip.removeClass('fade top bottom left right in')\n\n // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n // this manually by checking the contents.\n if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n }\n\n Popover.prototype.hasContent = function () {\n return this.getTitle() || this.getContent()\n }\n\n Popover.prototype.getContent = function () {\n var $e = this.$element\n var o = this.options\n\n return $e.attr('data-content')\n || (typeof o.content == 'function' ?\n o.content.call($e[0]) :\n o.content)\n }\n\n Popover.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n }\n\n\n // POPOVER PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.popover')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.popover\n\n $.fn.popover = Plugin\n $.fn.popover.Constructor = Popover\n\n\n // POPOVER NO CONFLICT\n // ===================\n\n $.fn.popover.noConflict = function () {\n $.fn.popover = old\n return this\n }\n\n }(jQuery);\n}\n\nfunction chart_title(args) {\n 'use strict';\n\n var svg = mg_get_svg_child_of(args.target);\n\n //remove the current title if it exists\n svg.select('.mg-header').remove();\n\n if (args.target && args.title) {\n var chartTitle = svg.insert('text')\n .attr('class', 'mg-header')\n .attr('x', args.center_title_full_width ? args.width /2 : (args.width + args.left - args.right) / 2)\n .attr('y', args.title_y_position)\n .attr('text-anchor', 'middle')\n .attr('dy', '0.55em');\n\n //show the title\n chartTitle.append('tspan')\n .attr('class', 'mg-chart-title')\n .text(args.title);\n\n //show and activate the description icon if we have a description\n if (args.show_tooltips && args.description && mg_jquery_exists()) {\n chartTitle.append('tspan')\n .attr('class', 'mg-chart-description')\n .attr('dx', '0.3em')\n .text('\\uf059');\n\n //now that the title is an svg text element, we'll have to trigger\n //mouseenter, mouseleave events manually for the popover to work properly\n var $chartTitle = $(chartTitle.node());\n $chartTitle.popover({\n html: true,\n animation: false,\n placement: 'top',\n content: args.description,\n container: args.target,\n trigger: 'manual',\n template: ''\n }).on('mouseenter', function() {\n d3.selectAll(args.target)\n .selectAll('.mg-popover')\n .remove();\n\n $(this).popover('show');\n $(d3.select(args.target).select('.popover').node())\n .on('mouseleave', function () {\n $chartTitle.popover('hide');\n });\n }).on('mouseleave', function () {\n setTimeout(function () {\n if (!$('.popover:hover').length) {\n $chartTitle.popover('hide');\n }\n }, 120);\n });\n } else if (args.show_tooltips && args.description && typeof $ === 'undefined') {\n args.error = 'In order to enable tooltips, please make sure you include jQuery.';\n }\n }\n\n if (args.error) {\n error(args);\n }\n}\n\nMG.chart_title = chart_title;\n\nfunction mg_add_scale_function(args, scalefcn_name, scale, accessor, inflation) {\n args.scalefns[scalefcn_name] = function(di) {\n if (inflation === undefined) return args.scales[scale](di[accessor]);\n else return args.scales[scale](di[accessor]) + inflation;\n };\n}\n\nfunction mg_position(str, args) {\n if (str === 'bottom' || str === 'top') {\n return [mg_get_plot_left(args), mg_get_plot_right(args)];\n }\n\n if (str === 'left' || str === 'right') {\n return [mg_get_plot_bottom(args), args.top];\n }\n}\n\nfunction mg_cat_position(str, args) {\n if (str === 'bottom' || str === 'top') {\n return [mg_get_plot_left(args), mg_get_plot_right(args)]\n }\n\n if (str === 'left' || str === 'right') {\n return [mg_get_plot_bottom(args), mg_get_plot_top(args)];\n }\n}\n\nfunction MGScale(args) {\n // big wrapper around d3 scale that automatically formats & calculates scale bounds\n // according to the data, and handles other niceties.\n var scaleArgs = {}\n scaleArgs.use_inflator = false;\n scaleArgs.zero_bottom = false;\n scaleArgs.scaleType = 'numerical';\n\n this.namespace = function(_namespace) {\n scaleArgs.namespace = _namespace;\n scaleArgs.namespace_accessor_name = scaleArgs.namespace + '_accessor';\n scaleArgs.scale_name = scaleArgs.namespace.toUpperCase();\n scaleArgs.scalefn_name = scaleArgs.namespace + 'f';\n return this;\n }\n\n this.scaleName = function(scaleName) {\n scaleArgs.scale_name = scaleName.toUpperCase();\n scaleArgs.scalefn_name = scaleName +'f';\n return this;\n }\n\n this.inflateDomain = function(tf) {\n scaleArgs.use_inflator = tf;\n return this;\n }\n\n this.zeroBottom = function(tf) {\n scaleArgs.zero_bottom = tf;\n return this;\n }\n\n /////////////////////////////////////////////////////////////////////////////////////////////////////////\n /// all scale domains are either numerical (number, date, etc.) or categorical (factor, label, etc) /////\n /////////////////////////////////////////////////////////////////////////////////////////////////////////\n // these functions automatically create the d3 scale function and place the domain.\n\n this.numericalDomainFromData = function() {\n var other_flat_data_arrays = [];\n\n if (arguments.length > 0) {\n other_flat_data_arrays = arguments;\n }\n\n // pull out a non-empty array in args.data.\n var illustrative_data;\n for (var i = 0; i < args.data.length; i++) {\n if (args.data[i].length > 0) {\n illustrative_data = args.data[i];\n }\n }\n scaleArgs.is_time_series = mg_is_date(illustrative_data[0][args[scaleArgs.namespace_accessor_name]])\n ? true\n : false;\n\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n\n mg_min_max_numerical(args, scaleArgs, other_flat_data_arrays, scaleArgs.use_inflator);\n\n var time_scale = (args.utc_time)\n ? d3.scaleUtc()\n : d3.scaleTime();\n\n args.scales[scaleArgs.scale_name] = (scaleArgs.is_time_series)\n ? time_scale\n : (mg_is_function(args[scaleArgs.namespace + '_scale_type']))\n ? args.y_scale_type()\n : (args[scaleArgs.namespace + '_scale_type'] === 'log')\n ? d3.scaleLog()\n : d3.scaleLinear();\n\n args.scales[scaleArgs.scale_name].domain([args.processed['min_' + scaleArgs.namespace], args.processed['max_' + scaleArgs.namespace]]);\n scaleArgs.scaleType = 'numerical';\n\n return this;\n }\n\n this.categoricalDomain = function(domain) {\n args.scales[scaleArgs.scale_name] = d3.scaleOrdinal().domain(domain);\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n return this;\n }\n\n this.categoricalDomainFromData = function() {\n // make args.categorical_variables.\n // lets make the categorical variables.\n var all_data = mg_flatten_array(args.data)\n //d3.set(data.map(function(d){return d[args.group_accessor]})).values()\n scaleArgs.categoricalVariables = d3.set(all_data.map(function(d) {\n return d[args[scaleArgs.namespace_accessor_name]] })).values();\n args.scales[scaleArgs.scale_name] = d3.scaleBand()\n .domain(scaleArgs.categoricalVariables);\n\n scaleArgs.scaleType = 'categorical';\n return this;\n }\n\n /////////////////////////////////////////////////////////////////////////////////////////////////////////////\n ////////// all scale ranges are either positional (for axes, etc) or arbitrary (colors, size, etc) //////////\n /////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n this.numericalRange = function(range) {\n if (typeof range === 'string') {\n args\n .scales[scaleArgs.scale_name]\n .range(mg_position(range, args));\n } else {\n args\n .scales[scaleArgs.scale_name]\n .range(range);\n }\n\n return this;\n }\n\n this.categoricalRangeBands = function(range, halfway) {\n if (halfway === undefined) halfway = false;\n\n var namespace = scaleArgs.namespace;\n var paddingPercentage = args[namespace + '_padding_percentage'];\n var outerPaddingPercentage = args[namespace + '_outer_padding_percentage'];\n if (typeof range === 'string') {\n // if string, it's a location. Place it accordingly.\n args.scales[scaleArgs.scale_name]\n .range(mg_position(range, args))\n .paddingInner(paddingPercentage)\n .paddingOuter(outerPaddingPercentage);\n } else {\n args.scales[scaleArgs.scale_name]\n .range(range)\n .paddingInner(paddingPercentage)\n .paddingOuter(outerPaddingPercentage);\n }\n\n mg_add_scale_function(\n args,\n scaleArgs.scalefn_name,\n scaleArgs.scale_name,\n args[scaleArgs.namespace_accessor_name],\n halfway\n ? args.scales[scaleArgs.scale_name].bandwidth() / 2\n : 0\n );\n\n return this;\n }\n\n this.categoricalRange = function(range) {\n args.scales[scaleArgs.scale_name].range(range);\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n return this;\n }\n\n this.categoricalColorRange = function() {\n args.scales[scaleArgs.scale_name] = args.scales[scaleArgs.scale_name].domain().length > 10\n ? d3.scaleOrdinal(d3.schemeCategory20)\n : d3.scaleOrdinal(d3.schemeCategory10);\n\n args\n .scales[scaleArgs.scale_name]\n .domain(scaleArgs.categoricalVariables);\n\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n return this;\n }\n\n this.clamp = function(yn) {\n args.scales[scaleArgs.scale_name].clamp(yn);\n return this;\n }\n\n return this;\n}\n\nMG.scale_factory = MGScale;\n\n/////////////////////////////// x, x_accessor, markers, baselines, etc.\nfunction mg_min_max_numerical(args, scaleArgs, additional_data_arrays) {\n // A BIT OF EXPLANATION ABOUT THIS FUNCTION\n // This function pulls out all the accessor values in all the arrays in args.data.\n // We also have this additional argument, additional_data_arrays, which is an array of arrays of raw data values.\n // These values also get concatenated to the data pulled from args.data, and the extents are calculate from that.\n // They are optional.\n //\n // This may seem arbitrary, but it gives us a lot of flexibility. For instance, if we're calculating\n // the min and max for the y axis of a line chart, we're going to want to also factor in baselines (horizontal lines\n // that might potentially be outside of the y value bounds). The easiest way to do this is in the line.js code\n // & scale creation to just flatten the args.baselines array, pull out hte values, and feed it in\n // so it appears in additional_data_arrays.\n var namespace = scaleArgs.namespace;\n var namespace_accessor_name = scaleArgs.namespace_accessor_name;\n var use_inflator = scaleArgs.use_inflator;\n var zero_bottom = scaleArgs.zero_bottom;\n\n var accessor = args[namespace_accessor_name];\n\n // add together all relevant data arrays.\n var all_data = mg_flatten_array(args.data)\n .map(function(dp) {\n return dp[accessor] })\n .concat(mg_flatten_array(additional_data_arrays));\n\n // do processing for log\n if (args[namespace + '_scale_type'] === 'log') {\n all_data = all_data.filter(function(d) {\n return d > 0;\n });\n }\n\n // use inflator?\n var extents = d3.extent(all_data);\n var min_val = extents[0];\n var max_val = extents[1];\n\n // bolt scale domain to zero when the right conditions are met:\n // not pulling the bottom of the range from data\n // not zero-bottomed\n // not a time series\n if (zero_bottom && !args['min_' + namespace + '_from_data'] && min_val > 0 && !scaleArgs.is_time_series) {\n min_val = args[namespace + '_scale_type'] === 'log' ? 1 : 0;\n }\n\n if (args[namespace + '_scale_type'] !== 'log' && min_val < 0 && !scaleArgs.is_time_series) {\n min_val = min_val - (min_val - min_val * args.inflator) * use_inflator;\n }\n\n if (!scaleArgs.is_time_series) {\n max_val = (max_val < 0) ? max_val + (max_val - max_val * args.inflator) * use_inflator : max_val * (use_inflator ? args.inflator : 1);\n }\n\n min_val = args['min_' + namespace] || min_val;\n max_val = args['max_' + namespace] || max_val;\n // if there's a single data point, we should custom-set the min and max values.\n\n if (min_val === max_val && !(args['min_' + namespace] && args['max_' + namespace])) {\n\n if (mg_is_date(min_val)) {\n max_val = new Date(MG.clone(min_val).setDate(min_val.getDate() + 1));\n min_val = new Date(MG.clone(min_val).setDate(min_val.getDate() - 1));\n } else if (typeof min_val === 'number') {\n min_val = min_val - 1;\n max_val = min_val + 1;\n mg_force_xax_count_to_be_two(args);\n }\n }\n\n args.processed['min_' + namespace] = min_val;\n args.processed['max_' + namespace] = max_val;\n\n MG.call_hook('x_axis.process_min_max', args, args.processed.min_x, args.processed.max_x);\n MG.call_hook('y_axis.process_min_max', args, args.processed.min_y, args.processed.max_y);\n}\n\nfunction mg_categorical_group_color_scale(args) {\n if (args.color_accessor !== false) {\n if (args.ygroup_accessor) {\n // add a custom accessor element.\n if (args.color_accessor === null) {\n args.color_accessor = args.y_accessor;\n } else {}\n }\n if (args.color_accessor !== null) {\n new MG.scale_factory(args)\n .namespace('color')\n .categoricalDomainFromData()\n .categoricalColorRange();\n }\n }\n}\n\nfunction mg_add_color_categorical_scale(args, domain, accessor) {\n args.scales.color = d3.scaleOrdinal(d3.schemeCategory20).domain(domain);\n args.scalefns.color = function(d) {\n return args.scales.color(d[accessor]);\n };\n}\n\nfunction mg_get_categorical_domain(data, accessor) {\n return d3.set(data.map(function(d) {\n return d[accessor]; }))\n .values();\n}\n\nfunction mg_get_color_domain(args) {\n var color_domain;\n if (args.color_domain === null) {\n if (args.color_type === 'number') {\n color_domain = d3.extent(args.data[0], function(d) {\n return d[args.color_accessor]; });\n } else if (args.color_type === 'category') {\n color_domain = mg_get_categorical_domain(args.data[0], args.color_accessor);\n\n }\n } else {\n color_domain = args.color_domain;\n }\n return color_domain;\n}\n\nfunction mg_get_color_range(args) {\n var color_range;\n if (args.color_range === null) {\n if (args.color_type === 'number') {\n color_range = ['blue', 'red'];\n } else {\n color_range = null;\n }\n } else {\n color_range = args.color_range;\n }\n return color_range;\n}\n\nfunction processScaleTicks (args, axis) {\n var accessor = args[axis + '_accessor'];\n var scale_ticks = args.scales[axis.toUpperCase()].ticks(args[axis + 'ax_count']);\n var max = args.processed['max_' + axis];\n\n function log10 (val) {\n if (val === 1000) {\n return 3;\n }\n if (val === 1000000) {\n return 7;\n }\n return Math.log(val) / Math.LN10;\n }\n\n if (args[axis + '_scale_type'] === 'log') {\n // get out only whole logs\n scale_ticks = scale_ticks.filter(function (d) {\n return Math.abs(log10(d)) % 1 < 1e-6 || Math.abs(log10(d)) % 1 > 1 - 1e-6;\n });\n }\n\n // filter out fraction ticks if our data is ints and if xmax > number of generated ticks\n var number_of_ticks = scale_ticks.length;\n\n // is our data object all ints?\n var data_is_int = true;\n args.data.forEach(function (d, i) {\n d.forEach(function (d, i) {\n if (d[accessor] % 1 !== 0) {\n data_is_int = false;\n return false;\n }\n });\n });\n\n if (data_is_int && number_of_ticks > max && args.format === 'count') {\n // remove non-integer ticks\n scale_ticks = scale_ticks.filter(function (d) {\n return d % 1 === 0;\n });\n }\n args.processed[axis + '_ticks'] = scale_ticks;\n}\n\nfunction rugPlacement (args, axisArgs) {\n var position = axisArgs.position;\n var ns = axisArgs.namespace;\n var coordinates = {};\n if (position === 'left') {\n coordinates.x1 = mg_get_left(args) + 1;\n coordinates.x2 = mg_get_left(args) + args.rug_buffer_size;\n coordinates.y1 = args.scalefns[ns + 'f'];\n coordinates.y2 = args.scalefns[ns + 'f'];\n }\n if (position === 'right') {\n coordinates.x1 = mg_get_right(args) - 1,\n coordinates.x2 = mg_get_right(args) - args.rug_buffer_size,\n coordinates.y1 = args.scalefns[ns + 'f'];\n coordinates.y2 = args.scalefns[ns + 'f'];\n }\n if (position === 'top') {\n coordinates.x1 = args.scalefns[ns + 'f'];\n coordinates.x2 = args.scalefns[ns + 'f'];\n coordinates.y1 = mg_get_top(args) + 1;\n coordinates.y2 = mg_get_top(args) + args.rug_buffer_size;\n }\n if (position === 'bottom') {\n coordinates.x1 = args.scalefns[ns + 'f'];\n coordinates.x2 = args.scalefns[ns + 'f'];\n coordinates.y1 = mg_get_bottom(args) - 1;\n coordinates.y2 = mg_get_bottom(args) - args.rug_buffer_size;\n }\n return coordinates;\n}\n\nfunction rimPlacement (args, axisArgs) {\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var tick_length = args.processed[ns + '_ticks'].length;\n var ticks = args.processed[ns + '_ticks'];\n var scale = args.scales[ns.toUpperCase()];\n var coordinates = {};\n\n if (position === 'left') {\n coordinates.x1 = mg_get_left(args);\n coordinates.x2 = mg_get_left(args);\n coordinates.y1 = scale(ticks[0]).toFixed(2);\n coordinates.y2 = scale(ticks[tick_length - 1]).toFixed(2);\n }\n if (position === 'right') {\n coordinates.x1 = mg_get_right(args);\n coordinates.x2 = mg_get_right(args);\n coordinates.y1 = scale(ticks[0]).toFixed(2);\n coordinates.y2 = scale(ticks[tick_length - 1]).toFixed(2);\n }\n if (position === 'top') {\n coordinates.x1 = mg_get_left(args);\n coordinates.x2 = mg_get_right(args);\n coordinates.y1 = mg_get_top(args);\n coordinates.y2 = mg_get_top(args);\n }\n if (position === 'bottom') {\n coordinates.x1 = mg_get_left(args);\n coordinates.x2 = mg_get_right(args);\n coordinates.y1 = mg_get_bottom(args);\n coordinates.y2 = mg_get_bottom(args);\n }\n\n if (position === 'left' || position === 'right') {\n if (args.axes_not_compact) {\n coordinates.y1 = mg_get_bottom(args);\n coordinates.y2 = mg_get_top(args);\n } else if (tick_length) {\n coordinates.y1 = scale(ticks[0]).toFixed(2);\n coordinates.y2 = scale(ticks[tick_length - 1]).toFixed(2);\n }\n }\n\n return coordinates;\n}\n\nfunction labelPlacement (args, axisArgs) {\n var position = axisArgs.position;\n var ns = axisArgs.namespace;\n var tickLength = args[ns + 'ax_tick_length'];\n var scale = args.scales[ns.toUpperCase()];\n var coordinates = {};\n\n if (position === 'left') {\n coordinates.x = mg_get_left(args) - tickLength * 3 / 2;\n coordinates.y = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.dx = -3;\n coordinates.dy = '.35em';\n coordinates.textAnchor = 'end';\n coordinates.text = function (d) {\n return mg_compute_yax_format(args)(d);\n };\n }\n if (position === 'right') {\n coordinates.x = mg_get_right(args) + tickLength * 3 / 2;\n coordinates.y = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.dx = 3;\n coordinates.dy = '.35em';\n coordinates.textAnchor = 'start';\n coordinates.text = function (d) {\n return mg_compute_yax_format(args)(d); };\n }\n if (position === 'top') {\n coordinates.x = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.y = (mg_get_top(args) - tickLength * 7 / 3).toFixed(2);\n coordinates.dx = 0;\n coordinates.dy = '0em';\n coordinates.textAnchor = 'middle';\n coordinates.text = function (d) {\n return mg_default_xax_format(args)(d);\n };\n }\n if (position === 'bottom') {\n coordinates.x = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.y = (mg_get_bottom(args) + tickLength * 7 / 3).toFixed(2);\n coordinates.dx = 0;\n coordinates.dy = '.50em';\n coordinates.textAnchor = 'middle';\n coordinates.text = function (d) {\n return mg_default_xax_format(args)(d);\n };\n }\n\n return coordinates;\n}\n\nfunction selectXaxFormat (args) {\n var c = args.chart_type;\n if (!args.processed.xax_format) {\n if (args.xax_format) {\n args.processed.xax_format = args.xax_format;\n } else {\n if (c === 'line' || c === 'point' || c === 'histogram') {\n args.processed.xax_format = mg_default_xax_format(args);\n } else if (c === 'bar') {\n args.processed.xax_format = mg_default_bar_xax_format(args);\n }\n }\n }\n}\n\nfunction secondaryLabels (g, args, axisArgs) {\n if (args.time_series && (args.show_years || args.show_secondary_x_label)) {\n var tf = mg_get_yformat_and_secondary_time_function(args);\n addSecondaryLabelElements(args, axisArgs, g, tf.timeframe, tf.yformat, tf.secondary);\n }\n}\n\nfunction addSecondaryLabelElements (args, axisArgs, g, time_frame, yformat, secondary_function) {\n var years = secondary_function(args.processed.min_x, args.processed.max_x);\n if (years.length === 0) {\n var first_tick = args.scales.X.ticks(args.xax_count)[0];\n years = [first_tick];\n }\n\n var yg = mg_add_g(g, 'mg-year-marker');\n if (time_frame === 'default' && args.show_year_markers) {\n yearMarkerLine(args, axisArgs, yg, years, yformat);\n }\n if (time_frame != 'years') yearMarkerText(args, axisArgs, yg, years, yformat);\n}\n\nfunction yearMarkerLine (args, axisArgs, g, years, yformat) {\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('line')\n .attr('x1', function (d) {\n return args.scales.X(d).toFixed(2); })\n .attr('x2', function (d) {\n return args.scales.X(d).toFixed(2); })\n .attr('y1', mg_get_top(args))\n .attr('y2', mg_get_bottom(args));\n}\n\nfunction yearMarkerText (args, axisArgs, g, years, yformat) {\n var position = axisArgs.position;\n var ns = axisArgs.namespace;\n var scale = args.scales[ns.toUpperCase()];\n var x, y, dy, textAnchor, textFcn;\n var xAxisTextElement = d3.select(args.target)\n .select('.mg-x-axis text').node().getBoundingClientRect();\n\n if (position === 'top') {\n x = function (d, i) {\n return scale(d).toFixed(2); };\n y = (mg_get_top(args) - args.xax_tick_length * 7 / 3) - (xAxisTextElement.height);\n dy = '.50em';\n textAnchor = 'middle';\n textFcn = function (d) {\n return yformat(new Date(d)); };\n }\n if (position === 'bottom') {\n x = function (d, i) {\n return scale(d).toFixed(2); };\n y = (mg_get_bottom(args) + args.xax_tick_length * 7 / 3) + (xAxisTextElement.height * 0.8);\n dy = '.50em';\n textAnchor = 'middle';\n textFcn = function (d) {\n return yformat(new Date(d)); };\n }\n\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('text')\n .attr('x', x)\n .attr('y', y)\n .attr('dy', dy)\n .attr('text-anchor', textAnchor)\n .text(textFcn);\n}\n\nfunction addNumericalLabels (g, args, axisArgs) {\n var ns = axisArgs.namespace;\n var coords = labelPlacement(args, axisArgs);\n var ticks = args.processed[ns + '_ticks'];\n\n var labels = g.selectAll('.mg-yax-labels')\n .data(ticks).enter()\n .append('text')\n .attr('x', coords.x)\n .attr('dx', coords.dx)\n .attr('y', coords.y)\n .attr('dy', coords.dy)\n .attr('text-anchor', coords.textAnchor)\n .text(coords.text);\n\n // move the labels if they overlap\n if (ns == 'x') {\n selectXaxFormat(args);\n if (args.time_series && args.european_clock) {\n labels.append('tspan').classed('mg-european-hours', true).text(function (_d, i) {\n var d = new Date(_d);\n if (i === 0) return d3.timeFormat('%H')(d);\n else return '';\n });\n labels.append('tspan').classed('mg-european-minutes-seconds', true).text(function (_d, i) {\n var d = new Date(_d);\n return ':' + args.processed.xax_format(d);\n });\n } else {\n labels.text(function (d) {\n return args.xax_units + args.processed.xax_format(d);\n });\n }\n secondaryLabels(g, args, axisArgs);\n }\n\n if (mg_elements_are_overlapping(labels)) {\n labels.filter(function (d, i) {\n return (i + 1) % 2 === 0;\n }).remove();\n\n var svg = mg_get_svg_child_of(args.target);\n svg.selectAll('.mg-' + ns + 'ax-ticks').filter(function (d, i) {\n return (i + 1) % 2 === 0; })\n .remove();\n }\n}\n\nfunction addTickLines (g, args, axisArgs) {\n // name\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var scale = args.scales[ns.toUpperCase()];\n\n var ticks = args.processed[ns + '_ticks'];\n var ticksClass = 'mg-' + ns + 'ax-ticks';\n var extendedTicksClass = 'mg-extended-' + ns + 'ax-ticks';\n var extendedTicks = args[ns + '_extended_ticks'];\n var tickLength = args[ns + 'ax_tick_length'];\n\n var x1, x2, y1, y2;\n\n if (position === 'left') {\n x1 = mg_get_left(args);\n x2 = extendedTicks ? mg_get_right(args) : mg_get_left(args) - tickLength;\n y1 = function (d) {\n return scale(d).toFixed(2);\n };\n y2 = function (d) {\n return scale(d).toFixed(2);\n };\n }\n if (position === 'right') {\n x1 = mg_get_right(args);\n x2 = extendedTicks ? mg_get_left(args) : mg_get_right(args) + tickLength;\n y1 = function (d) {\n return scale(d).toFixed(2);\n };\n y2 = function (d) {\n return scale(d).toFixed(2);\n };\n }\n if (position === 'top') {\n x1 = function (d) {\n return scale(d).toFixed(2);\n };\n x2 = function (d) {\n return scale(d).toFixed(2);\n };\n y1 = mg_get_top(args);\n y2 = extendedTicks ? mg_get_bottom(args) : mg_get_top(args) - tickLength;\n }\n if (position === 'bottom') {\n x1 = function (d) {\n return scale(d).toFixed(2);\n };\n x2 = function (d) {\n return scale(d).toFixed(2);\n };\n y1 = mg_get_bottom(args);\n y2 = extendedTicks ? mg_get_top(args) : mg_get_bottom(args) + tickLength;\n }\n\n g.selectAll('.' + ticksClass)\n .data(ticks).enter()\n .append('line')\n .classed(extendedTicksClass, extendedTicks)\n .attr('x1', x1)\n .attr('x2', x2)\n .attr('y1', y1)\n .attr('y2', y2);\n}\n\nfunction initializeAxisRim (g, args, axisArgs) {\n var namespace = axisArgs.namespace;\n var tick_length = args.processed[namespace + '_ticks'].length;\n\n var rim = rimPlacement(args, axisArgs);\n\n if (!args[namespace + '_extended_ticks'] && !args[namespace + '_extended_ticks'] && tick_length) {\n g.append('line')\n .attr('x1', rim.x1)\n .attr('x2', rim.x2)\n .attr('y1', rim.y1)\n .attr('y2', rim.y2);\n }\n}\n\nfunction initializeRug (args, rug_class) {\n var svg = mg_get_svg_child_of(args.target);\n var all_data = mg_flatten_array(args.data);\n var rug = svg.selectAll('line.' + rug_class).data(all_data);\n\n // set the attributes that do not change after initialization, per\n rug.enter().append('svg:line').attr('class', rug_class).attr('opacity', 0.3);\n\n // remove rug elements that are no longer in use\n mg_exit_and_remove(rug);\n\n // set coordinates of new rug elements\n mg_exit_and_remove(rug);\n return rug;\n}\n\nfunction rug (args, axisArgs) {\n 'use strict';\n args.rug_buffer_size = args.chart_type === 'point' ? args.buffer / 2 : args.buffer * 2 / 3;\n\n var rug = initializeRug(args, 'mg-' + axisArgs.namespace + '-rug');\n var rug_positions = rugPlacement(args, axisArgs);\n rug.attr('x1', rug_positions.x1)\n .attr('x2', rug_positions.x2)\n .attr('y1', rug_positions.y1)\n .attr('y2', rug_positions.y2);\n\n mg_add_color_accessor_to_rug(rug, args, 'mg-' + axisArgs.namespace + '-rug-mono');\n}\n\nfunction categoricalLabelPlacement (args, axisArgs, group) {\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var scale = args.scales[ns.toUpperCase()];\n var groupScale = args.scales[(ns + 'group').toUpperCase()];\n var coords = {};\n coords.cat = {};\n coords.group = {};\n // x, y, dy, text-anchor\n\n if (position === 'left') {\n coords.cat.x = mg_get_plot_left(args) - args.buffer;\n coords.cat.y = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = 'end';\n coords.group.x = mg_get_plot_left(args) - args.buffer;\n coords.group.y = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 : 0);\n coords.group.dy = '.35em';\n coords.group.textAnchor = args['rotate_' + ns + '_labels'] ? 'end' : 'end';\n }\n\n if (position === 'right') {\n coords.cat.x = mg_get_plot_right(args) - args.buffer;\n coords.cat.y = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = 'start';\n coords.group.x = mg_get_plot_right(args) - args.buffer;\n coords.group.y = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 : 0);\n coords.group.dy = '.35em';\n coords.group.textAnchor = 'start';\n }\n\n if (position === 'top') {\n coords.cat.x = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.y = mg_get_plot_top(args) + args.buffer;\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n coords.group.x = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 : 0);\n coords.group.y = mg_get_plot_top(args) + args.buffer;\n coords.group.dy = '.35em';\n coords.group.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n }\n\n if (position === 'bottom') {\n coords.cat.x = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.y = mg_get_plot_bottom(args) + args.buffer;\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n coords.group.x = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 - scale.bandwidth() / 2 : 0);\n coords.group.y = mg_get_plot_bottom(args) + args.buffer;\n coords.group.dy = '.35em';\n coords.group.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n }\n\n return coords;\n}\n\nfunction categoricalLabels (args, axisArgs) {\n var ns = axisArgs.namespace;\n var nsClass = 'mg-' + ns + '-axis';\n var scale = args.scales[ns.toUpperCase()];\n var groupScale = args.scales[(ns + 'group').toUpperCase()];\n var groupAccessor = ns + 'group_accessor';\n\n var svg = mg_get_svg_child_of(args.target);\n mg_selectAll_and_remove(svg, '.' + nsClass);\n var g = mg_add_g(svg, nsClass);\n var group_g;\n var groups = groupScale.domain && groupScale.domain()\n ? groupScale.domain()\n : ['1'];\n\n groups.forEach(function (group) {\n // grab group placement stuff.\n var coords = categoricalLabelPlacement(args, axisArgs, group);\n\n group_g = mg_add_g(g, 'mg-group-' + mg_normalize(group));\n if (args[groupAccessor] !== null) {\n var labels = group_g.append('text')\n .classed('mg-barplot-group-label', true)\n .attr('x', coords.group.x)\n .attr('y', coords.group.y)\n .attr('dy', coords.group.dy)\n .attr('text-anchor', coords.group.textAnchor)\n .text(group);\n\n } else {\n var labels = group_g.selectAll('text')\n .data(scale.domain())\n .enter()\n .append('text')\n .attr('x', coords.cat.x)\n .attr('y', coords.cat.y)\n .attr('dy', coords.cat.dy)\n .attr('text-anchor', coords.cat.textAnchor)\n .text(String);\n }\n if (args['rotate_' + ns + '_labels']) {\n rotateLabels(labels, args['rotate_' + ns + '_labels']);\n }\n });\n}\n\nfunction categoricalGuides (args, axisArgs) {\n // for each group\n // for each data point\n\n var ns = axisArgs.namespace;\n var scalef = args.scalefns[ns + 'f'];\n var groupf = args.scalefns[ns + 'groupf'];\n var groupScale = args.scales[(ns + 'group').toUpperCase()];\n var scale = args.scales[ns.toUpperCase()];\n var position = axisArgs.position;\n\n var svg = mg_get_svg_child_of(args.target);\n var alreadyPlotted = [];\n\n var x1, x2, y1, y2;\n var grs = (groupScale.domain && groupScale.domain()) ? groupScale.domain() : [null];\n\n mg_selectAll_and_remove(svg, '.mg-category-guides');\n var g = mg_add_g(svg, 'mg-category-guides');\n\n grs.forEach(function (group) {\n scale.domain().forEach(function (cat) {\n if (position === 'left' || position === 'right') {\n x1 = mg_get_plot_left(args);\n x2 = mg_get_plot_right(args);\n y1 = scale(cat) + groupScale(group) + scale.bandwidth() / 2;\n y2 = scale(cat) + groupScale(group) + scale.bandwidth() / 2;\n }\n\n if (position === 'top' || position === 'bottom') {\n x1 = scale(cat) + groupScale(group) + scale.bandwidth() / 2 * (group === null);\n x2 = scale(cat) + groupScale(group) + scale.bandwidth() / 2 * (group === null);\n y1 = mg_get_plot_bottom(args);\n y2 = mg_get_plot_top(args);\n }\n\n g.append('line')\n .attr('x1', x1)\n .attr('x2', x2)\n .attr('y1', y1)\n .attr('y2', y2)\n .attr('stroke-dasharray', '2,1');\n });\n\n var first = groupScale(group) + scale(scale.domain()[0]) + scale.bandwidth() / 2 * (group === null || (position !== 'top' && position != 'bottom'));\n var last = groupScale(group) + scale(scale.domain()[scale.domain().length - 1]) + scale.bandwidth() / 2 * (group === null || (position !== 'top' && position != 'bottom'));\n\n if (position === 'left' || position === 'right') {\n x11 = mg_get_plot_left(args);\n x21 = mg_get_plot_left(args);\n y11 = first;\n y21 = last;\n\n x12 = mg_get_plot_right(args);\n x22 = mg_get_plot_right(args);\n y12 = first;\n y22 = last;\n }\n\n if (position === 'bottom' || position === 'top') {\n x11 = first;\n x21 = last;\n y11 = mg_get_plot_bottom(args);\n y21 = mg_get_plot_bottom(args);\n\n x12 = first;\n x22 = last;\n y12 = mg_get_plot_top(args);\n y22 = mg_get_plot_top(args);\n }\n\n g.append('line')\n .attr('x1', x11)\n .attr('x2', x21)\n .attr('y1', y11)\n .attr('y2', y21)\n .attr('stroke-dasharray', '2,1');\n\n g.append('line')\n .attr('x1', x12)\n .attr('x2', x22)\n .attr('y1', y12)\n .attr('y2', y22)\n .attr('stroke-dasharray', '2,1');\n });\n}\n\nfunction rotateLabels (labels, rotation_degree) {\n if (rotation_degree) {\n labels.attr('transform', function () {\n var elem = d3.select(this);\n return 'rotate(' + rotation_degree + ' ' + elem.attr('x') + ',' + elem.attr('y') + ')';\n });\n\n }\n}\n\nfunction zeroLine (args, axisArgs) {\n var svg = mg_get_svg_child_of(args.target);\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var scale = args.scales[ns.toUpperCase()];\n var x1, x2, y1, y2;\n if (position === 'left' || position === 'right') {\n x1 = mg_get_plot_left(args);\n x2 = mg_get_plot_right(args);\n y1 = scale(0) + 1;\n y2 = scale(0) + 1;\n }\n if (position === 'bottom' || position === 'top') {\n y1 = mg_get_plot_top(args);\n y2 = mg_get_plot_bottom(args);\n x1 = scale(0) - 1;\n x2 = scale(0) - 1;\n }\n\n svg.append('line')\n .attr('x1', x1)\n .attr('x2', x2)\n .attr('y1', y1)\n .attr('y2', y2)\n .attr('stroke', 'black');\n}\n\nvar mgDrawAxis = {};\n\nmgDrawAxis.categorical = function (args, axisArgs) {\n var ns = axisArgs.namespace;\n\n categoricalLabels(args, axisArgs);\n categoricalGuides(args, axisArgs);\n};\n\nmgDrawAxis.numerical = function (args, axisArgs) {\n var namespace = axisArgs.namespace;\n var axisName = namespace + '_axis';\n var axisClass = 'mg-' + namespace + '-axis';\n var svg = mg_get_svg_child_of(args.target);\n\n mg_selectAll_and_remove(svg, '.' + axisClass);\n\n if (!args[axisName]) {\n return this;\n }\n\n var g = mg_add_g(svg, axisClass);\n\n processScaleTicks(args, namespace);\n initializeAxisRim(g, args, axisArgs);\n addTickLines(g, args, axisArgs);\n addNumericalLabels(g, args, axisArgs);\n\n // add label\n if (args[namespace + '_label']) {\n axisArgs.label(svg.select('.mg-' + namespace + '-axis'), args);\n }\n\n // add rugs\n if (args[namespace + '_rug']) {\n rug(args, axisArgs);\n }\n\n if (args.show_bar_zero) {\n mg_bar_add_zero_line(args);\n }\n\n return this;\n};\n\nfunction axisFactory (args) {\n var axisArgs = {};\n axisArgs.type = 'numerical';\n\n this.namespace = function (ns) {\n // take the ns in the scale, and use it to\n axisArgs.namespace = ns;\n return this;\n };\n\n this.rug = function (tf) {\n axisArgs.rug = tf;\n return this;\n };\n\n this.label = function (tf) {\n axisArgs.label = tf;\n return this;\n };\n\n this.type = function (t) {\n axisArgs.type = t;\n return this;\n };\n\n this.position = function (pos) {\n axisArgs.position = pos;\n return this;\n };\n\n this.zeroLine = function (tf) {\n axisArgs.zeroLine = tf;\n return this;\n };\n\n this.draw = function () {\n mgDrawAxis[axisArgs.type](args, axisArgs);\n return this;\n };\n\n return this;\n\n}\n\nMG.axis_factory = axisFactory;\n\n/* ================================================================================ */\n/* ================================================================================ */\n/* ================================================================================ */\n\nfunction y_rug (args) {\n 'use strict';\n\n if (!args.y_rug) {\n return;\n }\n\n args.rug_buffer_size = args.chart_type === 'point'\n ? args.buffer / 2\n : args.buffer * 2 / 3;\n\n var rug = mg_make_rug(args, 'mg-y-rug');\n\n rug.attr('x1', args.left + 1)\n .attr('x2', args.left + args.rug_buffer_size)\n .attr('y1', args.scalefns.yf)\n .attr('y2', args.scalefns.yf);\n\n mg_add_color_accessor_to_rug(rug, args, 'mg-y-rug-mono');\n}\n\nMG.y_rug = y_rug;\n\nfunction mg_change_y_extents_for_bars (args, my) {\n if (args.chart_type === 'bar') {\n my.min = 0;\n my.max = d3.max(args.data[0], function (d) {\n var trio = [];\n trio.push(d[args.y_accessor]);\n\n if (args.baseline_accessor !== null) {\n trio.push(d[args.baseline_accessor]);\n }\n\n if (args.predictor_accessor !== null) {\n trio.push(d[args.predictor_accessor]);\n }\n\n return Math.max.apply(null, trio);\n });\n }\n return my;\n}\n\nfunction mg_compute_yax_format (args) {\n var yax_format = args.yax_format;\n if (!yax_format) {\n if (args.format === 'count') {\n // increase decimals if we have small values, useful for realtime data\n if (args.processed.max_y < 0.0001) {\n args.decimals = 6;\n } else if (args.processed.max_y < 0.1) {\n args.decimals = 4;\n }\n\n yax_format = function (d) {\n var pf;\n\n if (d < 1.0 && d > -1.0 && d !== 0) {\n // don't scale tiny values\n pf = d3.format(',.' + args.decimals + 'f');\n } else if (d < 1000) {\n pf = d3.format(',.0f');\n } else {\n pf = d3.format(',.2s');\n }\n\n // are we adding units after the value or before?\n if (args.yax_units_append) {\n return pf(d) + args.yax_units;\n } else {\n return args.yax_units + pf(d);\n }\n };\n } else { // percentage\n yax_format = function (d_) {\n var n = d3.format('.0%');\n return n(d_);\n };\n }\n }\n return yax_format;\n}\n\nfunction mg_bar_add_zero_line (args) {\n var svg = mg_get_svg_child_of(args.target);\n var extents = args.scales.X.domain();\n if (0 >= extents[0] && extents[1] >= 0) {\n var r = args.scales.Y.range();\n var g = args.categorical_groups.length\n ? args.scales.YGROUP(args.categorical_groups[args.categorical_groups.length - 1])\n : args.scales.YGROUP();\n\n svg.append('svg:line')\n .attr('x1', args.scales.X(0))\n .attr('x2', args.scales.X(0))\n .attr('y1', r[0] + mg_get_plot_top(args))\n .attr('y2', r[r.length - 1] + g)\n .attr('stroke', 'black')\n .attr('opacity', .2);\n }\n}\n\nfunction set_min_max_y (args) {\n // flatten data\n // remove weird data, if log.\n var data = mg_flatten_array(args.data);\n\n if (args.y_scale_type === 'log') {\n data = data.filter(function (d) {\n return d[args.y_accessor] > 0;\n });\n }\n\n if (args.baselines) {\n data = data.concat(args.baselines);\n }\n\n var extents = d3.extent(data, function (d) {\n return d[args.y_accessor];\n });\n\n var my = {};\n my.min = extents[0];\n my.max = extents[1];\n // the default case is for the y-axis to start at 0, unless we explicitly want it\n // to start at an arbitrary number or from the data's minimum value\n if (my.min >= 0 && !args.min_y && !args.min_y_from_data) {\n my.min = 0;\n }\n\n mg_change_y_extents_for_bars(args, my);\n my.min = (args.min_y !== null) ? args.min_y : my.min;\n\n my.max = (args.max_y !== null) ? args.max_y : (my.max < 0) ? my.max + (my.max - my.max * args.inflator) : my.max * args.inflator;\n\n if (args.y_scale_type !== 'log' && my.min < 0) {\n my.min = my.min - (my.min - my.min * args.inflator);\n }\n\n if (!args.min_y && args.min_y_from_data) {\n var buff = (my.max - my.min) * .01;\n my.min = extents[0] - buff;\n my.max = extents[1] + buff;\n }\n args.processed.min_y = my.min;\n args.processed.max_y = my.max;\n}\n\nfunction mg_y_domain_range (args, scale) {\n scale.domain([args.processed.min_y, args.processed.max_y])\n .range([mg_get_plot_bottom(args), args.top]);\n return scale;\n}\n\nfunction mg_define_y_scales (args) {\n var scale = (mg_is_function(args.y_scale_type))\n ? args.y_scale_type()\n : (args.y_scale_type === 'log')\n ? d3.scaleLog()\n : d3.scaleLinear();\n\n if (args.y_scale_type === 'log') {\n if (args.chart_type === 'histogram') {\n // log histogram plots should start just below 1\n // so that bins with single counts are visible\n args.processed.min_y = 0.2;\n } else {\n if (args.processed.min_y <= 0) {\n args.processed.min_y = 1;\n }\n }\n }\n args.scales.Y = mg_y_domain_range(args, scale);\n args.scales.Y.clamp(args.y_scale_type === 'log');\n\n // used for ticks and such, and designed to be paired with log or linear\n args.scales.Y_axis = mg_y_domain_range(args, d3.scaleLinear());\n}\n\nfunction mg_add_y_label (g, args) {\n if (args.y_label) {\n g.append('text')\n .attr('class', 'label')\n .attr('x', function () {\n return -1 * (mg_get_plot_top(args) +\n ((mg_get_plot_bottom(args)) - (mg_get_plot_top(args))) / 2);\n })\n .attr('y', function () {\n return args.left / 2;\n })\n .attr('dy', '0.4em')\n .attr('text-anchor', 'middle')\n .text(function (d) {\n return args.y_label;\n })\n .attr('transform', function (d) {\n return 'rotate(-90)';\n });\n }\n}\n\nfunction mg_add_y_axis_rim (g, args) {\n var tick_length = args.processed.y_ticks.length;\n if (!args.x_extended_ticks && !args.y_extended_ticks && tick_length) {\n var y1scale, y2scale;\n\n if (args.axes_not_compact && args.chart_type !== 'bar') {\n y1scale = args.height - args.bottom;\n y2scale = args.top;\n } else if (tick_length) {\n y1scale = args.scales.Y(args.processed.y_ticks[0]).toFixed(2);\n y2scale = args.scales.Y(args.processed.y_ticks[tick_length - 1]).toFixed(2);\n } else {\n y1scale = 0;\n y2scale = 0;\n }\n\n g.append('line')\n .attr('x1', args.left)\n .attr('x2', args.left)\n .attr('y1', y1scale)\n .attr('y2', y2scale);\n }\n}\n\nfunction mg_add_y_axis_tick_lines (g, args) {\n g.selectAll('.mg-yax-ticks')\n .data(args.processed.y_ticks).enter()\n .append('line')\n .classed('mg-extended-yax-ticks', args.y_extended_ticks)\n .attr('x1', args.left)\n .attr('x2', function () {\n return (args.y_extended_ticks) ? args.width - args.right : args.left - args.yax_tick_length;\n })\n .attr('y1', function (d) {\n return args.scales.Y(d).toFixed(2);\n })\n .attr('y2', function (d) {\n return args.scales.Y(d).toFixed(2);\n });\n}\n\nfunction mg_add_y_axis_tick_labels (g, args) {\n var yax_format = mg_compute_yax_format(args);\n g.selectAll('.mg-yax-labels')\n .data(args.processed.y_ticks).enter()\n .append('text')\n .attr('x', args.left - args.yax_tick_length * 3 / 2)\n .attr('dx', -3)\n .attr('y', function (d) {\n return args.scales.Y(d).toFixed(2);\n })\n .attr('dy', '.35em')\n .attr('text-anchor', 'end')\n .text(function (d) {\n var o = yax_format(d);\n return o;\n });\n}\n\n// TODO ought to be deprecated, only used by histogram\nfunction y_axis (args) {\n if (!args.processed) {\n args.processed = {};\n }\n\n var svg = mg_get_svg_child_of(args.target);\n MG.call_hook('y_axis.process_min_max', args, args.processed.min_y, args.processed.max_y);\n mg_selectAll_and_remove(svg, '.mg-y-axis');\n\n if (!args.y_axis) {\n return this;\n }\n\n var g = mg_add_g(svg, 'mg-y-axis');\n mg_add_y_label(g, args);\n mg_process_scale_ticks(args, 'y');\n mg_add_y_axis_rim(g, args);\n mg_add_y_axis_tick_lines(g, args);\n mg_add_y_axis_tick_labels(g, args);\n\n if (args.y_rug) {\n y_rug(args);\n }\n\n return this;\n}\n\nMG.y_axis = y_axis;\n\nfunction mg_add_categorical_labels (args) {\n var svg = mg_get_svg_child_of(args.target);\n mg_selectAll_and_remove(svg, '.mg-y-axis');\n var g = mg_add_g(svg, 'mg-y-axis');\n var group_g;(args.categorical_groups.length ? args.categorical_groups : ['1']).forEach(function (group) {\n group_g = mg_add_g(g, 'mg-group-' + mg_normalize(group));\n\n if (args.ygroup_accessor !== null) {\n mg_add_group_label(group_g, group, args);\n } else {\n var labels = mg_add_graphic_labels(group_g, group, args);\n mg_rotate_labels(labels, args.rotate_y_labels);\n }\n });\n}\n\nfunction mg_add_graphic_labels (g, group, args) {\n return g.selectAll('text').data(args.scales.Y.domain()).enter().append('svg:text')\n .attr('x', args.left - args.buffer)\n .attr('y', function (d) {\n return args.scales.YGROUP(group) + args.scales.Y(d) + args.scales.Y.bandwidth() / 2;\n })\n .attr('dy', '.35em')\n .attr('text-anchor', 'end')\n .text(String);\n}\n\nfunction mg_add_group_label (g, group, args) {\n g.append('svg:text')\n .classed('mg-barplot-group-label', true)\n .attr('x', args.left - args.buffer)\n .attr('y', args.scales.YGROUP(group) + args.scales.YGROUP.bandwidth() / 2)\n .attr('dy', '.35em')\n .attr('text-anchor', 'end')\n .text(group);\n}\n\nfunction mg_draw_group_lines (args) {\n var svg = mg_get_svg_child_of(args.target);\n var groups = args.scales.YGROUP.domain();\n var first = groups[0];\n var last = groups[groups.length - 1];\n\n svg.select('.mg-category-guides').selectAll('mg-group-lines')\n .data(groups)\n .enter().append('line')\n .attr('x1', mg_get_plot_left(args))\n .attr('x2', mg_get_plot_left(args))\n .attr('y1', function (d) {\n return args.scales.YGROUP(d);\n })\n .attr('y2', function (d) {\n return args.scales.YGROUP(d) + args.ygroup_height;\n })\n .attr('stroke-width', 1);\n}\n\nfunction mg_y_categorical_show_guides (args) {\n // for each group\n // for each data point\n var svg = mg_get_svg_child_of(args.target);\n var alreadyPlotted = [];\n args.data[0].forEach(function (d) {\n if (alreadyPlotted.indexOf(d[args.y_accessor]) === -1) {\n svg.select('.mg-category-guides').append('line')\n .attr('x1', mg_get_plot_left(args))\n .attr('x2', mg_get_plot_right(args))\n .attr('y1', args.scalefns.yf(d) + args.scalefns.ygroupf(d))\n .attr('y2', args.scalefns.yf(d) + args.scalefns.ygroupf(d))\n .attr('stroke-dasharray', '2,1');\n }\n });\n}\n\nfunction y_axis_categorical (args) {\n if (!args.y_axis) {\n return this;\n }\n\n mg_add_categorical_labels(args);\n // mg_draw_group_scaffold(args);\n if (args.show_bar_zero) mg_bar_add_zero_line(args);\n if (args.ygroup_accessor) mg_draw_group_lines(args);\n if (args.y_categorical_show_guides) mg_y_categorical_show_guides(args);\n return this;\n}\n\nMG.y_axis_categorical = y_axis_categorical;\n\nfunction x_rug(args) {\n 'use strict';\n\n if(!args.x_rug) {\n return;\n }\n\n args.rug_buffer_size = args.chart_type === 'point'\n ? args.buffer / 2\n : args.buffer;\n\n var rug = mg_make_rug(args, 'mg-x-rug');\n\n rug.attr('x1', args.scalefns.xf)\n .attr('x2', args.scalefns.xf)\n .attr('y1', args.height - args.bottom - args.rug_buffer_size)\n .attr('y2', args.height - args.bottom);\n\n mg_add_color_accessor_to_rug(rug, args, 'mg-x-rug-mono');\n}\n\nMG.x_rug = x_rug;\n\nfunction mg_add_processed_object(args) {\n if (!args.processed) {\n args.processed = {};\n }\n}\n\n// TODO ought to be deprecated, only used by histogram\nfunction x_axis(args) {\n 'use strict';\n\n var svg = mg_get_svg_child_of(args.target);\n mg_add_processed_object(args);\n\n mg_select_xax_format(args);\n mg_selectAll_and_remove(svg, '.mg-x-axis');\n\n if (!args.x_axis) {\n return this;\n }\n\n var g = mg_add_g(svg, 'mg-x-axis');\n\n mg_add_x_ticks(g, args);\n mg_add_x_tick_labels(g, args);\n if (args.x_label) { mg_add_x_label(g, args); }\n if (args.x_rug) { x_rug(args); }\n\n return this;\n}\n\nMG.x_axis = x_axis;\n\nfunction x_axis_categorical(args) {\n var svg = mg_get_svg_child_of(args.target);\n var additional_buffer = 0;\n if (args.chart_type === 'bar') {\n additional_buffer = args.buffer + 5;\n }\n\n mg_add_categorical_scale(args, 'X', args.categorical_variables.reverse(), args.left, mg_get_plot_right(args) - additional_buffer);\n mg_add_scale_function(args, 'xf', 'X', 'value');\n mg_selectAll_and_remove(svg, '.mg-x-axis');\n\n var g = mg_add_g(svg, 'mg-x-axis');\n\n if (!args.x_axis) {\n return this;\n }\n\n mg_add_x_axis_categorical_labels(g, args, additional_buffer);\n return this;\n}\n\nfunction mg_add_x_axis_categorical_labels(g, args, additional_buffer) {\n var labels = g.selectAll('text')\n .data(args.categorical_variables)\n .enter()\n .append('text');\n\n labels\n .attr('x', function(d) {\n return args.scales.X(d) + args.scales.X.bandwidth() / 2 + (args.buffer) * args.bar_outer_padding_percentage + (additional_buffer / 2);\n })\n .attr('y', mg_get_plot_bottom(args))\n .attr('dy', '.35em')\n .attr('text-anchor', 'middle')\n .text(String);\n\n if (args.truncate_x_labels) {\n labels.each(function(d, idx) {\n var elem = this, width = args.scales.X.bandwidth();\n truncate_text(elem, d, width);\n });\n }\n mg_rotate_labels(labels, args.rotate_x_labels);\n}\n\nMG.x_axis_categorical = x_axis_categorical;\n\nfunction mg_point_add_color_scale(args) {\n var color_domain, color_range;\n\n if (args.color_accessor !== null) {\n color_domain = mg_get_color_domain(args);\n color_range = mg_get_color_range(args);\n\n if (args.color_type === 'number') {\n args.scales.color = d3.scaleLinear()\n .domain(color_domain)\n .range(color_range)\n .clamp(true);\n } else {\n args.scales.color = args.color_range !== null\n ? d3.scaleOrdinal().range(color_range)\n : (color_domain.length > 10\n ? d3.scaleOrdinal(d3.schemeCategory20)\n : d3.scaleOrdinal(d3.schemeCategory10));\n\n args.scales.color.domain(color_domain);\n }\n mg_add_scale_function(args, 'color', 'color', args.color_accessor);\n }\n}\n\nfunction mg_get_color_domain(args) {\n var color_domain;\n if (args.color_domain === null) {\n if (args.color_type === 'number') {\n color_domain = d3.extent(args.data[0], function(d) {\n return d[args.color_accessor];\n });\n } else if (args.color_type === 'category') {\n color_domain = d3.set(args.data[0]\n .map(function(d) {\n return d[args.color_accessor];\n }))\n .values();\n\n color_domain.sort();\n }\n } else {\n color_domain = args.color_domain;\n }\n return color_domain;\n}\n\nfunction mg_get_color_range(args) {\n var color_range;\n if (args.color_range === null) {\n if (args.color_type === 'number') {\n color_range = ['blue', 'red'];\n } else {\n color_range = null;\n }\n } else {\n color_range = args.color_range;\n }\n return color_range;\n}\n\nfunction mg_point_add_size_scale(args) {\n var min_size, max_size, size_domain, size_range;\n if (args.size_accessor !== null) {\n size_domain = mg_get_size_domain(args);\n size_range = mg_get_size_range(args);\n\n args.scales.size = d3.scaleLinear()\n .domain(size_domain)\n .range(size_range)\n .clamp(true);\n\n mg_add_scale_function(args, 'size', 'size', args.size_accessor);\n }\n}\n\nfunction mg_get_size_domain(args) {\n return (args.size_domain === null)\n ? d3.extent(args.data[0], function(d) { return d[args.size_accessor]; })\n : args.size_domain;\n}\n\nfunction mg_get_size_range(args) {\n var size_range;\n if (args.size_range === null) {\n size_range = [1, 5];\n } else {\n size_range = args.size_range;\n }\n return size_range;\n}\n\nfunction mg_add_x_label(g, args) {\n if (args.x_label) {\n g.append('text')\n .attr('class', 'label')\n .attr('x', function() {\n return mg_get_plot_left(args) + (mg_get_plot_right(args) - mg_get_plot_left(args)) / 2;\n })\n .attr('dx', args.x_label_nudge_x != null ? args.x_label_nudge_x : 0)\n .attr('y', function() {\n var xAxisTextElement = d3.select(args.target)\n .select('.mg-x-axis text').node().getBoundingClientRect();\n return mg_get_bottom(args) + args.xax_tick_length * (7 / 3) + xAxisTextElement.height * 0.8 + 10;\n })\n .attr('dy', '.5em')\n .attr('text-anchor', 'middle')\n .text(function(d) {\n return args.x_label;\n });\n }\n}\n\nfunction mg_default_bar_xax_format(args) {\n return function(d) {\n if (d < 1.0 && d > -1.0 && d !== 0) {\n // don't scale tiny values\n return args.xax_units + d.toFixed(args.decimals);\n } else {\n var pf = d3.format(',.0f');\n return args.xax_units + pf(d);\n }\n };\n}\n\nfunction mg_get_time_frame(diff) {\n // diff should be (max_x - min_x) / 1000, in other words, the difference in seconds.\n var time_frame;\n if (mg_milisec_diff(diff)) {\n time_frame = 'millis';\n } else if (mg_sec_diff(diff)) {\n time_frame = 'seconds';\n } else if (mg_day_diff(diff)) {\n time_frame = 'less-than-a-day';\n } else if (mg_four_days(diff)) {\n time_frame = 'four-days';\n } else if (mg_many_days(diff)) { // a handful of months?\n time_frame = 'many-days';\n } else if (mg_many_months(diff)) {\n time_frame = 'many-months';\n } else if (mg_years(diff)) {\n time_frame = 'years';\n } else {\n time_frame = 'default';\n }\n return time_frame;\n}\n\nfunction mg_milisec_diff(diff) {\n return diff < 10;\n}\n\nfunction mg_sec_diff(diff) {\n return diff < 60;\n}\n\nfunction mg_day_diff(diff) {\n return diff / (60 * 60) <= 24;\n}\n\nfunction mg_four_days(diff) {\n return diff / (60 * 60) <= 24 * 4;\n}\n\nfunction mg_many_days(diff) {\n return diff / (60 * 60 * 24) <= 93;\n}\n\nfunction mg_many_months(diff) {\n return diff / (60 * 60 * 24) < 365 * 2;\n}\n\nfunction mg_years(diff) {\n return diff / (60 * 60 * 24) >= 365 * 2;\n}\n\nfunction mg_get_time_format(utc, diff) {\n var main_time_format;\n if (mg_milisec_diff(diff)) {\n main_time_format = MG.time_format(utc, '%M:%S.%L');\n } else if (mg_sec_diff(diff)) {\n main_time_format = MG.time_format(utc, '%M:%S');\n } else if (mg_day_diff(diff)) {\n main_time_format = MG.time_format(utc, '%H:%M');\n } else if (mg_four_days(diff)) {\n main_time_format = MG.time_format(utc, '%H:%M');\n } else if (mg_many_days(diff)) {\n main_time_format = MG.time_format(utc, '%b %d');\n } else if (mg_many_months(diff)) {\n main_time_format = MG.time_format(utc, '%b');\n } else {\n main_time_format = MG.time_format(utc, '%Y');\n }\n return main_time_format;\n}\n\nfunction mg_process_time_format(args) {\n var diff;\n var main_time_format;\n var time_frame;\n\n if (args.time_series) {\n diff = (args.processed.max_x - args.processed.min_x) / 1000;\n time_frame = mg_get_time_frame(diff);\n main_time_format = mg_get_time_format(args.utc_time, diff);\n }\n\n args.processed.main_x_time_format = main_time_format;\n args.processed.x_time_frame = time_frame;\n}\n\nfunction mg_default_xax_format(args) {\n if (args.xax_format) {\n return args.xax_format;\n }\n\n var data = args.processed.original_data || args.data;\n var flattened = mg_flatten_array(data)[0];\n var test_point_x = flattened[args.processed.original_x_accessor || args.x_accessor];\n if (test_point_x === undefined) {\n test_point_x = flattened;\n }\n\n return function(d) {\n mg_process_time_format(args);\n\n if (mg_is_date(test_point_x)) {\n return args.processed.main_x_time_format(new Date(d));\n } else if (typeof test_point_x === 'number') {\n var is_float = d % 1 !== 0;\n var pf;\n\n if (is_float) {\n pf = d3.format(',.' + args.decimals + 'f');\n } else if (d < 1000) {\n pf = d3.format(',.0f');\n } else {\n pf = d3.format(',.2s');\n }\n return args.xax_units + pf(d);\n } else {\n return args.xax_units + d;\n }\n };\n}\n\nfunction mg_add_x_ticks(g, args) {\n mg_process_scale_ticks(args, 'x');\n mg_add_x_axis_rim(args, g);\n mg_add_x_axis_tick_lines(args, g);\n}\n\nfunction mg_add_x_axis_rim(args, g) {\n var tick_length = args.processed.x_ticks.length;\n var last_i = args.scales.X.ticks(args.xax_count).length - 1;\n\n if (!args.x_extended_ticks) {\n g.append('line')\n .attr('x1', function() {\n if (args.xax_count === 0) {\n return mg_get_plot_left(args);\n } else if (args.axes_not_compact && args.chart_type !== 'bar') {\n return args.left;\n } else {\n return (args.scales.X(args.scales.X.ticks(args.xax_count)[0])).toFixed(2);\n }\n })\n .attr('x2', function() {\n if (args.xax_count === 0 || (args.axes_not_compact && args.chart_type !== 'bar')) {\n return mg_get_right(args);\n } else {\n return args.scales.X(args.scales.X.ticks(args.xax_count)[last_i]).toFixed(2);\n }\n })\n .attr('y1', args.height - args.bottom)\n .attr('y2', args.height - args.bottom);\n }\n}\n\nfunction mg_add_x_axis_tick_lines(args, g) {\n g.selectAll('.mg-xax-ticks')\n .data(args.processed.x_ticks).enter()\n .append('line')\n .attr('x1', function(d) {\n return args.scales.X(d).toFixed(2); })\n .attr('x2', function(d) {\n return args.scales.X(d).toFixed(2); })\n .attr('y1', args.height - args.bottom)\n .attr('y2', function() {\n return (args.x_extended_ticks) ? args.top : args.height - args.bottom + args.xax_tick_length;\n })\n .attr('class', function() {\n if (args.x_extended_ticks) {\n return 'mg-extended-xax-ticks';\n }\n })\n .classed('mg-xax-ticks', true);\n}\n\nfunction mg_add_x_tick_labels(g, args) {\n mg_add_primary_x_axis_label(args, g);\n mg_add_secondary_x_axis_label(args, g);\n}\n\nfunction mg_add_primary_x_axis_label(args, g) {\n var labels = g.selectAll('.mg-xax-labels')\n .data(args.processed.x_ticks).enter()\n .append('text')\n .attr('x', function(d) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('y', (args.height - args.bottom + args.xax_tick_length * 7 / 3).toFixed(2))\n .attr('dy', '.50em')\n .attr('text-anchor', 'middle');\n\n if (args.time_series && args.european_clock) {\n labels.append('tspan').classed('mg-european-hours', true).text(function(_d, i) {\n var d = new Date(_d);\n if (i === 0) return d3.timeFormat('%H')(d);\n else return '';\n });\n labels.append('tspan').classed('mg-european-minutes-seconds', true).text(function(_d, i) {\n var d = new Date(_d);\n return ':' + args.processed.xax_format(d);\n });\n } else {\n labels.text(function(d) {\n return args.xax_units + args.processed.xax_format(d);\n });\n }\n\n // CHECK TO SEE IF OVERLAP for labels. If so,\n // remove half of them. This is a dirty hack.\n // We will need to figure out a more principled way of doing this.\n if (mg_elements_are_overlapping(labels)) {\n labels.filter(function(d, i) {\n return (i + 1) % 2 === 0;\n }).remove();\n\n var svg = mg_get_svg_child_of(args.target);\n svg.selectAll('.mg-xax-ticks')\n .filter(function(d, i) {\n return (i + 1) % 2 === 0;\n })\n .remove();\n }\n}\n\nfunction mg_add_secondary_x_axis_label(args, g) {\n if (args.time_series && (args.show_years || args.show_secondary_x_label)) {\n var tf = mg_get_yformat_and_secondary_time_function(args);\n mg_add_secondary_x_axis_elements(args, g, tf.timeframe, tf.yformat, tf.secondary);\n }\n}\n\nfunction mg_get_yformat_and_secondary_time_function(args) {\n var tf = {};\n tf.timeframe = args.processed.x_time_frame;\n switch (tf.timeframe) {\n case 'millis':\n case 'seconds':\n tf.secondary = d3.timeDays;\n if (args.european_clock) tf.yformat = MG.time_format(args.utc_time, '%b %d');\n else tf.yformat = MG.time_format(args.utc_time, '%I %p');\n break;\n case 'less-than-a-day':\n tf.secondary = d3.timeDays;\n tf.yformat = MG.time_format(args.utc_time, '%b %d');\n break;\n case 'four-days':\n tf.secondary = d3.timeDays;\n tf.yformat = MG.time_format(args.utc_time, '%b %d');\n break;\n case 'many-days':\n tf.secondary = d3.timeYears;\n tf.yformat = MG.time_format(args.utc_time, '%Y');\n break;\n case 'many-months':\n tf.secondary = d3.timeYears;\n tf.yformat = MG.time_format(args.utc_time, '%Y');\n break;\n default:\n tf.secondary = d3.timeYears;\n tf.yformat = MG.time_format(args.utc_time, '%Y');\n }\n return tf;\n}\n\nfunction mg_add_secondary_x_axis_elements(args, g, time_frame, yformat, secondary_function) {\n var years = secondary_function(args.processed.min_x, args.processed.max_x);\n if (years.length === 0) {\n var first_tick = args.scales.X.ticks(args.xax_count)[0];\n years = [first_tick];\n }\n\n var yg = mg_add_g(g, 'mg-year-marker');\n if (time_frame === 'default' && args.show_year_markers) {\n mg_add_year_marker_line(args, yg, years, yformat);\n }\n if (time_frame != 'years') mg_add_year_marker_text(args, yg, years, yformat);\n}\n\nfunction mg_add_year_marker_line(args, g, years, yformat) {\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('line')\n .attr('x1', function(d) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('x2', function(d) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('y1', mg_get_top(args))\n .attr('y2', mg_get_bottom(args));\n}\n\nfunction mg_add_year_marker_text(args, g, years, yformat) {\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('text')\n .attr('x', function(d, i) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('y', function() {\n var xAxisTextElement = d3.select(args.target)\n .select('.mg-x-axis text').node().getBoundingClientRect();\n return (mg_get_bottom(args) + args.xax_tick_length * 7 / 3) + (xAxisTextElement.height * 0.8);\n })\n .attr('dy', '.50em')\n .attr('text-anchor', 'middle')\n .text(function(d) {\n return yformat(new Date(d));\n });\n}\n\nfunction mg_min_max_x_for_nonbars(mx, args, data) {\n var extent_x = d3.extent(data, function(d) {\n return d[args.x_accessor];\n });\n mx.min = extent_x[0];\n mx.max = extent_x[1];\n}\n\nfunction mg_min_max_x_for_bars(mx, args, data) {\n mx.min = d3.min(data, function(d) {\n var trio = [\n d[args.x_accessor],\n (d[args.baseline_accessor]) ? d[args.baseline_accessor] : 0,\n (d[args.predictor_accessor]) ? d[args.predictor_accessor] : 0\n ];\n return Math.min.apply(null, trio);\n });\n\n if (mx.min > 0) mx.min = 0;\n\n mx.max = d3.max(data, function(d) {\n var trio = [\n d[args.x_accessor],\n (d[args.baseline_accessor]) ? d[args.baseline_accessor] : 0,\n (d[args.predictor_accessor]) ? d[args.predictor_accessor] : 0\n ];\n return Math.max.apply(null, trio);\n });\n return mx;\n}\n\nfunction mg_min_max_x_for_dates(mx) {\n var yesterday = MG.clone(mx.min).setDate(mx.min.getDate() - 1);\n var tomorrow = MG.clone(mx.min).setDate(mx.min.getDate() + 1);\n mx.min = yesterday;\n mx.max = tomorrow;\n}\n\nfunction mg_min_max_x_for_numbers(mx) {\n // TODO do we want to rewrite this?\n mx.min = mx.min - 1;\n mx.max = mx.max + 1;\n}\n\nfunction mg_min_max_x_for_strings(mx) {\n // TODO shouldn't be allowing strings here to be coerced into numbers\n mx.min = Number(mx.min) - 1;\n mx.max = Number(mx.max) + 1;\n}\n\nfunction mg_force_xax_count_to_be_two(args) {\n args.xax_count = 2;\n}\n\nfunction mg_sort_through_data_type_and_set_x_min_max_accordingly(mx, args, data) {\n if (args.chart_type === 'line' || args.chart_type === 'point' || args.chart_type === 'histogram') {\n mg_min_max_x_for_nonbars(mx, args, data);\n\n } else if (args.chart_type === 'bar') {\n mg_min_max_x_for_bars(mx, args, data);\n }\n // if data set is of length 1, expand the range so that we can build the x-axis\n if (mx.min === mx.max && !(args.min_x && args.max_x)) {\n if (mg_is_date(mx.min)) {\n mg_min_max_x_for_dates(mx);\n } else if (typeof min_x === 'number') {\n mg_min_max_x_for_numbers(mx);\n } else if (typeof min_x === 'string') {\n mg_min_max_x_for_strings(mx);\n }\n // force xax_count to be 2\n mg_force_xax_count_to_be_two(args);\n }\n}\n\nfunction mg_select_xax_format(args) {\n var c = args.chart_type;\n if (!args.processed.xax_format) {\n if (args.xax_format) {\n args.processed.xax_format = args.xax_format;\n } else {\n if (c === 'line' || c === 'point' || c === 'histogram') {\n args.processed.xax_format = mg_default_xax_format(args);\n } else if (c === 'bar') {\n args.processed.xax_format = mg_default_bar_xax_format(args);\n }\n }\n }\n}\n\nfunction mg_merge_args_with_defaults(args) {\n var defaults = {\n target: null,\n title: null,\n description: null\n };\n\n if (!args) {\n args = {};\n }\n\n if (!args.processed) {\n args.processed = {};\n }\n\n args = merge_with_defaults(args, defaults);\n return args;\n}\n\nfunction mg_is_time_series(args) {\n var first_elem = mg_flatten_array(args.processed.original_data || args.data)[0];\n args.time_series = mg_is_date(first_elem[args.processed.original_x_accessor || args.x_accessor]);\n}\n\nfunction mg_init_compute_width(args) {\n var svg_width = args.width;\n if (args.full_width) {\n svg_width = get_width(args.target);\n }\n if (args.x_axis_type === 'categorical' && svg_width === null) {\n svg_width = mg_categorical_calculate_height(args, 'x');\n }\n\n args.width = svg_width;\n}\n\nfunction mg_init_compute_height(args) {\n var svg_height = args.height;\n if (args.full_height) {\n svg_height = get_height(args.target);\n }\n if (args.y_axis_type === 'categorical' && svg_height === null) {\n svg_height = mg_categorical_calculate_height(args, 'y');\n }\n\n args.height = svg_height;\n}\n\nfunction mg_remove_svg_if_chart_type_has_changed(svg, args) {\n if ((!svg.selectAll('.mg-main-line').empty() && args.chart_type !== 'line') ||\n (!svg.selectAll('.mg-points').empty() && args.chart_type !== 'point') ||\n (!svg.selectAll('.mg-histogram').empty() && args.chart_type !== 'histogram') ||\n (!svg.selectAll('.mg-barplot').empty() && args.chart_type !== 'bar')\n ) {\n svg.remove();\n }\n}\n\nfunction mg_add_svg_if_it_doesnt_exist(svg, args) {\n if (mg_get_svg_child_of(args.target).empty()) {\n svg = d3.select(args.target)\n .append('svg')\n .classed('linked', args.linked)\n .attr('width', args.width)\n .attr('height', args.height);\n }\n return svg;\n}\n\nfunction mg_add_clip_path_for_plot_area(svg, args) {\n svg.selectAll('.mg-clip-path').remove();\n svg.append('defs')\n .attr('class', 'mg-clip-path')\n .append('clipPath')\n .attr('id', 'mg-plot-window-' + mg_target_ref(args.target))\n .append('svg:rect')\n .attr('x', mg_get_left(args))\n .attr('y', mg_get_top(args))\n .attr('width', args.width - args.left - args.right - args.buffer)\n .attr('height', args.height - args.top - args.bottom - args.buffer + 1);\n}\n\nfunction mg_adjust_width_and_height_if_changed(svg, args) {\n if (args.width !== Number(svg.attr('width'))) {\n svg.attr('width', args.width);\n }\n if (args.height !== Number(svg.attr('height'))) {\n svg.attr('height', args.height);\n }\n}\n\nfunction mg_set_viewbox_for_scaling(svg, args) {\n // we need to reconsider how we handle automatic scaling\n svg.attr('viewBox', '0 0 ' + args.width + ' ' + args.height);\n if (args.full_width || args.full_height) {\n svg.attr('preserveAspectRatio', 'xMinYMin meet');\n }\n}\n\nfunction mg_remove_missing_classes_and_text(svg) {\n // remove missing class\n svg.classed('mg-missing', false);\n\n // remove missing text\n svg.selectAll('.mg-missing-text').remove();\n svg.selectAll('.mg-missing-pane').remove();\n}\n\nfunction mg_remove_outdated_lines(svg, args) {\n // if we're updating an existing chart and we have fewer lines than\n // before, remove the outdated lines, e.g. if we had 3 lines, and we're calling\n // data_graphic() on the same target with 2 lines, remove the 3rd line\n\n var i = 0;\n\n if (svg.selectAll('.mg-main-line').nodes().length >= args.data.length) {\n // now, the thing is we can't just remove, say, line3 if we have a custom\n // line-color map, instead, see which are the lines to be removed, and delete those\n if (args.custom_line_color_map.length > 0) {\n var array_full_series = function(len) {\n var arr = new Array(len);\n for (var i = 0; i < arr.length; i++) { arr[i] = i + 1; }\n return arr;\n };\n\n // get an array of lines ids to remove\n var lines_to_remove = arr_diff(\n array_full_series(args.max_data_size),\n args.custom_line_color_map);\n\n for (i = 0; i < lines_to_remove.length; i++) {\n svg.selectAll('.mg-main-line.mg-line' + lines_to_remove[i] + '-color')\n .remove();\n }\n } else {\n // if we don't have a custom line-color map, just remove the lines from the end\n var num_of_new = args.data.length;\n var num_of_existing = (svg.selectAll('.mg-main-line').nodes()) ? svg.selectAll('.mg-main-line').nodes().length : 0;\n\n for (i = num_of_existing; i > num_of_new; i--) {\n svg.selectAll('.mg-main-line.mg-line' + i + '-color')\n .remove();\n }\n }\n }\n}\n\nfunction mg_raise_container_error(container, args) {\n if (container.empty()) {\n console.warn('The specified target element \"' + args.target + '\" could not be found in the page. The chart will not be rendered.');\n return;\n }\n}\n\nfunction categoricalInitialization(args, ns) {\n var which = ns === 'x' ? args.width : args.height;\n mg_categorical_count_number_of_groups(args, ns);\n mg_categorical_count_number_of_lanes(args, ns);\n mg_categorical_calculate_group_length(args, ns, which);\n if (which) mg_categorical_calculate_bar_thickness(args, ns);\n}\n\n\nfunction mg_categorical_count_number_of_groups(args, ns) {\n var accessor_string = ns + 'group_accessor';\n var accessor = args[accessor_string];\n args.categorical_groups = [];\n if (accessor) {\n var data = args.data[0];\n args.categorical_groups = d3.set(data.map(function(d) {\n return d[accessor] })).values();\n }\n}\n\nfunction mg_categorical_count_number_of_lanes(args, ns) {\n var accessor_string = ns + 'group_accessor';\n var groupAccessor = args[accessor_string];\n\n args.total_bars = args.data[0].length;\n if (groupAccessor) {\n var group_bars = count_array_elements(pluck(args.data[0], groupAccessor));\n group_bars = d3.max(Object.keys(group_bars).map(function(d) {\n return group_bars[d] }));\n args.bars_per_group = group_bars;\n } else {\n args.bars_per_group = args.data[0].length;\n }\n}\n\nfunction mg_categorical_calculate_group_length(args, ns, which) {\n var groupHeight = ns + 'group_height';\n if (which) {\n var gh = ns === 'y' ?\n (args.height - args.top - args.bottom - args.buffer * 2) / (args.categorical_groups.length || 1) :\n (args.width - args.left - args.right - args.buffer * 2) / (args.categorical_groups.length || 1);\n\n args[groupHeight] = gh;\n } else {\n var step = (1 + args[ns + '_padding_percentage']) * args.bar_thickness;\n args[groupHeight] = args.bars_per_group * step + args[ns + '_outer_padding_percentage'] * 2 * step; //args.bar_thickness + (((args.bars_per_group-1) * args.bar_thickness) * (args.bar_padding_percentage + args.bar_outer_padding_percentage*2));\n }\n}\n\nfunction mg_categorical_calculate_bar_thickness(args, ns) {\n // take one group height.\n var step = (args[ns + 'group_height']) / (args.bars_per_group + args[ns + '_outer_padding_percentage']);\n args.bar_thickness = step - (step * args[ns + '_padding_percentage']);\n}\n\nfunction mg_categorical_calculate_height(args, ns) {\n var groupContribution = (args[ns + 'group_height']) * (args.categorical_groups.length || 1);\n\n var marginContribution = ns === 'y'\n ? args.top + args.bottom + args.buffer * 2\n : args.left + args.right + args.buffer * 2;\n\n return groupContribution + marginContribution +\n (args.categorical_groups.length * args[ns + 'group_height'] * (args[ns + 'group_padding_percentage'] + args[ns + 'group_outer_padding_percentage']));\n}\n\nfunction mg_barchart_extrapolate_group_and_thickness_from_height(args) {\n // we need to set args.bar_thickness, group_height\n}\n\nfunction init(args) {\n 'use strict';\n args = arguments[0];\n args = mg_merge_args_with_defaults(args);\n // If you pass in a dom element for args.target, the expectation\n // of a string elsewhere will break.\n var container = d3.select(args.target);\n mg_raise_container_error(container, args);\n\n var svg = container.selectAll('svg');\n\n // some things that will need to be calculated if we have a categorical axis.\n if (args.y_axis_type === 'categorical') { categoricalInitialization(args, 'y'); }\n if (args.x_axis_type === 'categorical') { categoricalInitialization(args, 'x'); }\n\n mg_is_time_series(args);\n mg_init_compute_width(args);\n mg_init_compute_height(args);\n\n mg_remove_svg_if_chart_type_has_changed(svg, args);\n svg = mg_add_svg_if_it_doesnt_exist(svg, args);\n\n mg_add_clip_path_for_plot_area(svg, args);\n mg_adjust_width_and_height_if_changed(svg, args);\n mg_set_viewbox_for_scaling(svg, args);\n mg_remove_missing_classes_and_text(svg);\n chart_title(args);\n mg_remove_outdated_lines(svg, args);\n\n return this;\n}\n\nMG.init = init;\n\nfunction mg_return_label(d) {\n return d.label;\n}\n\nfunction mg_remove_existing_markers(svg) {\n svg.selectAll('.mg-markers').remove();\n svg.selectAll('.mg-baselines').remove();\n}\n\nfunction mg_in_range(args) {\n return function(d) {\n return (args.scales.X(d[args.x_accessor]) >= mg_get_plot_left(args)) && (args.scales.X(d[args.x_accessor]) <= mg_get_plot_right(args));\n };\n}\n\nfunction mg_x_position(args) {\n return function(d) {\n return args.scales.X(d[args.x_accessor]);\n };\n}\n\nfunction mg_x_position_fixed(args) {\n var _mg_x_pos = mg_x_position(args);\n return function(d) {\n return _mg_x_pos(d).toFixed(2);\n };\n}\n\nfunction mg_y_position_fixed(args) {\n var _mg_y_pos = args.scales.Y;\n return function(d) {\n return _mg_y_pos(d.value).toFixed(2);\n };\n}\n\nfunction mg_place_annotations(checker, class_name, args, svg, line_fcn, text_fcn) {\n var g;\n if (checker) {\n g = svg.append('g').attr('class', class_name);\n line_fcn(g, args);\n text_fcn(g, args);\n }\n}\n\nfunction mg_place_markers(args, svg) {\n mg_place_annotations(args.markers, 'mg-markers', args, svg, mg_place_marker_lines, mg_place_marker_text);\n}\n\nfunction mg_place_baselines(args, svg) {\n mg_place_annotations(args.baselines, 'mg-baselines', args, svg, mg_place_baseline_lines, mg_place_baseline_text);\n}\n\nfunction mg_place_marker_lines(gm, args) {\n var x_pos_fixed = mg_x_position_fixed(args);\n gm.selectAll('.mg-markers')\n .data(args.markers.filter(mg_in_range(args)))\n .enter()\n .append('line')\n .attr('x1', x_pos_fixed)\n .attr('x2', x_pos_fixed)\n .attr('y1', args.top)\n .attr('y2', mg_get_plot_bottom(args))\n .attr('class', function(d) {\n return d.lineclass;\n })\n .attr('stroke-dasharray', '3,1');\n}\n\nfunction mg_place_marker_text(gm, args) {\n gm.selectAll('.mg-markers')\n .data(args.markers.filter(mg_in_range(args)))\n .enter()\n .append('text')\n .attr('class', function(d) {\n return d.textclass || ''; })\n .classed('mg-marker-text', true)\n .attr('x', mg_x_position(args))\n .attr('y', args.x_axis_position === 'bottom' ? mg_get_top(args) * 0.95 : mg_get_bottom(args) + args.buffer)\n .attr('text-anchor', 'middle')\n .text(mg_return_label)\n .each(function(d) {\n if (d.click) {\n d3.select(this).style('cursor', 'pointer')\n .on('click', d.click);\n }\n });\n\n mg_prevent_horizontal_overlap(gm.selectAll('.mg-marker-text').nodes(), args);\n}\n\nfunction mg_place_baseline_lines(gb, args) {\n var y_pos = mg_y_position_fixed(args);\n gb.selectAll('.mg-baselines')\n .data(args.baselines)\n .enter().append('line')\n .attr('x1', mg_get_plot_left(args))\n .attr('x2', mg_get_plot_right(args))\n .attr('y1', y_pos)\n .attr('y2', y_pos);\n}\n\nfunction mg_place_baseline_text(gb, args) {\n var y_pos = mg_y_position_fixed(args);\n gb.selectAll('.mg-baselines')\n .data(args.baselines)\n .enter().append('text')\n .attr('x', mg_get_plot_right(args))\n .attr('y', y_pos)\n .attr('dy', -3)\n .attr('text-anchor', 'end')\n .text(mg_return_label);\n}\n\nfunction markers(args) {\n 'use strict';\n\n var svg = mg_get_svg_child_of(args.target);\n mg_remove_existing_markers(svg);\n mg_place_markers(args, svg);\n mg_place_baselines(args, svg);\n return this;\n}\n\nMG.markers = markers;\n\nfunction mg_clear_mouseover_container(svg) {\n svg.selectAll('.mg-active-datapoint-container').selectAll('*').remove();\n}\n\nfunction mg_setup_mouseover_container(svg, args) {\n svg.select('.mg-active-datapoint').remove();\n var text_anchor = args.mouseover_align === 'right'\n ? 'end'\n : (args.mouseover_align === 'left'\n ? 'start'\n : 'middle');\n\n var mouseover_x = (args.mouseover_align === 'right')\n ? mg_get_plot_right(args)\n : (args.mouseover_align === 'left'\n ? mg_get_plot_left(args)\n : (args.width - args.left - args.right) / 2 + args.left);\n\n var active_datapoint = svg.select('.mg-active-datapoint-container')\n .append('text')\n .attr('class', 'mg-active-datapoint')\n .attr('xml:space', 'preserve')\n .attr('text-anchor', text_anchor);\n\n // set the rollover text's position; if we have markers on two lines,\n // nudge up the rollover text a bit\n var active_datapoint_y_nudge = 0.75;\n\n var y_position = (args.x_axis_position === 'bottom')\n ? mg_get_top(args) * active_datapoint_y_nudge\n : mg_get_bottom(args) + args.buffer * 3;\n\n if (args.markers) {\n var yPos;\n svg.selectAll('.mg-marker-text')\n .each(function() {\n if (!yPos) {\n yPos = d3.select(this).attr('y');\n } else if (yPos !== d3.select(this).attr('y')) {\n active_datapoint_y_nudge = 0.56;\n }\n });\n }\n\n active_datapoint\n .attr('transform', 'translate(' + mouseover_x + ',' + (y_position) + ')');\n}\n\nfunction mg_mouseover_tspan(svg, text) {\n var tspan = '';\n var cl = null;\n if (arguments.length === 3) cl = arguments[2];\n tspan = svg.append('tspan').text(text);\n if (cl !== null) tspan.classed(cl, true);\n this.tspan = tspan;\n\n this.bold = function() {\n this.tspan.attr('font-weight', 'bold');\n return this;\n };\n\n this.font_size = function(pts) {\n this.tspan.attr('font-size', pts);\n return this;\n }\n\n this.x = function(x) {\n this.tspan.attr('x', x);\n return this;\n };\n this.y = function(y) {\n this.tspan.attr('y', y);\n return this;\n };\n this.elem = function() {\n return this.tspan;\n };\n return this;\n}\n\nfunction mg_reset_text_container(svg) {\n var textContainer = svg.select('.mg-active-datapoint');\n textContainer\n .selectAll('*')\n .remove();\n return textContainer;\n}\n\nfunction mg_mouseover_row(row_number, container, rargs) {\n var lineHeight = 1.1;\n this.rargs = rargs;\n\n var rrr = container.append('tspan')\n .attr('x', 0)\n .attr('y', (row_number * lineHeight) + 'em');\n\n this.text = function(text) {\n return mg_mouseover_tspan(rrr, text);\n }\n return this;\n}\n\nfunction mg_mouseover_text(args, rargs) {\n var lineHeight = 1.1;\n this.row_number = 0;\n this.rargs = rargs;\n mg_setup_mouseover_container(rargs.svg, args);\n\n this.text_container = mg_reset_text_container(rargs.svg);\n\n this.mouseover_row = function(rargs) {\n var that = this;\n var rrr = mg_mouseover_row(that.row_number, that.text_container, rargs);\n that.row_number += 1;\n return rrr;\n }\n\n return this;\n}\n\nfunction MG_WindowResizeTracker() {\n var targets = [];\n\n var Observer;\n if (typeof MutationObserver !== \"undefined\") {\n Observer = MutationObserver;\n } else if (typeof WebKitMutationObserver !== \"undefined\") {\n Observer = WebKitMutationObserver;\n }\n\n function window_listener() {\n targets.forEach(function(target) {\n var svg = d3.select(target).select('svg');\n\n // skip if svg is not visible\n if (!svg.empty() && (svg.node().parentNode.offsetWidth > 0 || svg.node().parentNode.offsetHeight > 0)) {\n var aspect = svg.attr('width') !== 0 ? (svg.attr('height') / svg.attr('width')) : 0;\n\n var newWidth = get_width(target);\n\n svg.attr('width', newWidth);\n svg.attr('height', aspect * newWidth);\n }\n });\n }\n\n function remove_target(target) {\n var index = targets.indexOf(target);\n if (index !== -1) {\n targets.splice(index, 1);\n }\n\n if (targets.length === 0) {\n window.removeEventListener('resize', window_listener, true);\n }\n }\n\n return {\n add_target: function(target) {\n if (targets.length === 0) {\n window.addEventListener('resize', window_listener, true);\n }\n\n if (targets.indexOf(target) === -1) {\n targets.push(target);\n\n if (Observer) {\n var observer = new Observer(function(mutations) {\n var targetNode = d3.select(target).node();\n\n if (!targetNode || mutations.some(\n function(mutation) {\n for (var i = 0; i < mutation.removedNodes.length; i++) {\n if (mutation.removedNodes[i] === targetNode) {\n return true;\n }\n }\n })) {\n observer.disconnect();\n remove_target(target);\n }\n });\n\n observer.observe(d3.select(target).node().parentNode, { childList: true });\n }\n }\n }\n };\n}\n\nvar mg_window_resize_tracker = new MG_WindowResizeTracker();\n\nfunction mg_window_listeners(args) {\n mg_if_aspect_ratio_resize_svg(args);\n}\n\nfunction mg_if_aspect_ratio_resize_svg(args) {\n // have we asked the svg to fill a div, if so resize with div\n if (args.full_width || args.full_height) {\n mg_window_resize_tracker.add_target(args.target);\n }\n}\n\nif (mg_jquery_exists()) {\n /*!\n * Bootstrap v3.3.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n /*!\n * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=c3834cc5b59ef727da53)\n * Config saved to config.json and https://gist.github.com/c3834cc5b59ef727da53\n */\n\n /* ========================================================================\n * Bootstrap: dropdown.js v3.3.1\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n +function ($) {\n 'use strict';\n\n if(typeof $().dropdown == 'function')\n return true;\n\n // DROPDOWN CLASS DEFINITION\n // =========================\n\n var backdrop = '.dropdown-backdrop';\n var toggle = '[data-toggle=\"dropdown\"]';\n var Dropdown = function (element) {\n $(element).on('click.bs.dropdown', this.toggle);\n };\n\n Dropdown.VERSION = '3.3.1';\n\n Dropdown.prototype.toggle = function (e) {\n var $this = $(this);\n\n if ($this.is('.disabled, :disabled')) return;\n\n var $parent = getParent($this);\n var isActive = $parent.hasClass('open');\n\n clearMenus();\n\n if (!isActive) {\n if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n // if mobile we use a backdrop because click events don't delegate\n $('').insertAfter($(this)).on('click', clearMenus);\n }\n\n var relatedTarget = { relatedTarget: this };\n $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget));\n\n if (e.isDefaultPrevented()) return;\n\n $this\n .trigger('focus')\n .attr('aria-expanded', 'true');\n\n $parent\n .toggleClass('open')\n .trigger('shown.bs.dropdown', relatedTarget);\n }\n\n return false;\n };\n\n Dropdown.prototype.keydown = function (e) {\n if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return;\n\n var $this = $(this);\n\n e.preventDefault();\n e.stopPropagation();\n\n if ($this.is('.disabled, :disabled')) return;\n\n var $parent = getParent($this);\n var isActive = $parent.hasClass('open');\n\n if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {\n if (e.which == 27) $parent.find(toggle).trigger('focus');\n return $this.trigger('click');\n }\n\n var desc = ' li:not(.divider):visible a';\n var $items = $parent.find('[role=\"menu\"]' + desc + ', [role=\"listbox\"]' + desc);\n\n if (!$items.length) return;\n\n var index = $items.index(e.target);\n\n if (e.which == 38 && index > 0) index--; // up\n if (e.which == 40 && index < $items.length - 1) index++; // down\n if (!~index) index = 0;\n\n $items.eq(index).trigger('focus');\n };\n\n function clearMenus(e) {\n if (e && e.which === 3) return;\n $(backdrop).remove();\n $(toggle).each(function () {\n var $this = $(this);\n var $parent = getParent($this);\n var relatedTarget = { relatedTarget: this };\n\n if (!$parent.hasClass('open')) return;\n\n $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget));\n\n if (e.isDefaultPrevented()) return;\n\n $this.attr('aria-expanded', 'false');\n $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget);\n });\n }\n\n function getParent($this) {\n var selector = $this.attr('data-target');\n\n if (!selector) {\n selector = $this.attr('href');\n selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, ''); // strip for ie7\n }\n\n var $parent = selector && $(selector);\n\n return $parent && $parent.length ? $parent : $this.parent();\n }\n\n\n // DROPDOWN PLUGIN DEFINITION\n // ==========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data('bs.dropdown');\n\n if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)));\n if (typeof option == 'string') data[option].call($this);\n });\n }\n\n var old = $.fn.dropdown;\n\n $.fn.dropdown = Plugin;\n $.fn.dropdown.Constructor = Dropdown;\n\n\n // DROPDOWN NO CONFLICT\n // ====================\n\n $.fn.dropdown.noConflict = function () {\n $.fn.dropdown = old;\n return this;\n };\n\n\n // APPLY TO STANDARD DROPDOWN ELEMENTS\n // ===================================\n\n $(document)\n .on('click.bs.dropdown.data-api', clearMenus)\n .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation(); })\n .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n .on('keydown.bs.dropdown.data-api', '[role=\"menu\"]', Dropdown.prototype.keydown)\n .on('keydown.bs.dropdown.data-api', '[role=\"listbox\"]', Dropdown.prototype.keydown);\n\n }(jQuery);\n}\n\nMG.button_layout = function(target) {\n 'use strict';\n this.target = target;\n this.feature_set = {};\n this.public_name = {};\n this.sorters = {};\n this.manual = [];\n this.manual_map = {};\n this.manual_callback = {};\n\n this._strip_punctuation = function(s) {\n var punctuationless = s.replace(/[^a-zA-Z0-9 _]+/g, '');\n var finalString = punctuationless.replace(/ +?/g, '');\n return finalString;\n };\n\n this.data = function(data) {\n this._data = data;\n return this;\n };\n\n this.manual_button = function(feature, feature_set, callback) {\n this.feature_set[feature] = feature_set;\n this.manual_map[this._strip_punctuation(feature)] = feature;\n this.manual_callback[feature] = callback; // the default is going to be the first feature.\n return this;\n };\n\n this.button = function(feature) {\n if (arguments.length > 1) {\n this.public_name[feature] = arguments[1];\n }\n\n if (arguments.length > 2) {\n this.sorters[feature] = arguments[2];\n }\n\n this.feature_set[feature] = [];\n return this;\n };\n\n this.callback = function(callback) {\n this._callback = callback;\n return this;\n };\n\n this.display = function() {\n var callback = this._callback;\n var manual_callback = this.manual_callback;\n var manual_map = this.manual_map;\n\n var d, f, features, feat;\n features = Object.keys(this.feature_set);\n\n var mapDtoF = function(f) {\n return d[f]; };\n\n var i;\n\n // build out this.feature_set with this.data\n for (i = 0; i < this._data.length; i++) {\n d = this._data[i];\n f = features.map(mapDtoF);\n for (var j = 0; j < features.length; j++) {\n feat = features[j];\n if (this.feature_set[feat].indexOf(f[j]) === -1) {\n this.feature_set[feat].push(f[j]);\n }\n }\n }\n\n for (feat in this.feature_set) {\n if (this.sorters.hasOwnProperty(feat)) {\n this.feature_set[feat].sort(this.sorters[feat]);\n }\n }\n\n $(this.target).empty();\n\n $(this.target).append(\"\");\n\n var dropdownLiAClick = function() {\n var k = $(this).data('key');\n var feature = $(this).data('feature');\n var manual_feature;\n $('.' + feature + '-btns button.btn span.title').html(k);\n if (!manual_map.hasOwnProperty(feature)) {\n callback(feature, k);\n } else {\n manual_feature = manual_map[feature];\n manual_callback[manual_feature](k);\n }\n\n return false;\n };\n\n for (var feature in this.feature_set) {\n features = this.feature_set[feature];\n $(this.target + ' div.segments').append(\n '' + // This never changes.\n '' +\n '' +\n (!this.manual_callback.hasOwnProperty(feature) ? '- All
' : \"\") +\n (!this.manual_callback.hasOwnProperty(feature) ? '' : \"\") +\n '
' + '');\n\n for (i = 0; i < features.length; i++) {\n if (features[i] !== 'all' && features[i] !== undefined) { // strange bug with undefined being added to manual buttons.\n $(this.target + ' div.' + this._strip_punctuation(feature) + '-btns ul.dropdown-menu').append(\n '- ' + features[i] + '
'\n );\n }\n }\n\n $('.' + this._strip_punctuation(feature) + '-btns .dropdown-menu li a').on('click', dropdownLiAClick);\n }\n\n return this;\n };\n\n return this;\n};\n\n(function() {\n 'use strict';\n\n function mg_line_color_text(elem, d, args) {\n elem.classed('mg-hover-line' + d.line_id + '-color', args.colors === null)\n .attr('fill', args.colors === null ? '' : args.colors[d.line_id - 1]);\n }\n\n function mg_line_graph_generators(args, plot, svg) {\n mg_add_line_generator(args, plot);\n mg_add_area_generator(args, plot);\n mg_add_flat_line_generator(args, plot);\n mg_add_confidence_band_generator(args, plot, svg);\n }\n\n function mg_add_confidence_band_generator(args, plot, svg) {\n plot.existing_band = svg.selectAll('.mg-confidence-band').nodes();\n if (args.show_confidence_band) {\n plot.confidence_area = d3.area()\n .defined(plot.line.defined())\n .x(args.scalefns.xf)\n .y0(function(d) {\n var l = args.show_confidence_band[0];\n if (d[l] != undefined) {\n return args.scales.Y(d[l]);\n } else {\n return args.scales.Y(d[args.y_accessor]);\n }\n })\n .y1(function(d) {\n var u = args.show_confidence_band[1];\n if (d[u] != undefined) {\n return args.scales.Y(d[u]);\n } else {\n return args.scales.Y(d[args.y_accessor]);\n }\n })\n .curve(args.interpolate);\n }\n }\n\n function mg_add_area_generator(args, plot) {\n plot.area = d3.area()\n .defined(plot.line.defined())\n .x(args.scalefns.xf)\n .y0(args.scales.Y.range()[0])\n .y1(args.scalefns.yf)\n .curve(args.interpolate);\n }\n\n function mg_add_flat_line_generator(args, plot) {\n plot.flat_line = d3.line()\n .defined(function(d) {\n return (d['_missing'] === undefined || d['_missing'] !== true) && d[args.y_accessor] !== null;\n })\n .x(args.scalefns.xf)\n .y(function() {\n return args.scales.Y(plot.data_median); })\n .curve(args.interpolate);\n }\n\n function mg_add_line_generator(args, plot) {\n plot.line = d3.line()\n .x(args.scalefns.xf)\n .y(args.scalefns.yf)\n .curve(args.interpolate);\n\n // if missing_is_zero is not set, then hide data points that fall in missing\n // data ranges or that have been explicitly identified as missing in the\n // data source.\n if (!args.missing_is_zero) {\n // a line is defined if the _missing attrib is not set to true\n // and the y-accessor is not null\n plot.line = plot.line.defined(function(d) {\n return (d['_missing'] === undefined || d['_missing'] !== true) && d[args.y_accessor] !== null;\n });\n }\n }\n\n function mg_add_confidence_band(args, plot, svg, which_line) {\n if (args.show_confidence_band) {\n var confidenceBand;\n if (svg.select('.mg-confidence-band-' + which_line).empty()) {\n svg.append('path')\n .attr('class', 'mg-confidence-band mg-confidence-band-' + which_line)\n }\n\n // transition this line's confidence band\n confidenceBand = svg.select('.mg-confidence-band-' + which_line);\n\n confidenceBand\n .transition()\n .duration(function() {\n return (args.transition_on_update) ? 1000 : 0;\n })\n .attr('d', plot.confidence_area(args.data[which_line - 1]))\n .attr('clip-path', 'url(#mg-plot-window-' + mg_target_ref(args.target) + ')')\n }\n }\n\n function mg_add_area(args, plot, svg, which_line, line_id) {\n var areas = svg.selectAll('.mg-main-area.mg-area' + line_id);\n if (plot.display_area) {\n // if area already exists, transition it\n if (!areas.empty()) {\n svg.node().appendChild(areas.node());\n\n areas.transition()\n .duration(plot.update_transition_duration)\n .attr('d', plot.area(args.data[which_line]))\n .attr('clip-path', 'url(#mg-plot-window-' + mg_target_ref(args.target) + ')');\n } else { // otherwise, add the area\n svg.append('path')\n .classed('mg-main-area', true)\n .classed('mg-area' + line_id, true)\n .classed('mg-area' + line_id + '-color', args.colors === null)\n .attr('d', plot.area(args.data[which_line]))\n .attr('fill', args.colors === null ? '' : args.colors[line_id - 1])\n .attr('clip-path', 'url(#mg-plot-window-' + mg_target_ref(args.target) + ')');\n }\n } else if (!areas.empty()) {\n areas.remove();\n }\n }\n\n function mg_default_color_for_path(this_path, line_id) {\n this_path.classed('mg-line' + (line_id) + '-color', true);\n }\n\n function mg_color_line(args, this_path, which_line, line_id) {\n if (args.colors) {\n // for now, if args.colors is not an array, then keep moving as if nothing happened.\n // if args.colors is not long enough, default to the usual line_id color.\n if (args.colors.constructor === Array) {\n this_path.attr('stroke', args.colors[which_line]);\n if (args.colors.length < which_line + 1) {\n // Go with default coloring.\n // this_path.classed('mg-line' + (line_id) + '-color', true);\n mg_default_color_for_path(this_path, line_id);\n }\n } else {\n // this_path.classed('mg-line' + (line_id) + '-color', true);\n mg_default_color_for_path(this_path, line_id);\n }\n } else {\n // this is the typical workflow\n // this_path.classed('mg-line' + (line_id) + '-color', true);\n mg_default_color_for_path(this_path, line_id);\n }\n }\n\n function mg_add_line_element(args, plot, this_path, which_line) {\n if (args.animate_on_load) {\n plot.data_median = d3.median(args.data[which_line], function(d) {\n return d[args.y_accessor]; });\n this_path.attr('d', plot.flat_line(args.data[which_line]))\n .transition()\n .duration(1000)\n .attr('d', plot.line(args.data[which_line]))\n .attr('clip-path', 'url(#mg-plot-window-' + mg_target_ref(args.target) + ')');\n } else { // or just add the line\n this_path.attr('d', plot.line(args.data[which_line]))\n .attr('clip-path', 'url(#mg-plot-window-' + mg_target_ref(args.target) + ')');\n }\n }\n\n function mg_add_line(args, plot, svg, existing_line, which_line, line_id) {\n if (!existing_line.empty()) {\n svg.node().appendChild(existing_line.node());\n\n var lineTransition = existing_line.transition()\n .duration(plot.update_transition_duration);\n\n if (!plot.display_area && args.transition_on_update && !args.missing_is_hidden) {\n lineTransition.attrTween('d', path_tween(plot.line(args.data[which_line]), 4));\n } else {\n lineTransition.attr('d', plot.line(args.data[which_line]));\n }\n } else { // otherwise...\n // if we're animating on load, animate the line from its median value\n var this_path = svg.append('path')\n .attr('class', 'mg-main-line mg-line' + line_id);\n\n mg_color_line(args, this_path, which_line, line_id);\n mg_add_line_element(args, plot, this_path, which_line);\n }\n }\n\n function mg_add_legend_element(args, plot, which_line, line_id) {\n var this_legend;\n if (args.legend) {\n if (is_array(args.legend)) {\n this_legend = args.legend[which_line];\n } else if (is_function(args.legend)) {\n this_legend = args.legend(args.data[which_line]);\n }\n\n if (args.legend_target) {\n if (args.colors && args.colors.constructor === Array) {\n plot.legend_text = \"— \" +\n this_legend + ' ' + plot.legend_text;\n } else {\n plot.legend_text = \"— \" +\n this_legend + ' ' + plot.legend_text;\n }\n } else {\n var anchor_point, anchor_orientation, dx;\n if (args.y_axis_position === 'left') {\n anchor_point = args.data[which_line][args.data[which_line].length - 1];\n anchor_orientation = 'start';\n dx = args.buffer;\n } else {\n anchor_point = args.data[which_line][0];\n anchor_orientation = 'end';\n dx = -args.buffer;\n }\n var legend_text = plot.legend_group.append('svg:text')\n .attr('x', args.scalefns.xf(anchor_point))\n .attr('dx', dx)\n .attr('y', args.scalefns.yf(anchor_point))\n .attr('dy', '.35em')\n .attr('font-size', 10)\n .attr('text-anchor', anchor_orientation)\n .attr('font-weight', '300')\n .text(this_legend);\n\n if (args.colors && args.colors.constructor === Array) {\n if (args.colors.length < which_line + 1) {\n legend_text.classed('mg-line' + (line_id) + '-legend-color', true);\n } else {\n legend_text.attr('fill', args.colors[which_line]);\n }\n } else {\n legend_text.classed('mg-line' + (line_id) + '-legend-color', true);\n }\n\n mg_prevent_vertical_overlap(plot.legend_group.selectAll('.mg-line-legend text').nodes(), args);\n }\n }\n }\n\n function mg_plot_legend_if_legend_target(target, legend) {\n if (target) {\n d3.select(target).html(legend);\n }\n }\n\n function mg_add_legend_group(args, plot, svg) {\n if (args.legend) plot.legend_group = mg_add_g(svg, 'mg-line-legend');\n }\n\n function mg_remove_existing_line_rollover_elements(svg) {\n // remove the old rollovers if they already exist\n mg_selectAll_and_remove(svg, '.mg-rollover-rect');\n mg_selectAll_and_remove(svg, '.mg-voronoi');\n\n // remove the old rollover text and circle if they already exist\n mg_selectAll_and_remove(svg, '.mg-active-datapoint');\n mg_selectAll_and_remove(svg, '.mg-line-rollover-circle');\n //mg_selectAll_and_remove(svg, '.mg-active-datapoint-container');\n }\n\n function mg_add_rollover_circle(args, svg) {\n // append circle\n var circle = svg.selectAll('.mg-line-rollover-circle')\n .data(args.data)\n .enter().append('circle')\n .attr('cx', 0)\n .attr('cy', 0)\n .attr('r', 0);\n\n if (args.colors && args.colors.constructor === Array) {\n circle\n .attr('class', function(d) {\n return 'mg-line' + d.line_id;\n })\n .attr('fill', function(d, i) {\n return args.colors[i];\n })\n .attr('stroke', function(d, i) {\n return args.colors[i];\n });\n } else {\n circle.attr('class', function(d, i) {\n return [\n 'mg-line' + d.line_id,\n 'mg-line' + d.line_id + '-color',\n 'mg-area' + d.line_id + '-color'\n ].join(' ');\n });\n }\n circle.classed('mg-line-rollover-circle', true);\n }\n\n function mg_set_unique_line_id_for_each_series(args) {\n // update our data by setting a unique line id for each series\n // increment from 1... unless we have a custom increment series\n var line_id = 1;\n for (var i = 0; i < args.data.length; i++) {\n for (var j = 0; j < args.data[i].length; j++) {\n // Index is saved as original line id for the legend values\n args.data[i][j].index = line_id;\n // if custom line-color map is set, use that instead of line_id (For colors)\n if (args.custom_line_color_map.length > 0) {\n args.data[i][j].line_id = args.custom_line_color_map[i];\n } else {\n args.data[i][j].line_id = line_id;\n }\n }\n line_id++;\n }\n }\n\n function mg_nest_data_for_voronoi(args) {\n return d3.merge(args.data);\n }\n\n function mg_line_class_string(args) {\n return function(d) {\n var class_string;\n\n if (args.linked) {\n var v = d[args.x_accessor];\n var formatter = MG.time_format(args.utc_time, args.linked_format);\n\n // only format when x-axis is date\n var id = (typeof v === 'number') ? (d.line_id - 1) : formatter(v);\n class_string = 'roll_' + id + ' mg-line' + d.line_id;\n\n if (args.color === null) {\n class_string += ' mg-line' + d.line_id + '-color';\n }\n return class_string;\n\n } else {\n class_string = 'mg-line' + d.line_id;\n if (args.color === null) class_string += ' mg-line' + d.line_id + '-color';\n return class_string;\n }\n };\n }\n\n function mg_add_voronoi_rollover(args, svg, rollover_on, rollover_off, rollover_move) {\n var voronoi = d3.voronoi()\n .x(function(d) {\n return args.scales.X(d[args.x_accessor]).toFixed(2); })\n .y(function(d) {\n return args.scales.Y(d[args.y_accessor]).toFixed(2); })\n .extent([\n [args.buffer, args.buffer + args.title_y_position],\n [args.width - args.buffer, args.height - args.buffer]\n ]);\n\n var g = mg_add_g(svg, 'mg-voronoi');\n g.selectAll('path')\n .data(voronoi.polygons(mg_nest_data_for_voronoi(args)))\n .enter()\n .append('path')\n .filter(function(d) {\n return d !== undefined && d.length > 0; })\n .attr('d', function(d) {\n return d == null ? null : 'M' + d.join('L') + 'Z'; })\n .datum(function(d) {\n return d == null ? null : d.data; }) // because of d3.voronoi, reassign d\n .attr('class', mg_line_class_string(args))\n .on('mouseover', rollover_on)\n .on('mouseout', rollover_off)\n .on('mousemove', rollover_move);\n\n mg_configure_voronoi_rollover(args, svg);\n }\n\n function nest_data_for_aggregate_rollover(args) {\n var data_nested = d3.nest()\n .key(function(d) {\n return d[args.x_accessor]; })\n .entries(d3.merge(args.data));\n data_nested.forEach(function(entry) {\n var datum = entry.values[0];\n entry.key = datum[args.x_accessor];\n });\n\n if (args.x_sort) {\n return data_nested.sort(function(a, b) {\n return new Date(a.key) - new Date(b.key); });\n } else {\n return data_nested;\n }\n }\n\n function mg_add_aggregate_rollover(args, svg, rollover_on, rollover_off, rollover_move) {\n // Undo the keys getting coerced to strings, by setting the keys from the values\n // This is necessary for when we have X axis keys that are things like\n var data_nested = nest_data_for_aggregate_rollover(args);\n\n var xf = data_nested.map(function(di) {\n return args.scales.X(di.key);\n });\n\n var g = svg.append('g')\n .attr('class', 'mg-rollover-rect');\n\n g.selectAll('.mg-rollover-rects')\n .data(data_nested).enter()\n .append('rect')\n .attr('x', function(d, i) {\n if (xf.length === 1) return mg_get_plot_left(args);\n else if (i === 0) return xf[i].toFixed(2);\n else return ((xf[i - 1] + xf[i]) / 2).toFixed(2);\n })\n .attr('y', args.top)\n .attr('width', function(d, i) {\n if (xf.length === 1) return mg_get_plot_right(args);\n else if (i === 0) return ((xf[i + 1] - xf[i]) / 2).toFixed(2);\n else if (i === xf.length - 1) return ((xf[i] - xf[i - 1]) / 2).toFixed(2);\n else return ((xf[i + 1] - xf[i - 1]) / 2).toFixed(2);\n })\n .attr('class', function(d) {\n var line_classes = d.values.map(function(datum) {\n var lc = mg_line_class(datum.line_id);\n if (args.colors === null) lc += ' ' + mg_line_color_class(datum.line_id);\n return lc;\n }).join(' ');\n if (args.linked && d.values.length > 0) {\n line_classes += ' ' + mg_rollover_id_class(mg_rollover_format_id(d.values[0], 0, args));\n }\n\n return line_classes;\n })\n .attr('height', args.height - args.bottom - args.top - args.buffer)\n .attr('opacity', 0)\n .on('mouseover', rollover_on)\n .on('mouseout', rollover_off)\n .on('mousemove', rollover_move);\n\n mg_configure_aggregate_rollover(args, svg);\n }\n\n function mg_configure_singleton_rollover(args, svg) {\n svg.select('.mg-rollover-rect rect')\n .on('mouseover')(args.data[0][0], 0);\n }\n\n function mg_configure_voronoi_rollover(args, svg) {\n for (var i = 0; i < args.data.length; i++) {\n var j = i + 1;\n\n if (args.custom_line_color_map.length > 0 &&\n args.custom_line_color_map[i] !== undefined) {\n j = args.custom_line_color_map[i];\n }\n\n if (args.data[i].length === 1 && !svg.selectAll('.mg-voronoi .mg-line' + j).empty()) {\n svg.selectAll('.mg-voronoi .mg-line' + j)\n .on('mouseover')(args.data[i][0], 0);\n\n svg.selectAll('.mg-voronoi .mg-line' + j)\n .on('mouseout')(args.data[i][0], 0);\n }\n }\n }\n\n function mg_line_class(line_id) {\n return 'mg-line' + line_id;\n }\n\n function mg_line_color_class(line_id) {\n return 'mg-line' + line_id + '-color';\n }\n\n function mg_rollover_id_class(id) {\n return 'roll_' + id;\n }\n\n function mg_rollover_format_id(d, i, args) {\n var v = d[args.x_accessor];\n var formatter = MG.time_format(args.utc_time, args.linked_format);\n // only format when x-axis is date\n var id = (typeof v === 'number') ? i : formatter(v);\n return id;\n }\n\n function mg_add_single_line_rollover(args, svg, rollover_on, rollover_off, rollover_move) {\n // set to 1 unless we have a custom increment series\n var line_id = 1;\n if (args.custom_line_color_map.length > 0) {\n line_id = args.custom_line_color_map[0];\n }\n\n var g = svg.append('g')\n .attr('class', 'mg-rollover-rect');\n\n var xf = args.data[0].map(args.scalefns.xf);\n\n g.selectAll('.mg-rollover-rects')\n .data(args.data[0]).enter()\n .append('rect')\n .attr('class', function(d, i) {\n var cl = mg_line_color_class(line_id) + ' ' + mg_line_class(d.line_id);\n if (args.linked) cl += cl + ' ' + mg_rollover_id_class(mg_rollover_format_id(d, i, args));\n return cl;\n })\n .attr('x', function(d, i) {\n // if data set is of length 1\n if (xf.length === 1) return mg_get_plot_left(args);\n else if (i === 0) return xf[i].toFixed(2);\n else return ((xf[i - 1] + xf[i]) / 2).toFixed(2);\n })\n .attr('y', function(d, i) {\n return (args.data.length > 1) ? args.scalefns.yf(d) - 6 // multi-line chart sensitivity\n : args.top;\n })\n .attr('width', function(d, i) {\n // if data set is of length 1\n if (xf.length === 1) return mg_get_plot_right(args);\n else if (i === 0) return ((xf[i + 1] - xf[i]) / 2).toFixed(2);\n else if (i === xf.length - 1) return ((xf[i] - xf[i - 1]) / 2).toFixed(2);\n else return ((xf[i + 1] - xf[i - 1]) / 2).toFixed(2);\n })\n .attr('height', function(d, i) {\n return (args.data.length > 1) ? 12 // multi-line chart sensitivity\n : args.height - args.bottom - args.top - args.buffer;\n })\n .attr('opacity', 0)\n .on('mouseover', rollover_on)\n .on('mouseout', rollover_off)\n .on('mousemove', rollover_move);\n\n if (mg_is_singleton(args)) {\n mg_configure_singleton_rollover(args, svg);\n }\n }\n\n function mg_configure_aggregate_rollover(args, svg) {\n var rect = svg.selectAll('.mg-rollover-rect rect');\n var rect_first = rect.nodes()[0][0] || rect.nodes()[0];\n if (args.data.filter(function(d) { return d.length === 1; }).length > 0) {\n rect.on('mouseover')(rect_first.__data__, 0);\n }\n }\n\n function mg_is_standard_multiline(args) {\n return args.data.length > 1 && !args.aggregate_rollover;\n }\n\n function mg_is_aggregated_rollover(args) {\n return args.data.length > 1 && args.aggregate_rollover;\n }\n\n function mg_is_singleton(args) {\n return args.data.length === 1 && args.data[0].length === 1;\n }\n\n function mg_draw_all_line_elements(args, plot, svg) {\n mg_remove_dangling_bands(plot, svg);\n\n for (var i = args.data.length - 1; i >= 0; i--) {\n var this_data = args.data[i];\n\n // passing the data for the current line\n MG.call_hook('line.before_each_series', [this_data, args]);\n\n // override increment if we have a custom increment series\n var line_id = i + 1;\n if (args.custom_line_color_map.length > 0) {\n line_id = args.custom_line_color_map[i];\n }\n\n args.data[i].line_id = line_id;\n\n if (this_data.length === 0) {\n continue;\n }\n var existing_line = svg.select('path.mg-main-line.mg-line' + (line_id));\n\n mg_add_confidence_band(args, plot, svg, line_id);\n mg_add_area(args, plot, svg, i, line_id);\n mg_add_line(args, plot, svg, existing_line, i, line_id);\n mg_add_legend_element(args, plot, i, line_id);\n\n // passing the data for the current line\n MG.call_hook('line.after_each_series', [this_data, existing_line, args]);\n }\n }\n\n function mg_remove_dangling_bands(plot, svg) {\n if (plot.existing_band[0] && plot.existing_band[0].length > svg.selectAll('.mg-main-line').node().length) {\n svg.selectAll('.mg-confidence-band').remove();\n }\n }\n\n function mg_line_main_plot(args) {\n var plot = {};\n var svg = mg_get_svg_child_of(args.target);\n\n // remove any old legends if they exist\n mg_selectAll_and_remove(svg, '.mg-line-legend');\n mg_add_legend_group(args, plot, svg);\n\n plot.data_median = 0;\n plot.update_transition_duration = (args.transition_on_update) ? 1000 : 0;\n plot.display_area = args.area && !args.use_data_y_min && args.data.length <= 1 && args.aggregate_rollover === false;\n plot.legend_text = '';\n mg_line_graph_generators(args, plot, svg);\n plot.existing_band = svg.selectAll('.mg-confidence-band').nodes();\n\n // should we continue with the default line render? A `line.all_series` hook should return false to prevent the default.\n var continueWithDefault = MG.call_hook('line.before_all_series', [args]);\n if (continueWithDefault !== false) {\n mg_draw_all_line_elements(args, plot, svg);\n }\n\n mg_plot_legend_if_legend_target(args.legend_target, plot.legend_text);\n }\n\n function mg_line_rollover_setup(args, graph) {\n var svg = mg_get_svg_child_of(args.target);\n\n if (svg.selectAll('.mg-active-datapoint-container').nodes().length === 0) {\n mg_add_g(svg, 'mg-active-datapoint-container');\n }\n\n mg_remove_existing_line_rollover_elements(svg);\n mg_add_rollover_circle(args, svg);\n mg_set_unique_line_id_for_each_series(args);\n\n if (mg_is_standard_multiline(args)) {\n mg_add_voronoi_rollover(args, svg, graph.rolloverOn(args), graph.rolloverOff(args), graph.rolloverMove(args));\n } else if (mg_is_aggregated_rollover(args)) {\n mg_add_aggregate_rollover(args, svg, graph.rolloverOn(args), graph.rolloverOff(args), graph.rolloverMove(args));\n } else {\n mg_add_single_line_rollover(args, svg, graph.rolloverOn(args), graph.rolloverOff(args), graph.rolloverMove(args));\n }\n }\n\n function mg_update_rollover_circle(args, svg, d) {\n if (args.aggregate_rollover && args.data.length > 1) {\n // hide the circles in case a non-contiguous series is present\n svg.selectAll('circle.mg-line-rollover-circle')\n .style('opacity', 0);\n\n d.values.forEach(function(datum) {\n if (mg_data_in_plot_bounds(datum, args)) mg_update_aggregate_rollover_circle(args, svg, datum);\n });\n } else if ((args.missing_is_hidden && d['_missing']) || d[args.y_accessor] === null) {\n // disable rollovers for hidden parts of the line\n // recall that hidden parts are missing data ranges and possibly also\n // data points that have been explicitly identified as missing\n return;\n } else {\n // show circle on mouse-overed rect\n if (mg_data_in_plot_bounds(d, args)) {\n mg_update_generic_rollover_circle(args, svg, d);\n }\n }\n }\n\n function mg_update_aggregate_rollover_circle(args, svg, datum) {\n svg.select('circle.mg-line-rollover-circle.mg-line' + datum.line_id)\n .attr('cx', args.scales.X(datum[args.x_accessor]).toFixed(2))\n .attr('cy', args.scales.Y(datum[args.y_accessor]).toFixed(2))\n .attr('r', args.point_size)\n .style('opacity', 1);\n }\n\n function mg_update_generic_rollover_circle(args, svg, d) {\n svg.selectAll('circle.mg-line-rollover-circle.mg-line' + d.line_id)\n .classed('mg-line-rollover-circle', true)\n .attr('cx', function() {\n return args.scales.X(d[args.x_accessor]).toFixed(2);\n })\n .attr('cy', function() {\n return args.scales.Y(d[args.y_accessor]).toFixed(2);\n })\n .attr('r', args.point_size)\n .style('opacity', 1);\n }\n\n function mg_trigger_linked_mouseovers(args, d, i) {\n if (args.linked && !MG.globals.link) {\n MG.globals.link = true;\n if (!args.aggregate_rollover || d.value !== undefined || d.values.length > 0) {\n var datum = d.values ? d.values[0] : d;\n var id = mg_rollover_format_id(datum, i, args);\n // trigger mouseover on matching line in .linked charts\n d3.selectAll('.' + mg_line_class(datum.line_id) + '.' + mg_rollover_id_class(id))\n .each(function(d) {\n d3.select(this)\n .on('mouseover')(d, i);\n });\n }\n }\n }\n\n function mg_trigger_linked_mouseouts(args, d, i) {\n if (args.linked && MG.globals.link) {\n MG.globals.link = false;\n\n var formatter = MG.time_format(args.utc_time, args.linked_format);\n var datums = d.values ? d.values : [d];\n datums.forEach(function(datum) {\n var v = datum[args.x_accessor];\n var id = (typeof v === 'number') ? i : formatter(v);\n\n // trigger mouseout on matching line in .linked charts\n d3.selectAll('.roll_' + id)\n .each(function(d) {\n d3.select(this)\n .on('mouseout')(d);\n });\n });\n }\n }\n\n function mg_remove_active_data_points_for_aggregate_rollover(args, svg) {\n svg.selectAll('circle.mg-line-rollover-circle').filter(function(circle) {\n return circle.length > 1;\n })\n .style('opacity', 0);\n }\n\n function mg_remove_active_data_points_for_generic_rollover(args, svg, d) {\n svg.selectAll('circle.mg-line-rollover-circle.mg-line' + d.line_id)\n .style('opacity', function() {\n var id = d.line_id - 1;\n\n if (args.custom_line_color_map.length > 0 &&\n args.custom_line_color_map.indexOf(d.line_id) !== undefined\n ) {\n id = args.custom_line_color_map.indexOf(d.line_id);\n }\n\n if (args.data[id].length === 1) {\n return 1;\n } else {\n return 0;\n }\n });\n }\n\n function mg_remove_active_text(svg) {\n svg.select('.mg-active-datapoint').text('');\n }\n\n function lineChart(args) {\n this.init = function(args) {\n this.args = args;\n\n if (!args.data || args.data.length === 0) {\n args.internal_error = 'No data was supplied';\n internal_error(args);\n return this;\n } else {\n args.internal_error = undefined;\n }\n\n raw_data_transformation(args);\n process_line(args);\n\n MG.call_hook('line.before_destroy', this);\n\n init(args);\n\n // TODO incorporate markers into calculation of x scales\n new MG.scale_factory(args)\n .namespace('x')\n .numericalDomainFromData()\n .numericalRange('bottom')\n\n var baselines = (args.baselines || []).map(function(d) {\n return d[args.y_accessor];\n });\n\n new MG.scale_factory(args)\n .namespace('y')\n .zeroBottom(true)\n .inflateDomain(true)\n .numericalDomainFromData(baselines)\n .numericalRange('left');\n\n var svg = mg_get_svg_child_of(args.target);\n\n if (args.x_axis) {\n new MG.axis_factory(args)\n .namespace('x')\n .type('numerical')\n .position(args.x_axis_position)\n .rug(x_rug(args))\n .label(mg_add_x_label)\n .draw();\n }\n\n if (args.y_axis) {\n new MG.axis_factory(args)\n .namespace('y')\n .type('numerical')\n .position(args.y_axis_position)\n .rug(y_rug(args))\n .label(mg_add_y_label)\n .draw();\n }\n\n this.markers();\n this.mainPlot();\n this.rollover();\n this.windowListeners();\n\n MG.call_hook('line.after_init', this);\n\n return this;\n };\n\n this.mainPlot = function() {\n mg_line_main_plot(args);\n return this;\n };\n\n this.markers = function() {\n markers(args);\n return this;\n };\n\n this.rollover = function() {\n var that = this;\n mg_line_rollover_setup(args, that);\n MG.call_hook('line.after_rollover', args);\n\n return this;\n };\n\n this.rolloverOn = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n var fmt = mg_get_rollover_time_format(args);\n\n return function(d, i) {\n mg_update_rollover_circle(args, svg, d);\n mg_trigger_linked_mouseovers(args, d, i);\n\n svg.selectAll('text')\n .filter(function(g, j) {\n return d === g;\n })\n .attr('opacity', 0.3);\n\n // update rollover text except for missing data points\n if (args.show_rollover_text &&\n !((args.missing_is_hidden && d['_missing']) || d[args.y_accessor] === null)\n ) {\n var mouseover = mg_mouseover_text(args, { svg: svg });\n var row = mouseover.mouseover_row();\n if (args.aggregate_rollover) {\n row.text((args.aggregate_rollover && args.data.length > 1\n ? mg_format_x_aggregate_mouseover\n : mg_format_x_mouseover)(args, d));\n }\n\n var pts = args.aggregate_rollover && args.data.length > 1\n ? d.values\n : [d];\n\n pts.forEach(function(di) {\n if (args.aggregate_rollover) {\n row = mouseover.mouseover_row();\n }\n\n if (args.legend) {\n mg_line_color_text(row.text(args.legend[di.index - 1] + ' ').bold().elem(), di, args);\n }\n\n mg_line_color_text(row.text('\\u2014 ').elem(), di, args);\n if (!args.aggregate_rollover) {\n row.text(mg_format_x_mouseover(args, di));\n }\n\n row.text(mg_format_y_mouseover(args, di, args.time_series === false));\n })\n }\n\n if (args.mouseover) {\n args.mouseover(d, i);\n }\n };\n };\n\n this.rolloverOff = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n mg_trigger_linked_mouseouts(args, d, i);\n if (args.aggregate_rollover) {\n mg_remove_active_data_points_for_aggregate_rollover(args, svg);\n } else {\n mg_remove_active_data_points_for_generic_rollover(args, svg, d);\n }\n\n if (args.data[0].length > 1) {\n mg_clear_mouseover_container(svg);\n }\n\n if (args.mouseout) {\n args.mouseout(d, i);\n }\n };\n };\n\n this.rolloverMove = function(args) {\n return function(d, i) {\n if (args.mousemove) {\n args.mousemove(d, i);\n }\n };\n };\n\n this.windowListeners = function() {\n mg_window_listeners(this.args);\n return this;\n };\n\n this.init(args);\n }\n\n MG.register('line', lineChart);\n}).call(this);\n\n(function() {\n 'use strict';\n\n function histogram(args) {\n this.init = function(args) {\n this.args = args;\n\n raw_data_transformation(args);\n process_histogram(args);\n init(args);\n\n new MG.scale_factory(args)\n .namespace('x')\n .numericalDomainFromData()\n .numericalRange('bottom');\n\n var baselines = (args.baselines || []).map(function(d) {\n return d[args.y_accessor]\n });\n\n new MG.scale_factory(args)\n .namespace('y')\n .zeroBottom(true)\n .inflateDomain(true)\n .numericalDomainFromData(baselines)\n .numericalRange('left');\n\n x_axis(args);\n y_axis(args);\n\n this.mainPlot();\n this.markers();\n this.rollover();\n this.windowListeners();\n\n return this;\n };\n\n this.mainPlot = function() {\n var svg = mg_get_svg_child_of(args.target);\n\n //remove the old histogram, add new one\n svg.selectAll('.mg-histogram').remove();\n\n var g = svg.append('g')\n .attr('class', 'mg-histogram');\n\n var bar = g.selectAll('.mg-bar')\n .data(args.data[0])\n .enter().append('g')\n .attr('class', 'mg-bar')\n .attr('transform', function(d) {\n return \"translate(\" + args.scales.X(d[args.x_accessor]).toFixed(2) + \",\" + args.scales.Y(d[args.y_accessor]).toFixed(2) + \")\";\n });\n\n //draw bars\n bar.append('rect')\n .attr('x', 1)\n .attr('width', function(d, i) {\n if (args.data[0].length === 1) {\n return (args.scalefns.xf(args.data[0][0]) - args.bar_margin).toFixed(0);\n } else if (i !== args.data[0].length - 1) {\n return (args.scalefns.xf(args.data[0][i + 1]) - args.scalefns.xf(d)).toFixed(0);\n } else {\n return (args.scalefns.xf(args.data[0][1]) - args.scalefns.xf(args.data[0][0])).toFixed(0);\n }\n })\n .attr('height', function(d) {\n if (d[args.y_accessor] === 0) {\n return 0;\n }\n\n return (args.height - args.bottom - args.buffer - args.scales.Y(d[args.y_accessor])).toFixed(2);\n });\n\n return this;\n };\n\n this.markers = function() {\n markers(args);\n return this;\n };\n\n this.rollover = function() {\n var svg = mg_get_svg_child_of(args.target);\n\n if (svg.selectAll('.mg-active-datapoint-container').nodes().length === 0) {\n mg_add_g(svg, 'mg-active-datapoint-container');\n }\n\n //remove the old rollovers if they already exist\n svg.selectAll('.mg-rollover-rect').remove();\n svg.selectAll('.mg-active-datapoint').remove();\n\n var g = svg.append('g')\n .attr('class', 'mg-rollover-rect');\n\n //draw rollover bars\n var bar = g.selectAll('.mg-bar')\n .data(args.data[0])\n .enter().append('g')\n .attr('class', function(d, i) {\n if (args.linked) {\n return 'mg-rollover-rects roll_' + i;\n } else {\n return 'mg-rollover-rects';\n }\n })\n .attr('transform', function(d) {\n return \"translate(\" + (args.scales.X(d[args.x_accessor])) + \",\" + 0 + \")\";\n });\n\n bar.append('rect')\n .attr('x', 1)\n .attr('y', args.buffer + args.title_y_position)\n .attr('width', function(d, i) {\n //if data set is of length 1\n if (args.data[0].length === 1) {\n return (args.scalefns.xf(args.data[0][0]) - args.bar_margin).toFixed(0);\n } else if (i !== args.data[0].length - 1) {\n return (args.scalefns.xf(args.data[0][i + 1]) - args.scalefns.xf(d)).toFixed(0);\n } else {\n return (args.scalefns.xf(args.data[0][1]) - args.scalefns.xf(args.data[0][0])).toFixed(0);\n }\n })\n .attr('height', function(d) {\n return args.height;\n })\n .attr('opacity', 0)\n .on('mouseover', this.rolloverOn(args))\n .on('mouseout', this.rolloverOff(args))\n .on('mousemove', this.rolloverMove(args));\n\n return this;\n };\n\n this.rolloverOn = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n svg.selectAll('text')\n .filter(function(g, j) {\n return d === g;\n })\n .attr('opacity', 0.3);\n\n var fmt = args.processed.xax_format || MG.time_format(args.utc_time, '%b %e, %Y');\n var num = format_rollover_number(args);\n\n svg.selectAll('.mg-bar rect')\n .filter(function(d, j) {\n return j === i;\n })\n .classed('active', true);\n\n //trigger mouseover on all matching bars\n if (args.linked && !MG.globals.link) {\n MG.globals.link = true;\n\n //trigger mouseover on matching bars in .linked charts\n d3.selectAll('.mg-rollover-rects.roll_' + i + ' rect')\n .each(function(d) { //use existing i\n d3.select(this).on('mouseover')(d, i);\n });\n }\n\n //update rollover text\n if (args.show_rollover_text) {\n var mo = mg_mouseover_text(args, { svg: svg });\n var row = mo.mouseover_row();\n row.text('\\u259F ').elem()\n .classed('hist-symbol', true);\n\n row.text(mg_format_x_mouseover(args, d)); // x\n row.text(mg_format_y_mouseover(args, d, args.time_series === false));\n }\n\n if (args.mouseover) {\n mg_setup_mouseover_container(svg, args);\n args.mouseover(d, i);\n }\n };\n };\n\n this.rolloverOff = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n if (args.linked && MG.globals.link) {\n MG.globals.link = false;\n\n //trigger mouseout on matching bars in .linked charts\n d3.selectAll('.mg-rollover-rects.roll_' + i + ' rect')\n .each(function(d) { //use existing i\n d3.select(this).on('mouseout')(d, i);\n });\n }\n\n //reset active bar\n svg.selectAll('.mg-bar rect')\n .classed('active', false);\n\n //reset active data point text\n mg_clear_mouseover_container(svg);\n\n if (args.mouseout) {\n args.mouseout(d, i);\n }\n };\n };\n\n this.rolloverMove = function(args) {\n return function(d, i) {\n if (args.mousemove) {\n args.mousemove(d, i);\n }\n };\n };\n\n this.windowListeners = function() {\n mg_window_listeners(this.args);\n return this;\n };\n\n this.init(args);\n }\n\n var defaults = {\n binned: false,\n bins: null,\n processed_x_accessor: 'x',\n processed_y_accessor: 'y',\n processed_dx_accessor: 'dx',\n bar_margin: 1\n };\n\n MG.register('histogram', histogram, defaults);\n}).call(this);\n\nfunction point_mouseover(args, svg, d) {\n var mouseover = mg_mouseover_text(args, { svg: svg });\n var row = mouseover.mouseover_row();\n\n if (args.color_accessor !== null && args.color_type === 'category') {\n var label = d[args.color_accessor];\n row.text(label + ' ').bold().elem().attr('fill', args.scalefns.colorf(d));\n }\n\n mg_color_point_mouseover(args, row.text('\\u25CF ').elem(), d); // point shape\n\n row.text(mg_format_x_mouseover(args, d)); // x\n row.text(mg_format_y_mouseover(args, d, args.time_series === false));\n}\n\nfunction mg_color_point_mouseover(args, elem, d) {\n if (args.color_accessor !== null) {\n elem.attr('fill', args.scalefns.colorf(d));\n elem.attr('stroke', args.scalefns.colorf(d));\n } else {\n elem.classed('mg-points-mono', true);\n }\n}\n\n\n(function() {\n 'use strict';\n\n function mg_filter_out_plot_bounds(data, args) {\n // max_x, min_x, max_y, min_y;\n var x = args.x_accessor;\n var y = args.y_accessor;\n var new_data = data.filter(function(d) {\n return (args.min_x === null || d[x] >= args.min_x) &&\n (args.max_x === null || d[x] <= args.max_x) &&\n (args.min_y === null || d[y] >= args.min_y) &&\n (args.max_y === null || d[y] <= args.max_y);\n })\n return new_data;\n }\n\n function pointChart(args) {\n this.init = function(args) {\n this.args = args;\n\n // infer y_axis and x_axis type;\n args.x_axis_type = mg_infer_type(args, 'x');\n args.y_axis_type = mg_infer_type(args, 'y');\n\n raw_data_transformation(args);\n\n process_point(args);\n init(args);\n\n var xMaker, yMaker;\n\n if (args.x_axis_type === 'categorical') {\n xMaker = MG.scale_factory(args)\n .namespace('x')\n .categoricalDomainFromData()\n .categoricalRangeBands([0, args.xgroup_height], args.xgroup_accessor === null);\n\n if (args.xgroup_accessor) {\n new MG.scale_factory(args)\n .namespace('xgroup')\n .categoricalDomainFromData()\n .categoricalRangeBands('bottom');\n\n } else {\n args.scales.XGROUP = function(d) {\n return mg_get_plot_left(args) };\n args.scalefns.xgroupf = function(d) {\n return mg_get_plot_left(args) };\n }\n\n args.scalefns.xoutf = function(d) {\n return args.scalefns.xf(d) + args.scalefns.xgroupf(d)\n };\n } else {\n xMaker = MG.scale_factory(args)\n .namespace('x')\n .inflateDomain(true)\n .zeroBottom(args.y_axis_type === 'categorical')\n .numericalDomainFromData((args.baselines || []).map(function(d) {\n return d[args.x_accessor] }))\n .numericalRange('bottom');\n\n args.scalefns.xoutf = args.scalefns.xf;\n }\n\n // y-scale generation. This needs to get simplified.\n if (args.y_axis_type === 'categorical') {\n yMaker = MG.scale_factory(args)\n .namespace('y')\n .zeroBottom(true)\n .categoricalDomainFromData()\n .categoricalRangeBands([0, args.ygroup_height], true);\n\n if (args.ygroup_accessor) {\n\n new MG.scale_factory(args)\n .namespace('ygroup')\n .categoricalDomainFromData()\n .categoricalRangeBands('left');\n\n } else {\n args.scales.YGROUP = function() {\n return mg_get_plot_top(args) };\n args.scalefns.ygroupf = function(d) {\n return mg_get_plot_top(args) };\n\n }\n args.scalefns.youtf = function(d) {\n return args.scalefns.yf(d) + args.scalefns.ygroupf(d) };\n\n } else {\n var baselines = (args.baselines || []).map(function(d) {\n return d[args.y_accessor] });\n yMaker = MG.scale_factory(args)\n .namespace('y')\n .inflateDomain(true)\n .zeroBottom(args.x_axis_type === 'categorical')\n .numericalDomainFromData(baselines)\n .numericalRange('left');\n\n args.scalefns.youtf = function(d) {\n return args.scalefns.yf(d) };\n }\n\n /////// COLOR accessor\n if (args.color_accessor !== null) {\n var colorScale = MG.scale_factory(args).namespace('color');\n if (args.color_type === 'number') {\n // do the color scale.\n // etiher get color range, or what.\n colorScale\n .numericalDomainFromData(mg_get_color_domain(args))\n .numericalRange(mg_get_color_range(args))\n .clamp(true);\n } else {\n if (args.color_domain) {\n colorScale\n .categoricalDomain(args.color_domain)\n .categoricalRange(args.color_range);\n } else {\n colorScale\n .categoricalDomainFromData()\n .categoricalColorRange();\n }\n }\n }\n\n if (args.size_accessor) {\n new MG.scale_factory(args).namespace('size')\n .numericalDomainFromData()\n .numericalRange(mg_get_size_range(args))\n .clamp(true);\n }\n\n new MG.axis_factory(args)\n .namespace('x')\n .type(args.x_axis_type)\n .zeroLine(args.y_axis_type === 'categorical')\n .position(args.x_axis_position)\n .rug(x_rug(args))\n .label(mg_add_x_label)\n .draw();\n\n new MG.axis_factory(args)\n .namespace('y')\n .type(args.y_axis_type)\n .zeroLine(args.x_axis_type === 'categorical')\n .position(args.y_axis_position)\n .rug(y_rug(args))\n .label(mg_add_y_label)\n .draw();\n\n this.mainPlot();\n this.markers();\n this.rollover();\n this.windowListeners();\n\n return this;\n };\n\n this.markers = function() {\n markers(args);\n if (args.least_squares) {\n add_ls(args);\n }\n\n return this;\n };\n\n this.mainPlot = function() {\n var svg = mg_get_svg_child_of(args.target);\n var g;\n\n var data = mg_filter_out_plot_bounds(args.data[0], args);\n //remove the old points, add new one\n svg.selectAll('.mg-points').remove();\n\n g = svg.append('g')\n .classed('mg-points', true);\n\n\n var pts = g.selectAll('circle')\n .data(data)\n .enter().append('circle')\n .attr('class', function(d, i) {\n return 'path-' + i;\n })\n .attr('cx', args.scalefns.xoutf)\n .attr('cy', function(d) {\n return args.scalefns.youtf(d);\n });\n\n //are we coloring our points, or just using the default color?\n if (args.color_accessor !== null) {\n pts.attr('fill', args.scalefns.colorf);\n pts.attr('stroke', args.scalefns.colorf);\n } else {\n pts.classed('mg-points-mono', true);\n }\n\n if (args.size_accessor !== null) {\n pts.attr('r', args.scalefns.sizef);\n } else {\n pts.attr('r', args.point_size);\n }\n\n return this;\n };\n\n this.rollover = function() {\n var svg = mg_get_svg_child_of(args.target);\n\n if (svg.selectAll('.mg-active-datapoint-container').nodes().length === 0) {\n mg_add_g(svg, 'mg-active-datapoint-container');\n }\n\n //remove the old rollovers if they already exist\n svg.selectAll('.mg-voronoi').remove();\n\n //add rollover paths\n var voronoi = d3.voronoi()\n .x(args.scalefns.xoutf)\n .y(args.scalefns.youtf)\n .extent([\n [args.buffer, args.buffer + args.title_y_position],\n [args.width - args.buffer, args.height - args.buffer]\n ]);\n\n var paths = svg.append('g')\n .attr('class', 'mg-voronoi');\n\n paths.selectAll('path')\n .data(voronoi.polygons(mg_filter_out_plot_bounds(args.data[0], args)))\n .enter().append('path')\n .attr('d', function(d) {\n return d == null ? null : 'M' + d.join(',') + 'Z'; })\n .attr('class', function(d, i) {\n return 'path-' + i;\n })\n .style('fill-opacity', 0)\n .on('mouseover', this.rolloverOn(args))\n .on('mouseout', this.rolloverOff(args))\n .on('mousemove', this.rolloverMove(args));\n\n if (args.data[0].length === 1) {\n point_mouseover(args, svg, args.data[0][0]);\n }\n\n return this;\n };\n\n this.rolloverOn = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n svg.selectAll('.mg-points circle')\n .classed('selected', false);\n\n //highlight active point\n var pts = svg.selectAll('.mg-points circle.path-' + i)\n .classed('selected', true);\n\n if (args.size_accessor) {\n pts.attr('r', function(di) {\n return args.scalefns.sizef(di) + args.active_point_size_increase;\n });\n } else {\n pts.attr('r', args.point_size + args.active_point_size_increase);\n }\n\n //trigger mouseover on all points for this class name in .linked charts\n if (args.linked && !MG.globals.link) {\n MG.globals.link = true;\n\n //trigger mouseover on matching point in .linked charts\n d3.selectAll('.mg-voronoi .path-' + i)\n .each(function() {\n d3.select(this).on('mouseover')(d, i);\n });\n }\n\n if (args.show_rollover_text) {\n point_mouseover(args, svg, d.data);\n }\n\n if (args.mouseover) {\n args.mouseover(d, i);\n }\n };\n };\n\n this.rolloverOff = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n if (args.linked && MG.globals.link) {\n MG.globals.link = false;\n\n d3.selectAll('.mg-voronoi .path-' + i)\n .each(function() {\n d3.select(this).on('mouseout')(d, i);\n });\n }\n\n //reset active point\n var pts = svg.selectAll('.mg-points circle')\n .classed('unselected', false)\n .classed('selected', false);\n\n if (args.size_accessor) {\n pts.attr('r', args.scalefns.sizef);\n } else {\n pts.attr('r', args.point_size);\n }\n\n //reset active data point text\n if (args.data[0].length > 1) mg_clear_mouseover_container(svg);\n\n if (args.mouseout) {\n args.mouseout(d, i);\n }\n };\n };\n\n this.rolloverMove = function(args) {\n return function(d, i) {\n if (args.mousemove) {\n args.mousemove(d, i);\n }\n };\n };\n\n this.update = function(args) {\n return this;\n };\n\n this.windowListeners = function() {\n mg_window_listeners(this.args);\n return this;\n };\n\n this.init(args);\n }\n\n var defaults = {\n y_padding_percentage: 0.05, // for categorical scales\n y_outer_padding_percentage: .2, // for categorical scales\n ygroup_padding_percentage: 0, // for categorical scales\n ygroup_outer_padding_percentage: 0, // for categorical scales\n x_padding_percentage: 0.05, // for categorical scales\n x_outer_padding_percentage: .2, // for categorical scales\n xgroup_padding_percentage: 0, // for categorical scales\n xgroup_outer_padding_percentage: 0, // for categorical scales\n y_categorical_show_guides: true,\n x_categorical_show_guides: true,\n buffer: 16,\n ls: false,\n lowess: false,\n point_size: 2.5,\n label_accessor: null,\n size_accessor: null,\n color_accessor: null,\n size_range: null, // when we set a size_accessor option, this array determines the size range, e.g. [1,5]\n color_range: null, // e.g. ['blue', 'red'] to color different groups of points\n size_domain: null,\n color_domain: null,\n active_point_size_increase: 1,\n color_type: 'number' // can be either 'number' - the color scale is quantitative - or 'category' - the color scale is qualitative.\n };\n\n MG.register('point', pointChart, defaults);\n}).call(this);\n\n(function() {\n 'use strict';\n\n // TODO add styles to stylesheet instead\n function scaffold(args) {\n var svg = mg_get_svg_child_of(args.target);\n // main margins\n svg.append('line')\n .attr('x1', 0)\n .attr('x2', args.width)\n .attr('y1', args.top)\n .attr('y2', args.top)\n .attr('stroke', 'black');\n svg.append('line')\n .attr('x1', 0)\n .attr('x2', args.width)\n .attr('y1', args.height-args.bottom)\n .attr('y2', args.height-args.bottom)\n .attr('stroke', 'black');\n\n svg.append('line')\n .attr('x1', args.left)\n .attr('x2', args.left)\n .attr('y1', 0)\n .attr('y2', args.height)\n .attr('stroke', 'black');\n\n svg.append('line')\n .attr('x1', args.width-args.right)\n .attr('x2', args.width-args.right)\n .attr('y1', 0)\n .attr('y2', args.height)\n .attr('stroke', 'black');\n\n // plot area margins\n svg.append('line')\n .attr('x1', 0)\n .attr('x2', args.width)\n .attr('y1', args.height-args.bottom-args.buffer)\n .attr('y2', args.height-args.bottom-args.buffer)\n .attr('stroke', 'gray');\n\n svg.append('line')\n .attr('x1', 0)\n .attr('x2', args.width)\n .attr('y1', args.top+args.buffer)\n .attr('y2', args.top+args.buffer)\n .attr('stroke', 'gray');\n\n svg.append('line')\n .attr('x1', args.left + args.buffer)\n .attr('x2', args.left + args.buffer)\n .attr('y1', 0)\n .attr('y2', args.height)\n .attr('stroke', 'gray');\n svg.append('line')\n .attr('x1', args.width -args.right - args.buffer)\n .attr('x2', args.width -args.right - args.buffer)\n .attr('y1', 0)\n .attr('y2', args.height)\n .attr('stroke', 'gray');\n }\n\n // barchart re-write.\n function mg_targeted_legend(args) {\n var labels;\n var plot = '';\n if (args.legend_target) {\n\n var div = d3.select(args.legend_target).append('div').classed('mg-bar-target-legend', true);\n \n if (args.orientation == 'horizontal') labels = args.scales.Y.domain()\n else labels = args.scales.X.domain();\n\n labels.forEach(function(label) {\n var outer_span = div.append('span').classed('mg-bar-target-element', true);\n outer_span.append('span')\n .classed('mg-bar-target-legend-shape', true)\n .style('color', args.scales.COLOR(label))\n .text('\\u25FC ');\n outer_span.append('span')\n .classed('mg-bar-target-legend-text', true)\n .text(label);\n\n });\n }\n }\n\n function legend_on_graph(svg, args) {\n // draw each element at the top right\n // get labels\n\n var labels;\n if (args.orientation=='horizontal') labels = args.scales.Y.domain()\n else labels = args.scales.X.domain();\n\n var lineCount = 0;\n var lineHeight = 1.1;\n var g = svg.append('g').classed(\"mg-bar-legend\", true);\n var textContainer = g.append('text');\n\n //\n\n textContainer\n .selectAll('*')\n .remove();\n textContainer\n .attr('width', args.right)\n .attr('height', 100)\n .attr('text-anchor', 'start');\n\n labels.forEach(function(label) {\n var sub_container = textContainer.append('tspan')\n .attr('x', mg_get_plot_right(args))\n .attr('y', args.height / 2)\n .attr('dy', (lineCount * lineHeight) + 'em');\n sub_container.append('tspan')\n .text('\\u25a0 ')\n .attr('fill', args.scales.COLOR(label))\n .attr('font-size', 20)\n sub_container.append('tspan')\n .text(label)\n .attr('font-weight', 300)\n .attr('font-size', 10);\n lineCount++;\n })\n\n // d.values.forEach(function (datum) {\n // formatted_y = mg_format_y_rollover(args, num, datum);\n\n // if (args.y_rollover_format !== null) {\n // formatted_y = number_rollover_format(args.y_rollover_format, datum, args.y_accessor);\n // } else {\n // formatted_y = args.yax_units + num(datum[args.y_accessor]);\n // }\n\n // sub_container = textContainer.append('tspan').attr('x', 0).attr('y', (lineCount * lineHeight) + 'em');\n // formatted_y = mg_format_y_rollover(args, num, datum);\n // mouseover_tspan(sub_container, '\\u2014 ')\n // .color(args, datum);\n // mouseover_tspan(sub_container, formatted_x + ' ' + formatted_y);\n\n // lineCount++;\n // });\n }\n\n function barChart(args) {\n this.args = args;\n\n this.init = function(args) {\n this.args = args;\n args.x_axis_type = mg_infer_type(args, 'x');\n args.y_axis_type = mg_infer_type(args, 'y');\n\n // this is specific to how rects work in svg, let's keep track of the bar orientation to\n // plot appropriately.\n if (args.x_axis_type == 'categorical') {\n args.orientation = 'vertical';\n } else if (args.y_axis_type == 'categorical') {\n args.orientation = 'horizontal';\n } else if (args.x_axis_type != 'categorical' && args.y_axis_type != 'categorical') {\n // histogram.\n args.orientation = 'vertical';\n }\n\n raw_data_transformation(args);\n\n process_point(args);\n init(args);\n\n var xMaker, yMaker;\n\n if (args.x_axis_type === 'categorical') {\n xMaker = MG.scale_factory(args)\n .namespace('x')\n .categoricalDomainFromData()\n .categoricalRangeBands([0, args.xgroup_height], args.xgroup_accessor === null);\n\n if (args.xgroup_accessor) {\n new MG.scale_factory(args)\n .namespace('xgroup')\n .categoricalDomainFromData()\n .categoricalRangeBands('bottom');\n\n } else {\n args.scales.XGROUP = function(d) {\n return mg_get_plot_left(args) };\n args.scalefns.xgroupf = function(d) {\n return mg_get_plot_left(args) };\n }\n\n args.scalefns.xoutf = function(d) {\n return args.scalefns.xf(d) + args.scalefns.xgroupf(d)\n };\n } else {\n xMaker = MG.scale_factory(args)\n .namespace('x')\n .inflateDomain(true)\n .zeroBottom(args.y_axis_type === 'categorical')\n .numericalDomainFromData((args.baselines || []).map(function(d) {\n return d[args.x_accessor] }))\n .numericalRange('bottom');\n\n args.scalefns.xoutf = args.scalefns.xf;\n }\n\n // y-scale generation. This needs to get simplified.\n if (args.y_axis_type === 'categorical') {\n yMaker = MG.scale_factory(args)\n .namespace('y')\n .zeroBottom(true)\n .categoricalDomainFromData()\n .categoricalRangeBands([0, args.ygroup_height], true);\n\n if (args.ygroup_accessor) {\n\n new MG.scale_factory(args)\n .namespace('ygroup')\n .categoricalDomainFromData()\n .categoricalRangeBands('left');\n\n } else {\n args.scales.YGROUP = function() {\n return mg_get_plot_top(args) };\n args.scalefns.ygroupf = function(d) {\n return mg_get_plot_top(args) };\n\n }\n args.scalefns.youtf = function(d) {\n return args.scalefns.yf(d) + args.scalefns.ygroupf(d) };\n\n } else {\n var baselines = (args.baselines || []).map(function(d) {\n return d[args.y_accessor] });\n\n yMaker = MG.scale_factory(args)\n .namespace('y')\n .inflateDomain(true)\n .zeroBottom(args.x_axis_type === 'categorical')\n .numericalDomainFromData(baselines)\n .numericalRange('left');\n\n args.scalefns.youtf = function(d) {\n return args.scalefns.yf(d) };\n }\n\n if (args.ygroup_accessor !== null) {\n args.ycolor_accessor = args.y_accessor;\n MG.scale_factory(args)\n .namespace('ycolor')\n .scaleName('color')\n .categoricalDomainFromData()\n .categoricalColorRange();\n }\n\n if (args.xgroup_accessor !== null) {\n args.xcolor_accessor = args.x_accessor;\n MG.scale_factory(args)\n .namespace('xcolor')\n .scaleName('color')\n .categoricalDomainFromData()\n .categoricalColorRange();\n }\n\n // if (args.ygroup_accessor !== null) {\n // MG.scale_factory(args)\n // .namespace('ygroup')\n // .categoricalDomainFromData()\n // .categoricalColorRange();\n // }\n\n new MG.axis_factory(args)\n .namespace('x')\n .type(args.x_axis_type)\n .zeroLine(args.y_axis_type === 'categorical')\n .position(args.x_axis_position)\n .draw();\n\n new MG.axis_factory(args)\n .namespace('y')\n .type(args.y_axis_type)\n .zeroLine(args.x_axis_type === 'categorical')\n .position(args.y_axis_position)\n .draw();\n\n //mg_categorical_group_color_scale(args);\n\n this.mainPlot();\n this.markers();\n this.rollover();\n this.windowListeners();\n //scaffold(args)\n\n return this;\n };\n\n this.mainPlot = function() {\n var svg = mg_get_svg_child_of(args.target);\n var data = args.data[0];\n var barplot = svg.select('g.mg-barplot');\n var fresh_render = barplot.empty();\n\n var bars;\n var predictor_bars;\n var pp, pp0;\n var baseline_marks;\n\n var perform_load_animation = fresh_render && args.animate_on_load;\n var should_transition = perform_load_animation || args.transition_on_update;\n var transition_duration = args.transition_duration || 1000;\n\n // draw the plot on first render\n if (fresh_render) {\n barplot = svg.append('g')\n .classed('mg-barplot', true);\n }\n\n bars = barplot.selectAll('.mg-bar')\n .data(data)\n .enter()\n .append('rect')\n .classed('mg-bar', true)\n .classed('default-bar', args.scales.hasOwnProperty('COLOR') ? false : true);\n\n // TODO - reimplement\n\n // reference_accessor {}\n\n // if (args.predictor_accessor) {\n // predictor_bars = barplot.selectAll('.mg-bar-prediction')\n // .data(data.filter(function(d) {\n // return d.hasOwnProperty(args.predictor_accessor) }));\n\n // predictor_bars.exit().remove();\n\n // predictor_bars.enter().append('rect')\n // .classed('mg-bar-prediction', true);\n // }\n\n // if (args.baseline_accessor) {\n // baseline_marks = barplot.selectAll('.mg-bar-baseline')\n // .data(data.filter(function(d) {\n // return d.hasOwnProperty(args.baseline_accessor) }));\n\n // baseline_marks.exit().remove();\n\n // baseline_marks.enter().append('line')\n // .classed('mg-bar-baseline', true);\n // }\n\n var appropriate_size;\n\n // setup transitions\n // if (should_transition) {\n // bars = bars.transition()\n // .duration(transition_duration);\n\n // if (predictor_bars) {\n // predictor_bars = predictor_bars.transition()\n // .duration(transition_duration);\n // }\n\n // if (baseline_marks) {\n // baseline_marks = baseline_marks.transition()\n // .duration(transition_duration);\n // }\n // }\n\n //appropriate_size = args.scales.Y_ingroup.rangeBand()/1.5;\n var length, width, length_type, width_type, length_coord, width_coord,\n length_scalefn, width_scalefn, length_scale, width_scale,\n length_accessor, width_accessor, length_coord_map, width_coord_map,\n length_map, width_map;\n\n var reference_length_map, reference_length_coord_fn;\n\n if (args.orientation == 'vertical') {\n length = 'height';\n width = 'width';\n length_type = args.y_axis_type;\n width_type = args.x_axis_type;\n length_coord = 'y';\n width_coord = 'x';\n length_scalefn = length_type == 'categorical' ? args.scalefns.youtf : args.scalefns.yf;\n width_scalefn = width_type == 'categorical' ? args.scalefns.xoutf : args.scalefns.xf;\n length_scale = args.scales.Y;\n width_scale = args.scales.X;\n length_accessor = args.y_accessor;\n width_accessor = args.x_accessor;\n\n length_coord_map = function(d) {\n var l;\n l = length_scalefn(d);\n if (d[length_accessor] < 0) {\n l = length_scale(0);\n }\n return l;\n }\n\n length_map = function(d) {\n return Math.abs(length_scalefn(d) - length_scale(0));\n }\n\n reference_length_map = function(d) {\n return Math.abs(length_scale(d[args.reference_accessor]) - length_scale(0));\n }\n\n reference_length_coord_fn = function(d){\n return length_scale(d[args.reference_accessor]);\n }\n }\n\n if (args.orientation == 'horizontal') {\n length = 'width';\n width = 'height';\n length_type = args.x_axis_type;\n width_type = args.y_axis_type;\n length_coord = 'x';\n width_coord = 'y';\n length_scalefn = length_type == 'categorical' ? args.scalefns.xoutf : args.scalefns.xf;\n width_scalefn = width_type == 'categorical' ? args.scalefns.youtf : args.scalefns.yf;\n length_scale = args.scales.X;\n width_scale = args.scales.Y;\n length_accessor = args.x_accessor;\n width_accessor = args.y_accessor;\n\n length_coord_map = function(d) {\n var l;\n l = length_scale(0);\n return l;\n }\n\n length_map = function(d) {\n return Math.abs(length_scalefn(d) - length_scale(0));\n }\n\n reference_length_map = function(d) {\n return Math.abs(length_scale(d[args.reference_accessor]) - length_scale(0));\n }\n\n reference_length_coord_fn = function(d){\n return length_scale(0);\n }\n }\n\n // if (perform_load_animation) {\n // bars.attr(length, 0);\n\n // if (predictor_bars) {\n // predictor_bars.attr(length, 0);\n // }\n\n // // if (baseline_marks) {\n // // baseline_marks.attr({\n // // x1: args.scales.X(0),\n // // x2: args.scales.X(0)\n // // });\n // // }\n // }\n\n bars.attr(length_coord, length_coord_map);\n\n // bars.attr(length_coord, 40)\n //bars.attr(width_coord, 70)\n\n\n\n bars.attr(width_coord, function(d) {\n var w;\n if (width_type == 'categorical') {\n w = width_scalefn(d);\n } else {\n w = width_scale(0);\n if (d[width_accessor] < 0) {\n w = width_scalefn(d);\n }\n }\n w = w - args.bar_thickness/2;\n return w;\n });\n\n if (args.scales.COLOR) {\n bars.attr('fill', args.scalefns.colorf)\n }\n\n bars\n .attr(length, length_map)\n .attr(width, function(d) {\n return args.bar_thickness;\n });\n\n\n\n\n if (args.reference_accessor !== null) {\n var reference_data = data.filter(function(d){\n return d.hasOwnProperty(args.reference_accessor);\n })\n var reference_bars = barplot.selectAll('.mg-categorical-reference')\n .data(reference_data)\n .enter()\n .append('rect');\n\n reference_bars\n .attr(length_coord, reference_length_coord_fn)\n .attr(width_coord, function(d) {\n return width_scalefn(d) - args.reference_thickness/2\n })\n .attr(length, reference_length_map)\n .attr(width, args.reference_thickness);\n }\n\n if (args.comparison_accessor !== null) {\n var comparison_thickness = null;\n if (args.comparison_thickness === null) {\n comparison_thickness = args.bar_thickness/2;\n } else {\n comparison_thickness = args.comparison_thickness;\n }\n\n\n var comparison_data = data.filter(function(d) {\n return d.hasOwnProperty(args.comparison_accessor);\n })\n var comparison_marks = barplot.selectAll('.mg-categorical-comparison')\n .data(comparison_data)\n .enter()\n .append('line');\n\n comparison_marks\n .attr(length_coord + '1', function(d){return length_scale(d[args.comparison_accessor])})\n .attr(length_coord + '2', function(d){return length_scale(d[args.comparison_accessor])})\n .attr(width_coord + '1', function(d){\n return width_scalefn(d) - comparison_thickness/2;\n })\n .attr(width_coord + '2', function(d) {\n return width_scalefn(d) + comparison_thickness/2;\n })\n .attr('stroke', 'black')\n .attr('stroke-width', args.comparison_width);\n }\n\n //bars.attr(width_coord, );\n // bars.attr('width', 50);\n // bars.attr('height', 50);\n // bars.attr('y', function(d){\n // var y = args.scales.Y(0);\n // if (d[args.y_accessor] < 0) {\n // y = args.scalefns.yf(d);\n // }\n // return y;\n // });\n\n // bars.attr('x', function(d){\n // return 40;\n // })\n\n // bars.attr('width', function(d){\n // return 100;\n // });\n\n // bars.attr('height', 100);\n\n // bars.attr('fill', 'black');\n // bars.attr('x', function(d) {\n // var x = args.scales.X(0);\n // if (d[args.x_accessor] < 0) {\n // x = args.scalefns.xf(d);\n // }\n // return x;\n // })\n // TODO - reimplement.\n // if (args.predictor_accessor) {\n // predictor_bars\n // .attr('x', args.scales.X(0))\n // .attr('y', function(d) {\n // return args.scalefns.ygroupf(d) + args.scalefns.yf(d) + args.scales.Y.rangeBand() * (7 / 16) // + pp0 * appropriate_size/(pp*2) + appropriate_size / 2;\n // })\n // .attr('height', args.scales.Y.rangeBand() / 8) //appropriate_size / pp)\n // .attr('width', function(d) {\n // return args.scales.X(d[args.predictor_accessor]) - args.scales.X(0);\n // });\n // }\n\n // TODO - reimplement.\n // if (args.baseline_accessor) {\n\n // baseline_marks\n // .attr('x1', function(d) {\n // return args.scales.X(d[args.baseline_accessor]); })\n // .attr('x2', function(d) {\n // return args.scales.X(d[args.baseline_accessor]); })\n // .attr('y1', function(d) {\n // return args.scalefns.ygroupf(d) + args.scalefns.yf(d) + args.scales.Y.rangeBand() / 4\n // })\n // .attr('y2', function(d) {\n // return args.scalefns.ygroupf(d) + args.scalefns.yf(d) + args.scales.Y.rangeBand() * 3 / 4\n // });\n // }\n if (args.legend || (args.color_accessor !== null && args.ygroup_accessor !== args.color_accessor)) {\n if (!args.legend_target) legend_on_graph(svg, args);\n else mg_targeted_legend(args);\n }\n return this;\n };\n\n this.markers = function() {\n markers(args);\n return this;\n };\n\n this.rollover = function() {\n var svg = mg_get_svg_child_of(args.target);\n var g;\n\n if (svg.selectAll('.mg-active-datapoint-container').nodes().length === 0) {\n mg_add_g(svg, 'mg-active-datapoint-container');\n }\n\n //remove the old rollovers if they already exist\n svg.selectAll('.mg-rollover-rect').remove();\n svg.selectAll('.mg-active-datapoint').remove();\n\n // get orientation\n var length, width, length_type, width_type, length_coord, width_coord,\n length_scalefn, width_scalefn, length_scale, width_scale,\n length_accessor, width_accessor;\n\n var length_coord_map, width_coord_map, length_map, width_map;\n\n if (args.orientation == 'vertical') {\n length = 'height';\n width = 'width';\n length_type = args.y_axis_type;\n width_type = args.x_axis_type;\n length_coord = 'y';\n width_coord = 'x';\n length_scalefn = length_type == 'categorical' ? args.scalefns.youtf : args.scalefns.yf;\n width_scalefn = width_type == 'categorical' ? args.scalefns.xoutf : args.scalefns.xf;\n length_scale = args.scales.Y;\n width_scale = args.scales.X;\n length_accessor = args.y_accessor;\n width_accessor = args.x_accessor;\n\n length_coord_map = function(d){\n return mg_get_plot_top(args);\n }\n\n length_map = function(d) {\n return args.height -args.top-args.bottom-args.buffer*2\n }\n }\n\n if (args.orientation == 'horizontal') {\n length = 'width';\n width = 'height';\n length_type = args.x_axis_type;\n width_type = args.y_axis_type;\n length_coord = 'x';\n width_coord = 'y';\n length_scalefn = length_type == 'categorical' ? args.scalefns.xoutf : args.scalefns.xf;\n width_scalefn = width_type == 'categorical' ? args.scalefns.youtf : args.scalefns.yf;\n length_scale = args.scales.X;\n width_scale = args.scales.Y;\n length_accessor = args.x_accessor;\n width_accessor = args.y_accessor;\n\n length_coord_map = function(d){\n var l;\n l = length_scale(0);\n return l;\n }\n\n length_map = function(d) {\n return args.width -args.left-args.right-args.buffer*2\n }\n }\n\n //rollover text\n var rollover_x, rollover_anchor;\n if (args.rollover_align === 'right') {\n rollover_x = args.width - args.right;\n rollover_anchor = 'end';\n } else if (args.rollover_align === 'left') {\n rollover_x = args.left;\n rollover_anchor = 'start';\n } else {\n rollover_x = (args.width - args.left - args.right) / 2 + args.left;\n rollover_anchor = 'middle';\n }\n\n svg.append('text')\n .attr('class', 'mg-active-datapoint')\n .attr('xml:space', 'preserve')\n .attr('x', rollover_x)\n .attr('y', args.top * 0.75)\n .attr('dy', '.35em')\n .attr('text-anchor', rollover_anchor);\n\n g = svg.append('g')\n .attr('class', 'mg-rollover-rect');\n\n //draw rollover bars\n var bars = g.selectAll(\".mg-bar-rollover\")\n .data(args.data[0]).enter()\n .append(\"rect\")\n .attr('class', 'mg-bar-rollover');\n\n bars.attr('opacity', 0)\n .attr(length_coord, length_coord_map)\n .attr(width_coord, function(d) {\n var w;\n if (width_type == 'categorical') {\n w = width_scalefn(d);\n } else {\n w = width_scale(0);\n if (d[width_accessor] < 0) {\n w = width_scalefn(d);\n }\n }\n w = w - args.bar_thickness/2;\n return w;\n });\n\n bars.attr(length, length_map)\n bars.attr(width, function(d) {\n return args.bar_thickness;\n });\n\n bars\n .on('mouseover', this.rolloverOn(args))\n .on('mouseout', this.rolloverOff(args))\n .on('mousemove', this.rolloverMove(args));\n\n return this;\n };\n\n this.rolloverOn = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n var label_accessor = this.is_vertical ? args.x_accessor : args.y_accessor;\n var data_accessor = this.is_vertical ? args.y_accessor : args.x_accessor;\n var label_units = this.is_vertical ? args.yax_units : args.xax_units;\n\n return function(d, i) {\n\n var fmt = MG.time_format(args.utc_time, '%b %e, %Y');\n var num = format_rollover_number(args);\n\n //highlight active bar\n var bar = svg.selectAll('g.mg-barplot .mg-bar')\n .filter(function(d, j) {\n return j === i;\n }).classed('active', true);\n\n if (args.scales.hasOwnProperty('COLOR')) {\n bar.attr('fill', d3.rgb(args.scalefns.colorf(d)).darker());\n } else {\n bar.classed('default-active', true);\n }\n\n //update rollover text\n if (args.show_rollover_text) {\n var mouseover = mg_mouseover_text(args, { svg: svg });\n var row = mouseover.mouseover_row();\n\n if (args.ygroup_accessor) row.text(d[args.ygroup_accessor] + ' ').bold();\n\n row.text(mg_format_x_mouseover(args, d));\n row.text(args.y_accessor + ': ' + d[args.y_accessor]);\n if (args.predictor_accessor || args.baseline_accessor) {\n row = mouseover.mouseover_row();\n\n if (args.predictor_accessor) row.text(mg_format_data_for_mouseover(args, d, null, args.predictor_accessor, false))\n if (args.baseline_accessor) row.text(mg_format_data_for_mouseover(args, d, null, args.baseline_accessor, false))\n }\n }\n if (args.mouseover) {\n args.mouseover(d, i);\n }\n };\n };\n\n this.rolloverOff = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n //reset active bar\n var bar = svg.selectAll('g.mg-barplot .mg-bar.active').classed('active', false);\n\n if (args.scales.hasOwnProperty('COLOR')) {\n bar.attr('fill', args.scalefns.colorf(d));\n } else {\n bar.classed('default-active', false);\n }\n\n //reset active data point text\n svg.select('.mg-active-datapoint')\n .text('');\n\n mg_clear_mouseover_container(svg);\n\n if (args.mouseout) {\n args.mouseout(d, i);\n }\n };\n };\n\n this.rolloverMove = function(args) {\n return function(d, i) {\n if (args.mousemove) {\n args.mousemove(d, i);\n }\n };\n };\n\n this.windowListeners = function() {\n mg_window_listeners(this.args);\n return this;\n };\n\n this.init(args);\n }\n\n var defaults = {\n y_padding_percentage: 0.05, // for categorical scales\n y_outer_padding_percentage: .2, // for categorical scales\n ygroup_padding_percentage: 0, // for categorical scales\n ygroup_outer_padding_percentage: 0, // for categorical scales\n x_padding_percentage: 0.05, // for categorical scales\n x_outer_padding_percentage: .2, // for categorical scales\n xgroup_padding_percentage: 0, // for categorical scales\n xgroup_outer_padding_percentage: 0, // for categorical scales\n buffer: 16,\n y_accessor: 'factor',\n x_accessor: 'value',\n reference_accessor: null,\n comparison_accessor: null,\n secondary_label_accessor: null,\n color_accessor: null,\n color_type: 'category',\n color_domain: null,\n reference_thickness: 1,\n comparison_width: 3,\n comparison_thickness: null,\n legend: false,\n legend_target: null,\n mouseover_align: 'right',\n baseline_accessor: null,\n predictor_accessor: null,\n predictor_proportion: 5,\n show_bar_zero: true,\n binned: true,\n truncate_x_labels: true,\n truncate_y_labels: true\n };\n\n MG.register('bar', barChart, defaults);\n\n}).call(this);\n\n/*\nData Tables\n\nAlong with histograms, bars, lines, and scatters, a simple data table can take you far.\nWe often just want to look at numbers, organized as a table, where columns are variables,\nand rows are data points. Sometimes we want a cell to have a small graphic as the main\ncolumn element, in which case we want small multiples. sometimes we want to\n\nvar table = New data_table(data)\n .target('div#data-table')\n .title({accessor: 'point_name', align: 'left'})\n .description({accessor: 'description'})\n .number({accessor: ''})\n\n*/\n\nMG.data_table = function(args) {\n 'use strict';\n this.args = args;\n this.args.standard_col = { width: 150, font_size: 12, font_weight: 'normal' };\n this.args.columns = [];\n this.formatting_options = [\n ['color', 'color'],\n ['font-weight', 'font_weight'],\n ['font-style', 'font_style'],\n ['font-size', 'font_size']\n ];\n\n this._strip_punctuation = function(s) {\n var punctuationless = s.replace(/[^a-zA-Z0-9 _]+/g, '');\n var finalString = punctuationless.replace(/ +?/g, '');\n return finalString;\n };\n\n this._format_element = function(element, value, args) {\n this.formatting_options.forEach(function(fo) {\n var attr = fo[0];\n var key = fo[1];\n if (args[key]) element.style(attr,\n typeof args[key] === 'string' ||\n typeof args[key] === 'number' ?\n args[key] : args[key](value));\n });\n };\n\n this._add_column = function(_args, arg_type) {\n var standard_column = this.args.standard_col;\n var args = merge_with_defaults(MG.clone(_args), MG.clone(standard_column));\n args.type = arg_type;\n this.args.columns.push(args);\n };\n\n this.target = function() {\n var target = arguments[0];\n this.args.target = target;\n return this;\n };\n\n this.title = function() {\n this._add_column(arguments[0], 'title');\n return this;\n };\n\n this.text = function() {\n this._add_column(arguments[0], 'text');\n return this;\n };\n\n this.bullet = function() {\n /*\n text label\n main value\n comparative measure\n any number of ranges\n\n additional args:\n no title\n xmin, xmax\n format: percentage\n xax_formatter\n */\n return this;\n };\n\n this.sparkline = function() {\n return this;\n };\n\n this.number = function() {\n this._add_column(arguments[0], 'number');\n return this;\n };\n\n this.display = function() {\n var args = this.args;\n\n chart_title(args);\n\n var target = args.target;\n var table = d3.select(target).append('table').classed('mg-data-table', true);\n var colgroup = table.append('colgroup');\n var thead = table.append('thead');\n var tbody = table.append('tbody');\n var this_column;\n var this_title;\n\n var tr, th, td_accessor, td_type, td_value, th_text, td_text, td;\n var col;\n var h;\n\n tr = thead.append('tr');\n\n for (h = 0; h < args.columns.length; h++) {\n var this_col = args.columns[h];\n td_type = this_col.type;\n th_text = this_col.label;\n th_text = th_text === undefined ? '' : th_text;\n th = tr.append('th')\n .style('width', this_col.width)\n .style('text-align', td_type === 'title' ? 'left' : 'right')\n .text(th_text);\n\n if (args.show_tooltips && this_col.description && mg_jquery_exists()) {\n th.append('i')\n .classed('fa', true)\n .classed('fa-question-circle', true)\n .classed('fa-inverse', true);\n\n $(th.node()).popover({\n html: true,\n animation: false,\n content: this_col.description,\n trigger: 'hover',\n placement: 'top',\n container: $(th.node())\n });\n }\n }\n\n for (h = 0; h < args.columns.length; h++) {\n col = colgroup.append('col');\n if (args.columns[h].type === 'number') {\n col.attr('align', 'char').attr('char', '.');\n }\n }\n\n for (var i = 0; i < args.data.length; i++) {\n tr = tbody.append('tr');\n for (var j = 0; j < args.columns.length; j++) {\n this_column = args.columns[j];\n td_accessor = this_column.accessor;\n td_value = td_text = args.data[i][td_accessor];\n td_type = this_column.type;\n\n if (td_type === 'number') {\n //td_text may need to be rounded\n if (this_column.hasOwnProperty('round') && !this_column.hasOwnProperty('format')) {\n // round according to the number value in this_column.round\n td_text = d3.format('0,.' + this_column.round + 'f')(td_text);\n }\n\n if (this_column.hasOwnProperty('value_formatter')) {\n // provide a function that formats the text according to the function this_column.format.\n td_text = this_column.value_formatter(td_text);\n }\n\n if (this_column.hasOwnProperty('format')) {\n // this is a shorthand for percentage formatting, and others if need be.\n // supported: 'percentage', 'count', 'temperature'\n\n if (this_column.round) {\n td_text = Math.round(td_text, this_column.round);\n }\n\n var this_format = this_column.format;\n var formatter;\n\n if (this_format === 'percentage') formatter = d3.format('.0%');\n if (this_format === 'count') formatter = d3.format(',.0f');\n if (this_format === 'temperature') formatter = function(t) {\n return t + '°'; };\n\n td_text = formatter(td_text);\n }\n\n if (this_column.hasOwnProperty('currency')) {\n // this is another shorthand for formatting according to a currency amount, which gets appended to front of number\n td_text = this_column.currency + td_text;\n }\n }\n\n td = tr.append('td')\n .classed('table-' + td_type, true)\n .classed('table-' + td_type + '-' + this._strip_punctuation(td_accessor), true)\n .attr('data-value', td_value)\n .style('width', this_column.width)\n .style('text-align', td_type === 'title' || td_type === 'text' ? 'left' : 'right');\n\n this._format_element(td, td_value, this_column);\n\n if (td_type === 'title') {\n this_title = td.append('div').text(td_text);\n this._format_element(this_title, td_text, this_column);\n\n if (args.columns[j].hasOwnProperty('secondary_accessor')) {\n td.append('div')\n .text(args.data[i][args.columns[j].secondary_accessor])\n .classed(\"secondary-title\", true);\n }\n } else {\n td.text(td_text);\n }\n }\n }\n\n return this;\n };\n\n return this;\n};\n\n(function() {\n 'use strict';\n\n function mg_missing_add_text(svg, args) {\n svg.selectAll('.mg-missing-text').data([args.missing_text])\n .enter().append('text')\n .attr('class', 'mg-missing-text')\n .attr('x', args.width / 2)\n .attr('y', args.height / 2)\n .attr('dy', '.50em')\n .attr('text-anchor', 'middle')\n .text(args.missing_text);\n }\n\n function mg_missing_x_scale(args) {\n args.scales.X = d3.scaleLinear()\n .domain([0, args.data.length])\n .range([mg_get_plot_left(args), mg_get_plot_right(args)]);\n args.scalefns.yf = function(di) {\n return args.scales.Y(di.y); };\n }\n\n function mg_missing_y_scale(args) {\n args.scales.Y = d3.scaleLinear()\n .domain([-2, 2])\n .range([args.height - args.bottom - args.buffer * 2, args.top]);\n args.scalefns.xf = function(di) {\n return args.scales.X(di.x); };\n }\n\n function mg_make_fake_data(args) {\n var data = [];\n for (var x = 1; x <= 50; x++) {\n data.push({ 'x': x, 'y': Math.random() - (x * 0.03) });\n }\n args.data = data;\n }\n\n function mg_add_missing_background_rect(g, args) {\n g.append('svg:rect')\n .classed('mg-missing-background', true)\n .attr('x', args.buffer)\n .attr('y', args.buffer + args.title_y_position * 2)\n .attr('width', args.width - args.buffer * 2)\n .attr('height', args.height - args.buffer * 2 - args.title_y_position * 2)\n .attr('rx', 15)\n .attr('ry', 15);\n }\n\n function mg_missing_add_line(g, args) {\n var line = d3.line()\n .x(args.scalefns.xf)\n .y(args.scalefns.yf)\n .curve(args.interpolate);\n\n g.append('path')\n .attr('class', 'mg-main-line mg-line1-color')\n .attr('d', line(args.data));\n }\n\n function mg_missing_add_area(g, args) {\n var area = d3.area()\n .x(args.scalefns.xf)\n .y0(args.scales.Y.range()[0])\n .y1(args.scalefns.yf)\n .curve(args.interpolate);\n\n g.append('path')\n .attr('class', 'mg-main-area mg-area1-color')\n .attr('d', area(args.data));\n }\n\n function mg_remove_all_children(args) {\n d3.select(args.target).selectAll('svg *').remove();\n }\n\n function mg_missing_remove_legend(args) {\n if (args.legend_target) {\n d3.select(args.legend_target).html('');\n }\n }\n\n function missingData(args) {\n this.init = function(args) {\n this.args = args;\n\n mg_init_compute_width(args);\n mg_init_compute_height(args);\n\n // create svg if one doesn't exist\n\n var container = d3.select(args.target);\n mg_raise_container_error(container, args);\n var svg = container.selectAll('svg');\n mg_remove_svg_if_chart_type_has_changed(svg, args);\n svg = mg_add_svg_if_it_doesnt_exist(svg, args);\n mg_adjust_width_and_height_if_changed(svg, args);\n mg_set_viewbox_for_scaling(svg, args);\n mg_remove_all_children(args);\n\n svg.classed('mg-missing', true);\n mg_missing_remove_legend(args);\n\n chart_title(args);\n\n // are we adding a background placeholder\n if (args.show_missing_background) {\n mg_make_fake_data(args);\n mg_missing_x_scale(args);\n mg_missing_y_scale(args);\n var g = mg_add_g(svg, 'mg-missing-pane');\n\n mg_add_missing_background_rect(g, args);\n mg_missing_add_line(g, args);\n mg_missing_add_area(g, args);\n }\n\n mg_missing_add_text(svg, args);\n\n this.windowListeners();\n\n return this;\n };\n\n this.windowListeners = function() {\n mg_window_listeners(this.args);\n return this;\n };\n\n this.init(args);\n }\n\n var defaults = {\n top: 40, // the size of the top margin\n bottom: 30, // the size of the bottom margin\n right: 10, // size of the right margin\n left: 0, // size of the left margin\n buffer: 8, // the buffer between the actual chart area and the margins\n legend_target: '',\n width: 350,\n height: 220,\n missing_text: 'Data currently missing or unavailable',\n scalefns: {},\n scales: {},\n show_tooltips: true,\n show_missing_background: true\n };\n\n MG.register('missing-data', missingData, defaults);\n}).call(this);\n\nfunction mg_process_scale_ticks(args, axis) {\n var accessor;\n var scale_ticks;\n var max;\n\n if (axis === 'x') {\n accessor = args.x_accessor;\n scale_ticks = args.scales.X.ticks(args.xax_count);\n max = args.processed.max_x;\n } else if (axis === 'y') {\n accessor = args.y_accessor;\n scale_ticks = args.scales.Y.ticks(args.yax_count)\n max = args.processed.max_y;\n }\n\n function log10(val) {\n if (val === 1000) {\n return 3;\n }\n if (val === 1000000) {\n return 7;\n }\n return Math.log(val) / Math.LN10;\n }\n\n if ((axis === 'x' && args.x_scale_type === 'log') || (axis === 'y' && args.y_scale_type === 'log')) {\n // get out only whole logs\n scale_ticks = scale_ticks.filter(function(d) {\n return Math.abs(log10(d)) % 1 < 1e-6 || Math.abs(log10(d)) % 1 > 1 - 1e-6;\n });\n }\n\n // filter out fraction ticks if our data is ints and if xmax > number of generated ticks\n var number_of_ticks = scale_ticks.length;\n\n // is our data object all ints?\n var data_is_int = true;\n args.data.forEach(function(d, i) {\n d.forEach(function(d, i) {\n if (d[accessor] % 1 !== 0) {\n data_is_int = false;\n return false;\n }\n });\n });\n\n if (data_is_int && number_of_ticks > max && args.format === 'count') {\n // remove non-integer ticks\n scale_ticks = scale_ticks.filter(function(d) {\n return d % 1 === 0;\n });\n }\n\n if (axis === 'x') {\n args.processed.x_ticks = scale_ticks;\n } else if (axis === 'y') {\n args.processed.y_ticks = scale_ticks;\n }\n}\n\nfunction raw_data_transformation(args) {\n 'use strict';\n\n // dupe our data so we can modify it without adverse effect\n args.data = MG.clone(args.data);\n\n // we need to account for a few data format cases:\n // #0 {bar1:___, bar2:___} // single object (for, say, bar charts)\n // #1 [{key:__, value:__}, ...] // unnested obj-arrays\n // #2 [[{key:__, value:__}, ...], [{key:__, value:__}, ...]] // nested obj-arrays\n // #3 [[4323, 2343],..] // unnested 2d array\n // #4 [[[4323, 2343],..] , [[4323, 2343],..]] // nested 2d array\n args.single_object = false; // for bar charts.\n args.array_of_objects = false;\n args.array_of_arrays = false;\n args.nested_array_of_arrays = false;\n args.nested_array_of_objects = false;\n\n // is the data object a nested array?\n\n if (is_array_of_arrays(args.data)) {\n args.nested_array_of_objects = args.data.map(function(d) {\n return is_array_of_objects_or_empty(d);\n }); // Case #2\n args.nested_array_of_arrays = args.data.map(function(d) {\n return is_array_of_arrays(d);\n }); // Case #4\n } else {\n args.array_of_objects = is_array_of_objects(args.data); // Case #1\n args.array_of_arrays = is_array_of_arrays(args.data); // Case #3\n }\n\n if (args.chart_type === 'line') {\n if (args.array_of_objects || args.array_of_arrays) {\n args.data = [args.data];\n }\n } else {\n if (!(mg_is_array(args.data[0]))) {\n args.data = [args.data];\n }\n }\n // if the y_accessor is an array, break it up and store the result in args.data\n mg_process_multiple_x_accessors(args);\n mg_process_multiple_y_accessors(args);\n\n // if user supplies keyword in args.color, change to arg.colors.\n // this is so that the API remains fairly sensible and legible.\n if (args.color !== undefined) {\n args.colors = args.color;\n }\n\n // if user has supplied args.colors, and that value is a string, turn it into an array.\n if (args.colors !== null && typeof args.colors === 'string') {\n args.colors = [args.colors];\n }\n\n // sort x-axis data\n if (args.chart_type === 'line' && args.x_sort === true) {\n for (var i = 0; i < args.data.length; i++) {\n args.data[i].sort(function(a, b) {\n return a[args.x_accessor] - b[args.x_accessor];\n });\n }\n }\n\n return this;\n}\n\nfunction mg_process_multiple_accessors(args, which_accessor) {\n // turns an array of accessors into ...\n if (mg_is_array(args[which_accessor])) {\n args.data = args.data.map(function(_d) {\n return args[which_accessor].map(function(ya) {\n return _d.map(function(di) {\n di = MG.clone(di);\n\n if (di[ya] === undefined) {\n return undefined;\n }\n\n di['multiline_' + which_accessor] = di[ya];\n return di;\n }).filter(function(di) {\n return di !== undefined;\n });\n });\n })[0];\n args[which_accessor] = 'multiline_' + which_accessor;\n }\n}\n\nfunction mg_process_multiple_x_accessors(args) {\n mg_process_multiple_accessors(args, 'x_accessor');\n}\n\nfunction mg_process_multiple_y_accessors(args) {\n mg_process_multiple_accessors(args, 'y_accessor');\n}\n\nMG.raw_data_transformation = raw_data_transformation;\n\nfunction process_line(args) {\n 'use strict';\n\n var time_frame;\n\n // do we have a time-series?\n var is_time_series = d3.sum(args.data.map(function(series) {\n return series.length > 0 && mg_is_date(series[0][args.x_accessor]);\n })) > 0;\n\n // are we replacing missing y values with zeros?\n if ((args.missing_is_zero || args.missing_is_hidden) && args.chart_type === 'line' && is_time_series) {\n for (var i = 0; i < args.data.length; i++) {\n // we need to have a dataset of length > 2, so if it's less than that, skip\n if (args.data[i].length <= 1) {\n continue;\n }\n\n var first = args.data[i][0];\n var last = args.data[i][args.data[i].length - 1];\n\n // initialize our new array for storing the processed data\n var processed_data = [];\n\n // we'll be starting from the day after our first date\n var start_date = MG.clone(first[args.x_accessor]).setDate(first[args.x_accessor].getDate() + 1);\n\n // if we've set a max_x, add data points up to there\n var from = (args.min_x) ? args.min_x : start_date;\n var upto = (args.max_x) ? args.max_x : last[args.x_accessor];\n\n time_frame = mg_get_time_frame((upto - from) / 1000);\n\n if (['four-days', 'many-days', 'many-months', 'years', 'default'].indexOf(time_frame) !== -1 && args.missing_is_hidden_accessor === null) {\n for (var d = new Date(from); d <= upto; d.setDate(d.getDate() + 1)) {\n var o = {};\n d.setHours(0, 0, 0, 0);\n\n // add the first date item, we'll be starting from the day after our first date\n if (Date.parse(d) === Date.parse(new Date(start_date))) {\n processed_data.push(MG.clone(args.data[i][0]));\n }\n\n // check to see if we already have this date in our data object\n var existing_o = null;\n args.data[i].forEach(function(val, i) {\n if (Date.parse(val[args.x_accessor]) === Date.parse(new Date(d))) {\n existing_o = val;\n\n return false;\n }\n });\n\n // if we don't have this date in our data object, add it and set it to zero\n if (!existing_o) {\n o[args.x_accessor] = new Date(d);\n o[args.y_accessor] = 0;\n o['_missing'] = true; //we want to distinguish between zero-value and missing observations\n processed_data.push(o);\n }\n\n // if the data point has, say, a 'missing' attribute set or if its\n // y-value is null identify it internally as missing\n else if (existing_o[args.missing_is_hidden_accessor] || existing_o[args.y_accessor] === null) {\n existing_o['_missing'] = true;\n processed_data.push(existing_o);\n }\n\n //otherwise, use the existing object for that date\n else {\n processed_data.push(existing_o);\n }\n }\n } else {\n for (var j = 0; j < args.data[i].length; j += 1) {\n var obj = MG.clone(args.data[i][j]);\n obj['_missing'] = args.data[i][j][args.missing_is_hidden_accessor];\n processed_data.push(obj);\n }\n }\n\n // update our date object\n args.data[i] = processed_data;\n }\n }\n\n return this;\n}\n\nMG.process_line = process_line;\n\nfunction process_histogram(args) {\n 'use strict';\n\n // if args.binned == false, then we need to bin the data appropriately.\n // if args.binned == true, then we need to make sure to compute the relevant computed data.\n // the outcome of either of these should be something in args.computed_data.\n // the histogram plotting function will be looking there for the data to plot.\n\n // we need to compute an array of objects.\n // each object has an x, y, and dx.\n\n // histogram data is always single dimension\n var our_data = args.data[0];\n\n var extracted_data;\n if (args.binned === false) {\n // use d3's built-in layout.histogram functionality to compute what you need.\n\n if (typeof(our_data[0]) === 'object') {\n // we are dealing with an array of objects. Extract the data value of interest.\n extracted_data = our_data\n .map(function(d) {\n return d[args.x_accessor];\n });\n } else if (typeof(our_data[0]) === 'number') {\n // we are dealing with a simple array of numbers. No extraction needed.\n extracted_data = our_data;\n } else {\n console.log('TypeError: expected an array of numbers, found ' + typeof(our_data[0]));\n return;\n }\n\n var hist = d3.histogram();\n if (args.bins) {\n hist.thresholds(args.bins);\n }\n\n var bins = hist(extracted_data);\n args.processed_data = bins.map(function(d) {\n return { 'x': d.x0, 'y': d.length };\n });\n } else {\n // here, we just need to reconstruct the array of objects\n // take the x accessor and y accessor.\n // pull the data as x and y. y is count.\n\n args.processed_data = our_data.map(function(d) {\n return { 'x': d[args.x_accessor], 'y': d[args.y_accessor] };\n });\n\n var this_pt;\n var next_pt;\n\n // we still need to compute the dx component for each data point\n for (var i = 0; i < args.processed_data.length; i++) {\n this_pt = args.processed_data[i];\n if (i === args.processed_data.length - 1) {\n this_pt.dx = args.processed_data[i - 1].dx;\n } else {\n next_pt = args.processed_data[i + 1];\n this_pt.dx = next_pt.x - this_pt.x;\n }\n }\n }\n\n // capture the original data and accessors before replacing args.data\n if (!args.processed) {\n args.processed = {};\n }\n args.processed.original_data = args.data;\n args.processed.original_x_accessor = args.x_accessor;\n args.processed.original_y_accessor = args.y_accessor;\n\n args.data = [args.processed_data];\n args.x_accessor = args.processed_x_accessor;\n args.y_accessor = args.processed_y_accessor;\n\n return this;\n}\n\nMG.process_histogram = process_histogram;\n\n// for use with bar charts, etc.\nfunction process_categorical_variables(args) {\n 'use strict';\n\n var extracted_data, processed_data = {},\n pd = [];\n //var our_data = args.data[0];\n var label_accessor = args.bar_orientation === 'vertical' ? args.x_accessor : args.y_accessor;\n var data_accessor = args.bar_orientation === 'vertical' ? args.y_accessor : args.x_accessor;\n\n return this;\n}\n\nMG.process_categorical_variables = process_categorical_variables;\n\nfunction process_point(args) {\n 'use strict';\n\n var data = args.data[0];\n var x = data.map(function(d) {\n return d[args.x_accessor];\n });\n var y = data.map(function(d) {\n return d[args.y_accessor];\n });\n\n if (args.least_squares) {\n args.ls_line = least_squares(x, y);\n }\n\n return this;\n}\n\nMG.process_point = process_point;\n\nfunction add_ls(args) {\n var svg = mg_get_svg_child_of(args.target);\n var data = args.data[0];\n var min_x = d3.min(data, function(d) {\n return d[args.x_accessor]; });\n var max_x = d3.max(data, function(d) {\n return d[args.x_accessor]; });\n\n d3.select(args.target).selectAll('.mg-least-squares-line').remove();\n\n svg.append('svg:line')\n .attr('x1', args.scales.X(min_x))\n .attr('x2', args.scales.X(max_x))\n .attr('y1', args.scales.Y(args.ls_line.fit(min_x)))\n .attr('y2', args.scales.Y(args.ls_line.fit(max_x)))\n .attr('class', 'mg-least-squares-line');\n}\n\nMG.add_ls = add_ls;\n\nfunction add_lowess(args) {\n var svg = mg_get_svg_child_of(args.target);\n var lowess = args.lowess_line;\n\n var line = d3.svg.line()\n .x(function(d) {\n return args.scales.X(d.x); })\n .y(function(d) {\n return args.scales.Y(d.y); })\n .interpolate(args.interpolate);\n\n svg.append('path')\n .attr('d', line(lowess))\n .attr('class', 'mg-lowess-line');\n}\n\nMG.add_lowess = add_lowess;\n\nfunction lowess_robust(x, y, alpha, inc) {\n // Used http://www.unc.edu/courses/2007spring/biol/145/001/docs/lectures/Oct27.html\n // for the clear explanation of robust lowess.\n\n // calculate the the first pass.\n var _l;\n var r = [];\n var yhat = d3.mean(y);\n var i;\n for (i = 0; i < x.length; i += 1) { r.push(1); }\n _l = _calculate_lowess_fit(x, y, alpha, inc, r);\n var x_proto = _l.x;\n var y_proto = _l.y;\n\n // Now, take the fit, recalculate the weights, and re-run LOWESS using r*w instead of w.\n\n for (i = 0; i < 100; i += 1) {\n r = d3.zip(y_proto, y).map(function(yi) {\n return Math.abs(yi[1] - yi[0]);\n });\n\n var q = d3.quantile(r.sort(), 0.5);\n\n r = r.map(function(ri) {\n return _bisquare_weight(ri / (6 * q));\n });\n\n _l = _calculate_lowess_fit(x, y, alpha, inc, r);\n x_proto = _l.x;\n y_proto = _l.y;\n }\n\n return d3.zip(x_proto, y_proto).map(function(d) {\n var p = {};\n p.x = d[0];\n p.y = d[1];\n return p;\n });\n}\n\nMG.lowess_robust = lowess_robust;\n\nfunction lowess(x, y, alpha, inc) {\n var r = [];\n for (var i = 0; i < x.length; i += 1) { r.push(1); }\n var _l = _calculate_lowess_fit(x, y, alpha, inc, r);\n}\n\nMG.lowess = lowess;\n\nfunction least_squares(x_, y_) {\n var x, y, xi, yi,\n _x = 0,\n _y = 0,\n _xy = 0,\n _xx = 0;\n\n var n = x_.length;\n if (mg_is_date(x_[0])) {\n x = x_.map(function(d) {\n return d.getTime();\n });\n } else {\n x = x_;\n }\n\n if (mg_is_date(y_[0])) {\n y = y_.map(function(d) {\n return d.getTime();\n });\n } else {\n y = y_;\n }\n\n var xhat = d3.mean(x);\n var yhat = d3.mean(y);\n var numerator = 0,\n denominator = 0;\n\n for (var i = 0; i < x.length; i++) {\n xi = x[i];\n yi = y[i];\n numerator += (xi - xhat) * (yi - yhat);\n denominator += (xi - xhat) * (xi - xhat);\n }\n\n var beta = numerator / denominator;\n var x0 = yhat - beta * xhat;\n\n return {\n x0: x0,\n beta: beta,\n fit: function(x) {\n return x0 + x * beta;\n }\n };\n}\n\nMG.least_squares = least_squares;\n\nfunction _pow_weight(u, w) {\n if (u >= 0 && u <= 1) {\n return Math.pow(1 - Math.pow(u, w), w);\n } else {\n return 0;\n }\n}\n\nfunction _bisquare_weight(u) {\n return _pow_weight(u, 2);\n}\n\nfunction _tricube_weight(u) {\n return _pow_weight(u, 3);\n}\n\nfunction _neighborhood_width(x0, xis) {\n return Array.max(xis.map(function(xi) {\n return Math.abs(x0 - xi);\n }));\n}\n\nfunction _manhattan(x1, x2) {\n return Math.abs(x1 - x2);\n}\n\nfunction _weighted_means(wxy) {\n var wsum = d3.sum(wxy.map(function(wxyi) {\n return wxyi.w; }));\n\n return {\n xbar: d3.sum(wxy.map(function(wxyi) {\n return wxyi.w * wxyi.x;\n })) / wsum,\n ybar: d3.sum(wxy.map(function(wxyi) {\n return wxyi.w * wxyi.y;\n })) / wsum\n };\n}\n\nfunction _weighted_beta(wxy, xbar, ybar) {\n var num = d3.sum(wxy.map(function(wxyi) {\n return Math.pow(wxyi.w, 2) * (wxyi.x - xbar) * (wxyi.y - ybar);\n }));\n\n var denom = d3.sum(wxy.map(function(wxyi) {\n return Math.pow(wxyi.w, 2) * Math.pow(wxyi.x - xbar, 2);\n }));\n\n return num / denom;\n}\n\nfunction _weighted_least_squares(wxy) {\n var ybar, xbar, beta_i, x0;\n\n var _wm = _weighted_means(wxy);\n\n xbar = _wm.xbar;\n ybar = _wm.ybar;\n\n var beta = _weighted_beta(wxy, xbar, ybar);\n\n return {\n beta: beta,\n xbar: xbar,\n ybar: ybar,\n x0: ybar - beta * xbar\n\n };\n}\n\nfunction _calculate_lowess_fit(x, y, alpha, inc, residuals) {\n // alpha - smoothing factor. 0 < alpha < 1/\n //\n //\n var k = Math.floor(x.length * alpha);\n\n var sorted_x = x.slice();\n\n sorted_x.sort(function(a, b) {\n if (a < b) {\n return -1; } else if (a > b) {\n return 1; }\n\n return 0;\n });\n\n var x_max = d3.quantile(sorted_x, 0.98);\n var x_min = d3.quantile(sorted_x, 0.02);\n\n var xy = d3.zip(x, y, residuals).sort();\n\n var size = Math.abs(x_max - x_min) / inc;\n\n var smallest = x_min;\n var largest = x_max;\n var x_proto = d3.range(smallest, largest, size);\n\n var xi_neighbors;\n var x_i, beta_i, x0_i, delta_i, xbar, ybar;\n\n // for each prototype, find its fit.\n var y_proto = [];\n\n for (var i = 0; i < x_proto.length; i += 1) {\n x_i = x_proto[i];\n\n // get k closest neighbors.\n xi_neighbors = xy.map(function(xyi) {\n return [\n Math.abs(xyi[0] - x_i),\n xyi[0],\n xyi[1],\n xyi[2]\n ];\n }).sort().slice(0, k);\n\n // Get the largest distance in the neighbor set.\n delta_i = d3.max(xi_neighbors)[0];\n\n // Prepare the weights for mean calculation and WLS.\n\n xi_neighbors = xi_neighbors.map(function(wxy) {\n return {\n w: _tricube_weight(wxy[0] / delta_i) * wxy[3],\n x: wxy[1],\n y: wxy[2]\n };\n });\n\n // Find the weighted least squares, obviously.\n var _output = _weighted_least_squares(xi_neighbors);\n\n x0_i = _output.x0;\n beta_i = _output.beta;\n\n //\n y_proto.push(x0_i + beta_i * x_i);\n }\n\n return { x: x_proto, y: y_proto };\n}\n\nfunction format_rollover_number(args) {\n var num;\n if (args.format === 'count') {\n num = function(d) {\n var is_float = d % 1 !== 0;\n var pf;\n\n if (is_float) {\n pf = d3.format(',.' + args.decimals + 'f');\n } else {\n pf = d3.format(',.0f');\n }\n\n // are we adding units after the value or before?\n if (args.yax_units_append) {\n return pf(d) + args.yax_units;\n } else {\n return args.yax_units + pf(d);\n }\n };\n } else {\n num = function(d_) {\n var fmt_string = (args.decimals ? '.' + args.decimals : '') + '%';\n var pf = d3.format(fmt_string);\n return pf(d_);\n };\n }\n return num;\n}\n\nvar time_rollover_format = function(f, d, accessor, utc) {\n var fd;\n if (typeof f === 'string') {\n fd = MG.time_format(utc, f)(d[accessor]);\n } else if (typeof f === 'function') {\n fd = f(d);\n } else {\n fd = d[accessor];\n }\n return fd;\n}\n\n// define our rollover format for numbers\nvar number_rollover_format = function(f, d, accessor) {\n var fd;\n if (typeof f === 'string') {\n fd = d3.format('s')(d[accessor]);\n } else if (typeof f === 'function') {\n fd = f(d);\n } else {\n fd = d[accessor];\n }\n return fd;\n}\n\nfunction mg_format_y_rollover(args, num, d) {\n var formatted_y;\n if (args.y_mouseover !== null) {\n if (args.aggregate_rollover) {\n formatted_y = number_rollover_format(args.y_mouseover, d, args.y_accessor);\n } else {\n formatted_y = number_rollover_format(args.y_mouseover, d, args.y_accessor);\n }\n } else {\n if (args.time_series) {\n if (args.aggregate_rollover) {\n formatted_y = num(d[args.y_accessor]);\n } else {\n formatted_y = args.yax_units + num(d[args.y_accessor]);\n }\n } else {\n formatted_y = args.y_accessor + ': ' + args.yax_units + num(d[args.y_accessor]);\n }\n }\n return formatted_y;\n}\n\nfunction mg_format_x_rollover(args, fmt, d) {\n var formatted_x;\n if (args.x_mouseover !== null) {\n if (args.time_series) {\n if (args.aggregate_rollover) {\n formatted_x = time_rollover_format(args.x_mouseover, d, 'key', args.utc);\n } else {\n formatted_x = time_rollover_format(args.x_mouseover, d, args.x_accessor, args.utc);\n }\n } else {\n formatted_x = number_rollover_format(args.x_mouseover, d, args.x_accessor);\n }\n } else {\n if (args.time_series) {\n var date;\n\n if (args.aggregate_rollover && args.data.length > 1) {\n date = new Date(d.key);\n } else {\n date = new Date(+d[args.x_accessor]);\n date.setDate(date.getDate());\n }\n\n formatted_x = fmt(date) + ' ';\n } else {\n formatted_x = args.x_accessor + ': ' + d[args.x_accessor] + ' ';\n }\n }\n return formatted_x;\n}\n\nfunction mg_format_data_for_mouseover(args, d, mouseover_fcn, accessor, check_time) {\n var formatted_data, formatter;\n var time_fmt = mg_get_rollover_time_format(args);\n if (typeof d[accessor] === 'string') {\n formatter = function(d) {\n return d;\n }\n } else {\n formatter = format_rollover_number(args);\n }\n\n if (mouseover_fcn !== null) {\n if (check_time) formatted_data = time_rollover_format(mouseover_fcn, d, accessor, args.utc);\n else formatted_data = number_rollover_format(mouseover_fcn, d, accessor);\n\n } else {\n if (check_time) formatted_data = time_fmt(new Date(+d[accessor])) + ' ';\n else formatted_data = (args.time_series ? '' : accessor + ': ') + formatter(d[accessor]) + ' ';\n }\n return formatted_data;\n}\n\nfunction mg_format_number_mouseover(args, d) {\n return mg_format_data_for_mouseover(args, d, args.x_mouseover, args.x_accessor, false);\n}\n\nfunction mg_format_x_mouseover(args, d) {\n return mg_format_data_for_mouseover(args, d, args.x_mouseover, args.x_accessor, args.time_series);\n}\n\nfunction mg_format_y_mouseover(args, d) {\n return mg_format_data_for_mouseover(args, d, args.y_mouseover, args.y_accessor, false);\n}\n\nfunction mg_format_x_aggregate_mouseover(args, d) {\n return mg_format_data_for_mouseover(args, d, args.x_mouseover, 'key', args.time_series)\n}\n\nMG.format_rollover_number = format_rollover_number;\n\n// http://bl.ocks.org/mbostock/3916621\nfunction path_tween(d1, precision) {\n return function() {\n var path0 = this,\n path1 = path0.cloneNode(),\n n0 = path0.getTotalLength() || 0,\n n1 = (path1.setAttribute(\"d\", d1), path1).getTotalLength() || 0;\n\n // Uniform sampling of distance based on specified precision.\n var distances = [0],\n i = 0,\n dt = precision / Math.max(n0, n1);\n while ((i += dt) < 1) distances.push(i);\n distances.push(1);\n\n // Compute point-interpolators at each distance.\n var points = distances.map(function(t) {\n var p0 = path0.getPointAtLength(t * n0),\n p1 = path1.getPointAtLength(t * n1);\n return d3.interpolate([p0.x, p0.y], [p1.x, p1.y]);\n });\n\n return function(t) {\n return t < 1 ? \"M\" + points.map(function(p) {\n return p(t);\n }).join(\"L\") : d1;\n };\n };\n}\n\nMG.path_tween = path_tween;\n\n// influenced by https://bl.ocks.org/tomgp/c99a699587b5c5465228\n\nfunction render_markup_for_server(callback) {\n var virtual_window = MG.virtual_window;\n var virtual_d3 = d3.select(virtual_window.document);\n var target = virtual_window.document.createElement('div');\n\n var original_d3 = global.d3;\n var original_window = global.window;\n var original_document = global.document;\n global.d3 = virtual_d3;\n global.window = virtual_window;\n global.document = virtual_window.document;\n\n var error;\n try {\n callback(target);\n } catch(e) {\n error = e;\n }\n\n global.d3 = original_d3;\n global.window = original_window;\n global.document = original_document;\n\n if (error) {\n throw error;\n }\n\n /* for some reason d3.select parses jsdom elements incorrectly\n * but it works if we wrap the element in a function.\n */\n return virtual_d3.select(function targetFn() {\n return target;\n }).html();\n}\n\nfunction render_markup_for_client(callback) {\n var target = document.createElement('div');\n callback(target);\n return d3.select(target).html();\n}\n\nfunction render_markup(callback) {\n switch(typeof window) {\n case 'undefined':\n return render_markup_for_server(callback);\n default:\n return render_markup_for_client(callback);\n }\n}\n\nfunction init_virtual_window(jsdom, force) {\n if (MG.virtual_window && !force) {\n return;\n }\n\n var doc = jsdom.jsdom({\n html: '',\n features: { QuerySelector: true }\n });\n MG.virtual_window = doc.defaultView;\n}\n\nMG.render_markup = render_markup;\nMG.init_virtual_window = init_virtual_window;\n\n// call this to add a warning icon to a graph and log an error to the console\nfunction error(args) {\n console.error('ERROR : ', args.target, ' : ', args.error);\n\n d3.select(args.target).select('.mg-chart-title')\n .append('tspan')\n .attr('class', 'fa fa-x fa-exclamation-circle mg-warning')\n .attr('dx', '0.3em')\n .text('\\uf06a');\n}\n\nfunction internal_error(args) {\n console.error('INTERNAL ERROR : ', args.target, ' : ', args.internal_error);\n}\n\nMG.error = error;\n\nreturn MG;\n}));\n","import * as d3 from 'd3'\nimport {jQuery as $} from 'jquery'\n\nexport default function AddBrushingCapability (MG) {\n\n /*\n The MIT License (MIT)\n\n Copyright (c) 2015 Dan de Havilland\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n */\n\n MG.line_brushing = {\n set_brush_as_base: function(target) {\n var svg = d3.select(target).select('svg'),\n current,\n history = brushHistory[target];\n\n svg.classed('mg-brushed', false);\n\n if (history) {\n history.brushed = false;\n\n current = history.current;\n history.original = current;\n\n args.min_x = current.min_x;\n args.max_x = current.max_x;\n args.min_y = current.min_y;\n args.max_y = current.max_y;\n\n history.steps = [];\n }\n },\n\n zoom_in: function(target, options) {\n\n },\n\n zoom_out: function(target, options) {\n\n }\n };\n\n /* helpers */\n function get_brush_interval(args) {\n var resolution = args.brushing_interval,\n interval;\n\n if (!resolution) {\n if (args.time_series) {\n resolution = d3.timeDay;\n } else {\n resolution = 1;\n }\n }\n\n // work with N as integer\n if (typeof resolution === 'number') {\n interval = {\n round: function(val) {\n return resolution * Math.round(val / resolution);\n },\n offset: function(val, count) {\n return val + (resolution * count);\n }\n };\n }\n // work with d3.time.[interval]\n else if (typeof resolution.round === 'function'\n && typeof resolution.offset === 'function' ) {\n interval = resolution;\n }\n else {\n console.warn('The `brushing_interval` provided is invalid. It must be either a number or expose both `round` and `offset` methods');\n }\n\n return interval;\n }\n\n function is_within_bounds(datum, args) {\n var x = +datum[args.x_accessor],\n y = +datum[args.y_accessor];\n\n return x >= (+args.processed.min_x || x)\n && x <= (+args.processed.max_x || x)\n && y >= (+args.processed.min_y || y)\n && y <= (+args.processed.max_y || y);\n }\n\n\n /**\n Brushing for line charts\n\n 1. hooks\n */\n\n var brushHistory = {},\n args;\n\n MG.add_hook('global.defaults', function(args) {\n // enable brushing unless it's explicitly disabled\n args.brushing = args.brushing !== false;\n if (args.brushing) {\n args.brushing_history = args.brushing_history !== false;\n args.aggregate_rollover = true;\n }\n });\n\n function brushing() {\n var chartContext = this;\n\n args = this.args;\n\n if (args.brushing === false) {\n return this;\n }\n\n if (!brushHistory[args.target] || !brushHistory[args.target].brushed) {\n brushHistory[args.target] = {\n brushed: false,\n steps: [],\n original: {\n min_x: +args.processed.min_x,\n max_x: +args.processed.max_x,\n min_y: +args.processed.min_y,\n max_y: +args.processed.max_y\n }\n };\n }\n\n var isDragging = false,\n mouseDown = false,\n originX,\n svg = d3.select(args.target).select('svg'),\n body = d3.select('body'),\n rollover = svg.select('.mg-rollover-rect, .mg-voronoi'),\n brushingGroup,\n extentRect;\n\n rollover.classed('mg-brush-container', true);\n\n brushingGroup = rollover.insert('g', '*')\n .classed('mg-brush', true);\n\n extentRect = brushingGroup.append('rect')\n .attr('opacity', 0)\n .attr('y', args.top)\n .attr('height', args.height - args.bottom - args.top - args.buffer)\n .classed('mg-extent', true);\n\n // mousedown, start area selection\n svg.on('mousedown', function() {\n mouseDown = true;\n isDragging = false;\n originX = d3.mouse(this)[0];\n svg.classed('mg-brushed', false);\n svg.classed('mg-brushing-in-progress', true);\n extentRect.attr({\n x: d3.mouse(this)[0],\n opacity: 0,\n width: 0\n });\n });\n\n // mousemove / drag, expand area selection\n svg.on('mousemove', function() {\n if (mouseDown) {\n isDragging = true;\n rollover.classed('mg-brushing', true);\n\n var mouseX = d3.mouse(this)[0],\n newX = Math.min(originX, mouseX),\n width = Math.max(originX, mouseX) - newX;\n\n extentRect\n .attr('x', newX)\n .attr('width', width)\n .attr('opacity', 1);\n }\n });\n\n // mouseup, finish area selection\n svg.on('mouseup', function() {\n mouseDown = false;\n svg.classed('mg-brushing-in-progress', false);\n\n var xScale = args.scales.X,\n yScale = args.scales.Y,\n flatData = [].concat.apply([], args.data),\n boundedData,\n yBounds,\n xBounds,\n extentX0 = +extentRect.attr('x'),\n extentX1 = extentX0 + (+extentRect.attr('width')),\n interval = get_brush_interval(args),\n offset = 0,\n mapDtoX = function(d) { return +d[args.x_accessor]; },\n mapDtoY = function(d) { return +d[args.y_accessor]; };\n\n // if we're zooming in: calculate the domain for x and y axes based on the selected rect\n if (isDragging) {\n isDragging = false;\n\n if (brushHistory[args.target].brushed) {\n brushHistory[args.target].steps.push({\n max_x: args.brushed_max_x || args.processed.max_x,\n min_x: args.brushed_min_x || args.processed.min_x,\n max_y: args.brushed_max_y || args.processed.max_y,\n min_y: args.brushed_min_y || args.processed.min_y\n });\n }\n\n brushHistory[args.target].brushed = true;\n\n boundedData = [];\n // is there at least one data point in the chosen selection? if not, increase the range until there is.\n var iterations = 0;\n while (boundedData.length === 0 && iterations <= flatData.length) {\n\n var xValX0 = xScale.invert(extentX0);\n var xValX1 = xScale.invert(extentX1);\n xValX0 = xValX0 instanceof Date ? xValX0 : interval.round(xValX0);\n xValX1 = xValX1 instanceof Date ? xValX1 : interval.round(xValX1);\n\n args.brushed_min_x = xValX0;\n args.brushed_max_x = Math.max(interval.offset(args.min_x, 1), xValX1);\n\n boundedData = flatData.filter(function(d) {\n var val = d[args.x_accessor];\n return val >= args.brushed_min_x && val <= args.brushed_max_x;\n });\n\n iterations++;\n }\n\n xBounds = d3.extent(boundedData, mapDtoX);\n args.brushed_min_x = +xBounds[0];\n args.brushed_max_x = +xBounds[1];\n xScale.domain(xBounds);\n\n yBounds = d3.extent(boundedData, mapDtoY);\n // add 10% padding on the y axis for better display\n // @TODO: make this an option\n args.brushed_min_y = yBounds[0] * 0.9;\n args.brushed_max_y = yBounds[1] * 1.1;\n yScale.domain(yBounds);\n }\n // zooming out on click, maintaining the step history\n else if (args.brushing_history) {\n if (brushHistory[args.target].brushed) {\n var previousBrush = brushHistory[args.target].steps.pop();\n if (previousBrush) {\n args.brushed_max_x = previousBrush.max_x;\n args.brushed_min_x = previousBrush.min_x;\n args.brushed_max_y = previousBrush.max_y;\n args.brushed_min_y = previousBrush.min_y;\n\n xBounds = [args.brushed_min_x, args.brushed_max_x];\n yBounds = [args.brushed_min_y, args.brushed_max_y];\n xScale.domain(xBounds);\n yScale.domain(yBounds);\n } else {\n brushHistory[args.target].brushed = false;\n\n delete args.brushed_max_x;\n delete args.brushed_min_x;\n delete args.brushed_max_y;\n delete args.brushed_min_y;\n\n xBounds = [\n brushHistory[args.target].original.min_x,\n brushHistory[args.target].original.max_x\n ];\n\n yBounds = [\n brushHistory[args.target].original.min_y,\n brushHistory[args.target].original.max_y\n ];\n }\n }\n }\n\n // has anything changed?\n if (xBounds && yBounds) {\n if (xBounds[0] < xBounds[1]) {\n // trigger the brushing callback\n\n var step = {\n min_x: xBounds[0],\n max_x: xBounds[1],\n min_y: yBounds[0],\n max_y: yBounds[1]\n };\n\n brushHistory[args.target].current = step;\n\n if (args.after_brushing) {\n args.after_brushing.apply(this, [step]);\n }\n }\n\n // redraw the chart\n if (!args.brushing_manual_redraw) {\n MG.data_graphic(args);\n }\n }\n });\n\n return this;\n }\n\n MG.add_hook('line.after_init', function(lineChart) {\n brushing.apply(lineChart);\n });\n\n function processXAxis(args, min_x, max_x) {\n if (args.brushing) {\n args.processed.min_x = args.brushed_min_x ? Math.max(args.brushed_min_x, min_x) : min_x;\n args.processed.max_x = args.brushed_max_x ? Math.min(args.brushed_max_x, max_x) : max_x;\n }\n }\n\n MG.add_hook('x_axis.process_min_max', processXAxis);\n\n function processYAxis(args) {\n if (args.brushing && (args.brushed_min_y || args.brushed_max_y)) {\n args.processed.min_y = args.brushed_min_y;\n args.processed.max_y = args.brushed_max_y;\n }\n }\n\n MG.add_hook('y_axis.process_min_max', processYAxis);\n\n function afterRollover(args) {\n if (args.brushing_history && brushHistory[args.target] && brushHistory[args.target].brushed) {\n var svg = d3.select(args.target).select('svg');\n svg.classed('mg-brushed', true);\n }\n }\n\n MG.add_hook('line.after_rollover', afterRollover);\n\n return ;\n}"]}
\ No newline at end of file
diff --git a/ghdata/deploy.py b/ghdata/deploy.py
deleted file mode 100644
index 11ce140b99..0000000000
--- a/ghdata/deploy.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from gevent.wsgi import WSGIServer
-import ghdata
-
-http_server = WSGIServer(('', 5001), ghdata.server.app)
-http_server.serve_forever()
\ No newline at end of file
diff --git a/ghdataContext.md b/ghdataContext.md
index abdba9f3d6..b38a668286 100644
--- a/ghdataContext.md
+++ b/ghdataContext.md
@@ -1,6 +1,6 @@
-# ghdata Context from the Ground Up
-## What is ghdata?
-Our project is focused on building **human centered open source software health metrics** defined by collaborations with the Linux Foundation's [CHAOSS Project](http://chaoss.community) and other open source stakeholders. ghdata is software focused on making sense of data using Four key **human centered data science** strategies:
+# augur Context from the Ground Up
+## What is augur?
+Our project is focused on building **human centered open source software health metrics** defined by collaborations with the Linux Foundation's [CHAOSS Project](http://chaoss.community) and other open source stakeholders. augur is software focused on making sense of data using Four key **human centered data science** strategies:
1. Enable comparisons. People navigate complex unknowns analogically. Let folks see how their project compares with others they are familiar with.
- This is not ranking
- If you start thinking about "metrics" like "rankings", you are probably going to create suboptimal metrics.
@@ -13,8 +13,8 @@ Our project is focused on building **human centered open source software health
Our core team has a long standing interest in social computing, software engineering measurement and the ethical instrumentation of online human behavior.
## Here are some more detailed links:
-- Example Website (running on a development grade web server, be gentle): http://ghdata.sociallycompute.io
-- Source Code Repository: http://github.com/OSSHealth/ghdata
+- Example Website (running on a development grade web server, be gentle): http://augur.sociallycompute.io
+- Source Code Repository: http://github.com/OSSHealth/augur
- List of Metrics: https://github.com/chaoss/metrics/blob/master/activity-metrics-list.md
Here are some examples:
1. https://github.com/chaoss/metrics/blob/master/activity-metrics/issue-response-rate.md
diff --git a/setup.py b/setup.py
index 3de75ba0d5..23dbec1a0c 100755
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
'''
SPDX-License-Identifier: MIT
-Install ghdata package with pip.
+Install augur package with pip.
'''
from setuptools import setup
@@ -15,16 +15,16 @@
long_description = f.read()
setup(
- name='ghdata',
+ name='augur',
version='0.4.1',
include_package_data = True,
description='Library/Server for data related to the health and sustainability of GitHub projects',
long_description=long_description,
- url='https://github.com/OSSHealth/ghdata',
+ url='https://github.com/OSSHealth/augur',
author='Derek Howard',
author_email='derek@howderek.com',
- packages=['ghdata'],
- package_dir={'ghdata': 'ghdata'},
+ packages=['augur'],
+ package_dir={'augur': 'augur'},
license='MIT',
classifiers=[
'Development Status :: 1 - Planning',
@@ -47,7 +47,7 @@
},
entry_points={
'console_scripts': [
- 'ghdata=ghdata.server:run',
+ 'augur=augur.server:run',
],
},
)
diff --git a/test/test_ghtorrent.py b/test/test_ghtorrent.py
index 60cb0fb904..fd47539ed3 100644
--- a/test/test_ghtorrent.py
+++ b/test/test_ghtorrent.py
@@ -3,10 +3,10 @@
@pytest.fixture
def ghtorrent():
- import ghdata
+ import augur
dbstr = os.getenv("DB_TEST_URL")
assert dbstr is not None and len(dbstr) > 8
- return ghdata.GHTorrent(dbstr)
+ return augur.GHTorrent(dbstr)
def test_repoid(ghtorrent):
assert ghtorrent.repoid('rails', 'rails') >= 1000
diff --git a/test/test_github.py b/test/test_github.py
index 0c930c7a96..5d2f2065d4 100644
--- a/test/test_github.py
+++ b/test/test_github.py
@@ -4,8 +4,8 @@
@pytest.fixture
def github():
- import ghdata
- return ghdata.GitHubAPI(os.getenv("GITHUB_API_KEY"))
+ import augur
+ return augur.GitHubAPI(os.getenv("GITHUB_API_KEY"))
"""
Pandas testing format
@@ -16,7 +16,7 @@ def github():
"""
def test_bus_factor(github):
- assert github.bus_factor("OSSHealth", "ghdata",start="1-1-17", end="5-12-17").isin(["9"]).any
+ assert github.bus_factor("OSSHealth", "augur",start="1-1-17", end="5-12-17").isin(["9"]).any
# def test_tags(github):
-# assert github.tags("OSSHealth", "ghdata").isin(["v0.2"]).any
+# assert github.tags("OSSHealth", "augur").isin(["v0.2"]).any
diff --git a/test/test_publicwww.py b/test/test_publicwww.py
index 6cb250e780..61e5efe332 100644
--- a/test/test_publicwww.py
+++ b/test/test_publicwww.py
@@ -4,10 +4,10 @@
@pytest.fixture
def publicwww():
- import ghdata
+ import augur
key = os.getenv("PUBLIC_WWW_TEST_API_KEY")
assert key is not None and len(key) >= 1
- return ghdata.PublicWWW(key)
+ return augur.PublicWWW(key)
def test_linking_websites(publicwww):
assert publicwww.linking_websites(owner='yihui', repo='knitr').isin(["sohu.com"]).any
\ No newline at end of file
diff --git a/testing.md b/testing.md
index 95c66c4246..6c3bf3b77c 100644
--- a/testing.md
+++ b/testing.md
@@ -1,4 +1,4 @@
-To test ghdata, set up your environment for testing:
+To test augur, set up your environment for testing:
`
export DB_TEST_URL=mysql+pymysql://:@:/
diff --git a/unintegrated-python/busFactor/pythonBlameAuthorEmail.py b/unintegrated-python/busFactor/pythonBlameAuthorEmail.py
index 7c164bed31..fbf2b58c9b 100644
--- a/unintegrated-python/busFactor/pythonBlameAuthorEmail.py
+++ b/unintegrated-python/busFactor/pythonBlameAuthorEmail.py
@@ -13,9 +13,9 @@
@app.route("/")
def pythonBlameHistory():
- #path is the hardcoded folder for the last download of ghdata
- repo_path = './ghdata'
- #We must remove the old ghdata if we want to download a new copy.
+ #path is the hardcoded folder for the last download of augur
+ repo_path = './augur'
+ #We must remove the old augur if we want to download a new copy.
#In order to delete it, we must first change the permissions
#To be writable for all files and directories.
#Based on this: http://stackoverflow.com/questions/2853723/whats-the-python-way-for-recursively-setting-file-permissions
@@ -27,12 +27,12 @@ def pythonBlameHistory():
os.chmod(os.path.join(root, file), stat.S_IWRITE)
os.chmod(repo_path, stat.S_IWRITE)
- #delete the old ghdata
+ #delete the old augur
shutil.rmtree(repo_path)
- #Get the ghdata repository from GitHub
- repo = Repo.init('ghdata')
- origin = repo.create_remote('origin','https://github.com/OSSHealth/ghdata.git')
+ #Get the augur repository from GitHub
+ repo = Repo.init('augur')
+ origin = repo.create_remote('origin','https://github.com/OSSHealth/augur.git')
origin.fetch()
origin.pull(origin.refs[0].remote_head)
@@ -57,7 +57,7 @@ def pythonBlameHistory():
#You cannot use the os library file/directory loop for this part.
#(as was used above to change file permissions)
#That is because some files do not exist in every commit.
- #You must loop through the commit tree, not the ghdata directory.
+ #You must loop through the commit tree, not the augur directory.
for file_in_repo in repo.head.commit.tree.traverse():
#For each file, we want to clear out the total lines and user totals per file.
#That's because we're starting over with a new file.
diff --git a/unintegrated-python/busFactor/pythonBlameLinesInRepo.py b/unintegrated-python/busFactor/pythonBlameLinesInRepo.py
index 086d2bc267..89aff39ca9 100644
--- a/unintegrated-python/busFactor/pythonBlameLinesInRepo.py
+++ b/unintegrated-python/busFactor/pythonBlameLinesInRepo.py
@@ -9,9 +9,9 @@
@app.route("/")
def pythonBlameHistory():
- #path is the hardcoded folder for the last download of ghdata
- repo_path = './ghdata'
- #We must remove the old ghdata if we want to download a new copy.
+ #path is the hardcoded folder for the last download of augur
+ repo_path = './augur'
+ #We must remove the old augur if we want to download a new copy.
#In order to delete it, we must first change the permissions
#To be writable for all files and directories.
#Based on this: http://stackoverflow.com/questions/2853723/whats-the-python-way-for-recursively-setting-file-permissions
@@ -23,12 +23,12 @@ def pythonBlameHistory():
os.chmod(os.path.join(root, file), stat.S_IWRITE)
os.chmod(repo_path, stat.S_IWRITE)
- #delete the old ghdata
+ #delete the old augur
shutil.rmtree(repo_path)
- #Get the ghdata repository from GitHub
- repo = Repo.init('ghdata')
- origin = repo.create_remote('origin','https://github.com/OSSHealth/ghdata.git')
+ #Get the augur repository from GitHub
+ repo = Repo.init('augur')
+ origin = repo.create_remote('origin','https://github.com/OSSHealth/augur.git')
origin.fetch()
origin.pull(origin.refs[0].remote_head)
@@ -46,7 +46,7 @@ def pythonBlameHistory():
#You cannot use the os library file/directory loop for this part.
#(as was used above to change file permissions)
#That is because some files do not exist in every commit.
- #You must loop through the commit tree, not the ghdata directory.
+ #You must loop through the commit tree, not the augur directory.
for file_in_repo in repo.head.commit.tree.traverse():
#For each file, we want to clear out the total lines and organization totals per file.
#That's because we're starting over with a new file.
diff --git a/unintegrated-python/organizationHistory/pythonBlameHistoryTree.py b/unintegrated-python/organizationHistory/pythonBlameHistoryTree.py
index 0d53c71e93..915a09a11c 100644
--- a/unintegrated-python/organizationHistory/pythonBlameHistoryTree.py
+++ b/unintegrated-python/organizationHistory/pythonBlameHistoryTree.py
@@ -9,11 +9,11 @@
#You will need a MySQL server with the MSR14 datasource or other GHTorrent database with the same schema.
#Edit the line in this code that says db = sqlalchemy.create_engine to match your username:password@hostname:port/database.
-#This file is hardcoded to download the ghdata repository.
+#This file is hardcoded to download the augur repository.
#Since it is a preliminary example, each time it runs,
-#it deletes the local ghdata repo and re-downloads it (though this might not be a good option for the future).
-#Because of this: if you have a folder named ghdata whose contents you do not want deleted,
-#do not place this file in the same folder as your ghdata folder.
+#it deletes the local augur repo and re-downloads it (though this might not be a good option for the future).
+#Because of this: if you have a folder named augur whose contents you do not want deleted,
+#do not place this file in the same folder as your augur folder.
#to run this, type "python pythonBlameHistoryTree.py" into the command prompt
#You will see some output about running on 127.0.0.1:5000 in the command prompt
@@ -24,7 +24,7 @@
#the output shows the commit number and date, the total lines of code and other files (for example, the readme)
#and the percentage written by each organization.
-#expected output for ghdata should show only the spdx-tools organization (Matt is a member)
+#expected output for augur should show only the spdx-tools organization (Matt is a member)
#Number of lines corresponds to the lines written by Matt.
#You can see that earlier commits are lower on the page, and chronologically later ones appear higher up.
@@ -62,9 +62,9 @@
@app.route("/")
def pythonBlameHistory():
- #path is the hardcoded folder for the last download of ghdata
- repo_path = './ghdata'
- #We must remove the old ghdata if we want to download a new copy.
+ #path is the hardcoded folder for the last download of augur
+ repo_path = './augur'
+ #We must remove the old augur if we want to download a new copy.
#In order to delete it, we must first change the permissions
#To be writable for all files and directories.
#Based on this: http://stackoverflow.com/questions/2853723/whats-the-python-way-for-recursively-setting-file-permissions
@@ -76,7 +76,7 @@ def pythonBlameHistory():
os.chmod(os.path.join(root, file), stat.S_IWRITE)
os.chmod(repo_path, stat.S_IWRITE)
- #delete the old ghdata
+ #delete the old augur
shutil.rmtree(repo_path)
#connect to the database username:password@hostname:port/databasename
@@ -84,9 +84,9 @@ def pythonBlameHistory():
schema = sqlalchemy.MetaData()
schema.reflect(bind=db)
- #Get the ghdata repository from GitHub
- repo = Repo.init('ghdata')
- origin = repo.create_remote('origin','https://github.com/OSSHealth/ghdata.git')
+ #Get the augur repository from GitHub
+ repo = Repo.init('augur')
+ origin = repo.create_remote('origin','https://github.com/OSSHealth/augur.git')
origin.fetch()
origin.pull(origin.refs[0].remote_head)
@@ -123,7 +123,7 @@ def pythonBlameHistory():
#You cannot use the os library file/directory loop for this part.
#(as was used above to change file permissions)
#That is because some files do not exist in every commit.
- #You must loop through the commit tree, not the ghdata directory.
+ #You must loop through the commit tree, not the augur directory.
for file_in_repo in history_commit.tree.traverse():
#For each file, we want to clear out the total lines and organization totals per file.
#That's because we're starting over with a new file.
Quick search
-
-
ghdata package¶
+
+
-
augur package¶
Submodules¶
-
ghdata.ghdata module¶
+
+
-augur.augur module¶
-
Module contents
GHData — GHData documentation
+ Augur — Augur documentation
@@ -42,23 +42,23 @@
ghdata.server module¶
+
+
augur.server module¶
Module contents¶
@@ -66,10 +66,10 @@Module contents
Table Of Contents
-- ghdata package
+- augur package
@@ -84,7 +84,7 @@ Related Topics
This Page
@@ -103,14 +103,14 @@ Quick search
-
+
- augur package @@ -84,7 +84,7 @@
Related Topics
This Page
Quick search
- ©2017, The GHData Team.
+ ©2017, The Augur Team.
|
Powered by Sphinx 1.5.6
& Alabaster 0.7.10
|
- Page source
diff --git a/docs/python/.build/html/old/index.html b/docs/python/.build/html/old/index.html
index b918639300..d09d53f8f5 100644
--- a/docs/python/.build/html/old/index.html
+++ b/docs/python/.build/html/old/index.html
@@ -6,7 +6,7 @@
-
-
-
GHData¶
-GHData is a library that makes GitHub Health and Sustainability metrics avaliable as Pandas DataFrames. It can also be used as a server and deliver these metrics through a REST API.
-Most of the interesting documentation can be found in the ghdata package docs.
+
+
Augur¶
+Augur is a library that makes GitHub Health and Sustainability metrics avaliable as Pandas DataFrames. It can also be used as a server and deliver these metrics through a REST API.
+Most of the interesting documentation can be found in the augur package docs.
Contents¶
- ©2017, The GHData Team.
+ ©2017, The Augur Team.
|
Powered by Sphinx 1.5.6
diff --git a/docs/python/.build/html/old/modules.html b/docs/python/.build/html/old/modules.html
index 4a044fcdb2..9e4b66a552 100644
--- a/docs/python/.build/html/old/modules.html
+++ b/docs/python/.build/html/old/modules.html
@@ -6,7 +6,7 @@
- ghdata — GHData documentation
+ augur — Augur documentation
@@ -42,15 +42,15 @@
-
-
ghdata¶
+
+
augur¶
-
-
- ghdata package
@@ -91,7 +91,7 @@
Quick search
- ©2017, The GHData Team.
+ ©2017, The Augur Team.
|
Powered by Sphinx 1.5.6
diff --git a/docs/python/.build/html/search.html b/docs/python/.build/html/search.html
index c19707666d..95f5fe4ef1 100644
--- a/docs/python/.build/html/search.html
+++ b/docs/python/.build/html/search.html
@@ -6,7 +6,7 @@
- Search — GHData documentation
+ Search — Augur documentation
@@ -90,7 +90,7 @@
Related Topics
- ©2017, The GHData Team.
+ ©2017, The Augur Team.
|
Powered by Sphinx 1.5.6
diff --git a/docs/python/.build/html/searchindex.js b/docs/python/.build/html/searchindex.js
index 3f350c6230..0e507a59ce 100644
--- a/docs/python/.build/html/searchindex.js
+++ b/docs/python/.build/html/searchindex.js
@@ -1 +1 @@
-Search.setIndex({docnames:["index","old/ghdata","old/index","old/modules"],envversion:51,filenames:["index.rst","old/ghdata.rst","old/index.rst","old/modules.rst"],objects:{},objnames:{},objtypes:{},terms:{also:2,api:2,avali:2,can:2,content:3,datafram:2,deliv:2,doc:2,document:2,found:2,github:2,health:2,index:0,interest:2,librari:2,make:2,metric:2,modul:[0,2,3],most:2,packag:[2,3],page:0,panda:2,rest:2,search:0,server:[2,3],submodul:[2,3],sustain:2,through:2,used:2},titles:["Welcome to GHData’s documentation!","ghdata package","GHData","ghdata"],titleterms:{content:[1,2],document:0,ghdata:[0,1,2,3],indic:0,modul:1,packag:1,server:1,submodul:1,tabl:0,welcom:0}})
\ No newline at end of file
+Search.setIndex({docnames:["index","old/augur","old/index","old/modules"],envversion:51,filenames:["index.rst","old/augur.rst","old/index.rst","old/modules.rst"],objects:{},objnames:{},objtypes:{},terms:{also:2,api:2,avali:2,can:2,content:3,datafram:2,deliv:2,doc:2,document:2,found:2,github:2,health:2,index:0,interest:2,librari:2,make:2,metric:2,modul:[0,2,3],most:2,packag:[2,3],page:0,panda:2,rest:2,search:0,server:[2,3],submodul:[2,3],sustain:2,through:2,used:2},titles:["Welcome to Augur’s documentation!","augur package","Augur","augur"],titleterms:{content:[1,2],document:0,augur:[0,1,2,3],indic:0,modul:1,packag:1,server:1,submodul:1,tabl:0,welcom:0}})
\ No newline at end of file
diff --git a/docs/python/Makefile b/docs/python/Makefile
index 03e754fc62..82d390137f 100644
--- a/docs/python/Makefile
+++ b/docs/python/Makefile
@@ -4,7 +4,7 @@
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
-SPHINXPROJ = GHData
+SPHINXPROJ = Augur
SOURCEDIR = source
BUILDDIR = build
diff --git a/docs/python/build/html/_sources/index.rst.txt b/docs/python/build/html/_sources/index.rst.txt
index c8d912140d..3a97ee59c5 100644
--- a/docs/python/build/html/_sources/index.rst.txt
+++ b/docs/python/build/html/_sources/index.rst.txt
@@ -1,16 +1,16 @@
-.. GHData documentation master file, created by
+.. Augur documentation master file, created by
sphinx-quickstart on Tue Oct 24 12:27:08 2017.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
-Welcome to GHData's documentation!
+Welcome to Augur's documentation!
==================================
.. toctree::
:maxdepth: 2
:caption: Contents:
-.. automodule:: ghdata
+.. automodule:: augur
:members:
diff --git a/docs/python/build/html/genindex.html b/docs/python/build/html/genindex.html
index 557e174a66..32bb3e6262 100644
--- a/docs/python/build/html/genindex.html
+++ b/docs/python/build/html/genindex.html
@@ -7,7 +7,7 @@
- Index — GHData documentation
+ Index — Augur documentation
@@ -53,7 +53,7 @@
@@ -89,7 +89,7 @@
Index
G
Quick search
- ©2017, GHData Contributors.
+ ©2017, Augur Contributors.
|
Powered by Sphinx 1.5.6
diff --git a/docs/python/build/html/index.html b/docs/python/build/html/index.html
index 163ecad19a..de62b7edb7 100644
--- a/docs/python/build/html/index.html
+++ b/docs/python/build/html/index.html
@@ -6,7 +6,7 @@
- Welcome to GHData’s documentation! — GHData documentation
+ Welcome to Augur’s documentation! — Augur documentation
@@ -42,11 +42,11 @@
-
Indices and tables¶
-
@@ -64,7 +64,7 @@
- All ' : \"\") +\n (!this.manual_callback.hasOwnProperty(feature) ? '' : \"\") +\n '
- ' + features[i] + ' '\n );\n }\n }\n\n $('.' + this._strip_punctuation(feature) + '-btns .dropdown-menu li a').on('click', dropdownLiAClick);\n }\n\n return this;\n };\n\n return this;\n};\n\n(function() {\n 'use strict';\n\n function mg_line_color_text(elem, d, args) {\n elem.classed('mg-hover-line' + d.line_id + '-color', args.colors === null)\n .attr('fill', args.colors === null ? '' : args.colors[d.line_id - 1]);\n }\n\n function mg_line_graph_generators(args, plot, svg) {\n mg_add_line_generator(args, plot);\n mg_add_area_generator(args, plot);\n mg_add_flat_line_generator(args, plot);\n mg_add_confidence_band_generator(args, plot, svg);\n }\n\n function mg_add_confidence_band_generator(args, plot, svg) {\n plot.existing_band = svg.selectAll('.mg-confidence-band').nodes();\n if (args.show_confidence_band) {\n plot.confidence_area = d3.area()\n .defined(plot.line.defined())\n .x(args.scalefns.xf)\n .y0(function(d) {\n var l = args.show_confidence_band[0];\n if (d[l] != undefined) {\n return args.scales.Y(d[l]);\n } else {\n return args.scales.Y(d[args.y_accessor]);\n }\n })\n .y1(function(d) {\n var u = args.show_confidence_band[1];\n if (d[u] != undefined) {\n return args.scales.Y(d[u]);\n } else {\n return args.scales.Y(d[args.y_accessor]);\n }\n })\n .curve(args.interpolate);\n }\n }\n\n function mg_add_area_generator(args, plot) {\n plot.area = d3.area()\n .defined(plot.line.defined())\n .x(args.scalefns.xf)\n .y0(args.scales.Y.range()[0])\n .y1(args.scalefns.yf)\n .curve(args.interpolate);\n }\n\n function mg_add_flat_line_generator(args, plot) {\n plot.flat_line = d3.line()\n .defined(function(d) {\n return (d['_missing'] === undefined || d['_missing'] !== true) && d[args.y_accessor] !== null;\n })\n .x(args.scalefns.xf)\n .y(function() {\n return args.scales.Y(plot.data_median); })\n .curve(args.interpolate);\n }\n\n function mg_add_line_generator(args, plot) {\n plot.line = d3.line()\n .x(args.scalefns.xf)\n .y(args.scalefns.yf)\n .curve(args.interpolate);\n\n // if missing_is_zero is not set, then hide data points that fall in missing\n // data ranges or that have been explicitly identified as missing in the\n // data source.\n if (!args.missing_is_zero) {\n // a line is defined if the _missing attrib is not set to true\n // and the y-accessor is not null\n plot.line = plot.line.defined(function(d) {\n return (d['_missing'] === undefined || d['_missing'] !== true) && d[args.y_accessor] !== null;\n });\n }\n }\n\n function mg_add_confidence_band(args, plot, svg, which_line) {\n if (args.show_confidence_band) {\n var confidenceBand;\n if (svg.select('.mg-confidence-band-' + which_line).empty()) {\n svg.append('path')\n .attr('class', 'mg-confidence-band mg-confidence-band-' + which_line)\n }\n\n // transition this line's confidence band\n confidenceBand = svg.select('.mg-confidence-band-' + which_line);\n\n confidenceBand\n .transition()\n .duration(function() {\n return (args.transition_on_update) ? 1000 : 0;\n })\n .attr('d', plot.confidence_area(args.data[which_line - 1]))\n .attr('clip-path', 'url(#mg-plot-window-' + mg_target_ref(args.target) + ')')\n }\n }\n\n function mg_add_area(args, plot, svg, which_line, line_id) {\n var areas = svg.selectAll('.mg-main-area.mg-area' + line_id);\n if (plot.display_area) {\n // if area already exists, transition it\n if (!areas.empty()) {\n svg.node().appendChild(areas.node());\n\n areas.transition()\n .duration(plot.update_transition_duration)\n .attr('d', plot.area(args.data[which_line]))\n .attr('clip-path', 'url(#mg-plot-window-' + mg_target_ref(args.target) + ')');\n } else { // otherwise, add the area\n svg.append('path')\n .classed('mg-main-area', true)\n .classed('mg-area' + line_id, true)\n .classed('mg-area' + line_id + '-color', args.colors === null)\n .attr('d', plot.area(args.data[which_line]))\n .attr('fill', args.colors === null ? '' : args.colors[line_id - 1])\n .attr('clip-path', 'url(#mg-plot-window-' + mg_target_ref(args.target) + ')');\n }\n } else if (!areas.empty()) {\n areas.remove();\n }\n }\n\n function mg_default_color_for_path(this_path, line_id) {\n this_path.classed('mg-line' + (line_id) + '-color', true);\n }\n\n function mg_color_line(args, this_path, which_line, line_id) {\n if (args.colors) {\n // for now, if args.colors is not an array, then keep moving as if nothing happened.\n // if args.colors is not long enough, default to the usual line_id color.\n if (args.colors.constructor === Array) {\n this_path.attr('stroke', args.colors[which_line]);\n if (args.colors.length < which_line + 1) {\n // Go with default coloring.\n // this_path.classed('mg-line' + (line_id) + '-color', true);\n mg_default_color_for_path(this_path, line_id);\n }\n } else {\n // this_path.classed('mg-line' + (line_id) + '-color', true);\n mg_default_color_for_path(this_path, line_id);\n }\n } else {\n // this is the typical workflow\n // this_path.classed('mg-line' + (line_id) + '-color', true);\n mg_default_color_for_path(this_path, line_id);\n }\n }\n\n function mg_add_line_element(args, plot, this_path, which_line) {\n if (args.animate_on_load) {\n plot.data_median = d3.median(args.data[which_line], function(d) {\n return d[args.y_accessor]; });\n this_path.attr('d', plot.flat_line(args.data[which_line]))\n .transition()\n .duration(1000)\n .attr('d', plot.line(args.data[which_line]))\n .attr('clip-path', 'url(#mg-plot-window-' + mg_target_ref(args.target) + ')');\n } else { // or just add the line\n this_path.attr('d', plot.line(args.data[which_line]))\n .attr('clip-path', 'url(#mg-plot-window-' + mg_target_ref(args.target) + ')');\n }\n }\n\n function mg_add_line(args, plot, svg, existing_line, which_line, line_id) {\n if (!existing_line.empty()) {\n svg.node().appendChild(existing_line.node());\n\n var lineTransition = existing_line.transition()\n .duration(plot.update_transition_duration);\n\n if (!plot.display_area && args.transition_on_update && !args.missing_is_hidden) {\n lineTransition.attrTween('d', path_tween(plot.line(args.data[which_line]), 4));\n } else {\n lineTransition.attr('d', plot.line(args.data[which_line]));\n }\n } else { // otherwise...\n // if we're animating on load, animate the line from its median value\n var this_path = svg.append('path')\n .attr('class', 'mg-main-line mg-line' + line_id);\n\n mg_color_line(args, this_path, which_line, line_id);\n mg_add_line_element(args, plot, this_path, which_line);\n }\n }\n\n function mg_add_legend_element(args, plot, which_line, line_id) {\n var this_legend;\n if (args.legend) {\n if (is_array(args.legend)) {\n this_legend = args.legend[which_line];\n } else if (is_function(args.legend)) {\n this_legend = args.legend(args.data[which_line]);\n }\n\n if (args.legend_target) {\n if (args.colors && args.colors.constructor === Array) {\n plot.legend_text = \"— \" +\n this_legend + ' ' + plot.legend_text;\n } else {\n plot.legend_text = \"— \" +\n this_legend + ' ' + plot.legend_text;\n }\n } else {\n var anchor_point, anchor_orientation, dx;\n if (args.y_axis_position === 'left') {\n anchor_point = args.data[which_line][args.data[which_line].length - 1];\n anchor_orientation = 'start';\n dx = args.buffer;\n } else {\n anchor_point = args.data[which_line][0];\n anchor_orientation = 'end';\n dx = -args.buffer;\n }\n var legend_text = plot.legend_group.append('svg:text')\n .attr('x', args.scalefns.xf(anchor_point))\n .attr('dx', dx)\n .attr('y', args.scalefns.yf(anchor_point))\n .attr('dy', '.35em')\n .attr('font-size', 10)\n .attr('text-anchor', anchor_orientation)\n .attr('font-weight', '300')\n .text(this_legend);\n\n if (args.colors && args.colors.constructor === Array) {\n if (args.colors.length < which_line + 1) {\n legend_text.classed('mg-line' + (line_id) + '-legend-color', true);\n } else {\n legend_text.attr('fill', args.colors[which_line]);\n }\n } else {\n legend_text.classed('mg-line' + (line_id) + '-legend-color', true);\n }\n\n mg_prevent_vertical_overlap(plot.legend_group.selectAll('.mg-line-legend text').nodes(), args);\n }\n }\n }\n\n function mg_plot_legend_if_legend_target(target, legend) {\n if (target) {\n d3.select(target).html(legend);\n }\n }\n\n function mg_add_legend_group(args, plot, svg) {\n if (args.legend) plot.legend_group = mg_add_g(svg, 'mg-line-legend');\n }\n\n function mg_remove_existing_line_rollover_elements(svg) {\n // remove the old rollovers if they already exist\n mg_selectAll_and_remove(svg, '.mg-rollover-rect');\n mg_selectAll_and_remove(svg, '.mg-voronoi');\n\n // remove the old rollover text and circle if they already exist\n mg_selectAll_and_remove(svg, '.mg-active-datapoint');\n mg_selectAll_and_remove(svg, '.mg-line-rollover-circle');\n //mg_selectAll_and_remove(svg, '.mg-active-datapoint-container');\n }\n\n function mg_add_rollover_circle(args, svg) {\n // append circle\n var circle = svg.selectAll('.mg-line-rollover-circle')\n .data(args.data)\n .enter().append('circle')\n .attr('cx', 0)\n .attr('cy', 0)\n .attr('r', 0);\n\n if (args.colors && args.colors.constructor === Array) {\n circle\n .attr('class', function(d) {\n return 'mg-line' + d.line_id;\n })\n .attr('fill', function(d, i) {\n return args.colors[i];\n })\n .attr('stroke', function(d, i) {\n return args.colors[i];\n });\n } else {\n circle.attr('class', function(d, i) {\n return [\n 'mg-line' + d.line_id,\n 'mg-line' + d.line_id + '-color',\n 'mg-area' + d.line_id + '-color'\n ].join(' ');\n });\n }\n circle.classed('mg-line-rollover-circle', true);\n }\n\n function mg_set_unique_line_id_for_each_series(args) {\n // update our data by setting a unique line id for each series\n // increment from 1... unless we have a custom increment series\n var line_id = 1;\n for (var i = 0; i < args.data.length; i++) {\n for (var j = 0; j < args.data[i].length; j++) {\n // Index is saved as original line id for the legend values\n args.data[i][j].index = line_id;\n // if custom line-color map is set, use that instead of line_id (For colors)\n if (args.custom_line_color_map.length > 0) {\n args.data[i][j].line_id = args.custom_line_color_map[i];\n } else {\n args.data[i][j].line_id = line_id;\n }\n }\n line_id++;\n }\n }\n\n function mg_nest_data_for_voronoi(args) {\n return d3.merge(args.data);\n }\n\n function mg_line_class_string(args) {\n return function(d) {\n var class_string;\n\n if (args.linked) {\n var v = d[args.x_accessor];\n var formatter = MG.time_format(args.utc_time, args.linked_format);\n\n // only format when x-axis is date\n var id = (typeof v === 'number') ? (d.line_id - 1) : formatter(v);\n class_string = 'roll_' + id + ' mg-line' + d.line_id;\n\n if (args.color === null) {\n class_string += ' mg-line' + d.line_id + '-color';\n }\n return class_string;\n\n } else {\n class_string = 'mg-line' + d.line_id;\n if (args.color === null) class_string += ' mg-line' + d.line_id + '-color';\n return class_string;\n }\n };\n }\n\n function mg_add_voronoi_rollover(args, svg, rollover_on, rollover_off, rollover_move) {\n var voronoi = d3.voronoi()\n .x(function(d) {\n return args.scales.X(d[args.x_accessor]).toFixed(2); })\n .y(function(d) {\n return args.scales.Y(d[args.y_accessor]).toFixed(2); })\n .extent([\n [args.buffer, args.buffer + args.title_y_position],\n [args.width - args.buffer, args.height - args.buffer]\n ]);\n\n var g = mg_add_g(svg, 'mg-voronoi');\n g.selectAll('path')\n .data(voronoi.polygons(mg_nest_data_for_voronoi(args)))\n .enter()\n .append('path')\n .filter(function(d) {\n return d !== undefined && d.length > 0; })\n .attr('d', function(d) {\n return d == null ? null : 'M' + d.join('L') + 'Z'; })\n .datum(function(d) {\n return d == null ? null : d.data; }) // because of d3.voronoi, reassign d\n .attr('class', mg_line_class_string(args))\n .on('mouseover', rollover_on)\n .on('mouseout', rollover_off)\n .on('mousemove', rollover_move);\n\n mg_configure_voronoi_rollover(args, svg);\n }\n\n function nest_data_for_aggregate_rollover(args) {\n var data_nested = d3.nest()\n .key(function(d) {\n return d[args.x_accessor]; })\n .entries(d3.merge(args.data));\n data_nested.forEach(function(entry) {\n var datum = entry.values[0];\n entry.key = datum[args.x_accessor];\n });\n\n if (args.x_sort) {\n return data_nested.sort(function(a, b) {\n return new Date(a.key) - new Date(b.key); });\n } else {\n return data_nested;\n }\n }\n\n function mg_add_aggregate_rollover(args, svg, rollover_on, rollover_off, rollover_move) {\n // Undo the keys getting coerced to strings, by setting the keys from the values\n // This is necessary for when we have X axis keys that are things like\n var data_nested = nest_data_for_aggregate_rollover(args);\n\n var xf = data_nested.map(function(di) {\n return args.scales.X(di.key);\n });\n\n var g = svg.append('g')\n .attr('class', 'mg-rollover-rect');\n\n g.selectAll('.mg-rollover-rects')\n .data(data_nested).enter()\n .append('rect')\n .attr('x', function(d, i) {\n if (xf.length === 1) return mg_get_plot_left(args);\n else if (i === 0) return xf[i].toFixed(2);\n else return ((xf[i - 1] + xf[i]) / 2).toFixed(2);\n })\n .attr('y', args.top)\n .attr('width', function(d, i) {\n if (xf.length === 1) return mg_get_plot_right(args);\n else if (i === 0) return ((xf[i + 1] - xf[i]) / 2).toFixed(2);\n else if (i === xf.length - 1) return ((xf[i] - xf[i - 1]) / 2).toFixed(2);\n else return ((xf[i + 1] - xf[i - 1]) / 2).toFixed(2);\n })\n .attr('class', function(d) {\n var line_classes = d.values.map(function(datum) {\n var lc = mg_line_class(datum.line_id);\n if (args.colors === null) lc += ' ' + mg_line_color_class(datum.line_id);\n return lc;\n }).join(' ');\n if (args.linked && d.values.length > 0) {\n line_classes += ' ' + mg_rollover_id_class(mg_rollover_format_id(d.values[0], 0, args));\n }\n\n return line_classes;\n })\n .attr('height', args.height - args.bottom - args.top - args.buffer)\n .attr('opacity', 0)\n .on('mouseover', rollover_on)\n .on('mouseout', rollover_off)\n .on('mousemove', rollover_move);\n\n mg_configure_aggregate_rollover(args, svg);\n }\n\n function mg_configure_singleton_rollover(args, svg) {\n svg.select('.mg-rollover-rect rect')\n .on('mouseover')(args.data[0][0], 0);\n }\n\n function mg_configure_voronoi_rollover(args, svg) {\n for (var i = 0; i < args.data.length; i++) {\n var j = i + 1;\n\n if (args.custom_line_color_map.length > 0 &&\n args.custom_line_color_map[i] !== undefined) {\n j = args.custom_line_color_map[i];\n }\n\n if (args.data[i].length === 1 && !svg.selectAll('.mg-voronoi .mg-line' + j).empty()) {\n svg.selectAll('.mg-voronoi .mg-line' + j)\n .on('mouseover')(args.data[i][0], 0);\n\n svg.selectAll('.mg-voronoi .mg-line' + j)\n .on('mouseout')(args.data[i][0], 0);\n }\n }\n }\n\n function mg_line_class(line_id) {\n return 'mg-line' + line_id;\n }\n\n function mg_line_color_class(line_id) {\n return 'mg-line' + line_id + '-color';\n }\n\n function mg_rollover_id_class(id) {\n return 'roll_' + id;\n }\n\n function mg_rollover_format_id(d, i, args) {\n var v = d[args.x_accessor];\n var formatter = MG.time_format(args.utc_time, args.linked_format);\n // only format when x-axis is date\n var id = (typeof v === 'number') ? i : formatter(v);\n return id;\n }\n\n function mg_add_single_line_rollover(args, svg, rollover_on, rollover_off, rollover_move) {\n // set to 1 unless we have a custom increment series\n var line_id = 1;\n if (args.custom_line_color_map.length > 0) {\n line_id = args.custom_line_color_map[0];\n }\n\n var g = svg.append('g')\n .attr('class', 'mg-rollover-rect');\n\n var xf = args.data[0].map(args.scalefns.xf);\n\n g.selectAll('.mg-rollover-rects')\n .data(args.data[0]).enter()\n .append('rect')\n .attr('class', function(d, i) {\n var cl = mg_line_color_class(line_id) + ' ' + mg_line_class(d.line_id);\n if (args.linked) cl += cl + ' ' + mg_rollover_id_class(mg_rollover_format_id(d, i, args));\n return cl;\n })\n .attr('x', function(d, i) {\n // if data set is of length 1\n if (xf.length === 1) return mg_get_plot_left(args);\n else if (i === 0) return xf[i].toFixed(2);\n else return ((xf[i - 1] + xf[i]) / 2).toFixed(2);\n })\n .attr('y', function(d, i) {\n return (args.data.length > 1) ? args.scalefns.yf(d) - 6 // multi-line chart sensitivity\n : args.top;\n })\n .attr('width', function(d, i) {\n // if data set is of length 1\n if (xf.length === 1) return mg_get_plot_right(args);\n else if (i === 0) return ((xf[i + 1] - xf[i]) / 2).toFixed(2);\n else if (i === xf.length - 1) return ((xf[i] - xf[i - 1]) / 2).toFixed(2);\n else return ((xf[i + 1] - xf[i - 1]) / 2).toFixed(2);\n })\n .attr('height', function(d, i) {\n return (args.data.length > 1) ? 12 // multi-line chart sensitivity\n : args.height - args.bottom - args.top - args.buffer;\n })\n .attr('opacity', 0)\n .on('mouseover', rollover_on)\n .on('mouseout', rollover_off)\n .on('mousemove', rollover_move);\n\n if (mg_is_singleton(args)) {\n mg_configure_singleton_rollover(args, svg);\n }\n }\n\n function mg_configure_aggregate_rollover(args, svg) {\n var rect = svg.selectAll('.mg-rollover-rect rect');\n var rect_first = rect.nodes()[0][0] || rect.nodes()[0];\n if (args.data.filter(function(d) { return d.length === 1; }).length > 0) {\n rect.on('mouseover')(rect_first.__data__, 0);\n }\n }\n\n function mg_is_standard_multiline(args) {\n return args.data.length > 1 && !args.aggregate_rollover;\n }\n\n function mg_is_aggregated_rollover(args) {\n return args.data.length > 1 && args.aggregate_rollover;\n }\n\n function mg_is_singleton(args) {\n return args.data.length === 1 && args.data[0].length === 1;\n }\n\n function mg_draw_all_line_elements(args, plot, svg) {\n mg_remove_dangling_bands(plot, svg);\n\n for (var i = args.data.length - 1; i >= 0; i--) {\n var this_data = args.data[i];\n\n // passing the data for the current line\n MG.call_hook('line.before_each_series', [this_data, args]);\n\n // override increment if we have a custom increment series\n var line_id = i + 1;\n if (args.custom_line_color_map.length > 0) {\n line_id = args.custom_line_color_map[i];\n }\n\n args.data[i].line_id = line_id;\n\n if (this_data.length === 0) {\n continue;\n }\n var existing_line = svg.select('path.mg-main-line.mg-line' + (line_id));\n\n mg_add_confidence_band(args, plot, svg, line_id);\n mg_add_area(args, plot, svg, i, line_id);\n mg_add_line(args, plot, svg, existing_line, i, line_id);\n mg_add_legend_element(args, plot, i, line_id);\n\n // passing the data for the current line\n MG.call_hook('line.after_each_series', [this_data, existing_line, args]);\n }\n }\n\n function mg_remove_dangling_bands(plot, svg) {\n if (plot.existing_band[0] && plot.existing_band[0].length > svg.selectAll('.mg-main-line').node().length) {\n svg.selectAll('.mg-confidence-band').remove();\n }\n }\n\n function mg_line_main_plot(args) {\n var plot = {};\n var svg = mg_get_svg_child_of(args.target);\n\n // remove any old legends if they exist\n mg_selectAll_and_remove(svg, '.mg-line-legend');\n mg_add_legend_group(args, plot, svg);\n\n plot.data_median = 0;\n plot.update_transition_duration = (args.transition_on_update) ? 1000 : 0;\n plot.display_area = args.area && !args.use_data_y_min && args.data.length <= 1 && args.aggregate_rollover === false;\n plot.legend_text = '';\n mg_line_graph_generators(args, plot, svg);\n plot.existing_band = svg.selectAll('.mg-confidence-band').nodes();\n\n // should we continue with the default line render? A `line.all_series` hook should return false to prevent the default.\n var continueWithDefault = MG.call_hook('line.before_all_series', [args]);\n if (continueWithDefault !== false) {\n mg_draw_all_line_elements(args, plot, svg);\n }\n\n mg_plot_legend_if_legend_target(args.legend_target, plot.legend_text);\n }\n\n function mg_line_rollover_setup(args, graph) {\n var svg = mg_get_svg_child_of(args.target);\n\n if (svg.selectAll('.mg-active-datapoint-container').nodes().length === 0) {\n mg_add_g(svg, 'mg-active-datapoint-container');\n }\n\n mg_remove_existing_line_rollover_elements(svg);\n mg_add_rollover_circle(args, svg);\n mg_set_unique_line_id_for_each_series(args);\n\n if (mg_is_standard_multiline(args)) {\n mg_add_voronoi_rollover(args, svg, graph.rolloverOn(args), graph.rolloverOff(args), graph.rolloverMove(args));\n } else if (mg_is_aggregated_rollover(args)) {\n mg_add_aggregate_rollover(args, svg, graph.rolloverOn(args), graph.rolloverOff(args), graph.rolloverMove(args));\n } else {\n mg_add_single_line_rollover(args, svg, graph.rolloverOn(args), graph.rolloverOff(args), graph.rolloverMove(args));\n }\n }\n\n function mg_update_rollover_circle(args, svg, d) {\n if (args.aggregate_rollover && args.data.length > 1) {\n // hide the circles in case a non-contiguous series is present\n svg.selectAll('circle.mg-line-rollover-circle')\n .style('opacity', 0);\n\n d.values.forEach(function(datum) {\n if (mg_data_in_plot_bounds(datum, args)) mg_update_aggregate_rollover_circle(args, svg, datum);\n });\n } else if ((args.missing_is_hidden && d['_missing']) || d[args.y_accessor] === null) {\n // disable rollovers for hidden parts of the line\n // recall that hidden parts are missing data ranges and possibly also\n // data points that have been explicitly identified as missing\n return;\n } else {\n // show circle on mouse-overed rect\n if (mg_data_in_plot_bounds(d, args)) {\n mg_update_generic_rollover_circle(args, svg, d);\n }\n }\n }\n\n function mg_update_aggregate_rollover_circle(args, svg, datum) {\n svg.select('circle.mg-line-rollover-circle.mg-line' + datum.line_id)\n .attr('cx', args.scales.X(datum[args.x_accessor]).toFixed(2))\n .attr('cy', args.scales.Y(datum[args.y_accessor]).toFixed(2))\n .attr('r', args.point_size)\n .style('opacity', 1);\n }\n\n function mg_update_generic_rollover_circle(args, svg, d) {\n svg.selectAll('circle.mg-line-rollover-circle.mg-line' + d.line_id)\n .classed('mg-line-rollover-circle', true)\n .attr('cx', function() {\n return args.scales.X(d[args.x_accessor]).toFixed(2);\n })\n .attr('cy', function() {\n return args.scales.Y(d[args.y_accessor]).toFixed(2);\n })\n .attr('r', args.point_size)\n .style('opacity', 1);\n }\n\n function mg_trigger_linked_mouseovers(args, d, i) {\n if (args.linked && !MG.globals.link) {\n MG.globals.link = true;\n if (!args.aggregate_rollover || d.value !== undefined || d.values.length > 0) {\n var datum = d.values ? d.values[0] : d;\n var id = mg_rollover_format_id(datum, i, args);\n // trigger mouseover on matching line in .linked charts\n d3.selectAll('.' + mg_line_class(datum.line_id) + '.' + mg_rollover_id_class(id))\n .each(function(d) {\n d3.select(this)\n .on('mouseover')(d, i);\n });\n }\n }\n }\n\n function mg_trigger_linked_mouseouts(args, d, i) {\n if (args.linked && MG.globals.link) {\n MG.globals.link = false;\n\n var formatter = MG.time_format(args.utc_time, args.linked_format);\n var datums = d.values ? d.values : [d];\n datums.forEach(function(datum) {\n var v = datum[args.x_accessor];\n var id = (typeof v === 'number') ? i : formatter(v);\n\n // trigger mouseout on matching line in .linked charts\n d3.selectAll('.roll_' + id)\n .each(function(d) {\n d3.select(this)\n .on('mouseout')(d);\n });\n });\n }\n }\n\n function mg_remove_active_data_points_for_aggregate_rollover(args, svg) {\n svg.selectAll('circle.mg-line-rollover-circle').filter(function(circle) {\n return circle.length > 1;\n })\n .style('opacity', 0);\n }\n\n function mg_remove_active_data_points_for_generic_rollover(args, svg, d) {\n svg.selectAll('circle.mg-line-rollover-circle.mg-line' + d.line_id)\n .style('opacity', function() {\n var id = d.line_id - 1;\n\n if (args.custom_line_color_map.length > 0 &&\n args.custom_line_color_map.indexOf(d.line_id) !== undefined\n ) {\n id = args.custom_line_color_map.indexOf(d.line_id);\n }\n\n if (args.data[id].length === 1) {\n return 1;\n } else {\n return 0;\n }\n });\n }\n\n function mg_remove_active_text(svg) {\n svg.select('.mg-active-datapoint').text('');\n }\n\n function lineChart(args) {\n this.init = function(args) {\n this.args = args;\n\n if (!args.data || args.data.length === 0) {\n args.internal_error = 'No data was supplied';\n internal_error(args);\n return this;\n } else {\n args.internal_error = undefined;\n }\n\n raw_data_transformation(args);\n process_line(args);\n\n MG.call_hook('line.before_destroy', this);\n\n init(args);\n\n // TODO incorporate markers into calculation of x scales\n new MG.scale_factory(args)\n .namespace('x')\n .numericalDomainFromData()\n .numericalRange('bottom')\n\n var baselines = (args.baselines || []).map(function(d) {\n return d[args.y_accessor];\n });\n\n new MG.scale_factory(args)\n .namespace('y')\n .zeroBottom(true)\n .inflateDomain(true)\n .numericalDomainFromData(baselines)\n .numericalRange('left');\n\n var svg = mg_get_svg_child_of(args.target);\n\n if (args.x_axis) {\n new MG.axis_factory(args)\n .namespace('x')\n .type('numerical')\n .position(args.x_axis_position)\n .rug(x_rug(args))\n .label(mg_add_x_label)\n .draw();\n }\n\n if (args.y_axis) {\n new MG.axis_factory(args)\n .namespace('y')\n .type('numerical')\n .position(args.y_axis_position)\n .rug(y_rug(args))\n .label(mg_add_y_label)\n .draw();\n }\n\n this.markers();\n this.mainPlot();\n this.rollover();\n this.windowListeners();\n\n MG.call_hook('line.after_init', this);\n\n return this;\n };\n\n this.mainPlot = function() {\n mg_line_main_plot(args);\n return this;\n };\n\n this.markers = function() {\n markers(args);\n return this;\n };\n\n this.rollover = function() {\n var that = this;\n mg_line_rollover_setup(args, that);\n MG.call_hook('line.after_rollover', args);\n\n return this;\n };\n\n this.rolloverOn = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n var fmt = mg_get_rollover_time_format(args);\n\n return function(d, i) {\n mg_update_rollover_circle(args, svg, d);\n mg_trigger_linked_mouseovers(args, d, i);\n\n svg.selectAll('text')\n .filter(function(g, j) {\n return d === g;\n })\n .attr('opacity', 0.3);\n\n // update rollover text except for missing data points\n if (args.show_rollover_text &&\n !((args.missing_is_hidden && d['_missing']) || d[args.y_accessor] === null)\n ) {\n var mouseover = mg_mouseover_text(args, { svg: svg });\n var row = mouseover.mouseover_row();\n if (args.aggregate_rollover) {\n row.text((args.aggregate_rollover && args.data.length > 1\n ? mg_format_x_aggregate_mouseover\n : mg_format_x_mouseover)(args, d));\n }\n\n var pts = args.aggregate_rollover && args.data.length > 1\n ? d.values\n : [d];\n\n pts.forEach(function(di) {\n if (args.aggregate_rollover) {\n row = mouseover.mouseover_row();\n }\n\n if (args.legend) {\n mg_line_color_text(row.text(args.legend[di.index - 1] + ' ').bold().elem(), di, args);\n }\n\n mg_line_color_text(row.text('\\u2014 ').elem(), di, args);\n if (!args.aggregate_rollover) {\n row.text(mg_format_x_mouseover(args, di));\n }\n\n row.text(mg_format_y_mouseover(args, di, args.time_series === false));\n })\n }\n\n if (args.mouseover) {\n args.mouseover(d, i);\n }\n };\n };\n\n this.rolloverOff = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n mg_trigger_linked_mouseouts(args, d, i);\n if (args.aggregate_rollover) {\n mg_remove_active_data_points_for_aggregate_rollover(args, svg);\n } else {\n mg_remove_active_data_points_for_generic_rollover(args, svg, d);\n }\n\n if (args.data[0].length > 1) {\n mg_clear_mouseover_container(svg);\n }\n\n if (args.mouseout) {\n args.mouseout(d, i);\n }\n };\n };\n\n this.rolloverMove = function(args) {\n return function(d, i) {\n if (args.mousemove) {\n args.mousemove(d, i);\n }\n };\n };\n\n this.windowListeners = function() {\n mg_window_listeners(this.args);\n return this;\n };\n\n this.init(args);\n }\n\n MG.register('line', lineChart);\n}).call(this);\n\n(function() {\n 'use strict';\n\n function histogram(args) {\n this.init = function(args) {\n this.args = args;\n\n raw_data_transformation(args);\n process_histogram(args);\n init(args);\n\n new MG.scale_factory(args)\n .namespace('x')\n .numericalDomainFromData()\n .numericalRange('bottom');\n\n var baselines = (args.baselines || []).map(function(d) {\n return d[args.y_accessor]\n });\n\n new MG.scale_factory(args)\n .namespace('y')\n .zeroBottom(true)\n .inflateDomain(true)\n .numericalDomainFromData(baselines)\n .numericalRange('left');\n\n x_axis(args);\n y_axis(args);\n\n this.mainPlot();\n this.markers();\n this.rollover();\n this.windowListeners();\n\n return this;\n };\n\n this.mainPlot = function() {\n var svg = mg_get_svg_child_of(args.target);\n\n //remove the old histogram, add new one\n svg.selectAll('.mg-histogram').remove();\n\n var g = svg.append('g')\n .attr('class', 'mg-histogram');\n\n var bar = g.selectAll('.mg-bar')\n .data(args.data[0])\n .enter().append('g')\n .attr('class', 'mg-bar')\n .attr('transform', function(d) {\n return \"translate(\" + args.scales.X(d[args.x_accessor]).toFixed(2) + \",\" + args.scales.Y(d[args.y_accessor]).toFixed(2) + \")\";\n });\n\n //draw bars\n bar.append('rect')\n .attr('x', 1)\n .attr('width', function(d, i) {\n if (args.data[0].length === 1) {\n return (args.scalefns.xf(args.data[0][0]) - args.bar_margin).toFixed(0);\n } else if (i !== args.data[0].length - 1) {\n return (args.scalefns.xf(args.data[0][i + 1]) - args.scalefns.xf(d)).toFixed(0);\n } else {\n return (args.scalefns.xf(args.data[0][1]) - args.scalefns.xf(args.data[0][0])).toFixed(0);\n }\n })\n .attr('height', function(d) {\n if (d[args.y_accessor] === 0) {\n return 0;\n }\n\n return (args.height - args.bottom - args.buffer - args.scales.Y(d[args.y_accessor])).toFixed(2);\n });\n\n return this;\n };\n\n this.markers = function() {\n markers(args);\n return this;\n };\n\n this.rollover = function() {\n var svg = mg_get_svg_child_of(args.target);\n\n if (svg.selectAll('.mg-active-datapoint-container').nodes().length === 0) {\n mg_add_g(svg, 'mg-active-datapoint-container');\n }\n\n //remove the old rollovers if they already exist\n svg.selectAll('.mg-rollover-rect').remove();\n svg.selectAll('.mg-active-datapoint').remove();\n\n var g = svg.append('g')\n .attr('class', 'mg-rollover-rect');\n\n //draw rollover bars\n var bar = g.selectAll('.mg-bar')\n .data(args.data[0])\n .enter().append('g')\n .attr('class', function(d, i) {\n if (args.linked) {\n return 'mg-rollover-rects roll_' + i;\n } else {\n return 'mg-rollover-rects';\n }\n })\n .attr('transform', function(d) {\n return \"translate(\" + (args.scales.X(d[args.x_accessor])) + \",\" + 0 + \")\";\n });\n\n bar.append('rect')\n .attr('x', 1)\n .attr('y', args.buffer + args.title_y_position)\n .attr('width', function(d, i) {\n //if data set is of length 1\n if (args.data[0].length === 1) {\n return (args.scalefns.xf(args.data[0][0]) - args.bar_margin).toFixed(0);\n } else if (i !== args.data[0].length - 1) {\n return (args.scalefns.xf(args.data[0][i + 1]) - args.scalefns.xf(d)).toFixed(0);\n } else {\n return (args.scalefns.xf(args.data[0][1]) - args.scalefns.xf(args.data[0][0])).toFixed(0);\n }\n })\n .attr('height', function(d) {\n return args.height;\n })\n .attr('opacity', 0)\n .on('mouseover', this.rolloverOn(args))\n .on('mouseout', this.rolloverOff(args))\n .on('mousemove', this.rolloverMove(args));\n\n return this;\n };\n\n this.rolloverOn = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n svg.selectAll('text')\n .filter(function(g, j) {\n return d === g;\n })\n .attr('opacity', 0.3);\n\n var fmt = args.processed.xax_format || MG.time_format(args.utc_time, '%b %e, %Y');\n var num = format_rollover_number(args);\n\n svg.selectAll('.mg-bar rect')\n .filter(function(d, j) {\n return j === i;\n })\n .classed('active', true);\n\n //trigger mouseover on all matching bars\n if (args.linked && !MG.globals.link) {\n MG.globals.link = true;\n\n //trigger mouseover on matching bars in .linked charts\n d3.selectAll('.mg-rollover-rects.roll_' + i + ' rect')\n .each(function(d) { //use existing i\n d3.select(this).on('mouseover')(d, i);\n });\n }\n\n //update rollover text\n if (args.show_rollover_text) {\n var mo = mg_mouseover_text(args, { svg: svg });\n var row = mo.mouseover_row();\n row.text('\\u259F ').elem()\n .classed('hist-symbol', true);\n\n row.text(mg_format_x_mouseover(args, d)); // x\n row.text(mg_format_y_mouseover(args, d, args.time_series === false));\n }\n\n if (args.mouseover) {\n mg_setup_mouseover_container(svg, args);\n args.mouseover(d, i);\n }\n };\n };\n\n this.rolloverOff = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n if (args.linked && MG.globals.link) {\n MG.globals.link = false;\n\n //trigger mouseout on matching bars in .linked charts\n d3.selectAll('.mg-rollover-rects.roll_' + i + ' rect')\n .each(function(d) { //use existing i\n d3.select(this).on('mouseout')(d, i);\n });\n }\n\n //reset active bar\n svg.selectAll('.mg-bar rect')\n .classed('active', false);\n\n //reset active data point text\n mg_clear_mouseover_container(svg);\n\n if (args.mouseout) {\n args.mouseout(d, i);\n }\n };\n };\n\n this.rolloverMove = function(args) {\n return function(d, i) {\n if (args.mousemove) {\n args.mousemove(d, i);\n }\n };\n };\n\n this.windowListeners = function() {\n mg_window_listeners(this.args);\n return this;\n };\n\n this.init(args);\n }\n\n var defaults = {\n binned: false,\n bins: null,\n processed_x_accessor: 'x',\n processed_y_accessor: 'y',\n processed_dx_accessor: 'dx',\n bar_margin: 1\n };\n\n MG.register('histogram', histogram, defaults);\n}).call(this);\n\nfunction point_mouseover(args, svg, d) {\n var mouseover = mg_mouseover_text(args, { svg: svg });\n var row = mouseover.mouseover_row();\n\n if (args.color_accessor !== null && args.color_type === 'category') {\n var label = d[args.color_accessor];\n row.text(label + ' ').bold().elem().attr('fill', args.scalefns.colorf(d));\n }\n\n mg_color_point_mouseover(args, row.text('\\u25CF ').elem(), d); // point shape\n\n row.text(mg_format_x_mouseover(args, d)); // x\n row.text(mg_format_y_mouseover(args, d, args.time_series === false));\n}\n\nfunction mg_color_point_mouseover(args, elem, d) {\n if (args.color_accessor !== null) {\n elem.attr('fill', args.scalefns.colorf(d));\n elem.attr('stroke', args.scalefns.colorf(d));\n } else {\n elem.classed('mg-points-mono', true);\n }\n}\n\n\n(function() {\n 'use strict';\n\n function mg_filter_out_plot_bounds(data, args) {\n // max_x, min_x, max_y, min_y;\n var x = args.x_accessor;\n var y = args.y_accessor;\n var new_data = data.filter(function(d) {\n return (args.min_x === null || d[x] >= args.min_x) &&\n (args.max_x === null || d[x] <= args.max_x) &&\n (args.min_y === null || d[y] >= args.min_y) &&\n (args.max_y === null || d[y] <= args.max_y);\n })\n return new_data;\n }\n\n function pointChart(args) {\n this.init = function(args) {\n this.args = args;\n\n // infer y_axis and x_axis type;\n args.x_axis_type = mg_infer_type(args, 'x');\n args.y_axis_type = mg_infer_type(args, 'y');\n\n raw_data_transformation(args);\n\n process_point(args);\n init(args);\n\n var xMaker, yMaker;\n\n if (args.x_axis_type === 'categorical') {\n xMaker = MG.scale_factory(args)\n .namespace('x')\n .categoricalDomainFromData()\n .categoricalRangeBands([0, args.xgroup_height], args.xgroup_accessor === null);\n\n if (args.xgroup_accessor) {\n new MG.scale_factory(args)\n .namespace('xgroup')\n .categoricalDomainFromData()\n .categoricalRangeBands('bottom');\n\n } else {\n args.scales.XGROUP = function(d) {\n return mg_get_plot_left(args) };\n args.scalefns.xgroupf = function(d) {\n return mg_get_plot_left(args) };\n }\n\n args.scalefns.xoutf = function(d) {\n return args.scalefns.xf(d) + args.scalefns.xgroupf(d)\n };\n } else {\n xMaker = MG.scale_factory(args)\n .namespace('x')\n .inflateDomain(true)\n .zeroBottom(args.y_axis_type === 'categorical')\n .numericalDomainFromData((args.baselines || []).map(function(d) {\n return d[args.x_accessor] }))\n .numericalRange('bottom');\n\n args.scalefns.xoutf = args.scalefns.xf;\n }\n\n // y-scale generation. This needs to get simplified.\n if (args.y_axis_type === 'categorical') {\n yMaker = MG.scale_factory(args)\n .namespace('y')\n .zeroBottom(true)\n .categoricalDomainFromData()\n .categoricalRangeBands([0, args.ygroup_height], true);\n\n if (args.ygroup_accessor) {\n\n new MG.scale_factory(args)\n .namespace('ygroup')\n .categoricalDomainFromData()\n .categoricalRangeBands('left');\n\n } else {\n args.scales.YGROUP = function() {\n return mg_get_plot_top(args) };\n args.scalefns.ygroupf = function(d) {\n return mg_get_plot_top(args) };\n\n }\n args.scalefns.youtf = function(d) {\n return args.scalefns.yf(d) + args.scalefns.ygroupf(d) };\n\n } else {\n var baselines = (args.baselines || []).map(function(d) {\n return d[args.y_accessor] });\n yMaker = MG.scale_factory(args)\n .namespace('y')\n .inflateDomain(true)\n .zeroBottom(args.x_axis_type === 'categorical')\n .numericalDomainFromData(baselines)\n .numericalRange('left');\n\n args.scalefns.youtf = function(d) {\n return args.scalefns.yf(d) };\n }\n\n /////// COLOR accessor\n if (args.color_accessor !== null) {\n var colorScale = MG.scale_factory(args).namespace('color');\n if (args.color_type === 'number') {\n // do the color scale.\n // etiher get color range, or what.\n colorScale\n .numericalDomainFromData(mg_get_color_domain(args))\n .numericalRange(mg_get_color_range(args))\n .clamp(true);\n } else {\n if (args.color_domain) {\n colorScale\n .categoricalDomain(args.color_domain)\n .categoricalRange(args.color_range);\n } else {\n colorScale\n .categoricalDomainFromData()\n .categoricalColorRange();\n }\n }\n }\n\n if (args.size_accessor) {\n new MG.scale_factory(args).namespace('size')\n .numericalDomainFromData()\n .numericalRange(mg_get_size_range(args))\n .clamp(true);\n }\n\n new MG.axis_factory(args)\n .namespace('x')\n .type(args.x_axis_type)\n .zeroLine(args.y_axis_type === 'categorical')\n .position(args.x_axis_position)\n .rug(x_rug(args))\n .label(mg_add_x_label)\n .draw();\n\n new MG.axis_factory(args)\n .namespace('y')\n .type(args.y_axis_type)\n .zeroLine(args.x_axis_type === 'categorical')\n .position(args.y_axis_position)\n .rug(y_rug(args))\n .label(mg_add_y_label)\n .draw();\n\n this.mainPlot();\n this.markers();\n this.rollover();\n this.windowListeners();\n\n return this;\n };\n\n this.markers = function() {\n markers(args);\n if (args.least_squares) {\n add_ls(args);\n }\n\n return this;\n };\n\n this.mainPlot = function() {\n var svg = mg_get_svg_child_of(args.target);\n var g;\n\n var data = mg_filter_out_plot_bounds(args.data[0], args);\n //remove the old points, add new one\n svg.selectAll('.mg-points').remove();\n\n g = svg.append('g')\n .classed('mg-points', true);\n\n\n var pts = g.selectAll('circle')\n .data(data)\n .enter().append('circle')\n .attr('class', function(d, i) {\n return 'path-' + i;\n })\n .attr('cx', args.scalefns.xoutf)\n .attr('cy', function(d) {\n return args.scalefns.youtf(d);\n });\n\n //are we coloring our points, or just using the default color?\n if (args.color_accessor !== null) {\n pts.attr('fill', args.scalefns.colorf);\n pts.attr('stroke', args.scalefns.colorf);\n } else {\n pts.classed('mg-points-mono', true);\n }\n\n if (args.size_accessor !== null) {\n pts.attr('r', args.scalefns.sizef);\n } else {\n pts.attr('r', args.point_size);\n }\n\n return this;\n };\n\n this.rollover = function() {\n var svg = mg_get_svg_child_of(args.target);\n\n if (svg.selectAll('.mg-active-datapoint-container').nodes().length === 0) {\n mg_add_g(svg, 'mg-active-datapoint-container');\n }\n\n //remove the old rollovers if they already exist\n svg.selectAll('.mg-voronoi').remove();\n\n //add rollover paths\n var voronoi = d3.voronoi()\n .x(args.scalefns.xoutf)\n .y(args.scalefns.youtf)\n .extent([\n [args.buffer, args.buffer + args.title_y_position],\n [args.width - args.buffer, args.height - args.buffer]\n ]);\n\n var paths = svg.append('g')\n .attr('class', 'mg-voronoi');\n\n paths.selectAll('path')\n .data(voronoi.polygons(mg_filter_out_plot_bounds(args.data[0], args)))\n .enter().append('path')\n .attr('d', function(d) {\n return d == null ? null : 'M' + d.join(',') + 'Z'; })\n .attr('class', function(d, i) {\n return 'path-' + i;\n })\n .style('fill-opacity', 0)\n .on('mouseover', this.rolloverOn(args))\n .on('mouseout', this.rolloverOff(args))\n .on('mousemove', this.rolloverMove(args));\n\n if (args.data[0].length === 1) {\n point_mouseover(args, svg, args.data[0][0]);\n }\n\n return this;\n };\n\n this.rolloverOn = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n svg.selectAll('.mg-points circle')\n .classed('selected', false);\n\n //highlight active point\n var pts = svg.selectAll('.mg-points circle.path-' + i)\n .classed('selected', true);\n\n if (args.size_accessor) {\n pts.attr('r', function(di) {\n return args.scalefns.sizef(di) + args.active_point_size_increase;\n });\n } else {\n pts.attr('r', args.point_size + args.active_point_size_increase);\n }\n\n //trigger mouseover on all points for this class name in .linked charts\n if (args.linked && !MG.globals.link) {\n MG.globals.link = true;\n\n //trigger mouseover on matching point in .linked charts\n d3.selectAll('.mg-voronoi .path-' + i)\n .each(function() {\n d3.select(this).on('mouseover')(d, i);\n });\n }\n\n if (args.show_rollover_text) {\n point_mouseover(args, svg, d.data);\n }\n\n if (args.mouseover) {\n args.mouseover(d, i);\n }\n };\n };\n\n this.rolloverOff = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n if (args.linked && MG.globals.link) {\n MG.globals.link = false;\n\n d3.selectAll('.mg-voronoi .path-' + i)\n .each(function() {\n d3.select(this).on('mouseout')(d, i);\n });\n }\n\n //reset active point\n var pts = svg.selectAll('.mg-points circle')\n .classed('unselected', false)\n .classed('selected', false);\n\n if (args.size_accessor) {\n pts.attr('r', args.scalefns.sizef);\n } else {\n pts.attr('r', args.point_size);\n }\n\n //reset active data point text\n if (args.data[0].length > 1) mg_clear_mouseover_container(svg);\n\n if (args.mouseout) {\n args.mouseout(d, i);\n }\n };\n };\n\n this.rolloverMove = function(args) {\n return function(d, i) {\n if (args.mousemove) {\n args.mousemove(d, i);\n }\n };\n };\n\n this.update = function(args) {\n return this;\n };\n\n this.windowListeners = function() {\n mg_window_listeners(this.args);\n return this;\n };\n\n this.init(args);\n }\n\n var defaults = {\n y_padding_percentage: 0.05, // for categorical scales\n y_outer_padding_percentage: .2, // for categorical scales\n ygroup_padding_percentage: 0, // for categorical scales\n ygroup_outer_padding_percentage: 0, // for categorical scales\n x_padding_percentage: 0.05, // for categorical scales\n x_outer_padding_percentage: .2, // for categorical scales\n xgroup_padding_percentage: 0, // for categorical scales\n xgroup_outer_padding_percentage: 0, // for categorical scales\n y_categorical_show_guides: true,\n x_categorical_show_guides: true,\n buffer: 16,\n ls: false,\n lowess: false,\n point_size: 2.5,\n label_accessor: null,\n size_accessor: null,\n color_accessor: null,\n size_range: null, // when we set a size_accessor option, this array determines the size range, e.g. [1,5]\n color_range: null, // e.g. ['blue', 'red'] to color different groups of points\n size_domain: null,\n color_domain: null,\n active_point_size_increase: 1,\n color_type: 'number' // can be either 'number' - the color scale is quantitative - or 'category' - the color scale is qualitative.\n };\n\n MG.register('point', pointChart, defaults);\n}).call(this);\n\n(function() {\n 'use strict';\n\n // TODO add styles to stylesheet instead\n function scaffold(args) {\n var svg = mg_get_svg_child_of(args.target);\n // main margins\n svg.append('line')\n .attr('x1', 0)\n .attr('x2', args.width)\n .attr('y1', args.top)\n .attr('y2', args.top)\n .attr('stroke', 'black');\n svg.append('line')\n .attr('x1', 0)\n .attr('x2', args.width)\n .attr('y1', args.height-args.bottom)\n .attr('y2', args.height-args.bottom)\n .attr('stroke', 'black');\n\n svg.append('line')\n .attr('x1', args.left)\n .attr('x2', args.left)\n .attr('y1', 0)\n .attr('y2', args.height)\n .attr('stroke', 'black');\n\n svg.append('line')\n .attr('x1', args.width-args.right)\n .attr('x2', args.width-args.right)\n .attr('y1', 0)\n .attr('y2', args.height)\n .attr('stroke', 'black');\n\n // plot area margins\n svg.append('line')\n .attr('x1', 0)\n .attr('x2', args.width)\n .attr('y1', args.height-args.bottom-args.buffer)\n .attr('y2', args.height-args.bottom-args.buffer)\n .attr('stroke', 'gray');\n\n svg.append('line')\n .attr('x1', 0)\n .attr('x2', args.width)\n .attr('y1', args.top+args.buffer)\n .attr('y2', args.top+args.buffer)\n .attr('stroke', 'gray');\n\n svg.append('line')\n .attr('x1', args.left + args.buffer)\n .attr('x2', args.left + args.buffer)\n .attr('y1', 0)\n .attr('y2', args.height)\n .attr('stroke', 'gray');\n svg.append('line')\n .attr('x1', args.width -args.right - args.buffer)\n .attr('x2', args.width -args.right - args.buffer)\n .attr('y1', 0)\n .attr('y2', args.height)\n .attr('stroke', 'gray');\n }\n\n // barchart re-write.\n function mg_targeted_legend(args) {\n var labels;\n var plot = '';\n if (args.legend_target) {\n\n var div = d3.select(args.legend_target).append('div').classed('mg-bar-target-legend', true);\n \n if (args.orientation == 'horizontal') labels = args.scales.Y.domain()\n else labels = args.scales.X.domain();\n\n labels.forEach(function(label) {\n var outer_span = div.append('span').classed('mg-bar-target-element', true);\n outer_span.append('span')\n .classed('mg-bar-target-legend-shape', true)\n .style('color', args.scales.COLOR(label))\n .text('\\u25FC ');\n outer_span.append('span')\n .classed('mg-bar-target-legend-text', true)\n .text(label);\n\n });\n }\n }\n\n function legend_on_graph(svg, args) {\n // draw each element at the top right\n // get labels\n\n var labels;\n if (args.orientation=='horizontal') labels = args.scales.Y.domain()\n else labels = args.scales.X.domain();\n\n var lineCount = 0;\n var lineHeight = 1.1;\n var g = svg.append('g').classed(\"mg-bar-legend\", true);\n var textContainer = g.append('text');\n\n //\n\n textContainer\n .selectAll('*')\n .remove();\n textContainer\n .attr('width', args.right)\n .attr('height', 100)\n .attr('text-anchor', 'start');\n\n labels.forEach(function(label) {\n var sub_container = textContainer.append('tspan')\n .attr('x', mg_get_plot_right(args))\n .attr('y', args.height / 2)\n .attr('dy', (lineCount * lineHeight) + 'em');\n sub_container.append('tspan')\n .text('\\u25a0 ')\n .attr('fill', args.scales.COLOR(label))\n .attr('font-size', 20)\n sub_container.append('tspan')\n .text(label)\n .attr('font-weight', 300)\n .attr('font-size', 10);\n lineCount++;\n })\n\n // d.values.forEach(function (datum) {\n // formatted_y = mg_format_y_rollover(args, num, datum);\n\n // if (args.y_rollover_format !== null) {\n // formatted_y = number_rollover_format(args.y_rollover_format, datum, args.y_accessor);\n // } else {\n // formatted_y = args.yax_units + num(datum[args.y_accessor]);\n // }\n\n // sub_container = textContainer.append('tspan').attr('x', 0).attr('y', (lineCount * lineHeight) + 'em');\n // formatted_y = mg_format_y_rollover(args, num, datum);\n // mouseover_tspan(sub_container, '\\u2014 ')\n // .color(args, datum);\n // mouseover_tspan(sub_container, formatted_x + ' ' + formatted_y);\n\n // lineCount++;\n // });\n }\n\n function barChart(args) {\n this.args = args;\n\n this.init = function(args) {\n this.args = args;\n args.x_axis_type = mg_infer_type(args, 'x');\n args.y_axis_type = mg_infer_type(args, 'y');\n\n // this is specific to how rects work in svg, let's keep track of the bar orientation to\n // plot appropriately.\n if (args.x_axis_type == 'categorical') {\n args.orientation = 'vertical';\n } else if (args.y_axis_type == 'categorical') {\n args.orientation = 'horizontal';\n } else if (args.x_axis_type != 'categorical' && args.y_axis_type != 'categorical') {\n // histogram.\n args.orientation = 'vertical';\n }\n\n raw_data_transformation(args);\n\n process_point(args);\n init(args);\n\n var xMaker, yMaker;\n\n if (args.x_axis_type === 'categorical') {\n xMaker = MG.scale_factory(args)\n .namespace('x')\n .categoricalDomainFromData()\n .categoricalRangeBands([0, args.xgroup_height], args.xgroup_accessor === null);\n\n if (args.xgroup_accessor) {\n new MG.scale_factory(args)\n .namespace('xgroup')\n .categoricalDomainFromData()\n .categoricalRangeBands('bottom');\n\n } else {\n args.scales.XGROUP = function(d) {\n return mg_get_plot_left(args) };\n args.scalefns.xgroupf = function(d) {\n return mg_get_plot_left(args) };\n }\n\n args.scalefns.xoutf = function(d) {\n return args.scalefns.xf(d) + args.scalefns.xgroupf(d)\n };\n } else {\n xMaker = MG.scale_factory(args)\n .namespace('x')\n .inflateDomain(true)\n .zeroBottom(args.y_axis_type === 'categorical')\n .numericalDomainFromData((args.baselines || []).map(function(d) {\n return d[args.x_accessor] }))\n .numericalRange('bottom');\n\n args.scalefns.xoutf = args.scalefns.xf;\n }\n\n // y-scale generation. This needs to get simplified.\n if (args.y_axis_type === 'categorical') {\n yMaker = MG.scale_factory(args)\n .namespace('y')\n .zeroBottom(true)\n .categoricalDomainFromData()\n .categoricalRangeBands([0, args.ygroup_height], true);\n\n if (args.ygroup_accessor) {\n\n new MG.scale_factory(args)\n .namespace('ygroup')\n .categoricalDomainFromData()\n .categoricalRangeBands('left');\n\n } else {\n args.scales.YGROUP = function() {\n return mg_get_plot_top(args) };\n args.scalefns.ygroupf = function(d) {\n return mg_get_plot_top(args) };\n\n }\n args.scalefns.youtf = function(d) {\n return args.scalefns.yf(d) + args.scalefns.ygroupf(d) };\n\n } else {\n var baselines = (args.baselines || []).map(function(d) {\n return d[args.y_accessor] });\n\n yMaker = MG.scale_factory(args)\n .namespace('y')\n .inflateDomain(true)\n .zeroBottom(args.x_axis_type === 'categorical')\n .numericalDomainFromData(baselines)\n .numericalRange('left');\n\n args.scalefns.youtf = function(d) {\n return args.scalefns.yf(d) };\n }\n\n if (args.ygroup_accessor !== null) {\n args.ycolor_accessor = args.y_accessor;\n MG.scale_factory(args)\n .namespace('ycolor')\n .scaleName('color')\n .categoricalDomainFromData()\n .categoricalColorRange();\n }\n\n if (args.xgroup_accessor !== null) {\n args.xcolor_accessor = args.x_accessor;\n MG.scale_factory(args)\n .namespace('xcolor')\n .scaleName('color')\n .categoricalDomainFromData()\n .categoricalColorRange();\n }\n\n // if (args.ygroup_accessor !== null) {\n // MG.scale_factory(args)\n // .namespace('ygroup')\n // .categoricalDomainFromData()\n // .categoricalColorRange();\n // }\n\n new MG.axis_factory(args)\n .namespace('x')\n .type(args.x_axis_type)\n .zeroLine(args.y_axis_type === 'categorical')\n .position(args.x_axis_position)\n .draw();\n\n new MG.axis_factory(args)\n .namespace('y')\n .type(args.y_axis_type)\n .zeroLine(args.x_axis_type === 'categorical')\n .position(args.y_axis_position)\n .draw();\n\n //mg_categorical_group_color_scale(args);\n\n this.mainPlot();\n this.markers();\n this.rollover();\n this.windowListeners();\n //scaffold(args)\n\n return this;\n };\n\n this.mainPlot = function() {\n var svg = mg_get_svg_child_of(args.target);\n var data = args.data[0];\n var barplot = svg.select('g.mg-barplot');\n var fresh_render = barplot.empty();\n\n var bars;\n var predictor_bars;\n var pp, pp0;\n var baseline_marks;\n\n var perform_load_animation = fresh_render && args.animate_on_load;\n var should_transition = perform_load_animation || args.transition_on_update;\n var transition_duration = args.transition_duration || 1000;\n\n // draw the plot on first render\n if (fresh_render) {\n barplot = svg.append('g')\n .classed('mg-barplot', true);\n }\n\n bars = barplot.selectAll('.mg-bar')\n .data(data)\n .enter()\n .append('rect')\n .classed('mg-bar', true)\n .classed('default-bar', args.scales.hasOwnProperty('COLOR') ? false : true);\n\n // TODO - reimplement\n\n // reference_accessor {}\n\n // if (args.predictor_accessor) {\n // predictor_bars = barplot.selectAll('.mg-bar-prediction')\n // .data(data.filter(function(d) {\n // return d.hasOwnProperty(args.predictor_accessor) }));\n\n // predictor_bars.exit().remove();\n\n // predictor_bars.enter().append('rect')\n // .classed('mg-bar-prediction', true);\n // }\n\n // if (args.baseline_accessor) {\n // baseline_marks = barplot.selectAll('.mg-bar-baseline')\n // .data(data.filter(function(d) {\n // return d.hasOwnProperty(args.baseline_accessor) }));\n\n // baseline_marks.exit().remove();\n\n // baseline_marks.enter().append('line')\n // .classed('mg-bar-baseline', true);\n // }\n\n var appropriate_size;\n\n // setup transitions\n // if (should_transition) {\n // bars = bars.transition()\n // .duration(transition_duration);\n\n // if (predictor_bars) {\n // predictor_bars = predictor_bars.transition()\n // .duration(transition_duration);\n // }\n\n // if (baseline_marks) {\n // baseline_marks = baseline_marks.transition()\n // .duration(transition_duration);\n // }\n // }\n\n //appropriate_size = args.scales.Y_ingroup.rangeBand()/1.5;\n var length, width, length_type, width_type, length_coord, width_coord,\n length_scalefn, width_scalefn, length_scale, width_scale,\n length_accessor, width_accessor, length_coord_map, width_coord_map,\n length_map, width_map;\n\n var reference_length_map, reference_length_coord_fn;\n\n if (args.orientation == 'vertical') {\n length = 'height';\n width = 'width';\n length_type = args.y_axis_type;\n width_type = args.x_axis_type;\n length_coord = 'y';\n width_coord = 'x';\n length_scalefn = length_type == 'categorical' ? args.scalefns.youtf : args.scalefns.yf;\n width_scalefn = width_type == 'categorical' ? args.scalefns.xoutf : args.scalefns.xf;\n length_scale = args.scales.Y;\n width_scale = args.scales.X;\n length_accessor = args.y_accessor;\n width_accessor = args.x_accessor;\n\n length_coord_map = function(d) {\n var l;\n l = length_scalefn(d);\n if (d[length_accessor] < 0) {\n l = length_scale(0);\n }\n return l;\n }\n\n length_map = function(d) {\n return Math.abs(length_scalefn(d) - length_scale(0));\n }\n\n reference_length_map = function(d) {\n return Math.abs(length_scale(d[args.reference_accessor]) - length_scale(0));\n }\n\n reference_length_coord_fn = function(d){\n return length_scale(d[args.reference_accessor]);\n }\n }\n\n if (args.orientation == 'horizontal') {\n length = 'width';\n width = 'height';\n length_type = args.x_axis_type;\n width_type = args.y_axis_type;\n length_coord = 'x';\n width_coord = 'y';\n length_scalefn = length_type == 'categorical' ? args.scalefns.xoutf : args.scalefns.xf;\n width_scalefn = width_type == 'categorical' ? args.scalefns.youtf : args.scalefns.yf;\n length_scale = args.scales.X;\n width_scale = args.scales.Y;\n length_accessor = args.x_accessor;\n width_accessor = args.y_accessor;\n\n length_coord_map = function(d) {\n var l;\n l = length_scale(0);\n return l;\n }\n\n length_map = function(d) {\n return Math.abs(length_scalefn(d) - length_scale(0));\n }\n\n reference_length_map = function(d) {\n return Math.abs(length_scale(d[args.reference_accessor]) - length_scale(0));\n }\n\n reference_length_coord_fn = function(d){\n return length_scale(0);\n }\n }\n\n // if (perform_load_animation) {\n // bars.attr(length, 0);\n\n // if (predictor_bars) {\n // predictor_bars.attr(length, 0);\n // }\n\n // // if (baseline_marks) {\n // // baseline_marks.attr({\n // // x1: args.scales.X(0),\n // // x2: args.scales.X(0)\n // // });\n // // }\n // }\n\n bars.attr(length_coord, length_coord_map);\n\n // bars.attr(length_coord, 40)\n //bars.attr(width_coord, 70)\n\n\n\n bars.attr(width_coord, function(d) {\n var w;\n if (width_type == 'categorical') {\n w = width_scalefn(d);\n } else {\n w = width_scale(0);\n if (d[width_accessor] < 0) {\n w = width_scalefn(d);\n }\n }\n w = w - args.bar_thickness/2;\n return w;\n });\n\n if (args.scales.COLOR) {\n bars.attr('fill', args.scalefns.colorf)\n }\n\n bars\n .attr(length, length_map)\n .attr(width, function(d) {\n return args.bar_thickness;\n });\n\n\n\n\n if (args.reference_accessor !== null) {\n var reference_data = data.filter(function(d){\n return d.hasOwnProperty(args.reference_accessor);\n })\n var reference_bars = barplot.selectAll('.mg-categorical-reference')\n .data(reference_data)\n .enter()\n .append('rect');\n\n reference_bars\n .attr(length_coord, reference_length_coord_fn)\n .attr(width_coord, function(d) {\n return width_scalefn(d) - args.reference_thickness/2\n })\n .attr(length, reference_length_map)\n .attr(width, args.reference_thickness);\n }\n\n if (args.comparison_accessor !== null) {\n var comparison_thickness = null;\n if (args.comparison_thickness === null) {\n comparison_thickness = args.bar_thickness/2;\n } else {\n comparison_thickness = args.comparison_thickness;\n }\n\n\n var comparison_data = data.filter(function(d) {\n return d.hasOwnProperty(args.comparison_accessor);\n })\n var comparison_marks = barplot.selectAll('.mg-categorical-comparison')\n .data(comparison_data)\n .enter()\n .append('line');\n\n comparison_marks\n .attr(length_coord + '1', function(d){return length_scale(d[args.comparison_accessor])})\n .attr(length_coord + '2', function(d){return length_scale(d[args.comparison_accessor])})\n .attr(width_coord + '1', function(d){\n return width_scalefn(d) - comparison_thickness/2;\n })\n .attr(width_coord + '2', function(d) {\n return width_scalefn(d) + comparison_thickness/2;\n })\n .attr('stroke', 'black')\n .attr('stroke-width', args.comparison_width);\n }\n\n //bars.attr(width_coord, );\n // bars.attr('width', 50);\n // bars.attr('height', 50);\n // bars.attr('y', function(d){\n // var y = args.scales.Y(0);\n // if (d[args.y_accessor] < 0) {\n // y = args.scalefns.yf(d);\n // }\n // return y;\n // });\n\n // bars.attr('x', function(d){\n // return 40;\n // })\n\n // bars.attr('width', function(d){\n // return 100;\n // });\n\n // bars.attr('height', 100);\n\n // bars.attr('fill', 'black');\n // bars.attr('x', function(d) {\n // var x = args.scales.X(0);\n // if (d[args.x_accessor] < 0) {\n // x = args.scalefns.xf(d);\n // }\n // return x;\n // })\n // TODO - reimplement.\n // if (args.predictor_accessor) {\n // predictor_bars\n // .attr('x', args.scales.X(0))\n // .attr('y', function(d) {\n // return args.scalefns.ygroupf(d) + args.scalefns.yf(d) + args.scales.Y.rangeBand() * (7 / 16) // + pp0 * appropriate_size/(pp*2) + appropriate_size / 2;\n // })\n // .attr('height', args.scales.Y.rangeBand() / 8) //appropriate_size / pp)\n // .attr('width', function(d) {\n // return args.scales.X(d[args.predictor_accessor]) - args.scales.X(0);\n // });\n // }\n\n // TODO - reimplement.\n // if (args.baseline_accessor) {\n\n // baseline_marks\n // .attr('x1', function(d) {\n // return args.scales.X(d[args.baseline_accessor]); })\n // .attr('x2', function(d) {\n // return args.scales.X(d[args.baseline_accessor]); })\n // .attr('y1', function(d) {\n // return args.scalefns.ygroupf(d) + args.scalefns.yf(d) + args.scales.Y.rangeBand() / 4\n // })\n // .attr('y2', function(d) {\n // return args.scalefns.ygroupf(d) + args.scalefns.yf(d) + args.scales.Y.rangeBand() * 3 / 4\n // });\n // }\n if (args.legend || (args.color_accessor !== null && args.ygroup_accessor !== args.color_accessor)) {\n if (!args.legend_target) legend_on_graph(svg, args);\n else mg_targeted_legend(args);\n }\n return this;\n };\n\n this.markers = function() {\n markers(args);\n return this;\n };\n\n this.rollover = function() {\n var svg = mg_get_svg_child_of(args.target);\n var g;\n\n if (svg.selectAll('.mg-active-datapoint-container').nodes().length === 0) {\n mg_add_g(svg, 'mg-active-datapoint-container');\n }\n\n //remove the old rollovers if they already exist\n svg.selectAll('.mg-rollover-rect').remove();\n svg.selectAll('.mg-active-datapoint').remove();\n\n // get orientation\n var length, width, length_type, width_type, length_coord, width_coord,\n length_scalefn, width_scalefn, length_scale, width_scale,\n length_accessor, width_accessor;\n\n var length_coord_map, width_coord_map, length_map, width_map;\n\n if (args.orientation == 'vertical') {\n length = 'height';\n width = 'width';\n length_type = args.y_axis_type;\n width_type = args.x_axis_type;\n length_coord = 'y';\n width_coord = 'x';\n length_scalefn = length_type == 'categorical' ? args.scalefns.youtf : args.scalefns.yf;\n width_scalefn = width_type == 'categorical' ? args.scalefns.xoutf : args.scalefns.xf;\n length_scale = args.scales.Y;\n width_scale = args.scales.X;\n length_accessor = args.y_accessor;\n width_accessor = args.x_accessor;\n\n length_coord_map = function(d){\n return mg_get_plot_top(args);\n }\n\n length_map = function(d) {\n return args.height -args.top-args.bottom-args.buffer*2\n }\n }\n\n if (args.orientation == 'horizontal') {\n length = 'width';\n width = 'height';\n length_type = args.x_axis_type;\n width_type = args.y_axis_type;\n length_coord = 'x';\n width_coord = 'y';\n length_scalefn = length_type == 'categorical' ? args.scalefns.xoutf : args.scalefns.xf;\n width_scalefn = width_type == 'categorical' ? args.scalefns.youtf : args.scalefns.yf;\n length_scale = args.scales.X;\n width_scale = args.scales.Y;\n length_accessor = args.x_accessor;\n width_accessor = args.y_accessor;\n\n length_coord_map = function(d){\n var l;\n l = length_scale(0);\n return l;\n }\n\n length_map = function(d) {\n return args.width -args.left-args.right-args.buffer*2\n }\n }\n\n //rollover text\n var rollover_x, rollover_anchor;\n if (args.rollover_align === 'right') {\n rollover_x = args.width - args.right;\n rollover_anchor = 'end';\n } else if (args.rollover_align === 'left') {\n rollover_x = args.left;\n rollover_anchor = 'start';\n } else {\n rollover_x = (args.width - args.left - args.right) / 2 + args.left;\n rollover_anchor = 'middle';\n }\n\n svg.append('text')\n .attr('class', 'mg-active-datapoint')\n .attr('xml:space', 'preserve')\n .attr('x', rollover_x)\n .attr('y', args.top * 0.75)\n .attr('dy', '.35em')\n .attr('text-anchor', rollover_anchor);\n\n g = svg.append('g')\n .attr('class', 'mg-rollover-rect');\n\n //draw rollover bars\n var bars = g.selectAll(\".mg-bar-rollover\")\n .data(args.data[0]).enter()\n .append(\"rect\")\n .attr('class', 'mg-bar-rollover');\n\n bars.attr('opacity', 0)\n .attr(length_coord, length_coord_map)\n .attr(width_coord, function(d) {\n var w;\n if (width_type == 'categorical') {\n w = width_scalefn(d);\n } else {\n w = width_scale(0);\n if (d[width_accessor] < 0) {\n w = width_scalefn(d);\n }\n }\n w = w - args.bar_thickness/2;\n return w;\n });\n\n bars.attr(length, length_map)\n bars.attr(width, function(d) {\n return args.bar_thickness;\n });\n\n bars\n .on('mouseover', this.rolloverOn(args))\n .on('mouseout', this.rolloverOff(args))\n .on('mousemove', this.rolloverMove(args));\n\n return this;\n };\n\n this.rolloverOn = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n var label_accessor = this.is_vertical ? args.x_accessor : args.y_accessor;\n var data_accessor = this.is_vertical ? args.y_accessor : args.x_accessor;\n var label_units = this.is_vertical ? args.yax_units : args.xax_units;\n\n return function(d, i) {\n\n var fmt = MG.time_format(args.utc_time, '%b %e, %Y');\n var num = format_rollover_number(args);\n\n //highlight active bar\n var bar = svg.selectAll('g.mg-barplot .mg-bar')\n .filter(function(d, j) {\n return j === i;\n }).classed('active', true);\n\n if (args.scales.hasOwnProperty('COLOR')) {\n bar.attr('fill', d3.rgb(args.scalefns.colorf(d)).darker());\n } else {\n bar.classed('default-active', true);\n }\n\n //update rollover text\n if (args.show_rollover_text) {\n var mouseover = mg_mouseover_text(args, { svg: svg });\n var row = mouseover.mouseover_row();\n\n if (args.ygroup_accessor) row.text(d[args.ygroup_accessor] + ' ').bold();\n\n row.text(mg_format_x_mouseover(args, d));\n row.text(args.y_accessor + ': ' + d[args.y_accessor]);\n if (args.predictor_accessor || args.baseline_accessor) {\n row = mouseover.mouseover_row();\n\n if (args.predictor_accessor) row.text(mg_format_data_for_mouseover(args, d, null, args.predictor_accessor, false))\n if (args.baseline_accessor) row.text(mg_format_data_for_mouseover(args, d, null, args.baseline_accessor, false))\n }\n }\n if (args.mouseover) {\n args.mouseover(d, i);\n }\n };\n };\n\n this.rolloverOff = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n //reset active bar\n var bar = svg.selectAll('g.mg-barplot .mg-bar.active').classed('active', false);\n\n if (args.scales.hasOwnProperty('COLOR')) {\n bar.attr('fill', args.scalefns.colorf(d));\n } else {\n bar.classed('default-active', false);\n }\n\n //reset active data point text\n svg.select('.mg-active-datapoint')\n .text('');\n\n mg_clear_mouseover_container(svg);\n\n if (args.mouseout) {\n args.mouseout(d, i);\n }\n };\n };\n\n this.rolloverMove = function(args) {\n return function(d, i) {\n if (args.mousemove) {\n args.mousemove(d, i);\n }\n };\n };\n\n this.windowListeners = function() {\n mg_window_listeners(this.args);\n return this;\n };\n\n this.init(args);\n }\n\n var defaults = {\n y_padding_percentage: 0.05, // for categorical scales\n y_outer_padding_percentage: .2, // for categorical scales\n ygroup_padding_percentage: 0, // for categorical scales\n ygroup_outer_padding_percentage: 0, // for categorical scales\n x_padding_percentage: 0.05, // for categorical scales\n x_outer_padding_percentage: .2, // for categorical scales\n xgroup_padding_percentage: 0, // for categorical scales\n xgroup_outer_padding_percentage: 0, // for categorical scales\n buffer: 16,\n y_accessor: 'factor',\n x_accessor: 'value',\n reference_accessor: null,\n comparison_accessor: null,\n secondary_label_accessor: null,\n color_accessor: null,\n color_type: 'category',\n color_domain: null,\n reference_thickness: 1,\n comparison_width: 3,\n comparison_thickness: null,\n legend: false,\n legend_target: null,\n mouseover_align: 'right',\n baseline_accessor: null,\n predictor_accessor: null,\n predictor_proportion: 5,\n show_bar_zero: true,\n binned: true,\n truncate_x_labels: true,\n truncate_y_labels: true\n };\n\n MG.register('bar', barChart, defaults);\n\n}).call(this);\n\n/*\nData Tables\n\nAlong with histograms, bars, lines, and scatters, a simple data table can take you far.\nWe often just want to look at numbers, organized as a table, where columns are variables,\nand rows are data points. Sometimes we want a cell to have a small graphic as the main\ncolumn element, in which case we want small multiples. sometimes we want to\n\nvar table = New data_table(data)\n .target('div#data-table')\n .title({accessor: 'point_name', align: 'left'})\n .description({accessor: 'description'})\n .number({accessor: ''})\n\n*/\n\nMG.data_table = function(args) {\n 'use strict';\n this.args = args;\n this.args.standard_col = { width: 150, font_size: 12, font_weight: 'normal' };\n this.args.columns = [];\n this.formatting_options = [\n ['color', 'color'],\n ['font-weight', 'font_weight'],\n ['font-style', 'font_style'],\n ['font-size', 'font_size']\n ];\n\n this._strip_punctuation = function(s) {\n var punctuationless = s.replace(/[^a-zA-Z0-9 _]+/g, '');\n var finalString = punctuationless.replace(/ +?/g, '');\n return finalString;\n };\n\n this._format_element = function(element, value, args) {\n this.formatting_options.forEach(function(fo) {\n var attr = fo[0];\n var key = fo[1];\n if (args[key]) element.style(attr,\n typeof args[key] === 'string' ||\n typeof args[key] === 'number' ?\n args[key] : args[key](value));\n });\n };\n\n this._add_column = function(_args, arg_type) {\n var standard_column = this.args.standard_col;\n var args = merge_with_defaults(MG.clone(_args), MG.clone(standard_column));\n args.type = arg_type;\n this.args.columns.push(args);\n };\n\n this.target = function() {\n var target = arguments[0];\n this.args.target = target;\n return this;\n };\n\n this.title = function() {\n this._add_column(arguments[0], 'title');\n return this;\n };\n\n this.text = function() {\n this._add_column(arguments[0], 'text');\n return this;\n };\n\n this.bullet = function() {\n /*\n text label\n main value\n comparative measure\n any number of ranges\n\n additional args:\n no title\n xmin, xmax\n format: percentage\n xax_formatter\n */\n return this;\n };\n\n this.sparkline = function() {\n return this;\n };\n\n this.number = function() {\n this._add_column(arguments[0], 'number');\n return this;\n };\n\n this.display = function() {\n var args = this.args;\n\n chart_title(args);\n\n var target = args.target;\n var table = d3.select(target).append('table').classed('mg-data-table', true);\n var colgroup = table.append('colgroup');\n var thead = table.append('thead');\n var tbody = table.append('tbody');\n var this_column;\n var this_title;\n\n var tr, th, td_accessor, td_type, td_value, th_text, td_text, td;\n var col;\n var h;\n\n tr = thead.append('tr');\n\n for (h = 0; h < args.columns.length; h++) {\n var this_col = args.columns[h];\n td_type = this_col.type;\n th_text = this_col.label;\n th_text = th_text === undefined ? '' : th_text;\n th = tr.append('th')\n .style('width', this_col.width)\n .style('text-align', td_type === 'title' ? 'left' : 'right')\n .text(th_text);\n\n if (args.show_tooltips && this_col.description && mg_jquery_exists()) {\n th.append('i')\n .classed('fa', true)\n .classed('fa-question-circle', true)\n .classed('fa-inverse', true);\n\n $(th.node()).popover({\n html: true,\n animation: false,\n content: this_col.description,\n trigger: 'hover',\n placement: 'top',\n container: $(th.node())\n });\n }\n }\n\n for (h = 0; h < args.columns.length; h++) {\n col = colgroup.append('col');\n if (args.columns[h].type === 'number') {\n col.attr('align', 'char').attr('char', '.');\n }\n }\n\n for (var i = 0; i < args.data.length; i++) {\n tr = tbody.append('tr');\n for (var j = 0; j < args.columns.length; j++) {\n this_column = args.columns[j];\n td_accessor = this_column.accessor;\n td_value = td_text = args.data[i][td_accessor];\n td_type = this_column.type;\n\n if (td_type === 'number') {\n //td_text may need to be rounded\n if (this_column.hasOwnProperty('round') && !this_column.hasOwnProperty('format')) {\n // round according to the number value in this_column.round\n td_text = d3.format('0,.' + this_column.round + 'f')(td_text);\n }\n\n if (this_column.hasOwnProperty('value_formatter')) {\n // provide a function that formats the text according to the function this_column.format.\n td_text = this_column.value_formatter(td_text);\n }\n\n if (this_column.hasOwnProperty('format')) {\n // this is a shorthand for percentage formatting, and others if need be.\n // supported: 'percentage', 'count', 'temperature'\n\n if (this_column.round) {\n td_text = Math.round(td_text, this_column.round);\n }\n\n var this_format = this_column.format;\n var formatter;\n\n if (this_format === 'percentage') formatter = d3.format('.0%');\n if (this_format === 'count') formatter = d3.format(',.0f');\n if (this_format === 'temperature') formatter = function(t) {\n return t + '°'; };\n\n td_text = formatter(td_text);\n }\n\n if (this_column.hasOwnProperty('currency')) {\n // this is another shorthand for formatting according to a currency amount, which gets appended to front of number\n td_text = this_column.currency + td_text;\n }\n }\n\n td = tr.append('td')\n .classed('table-' + td_type, true)\n .classed('table-' + td_type + '-' + this._strip_punctuation(td_accessor), true)\n .attr('data-value', td_value)\n .style('width', this_column.width)\n .style('text-align', td_type === 'title' || td_type === 'text' ? 'left' : 'right');\n\n this._format_element(td, td_value, this_column);\n\n if (td_type === 'title') {\n this_title = td.append('div').text(td_text);\n this._format_element(this_title, td_text, this_column);\n\n if (args.columns[j].hasOwnProperty('secondary_accessor')) {\n td.append('div')\n .text(args.data[i][args.columns[j].secondary_accessor])\n .classed(\"secondary-title\", true);\n }\n } else {\n td.text(td_text);\n }\n }\n }\n\n return this;\n };\n\n return this;\n};\n\n(function() {\n 'use strict';\n\n function mg_missing_add_text(svg, args) {\n svg.selectAll('.mg-missing-text').data([args.missing_text])\n .enter().append('text')\n .attr('class', 'mg-missing-text')\n .attr('x', args.width / 2)\n .attr('y', args.height / 2)\n .attr('dy', '.50em')\n .attr('text-anchor', 'middle')\n .text(args.missing_text);\n }\n\n function mg_missing_x_scale(args) {\n args.scales.X = d3.scaleLinear()\n .domain([0, args.data.length])\n .range([mg_get_plot_left(args), mg_get_plot_right(args)]);\n args.scalefns.yf = function(di) {\n return args.scales.Y(di.y); };\n }\n\n function mg_missing_y_scale(args) {\n args.scales.Y = d3.scaleLinear()\n .domain([-2, 2])\n .range([args.height - args.bottom - args.buffer * 2, args.top]);\n args.scalefns.xf = function(di) {\n return args.scales.X(di.x); };\n }\n\n function mg_make_fake_data(args) {\n var data = [];\n for (var x = 1; x <= 50; x++) {\n data.push({ 'x': x, 'y': Math.random() - (x * 0.03) });\n }\n args.data = data;\n }\n\n function mg_add_missing_background_rect(g, args) {\n g.append('svg:rect')\n .classed('mg-missing-background', true)\n .attr('x', args.buffer)\n .attr('y', args.buffer + args.title_y_position * 2)\n .attr('width', args.width - args.buffer * 2)\n .attr('height', args.height - args.buffer * 2 - args.title_y_position * 2)\n .attr('rx', 15)\n .attr('ry', 15);\n }\n\n function mg_missing_add_line(g, args) {\n var line = d3.line()\n .x(args.scalefns.xf)\n .y(args.scalefns.yf)\n .curve(args.interpolate);\n\n g.append('path')\n .attr('class', 'mg-main-line mg-line1-color')\n .attr('d', line(args.data));\n }\n\n function mg_missing_add_area(g, args) {\n var area = d3.area()\n .x(args.scalefns.xf)\n .y0(args.scales.Y.range()[0])\n .y1(args.scalefns.yf)\n .curve(args.interpolate);\n\n g.append('path')\n .attr('class', 'mg-main-area mg-area1-color')\n .attr('d', area(args.data));\n }\n\n function mg_remove_all_children(args) {\n d3.select(args.target).selectAll('svg *').remove();\n }\n\n function mg_missing_remove_legend(args) {\n if (args.legend_target) {\n d3.select(args.legend_target).html('');\n }\n }\n\n function missingData(args) {\n this.init = function(args) {\n this.args = args;\n\n mg_init_compute_width(args);\n mg_init_compute_height(args);\n\n // create svg if one doesn't exist\n\n var container = d3.select(args.target);\n mg_raise_container_error(container, args);\n var svg = container.selectAll('svg');\n mg_remove_svg_if_chart_type_has_changed(svg, args);\n svg = mg_add_svg_if_it_doesnt_exist(svg, args);\n mg_adjust_width_and_height_if_changed(svg, args);\n mg_set_viewbox_for_scaling(svg, args);\n mg_remove_all_children(args);\n\n svg.classed('mg-missing', true);\n mg_missing_remove_legend(args);\n\n chart_title(args);\n\n // are we adding a background placeholder\n if (args.show_missing_background) {\n mg_make_fake_data(args);\n mg_missing_x_scale(args);\n mg_missing_y_scale(args);\n var g = mg_add_g(svg, 'mg-missing-pane');\n\n mg_add_missing_background_rect(g, args);\n mg_missing_add_line(g, args);\n mg_missing_add_area(g, args);\n }\n\n mg_missing_add_text(svg, args);\n\n this.windowListeners();\n\n return this;\n };\n\n this.windowListeners = function() {\n mg_window_listeners(this.args);\n return this;\n };\n\n this.init(args);\n }\n\n var defaults = {\n top: 40, // the size of the top margin\n bottom: 30, // the size of the bottom margin\n right: 10, // size of the right margin\n left: 0, // size of the left margin\n buffer: 8, // the buffer between the actual chart area and the margins\n legend_target: '',\n width: 350,\n height: 220,\n missing_text: 'Data currently missing or unavailable',\n scalefns: {},\n scales: {},\n show_tooltips: true,\n show_missing_background: true\n };\n\n MG.register('missing-data', missingData, defaults);\n}).call(this);\n\nfunction mg_process_scale_ticks(args, axis) {\n var accessor;\n var scale_ticks;\n var max;\n\n if (axis === 'x') {\n accessor = args.x_accessor;\n scale_ticks = args.scales.X.ticks(args.xax_count);\n max = args.processed.max_x;\n } else if (axis === 'y') {\n accessor = args.y_accessor;\n scale_ticks = args.scales.Y.ticks(args.yax_count)\n max = args.processed.max_y;\n }\n\n function log10(val) {\n if (val === 1000) {\n return 3;\n }\n if (val === 1000000) {\n return 7;\n }\n return Math.log(val) / Math.LN10;\n }\n\n if ((axis === 'x' && args.x_scale_type === 'log') || (axis === 'y' && args.y_scale_type === 'log')) {\n // get out only whole logs\n scale_ticks = scale_ticks.filter(function(d) {\n return Math.abs(log10(d)) % 1 < 1e-6 || Math.abs(log10(d)) % 1 > 1 - 1e-6;\n });\n }\n\n // filter out fraction ticks if our data is ints and if xmax > number of generated ticks\n var number_of_ticks = scale_ticks.length;\n\n // is our data object all ints?\n var data_is_int = true;\n args.data.forEach(function(d, i) {\n d.forEach(function(d, i) {\n if (d[accessor] % 1 !== 0) {\n data_is_int = false;\n return false;\n }\n });\n });\n\n if (data_is_int && number_of_ticks > max && args.format === 'count') {\n // remove non-integer ticks\n scale_ticks = scale_ticks.filter(function(d) {\n return d % 1 === 0;\n });\n }\n\n if (axis === 'x') {\n args.processed.x_ticks = scale_ticks;\n } else if (axis === 'y') {\n args.processed.y_ticks = scale_ticks;\n }\n}\n\nfunction raw_data_transformation(args) {\n 'use strict';\n\n // dupe our data so we can modify it without adverse effect\n args.data = MG.clone(args.data);\n\n // we need to account for a few data format cases:\n // #0 {bar1:___, bar2:___} // single object (for, say, bar charts)\n // #1 [{key:__, value:__}, ...] // unnested obj-arrays\n // #2 [[{key:__, value:__}, ...], [{key:__, value:__}, ...]] // nested obj-arrays\n // #3 [[4323, 2343],..] // unnested 2d array\n // #4 [[[4323, 2343],..] , [[4323, 2343],..]] // nested 2d array\n args.single_object = false; // for bar charts.\n args.array_of_objects = false;\n args.array_of_arrays = false;\n args.nested_array_of_arrays = false;\n args.nested_array_of_objects = false;\n\n // is the data object a nested array?\n\n if (is_array_of_arrays(args.data)) {\n args.nested_array_of_objects = args.data.map(function(d) {\n return is_array_of_objects_or_empty(d);\n }); // Case #2\n args.nested_array_of_arrays = args.data.map(function(d) {\n return is_array_of_arrays(d);\n }); // Case #4\n } else {\n args.array_of_objects = is_array_of_objects(args.data); // Case #1\n args.array_of_arrays = is_array_of_arrays(args.data); // Case #3\n }\n\n if (args.chart_type === 'line') {\n if (args.array_of_objects || args.array_of_arrays) {\n args.data = [args.data];\n }\n } else {\n if (!(mg_is_array(args.data[0]))) {\n args.data = [args.data];\n }\n }\n // if the y_accessor is an array, break it up and store the result in args.data\n mg_process_multiple_x_accessors(args);\n mg_process_multiple_y_accessors(args);\n\n // if user supplies keyword in args.color, change to arg.colors.\n // this is so that the API remains fairly sensible and legible.\n if (args.color !== undefined) {\n args.colors = args.color;\n }\n\n // if user has supplied args.colors, and that value is a string, turn it into an array.\n if (args.colors !== null && typeof args.colors === 'string') {\n args.colors = [args.colors];\n }\n\n // sort x-axis data\n if (args.chart_type === 'line' && args.x_sort === true) {\n for (var i = 0; i < args.data.length; i++) {\n args.data[i].sort(function(a, b) {\n return a[args.x_accessor] - b[args.x_accessor];\n });\n }\n }\n\n return this;\n}\n\nfunction mg_process_multiple_accessors(args, which_accessor) {\n // turns an array of accessors into ...\n if (mg_is_array(args[which_accessor])) {\n args.data = args.data.map(function(_d) {\n return args[which_accessor].map(function(ya) {\n return _d.map(function(di) {\n di = MG.clone(di);\n\n if (di[ya] === undefined) {\n return undefined;\n }\n\n di['multiline_' + which_accessor] = di[ya];\n return di;\n }).filter(function(di) {\n return di !== undefined;\n });\n });\n })[0];\n args[which_accessor] = 'multiline_' + which_accessor;\n }\n}\n\nfunction mg_process_multiple_x_accessors(args) {\n mg_process_multiple_accessors(args, 'x_accessor');\n}\n\nfunction mg_process_multiple_y_accessors(args) {\n mg_process_multiple_accessors(args, 'y_accessor');\n}\n\nMG.raw_data_transformation = raw_data_transformation;\n\nfunction process_line(args) {\n 'use strict';\n\n var time_frame;\n\n // do we have a time-series?\n var is_time_series = d3.sum(args.data.map(function(series) {\n return series.length > 0 && mg_is_date(series[0][args.x_accessor]);\n })) > 0;\n\n // are we replacing missing y values with zeros?\n if ((args.missing_is_zero || args.missing_is_hidden) && args.chart_type === 'line' && is_time_series) {\n for (var i = 0; i < args.data.length; i++) {\n // we need to have a dataset of length > 2, so if it's less than that, skip\n if (args.data[i].length <= 1) {\n continue;\n }\n\n var first = args.data[i][0];\n var last = args.data[i][args.data[i].length - 1];\n\n // initialize our new array for storing the processed data\n var processed_data = [];\n\n // we'll be starting from the day after our first date\n var start_date = MG.clone(first[args.x_accessor]).setDate(first[args.x_accessor].getDate() + 1);\n\n // if we've set a max_x, add data points up to there\n var from = (args.min_x) ? args.min_x : start_date;\n var upto = (args.max_x) ? args.max_x : last[args.x_accessor];\n\n time_frame = mg_get_time_frame((upto - from) / 1000);\n\n if (['four-days', 'many-days', 'many-months', 'years', 'default'].indexOf(time_frame) !== -1 && args.missing_is_hidden_accessor === null) {\n for (var d = new Date(from); d <= upto; d.setDate(d.getDate() + 1)) {\n var o = {};\n d.setHours(0, 0, 0, 0);\n\n // add the first date item, we'll be starting from the day after our first date\n if (Date.parse(d) === Date.parse(new Date(start_date))) {\n processed_data.push(MG.clone(args.data[i][0]));\n }\n\n // check to see if we already have this date in our data object\n var existing_o = null;\n args.data[i].forEach(function(val, i) {\n if (Date.parse(val[args.x_accessor]) === Date.parse(new Date(d))) {\n existing_o = val;\n\n return false;\n }\n });\n\n // if we don't have this date in our data object, add it and set it to zero\n if (!existing_o) {\n o[args.x_accessor] = new Date(d);\n o[args.y_accessor] = 0;\n o['_missing'] = true; //we want to distinguish between zero-value and missing observations\n processed_data.push(o);\n }\n\n // if the data point has, say, a 'missing' attribute set or if its\n // y-value is null identify it internally as missing\n else if (existing_o[args.missing_is_hidden_accessor] || existing_o[args.y_accessor] === null) {\n existing_o['_missing'] = true;\n processed_data.push(existing_o);\n }\n\n //otherwise, use the existing object for that date\n else {\n processed_data.push(existing_o);\n }\n }\n } else {\n for (var j = 0; j < args.data[i].length; j += 1) {\n var obj = MG.clone(args.data[i][j]);\n obj['_missing'] = args.data[i][j][args.missing_is_hidden_accessor];\n processed_data.push(obj);\n }\n }\n\n // update our date object\n args.data[i] = processed_data;\n }\n }\n\n return this;\n}\n\nMG.process_line = process_line;\n\nfunction process_histogram(args) {\n 'use strict';\n\n // if args.binned == false, then we need to bin the data appropriately.\n // if args.binned == true, then we need to make sure to compute the relevant computed data.\n // the outcome of either of these should be something in args.computed_data.\n // the histogram plotting function will be looking there for the data to plot.\n\n // we need to compute an array of objects.\n // each object has an x, y, and dx.\n\n // histogram data is always single dimension\n var our_data = args.data[0];\n\n var extracted_data;\n if (args.binned === false) {\n // use d3's built-in layout.histogram functionality to compute what you need.\n\n if (typeof(our_data[0]) === 'object') {\n // we are dealing with an array of objects. Extract the data value of interest.\n extracted_data = our_data\n .map(function(d) {\n return d[args.x_accessor];\n });\n } else if (typeof(our_data[0]) === 'number') {\n // we are dealing with a simple array of numbers. No extraction needed.\n extracted_data = our_data;\n } else {\n console.log('TypeError: expected an array of numbers, found ' + typeof(our_data[0]));\n return;\n }\n\n var hist = d3.histogram();\n if (args.bins) {\n hist.thresholds(args.bins);\n }\n\n var bins = hist(extracted_data);\n args.processed_data = bins.map(function(d) {\n return { 'x': d.x0, 'y': d.length };\n });\n } else {\n // here, we just need to reconstruct the array of objects\n // take the x accessor and y accessor.\n // pull the data as x and y. y is count.\n\n args.processed_data = our_data.map(function(d) {\n return { 'x': d[args.x_accessor], 'y': d[args.y_accessor] };\n });\n\n var this_pt;\n var next_pt;\n\n // we still need to compute the dx component for each data point\n for (var i = 0; i < args.processed_data.length; i++) {\n this_pt = args.processed_data[i];\n if (i === args.processed_data.length - 1) {\n this_pt.dx = args.processed_data[i - 1].dx;\n } else {\n next_pt = args.processed_data[i + 1];\n this_pt.dx = next_pt.x - this_pt.x;\n }\n }\n }\n\n // capture the original data and accessors before replacing args.data\n if (!args.processed) {\n args.processed = {};\n }\n args.processed.original_data = args.data;\n args.processed.original_x_accessor = args.x_accessor;\n args.processed.original_y_accessor = args.y_accessor;\n\n args.data = [args.processed_data];\n args.x_accessor = args.processed_x_accessor;\n args.y_accessor = args.processed_y_accessor;\n\n return this;\n}\n\nMG.process_histogram = process_histogram;\n\n// for use with bar charts, etc.\nfunction process_categorical_variables(args) {\n 'use strict';\n\n var extracted_data, processed_data = {},\n pd = [];\n //var our_data = args.data[0];\n var label_accessor = args.bar_orientation === 'vertical' ? args.x_accessor : args.y_accessor;\n var data_accessor = args.bar_orientation === 'vertical' ? args.y_accessor : args.x_accessor;\n\n return this;\n}\n\nMG.process_categorical_variables = process_categorical_variables;\n\nfunction process_point(args) {\n 'use strict';\n\n var data = args.data[0];\n var x = data.map(function(d) {\n return d[args.x_accessor];\n });\n var y = data.map(function(d) {\n return d[args.y_accessor];\n });\n\n if (args.least_squares) {\n args.ls_line = least_squares(x, y);\n }\n\n return this;\n}\n\nMG.process_point = process_point;\n\nfunction add_ls(args) {\n var svg = mg_get_svg_child_of(args.target);\n var data = args.data[0];\n var min_x = d3.min(data, function(d) {\n return d[args.x_accessor]; });\n var max_x = d3.max(data, function(d) {\n return d[args.x_accessor]; });\n\n d3.select(args.target).selectAll('.mg-least-squares-line').remove();\n\n svg.append('svg:line')\n .attr('x1', args.scales.X(min_x))\n .attr('x2', args.scales.X(max_x))\n .attr('y1', args.scales.Y(args.ls_line.fit(min_x)))\n .attr('y2', args.scales.Y(args.ls_line.fit(max_x)))\n .attr('class', 'mg-least-squares-line');\n}\n\nMG.add_ls = add_ls;\n\nfunction add_lowess(args) {\n var svg = mg_get_svg_child_of(args.target);\n var lowess = args.lowess_line;\n\n var line = d3.svg.line()\n .x(function(d) {\n return args.scales.X(d.x); })\n .y(function(d) {\n return args.scales.Y(d.y); })\n .interpolate(args.interpolate);\n\n svg.append('path')\n .attr('d', line(lowess))\n .attr('class', 'mg-lowess-line');\n}\n\nMG.add_lowess = add_lowess;\n\nfunction lowess_robust(x, y, alpha, inc) {\n // Used http://www.unc.edu/courses/2007spring/biol/145/001/docs/lectures/Oct27.html\n // for the clear explanation of robust lowess.\n\n // calculate the the first pass.\n var _l;\n var r = [];\n var yhat = d3.mean(y);\n var i;\n for (i = 0; i < x.length; i += 1) { r.push(1); }\n _l = _calculate_lowess_fit(x, y, alpha, inc, r);\n var x_proto = _l.x;\n var y_proto = _l.y;\n\n // Now, take the fit, recalculate the weights, and re-run LOWESS using r*w instead of w.\n\n for (i = 0; i < 100; i += 1) {\n r = d3.zip(y_proto, y).map(function(yi) {\n return Math.abs(yi[1] - yi[0]);\n });\n\n var q = d3.quantile(r.sort(), 0.5);\n\n r = r.map(function(ri) {\n return _bisquare_weight(ri / (6 * q));\n });\n\n _l = _calculate_lowess_fit(x, y, alpha, inc, r);\n x_proto = _l.x;\n y_proto = _l.y;\n }\n\n return d3.zip(x_proto, y_proto).map(function(d) {\n var p = {};\n p.x = d[0];\n p.y = d[1];\n return p;\n });\n}\n\nMG.lowess_robust = lowess_robust;\n\nfunction lowess(x, y, alpha, inc) {\n var r = [];\n for (var i = 0; i < x.length; i += 1) { r.push(1); }\n var _l = _calculate_lowess_fit(x, y, alpha, inc, r);\n}\n\nMG.lowess = lowess;\n\nfunction least_squares(x_, y_) {\n var x, y, xi, yi,\n _x = 0,\n _y = 0,\n _xy = 0,\n _xx = 0;\n\n var n = x_.length;\n if (mg_is_date(x_[0])) {\n x = x_.map(function(d) {\n return d.getTime();\n });\n } else {\n x = x_;\n }\n\n if (mg_is_date(y_[0])) {\n y = y_.map(function(d) {\n return d.getTime();\n });\n } else {\n y = y_;\n }\n\n var xhat = d3.mean(x);\n var yhat = d3.mean(y);\n var numerator = 0,\n denominator = 0;\n\n for (var i = 0; i < x.length; i++) {\n xi = x[i];\n yi = y[i];\n numerator += (xi - xhat) * (yi - yhat);\n denominator += (xi - xhat) * (xi - xhat);\n }\n\n var beta = numerator / denominator;\n var x0 = yhat - beta * xhat;\n\n return {\n x0: x0,\n beta: beta,\n fit: function(x) {\n return x0 + x * beta;\n }\n };\n}\n\nMG.least_squares = least_squares;\n\nfunction _pow_weight(u, w) {\n if (u >= 0 && u <= 1) {\n return Math.pow(1 - Math.pow(u, w), w);\n } else {\n return 0;\n }\n}\n\nfunction _bisquare_weight(u) {\n return _pow_weight(u, 2);\n}\n\nfunction _tricube_weight(u) {\n return _pow_weight(u, 3);\n}\n\nfunction _neighborhood_width(x0, xis) {\n return Array.max(xis.map(function(xi) {\n return Math.abs(x0 - xi);\n }));\n}\n\nfunction _manhattan(x1, x2) {\n return Math.abs(x1 - x2);\n}\n\nfunction _weighted_means(wxy) {\n var wsum = d3.sum(wxy.map(function(wxyi) {\n return wxyi.w; }));\n\n return {\n xbar: d3.sum(wxy.map(function(wxyi) {\n return wxyi.w * wxyi.x;\n })) / wsum,\n ybar: d3.sum(wxy.map(function(wxyi) {\n return wxyi.w * wxyi.y;\n })) / wsum\n };\n}\n\nfunction _weighted_beta(wxy, xbar, ybar) {\n var num = d3.sum(wxy.map(function(wxyi) {\n return Math.pow(wxyi.w, 2) * (wxyi.x - xbar) * (wxyi.y - ybar);\n }));\n\n var denom = d3.sum(wxy.map(function(wxyi) {\n return Math.pow(wxyi.w, 2) * Math.pow(wxyi.x - xbar, 2);\n }));\n\n return num / denom;\n}\n\nfunction _weighted_least_squares(wxy) {\n var ybar, xbar, beta_i, x0;\n\n var _wm = _weighted_means(wxy);\n\n xbar = _wm.xbar;\n ybar = _wm.ybar;\n\n var beta = _weighted_beta(wxy, xbar, ybar);\n\n return {\n beta: beta,\n xbar: xbar,\n ybar: ybar,\n x0: ybar - beta * xbar\n\n };\n}\n\nfunction _calculate_lowess_fit(x, y, alpha, inc, residuals) {\n // alpha - smoothing factor. 0 < alpha < 1/\n //\n //\n var k = Math.floor(x.length * alpha);\n\n var sorted_x = x.slice();\n\n sorted_x.sort(function(a, b) {\n if (a < b) {\n return -1; } else if (a > b) {\n return 1; }\n\n return 0;\n });\n\n var x_max = d3.quantile(sorted_x, 0.98);\n var x_min = d3.quantile(sorted_x, 0.02);\n\n var xy = d3.zip(x, y, residuals).sort();\n\n var size = Math.abs(x_max - x_min) / inc;\n\n var smallest = x_min;\n var largest = x_max;\n var x_proto = d3.range(smallest, largest, size);\n\n var xi_neighbors;\n var x_i, beta_i, x0_i, delta_i, xbar, ybar;\n\n // for each prototype, find its fit.\n var y_proto = [];\n\n for (var i = 0; i < x_proto.length; i += 1) {\n x_i = x_proto[i];\n\n // get k closest neighbors.\n xi_neighbors = xy.map(function(xyi) {\n return [\n Math.abs(xyi[0] - x_i),\n xyi[0],\n xyi[1],\n xyi[2]\n ];\n }).sort().slice(0, k);\n\n // Get the largest distance in the neighbor set.\n delta_i = d3.max(xi_neighbors)[0];\n\n // Prepare the weights for mean calculation and WLS.\n\n xi_neighbors = xi_neighbors.map(function(wxy) {\n return {\n w: _tricube_weight(wxy[0] / delta_i) * wxy[3],\n x: wxy[1],\n y: wxy[2]\n };\n });\n\n // Find the weighted least squares, obviously.\n var _output = _weighted_least_squares(xi_neighbors);\n\n x0_i = _output.x0;\n beta_i = _output.beta;\n\n //\n y_proto.push(x0_i + beta_i * x_i);\n }\n\n return { x: x_proto, y: y_proto };\n}\n\nfunction format_rollover_number(args) {\n var num;\n if (args.format === 'count') {\n num = function(d) {\n var is_float = d % 1 !== 0;\n var pf;\n\n if (is_float) {\n pf = d3.format(',.' + args.decimals + 'f');\n } else {\n pf = d3.format(',.0f');\n }\n\n // are we adding units after the value or before?\n if (args.yax_units_append) {\n return pf(d) + args.yax_units;\n } else {\n return args.yax_units + pf(d);\n }\n };\n } else {\n num = function(d_) {\n var fmt_string = (args.decimals ? '.' + args.decimals : '') + '%';\n var pf = d3.format(fmt_string);\n return pf(d_);\n };\n }\n return num;\n}\n\nvar time_rollover_format = function(f, d, accessor, utc) {\n var fd;\n if (typeof f === 'string') {\n fd = MG.time_format(utc, f)(d[accessor]);\n } else if (typeof f === 'function') {\n fd = f(d);\n } else {\n fd = d[accessor];\n }\n return fd;\n}\n\n// define our rollover format for numbers\nvar number_rollover_format = function(f, d, accessor) {\n var fd;\n if (typeof f === 'string') {\n fd = d3.format('s')(d[accessor]);\n } else if (typeof f === 'function') {\n fd = f(d);\n } else {\n fd = d[accessor];\n }\n return fd;\n}\n\nfunction mg_format_y_rollover(args, num, d) {\n var formatted_y;\n if (args.y_mouseover !== null) {\n if (args.aggregate_rollover) {\n formatted_y = number_rollover_format(args.y_mouseover, d, args.y_accessor);\n } else {\n formatted_y = number_rollover_format(args.y_mouseover, d, args.y_accessor);\n }\n } else {\n if (args.time_series) {\n if (args.aggregate_rollover) {\n formatted_y = num(d[args.y_accessor]);\n } else {\n formatted_y = args.yax_units + num(d[args.y_accessor]);\n }\n } else {\n formatted_y = args.y_accessor + ': ' + args.yax_units + num(d[args.y_accessor]);\n }\n }\n return formatted_y;\n}\n\nfunction mg_format_x_rollover(args, fmt, d) {\n var formatted_x;\n if (args.x_mouseover !== null) {\n if (args.time_series) {\n if (args.aggregate_rollover) {\n formatted_x = time_rollover_format(args.x_mouseover, d, 'key', args.utc);\n } else {\n formatted_x = time_rollover_format(args.x_mouseover, d, args.x_accessor, args.utc);\n }\n } else {\n formatted_x = number_rollover_format(args.x_mouseover, d, args.x_accessor);\n }\n } else {\n if (args.time_series) {\n var date;\n\n if (args.aggregate_rollover && args.data.length > 1) {\n date = new Date(d.key);\n } else {\n date = new Date(+d[args.x_accessor]);\n date.setDate(date.getDate());\n }\n\n formatted_x = fmt(date) + ' ';\n } else {\n formatted_x = args.x_accessor + ': ' + d[args.x_accessor] + ' ';\n }\n }\n return formatted_x;\n}\n\nfunction mg_format_data_for_mouseover(args, d, mouseover_fcn, accessor, check_time) {\n var formatted_data, formatter;\n var time_fmt = mg_get_rollover_time_format(args);\n if (typeof d[accessor] === 'string') {\n formatter = function(d) {\n return d;\n }\n } else {\n formatter = format_rollover_number(args);\n }\n\n if (mouseover_fcn !== null) {\n if (check_time) formatted_data = time_rollover_format(mouseover_fcn, d, accessor, args.utc);\n else formatted_data = number_rollover_format(mouseover_fcn, d, accessor);\n\n } else {\n if (check_time) formatted_data = time_fmt(new Date(+d[accessor])) + ' ';\n else formatted_data = (args.time_series ? '' : accessor + ': ') + formatter(d[accessor]) + ' ';\n }\n return formatted_data;\n}\n\nfunction mg_format_number_mouseover(args, d) {\n return mg_format_data_for_mouseover(args, d, args.x_mouseover, args.x_accessor, false);\n}\n\nfunction mg_format_x_mouseover(args, d) {\n return mg_format_data_for_mouseover(args, d, args.x_mouseover, args.x_accessor, args.time_series);\n}\n\nfunction mg_format_y_mouseover(args, d) {\n return mg_format_data_for_mouseover(args, d, args.y_mouseover, args.y_accessor, false);\n}\n\nfunction mg_format_x_aggregate_mouseover(args, d) {\n return mg_format_data_for_mouseover(args, d, args.x_mouseover, 'key', args.time_series)\n}\n\nMG.format_rollover_number = format_rollover_number;\n\n// http://bl.ocks.org/mbostock/3916621\nfunction path_tween(d1, precision) {\n return function() {\n var path0 = this,\n path1 = path0.cloneNode(),\n n0 = path0.getTotalLength() || 0,\n n1 = (path1.setAttribute(\"d\", d1), path1).getTotalLength() || 0;\n\n // Uniform sampling of distance based on specified precision.\n var distances = [0],\n i = 0,\n dt = precision / Math.max(n0, n1);\n while ((i += dt) < 1) distances.push(i);\n distances.push(1);\n\n // Compute point-interpolators at each distance.\n var points = distances.map(function(t) {\n var p0 = path0.getPointAtLength(t * n0),\n p1 = path1.getPointAtLength(t * n1);\n return d3.interpolate([p0.x, p0.y], [p1.x, p1.y]);\n });\n\n return function(t) {\n return t < 1 ? \"M\" + points.map(function(p) {\n return p(t);\n }).join(\"L\") : d1;\n };\n };\n}\n\nMG.path_tween = path_tween;\n\n// influenced by https://bl.ocks.org/tomgp/c99a699587b5c5465228\n\nfunction render_markup_for_server(callback) {\n var virtual_window = MG.virtual_window;\n var virtual_d3 = d3.select(virtual_window.document);\n var target = virtual_window.document.createElement('div');\n\n var original_d3 = global.d3;\n var original_window = global.window;\n var original_document = global.document;\n global.d3 = virtual_d3;\n global.window = virtual_window;\n global.document = virtual_window.document;\n\n var error;\n try {\n callback(target);\n } catch(e) {\n error = e;\n }\n\n global.d3 = original_d3;\n global.window = original_window;\n global.document = original_document;\n\n if (error) {\n throw error;\n }\n\n /* for some reason d3.select parses jsdom elements incorrectly\n * but it works if we wrap the element in a function.\n */\n return virtual_d3.select(function targetFn() {\n return target;\n }).html();\n}\n\nfunction render_markup_for_client(callback) {\n var target = document.createElement('div');\n callback(target);\n return d3.select(target).html();\n}\n\nfunction render_markup(callback) {\n switch(typeof window) {\n case 'undefined':\n return render_markup_for_server(callback);\n default:\n return render_markup_for_client(callback);\n }\n}\n\nfunction init_virtual_window(jsdom, force) {\n if (MG.virtual_window && !force) {\n return;\n }\n\n var doc = jsdom.jsdom({\n html: '',\n features: { QuerySelector: true }\n });\n MG.virtual_window = doc.defaultView;\n}\n\nMG.render_markup = render_markup;\nMG.init_virtual_window = init_virtual_window;\n\n// call this to add a warning icon to a graph and log an error to the console\nfunction error(args) {\n console.error('ERROR : ', args.target, ' : ', args.error);\n\n d3.select(args.target).select('.mg-chart-title')\n .append('tspan')\n .attr('class', 'fa fa-x fa-exclamation-circle mg-warning')\n .attr('dx', '0.3em')\n .text('\\uf06a');\n}\n\nfunction internal_error(args) {\n console.error('INTERNAL ERROR : ', args.target, ' : ', args.internal_error);\n}\n\nMG.error = error;\n\nreturn MG;\n}));\n","import * as d3 from 'd3'\nimport {jQuery as $} from 'jquery'\n\nexport default function AddBrushingCapability (MG) {\n\n /*\n The MIT License (MIT)\n\n Copyright (c) 2015 Dan de Havilland\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n */\n\n MG.line_brushing = {\n set_brush_as_base: function(target) {\n var svg = d3.select(target).select('svg'),\n current,\n history = brushHistory[target];\n\n svg.classed('mg-brushed', false);\n\n if (history) {\n history.brushed = false;\n\n current = history.current;\n history.original = current;\n\n args.min_x = current.min_x;\n args.max_x = current.max_x;\n args.min_y = current.min_y;\n args.max_y = current.max_y;\n\n history.steps = [];\n }\n },\n\n zoom_in: function(target, options) {\n\n },\n\n zoom_out: function(target, options) {\n\n }\n };\n\n /* helpers */\n function get_brush_interval(args) {\n var resolution = args.brushing_interval,\n interval;\n\n if (!resolution) {\n if (args.time_series) {\n resolution = d3.timeDay;\n } else {\n resolution = 1;\n }\n }\n\n // work with N as integer\n if (typeof resolution === 'number') {\n interval = {\n round: function(val) {\n return resolution * Math.round(val / resolution);\n },\n offset: function(val, count) {\n return val + (resolution * count);\n }\n };\n }\n // work with d3.time.[interval]\n else if (typeof resolution.round === 'function'\n && typeof resolution.offset === 'function' ) {\n interval = resolution;\n }\n else {\n console.warn('The `brushing_interval` provided is invalid. It must be either a number or expose both `round` and `offset` methods');\n }\n\n return interval;\n }\n\n function is_within_bounds(datum, args) {\n var x = +datum[args.x_accessor],\n y = +datum[args.y_accessor];\n\n return x >= (+args.processed.min_x || x)\n && x <= (+args.processed.max_x || x)\n && y >= (+args.processed.min_y || y)\n && y <= (+args.processed.max_y || y);\n }\n\n\n /**\n Brushing for line charts\n\n 1. hooks\n */\n\n var brushHistory = {},\n args;\n\n MG.add_hook('global.defaults', function(args) {\n // enable brushing unless it's explicitly disabled\n args.brushing = args.brushing !== false;\n if (args.brushing) {\n args.brushing_history = args.brushing_history !== false;\n args.aggregate_rollover = true;\n }\n });\n\n function brushing() {\n var chartContext = this;\n\n args = this.args;\n\n if (args.brushing === false) {\n return this;\n }\n\n if (!brushHistory[args.target] || !brushHistory[args.target].brushed) {\n brushHistory[args.target] = {\n brushed: false,\n steps: [],\n original: {\n min_x: +args.processed.min_x,\n max_x: +args.processed.max_x,\n min_y: +args.processed.min_y,\n max_y: +args.processed.max_y\n }\n };\n }\n\n var isDragging = false,\n mouseDown = false,\n originX,\n svg = d3.select(args.target).select('svg'),\n body = d3.select('body'),\n rollover = svg.select('.mg-rollover-rect, .mg-voronoi'),\n brushingGroup,\n extentRect;\n\n rollover.classed('mg-brush-container', true);\n\n brushingGroup = rollover.insert('g', '*')\n .classed('mg-brush', true);\n\n extentRect = brushingGroup.append('rect')\n .attr('opacity', 0)\n .attr('y', args.top)\n .attr('height', args.height - args.bottom - args.top - args.buffer)\n .classed('mg-extent', true);\n\n // mousedown, start area selection\n svg.on('mousedown', function() {\n mouseDown = true;\n isDragging = false;\n originX = d3.mouse(this)[0];\n svg.classed('mg-brushed', false);\n svg.classed('mg-brushing-in-progress', true);\n extentRect.attr({\n x: d3.mouse(this)[0],\n opacity: 0,\n width: 0\n });\n });\n\n // mousemove / drag, expand area selection\n svg.on('mousemove', function() {\n if (mouseDown) {\n isDragging = true;\n rollover.classed('mg-brushing', true);\n\n var mouseX = d3.mouse(this)[0],\n newX = Math.min(originX, mouseX),\n width = Math.max(originX, mouseX) - newX;\n\n extentRect\n .attr('x', newX)\n .attr('width', width)\n .attr('opacity', 1);\n }\n });\n\n // mouseup, finish area selection\n svg.on('mouseup', function() {\n mouseDown = false;\n svg.classed('mg-brushing-in-progress', false);\n\n var xScale = args.scales.X,\n yScale = args.scales.Y,\n flatData = [].concat.apply([], args.data),\n boundedData,\n yBounds,\n xBounds,\n extentX0 = +extentRect.attr('x'),\n extentX1 = extentX0 + (+extentRect.attr('width')),\n interval = get_brush_interval(args),\n offset = 0,\n mapDtoX = function(d) { return +d[args.x_accessor]; },\n mapDtoY = function(d) { return +d[args.y_accessor]; };\n\n // if we're zooming in: calculate the domain for x and y axes based on the selected rect\n if (isDragging) {\n isDragging = false;\n\n if (brushHistory[args.target].brushed) {\n brushHistory[args.target].steps.push({\n max_x: args.brushed_max_x || args.processed.max_x,\n min_x: args.brushed_min_x || args.processed.min_x,\n max_y: args.brushed_max_y || args.processed.max_y,\n min_y: args.brushed_min_y || args.processed.min_y\n });\n }\n\n brushHistory[args.target].brushed = true;\n\n boundedData = [];\n // is there at least one data point in the chosen selection? if not, increase the range until there is.\n var iterations = 0;\n while (boundedData.length === 0 && iterations <= flatData.length) {\n\n var xValX0 = xScale.invert(extentX0);\n var xValX1 = xScale.invert(extentX1);\n xValX0 = xValX0 instanceof Date ? xValX0 : interval.round(xValX0);\n xValX1 = xValX1 instanceof Date ? xValX1 : interval.round(xValX1);\n\n args.brushed_min_x = xValX0;\n args.brushed_max_x = Math.max(interval.offset(args.min_x, 1), xValX1);\n\n boundedData = flatData.filter(function(d) {\n var val = d[args.x_accessor];\n return val >= args.brushed_min_x && val <= args.brushed_max_x;\n });\n\n iterations++;\n }\n\n xBounds = d3.extent(boundedData, mapDtoX);\n args.brushed_min_x = +xBounds[0];\n args.brushed_max_x = +xBounds[1];\n xScale.domain(xBounds);\n\n yBounds = d3.extent(boundedData, mapDtoY);\n // add 10% padding on the y axis for better display\n // @TODO: make this an option\n args.brushed_min_y = yBounds[0] * 0.9;\n args.brushed_max_y = yBounds[1] * 1.1;\n yScale.domain(yBounds);\n }\n // zooming out on click, maintaining the step history\n else if (args.brushing_history) {\n if (brushHistory[args.target].brushed) {\n var previousBrush = brushHistory[args.target].steps.pop();\n if (previousBrush) {\n args.brushed_max_x = previousBrush.max_x;\n args.brushed_min_x = previousBrush.min_x;\n args.brushed_max_y = previousBrush.max_y;\n args.brushed_min_y = previousBrush.min_y;\n\n xBounds = [args.brushed_min_x, args.brushed_max_x];\n yBounds = [args.brushed_min_y, args.brushed_max_y];\n xScale.domain(xBounds);\n yScale.domain(yBounds);\n } else {\n brushHistory[args.target].brushed = false;\n\n delete args.brushed_max_x;\n delete args.brushed_min_x;\n delete args.brushed_max_y;\n delete args.brushed_min_y;\n\n xBounds = [\n brushHistory[args.target].original.min_x,\n brushHistory[args.target].original.max_x\n ];\n\n yBounds = [\n brushHistory[args.target].original.min_y,\n brushHistory[args.target].original.max_y\n ];\n }\n }\n }\n\n // has anything changed?\n if (xBounds && yBounds) {\n if (xBounds[0] < xBounds[1]) {\n // trigger the brushing callback\n\n var step = {\n min_x: xBounds[0],\n max_x: xBounds[1],\n min_y: yBounds[0],\n max_y: yBounds[1]\n };\n\n brushHistory[args.target].current = step;\n\n if (args.after_brushing) {\n args.after_brushing.apply(this, [step]);\n }\n }\n\n // redraw the chart\n if (!args.brushing_manual_redraw) {\n MG.data_graphic(args);\n }\n }\n });\n\n return this;\n }\n\n MG.add_hook('line.after_init', function(lineChart) {\n brushing.apply(lineChart);\n });\n\n function processXAxis(args, min_x, max_x) {\n if (args.brushing) {\n args.processed.min_x = args.brushed_min_x ? Math.max(args.brushed_min_x, min_x) : min_x;\n args.processed.max_x = args.brushed_max_x ? Math.min(args.brushed_max_x, max_x) : max_x;\n }\n }\n\n MG.add_hook('x_axis.process_min_max', processXAxis);\n\n function processYAxis(args) {\n if (args.brushing && (args.brushed_min_y || args.brushed_max_y)) {\n args.processed.min_y = args.brushed_min_y;\n args.processed.max_y = args.brushed_max_y;\n }\n }\n\n MG.add_hook('y_axis.process_min_max', processYAxis);\n\n function afterRollover(args) {\n if (args.brushing_history && brushHistory[args.target] && brushHistory[args.target].brushed) {\n var svg = d3.select(args.target).select('svg');\n svg.classed('mg-brushed', true);\n }\n }\n\n MG.add_hook('line.after_rollover', afterRollover);\n\n return ;\n}"]} \ No newline at end of file +{"version":3,"sources":["app/Augur.js","app/AugurAPI.js","app/AugurStats.js","app/components/BaseRepoActivityCard.vue","app/components/BaseRepoEcosystemCard.vue","app/components/ComparedRepoActivityCard.vue","app/components/AugurApp.vue","app/components/AugurCards.vue","app/components/AugurHeader.vue","app/components/SidebarControls.vue","app/components/charts/DependencyOverview.vue","app/components/charts/EmptyChart.vue","app/components/charts/LineChart.vue","app/include/kube/kube.js","app/include/metricsgraphics.js","app/include/mg_line_brushing.js"],"names":["Augur","queryString","require","window","jQuery","Vue","Vuex","AugurAPI","default","AugurRepos","AugurStats","$","AugurApp","use","augur","Store","state","baseRepo","comparedRepos","trailingAverage","startDate","Date","endDate","compare","byDate","mutations","setBaseRepo","payload","repo","Repo","url","toString","keepCompared","title","owner","name","history","pushState","addComparedRepo","push","location","search","setDates","parseInt","setCompare","reset","store","$mount","parsed","parse","arrayFormat","$store","commit","replace","comparedTo","forEach","hostURL","version","_version","_host","hostname","__cache","repoName","splitURL","split","length","Endpoint","endpoint","self","params","callback","btoa","created_at","now","Promise","resolve","reject","JSON","data","get","then","stringify","Timeseries","func","relativeTo","baselineRepo","commits","forks","issues","pulls","stars","tags","downloads","uniqueCommitters","pullsAcceptanceRate","issuesResponseTime","contributors","contributions","committerLocations","communityAge","linkingWebsites","busFactor","dependents","dependencies","dependencyStats","earliest","latest","Array","isArray","map","datum","convertDates","d","date","filter","key","convertKey","EARLIEST","value","ary","reduce","a","e","mean","flat","averageArray","distances","Math","sqrt","stddev","standardDeviation","variance","windowSizeInDays","rolling","averageWindow","i","lastFound","after","before","setDate","getDate","iter","average","slice","shift","baseline","baseData","compareData","config","undefined","period","base","rollingAverage","Object","keys","smaller","larger","result","toPush","x","stats","describe","newObj","zscore","from","arguments","Error","fn","jquery","Function","prototype","inherits","parent","F","f","prop","super","Kube","element","options","$element","opts","extend","defaults","namespace","$target","target","getInstance","hasTarget","type","args","call","splice","_fireCallback","_data","callbacks","isFunction","apply","events","eventNamespace","len","handler","Plugin","create","classname","pluginname","toLowerCase","method","val","each","$this","methodVal","error","autoload","arr","s","trim","join","autoloadQueue","startAutoload","MutationObserver","observer","mutation","newNodes","addedNodes","nodeType","startAutoloadOnce","observe","document","subtree","childList","$nodes","not","$el","indexOf","attr","watch","on","Animation","effect","completeCallback","prefixes","queue","start","isSlideEffect","setElementHeight","addToQueue","clean","animate","height","removeElementHeight","css","isHideableEffect","effects","inArray","isToggleEffect","storeHideClasses","hasClass","revertHideClasses","addClass","removeData","removeHideClass","removeClass","makeSimpleEffects","_callback","complete","proxy","makeComplete","make","event","one","off","animation","Detect","isMobile","test","navigator","userAgent","isDesktop","isMobileScreen","width","isTabletScreen","isDesktopScreen","FormData","app","set","formdata","appendForms","appendFields","$fields","str","append","$forms","formsData","serializeArray","serialize","Response","obj","item","parseItem","html","stripslashes","top","href","notify","Utils","disableBodyScroll","$body","windowWidth","innerWidth","documentElementRect","documentElement","getBoundingClientRect","right","abs","left","isOverflowing","body","clientWidth","scrollbarWidth","measureScrollbar","scrollDiv","createElement","className","offsetWidth","removeChild","enableBodyScroll","Message","closeSelector","closeEvent","animationOpen","animationClose","$close","find","close","stop","open","preventDefault","isOpened","onOpened","onClosed","Sticky","offset","offsetTop","getOffsetTop","load","scroll","isFix","fixed","unfixed","scrollTop","Toggleme","toggleEvent","text","toggle","revertText","storeText","setTimeout","replaceText","Offcanvas","direction","clickOutside","utils","detect","buildTargetWidth","buildAnimationDirection","getCloseLink","closeAll","pushBody","$elms","isTag","tagName","closest","pullBody","handleKeyboard","which","properties","Collapse","active","toggleClass","boxClass","hashes","currentHash","currentItem","$items","getItems","loadItems","$boxes","getBoxes","setActiveItem","el","getItem","hash","getItemBy","addActive","$box","$caret","$parent","removeActive","openAll","num","eq","Dropdown","caretUp","buildClose","buildCaret","buildMobileAnimation","disableEvents","getCaret","buildCaretPosition","innerHeight","toggleCaretOpen","toggleCaretClose","setPosition","shouldNotBeClosed","enableEvents","isNavigationFixed","getPlacement","getOffset","position","getPosition","coords","placement","leftFix","outerHeight","Tabs","equals","live","buildLiveTabs","tabsCollection","hashesCollection","$tabs","getTabs","getLocationHash","setItemHeight","toArray","collectItem","$tab","$layers","$liveTabsList","buildLiveItem","tab","$li","$a","index","getLiveItemId","getLiveItemTitle","first","next","fetchElement","prev","pushStateOpen","pushStateClose","isHash","minHeight","getItemMaxHeight","max","h","modalcurrent","modalwindow","show","modal","Modal","header","maxHeight","overlay","buildModal","$modal","$header","buildOverlay","$overlay","prepend","buildHeader","buildContent","findActions","resize","handleEnter","getData","ajax","getTime","cache","success","buildWidth","bottom","percent","match","buildPosition","windowHeight","buildHeight","padding","margin","modalHeight","handleEscape","setHeader","setContent","content","setWidth","getModal","getBody","getHeader","root","factory","define","amd","exports","module","MG","d3","global","convert","accessor","time_format","parse_time","timeParse","number","Number","utc","specifier","utcFormat","timeFormat","mg_jquery_exists","mg_get_rollover_time_format","fmt","processed","x_time_frame","utc_time","mg_data_in_plot_bounds","x_accessor","min_x","max_x","y_accessor","min_y","max_y","is_array","thing","is_function","is_empty_array","is_object","is_array_of_arrays","all_elements","sum","is_array_of_objects","is_array_of_objects_or_empty","pluck","count_array_elements","b","mg_get_bottom","mg_get_plot_bottom","buffer","mg_get_top","mg_get_plot_top","mg_get_left","mg_get_plot_left","mg_get_right","mg_get_plot_right","mg_exit_and_remove","elem","exit","remove","mg_selectAll_and_remove","svg","cl","selectAll","mg_add_g","classed","mg_remove_element","select","mg_make_rug","rug_class","mg_get_svg_child_of","all_data","mg_flatten_array","rug","enter","mg_add_color_accessor_to_rug","rug_mono_class","color_accessor","scalefns","colorf","mg_rotate_labels","labels","rotation_degree","dy","transform","mg_elements_are_overlapping","node","mg_is_horizontally_overlapping","mg_prevent_horizontal_overlap","newY","mg_prevent_vertical_overlap","sort","reverse","overlap_amount","label_i","label_j","j","mg_is_vertically_overlapping","sibling","element_bbox","sibling_bbox","mg_is_horiz_overlap","mg_infer_type","ns","testPoint","selector_or_node","flat_data","concat","mg_next_id","_next_elem_id","mg_target_ref","mg_normalize","HTMLElement","target_ref","getAttribute","setAttribute","console","warn","string","get_pixel_dimension","dimension","style","get_width","get_height","isNumeric","n","isNaN","parseFloat","isFinite","iterator","context","breaker","k","merge_with_defaults","source","number_of_values","values","has_values_below","has_too_many_zeros","zero_count","mg_is_date","mg_is_object","mg_is_array","mg_is_function","clone","copy","setTime","hasOwnProperty","arr_diff","seen","diff","warn_deprecation","message","untilVersion","trace","truncate_text","textObj","textString","bbox","textContent","getBBox","wrap_text","token","tspanAttrs","words","word","line","lineNumber","lineHeight","y","tspan","pop","getComputedTextLength","register","chartType","descriptor","charts","_hooks","add_hook","hooks","already_registered","hook","call_hook","constructor","globals","deprecations","rollover_callback","replacement","rollout_callback","x_rollover_format","y_rollover_format","show_years","xax_start_at_min","interpolate_tension","link","data_graphic","missing_is_zero","missing_is_hidden","missing_is_hidden_accessor","legend","legend_target","animate_on_load","title_y_position","center_title_full_width","full_width","full_height","small_height_threshold","small_width_threshold","xax_count","xax_tick_length","axes_not_compact","yax_count","yax_tick_length","x_extended_ticks","y_extended_ticks","y_scale_type","min_y_from_data","point_size","xax_units","x_label","x_sort","x_axis","y_axis","x_axis_position","y_axis_position","x_axis_type","y_axis_type","ygroup_accessor","xgroup_accessor","y_padding_percentage","y_outer_padding_percentage","ygroup_padding_percentage","ygroup_outer_padding_percentage","x_padding_percentage","x_outer_padding_percentage","xgroup_padding_percentage","xgroup_outer_padding_percentage","y_categorical_show_guides","x_categorical_show_guide","rotate_x_labels","rotate_y_labels","y_label","yax_units","yax_units_append","x_rug","y_rug","mouseover_align","x_mouseover","y_mouseover","transition_on_update","mouseover","click","show_rollover_text","show_confidence_band","xax_format","area","chart_type","decimals","format","inflator","linked","linked_format","list","baselines","markers","scales","european_clock","show_year_markers","show_secondary_x_label","interpolate","curveCatmullRom","alpha","custom_line_color_map","colors","max_data_size","aggregate_rollover","show_tooltips","selected_chart","deprecation","warned","Tooltip","enabled","timeout","hoverState","inState","init","VERSION","TRANSITION_DURATION","DEFAULTS","selector","template","trigger","delay","container","viewport","getOptions","$viewport","hover","focus","triggers","eventIn","eventOut","leave","_options","fixTitle","getDefaults","hide","getDelegateOptions","currentTarget","Event","tip","clearTimeout","isInStateTrue","hasContent","inDom","contains","ownerDocument","isDefaultPrevented","that","$tip","tipId","getUID","autoToken","autoPlace","detach","display","appendTo","insertAfter","pos","actualWidth","actualHeight","offsetHeight","orgPlacement","viewportDim","calculatedOffset","getCalculatedOffset","applyPlacement","prevHoverState","support","transition","emulateTransitionEnd","marginTop","marginLeft","setOffset","using","props","round","delta","getViewportAdjustedDelta","isVertical","arrowDelta","arrowOffsetPosition","replaceArrow","arrow","getTitle","removeAttr","$e","isBody","elRect","elOffset","outerDims","viewportPadding","viewportDimensions","topEdgeOffset","bottomEdgeOffset","leftEdgeOffset","rightEdgeOffset","o","prefix","random","getElementById","$arrow","enable","disable","toggleEnabled","destroy","option","old","tooltip","Constructor","noConflict","Popover","getContent","children","end","popover","chart_title","chartTitle","insert","description","$chartTitle","mg_add_scale_function","scalefcn_name","scale","inflation","di","mg_position","mg_cat_position","MGScale","scaleArgs","use_inflator","zero_bottom","scaleType","_namespace","namespace_accessor_name","scale_name","toUpperCase","scalefn_name","scaleName","inflateDomain","tf","zeroBottom","numericalDomainFromData","other_flat_data_arrays","illustrative_data","is_time_series","mg_min_max_numerical","time_scale","scaleUtc","scaleTime","scaleLog","scaleLinear","domain","categoricalDomain","scaleOrdinal","categoricalDomainFromData","categoricalVariables","scaleBand","numericalRange","range","categoricalRangeBands","halfway","paddingPercentage","outerPaddingPercentage","paddingInner","paddingOuter","bandwidth","categoricalRange","categoricalColorRange","schemeCategory20","schemeCategory10","clamp","yn","scale_factory","additional_data_arrays","dp","extents","extent","min_val","max_val","mg_force_xax_count_to_be_two","mg_categorical_group_color_scale","mg_add_color_categorical_scale","color","mg_get_categorical_domain","mg_get_color_domain","color_domain","color_type","mg_get_color_range","color_range","processScaleTicks","axis","scale_ticks","ticks","log10","log","LN10","number_of_ticks","data_is_int","rugPlacement","axisArgs","coordinates","x1","x2","rug_buffer_size","y1","y2","rimPlacement","tick_length","toFixed","labelPlacement","tickLength","dx","textAnchor","mg_compute_yax_format","mg_default_xax_format","selectXaxFormat","c","mg_default_bar_xax_format","secondaryLabels","g","time_series","mg_get_yformat_and_secondary_time_function","addSecondaryLabelElements","timeframe","yformat","secondary","time_frame","secondary_function","years","first_tick","X","yg","yearMarkerLine","yearMarkerText","textFcn","xAxisTextElement","addNumericalLabels","_d","addTickLines","ticksClass","extendedTicksClass","extendedTicks","initializeAxisRim","rim","initializeRug","rug_positions","categoricalLabelPlacement","group","groupScale","cat","categoricalLabels","nsClass","groupAccessor","group_g","groups","String","rotateLabels","categoricalGuides","scalef","groupf","alreadyPlotted","grs","last","x11","x21","y11","y21","x12","x22","y12","y22","zeroLine","mgDrawAxis","categorical","numerical","axisName","axisClass","label","show_bar_zero","mg_bar_add_zero_line","axisFactory","t","draw","axis_factory","yf","mg_change_y_extents_for_bars","my","min","trio","baseline_accessor","predictor_accessor","yax_format","pf","d_","r","Y","categorical_groups","YGROUP","set_min_max_y","buff","mg_y_domain_range","mg_define_y_scales","Y_axis","mg_add_y_label","mg_add_y_axis_rim","y_ticks","y1scale","y2scale","mg_add_y_axis_tick_lines","mg_add_y_axis_tick_labels","mg_process_scale_ticks","mg_add_categorical_labels","mg_add_group_label","mg_add_graphic_labels","mg_draw_group_lines","ygroup_height","mg_y_categorical_show_guides","ygroupf","y_axis_categorical","xf","mg_add_processed_object","mg_select_xax_format","mg_add_x_ticks","mg_add_x_tick_labels","mg_add_x_label","x_axis_categorical","additional_buffer","mg_add_categorical_scale","categorical_variables","mg_add_x_axis_categorical_labels","bar_outer_padding_percentage","truncate_x_labels","idx","mg_point_add_color_scale","mg_point_add_size_scale","min_size","max_size","size_domain","size_range","size_accessor","mg_get_size_domain","mg_get_size_range","size","x_label_nudge_x","mg_get_time_frame","mg_milisec_diff","mg_sec_diff","mg_day_diff","mg_four_days","mg_many_days","mg_many_months","mg_years","mg_get_time_format","main_time_format","mg_process_time_format","main_x_time_format","original_data","flattened","test_point_x","original_x_accessor","is_float","mg_add_x_axis_rim","mg_add_x_axis_tick_lines","x_ticks","last_i","mg_add_primary_x_axis_label","mg_add_secondary_x_axis_label","mg_add_secondary_x_axis_elements","timeDays","timeYears","mg_add_year_marker_line","mg_add_year_marker_text","mg_min_max_x_for_nonbars","mx","extent_x","mg_min_max_x_for_bars","mg_min_max_x_for_dates","yesterday","tomorrow","mg_min_max_x_for_numbers","mg_min_max_x_for_strings","mg_sort_through_data_type_and_set_x_min_max_accordingly","mg_merge_args_with_defaults","mg_is_time_series","first_elem","mg_init_compute_width","svg_width","mg_categorical_calculate_height","mg_init_compute_height","svg_height","mg_remove_svg_if_chart_type_has_changed","empty","mg_add_svg_if_it_doesnt_exist","mg_add_clip_path_for_plot_area","mg_adjust_width_and_height_if_changed","mg_set_viewbox_for_scaling","mg_remove_missing_classes_and_text","mg_remove_outdated_lines","nodes","array_full_series","lines_to_remove","num_of_new","num_of_existing","mg_raise_container_error","categoricalInitialization","mg_categorical_count_number_of_groups","mg_categorical_count_number_of_lanes","mg_categorical_calculate_group_length","mg_categorical_calculate_bar_thickness","accessor_string","total_bars","group_bars","bars_per_group","groupHeight","gh","step","bar_thickness","groupContribution","marginContribution","mg_barchart_extrapolate_group_and_thickness_from_height","mg_return_label","mg_remove_existing_markers","mg_in_range","mg_x_position","mg_x_position_fixed","_mg_x_pos","mg_y_position_fixed","_mg_y_pos","mg_place_annotations","checker","class_name","line_fcn","text_fcn","mg_place_markers","mg_place_marker_lines","mg_place_marker_text","mg_place_baselines","mg_place_baseline_lines","mg_place_baseline_text","gm","x_pos_fixed","lineclass","textclass","gb","y_pos","mg_clear_mouseover_container","mg_setup_mouseover_container","text_anchor","mouseover_x","active_datapoint","active_datapoint_y_nudge","y_position","yPos","mg_mouseover_tspan","bold","font_size","pts","mg_reset_text_container","textContainer","mg_mouseover_row","row_number","rargs","rrr","mg_mouseover_text","text_container","mouseover_row","MG_WindowResizeTracker","targets","Observer","WebKitMutationObserver","window_listener","parentNode","aspect","newWidth","remove_target","removeEventListener","add_target","addEventListener","targetNode","some","removedNodes","disconnect","mg_window_resize_tracker","mg_window_listeners","mg_if_aspect_ratio_resize_svg","dropdown","backdrop","is","getParent","isActive","clearMenus","relatedTarget","keydown","stopPropagation","desc","button_layout","feature_set","public_name","sorters","manual","manual_map","manual_callback","_strip_punctuation","punctuationless","finalString","manual_button","feature","button","features","feat","mapDtoF","dropdownLiAClick","manual_feature","mg_line_color_text","line_id","mg_line_graph_generators","plot","mg_add_line_generator","mg_add_area_generator","mg_add_flat_line_generator","mg_add_confidence_band_generator","existing_band","confidence_area","defined","y0","l","u","curve","flat_line","data_median","mg_add_confidence_band","which_line","confidenceBand","duration","mg_add_area","areas","display_area","appendChild","update_transition_duration","mg_default_color_for_path","this_path","mg_color_line","mg_add_line_element","median","mg_add_line","existing_line","lineTransition","attrTween","path_tween","mg_add_legend_element","this_legend","legend_text","anchor_point","anchor_orientation","legend_group","mg_plot_legend_if_legend_target","mg_add_legend_group","mg_remove_existing_line_rollover_elements","mg_add_rollover_circle","circle","mg_set_unique_line_id_for_each_series","mg_nest_data_for_voronoi","merge","mg_line_class_string","class_string","v","formatter","id","mg_add_voronoi_rollover","rollover_on","rollover_off","rollover_move","voronoi","polygons","mg_configure_voronoi_rollover","nest_data_for_aggregate_rollover","data_nested","nest","entries","entry","mg_add_aggregate_rollover","line_classes","lc","mg_line_class","mg_line_color_class","mg_rollover_id_class","mg_rollover_format_id","mg_configure_aggregate_rollover","mg_configure_singleton_rollover","mg_add_single_line_rollover","mg_is_singleton","rect","rect_first","__data__","mg_is_standard_multiline","mg_is_aggregated_rollover","mg_draw_all_line_elements","mg_remove_dangling_bands","this_data","mg_line_main_plot","use_data_y_min","continueWithDefault","mg_line_rollover_setup","graph","rolloverOn","rolloverOff","rolloverMove","mg_update_rollover_circle","mg_update_aggregate_rollover_circle","mg_update_generic_rollover_circle","mg_trigger_linked_mouseovers","mg_trigger_linked_mouseouts","datums","mg_remove_active_data_points_for_aggregate_rollover","mg_remove_active_data_points_for_generic_rollover","mg_remove_active_text","lineChart","internal_error","raw_data_transformation","process_line","mainPlot","rollover","windowListeners","row","mg_format_x_aggregate_mouseover","mg_format_x_mouseover","mg_format_y_mouseover","mouseout","mousemove","histogram","process_histogram","bar","bar_margin","format_rollover_number","mo","binned","bins","processed_x_accessor","processed_y_accessor","processed_dx_accessor","point_mouseover","mg_color_point_mouseover","mg_filter_out_plot_bounds","new_data","pointChart","process_point","xMaker","yMaker","xgroup_height","XGROUP","xgroupf","xoutf","youtf","colorScale","least_squares","add_ls","sizef","paths","active_point_size_increase","update","x_categorical_show_guides","ls","lowess","label_accessor","scaffold","mg_targeted_legend","div","orientation","outer_span","COLOR","legend_on_graph","lineCount","sub_container","barChart","ycolor_accessor","xcolor_accessor","barplot","fresh_render","bars","predictor_bars","pp","pp0","baseline_marks","perform_load_animation","should_transition","transition_duration","appropriate_size","length_type","width_type","length_coord","width_coord","length_scalefn","width_scalefn","length_scale","width_scale","length_accessor","width_accessor","length_coord_map","width_coord_map","length_map","width_map","reference_length_map","reference_length_coord_fn","reference_accessor","w","reference_data","reference_bars","reference_thickness","comparison_accessor","comparison_thickness","comparison_data","comparison_marks","comparison_width","rollover_x","rollover_anchor","rollover_align","is_vertical","data_accessor","label_units","rgb","darker","mg_format_data_for_mouseover","secondary_label_accessor","predictor_proportion","truncate_y_labels","data_table","standard_col","font_weight","columns","formatting_options","_format_element","fo","_add_column","_args","arg_type","standard_column","bullet","sparkline","table","colgroup","thead","tbody","this_column","this_title","tr","th","td_accessor","td_type","td_value","th_text","td_text","td","col","this_col","value_formatter","this_format","currency","secondary_accessor","mg_missing_add_text","missing_text","mg_missing_x_scale","mg_missing_y_scale","mg_make_fake_data","mg_add_missing_background_rect","mg_missing_add_line","mg_missing_add_area","mg_remove_all_children","mg_missing_remove_legend","missingData","show_missing_background","x_scale_type","single_object","array_of_objects","array_of_arrays","nested_array_of_arrays","nested_array_of_objects","mg_process_multiple_x_accessors","mg_process_multiple_y_accessors","mg_process_multiple_accessors","which_accessor","ya","series","processed_data","start_date","upto","setHours","existing_o","our_data","extracted_data","hist","thresholds","x0","this_pt","next_pt","original_y_accessor","process_categorical_variables","pd","bar_orientation","ls_line","fit","add_lowess","lowess_line","lowess_robust","inc","_l","yhat","_calculate_lowess_fit","x_proto","y_proto","zip","yi","q","quantile","ri","_bisquare_weight","p","x_","y_","xi","_x","_y","_xy","_xx","xhat","numerator","denominator","beta","_pow_weight","pow","_tricube_weight","_neighborhood_width","xis","_manhattan","_weighted_means","wxy","wsum","wxyi","xbar","ybar","_weighted_beta","denom","_weighted_least_squares","beta_i","_wm","residuals","floor","sorted_x","x_max","x_min","xy","smallest","largest","xi_neighbors","x_i","x0_i","delta_i","xyi","_output","fmt_string","time_rollover_format","fd","number_rollover_format","mg_format_y_rollover","formatted_y","mg_format_x_rollover","formatted_x","mouseover_fcn","check_time","formatted_data","time_fmt","mg_format_number_mouseover","d1","precision","path0","path1","cloneNode","n0","getTotalLength","n1","dt","points","p0","getPointAtLength","p1","render_markup_for_server","virtual_window","virtual_d3","original_d3","original_window","original_document","targetFn","render_markup_for_client","render_markup","init_virtual_window","jsdom","force","doc","QuerySelector","defaultView","AddBrushingCapability","line_brushing","set_brush_as_base","current","brushHistory","brushed","original","steps","zoom_in","zoom_out","get_brush_interval","resolution","brushing_interval","interval","timeDay","count","is_within_bounds","brushing","brushing_history","chartContext","isDragging","mouseDown","originX","brushingGroup","extentRect","mouse","opacity","mouseX","newX","xScale","yScale","flatData","boundedData","yBounds","xBounds","extentX0","extentX1","mapDtoX","mapDtoY","brushed_max_x","brushed_min_x","brushed_max_y","brushed_min_y","iterations","xValX0","invert","xValX1","previousBrush","after_brushing","brushing_manual_redraw","processXAxis","processYAxis","afterRollover"],"mappings":"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A;AACA;AACA;AACA;AACA;AAlCA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAvCA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAnCA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAvCA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3DA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3BA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAzDA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAhEA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3CA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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","file":"public/static/app.js","sourcesContent":["const queryString = require('query-string')\n\nexport default function Augur () {\n window.jQuery = require('jquery')\n window.Vue = require('vue')\n window.Vuex = require('vuex')\n let AugurAPI = require('AugurAPI').default\n window.AugurAPI = new AugurAPI()\n window.AugurRepos = {}\n window.AugurStats = require('AugurStats').default\n window.$ = window.jQuery\n\n let AugurApp = require('./components/AugurApp')\n\n Vue.use(Vuex)\n\n window.augur = new Vuex.Store({\n state: {\n baseRepo: null,\n comparedRepos: [],\n trailingAverage: 180,\n startDate: new Date(\"1 January 2005\"),\n endDate: new Date(),\n compare: \"each\",\n byDate: false,\n },\n mutations: {\n setBaseRepo (state, payload) {\n let repo = window.AugurAPI.Repo(payload.url)\n if (!window.AugurRepos[repo.toString()]) {\n window.AugurRepos[repo.toString()] = repo\n }\n state.baseRepo = repo.toString()\n if (!payload.keepCompared) {\n state.comparedRepos = []\n }\n let title = repo.owner + '/' + repo.name + '- Augur' \n let queryString = '?repo=' + repo.owner + '+' + repo.name\n window.history.pushState(null, title, queryString)\n },\n addComparedRepo (state, payload) {\n let repo = window.AugurAPI.Repo(payload.url)\n if (!window.AugurRepos[repo.toString()]) {\n window.AugurRepos[repo.toString()] = repo\n }\n state.comparedRepos.push(repo.toString())\n let title = 'Augur' \n let queryString = window.location.search + '&comparedTo[]=' + repo.owner + '+' + repo.name\n window.history.pushState(null, title, queryString)\n },\n setDates (state, payload) {\n if (payload.startDate) {\n state.startDate = new Date(payload.startDate)\n }\n if (payload.endDate) {\n state.endDate = new Date(payload.endDate)\n }\n if (payload.trailingAverage) {\n state.trailingAverage = parseInt(payload.trailingAverage, 10)\n }\n },\n setCompare (state, payload) {\n state.compare = payload.compare\n },\n reset (state) {\n state = {\n baseRepo: null,\n comparedRepos: [],\n trailingAverage: 180,\n startDate: new Date(\"1 January 2005\"),\n endDate: new Date(),\n compare: \"each\",\n byDate: false,\n }\n window.history.pushState(null, 'Augur', '/')\n } // end reset\n } // end mutations\n })\n\n AugurApp.store = window.augur\n window.AugurApp = new Vue(AugurApp).$mount('#app')\n\n // Load state from query string\n let parsed = queryString.parse(location.search, { arrayFormat: 'bracket' })\n if (parsed.repo) {\n window.AugurApp.$store.commit('setBaseRepo', { url: parsed.repo.replace(' ', '/') })\n }\n if (parsed.comparedTo) {\n parsed.comparedTo.forEach((repo) => {\n window.AugurApp.$store.commit('addComparedRepo', { url: repo.replace(' ', '/') })\n })\n }\n\n}","var $ = require('jquery')\n\nexport default class AugurAPI {\n constructor(hostURL, version) {\n this._version = version || 'unstable'\n this._host = hostURL || 'http://' + window.location.hostname + ':5000/'\n this.__cache = {}\n }\n\n Repo(owner, repoName) {\n\n if (repoName) {\n var repo = {owner: owner, name: repoName}\n } else if (owner) {\n let splitURL = owner.split('/')\n if (splitURL.length < 3) {\n var repo = {owner: splitURL[0], name: splitURL[1]}\n } else {\n var repo = {owner: splitURL[3], name: splitURL[4]}\n }\n }\n\n repo.toString = () => { return repo.owner + '/' + repo.name }\n\n var Endpoint = (endpoint) => {\n var self = this;\n var url = this._host + this._version + '/' + repo.owner + '/' + repo.name + '/' + endpoint;\n return function (params, callback) {\n if (self.__cache[btoa(url)]) {\n if (self.__cache[btoa(url)].created_at > Date.now() - 1000 * 60) {\n return new Promise((resolve, reject) => {\n resolve(JSON.parse(self.__cache[btoa(url)].data))\n })\n }\n }\n return $.get(url, params, callback).then((data) => {\n self.__cache[btoa(url)] = {\n created_at: Date.now(),\n data: JSON.stringify(data)\n }\n if (typeof callback === 'function') {\n callback(data)\n }\n return new Promise((resolve, reject) => {\n resolve(data)\n })\n })\n }\n }\n\n var Timeseries = (endpoint) => {\n let func = Endpoint('timeseries/' + endpoint)\n func.relativeTo = (baselineRepo, params, callback) => {\n var url = 'timeseries/' + endpoint + '/relative_to/' + baselineRepo.owner + '/' + baselineRepo.name;\n return Endpoint(url)()\n }\n return func\n }\n\n repo.commits = Timeseries('commits')\n repo.forks = Timeseries('forks')\n repo.issues = Timeseries('issues')\n repo.pulls = Timeseries('pulls')\n repo.stars = Timeseries('stargazers')\n repo.tags = Timeseries('tags')\n repo.downloads = Timeseries('downloads')\n repo.uniqueCommitters = Timeseries('unique_committers')\n\n\n repo.pullsAcceptanceRate = Endpoint('pulls/acceptance_rate')\n repo.issuesResponseTime = Endpoint('issues/response_time')\n repo.contributors = Endpoint('contributors')\n repo.contributions = Endpoint('contributions')\n repo.committerLocations = Endpoint('committer_locations')\n repo.communityAge = Endpoint('community_age')\n repo.linkingWebsites = Endpoint('linking_websites')\n repo.busFactor = Endpoint('bus_factor')\n repo.dependents = Endpoint('dependents')\n repo.dependencies = Endpoint('dependencies')\n repo.dependencyStats = Endpoint('dependency_stats')\n\n return repo\n\n }\n}\n","export default class AugurStats {\n\n static convertDates (data, earliest, latest) {\n earliest = earliest || new Date('01-01-2005')\n latest = latest || new Date()\n if (Array.isArray(data[0])) {\n data = data.map((datum) => {\n return AugurStats.convertDates(datum)\n })\n } else {\n \n data = data.map((d) => {\n d.date = new Date(d.date)\n return d\n }).filter((d) => {\n return earliest < d.date && d.date < latest\n })\n }\n return data\n }\n\n static convertKey (data, key) {\n if (Array.isArray(data[0])) {\n data = data.map((datum) => {\n return AugurStats.convertKey(datum, key)\n })\n } else {\n const EARLIEST = new Date('01-01-2005')\n data = data.map((d) => {\n d.value = d[key];\n return d;\n })\n }\n return data\n }\n\n static averageArray(ary) {\n return ary.reduce((a, e) => {return a + e}, 0) / (ary.length);\n }\n\n static standardDeviation(ary, key, mean) {\n let flat = ary.map((e) => {return e[key]})\n mean = mean || AugurStats.averageArray(flat)\n let distances = flat.map((e) => {\n return (e - mean) * (e - mean)\n })\n return Math.sqrt(AugurStats.averageArray(distances))\n }\n\n static describe(ary, key) {\n let flat = ary.map((e) => {return e[key]})\n let mean = AugurStats.averageArray(flat)\n let stddev = AugurStats.standardDeviation(ary, key, mean)\n let variance = stddev * stddev\n return {\n 'mean': mean,\n 'stddev': stddev,\n 'variance': variance\n }\n }\n\n static rollingAverage(data, key, windowSizeInDays) {\n key = key || 'value'\n windowSizeInDays = windowSizeInDays || 180\n let rolling = [];\n let averageWindow = [];\n let i = 0;\n let lastFound = -1;\n\n let after = new Date()\n let before = new Date()\n\n for (let date = new Date(data[0].date); date <= data[data.length - 1].date; date.setDate(date.getDate() + 1)) {\n \n after.setDate(date.getDate() - windowSizeInDays)\n\n if (averageWindow.length < windowSizeInDays) {\n for (; i < data.length && averageWindow.length <= windowSizeInDays; i++) {\n if (lastFound > -1) {\n for (let iter = new Date(data[lastFound].date); iter <= data[i].date; iter.setDate(iter.getDate() + 1)) {\n averageWindow.push( (data[i][key] + data[lastFound][key]) / 2 )\n }\n }\n lastFound = i\n }\n }\n\n let average = {date: new Date(date)}\n average[key] = AugurStats.averageArray(averageWindow.slice(0, windowSizeInDays));\n averageWindow.shift()\n rolling.push(average);\n }\n return rolling\n }\n\n static convertToPercentages(data, key, baseline) {\n if (!data) {\n return []\n }\n baseline = baseline || AugurStats.averageArray( data.map((e) => {return e[key]}) )\n data = data.map((datum) => {\n datum['value'] = (datum[key] / baseline)\n return datum\n })\n return data\n }\n\n static makeRelative(baseData, compareData, config) {\n\n config.byDate = (config.byDate != undefined)\n config.earliest = config.earliest || new Date('01-01-2005')\n config.latest = config.latest || new Date()\n config.period = config.period || 180\n\n let iter = {\n base: 0,\n compare: 0\n }\n let data = {}\n\n data['base'] = AugurStats.rollingAverage(\n AugurStats.convertDates(\n AugurStats.convertKey(\n baseData, \n Object.keys(baseData[0])[1]\n ), config.earliest, config.latest\n ), undefined, config.period) \n\n data['compare'] = AugurStats.rollingAverage(\n AugurStats.convertDates(\n AugurStats.convertKey(\n compareData, \n Object.keys(compareData[0])[1]\n ), config.earliest, config.latest\n ), undefined, config.period) \n\n let smaller = (data['base'][0].date < data['compare'][0].date) ? 'base' : 'compare'\n let larger = (data['base'][0].date < data['compare'][0].date) ? 'compare' : 'base'\n let result = []\n\n if (config.byDate) {\n for (; iter[smaller] < data[smaller].length; iter[smaller]++) {\n if (data['base'].date == data['compare'].date) {\n break\n }\n }\n }\n\n while (iter['base'] < data['base'].length && iter['compare'] < data['compare'].length) {\n let toPush = {\n value: data['compare'][iter.compare].value / data['base'][iter.base].value,\n }\n if (config.byDate) {\n toPush.date = data['base'][iter.base].date\n } else {\n toPush.x = iter.base\n }\n result.push(toPush)\n iter['base']++\n iter['compare']++\n }\n\n return result\n }\n\n static zscores(data, key) {\n key = key || 'value'\n let stats = AugurStats.describe(data, key)\n return data.map((e) => {\n let newObj = {}\n if (e.date) {\n newObj.date = new Date(e.date)\n }\n let zscore = ((e[key] - stats['mean']) / stats['stddev'])\n newObj.value = zscore\n return newObj\n })\n }\n\n static combine() {\n return Array.from(arguments)\n }\n\n}",";(function(){\n'use strict';\n\nvar _LineChart = require('./charts/LineChart');\n\nvar _LineChart2 = _interopRequireDefault(_LineChart);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n components: {\n LineChart: _LineChart2.default\n },\n computed: {\n repo: function repo() {\n return this.$store.state.repo;\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('h1',[_vm._v(\"Activity\")]),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.$store.state.baseRepo))]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"commits\",\"title\":\"Commits / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"forks\",\"title\":\"Forks / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"issues\",\"title\":\"Issues / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-6\"},[_c('line-chart',{attrs:{\"source\":\"pulls\",\"title\":\"Pulls Requests / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Contributors\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"col col-6\"},[_c('line-chart',{attrs:{\"source\":\"uniqueCommitters\",\"title\":\"Unique Committers\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Contributors\",\"disableRollingAverage\":\"1\"}})],1)]),_vm._v(\" \"),_vm._m(0,false,false)])}\n__vue__options__.staticRenderFns = [function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('small',[_vm._v(\"Data provided by \"),_c('a',{attrs:{\"href\":\"http://ghtorrent.org/msr14.html\"}},[_vm._v(\"GHTorrent\")]),_vm._v(\" \"),_c('span',{staticClass:\"ghtorrent-version\"}),_vm._v(\" and the \"),_c('a',{attrs:{\"href\":\"https://developer.github.com/\"}},[_vm._v(\"GitHub API\")])])}]\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-7655e5a2\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-7655e5a2\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _LineChart = require('./charts/LineChart');\n\nvar _LineChart2 = _interopRequireDefault(_LineChart);\n\nvar _DependencyOverview = require('./charts/DependencyOverview');\n\nvar _DependencyOverview2 = _interopRequireDefault(_DependencyOverview);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n components: {\n LineChart: _LineChart2.default,\n DependencyOverview: _DependencyOverview2.default\n },\n computed: {\n repo: function repo() {\n return this.$store.state.repo;\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('h1',[_vm._v(\"Ecosystem\")]),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.$store.state.baseRepo))]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"downloads\",\"title\":\"Downloads / Day\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"stars\",\"title\":\"Stars / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('dependency-overview')],1)])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-2a4aa320\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-2a4aa320\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _LineChart = require('./charts/LineChart');\n\nvar _LineChart2 = _interopRequireDefault(_LineChart);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n props: ['comparedTo'],\n components: {\n LineChart: _LineChart2.default\n },\n computed: {\n repo: function repo() {\n return this.$store.state.repo;\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('div',{class:{ hidden: !this.repo },attrs:{\"id\":\"base-template\"}}),_vm._v(\" \"),_c('h1',[_vm._v(\"Activity Comparison\")]),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.comparedTo)+\" compared to \"+_vm._s(_vm.$store.state.baseRepo))]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"timeseries/forks\",\"title\":\"Forks / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"forks\",\"title\":\"Forks / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"issues\",\"title\":\"Issues / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"pullsAcceptanceRate\",\"title\":\"Pull Requests Created to Closed Ratio / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"uniqueCommitters\",\"title\":\"Unique Committers\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Contributors\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_vm._m(0,false,false)])}\n__vue__options__.staticRenderFns = [function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('small',[_vm._v(\"Data provided by \"),_c('a',{attrs:{\"href\":\"http://ghtorrent.org/msr14.html\"}},[_vm._v(\"GHTorrent\")]),_vm._v(\" \"),_c('span',{staticClass:\"ghtorrent-version\"}),_vm._v(\" and the \"),_c('a',{attrs:{\"href\":\"https://developer.github.com/\"}},[_vm._v(\"GitHub API\")])])}]\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-7c1c00fd\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-7c1c00fd\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _AugurHeader = require('./AugurHeader.vue');\n\nvar _AugurHeader2 = _interopRequireDefault(_AugurHeader);\n\nvar _SidebarControls = require('./SidebarControls.vue');\n\nvar _SidebarControls2 = _interopRequireDefault(_SidebarControls);\n\nvar _AugurCards = require('./AugurCards.vue');\n\nvar _AugurCards2 = _interopRequireDefault(_AugurCards);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n components: {\n 'augur-header': _AugurHeader2.default,\n SidebarControls: _SidebarControls2.default,\n 'augur-cards': _AugurCards2.default\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('augur-header'),_vm._v(\" \"),_c('div',{staticClass:\"content\"},[_c('sidebar-controls'),_vm._v(\" \"),_c('augur-cards')],1)],1)}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-f1292d0e\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-f1292d0e\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _BaseRepoActivityCard = require('./BaseRepoActivityCard');\n\nvar _BaseRepoActivityCard2 = _interopRequireDefault(_BaseRepoActivityCard);\n\nvar _BaseRepoEcosystemCard = require('./BaseRepoEcosystemCard');\n\nvar _BaseRepoEcosystemCard2 = _interopRequireDefault(_BaseRepoEcosystemCard);\n\nvar _ComparedRepoActivityCard = require('./ComparedRepoActivityCard');\n\nvar _ComparedRepoActivityCard2 = _interopRequireDefault(_ComparedRepoActivityCard);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n components: {\n BaseRepoActivityCard: _BaseRepoActivityCard2.default,\n BaseRepoEcosystemCard: _BaseRepoEcosystemCard2.default,\n ComparedRepoActivityCard: _ComparedRepoActivityCard2.default\n },\n computed: {\n baseRepo: function baseRepo() {\n return this.$store.state.baseRepo;\n },\n comparedRepos: function comparedRepos() {\n return this.$store.state.comparedRepos;\n }\n },\n methods: {\n onRepo: function onRepo(e) {\n this.$store.commit('setBaseRepo', {\n url: e.target.value\n });\n },\n onCompare: function onCompare(e) {\n this.$store.commit('addComparedRepo', {\n url: e.target.value\n });\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"cards\",staticClass:\"content\"},[_c('section',{class:{ hidden: _vm.baseRepo, unmaterialized: true }},[_c('h3',[_vm._v(\"Enter a GitHub URL to get started\")]),_vm._v(\" \"),_c('input',{staticClass:\"search reposearch\",attrs:{\"type\":\"text\",\"placeholder\":\"GitHub URL\"},on:{\"change\":_vm.onRepo}})]),_vm._v(\" \"),_c('div',{class:{ hidden: !_vm.baseRepo }},[_c('base-repo-activity-card'),_vm._v(\" \"),_c('base-repo-ecosystem-card')],1),_vm._v(\" \"),_vm._l((_vm.comparedRepos),function(repo){return _c('div',{class:{ hidden: !_vm.comparedRepos.length },attrs:{\"id\":\"comparisonCards\"}},[_c('compared-repo-activity-card',{attrs:{\"comparedTo\":repo}})],1)}),_vm._v(\" \"),_c('section',{class:{ hidden: !_vm.baseRepo, unmaterialized: true }},[_c('h3',[_vm._v(\"Compare repository\")]),_vm._v(\" \"),_c('input',{staticClass:\"search reposearch\",attrs:{\"type\":\"text\",\"placeholder\":\"GitHub URL\"},on:{\"change\":_vm.onCompare}})])],2)}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-323615bb\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-323615bb\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nmodule.exports = {\n methods: {\n onRepo: function onRepo(e) {\n this.$store.commit('setBaseRepo', {\n url: e.target.value\n });\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('header',{staticClass:\"hide-print\"},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"row\"},[_vm._m(0,false,false),_vm._v(\" \"),_c('div',{staticClass:\"col col-5 push-right\"},[_c('div',{staticClass:\"form-item\"},[_c('input',{staticClass:\"search reposearch\",attrs:{\"type\":\"text\",\"name\":\"headersearch\",\"placeholder\":\"GitHub URL\"},on:{\"change\":_vm.onRepo}})])])])])])}\n__vue__options__.staticRenderFns = [function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"col col-4\"},[_c('img',{attrs:{\"src\":\"static/logo.png\",\"id\":\"logo\",\"alt\":\"CHAOSS: Community Health Analytics for Open Source Software\"}})])}]\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-30d34965\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-30d34965\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nmodule.exports = {\n methods: {\n onStartDateChange: function onStartDateChange(e) {\n var _this = this;\n\n if (this.startDateTimeout) {\n clearTimeout(this.startDateTimeout);\n }\n this.startDateTimeout = setTimeout(function () {\n _this.$store.commit('setDates', {\n startDate: e.target.value\n });\n }, 500);\n },\n onEndDateChange: function onEndDateChange(e) {\n var _this2 = this;\n\n if (this.endDateTimeout) {\n clearTimeout(this.endDateTimeout);\n delete this.endDateTimeout;\n }\n this.endDateTimeout = setTimeout(function () {\n _this2.$store.commit('setDates', {\n endDate: e.target.value\n });\n }, 500);\n },\n onTrailingAverageChange: function onTrailingAverageChange(e) {\n this.$store.commit('setDates', {\n trailingAverage: e.target.value\n });\n },\n onCompareChange: function onCompareChange(e) {\n this.$store.commit('setCompare', {\n compare: e.target.value\n });\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"row\",attrs:{\"id\":\"controls\"}},[_c('div',{staticClass:\"col col-12\"},[_c('div',{staticClass:\"form\"},[_c('h4',[_vm._v(\"Base Repository\")]),_vm._v(\" \"),_c('div',{staticClass:\"form-item\"},[_c('label',[_vm._v(\"Start Date \"),_c('input',{attrs:{\"type\":\"date\"},on:{\"change\":_vm.onStartDateChange}})])]),_vm._v(\" \"),_c('div',{staticClass:\"form-item\"},[_c('label',[_vm._v(\"End Date \"),_c('input',{attrs:{\"type\":\"date\"},on:{\"change\":_vm.onEndDateChange}})])]),_vm._v(\" \"),_c('div',{staticClass:\"form-item\"},[_c('label',[_vm._v(\"Trailing Average\")]),_vm._v(\" \"),_c('div',{staticClass:\"append\"},[_c('input',{attrs:{\"type\":\"number\",\"min\":\"2\",\"id\":\"averagetimespan\",\"value\":\"180\"},on:{\"change\":_vm.onTrailingAverageChange}}),_c('span',[_vm._v(\"days\")])])]),_vm._v(\" \"),_c('h4',[_vm._v(\"Comparisons\")]),_vm._v(\" \"),_c('div',{staticClass:\"form-item form-checkboxes\"},[_c('label',{staticClass:\"checkbox\"},[_c('input',{attrs:{\"name\":\"comparebaseline\",\"value\":\"each\",\"checked\":\"\",\"type\":\"radio\"},on:{\"change\":_vm.onCompareChange}}),_vm._v(\"Z-score trailing average\")]),_vm._v(\" \"),_c('label',{staticClass:\"checkbox\"},[_c('input',{attrs:{\"name\":\"comparebaseline\",\"value\":\"percentage\",\"type\":\"radio\"},on:{\"change\":_vm.onCompareChange}}),_vm._v(\"100% is the compared project\")])])])])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-0df51156\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-0df51156\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _AugurStats = require('../../AugurStats');\n\nvar _AugurStats2 = _interopRequireDefault(_AugurStats);\n\nvar _d = require('d3');\n\nvar d3 = _interopRequireWildcard(_d);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n props: [],\n computed: {\n repo: function repo() {\n return this.$store.state.baseRepo;\n },\n dependencies: function dependencies() {\n var _this = this;\n\n if (this.repo) {\n window.AugurRepos[this.repo].dependents().then(function (dependents) {\n _this.$refs['dependents'].innerHTML = '';\n for (var i = 0; i < dependents.length && i < 10; i++) {\n _this.$refs['dependents'].innerHTML += dependents[i].name + '
- All ' : \"\") +\n (!this.manual_callback.hasOwnProperty(feature) ? '' : \"\") +\n '
- ' + features[i] + ' '\n );\n }\n }\n\n $('.' + this._strip_punctuation(feature) + '-btns .dropdown-menu li a').on('click', dropdownLiAClick);\n }\n\n return this;\n };\n\n return this;\n};\n\n(function() {\n 'use strict';\n\n function mg_line_color_text(elem, d, args) {\n elem.classed('mg-hover-line' + d.line_id + '-color', args.colors === null)\n .attr('fill', args.colors === null ? '' : args.colors[d.line_id - 1]);\n }\n\n function mg_line_graph_generators(args, plot, svg) {\n mg_add_line_generator(args, plot);\n mg_add_area_generator(args, plot);\n mg_add_flat_line_generator(args, plot);\n mg_add_confidence_band_generator(args, plot, svg);\n }\n\n function mg_add_confidence_band_generator(args, plot, svg) {\n plot.existing_band = svg.selectAll('.mg-confidence-band').nodes();\n if (args.show_confidence_band) {\n plot.confidence_area = d3.area()\n .defined(plot.line.defined())\n .x(args.scalefns.xf)\n .y0(function(d) {\n var l = args.show_confidence_band[0];\n if (d[l] != undefined) {\n return args.scales.Y(d[l]);\n } else {\n return args.scales.Y(d[args.y_accessor]);\n }\n })\n .y1(function(d) {\n var u = args.show_confidence_band[1];\n if (d[u] != undefined) {\n return args.scales.Y(d[u]);\n } else {\n return args.scales.Y(d[args.y_accessor]);\n }\n })\n .curve(args.interpolate);\n }\n }\n\n function mg_add_area_generator(args, plot) {\n plot.area = d3.area()\n .defined(plot.line.defined())\n .x(args.scalefns.xf)\n .y0(args.scales.Y.range()[0])\n .y1(args.scalefns.yf)\n .curve(args.interpolate);\n }\n\n function mg_add_flat_line_generator(args, plot) {\n plot.flat_line = d3.line()\n .defined(function(d) {\n return (d['_missing'] === undefined || d['_missing'] !== true) && d[args.y_accessor] !== null;\n })\n .x(args.scalefns.xf)\n .y(function() {\n return args.scales.Y(plot.data_median); })\n .curve(args.interpolate);\n }\n\n function mg_add_line_generator(args, plot) {\n plot.line = d3.line()\n .x(args.scalefns.xf)\n .y(args.scalefns.yf)\n .curve(args.interpolate);\n\n // if missing_is_zero is not set, then hide data points that fall in missing\n // data ranges or that have been explicitly identified as missing in the\n // data source.\n if (!args.missing_is_zero) {\n // a line is defined if the _missing attrib is not set to true\n // and the y-accessor is not null\n plot.line = plot.line.defined(function(d) {\n return (d['_missing'] === undefined || d['_missing'] !== true) && d[args.y_accessor] !== null;\n });\n }\n }\n\n function mg_add_confidence_band(args, plot, svg, which_line) {\n if (args.show_confidence_band) {\n var confidenceBand;\n if (svg.select('.mg-confidence-band-' + which_line).empty()) {\n svg.append('path')\n .attr('class', 'mg-confidence-band mg-confidence-band-' + which_line)\n }\n\n // transition this line's confidence band\n confidenceBand = svg.select('.mg-confidence-band-' + which_line);\n\n confidenceBand\n .transition()\n .duration(function() {\n return (args.transition_on_update) ? 1000 : 0;\n })\n .attr('d', plot.confidence_area(args.data[which_line - 1]))\n .attr('clip-path', 'url(#mg-plot-window-' + mg_target_ref(args.target) + ')')\n }\n }\n\n function mg_add_area(args, plot, svg, which_line, line_id) {\n var areas = svg.selectAll('.mg-main-area.mg-area' + line_id);\n if (plot.display_area) {\n // if area already exists, transition it\n if (!areas.empty()) {\n svg.node().appendChild(areas.node());\n\n areas.transition()\n .duration(plot.update_transition_duration)\n .attr('d', plot.area(args.data[which_line]))\n .attr('clip-path', 'url(#mg-plot-window-' + mg_target_ref(args.target) + ')');\n } else { // otherwise, add the area\n svg.append('path')\n .classed('mg-main-area', true)\n .classed('mg-area' + line_id, true)\n .classed('mg-area' + line_id + '-color', args.colors === null)\n .attr('d', plot.area(args.data[which_line]))\n .attr('fill', args.colors === null ? '' : args.colors[line_id - 1])\n .attr('clip-path', 'url(#mg-plot-window-' + mg_target_ref(args.target) + ')');\n }\n } else if (!areas.empty()) {\n areas.remove();\n }\n }\n\n function mg_default_color_for_path(this_path, line_id) {\n this_path.classed('mg-line' + (line_id) + '-color', true);\n }\n\n function mg_color_line(args, this_path, which_line, line_id) {\n if (args.colors) {\n // for now, if args.colors is not an array, then keep moving as if nothing happened.\n // if args.colors is not long enough, default to the usual line_id color.\n if (args.colors.constructor === Array) {\n this_path.attr('stroke', args.colors[which_line]);\n if (args.colors.length < which_line + 1) {\n // Go with default coloring.\n // this_path.classed('mg-line' + (line_id) + '-color', true);\n mg_default_color_for_path(this_path, line_id);\n }\n } else {\n // this_path.classed('mg-line' + (line_id) + '-color', true);\n mg_default_color_for_path(this_path, line_id);\n }\n } else {\n // this is the typical workflow\n // this_path.classed('mg-line' + (line_id) + '-color', true);\n mg_default_color_for_path(this_path, line_id);\n }\n }\n\n function mg_add_line_element(args, plot, this_path, which_line) {\n if (args.animate_on_load) {\n plot.data_median = d3.median(args.data[which_line], function(d) {\n return d[args.y_accessor]; });\n this_path.attr('d', plot.flat_line(args.data[which_line]))\n .transition()\n .duration(1000)\n .attr('d', plot.line(args.data[which_line]))\n .attr('clip-path', 'url(#mg-plot-window-' + mg_target_ref(args.target) + ')');\n } else { // or just add the line\n this_path.attr('d', plot.line(args.data[which_line]))\n .attr('clip-path', 'url(#mg-plot-window-' + mg_target_ref(args.target) + ')');\n }\n }\n\n function mg_add_line(args, plot, svg, existing_line, which_line, line_id) {\n if (!existing_line.empty()) {\n svg.node().appendChild(existing_line.node());\n\n var lineTransition = existing_line.transition()\n .duration(plot.update_transition_duration);\n\n if (!plot.display_area && args.transition_on_update && !args.missing_is_hidden) {\n lineTransition.attrTween('d', path_tween(plot.line(args.data[which_line]), 4));\n } else {\n lineTransition.attr('d', plot.line(args.data[which_line]));\n }\n } else { // otherwise...\n // if we're animating on load, animate the line from its median value\n var this_path = svg.append('path')\n .attr('class', 'mg-main-line mg-line' + line_id);\n\n mg_color_line(args, this_path, which_line, line_id);\n mg_add_line_element(args, plot, this_path, which_line);\n }\n }\n\n function mg_add_legend_element(args, plot, which_line, line_id) {\n var this_legend;\n if (args.legend) {\n if (is_array(args.legend)) {\n this_legend = args.legend[which_line];\n } else if (is_function(args.legend)) {\n this_legend = args.legend(args.data[which_line]);\n }\n\n if (args.legend_target) {\n if (args.colors && args.colors.constructor === Array) {\n plot.legend_text = \"— \" +\n this_legend + ' ' + plot.legend_text;\n } else {\n plot.legend_text = \"— \" +\n this_legend + ' ' + plot.legend_text;\n }\n } else {\n var anchor_point, anchor_orientation, dx;\n if (args.y_axis_position === 'left') {\n anchor_point = args.data[which_line][args.data[which_line].length - 1];\n anchor_orientation = 'start';\n dx = args.buffer;\n } else {\n anchor_point = args.data[which_line][0];\n anchor_orientation = 'end';\n dx = -args.buffer;\n }\n var legend_text = plot.legend_group.append('svg:text')\n .attr('x', args.scalefns.xf(anchor_point))\n .attr('dx', dx)\n .attr('y', args.scalefns.yf(anchor_point))\n .attr('dy', '.35em')\n .attr('font-size', 10)\n .attr('text-anchor', anchor_orientation)\n .attr('font-weight', '300')\n .text(this_legend);\n\n if (args.colors && args.colors.constructor === Array) {\n if (args.colors.length < which_line + 1) {\n legend_text.classed('mg-line' + (line_id) + '-legend-color', true);\n } else {\n legend_text.attr('fill', args.colors[which_line]);\n }\n } else {\n legend_text.classed('mg-line' + (line_id) + '-legend-color', true);\n }\n\n mg_prevent_vertical_overlap(plot.legend_group.selectAll('.mg-line-legend text').nodes(), args);\n }\n }\n }\n\n function mg_plot_legend_if_legend_target(target, legend) {\n if (target) {\n d3.select(target).html(legend);\n }\n }\n\n function mg_add_legend_group(args, plot, svg) {\n if (args.legend) plot.legend_group = mg_add_g(svg, 'mg-line-legend');\n }\n\n function mg_remove_existing_line_rollover_elements(svg) {\n // remove the old rollovers if they already exist\n mg_selectAll_and_remove(svg, '.mg-rollover-rect');\n mg_selectAll_and_remove(svg, '.mg-voronoi');\n\n // remove the old rollover text and circle if they already exist\n mg_selectAll_and_remove(svg, '.mg-active-datapoint');\n mg_selectAll_and_remove(svg, '.mg-line-rollover-circle');\n //mg_selectAll_and_remove(svg, '.mg-active-datapoint-container');\n }\n\n function mg_add_rollover_circle(args, svg) {\n // append circle\n var circle = svg.selectAll('.mg-line-rollover-circle')\n .data(args.data)\n .enter().append('circle')\n .attr('cx', 0)\n .attr('cy', 0)\n .attr('r', 0);\n\n if (args.colors && args.colors.constructor === Array) {\n circle\n .attr('class', function(d) {\n return 'mg-line' + d.line_id;\n })\n .attr('fill', function(d, i) {\n return args.colors[i];\n })\n .attr('stroke', function(d, i) {\n return args.colors[i];\n });\n } else {\n circle.attr('class', function(d, i) {\n return [\n 'mg-line' + d.line_id,\n 'mg-line' + d.line_id + '-color',\n 'mg-area' + d.line_id + '-color'\n ].join(' ');\n });\n }\n circle.classed('mg-line-rollover-circle', true);\n }\n\n function mg_set_unique_line_id_for_each_series(args) {\n // update our data by setting a unique line id for each series\n // increment from 1... unless we have a custom increment series\n var line_id = 1;\n for (var i = 0; i < args.data.length; i++) {\n for (var j = 0; j < args.data[i].length; j++) {\n // Index is saved as original line id for the legend values\n args.data[i][j].index = line_id;\n // if custom line-color map is set, use that instead of line_id (For colors)\n if (args.custom_line_color_map.length > 0) {\n args.data[i][j].line_id = args.custom_line_color_map[i];\n } else {\n args.data[i][j].line_id = line_id;\n }\n }\n line_id++;\n }\n }\n\n function mg_nest_data_for_voronoi(args) {\n return d3.merge(args.data);\n }\n\n function mg_line_class_string(args) {\n return function(d) {\n var class_string;\n\n if (args.linked) {\n var v = d[args.x_accessor];\n var formatter = MG.time_format(args.utc_time, args.linked_format);\n\n // only format when x-axis is date\n var id = (typeof v === 'number') ? (d.line_id - 1) : formatter(v);\n class_string = 'roll_' + id + ' mg-line' + d.line_id;\n\n if (args.color === null) {\n class_string += ' mg-line' + d.line_id + '-color';\n }\n return class_string;\n\n } else {\n class_string = 'mg-line' + d.line_id;\n if (args.color === null) class_string += ' mg-line' + d.line_id + '-color';\n return class_string;\n }\n };\n }\n\n function mg_add_voronoi_rollover(args, svg, rollover_on, rollover_off, rollover_move) {\n var voronoi = d3.voronoi()\n .x(function(d) {\n return args.scales.X(d[args.x_accessor]).toFixed(2); })\n .y(function(d) {\n return args.scales.Y(d[args.y_accessor]).toFixed(2); })\n .extent([\n [args.buffer, args.buffer + args.title_y_position],\n [args.width - args.buffer, args.height - args.buffer]\n ]);\n\n var g = mg_add_g(svg, 'mg-voronoi');\n g.selectAll('path')\n .data(voronoi.polygons(mg_nest_data_for_voronoi(args)))\n .enter()\n .append('path')\n .filter(function(d) {\n return d !== undefined && d.length > 0; })\n .attr('d', function(d) {\n return d == null ? null : 'M' + d.join('L') + 'Z'; })\n .datum(function(d) {\n return d == null ? null : d.data; }) // because of d3.voronoi, reassign d\n .attr('class', mg_line_class_string(args))\n .on('mouseover', rollover_on)\n .on('mouseout', rollover_off)\n .on('mousemove', rollover_move);\n\n mg_configure_voronoi_rollover(args, svg);\n }\n\n function nest_data_for_aggregate_rollover(args) {\n var data_nested = d3.nest()\n .key(function(d) {\n return d[args.x_accessor]; })\n .entries(d3.merge(args.data));\n data_nested.forEach(function(entry) {\n var datum = entry.values[0];\n entry.key = datum[args.x_accessor];\n });\n\n if (args.x_sort) {\n return data_nested.sort(function(a, b) {\n return new Date(a.key) - new Date(b.key); });\n } else {\n return data_nested;\n }\n }\n\n function mg_add_aggregate_rollover(args, svg, rollover_on, rollover_off, rollover_move) {\n // Undo the keys getting coerced to strings, by setting the keys from the values\n // This is necessary for when we have X axis keys that are things like\n var data_nested = nest_data_for_aggregate_rollover(args);\n\n var xf = data_nested.map(function(di) {\n return args.scales.X(di.key);\n });\n\n var g = svg.append('g')\n .attr('class', 'mg-rollover-rect');\n\n g.selectAll('.mg-rollover-rects')\n .data(data_nested).enter()\n .append('rect')\n .attr('x', function(d, i) {\n if (xf.length === 1) return mg_get_plot_left(args);\n else if (i === 0) return xf[i].toFixed(2);\n else return ((xf[i - 1] + xf[i]) / 2).toFixed(2);\n })\n .attr('y', args.top)\n .attr('width', function(d, i) {\n if (xf.length === 1) return mg_get_plot_right(args);\n else if (i === 0) return ((xf[i + 1] - xf[i]) / 2).toFixed(2);\n else if (i === xf.length - 1) return ((xf[i] - xf[i - 1]) / 2).toFixed(2);\n else return ((xf[i + 1] - xf[i - 1]) / 2).toFixed(2);\n })\n .attr('class', function(d) {\n var line_classes = d.values.map(function(datum) {\n var lc = mg_line_class(datum.line_id);\n if (args.colors === null) lc += ' ' + mg_line_color_class(datum.line_id);\n return lc;\n }).join(' ');\n if (args.linked && d.values.length > 0) {\n line_classes += ' ' + mg_rollover_id_class(mg_rollover_format_id(d.values[0], 0, args));\n }\n\n return line_classes;\n })\n .attr('height', args.height - args.bottom - args.top - args.buffer)\n .attr('opacity', 0)\n .on('mouseover', rollover_on)\n .on('mouseout', rollover_off)\n .on('mousemove', rollover_move);\n\n mg_configure_aggregate_rollover(args, svg);\n }\n\n function mg_configure_singleton_rollover(args, svg) {\n svg.select('.mg-rollover-rect rect')\n .on('mouseover')(args.data[0][0], 0);\n }\n\n function mg_configure_voronoi_rollover(args, svg) {\n for (var i = 0; i < args.data.length; i++) {\n var j = i + 1;\n\n if (args.custom_line_color_map.length > 0 &&\n args.custom_line_color_map[i] !== undefined) {\n j = args.custom_line_color_map[i];\n }\n\n if (args.data[i].length === 1 && !svg.selectAll('.mg-voronoi .mg-line' + j).empty()) {\n svg.selectAll('.mg-voronoi .mg-line' + j)\n .on('mouseover')(args.data[i][0], 0);\n\n svg.selectAll('.mg-voronoi .mg-line' + j)\n .on('mouseout')(args.data[i][0], 0);\n }\n }\n }\n\n function mg_line_class(line_id) {\n return 'mg-line' + line_id;\n }\n\n function mg_line_color_class(line_id) {\n return 'mg-line' + line_id + '-color';\n }\n\n function mg_rollover_id_class(id) {\n return 'roll_' + id;\n }\n\n function mg_rollover_format_id(d, i, args) {\n var v = d[args.x_accessor];\n var formatter = MG.time_format(args.utc_time, args.linked_format);\n // only format when x-axis is date\n var id = (typeof v === 'number') ? i : formatter(v);\n return id;\n }\n\n function mg_add_single_line_rollover(args, svg, rollover_on, rollover_off, rollover_move) {\n // set to 1 unless we have a custom increment series\n var line_id = 1;\n if (args.custom_line_color_map.length > 0) {\n line_id = args.custom_line_color_map[0];\n }\n\n var g = svg.append('g')\n .attr('class', 'mg-rollover-rect');\n\n var xf = args.data[0].map(args.scalefns.xf);\n\n g.selectAll('.mg-rollover-rects')\n .data(args.data[0]).enter()\n .append('rect')\n .attr('class', function(d, i) {\n var cl = mg_line_color_class(line_id) + ' ' + mg_line_class(d.line_id);\n if (args.linked) cl += cl + ' ' + mg_rollover_id_class(mg_rollover_format_id(d, i, args));\n return cl;\n })\n .attr('x', function(d, i) {\n // if data set is of length 1\n if (xf.length === 1) return mg_get_plot_left(args);\n else if (i === 0) return xf[i].toFixed(2);\n else return ((xf[i - 1] + xf[i]) / 2).toFixed(2);\n })\n .attr('y', function(d, i) {\n return (args.data.length > 1) ? args.scalefns.yf(d) - 6 // multi-line chart sensitivity\n : args.top;\n })\n .attr('width', function(d, i) {\n // if data set is of length 1\n if (xf.length === 1) return mg_get_plot_right(args);\n else if (i === 0) return ((xf[i + 1] - xf[i]) / 2).toFixed(2);\n else if (i === xf.length - 1) return ((xf[i] - xf[i - 1]) / 2).toFixed(2);\n else return ((xf[i + 1] - xf[i - 1]) / 2).toFixed(2);\n })\n .attr('height', function(d, i) {\n return (args.data.length > 1) ? 12 // multi-line chart sensitivity\n : args.height - args.bottom - args.top - args.buffer;\n })\n .attr('opacity', 0)\n .on('mouseover', rollover_on)\n .on('mouseout', rollover_off)\n .on('mousemove', rollover_move);\n\n if (mg_is_singleton(args)) {\n mg_configure_singleton_rollover(args, svg);\n }\n }\n\n function mg_configure_aggregate_rollover(args, svg) {\n var rect = svg.selectAll('.mg-rollover-rect rect');\n var rect_first = rect.nodes()[0][0] || rect.nodes()[0];\n if (args.data.filter(function(d) { return d.length === 1; }).length > 0) {\n rect.on('mouseover')(rect_first.__data__, 0);\n }\n }\n\n function mg_is_standard_multiline(args) {\n return args.data.length > 1 && !args.aggregate_rollover;\n }\n\n function mg_is_aggregated_rollover(args) {\n return args.data.length > 1 && args.aggregate_rollover;\n }\n\n function mg_is_singleton(args) {\n return args.data.length === 1 && args.data[0].length === 1;\n }\n\n function mg_draw_all_line_elements(args, plot, svg) {\n mg_remove_dangling_bands(plot, svg);\n\n for (var i = args.data.length - 1; i >= 0; i--) {\n var this_data = args.data[i];\n\n // passing the data for the current line\n MG.call_hook('line.before_each_series', [this_data, args]);\n\n // override increment if we have a custom increment series\n var line_id = i + 1;\n if (args.custom_line_color_map.length > 0) {\n line_id = args.custom_line_color_map[i];\n }\n\n args.data[i].line_id = line_id;\n\n if (this_data.length === 0) {\n continue;\n }\n var existing_line = svg.select('path.mg-main-line.mg-line' + (line_id));\n\n mg_add_confidence_band(args, plot, svg, line_id);\n mg_add_area(args, plot, svg, i, line_id);\n mg_add_line(args, plot, svg, existing_line, i, line_id);\n mg_add_legend_element(args, plot, i, line_id);\n\n // passing the data for the current line\n MG.call_hook('line.after_each_series', [this_data, existing_line, args]);\n }\n }\n\n function mg_remove_dangling_bands(plot, svg) {\n if (plot.existing_band[0] && plot.existing_band[0].length > svg.selectAll('.mg-main-line').node().length) {\n svg.selectAll('.mg-confidence-band').remove();\n }\n }\n\n function mg_line_main_plot(args) {\n var plot = {};\n var svg = mg_get_svg_child_of(args.target);\n\n // remove any old legends if they exist\n mg_selectAll_and_remove(svg, '.mg-line-legend');\n mg_add_legend_group(args, plot, svg);\n\n plot.data_median = 0;\n plot.update_transition_duration = (args.transition_on_update) ? 1000 : 0;\n plot.display_area = args.area && !args.use_data_y_min && args.data.length <= 1 && args.aggregate_rollover === false;\n plot.legend_text = '';\n mg_line_graph_generators(args, plot, svg);\n plot.existing_band = svg.selectAll('.mg-confidence-band').nodes();\n\n // should we continue with the default line render? A `line.all_series` hook should return false to prevent the default.\n var continueWithDefault = MG.call_hook('line.before_all_series', [args]);\n if (continueWithDefault !== false) {\n mg_draw_all_line_elements(args, plot, svg);\n }\n\n mg_plot_legend_if_legend_target(args.legend_target, plot.legend_text);\n }\n\n function mg_line_rollover_setup(args, graph) {\n var svg = mg_get_svg_child_of(args.target);\n\n if (svg.selectAll('.mg-active-datapoint-container').nodes().length === 0) {\n mg_add_g(svg, 'mg-active-datapoint-container');\n }\n\n mg_remove_existing_line_rollover_elements(svg);\n mg_add_rollover_circle(args, svg);\n mg_set_unique_line_id_for_each_series(args);\n\n if (mg_is_standard_multiline(args)) {\n mg_add_voronoi_rollover(args, svg, graph.rolloverOn(args), graph.rolloverOff(args), graph.rolloverMove(args));\n } else if (mg_is_aggregated_rollover(args)) {\n mg_add_aggregate_rollover(args, svg, graph.rolloverOn(args), graph.rolloverOff(args), graph.rolloverMove(args));\n } else {\n mg_add_single_line_rollover(args, svg, graph.rolloverOn(args), graph.rolloverOff(args), graph.rolloverMove(args));\n }\n }\n\n function mg_update_rollover_circle(args, svg, d) {\n if (args.aggregate_rollover && args.data.length > 1) {\n // hide the circles in case a non-contiguous series is present\n svg.selectAll('circle.mg-line-rollover-circle')\n .style('opacity', 0);\n\n d.values.forEach(function(datum) {\n if (mg_data_in_plot_bounds(datum, args)) mg_update_aggregate_rollover_circle(args, svg, datum);\n });\n } else if ((args.missing_is_hidden && d['_missing']) || d[args.y_accessor] === null) {\n // disable rollovers for hidden parts of the line\n // recall that hidden parts are missing data ranges and possibly also\n // data points that have been explicitly identified as missing\n return;\n } else {\n // show circle on mouse-overed rect\n if (mg_data_in_plot_bounds(d, args)) {\n mg_update_generic_rollover_circle(args, svg, d);\n }\n }\n }\n\n function mg_update_aggregate_rollover_circle(args, svg, datum) {\n svg.select('circle.mg-line-rollover-circle.mg-line' + datum.line_id)\n .attr('cx', args.scales.X(datum[args.x_accessor]).toFixed(2))\n .attr('cy', args.scales.Y(datum[args.y_accessor]).toFixed(2))\n .attr('r', args.point_size)\n .style('opacity', 1);\n }\n\n function mg_update_generic_rollover_circle(args, svg, d) {\n svg.selectAll('circle.mg-line-rollover-circle.mg-line' + d.line_id)\n .classed('mg-line-rollover-circle', true)\n .attr('cx', function() {\n return args.scales.X(d[args.x_accessor]).toFixed(2);\n })\n .attr('cy', function() {\n return args.scales.Y(d[args.y_accessor]).toFixed(2);\n })\n .attr('r', args.point_size)\n .style('opacity', 1);\n }\n\n function mg_trigger_linked_mouseovers(args, d, i) {\n if (args.linked && !MG.globals.link) {\n MG.globals.link = true;\n if (!args.aggregate_rollover || d.value !== undefined || d.values.length > 0) {\n var datum = d.values ? d.values[0] : d;\n var id = mg_rollover_format_id(datum, i, args);\n // trigger mouseover on matching line in .linked charts\n d3.selectAll('.' + mg_line_class(datum.line_id) + '.' + mg_rollover_id_class(id))\n .each(function(d) {\n d3.select(this)\n .on('mouseover')(d, i);\n });\n }\n }\n }\n\n function mg_trigger_linked_mouseouts(args, d, i) {\n if (args.linked && MG.globals.link) {\n MG.globals.link = false;\n\n var formatter = MG.time_format(args.utc_time, args.linked_format);\n var datums = d.values ? d.values : [d];\n datums.forEach(function(datum) {\n var v = datum[args.x_accessor];\n var id = (typeof v === 'number') ? i : formatter(v);\n\n // trigger mouseout on matching line in .linked charts\n d3.selectAll('.roll_' + id)\n .each(function(d) {\n d3.select(this)\n .on('mouseout')(d);\n });\n });\n }\n }\n\n function mg_remove_active_data_points_for_aggregate_rollover(args, svg) {\n svg.selectAll('circle.mg-line-rollover-circle').filter(function(circle) {\n return circle.length > 1;\n })\n .style('opacity', 0);\n }\n\n function mg_remove_active_data_points_for_generic_rollover(args, svg, d) {\n svg.selectAll('circle.mg-line-rollover-circle.mg-line' + d.line_id)\n .style('opacity', function() {\n var id = d.line_id - 1;\n\n if (args.custom_line_color_map.length > 0 &&\n args.custom_line_color_map.indexOf(d.line_id) !== undefined\n ) {\n id = args.custom_line_color_map.indexOf(d.line_id);\n }\n\n if (args.data[id].length === 1) {\n return 1;\n } else {\n return 0;\n }\n });\n }\n\n function mg_remove_active_text(svg) {\n svg.select('.mg-active-datapoint').text('');\n }\n\n function lineChart(args) {\n this.init = function(args) {\n this.args = args;\n\n if (!args.data || args.data.length === 0) {\n args.internal_error = 'No data was supplied';\n internal_error(args);\n return this;\n } else {\n args.internal_error = undefined;\n }\n\n raw_data_transformation(args);\n process_line(args);\n\n MG.call_hook('line.before_destroy', this);\n\n init(args);\n\n // TODO incorporate markers into calculation of x scales\n new MG.scale_factory(args)\n .namespace('x')\n .numericalDomainFromData()\n .numericalRange('bottom')\n\n var baselines = (args.baselines || []).map(function(d) {\n return d[args.y_accessor];\n });\n\n new MG.scale_factory(args)\n .namespace('y')\n .zeroBottom(true)\n .inflateDomain(true)\n .numericalDomainFromData(baselines)\n .numericalRange('left');\n\n var svg = mg_get_svg_child_of(args.target);\n\n if (args.x_axis) {\n new MG.axis_factory(args)\n .namespace('x')\n .type('numerical')\n .position(args.x_axis_position)\n .rug(x_rug(args))\n .label(mg_add_x_label)\n .draw();\n }\n\n if (args.y_axis) {\n new MG.axis_factory(args)\n .namespace('y')\n .type('numerical')\n .position(args.y_axis_position)\n .rug(y_rug(args))\n .label(mg_add_y_label)\n .draw();\n }\n\n this.markers();\n this.mainPlot();\n this.rollover();\n this.windowListeners();\n\n MG.call_hook('line.after_init', this);\n\n return this;\n };\n\n this.mainPlot = function() {\n mg_line_main_plot(args);\n return this;\n };\n\n this.markers = function() {\n markers(args);\n return this;\n };\n\n this.rollover = function() {\n var that = this;\n mg_line_rollover_setup(args, that);\n MG.call_hook('line.after_rollover', args);\n\n return this;\n };\n\n this.rolloverOn = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n var fmt = mg_get_rollover_time_format(args);\n\n return function(d, i) {\n mg_update_rollover_circle(args, svg, d);\n mg_trigger_linked_mouseovers(args, d, i);\n\n svg.selectAll('text')\n .filter(function(g, j) {\n return d === g;\n })\n .attr('opacity', 0.3);\n\n // update rollover text except for missing data points\n if (args.show_rollover_text &&\n !((args.missing_is_hidden && d['_missing']) || d[args.y_accessor] === null)\n ) {\n var mouseover = mg_mouseover_text(args, { svg: svg });\n var row = mouseover.mouseover_row();\n if (args.aggregate_rollover) {\n row.text((args.aggregate_rollover && args.data.length > 1\n ? mg_format_x_aggregate_mouseover\n : mg_format_x_mouseover)(args, d));\n }\n\n var pts = args.aggregate_rollover && args.data.length > 1\n ? d.values\n : [d];\n\n pts.forEach(function(di) {\n if (args.aggregate_rollover) {\n row = mouseover.mouseover_row();\n }\n\n if (args.legend) {\n mg_line_color_text(row.text(args.legend[di.index - 1] + ' ').bold().elem(), di, args);\n }\n\n mg_line_color_text(row.text('\\u2014 ').elem(), di, args);\n if (!args.aggregate_rollover) {\n row.text(mg_format_x_mouseover(args, di));\n }\n\n row.text(mg_format_y_mouseover(args, di, args.time_series === false));\n })\n }\n\n if (args.mouseover) {\n args.mouseover(d, i);\n }\n };\n };\n\n this.rolloverOff = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n mg_trigger_linked_mouseouts(args, d, i);\n if (args.aggregate_rollover) {\n mg_remove_active_data_points_for_aggregate_rollover(args, svg);\n } else {\n mg_remove_active_data_points_for_generic_rollover(args, svg, d);\n }\n\n if (args.data[0].length > 1) {\n mg_clear_mouseover_container(svg);\n }\n\n if (args.mouseout) {\n args.mouseout(d, i);\n }\n };\n };\n\n this.rolloverMove = function(args) {\n return function(d, i) {\n if (args.mousemove) {\n args.mousemove(d, i);\n }\n };\n };\n\n this.windowListeners = function() {\n mg_window_listeners(this.args);\n return this;\n };\n\n this.init(args);\n }\n\n MG.register('line', lineChart);\n}).call(this);\n\n(function() {\n 'use strict';\n\n function histogram(args) {\n this.init = function(args) {\n this.args = args;\n\n raw_data_transformation(args);\n process_histogram(args);\n init(args);\n\n new MG.scale_factory(args)\n .namespace('x')\n .numericalDomainFromData()\n .numericalRange('bottom');\n\n var baselines = (args.baselines || []).map(function(d) {\n return d[args.y_accessor]\n });\n\n new MG.scale_factory(args)\n .namespace('y')\n .zeroBottom(true)\n .inflateDomain(true)\n .numericalDomainFromData(baselines)\n .numericalRange('left');\n\n x_axis(args);\n y_axis(args);\n\n this.mainPlot();\n this.markers();\n this.rollover();\n this.windowListeners();\n\n return this;\n };\n\n this.mainPlot = function() {\n var svg = mg_get_svg_child_of(args.target);\n\n //remove the old histogram, add new one\n svg.selectAll('.mg-histogram').remove();\n\n var g = svg.append('g')\n .attr('class', 'mg-histogram');\n\n var bar = g.selectAll('.mg-bar')\n .data(args.data[0])\n .enter().append('g')\n .attr('class', 'mg-bar')\n .attr('transform', function(d) {\n return \"translate(\" + args.scales.X(d[args.x_accessor]).toFixed(2) + \",\" + args.scales.Y(d[args.y_accessor]).toFixed(2) + \")\";\n });\n\n //draw bars\n bar.append('rect')\n .attr('x', 1)\n .attr('width', function(d, i) {\n if (args.data[0].length === 1) {\n return (args.scalefns.xf(args.data[0][0]) - args.bar_margin).toFixed(0);\n } else if (i !== args.data[0].length - 1) {\n return (args.scalefns.xf(args.data[0][i + 1]) - args.scalefns.xf(d)).toFixed(0);\n } else {\n return (args.scalefns.xf(args.data[0][1]) - args.scalefns.xf(args.data[0][0])).toFixed(0);\n }\n })\n .attr('height', function(d) {\n if (d[args.y_accessor] === 0) {\n return 0;\n }\n\n return (args.height - args.bottom - args.buffer - args.scales.Y(d[args.y_accessor])).toFixed(2);\n });\n\n return this;\n };\n\n this.markers = function() {\n markers(args);\n return this;\n };\n\n this.rollover = function() {\n var svg = mg_get_svg_child_of(args.target);\n\n if (svg.selectAll('.mg-active-datapoint-container').nodes().length === 0) {\n mg_add_g(svg, 'mg-active-datapoint-container');\n }\n\n //remove the old rollovers if they already exist\n svg.selectAll('.mg-rollover-rect').remove();\n svg.selectAll('.mg-active-datapoint').remove();\n\n var g = svg.append('g')\n .attr('class', 'mg-rollover-rect');\n\n //draw rollover bars\n var bar = g.selectAll('.mg-bar')\n .data(args.data[0])\n .enter().append('g')\n .attr('class', function(d, i) {\n if (args.linked) {\n return 'mg-rollover-rects roll_' + i;\n } else {\n return 'mg-rollover-rects';\n }\n })\n .attr('transform', function(d) {\n return \"translate(\" + (args.scales.X(d[args.x_accessor])) + \",\" + 0 + \")\";\n });\n\n bar.append('rect')\n .attr('x', 1)\n .attr('y', args.buffer + args.title_y_position)\n .attr('width', function(d, i) {\n //if data set is of length 1\n if (args.data[0].length === 1) {\n return (args.scalefns.xf(args.data[0][0]) - args.bar_margin).toFixed(0);\n } else if (i !== args.data[0].length - 1) {\n return (args.scalefns.xf(args.data[0][i + 1]) - args.scalefns.xf(d)).toFixed(0);\n } else {\n return (args.scalefns.xf(args.data[0][1]) - args.scalefns.xf(args.data[0][0])).toFixed(0);\n }\n })\n .attr('height', function(d) {\n return args.height;\n })\n .attr('opacity', 0)\n .on('mouseover', this.rolloverOn(args))\n .on('mouseout', this.rolloverOff(args))\n .on('mousemove', this.rolloverMove(args));\n\n return this;\n };\n\n this.rolloverOn = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n svg.selectAll('text')\n .filter(function(g, j) {\n return d === g;\n })\n .attr('opacity', 0.3);\n\n var fmt = args.processed.xax_format || MG.time_format(args.utc_time, '%b %e, %Y');\n var num = format_rollover_number(args);\n\n svg.selectAll('.mg-bar rect')\n .filter(function(d, j) {\n return j === i;\n })\n .classed('active', true);\n\n //trigger mouseover on all matching bars\n if (args.linked && !MG.globals.link) {\n MG.globals.link = true;\n\n //trigger mouseover on matching bars in .linked charts\n d3.selectAll('.mg-rollover-rects.roll_' + i + ' rect')\n .each(function(d) { //use existing i\n d3.select(this).on('mouseover')(d, i);\n });\n }\n\n //update rollover text\n if (args.show_rollover_text) {\n var mo = mg_mouseover_text(args, { svg: svg });\n var row = mo.mouseover_row();\n row.text('\\u259F ').elem()\n .classed('hist-symbol', true);\n\n row.text(mg_format_x_mouseover(args, d)); // x\n row.text(mg_format_y_mouseover(args, d, args.time_series === false));\n }\n\n if (args.mouseover) {\n mg_setup_mouseover_container(svg, args);\n args.mouseover(d, i);\n }\n };\n };\n\n this.rolloverOff = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n if (args.linked && MG.globals.link) {\n MG.globals.link = false;\n\n //trigger mouseout on matching bars in .linked charts\n d3.selectAll('.mg-rollover-rects.roll_' + i + ' rect')\n .each(function(d) { //use existing i\n d3.select(this).on('mouseout')(d, i);\n });\n }\n\n //reset active bar\n svg.selectAll('.mg-bar rect')\n .classed('active', false);\n\n //reset active data point text\n mg_clear_mouseover_container(svg);\n\n if (args.mouseout) {\n args.mouseout(d, i);\n }\n };\n };\n\n this.rolloverMove = function(args) {\n return function(d, i) {\n if (args.mousemove) {\n args.mousemove(d, i);\n }\n };\n };\n\n this.windowListeners = function() {\n mg_window_listeners(this.args);\n return this;\n };\n\n this.init(args);\n }\n\n var defaults = {\n binned: false,\n bins: null,\n processed_x_accessor: 'x',\n processed_y_accessor: 'y',\n processed_dx_accessor: 'dx',\n bar_margin: 1\n };\n\n MG.register('histogram', histogram, defaults);\n}).call(this);\n\nfunction point_mouseover(args, svg, d) {\n var mouseover = mg_mouseover_text(args, { svg: svg });\n var row = mouseover.mouseover_row();\n\n if (args.color_accessor !== null && args.color_type === 'category') {\n var label = d[args.color_accessor];\n row.text(label + ' ').bold().elem().attr('fill', args.scalefns.colorf(d));\n }\n\n mg_color_point_mouseover(args, row.text('\\u25CF ').elem(), d); // point shape\n\n row.text(mg_format_x_mouseover(args, d)); // x\n row.text(mg_format_y_mouseover(args, d, args.time_series === false));\n}\n\nfunction mg_color_point_mouseover(args, elem, d) {\n if (args.color_accessor !== null) {\n elem.attr('fill', args.scalefns.colorf(d));\n elem.attr('stroke', args.scalefns.colorf(d));\n } else {\n elem.classed('mg-points-mono', true);\n }\n}\n\n\n(function() {\n 'use strict';\n\n function mg_filter_out_plot_bounds(data, args) {\n // max_x, min_x, max_y, min_y;\n var x = args.x_accessor;\n var y = args.y_accessor;\n var new_data = data.filter(function(d) {\n return (args.min_x === null || d[x] >= args.min_x) &&\n (args.max_x === null || d[x] <= args.max_x) &&\n (args.min_y === null || d[y] >= args.min_y) &&\n (args.max_y === null || d[y] <= args.max_y);\n })\n return new_data;\n }\n\n function pointChart(args) {\n this.init = function(args) {\n this.args = args;\n\n // infer y_axis and x_axis type;\n args.x_axis_type = mg_infer_type(args, 'x');\n args.y_axis_type = mg_infer_type(args, 'y');\n\n raw_data_transformation(args);\n\n process_point(args);\n init(args);\n\n var xMaker, yMaker;\n\n if (args.x_axis_type === 'categorical') {\n xMaker = MG.scale_factory(args)\n .namespace('x')\n .categoricalDomainFromData()\n .categoricalRangeBands([0, args.xgroup_height], args.xgroup_accessor === null);\n\n if (args.xgroup_accessor) {\n new MG.scale_factory(args)\n .namespace('xgroup')\n .categoricalDomainFromData()\n .categoricalRangeBands('bottom');\n\n } else {\n args.scales.XGROUP = function(d) {\n return mg_get_plot_left(args) };\n args.scalefns.xgroupf = function(d) {\n return mg_get_plot_left(args) };\n }\n\n args.scalefns.xoutf = function(d) {\n return args.scalefns.xf(d) + args.scalefns.xgroupf(d)\n };\n } else {\n xMaker = MG.scale_factory(args)\n .namespace('x')\n .inflateDomain(true)\n .zeroBottom(args.y_axis_type === 'categorical')\n .numericalDomainFromData((args.baselines || []).map(function(d) {\n return d[args.x_accessor] }))\n .numericalRange('bottom');\n\n args.scalefns.xoutf = args.scalefns.xf;\n }\n\n // y-scale generation. This needs to get simplified.\n if (args.y_axis_type === 'categorical') {\n yMaker = MG.scale_factory(args)\n .namespace('y')\n .zeroBottom(true)\n .categoricalDomainFromData()\n .categoricalRangeBands([0, args.ygroup_height], true);\n\n if (args.ygroup_accessor) {\n\n new MG.scale_factory(args)\n .namespace('ygroup')\n .categoricalDomainFromData()\n .categoricalRangeBands('left');\n\n } else {\n args.scales.YGROUP = function() {\n return mg_get_plot_top(args) };\n args.scalefns.ygroupf = function(d) {\n return mg_get_plot_top(args) };\n\n }\n args.scalefns.youtf = function(d) {\n return args.scalefns.yf(d) + args.scalefns.ygroupf(d) };\n\n } else {\n var baselines = (args.baselines || []).map(function(d) {\n return d[args.y_accessor] });\n yMaker = MG.scale_factory(args)\n .namespace('y')\n .inflateDomain(true)\n .zeroBottom(args.x_axis_type === 'categorical')\n .numericalDomainFromData(baselines)\n .numericalRange('left');\n\n args.scalefns.youtf = function(d) {\n return args.scalefns.yf(d) };\n }\n\n /////// COLOR accessor\n if (args.color_accessor !== null) {\n var colorScale = MG.scale_factory(args).namespace('color');\n if (args.color_type === 'number') {\n // do the color scale.\n // etiher get color range, or what.\n colorScale\n .numericalDomainFromData(mg_get_color_domain(args))\n .numericalRange(mg_get_color_range(args))\n .clamp(true);\n } else {\n if (args.color_domain) {\n colorScale\n .categoricalDomain(args.color_domain)\n .categoricalRange(args.color_range);\n } else {\n colorScale\n .categoricalDomainFromData()\n .categoricalColorRange();\n }\n }\n }\n\n if (args.size_accessor) {\n new MG.scale_factory(args).namespace('size')\n .numericalDomainFromData()\n .numericalRange(mg_get_size_range(args))\n .clamp(true);\n }\n\n new MG.axis_factory(args)\n .namespace('x')\n .type(args.x_axis_type)\n .zeroLine(args.y_axis_type === 'categorical')\n .position(args.x_axis_position)\n .rug(x_rug(args))\n .label(mg_add_x_label)\n .draw();\n\n new MG.axis_factory(args)\n .namespace('y')\n .type(args.y_axis_type)\n .zeroLine(args.x_axis_type === 'categorical')\n .position(args.y_axis_position)\n .rug(y_rug(args))\n .label(mg_add_y_label)\n .draw();\n\n this.mainPlot();\n this.markers();\n this.rollover();\n this.windowListeners();\n\n return this;\n };\n\n this.markers = function() {\n markers(args);\n if (args.least_squares) {\n add_ls(args);\n }\n\n return this;\n };\n\n this.mainPlot = function() {\n var svg = mg_get_svg_child_of(args.target);\n var g;\n\n var data = mg_filter_out_plot_bounds(args.data[0], args);\n //remove the old points, add new one\n svg.selectAll('.mg-points').remove();\n\n g = svg.append('g')\n .classed('mg-points', true);\n\n\n var pts = g.selectAll('circle')\n .data(data)\n .enter().append('circle')\n .attr('class', function(d, i) {\n return 'path-' + i;\n })\n .attr('cx', args.scalefns.xoutf)\n .attr('cy', function(d) {\n return args.scalefns.youtf(d);\n });\n\n //are we coloring our points, or just using the default color?\n if (args.color_accessor !== null) {\n pts.attr('fill', args.scalefns.colorf);\n pts.attr('stroke', args.scalefns.colorf);\n } else {\n pts.classed('mg-points-mono', true);\n }\n\n if (args.size_accessor !== null) {\n pts.attr('r', args.scalefns.sizef);\n } else {\n pts.attr('r', args.point_size);\n }\n\n return this;\n };\n\n this.rollover = function() {\n var svg = mg_get_svg_child_of(args.target);\n\n if (svg.selectAll('.mg-active-datapoint-container').nodes().length === 0) {\n mg_add_g(svg, 'mg-active-datapoint-container');\n }\n\n //remove the old rollovers if they already exist\n svg.selectAll('.mg-voronoi').remove();\n\n //add rollover paths\n var voronoi = d3.voronoi()\n .x(args.scalefns.xoutf)\n .y(args.scalefns.youtf)\n .extent([\n [args.buffer, args.buffer + args.title_y_position],\n [args.width - args.buffer, args.height - args.buffer]\n ]);\n\n var paths = svg.append('g')\n .attr('class', 'mg-voronoi');\n\n paths.selectAll('path')\n .data(voronoi.polygons(mg_filter_out_plot_bounds(args.data[0], args)))\n .enter().append('path')\n .attr('d', function(d) {\n return d == null ? null : 'M' + d.join(',') + 'Z'; })\n .attr('class', function(d, i) {\n return 'path-' + i;\n })\n .style('fill-opacity', 0)\n .on('mouseover', this.rolloverOn(args))\n .on('mouseout', this.rolloverOff(args))\n .on('mousemove', this.rolloverMove(args));\n\n if (args.data[0].length === 1) {\n point_mouseover(args, svg, args.data[0][0]);\n }\n\n return this;\n };\n\n this.rolloverOn = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n svg.selectAll('.mg-points circle')\n .classed('selected', false);\n\n //highlight active point\n var pts = svg.selectAll('.mg-points circle.path-' + i)\n .classed('selected', true);\n\n if (args.size_accessor) {\n pts.attr('r', function(di) {\n return args.scalefns.sizef(di) + args.active_point_size_increase;\n });\n } else {\n pts.attr('r', args.point_size + args.active_point_size_increase);\n }\n\n //trigger mouseover on all points for this class name in .linked charts\n if (args.linked && !MG.globals.link) {\n MG.globals.link = true;\n\n //trigger mouseover on matching point in .linked charts\n d3.selectAll('.mg-voronoi .path-' + i)\n .each(function() {\n d3.select(this).on('mouseover')(d, i);\n });\n }\n\n if (args.show_rollover_text) {\n point_mouseover(args, svg, d.data);\n }\n\n if (args.mouseover) {\n args.mouseover(d, i);\n }\n };\n };\n\n this.rolloverOff = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n if (args.linked && MG.globals.link) {\n MG.globals.link = false;\n\n d3.selectAll('.mg-voronoi .path-' + i)\n .each(function() {\n d3.select(this).on('mouseout')(d, i);\n });\n }\n\n //reset active point\n var pts = svg.selectAll('.mg-points circle')\n .classed('unselected', false)\n .classed('selected', false);\n\n if (args.size_accessor) {\n pts.attr('r', args.scalefns.sizef);\n } else {\n pts.attr('r', args.point_size);\n }\n\n //reset active data point text\n if (args.data[0].length > 1) mg_clear_mouseover_container(svg);\n\n if (args.mouseout) {\n args.mouseout(d, i);\n }\n };\n };\n\n this.rolloverMove = function(args) {\n return function(d, i) {\n if (args.mousemove) {\n args.mousemove(d, i);\n }\n };\n };\n\n this.update = function(args) {\n return this;\n };\n\n this.windowListeners = function() {\n mg_window_listeners(this.args);\n return this;\n };\n\n this.init(args);\n }\n\n var defaults = {\n y_padding_percentage: 0.05, // for categorical scales\n y_outer_padding_percentage: .2, // for categorical scales\n ygroup_padding_percentage: 0, // for categorical scales\n ygroup_outer_padding_percentage: 0, // for categorical scales\n x_padding_percentage: 0.05, // for categorical scales\n x_outer_padding_percentage: .2, // for categorical scales\n xgroup_padding_percentage: 0, // for categorical scales\n xgroup_outer_padding_percentage: 0, // for categorical scales\n y_categorical_show_guides: true,\n x_categorical_show_guides: true,\n buffer: 16,\n ls: false,\n lowess: false,\n point_size: 2.5,\n label_accessor: null,\n size_accessor: null,\n color_accessor: null,\n size_range: null, // when we set a size_accessor option, this array determines the size range, e.g. [1,5]\n color_range: null, // e.g. ['blue', 'red'] to color different groups of points\n size_domain: null,\n color_domain: null,\n active_point_size_increase: 1,\n color_type: 'number' // can be either 'number' - the color scale is quantitative - or 'category' - the color scale is qualitative.\n };\n\n MG.register('point', pointChart, defaults);\n}).call(this);\n\n(function() {\n 'use strict';\n\n // TODO add styles to stylesheet instead\n function scaffold(args) {\n var svg = mg_get_svg_child_of(args.target);\n // main margins\n svg.append('line')\n .attr('x1', 0)\n .attr('x2', args.width)\n .attr('y1', args.top)\n .attr('y2', args.top)\n .attr('stroke', 'black');\n svg.append('line')\n .attr('x1', 0)\n .attr('x2', args.width)\n .attr('y1', args.height-args.bottom)\n .attr('y2', args.height-args.bottom)\n .attr('stroke', 'black');\n\n svg.append('line')\n .attr('x1', args.left)\n .attr('x2', args.left)\n .attr('y1', 0)\n .attr('y2', args.height)\n .attr('stroke', 'black');\n\n svg.append('line')\n .attr('x1', args.width-args.right)\n .attr('x2', args.width-args.right)\n .attr('y1', 0)\n .attr('y2', args.height)\n .attr('stroke', 'black');\n\n // plot area margins\n svg.append('line')\n .attr('x1', 0)\n .attr('x2', args.width)\n .attr('y1', args.height-args.bottom-args.buffer)\n .attr('y2', args.height-args.bottom-args.buffer)\n .attr('stroke', 'gray');\n\n svg.append('line')\n .attr('x1', 0)\n .attr('x2', args.width)\n .attr('y1', args.top+args.buffer)\n .attr('y2', args.top+args.buffer)\n .attr('stroke', 'gray');\n\n svg.append('line')\n .attr('x1', args.left + args.buffer)\n .attr('x2', args.left + args.buffer)\n .attr('y1', 0)\n .attr('y2', args.height)\n .attr('stroke', 'gray');\n svg.append('line')\n .attr('x1', args.width -args.right - args.buffer)\n .attr('x2', args.width -args.right - args.buffer)\n .attr('y1', 0)\n .attr('y2', args.height)\n .attr('stroke', 'gray');\n }\n\n // barchart re-write.\n function mg_targeted_legend(args) {\n var labels;\n var plot = '';\n if (args.legend_target) {\n\n var div = d3.select(args.legend_target).append('div').classed('mg-bar-target-legend', true);\n \n if (args.orientation == 'horizontal') labels = args.scales.Y.domain()\n else labels = args.scales.X.domain();\n\n labels.forEach(function(label) {\n var outer_span = div.append('span').classed('mg-bar-target-element', true);\n outer_span.append('span')\n .classed('mg-bar-target-legend-shape', true)\n .style('color', args.scales.COLOR(label))\n .text('\\u25FC ');\n outer_span.append('span')\n .classed('mg-bar-target-legend-text', true)\n .text(label);\n\n });\n }\n }\n\n function legend_on_graph(svg, args) {\n // draw each element at the top right\n // get labels\n\n var labels;\n if (args.orientation=='horizontal') labels = args.scales.Y.domain()\n else labels = args.scales.X.domain();\n\n var lineCount = 0;\n var lineHeight = 1.1;\n var g = svg.append('g').classed(\"mg-bar-legend\", true);\n var textContainer = g.append('text');\n\n //\n\n textContainer\n .selectAll('*')\n .remove();\n textContainer\n .attr('width', args.right)\n .attr('height', 100)\n .attr('text-anchor', 'start');\n\n labels.forEach(function(label) {\n var sub_container = textContainer.append('tspan')\n .attr('x', mg_get_plot_right(args))\n .attr('y', args.height / 2)\n .attr('dy', (lineCount * lineHeight) + 'em');\n sub_container.append('tspan')\n .text('\\u25a0 ')\n .attr('fill', args.scales.COLOR(label))\n .attr('font-size', 20)\n sub_container.append('tspan')\n .text(label)\n .attr('font-weight', 300)\n .attr('font-size', 10);\n lineCount++;\n })\n\n // d.values.forEach(function (datum) {\n // formatted_y = mg_format_y_rollover(args, num, datum);\n\n // if (args.y_rollover_format !== null) {\n // formatted_y = number_rollover_format(args.y_rollover_format, datum, args.y_accessor);\n // } else {\n // formatted_y = args.yax_units + num(datum[args.y_accessor]);\n // }\n\n // sub_container = textContainer.append('tspan').attr('x', 0).attr('y', (lineCount * lineHeight) + 'em');\n // formatted_y = mg_format_y_rollover(args, num, datum);\n // mouseover_tspan(sub_container, '\\u2014 ')\n // .color(args, datum);\n // mouseover_tspan(sub_container, formatted_x + ' ' + formatted_y);\n\n // lineCount++;\n // });\n }\n\n function barChart(args) {\n this.args = args;\n\n this.init = function(args) {\n this.args = args;\n args.x_axis_type = mg_infer_type(args, 'x');\n args.y_axis_type = mg_infer_type(args, 'y');\n\n // this is specific to how rects work in svg, let's keep track of the bar orientation to\n // plot appropriately.\n if (args.x_axis_type == 'categorical') {\n args.orientation = 'vertical';\n } else if (args.y_axis_type == 'categorical') {\n args.orientation = 'horizontal';\n } else if (args.x_axis_type != 'categorical' && args.y_axis_type != 'categorical') {\n // histogram.\n args.orientation = 'vertical';\n }\n\n raw_data_transformation(args);\n\n process_point(args);\n init(args);\n\n var xMaker, yMaker;\n\n if (args.x_axis_type === 'categorical') {\n xMaker = MG.scale_factory(args)\n .namespace('x')\n .categoricalDomainFromData()\n .categoricalRangeBands([0, args.xgroup_height], args.xgroup_accessor === null);\n\n if (args.xgroup_accessor) {\n new MG.scale_factory(args)\n .namespace('xgroup')\n .categoricalDomainFromData()\n .categoricalRangeBands('bottom');\n\n } else {\n args.scales.XGROUP = function(d) {\n return mg_get_plot_left(args) };\n args.scalefns.xgroupf = function(d) {\n return mg_get_plot_left(args) };\n }\n\n args.scalefns.xoutf = function(d) {\n return args.scalefns.xf(d) + args.scalefns.xgroupf(d)\n };\n } else {\n xMaker = MG.scale_factory(args)\n .namespace('x')\n .inflateDomain(true)\n .zeroBottom(args.y_axis_type === 'categorical')\n .numericalDomainFromData((args.baselines || []).map(function(d) {\n return d[args.x_accessor] }))\n .numericalRange('bottom');\n\n args.scalefns.xoutf = args.scalefns.xf;\n }\n\n // y-scale generation. This needs to get simplified.\n if (args.y_axis_type === 'categorical') {\n yMaker = MG.scale_factory(args)\n .namespace('y')\n .zeroBottom(true)\n .categoricalDomainFromData()\n .categoricalRangeBands([0, args.ygroup_height], true);\n\n if (args.ygroup_accessor) {\n\n new MG.scale_factory(args)\n .namespace('ygroup')\n .categoricalDomainFromData()\n .categoricalRangeBands('left');\n\n } else {\n args.scales.YGROUP = function() {\n return mg_get_plot_top(args) };\n args.scalefns.ygroupf = function(d) {\n return mg_get_plot_top(args) };\n\n }\n args.scalefns.youtf = function(d) {\n return args.scalefns.yf(d) + args.scalefns.ygroupf(d) };\n\n } else {\n var baselines = (args.baselines || []).map(function(d) {\n return d[args.y_accessor] });\n\n yMaker = MG.scale_factory(args)\n .namespace('y')\n .inflateDomain(true)\n .zeroBottom(args.x_axis_type === 'categorical')\n .numericalDomainFromData(baselines)\n .numericalRange('left');\n\n args.scalefns.youtf = function(d) {\n return args.scalefns.yf(d) };\n }\n\n if (args.ygroup_accessor !== null) {\n args.ycolor_accessor = args.y_accessor;\n MG.scale_factory(args)\n .namespace('ycolor')\n .scaleName('color')\n .categoricalDomainFromData()\n .categoricalColorRange();\n }\n\n if (args.xgroup_accessor !== null) {\n args.xcolor_accessor = args.x_accessor;\n MG.scale_factory(args)\n .namespace('xcolor')\n .scaleName('color')\n .categoricalDomainFromData()\n .categoricalColorRange();\n }\n\n // if (args.ygroup_accessor !== null) {\n // MG.scale_factory(args)\n // .namespace('ygroup')\n // .categoricalDomainFromData()\n // .categoricalColorRange();\n // }\n\n new MG.axis_factory(args)\n .namespace('x')\n .type(args.x_axis_type)\n .zeroLine(args.y_axis_type === 'categorical')\n .position(args.x_axis_position)\n .draw();\n\n new MG.axis_factory(args)\n .namespace('y')\n .type(args.y_axis_type)\n .zeroLine(args.x_axis_type === 'categorical')\n .position(args.y_axis_position)\n .draw();\n\n //mg_categorical_group_color_scale(args);\n\n this.mainPlot();\n this.markers();\n this.rollover();\n this.windowListeners();\n //scaffold(args)\n\n return this;\n };\n\n this.mainPlot = function() {\n var svg = mg_get_svg_child_of(args.target);\n var data = args.data[0];\n var barplot = svg.select('g.mg-barplot');\n var fresh_render = barplot.empty();\n\n var bars;\n var predictor_bars;\n var pp, pp0;\n var baseline_marks;\n\n var perform_load_animation = fresh_render && args.animate_on_load;\n var should_transition = perform_load_animation || args.transition_on_update;\n var transition_duration = args.transition_duration || 1000;\n\n // draw the plot on first render\n if (fresh_render) {\n barplot = svg.append('g')\n .classed('mg-barplot', true);\n }\n\n bars = barplot.selectAll('.mg-bar')\n .data(data)\n .enter()\n .append('rect')\n .classed('mg-bar', true)\n .classed('default-bar', args.scales.hasOwnProperty('COLOR') ? false : true);\n\n // TODO - reimplement\n\n // reference_accessor {}\n\n // if (args.predictor_accessor) {\n // predictor_bars = barplot.selectAll('.mg-bar-prediction')\n // .data(data.filter(function(d) {\n // return d.hasOwnProperty(args.predictor_accessor) }));\n\n // predictor_bars.exit().remove();\n\n // predictor_bars.enter().append('rect')\n // .classed('mg-bar-prediction', true);\n // }\n\n // if (args.baseline_accessor) {\n // baseline_marks = barplot.selectAll('.mg-bar-baseline')\n // .data(data.filter(function(d) {\n // return d.hasOwnProperty(args.baseline_accessor) }));\n\n // baseline_marks.exit().remove();\n\n // baseline_marks.enter().append('line')\n // .classed('mg-bar-baseline', true);\n // }\n\n var appropriate_size;\n\n // setup transitions\n // if (should_transition) {\n // bars = bars.transition()\n // .duration(transition_duration);\n\n // if (predictor_bars) {\n // predictor_bars = predictor_bars.transition()\n // .duration(transition_duration);\n // }\n\n // if (baseline_marks) {\n // baseline_marks = baseline_marks.transition()\n // .duration(transition_duration);\n // }\n // }\n\n //appropriate_size = args.scales.Y_ingroup.rangeBand()/1.5;\n var length, width, length_type, width_type, length_coord, width_coord,\n length_scalefn, width_scalefn, length_scale, width_scale,\n length_accessor, width_accessor, length_coord_map, width_coord_map,\n length_map, width_map;\n\n var reference_length_map, reference_length_coord_fn;\n\n if (args.orientation == 'vertical') {\n length = 'height';\n width = 'width';\n length_type = args.y_axis_type;\n width_type = args.x_axis_type;\n length_coord = 'y';\n width_coord = 'x';\n length_scalefn = length_type == 'categorical' ? args.scalefns.youtf : args.scalefns.yf;\n width_scalefn = width_type == 'categorical' ? args.scalefns.xoutf : args.scalefns.xf;\n length_scale = args.scales.Y;\n width_scale = args.scales.X;\n length_accessor = args.y_accessor;\n width_accessor = args.x_accessor;\n\n length_coord_map = function(d) {\n var l;\n l = length_scalefn(d);\n if (d[length_accessor] < 0) {\n l = length_scale(0);\n }\n return l;\n }\n\n length_map = function(d) {\n return Math.abs(length_scalefn(d) - length_scale(0));\n }\n\n reference_length_map = function(d) {\n return Math.abs(length_scale(d[args.reference_accessor]) - length_scale(0));\n }\n\n reference_length_coord_fn = function(d){\n return length_scale(d[args.reference_accessor]);\n }\n }\n\n if (args.orientation == 'horizontal') {\n length = 'width';\n width = 'height';\n length_type = args.x_axis_type;\n width_type = args.y_axis_type;\n length_coord = 'x';\n width_coord = 'y';\n length_scalefn = length_type == 'categorical' ? args.scalefns.xoutf : args.scalefns.xf;\n width_scalefn = width_type == 'categorical' ? args.scalefns.youtf : args.scalefns.yf;\n length_scale = args.scales.X;\n width_scale = args.scales.Y;\n length_accessor = args.x_accessor;\n width_accessor = args.y_accessor;\n\n length_coord_map = function(d) {\n var l;\n l = length_scale(0);\n return l;\n }\n\n length_map = function(d) {\n return Math.abs(length_scalefn(d) - length_scale(0));\n }\n\n reference_length_map = function(d) {\n return Math.abs(length_scale(d[args.reference_accessor]) - length_scale(0));\n }\n\n reference_length_coord_fn = function(d){\n return length_scale(0);\n }\n }\n\n // if (perform_load_animation) {\n // bars.attr(length, 0);\n\n // if (predictor_bars) {\n // predictor_bars.attr(length, 0);\n // }\n\n // // if (baseline_marks) {\n // // baseline_marks.attr({\n // // x1: args.scales.X(0),\n // // x2: args.scales.X(0)\n // // });\n // // }\n // }\n\n bars.attr(length_coord, length_coord_map);\n\n // bars.attr(length_coord, 40)\n //bars.attr(width_coord, 70)\n\n\n\n bars.attr(width_coord, function(d) {\n var w;\n if (width_type == 'categorical') {\n w = width_scalefn(d);\n } else {\n w = width_scale(0);\n if (d[width_accessor] < 0) {\n w = width_scalefn(d);\n }\n }\n w = w - args.bar_thickness/2;\n return w;\n });\n\n if (args.scales.COLOR) {\n bars.attr('fill', args.scalefns.colorf)\n }\n\n bars\n .attr(length, length_map)\n .attr(width, function(d) {\n return args.bar_thickness;\n });\n\n\n\n\n if (args.reference_accessor !== null) {\n var reference_data = data.filter(function(d){\n return d.hasOwnProperty(args.reference_accessor);\n })\n var reference_bars = barplot.selectAll('.mg-categorical-reference')\n .data(reference_data)\n .enter()\n .append('rect');\n\n reference_bars\n .attr(length_coord, reference_length_coord_fn)\n .attr(width_coord, function(d) {\n return width_scalefn(d) - args.reference_thickness/2\n })\n .attr(length, reference_length_map)\n .attr(width, args.reference_thickness);\n }\n\n if (args.comparison_accessor !== null) {\n var comparison_thickness = null;\n if (args.comparison_thickness === null) {\n comparison_thickness = args.bar_thickness/2;\n } else {\n comparison_thickness = args.comparison_thickness;\n }\n\n\n var comparison_data = data.filter(function(d) {\n return d.hasOwnProperty(args.comparison_accessor);\n })\n var comparison_marks = barplot.selectAll('.mg-categorical-comparison')\n .data(comparison_data)\n .enter()\n .append('line');\n\n comparison_marks\n .attr(length_coord + '1', function(d){return length_scale(d[args.comparison_accessor])})\n .attr(length_coord + '2', function(d){return length_scale(d[args.comparison_accessor])})\n .attr(width_coord + '1', function(d){\n return width_scalefn(d) - comparison_thickness/2;\n })\n .attr(width_coord + '2', function(d) {\n return width_scalefn(d) + comparison_thickness/2;\n })\n .attr('stroke', 'black')\n .attr('stroke-width', args.comparison_width);\n }\n\n //bars.attr(width_coord, );\n // bars.attr('width', 50);\n // bars.attr('height', 50);\n // bars.attr('y', function(d){\n // var y = args.scales.Y(0);\n // if (d[args.y_accessor] < 0) {\n // y = args.scalefns.yf(d);\n // }\n // return y;\n // });\n\n // bars.attr('x', function(d){\n // return 40;\n // })\n\n // bars.attr('width', function(d){\n // return 100;\n // });\n\n // bars.attr('height', 100);\n\n // bars.attr('fill', 'black');\n // bars.attr('x', function(d) {\n // var x = args.scales.X(0);\n // if (d[args.x_accessor] < 0) {\n // x = args.scalefns.xf(d);\n // }\n // return x;\n // })\n // TODO - reimplement.\n // if (args.predictor_accessor) {\n // predictor_bars\n // .attr('x', args.scales.X(0))\n // .attr('y', function(d) {\n // return args.scalefns.ygroupf(d) + args.scalefns.yf(d) + args.scales.Y.rangeBand() * (7 / 16) // + pp0 * appropriate_size/(pp*2) + appropriate_size / 2;\n // })\n // .attr('height', args.scales.Y.rangeBand() / 8) //appropriate_size / pp)\n // .attr('width', function(d) {\n // return args.scales.X(d[args.predictor_accessor]) - args.scales.X(0);\n // });\n // }\n\n // TODO - reimplement.\n // if (args.baseline_accessor) {\n\n // baseline_marks\n // .attr('x1', function(d) {\n // return args.scales.X(d[args.baseline_accessor]); })\n // .attr('x2', function(d) {\n // return args.scales.X(d[args.baseline_accessor]); })\n // .attr('y1', function(d) {\n // return args.scalefns.ygroupf(d) + args.scalefns.yf(d) + args.scales.Y.rangeBand() / 4\n // })\n // .attr('y2', function(d) {\n // return args.scalefns.ygroupf(d) + args.scalefns.yf(d) + args.scales.Y.rangeBand() * 3 / 4\n // });\n // }\n if (args.legend || (args.color_accessor !== null && args.ygroup_accessor !== args.color_accessor)) {\n if (!args.legend_target) legend_on_graph(svg, args);\n else mg_targeted_legend(args);\n }\n return this;\n };\n\n this.markers = function() {\n markers(args);\n return this;\n };\n\n this.rollover = function() {\n var svg = mg_get_svg_child_of(args.target);\n var g;\n\n if (svg.selectAll('.mg-active-datapoint-container').nodes().length === 0) {\n mg_add_g(svg, 'mg-active-datapoint-container');\n }\n\n //remove the old rollovers if they already exist\n svg.selectAll('.mg-rollover-rect').remove();\n svg.selectAll('.mg-active-datapoint').remove();\n\n // get orientation\n var length, width, length_type, width_type, length_coord, width_coord,\n length_scalefn, width_scalefn, length_scale, width_scale,\n length_accessor, width_accessor;\n\n var length_coord_map, width_coord_map, length_map, width_map;\n\n if (args.orientation == 'vertical') {\n length = 'height';\n width = 'width';\n length_type = args.y_axis_type;\n width_type = args.x_axis_type;\n length_coord = 'y';\n width_coord = 'x';\n length_scalefn = length_type == 'categorical' ? args.scalefns.youtf : args.scalefns.yf;\n width_scalefn = width_type == 'categorical' ? args.scalefns.xoutf : args.scalefns.xf;\n length_scale = args.scales.Y;\n width_scale = args.scales.X;\n length_accessor = args.y_accessor;\n width_accessor = args.x_accessor;\n\n length_coord_map = function(d){\n return mg_get_plot_top(args);\n }\n\n length_map = function(d) {\n return args.height -args.top-args.bottom-args.buffer*2\n }\n }\n\n if (args.orientation == 'horizontal') {\n length = 'width';\n width = 'height';\n length_type = args.x_axis_type;\n width_type = args.y_axis_type;\n length_coord = 'x';\n width_coord = 'y';\n length_scalefn = length_type == 'categorical' ? args.scalefns.xoutf : args.scalefns.xf;\n width_scalefn = width_type == 'categorical' ? args.scalefns.youtf : args.scalefns.yf;\n length_scale = args.scales.X;\n width_scale = args.scales.Y;\n length_accessor = args.x_accessor;\n width_accessor = args.y_accessor;\n\n length_coord_map = function(d){\n var l;\n l = length_scale(0);\n return l;\n }\n\n length_map = function(d) {\n return args.width -args.left-args.right-args.buffer*2\n }\n }\n\n //rollover text\n var rollover_x, rollover_anchor;\n if (args.rollover_align === 'right') {\n rollover_x = args.width - args.right;\n rollover_anchor = 'end';\n } else if (args.rollover_align === 'left') {\n rollover_x = args.left;\n rollover_anchor = 'start';\n } else {\n rollover_x = (args.width - args.left - args.right) / 2 + args.left;\n rollover_anchor = 'middle';\n }\n\n svg.append('text')\n .attr('class', 'mg-active-datapoint')\n .attr('xml:space', 'preserve')\n .attr('x', rollover_x)\n .attr('y', args.top * 0.75)\n .attr('dy', '.35em')\n .attr('text-anchor', rollover_anchor);\n\n g = svg.append('g')\n .attr('class', 'mg-rollover-rect');\n\n //draw rollover bars\n var bars = g.selectAll(\".mg-bar-rollover\")\n .data(args.data[0]).enter()\n .append(\"rect\")\n .attr('class', 'mg-bar-rollover');\n\n bars.attr('opacity', 0)\n .attr(length_coord, length_coord_map)\n .attr(width_coord, function(d) {\n var w;\n if (width_type == 'categorical') {\n w = width_scalefn(d);\n } else {\n w = width_scale(0);\n if (d[width_accessor] < 0) {\n w = width_scalefn(d);\n }\n }\n w = w - args.bar_thickness/2;\n return w;\n });\n\n bars.attr(length, length_map)\n bars.attr(width, function(d) {\n return args.bar_thickness;\n });\n\n bars\n .on('mouseover', this.rolloverOn(args))\n .on('mouseout', this.rolloverOff(args))\n .on('mousemove', this.rolloverMove(args));\n\n return this;\n };\n\n this.rolloverOn = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n var label_accessor = this.is_vertical ? args.x_accessor : args.y_accessor;\n var data_accessor = this.is_vertical ? args.y_accessor : args.x_accessor;\n var label_units = this.is_vertical ? args.yax_units : args.xax_units;\n\n return function(d, i) {\n\n var fmt = MG.time_format(args.utc_time, '%b %e, %Y');\n var num = format_rollover_number(args);\n\n //highlight active bar\n var bar = svg.selectAll('g.mg-barplot .mg-bar')\n .filter(function(d, j) {\n return j === i;\n }).classed('active', true);\n\n if (args.scales.hasOwnProperty('COLOR')) {\n bar.attr('fill', d3.rgb(args.scalefns.colorf(d)).darker());\n } else {\n bar.classed('default-active', true);\n }\n\n //update rollover text\n if (args.show_rollover_text) {\n var mouseover = mg_mouseover_text(args, { svg: svg });\n var row = mouseover.mouseover_row();\n\n if (args.ygroup_accessor) row.text(d[args.ygroup_accessor] + ' ').bold();\n\n row.text(mg_format_x_mouseover(args, d));\n row.text(args.y_accessor + ': ' + d[args.y_accessor]);\n if (args.predictor_accessor || args.baseline_accessor) {\n row = mouseover.mouseover_row();\n\n if (args.predictor_accessor) row.text(mg_format_data_for_mouseover(args, d, null, args.predictor_accessor, false))\n if (args.baseline_accessor) row.text(mg_format_data_for_mouseover(args, d, null, args.baseline_accessor, false))\n }\n }\n if (args.mouseover) {\n args.mouseover(d, i);\n }\n };\n };\n\n this.rolloverOff = function(args) {\n var svg = mg_get_svg_child_of(args.target);\n\n return function(d, i) {\n //reset active bar\n var bar = svg.selectAll('g.mg-barplot .mg-bar.active').classed('active', false);\n\n if (args.scales.hasOwnProperty('COLOR')) {\n bar.attr('fill', args.scalefns.colorf(d));\n } else {\n bar.classed('default-active', false);\n }\n\n //reset active data point text\n svg.select('.mg-active-datapoint')\n .text('');\n\n mg_clear_mouseover_container(svg);\n\n if (args.mouseout) {\n args.mouseout(d, i);\n }\n };\n };\n\n this.rolloverMove = function(args) {\n return function(d, i) {\n if (args.mousemove) {\n args.mousemove(d, i);\n }\n };\n };\n\n this.windowListeners = function() {\n mg_window_listeners(this.args);\n return this;\n };\n\n this.init(args);\n }\n\n var defaults = {\n y_padding_percentage: 0.05, // for categorical scales\n y_outer_padding_percentage: .2, // for categorical scales\n ygroup_padding_percentage: 0, // for categorical scales\n ygroup_outer_padding_percentage: 0, // for categorical scales\n x_padding_percentage: 0.05, // for categorical scales\n x_outer_padding_percentage: .2, // for categorical scales\n xgroup_padding_percentage: 0, // for categorical scales\n xgroup_outer_padding_percentage: 0, // for categorical scales\n buffer: 16,\n y_accessor: 'factor',\n x_accessor: 'value',\n reference_accessor: null,\n comparison_accessor: null,\n secondary_label_accessor: null,\n color_accessor: null,\n color_type: 'category',\n color_domain: null,\n reference_thickness: 1,\n comparison_width: 3,\n comparison_thickness: null,\n legend: false,\n legend_target: null,\n mouseover_align: 'right',\n baseline_accessor: null,\n predictor_accessor: null,\n predictor_proportion: 5,\n show_bar_zero: true,\n binned: true,\n truncate_x_labels: true,\n truncate_y_labels: true\n };\n\n MG.register('bar', barChart, defaults);\n\n}).call(this);\n\n/*\nData Tables\n\nAlong with histograms, bars, lines, and scatters, a simple data table can take you far.\nWe often just want to look at numbers, organized as a table, where columns are variables,\nand rows are data points. Sometimes we want a cell to have a small graphic as the main\ncolumn element, in which case we want small multiples. sometimes we want to\n\nvar table = New data_table(data)\n .target('div#data-table')\n .title({accessor: 'point_name', align: 'left'})\n .description({accessor: 'description'})\n .number({accessor: ''})\n\n*/\n\nMG.data_table = function(args) {\n 'use strict';\n this.args = args;\n this.args.standard_col = { width: 150, font_size: 12, font_weight: 'normal' };\n this.args.columns = [];\n this.formatting_options = [\n ['color', 'color'],\n ['font-weight', 'font_weight'],\n ['font-style', 'font_style'],\n ['font-size', 'font_size']\n ];\n\n this._strip_punctuation = function(s) {\n var punctuationless = s.replace(/[^a-zA-Z0-9 _]+/g, '');\n var finalString = punctuationless.replace(/ +?/g, '');\n return finalString;\n };\n\n this._format_element = function(element, value, args) {\n this.formatting_options.forEach(function(fo) {\n var attr = fo[0];\n var key = fo[1];\n if (args[key]) element.style(attr,\n typeof args[key] === 'string' ||\n typeof args[key] === 'number' ?\n args[key] : args[key](value));\n });\n };\n\n this._add_column = function(_args, arg_type) {\n var standard_column = this.args.standard_col;\n var args = merge_with_defaults(MG.clone(_args), MG.clone(standard_column));\n args.type = arg_type;\n this.args.columns.push(args);\n };\n\n this.target = function() {\n var target = arguments[0];\n this.args.target = target;\n return this;\n };\n\n this.title = function() {\n this._add_column(arguments[0], 'title');\n return this;\n };\n\n this.text = function() {\n this._add_column(arguments[0], 'text');\n return this;\n };\n\n this.bullet = function() {\n /*\n text label\n main value\n comparative measure\n any number of ranges\n\n additional args:\n no title\n xmin, xmax\n format: percentage\n xax_formatter\n */\n return this;\n };\n\n this.sparkline = function() {\n return this;\n };\n\n this.number = function() {\n this._add_column(arguments[0], 'number');\n return this;\n };\n\n this.display = function() {\n var args = this.args;\n\n chart_title(args);\n\n var target = args.target;\n var table = d3.select(target).append('table').classed('mg-data-table', true);\n var colgroup = table.append('colgroup');\n var thead = table.append('thead');\n var tbody = table.append('tbody');\n var this_column;\n var this_title;\n\n var tr, th, td_accessor, td_type, td_value, th_text, td_text, td;\n var col;\n var h;\n\n tr = thead.append('tr');\n\n for (h = 0; h < args.columns.length; h++) {\n var this_col = args.columns[h];\n td_type = this_col.type;\n th_text = this_col.label;\n th_text = th_text === undefined ? '' : th_text;\n th = tr.append('th')\n .style('width', this_col.width)\n .style('text-align', td_type === 'title' ? 'left' : 'right')\n .text(th_text);\n\n if (args.show_tooltips && this_col.description && mg_jquery_exists()) {\n th.append('i')\n .classed('fa', true)\n .classed('fa-question-circle', true)\n .classed('fa-inverse', true);\n\n $(th.node()).popover({\n html: true,\n animation: false,\n content: this_col.description,\n trigger: 'hover',\n placement: 'top',\n container: $(th.node())\n });\n }\n }\n\n for (h = 0; h < args.columns.length; h++) {\n col = colgroup.append('col');\n if (args.columns[h].type === 'number') {\n col.attr('align', 'char').attr('char', '.');\n }\n }\n\n for (var i = 0; i < args.data.length; i++) {\n tr = tbody.append('tr');\n for (var j = 0; j < args.columns.length; j++) {\n this_column = args.columns[j];\n td_accessor = this_column.accessor;\n td_value = td_text = args.data[i][td_accessor];\n td_type = this_column.type;\n\n if (td_type === 'number') {\n //td_text may need to be rounded\n if (this_column.hasOwnProperty('round') && !this_column.hasOwnProperty('format')) {\n // round according to the number value in this_column.round\n td_text = d3.format('0,.' + this_column.round + 'f')(td_text);\n }\n\n if (this_column.hasOwnProperty('value_formatter')) {\n // provide a function that formats the text according to the function this_column.format.\n td_text = this_column.value_formatter(td_text);\n }\n\n if (this_column.hasOwnProperty('format')) {\n // this is a shorthand for percentage formatting, and others if need be.\n // supported: 'percentage', 'count', 'temperature'\n\n if (this_column.round) {\n td_text = Math.round(td_text, this_column.round);\n }\n\n var this_format = this_column.format;\n var formatter;\n\n if (this_format === 'percentage') formatter = d3.format('.0%');\n if (this_format === 'count') formatter = d3.format(',.0f');\n if (this_format === 'temperature') formatter = function(t) {\n return t + '°'; };\n\n td_text = formatter(td_text);\n }\n\n if (this_column.hasOwnProperty('currency')) {\n // this is another shorthand for formatting according to a currency amount, which gets appended to front of number\n td_text = this_column.currency + td_text;\n }\n }\n\n td = tr.append('td')\n .classed('table-' + td_type, true)\n .classed('table-' + td_type + '-' + this._strip_punctuation(td_accessor), true)\n .attr('data-value', td_value)\n .style('width', this_column.width)\n .style('text-align', td_type === 'title' || td_type === 'text' ? 'left' : 'right');\n\n this._format_element(td, td_value, this_column);\n\n if (td_type === 'title') {\n this_title = td.append('div').text(td_text);\n this._format_element(this_title, td_text, this_column);\n\n if (args.columns[j].hasOwnProperty('secondary_accessor')) {\n td.append('div')\n .text(args.data[i][args.columns[j].secondary_accessor])\n .classed(\"secondary-title\", true);\n }\n } else {\n td.text(td_text);\n }\n }\n }\n\n return this;\n };\n\n return this;\n};\n\n(function() {\n 'use strict';\n\n function mg_missing_add_text(svg, args) {\n svg.selectAll('.mg-missing-text').data([args.missing_text])\n .enter().append('text')\n .attr('class', 'mg-missing-text')\n .attr('x', args.width / 2)\n .attr('y', args.height / 2)\n .attr('dy', '.50em')\n .attr('text-anchor', 'middle')\n .text(args.missing_text);\n }\n\n function mg_missing_x_scale(args) {\n args.scales.X = d3.scaleLinear()\n .domain([0, args.data.length])\n .range([mg_get_plot_left(args), mg_get_plot_right(args)]);\n args.scalefns.yf = function(di) {\n return args.scales.Y(di.y); };\n }\n\n function mg_missing_y_scale(args) {\n args.scales.Y = d3.scaleLinear()\n .domain([-2, 2])\n .range([args.height - args.bottom - args.buffer * 2, args.top]);\n args.scalefns.xf = function(di) {\n return args.scales.X(di.x); };\n }\n\n function mg_make_fake_data(args) {\n var data = [];\n for (var x = 1; x <= 50; x++) {\n data.push({ 'x': x, 'y': Math.random() - (x * 0.03) });\n }\n args.data = data;\n }\n\n function mg_add_missing_background_rect(g, args) {\n g.append('svg:rect')\n .classed('mg-missing-background', true)\n .attr('x', args.buffer)\n .attr('y', args.buffer + args.title_y_position * 2)\n .attr('width', args.width - args.buffer * 2)\n .attr('height', args.height - args.buffer * 2 - args.title_y_position * 2)\n .attr('rx', 15)\n .attr('ry', 15);\n }\n\n function mg_missing_add_line(g, args) {\n var line = d3.line()\n .x(args.scalefns.xf)\n .y(args.scalefns.yf)\n .curve(args.interpolate);\n\n g.append('path')\n .attr('class', 'mg-main-line mg-line1-color')\n .attr('d', line(args.data));\n }\n\n function mg_missing_add_area(g, args) {\n var area = d3.area()\n .x(args.scalefns.xf)\n .y0(args.scales.Y.range()[0])\n .y1(args.scalefns.yf)\n .curve(args.interpolate);\n\n g.append('path')\n .attr('class', 'mg-main-area mg-area1-color')\n .attr('d', area(args.data));\n }\n\n function mg_remove_all_children(args) {\n d3.select(args.target).selectAll('svg *').remove();\n }\n\n function mg_missing_remove_legend(args) {\n if (args.legend_target) {\n d3.select(args.legend_target).html('');\n }\n }\n\n function missingData(args) {\n this.init = function(args) {\n this.args = args;\n\n mg_init_compute_width(args);\n mg_init_compute_height(args);\n\n // create svg if one doesn't exist\n\n var container = d3.select(args.target);\n mg_raise_container_error(container, args);\n var svg = container.selectAll('svg');\n mg_remove_svg_if_chart_type_has_changed(svg, args);\n svg = mg_add_svg_if_it_doesnt_exist(svg, args);\n mg_adjust_width_and_height_if_changed(svg, args);\n mg_set_viewbox_for_scaling(svg, args);\n mg_remove_all_children(args);\n\n svg.classed('mg-missing', true);\n mg_missing_remove_legend(args);\n\n chart_title(args);\n\n // are we adding a background placeholder\n if (args.show_missing_background) {\n mg_make_fake_data(args);\n mg_missing_x_scale(args);\n mg_missing_y_scale(args);\n var g = mg_add_g(svg, 'mg-missing-pane');\n\n mg_add_missing_background_rect(g, args);\n mg_missing_add_line(g, args);\n mg_missing_add_area(g, args);\n }\n\n mg_missing_add_text(svg, args);\n\n this.windowListeners();\n\n return this;\n };\n\n this.windowListeners = function() {\n mg_window_listeners(this.args);\n return this;\n };\n\n this.init(args);\n }\n\n var defaults = {\n top: 40, // the size of the top margin\n bottom: 30, // the size of the bottom margin\n right: 10, // size of the right margin\n left: 0, // size of the left margin\n buffer: 8, // the buffer between the actual chart area and the margins\n legend_target: '',\n width: 350,\n height: 220,\n missing_text: 'Data currently missing or unavailable',\n scalefns: {},\n scales: {},\n show_tooltips: true,\n show_missing_background: true\n };\n\n MG.register('missing-data', missingData, defaults);\n}).call(this);\n\nfunction mg_process_scale_ticks(args, axis) {\n var accessor;\n var scale_ticks;\n var max;\n\n if (axis === 'x') {\n accessor = args.x_accessor;\n scale_ticks = args.scales.X.ticks(args.xax_count);\n max = args.processed.max_x;\n } else if (axis === 'y') {\n accessor = args.y_accessor;\n scale_ticks = args.scales.Y.ticks(args.yax_count)\n max = args.processed.max_y;\n }\n\n function log10(val) {\n if (val === 1000) {\n return 3;\n }\n if (val === 1000000) {\n return 7;\n }\n return Math.log(val) / Math.LN10;\n }\n\n if ((axis === 'x' && args.x_scale_type === 'log') || (axis === 'y' && args.y_scale_type === 'log')) {\n // get out only whole logs\n scale_ticks = scale_ticks.filter(function(d) {\n return Math.abs(log10(d)) % 1 < 1e-6 || Math.abs(log10(d)) % 1 > 1 - 1e-6;\n });\n }\n\n // filter out fraction ticks if our data is ints and if xmax > number of generated ticks\n var number_of_ticks = scale_ticks.length;\n\n // is our data object all ints?\n var data_is_int = true;\n args.data.forEach(function(d, i) {\n d.forEach(function(d, i) {\n if (d[accessor] % 1 !== 0) {\n data_is_int = false;\n return false;\n }\n });\n });\n\n if (data_is_int && number_of_ticks > max && args.format === 'count') {\n // remove non-integer ticks\n scale_ticks = scale_ticks.filter(function(d) {\n return d % 1 === 0;\n });\n }\n\n if (axis === 'x') {\n args.processed.x_ticks = scale_ticks;\n } else if (axis === 'y') {\n args.processed.y_ticks = scale_ticks;\n }\n}\n\nfunction raw_data_transformation(args) {\n 'use strict';\n\n // dupe our data so we can modify it without adverse effect\n args.data = MG.clone(args.data);\n\n // we need to account for a few data format cases:\n // #0 {bar1:___, bar2:___} // single object (for, say, bar charts)\n // #1 [{key:__, value:__}, ...] // unnested obj-arrays\n // #2 [[{key:__, value:__}, ...], [{key:__, value:__}, ...]] // nested obj-arrays\n // #3 [[4323, 2343],..] // unnested 2d array\n // #4 [[[4323, 2343],..] , [[4323, 2343],..]] // nested 2d array\n args.single_object = false; // for bar charts.\n args.array_of_objects = false;\n args.array_of_arrays = false;\n args.nested_array_of_arrays = false;\n args.nested_array_of_objects = false;\n\n // is the data object a nested array?\n\n if (is_array_of_arrays(args.data)) {\n args.nested_array_of_objects = args.data.map(function(d) {\n return is_array_of_objects_or_empty(d);\n }); // Case #2\n args.nested_array_of_arrays = args.data.map(function(d) {\n return is_array_of_arrays(d);\n }); // Case #4\n } else {\n args.array_of_objects = is_array_of_objects(args.data); // Case #1\n args.array_of_arrays = is_array_of_arrays(args.data); // Case #3\n }\n\n if (args.chart_type === 'line') {\n if (args.array_of_objects || args.array_of_arrays) {\n args.data = [args.data];\n }\n } else {\n if (!(mg_is_array(args.data[0]))) {\n args.data = [args.data];\n }\n }\n // if the y_accessor is an array, break it up and store the result in args.data\n mg_process_multiple_x_accessors(args);\n mg_process_multiple_y_accessors(args);\n\n // if user supplies keyword in args.color, change to arg.colors.\n // this is so that the API remains fairly sensible and legible.\n if (args.color !== undefined) {\n args.colors = args.color;\n }\n\n // if user has supplied args.colors, and that value is a string, turn it into an array.\n if (args.colors !== null && typeof args.colors === 'string') {\n args.colors = [args.colors];\n }\n\n // sort x-axis data\n if (args.chart_type === 'line' && args.x_sort === true) {\n for (var i = 0; i < args.data.length; i++) {\n args.data[i].sort(function(a, b) {\n return a[args.x_accessor] - b[args.x_accessor];\n });\n }\n }\n\n return this;\n}\n\nfunction mg_process_multiple_accessors(args, which_accessor) {\n // turns an array of accessors into ...\n if (mg_is_array(args[which_accessor])) {\n args.data = args.data.map(function(_d) {\n return args[which_accessor].map(function(ya) {\n return _d.map(function(di) {\n di = MG.clone(di);\n\n if (di[ya] === undefined) {\n return undefined;\n }\n\n di['multiline_' + which_accessor] = di[ya];\n return di;\n }).filter(function(di) {\n return di !== undefined;\n });\n });\n })[0];\n args[which_accessor] = 'multiline_' + which_accessor;\n }\n}\n\nfunction mg_process_multiple_x_accessors(args) {\n mg_process_multiple_accessors(args, 'x_accessor');\n}\n\nfunction mg_process_multiple_y_accessors(args) {\n mg_process_multiple_accessors(args, 'y_accessor');\n}\n\nMG.raw_data_transformation = raw_data_transformation;\n\nfunction process_line(args) {\n 'use strict';\n\n var time_frame;\n\n // do we have a time-series?\n var is_time_series = d3.sum(args.data.map(function(series) {\n return series.length > 0 && mg_is_date(series[0][args.x_accessor]);\n })) > 0;\n\n // are we replacing missing y values with zeros?\n if ((args.missing_is_zero || args.missing_is_hidden) && args.chart_type === 'line' && is_time_series) {\n for (var i = 0; i < args.data.length; i++) {\n // we need to have a dataset of length > 2, so if it's less than that, skip\n if (args.data[i].length <= 1) {\n continue;\n }\n\n var first = args.data[i][0];\n var last = args.data[i][args.data[i].length - 1];\n\n // initialize our new array for storing the processed data\n var processed_data = [];\n\n // we'll be starting from the day after our first date\n var start_date = MG.clone(first[args.x_accessor]).setDate(first[args.x_accessor].getDate() + 1);\n\n // if we've set a max_x, add data points up to there\n var from = (args.min_x) ? args.min_x : start_date;\n var upto = (args.max_x) ? args.max_x : last[args.x_accessor];\n\n time_frame = mg_get_time_frame((upto - from) / 1000);\n\n if (['four-days', 'many-days', 'many-months', 'years', 'default'].indexOf(time_frame) !== -1 && args.missing_is_hidden_accessor === null) {\n for (var d = new Date(from); d <= upto; d.setDate(d.getDate() + 1)) {\n var o = {};\n d.setHours(0, 0, 0, 0);\n\n // add the first date item, we'll be starting from the day after our first date\n if (Date.parse(d) === Date.parse(new Date(start_date))) {\n processed_data.push(MG.clone(args.data[i][0]));\n }\n\n // check to see if we already have this date in our data object\n var existing_o = null;\n args.data[i].forEach(function(val, i) {\n if (Date.parse(val[args.x_accessor]) === Date.parse(new Date(d))) {\n existing_o = val;\n\n return false;\n }\n });\n\n // if we don't have this date in our data object, add it and set it to zero\n if (!existing_o) {\n o[args.x_accessor] = new Date(d);\n o[args.y_accessor] = 0;\n o['_missing'] = true; //we want to distinguish between zero-value and missing observations\n processed_data.push(o);\n }\n\n // if the data point has, say, a 'missing' attribute set or if its\n // y-value is null identify it internally as missing\n else if (existing_o[args.missing_is_hidden_accessor] || existing_o[args.y_accessor] === null) {\n existing_o['_missing'] = true;\n processed_data.push(existing_o);\n }\n\n //otherwise, use the existing object for that date\n else {\n processed_data.push(existing_o);\n }\n }\n } else {\n for (var j = 0; j < args.data[i].length; j += 1) {\n var obj = MG.clone(args.data[i][j]);\n obj['_missing'] = args.data[i][j][args.missing_is_hidden_accessor];\n processed_data.push(obj);\n }\n }\n\n // update our date object\n args.data[i] = processed_data;\n }\n }\n\n return this;\n}\n\nMG.process_line = process_line;\n\nfunction process_histogram(args) {\n 'use strict';\n\n // if args.binned == false, then we need to bin the data appropriately.\n // if args.binned == true, then we need to make sure to compute the relevant computed data.\n // the outcome of either of these should be something in args.computed_data.\n // the histogram plotting function will be looking there for the data to plot.\n\n // we need to compute an array of objects.\n // each object has an x, y, and dx.\n\n // histogram data is always single dimension\n var our_data = args.data[0];\n\n var extracted_data;\n if (args.binned === false) {\n // use d3's built-in layout.histogram functionality to compute what you need.\n\n if (typeof(our_data[0]) === 'object') {\n // we are dealing with an array of objects. Extract the data value of interest.\n extracted_data = our_data\n .map(function(d) {\n return d[args.x_accessor];\n });\n } else if (typeof(our_data[0]) === 'number') {\n // we are dealing with a simple array of numbers. No extraction needed.\n extracted_data = our_data;\n } else {\n console.log('TypeError: expected an array of numbers, found ' + typeof(our_data[0]));\n return;\n }\n\n var hist = d3.histogram();\n if (args.bins) {\n hist.thresholds(args.bins);\n }\n\n var bins = hist(extracted_data);\n args.processed_data = bins.map(function(d) {\n return { 'x': d.x0, 'y': d.length };\n });\n } else {\n // here, we just need to reconstruct the array of objects\n // take the x accessor and y accessor.\n // pull the data as x and y. y is count.\n\n args.processed_data = our_data.map(function(d) {\n return { 'x': d[args.x_accessor], 'y': d[args.y_accessor] };\n });\n\n var this_pt;\n var next_pt;\n\n // we still need to compute the dx component for each data point\n for (var i = 0; i < args.processed_data.length; i++) {\n this_pt = args.processed_data[i];\n if (i === args.processed_data.length - 1) {\n this_pt.dx = args.processed_data[i - 1].dx;\n } else {\n next_pt = args.processed_data[i + 1];\n this_pt.dx = next_pt.x - this_pt.x;\n }\n }\n }\n\n // capture the original data and accessors before replacing args.data\n if (!args.processed) {\n args.processed = {};\n }\n args.processed.original_data = args.data;\n args.processed.original_x_accessor = args.x_accessor;\n args.processed.original_y_accessor = args.y_accessor;\n\n args.data = [args.processed_data];\n args.x_accessor = args.processed_x_accessor;\n args.y_accessor = args.processed_y_accessor;\n\n return this;\n}\n\nMG.process_histogram = process_histogram;\n\n// for use with bar charts, etc.\nfunction process_categorical_variables(args) {\n 'use strict';\n\n var extracted_data, processed_data = {},\n pd = [];\n //var our_data = args.data[0];\n var label_accessor = args.bar_orientation === 'vertical' ? args.x_accessor : args.y_accessor;\n var data_accessor = args.bar_orientation === 'vertical' ? args.y_accessor : args.x_accessor;\n\n return this;\n}\n\nMG.process_categorical_variables = process_categorical_variables;\n\nfunction process_point(args) {\n 'use strict';\n\n var data = args.data[0];\n var x = data.map(function(d) {\n return d[args.x_accessor];\n });\n var y = data.map(function(d) {\n return d[args.y_accessor];\n });\n\n if (args.least_squares) {\n args.ls_line = least_squares(x, y);\n }\n\n return this;\n}\n\nMG.process_point = process_point;\n\nfunction add_ls(args) {\n var svg = mg_get_svg_child_of(args.target);\n var data = args.data[0];\n var min_x = d3.min(data, function(d) {\n return d[args.x_accessor]; });\n var max_x = d3.max(data, function(d) {\n return d[args.x_accessor]; });\n\n d3.select(args.target).selectAll('.mg-least-squares-line').remove();\n\n svg.append('svg:line')\n .attr('x1', args.scales.X(min_x))\n .attr('x2', args.scales.X(max_x))\n .attr('y1', args.scales.Y(args.ls_line.fit(min_x)))\n .attr('y2', args.scales.Y(args.ls_line.fit(max_x)))\n .attr('class', 'mg-least-squares-line');\n}\n\nMG.add_ls = add_ls;\n\nfunction add_lowess(args) {\n var svg = mg_get_svg_child_of(args.target);\n var lowess = args.lowess_line;\n\n var line = d3.svg.line()\n .x(function(d) {\n return args.scales.X(d.x); })\n .y(function(d) {\n return args.scales.Y(d.y); })\n .interpolate(args.interpolate);\n\n svg.append('path')\n .attr('d', line(lowess))\n .attr('class', 'mg-lowess-line');\n}\n\nMG.add_lowess = add_lowess;\n\nfunction lowess_robust(x, y, alpha, inc) {\n // Used http://www.unc.edu/courses/2007spring/biol/145/001/docs/lectures/Oct27.html\n // for the clear explanation of robust lowess.\n\n // calculate the the first pass.\n var _l;\n var r = [];\n var yhat = d3.mean(y);\n var i;\n for (i = 0; i < x.length; i += 1) { r.push(1); }\n _l = _calculate_lowess_fit(x, y, alpha, inc, r);\n var x_proto = _l.x;\n var y_proto = _l.y;\n\n // Now, take the fit, recalculate the weights, and re-run LOWESS using r*w instead of w.\n\n for (i = 0; i < 100; i += 1) {\n r = d3.zip(y_proto, y).map(function(yi) {\n return Math.abs(yi[1] - yi[0]);\n });\n\n var q = d3.quantile(r.sort(), 0.5);\n\n r = r.map(function(ri) {\n return _bisquare_weight(ri / (6 * q));\n });\n\n _l = _calculate_lowess_fit(x, y, alpha, inc, r);\n x_proto = _l.x;\n y_proto = _l.y;\n }\n\n return d3.zip(x_proto, y_proto).map(function(d) {\n var p = {};\n p.x = d[0];\n p.y = d[1];\n return p;\n });\n}\n\nMG.lowess_robust = lowess_robust;\n\nfunction lowess(x, y, alpha, inc) {\n var r = [];\n for (var i = 0; i < x.length; i += 1) { r.push(1); }\n var _l = _calculate_lowess_fit(x, y, alpha, inc, r);\n}\n\nMG.lowess = lowess;\n\nfunction least_squares(x_, y_) {\n var x, y, xi, yi,\n _x = 0,\n _y = 0,\n _xy = 0,\n _xx = 0;\n\n var n = x_.length;\n if (mg_is_date(x_[0])) {\n x = x_.map(function(d) {\n return d.getTime();\n });\n } else {\n x = x_;\n }\n\n if (mg_is_date(y_[0])) {\n y = y_.map(function(d) {\n return d.getTime();\n });\n } else {\n y = y_;\n }\n\n var xhat = d3.mean(x);\n var yhat = d3.mean(y);\n var numerator = 0,\n denominator = 0;\n\n for (var i = 0; i < x.length; i++) {\n xi = x[i];\n yi = y[i];\n numerator += (xi - xhat) * (yi - yhat);\n denominator += (xi - xhat) * (xi - xhat);\n }\n\n var beta = numerator / denominator;\n var x0 = yhat - beta * xhat;\n\n return {\n x0: x0,\n beta: beta,\n fit: function(x) {\n return x0 + x * beta;\n }\n };\n}\n\nMG.least_squares = least_squares;\n\nfunction _pow_weight(u, w) {\n if (u >= 0 && u <= 1) {\n return Math.pow(1 - Math.pow(u, w), w);\n } else {\n return 0;\n }\n}\n\nfunction _bisquare_weight(u) {\n return _pow_weight(u, 2);\n}\n\nfunction _tricube_weight(u) {\n return _pow_weight(u, 3);\n}\n\nfunction _neighborhood_width(x0, xis) {\n return Array.max(xis.map(function(xi) {\n return Math.abs(x0 - xi);\n }));\n}\n\nfunction _manhattan(x1, x2) {\n return Math.abs(x1 - x2);\n}\n\nfunction _weighted_means(wxy) {\n var wsum = d3.sum(wxy.map(function(wxyi) {\n return wxyi.w; }));\n\n return {\n xbar: d3.sum(wxy.map(function(wxyi) {\n return wxyi.w * wxyi.x;\n })) / wsum,\n ybar: d3.sum(wxy.map(function(wxyi) {\n return wxyi.w * wxyi.y;\n })) / wsum\n };\n}\n\nfunction _weighted_beta(wxy, xbar, ybar) {\n var num = d3.sum(wxy.map(function(wxyi) {\n return Math.pow(wxyi.w, 2) * (wxyi.x - xbar) * (wxyi.y - ybar);\n }));\n\n var denom = d3.sum(wxy.map(function(wxyi) {\n return Math.pow(wxyi.w, 2) * Math.pow(wxyi.x - xbar, 2);\n }));\n\n return num / denom;\n}\n\nfunction _weighted_least_squares(wxy) {\n var ybar, xbar, beta_i, x0;\n\n var _wm = _weighted_means(wxy);\n\n xbar = _wm.xbar;\n ybar = _wm.ybar;\n\n var beta = _weighted_beta(wxy, xbar, ybar);\n\n return {\n beta: beta,\n xbar: xbar,\n ybar: ybar,\n x0: ybar - beta * xbar\n\n };\n}\n\nfunction _calculate_lowess_fit(x, y, alpha, inc, residuals) {\n // alpha - smoothing factor. 0 < alpha < 1/\n //\n //\n var k = Math.floor(x.length * alpha);\n\n var sorted_x = x.slice();\n\n sorted_x.sort(function(a, b) {\n if (a < b) {\n return -1; } else if (a > b) {\n return 1; }\n\n return 0;\n });\n\n var x_max = d3.quantile(sorted_x, 0.98);\n var x_min = d3.quantile(sorted_x, 0.02);\n\n var xy = d3.zip(x, y, residuals).sort();\n\n var size = Math.abs(x_max - x_min) / inc;\n\n var smallest = x_min;\n var largest = x_max;\n var x_proto = d3.range(smallest, largest, size);\n\n var xi_neighbors;\n var x_i, beta_i, x0_i, delta_i, xbar, ybar;\n\n // for each prototype, find its fit.\n var y_proto = [];\n\n for (var i = 0; i < x_proto.length; i += 1) {\n x_i = x_proto[i];\n\n // get k closest neighbors.\n xi_neighbors = xy.map(function(xyi) {\n return [\n Math.abs(xyi[0] - x_i),\n xyi[0],\n xyi[1],\n xyi[2]\n ];\n }).sort().slice(0, k);\n\n // Get the largest distance in the neighbor set.\n delta_i = d3.max(xi_neighbors)[0];\n\n // Prepare the weights for mean calculation and WLS.\n\n xi_neighbors = xi_neighbors.map(function(wxy) {\n return {\n w: _tricube_weight(wxy[0] / delta_i) * wxy[3],\n x: wxy[1],\n y: wxy[2]\n };\n });\n\n // Find the weighted least squares, obviously.\n var _output = _weighted_least_squares(xi_neighbors);\n\n x0_i = _output.x0;\n beta_i = _output.beta;\n\n //\n y_proto.push(x0_i + beta_i * x_i);\n }\n\n return { x: x_proto, y: y_proto };\n}\n\nfunction format_rollover_number(args) {\n var num;\n if (args.format === 'count') {\n num = function(d) {\n var is_float = d % 1 !== 0;\n var pf;\n\n if (is_float) {\n pf = d3.format(',.' + args.decimals + 'f');\n } else {\n pf = d3.format(',.0f');\n }\n\n // are we adding units after the value or before?\n if (args.yax_units_append) {\n return pf(d) + args.yax_units;\n } else {\n return args.yax_units + pf(d);\n }\n };\n } else {\n num = function(d_) {\n var fmt_string = (args.decimals ? '.' + args.decimals : '') + '%';\n var pf = d3.format(fmt_string);\n return pf(d_);\n };\n }\n return num;\n}\n\nvar time_rollover_format = function(f, d, accessor, utc) {\n var fd;\n if (typeof f === 'string') {\n fd = MG.time_format(utc, f)(d[accessor]);\n } else if (typeof f === 'function') {\n fd = f(d);\n } else {\n fd = d[accessor];\n }\n return fd;\n}\n\n// define our rollover format for numbers\nvar number_rollover_format = function(f, d, accessor) {\n var fd;\n if (typeof f === 'string') {\n fd = d3.format('s')(d[accessor]);\n } else if (typeof f === 'function') {\n fd = f(d);\n } else {\n fd = d[accessor];\n }\n return fd;\n}\n\nfunction mg_format_y_rollover(args, num, d) {\n var formatted_y;\n if (args.y_mouseover !== null) {\n if (args.aggregate_rollover) {\n formatted_y = number_rollover_format(args.y_mouseover, d, args.y_accessor);\n } else {\n formatted_y = number_rollover_format(args.y_mouseover, d, args.y_accessor);\n }\n } else {\n if (args.time_series) {\n if (args.aggregate_rollover) {\n formatted_y = num(d[args.y_accessor]);\n } else {\n formatted_y = args.yax_units + num(d[args.y_accessor]);\n }\n } else {\n formatted_y = args.y_accessor + ': ' + args.yax_units + num(d[args.y_accessor]);\n }\n }\n return formatted_y;\n}\n\nfunction mg_format_x_rollover(args, fmt, d) {\n var formatted_x;\n if (args.x_mouseover !== null) {\n if (args.time_series) {\n if (args.aggregate_rollover) {\n formatted_x = time_rollover_format(args.x_mouseover, d, 'key', args.utc);\n } else {\n formatted_x = time_rollover_format(args.x_mouseover, d, args.x_accessor, args.utc);\n }\n } else {\n formatted_x = number_rollover_format(args.x_mouseover, d, args.x_accessor);\n }\n } else {\n if (args.time_series) {\n var date;\n\n if (args.aggregate_rollover && args.data.length > 1) {\n date = new Date(d.key);\n } else {\n date = new Date(+d[args.x_accessor]);\n date.setDate(date.getDate());\n }\n\n formatted_x = fmt(date) + ' ';\n } else {\n formatted_x = args.x_accessor + ': ' + d[args.x_accessor] + ' ';\n }\n }\n return formatted_x;\n}\n\nfunction mg_format_data_for_mouseover(args, d, mouseover_fcn, accessor, check_time) {\n var formatted_data, formatter;\n var time_fmt = mg_get_rollover_time_format(args);\n if (typeof d[accessor] === 'string') {\n formatter = function(d) {\n return d;\n }\n } else {\n formatter = format_rollover_number(args);\n }\n\n if (mouseover_fcn !== null) {\n if (check_time) formatted_data = time_rollover_format(mouseover_fcn, d, accessor, args.utc);\n else formatted_data = number_rollover_format(mouseover_fcn, d, accessor);\n\n } else {\n if (check_time) formatted_data = time_fmt(new Date(+d[accessor])) + ' ';\n else formatted_data = (args.time_series ? '' : accessor + ': ') + formatter(d[accessor]) + ' ';\n }\n return formatted_data;\n}\n\nfunction mg_format_number_mouseover(args, d) {\n return mg_format_data_for_mouseover(args, d, args.x_mouseover, args.x_accessor, false);\n}\n\nfunction mg_format_x_mouseover(args, d) {\n return mg_format_data_for_mouseover(args, d, args.x_mouseover, args.x_accessor, args.time_series);\n}\n\nfunction mg_format_y_mouseover(args, d) {\n return mg_format_data_for_mouseover(args, d, args.y_mouseover, args.y_accessor, false);\n}\n\nfunction mg_format_x_aggregate_mouseover(args, d) {\n return mg_format_data_for_mouseover(args, d, args.x_mouseover, 'key', args.time_series)\n}\n\nMG.format_rollover_number = format_rollover_number;\n\n// http://bl.ocks.org/mbostock/3916621\nfunction path_tween(d1, precision) {\n return function() {\n var path0 = this,\n path1 = path0.cloneNode(),\n n0 = path0.getTotalLength() || 0,\n n1 = (path1.setAttribute(\"d\", d1), path1).getTotalLength() || 0;\n\n // Uniform sampling of distance based on specified precision.\n var distances = [0],\n i = 0,\n dt = precision / Math.max(n0, n1);\n while ((i += dt) < 1) distances.push(i);\n distances.push(1);\n\n // Compute point-interpolators at each distance.\n var points = distances.map(function(t) {\n var p0 = path0.getPointAtLength(t * n0),\n p1 = path1.getPointAtLength(t * n1);\n return d3.interpolate([p0.x, p0.y], [p1.x, p1.y]);\n });\n\n return function(t) {\n return t < 1 ? \"M\" + points.map(function(p) {\n return p(t);\n }).join(\"L\") : d1;\n };\n };\n}\n\nMG.path_tween = path_tween;\n\n// influenced by https://bl.ocks.org/tomgp/c99a699587b5c5465228\n\nfunction render_markup_for_server(callback) {\n var virtual_window = MG.virtual_window;\n var virtual_d3 = d3.select(virtual_window.document);\n var target = virtual_window.document.createElement('div');\n\n var original_d3 = global.d3;\n var original_window = global.window;\n var original_document = global.document;\n global.d3 = virtual_d3;\n global.window = virtual_window;\n global.document = virtual_window.document;\n\n var error;\n try {\n callback(target);\n } catch(e) {\n error = e;\n }\n\n global.d3 = original_d3;\n global.window = original_window;\n global.document = original_document;\n\n if (error) {\n throw error;\n }\n\n /* for some reason d3.select parses jsdom elements incorrectly\n * but it works if we wrap the element in a function.\n */\n return virtual_d3.select(function targetFn() {\n return target;\n }).html();\n}\n\nfunction render_markup_for_client(callback) {\n var target = document.createElement('div');\n callback(target);\n return d3.select(target).html();\n}\n\nfunction render_markup(callback) {\n switch(typeof window) {\n case 'undefined':\n return render_markup_for_server(callback);\n default:\n return render_markup_for_client(callback);\n }\n}\n\nfunction init_virtual_window(jsdom, force) {\n if (MG.virtual_window && !force) {\n return;\n }\n\n var doc = jsdom.jsdom({\n html: '',\n features: { QuerySelector: true }\n });\n MG.virtual_window = doc.defaultView;\n}\n\nMG.render_markup = render_markup;\nMG.init_virtual_window = init_virtual_window;\n\n// call this to add a warning icon to a graph and log an error to the console\nfunction error(args) {\n console.error('ERROR : ', args.target, ' : ', args.error);\n\n d3.select(args.target).select('.mg-chart-title')\n .append('tspan')\n .attr('class', 'fa fa-x fa-exclamation-circle mg-warning')\n .attr('dx', '0.3em')\n .text('\\uf06a');\n}\n\nfunction internal_error(args) {\n console.error('INTERNAL ERROR : ', args.target, ' : ', args.internal_error);\n}\n\nMG.error = error;\n\nreturn MG;\n}));\n","import * as d3 from 'd3'\nimport {jQuery as $} from 'jquery'\n\nexport default function AddBrushingCapability (MG) {\n\n /*\n The MIT License (MIT)\n\n Copyright (c) 2015 Dan de Havilland\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n */\n\n MG.line_brushing = {\n set_brush_as_base: function(target) {\n var svg = d3.select(target).select('svg'),\n current,\n history = brushHistory[target];\n\n svg.classed('mg-brushed', false);\n\n if (history) {\n history.brushed = false;\n\n current = history.current;\n history.original = current;\n\n args.min_x = current.min_x;\n args.max_x = current.max_x;\n args.min_y = current.min_y;\n args.max_y = current.max_y;\n\n history.steps = [];\n }\n },\n\n zoom_in: function(target, options) {\n\n },\n\n zoom_out: function(target, options) {\n\n }\n };\n\n /* helpers */\n function get_brush_interval(args) {\n var resolution = args.brushing_interval,\n interval;\n\n if (!resolution) {\n if (args.time_series) {\n resolution = d3.timeDay;\n } else {\n resolution = 1;\n }\n }\n\n // work with N as integer\n if (typeof resolution === 'number') {\n interval = {\n round: function(val) {\n return resolution * Math.round(val / resolution);\n },\n offset: function(val, count) {\n return val + (resolution * count);\n }\n };\n }\n // work with d3.time.[interval]\n else if (typeof resolution.round === 'function'\n && typeof resolution.offset === 'function' ) {\n interval = resolution;\n }\n else {\n console.warn('The `brushing_interval` provided is invalid. It must be either a number or expose both `round` and `offset` methods');\n }\n\n return interval;\n }\n\n function is_within_bounds(datum, args) {\n var x = +datum[args.x_accessor],\n y = +datum[args.y_accessor];\n\n return x >= (+args.processed.min_x || x)\n && x <= (+args.processed.max_x || x)\n && y >= (+args.processed.min_y || y)\n && y <= (+args.processed.max_y || y);\n }\n\n\n /**\n Brushing for line charts\n\n 1. hooks\n */\n\n var brushHistory = {},\n args;\n\n MG.add_hook('global.defaults', function(args) {\n // enable brushing unless it's explicitly disabled\n args.brushing = args.brushing !== false;\n if (args.brushing) {\n args.brushing_history = args.brushing_history !== false;\n args.aggregate_rollover = true;\n }\n });\n\n function brushing() {\n var chartContext = this;\n\n args = this.args;\n\n if (args.brushing === false) {\n return this;\n }\n\n if (!brushHistory[args.target] || !brushHistory[args.target].brushed) {\n brushHistory[args.target] = {\n brushed: false,\n steps: [],\n original: {\n min_x: +args.processed.min_x,\n max_x: +args.processed.max_x,\n min_y: +args.processed.min_y,\n max_y: +args.processed.max_y\n }\n };\n }\n\n var isDragging = false,\n mouseDown = false,\n originX,\n svg = d3.select(args.target).select('svg'),\n body = d3.select('body'),\n rollover = svg.select('.mg-rollover-rect, .mg-voronoi'),\n brushingGroup,\n extentRect;\n\n rollover.classed('mg-brush-container', true);\n\n brushingGroup = rollover.insert('g', '*')\n .classed('mg-brush', true);\n\n extentRect = brushingGroup.append('rect')\n .attr('opacity', 0)\n .attr('y', args.top)\n .attr('height', args.height - args.bottom - args.top - args.buffer)\n .classed('mg-extent', true);\n\n // mousedown, start area selection\n svg.on('mousedown', function() {\n mouseDown = true;\n isDragging = false;\n originX = d3.mouse(this)[0];\n svg.classed('mg-brushed', false);\n svg.classed('mg-brushing-in-progress', true);\n extentRect.attr({\n x: d3.mouse(this)[0],\n opacity: 0,\n width: 0\n });\n });\n\n // mousemove / drag, expand area selection\n svg.on('mousemove', function() {\n if (mouseDown) {\n isDragging = true;\n rollover.classed('mg-brushing', true);\n\n var mouseX = d3.mouse(this)[0],\n newX = Math.min(originX, mouseX),\n width = Math.max(originX, mouseX) - newX;\n\n extentRect\n .attr('x', newX)\n .attr('width', width)\n .attr('opacity', 1);\n }\n });\n\n // mouseup, finish area selection\n svg.on('mouseup', function() {\n mouseDown = false;\n svg.classed('mg-brushing-in-progress', false);\n\n var xScale = args.scales.X,\n yScale = args.scales.Y,\n flatData = [].concat.apply([], args.data),\n boundedData,\n yBounds,\n xBounds,\n extentX0 = +extentRect.attr('x'),\n extentX1 = extentX0 + (+extentRect.attr('width')),\n interval = get_brush_interval(args),\n offset = 0,\n mapDtoX = function(d) { return +d[args.x_accessor]; },\n mapDtoY = function(d) { return +d[args.y_accessor]; };\n\n // if we're zooming in: calculate the domain for x and y axes based on the selected rect\n if (isDragging) {\n isDragging = false;\n\n if (brushHistory[args.target].brushed) {\n brushHistory[args.target].steps.push({\n max_x: args.brushed_max_x || args.processed.max_x,\n min_x: args.brushed_min_x || args.processed.min_x,\n max_y: args.brushed_max_y || args.processed.max_y,\n min_y: args.brushed_min_y || args.processed.min_y\n });\n }\n\n brushHistory[args.target].brushed = true;\n\n boundedData = [];\n // is there at least one data point in the chosen selection? if not, increase the range until there is.\n var iterations = 0;\n while (boundedData.length === 0 && iterations <= flatData.length) {\n\n var xValX0 = xScale.invert(extentX0);\n var xValX1 = xScale.invert(extentX1);\n xValX0 = xValX0 instanceof Date ? xValX0 : interval.round(xValX0);\n xValX1 = xValX1 instanceof Date ? xValX1 : interval.round(xValX1);\n\n args.brushed_min_x = xValX0;\n args.brushed_max_x = Math.max(interval.offset(args.min_x, 1), xValX1);\n\n boundedData = flatData.filter(function(d) {\n var val = d[args.x_accessor];\n return val >= args.brushed_min_x && val <= args.brushed_max_x;\n });\n\n iterations++;\n }\n\n xBounds = d3.extent(boundedData, mapDtoX);\n args.brushed_min_x = +xBounds[0];\n args.brushed_max_x = +xBounds[1];\n xScale.domain(xBounds);\n\n yBounds = d3.extent(boundedData, mapDtoY);\n // add 10% padding on the y axis for better display\n // @TODO: make this an option\n args.brushed_min_y = yBounds[0] * 0.9;\n args.brushed_max_y = yBounds[1] * 1.1;\n yScale.domain(yBounds);\n }\n // zooming out on click, maintaining the step history\n else if (args.brushing_history) {\n if (brushHistory[args.target].brushed) {\n var previousBrush = brushHistory[args.target].steps.pop();\n if (previousBrush) {\n args.brushed_max_x = previousBrush.max_x;\n args.brushed_min_x = previousBrush.min_x;\n args.brushed_max_y = previousBrush.max_y;\n args.brushed_min_y = previousBrush.min_y;\n\n xBounds = [args.brushed_min_x, args.brushed_max_x];\n yBounds = [args.brushed_min_y, args.brushed_max_y];\n xScale.domain(xBounds);\n yScale.domain(yBounds);\n } else {\n brushHistory[args.target].brushed = false;\n\n delete args.brushed_max_x;\n delete args.brushed_min_x;\n delete args.brushed_max_y;\n delete args.brushed_min_y;\n\n xBounds = [\n brushHistory[args.target].original.min_x,\n brushHistory[args.target].original.max_x\n ];\n\n yBounds = [\n brushHistory[args.target].original.min_y,\n brushHistory[args.target].original.max_y\n ];\n }\n }\n }\n\n // has anything changed?\n if (xBounds && yBounds) {\n if (xBounds[0] < xBounds[1]) {\n // trigger the brushing callback\n\n var step = {\n min_x: xBounds[0],\n max_x: xBounds[1],\n min_y: yBounds[0],\n max_y: yBounds[1]\n };\n\n brushHistory[args.target].current = step;\n\n if (args.after_brushing) {\n args.after_brushing.apply(this, [step]);\n }\n }\n\n // redraw the chart\n if (!args.brushing_manual_redraw) {\n MG.data_graphic(args);\n }\n }\n });\n\n return this;\n }\n\n MG.add_hook('line.after_init', function(lineChart) {\n brushing.apply(lineChart);\n });\n\n function processXAxis(args, min_x, max_x) {\n if (args.brushing) {\n args.processed.min_x = args.brushed_min_x ? Math.max(args.brushed_min_x, min_x) : min_x;\n args.processed.max_x = args.brushed_max_x ? Math.min(args.brushed_max_x, max_x) : max_x;\n }\n }\n\n MG.add_hook('x_axis.process_min_max', processXAxis);\n\n function processYAxis(args) {\n if (args.brushing && (args.brushed_min_y || args.brushed_max_y)) {\n args.processed.min_y = args.brushed_min_y;\n args.processed.max_y = args.brushed_max_y;\n }\n }\n\n MG.add_hook('y_axis.process_min_max', processYAxis);\n\n function afterRollover(args) {\n if (args.brushing_history && brushHistory[args.target] && brushHistory[args.target].brushed) {\n var svg = d3.select(args.target).select('svg');\n svg.classed('mg-brushed', true);\n }\n }\n\n MG.add_hook('line.after_rollover', afterRollover);\n\n return ;\n}"]} \ No newline at end of file diff --git a/ghdata/deploy.py b/ghdata/deploy.py deleted file mode 100644 index 11ce140b99..0000000000 --- a/ghdata/deploy.py +++ /dev/null @@ -1,5 +0,0 @@ -from gevent.wsgi import WSGIServer -import ghdata - -http_server = WSGIServer(('', 5001), ghdata.server.app) -http_server.serve_forever() \ No newline at end of file diff --git a/ghdataContext.md b/ghdataContext.md index abdba9f3d6..b38a668286 100644 --- a/ghdataContext.md +++ b/ghdataContext.md @@ -1,6 +1,6 @@ -# ghdata Context from the Ground Up -## What is ghdata? -Our project is focused on building **human centered open source software health metrics** defined by collaborations with the Linux Foundation's [CHAOSS Project](http://chaoss.community) and other open source stakeholders. ghdata is software focused on making sense of data using Four key **human centered data science** strategies: +# augur Context from the Ground Up +## What is augur? +Our project is focused on building **human centered open source software health metrics** defined by collaborations with the Linux Foundation's [CHAOSS Project](http://chaoss.community) and other open source stakeholders. augur is software focused on making sense of data using Four key **human centered data science** strategies: 1. Enable comparisons. People navigate complex unknowns analogically. Let folks see how their project compares with others they are familiar with. - This is not ranking - If you start thinking about "metrics" like "rankings", you are probably going to create suboptimal metrics. @@ -13,8 +13,8 @@ Our project is focused on building **human centered open source software health Our core team has a long standing interest in social computing, software engineering measurement and the ethical instrumentation of online human behavior. ## Here are some more detailed links: -- Example Website (running on a development grade web server, be gentle): http://ghdata.sociallycompute.io -- Source Code Repository: http://github.com/OSSHealth/ghdata +- Example Website (running on a development grade web server, be gentle): http://augur.sociallycompute.io +- Source Code Repository: http://github.com/OSSHealth/augur - List of Metrics: https://github.com/chaoss/metrics/blob/master/activity-metrics-list.md Here are some examples: 1. https://github.com/chaoss/metrics/blob/master/activity-metrics/issue-response-rate.md diff --git a/setup.py b/setup.py index 3de75ba0d5..23dbec1a0c 100755 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ ''' SPDX-License-Identifier: MIT -Install ghdata package with pip. +Install augur package with pip. ''' from setuptools import setup @@ -15,16 +15,16 @@ long_description = f.read() setup( - name='ghdata', + name='augur', version='0.4.1', include_package_data = True, description='Library/Server for data related to the health and sustainability of GitHub projects', long_description=long_description, - url='https://github.com/OSSHealth/ghdata', + url='https://github.com/OSSHealth/augur', author='Derek Howard', author_email='derek@howderek.com', - packages=['ghdata'], - package_dir={'ghdata': 'ghdata'}, + packages=['augur'], + package_dir={'augur': 'augur'}, license='MIT', classifiers=[ 'Development Status :: 1 - Planning', @@ -47,7 +47,7 @@ }, entry_points={ 'console_scripts': [ - 'ghdata=ghdata.server:run', + 'augur=augur.server:run', ], }, ) diff --git a/test/test_ghtorrent.py b/test/test_ghtorrent.py index 60cb0fb904..fd47539ed3 100644 --- a/test/test_ghtorrent.py +++ b/test/test_ghtorrent.py @@ -3,10 +3,10 @@ @pytest.fixture def ghtorrent(): - import ghdata + import augur dbstr = os.getenv("DB_TEST_URL") assert dbstr is not None and len(dbstr) > 8 - return ghdata.GHTorrent(dbstr) + return augur.GHTorrent(dbstr) def test_repoid(ghtorrent): assert ghtorrent.repoid('rails', 'rails') >= 1000 diff --git a/test/test_github.py b/test/test_github.py index 0c930c7a96..5d2f2065d4 100644 --- a/test/test_github.py +++ b/test/test_github.py @@ -4,8 +4,8 @@ @pytest.fixture def github(): - import ghdata - return ghdata.GitHubAPI(os.getenv("GITHUB_API_KEY")) + import augur + return augur.GitHubAPI(os.getenv("GITHUB_API_KEY")) """ Pandas testing format @@ -16,7 +16,7 @@ def github(): """ def test_bus_factor(github): - assert github.bus_factor("OSSHealth", "ghdata",start="1-1-17", end="5-12-17").isin(["9"]).any + assert github.bus_factor("OSSHealth", "augur",start="1-1-17", end="5-12-17").isin(["9"]).any # def test_tags(github): -# assert github.tags("OSSHealth", "ghdata").isin(["v0.2"]).any +# assert github.tags("OSSHealth", "augur").isin(["v0.2"]).any diff --git a/test/test_publicwww.py b/test/test_publicwww.py index 6cb250e780..61e5efe332 100644 --- a/test/test_publicwww.py +++ b/test/test_publicwww.py @@ -4,10 +4,10 @@ @pytest.fixture def publicwww(): - import ghdata + import augur key = os.getenv("PUBLIC_WWW_TEST_API_KEY") assert key is not None and len(key) >= 1 - return ghdata.PublicWWW(key) + return augur.PublicWWW(key) def test_linking_websites(publicwww): assert publicwww.linking_websites(owner='yihui', repo='knitr').isin(["sohu.com"]).any \ No newline at end of file diff --git a/testing.md b/testing.md index 95c66c4246..6c3bf3b77c 100644 --- a/testing.md +++ b/testing.md @@ -1,4 +1,4 @@ -To test ghdata, set up your environment for testing: +To test augur, set up your environment for testing: ` export DB_TEST_URL=mysql+pymysql://
Indices and tables
Table Of Contents
@@ -96,7 +96,7 @@ Quick search
- ©2017, GHData Contributors.
+ ©2017, Augur Contributors.
|
Powered by Sphinx 1.5.6
diff --git a/docs/python/build/html/py-modindex.html b/docs/python/build/html/py-modindex.html
index 5227dd3192..19adbd1526 100644
--- a/docs/python/build/html/py-modindex.html
+++ b/docs/python/build/html/py-modindex.html
@@ -6,7 +6,7 @@
- Python Module Index — GHData documentation
+ Python Module Index — Augur documentation
@@ -63,7 +63,7 @@ Python Module Index
- ghdata
+ augur
@@ -94,7 +94,7 @@ Quick search
- ©2017, GHData Contributors.
+ ©2017, Augur Contributors.
|
Powered by Sphinx 1.5.6
diff --git a/docs/python/build/html/search.html b/docs/python/build/html/search.html
index 4dac7ce5a6..3da99b3df5 100644
--- a/docs/python/build/html/search.html
+++ b/docs/python/build/html/search.html
@@ -6,7 +6,7 @@
- Search — GHData documentation
+ Search — Augur documentation
@@ -90,7 +90,7 @@ Related Topics
- ©2017, GHData Contributors.
+ ©2017, Augur Contributors.
|
Powered by Sphinx 1.5.6
diff --git a/docs/python/build/html/searchindex.js b/docs/python/build/html/searchindex.js
index 203dc6aefa..115c0af1be 100644
--- a/docs/python/build/html/searchindex.js
+++ b/docs/python/build/html/searchindex.js
@@ -1 +1 @@
-Search.setIndex({docnames:["index"],envversion:51,filenames:["index.rst"],objects:{"":{ghdata:[0,0,0,"-"]}},objnames:{"0":["py","module","Python module"]},objtypes:{"0":"py:module"},terms:{index:0,modul:0,page:0,search:0},titles:["Welcome to GHData’s documentation!"],titleterms:{document:0,ghdata:0,indic:0,tabl:0,welcom:0}})
\ No newline at end of file
+Search.setIndex({docnames:["index"],envversion:51,filenames:["index.rst"],objects:{"":{augur:[0,0,0,"-"]}},objnames:{"0":["py","module","Python module"]},objtypes:{"0":"py:module"},terms:{index:0,modul:0,page:0,search:0},titles:["Welcome to Augur’s documentation!"],titleterms:{document:0,augur:0,indic:0,tabl:0,welcom:0}})
\ No newline at end of file
diff --git a/docs/python/make.bat b/docs/python/make.bat
index d7f8d6921a..61658dfbc2 100644
--- a/docs/python/make.bat
+++ b/docs/python/make.bat
@@ -9,7 +9,7 @@ if "%SPHINXBUILD%" == "" (
)
set SOURCEDIR=source
set BUILDDIR=build
-set SPHINXPROJ=GHData
+set SPHINXPROJ=Augur
if "%1" == "" goto help
diff --git a/docs/python/source/conf.py b/docs/python/source/conf.py
index 869e7bc5fe..331e5e0ff2 100644
--- a/docs/python/source/conf.py
+++ b/docs/python/source/conf.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
-# GHData documentation build configuration file, created by
+# Augur documentation build configuration file, created by
# sphinx-quickstart on Tue Oct 24 12:27:08 2017.
#
# This file is execfile()d with the current directory set to its
@@ -54,9 +54,9 @@
master_doc = 'index'
# General information about the project.
-project = 'GHData'
-copyright = '2017, GHData Contributors'
-author = 'GHData Contributors'
+project = 'Augur'
+copyright = '2017, Augur Contributors'
+author = 'Augur Contributors'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
@@ -110,7 +110,7 @@
# -- Options for HTMLHelp output ------------------------------------------
# Output file base name for HTML help builder.
-htmlhelp_basename = 'GHDatadoc'
+htmlhelp_basename = 'Augurdoc'
# -- Options for LaTeX output ---------------------------------------------
@@ -137,8 +137,8 @@
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
- (master_doc, 'GHData.tex', 'GHData Documentation',
- 'GHData Contributors', 'manual'),
+ (master_doc, 'Augur.tex', 'Augur Documentation',
+ 'Augur Contributors', 'manual'),
]
@@ -147,7 +147,7 @@
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
- (master_doc, 'ghdata', 'GHData Documentation',
+ (master_doc, 'augur', 'Augur Documentation',
[author], 1)
]
@@ -158,8 +158,8 @@
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
- (master_doc, 'GHData', 'GHData Documentation',
- author, 'GHData', 'One line description of project.',
+ (master_doc, 'Augur', 'Augur Documentation',
+ author, 'Augur', 'One line description of project.',
'Miscellaneous'),
]
diff --git a/docs/python/source/index.rst b/docs/python/source/index.rst
index c8d912140d..3a97ee59c5 100644
--- a/docs/python/source/index.rst
+++ b/docs/python/source/index.rst
@@ -1,16 +1,16 @@
-.. GHData documentation master file, created by
+.. Augur documentation master file, created by
sphinx-quickstart on Tue Oct 24 12:27:08 2017.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
-Welcome to GHData's documentation!
+Welcome to Augur's documentation!
==================================
.. toctree::
:maxdepth: 2
:caption: Contents:
-.. automodule:: ghdata
+.. automodule:: augur
:members:
diff --git a/examples/.ipynb_checkpoints/contributor-classification-checkpoint.ipynb b/examples/.ipynb_checkpoints/contributor-classification-checkpoint.ipynb
index eccbe9973e..2412484450 100644
--- a/examples/.ipynb_checkpoints/contributor-classification-checkpoint.ipynb
+++ b/examples/.ipynb_checkpoints/contributor-classification-checkpoint.ipynb
@@ -8,11 +8,11 @@
},
"outputs": [],
"source": [
- "import ..ghdata\n",
+ "import ..augur\n",
"import pandas as pd\n",
"import numpy as np\n",
"\n",
- "ghtorrent = ghdata.GHTorrent(\"mysql+pymysql://msr:ghtorrent@opendata.missouri.edu/msr\")"
+ "ghtorrent = augur.GHTorrent(\"mysql+pymysql://msr:ghtorrent@opendata.missouri.edu/msr\")"
]
},
{
@@ -30,10 +30,10 @@
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mcakephpid\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mghtorrent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrepoid\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mowner\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"cakephp\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrepo\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"cakephp\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mclassified_contributors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mghtorrent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclassify_contributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcakephpid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0;32mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mclassified_contributors\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
- "\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/ghdata/ghtorrent.pyc\u001b[0m in \u001b[0;36mclassify_contributors\u001b[0;34m(self, repoid)\u001b[0m\n\u001b[1;32m 331\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclassify_contributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 332\u001b[0m \u001b[0mcontributors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 333\u001b[0;31m contributors.apply(lambda row:\n\u001b[0m\u001b[1;32m 334\u001b[0m \u001b[0mconsole\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 335\u001b[0m )\n",
+ "\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/augur/ghtorrent.pyc\u001b[0m in \u001b[0;36mclassify_contributors\u001b[0;34m(self, repoid)\u001b[0m\n\u001b[1;32m 331\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclassify_contributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 332\u001b[0m \u001b[0mcontributors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 333\u001b[0;31m contributors.apply(lambda row:\n\u001b[0m\u001b[1;32m 334\u001b[0m \u001b[0mconsole\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 335\u001b[0m )\n",
"\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/pandas/core/frame.pyc\u001b[0m in \u001b[0;36mapply\u001b[0;34m(self, func, axis, broadcast, raw, reduce, args, **kwds)\u001b[0m\n\u001b[1;32m 4150\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mreduce\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4151\u001b[0m \u001b[0mreduce\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4152\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_apply_standard\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreduce\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mreduce\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4153\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4154\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_apply_broadcast\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/pandas/core/frame.pyc\u001b[0m in \u001b[0;36m_apply_standard\u001b[0;34m(self, func, axis, ignore_failures, reduce)\u001b[0m\n\u001b[1;32m 4246\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4247\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mseries_gen\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4248\u001b[0;31m \u001b[0mresults\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4249\u001b[0m \u001b[0mkeys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4250\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
- "\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/ghdata/ghtorrent.pyc\u001b[0m in \u001b[0;36m\u001b[0;34m(row)\u001b[0m\n\u001b[1;32m 332\u001b[0m \u001b[0mcontributors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 333\u001b[0m contributors.apply(lambda row:\n\u001b[0;32m--> 334\u001b[0;31m \u001b[0mconsole\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 335\u001b[0m )\n",
+ "\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/augur/ghtorrent.pyc\u001b[0m in \u001b[0;36m\u001b[0;34m(row)\u001b[0m\n\u001b[1;32m 332\u001b[0m \u001b[0mcontributors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 333\u001b[0m contributors.apply(lambda row:\n\u001b[0;32m--> 334\u001b[0;31m \u001b[0mconsole\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 335\u001b[0m )\n",
"\u001b[0;31mNameError\u001b[0m: (\"global name 'console' is not defined\", u'occurred at index login')"
]
}
@@ -59,10 +59,10 @@
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mclassified_contributors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mghtorrent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclassify_contributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcakephpid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
- "\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/ghdata/ghtorrent.pyc\u001b[0m in \u001b[0;36mclassify_contributors\u001b[0;34m(self, repoid)\u001b[0m\n\u001b[1;32m 331\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclassify_contributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 332\u001b[0m \u001b[0mcontributors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 333\u001b[0;31m contributors.apply(lambda row:\n\u001b[0m\u001b[1;32m 334\u001b[0m \u001b[0mconsole\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 335\u001b[0m )\n",
+ "\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/augur/ghtorrent.pyc\u001b[0m in \u001b[0;36mclassify_contributors\u001b[0;34m(self, repoid)\u001b[0m\n\u001b[1;32m 331\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclassify_contributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 332\u001b[0m \u001b[0mcontributors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 333\u001b[0;31m contributors.apply(lambda row:\n\u001b[0m\u001b[1;32m 334\u001b[0m \u001b[0mconsole\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 335\u001b[0m )\n",
"\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/pandas/core/frame.pyc\u001b[0m in \u001b[0;36mapply\u001b[0;34m(self, func, axis, broadcast, raw, reduce, args, **kwds)\u001b[0m\n\u001b[1;32m 4150\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mreduce\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4151\u001b[0m \u001b[0mreduce\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4152\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_apply_standard\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreduce\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mreduce\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4153\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4154\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_apply_broadcast\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/pandas/core/frame.pyc\u001b[0m in \u001b[0;36m_apply_standard\u001b[0;34m(self, func, axis, ignore_failures, reduce)\u001b[0m\n\u001b[1;32m 4246\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4247\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mseries_gen\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4248\u001b[0;31m \u001b[0mresults\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4249\u001b[0m \u001b[0mkeys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4250\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
- "\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/ghdata/ghtorrent.pyc\u001b[0m in \u001b[0;36m\u001b[0;34m(row)\u001b[0m\n\u001b[1;32m 332\u001b[0m \u001b[0mcontributors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 333\u001b[0m contributors.apply(lambda row:\n\u001b[0;32m--> 334\u001b[0;31m \u001b[0mconsole\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 335\u001b[0m )\n",
+ "\u001b[0;32m/Users/howderek/anaconda/lib/python2.7/site-packages/augur/ghtorrent.pyc\u001b[0m in \u001b[0;36m\u001b[0;34m(row)\u001b[0m\n\u001b[1;32m 332\u001b[0m \u001b[0mcontributors\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontributors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrepoid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 333\u001b[0m contributors.apply(lambda row:\n\u001b[0;32m--> 334\u001b[0;31m \u001b[0mconsole\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrow\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 335\u001b[0m )\n",
"\u001b[0;31mNameError\u001b[0m: (\"global name 'console' is not defined\", u'occurred at index login')"
]
}
diff --git a/examples/.ipynb_checkpoints/contributor_exploration-checkpoint.ipynb b/examples/.ipynb_checkpoints/contributor_exploration-checkpoint.ipynb
index 2bf90c7442..fc20f80430 100644
--- a/examples/.ipynb_checkpoints/contributor_exploration-checkpoint.ipynb
+++ b/examples/.ipynb_checkpoints/contributor_exploration-checkpoint.ipynb
@@ -8,7 +8,7 @@
},
"outputs": [],
"source": [
- "import ghdata"
+ "import augur"
]
},
{
@@ -19,7 +19,7 @@
},
"outputs": [],
"source": [
- "ghtorrent = ghdata.GHTorrent(\"mysql+pymysql://\")"
+ "ghtorrent = augur.GHTorrent(\"mysql+pymysql://\")"
]
}
],
diff --git a/examples/contributor-classification.ipynb b/examples/contributor-classification.ipynb
index 247d23fe7d..f6e4af5197 100644
--- a/examples/contributor-classification.ipynb
+++ b/examples/contributor-classification.ipynb
@@ -8,11 +8,11 @@
},
"outputs": [],
"source": [
- "import ghdata\n",
+ "import augur\n",
"import pandas as pd\n",
"import numpy as np\n",
"\n",
- "ghtorrent = ghdata.GHTorrent(\"mysql+pymysql://root:ghtorrent@localhost/msr14\")"
+ "ghtorrent = augur.GHTorrent(\"mysql+pymysql://root:ghtorrent@localhost/msr14\")"
]
},
{
diff --git a/frontend/app/GHData.js b/frontend/app/Augur.js
similarity index 72%
rename from frontend/app/GHData.js
rename to frontend/app/Augur.js
index f844e1fd4f..f845a0c362 100644
--- a/frontend/app/GHData.js
+++ b/frontend/app/Augur.js
@@ -1,27 +1,27 @@
import VueVega from 'vue-vega'
const queryString = require('query-string')
-export default function GHData () {
+export default function Augur () {
window.jQuery = require('jquery')
window.Vue = require('vue')
window.Vuex = require('vuex')
- let GHDataAPI = require('GHDataAPI').default
- window.GHDataAPI = new GHDataAPI()
- window.GHDataRepos = {}
- window.GHDataStats = require('GHDataStats').default
+ let AugurAPI = require('AugurAPI').default
+ window.AugurAPI = new AugurAPI()
+ window.AugurRepos = {}
+ window.AugurStats = require('AugurStats').default
window.$ = window.jQuery
window._ = require('lodash')
window.d3 = require('d3')
window.VueVega = VueVega
window.SvgSaver = require('svgsaver')
- let GHDataApp = require('./components/GHDataApp')
+ let AugurApp = require('./components/AugurApp')
Vue.use(Vuex)
Vue.use(VueVega)
Vue.config.productionTip = false
- window.ghdata = new Vuex.Store({
+ window.augur = new Vuex.Store({
state: {
baseRepo: null,
comparedRepos: [],
@@ -35,25 +35,25 @@ export default function GHData () {
},
mutations: {
setBaseRepo (state, payload) {
- let repo = window.GHDataAPI.Repo(payload.url)
- if (!window.GHDataRepos[repo.toString()]) {
- window.GHDataRepos[repo.toString()] = repo
+ let repo = window.AugurAPI.Repo(payload.url)
+ if (!window.AugurRepos[repo.toString()]) {
+ window.AugurRepos[repo.toString()] = repo
}
state.baseRepo = repo.toString()
if (!payload.keepCompared) {
state.comparedRepos = []
}
- let title = repo.owner + '/' + repo.name + '- GHData'
+ let title = repo.owner + '/' + repo.name + '- Augur'
let queryString = '?repo=' + repo.owner + '+' + repo.name
window.history.pushState(null, title, queryString)
},
addComparedRepo (state, payload) {
- let repo = window.GHDataAPI.Repo(payload.url)
- if (!window.GHDataRepos[repo.toString()]) {
- window.GHDataRepos[repo.toString()] = repo
+ let repo = window.AugurAPI.Repo(payload.url)
+ if (!window.AugurRepos[repo.toString()]) {
+ window.AugurRepos[repo.toString()] = repo
}
state.comparedRepos.push(repo.toString())
- let title = 'GHData'
+ let title = 'Augur'
let queryString = window.location.search + '&comparedTo[]=' + repo.owner + '+' + repo.name
window.history.pushState(null, title, queryString)
},
@@ -89,22 +89,22 @@ export default function GHData () {
compare: "each",
byDate: false,
}
- window.history.pushState(null, 'GHData', '/')
+ window.history.pushState(null, 'Augur', '/')
} // end reset
} // end mutations
})
- GHDataApp.store = window.ghdata
- window.GHDataApp = new Vue(GHDataApp).$mount('#app')
+ AugurApp.store = window.augur
+ window.AugurApp = new Vue(AugurApp).$mount('#app')
// Load state from query string
let parsed = queryString.parse(location.search, { arrayFormat: 'bracket' })
if (parsed.repo) {
- window.GHDataApp.$store.commit('setBaseRepo', { url: parsed.repo.replace(' ', '/') })
+ window.AugurApp.$store.commit('setBaseRepo', { url: parsed.repo.replace(' ', '/') })
}
if (parsed.comparedTo) {
parsed.comparedTo.forEach((repo) => {
- window.GHDataApp.$store.commit('addComparedRepo', { url: repo.replace(' ', '/') })
+ window.AugurApp.$store.commit('addComparedRepo', { url: repo.replace(' ', '/') })
})
}
diff --git a/frontend/app/GHDataAPI.js b/frontend/app/AugurAPI.js
similarity index 99%
rename from frontend/app/GHDataAPI.js
rename to frontend/app/AugurAPI.js
index ad9e1c9a7a..86db0514f0 100644
--- a/frontend/app/GHDataAPI.js
+++ b/frontend/app/AugurAPI.js
@@ -1,6 +1,6 @@
var $ = require('jquery')
-export default class GHDataAPI {
+export default class AugurAPI {
constructor(hostURL, version, autobatch) {
this._version = version || 'unstable'
this._host = hostURL || 'http://' + window.location.host + '/api/'
diff --git a/frontend/app/GHDataStats.js b/frontend/app/AugurStats.js
similarity index 83%
rename from frontend/app/GHDataStats.js
rename to frontend/app/AugurStats.js
index 192ae2b7cd..c9b8f8d8c2 100644
--- a/frontend/app/GHDataStats.js
+++ b/frontend/app/AugurStats.js
@@ -1,11 +1,11 @@
-export default class GHDataStats {
+export default class AugurStats {
static convertDates (data, earliest, latest) {
earliest = earliest || new Date('01-01-2005')
latest = latest || new Date()
if (Array.isArray(data[0])) {
data = data.map((datum) => {
- return GHDataStats.convertDates(datum)
+ return AugurStats.convertDates(datum)
})
} else {
@@ -22,7 +22,7 @@ export default class GHDataStats {
static convertKey (data, key) {
if (Array.isArray(data[0])) {
data = data.map((datum) => {
- return GHDataStats.convertKey(datum, key)
+ return AugurStats.convertKey(datum, key)
})
} else {
const EARLIEST = new Date('01-01-2005')
@@ -40,7 +40,7 @@ export default class GHDataStats {
static aboveAverage(data, key) {
let flat = data.map((e) => {return e[key]})
- let mean = GHDataStats.averageArray(flat)
+ let mean = AugurStats.averageArray(flat)
return data.filter((e) => {
return e[key] > mean
})
@@ -48,17 +48,17 @@ export default class GHDataStats {
static standardDeviation(ary, key, mean) {
let flat = ary.map((e) => {return e[key]})
- mean = mean || GHDataStats.averageArray(flat)
+ mean = mean || AugurStats.averageArray(flat)
let distances = flat.map((e) => {
return (e - mean) * (e - mean)
})
- return Math.sqrt(GHDataStats.averageArray(distances))
+ return Math.sqrt(AugurStats.averageArray(distances))
}
static describe(ary, key) {
let flat = ary.map((e) => {return e[key]})
- let mean = GHDataStats.averageArray(flat)
- let stddev = GHDataStats.standardDeviation(ary, key, mean)
+ let mean = AugurStats.averageArray(flat)
+ let stddev = AugurStats.standardDeviation(ary, key, mean)
let variance = stddev * stddev
return {
'mean': mean,
@@ -94,7 +94,7 @@ export default class GHDataStats {
}
let average = {date: new Date(date)}
- average[key] = GHDataStats.averageArray(averageWindow.slice(0, windowSizeInDays));
+ average[key] = AugurStats.averageArray(averageWindow.slice(0, windowSizeInDays));
averageWindow.shift()
rolling.push(average);
}
@@ -105,7 +105,7 @@ export default class GHDataStats {
if (!data) {
return []
}
- baseline = baseline || GHDataStats.averageArray( data.map((e) => {return e[key]}) )
+ baseline = baseline || AugurStats.averageArray( data.map((e) => {return e[key]}) )
data = data.map((datum) => {
datum['value'] = (datum[key] / baseline)
return datum
@@ -126,17 +126,17 @@ export default class GHDataStats {
}
let data = {}
- data['base'] = GHDataStats.rollingAverage(
- GHDataStats.convertDates(
- GHDataStats.convertKey(
+ data['base'] = AugurStats.rollingAverage(
+ AugurStats.convertDates(
+ AugurStats.convertKey(
baseData,
Object.keys(baseData[0])[1]
), config.earliest, config.latest
), undefined, config.period)
- data['compare'] = GHDataStats.rollingAverage(
- GHDataStats.convertDates(
- GHDataStats.convertKey(
+ data['compare'] = AugurStats.rollingAverage(
+ AugurStats.convertDates(
+ AugurStats.convertKey(
compareData,
Object.keys(compareData[0])[1]
), config.earliest, config.latest
@@ -174,7 +174,7 @@ export default class GHDataStats {
static zscores(data, key) {
key = key || 'value'
- let stats = GHDataStats.describe(data, key)
+ let stats = AugurStats.describe(data, key)
return data.map((e) => {
let newObj = {}
if (e.date) {
diff --git a/frontend/app/assets/index.html b/frontend/app/assets/index.html
index 79b19479aa..13fa0e1339 100644
--- a/frontend/app/assets/index.html
+++ b/frontend/app/assets/index.html
@@ -2,7 +2,7 @@
- GHData
+ Augur
@@ -13,10 +13,10 @@
-
+
diff --git a/frontend/app/components/AugurApp.vue b/frontend/app/components/AugurApp.vue
new file mode 100644
index 0000000000..15feb51878
--- /dev/null
+++ b/frontend/app/components/AugurApp.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/app/components/GHDataCards.vue b/frontend/app/components/AugurCards.vue
similarity index 100%
rename from frontend/app/components/GHDataCards.vue
rename to frontend/app/components/AugurCards.vue
diff --git a/frontend/app/components/GHDataHeader.vue b/frontend/app/components/AugurHeader.vue
similarity index 100%
rename from frontend/app/components/GHDataHeader.vue
rename to frontend/app/components/AugurHeader.vue
diff --git a/frontend/app/components/GHDataApp.vue b/frontend/app/components/GHDataApp.vue
deleted file mode 100644
index 7371d94aa2..0000000000
--- a/frontend/app/components/GHDataApp.vue
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/app/components/charts/BubbleChart.vue b/frontend/app/components/charts/BubbleChart.vue
index 3f9b19a068..d1cc604f30 100644
--- a/frontend/app/components/charts/BubbleChart.vue
+++ b/frontend/app/components/charts/BubbleChart.vue
@@ -10,7 +10,7 @@
@@ -13,10 +13,10 @@
-
+
diff --git a/frontend/public/static/app.css.map b/frontend/public/static/app.css.map
index da29f5d2d2..539478a9c2 100644
--- a/frontend/public/static/app.css.map
+++ b/frontend/public/static/app.css.map
@@ -1 +1 @@
-{"version":3,"sources":["app/include/kube/kube.css","app/include/metricsgraphics.css","app/styles/ghdata.styl"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5mEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"public/static/app.css","sourcesContent":["/*\n\tKube. CSS & JS Framework\n\tVersion 6.5.2\n\tUpdated: February 2, 2017\n\n\thttp://imperavi.com/kube/\n\n\tCopyright (c) 2009-2017, Imperavi LLC.\n\tLicense: MIT\n*/\nhtml {\n box-sizing: border-box; }\n\n*,\n*:before,\n*:after {\n box-sizing: inherit; }\n\n* {\n margin: 0;\n padding: 0;\n outline: 0;\n -webkit-overflow-scrolling: touch; }\n\nimg,\nvideo,\naudio {\n max-width: 100%; }\n\nimg,\nvideo {\n height: auto; }\n\nsvg {\n max-height: 100%; }\n\niframe {\n border: none; }\n\n::-moz-focus-inner {\n border: 0;\n padding: 0; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n vertical-align: middle;\n position: relative;\n bottom: 0.15rem;\n font-size: 115%;\n margin-right: 3px; }\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; }\n\ninput[type=\"search\"]::-webkit-search-decoration,\ninput[type=\"search\"]::-webkit-search-cancel-button {\n -webkit-appearance: none; }\n\n.black {\n color: #0d0d0e; }\n\n.inverted {\n color: #fff; }\n\n.error {\n color: #f03c69; }\n\n.success {\n color: #35beb1; }\n\n.warning {\n color: #f7ba45; }\n\n.focus {\n color: #1c86f2; }\n\n.aluminum {\n color: #f8f8f8; }\n\n.silver {\n color: #e0e1e1; }\n\n.lightgray {\n color: #d4d4d4; }\n\n.gray {\n color: #bdbdbd; }\n\n.midgray {\n color: #676b72; }\n\n.darkgray {\n color: #313439; }\n\n.bg-black {\n background-color: #0d0d0e; }\n\n.bg-inverted {\n background-color: #fff; }\n\n.bg-error {\n background-color: #f03c69; }\n\n.bg-success {\n background-color: #35beb1; }\n\n.bg-warning {\n background-color: #f7ba45; }\n\n.bg-focus {\n background-color: #1c86f2; }\n\n.bg-aluminum {\n background-color: #f8f8f8; }\n\n.bg-silver {\n background-color: #e0e1e1; }\n\n.bg-lightgray {\n background-color: #d4d4d4; }\n\n.bg-gray {\n background-color: #bdbdbd; }\n\n.bg-midgray {\n background-color: #676b72; }\n\n.bg-darkgray {\n background-color: #313439; }\n\n.bg-highlight {\n background-color: #edf2ff; }\n\nhtml,\nbody {\n font-size: 16px;\n line-height: 24px; }\n\nbody {\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n color: #313439;\n background-color: transparent; }\n\na {\n color: #3794de; }\n\na:hover {\n color: #f03c69; }\n\nh1.title, h1, h2, h3, h4, h5, h6 {\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n font-weight: bold;\n color: #0d0d0e;\n text-rendering: optimizeLegibility;\n margin-bottom: 16px; }\n\nh1.title {\n font-size: 60px;\n line-height: 64px;\n margin-bottom: 8px; }\n\nh1,\n.h1 {\n font-size: 48px;\n line-height: 52px; }\n\nh2,\n.h2 {\n font-size: 36px;\n line-height: 40px; }\n\nh3,\n.h3 {\n font-size: 24px;\n line-height: 32px; }\n\nh4,\n.h4 {\n font-size: 21px;\n line-height: 32px; }\n\nh5,\n.h5 {\n font-size: 18px;\n line-height: 28px; }\n\nh6,\n.h6 {\n font-size: 16px;\n line-height: 24px; }\n\nh1 a, .h1 a,\nh2 a, .h2 a,\nh3 a, .h3 a,\nh4 a, .h4 a,\nh5 a, .h5 a,\nh6 a, .h6 a {\n color: inherit; }\n\np + h2,\np + h3,\np + h4,\np + h5,\np + h6,\nul + h2,\nul + h3,\nul + h4,\nul + h5,\nul + h6,\nol + h2,\nol + h3,\nol + h4,\nol + h5,\nol + h6,\ndl + h2,\ndl + h3,\ndl + h4,\ndl + h5,\ndl + h6,\nblockquote + h2,\nblockquote + h3,\nblockquote + h4,\nblockquote + h5,\nblockquote + h6,\nhr + h2,\nhr + h3,\nhr + h4,\nhr + h5,\nhr + h6,\npre + h2,\npre + h3,\npre + h4,\npre + h5,\npre + h6,\ntable + h2,\ntable + h3,\ntable + h4,\ntable + h5,\ntable + h6,\nform + h2,\nform + h3,\nform + h4,\nform + h5,\nform + h6,\nfigure + h2,\nfigure + h3,\nfigure + h4,\nfigure + h5,\nfigure + h6 {\n margin-top: 24px; }\n\nul,\nul ul,\nul ol,\nol,\nol ul,\nol ol {\n margin: 0 0 0 24px; }\n\nol ol li {\n list-style-type: lower-alpha; }\n\nol ol ol li {\n list-style-type: lower-roman; }\n\nnav ul,\nnav ol {\n margin: 0;\n list-style: none; }\n nav ul ul,\n nav ul ol,\n nav ol ul,\n nav ol ol {\n margin-left: 24px; }\n\ndl dt {\n font-weight: bold; }\n\ndd {\n margin-left: 24px; }\n\np, blockquote, hr, pre, ol, ul, dl, table, fieldset, figure, address, form {\n margin-bottom: 16px; }\n\nhr {\n border: none;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n margin-top: -1px; }\n\nblockquote {\n padding-left: 1rem;\n border-left: 4px solid rgba(0, 0, 0, 0.1);\n font-style: italic;\n color: rgba(49, 52, 57, 0.65); }\n blockquote p {\n margin-bottom: .5rem; }\n\ntime, cite, small, figcaption {\n font-size: 87.5%; }\n\ncite {\n opacity: .6; }\n\nabbr[title], dfn[title] {\n border-bottom: 1px dotted rgba(0, 0, 0, 0.5);\n cursor: help; }\n\nvar {\n font-size: 16px;\n opacity: .6;\n font-style: normal; }\n\nmark, code, samp, kbd {\n position: relative;\n top: -1px;\n padding: 4px 4px 2px 4px;\n display: inline-block;\n line-height: 1;\n color: rgba(49, 52, 57, 0.85); }\n\ncode {\n background: #e0e1e1; }\n\nmark {\n background: #f7ba45; }\n\nsamp {\n color: #fff;\n background: #1c86f2; }\n\nkbd {\n border: 1px solid rgba(0, 0, 0, 0.1); }\n\nsub,\nsup {\n font-size: x-small;\n line-height: 0;\n margin-left: 1rem/4;\n position: relative; }\n\nsup {\n top: 0; }\n\nsub {\n bottom: 1px; }\n\npre, code, samp, var, kbd {\n font-family: Consolas, Monaco, \"Courier New\", monospace; }\n\npre, code, samp, var, kbd, mark {\n font-size: 87.5%; }\n\npre,\npre code {\n background: #f8f8f8;\n padding: 0;\n top: 0;\n display: block;\n line-height: 20px;\n color: rgba(49, 52, 57, 0.85);\n overflow: none;\n white-space: pre-wrap; }\n\npre {\n padding: 1rem; }\n\nfigcaption {\n opacity: .6; }\n\nfigure figcaption {\n position: relative;\n top: -1rem/2; }\n\nfigure pre {\n background: none;\n border: 1px solid rgba(0, 0, 0, 0.1);\n border-radius: 4px; }\n\nfigure .video-container,\nfigure pre {\n margin-bottom: 8px; }\n\n.text-left {\n text-align: left; }\n\n.text-center {\n text-align: center; }\n\n.text-right {\n text-align: right; }\n\nul.unstyled {\n margin-left: 0; }\n\nul.unstyled,\nul.unstyled ul {\n list-style: none; }\n\n.monospace {\n font-family: Consolas, Monaco, \"Courier New\", monospace; }\n\n.upper {\n text-transform: uppercase; }\n\n.lower {\n text-transform: lowercase; }\n\n.italic {\n font-style: italic !important; }\n\n.strong {\n font-weight: bold !important; }\n\n.normal {\n font-weight: normal !important; }\n\n.muted {\n opacity: .55; }\n\na.muted {\n color: #0d0d0e; }\n\na.muted:hover {\n opacity: 1; }\n\n.black {\n color: #0d0d0e; }\n\n.smaller {\n font-size: 12px;\n line-height: 20px; }\n\n.small {\n font-size: 14px;\n line-height: 20px; }\n\n.big {\n font-size: 18px;\n line-height: 28px; }\n\n.large {\n font-size: 20px;\n line-height: 32px; }\n\n.end {\n margin-bottom: 0 !important; }\n\n.highlight {\n background-color: #edf2ff; }\n\n.nowrap,\n.nowrap td {\n white-space: nowrap; }\n\n@media (min-width: 1230px) and (max-width: 1024px) {\n .columns-2,\n .columns-3,\n .columns-4 {\n column-gap: 24px; }\n .columns-2 {\n column-count: 2; }\n .columns-3 {\n column-count: 3; }\n .columns-4 {\n column-count: 4; } }\n\n.row {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap; }\n @media (max-width: 1230px) {\n .row {\n flex-direction: column;\n flex-wrap: nowrap; } }\n .row.gutters,\n .row.gutters > .row {\n margin-left: -2%; }\n @media (max-width: 1230px) {\n .row.gutters,\n .row.gutters > .row {\n margin-left: 0; } }\n .row.gutters > .col,\n .row.gutters > .row > .col {\n margin-left: 2%; }\n @media (max-width: 1230px) {\n .row.gutters > .col,\n .row.gutters > .row > .col {\n margin-left: 0; } }\n .row.around {\n justify-content: space-around; }\n .row.between {\n justify-content: space-between; }\n .row.auto .col {\n flex-grow: 1; }\n\n.col-1 {\n width: 8.33333%; }\n\n.offset-1 {\n margin-left: 8.33333%; }\n\n.col-2 {\n width: 16.66667%; }\n\n.offset-2 {\n margin-left: 16.66667%; }\n\n.col-3 {\n width: 25%; }\n\n.offset-3 {\n margin-left: 25%; }\n\n.col-4 {\n width: 33.33333%; }\n\n.offset-4 {\n margin-left: 33.33333%; }\n\n.col-5 {\n width: 41.66667%; }\n\n.offset-5 {\n margin-left: 41.66667%; }\n\n.col-6 {\n width: 50%; }\n\n.offset-6 {\n margin-left: 50%; }\n\n.col-7 {\n width: 58.33333%; }\n\n.offset-7 {\n margin-left: 58.33333%; }\n\n.col-8 {\n width: 66.66667%; }\n\n.offset-8 {\n margin-left: 66.66667%; }\n\n.col-9 {\n width: 75%; }\n\n.offset-9 {\n margin-left: 75%; }\n\n.col-10 {\n width: 83.33333%; }\n\n.offset-10 {\n margin-left: 83.33333%; }\n\n.col-11 {\n width: 91.66667%; }\n\n.offset-11 {\n margin-left: 91.66667%; }\n\n.col-12 {\n width: 100%; }\n\n.offset-12 {\n margin-left: 100%; }\n\n.gutters > .col-1 {\n width: calc(8.33333% - 2%); }\n\n.gutters > .offset-1 {\n margin-left: calc(8.33333% + 2%) !important; }\n\n.gutters > .col-2 {\n width: calc(16.66667% - 2%); }\n\n.gutters > .offset-2 {\n margin-left: calc(16.66667% + 2%) !important; }\n\n.gutters > .col-3 {\n width: calc(25% - 2%); }\n\n.gutters > .offset-3 {\n margin-left: calc(25% + 2%) !important; }\n\n.gutters > .col-4 {\n width: calc(33.33333% - 2%); }\n\n.gutters > .offset-4 {\n margin-left: calc(33.33333% + 2%) !important; }\n\n.gutters > .col-5 {\n width: calc(41.66667% - 2%); }\n\n.gutters > .offset-5 {\n margin-left: calc(41.66667% + 2%) !important; }\n\n.gutters > .col-6 {\n width: calc(50% - 2%); }\n\n.gutters > .offset-6 {\n margin-left: calc(50% + 2%) !important; }\n\n.gutters > .col-7 {\n width: calc(58.33333% - 2%); }\n\n.gutters > .offset-7 {\n margin-left: calc(58.33333% + 2%) !important; }\n\n.gutters > .col-8 {\n width: calc(66.66667% - 2%); }\n\n.gutters > .offset-8 {\n margin-left: calc(66.66667% + 2%) !important; }\n\n.gutters > .col-9 {\n width: calc(75% - 2%); }\n\n.gutters > .offset-9 {\n margin-left: calc(75% + 2%) !important; }\n\n.gutters > .col-10 {\n width: calc(83.33333% - 2%); }\n\n.gutters > .offset-10 {\n margin-left: calc(83.33333% + 2%) !important; }\n\n.gutters > .col-11 {\n width: calc(91.66667% - 2%); }\n\n.gutters > .offset-11 {\n margin-left: calc(91.66667% + 2%) !important; }\n\n.gutters > .col-12 {\n width: calc(100% - 2%); }\n\n.gutters > .offset-12 {\n margin-left: calc(100% + 2%) !important; }\n\n@media (max-width: 1230px) {\n [class^='offset-'],\n [class*=' offset-'] {\n margin-left: 0; } }\n\n.first {\n order: -1; }\n\n.last {\n order: 1; }\n\n@media (max-width: 1230px) {\n .row .col {\n margin-left: 0;\n width: 100%; }\n .row.gutters .col {\n margin-bottom: 16px; }\n .first-sm {\n order: -1; }\n .last-sm {\n order: 1; } }\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n max-width: 100%;\n width: 100%;\n empty-cells: show;\n font-size: 15px;\n line-height: 24px; }\n\ntable caption {\n text-align: left;\n font-size: 14px;\n font-weight: 500;\n color: #676b72; }\n\nth {\n text-align: left;\n font-weight: 700;\n vertical-align: bottom; }\n\ntd {\n vertical-align: top; }\n\ntr.align-middle td,\ntd.align-middle {\n vertical-align: middle; }\n\nth,\ntd {\n padding: 1rem 1rem;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05); }\n th:first-child,\n td:first-child {\n padding-left: 0; }\n th:last-child,\n td:last-child {\n padding-right: 0; }\n\ntfoot th,\ntfoot td {\n color: rgba(49, 52, 57, 0.5); }\n\ntable.bordered td,\ntable.bordered th {\n border: 1px solid rgba(0, 0, 0, 0.05); }\n\ntable.striped tr:nth-child(odd) td {\n background: #f8f8f8; }\n\ntable.bordered td:first-child,\ntable.bordered th:first-child,\ntable.striped td:first-child,\ntable.striped th:first-child {\n padding-left: 1rem; }\n\ntable.bordered td:last-child,\ntable.bordered th:last-child,\ntable.striped td:last-child,\ntable.striped th:last-child {\n padding-right: 1rem; }\n\ntable.unstyled td,\ntable.unstyled th {\n border: none;\n padding: 0; }\n\nfieldset {\n font-family: inherit;\n border: 1px solid rgba(0, 0, 0, 0.1);\n padding: 2rem;\n margin-bottom: 2rem;\n margin-top: 2rem; }\n\nlegend {\n font-weight: bold;\n font-size: 12px;\n text-transform: uppercase;\n padding: 0 1rem;\n margin-left: -1rem;\n top: 2px;\n position: relative;\n line-height: 0; }\n\ninput,\ntextarea,\nselect {\n display: block;\n width: 100%;\n font-family: inherit;\n font-size: 15px;\n height: 40px;\n outline: none;\n vertical-align: middle;\n background-color: #fff;\n border: 1px solid #d4d4d4;\n border-radius: 3px;\n box-shadow: none;\n padding: 0 12px; }\n\ninput.small,\ntextarea.small,\nselect.small {\n height: 36px;\n font-size: 13px;\n padding: 0 12px;\n border-radius: 3px; }\n\ninput.big,\ntextarea.big,\nselect.big {\n height: 48px;\n font-size: 17px;\n padding: 0 12px;\n border-radius: 3px; }\n\ninput:focus,\ntextarea:focus,\nselect:focus {\n outline: none;\n background-color: #fff;\n border-color: #1c86f2;\n box-shadow: 0 0 1px #1c86f2 inset; }\n\ninput.error,\ntextarea.error,\nselect.error {\n background-color: rgba(240, 60, 105, 0.1);\n border: 1px solid #f583a0; }\n input.error:focus,\n textarea.error:focus,\n select.error:focus {\n border-color: #f03c69;\n box-shadow: 0 0 1px #f03c69 inset; }\n\ninput.success,\ntextarea.success,\nselect.success {\n background-color: rgba(53, 190, 177, 0.1);\n border: 1px solid #6ad5cb; }\n input.success:focus,\n textarea.success:focus,\n select.success:focus {\n border-color: #35beb1;\n box-shadow: 0 0 1px #35beb1 inset; }\n\ninput:disabled, input.disabled,\ntextarea:disabled,\ntextarea.disabled,\nselect:disabled,\nselect.disabled {\n resize: none;\n opacity: 0.6;\n cursor: default;\n font-style: italic;\n color: rgba(0, 0, 0, 0.5); }\n\nselect {\n -webkit-appearance: none;\n background-image: url('data:image/svg+xml;utf8,');\n background-repeat: no-repeat;\n background-position: right 1rem center; }\n\nselect[multiple] {\n background-image: none;\n height: auto;\n padding: .5rem .75rem; }\n\ntextarea {\n height: auto;\n padding: 8px 12px;\n line-height: 24px;\n vertical-align: top; }\n\ninput[type=\"file\"] {\n width: auto;\n border: none;\n padding: 0;\n height: auto;\n background: none;\n box-shadow: none;\n display: inline-block; }\n\ninput[type=\"search\"],\ninput.search {\n background-repeat: no-repeat;\n background-position: 8px 53%;\n background-image: url('data:image/svg+xml;utf8,');\n padding-left: 32px; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n display: inline-block;\n width: auto;\n height: auto;\n padding: 0; }\n\nlabel {\n display: block;\n color: #313439;\n margin-bottom: 4px;\n font-size: 15px; }\n label.checkbox,\n label .desc,\n label .success,\n label .error {\n text-transform: none;\n font-weight: normal; }\n label.checkbox {\n font-size: 16px;\n line-height: 24px;\n cursor: pointer;\n color: inherit; }\n label.checkbox input {\n margin-top: 0; }\n\n.form-checkboxes label.checkbox {\n display: inline-block;\n margin-right: 16px; }\n\n.req {\n position: relative;\n top: 1px;\n font-weight: bold;\n color: #f03c69;\n font-size: 110%; }\n\n.desc {\n color: rgba(49, 52, 57, 0.5);\n font-size: 12px;\n line-height: 20px; }\n\nspan.desc {\n margin-left: 4px; }\n\ndiv.desc {\n margin-top: 4px;\n margin-bottom: -8px; }\n\n.form-buttons button,\n.form-buttons .button {\n margin-right: 8px; }\n\nform,\n.form-item {\n margin-bottom: 2rem; }\n\n.form > .form-item:last-child {\n margin-bottom: 0; }\n\n.form .row:last-child .form-item {\n margin-bottom: 0; }\n\n.form span.success,\n.form span.error {\n font-size: 12px;\n line-height: 20px;\n margin-left: 4px; }\n\n.form-inline input,\n.form-inline textarea,\n.form-inline select {\n display: inline-block;\n width: auto; }\n\n.append,\n.prepend {\n display: flex; }\n .append input,\n .prepend input {\n flex: 1; }\n .append .button,\n .append span,\n .prepend .button,\n .prepend span {\n flex-shrink: 0; }\n .append span,\n .prepend span {\n display: flex;\n flex-direction: column;\n justify-content: center;\n font-weight: normal;\n border: 1px solid #d4d4d4;\n background-color: #f8f8f8;\n padding: 0 .875rem;\n color: rgba(0, 0, 0, 0.5);\n font-size: 12px;\n white-space: nowrap; }\n\n.prepend input {\n border-radius: 0 3px 3px 0; }\n\n.prepend .button {\n margin-right: -1px;\n border-radius: 3px 0 0 3px !important; }\n\n.prepend span {\n border-right: none;\n border-radius: 3px 0 0 3px; }\n\n.append input {\n border-radius: 3px 0 0 3px; }\n\n.append .button {\n margin-left: -1px;\n border-radius: 0 3px 3px 0 !important; }\n\n.append span {\n border-left: none;\n border-radius: 0 3px 3px 0; }\n\nbutton,\n.button {\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n font-size: 15px;\n color: #fff;\n background-color: #1c86f2;\n border-radius: 3px;\n min-height: 40px;\n padding: 8px 20px;\n font-weight: 500;\n text-decoration: none;\n cursor: pointer;\n display: inline-block;\n line-height: 20px;\n border: 1px solid transparent;\n vertical-align: middle;\n -webkit-appearance: none; }\n button i,\n .button i {\n position: relative;\n top: 1px;\n margin: 0 2px; }\n\ninput[type=\"submit\"] {\n width: auto; }\n\nbutton:hover,\n.button:hover {\n outline: none;\n text-decoration: none;\n color: #fff;\n background-color: #4ca0f5; }\n\n.button:disabled,\n.button.disabled {\n cursor: default;\n font-style: normal;\n color: rgba(255, 255, 255, 0.7);\n background-color: rgba(28, 134, 242, 0.7); }\n\n.button.small {\n font-size: 13px;\n min-height: 36px;\n padding: 6px 20px;\n border-radius: 3px; }\n\n.button.big {\n font-size: 17px;\n min-height: 48px;\n padding: 13px 24px;\n border-radius: 3px; }\n\n.button.large {\n font-size: 19px;\n min-height: 56px;\n padding: 20px 36px;\n border-radius: 3px; }\n\n.button.outline {\n background: none;\n border-width: 2px;\n border-color: #1c86f2;\n color: #1c86f2; }\n .button.outline:hover {\n background: none;\n color: rgba(28, 134, 242, 0.6);\n border-color: rgba(28, 134, 242, 0.5); }\n .button.outline:disabled, .button.outline.disabled {\n background: none;\n color: rgba(28, 134, 242, 0.7);\n border-color: rgba(28, 134, 242, 0.5); }\n\n.button.inverted {\n color: #000;\n background-color: #fff; }\n .button.inverted:hover {\n color: #000;\n background-color: white; }\n .button.inverted:disabled, .button.inverted.disabled {\n color: rgba(0, 0, 0, 0.7);\n background-color: rgba(255, 255, 255, 0.7); }\n .button.inverted.outline {\n background: none;\n color: #fff;\n border-color: #fff; }\n .button.inverted.outline:hover {\n color: rgba(255, 255, 255, 0.6);\n border-color: rgba(255, 255, 255, 0.5); }\n .button.inverted.outline:disabled, .button.inverted.outline.disabled {\n background: none;\n color: rgba(255, 255, 255, 0.7);\n border-color: rgba(255, 255, 255, 0.5); }\n .button.inverted:hover {\n opacity: .7; }\n\n.button.round {\n border-radius: 56px; }\n\n.button.raised {\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); }\n\n.button.upper {\n text-transform: uppercase;\n letter-spacing: .04em;\n font-size: 13px; }\n .button.upper.small {\n font-size: 11px; }\n .button.upper.big {\n font-size: 13px; }\n .button.upper.large {\n font-size: 15px; }\n\n.button.secondary {\n color: #fff;\n background-color: #313439; }\n .button.secondary:hover {\n color: #fff;\n background-color: #606670; }\n .button.secondary:disabled, .button.secondary.disabled {\n color: rgba(255, 255, 255, 0.7);\n background-color: rgba(49, 52, 57, 0.7); }\n .button.secondary.outline {\n background: none;\n color: #313439;\n border-color: #313439; }\n .button.secondary.outline:hover {\n color: rgba(49, 52, 57, 0.6);\n border-color: rgba(49, 52, 57, 0.5); }\n .button.secondary.outline:disabled, .button.secondary.outline.disabled {\n background: none;\n color: rgba(49, 52, 57, 0.7);\n border-color: rgba(49, 52, 57, 0.5); }\n\n.label {\n display: inline-block;\n font-size: 13px;\n background: #e0e1e1;\n line-height: 18px;\n padding: 0 10px;\n font-weight: 500;\n color: #313439;\n border: 1px solid transparent;\n vertical-align: middle;\n text-decoration: none;\n border-radius: 4px; }\n .label a,\n .label a:hover {\n color: inherit;\n text-decoration: none; }\n\n.label.big {\n font-size: 14px;\n line-height: 24px;\n padding: 0 12px; }\n\n.label.upper {\n text-transform: uppercase;\n font-size: 11px; }\n\n.label.outline {\n background: none;\n border-color: #bdbdbd; }\n\n.label.badge {\n text-align: center;\n border-radius: 64px;\n padding: 0 6px; }\n .label.badge.big {\n padding: 0 8px; }\n\n.label.tag {\n padding: 0;\n background: none;\n border: none;\n text-transform: uppercase;\n font-size: 11px; }\n .label.tag.big {\n font-size: 13px; }\n\n.label.success {\n background: #35beb1;\n color: #fff; }\n .label.success.tag, .label.success.outline {\n background: none;\n border-color: #35beb1;\n color: #35beb1; }\n\n.label.error {\n background: #f03c69;\n color: #fff; }\n .label.error.tag, .label.error.outline {\n background: none;\n border-color: #f03c69;\n color: #f03c69; }\n\n.label.warning {\n background: #f7ba45;\n color: #0d0d0e; }\n .label.warning.tag, .label.warning.outline {\n background: none;\n border-color: #f7ba45;\n color: #f7ba45; }\n\n.label.focus {\n background: #1c86f2;\n color: #fff; }\n .label.focus.tag, .label.focus.outline {\n background: none;\n border-color: #1c86f2;\n color: #1c86f2; }\n\n.label.black {\n background: #0d0d0e;\n color: #fff; }\n .label.black.tag, .label.black.outline {\n background: none;\n border-color: #0d0d0e;\n color: #0d0d0e; }\n\n.label.inverted {\n background: #fff;\n color: #0d0d0e; }\n .label.inverted.tag, .label.inverted.outline {\n background: none;\n border-color: #fff;\n color: #fff; }\n\n.breadcrumbs {\n font-size: 14px;\n margin-bottom: 24px; }\n .breadcrumbs ul {\n display: flex;\n align-items: center; }\n .breadcrumbs.push-center ul {\n justify-content: center; }\n .breadcrumbs span,\n .breadcrumbs a {\n font-style: normal;\n padding: 0 10px;\n display: inline-block;\n white-space: nowrap; }\n .breadcrumbs li:after {\n display: inline-block;\n content: '/';\n color: rgba(0, 0, 0, 0.3); }\n .breadcrumbs li:last-child:after {\n display: none; }\n .breadcrumbs li:first-child span,\n .breadcrumbs li:first-child a {\n padding-left: 0; }\n .breadcrumbs li.active a {\n color: #313439;\n text-decoration: none;\n cursor: text; }\n\n.pagination {\n margin: 24px 0;\n font-size: 14px; }\n .pagination ul {\n display: flex;\n margin: 0; }\n .pagination.align-center ul {\n justify-content: center; }\n .pagination span,\n .pagination a {\n border-radius: 3px;\n display: inline-block;\n padding: 8px 12px;\n line-height: 1;\n white-space: nowrap;\n border: 1px solid transparent; }\n .pagination a {\n text-decoration: none;\n color: #313439; }\n .pagination a:hover {\n color: rgba(0, 0, 0, 0.5);\n border-color: #e0e1e1; }\n .pagination span,\n .pagination li.active a {\n color: rgba(0, 0, 0, 0.5);\n border-color: #e0e1e1;\n cursor: text; }\n .pagination.upper {\n font-size: 12px; }\n\n.pager span {\n line-height: 24px; }\n\n.pager span,\n.pager a {\n padding-left: 16px;\n padding-right: 16px;\n border-radius: 64px;\n border-color: rgba(0, 0, 0, 0.1); }\n\n.pager li {\n flex-basis: 50%; }\n\n.pager li.next {\n text-align: right; }\n\n.pager.align-center li {\n flex-basis: auto;\n margin-left: 4px;\n margin-right: 4px; }\n\n.pager.flat span,\n.pager.flat a {\n border: none;\n display: block;\n padding: 0; }\n\n.pager.flat a {\n font-weight: bold; }\n .pager.flat a:hover {\n background: none;\n text-decoration: underline; }\n\n@media (max-width: 1230px) {\n .pager.flat ul {\n flex-direction: column; }\n .pager.flat li {\n flex-basis: 100%;\n margin-bottom: 8px;\n text-align: left; } }\n\n@font-face {\n font-family: 'Kube';\n src: url(\"data:application/x-font-ttf;charset=utf-8;base64,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\") format(\"truetype\");\n font-weight: normal;\n font-style: normal; }\n\n[class^=\"kube-\"], [class*=\" kube-\"], .close, .caret {\n /* use !important to prevent issues with browser extensions that change fonts */\n font-family: 'Kube' !important;\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n line-height: 1;\n /* Better Font Rendering =========== */\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale; }\n\n.kube-calendar:before {\n content: \"\\e900\"; }\n\n.caret.down:before,\n.kube-caret-down:before {\n content: \"\\e901\"; }\n\n.caret.left:before,\n.kube-caret-left:before {\n content: \"\\e902\"; }\n\n.caret.right:before,\n.kube-caret-right:before {\n content: \"\\e903\"; }\n\n.caret.up:before,\n.kube-caret-up:before {\n content: \"\\e904\"; }\n\n.close:before,\n.kube-close:before {\n content: \"\\e905\"; }\n\n.kube-menu:before {\n content: \"\\e906\"; }\n\n.kube-search:before {\n content: \"\\e907\"; }\n\n.gutters .column.push-left,\n.push-left {\n margin-right: auto; }\n\n.gutters .column.push-right,\n.push-right {\n margin-left: auto; }\n\n.gutters .column.push-center,\n.push-center {\n margin-left: auto;\n margin-right: auto; }\n\n.gutters .column.push-middle,\n.push-middle {\n margin-top: auto;\n margin-bottom: auto; }\n\n.push-bottom {\n margin-top: auto; }\n\n@media (max-width: 1230px) {\n .gutters .column.push-left-sm,\n .push-left-sm {\n margin-left: 0; }\n .gutters .column.push-center-sm,\n .push-center-sm {\n margin-left: auto;\n margin-right: auto; }\n .push-top-sm {\n margin-top: 0; } }\n\n.align-middle {\n align-items: center; }\n\n.align-right {\n justify-content: flex-end; }\n\n.align-center {\n justify-content: center; }\n\n@media (max-width: 1230px) {\n .align-left-sm {\n justify-content: flex-start; } }\n\n.float-right {\n float: right; }\n\n.float-left {\n float: left; }\n\n@media (max-width: 1230px) {\n .float-right {\n float: none; }\n .float-left {\n float: none; } }\n\n.fixed {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 100;\n width: 100%; }\n\n.w5 {\n width: 5%; }\n\n.w10 {\n width: 10%; }\n\n.w15 {\n width: 15%; }\n\n.w20 {\n width: 20%; }\n\n.w25 {\n width: 25%; }\n\n.w30 {\n width: 30%; }\n\n.w35 {\n width: 35%; }\n\n.w40 {\n width: 40%; }\n\n.w45 {\n width: 45%; }\n\n.w50 {\n width: 50%; }\n\n.w55 {\n width: 55%; }\n\n.w60 {\n width: 60%; }\n\n.w65 {\n width: 65%; }\n\n.w70 {\n width: 70%; }\n\n.w75 {\n width: 75%; }\n\n.w80 {\n width: 80%; }\n\n.w85 {\n width: 85%; }\n\n.w90 {\n width: 90%; }\n\n.w95 {\n width: 95%; }\n\n.w100 {\n width: 100%; }\n\n.w-auto {\n width: auto; }\n\n.w-small {\n width: 480px; }\n\n.w-medium {\n width: 600px; }\n\n.w-big {\n width: 740px; }\n\n.w-large {\n width: 840px; }\n\n@media (max-width: 1230px) {\n .w-auto-sm {\n width: auto; }\n .w100-sm,\n .w-small,\n .w-medium,\n .w-big,\n .w-large {\n width: 100%; } }\n\n.max-w5 {\n max-width: 5%; }\n\n.max-w10 {\n max-width: 10%; }\n\n.max-w15 {\n max-width: 15%; }\n\n.max-w20 {\n max-width: 20%; }\n\n.max-w25 {\n max-width: 25%; }\n\n.max-w30 {\n max-width: 30%; }\n\n.max-w35 {\n max-width: 35%; }\n\n.max-w40 {\n max-width: 40%; }\n\n.max-w45 {\n max-width: 45%; }\n\n.max-w50 {\n max-width: 50%; }\n\n.max-w55 {\n max-width: 55%; }\n\n.max-w60 {\n max-width: 60%; }\n\n.max-w65 {\n max-width: 65%; }\n\n.max-w70 {\n max-width: 70%; }\n\n.max-w75 {\n max-width: 75%; }\n\n.max-w80 {\n max-width: 80%; }\n\n.max-w85 {\n max-width: 85%; }\n\n.max-w90 {\n max-width: 90%; }\n\n.max-w95 {\n max-width: 95%; }\n\n.max-w100 {\n max-width: 100%; }\n\n.max-w-small {\n max-width: 480px; }\n\n.max-w-medium {\n max-width: 600px; }\n\n.max-w-big {\n max-width: 740px; }\n\n.max-w-large {\n max-width: 840px; }\n\n@media (max-width: 1230px) {\n .max-w-auto-sm,\n .max-w-small,\n .max-w-medium,\n .max-w-big,\n .max-w-large {\n max-width: auto; } }\n\n.min-w5 {\n min-width: 5%; }\n\n.min-w10 {\n min-width: 10%; }\n\n.min-w15 {\n min-width: 15%; }\n\n.min-w20 {\n min-width: 20%; }\n\n.min-w25 {\n min-width: 25%; }\n\n.min-w30 {\n min-width: 30%; }\n\n.min-w35 {\n min-width: 35%; }\n\n.min-w40 {\n min-width: 40%; }\n\n.min-w45 {\n min-width: 45%; }\n\n.min-w50 {\n min-width: 50%; }\n\n.min-w55 {\n min-width: 55%; }\n\n.min-w60 {\n min-width: 60%; }\n\n.min-w65 {\n min-width: 65%; }\n\n.min-w70 {\n min-width: 70%; }\n\n.min-w75 {\n min-width: 75%; }\n\n.min-w80 {\n min-width: 80%; }\n\n.min-w85 {\n min-width: 85%; }\n\n.min-w90 {\n min-width: 90%; }\n\n.min-w95 {\n min-width: 95%; }\n\n.min-w100 {\n min-width: 100%; }\n\n.h25 {\n height: 25%; }\n\n.h50 {\n height: 50%; }\n\n.h100 {\n height: 100%; }\n\n.group:after {\n content: '';\n display: table;\n clear: both; }\n\n.flex {\n display: flex; }\n\n@media (max-width: 1230px) {\n .flex-column-sm {\n flex-direction: column; }\n .flex-w100-sm {\n flex: 0 0 100%; } }\n @media (max-width: 1230px) and (max-width: 1230px) {\n .flex-w100-sm {\n flex: 0 0 100% !important; } }\n\n.invisible {\n visibility: hidden; }\n\n.visible {\n visibility: visible; }\n\n.display-block {\n display: block; }\n\n.hide {\n display: none !important; }\n\n@media (max-width: 1230px) {\n .hide-sm {\n display: none !important; } }\n\n@media (min-width: 1230px) {\n .show-sm {\n display: none !important; } }\n\n@media print {\n .hide-print {\n display: none !important; }\n .show-print {\n display: block !important; } }\n\n.no-scroll {\n overflow: hidden;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100% !important; }\n\n.scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll; }\n\n.video-container {\n height: 0;\n padding-bottom: 56.25%;\n position: relative;\n margin-bottom: 16px; }\n .video-container iframe,\n .video-container object,\n .video-container embed {\n position: absolute;\n top: 0;\n left: 0;\n width: 100% !important;\n height: 100% !important; }\n\n.close {\n display: inline-block;\n min-height: 16px;\n min-width: 16px;\n line-height: 16px;\n vertical-align: middle;\n text-align: center;\n font-size: 12px;\n opacity: .6; }\n .close:hover {\n opacity: 1; }\n .close.small {\n font-size: 8px; }\n .close.big {\n font-size: 18px; }\n .close.white {\n color: #fff; }\n\n.caret {\n display: inline-block; }\n\n.button .caret {\n margin-right: -8px; }\n\n.overlay {\n position: fixed;\n z-index: 200;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(255, 255, 255, 0.95); }\n .overlay > .close {\n position: fixed;\n top: 1rem;\n right: 1rem; }\n\n@media print {\n * {\n background: transparent !important;\n color: black !important;\n box-shadow: none !important;\n text-shadow: none !important; }\n a,\n a:visited {\n text-decoration: underline; }\n pre, blockquote {\n border: 1px solid #999;\n page-break-inside: avoid; }\n p, h2, h3 {\n orphans: 3;\n widows: 3; }\n thead {\n display: table-header-group; }\n tr, img {\n page-break-inside: avoid; }\n img {\n max-width: 100% !important; }\n h2, h3, h4 {\n page-break-after: avoid; }\n @page {\n margin: 0.5cm; } }\n\n@keyframes slideUp {\n to {\n height: 0;\n padding-top: 0;\n padding-bottom: 0; } }\n\n@keyframes slideDown {\n from {\n height: 0;\n padding-top: 0;\n padding-bottom: 0; } }\n\n@keyframes fadeIn {\n from {\n opacity: 0; }\n to {\n opacity: 1; } }\n\n@keyframes fadeOut {\n from {\n opacity: 1; }\n to {\n opacity: 0; } }\n\n@keyframes flipIn {\n from {\n opacity: 0;\n transform: scaleY(0); }\n to {\n opacity: 1;\n transform: scaleY(1); } }\n\n@keyframes flipOut {\n from {\n opacity: 1;\n transform: scaleY(1); }\n to {\n opacity: 0;\n transform: scaleY(0); } }\n\n@keyframes zoomIn {\n from {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3); }\n 50% {\n opacity: 1; } }\n\n@keyframes zoomOut {\n from {\n opacity: 1; }\n 50% {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3); }\n to {\n opacity: 0; } }\n\n@keyframes slideInRight {\n from {\n transform: translate3d(100%, 0, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideInLeft {\n from {\n transform: translate3d(-100%, 0, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideInDown {\n from {\n transform: translate3d(0, -100%, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideOutLeft {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(-100%, 0, 0); } }\n\n@keyframes slideOutRight {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(100%, 0, 0); } }\n\n@keyframes slideOutUp {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(0, -100%, 0); } }\n\n@keyframes rotate {\n from {\n transform: rotate(0deg); }\n to {\n transform: rotate(360deg); } }\n\n@keyframes pulse {\n from {\n transform: scale3d(1, 1, 1); }\n 50% {\n transform: scale3d(1.03, 1.03, 1.03); }\n to {\n transform: scale3d(1, 1, 1); } }\n\n@keyframes shake {\n 15% {\n transform: translateX(0.5rem); }\n 30% {\n transform: translateX(-0.4rem); }\n 45% {\n transform: translateX(0.3rem); }\n 60% {\n transform: translateX(-0.2rem); }\n 75% {\n transform: translateX(0.1rem); }\n 90% {\n transform: translateX(0); }\n 90% {\n transform: translateX(0); } }\n\n.fadeIn {\n animation: fadeIn 250ms; }\n\n.fadeOut {\n animation: fadeOut 250ms; }\n\n.zoomIn {\n animation: zoomIn 200ms; }\n\n.zoomOut {\n animation: zoomOut 500ms; }\n\n.slideInRight {\n animation: slideInRight 500ms; }\n\n.slideInLeft {\n animation: slideInLeft 500ms; }\n\n.slideInDown {\n animation: slideInDown 500ms; }\n\n.slideOutLeft {\n animation: slideOutLeft 500ms; }\n\n.slideOutRight {\n animation: slideOutRight 500ms; }\n\n.slideOutUp {\n animation: slideOutUp 500ms; }\n\n.slideUp {\n overflow: hidden;\n animation: slideUp 200ms ease-in-out; }\n\n.slideDown {\n overflow: hidden;\n animation: slideDown 80ms ease-in-out; }\n\n.flipIn {\n animation: flipIn 250ms cubic-bezier(0.5, -0.5, 0.5, 1.5); }\n\n.flipOut {\n animation: flipOut 500ms cubic-bezier(0.5, -0.5, 0.5, 1.5); }\n\n.rotate {\n animation: rotate 500ms; }\n\n.pulse {\n animation: pulse 250ms 2; }\n\n.shake {\n animation: shake 500ms; }\n\n.dropdown {\n position: absolute;\n z-index: 100;\n top: 0;\n right: 0;\n width: 280px;\n color: #000;\n font-size: 15px;\n background: #fff;\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);\n border-radius: 3px;\n max-height: 300px;\n margin: 0;\n padding: 0;\n overflow: hidden; }\n .dropdown.dropdown-mobile {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n max-height: none;\n border: none; }\n .dropdown .close {\n margin: 20px auto; }\n .dropdown.open {\n overflow: auto; }\n .dropdown ul {\n list-style: none;\n margin: 0; }\n .dropdown ul li {\n border-bottom: 1px solid rgba(0, 0, 0, 0.07); }\n .dropdown ul li:last-child {\n border-bottom: none; }\n .dropdown ul a {\n display: block;\n padding: 12px;\n text-decoration: none;\n color: #000; }\n .dropdown ul a:hover {\n background: rgba(0, 0, 0, 0.05); }\n\n.message {\n font-family: Consolas, Monaco, \"Courier New\", monospace;\n font-size: 14px;\n line-height: 20px;\n background: #e0e1e1;\n color: #313439;\n padding: 1rem;\n padding-right: 2.5em;\n padding-bottom: .75rem;\n margin-bottom: 24px;\n position: relative; }\n .message a {\n color: inherit; }\n .message h2,\n .message h3,\n .message h4,\n .message h5,\n .message h6 {\n margin-bottom: 0; }\n .message .close {\n position: absolute;\n right: 1rem;\n top: 1.1rem; }\n\n.message.error {\n background: #f03c69;\n color: #fff; }\n\n.message.success {\n background: #35beb1;\n color: #fff; }\n\n.message.warning {\n background: #f7ba45; }\n\n.message.focus {\n background: #1c86f2;\n color: #fff; }\n\n.message.black {\n background: #0d0d0e;\n color: #fff; }\n\n.message.inverted {\n background: #fff; }\n\n.modal-box {\n position: fixed;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n overflow-x: hidden;\n overflow-y: auto;\n z-index: 200; }\n\n.modal {\n position: relative;\n margin: auto;\n margin-top: 16px;\n padding: 0;\n background: #fff;\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);\n border-radius: 8px;\n color: #000; }\n @media (max-width: 1230px) {\n .modal input,\n .modal textarea {\n font-size: 16px; } }\n .modal .close {\n position: absolute;\n top: 18px;\n right: 16px;\n opacity: .3; }\n .modal .close:hover {\n opacity: 1; }\n\n.modal-header {\n padding: 24px 32px;\n font-size: 18px;\n font-weight: bold;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05); }\n .modal-header:empty {\n display: none; }\n\n.modal-body {\n padding: 36px 56px; }\n\n@media (max-width: 1230px) {\n .modal-header,\n .modal-body {\n padding: 24px; } }\n\n.offcanvas {\n background: #fff;\n position: fixed;\n padding: 24px;\n height: 100%;\n top: 0;\n left: 0;\n z-index: 300;\n overflow-y: scroll; }\n\n.offcanvas .close {\n position: absolute;\n top: 8px;\n right: 8px; }\n\n.offcanvas-left {\n border-right: 1px solid rgba(0, 0, 0, 0.1); }\n\n.offcanvas-right {\n left: auto;\n right: 0;\n border-left: 1px solid rgba(0, 0, 0, 0.1); }\n\n.offcanvas-push-body {\n position: relative; }\n\n.tabs {\n margin-bottom: 24px;\n font-size: 14px; }\n .tabs li em,\n .tabs li.active a {\n color: #313439;\n border: 1px solid rgba(0, 0, 0, 0.1);\n cursor: default;\n text-decoration: none;\n background: none; }\n .tabs em,\n .tabs a {\n position: relative;\n top: 1px;\n font-style: normal;\n display: block;\n padding: .5rem 1rem;\n border: 1px solid transparent;\n color: rgba(0, 0, 0, 0.5);\n text-decoration: none; }\n .tabs a:hover {\n -moz-transition: all linear 0.2s;\n transition: all linear 0.2s;\n color: #313439;\n text-decoration: underline;\n background-color: #e0e1e1; }\n\n@media (min-width: 1230px) {\n .tabs ul {\n display: flex;\n margin-top: -1px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1); }\n .tabs li em,\n .tabs li.active a {\n border-bottom: 1px solid #fff; } }\n",".mg-active-datapoint {\n fill: black;\n font-size: 0.9rem;\n font-weight: 400;\n opacity: 0.8;\n}\n\n.mg-area1-color {\n fill: #0000ff;\n}\n\n.mg-area2-color {\n fill: #05b378;\n}\n\n.mg-area3-color {\n fill: #db4437;\n}\n\n.mg-area4-color {\n fill: #f8b128;\n}\n\n.mg-area5-color {\n fill: #5c5c5c;\n}\n\ntext.mg-barplot-group-label {\n font-weight:900;\n}\n\n.mg-barplot rect.mg-bar {\n shape-rendering: auto;\n}\n\n.mg-barplot rect.mg-bar.default-bar {\n fill: #b6b6fc;\n}\n\n.mg-barplot rect.mg-bar.default-active {\n fill: #9e9efc;\n}\n\n.mg-barplot .mg-bar-prediction {\n fill: #5b5b5b;\n}\n\n.mg-barplot .mg-bar-baseline {\n stroke: #5b5b5b;\n stroke-width: 2;\n}\n\n.mg-bar-target-element {\n font-size:11px;\n padding-left:5px;\n padding-right:5px;\n font-weight:300;\n}\n\n.mg-baselines line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-baselines text {\n fill: black;\n font-size: 0.9rem;\n opacity: 0.6;\n stroke: none;\n}\n\n.mg-baselines-small text {\n font-size: 0.6rem;\n}\n\n.mg-category-guides line {\n stroke: #b3b2b2;\n}\n\n.mg-header {\n cursor: default;\n font-size: 1.2rem;\n}\n\n.mg-header .mg-chart-description {\n fill: #ccc;\n font-family: FontAwesome;\n font-size: 1.2rem;\n}\n\n.mg-header .mg-warning {\n fill: #ccc;\n font-family: FontAwesome;\n font-size: 1.2rem;\n}\n\n.mg-points circle {\n opacity: 0.65;\n}\n\n.mg-popover {\n font-size: 0.95rem;\n}\n\n.mg-popover-content {\n cursor: auto;\n line-height: 17px;\n}\n\n.mg-data-table {\n margin-top: 30px;\n}\n\n.mg-data-table thead tr th {\n border-bottom: 1px solid darkgray;\n cursor: default;\n font-size: 1.1rem;\n font-weight: normal;\n padding: 5px 5px 8px 5px;\n text-align: right;\n}\n\n.mg-data-table thead tr th .fa {\n color: #ccc;\n padding-left: 4px;\n}\n\n.mg-data-table thead tr th .popover {\n font-size: 1rem;\n font-weight: normal;\n}\n\n.mg-data-table .secondary-title {\n color: darkgray;\n}\n\n.mg-data-table tbody tr td {\n margin: 2px;\n padding: 5px;\n vertical-align: top;\n}\n\n.mg-data-table tbody tr td.table-text {\n opacity: 0.8;\n padding-left: 30px;\n}\n\n.mg-y-axis line.mg-extended-yax-ticks {\n opacity: 0.4;\n}\n\n.mg-x-axis line.mg-extended-xax-ticks {\n opacity: 0.4;\n}\n\n.mg-histogram .axis path,\n.mg-histogram .axis line {\n fill: none;\n opacity: 0.7;\n shape-rendering: auto;\n stroke: #ccc;\n}\n\ntspan.hist-symbol {\n fill: #9e9efc;\n}\n\n.mg-histogram .mg-bar rect {\n fill: #b6b6fc;\n shape-rendering: auto;\n}\n\n.mg-histogram .mg-bar rect.active {\n fill: #9e9efc;\n}\n\n.mg-least-squares-line {\n stroke: red;\n stroke-width: 1px;\n}\n\n.mg-lowess-line {\n fill: none;\n stroke: red;\n}\n\n.mg-line1-color {\n stroke: #4040e8;\n}\n\n.mg-hover-line1-color {\n fill: #4040e8;\n}\n\n.mg-line2-color {\n stroke: #05b378;\n}\n\n.mg-hover-line2-color {\n fill: #05b378;\n}\n\n.mg-line3-color {\n stroke: #db4437;\n}\n\n.mg-hover-line3-color {\n fill: #db4437;\n}\n\n.mg-line4-color {\n stroke: #f8b128;\n}\n\n.mg-hover-line4-color {\n fill: #f8b128;\n}\n\n.mg-line5-color {\n stroke: #5c5c5c;\n}\n\n.mg-hover-line5-color {\n fill: #5c5c5c;\n}\n\n.mg-line-legend text {\n font-size: 0.9rem;\n font-weight: 300;\n stroke: none;\n}\n\n.mg-line1-legend-color {\n color: #4040e8;\n fill: #4040e8;\n}\n\n.mg-line2-legend-color {\n color: #05b378;\n fill: #05b378;\n}\n\n.mg-line3-legend-color {\n color: #db4437;\n fill: #db4437;\n}\n\n.mg-line4-legend-color {\n color: #f8b128;\n fill: #f8b128;\n}\n\n.mg-line5-legend-color {\n color: #5c5c5c;\n fill: #5c5c5c;\n}\n\n.mg-main-area-solid svg .mg-main-area {\n fill: #ccccff;\n opacity: 1;\n}\n\n.mg-markers line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-markers text {\n fill: black;\n font-size: 0.8rem;\n opacity: 0.6;\n}\n\n.mg-missing-text {\n opacity: 0.9;\n}\n\n.mg-missing-background {\n stroke: blue;\n fill: none;\n stroke-dasharray: 10,5;\n stroke-opacity: 0.05;\n stroke-width: 2;\n}\n\n.mg-missing .mg-main-line {\n opacity: 0.1;\n}\n\n.mg-missing .mg-main-area {\n opacity: 0.03;\n}\n\npath.mg-main-area {\n opacity: 0.2;\n stroke: none;\n}\n\npath.mg-confidence-band {\n fill: #ccc;\n opacity: 0.4;\n stroke: none;\n}\n\npath.mg-main-line {\n fill: none;\n opacity: 0.8;\n stroke-width: 1.1px;\n}\n\n.mg-points circle {\n fill-opacity: 0.4;\n stroke-opacity: 1;\n}\n\ncircle.mg-points-mono {\n fill: #0000ff;\n stroke: #0000ff;\n}\n\ntspan.mg-points-mono {\n fill: #0000ff;\n stroke: #0000ff;\n}\n\n/* a selected point in a scatterplot */\n.mg-points circle.selected {\n fill-opacity: 1;\n stroke-opacity: 1;\n}\n\n.mg-voronoi path {\n fill: none;\n pointer-events: all;\n stroke: none;\n stroke-opacity: 0.1;\n}\n\n.mg-x-rug-mono,\n.mg-y-rug-mono {\n stroke: black;\n}\n\n.mg-x-axis line,\n.mg-y-axis line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-x-axis text,\n.mg-y-axis text,\n.mg-histogram .axis text {\n fill: black;\n font-size: 0.9rem;\n opacity: 0.6;\n}\n\n.mg-x-axis .label,\n.mg-y-axis .label,\n.mg-axis .label {\n font-size: 0.8rem;\n text-transform: uppercase;\n font-weight: 400;\n}\n\n.mg-x-axis-small text,\n.mg-y-axis-small text,\n.mg-active-datapoint-small {\n font-size: 0.6rem;\n}\n\n.mg-x-axis-small .label,\n.mg-y-axis-small .label {\n font-size: 0.65rem;\n}\n\n.mg-european-hours {\n}\n\n.mg-year-marker text {\n fill: black;\n font-size: 0.7rem;\n opacity: 0.6;\n}\n\n.mg-year-marker line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-year-marker-small text {\n font-size: 0.6rem;\n}\n","body {\n background: #eaeaea;\n padding-bottom: 216px;\n}\nheader {\n width: 100%;\n min-height: 216px;\n padding: 48px;\n margin-bottom: 24px;\n background: #fafafa;\n}\nheader .search {\n margin-top: 48px;\n}\n#logo {\n display: block;\n margin: 0 auto;\n max-width: 400px;\n}\n.content {\n margin: auto;\n width: 95%;\n max-width: 1080px;\n}\nsection#landing h1 {\n font-size: 25px;\n}\nsection {\n padding: 36px;\n float: right;\n margin: 0 0 24px 0;\n background: #fafafa;\n box-shadow: 5px 5px 20px 2px rgba(0,0,0,0.03);\n}\nsection h2 {\n font-size: 21px;\n line-height: 32px;\n color: #7d7d7d;\n margin-bottom: 50px;\n}\nsection small {\n display: block;\n width: 100%;\n margin-top: 30px;\n padding-right: 20px;\n text-align: right;\n color: #aaa;\n}\nsection small a {\n color: #aaf;\n text-decoration: none;\n}\nsection.unmaterialized {\n box-shadow: 0 0 0 0;\n background: #f0f0f0;\n padding: 24px 24px 48px 24px;\n border-right: 1px solid #dedede;\n border-bottom: 1px solid #dedede;\n}\n#controls {\n padding: 36px;\n background: #f0f0f0;\n border-right: 1px solid #dedede;\n border-bottom: 1px solid #dedede;\n margin-bottom: 20px;\n}\n.fixed {\n position: relative;\n}\n@media (min-width: 1230px) {\n #cards {\n padding-bottom: 100px;\n position: relative;\n z-index: 9;\n }\n section {\n z-index: 10;\n width: calc(100% - 345px);\n float: right;\n }\n #landing {\n width: 100%;\n }\n .fixed-container {\n z-index: 0;\n position: absolute;\n top: 245px;\n left: calc(50% - (540px));\n }\n .fixed {\n position: fixed !important;\n top: 25px;\n }\n #controls {\n width: 325px;\n float: left;\n }\n}\ncite.metric {\n display: block;\n width: 100%;\n height: 0;\n float: right;\n text-align: center;\n font-size: 12px;\n color: #ccc;\n font-style: normal;\n padding-left: 50px;\n margin: 200px 0px -185px 0;\n}\ncite.metric a {\n color: #aaa;\n text-decoration: underline;\n}\n.linechart {\n height: 210px;\n margin-bottom: 30px;\n}\n.mg-line-legend {\n display: none;\n}\n.legend {\n position: relative;\n margin: 0;\n padding: 0;\n height: 0;\n top: 31px;\n left: 55px;\n fontSize: 14px;\n fontWeight: bold;\n opacity: 0.8;\n}\n.mg-baselines {\n opacity: 0.5;\n}\n.loader {\n width: 100%;\n text-align: center;\n line-height: 10;\n animation: outro 1s, loader 1.5s infinite;\n}\n.intro {\n animation: intro 2s;\n}\n@media print {\n body {\n zoom: 75%;\n }\n section {\n min-width: 800px;\n min-height: 10.5in;\n page-break-after: always;\n }\n section.unmaterialized {\n display: none;\n }\n}\n.hidden,\n.hidden > *,\n.hidden > small {\n display: none !important;\n}\n@-moz-keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-webkit-keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-o-keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-moz-keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-webkit-keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-o-keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-moz-keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n@-webkit-keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n@-o-keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n@keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n"]}
\ No newline at end of file
+{"version":3,"sources":["app/include/kube/kube.css","app/include/metricsgraphics.css","app/styles/augur.styl"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5mEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"public/static/app.css","sourcesContent":["/*\n\tKube. CSS & JS Framework\n\tVersion 6.5.2\n\tUpdated: February 2, 2017\n\n\thttp://imperavi.com/kube/\n\n\tCopyright (c) 2009-2017, Imperavi LLC.\n\tLicense: MIT\n*/\nhtml {\n box-sizing: border-box; }\n\n*,\n*:before,\n*:after {\n box-sizing: inherit; }\n\n* {\n margin: 0;\n padding: 0;\n outline: 0;\n -webkit-overflow-scrolling: touch; }\n\nimg,\nvideo,\naudio {\n max-width: 100%; }\n\nimg,\nvideo {\n height: auto; }\n\nsvg {\n max-height: 100%; }\n\niframe {\n border: none; }\n\n::-moz-focus-inner {\n border: 0;\n padding: 0; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n vertical-align: middle;\n position: relative;\n bottom: 0.15rem;\n font-size: 115%;\n margin-right: 3px; }\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; }\n\ninput[type=\"search\"]::-webkit-search-decoration,\ninput[type=\"search\"]::-webkit-search-cancel-button {\n -webkit-appearance: none; }\n\n.black {\n color: #0d0d0e; }\n\n.inverted {\n color: #fff; }\n\n.error {\n color: #f03c69; }\n\n.success {\n color: #35beb1; }\n\n.warning {\n color: #f7ba45; }\n\n.focus {\n color: #1c86f2; }\n\n.aluminum {\n color: #f8f8f8; }\n\n.silver {\n color: #e0e1e1; }\n\n.lightgray {\n color: #d4d4d4; }\n\n.gray {\n color: #bdbdbd; }\n\n.midgray {\n color: #676b72; }\n\n.darkgray {\n color: #313439; }\n\n.bg-black {\n background-color: #0d0d0e; }\n\n.bg-inverted {\n background-color: #fff; }\n\n.bg-error {\n background-color: #f03c69; }\n\n.bg-success {\n background-color: #35beb1; }\n\n.bg-warning {\n background-color: #f7ba45; }\n\n.bg-focus {\n background-color: #1c86f2; }\n\n.bg-aluminum {\n background-color: #f8f8f8; }\n\n.bg-silver {\n background-color: #e0e1e1; }\n\n.bg-lightgray {\n background-color: #d4d4d4; }\n\n.bg-gray {\n background-color: #bdbdbd; }\n\n.bg-midgray {\n background-color: #676b72; }\n\n.bg-darkgray {\n background-color: #313439; }\n\n.bg-highlight {\n background-color: #edf2ff; }\n\nhtml,\nbody {\n font-size: 16px;\n line-height: 24px; }\n\nbody {\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n color: #313439;\n background-color: transparent; }\n\na {\n color: #3794de; }\n\na:hover {\n color: #f03c69; }\n\nh1.title, h1, h2, h3, h4, h5, h6 {\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n font-weight: bold;\n color: #0d0d0e;\n text-rendering: optimizeLegibility;\n margin-bottom: 16px; }\n\nh1.title {\n font-size: 60px;\n line-height: 64px;\n margin-bottom: 8px; }\n\nh1,\n.h1 {\n font-size: 48px;\n line-height: 52px; }\n\nh2,\n.h2 {\n font-size: 36px;\n line-height: 40px; }\n\nh3,\n.h3 {\n font-size: 24px;\n line-height: 32px; }\n\nh4,\n.h4 {\n font-size: 21px;\n line-height: 32px; }\n\nh5,\n.h5 {\n font-size: 18px;\n line-height: 28px; }\n\nh6,\n.h6 {\n font-size: 16px;\n line-height: 24px; }\n\nh1 a, .h1 a,\nh2 a, .h2 a,\nh3 a, .h3 a,\nh4 a, .h4 a,\nh5 a, .h5 a,\nh6 a, .h6 a {\n color: inherit; }\n\np + h2,\np + h3,\np + h4,\np + h5,\np + h6,\nul + h2,\nul + h3,\nul + h4,\nul + h5,\nul + h6,\nol + h2,\nol + h3,\nol + h4,\nol + h5,\nol + h6,\ndl + h2,\ndl + h3,\ndl + h4,\ndl + h5,\ndl + h6,\nblockquote + h2,\nblockquote + h3,\nblockquote + h4,\nblockquote + h5,\nblockquote + h6,\nhr + h2,\nhr + h3,\nhr + h4,\nhr + h5,\nhr + h6,\npre + h2,\npre + h3,\npre + h4,\npre + h5,\npre + h6,\ntable + h2,\ntable + h3,\ntable + h4,\ntable + h5,\ntable + h6,\nform + h2,\nform + h3,\nform + h4,\nform + h5,\nform + h6,\nfigure + h2,\nfigure + h3,\nfigure + h4,\nfigure + h5,\nfigure + h6 {\n margin-top: 24px; }\n\nul,\nul ul,\nul ol,\nol,\nol ul,\nol ol {\n margin: 0 0 0 24px; }\n\nol ol li {\n list-style-type: lower-alpha; }\n\nol ol ol li {\n list-style-type: lower-roman; }\n\nnav ul,\nnav ol {\n margin: 0;\n list-style: none; }\n nav ul ul,\n nav ul ol,\n nav ol ul,\n nav ol ol {\n margin-left: 24px; }\n\ndl dt {\n font-weight: bold; }\n\ndd {\n margin-left: 24px; }\n\np, blockquote, hr, pre, ol, ul, dl, table, fieldset, figure, address, form {\n margin-bottom: 16px; }\n\nhr {\n border: none;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n margin-top: -1px; }\n\nblockquote {\n padding-left: 1rem;\n border-left: 4px solid rgba(0, 0, 0, 0.1);\n font-style: italic;\n color: rgba(49, 52, 57, 0.65); }\n blockquote p {\n margin-bottom: .5rem; }\n\ntime, cite, small, figcaption {\n font-size: 87.5%; }\n\ncite {\n opacity: .6; }\n\nabbr[title], dfn[title] {\n border-bottom: 1px dotted rgba(0, 0, 0, 0.5);\n cursor: help; }\n\nvar {\n font-size: 16px;\n opacity: .6;\n font-style: normal; }\n\nmark, code, samp, kbd {\n position: relative;\n top: -1px;\n padding: 4px 4px 2px 4px;\n display: inline-block;\n line-height: 1;\n color: rgba(49, 52, 57, 0.85); }\n\ncode {\n background: #e0e1e1; }\n\nmark {\n background: #f7ba45; }\n\nsamp {\n color: #fff;\n background: #1c86f2; }\n\nkbd {\n border: 1px solid rgba(0, 0, 0, 0.1); }\n\nsub,\nsup {\n font-size: x-small;\n line-height: 0;\n margin-left: 1rem/4;\n position: relative; }\n\nsup {\n top: 0; }\n\nsub {\n bottom: 1px; }\n\npre, code, samp, var, kbd {\n font-family: Consolas, Monaco, \"Courier New\", monospace; }\n\npre, code, samp, var, kbd, mark {\n font-size: 87.5%; }\n\npre,\npre code {\n background: #f8f8f8;\n padding: 0;\n top: 0;\n display: block;\n line-height: 20px;\n color: rgba(49, 52, 57, 0.85);\n overflow: none;\n white-space: pre-wrap; }\n\npre {\n padding: 1rem; }\n\nfigcaption {\n opacity: .6; }\n\nfigure figcaption {\n position: relative;\n top: -1rem/2; }\n\nfigure pre {\n background: none;\n border: 1px solid rgba(0, 0, 0, 0.1);\n border-radius: 4px; }\n\nfigure .video-container,\nfigure pre {\n margin-bottom: 8px; }\n\n.text-left {\n text-align: left; }\n\n.text-center {\n text-align: center; }\n\n.text-right {\n text-align: right; }\n\nul.unstyled {\n margin-left: 0; }\n\nul.unstyled,\nul.unstyled ul {\n list-style: none; }\n\n.monospace {\n font-family: Consolas, Monaco, \"Courier New\", monospace; }\n\n.upper {\n text-transform: uppercase; }\n\n.lower {\n text-transform: lowercase; }\n\n.italic {\n font-style: italic !important; }\n\n.strong {\n font-weight: bold !important; }\n\n.normal {\n font-weight: normal !important; }\n\n.muted {\n opacity: .55; }\n\na.muted {\n color: #0d0d0e; }\n\na.muted:hover {\n opacity: 1; }\n\n.black {\n color: #0d0d0e; }\n\n.smaller {\n font-size: 12px;\n line-height: 20px; }\n\n.small {\n font-size: 14px;\n line-height: 20px; }\n\n.big {\n font-size: 18px;\n line-height: 28px; }\n\n.large {\n font-size: 20px;\n line-height: 32px; }\n\n.end {\n margin-bottom: 0 !important; }\n\n.highlight {\n background-color: #edf2ff; }\n\n.nowrap,\n.nowrap td {\n white-space: nowrap; }\n\n@media (min-width: 1230px) and (max-width: 1024px) {\n .columns-2,\n .columns-3,\n .columns-4 {\n column-gap: 24px; }\n .columns-2 {\n column-count: 2; }\n .columns-3 {\n column-count: 3; }\n .columns-4 {\n column-count: 4; } }\n\n.row {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap; }\n @media (max-width: 1230px) {\n .row {\n flex-direction: column;\n flex-wrap: nowrap; } }\n .row.gutters,\n .row.gutters > .row {\n margin-left: -2%; }\n @media (max-width: 1230px) {\n .row.gutters,\n .row.gutters > .row {\n margin-left: 0; } }\n .row.gutters > .col,\n .row.gutters > .row > .col {\n margin-left: 2%; }\n @media (max-width: 1230px) {\n .row.gutters > .col,\n .row.gutters > .row > .col {\n margin-left: 0; } }\n .row.around {\n justify-content: space-around; }\n .row.between {\n justify-content: space-between; }\n .row.auto .col {\n flex-grow: 1; }\n\n.col-1 {\n width: 8.33333%; }\n\n.offset-1 {\n margin-left: 8.33333%; }\n\n.col-2 {\n width: 16.66667%; }\n\n.offset-2 {\n margin-left: 16.66667%; }\n\n.col-3 {\n width: 25%; }\n\n.offset-3 {\n margin-left: 25%; }\n\n.col-4 {\n width: 33.33333%; }\n\n.offset-4 {\n margin-left: 33.33333%; }\n\n.col-5 {\n width: 41.66667%; }\n\n.offset-5 {\n margin-left: 41.66667%; }\n\n.col-6 {\n width: 50%; }\n\n.offset-6 {\n margin-left: 50%; }\n\n.col-7 {\n width: 58.33333%; }\n\n.offset-7 {\n margin-left: 58.33333%; }\n\n.col-8 {\n width: 66.66667%; }\n\n.offset-8 {\n margin-left: 66.66667%; }\n\n.col-9 {\n width: 75%; }\n\n.offset-9 {\n margin-left: 75%; }\n\n.col-10 {\n width: 83.33333%; }\n\n.offset-10 {\n margin-left: 83.33333%; }\n\n.col-11 {\n width: 91.66667%; }\n\n.offset-11 {\n margin-left: 91.66667%; }\n\n.col-12 {\n width: 100%; }\n\n.offset-12 {\n margin-left: 100%; }\n\n.gutters > .col-1 {\n width: calc(8.33333% - 2%); }\n\n.gutters > .offset-1 {\n margin-left: calc(8.33333% + 2%) !important; }\n\n.gutters > .col-2 {\n width: calc(16.66667% - 2%); }\n\n.gutters > .offset-2 {\n margin-left: calc(16.66667% + 2%) !important; }\n\n.gutters > .col-3 {\n width: calc(25% - 2%); }\n\n.gutters > .offset-3 {\n margin-left: calc(25% + 2%) !important; }\n\n.gutters > .col-4 {\n width: calc(33.33333% - 2%); }\n\n.gutters > .offset-4 {\n margin-left: calc(33.33333% + 2%) !important; }\n\n.gutters > .col-5 {\n width: calc(41.66667% - 2%); }\n\n.gutters > .offset-5 {\n margin-left: calc(41.66667% + 2%) !important; }\n\n.gutters > .col-6 {\n width: calc(50% - 2%); }\n\n.gutters > .offset-6 {\n margin-left: calc(50% + 2%) !important; }\n\n.gutters > .col-7 {\n width: calc(58.33333% - 2%); }\n\n.gutters > .offset-7 {\n margin-left: calc(58.33333% + 2%) !important; }\n\n.gutters > .col-8 {\n width: calc(66.66667% - 2%); }\n\n.gutters > .offset-8 {\n margin-left: calc(66.66667% + 2%) !important; }\n\n.gutters > .col-9 {\n width: calc(75% - 2%); }\n\n.gutters > .offset-9 {\n margin-left: calc(75% + 2%) !important; }\n\n.gutters > .col-10 {\n width: calc(83.33333% - 2%); }\n\n.gutters > .offset-10 {\n margin-left: calc(83.33333% + 2%) !important; }\n\n.gutters > .col-11 {\n width: calc(91.66667% - 2%); }\n\n.gutters > .offset-11 {\n margin-left: calc(91.66667% + 2%) !important; }\n\n.gutters > .col-12 {\n width: calc(100% - 2%); }\n\n.gutters > .offset-12 {\n margin-left: calc(100% + 2%) !important; }\n\n@media (max-width: 1230px) {\n [class^='offset-'],\n [class*=' offset-'] {\n margin-left: 0; } }\n\n.first {\n order: -1; }\n\n.last {\n order: 1; }\n\n@media (max-width: 1230px) {\n .row .col {\n margin-left: 0;\n width: 100%; }\n .row.gutters .col {\n margin-bottom: 16px; }\n .first-sm {\n order: -1; }\n .last-sm {\n order: 1; } }\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n max-width: 100%;\n width: 100%;\n empty-cells: show;\n font-size: 15px;\n line-height: 24px; }\n\ntable caption {\n text-align: left;\n font-size: 14px;\n font-weight: 500;\n color: #676b72; }\n\nth {\n text-align: left;\n font-weight: 700;\n vertical-align: bottom; }\n\ntd {\n vertical-align: top; }\n\ntr.align-middle td,\ntd.align-middle {\n vertical-align: middle; }\n\nth,\ntd {\n padding: 1rem 1rem;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05); }\n th:first-child,\n td:first-child {\n padding-left: 0; }\n th:last-child,\n td:last-child {\n padding-right: 0; }\n\ntfoot th,\ntfoot td {\n color: rgba(49, 52, 57, 0.5); }\n\ntable.bordered td,\ntable.bordered th {\n border: 1px solid rgba(0, 0, 0, 0.05); }\n\ntable.striped tr:nth-child(odd) td {\n background: #f8f8f8; }\n\ntable.bordered td:first-child,\ntable.bordered th:first-child,\ntable.striped td:first-child,\ntable.striped th:first-child {\n padding-left: 1rem; }\n\ntable.bordered td:last-child,\ntable.bordered th:last-child,\ntable.striped td:last-child,\ntable.striped th:last-child {\n padding-right: 1rem; }\n\ntable.unstyled td,\ntable.unstyled th {\n border: none;\n padding: 0; }\n\nfieldset {\n font-family: inherit;\n border: 1px solid rgba(0, 0, 0, 0.1);\n padding: 2rem;\n margin-bottom: 2rem;\n margin-top: 2rem; }\n\nlegend {\n font-weight: bold;\n font-size: 12px;\n text-transform: uppercase;\n padding: 0 1rem;\n margin-left: -1rem;\n top: 2px;\n position: relative;\n line-height: 0; }\n\ninput,\ntextarea,\nselect {\n display: block;\n width: 100%;\n font-family: inherit;\n font-size: 15px;\n height: 40px;\n outline: none;\n vertical-align: middle;\n background-color: #fff;\n border: 1px solid #d4d4d4;\n border-radius: 3px;\n box-shadow: none;\n padding: 0 12px; }\n\ninput.small,\ntextarea.small,\nselect.small {\n height: 36px;\n font-size: 13px;\n padding: 0 12px;\n border-radius: 3px; }\n\ninput.big,\ntextarea.big,\nselect.big {\n height: 48px;\n font-size: 17px;\n padding: 0 12px;\n border-radius: 3px; }\n\ninput:focus,\ntextarea:focus,\nselect:focus {\n outline: none;\n background-color: #fff;\n border-color: #1c86f2;\n box-shadow: 0 0 1px #1c86f2 inset; }\n\ninput.error,\ntextarea.error,\nselect.error {\n background-color: rgba(240, 60, 105, 0.1);\n border: 1px solid #f583a0; }\n input.error:focus,\n textarea.error:focus,\n select.error:focus {\n border-color: #f03c69;\n box-shadow: 0 0 1px #f03c69 inset; }\n\ninput.success,\ntextarea.success,\nselect.success {\n background-color: rgba(53, 190, 177, 0.1);\n border: 1px solid #6ad5cb; }\n input.success:focus,\n textarea.success:focus,\n select.success:focus {\n border-color: #35beb1;\n box-shadow: 0 0 1px #35beb1 inset; }\n\ninput:disabled, input.disabled,\ntextarea:disabled,\ntextarea.disabled,\nselect:disabled,\nselect.disabled {\n resize: none;\n opacity: 0.6;\n cursor: default;\n font-style: italic;\n color: rgba(0, 0, 0, 0.5); }\n\nselect {\n -webkit-appearance: none;\n background-image: url('data:image/svg+xml;utf8,');\n background-repeat: no-repeat;\n background-position: right 1rem center; }\n\nselect[multiple] {\n background-image: none;\n height: auto;\n padding: .5rem .75rem; }\n\ntextarea {\n height: auto;\n padding: 8px 12px;\n line-height: 24px;\n vertical-align: top; }\n\ninput[type=\"file\"] {\n width: auto;\n border: none;\n padding: 0;\n height: auto;\n background: none;\n box-shadow: none;\n display: inline-block; }\n\ninput[type=\"search\"],\ninput.search {\n background-repeat: no-repeat;\n background-position: 8px 53%;\n background-image: url('data:image/svg+xml;utf8,');\n padding-left: 32px; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n display: inline-block;\n width: auto;\n height: auto;\n padding: 0; }\n\nlabel {\n display: block;\n color: #313439;\n margin-bottom: 4px;\n font-size: 15px; }\n label.checkbox,\n label .desc,\n label .success,\n label .error {\n text-transform: none;\n font-weight: normal; }\n label.checkbox {\n font-size: 16px;\n line-height: 24px;\n cursor: pointer;\n color: inherit; }\n label.checkbox input {\n margin-top: 0; }\n\n.form-checkboxes label.checkbox {\n display: inline-block;\n margin-right: 16px; }\n\n.req {\n position: relative;\n top: 1px;\n font-weight: bold;\n color: #f03c69;\n font-size: 110%; }\n\n.desc {\n color: rgba(49, 52, 57, 0.5);\n font-size: 12px;\n line-height: 20px; }\n\nspan.desc {\n margin-left: 4px; }\n\ndiv.desc {\n margin-top: 4px;\n margin-bottom: -8px; }\n\n.form-buttons button,\n.form-buttons .button {\n margin-right: 8px; }\n\nform,\n.form-item {\n margin-bottom: 2rem; }\n\n.form > .form-item:last-child {\n margin-bottom: 0; }\n\n.form .row:last-child .form-item {\n margin-bottom: 0; }\n\n.form span.success,\n.form span.error {\n font-size: 12px;\n line-height: 20px;\n margin-left: 4px; }\n\n.form-inline input,\n.form-inline textarea,\n.form-inline select {\n display: inline-block;\n width: auto; }\n\n.append,\n.prepend {\n display: flex; }\n .append input,\n .prepend input {\n flex: 1; }\n .append .button,\n .append span,\n .prepend .button,\n .prepend span {\n flex-shrink: 0; }\n .append span,\n .prepend span {\n display: flex;\n flex-direction: column;\n justify-content: center;\n font-weight: normal;\n border: 1px solid #d4d4d4;\n background-color: #f8f8f8;\n padding: 0 .875rem;\n color: rgba(0, 0, 0, 0.5);\n font-size: 12px;\n white-space: nowrap; }\n\n.prepend input {\n border-radius: 0 3px 3px 0; }\n\n.prepend .button {\n margin-right: -1px;\n border-radius: 3px 0 0 3px !important; }\n\n.prepend span {\n border-right: none;\n border-radius: 3px 0 0 3px; }\n\n.append input {\n border-radius: 3px 0 0 3px; }\n\n.append .button {\n margin-left: -1px;\n border-radius: 0 3px 3px 0 !important; }\n\n.append span {\n border-left: none;\n border-radius: 0 3px 3px 0; }\n\nbutton,\n.button {\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n font-size: 15px;\n color: #fff;\n background-color: #1c86f2;\n border-radius: 3px;\n min-height: 40px;\n padding: 8px 20px;\n font-weight: 500;\n text-decoration: none;\n cursor: pointer;\n display: inline-block;\n line-height: 20px;\n border: 1px solid transparent;\n vertical-align: middle;\n -webkit-appearance: none; }\n button i,\n .button i {\n position: relative;\n top: 1px;\n margin: 0 2px; }\n\ninput[type=\"submit\"] {\n width: auto; }\n\nbutton:hover,\n.button:hover {\n outline: none;\n text-decoration: none;\n color: #fff;\n background-color: #4ca0f5; }\n\n.button:disabled,\n.button.disabled {\n cursor: default;\n font-style: normal;\n color: rgba(255, 255, 255, 0.7);\n background-color: rgba(28, 134, 242, 0.7); }\n\n.button.small {\n font-size: 13px;\n min-height: 36px;\n padding: 6px 20px;\n border-radius: 3px; }\n\n.button.big {\n font-size: 17px;\n min-height: 48px;\n padding: 13px 24px;\n border-radius: 3px; }\n\n.button.large {\n font-size: 19px;\n min-height: 56px;\n padding: 20px 36px;\n border-radius: 3px; }\n\n.button.outline {\n background: none;\n border-width: 2px;\n border-color: #1c86f2;\n color: #1c86f2; }\n .button.outline:hover {\n background: none;\n color: rgba(28, 134, 242, 0.6);\n border-color: rgba(28, 134, 242, 0.5); }\n .button.outline:disabled, .button.outline.disabled {\n background: none;\n color: rgba(28, 134, 242, 0.7);\n border-color: rgba(28, 134, 242, 0.5); }\n\n.button.inverted {\n color: #000;\n background-color: #fff; }\n .button.inverted:hover {\n color: #000;\n background-color: white; }\n .button.inverted:disabled, .button.inverted.disabled {\n color: rgba(0, 0, 0, 0.7);\n background-color: rgba(255, 255, 255, 0.7); }\n .button.inverted.outline {\n background: none;\n color: #fff;\n border-color: #fff; }\n .button.inverted.outline:hover {\n color: rgba(255, 255, 255, 0.6);\n border-color: rgba(255, 255, 255, 0.5); }\n .button.inverted.outline:disabled, .button.inverted.outline.disabled {\n background: none;\n color: rgba(255, 255, 255, 0.7);\n border-color: rgba(255, 255, 255, 0.5); }\n .button.inverted:hover {\n opacity: .7; }\n\n.button.round {\n border-radius: 56px; }\n\n.button.raised {\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); }\n\n.button.upper {\n text-transform: uppercase;\n letter-spacing: .04em;\n font-size: 13px; }\n .button.upper.small {\n font-size: 11px; }\n .button.upper.big {\n font-size: 13px; }\n .button.upper.large {\n font-size: 15px; }\n\n.button.secondary {\n color: #fff;\n background-color: #313439; }\n .button.secondary:hover {\n color: #fff;\n background-color: #606670; }\n .button.secondary:disabled, .button.secondary.disabled {\n color: rgba(255, 255, 255, 0.7);\n background-color: rgba(49, 52, 57, 0.7); }\n .button.secondary.outline {\n background: none;\n color: #313439;\n border-color: #313439; }\n .button.secondary.outline:hover {\n color: rgba(49, 52, 57, 0.6);\n border-color: rgba(49, 52, 57, 0.5); }\n .button.secondary.outline:disabled, .button.secondary.outline.disabled {\n background: none;\n color: rgba(49, 52, 57, 0.7);\n border-color: rgba(49, 52, 57, 0.5); }\n\n.label {\n display: inline-block;\n font-size: 13px;\n background: #e0e1e1;\n line-height: 18px;\n padding: 0 10px;\n font-weight: 500;\n color: #313439;\n border: 1px solid transparent;\n vertical-align: middle;\n text-decoration: none;\n border-radius: 4px; }\n .label a,\n .label a:hover {\n color: inherit;\n text-decoration: none; }\n\n.label.big {\n font-size: 14px;\n line-height: 24px;\n padding: 0 12px; }\n\n.label.upper {\n text-transform: uppercase;\n font-size: 11px; }\n\n.label.outline {\n background: none;\n border-color: #bdbdbd; }\n\n.label.badge {\n text-align: center;\n border-radius: 64px;\n padding: 0 6px; }\n .label.badge.big {\n padding: 0 8px; }\n\n.label.tag {\n padding: 0;\n background: none;\n border: none;\n text-transform: uppercase;\n font-size: 11px; }\n .label.tag.big {\n font-size: 13px; }\n\n.label.success {\n background: #35beb1;\n color: #fff; }\n .label.success.tag, .label.success.outline {\n background: none;\n border-color: #35beb1;\n color: #35beb1; }\n\n.label.error {\n background: #f03c69;\n color: #fff; }\n .label.error.tag, .label.error.outline {\n background: none;\n border-color: #f03c69;\n color: #f03c69; }\n\n.label.warning {\n background: #f7ba45;\n color: #0d0d0e; }\n .label.warning.tag, .label.warning.outline {\n background: none;\n border-color: #f7ba45;\n color: #f7ba45; }\n\n.label.focus {\n background: #1c86f2;\n color: #fff; }\n .label.focus.tag, .label.focus.outline {\n background: none;\n border-color: #1c86f2;\n color: #1c86f2; }\n\n.label.black {\n background: #0d0d0e;\n color: #fff; }\n .label.black.tag, .label.black.outline {\n background: none;\n border-color: #0d0d0e;\n color: #0d0d0e; }\n\n.label.inverted {\n background: #fff;\n color: #0d0d0e; }\n .label.inverted.tag, .label.inverted.outline {\n background: none;\n border-color: #fff;\n color: #fff; }\n\n.breadcrumbs {\n font-size: 14px;\n margin-bottom: 24px; }\n .breadcrumbs ul {\n display: flex;\n align-items: center; }\n .breadcrumbs.push-center ul {\n justify-content: center; }\n .breadcrumbs span,\n .breadcrumbs a {\n font-style: normal;\n padding: 0 10px;\n display: inline-block;\n white-space: nowrap; }\n .breadcrumbs li:after {\n display: inline-block;\n content: '/';\n color: rgba(0, 0, 0, 0.3); }\n .breadcrumbs li:last-child:after {\n display: none; }\n .breadcrumbs li:first-child span,\n .breadcrumbs li:first-child a {\n padding-left: 0; }\n .breadcrumbs li.active a {\n color: #313439;\n text-decoration: none;\n cursor: text; }\n\n.pagination {\n margin: 24px 0;\n font-size: 14px; }\n .pagination ul {\n display: flex;\n margin: 0; }\n .pagination.align-center ul {\n justify-content: center; }\n .pagination span,\n .pagination a {\n border-radius: 3px;\n display: inline-block;\n padding: 8px 12px;\n line-height: 1;\n white-space: nowrap;\n border: 1px solid transparent; }\n .pagination a {\n text-decoration: none;\n color: #313439; }\n .pagination a:hover {\n color: rgba(0, 0, 0, 0.5);\n border-color: #e0e1e1; }\n .pagination span,\n .pagination li.active a {\n color: rgba(0, 0, 0, 0.5);\n border-color: #e0e1e1;\n cursor: text; }\n .pagination.upper {\n font-size: 12px; }\n\n.pager span {\n line-height: 24px; }\n\n.pager span,\n.pager a {\n padding-left: 16px;\n padding-right: 16px;\n border-radius: 64px;\n border-color: rgba(0, 0, 0, 0.1); }\n\n.pager li {\n flex-basis: 50%; }\n\n.pager li.next {\n text-align: right; }\n\n.pager.align-center li {\n flex-basis: auto;\n margin-left: 4px;\n margin-right: 4px; }\n\n.pager.flat span,\n.pager.flat a {\n border: none;\n display: block;\n padding: 0; }\n\n.pager.flat a {\n font-weight: bold; }\n .pager.flat a:hover {\n background: none;\n text-decoration: underline; }\n\n@media (max-width: 1230px) {\n .pager.flat ul {\n flex-direction: column; }\n .pager.flat li {\n flex-basis: 100%;\n margin-bottom: 8px;\n text-align: left; } }\n\n@font-face {\n font-family: 'Kube';\n src: url(\"data:application/x-font-ttf;charset=utf-8;base64,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\") format(\"truetype\");\n font-weight: normal;\n font-style: normal; }\n\n[class^=\"kube-\"], [class*=\" kube-\"], .close, .caret {\n /* use !important to prevent issues with browser extensions that change fonts */\n font-family: 'Kube' !important;\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n line-height: 1;\n /* Better Font Rendering =========== */\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale; }\n\n.kube-calendar:before {\n content: \"\\e900\"; }\n\n.caret.down:before,\n.kube-caret-down:before {\n content: \"\\e901\"; }\n\n.caret.left:before,\n.kube-caret-left:before {\n content: \"\\e902\"; }\n\n.caret.right:before,\n.kube-caret-right:before {\n content: \"\\e903\"; }\n\n.caret.up:before,\n.kube-caret-up:before {\n content: \"\\e904\"; }\n\n.close:before,\n.kube-close:before {\n content: \"\\e905\"; }\n\n.kube-menu:before {\n content: \"\\e906\"; }\n\n.kube-search:before {\n content: \"\\e907\"; }\n\n.gutters .column.push-left,\n.push-left {\n margin-right: auto; }\n\n.gutters .column.push-right,\n.push-right {\n margin-left: auto; }\n\n.gutters .column.push-center,\n.push-center {\n margin-left: auto;\n margin-right: auto; }\n\n.gutters .column.push-middle,\n.push-middle {\n margin-top: auto;\n margin-bottom: auto; }\n\n.push-bottom {\n margin-top: auto; }\n\n@media (max-width: 1230px) {\n .gutters .column.push-left-sm,\n .push-left-sm {\n margin-left: 0; }\n .gutters .column.push-center-sm,\n .push-center-sm {\n margin-left: auto;\n margin-right: auto; }\n .push-top-sm {\n margin-top: 0; } }\n\n.align-middle {\n align-items: center; }\n\n.align-right {\n justify-content: flex-end; }\n\n.align-center {\n justify-content: center; }\n\n@media (max-width: 1230px) {\n .align-left-sm {\n justify-content: flex-start; } }\n\n.float-right {\n float: right; }\n\n.float-left {\n float: left; }\n\n@media (max-width: 1230px) {\n .float-right {\n float: none; }\n .float-left {\n float: none; } }\n\n.fixed {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 100;\n width: 100%; }\n\n.w5 {\n width: 5%; }\n\n.w10 {\n width: 10%; }\n\n.w15 {\n width: 15%; }\n\n.w20 {\n width: 20%; }\n\n.w25 {\n width: 25%; }\n\n.w30 {\n width: 30%; }\n\n.w35 {\n width: 35%; }\n\n.w40 {\n width: 40%; }\n\n.w45 {\n width: 45%; }\n\n.w50 {\n width: 50%; }\n\n.w55 {\n width: 55%; }\n\n.w60 {\n width: 60%; }\n\n.w65 {\n width: 65%; }\n\n.w70 {\n width: 70%; }\n\n.w75 {\n width: 75%; }\n\n.w80 {\n width: 80%; }\n\n.w85 {\n width: 85%; }\n\n.w90 {\n width: 90%; }\n\n.w95 {\n width: 95%; }\n\n.w100 {\n width: 100%; }\n\n.w-auto {\n width: auto; }\n\n.w-small {\n width: 480px; }\n\n.w-medium {\n width: 600px; }\n\n.w-big {\n width: 740px; }\n\n.w-large {\n width: 840px; }\n\n@media (max-width: 1230px) {\n .w-auto-sm {\n width: auto; }\n .w100-sm,\n .w-small,\n .w-medium,\n .w-big,\n .w-large {\n width: 100%; } }\n\n.max-w5 {\n max-width: 5%; }\n\n.max-w10 {\n max-width: 10%; }\n\n.max-w15 {\n max-width: 15%; }\n\n.max-w20 {\n max-width: 20%; }\n\n.max-w25 {\n max-width: 25%; }\n\n.max-w30 {\n max-width: 30%; }\n\n.max-w35 {\n max-width: 35%; }\n\n.max-w40 {\n max-width: 40%; }\n\n.max-w45 {\n max-width: 45%; }\n\n.max-w50 {\n max-width: 50%; }\n\n.max-w55 {\n max-width: 55%; }\n\n.max-w60 {\n max-width: 60%; }\n\n.max-w65 {\n max-width: 65%; }\n\n.max-w70 {\n max-width: 70%; }\n\n.max-w75 {\n max-width: 75%; }\n\n.max-w80 {\n max-width: 80%; }\n\n.max-w85 {\n max-width: 85%; }\n\n.max-w90 {\n max-width: 90%; }\n\n.max-w95 {\n max-width: 95%; }\n\n.max-w100 {\n max-width: 100%; }\n\n.max-w-small {\n max-width: 480px; }\n\n.max-w-medium {\n max-width: 600px; }\n\n.max-w-big {\n max-width: 740px; }\n\n.max-w-large {\n max-width: 840px; }\n\n@media (max-width: 1230px) {\n .max-w-auto-sm,\n .max-w-small,\n .max-w-medium,\n .max-w-big,\n .max-w-large {\n max-width: auto; } }\n\n.min-w5 {\n min-width: 5%; }\n\n.min-w10 {\n min-width: 10%; }\n\n.min-w15 {\n min-width: 15%; }\n\n.min-w20 {\n min-width: 20%; }\n\n.min-w25 {\n min-width: 25%; }\n\n.min-w30 {\n min-width: 30%; }\n\n.min-w35 {\n min-width: 35%; }\n\n.min-w40 {\n min-width: 40%; }\n\n.min-w45 {\n min-width: 45%; }\n\n.min-w50 {\n min-width: 50%; }\n\n.min-w55 {\n min-width: 55%; }\n\n.min-w60 {\n min-width: 60%; }\n\n.min-w65 {\n min-width: 65%; }\n\n.min-w70 {\n min-width: 70%; }\n\n.min-w75 {\n min-width: 75%; }\n\n.min-w80 {\n min-width: 80%; }\n\n.min-w85 {\n min-width: 85%; }\n\n.min-w90 {\n min-width: 90%; }\n\n.min-w95 {\n min-width: 95%; }\n\n.min-w100 {\n min-width: 100%; }\n\n.h25 {\n height: 25%; }\n\n.h50 {\n height: 50%; }\n\n.h100 {\n height: 100%; }\n\n.group:after {\n content: '';\n display: table;\n clear: both; }\n\n.flex {\n display: flex; }\n\n@media (max-width: 1230px) {\n .flex-column-sm {\n flex-direction: column; }\n .flex-w100-sm {\n flex: 0 0 100%; } }\n @media (max-width: 1230px) and (max-width: 1230px) {\n .flex-w100-sm {\n flex: 0 0 100% !important; } }\n\n.invisible {\n visibility: hidden; }\n\n.visible {\n visibility: visible; }\n\n.display-block {\n display: block; }\n\n.hide {\n display: none !important; }\n\n@media (max-width: 1230px) {\n .hide-sm {\n display: none !important; } }\n\n@media (min-width: 1230px) {\n .show-sm {\n display: none !important; } }\n\n@media print {\n .hide-print {\n display: none !important; }\n .show-print {\n display: block !important; } }\n\n.no-scroll {\n overflow: hidden;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100% !important; }\n\n.scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll; }\n\n.video-container {\n height: 0;\n padding-bottom: 56.25%;\n position: relative;\n margin-bottom: 16px; }\n .video-container iframe,\n .video-container object,\n .video-container embed {\n position: absolute;\n top: 0;\n left: 0;\n width: 100% !important;\n height: 100% !important; }\n\n.close {\n display: inline-block;\n min-height: 16px;\n min-width: 16px;\n line-height: 16px;\n vertical-align: middle;\n text-align: center;\n font-size: 12px;\n opacity: .6; }\n .close:hover {\n opacity: 1; }\n .close.small {\n font-size: 8px; }\n .close.big {\n font-size: 18px; }\n .close.white {\n color: #fff; }\n\n.caret {\n display: inline-block; }\n\n.button .caret {\n margin-right: -8px; }\n\n.overlay {\n position: fixed;\n z-index: 200;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(255, 255, 255, 0.95); }\n .overlay > .close {\n position: fixed;\n top: 1rem;\n right: 1rem; }\n\n@media print {\n * {\n background: transparent !important;\n color: black !important;\n box-shadow: none !important;\n text-shadow: none !important; }\n a,\n a:visited {\n text-decoration: underline; }\n pre, blockquote {\n border: 1px solid #999;\n page-break-inside: avoid; }\n p, h2, h3 {\n orphans: 3;\n widows: 3; }\n thead {\n display: table-header-group; }\n tr, img {\n page-break-inside: avoid; }\n img {\n max-width: 100% !important; }\n h2, h3, h4 {\n page-break-after: avoid; }\n @page {\n margin: 0.5cm; } }\n\n@keyframes slideUp {\n to {\n height: 0;\n padding-top: 0;\n padding-bottom: 0; } }\n\n@keyframes slideDown {\n from {\n height: 0;\n padding-top: 0;\n padding-bottom: 0; } }\n\n@keyframes fadeIn {\n from {\n opacity: 0; }\n to {\n opacity: 1; } }\n\n@keyframes fadeOut {\n from {\n opacity: 1; }\n to {\n opacity: 0; } }\n\n@keyframes flipIn {\n from {\n opacity: 0;\n transform: scaleY(0); }\n to {\n opacity: 1;\n transform: scaleY(1); } }\n\n@keyframes flipOut {\n from {\n opacity: 1;\n transform: scaleY(1); }\n to {\n opacity: 0;\n transform: scaleY(0); } }\n\n@keyframes zoomIn {\n from {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3); }\n 50% {\n opacity: 1; } }\n\n@keyframes zoomOut {\n from {\n opacity: 1; }\n 50% {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3); }\n to {\n opacity: 0; } }\n\n@keyframes slideInRight {\n from {\n transform: translate3d(100%, 0, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideInLeft {\n from {\n transform: translate3d(-100%, 0, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideInDown {\n from {\n transform: translate3d(0, -100%, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideOutLeft {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(-100%, 0, 0); } }\n\n@keyframes slideOutRight {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(100%, 0, 0); } }\n\n@keyframes slideOutUp {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(0, -100%, 0); } }\n\n@keyframes rotate {\n from {\n transform: rotate(0deg); }\n to {\n transform: rotate(360deg); } }\n\n@keyframes pulse {\n from {\n transform: scale3d(1, 1, 1); }\n 50% {\n transform: scale3d(1.03, 1.03, 1.03); }\n to {\n transform: scale3d(1, 1, 1); } }\n\n@keyframes shake {\n 15% {\n transform: translateX(0.5rem); }\n 30% {\n transform: translateX(-0.4rem); }\n 45% {\n transform: translateX(0.3rem); }\n 60% {\n transform: translateX(-0.2rem); }\n 75% {\n transform: translateX(0.1rem); }\n 90% {\n transform: translateX(0); }\n 90% {\n transform: translateX(0); } }\n\n.fadeIn {\n animation: fadeIn 250ms; }\n\n.fadeOut {\n animation: fadeOut 250ms; }\n\n.zoomIn {\n animation: zoomIn 200ms; }\n\n.zoomOut {\n animation: zoomOut 500ms; }\n\n.slideInRight {\n animation: slideInRight 500ms; }\n\n.slideInLeft {\n animation: slideInLeft 500ms; }\n\n.slideInDown {\n animation: slideInDown 500ms; }\n\n.slideOutLeft {\n animation: slideOutLeft 500ms; }\n\n.slideOutRight {\n animation: slideOutRight 500ms; }\n\n.slideOutUp {\n animation: slideOutUp 500ms; }\n\n.slideUp {\n overflow: hidden;\n animation: slideUp 200ms ease-in-out; }\n\n.slideDown {\n overflow: hidden;\n animation: slideDown 80ms ease-in-out; }\n\n.flipIn {\n animation: flipIn 250ms cubic-bezier(0.5, -0.5, 0.5, 1.5); }\n\n.flipOut {\n animation: flipOut 500ms cubic-bezier(0.5, -0.5, 0.5, 1.5); }\n\n.rotate {\n animation: rotate 500ms; }\n\n.pulse {\n animation: pulse 250ms 2; }\n\n.shake {\n animation: shake 500ms; }\n\n.dropdown {\n position: absolute;\n z-index: 100;\n top: 0;\n right: 0;\n width: 280px;\n color: #000;\n font-size: 15px;\n background: #fff;\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);\n border-radius: 3px;\n max-height: 300px;\n margin: 0;\n padding: 0;\n overflow: hidden; }\n .dropdown.dropdown-mobile {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n max-height: none;\n border: none; }\n .dropdown .close {\n margin: 20px auto; }\n .dropdown.open {\n overflow: auto; }\n .dropdown ul {\n list-style: none;\n margin: 0; }\n .dropdown ul li {\n border-bottom: 1px solid rgba(0, 0, 0, 0.07); }\n .dropdown ul li:last-child {\n border-bottom: none; }\n .dropdown ul a {\n display: block;\n padding: 12px;\n text-decoration: none;\n color: #000; }\n .dropdown ul a:hover {\n background: rgba(0, 0, 0, 0.05); }\n\n.message {\n font-family: Consolas, Monaco, \"Courier New\", monospace;\n font-size: 14px;\n line-height: 20px;\n background: #e0e1e1;\n color: #313439;\n padding: 1rem;\n padding-right: 2.5em;\n padding-bottom: .75rem;\n margin-bottom: 24px;\n position: relative; }\n .message a {\n color: inherit; }\n .message h2,\n .message h3,\n .message h4,\n .message h5,\n .message h6 {\n margin-bottom: 0; }\n .message .close {\n position: absolute;\n right: 1rem;\n top: 1.1rem; }\n\n.message.error {\n background: #f03c69;\n color: #fff; }\n\n.message.success {\n background: #35beb1;\n color: #fff; }\n\n.message.warning {\n background: #f7ba45; }\n\n.message.focus {\n background: #1c86f2;\n color: #fff; }\n\n.message.black {\n background: #0d0d0e;\n color: #fff; }\n\n.message.inverted {\n background: #fff; }\n\n.modal-box {\n position: fixed;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n overflow-x: hidden;\n overflow-y: auto;\n z-index: 200; }\n\n.modal {\n position: relative;\n margin: auto;\n margin-top: 16px;\n padding: 0;\n background: #fff;\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);\n border-radius: 8px;\n color: #000; }\n @media (max-width: 1230px) {\n .modal input,\n .modal textarea {\n font-size: 16px; } }\n .modal .close {\n position: absolute;\n top: 18px;\n right: 16px;\n opacity: .3; }\n .modal .close:hover {\n opacity: 1; }\n\n.modal-header {\n padding: 24px 32px;\n font-size: 18px;\n font-weight: bold;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05); }\n .modal-header:empty {\n display: none; }\n\n.modal-body {\n padding: 36px 56px; }\n\n@media (max-width: 1230px) {\n .modal-header,\n .modal-body {\n padding: 24px; } }\n\n.offcanvas {\n background: #fff;\n position: fixed;\n padding: 24px;\n height: 100%;\n top: 0;\n left: 0;\n z-index: 300;\n overflow-y: scroll; }\n\n.offcanvas .close {\n position: absolute;\n top: 8px;\n right: 8px; }\n\n.offcanvas-left {\n border-right: 1px solid rgba(0, 0, 0, 0.1); }\n\n.offcanvas-right {\n left: auto;\n right: 0;\n border-left: 1px solid rgba(0, 0, 0, 0.1); }\n\n.offcanvas-push-body {\n position: relative; }\n\n.tabs {\n margin-bottom: 24px;\n font-size: 14px; }\n .tabs li em,\n .tabs li.active a {\n color: #313439;\n border: 1px solid rgba(0, 0, 0, 0.1);\n cursor: default;\n text-decoration: none;\n background: none; }\n .tabs em,\n .tabs a {\n position: relative;\n top: 1px;\n font-style: normal;\n display: block;\n padding: .5rem 1rem;\n border: 1px solid transparent;\n color: rgba(0, 0, 0, 0.5);\n text-decoration: none; }\n .tabs a:hover {\n -moz-transition: all linear 0.2s;\n transition: all linear 0.2s;\n color: #313439;\n text-decoration: underline;\n background-color: #e0e1e1; }\n\n@media (min-width: 1230px) {\n .tabs ul {\n display: flex;\n margin-top: -1px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1); }\n .tabs li em,\n .tabs li.active a {\n border-bottom: 1px solid #fff; } }\n",".mg-active-datapoint {\n fill: black;\n font-size: 0.9rem;\n font-weight: 400;\n opacity: 0.8;\n}\n\n.mg-area1-color {\n fill: #0000ff;\n}\n\n.mg-area2-color {\n fill: #05b378;\n}\n\n.mg-area3-color {\n fill: #db4437;\n}\n\n.mg-area4-color {\n fill: #f8b128;\n}\n\n.mg-area5-color {\n fill: #5c5c5c;\n}\n\ntext.mg-barplot-group-label {\n font-weight:900;\n}\n\n.mg-barplot rect.mg-bar {\n shape-rendering: auto;\n}\n\n.mg-barplot rect.mg-bar.default-bar {\n fill: #b6b6fc;\n}\n\n.mg-barplot rect.mg-bar.default-active {\n fill: #9e9efc;\n}\n\n.mg-barplot .mg-bar-prediction {\n fill: #5b5b5b;\n}\n\n.mg-barplot .mg-bar-baseline {\n stroke: #5b5b5b;\n stroke-width: 2;\n}\n\n.mg-bar-target-element {\n font-size:11px;\n padding-left:5px;\n padding-right:5px;\n font-weight:300;\n}\n\n.mg-baselines line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-baselines text {\n fill: black;\n font-size: 0.9rem;\n opacity: 0.6;\n stroke: none;\n}\n\n.mg-baselines-small text {\n font-size: 0.6rem;\n}\n\n.mg-category-guides line {\n stroke: #b3b2b2;\n}\n\n.mg-header {\n cursor: default;\n font-size: 1.2rem;\n}\n\n.mg-header .mg-chart-description {\n fill: #ccc;\n font-family: FontAwesome;\n font-size: 1.2rem;\n}\n\n.mg-header .mg-warning {\n fill: #ccc;\n font-family: FontAwesome;\n font-size: 1.2rem;\n}\n\n.mg-points circle {\n opacity: 0.65;\n}\n\n.mg-popover {\n font-size: 0.95rem;\n}\n\n.mg-popover-content {\n cursor: auto;\n line-height: 17px;\n}\n\n.mg-data-table {\n margin-top: 30px;\n}\n\n.mg-data-table thead tr th {\n border-bottom: 1px solid darkgray;\n cursor: default;\n font-size: 1.1rem;\n font-weight: normal;\n padding: 5px 5px 8px 5px;\n text-align: right;\n}\n\n.mg-data-table thead tr th .fa {\n color: #ccc;\n padding-left: 4px;\n}\n\n.mg-data-table thead tr th .popover {\n font-size: 1rem;\n font-weight: normal;\n}\n\n.mg-data-table .secondary-title {\n color: darkgray;\n}\n\n.mg-data-table tbody tr td {\n margin: 2px;\n padding: 5px;\n vertical-align: top;\n}\n\n.mg-data-table tbody tr td.table-text {\n opacity: 0.8;\n padding-left: 30px;\n}\n\n.mg-y-axis line.mg-extended-yax-ticks {\n opacity: 0.4;\n}\n\n.mg-x-axis line.mg-extended-xax-ticks {\n opacity: 0.4;\n}\n\n.mg-histogram .axis path,\n.mg-histogram .axis line {\n fill: none;\n opacity: 0.7;\n shape-rendering: auto;\n stroke: #ccc;\n}\n\ntspan.hist-symbol {\n fill: #9e9efc;\n}\n\n.mg-histogram .mg-bar rect {\n fill: #b6b6fc;\n shape-rendering: auto;\n}\n\n.mg-histogram .mg-bar rect.active {\n fill: #9e9efc;\n}\n\n.mg-least-squares-line {\n stroke: red;\n stroke-width: 1px;\n}\n\n.mg-lowess-line {\n fill: none;\n stroke: red;\n}\n\n.mg-line1-color {\n stroke: #4040e8;\n}\n\n.mg-hover-line1-color {\n fill: #4040e8;\n}\n\n.mg-line2-color {\n stroke: #05b378;\n}\n\n.mg-hover-line2-color {\n fill: #05b378;\n}\n\n.mg-line3-color {\n stroke: #db4437;\n}\n\n.mg-hover-line3-color {\n fill: #db4437;\n}\n\n.mg-line4-color {\n stroke: #f8b128;\n}\n\n.mg-hover-line4-color {\n fill: #f8b128;\n}\n\n.mg-line5-color {\n stroke: #5c5c5c;\n}\n\n.mg-hover-line5-color {\n fill: #5c5c5c;\n}\n\n.mg-line-legend text {\n font-size: 0.9rem;\n font-weight: 300;\n stroke: none;\n}\n\n.mg-line1-legend-color {\n color: #4040e8;\n fill: #4040e8;\n}\n\n.mg-line2-legend-color {\n color: #05b378;\n fill: #05b378;\n}\n\n.mg-line3-legend-color {\n color: #db4437;\n fill: #db4437;\n}\n\n.mg-line4-legend-color {\n color: #f8b128;\n fill: #f8b128;\n}\n\n.mg-line5-legend-color {\n color: #5c5c5c;\n fill: #5c5c5c;\n}\n\n.mg-main-area-solid svg .mg-main-area {\n fill: #ccccff;\n opacity: 1;\n}\n\n.mg-markers line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-markers text {\n fill: black;\n font-size: 0.8rem;\n opacity: 0.6;\n}\n\n.mg-missing-text {\n opacity: 0.9;\n}\n\n.mg-missing-background {\n stroke: blue;\n fill: none;\n stroke-dasharray: 10,5;\n stroke-opacity: 0.05;\n stroke-width: 2;\n}\n\n.mg-missing .mg-main-line {\n opacity: 0.1;\n}\n\n.mg-missing .mg-main-area {\n opacity: 0.03;\n}\n\npath.mg-main-area {\n opacity: 0.2;\n stroke: none;\n}\n\npath.mg-confidence-band {\n fill: #ccc;\n opacity: 0.4;\n stroke: none;\n}\n\npath.mg-main-line {\n fill: none;\n opacity: 0.8;\n stroke-width: 1.1px;\n}\n\n.mg-points circle {\n fill-opacity: 0.4;\n stroke-opacity: 1;\n}\n\ncircle.mg-points-mono {\n fill: #0000ff;\n stroke: #0000ff;\n}\n\ntspan.mg-points-mono {\n fill: #0000ff;\n stroke: #0000ff;\n}\n\n/* a selected point in a scatterplot */\n.mg-points circle.selected {\n fill-opacity: 1;\n stroke-opacity: 1;\n}\n\n.mg-voronoi path {\n fill: none;\n pointer-events: all;\n stroke: none;\n stroke-opacity: 0.1;\n}\n\n.mg-x-rug-mono,\n.mg-y-rug-mono {\n stroke: black;\n}\n\n.mg-x-axis line,\n.mg-y-axis line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-x-axis text,\n.mg-y-axis text,\n.mg-histogram .axis text {\n fill: black;\n font-size: 0.9rem;\n opacity: 0.6;\n}\n\n.mg-x-axis .label,\n.mg-y-axis .label,\n.mg-axis .label {\n font-size: 0.8rem;\n text-transform: uppercase;\n font-weight: 400;\n}\n\n.mg-x-axis-small text,\n.mg-y-axis-small text,\n.mg-active-datapoint-small {\n font-size: 0.6rem;\n}\n\n.mg-x-axis-small .label,\n.mg-y-axis-small .label {\n font-size: 0.65rem;\n}\n\n.mg-european-hours {\n}\n\n.mg-year-marker text {\n fill: black;\n font-size: 0.7rem;\n opacity: 0.6;\n}\n\n.mg-year-marker line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-year-marker-small text {\n font-size: 0.6rem;\n}\n","body {\n background: #eaeaea;\n padding-bottom: 216px;\n}\nheader {\n width: 100%;\n min-height: 216px;\n padding: 48px;\n margin-bottom: 24px;\n background: #fafafa;\n}\nheader .search {\n margin-top: 48px;\n}\n#logo {\n display: block;\n margin: 0 auto;\n max-width: 400px;\n}\n.content {\n margin: auto;\n width: 95%;\n max-width: 1080px;\n}\nsection#landing h1 {\n font-size: 25px;\n}\nsection {\n padding: 36px;\n float: right;\n margin: 0 0 24px 0;\n background: #fafafa;\n box-shadow: 5px 5px 20px 2px rgba(0,0,0,0.03);\n}\nsection h2 {\n font-size: 21px;\n line-height: 32px;\n color: #7d7d7d;\n margin-bottom: 50px;\n}\nsection small {\n display: block;\n width: 100%;\n margin-top: 30px;\n padding-right: 20px;\n text-align: right;\n color: #aaa;\n}\nsection small a {\n color: #aaf;\n text-decoration: none;\n}\nsection.unmaterialized {\n box-shadow: 0 0 0 0;\n background: #f0f0f0;\n padding: 24px 24px 48px 24px;\n border-right: 1px solid #dedede;\n border-bottom: 1px solid #dedede;\n}\n#controls {\n padding: 36px;\n background: #f0f0f0;\n border-right: 1px solid #dedede;\n border-bottom: 1px solid #dedede;\n margin-bottom: 20px;\n}\n.fixed {\n position: relative;\n}\n@media (min-width: 1230px) {\n #cards {\n padding-bottom: 100px;\n position: relative;\n z-index: 9;\n }\n section {\n z-index: 10;\n width: calc(100% - 345px);\n float: right;\n }\n #landing {\n width: 100%;\n }\n .fixed-container {\n z-index: 0;\n position: absolute;\n top: 245px;\n left: calc(50% - (540px));\n }\n .fixed {\n position: fixed !important;\n top: 25px;\n }\n #controls {\n width: 325px;\n float: left;\n }\n}\ncite.metric {\n display: block;\n width: 100%;\n height: 0;\n float: right;\n text-align: center;\n font-size: 12px;\n color: #ccc;\n font-style: normal;\n padding-left: 50px;\n margin: 200px 0px -185px 0;\n}\ncite.metric a {\n color: #aaa;\n text-decoration: underline;\n}\n.linechart {\n height: 210px;\n margin-bottom: 30px;\n}\n.mg-line-legend {\n display: none;\n}\n.legend {\n position: relative;\n margin: 0;\n padding: 0;\n height: 0;\n top: 31px;\n left: 55px;\n fontSize: 14px;\n fontWeight: bold;\n opacity: 0.8;\n}\n.mg-baselines {\n opacity: 0.5;\n}\n.loader {\n width: 100%;\n text-align: center;\n line-height: 10;\n animation: outro 1s, loader 1.5s infinite;\n}\n.intro {\n animation: intro 2s;\n}\n@media print {\n body {\n zoom: 75%;\n }\n section {\n min-width: 800px;\n min-height: 10.5in;\n page-break-after: always;\n }\n section.unmaterialized {\n display: none;\n }\n}\n.hidden,\n.hidden > *,\n.hidden > small {\n display: none !important;\n}\n@-moz-keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-webkit-keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-o-keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-moz-keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-webkit-keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-o-keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-moz-keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n@-webkit-keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n@-o-keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n@keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n"]}
\ No newline at end of file
diff --git a/frontend/public/static/app.js b/frontend/public/static/app.js
index 09439e76e5..f358082114 100644
--- a/frontend/public/static/app.js
+++ b/frontend/public/static/app.js
@@ -153,30 +153,30 @@ var __makeRelativeRequire = function(require, mappings, pref) {
return require(name);
}
};
-require.register("GHData.js", function(exports, require, module) {
+require.register("Augur.js", function(exports, require, module) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
-exports.default = GHData;
+exports.default = Augur;
var queryString = require('query-string');
-function GHData() {
+function Augur() {
window.jQuery = require('jquery');
window.Vue = require('vue');
window.Vuex = require('vuex');
- var GHDataAPI = require('GHDataAPI').default;
- window.GHDataAPI = new GHDataAPI();
- window.GHDataRepos = {};
- window.GHDataStats = require('GHDataStats').default;
+ var AugurAPI = require('AugurAPI').default;
+ window.AugurAPI = new AugurAPI();
+ window.AugurRepos = {};
+ window.AugurStats = require('AugurStats').default;
window.$ = window.jQuery;
- var GHDataApp = require('./components/GHDataApp');
+ var AugurApp = require('./components/AugurApp');
Vue.use(Vuex);
- window.ghdata = new Vuex.Store({
+ window.augur = new Vuex.Store({
state: {
baseRepo: null,
comparedRepos: [],
@@ -188,25 +188,25 @@ function GHData() {
},
mutations: {
setBaseRepo: function setBaseRepo(state, payload) {
- var repo = window.GHDataAPI.Repo(payload.url);
- if (!window.GHDataRepos[repo.toString()]) {
- window.GHDataRepos[repo.toString()] = repo;
+ var repo = window.AugurAPI.Repo(payload.url);
+ if (!window.AugurRepos[repo.toString()]) {
+ window.AugurRepos[repo.toString()] = repo;
}
state.baseRepo = repo.toString();
if (!payload.keepCompared) {
state.comparedRepos = [];
}
- var title = repo.owner + '/' + repo.name + '- GHData';
+ var title = repo.owner + '/' + repo.name + '- Augur';
var queryString = '?repo=' + repo.owner + '+' + repo.name;
window.history.pushState(null, title, queryString);
},
addComparedRepo: function addComparedRepo(state, payload) {
- var repo = window.GHDataAPI.Repo(payload.url);
- if (!window.GHDataRepos[repo.toString()]) {
- window.GHDataRepos[repo.toString()] = repo;
+ var repo = window.AugurAPI.Repo(payload.url);
+ if (!window.AugurRepos[repo.toString()]) {
+ window.AugurRepos[repo.toString()] = repo;
}
state.comparedRepos.push(repo.toString());
- var title = 'GHData';
+ var title = 'Augur';
var queryString = window.location.search + '&comparedTo[]=' + repo.owner + '+' + repo.name;
window.history.pushState(null, title, queryString);
},
@@ -234,29 +234,29 @@ function GHData() {
compare: "each",
byDate: false
};
- window.history.pushState(null, 'GHData', '/');
+ window.history.pushState(null, 'Augur', '/');
} // end reset
} // end mutations
});
- GHDataApp.store = window.ghdata;
- window.GHDataApp = new Vue(GHDataApp).$mount('#app');
+ AugurApp.store = window.augur;
+ window.AugurApp = new Vue(AugurApp).$mount('#app');
// Load state from query string
var parsed = queryString.parse(location.search, { arrayFormat: 'bracket' });
if (parsed.repo) {
- window.GHDataApp.$store.commit('setBaseRepo', { url: parsed.repo.replace(' ', '/') });
+ window.AugurApp.$store.commit('setBaseRepo', { url: parsed.repo.replace(' ', '/') });
}
if (parsed.comparedTo) {
parsed.comparedTo.forEach(function (repo) {
- window.GHDataApp.$store.commit('addComparedRepo', { url: repo.replace(' ', '/') });
+ window.AugurApp.$store.commit('addComparedRepo', { url: repo.replace(' ', '/') });
});
}
}
});
-;require.register("GHDataAPI.js", function(exports, require, module) {
+;require.register("AugurAPI.js", function(exports, require, module) {
'use strict';
Object.defineProperty(exports, "__esModule", {
@@ -269,16 +269,16 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
var $ = require('jquery');
-var GHDataAPI = function () {
- function GHDataAPI(hostURL, version) {
- _classCallCheck(this, GHDataAPI);
+var AugurAPI = function () {
+ function AugurAPI(hostURL, version) {
+ _classCallCheck(this, AugurAPI);
this._version = version || 'unstable';
this._host = hostURL || 'http://' + window.location.hostname + ':5000/';
this.__cache = {};
}
- _createClass(GHDataAPI, [{
+ _createClass(AugurAPI, [{
key: 'Repo',
value: function Repo(owner, repoName) {
var _this = this;
@@ -358,13 +358,13 @@ var GHDataAPI = function () {
}
}]);
- return GHDataAPI;
+ return AugurAPI;
}();
-exports.default = GHDataAPI;
+exports.default = AugurAPI;
});
-;require.register("GHDataStats.js", function(exports, require, module) {
+;require.register("AugurStats.js", function(exports, require, module) {
'use strict';
Object.defineProperty(exports, "__esModule", {
@@ -375,19 +375,19 @@ var _createClass = function () { function defineProperties(target, props) { for
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-var GHDataStats = function () {
- function GHDataStats() {
- _classCallCheck(this, GHDataStats);
+var AugurStats = function () {
+ function AugurStats() {
+ _classCallCheck(this, AugurStats);
}
- _createClass(GHDataStats, null, [{
+ _createClass(AugurStats, null, [{
key: 'convertDates',
value: function convertDates(data, earliest, latest) {
earliest = earliest || new Date('01-01-2005');
latest = latest || new Date();
if (Array.isArray(data[0])) {
data = data.map(function (datum) {
- return GHDataStats.convertDates(datum);
+ return AugurStats.convertDates(datum);
});
} else {
@@ -405,7 +405,7 @@ var GHDataStats = function () {
value: function convertKey(data, key) {
if (Array.isArray(data[0])) {
data = data.map(function (datum) {
- return GHDataStats.convertKey(datum, key);
+ return AugurStats.convertKey(datum, key);
});
} else {
var EARLIEST = new Date('01-01-2005');
@@ -429,11 +429,11 @@ var GHDataStats = function () {
var flat = ary.map(function (e) {
return e[key];
});
- mean = mean || GHDataStats.averageArray(flat);
+ mean = mean || AugurStats.averageArray(flat);
var distances = flat.map(function (e) {
return (e - mean) * (e - mean);
});
- return Math.sqrt(GHDataStats.averageArray(distances));
+ return Math.sqrt(AugurStats.averageArray(distances));
}
}, {
key: 'describe',
@@ -441,8 +441,8 @@ var GHDataStats = function () {
var flat = ary.map(function (e) {
return e[key];
});
- var mean = GHDataStats.averageArray(flat);
- var stddev = GHDataStats.standardDeviation(ary, key, mean);
+ var mean = AugurStats.averageArray(flat);
+ var stddev = AugurStats.standardDeviation(ary, key, mean);
var variance = stddev * stddev;
return {
'mean': mean,
@@ -479,7 +479,7 @@ var GHDataStats = function () {
}
var average = { date: new Date(date) };
- average[key] = GHDataStats.averageArray(averageWindow.slice(0, windowSizeInDays));
+ average[key] = AugurStats.averageArray(averageWindow.slice(0, windowSizeInDays));
averageWindow.shift();
rolling.push(average);
}
@@ -491,7 +491,7 @@ var GHDataStats = function () {
if (!data) {
return [];
}
- baseline = baseline || GHDataStats.averageArray(data.map(function (e) {
+ baseline = baseline || AugurStats.averageArray(data.map(function (e) {
return e[key];
}));
data = data.map(function (datum) {
@@ -515,9 +515,9 @@ var GHDataStats = function () {
};
var data = {};
- data['base'] = GHDataStats.rollingAverage(GHDataStats.convertDates(GHDataStats.convertKey(baseData, Object.keys(baseData[0])[1]), config.earliest, config.latest), undefined, config.period);
+ data['base'] = AugurStats.rollingAverage(AugurStats.convertDates(AugurStats.convertKey(baseData, Object.keys(baseData[0])[1]), config.earliest, config.latest), undefined, config.period);
- data['compare'] = GHDataStats.rollingAverage(GHDataStats.convertDates(GHDataStats.convertKey(compareData, Object.keys(compareData[0])[1]), config.earliest, config.latest), undefined, config.period);
+ data['compare'] = AugurStats.rollingAverage(AugurStats.convertDates(AugurStats.convertKey(compareData, Object.keys(compareData[0])[1]), config.earliest, config.latest), undefined, config.period);
var smaller = data['base'][0].date < data['compare'][0].date ? 'base' : 'compare';
var larger = data['base'][0].date < data['compare'][0].date ? 'compare' : 'base';
@@ -551,7 +551,7 @@ var GHDataStats = function () {
key: 'zscores',
value: function zscores(data, key) {
key = key || 'value';
- var stats = GHDataStats.describe(data, key);
+ var stats = AugurStats.describe(data, key);
return data.map(function (e) {
var newObj = {};
if (e.date) {
@@ -569,10 +569,10 @@ var GHDataStats = function () {
}
}]);
- return GHDataStats;
+ return AugurStats;
}();
-exports.default = GHDataStats;
+exports.default = AugurStats;
});
;require.register("components/BaseRepoActivityCard.vue", function(exports, require, module) {
@@ -695,36 +695,36 @@ if (module.hot) {(function () { var hotAPI = require("vue-hot-reload-api")
})()}
});
-;require.register("components/GHDataApp.vue", function(exports, require, module) {
+;require.register("components/AugurApp.vue", function(exports, require, module) {
;(function(){
'use strict';
-var _GHDataHeader = require('./GHDataHeader.vue');
+var _AugurHeader = require('./AugurHeader.vue');
-var _GHDataHeader2 = _interopRequireDefault(_GHDataHeader);
+var _AugurHeader2 = _interopRequireDefault(_AugurHeader);
var _SidebarControls = require('./SidebarControls.vue');
var _SidebarControls2 = _interopRequireDefault(_SidebarControls);
-var _GHDataCards = require('./GHDataCards.vue');
+var _AugurCards = require('./AugurCards.vue');
-var _GHDataCards2 = _interopRequireDefault(_GHDataCards);
+var _AugurCards2 = _interopRequireDefault(_AugurCards);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
module.exports = {
components: {
- 'ghdata-header': _GHDataHeader2.default,
+ 'augur-header': _AugurHeader2.default,
SidebarControls: _SidebarControls2.default,
- 'ghdata-cards': _GHDataCards2.default
+ 'augur-cards': _AugurCards2.default
}
};
})()
if (module.exports.__esModule) module.exports = module.exports.default
var __vue__options__ = (typeof module.exports === "function"? module.exports.options: module.exports)
if (__vue__options__.functional) {console.error("[vueify] functional components are not supported and should be defined in plain js files using render functions.")}
-__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('ghdata-header'),_vm._v(" "),_c('div',{staticClass:"content"},[_c('sidebar-controls'),_vm._v(" "),_c('ghdata-cards')],1)],1)}
+__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('augur-header'),_vm._v(" "),_c('div',{staticClass:"content"},[_c('sidebar-controls'),_vm._v(" "),_c('augur-cards')],1)],1)}
__vue__options__.staticRenderFns = []
if (module.hot) {(function () { var hotAPI = require("vue-hot-reload-api")
hotAPI.install(require("vue"), true)
@@ -738,7 +738,7 @@ if (module.hot) {(function () { var hotAPI = require("vue-hot-reload-api")
})()}
});
-;require.register("components/GHDataCards.vue", function(exports, require, module) {
+;require.register("components/AugurCards.vue", function(exports, require, module) {
;(function(){
'use strict';
@@ -801,7 +801,7 @@ if (module.hot) {(function () { var hotAPI = require("vue-hot-reload-api")
})()}
});
-;require.register("components/GHDataHeader.vue", function(exports, require, module) {
+;require.register("components/AugurHeader.vue", function(exports, require, module) {
;(function(){
'use strict';
@@ -901,9 +901,9 @@ Object.defineProperty(exports, "__esModule", {
value: true
});
-var _GHDataStats = require('../../GHDataStats');
+var _AugurStats = require('../../AugurStats');
-var _GHDataStats2 = _interopRequireDefault(_GHDataStats);
+var _AugurStats2 = _interopRequireDefault(_AugurStats);
var _d = require('d3');
@@ -923,19 +923,19 @@ exports.default = {
var _this = this;
if (this.repo) {
- window.GHDataRepos[this.repo].dependents().then(function (dependents) {
+ window.AugurRepos[this.repo].dependents().then(function (dependents) {
_this.$refs['dependents'].innerHTML = '';
for (var i = 0; i < dependents.length && i < 10; i++) {
_this.$refs['dependents'].innerHTML += dependents[i].name + '
';
}
});
- window.GHDataRepos[this.repo].dependencies().then(function (dependencies) {
+ window.AugurRepos[this.repo].dependencies().then(function (dependencies) {
_this.$refs['dependencies'].innerHTML = '';
for (var i = 0; i < dependencies.dependencies.length && i < 10; i++) {
_this.$refs['dependents'].innerHTML += dependencies.dependencies[i].name + '
';
}
});
- window.GHDataRepos[this.repo].dependencyStats().then(function (depstats) {
+ window.AugurRepos[this.repo].dependencyStats().then(function (depstats) {
_this.$refs['totaldependents'].innerHTML = depstats['dependent_repositories'];
_this.$refs['totaldependencies'].innerHTML = depstats['dependencies'];
});
@@ -969,9 +969,9 @@ var _metricsGraphics = require('metrics-graphics');
var _metricsGraphics2 = _interopRequireDefault(_metricsGraphics);
-var _GHDataStats = require('../GHDataStats');
+var _AugurStats = require('../AugurStats');
-var _GHDataStats2 = _interopRequireDefault(_GHDataStats);
+var _AugurStats2 = _interopRequireDefault(_AugurStats);
var _d = require('d3');
@@ -1020,9 +1020,9 @@ var _d = require('d3');
var d3 = _interopRequireWildcard(_d);
-var _GHDataStats = require('GHDataStats');
+var _AugurStats = require('AugurStats');
-var _GHDataStats2 = _interopRequireDefault(_GHDataStats);
+var _AugurStats2 = _interopRequireDefault(_AugurStats);
var _vuex = require('vuex');
@@ -1073,15 +1073,15 @@ exports.default = {
if (this.$refs.chart) {
this.$refs.chart.className = 'linechart loader';
}
- window.GHDataRepos[this.repo][this.source]().then(function (baseData) {
+ window.AugurRepos[this.repo][this.source]().then(function (baseData) {
_this.$refs.chartStatus.innerHTML = '';
if (baseData && baseData.length) {
- config.data = _GHDataStats2.default.convertDates(baseData, _this.earliest, _this.latest);
+ config.data = _AugurStats2.default.convertDates(baseData, _this.earliest, _this.latest);
} else {
config.data = [];
}
if (_this.comparedTo) {
- return GHDataRepos[_this.comparedTo][_this.source]();
+ return AugurRepos[_this.comparedTo][_this.source]();
}
return new Promise(function (resolve, reject) {
resolve();
@@ -1091,16 +1091,16 @@ exports.default = {
if (config.data && compareData && compareData.length) {
if (config.compare == 'each') {
var key = Object.keys(compareData[0])[1];
- var compare = _GHDataStats2.default.rollingAverage(_GHDataStats2.default.zscores(compareData, key), 'value', _this.period);
- var base = _GHDataStats2.default.rollingAverage(_GHDataStats2.default.zscores(config.data, key), 'value', _this.period);
+ var compare = _AugurStats2.default.rollingAverage(_AugurStats2.default.zscores(compareData, key), 'value', _this.period);
+ var base = _AugurStats2.default.rollingAverage(_AugurStats2.default.zscores(config.data, key), 'value', _this.period);
config.data = [base, compare];
- config.legend = [window.GHDataRepos[_this.repo].toString(), window.GHDataRepos[_this.comparedTo].toString()];
+ config.legend = [window.AugurRepos[_this.repo].toString(), window.AugurRepos[_this.comparedTo].toString()];
config.colors = config.colors || ['#FF3647', '#999'];
} else {
console.log('rendering percentage');
config.format = 'percentage';
config.baselines = [{ value: 1, label: config.baseline }];
- config.data = _GHDataStats2.default.makeRelative(config.data, compareData, {
+ config.data = _AugurStats2.default.makeRelative(config.data, compareData, {
earliest: config.earliest,
latest: config.latest,
byDate: config.byDate,
@@ -1110,8 +1110,8 @@ exports.default = {
} else {
if (!_this.disableRollingAverage) {
config.legend = config.legend || [config.title.toLowerCase(), _this.period + ' day average'];
- var rolling = _GHDataStats2.default.rollingAverage(config.data, keys[0], _this.period);
- config.data = _GHDataStats2.default.convertKey(_GHDataStats2.default.combine(config.data, rolling), keys[0]);
+ var rolling = _AugurStats2.default.rollingAverage(config.data, keys[0], _this.period);
+ config.data = _AugurStats2.default.convertKey(_AugurStats2.default.combine(config.data, rolling), keys[0]);
config.colors = config.colors || ['#CCC', '#FF3647'];
config.y_accessor = 'value';
}
diff --git a/frontend/public/static/app.js.map b/frontend/public/static/app.js.map
index 3c1804f6e6..ade04debbf 100644
--- a/frontend/public/static/app.js.map
+++ b/frontend/public/static/app.js.map
@@ -1 +1 @@
-{"version":3,"sources":["app/GHData.js","app/GHDataAPI.js","app/GHDataStats.js","app/components/BaseRepoActivityCard.vue","app/components/BaseRepoEcosystemCard.vue","app/components/ComparedRepoActivityCard.vue","app/components/GHDataApp.vue","app/components/GHDataCards.vue","app/components/GHDataHeader.vue","app/components/SidebarControls.vue","app/components/charts/DependencyOverview.vue","app/components/charts/EmptyChart.vue","app/components/charts/LineChart.vue","app/include/kube/kube.js","app/include/metricsgraphics.js","app/include/mg_line_brushing.js"],"names":["GHData","queryString","require","window","jQuery","Vue","Vuex","GHDataAPI","default","GHDataRepos","GHDataStats","$","GHDataApp","use","ghdata","Store","state","baseRepo","comparedRepos","trailingAverage","startDate","Date","endDate","compare","byDate","mutations","setBaseRepo","payload","repo","Repo","url","toString","keepCompared","title","owner","name","history","pushState","addComparedRepo","push","location","search","setDates","parseInt","setCompare","reset","store","$mount","parsed","parse","arrayFormat","$store","commit","replace","comparedTo","forEach","hostURL","version","_version","_host","hostname","__cache","repoName","splitURL","split","length","Endpoint","endpoint","self","params","callback","btoa","created_at","now","Promise","resolve","reject","JSON","data","get","then","stringify","Timeseries","func","relativeTo","baselineRepo","commits","forks","issues","pulls","stars","tags","downloads","uniqueCommitters","pullsAcceptanceRate","issuesResponseTime","contributors","contributions","committerLocations","communityAge","linkingWebsites","busFactor","dependents","dependencies","dependencyStats","earliest","latest","Array","isArray","map","datum","convertDates","d","date","filter","key","convertKey","EARLIEST","value","ary","reduce","a","e","mean","flat","averageArray","distances","Math","sqrt","stddev","standardDeviation","variance","windowSizeInDays","rolling","averageWindow","i","lastFound","after","before","setDate","getDate","iter","average","slice","shift","baseline","baseData","compareData","config","undefined","period","base","rollingAverage","Object","keys","smaller","larger","result","toPush","x","stats","describe","newObj","zscore","from","arguments","Error","fn","jquery","Function","prototype","inherits","parent","F","f","prop","super","Kube","element","options","$element","opts","extend","defaults","namespace","$target","target","getInstance","hasTarget","type","args","call","splice","_fireCallback","_data","callbacks","isFunction","apply","events","eventNamespace","len","handler","Plugin","create","classname","pluginname","toLowerCase","method","val","each","$this","methodVal","error","autoload","arr","s","trim","join","autoloadQueue","startAutoload","MutationObserver","observer","mutation","newNodes","addedNodes","nodeType","startAutoloadOnce","observe","document","subtree","childList","$nodes","not","$el","indexOf","attr","watch","on","Animation","effect","completeCallback","prefixes","queue","start","isSlideEffect","setElementHeight","addToQueue","clean","animate","height","removeElementHeight","css","isHideableEffect","effects","inArray","isToggleEffect","storeHideClasses","hasClass","revertHideClasses","addClass","removeData","removeHideClass","removeClass","makeSimpleEffects","_callback","complete","proxy","makeComplete","make","event","one","off","animation","Detect","isMobile","test","navigator","userAgent","isDesktop","isMobileScreen","width","isTabletScreen","isDesktopScreen","FormData","app","set","formdata","appendForms","appendFields","$fields","str","append","$forms","formsData","serializeArray","serialize","Response","obj","item","parseItem","html","stripslashes","top","href","notify","Utils","disableBodyScroll","$body","windowWidth","innerWidth","documentElementRect","documentElement","getBoundingClientRect","right","abs","left","isOverflowing","body","clientWidth","scrollbarWidth","measureScrollbar","scrollDiv","createElement","className","offsetWidth","removeChild","enableBodyScroll","Message","closeSelector","closeEvent","animationOpen","animationClose","$close","find","close","stop","open","preventDefault","isOpened","onOpened","onClosed","Sticky","offset","offsetTop","getOffsetTop","load","scroll","isFix","fixed","unfixed","scrollTop","Toggleme","toggleEvent","text","toggle","revertText","storeText","setTimeout","replaceText","Offcanvas","direction","clickOutside","utils","detect","buildTargetWidth","buildAnimationDirection","getCloseLink","closeAll","pushBody","$elms","isTag","tagName","closest","pullBody","handleKeyboard","which","properties","Collapse","active","toggleClass","boxClass","hashes","currentHash","currentItem","$items","getItems","loadItems","$boxes","getBoxes","setActiveItem","el","getItem","hash","getItemBy","addActive","$box","$caret","$parent","removeActive","openAll","num","eq","Dropdown","caretUp","buildClose","buildCaret","buildMobileAnimation","disableEvents","getCaret","buildCaretPosition","innerHeight","toggleCaretOpen","toggleCaretClose","setPosition","shouldNotBeClosed","enableEvents","isNavigationFixed","getPlacement","getOffset","position","getPosition","coords","placement","leftFix","outerHeight","Tabs","equals","live","buildLiveTabs","tabsCollection","hashesCollection","$tabs","getTabs","getLocationHash","setItemHeight","toArray","collectItem","$tab","$layers","$liveTabsList","buildLiveItem","tab","$li","$a","index","getLiveItemId","getLiveItemTitle","first","next","fetchElement","prev","pushStateOpen","pushStateClose","isHash","minHeight","getItemMaxHeight","max","h","modalcurrent","modalwindow","show","modal","Modal","header","maxHeight","overlay","buildModal","$modal","$header","buildOverlay","$overlay","prepend","buildHeader","buildContent","findActions","resize","handleEnter","getData","ajax","getTime","cache","success","buildWidth","bottom","percent","match","buildPosition","windowHeight","buildHeight","padding","margin","modalHeight","handleEscape","setHeader","setContent","content","setWidth","getModal","getBody","getHeader","root","factory","define","amd","exports","module","MG","d3","global","convert","accessor","time_format","parse_time","timeParse","number","Number","utc","specifier","utcFormat","timeFormat","mg_jquery_exists","mg_get_rollover_time_format","fmt","processed","x_time_frame","utc_time","mg_data_in_plot_bounds","x_accessor","min_x","max_x","y_accessor","min_y","max_y","is_array","thing","is_function","is_empty_array","is_object","is_array_of_arrays","all_elements","sum","is_array_of_objects","is_array_of_objects_or_empty","pluck","count_array_elements","b","mg_get_bottom","mg_get_plot_bottom","buffer","mg_get_top","mg_get_plot_top","mg_get_left","mg_get_plot_left","mg_get_right","mg_get_plot_right","mg_exit_and_remove","elem","exit","remove","mg_selectAll_and_remove","svg","cl","selectAll","mg_add_g","classed","mg_remove_element","select","mg_make_rug","rug_class","mg_get_svg_child_of","all_data","mg_flatten_array","rug","enter","mg_add_color_accessor_to_rug","rug_mono_class","color_accessor","scalefns","colorf","mg_rotate_labels","labels","rotation_degree","dy","transform","mg_elements_are_overlapping","node","mg_is_horizontally_overlapping","mg_prevent_horizontal_overlap","newY","mg_prevent_vertical_overlap","sort","reverse","overlap_amount","label_i","label_j","j","mg_is_vertically_overlapping","sibling","element_bbox","sibling_bbox","mg_is_horiz_overlap","mg_infer_type","ns","testPoint","selector_or_node","flat_data","concat","mg_next_id","_next_elem_id","mg_target_ref","mg_normalize","HTMLElement","target_ref","getAttribute","setAttribute","console","warn","string","get_pixel_dimension","dimension","style","get_width","get_height","isNumeric","n","isNaN","parseFloat","isFinite","iterator","context","breaker","k","merge_with_defaults","source","number_of_values","values","has_values_below","has_too_many_zeros","zero_count","mg_is_date","mg_is_object","mg_is_array","mg_is_function","clone","copy","setTime","hasOwnProperty","arr_diff","seen","diff","warn_deprecation","message","untilVersion","trace","truncate_text","textObj","textString","bbox","textContent","getBBox","wrap_text","token","tspanAttrs","words","word","line","lineNumber","lineHeight","y","tspan","pop","getComputedTextLength","register","chartType","descriptor","charts","_hooks","add_hook","hooks","already_registered","hook","call_hook","constructor","globals","deprecations","rollover_callback","replacement","rollout_callback","x_rollover_format","y_rollover_format","show_years","xax_start_at_min","interpolate_tension","link","data_graphic","missing_is_zero","missing_is_hidden","missing_is_hidden_accessor","legend","legend_target","animate_on_load","title_y_position","center_title_full_width","full_width","full_height","small_height_threshold","small_width_threshold","xax_count","xax_tick_length","axes_not_compact","yax_count","yax_tick_length","x_extended_ticks","y_extended_ticks","y_scale_type","min_y_from_data","point_size","xax_units","x_label","x_sort","x_axis","y_axis","x_axis_position","y_axis_position","x_axis_type","y_axis_type","ygroup_accessor","xgroup_accessor","y_padding_percentage","y_outer_padding_percentage","ygroup_padding_percentage","ygroup_outer_padding_percentage","x_padding_percentage","x_outer_padding_percentage","xgroup_padding_percentage","xgroup_outer_padding_percentage","y_categorical_show_guides","x_categorical_show_guide","rotate_x_labels","rotate_y_labels","y_label","yax_units","yax_units_append","x_rug","y_rug","mouseover_align","x_mouseover","y_mouseover","transition_on_update","mouseover","click","show_rollover_text","show_confidence_band","xax_format","area","chart_type","decimals","format","inflator","linked","linked_format","list","baselines","markers","scales","european_clock","show_year_markers","show_secondary_x_label","interpolate","curveCatmullRom","alpha","custom_line_color_map","colors","max_data_size","aggregate_rollover","show_tooltips","selected_chart","deprecation","warned","Tooltip","enabled","timeout","hoverState","inState","init","VERSION","TRANSITION_DURATION","DEFAULTS","selector","template","trigger","delay","container","viewport","getOptions","$viewport","hover","focus","triggers","eventIn","eventOut","leave","_options","fixTitle","getDefaults","hide","getDelegateOptions","currentTarget","Event","tip","clearTimeout","isInStateTrue","hasContent","inDom","contains","ownerDocument","isDefaultPrevented","that","$tip","tipId","getUID","autoToken","autoPlace","detach","display","appendTo","insertAfter","pos","actualWidth","actualHeight","offsetHeight","orgPlacement","viewportDim","calculatedOffset","getCalculatedOffset","applyPlacement","prevHoverState","support","transition","emulateTransitionEnd","marginTop","marginLeft","setOffset","using","props","round","delta","getViewportAdjustedDelta","isVertical","arrowDelta","arrowOffsetPosition","replaceArrow","arrow","getTitle","removeAttr","$e","isBody","elRect","elOffset","outerDims","viewportPadding","viewportDimensions","topEdgeOffset","bottomEdgeOffset","leftEdgeOffset","rightEdgeOffset","o","prefix","random","getElementById","$arrow","enable","disable","toggleEnabled","destroy","option","old","tooltip","Constructor","noConflict","Popover","getContent","children","end","popover","chart_title","chartTitle","insert","description","$chartTitle","mg_add_scale_function","scalefcn_name","scale","inflation","di","mg_position","mg_cat_position","MGScale","scaleArgs","use_inflator","zero_bottom","scaleType","_namespace","namespace_accessor_name","scale_name","toUpperCase","scalefn_name","scaleName","inflateDomain","tf","zeroBottom","numericalDomainFromData","other_flat_data_arrays","illustrative_data","is_time_series","mg_min_max_numerical","time_scale","scaleUtc","scaleTime","scaleLog","scaleLinear","domain","categoricalDomain","scaleOrdinal","categoricalDomainFromData","categoricalVariables","scaleBand","numericalRange","range","categoricalRangeBands","halfway","paddingPercentage","outerPaddingPercentage","paddingInner","paddingOuter","bandwidth","categoricalRange","categoricalColorRange","schemeCategory20","schemeCategory10","clamp","yn","scale_factory","additional_data_arrays","dp","extents","extent","min_val","max_val","mg_force_xax_count_to_be_two","mg_categorical_group_color_scale","mg_add_color_categorical_scale","color","mg_get_categorical_domain","mg_get_color_domain","color_domain","color_type","mg_get_color_range","color_range","processScaleTicks","axis","scale_ticks","ticks","log10","log","LN10","number_of_ticks","data_is_int","rugPlacement","axisArgs","coordinates","x1","x2","rug_buffer_size","y1","y2","rimPlacement","tick_length","toFixed","labelPlacement","tickLength","dx","textAnchor","mg_compute_yax_format","mg_default_xax_format","selectXaxFormat","c","mg_default_bar_xax_format","secondaryLabels","g","time_series","mg_get_yformat_and_secondary_time_function","addSecondaryLabelElements","timeframe","yformat","secondary","time_frame","secondary_function","years","first_tick","X","yg","yearMarkerLine","yearMarkerText","textFcn","xAxisTextElement","addNumericalLabels","_d","addTickLines","ticksClass","extendedTicksClass","extendedTicks","initializeAxisRim","rim","initializeRug","rug_positions","categoricalLabelPlacement","group","groupScale","cat","categoricalLabels","nsClass","groupAccessor","group_g","groups","String","rotateLabels","categoricalGuides","scalef","groupf","alreadyPlotted","grs","last","x11","x21","y11","y21","x12","x22","y12","y22","zeroLine","mgDrawAxis","categorical","numerical","axisName","axisClass","label","show_bar_zero","mg_bar_add_zero_line","axisFactory","t","draw","axis_factory","yf","mg_change_y_extents_for_bars","my","min","trio","baseline_accessor","predictor_accessor","yax_format","pf","d_","r","Y","categorical_groups","YGROUP","set_min_max_y","buff","mg_y_domain_range","mg_define_y_scales","Y_axis","mg_add_y_label","mg_add_y_axis_rim","y_ticks","y1scale","y2scale","mg_add_y_axis_tick_lines","mg_add_y_axis_tick_labels","mg_process_scale_ticks","mg_add_categorical_labels","mg_add_group_label","mg_add_graphic_labels","mg_draw_group_lines","ygroup_height","mg_y_categorical_show_guides","ygroupf","y_axis_categorical","xf","mg_add_processed_object","mg_select_xax_format","mg_add_x_ticks","mg_add_x_tick_labels","mg_add_x_label","x_axis_categorical","additional_buffer","mg_add_categorical_scale","categorical_variables","mg_add_x_axis_categorical_labels","bar_outer_padding_percentage","truncate_x_labels","idx","mg_point_add_color_scale","mg_point_add_size_scale","min_size","max_size","size_domain","size_range","size_accessor","mg_get_size_domain","mg_get_size_range","size","x_label_nudge_x","mg_get_time_frame","mg_milisec_diff","mg_sec_diff","mg_day_diff","mg_four_days","mg_many_days","mg_many_months","mg_years","mg_get_time_format","main_time_format","mg_process_time_format","main_x_time_format","original_data","flattened","test_point_x","original_x_accessor","is_float","mg_add_x_axis_rim","mg_add_x_axis_tick_lines","x_ticks","last_i","mg_add_primary_x_axis_label","mg_add_secondary_x_axis_label","mg_add_secondary_x_axis_elements","timeDays","timeYears","mg_add_year_marker_line","mg_add_year_marker_text","mg_min_max_x_for_nonbars","mx","extent_x","mg_min_max_x_for_bars","mg_min_max_x_for_dates","yesterday","tomorrow","mg_min_max_x_for_numbers","mg_min_max_x_for_strings","mg_sort_through_data_type_and_set_x_min_max_accordingly","mg_merge_args_with_defaults","mg_is_time_series","first_elem","mg_init_compute_width","svg_width","mg_categorical_calculate_height","mg_init_compute_height","svg_height","mg_remove_svg_if_chart_type_has_changed","empty","mg_add_svg_if_it_doesnt_exist","mg_add_clip_path_for_plot_area","mg_adjust_width_and_height_if_changed","mg_set_viewbox_for_scaling","mg_remove_missing_classes_and_text","mg_remove_outdated_lines","nodes","array_full_series","lines_to_remove","num_of_new","num_of_existing","mg_raise_container_error","categoricalInitialization","mg_categorical_count_number_of_groups","mg_categorical_count_number_of_lanes","mg_categorical_calculate_group_length","mg_categorical_calculate_bar_thickness","accessor_string","total_bars","group_bars","bars_per_group","groupHeight","gh","step","bar_thickness","groupContribution","marginContribution","mg_barchart_extrapolate_group_and_thickness_from_height","mg_return_label","mg_remove_existing_markers","mg_in_range","mg_x_position","mg_x_position_fixed","_mg_x_pos","mg_y_position_fixed","_mg_y_pos","mg_place_annotations","checker","class_name","line_fcn","text_fcn","mg_place_markers","mg_place_marker_lines","mg_place_marker_text","mg_place_baselines","mg_place_baseline_lines","mg_place_baseline_text","gm","x_pos_fixed","lineclass","textclass","gb","y_pos","mg_clear_mouseover_container","mg_setup_mouseover_container","text_anchor","mouseover_x","active_datapoint","active_datapoint_y_nudge","y_position","yPos","mg_mouseover_tspan","bold","font_size","pts","mg_reset_text_container","textContainer","mg_mouseover_row","row_number","rargs","rrr","mg_mouseover_text","text_container","mouseover_row","MG_WindowResizeTracker","targets","Observer","WebKitMutationObserver","window_listener","parentNode","aspect","newWidth","remove_target","removeEventListener","add_target","addEventListener","targetNode","some","removedNodes","disconnect","mg_window_resize_tracker","mg_window_listeners","mg_if_aspect_ratio_resize_svg","dropdown","backdrop","is","getParent","isActive","clearMenus","relatedTarget","keydown","stopPropagation","desc","button_layout","feature_set","public_name","sorters","manual","manual_map","manual_callback","_strip_punctuation","punctuationless","finalString","manual_button","feature","button","features","feat","mapDtoF","dropdownLiAClick","manual_feature","mg_line_color_text","line_id","mg_line_graph_generators","plot","mg_add_line_generator","mg_add_area_generator","mg_add_flat_line_generator","mg_add_confidence_band_generator","existing_band","confidence_area","defined","y0","l","u","curve","flat_line","data_median","mg_add_confidence_band","which_line","confidenceBand","duration","mg_add_area","areas","display_area","appendChild","update_transition_duration","mg_default_color_for_path","this_path","mg_color_line","mg_add_line_element","median","mg_add_line","existing_line","lineTransition","attrTween","path_tween","mg_add_legend_element","this_legend","legend_text","anchor_point","anchor_orientation","legend_group","mg_plot_legend_if_legend_target","mg_add_legend_group","mg_remove_existing_line_rollover_elements","mg_add_rollover_circle","circle","mg_set_unique_line_id_for_each_series","mg_nest_data_for_voronoi","merge","mg_line_class_string","class_string","v","formatter","id","mg_add_voronoi_rollover","rollover_on","rollover_off","rollover_move","voronoi","polygons","mg_configure_voronoi_rollover","nest_data_for_aggregate_rollover","data_nested","nest","entries","entry","mg_add_aggregate_rollover","line_classes","lc","mg_line_class","mg_line_color_class","mg_rollover_id_class","mg_rollover_format_id","mg_configure_aggregate_rollover","mg_configure_singleton_rollover","mg_add_single_line_rollover","mg_is_singleton","rect","rect_first","__data__","mg_is_standard_multiline","mg_is_aggregated_rollover","mg_draw_all_line_elements","mg_remove_dangling_bands","this_data","mg_line_main_plot","use_data_y_min","continueWithDefault","mg_line_rollover_setup","graph","rolloverOn","rolloverOff","rolloverMove","mg_update_rollover_circle","mg_update_aggregate_rollover_circle","mg_update_generic_rollover_circle","mg_trigger_linked_mouseovers","mg_trigger_linked_mouseouts","datums","mg_remove_active_data_points_for_aggregate_rollover","mg_remove_active_data_points_for_generic_rollover","mg_remove_active_text","lineChart","internal_error","raw_data_transformation","process_line","mainPlot","rollover","windowListeners","row","mg_format_x_aggregate_mouseover","mg_format_x_mouseover","mg_format_y_mouseover","mouseout","mousemove","histogram","process_histogram","bar","bar_margin","format_rollover_number","mo","binned","bins","processed_x_accessor","processed_y_accessor","processed_dx_accessor","point_mouseover","mg_color_point_mouseover","mg_filter_out_plot_bounds","new_data","pointChart","process_point","xMaker","yMaker","xgroup_height","XGROUP","xgroupf","xoutf","youtf","colorScale","least_squares","add_ls","sizef","paths","active_point_size_increase","update","x_categorical_show_guides","ls","lowess","label_accessor","scaffold","mg_targeted_legend","div","orientation","outer_span","COLOR","legend_on_graph","lineCount","sub_container","barChart","ycolor_accessor","xcolor_accessor","barplot","fresh_render","bars","predictor_bars","pp","pp0","baseline_marks","perform_load_animation","should_transition","transition_duration","appropriate_size","length_type","width_type","length_coord","width_coord","length_scalefn","width_scalefn","length_scale","width_scale","length_accessor","width_accessor","length_coord_map","width_coord_map","length_map","width_map","reference_length_map","reference_length_coord_fn","reference_accessor","w","reference_data","reference_bars","reference_thickness","comparison_accessor","comparison_thickness","comparison_data","comparison_marks","comparison_width","rollover_x","rollover_anchor","rollover_align","is_vertical","data_accessor","label_units","rgb","darker","mg_format_data_for_mouseover","secondary_label_accessor","predictor_proportion","truncate_y_labels","data_table","standard_col","font_weight","columns","formatting_options","_format_element","fo","_add_column","_args","arg_type","standard_column","bullet","sparkline","table","colgroup","thead","tbody","this_column","this_title","tr","th","td_accessor","td_type","td_value","th_text","td_text","td","col","this_col","value_formatter","this_format","currency","secondary_accessor","mg_missing_add_text","missing_text","mg_missing_x_scale","mg_missing_y_scale","mg_make_fake_data","mg_add_missing_background_rect","mg_missing_add_line","mg_missing_add_area","mg_remove_all_children","mg_missing_remove_legend","missingData","show_missing_background","x_scale_type","single_object","array_of_objects","array_of_arrays","nested_array_of_arrays","nested_array_of_objects","mg_process_multiple_x_accessors","mg_process_multiple_y_accessors","mg_process_multiple_accessors","which_accessor","ya","series","processed_data","start_date","upto","setHours","existing_o","our_data","extracted_data","hist","thresholds","x0","this_pt","next_pt","original_y_accessor","process_categorical_variables","pd","bar_orientation","ls_line","fit","add_lowess","lowess_line","lowess_robust","inc","_l","yhat","_calculate_lowess_fit","x_proto","y_proto","zip","yi","q","quantile","ri","_bisquare_weight","p","x_","y_","xi","_x","_y","_xy","_xx","xhat","numerator","denominator","beta","_pow_weight","pow","_tricube_weight","_neighborhood_width","xis","_manhattan","_weighted_means","wxy","wsum","wxyi","xbar","ybar","_weighted_beta","denom","_weighted_least_squares","beta_i","_wm","residuals","floor","sorted_x","x_max","x_min","xy","smallest","largest","xi_neighbors","x_i","x0_i","delta_i","xyi","_output","fmt_string","time_rollover_format","fd","number_rollover_format","mg_format_y_rollover","formatted_y","mg_format_x_rollover","formatted_x","mouseover_fcn","check_time","formatted_data","time_fmt","mg_format_number_mouseover","d1","precision","path0","path1","cloneNode","n0","getTotalLength","n1","dt","points","p0","getPointAtLength","p1","render_markup_for_server","virtual_window","virtual_d3","original_d3","original_window","original_document","targetFn","render_markup_for_client","render_markup","init_virtual_window","jsdom","force","doc","QuerySelector","defaultView","AddBrushingCapability","line_brushing","set_brush_as_base","current","brushHistory","brushed","original","steps","zoom_in","zoom_out","get_brush_interval","resolution","brushing_interval","interval","timeDay","count","is_within_bounds","brushing","brushing_history","chartContext","isDragging","mouseDown","originX","brushingGroup","extentRect","mouse","opacity","mouseX","newX","xScale","yScale","flatData","boundedData","yBounds","xBounds","extentX0","extentX1","mapDtoX","mapDtoY","brushed_max_x","brushed_min_x","brushed_max_y","brushed_min_y","iterations","xValX0","invert","xValX1","previousBrush","after_brushing","brushing_manual_redraw","processXAxis","processYAxis","afterRollover"],"mappings":"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A;AACA;AACA;AACA;AACA;AAlCA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAvCA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAnCA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAvCA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3DA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3BA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAzDA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAhEA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3CA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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","file":"public/static/app.js","sourcesContent":["const queryString = require('query-string')\n\nexport default function GHData () {\n window.jQuery = require('jquery')\n window.Vue = require('vue')\n window.Vuex = require('vuex')\n let GHDataAPI = require('GHDataAPI').default\n window.GHDataAPI = new GHDataAPI()\n window.GHDataRepos = {}\n window.GHDataStats = require('GHDataStats').default\n window.$ = window.jQuery\n\n let GHDataApp = require('./components/GHDataApp')\n\n Vue.use(Vuex)\n\n window.ghdata = new Vuex.Store({\n state: {\n baseRepo: null,\n comparedRepos: [],\n trailingAverage: 180,\n startDate: new Date(\"1 January 2005\"),\n endDate: new Date(),\n compare: \"each\",\n byDate: false,\n },\n mutations: {\n setBaseRepo (state, payload) {\n let repo = window.GHDataAPI.Repo(payload.url)\n if (!window.GHDataRepos[repo.toString()]) {\n window.GHDataRepos[repo.toString()] = repo\n }\n state.baseRepo = repo.toString()\n if (!payload.keepCompared) {\n state.comparedRepos = []\n }\n let title = repo.owner + '/' + repo.name + '- GHData' \n let queryString = '?repo=' + repo.owner + '+' + repo.name\n window.history.pushState(null, title, queryString)\n },\n addComparedRepo (state, payload) {\n let repo = window.GHDataAPI.Repo(payload.url)\n if (!window.GHDataRepos[repo.toString()]) {\n window.GHDataRepos[repo.toString()] = repo\n }\n state.comparedRepos.push(repo.toString())\n let title = 'GHData' \n let queryString = window.location.search + '&comparedTo[]=' + repo.owner + '+' + repo.name\n window.history.pushState(null, title, queryString)\n },\n setDates (state, payload) {\n if (payload.startDate) {\n state.startDate = new Date(payload.startDate)\n }\n if (payload.endDate) {\n state.endDate = new Date(payload.endDate)\n }\n if (payload.trailingAverage) {\n state.trailingAverage = parseInt(payload.trailingAverage, 10)\n }\n },\n setCompare (state, payload) {\n state.compare = payload.compare\n },\n reset (state) {\n state = {\n baseRepo: null,\n comparedRepos: [],\n trailingAverage: 180,\n startDate: new Date(\"1 January 2005\"),\n endDate: new Date(),\n compare: \"each\",\n byDate: false,\n }\n window.history.pushState(null, 'GHData', '/')\n } // end reset\n } // end mutations\n })\n\n GHDataApp.store = window.ghdata\n window.GHDataApp = new Vue(GHDataApp).$mount('#app')\n\n // Load state from query string\n let parsed = queryString.parse(location.search, { arrayFormat: 'bracket' })\n if (parsed.repo) {\n window.GHDataApp.$store.commit('setBaseRepo', { url: parsed.repo.replace(' ', '/') })\n }\n if (parsed.comparedTo) {\n parsed.comparedTo.forEach((repo) => {\n window.GHDataApp.$store.commit('addComparedRepo', { url: repo.replace(' ', '/') })\n })\n }\n\n}","var $ = require('jquery')\n\nexport default class GHDataAPI {\n constructor(hostURL, version) {\n this._version = version || 'unstable'\n this._host = hostURL || 'http://' + window.location.hostname + ':5000/'\n this.__cache = {}\n }\n\n Repo(owner, repoName) {\n\n if (repoName) {\n var repo = {owner: owner, name: repoName}\n } else if (owner) {\n let splitURL = owner.split('/')\n if (splitURL.length < 3) {\n var repo = {owner: splitURL[0], name: splitURL[1]}\n } else {\n var repo = {owner: splitURL[3], name: splitURL[4]}\n }\n }\n\n repo.toString = () => { return repo.owner + '/' + repo.name }\n\n var Endpoint = (endpoint) => {\n var self = this;\n var url = this._host + this._version + '/' + repo.owner + '/' + repo.name + '/' + endpoint;\n return function (params, callback) {\n if (self.__cache[btoa(url)]) {\n if (self.__cache[btoa(url)].created_at > Date.now() - 1000 * 60) {\n return new Promise((resolve, reject) => {\n resolve(JSON.parse(self.__cache[btoa(url)].data))\n })\n }\n }\n return $.get(url, params, callback).then((data) => {\n self.__cache[btoa(url)] = {\n created_at: Date.now(),\n data: JSON.stringify(data)\n }\n if (typeof callback === 'function') {\n callback(data)\n }\n return new Promise((resolve, reject) => {\n resolve(data)\n })\n })\n }\n }\n\n var Timeseries = (endpoint) => {\n let func = Endpoint('timeseries/' + endpoint)\n func.relativeTo = (baselineRepo, params, callback) => {\n var url = 'timeseries/' + endpoint + '/relative_to/' + baselineRepo.owner + '/' + baselineRepo.name;\n return Endpoint(url)()\n }\n return func\n }\n\n repo.commits = Timeseries('commits')\n repo.forks = Timeseries('forks')\n repo.issues = Timeseries('issues')\n repo.pulls = Timeseries('pulls')\n repo.stars = Timeseries('stargazers')\n repo.tags = Timeseries('tags')\n repo.downloads = Timeseries('downloads')\n repo.uniqueCommitters = Timeseries('unique_committers')\n\n\n repo.pullsAcceptanceRate = Endpoint('pulls/acceptance_rate')\n repo.issuesResponseTime = Endpoint('issues/response_time')\n repo.contributors = Endpoint('contributors')\n repo.contributions = Endpoint('contributions')\n repo.committerLocations = Endpoint('committer_locations')\n repo.communityAge = Endpoint('community_age')\n repo.linkingWebsites = Endpoint('linking_websites')\n repo.busFactor = Endpoint('bus_factor')\n repo.dependents = Endpoint('dependents')\n repo.dependencies = Endpoint('dependencies')\n repo.dependencyStats = Endpoint('dependency_stats')\n\n return repo\n\n }\n}\n","export default class GHDataStats {\n\n static convertDates (data, earliest, latest) {\n earliest = earliest || new Date('01-01-2005')\n latest = latest || new Date()\n if (Array.isArray(data[0])) {\n data = data.map((datum) => {\n return GHDataStats.convertDates(datum)\n })\n } else {\n \n data = data.map((d) => {\n d.date = new Date(d.date)\n return d\n }).filter((d) => {\n return earliest < d.date && d.date < latest\n })\n }\n return data\n }\n\n static convertKey (data, key) {\n if (Array.isArray(data[0])) {\n data = data.map((datum) => {\n return GHDataStats.convertKey(datum, key)\n })\n } else {\n const EARLIEST = new Date('01-01-2005')\n data = data.map((d) => {\n d.value = d[key];\n return d;\n })\n }\n return data\n }\n\n static averageArray(ary) {\n return ary.reduce((a, e) => {return a + e}, 0) / (ary.length);\n }\n\n static standardDeviation(ary, key, mean) {\n let flat = ary.map((e) => {return e[key]})\n mean = mean || GHDataStats.averageArray(flat)\n let distances = flat.map((e) => {\n return (e - mean) * (e - mean)\n })\n return Math.sqrt(GHDataStats.averageArray(distances))\n }\n\n static describe(ary, key) {\n let flat = ary.map((e) => {return e[key]})\n let mean = GHDataStats.averageArray(flat)\n let stddev = GHDataStats.standardDeviation(ary, key, mean)\n let variance = stddev * stddev\n return {\n 'mean': mean,\n 'stddev': stddev,\n 'variance': variance\n }\n }\n\n static rollingAverage(data, key, windowSizeInDays) {\n key = key || 'value'\n windowSizeInDays = windowSizeInDays || 180\n let rolling = [];\n let averageWindow = [];\n let i = 0;\n let lastFound = -1;\n\n let after = new Date()\n let before = new Date()\n\n for (let date = new Date(data[0].date); date <= data[data.length - 1].date; date.setDate(date.getDate() + 1)) {\n \n after.setDate(date.getDate() - windowSizeInDays)\n\n if (averageWindow.length < windowSizeInDays) {\n for (; i < data.length && averageWindow.length <= windowSizeInDays; i++) {\n if (lastFound > -1) {\n for (let iter = new Date(data[lastFound].date); iter <= data[i].date; iter.setDate(iter.getDate() + 1)) {\n averageWindow.push( (data[i][key] + data[lastFound][key]) / 2 )\n }\n }\n lastFound = i\n }\n }\n\n let average = {date: new Date(date)}\n average[key] = GHDataStats.averageArray(averageWindow.slice(0, windowSizeInDays));\n averageWindow.shift()\n rolling.push(average);\n }\n return rolling\n }\n\n static convertToPercentages(data, key, baseline) {\n if (!data) {\n return []\n }\n baseline = baseline || GHDataStats.averageArray( data.map((e) => {return e[key]}) )\n data = data.map((datum) => {\n datum['value'] = (datum[key] / baseline)\n return datum\n })\n return data\n }\n\n static makeRelative(baseData, compareData, config) {\n\n config.byDate = (config.byDate != undefined)\n config.earliest = config.earliest || new Date('01-01-2005')\n config.latest = config.latest || new Date()\n config.period = config.period || 180\n\n let iter = {\n base: 0,\n compare: 0\n }\n let data = {}\n\n data['base'] = GHDataStats.rollingAverage(\n GHDataStats.convertDates(\n GHDataStats.convertKey(\n baseData, \n Object.keys(baseData[0])[1]\n ), config.earliest, config.latest\n ), undefined, config.period) \n\n data['compare'] = GHDataStats.rollingAverage(\n GHDataStats.convertDates(\n GHDataStats.convertKey(\n compareData, \n Object.keys(compareData[0])[1]\n ), config.earliest, config.latest\n ), undefined, config.period) \n\n let smaller = (data['base'][0].date < data['compare'][0].date) ? 'base' : 'compare'\n let larger = (data['base'][0].date < data['compare'][0].date) ? 'compare' : 'base'\n let result = []\n\n if (config.byDate) {\n for (; iter[smaller] < data[smaller].length; iter[smaller]++) {\n if (data['base'].date == data['compare'].date) {\n break\n }\n }\n }\n\n while (iter['base'] < data['base'].length && iter['compare'] < data['compare'].length) {\n let toPush = {\n value: data['compare'][iter.compare].value / data['base'][iter.base].value,\n }\n if (config.byDate) {\n toPush.date = data['base'][iter.base].date\n } else {\n toPush.x = iter.base\n }\n result.push(toPush)\n iter['base']++\n iter['compare']++\n }\n\n return result\n }\n\n static zscores(data, key) {\n key = key || 'value'\n let stats = GHDataStats.describe(data, key)\n return data.map((e) => {\n let newObj = {}\n if (e.date) {\n newObj.date = new Date(e.date)\n }\n let zscore = ((e[key] - stats['mean']) / stats['stddev'])\n newObj.value = zscore\n return newObj\n })\n }\n\n static combine() {\n return Array.from(arguments)\n }\n\n}",";(function(){\n'use strict';\n\nvar _LineChart = require('./charts/LineChart');\n\nvar _LineChart2 = _interopRequireDefault(_LineChart);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n components: {\n LineChart: _LineChart2.default\n },\n computed: {\n repo: function repo() {\n return this.$store.state.repo;\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('h1',[_vm._v(\"Activity\")]),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.$store.state.baseRepo))]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"commits\",\"title\":\"Commits / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"forks\",\"title\":\"Forks / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"issues\",\"title\":\"Issues / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-6\"},[_c('line-chart',{attrs:{\"source\":\"pulls\",\"title\":\"Pulls Requests / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Contributors\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"col col-6\"},[_c('line-chart',{attrs:{\"source\":\"uniqueCommitters\",\"title\":\"Unique Committers\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Contributors\",\"disableRollingAverage\":\"1\"}})],1)]),_vm._v(\" \"),_vm._m(0,false,false)])}\n__vue__options__.staticRenderFns = [function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('small',[_vm._v(\"Data provided by \"),_c('a',{attrs:{\"href\":\"http://ghtorrent.org/msr14.html\"}},[_vm._v(\"GHTorrent\")]),_vm._v(\" \"),_c('span',{staticClass:\"ghtorrent-version\"}),_vm._v(\" and the \"),_c('a',{attrs:{\"href\":\"https://developer.github.com/\"}},[_vm._v(\"GitHub API\")])])}]\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-7655e5a2\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-7655e5a2\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _LineChart = require('./charts/LineChart');\n\nvar _LineChart2 = _interopRequireDefault(_LineChart);\n\nvar _DependencyOverview = require('./charts/DependencyOverview');\n\nvar _DependencyOverview2 = _interopRequireDefault(_DependencyOverview);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n components: {\n LineChart: _LineChart2.default,\n DependencyOverview: _DependencyOverview2.default\n },\n computed: {\n repo: function repo() {\n return this.$store.state.repo;\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('h1',[_vm._v(\"Ecosystem\")]),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.$store.state.baseRepo))]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"downloads\",\"title\":\"Downloads / Day\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"stars\",\"title\":\"Stars / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('dependency-overview')],1)])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-2a4aa320\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-2a4aa320\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _LineChart = require('./charts/LineChart');\n\nvar _LineChart2 = _interopRequireDefault(_LineChart);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n props: ['comparedTo'],\n components: {\n LineChart: _LineChart2.default\n },\n computed: {\n repo: function repo() {\n return this.$store.state.repo;\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('div',{class:{ hidden: !this.repo },attrs:{\"id\":\"base-template\"}}),_vm._v(\" \"),_c('h1',[_vm._v(\"Activity Comparison\")]),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.comparedTo)+\" compared to \"+_vm._s(_vm.$store.state.baseRepo))]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"timeseries/forks\",\"title\":\"Forks / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"forks\",\"title\":\"Forks / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"issues\",\"title\":\"Issues / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"pullsAcceptanceRate\",\"title\":\"Pull Requests Created to Closed Ratio / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"uniqueCommitters\",\"title\":\"Unique Committers\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Contributors\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_vm._m(0,false,false)])}\n__vue__options__.staticRenderFns = [function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('small',[_vm._v(\"Data provided by \"),_c('a',{attrs:{\"href\":\"http://ghtorrent.org/msr14.html\"}},[_vm._v(\"GHTorrent\")]),_vm._v(\" \"),_c('span',{staticClass:\"ghtorrent-version\"}),_vm._v(\" and the \"),_c('a',{attrs:{\"href\":\"https://developer.github.com/\"}},[_vm._v(\"GitHub API\")])])}]\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-7c1c00fd\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-7c1c00fd\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _GHDataHeader = require('./GHDataHeader.vue');\n\nvar _GHDataHeader2 = _interopRequireDefault(_GHDataHeader);\n\nvar _SidebarControls = require('./SidebarControls.vue');\n\nvar _SidebarControls2 = _interopRequireDefault(_SidebarControls);\n\nvar _GHDataCards = require('./GHDataCards.vue');\n\nvar _GHDataCards2 = _interopRequireDefault(_GHDataCards);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n components: {\n 'ghdata-header': _GHDataHeader2.default,\n SidebarControls: _SidebarControls2.default,\n 'ghdata-cards': _GHDataCards2.default\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('ghdata-header'),_vm._v(\" \"),_c('div',{staticClass:\"content\"},[_c('sidebar-controls'),_vm._v(\" \"),_c('ghdata-cards')],1)],1)}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-f1292d0e\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-f1292d0e\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _BaseRepoActivityCard = require('./BaseRepoActivityCard');\n\nvar _BaseRepoActivityCard2 = _interopRequireDefault(_BaseRepoActivityCard);\n\nvar _BaseRepoEcosystemCard = require('./BaseRepoEcosystemCard');\n\nvar _BaseRepoEcosystemCard2 = _interopRequireDefault(_BaseRepoEcosystemCard);\n\nvar _ComparedRepoActivityCard = require('./ComparedRepoActivityCard');\n\nvar _ComparedRepoActivityCard2 = _interopRequireDefault(_ComparedRepoActivityCard);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n components: {\n BaseRepoActivityCard: _BaseRepoActivityCard2.default,\n BaseRepoEcosystemCard: _BaseRepoEcosystemCard2.default,\n ComparedRepoActivityCard: _ComparedRepoActivityCard2.default\n },\n computed: {\n baseRepo: function baseRepo() {\n return this.$store.state.baseRepo;\n },\n comparedRepos: function comparedRepos() {\n return this.$store.state.comparedRepos;\n }\n },\n methods: {\n onRepo: function onRepo(e) {\n this.$store.commit('setBaseRepo', {\n url: e.target.value\n });\n },\n onCompare: function onCompare(e) {\n this.$store.commit('addComparedRepo', {\n url: e.target.value\n });\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"cards\",staticClass:\"content\"},[_c('section',{class:{ hidden: _vm.baseRepo, unmaterialized: true }},[_c('h3',[_vm._v(\"Enter a GitHub URL to get started\")]),_vm._v(\" \"),_c('input',{staticClass:\"search reposearch\",attrs:{\"type\":\"text\",\"placeholder\":\"GitHub URL\"},on:{\"change\":_vm.onRepo}})]),_vm._v(\" \"),_c('div',{class:{ hidden: !_vm.baseRepo }},[_c('base-repo-activity-card'),_vm._v(\" \"),_c('base-repo-ecosystem-card')],1),_vm._v(\" \"),_vm._l((_vm.comparedRepos),function(repo){return _c('div',{class:{ hidden: !_vm.comparedRepos.length },attrs:{\"id\":\"comparisonCards\"}},[_c('compared-repo-activity-card',{attrs:{\"comparedTo\":repo}})],1)}),_vm._v(\" \"),_c('section',{class:{ hidden: !_vm.baseRepo, unmaterialized: true }},[_c('h3',[_vm._v(\"Compare repository\")]),_vm._v(\" \"),_c('input',{staticClass:\"search reposearch\",attrs:{\"type\":\"text\",\"placeholder\":\"GitHub URL\"},on:{\"change\":_vm.onCompare}})])],2)}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-323615bb\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-323615bb\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nmodule.exports = {\n methods: {\n onRepo: function onRepo(e) {\n this.$store.commit('setBaseRepo', {\n url: e.target.value\n });\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('header',{staticClass:\"hide-print\"},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"row\"},[_vm._m(0,false,false),_vm._v(\" \"),_c('div',{staticClass:\"col col-5 push-right\"},[_c('div',{staticClass:\"form-item\"},[_c('input',{staticClass:\"search reposearch\",attrs:{\"type\":\"text\",\"name\":\"headersearch\",\"placeholder\":\"GitHub URL\"},on:{\"change\":_vm.onRepo}})])])])])])}\n__vue__options__.staticRenderFns = [function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"col col-4\"},[_c('img',{attrs:{\"src\":\"static/logo.png\",\"id\":\"logo\",\"alt\":\"CHAOSS: Community Health Analytics for Open Source Software\"}})])}]\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-30d34965\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-30d34965\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nmodule.exports = {\n methods: {\n onStartDateChange: function onStartDateChange(e) {\n var _this = this;\n\n if (this.startDateTimeout) {\n clearTimeout(this.startDateTimeout);\n }\n this.startDateTimeout = setTimeout(function () {\n _this.$store.commit('setDates', {\n startDate: e.target.value\n });\n }, 500);\n },\n onEndDateChange: function onEndDateChange(e) {\n var _this2 = this;\n\n if (this.endDateTimeout) {\n clearTimeout(this.endDateTimeout);\n delete this.endDateTimeout;\n }\n this.endDateTimeout = setTimeout(function () {\n _this2.$store.commit('setDates', {\n endDate: e.target.value\n });\n }, 500);\n },\n onTrailingAverageChange: function onTrailingAverageChange(e) {\n this.$store.commit('setDates', {\n trailingAverage: e.target.value\n });\n },\n onCompareChange: function onCompareChange(e) {\n this.$store.commit('setCompare', {\n compare: e.target.value\n });\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"row\",attrs:{\"id\":\"controls\"}},[_c('div',{staticClass:\"col col-12\"},[_c('div',{staticClass:\"form\"},[_c('h4',[_vm._v(\"Base Repository\")]),_vm._v(\" \"),_c('div',{staticClass:\"form-item\"},[_c('label',[_vm._v(\"Start Date \"),_c('input',{attrs:{\"type\":\"date\"},on:{\"change\":_vm.onStartDateChange}})])]),_vm._v(\" \"),_c('div',{staticClass:\"form-item\"},[_c('label',[_vm._v(\"End Date \"),_c('input',{attrs:{\"type\":\"date\"},on:{\"change\":_vm.onEndDateChange}})])]),_vm._v(\" \"),_c('div',{staticClass:\"form-item\"},[_c('label',[_vm._v(\"Trailing Average\")]),_vm._v(\" \"),_c('div',{staticClass:\"append\"},[_c('input',{attrs:{\"type\":\"number\",\"min\":\"2\",\"id\":\"averagetimespan\",\"value\":\"180\"},on:{\"change\":_vm.onTrailingAverageChange}}),_c('span',[_vm._v(\"days\")])])]),_vm._v(\" \"),_c('h4',[_vm._v(\"Comparisons\")]),_vm._v(\" \"),_c('div',{staticClass:\"form-item form-checkboxes\"},[_c('label',{staticClass:\"checkbox\"},[_c('input',{attrs:{\"name\":\"comparebaseline\",\"value\":\"each\",\"checked\":\"\",\"type\":\"radio\"},on:{\"change\":_vm.onCompareChange}}),_vm._v(\"Z-score trailing average\")]),_vm._v(\" \"),_c('label',{staticClass:\"checkbox\"},[_c('input',{attrs:{\"name\":\"comparebaseline\",\"value\":\"percentage\",\"type\":\"radio\"},on:{\"change\":_vm.onCompareChange}}),_vm._v(\"100% is the compared project\")])])])])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-0df51156\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-0df51156\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _GHDataStats = require('../../GHDataStats');\n\nvar _GHDataStats2 = _interopRequireDefault(_GHDataStats);\n\nvar _d = require('d3');\n\nvar d3 = _interopRequireWildcard(_d);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n props: [],\n computed: {\n repo: function repo() {\n return this.$store.state.baseRepo;\n },\n dependencies: function dependencies() {\n var _this = this;\n\n if (this.repo) {\n window.GHDataRepos[this.repo].dependents().then(function (dependents) {\n _this.$refs['dependents'].innerHTML = '';\n for (var i = 0; i < dependents.length && i < 10; i++) {\n _this.$refs['dependents'].innerHTML += dependents[i].name + '
';\n }\n });\n window.GHDataRepos[this.repo].dependencies().then(function (dependencies) {\n _this.$refs['dependencies'].innerHTML = '';\n for (var i = 0; i < dependencies.dependencies.length && i < 10; i++) {\n _this.$refs['dependents'].innerHTML += dependencies.dependencies[i].name + '
';\n }\n });\n window.GHDataRepos[this.repo].dependencyStats().then(function (depstats) {\n _this.$refs['totaldependents'].innerHTML = depstats['dependent_repositories'];\n _this.$refs['totaldependencies'].innerHTML = depstats['dependencies'];\n });\n }\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Total Dependents\")]),_vm._v(\" \"),_c('div',{ref:\"totaldependents\",staticClass:\"deps\"},[_vm._v(\"\\n Loading...\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Total Dependencies\")]),_vm._v(\" \"),_c('div',{ref:\"totaldependencies\",staticClass:\"deps\"},[_vm._v(\"\\n Loading...\\n \")])])]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Top Dependents\")]),_vm._v(\" \"),_c('div',{ref:\"dependents\",staticClass:\"deps\"},[_vm._v(\"\\n Loading...\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Top Dependencies\")]),_vm._v(\" \"),_c('div',{ref:\"dependencies\",staticClass:\"deps\",domProps:{\"innerHTML\":_vm._s(_vm.dependencies)}},[_vm._v(\"\\n Loading...\\n \")])])])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-210450fe\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-210450fe\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _metricsGraphics = require('metrics-graphics');\n\nvar _metricsGraphics2 = _interopRequireDefault(_metricsGraphics);\n\nvar _GHDataStats = require('../GHDataStats');\n\nvar _GHDataStats2 = _interopRequireDefault(_GHDataStats);\n\nvar _d = require('d3');\n\nvar d3 = _interopRequireWildcard(_d);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n_metricsGraphics2.default.data_graphic({\n title: \"Missing Data\",\n error: 'Data unavaliable for ' + title,\n chart_type: 'missing-data',\n missing_text: title + ' could not be loaded',\n target: undefined.$refs.chart,\n full_width: true,\n height: 200\n});\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"chart\",staticClass:\"linechart\"})}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-ebdae2a4\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-ebdae2a4\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _d = require('d3');\n\nvar d3 = _interopRequireWildcard(_d);\n\nvar _GHDataStats = require('GHDataStats');\n\nvar _GHDataStats2 = _interopRequireDefault(_GHDataStats);\n\nvar _vuex = require('vuex');\n\nvar _metricsgraphics = require('../../include/metricsgraphics');\n\nvar _metricsgraphics2 = _interopRequireDefault(_metricsgraphics);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nconsole.log(d3);\n\nexports.default = {\n props: ['source', 'citeUrl', 'citeText', 'title', 'percentage', 'comparedTo', 'disableRollingAverage'],\n computed: {\n repo: function repo() {\n return this.$store.state.baseRepo;\n },\n period: function period() {\n return this.$store.state.trailingAverage;\n },\n earliest: function earliest() {\n return this.$store.state.startDate;\n },\n latest: function latest() {\n return this.$store.state.endDate;\n },\n compare: function compare() {\n return this.$store.state.compare;\n },\n chart: function chart() {\n var _this = this;\n\n var config = {};\n\n config.earliest = this.earliest || new Date('01-01-2005');\n config.latest = this.latest || new Date();\n config.title = this.title || \"Activity\";\n config.full_width = true;\n config.height = 200;\n config.x_accessor = 'date';\n config.format = this.percentage ? 'percentage' : undefined;\n config.compare = this.compare;\n\n\n if (this.repo) {\n if (this.$refs.chart) {\n this.$refs.chart.className = 'linechart loader';\n }\n window.GHDataRepos[this.repo][this.source]().then(function (baseData) {\n _this.$refs.chartStatus.innerHTML = '';\n if (baseData && baseData.length) {\n config.data = _GHDataStats2.default.convertDates(baseData, _this.earliest, _this.latest);\n } else {\n config.data = [];\n }\n if (_this.comparedTo) {\n return GHDataRepos[_this.comparedTo][_this.source]();\n }\n return new Promise(function (resolve, reject) {\n resolve();\n });\n }).then(function (compareData) {\n var keys = Object.keys(config.data[0]).splice(1);\n if (config.data && compareData && compareData.length) {\n if (config.compare == 'each') {\n var key = Object.keys(compareData[0])[1];\n var compare = _GHDataStats2.default.rollingAverage(_GHDataStats2.default.zscores(compareData, key), 'value', _this.period);\n var base = _GHDataStats2.default.rollingAverage(_GHDataStats2.default.zscores(config.data, key), 'value', _this.period);\n config.data = [base, compare];\n config.legend = [window.GHDataRepos[_this.repo].toString(), window.GHDataRepos[_this.comparedTo].toString()];\n config.colors = config.colors || ['#FF3647', '#999'];\n } else {\n console.log('rendering percentage');\n config.format = 'percentage';\n config.baselines = [{ value: 1, label: config.baseline }];\n config.data = _GHDataStats2.default.makeRelative(config.data, compareData, {\n earliest: config.earliest,\n latest: config.latest,\n byDate: config.byDate,\n period: _this.period\n });\n }\n } else {\n if (!_this.disableRollingAverage) {\n config.legend = config.legend || [config.title.toLowerCase(), _this.period + ' day average'];\n var rolling = _GHDataStats2.default.rollingAverage(config.data, keys[0], _this.period);\n config.data = _GHDataStats2.default.convertKey(_GHDataStats2.default.combine(config.data, rolling), keys[0]);\n config.colors = config.colors || ['#CCC', '#FF3647'];\n config.y_accessor = 'value';\n }\n }\n\n if (keys.length > 1) {\n config.legend_target = _this.$refs.legend;\n $(_this.$refs.chart).hover(function () {\n _this.$refs.legend.style.display = 'none';\n }, function () {\n _this.$refs.legend.style.display = 'block';\n });\n }\n\n _this.$refs.chart.className = 'linechart intro';\n config.target = _this.$refs.chart;\n _metricsgraphics2.default.data_graphic(config);\n });\n return '' + this.title + '...';\n }\n }\n } };\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('cite',{staticClass:\"metric\"},[_vm._v(\"Metric: \"),_c('a',{attrs:{\"href\":_vm.citeUrl,\"target\":\"_blank\"}},[_vm._v(_vm._s(_vm.citeText))])]),_vm._v(\" \"),_c('div',{ref:\"chart\",staticClass:\"linechart\"},[_c('div',{ref:\"legend\",staticClass:\"legend\"}),_vm._v(\" \"),_c('span',{ref:\"chartStatus\",domProps:{\"innerHTML\":_vm._s(_vm.chart)}})])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-4035d73d\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-4035d73d\", __vue__options__)\n }\n})()}","/*\n\tKube. CSS & JS Framework\n\tVersion 6.5.2\n\tUpdated: February 2, 2017\n\n\thttp://imperavi.com/kube/\n\n\tCopyright (c) 2009-2017, Imperavi LLC.\n\tLicense: MIT\n*/\nif (typeof jQuery === 'undefined') {throw new Error('Kube\\'s requires jQuery')};\n;(function($) { var version = $.fn.jquery.split('.'); if (version[0] == 1 && version[1] < 8) {throw new Error('Kube\\'s requires at least jQuery v1.8'); }})(jQuery);\n\n;(function()\n{\n // Inherits\n Function.prototype.inherits = function(parent)\n {\n var F = function () {};\n F.prototype = parent.prototype;\n var f = new F();\n\n for (var prop in this.prototype) f[prop] = this.prototype[prop];\n this.prototype = f;\n this.prototype.super = parent.prototype;\n };\n\n // Core Class\n var Kube = function(element, options)\n {\n options = (typeof options === 'object') ? options : {};\n\n this.$element = $(element);\n this.opts = $.extend(true, this.defaults, $.fn[this.namespace].options, this.$element.data(), options);\n this.$target = (typeof this.opts.target === 'string') ? $(this.opts.target) : null;\n };\n\n // Core Functionality\n Kube.prototype = {\n getInstance: function()\n {\n return this.$element.data('fn.' + this.namespace);\n },\n hasTarget: function()\n {\n return !(this.$target === null);\n },\n callback: function(type)\n {\n\t\tvar args = [].slice.call(arguments).splice(1);\n\n // on element callback\n if (this.$element)\n {\n args = this._fireCallback($._data(this.$element[0], 'events'), type, this.namespace, args);\n }\n\n // on target callback\n if (this.$target)\n {\n args = this._fireCallback($._data(this.$target[0], 'events'), type, this.namespace, args);\n\t\t}\n\n\t\t// opts callback\n\t\tif (this.opts && this.opts.callbacks && $.isFunction(this.opts.callbacks[type]))\n\t\t{\n return this.opts.callbacks[type].apply(this, args);\n\t\t}\n\n\t\treturn args;\n },\n _fireCallback: function(events, type, eventNamespace, args)\n {\n if (events && typeof events[type] !== 'undefined')\n {\n\t\t\tvar len = events[type].length;\n\t\t\tfor (var i = 0; i < len; i++)\n\t\t\t{\n\t\t\t\tvar namespace = events[type][i].namespace;\n\t\t\t\tif (namespace === eventNamespace)\n\t\t\t\t{\n\t\t\t\t\tvar value = events[type][i].handler.apply(this, args);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n return (typeof value === 'undefined') ? args : value;\n }\n };\n\n // Scope\n window.Kube = Kube;\n\n})();\n/**\n * @library Kube Plugin\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Plugin = {\n create: function(classname, pluginname)\n {\n pluginname = (typeof pluginname === 'undefined') ? classname.toLowerCase() : pluginname;\n\n $.fn[pluginname] = function(method, options)\n {\n var args = Array.prototype.slice.call(arguments, 1);\n var name = 'fn.' + pluginname;\n var val = [];\n\n this.each(function()\n {\n var $this = $(this), data = $this.data(name);\n options = (typeof method === 'object') ? method : options;\n\n if (!data)\n {\n // Initialization\n $this.data(name, {});\n $this.data(name, (data = new Kube[classname](this, options)));\n }\n\n // Call methods\n if (typeof method === 'string')\n {\n if ($.isFunction(data[method]))\n {\n var methodVal = data[method].apply(data, args);\n if (methodVal !== undefined)\n {\n val.push(methodVal);\n }\n }\n else\n {\n $.error('No such method \"' + method + '\" for ' + classname);\n }\n }\n\n });\n\n return (val.length === 0 || val.length === 1) ? ((val.length === 0) ? this : val[0]) : val;\n };\n\n $.fn[pluginname].options = {};\n\n return this;\n },\n autoload: function(pluginname)\n {\n var arr = pluginname.split(',');\n var len = arr.length;\n\n for (var i = 0; i < len; i++)\n {\n var name = arr[i].toLowerCase().split(',').map(function(s) { return s.trim() }).join(',');\n this.autoloadQueue.push(name);\n }\n\n return this;\n },\n autoloadQueue: [],\n startAutoload: function()\n {\n if (!window.MutationObserver || this.autoloadQueue.length === 0)\n {\n return;\n }\n\n var self = this;\n\t\tvar observer = new MutationObserver(function(mutations)\n\t\t{\n\t\t\tmutations.forEach(function(mutation)\n\t\t\t{\n\t\t\t\tvar newNodes = mutation.addedNodes;\n\t\t\t if (newNodes.length === 0 || (newNodes.length === 1 && newNodes.nodeType === 3))\n\t\t\t {\n\t\t\t\t return;\n\t\t\t\t}\n\n self.startAutoloadOnce();\n\t\t\t});\n\t\t});\n\n\t\t// pass in the target node, as well as the observer options\n\t\tobserver.observe(document, {\n\t\t\t subtree: true,\n\t\t\t childList: true\n\t\t});\n },\n startAutoloadOnce: function()\n {\n var self = this;\n var $nodes = $('[data-component]').not('[data-loaded]');\n\t\t$nodes.each(function()\n\t\t{\n\t\t\tvar $el = $(this);\n\t\t\tvar pluginname = $el.data('component');\n\n if (self.autoloadQueue.indexOf(pluginname) !== -1)\n {\n\t\t\t$el.attr('data-loaded', true);\n $el[pluginname]();\n }\n });\n\n },\n watch: function()\n {\n Kube.Plugin.startAutoloadOnce();\n Kube.Plugin.startAutoload();\n }\n };\n\n $(window).on('load', function()\n {\n Kube.Plugin.watch();\n });\n\n}(Kube));\n/**\n * @library Kube Animation\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Animation = function(element, effect, callback)\n {\n this.namespace = 'animation';\n this.defaults = {};\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.effect = effect;\n this.completeCallback = (typeof callback === 'undefined') ? false : callback;\n this.prefixes = ['', '-moz-', '-o-animation-', '-webkit-'];\n this.queue = [];\n\n this.start();\n };\n\n Kube.Animation.prototype = {\n start: function()\n {\n\t\tif (this.isSlideEffect()) this.setElementHeight();\n\n\t\t\tthis.addToQueue();\n\t\t\tthis.clean();\n\t\t\tthis.animate();\n },\n addToQueue: function()\n {\n this.queue.push(this.effect);\n },\n setElementHeight: function()\n {\n this.$element.height(this.$element.height());\n },\n removeElementHeight: function()\n {\n this.$element.css('height', '');\n },\n isSlideEffect: function()\n {\n return (this.effect === 'slideDown' || this.effect === 'slideUp');\n },\n isHideableEffect: function()\n {\n var effects = ['fadeOut', 'slideUp', 'flipOut', 'zoomOut', 'slideOutUp', 'slideOutRight', 'slideOutLeft'];\n\n\t\t\treturn ($.inArray(this.effect, effects) !== -1);\n },\n isToggleEffect: function()\n {\n return (this.effect === 'show' || this.effect === 'hide');\n },\n storeHideClasses: function()\n {\n if (this.$element.hasClass('hide-sm')) this.$element.data('hide-sm-class', true);\n else if (this.$element.hasClass('hide-md')) this.$element.data('hide-md-class', true);\n },\n revertHideClasses: function()\n {\n if (this.$element.data('hide-sm-class')) this.$element.addClass('hide-sm').removeData('hide-sm-class');\n else if (this.$element.data('hide-md-class')) this.$element.addClass('hide-md').removeData('hide-md-class');\n else this.$element.addClass('hide');\n },\n removeHideClass: function()\n {\n if (this.$element.data('hide-sm-class')) this.$element.removeClass('hide-sm');\n else if (this.$element.data('hide-md-class')) this.$element.removeClass('hide-md');\n else this.$element.removeClass('hide');\n },\n animate: function()\n {\n this.storeHideClasses();\n if (this.isToggleEffect())\n\t\t\t{\n\t\t\t\treturn this.makeSimpleEffects();\n }\n\n this.$element.addClass('kubeanimated');\n\t\t\tthis.$element.addClass(this.queue[0]);\n this.removeHideClass();\n\n\t\t\tvar _callback = (this.queue.length > 1) ? null : this.completeCallback;\n\t\t\tthis.complete('AnimationEnd', $.proxy(this.makeComplete, this), _callback);\n },\n makeSimpleEffects: function()\n {\n\t\tif (this.effect === 'show') this.removeHideClass();\n else if (this.effect === 'hide') this.revertHideClasses();\n\n if (typeof this.completeCallback === 'function') this.completeCallback(this);\n },\n\t\tmakeComplete: function()\n\t\t{\n if (this.$element.hasClass(this.queue[0]))\n {\n\t\t\t\tthis.clean();\n\t\t\t\tthis.queue.shift();\n\n\t\t\t\tif (this.queue.length) this.animate();\n\t\t\t}\n\t\t},\n complete: function(type, make, callback)\n\t\t{\n\t\tvar event = type.toLowerCase() + ' webkit' + type + ' o' + type + ' MS' + type;\n\n\t\t\tthis.$element.one(event, $.proxy(function()\n\t\t\t{\n\t\t\t\tif (typeof make === 'function') make();\n\t\t\t\tif (this.isHideableEffect()) this.revertHideClasses();\n\t\t\t\tif (this.isSlideEffect()) this.removeElementHeight();\n\t\t\t\tif (typeof callback === 'function') callback(this);\n\n\t\t\t\tthis.$element.off(event);\n\n\t\t\t}, this));\n\t\t},\n\t\tclean: function()\n\t\t{\n\t\t\tthis.$element.removeClass('kubeanimated').removeClass(this.queue[0]);\n\t\t}\n };\n\n // Inheritance\n Kube.Animation.inherits(Kube);\n\n}(Kube));\n\n// Plugin\n(function($)\n{\n $.fn.animation = function(effect, callback)\n {\n var name = 'fn.animation';\n\n return this.each(function()\n {\n var $this = $(this), data = $this.data(name);\n\n $this.data(name, {});\n $this.data(name, (data = new Kube.Animation(this, effect, callback)));\n });\n };\n\n $.fn.animation.options = {};\n\n})(jQuery);\n/**\n * @library Kube Detect\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Detect = function() {};\n\n Kube.Detect.prototype = {\n\tisMobile: function()\n\t{\n\t\treturn /(iPhone|iPod|BlackBerry|Android)/.test(navigator.userAgent);\n\t},\n\tisDesktop: function()\n\t{\n\t\treturn !/(iPhone|iPod|iPad|BlackBerry|Android)/.test(navigator.userAgent);\n\t},\n\tisMobileScreen: function()\n\t{\n\t\treturn ($(window).width() <= 768);\n\t},\n\tisTabletScreen: function()\n\t{\n\t\treturn ($(window).width() >= 768 && $(window).width() <= 1024);\n\t},\n\tisDesktopScreen: function()\n\t{\n\t\treturn ($(window).width() > 1024);\n\t}\n };\n\n\n}(Kube));\n/**\n * @library Kube FormData\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.FormData = function(app)\n {\n this.opts = app.opts;\n };\n\n Kube.FormData.prototype = {\n set: function(data)\n {\n this.data = data;\n },\n get: function(formdata)\n\t{\n\t\tthis.formdata = formdata;\n\n if (this.opts.appendForms) this.appendForms();\n if (this.opts.appendFields) this.appendFields();\n\n return this.data;\n\t},\n\tappendFields: function()\n\t{\n\t\tvar $fields = $(this.opts.appendFields);\n\t\tif ($fields.length === 0)\n\t\t{\n\t\t\treturn;\n }\n\n\t\tvar self = this;\n var str = '';\n\n if (this.formdata)\n {\n $fields.each(function()\n\t\t\t{\n\t\t\t\tself.data.append($(this).attr('name'), $(this).val());\n\t\t\t});\n }\n else\n {\n\t\t\t$fields.each(function()\n\t\t\t{\n\t\t\t\tstr += '&' + $(this).attr('name') + '=' + $(this).val();\n\t\t\t});\n\n\t\t\tthis.data = (this.data === '') ? str.replace(/^&/, '') : this.data + str;\n }\n\t},\n\tappendForms: function()\n\t{\n\t\tvar $forms = $(this.opts.appendForms);\n\t\tif ($forms.length === 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n if (this.formdata)\n {\n var self = this;\n var formsData = $(this.opts.appendForms).serializeArray();\n $.each(formsData, function(i,s)\n {\n\t\t\tself.data.append(s.name, s.value);\n });\n }\n else\n {\n var str = $forms.serialize();\n\n this.data = (this.data === '') ? str : this.data + '&' + str;\n }\n\t}\n };\n\n\n}(Kube));\n/**\n * @library Kube Response\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Response = function(app) {};\n\n Kube.Response.prototype = {\n parse: function(str)\n\t{\n\t\tif (str === '') return false;\n\n\t\tvar obj = {};\n\n\t\ttry {\n\t\t\tobj = JSON.parse(str);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (obj[0] !== undefined)\n\t\t{\n\t\t\tfor (var item in obj)\n\t\t\t{\n\t\t\t\tthis.parseItem(obj[item]);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.parseItem(obj);\n\t\t}\n\n\t\treturn obj;\n\t},\n\tparseItem: function(item)\n\t{\n\t\tif (item.type === 'value')\n\t\t{\n\t\t\t$.each(item.data, $.proxy(function(key, val)\n\t\t\t{\n\t\t\t\tval = (val === null || val === false) ? 0 : val;\n\t\t\t\tval = (val === true) ? 1 : val;\n\n\t\t\t\t$(key).val(val);\n\n\t\t\t}, this));\n\t\t}\n\t\telse if (item.type === 'html')\n\t\t{\n\t\t\t$.each(item.data, $.proxy(function(key, val)\n\t\t\t{\n\t\t\t\tval = (val === null || val === false) ? '' : val;\n\n\t\t\t\t$(key).html(this.stripslashes(val));\n\n\t\t\t}, this));\n\t\t}\n\t\telse if (item.type === 'addClass')\n\t\t{\n\t\t\t$.each(item.data, function(key, val)\n\t\t\t{\n\t\t\t\t$(key).addClass(val);\n\t\t\t});\n }\n\t\telse if (item.type === 'removeClass')\n\t\t{\n\t\t\t$.each(item.data, function(key, val)\n\t\t\t{\n\t\t\t\t$(key).removeClass(val);\n\t\t\t});\n }\n\t\telse if (item.type === 'command')\n\t\t{\n\t\t\t$.each(item.data, function(key, val)\n\t\t\t{\n\t\t\t\t$(val)[key]();\n\t\t\t});\n\t\t}\n\t\telse if (item.type === 'animation')\n\t\t{\n\t\t\t$.each(item.data, function(key, data)\n\t\t\t{\n\t\t\t\tdata.opts = (typeof data.opts === 'undefined') ? {} : data.opts;\n\n\t\t\t\t$(key).animation(data.name, data.opts);\n\t\t\t});\n\t\t}\n\t\telse if (item.type === 'location')\n\t\t{\n\t\t\ttop.location.href = item.data;\n\t\t}\n\t\telse if (item.type === 'notify')\n\t\t{\n\t\t\t$.notify(item.data);\n\t\t}\n\n\t\treturn item;\n\t},\n stripslashes: function(str)\n\t{\n\t\treturn (str+'').replace(/\\0/g, '0').replace(/\\\\([\\\\'\"])/g, '$1');\n }\n };\n\n\n}(Kube));\n/**\n * @library Kube Utils\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Utils = function() {};\n\n Kube.Utils.prototype = {\n disableBodyScroll: function()\n\t{\n\t\tvar $body = $('html');\n\t\tvar windowWidth = window.innerWidth;\n\n\t\tif (!windowWidth)\n\t\t{\n\t\t\tvar documentElementRect = document.documentElement.getBoundingClientRect();\n\t\t\twindowWidth = documentElementRect.right - Math.abs(documentElementRect.left);\n\t\t}\n\n\t\tvar isOverflowing = document.body.clientWidth < windowWidth;\n\t\tvar scrollbarWidth = this.measureScrollbar();\n\n\t\t$body.css('overflow', 'hidden');\n\t\tif (isOverflowing) $body.css('padding-right', scrollbarWidth);\n\t},\n\tmeasureScrollbar: function()\n\t{\n\t\tvar $body = $('body');\n\t\tvar scrollDiv = document.createElement('div');\n\t\tscrollDiv.className = 'scrollbar-measure';\n\n\t\t$body.append(scrollDiv);\n\t\tvar scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n\t\t$body[0].removeChild(scrollDiv);\n\t\treturn scrollbarWidth;\n\t},\n\tenableBodyScroll: function()\n\t{\n\t\t$('html').css({ 'overflow': '', 'padding-right': '' });\n\t}\n };\n\n\n}(Kube));\n/**\n * @library Kube Message\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Message = function(element, options)\n {\n this.namespace = 'message';\n this.defaults = {\n closeSelector: '.close',\n closeEvent: 'click',\n animationOpen: 'fadeIn',\n animationClose: 'fadeOut',\n callbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Message.prototype = {\n start: function()\n {\n this.$close = this.$element.find(this.opts.closeSelector);\n this.$close.on(this.opts.closeEvent + '.' + this.namespace, $.proxy(this.close, this));\n this.$element.addClass('open');\n },\n stop: function()\n {\n this.$close.off('.' + this.namespace);\n this.$element.removeClass('open');\n },\n open: function(e)\n {\n if (e) e.preventDefault();\n\n if (!this.isOpened())\n {\n this.callback('open');\n this.$element.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n }\n },\n isOpened: function()\n {\n return this.$element.hasClass('open');\n },\n onOpened: function()\n {\n this.callback('opened');\n this.$element.addClass('open');\n },\n close: function(e)\n {\n if (e) e.preventDefault();\n\n if (this.isOpened())\n {\n this.callback('close');\n this.$element.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n }\n },\n onClosed: function()\n {\n this.callback('closed');\n this.$element.removeClass('open');\n }\n };\n\n // Inheritance\n Kube.Message.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Message');\n Kube.Plugin.autoload('Message');\n\n}(Kube));\n/**\n * @library Kube Sticky\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Sticky = function(element, options)\n {\n this.namespace = 'sticky';\n this.defaults = {\n classname: 'fixed',\n offset: 0, // pixels\n callbacks: ['fixed', 'unfixed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Sticky.prototype = {\n start: function()\n {\n\t this.offsetTop = this.getOffsetTop();\n\n\t this.load();\n\t $(window).scroll($.proxy(this.load, this));\n\t},\n\tgetOffsetTop: function()\n\t{\n\t\treturn this.$element.offset().top;\n\t},\n\tload: function()\n\t{\n\t\treturn (this.isFix()) ? this.fixed() : this.unfixed();\n\t},\n\tisFix: function()\n\t{\n return ($(window).scrollTop() > (this.offsetTop + this.opts.offset));\n\t},\n\tfixed: function()\n\t{\n\t\tthis.$element.addClass(this.opts.classname).css('top', this.opts.offset + 'px');\n\t\tthis.callback('fixed');\n\t},\n\tunfixed: function()\n\t{\n\t\tthis.$element.removeClass(this.opts.classname).css('top', '');\n\t\tthis.callback('unfixed');\n }\n };\n\n // Inheritance\n Kube.Sticky.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Sticky');\n Kube.Plugin.autoload('Sticky');\n\n}(Kube));\n/**\n * @library Kube Toggleme\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Toggleme = function(element, options)\n {\n this.namespace = 'toggleme';\n this.defaults = {\n toggleEvent: 'click',\n target: null,\n text: '',\n animationOpen: 'slideDown',\n animationClose: 'slideUp',\n callbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Toggleme.prototype = {\n start: function()\n {\n if (!this.hasTarget()) return;\n\n this.$element.on(this.opts.toggleEvent + '.' + this.namespace, $.proxy(this.toggle, this));\n },\n stop: function()\n {\n this.$element.off('.' + this.namespace);\n this.revertText();\n },\n toggle: function(e)\n {\n if (this.isOpened()) this.close(e);\n else this.open(e);\n },\n open: function(e)\n {\n if (e) e.preventDefault();\n\n if (!this.isOpened())\n {\n this.storeText();\n this.callback('open');\n this.$target.animation('slideDown', $.proxy(this.onOpened, this));\n\n // changes the text of $element with a less delay to smooth\n setTimeout($.proxy(this.replaceText, this), 100);\n\t\t}\n },\n close: function(e)\n {\n if (e) e.preventDefault();\n\n if (this.isOpened())\n {\n this.callback('close');\n this.$target.animation('slideUp', $.proxy(this.onClosed, this));\n\t\t}\n },\n\tisOpened: function()\n {\n return (this.$target.hasClass('open'));\n },\n onOpened: function()\n {\n this.$target.addClass('open');\n\t\tthis.callback('opened');\n },\n onClosed: function()\n {\n this.$target.removeClass('open');\n this.revertText();\n\t\tthis.callback('closed');\n },\n storeText: function()\n {\n this.$element.data('replacement-text', this.$element.html());\n },\n revertText: function()\n {\n var text = this.$element.data('replacement-text');\n if (text) this.$element.html(text);\n\n this.$element.removeData('replacement-text');\n },\n replaceText: function()\n {\n if (this.opts.text !== '')\n {\n this.$element.html(this.opts.text);\n }\n }\n };\n\n // Inheritance\n Kube.Toggleme.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Toggleme');\n Kube.Plugin.autoload('Toggleme');\n\n}(Kube));\n/**\n * @library Kube Offcanvas\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Offcanvas = function(element, options)\n {\n this.namespace = 'offcanvas';\n this.defaults = {\n\t\ttarget: null, // selector\n\t\tpush: true, // boolean\n\t\twidth: '250px', // string\n\t\tdirection: 'left', // string: left or right\n\t\ttoggleEvent: 'click',\n\t\tclickOutside: true, // boolean\n\t\tanimationOpen: 'slideInLeft',\n\t\tanimationClose: 'slideOutLeft',\n\t\tcallbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Services\n this.utils = new Kube.Utils();\n this.detect = new Kube.Detect();\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Offcanvas.prototype = {\n start: function()\n {\n if (!this.hasTarget()) return;\n\n this.buildTargetWidth();\n this.buildAnimationDirection();\n\n this.$close = this.getCloseLink();\n this.$element.on(this.opts.toggleEvent + '.' + this.namespace, $.proxy(this.toggle, this));\n this.$target.addClass('offcanvas');\n\t},\n\tstop: function()\n\t{\n\t\tthis.closeAll();\n\n this.$element.off('.' + this.namespace);\n this.$close.off('.' + this.namespace);\n $(document).off('.' + this.namespace);\n\t},\n\ttoggle: function(e)\n\t{\n\t\tif (this.isOpened()) this.close(e);\n\t\telse this.open(e);\n },\n\tbuildTargetWidth: function()\n\t{\n this.opts.width = ($(window).width() < parseInt(this.opts.width)) ? '100%' : this.opts.width;\n\t},\n\tbuildAnimationDirection: function()\n\t{\n if (this.opts.direction === 'right')\n {\n this.opts.animationOpen = 'slideInRight';\n\t\t\tthis.opts.animationClose = 'slideOutRight';\n }\n\t},\n\tgetCloseLink: function()\n\t{\n return this.$target.find('.close');\n\t},\n\topen: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n if (!this.isOpened())\n {\n this.closeAll();\n\t\t\tthis.callback('open');\n\n this.$target.addClass('offcanvas-' + this.opts.direction);\n this.$target.css('width', this.opts.width);\n\n this.pushBody();\n\n\t\t\tthis.$target.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n\t\t}\n\t},\n\tcloseAll: function()\n\t{\n\t\tvar $elms = $(document).find('.offcanvas');\n\t\tif ($elms.length !== 0)\n\t\t{\n $elms.each(function()\n {\n var $el = $(this);\n\n if ($el.hasClass('open'))\n {\n $el.css('width', '').animation('hide');\n $el.removeClass('open offcanvas-left offcanvas-right');\n }\n\n });\n\n $(document).off('.' + this.namespace);\n $('body').css('left', '');\n\t\t}\n\t},\n\tclose: function(e)\n\t{\n\t\tif (e)\n\t\t{\n\t\tvar $el = $(e.target);\n\t\tvar isTag = ($el[0].tagName === 'A' || $el[0].tagName === 'BUTTON');\n\t\tif (isTag && $el.closest('.offcanvas').length !== 0 && !$el.hasClass('close'))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\te.preventDefault();\n }\n\n if (this.isOpened())\n\t\t{\n\t\t\tthis.utils.enableBodyScroll();\n\t\t\tthis.callback('close');\n this.pullBody();\n\t\t\tthis.$target.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n\t\t}\n\t},\n\tisOpened: function()\n {\n return (this.$target.hasClass('open'));\n },\n\tonOpened: function()\n\t{\n\t\tif (this.opts.clickOutside) $(document).on('click.' + this.namespace, $.proxy(this.close, this));\n\t\tif (this.detect.isMobileScreen()) $('html').addClass('no-scroll');\n\n $(document).on('keyup.' + this.namespace, $.proxy(this.handleKeyboard, this));\n this.$close.on('click.' + this.namespace, $.proxy(this.close, this));\n\n\t\tthis.utils.disableBodyScroll();\n this.$target.addClass('open');\n this.callback('opened');\n\t},\n\tonClosed: function()\n\t{\n\t\tif (this.detect.isMobileScreen()) $('html').removeClass('no-scroll');\n\n this.$target.css('width', '').removeClass('offcanvas-' + this.opts.direction);\n\n this.$close.off('.' + this.namespace);\n\t\t$(document).off('.' + this.namespace);\n\n this.$target.removeClass('open');\n\t\tthis.callback('closed');\n\t},\n\thandleKeyboard: function(e)\n\t{\n\t\tif (e.which === 27) this.close();\n\t},\n\tpullBody: function()\n\t{\n if (this.opts.push)\n {\n $('body').animate({ left: 0 }, 350, function() { $(this).removeClass('offcanvas-push-body'); });\n }\n\t},\n\tpushBody: function()\n\t{\n if (this.opts.push)\n {\n var properties = (this.opts.direction === 'left') ? { 'left': this.opts.width } : { 'left': '-' + this.opts.width };\n $('body').addClass('offcanvas-push-body').animate(properties, 200);\n }\n\t}\n };\n\n // Inheritance\n Kube.Offcanvas.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Offcanvas');\n Kube.Plugin.autoload('Offcanvas');\n\n}(Kube));\n/**\n * @library Kube Collapse\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Collapse = function(element, options)\n {\n this.namespace = 'collapse';\n this.defaults = {\n target: null,\n toggle: true,\n active: false, // string (hash = tab id selector)\n toggleClass: 'collapse-toggle',\n boxClass: 'collapse-box',\n callbacks: ['open', 'opened', 'close', 'closed'],\n\n // private\n hashes: [],\n\t\tcurrentHash: false,\n\t\tcurrentItem: false\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Collapse.prototype = {\n start: function()\n {\n // items\n this.$items = this.getItems();\n this.$items.each($.proxy(this.loadItems, this));\n\n // boxes\n this.$boxes = this.getBoxes();\n\n // active\n this.setActiveItem();\n },\n getItems: function()\n {\n return this.$element.find('.' + this.opts.toggleClass);\n },\n getBoxes: function()\n {\n return this.$element.find('.' + this.opts.boxClass);\n },\n\tloadItems: function(i, el)\n\t{\n\t\tvar item = this.getItem(el);\n\n\t\t// set item identificator\n\t\titem.$el.attr('rel', item.hash);\n\n // active\n\t\tif (!$(item.hash).hasClass('hide'))\n\t\t{\n\t\t\tthis.opts.currentItem = item;\n\t\t\tthis.opts.active = item.hash;\n\n item.$el.addClass('active');\n }\n\n\t\t// event\n\t\titem.$el.on('click.collapse', $.proxy(this.toggle, this));\n\n\t},\n\tsetActiveItem: function()\n\t{\n\t\tif (this.opts.active !== false)\n\t\t{\n\t\t\tthis.opts.currentItem = this.getItemBy(this.opts.active);\n\t\t\tthis.opts.active = this.opts.currentItem.hash;\n\t\t}\n\n if (this.opts.currentItem !== false)\n {\n\t\t this.addActive(this.opts.currentItem);\n\t\t this.opts.currentItem.$box.removeClass('hide');\n\t\t}\n\t},\n\taddActive: function(item)\n\t{\n\t\titem.$box.removeClass('hide').addClass('open');\n\t\titem.$el.addClass('active');\n\n\t\tif (item.$caret !== false) item.$caret.removeClass('down').addClass('up');\n\t\tif (item.$parent !== false) item.$parent.addClass('active');\n\n\t\tthis.opts.currentItem = item;\n\t},\n\tremoveActive: function(item)\n\t{\n\t\titem.$box.removeClass('open');\n\t\titem.$el.removeClass('active');\n\n\t\tif (item.$caret !== false) item.$caret.addClass('down').removeClass('up');\n\t\tif (item.$parent !== false) item.$parent.removeClass('active');\n\n\t\tthis.opts.currentItem = false;\n\t},\n toggle: function(e)\n {\n if (e) e.preventDefault();\n\n var target = $(e.target).closest('.' + this.opts.toggleClass).get(0) || e.target;\n var item = this.getItem(target);\n\n if (this.isOpened(item.hash)) this.close(item.hash);\n else this.open(e)\n },\n openAll: function()\n {\n this.$items.addClass('active');\n this.$boxes.addClass('open').removeClass('hide');\n },\n open: function(e, push)\n {\n\t\tif (typeof e === 'undefined') return;\n\t\tif (typeof e === 'object') e.preventDefault();\n\n var target = $(e.target).closest('.' + this.opts.toggleClass).get(0) || e.target;\n\t\tvar item = (typeof e === 'object') ? this.getItem(target) : this.getItemBy(e);\n\n\t\tif (item.$box.hasClass('open'))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.opts.toggle) this.closeAll();\n\n\t\tthis.callback('open', item);\n\t\tthis.addActive(item);\n\n item.$box.animation('slideDown', $.proxy(this.onOpened, this));\n },\n onOpened: function()\n {\n\t\tthis.callback('opened', this.opts.currentItem);\n },\n closeAll: function()\n {\n this.$items.removeClass('active').closest('li').removeClass('active');\n this.$boxes.removeClass('open').addClass('hide');\n },\n close: function(num)\n {\n\t\tvar item = this.getItemBy(num);\n\n\t\tthis.callback('close', item);\n\n\t\tthis.opts.currentItem = item;\n\n\t\titem.$box.animation('slideUp', $.proxy(this.onClosed, this));\n },\n onClosed: function()\n {\n var item = this.opts.currentItem;\n\n\t\tthis.removeActive(item);\n\t\tthis.callback('closed', item);\n },\n isOpened: function(hash)\n {\n return $(hash).hasClass('open');\n },\n\tgetItem: function(element)\n\t{\n\t\tvar item = {};\n\n\t\titem.$el = $(element);\n\t\titem.hash = item.$el.attr('href');\n\t\titem.$box = $(item.hash);\n\n\t\tvar $parent = item.$el.parent();\n\t\titem.$parent = ($parent[0].tagName === 'LI') ? $parent : false;\n\n\t\tvar $caret = item.$el.find('.caret');\n\t\titem.$caret = ($caret.length !== 0) ? $caret : false;\n\n\t\treturn item;\n\t},\n\tgetItemBy: function(num)\n\t{\n\t\tvar element = (typeof num === 'number') ? this.$items.eq(num-1) : this.$element.find('[rel=\"' + num + '\"]');\n\n\t\treturn this.getItem(element);\n }\n };\n\n // Inheritance\n Kube.Collapse.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Collapse');\n Kube.Plugin.autoload('Collapse');\n\n}(Kube));\n/**\n * @library Kube Dropdown\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Dropdown = function(element, options)\n {\n this.namespace = 'dropdown';\n this.defaults = {\n\t\ttarget: null,\n\t\ttoggleEvent: 'click',\n\t\theight: false, // integer\n\t\twidth: false, // integer\n\t\tanimationOpen: 'slideDown',\n\t\tanimationClose: 'slideUp',\n\t\tcaretUp: false,\n callbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Services\n this.utils = new Kube.Utils();\n this.detect = new Kube.Detect();\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Dropdown.prototype = {\n start: function()\n {\n this.buildClose();\n this.buildCaret();\n\n if (this.detect.isMobile()) this.buildMobileAnimation();\n\n this.$target.addClass('hide');\n this.$element.on(this.opts.toggleEvent + '.' + this.namespace, $.proxy(this.toggle, this));\n\n\t},\n\tstop: function()\n\t{\n\t\tthis.$element.off('.' + this.namespace);\n this.$target.removeClass('open').addClass('hide');\n\t\tthis.disableEvents();\n\t},\n\tbuildMobileAnimation: function()\n\t{\n this.opts.animationOpen = 'fadeIn';\n this.opts.animationClose = 'fadeOut';\n\t},\n\tbuildClose: function()\n\t{\n this.$close = this.$target.find('.close');\n\t},\n\tbuildCaret: function()\n\t{\n this.$caret = this.getCaret();\n\t\tthis.buildCaretPosition();\n\t},\n\tbuildCaretPosition: function()\n\t{\n\t\tvar height = this.$element.offset().top + this.$element.innerHeight() + this.$target.innerHeight();\n\n\t\tif ($(document).height() > height)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n this.opts.caretUp = true;\n\t\tthis.$caret.addClass('up');\n\t},\n\tgetCaret: function()\n\t{\n\t\treturn this.$element.find('.caret');\n\t},\n\ttoggleCaretOpen: function()\n\t{\n\t\tif (this.opts.caretUp) this.$caret.removeClass('up').addClass('down');\n\t\telse this.$caret.removeClass('down').addClass('up');\n\t},\n\ttoggleCaretClose: function()\n\t{\n\t\tif (this.opts.caretUp) this.$caret.removeClass('down').addClass('up');\n\t\telse this.$caret.removeClass('up').addClass('down');\n\t},\n\ttoggle: function(e)\n\t{\n\t\tif (this.isOpened()) this.close(e);\n\t\telse this.open(e);\n\t},\n\topen: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n this.callback('open');\n\t\t$('.dropdown').removeClass('open').addClass('hide');\n\n\t\tif (this.opts.height) this.$target.css('min-height', this.opts.height + 'px');\n\t\tif (this.opts.width) this.$target.width(this.opts.width);\n\n\t\tthis.setPosition();\n\t\tthis.toggleCaretOpen();\n\n\t\tthis.$target.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n\t},\n\tclose: function(e)\n\t{\n if (!this.isOpened())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (e)\n\t\t{\n\t\t\tif (this.shouldNotBeClosed(e.target))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tthis.utils.enableBodyScroll();\n\t\tthis.callback('close');\n\t\tthis.toggleCaretClose();\n\n\t\tthis.$target.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n\t},\n\tonClosed: function()\n\t{\n this.$target.removeClass('open');\n\t\tthis.disableEvents();\n\t\tthis.callback('closed');\n\t},\n\tonOpened: function()\n\t{\n\t\tthis.$target.addClass('open');\n\t\tthis.enableEvents();\n\t\tthis.callback('opened');\n\t},\n\tisOpened: function()\n\t{\n\t\treturn (this.$target.hasClass('open'));\n\t},\n\tenableEvents: function()\n\t{\n\t\tif (this.detect.isDesktop())\n\t\t{\n\t\t\tthis.$target.on('mouseover.' + this.namespace, $.proxy(this.utils.disableBodyScroll, this.utils))\n\t\t\t .on('mouseout.' + this.namespace, $.proxy(this.utils.enableBodyScroll, this.utils));\n\t\t}\n\n\t\t$(document).on('scroll.' + this.namespace, $.proxy(this.setPosition, this));\n\t\t$(window).on('resize.' + this.namespace, $.proxy(this.setPosition, this));\n\t\t$(document).on('click.' + this.namespace + ' touchstart.' + this.namespace, $.proxy(this.close, this));\n\t\t$(document).on('keydown.' + this.namespace, $.proxy(this.handleKeyboard, this));\n\t\tthis.$target.find('[data-action=\"dropdown-close\"]').on('click.' + this.namespace, $.proxy(this.close, this));\n\t},\n\tdisableEvents: function()\n\t{\n\t\tthis.$target.off('.' + this.namespace);\n\t\t$(document).off('.' + this.namespace);\n\t\t$(window).off('.' + this.namespace);\n\t},\n\thandleKeyboard: function(e)\n\t{\n\t\tif (e.which === 27) this.close(e);\n\t},\n\tshouldNotBeClosed: function(el)\n\t{\n if ($(el).attr('data-action') === 'dropdown-close' || el === this.$close[0])\n {\n return false;\n\t\t}\n\t\telse if ($(el).closest('.dropdown').length === 0)\n\t\t{\n\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t},\n isNavigationFixed: function()\n\t{\n\t\treturn (this.$element.closest('.fixed').length !== 0);\n\t},\n\tgetPlacement: function(height)\n\t{\n\t\treturn ($(document).height() < height) ? 'top' : 'bottom';\n\t},\n\tgetOffset: function(position)\n\t{\n\t\treturn (this.isNavigationFixed()) ? this.$element.position() : this.$element.offset();\n\t},\n\tgetPosition: function()\n\t{\n\t\treturn (this.isNavigationFixed()) ? 'fixed' : 'absolute';\n\t},\n\tsetPosition: function()\n\t{\n\t\tif (this.detect.isMobile())\n\t\t{\n this.$target.addClass('dropdown-mobile');\n return;\n\t\t}\n\n\t\tvar position = this.getPosition();\n\t\t\tvar coords = this.getOffset(position);\n\t\t\tvar height = this.$target.innerHeight();\n\t\t\tvar width = this.$target.innerWidth();\n\t\t\tvar placement = this.getPlacement(coords.top + height + this.$element.innerHeight());\n\t\t\tvar leftFix = ($(window).width() < (coords.left + width)) ? (width - this.$element.innerWidth()) : 0;\n\t\t\tvar top, left = coords.left - leftFix;\n\n\t\t\tif (placement === 'bottom')\n\t\t\t{\n\t\t\tif (!this.isOpened()) this.$caret.removeClass('up').addClass('down');\n\n\t\t\t\tthis.opts.caretUp = false;\n\t\t\t\ttop = coords.top + this.$element.outerHeight() + 1;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.opts.animationOpen = 'show';\n\t\t\t\tthis.opts.animationClose = 'hide';\n\n if (!this.isOpened()) this.$caret.addClass('up').removeClass('down');\n\n\t\t\t\tthis.opts.caretUp = true;\n\t\t\t\ttop = coords.top - height - 1;\n\t\t\t}\n\n\t\t\tthis.$target.css({ position: position, top: top + 'px', left: left + 'px' });\n\t}\n };\n\n // Inheritance\n Kube.Dropdown.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Dropdown');\n Kube.Plugin.autoload('Dropdown');\n\n}(Kube));\n/**\n * @library Kube Tabs\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Tabs = function(element, options)\n {\n this.namespace = 'tabs';\n this.defaults = {\n\t\tequals: false,\n\t\tactive: false, // string (hash = tab id selector)\n\t\tlive: false, // class selector\n\t\thash: true, //boolean\n\t\tcallbacks: ['init', 'next', 'prev', 'open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Tabs.prototype = {\n start: function()\n {\n if (this.opts.live !== false) this.buildLiveTabs();\n\n this.tabsCollection = [];\n this.hashesCollection = [];\n this.currentHash = [];\n this.currentItem = false;\n\n // items\n this.$items = this.getItems();\n this.$items.each($.proxy(this.loadItems, this));\n\n // tabs\n\t\tthis.$tabs = this.getTabs();\n\n // location hash\n\t\tthis.currentHash = this.getLocationHash();\n\n\t\t// close all\n\t\tthis.closeAll();\n\n // active & height\n\t\tthis.setActiveItem();\n\t\tthis.setItemHeight();\n\n // callback\n\t\tthis.callback('init');\n\n\t},\n\tgetTabs: function()\n\t{\n\t\treturn $(this.tabsCollection).map(function()\n\t\t{\n\t\treturn this.toArray();\n });\n\t},\n\tgetItems: function()\n\t{\n\t\treturn this.$element.find('a');\n\t},\n\tloadItems: function(i, el)\n\t{\n\t\tvar item = this.getItem(el);\n\n\t\t// set item identificator\n\t\titem.$el.attr('rel', item.hash);\n\n\t\t// collect item\n this.collectItem(item);\n\n // active\n\t\tif (item.$parent.hasClass('active'))\n\t\t{\n\t\t\tthis.currentItem = item;\n\t\t\tthis.opts.active = item.hash;\n\t\t}\n\n\t\t// event\n\t\titem.$el.on('click.tabs', $.proxy(this.open, this));\n\n\t},\n\tcollectItem: function(item)\n\t{\n\t\tthis.tabsCollection.push(item.$tab);\n\t\tthis.hashesCollection.push(item.hash);\n\t},\n\tbuildLiveTabs: function()\n\t{\n\t\tvar $layers = $(this.opts.live);\n\n\t\tif ($layers.length === 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.$liveTabsList = $('
');\n\t\t$layers.each($.proxy(this.buildLiveItem, this));\n\n\t\tthis.$element.html('').append(this.$liveTabsList);\n\n\t},\n\tbuildLiveItem: function(i, tab)\n\t{\n\t\tvar $tab = $(tab);\n\t\tvar $li = $('');\n\t\tvar $a = $('');\n\t\tvar index = i + 1;\n\n\t\t$tab.attr('id', this.getLiveItemId($tab, index));\n\n\t\tvar hash = '#' + $tab.attr('id');\n\t\tvar title = this.getLiveItemTitle($tab);\n\n\t\t$a.attr('href', hash).attr('rel', hash).text(title);\n\t\t$li.append($a);\n\n\t\tthis.$liveTabsList.append($li);\n\t},\n\tgetLiveItemId: function($tab, index)\n\t{\n\t\treturn (typeof $tab.attr('id') === 'undefined') ? this.opts.live.replace('.', '') + index : $tab.attr('id');\n\t},\n\tgetLiveItemTitle: function($tab)\n\t{\n\t\treturn (typeof $tab.attr('data-title') === 'undefined') ? $tab.attr('id') : $tab.attr('data-title');\n\t},\n\tsetActiveItem: function()\n\t{\n\t\tif (this.currentHash)\n\t\t{\n\t\t\tthis.currentItem = this.getItemBy(this.currentHash);\n\t\t\tthis.opts.active = this.currentHash;\n\t\t}\n\t\telse if (this.opts.active === false)\n\t\t{\n\t\t\tthis.currentItem = this.getItem(this.$items.first());\n\t\t\tthis.opts.active = this.currentItem.hash;\n\t\t}\n\n\t\tthis.addActive(this.currentItem);\n\t},\n\taddActive: function(item)\n\t{\n\t\titem.$parent.addClass('active');\n\t\titem.$tab.removeClass('hide').addClass('open');\n\n\t\tthis.currentItem = item;\n\t},\n\tremoveActive: function(item)\n\t{\n\t\titem.$parent.removeClass('active');\n\t\titem.$tab.addClass('hide').removeClass('open');\n\n\t\tthis.currentItem = false;\n\t},\n\tnext: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n\t\tvar item = this.getItem(this.fetchElement('next'));\n\n\t\tthis.open(item.hash);\n\t\tthis.callback('next', item);\n\n\t},\n\tprev: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n\t\tvar item = this.getItem(this.fetchElement('prev'));\n\n\t\tthis.open(item.hash);\n\t\tthis.callback('prev', item);\n\t},\n\tfetchElement: function(type)\n\t{\n var element;\n\t\tif (this.currentItem !== false)\n\t\t{\n\t\t\t// prev or next\n\t\t\telement = this.currentItem.$parent[type]().find('a');\n\n\t\t\tif (element.length === 0)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// first\n\t\t\telement = this.$items[0];\n\t\t}\n\n\t\treturn element;\n\t},\n\topen: function(e, push)\n\t{\n\t\tif (typeof e === 'undefined') return;\n\t\tif (typeof e === 'object') e.preventDefault();\n\n\t\tvar item = (typeof e === 'object') ? this.getItem(e.target) : this.getItemBy(e);\n\t\tthis.closeAll();\n\n\t\tthis.callback('open', item);\n\t\tthis.addActive(item);\n\n\t\t// push state (doesn't need to push at the start)\n this.pushStateOpen(push, item);\n\t\tthis.callback('opened', item);\n\t},\n\tpushStateOpen: function(push, item)\n\t{\n\t\tif (push !== false && this.opts.hash !== false)\n\t\t{\n\t\t\thistory.pushState(false, false, item.hash);\n\t\t}\n\t},\n\tclose: function(num)\n\t{\n\t\tvar item = this.getItemBy(num);\n\n\t\tif (!item.$parent.hasClass('active'))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.callback('close', item);\n\t\tthis.removeActive(item);\n\t\tthis.pushStateClose();\n\t\tthis.callback('closed', item);\n\n\t},\n\tpushStateClose: function()\n\t{\n if (this.opts.hash !== false)\n {\n\t\t\thistory.pushState(false, false, ' ');\n\t\t}\n\t},\n\tcloseAll: function()\n\t{\n\t\tthis.$tabs.removeClass('open').addClass('hide');\n\t\tthis.$items.parent().removeClass('active');\n\t},\n\tgetItem: function(element)\n\t{\n\t\tvar item = {};\n\n\t\titem.$el = $(element);\n\t\titem.hash = item.$el.attr('href');\n\t\titem.$parent = item.$el.parent();\n\t\titem.$tab = $(item.hash);\n\n\t\treturn item;\n\t},\n\tgetItemBy: function(num)\n\t{\n\t\tvar element = (typeof num === 'number') ? this.$items.eq(num-1) : this.$element.find('[rel=\"' + num + '\"]');\n\n\t\treturn this.getItem(element);\n\t},\n\tgetLocationHash: function()\n\t{\n\t\tif (this.opts.hash === false)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn (this.isHash()) ? top.location.hash : false;\n\t},\n\tisHash: function()\n\t{\n\t\treturn !(top.location.hash === '' || $.inArray(top.location.hash, this.hashesCollection) === -1);\n\t},\n\tsetItemHeight: function()\n\t{\n\t\tif (this.opts.equals)\n\t\t{\n\t\tvar minHeight = this.getItemMaxHeight() + 'px';\n\t\t\tthis.$tabs.css('min-height', minHeight);\n\t\t}\n\t},\n\tgetItemMaxHeight: function()\n\t{\n\t\tvar max = 0;\n\t\tthis.$tabs.each(function()\n\t\t{\n\t\t\tvar h = $(this).height();\n\t\t\tmax = h > max ? h : max;\n\t\t});\n\n\t\treturn max;\n\t}\n };\n\n // Inheritance\n Kube.Tabs.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Tabs');\n Kube.Plugin.autoload('Tabs');\n\n}(Kube));\n/**\n * @library Kube Modal\n * @author Imperavi LLC\n * @license MIT\n */\n(function($)\n{\n $.modalcurrent = null;\n\t$.modalwindow = function(options)\n\t{\n\tvar opts = $.extend({}, options, { show: true });\n\tvar $element = $('');\n\n\t$element.modal(opts);\n\t};\n\n})(jQuery);\n\n(function(Kube)\n{\n Kube.Modal = function(element, options)\n {\n this.namespace = 'modal';\n this.defaults = {\n target: null,\n show: false,\n\t\turl: false,\n\t\theader: false,\n\t\twidth: '600px', // string\n\t\theight: false, // or string\n\t\tmaxHeight: false,\n\t\tposition: 'center', // top or center\n\t\toverlay: true,\n\t\tappendForms: false,\n\t\tappendFields: false,\n\t\tanimationOpen: 'show',\n\t\tanimationClose: 'hide',\n\t\tcallbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Services\n this.utils = new Kube.Utils();\n this.detect = new Kube.Detect();\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Modal.prototype = {\n start: function()\n {\n if (!this.hasTarget())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n if (this.opts.show) this.load();\n\t\telse this.$element.on('click.' + this.namespace, $.proxy(this.load, this));\n\t},\n\tbuildModal: function()\n\t{\n\t\tthis.$modal = this.$target.find('.modal');\n\t\tthis.$header = this.$target.find('.modal-header');\n\t\tthis.$close = this.$target.find('.close');\n\t\tthis.$body = this.$target.find('.modal-body');\n\t},\n\tbuildOverlay: function()\n\t{\n\t\tif (this.opts.overlay === false)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif ($('#modal-overlay').length !== 0)\n\t\t{\n\t\t\tthis.$overlay = $('#modal-overlay');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.$overlay = $('').addClass('hide');\n\t\t\t$('body').prepend(this.$overlay);\n\t\t}\n\n\t\tthis.$overlay.addClass('overlay');\n\t},\n\tbuildHeader: function()\n\t{\n\t\tif (this.opts.header) this.$header.html(this.opts.header);\n\t},\n\tload: function(e)\n\t{\n\t\tthis.buildModal();\n\t\tthis.buildOverlay();\n\t\tthis.buildHeader();\n\n if (this.opts.url) this.buildContent();\n else this.open(e);\n\t},\n\topen: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n if (this.isOpened())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.detect.isMobile()) this.opts.width = '96%';\n\t\tif (this.opts.overlay) this.$overlay.removeClass('hide');\n\n\t\tthis.$target.removeClass('hide');\n\t\tthis.$modal.removeClass('hide');\n\n this.enableEvents();\n\t\tthis.findActions();\n\n\t\tthis.resize();\n\t\t$(window).on('resize.' + this.namespace, $.proxy(this.resize, this));\n\n\t\tif (this.detect.isDesktop()) this.utils.disableBodyScroll();\n\n\t\t// enter\n\t\tthis.$modal.find('input[type=text],input[type=url],input[type=email]').on('keydown.' + this.namespace, $.proxy(this.handleEnter, this));\n\n\t\tthis.callback('open');\n\t\tthis.$modal.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n },\n close: function(e)\n {\n if (!this.$modal || !this.isOpened())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (e)\n\t\t{\n\t\t\tif (this.shouldNotBeClosed(e.target))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tthis.callback('close');\n\t\tthis.disableEvents();\n\n\t\tthis.$modal.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n\n if (this.opts.overlay) this.$overlay.animation(this.opts.animationClose);\n },\n\tonOpened: function()\n\t{\n\t\tthis.$modal.addClass('open');\n this.callback('opened');\n\n $.modalcurrent = this;\n\t},\n\tonClosed: function()\n\t{\n\t\tthis.callback('closed');\n\n this.$target.addClass('hide');\n this.$modal.removeClass('open');\n\n\t\tif (this.detect.isDesktop()) this.utils.enableBodyScroll();\n\n\t\tthis.$body.css('height', '');\n $.modalcurrent = null;\n\t},\n\tisOpened: function()\n\t{\n\t\treturn (this.$modal.hasClass('open'));\n\t},\n\tgetData: function()\n\t{\n var formdata = new Kube.FormData(this);\n formdata.set('');\n\n return formdata.get();\n\t},\n\tbuildContent: function()\n\t{\n\t\t$.ajax({\n\t\t\turl: this.opts.url + '?' + new Date().getTime(),\n\t\t\tcache: false,\n\t\t\ttype: 'post',\n\t\t\tdata: this.getData(),\n\t\t\tsuccess: $.proxy(function(data)\n\t\t\t{\n\t\t\t\tthis.$body.html(data);\n\t\t\t\tthis.open();\n\n\t\t\t}, this)\n\t\t});\n\t},\n\tbuildWidth: function()\n\t{\n\t\tvar width = this.opts.width;\n\t\tvar top = '2%';\n\t\tvar bottom = '2%';\n\t\tvar percent = width.match(/%$/);\n\n\t\tif ((parseInt(this.opts.width) > $(window).width()) && !percent)\n\t\t{\n width = '96%';\n\t\t}\n\t\telse if (!percent)\n\t\t{\n top = '16px';\n bottom = '16px';\n\t\t}\n\n\t\tthis.$modal.css({ 'width': width, 'margin-top': top, 'margin-bottom': bottom });\n\n\t},\n\tbuildPosition: function()\n\t{\n\t\tif (this.opts.position !== 'center')\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tvar windowHeight = $(window).height();\n\t\tvar height = this.$modal.outerHeight();\n\t\tvar top = (windowHeight/2 - height/2) + 'px';\n\n\t\tif (this.detect.isMobile()) top = '2%';\n\t\telse if (height > windowHeight) top = '16px';\n\n\t\tthis.$modal.css('margin-top', top);\n\t},\n\tbuildHeight: function()\n\t{\n\t\tvar windowHeight = $(window).height();\n\n\t\tif (this.opts.maxHeight)\n\t\t{\n\t\t\tvar padding = parseInt(this.$body.css('padding-top')) + parseInt(this.$body.css('padding-bottom'));\n\t\t\tvar margin = parseInt(this.$modal.css('margin-top')) + parseInt(this.$modal.css('margin-bottom'));\n\t\t\tvar height = windowHeight - this.$header.innerHeight() - padding - margin;\n\n\t\t\tthis.$body.height(height);\n\t\t}\n\t\telse if (this.opts.height !== false)\n\t\t{\n\t\t\tthis.$body.css('height', this.opts.height);\n\t\t}\n\n\t\tvar modalHeight = this.$modal.outerHeight();\n\t\tif (modalHeight > windowHeight)\n\t\t{\n\t\t\tthis.opts.animationOpen = 'show';\n\t\t\tthis.opts.animationClose = 'hide';\n\t\t}\n\t},\n\tresize: function()\n\t{\n\t\tthis.buildWidth();\n\t\tthis.buildPosition();\n\t\tthis.buildHeight();\n\t},\n\tenableEvents: function()\n\t{\n\t\tthis.$close.on('click.' + this.namespace, $.proxy(this.close, this));\n\t\t$(document).on('keyup.' + this.namespace, $.proxy(this.handleEscape, this));\n\t\tthis.$target.on('click.' + this.namespace, $.proxy(this.close, this));\n\t},\n\tdisableEvents: function()\n\t{\n\t\tthis.$close.off('.' + this.namespace);\n\t\t$(document).off('.' + this.namespace);\n\t\tthis.$target.off('.' + this.namespace);\n\t\t$(window).off('.' + this.namespace);\n\t},\n\tfindActions: function()\n\t{\n\t\tthis.$body.find('[data-action=\"modal-close\"]').on('mousedown.' + this.namespace, $.proxy(this.close, this));\n\t},\n\tsetHeader: function(header)\n\t{\n\t\tthis.$header.html(header);\n\t},\n\tsetContent: function(content)\n\t{\n\t\tthis.$body.html(content);\n\t},\n\tsetWidth: function(width)\n\t{\n\t\tthis.opts.width = width;\n\t\tthis.resize();\n\t},\n\tgetModal: function()\n\t{\n return this.$modal;\n\t},\n\tgetBody: function()\n\t{\n return this.$body;\n\t},\n\tgetHeader: function()\n\t{\n return this.$header;\n\t},\n\thandleEnter: function(e)\n\t{\n\t\tif (e.which === 13)\n\t\t{\n\t\te.preventDefault();\n\t\tthis.close(false);\n }\n\t},\n\thandleEscape: function(e)\n\t{\n\t\treturn (e.which === 27) ? this.close(false) : true;\n\t},\n\tshouldNotBeClosed: function(el)\n\t{\n if ($(el).attr('data-action') === 'modal-close' || el === this.$close[0])\n {\n return false;\n\t\t}\n\t\telse if ($(el).closest('.modal').length === 0)\n\t\t{\n\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n };\n\n // Inheritance\n Kube.Modal.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Modal');\n Kube.Plugin.autoload('Modal');\n\n}(Kube));","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define(['d3'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('d3'));\n } else {\n root.MG = factory(root.d3);\n }\n}(this, function(d3) {\n(typeof window === 'undefined' ? global : window).MG = {version: '2.11'};\n\n//a set of helper functions, some that we've written, others that we've borrowed\n\nMG.convert = {};\n\nMG.convert.date = function(data, accessor, time_format) {\n time_format = (typeof time_format === \"undefined\") ? '%Y-%m-%d' : time_format;\n var parse_time = d3.timeParse(time_format);\n data = data.map(function(d) {\n d[accessor] = parse_time(d[accessor].trim());\n return d;\n });\n\n return data;\n}\n\nMG.convert.number = function(data, accessor) {\n data = data.map(function(d) {\n d[accessor] = Number(d[accessor]);\n return d;\n });\n\n return data;\n}\n\nMG.time_format = function(utc, specifier) {\n return utc ? d3.utcFormat(specifier) : d3.timeFormat(specifier);\n}\n\nfunction mg_jquery_exists() {\n if (typeof jQuery !== 'undefined' || typeof $ !== 'undefined') {\n return true;\n } else {\n return false;\n }\n}\n\nfunction mg_get_rollover_time_format(args) {\n var fmt;\n switch (args.processed.x_time_frame) {\n case 'millis':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %H:%M:%S.%L');\n break;\n case 'seconds':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %H:%M:%S');\n break;\n case 'less-than-a-day':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %I:%M%p');\n break;\n case 'four-days':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %I:%M%p');\n break;\n default:\n fmt = MG.time_format(args.utc_time, '%b %e, %Y');\n }\n return fmt;\n}\n\nfunction mg_data_in_plot_bounds(datum, args) {\n return datum[args.x_accessor] >= args.processed.min_x &&\n datum[args.x_accessor] <= args.processed.max_x &&\n datum[args.y_accessor] >= args.processed.min_y &&\n datum[args.y_accessor] <= args.processed.max_y;\n}\n\nfunction is_array(thing) {\n return Object.prototype.toString.call(thing) === '[object Array]';\n}\n\nfunction is_function(thing) {\n return Object.prototype.toString.call(thing) === '[object Function]';\n}\n\nfunction is_empty_array(thing) {\n return is_array(thing) && thing.length === 0;\n}\n\nfunction is_object(thing) {\n return Object.prototype.toString.call(thing) === '[object Object]';\n}\n\nfunction is_array_of_arrays(data) {\n var all_elements = data.map(function(d) {\n return is_array(d) === true && d.length > 0;\n });\n\n return d3.sum(all_elements) === data.length;\n}\n\nfunction is_array_of_objects(data) {\n // is every element of data an object?\n var all_elements = data.map(function(d) {\n return is_object(d) === true;\n });\n\n return d3.sum(all_elements) === data.length;\n}\n\nfunction is_array_of_objects_or_empty(data) {\n return is_empty_array(data) || is_array_of_objects(data);\n}\n\nfunction pluck(arr, accessor) {\n return arr.map(function(d) {\n return d[accessor] });\n}\n\nfunction count_array_elements(arr) {\n return arr.reduce(function(a, b) { a[b] = a[b] + 1 || 1;\n return a; }, {});\n}\n\nfunction mg_get_bottom(args) {\n return args.height - args.bottom;\n}\n\nfunction mg_get_plot_bottom(args) {\n // returns the pixel location of the bottom side of the plot area.\n return mg_get_bottom(args) - args.buffer;\n}\n\nfunction mg_get_top(args) {\n return args.top;\n}\n\nfunction mg_get_plot_top(args) {\n // returns the pixel location of the top side of the plot area.\n return mg_get_top(args) + args.buffer;\n}\n\nfunction mg_get_left(args) {\n return args.left;\n}\n\nfunction mg_get_plot_left(args) {\n // returns the pixel location of the left side of the plot area.\n return mg_get_left(args) + args.buffer;\n}\n\nfunction mg_get_right(args) {\n return args.width - args.right;\n}\n\nfunction mg_get_plot_right(args) {\n // returns the pixel location of the right side of the plot area.\n return mg_get_right(args) - args.buffer;\n}\n\n//////// adding elements, removing elements /////////////\n\nfunction mg_exit_and_remove(elem) {\n elem.exit().remove();\n}\n\nfunction mg_selectAll_and_remove(svg, cl) {\n svg.selectAll(cl).remove();\n}\n\nfunction mg_add_g(svg, cl) {\n return svg.append('g').classed(cl, true);\n}\n\nfunction mg_remove_element(svg, elem) {\n svg.select(elem).remove();\n}\n\n//////// axis helper functions ////////////\n\nfunction mg_make_rug(args, rug_class) {\n var svg = mg_get_svg_child_of(args.target);\n var all_data = mg_flatten_array(args.data);\n var rug = svg.selectAll('line.' + rug_class).data(all_data);\n\n rug.enter()\n .append('line')\n .attr('class', rug_class)\n .attr('opacity', 0.3);\n\n //remove rug elements that are no longer in use\n mg_exit_and_remove(rug);\n\n //set coordinates of new rug elements\n mg_exit_and_remove(rug);\n return rug;\n}\n\nfunction mg_add_color_accessor_to_rug(rug, args, rug_mono_class) {\n if (args.color_accessor) {\n rug.attr('stroke', args.scalefns.colorf);\n rug.classed(rug_mono_class, false);\n } else {\n rug.attr('stroke', null);\n rug.classed(rug_mono_class, true);\n }\n}\n\nfunction mg_rotate_labels(labels, rotation_degree) {\n if (rotation_degree) {\n labels.attr({\n dy: 0,\n transform: function() {\n var elem = d3.select(this);\n return 'rotate(' + rotation_degree + ' ' + elem.attr('x') + ',' + elem.attr('y') + ')';\n }\n });\n }\n}\n\n//////////////////////////////////////////////////\n\nfunction mg_elements_are_overlapping(labels) {\n labels = labels.node();\n if (!labels) {\n return false;\n }\n\n for (var i = 0; i < labels.length; i++) {\n if (mg_is_horizontally_overlapping(labels[i], labels)) return true;\n }\n\n return false;\n}\n\nfunction mg_prevent_horizontal_overlap(labels, args) {\n if (!labels || labels.length == 1) {\n return;\n }\n\n //see if each of our labels overlaps any of the other labels\n for (var i = 0; i < labels.length; i++) {\n //if so, nudge it up a bit, if the label it intersects hasn't already been nudged\n if (mg_is_horizontally_overlapping(labels[i], labels)) {\n var node = d3.select(labels[i]);\n var newY = +node.attr('y');\n if (newY + 8 >= args.top) {\n newY = args.top - 16;\n }\n node.attr('y', newY);\n }\n }\n}\n\nfunction mg_prevent_vertical_overlap(labels, args) {\n if (!labels || labels.length == 1) {\n return;\n }\n\n labels.sort(function(b, a) {\n return d3.select(a).attr('y') - d3.select(b).attr('y');\n });\n\n labels.reverse();\n\n var overlap_amount, label_i, label_j;\n\n //see if each of our labels overlaps any of the other labels\n for (var i = 0; i < labels.length; i++) {\n //if so, nudge it up a bit, if the label it intersects hasn't already been nudged\n label_i = d3.select(labels[i]).text();\n\n for (var j = 0; j < labels.length; j++) {\n label_j = d3.select(labels[j]).text();\n overlap_amount = mg_is_vertically_overlapping(labels[i], labels[j]);\n\n if (overlap_amount !== false && label_i !== label_j) {\n var node = d3.select(labels[i]);\n var newY = +node.attr('y');\n newY = newY + overlap_amount;\n node.attr('y', newY);\n }\n }\n }\n}\n\nfunction mg_is_vertically_overlapping(element, sibling) {\n var element_bbox = element.getBoundingClientRect();\n var sibling_bbox = sibling.getBoundingClientRect();\n\n if (element_bbox.top <= sibling_bbox.bottom && element_bbox.top >= sibling_bbox.top) {\n return sibling_bbox.bottom - element_bbox.top;\n }\n\n return false;\n}\n\nfunction mg_is_horiz_overlap(element, sibling) {\n var element_bbox = element.getBoundingClientRect();\n var sibling_bbox = sibling.getBoundingClientRect();\n\n if (element_bbox.right >= sibling_bbox.left || element_bbox.top >= sibling_bbox.top) {\n return sibling_bbox.bottom - element_bbox.top;\n }\n return false;\n}\n\nfunction mg_is_horizontally_overlapping(element, labels) {\n var element_bbox = element.getBoundingClientRect();\n\n for (var i = 0; i < labels.length; i++) {\n if (labels[i] == element) {\n continue;\n }\n\n //check to see if this label overlaps with any of the other labels\n var sibling_bbox = labels[i].getBoundingClientRect();\n if (element_bbox.top === sibling_bbox.top &&\n !(sibling_bbox.left > element_bbox.right || sibling_bbox.right < element_bbox.left)\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction mg_infer_type(args, ns) {\n // must return categorical or numerical.\n var testPoint = mg_flatten_array(args.data);\n\n testPoint = testPoint[0][args[ns + '_accessor']];\n return typeof testPoint === 'string' ? 'categorical' : 'numerical';\n }\n\nfunction mg_get_svg_child_of(selector_or_node) {\n return d3.select(selector_or_node).select('svg');\n}\n\nfunction mg_flatten_array(arr) {\n var flat_data = [];\n return flat_data.concat.apply(flat_data, arr);\n}\n\nfunction mg_next_id() {\n if (typeof MG._next_elem_id === 'undefined') {\n MG._next_elem_id = 0;\n }\n\n return 'mg-' + (MG._next_elem_id++);\n}\n\nfunction mg_target_ref(target) {\n if (typeof target === 'string') {\n return mg_normalize(target);\n\n } else if (target instanceof window.HTMLElement) {\n var target_ref = target.getAttribute('data-mg-uid');\n if (!target_ref) {\n target_ref = mg_next_id();\n target.setAttribute('data-mg-uid', target_ref);\n }\n\n return target_ref;\n\n } else {\n console.warn('The specified target should be a string or an HTMLElement.', target);\n return mg_normalize(target);\n }\n}\n\nfunction mg_normalize(string) {\n return string\n .replace(/[^a-zA-Z0-9 _-]+/g, '')\n .replace(/ +?/g, '');\n}\n\nfunction get_pixel_dimension(target, dimension) {\n return Number(d3.select(target).style(dimension).replace(/px/g, ''));\n}\n\nfunction get_width(target) {\n return get_pixel_dimension(target, 'width');\n}\n\nfunction get_height(target) {\n return get_pixel_dimension(target, 'height');\n}\n\nfunction isNumeric(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\n\nvar each = function(obj, iterator, context) {\n // yanked out of underscore\n var breaker = {};\n if (obj === null) return obj;\n if (Array.prototype.forEach && obj.forEach === Array.prototype.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length === +obj.length) {\n for (var i = 0, length = obj.length; i < length; i++) {\n if (iterator.call(context, obj[i], i, obj) === breaker) return;\n }\n } else {\n for (var k in obj) {\n if (iterator.call(context, obj[k], k, obj) === breaker) return;\n }\n }\n\n return obj;\n};\n\nfunction merge_with_defaults(obj) {\n // taken from underscore\n each(Array.prototype.slice.call(arguments, 1), function(source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === void 0) obj[prop] = source[prop];\n }\n }\n });\n\n return obj;\n}\n\nMG.merge_with_defaults = merge_with_defaults;\n\nfunction number_of_values(data, accessor, value) {\n var values = data.filter(function(d) {\n return d[accessor] === value;\n });\n\n return values.length;\n}\n\nfunction has_values_below(data, accessor, value) {\n var values = data.filter(function(d) {\n return d[accessor] <= value;\n });\n\n return values.length > 0;\n}\n\nfunction has_too_many_zeros(data, accessor, zero_count) {\n return number_of_values(data, accessor, 0) >= zero_count;\n}\n\nfunction mg_is_date(obj) {\n return Object.prototype.toString.call(obj) === '[object Date]';\n}\n\nfunction mg_is_object(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nfunction mg_is_array(obj) {\n if (Array.isArray) {\n return Array.isArray(obj);\n }\n\n return Object.prototype.toString.call(obj) === '[object Array]';\n}\n\nfunction mg_is_function(obj) {\n return Object.prototype.toString.call(obj) === '[object Function]';\n}\n\n// deep copy\n// http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object\nMG.clone = function(obj) {\n var copy;\n\n // Handle the 3 simple types, and null or undefined\n if (null === obj || \"object\" !== typeof obj) return obj;\n\n // Handle Date\n if (mg_is_date(obj)) {\n copy = new Date();\n copy.setTime(obj.getTime());\n return copy;\n }\n\n // Handle Array\n if (mg_is_array(obj)) {\n copy = [];\n for (var i = 0, len = obj.length; i < len; i++) {\n copy[i] = MG.clone(obj[i]);\n }\n return copy;\n }\n\n // Handle Object\n if (mg_is_object(obj)) {\n copy = {};\n for (var attr in obj) {\n if (obj.hasOwnProperty(attr)) copy[attr] = MG.clone(obj[attr]);\n }\n return copy;\n }\n\n throw new Error(\"Unable to copy obj! Its type isn't supported.\");\n};\n\n// give us the difference of two int arrays\n// http://radu.cotescu.com/javascript-diff-function/\nfunction arr_diff(a, b) {\n var seen = [],\n diff = [],\n i;\n for (i = 0; i < b.length; i++)\n seen[b[i]] = true;\n for (i = 0; i < a.length; i++)\n if (!seen[a[i]])\n diff.push(a[i]);\n return diff;\n}\n\nMG.arr_diff = arr_diff;\n\n/**\n Print warning message to the console when a feature has been scheduled for removal\n\n @author Dan de Havilland (github.com/dandehavilland)\n @date 2014-12\n*/\nfunction warn_deprecation(message, untilVersion) {\n console.warn('Deprecation: ' + message + (untilVersion ? '. This feature will be removed in ' + untilVersion + '.' : ' the near future.'));\n console.trace();\n}\n\nMG.warn_deprecation = warn_deprecation;\n\n/**\n Truncate a string to fit within an SVG text node\n CSS text-overlow doesn't apply to SVG <= 1.2\n\n @author Dan de Havilland (github.com/dandehavilland)\n @date 2014-12-02\n*/\nfunction truncate_text(textObj, textString, width) {\n var bbox,\n position = 0;\n\n textObj.textContent = textString;\n bbox = textObj.getBBox();\n\n while (bbox.width > width) {\n textObj.textContent = textString.slice(0, --position) + '...';\n bbox = textObj.getBBox();\n\n if (textObj.textContent === '...') {\n break;\n }\n }\n}\n\nMG.truncate_text = truncate_text;\n\n/**\n Wrap the contents of a text node to a specific width\n\n Adapted from bl.ocks.org/mbostock/7555321\n\n @author Mike Bostock\n @author Dan de Havilland\n @date 2015-01-14\n*/\nfunction wrap_text(text, width, token, tspanAttrs) {\n text.each(function() {\n var text = d3.select(this),\n words = text.text().split(token || /\\s+/).reverse(),\n word,\n line = [],\n lineNumber = 0,\n lineHeight = 1.1, // ems\n y = text.attr(\"y\"),\n dy = 0,\n tspan = text.text(null)\n .append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"y\", dy + \"em\")\n .attr(tspanAttrs || {});\n\n while (!!(word = words.pop())) {\n line.push(word);\n tspan.text(line.join(\" \"));\n if (width === null || tspan.node().getComputedTextLength() > width) {\n line.pop();\n tspan.text(line.join(\" \"));\n line = [word];\n tspan = text\n .append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"y\", ++lineNumber * lineHeight + dy + \"em\")\n .attr(tspanAttrs || {})\n .text(word);\n }\n }\n });\n}\n\nMG.wrap_text = wrap_text;\n\nfunction register(chartType, descriptor, defaults) {\n MG.charts[chartType] = {\n descriptor: descriptor,\n defaults: defaults || {}\n };\n}\n\nMG.register = register;\n\n/**\n Record of all registered hooks.\n For internal use only.\n*/\nMG._hooks = {};\n\n/**\n Add a hook callthrough to the stack.\n\n Hooks are executed in the order that they were registered.\n*/\nMG.add_hook = function(name, func, context) {\n var hooks;\n\n if (!MG._hooks[name]) {\n MG._hooks[name] = [];\n }\n\n hooks = MG._hooks[name];\n\n var already_registered =\n hooks.filter(function(hook) {\n return hook.func === func;\n })\n .length > 0;\n\n if (already_registered) {\n throw 'That function is already registered.';\n }\n\n hooks.push({\n func: func,\n context: context\n });\n};\n\n/**\n Execute registered hooks.\n\n Optional arguments\n*/\nMG.call_hook = function(name) {\n var hooks = MG._hooks[name],\n result = [].slice.apply(arguments, [1]),\n processed;\n\n if (hooks) {\n hooks.forEach(function(hook) {\n if (hook.func) {\n var params = processed || result;\n\n if (params && params.constructor !== Array) {\n params = [params];\n }\n\n params = [].concat.apply([], params);\n processed = hook.func.apply(hook.context, params);\n }\n });\n }\n\n return processed || result;\n};\n\nMG.globals = {};\nMG.deprecations = {\n rollover_callback: { replacement: 'mouseover', version: '2.0' },\n rollout_callback: { replacement: 'mouseout', version: '2.0' },\n x_rollover_format: { replacement: 'x_mouseover', version: '2.10' },\n y_rollover_format: { replacement: 'y_mouseover', version: '2.10' },\n show_years: { replacement: 'show_secondary_x_label', version: '2.1' },\n xax_start_at_min: { replacement: 'axes_not_compact', version: '2.7' },\n interpolate_tension: { replacement: 'interpolate', version: '2.10' }\n};\nMG.globals.link = false;\nMG.globals.version = \"1.1\";\n\nMG.charts = {};\n\nMG.data_graphic = function(args) {\n 'use strict';\n var defaults = {\n missing_is_zero: false, // if true, missing values will be treated as zeros\n missing_is_hidden: false, // if true, missing values will appear as broken segments\n missing_is_hidden_accessor: null, // the accessor that determines the boolean value for missing data points\n legend: '' , // an array identifying the labels for a chart's lines\n legend_target: '', // if set, the specified element is populated with a legend\n error: '', // if set, a graph will show an error icon and log the error to the console\n animate_on_load: false, // animate lines on load\n top: 65, // the size of the top margin\n title_y_position: 10, // how many pixels from the top edge (0) should we show the title at\n center_title_full_width: false, // center the title over the full graph (i.e. ignore left and right margins)\n bottom: 45, // the size of the bottom margin\n right: 10, // size of the right margin\n left: 50, // size of the left margin\n buffer: 8, // the buffer between the actual chart area and the margins\n width: 350, // the width of the entire graphic\n height: 220, // the height of the entire graphic\n full_width: false, // sets the graphic width to be the width of the parent element and resizes dynamically\n full_height: false, // sets the graphic width to be the width of the parent element and resizes dynamically\n small_height_threshold: 120, // the height threshold for when smaller text appears\n small_width_threshold: 160, // the width threshold for when smaller text appears\n xax_count: 6, // number of x axis ticks\n xax_tick_length: 5, // x axis tick length\n axes_not_compact: true,\n yax_count: 3, // number of y axis ticks\n yax_tick_length: 5, // y axis tick length\n x_extended_ticks: false, // extends x axis ticks across chart - useful for tall charts\n y_extended_ticks: false, // extends y axis ticks across chart - useful for long charts\n y_scale_type: 'linear',\n max_x: null,\n max_y: null,\n min_x: null,\n min_y: null, // if set, y axis starts at an arbitrary value\n min_y_from_data: false, // if set, y axis will start at minimum value rather than at 0\n point_size: 2.5, // the size of the dot that appears on a line on mouse-over\n x_accessor: 'date',\n xax_units: '',\n x_label: '',\n x_sort: true,\n x_axis: true,\n y_axis: true,\n x_axis_position: 'bottom',\n y_axis_position: 'left',\n x_axis_type: null, // TO BE INTRODUCED IN 2.10\n y_axis_type: null, // TO BE INTRODUCED IN 2.10\n ygroup_accessor: null,\n xgroup_accessor:null,\n y_padding_percentage: 0.05, // for categorical scales\n y_outer_padding_percentage: .1, // for categorical scales\n ygroup_padding_percentage:.25, // for categorical scales\n ygroup_outer_padding_percentage: 0, // for categorical scales\n x_padding_percentage: 0.05, // for categorical scales\n x_outer_padding_percentage: .1, // for categorical scales\n xgroup_padding_percentage:.25, // for categorical scales\n xgroup_outer_padding_percentage: 0, // for categorical scales\n y_categorical_show_guides: false,\n x_categorical_show_guide: false,\n rotate_x_labels: 0,\n rotate_y_labels: 0,\n y_accessor: 'value',\n y_label: '',\n yax_units: '',\n yax_units_append: false,\n x_rug: false,\n y_rug: false,\n mouseover_align: 'right', // implemented in point.js\n x_mouseover: null,\n y_mouseover: null,\n transition_on_update: true,\n mouseover: null,\n click: null,\n show_rollover_text: true,\n show_confidence_band: null, // given [l, u] shows a confidence at each point from l to u\n xax_format: null, // xax_format is a function that formats the labels for the x axis.\n area: true,\n chart_type: 'line',\n data: [],\n decimals: 2, // the number of decimals in any rollover\n format: 'count', // format = {count, percentage}\n inflator: 10/9, // for setting y axis max\n linked: false, // links together all other graphs with linked:true, so rollovers in one trigger rollovers in the others\n linked_format: '%Y-%m-%d', // What granularity to link on for graphs. Default is at day\n list: false,\n baselines: null, // sets the baseline lines\n markers: null, // sets the marker lines\n scalefns: {},\n scales: {},\n utc_time: false,\n european_clock: false,\n show_year_markers: false,\n show_secondary_x_label: true,\n target: '#viz',\n interpolate: d3.curveCatmullRom.alpha(0), // interpolation method to use when rendering lines; increase tension if your data is irregular and you notice artifacts\n custom_line_color_map: [], // allows arbitrary mapping of lines to colors, e.g. [2,3] will map line 1 to color 2 and line 2 to color 3\n colors: null, // UNIMPLEMENTED - allows direct color mapping to line colors. Will eventually require\n max_data_size: null, // explicitly specify the the max number of line series, for use with custom_line_color_map\n aggregate_rollover: false, // links the lines in a multi-line chart\n show_tooltips: true // if enabled, a chart's description will appear in a tooltip (requires jquery)\n };\n\n MG.call_hook('global.defaults', defaults);\n\n if (!args) { args = {}; }\n\n var selected_chart = MG.charts[args.chart_type || defaults.chart_type];\n merge_with_defaults(args, selected_chart.defaults, defaults);\n\n if (args.list) {\n args.x_accessor = 0;\n args.y_accessor = 1;\n }\n\n // check for deprecated parameters\n for (var key in MG.deprecations) {\n if (args.hasOwnProperty(key)) {\n var deprecation = MG.deprecations[key],\n message = 'Use of `args.' + key + '` has been deprecated',\n replacement = deprecation.replacement,\n version;\n\n // transparently alias the deprecated\n if (replacement) {\n if (args[replacement]) {\n message += '. The replacement - `args.' + replacement + '` - has already been defined. This definition will be discarded.';\n } else {\n args[replacement] = args[key];\n }\n }\n\n if (deprecation.warned) {\n continue;\n }\n\n deprecation.warned = true;\n\n if (replacement) {\n message += ' in favor of `args.' + replacement + '`';\n }\n\n warn_deprecation(message, deprecation.version);\n }\n }\n\n MG.call_hook('global.before_init', args);\n\n new selected_chart.descriptor(args);\n\n return args.data;\n};\n\nif (mg_jquery_exists()) {\n /* ========================================================================\n * Bootstrap: tooltip.js v3.3.5\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n +function ($) {\n 'use strict';\n\n // TOOLTIP PUBLIC CLASS DEFINITION\n // ===============================\n\n var Tooltip = function (element, options) {\n this.type = null\n this.options = null\n this.enabled = null\n this.timeout = null\n this.hoverState = null\n this.$element = null\n this.inState = null\n\n this.init('tooltip', element, options)\n }\n\n Tooltip.VERSION = '3.3.5'\n\n Tooltip.TRANSITION_DURATION = 150\n\n Tooltip.DEFAULTS = {\n animation: true,\n placement: 'top',\n selector: false,\n template: '',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n container: false,\n viewport: {\n selector: 'body',\n padding: 0\n }\n }\n\n Tooltip.prototype.init = function (type, element, options) {\n this.enabled = true\n this.type = type\n this.$element = $(element)\n this.options = this.getOptions(options)\n this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n this.inState = { click: false, hover: false, focus: false }\n\n if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n }\n\n var triggers = this.options.trigger.split(' ')\n\n for (var i = triggers.length; i--;) {\n var trigger = triggers[i]\n\n if (trigger == 'click') {\n this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n } else if (trigger != 'manual') {\n var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'\n var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n }\n }\n\n this.options.selector ?\n (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n this.fixTitle()\n }\n\n Tooltip.prototype.getDefaults = function () {\n return Tooltip.DEFAULTS\n }\n\n Tooltip.prototype.getOptions = function (options) {\n options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n if (options.delay && typeof options.delay == 'number') {\n options.delay = {\n show: options.delay,\n hide: options.delay\n }\n }\n\n return options\n }\n\n Tooltip.prototype.getDelegateOptions = function () {\n var options = {}\n var defaults = this.getDefaults()\n\n this._options && $.each(this._options, function (key, value) {\n if (defaults[key] != value) options[key] = value\n })\n\n return options\n }\n\n Tooltip.prototype.enter = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n }\n\n if (self.tip().hasClass('in') || self.hoverState == 'in') {\n self.hoverState = 'in'\n return\n }\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'in'\n\n if (!self.options.delay || !self.options.delay.show) return self.show()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'in') self.show()\n }, self.options.delay.show)\n }\n\n Tooltip.prototype.isInStateTrue = function () {\n for (var key in this.inState) {\n if (this.inState[key]) return true\n }\n\n return false\n }\n\n Tooltip.prototype.leave = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n }\n\n if (self.isInStateTrue()) return\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'out'\n\n if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'out') self.hide()\n }, self.options.delay.hide)\n }\n\n Tooltip.prototype.show = function () {\n var e = $.Event('show.bs.' + this.type)\n\n if (this.hasContent() && this.enabled) {\n this.$element.trigger(e)\n\n var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n if (e.isDefaultPrevented() || !inDom) return\n var that = this\n\n var $tip = this.tip()\n\n var tipId = this.getUID(this.type)\n\n this.setContent()\n $tip.attr('id', tipId)\n this.$element.attr('aria-describedby', tipId)\n\n if (this.options.animation) $tip.addClass('fade')\n\n var placement = typeof this.options.placement == 'function' ?\n this.options.placement.call(this, $tip[0], this.$element[0]) :\n this.options.placement\n\n var autoToken = /\\s?auto?\\s?/i\n var autoPlace = autoToken.test(placement)\n if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n $tip\n .detach()\n .css({ top: 0, left: 0, display: 'block' })\n .addClass(placement)\n .data('bs.' + this.type, this)\n\n this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n this.$element.trigger('inserted.bs.' + this.type)\n\n var pos = this.getPosition()\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (autoPlace) {\n var orgPlacement = placement\n var viewportDim = this.getPosition(this.$viewport)\n\n placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :\n placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :\n placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :\n placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :\n placement\n\n $tip\n .removeClass(orgPlacement)\n .addClass(placement)\n }\n\n var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n this.applyPlacement(calculatedOffset, placement)\n\n var complete = function () {\n var prevHoverState = that.hoverState\n that.$element.trigger('shown.bs.' + that.type)\n that.hoverState = null\n\n if (prevHoverState == 'out') that.leave(that)\n }\n\n $.support.transition && this.$tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n }\n }\n\n Tooltip.prototype.applyPlacement = function (offset, placement) {\n var $tip = this.tip()\n var width = $tip[0].offsetWidth\n var height = $tip[0].offsetHeight\n\n // manually read margins because getBoundingClientRect includes difference\n var marginTop = parseInt($tip.css('margin-top'), 10)\n var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n // we must check for NaN for ie 8/9\n if (isNaN(marginTop)) marginTop = 0\n if (isNaN(marginLeft)) marginLeft = 0\n\n offset.top += marginTop\n offset.left += marginLeft\n\n // $.fn.offset doesn't round pixel values\n // so we use setOffset directly with our own function B-0\n $.offset.setOffset($tip[0], $.extend({\n using: function (props) {\n $tip.css({\n top: Math.round(props.top),\n left: Math.round(props.left)\n })\n }\n }, offset), 0)\n\n $tip.addClass('in')\n\n // check to see if placing tip in new offset caused the tip to resize itself\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (placement == 'top' && actualHeight != height) {\n offset.top = offset.top + height - actualHeight\n }\n\n var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n if (delta.left) offset.left += delta.left\n else offset.top += delta.top\n\n var isVertical = /top|bottom/.test(placement)\n var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n $tip.offset(offset)\n this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n }\n\n Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n this.arrow()\n .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n .css(isVertical ? 'top' : 'left', '')\n }\n\n Tooltip.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n\n $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n $tip.removeClass('fade in top bottom left right')\n }\n\n Tooltip.prototype.hide = function (callback) {\n var that = this\n var $tip = $(this.$tip)\n var e = $.Event('hide.bs.' + this.type)\n\n function complete() {\n if (that.hoverState != 'in') $tip.detach()\n that.$element\n .removeAttr('aria-describedby')\n .trigger('hidden.bs.' + that.type)\n callback && callback()\n }\n\n this.$element.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n $tip.removeClass('in')\n\n $.support.transition && $tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n\n this.hoverState = null\n\n return this\n }\n\n Tooltip.prototype.fixTitle = function () {\n var $e = this.$element\n if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n }\n }\n\n Tooltip.prototype.hasContent = function () {\n return this.getTitle()\n }\n\n Tooltip.prototype.getPosition = function ($element) {\n $element = $element || this.$element\n\n var el = $element[0]\n var isBody = el.tagName == 'BODY'\n\n var elRect = el.getBoundingClientRect()\n if (elRect.width == null) {\n // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n }\n var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()\n var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n return $.extend({}, elRect, scroll, outerDims, elOffset)\n }\n\n Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n }\n\n Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n var delta = { top: 0, left: 0 }\n if (!this.$viewport) return delta\n\n var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n var viewportDimensions = this.getPosition(this.$viewport)\n\n if (/right|left/.test(placement)) {\n var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll\n var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n if (topEdgeOffset < viewportDimensions.top) { // top overflow\n delta.top = viewportDimensions.top - topEdgeOffset\n } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n }\n } else {\n var leftEdgeOffset = pos.left - viewportPadding\n var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n delta.left = viewportDimensions.left - leftEdgeOffset\n } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n }\n }\n\n return delta\n }\n\n Tooltip.prototype.getTitle = function () {\n var title\n var $e = this.$element\n var o = this.options\n\n title = $e.attr('data-original-title')\n || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)\n\n return title\n }\n\n Tooltip.prototype.getUID = function (prefix) {\n do prefix += ~~(Math.random() * 1000000)\n while (document.getElementById(prefix))\n return prefix\n }\n\n Tooltip.prototype.tip = function () {\n if (!this.$tip) {\n this.$tip = $(this.options.template)\n if (this.$tip.length != 1) {\n throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n }\n }\n return this.$tip\n }\n\n Tooltip.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n }\n\n Tooltip.prototype.enable = function () {\n this.enabled = true\n }\n\n Tooltip.prototype.disable = function () {\n this.enabled = false\n }\n\n Tooltip.prototype.toggleEnabled = function () {\n this.enabled = !this.enabled\n }\n\n Tooltip.prototype.toggle = function (e) {\n var self = this\n if (e) {\n self = $(e.currentTarget).data('bs.' + this.type)\n if (!self) {\n self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n $(e.currentTarget).data('bs.' + this.type, self)\n }\n }\n\n if (e) {\n self.inState.click = !self.inState.click\n if (self.isInStateTrue()) self.enter(self)\n else self.leave(self)\n } else {\n self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n }\n }\n\n Tooltip.prototype.destroy = function () {\n var that = this\n clearTimeout(this.timeout)\n this.hide(function () {\n that.$element.off('.' + that.type).removeData('bs.' + that.type)\n if (that.$tip) {\n that.$tip.detach()\n }\n that.$tip = null\n that.$arrow = null\n that.$viewport = null\n })\n }\n\n\n // TOOLTIP PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.tooltip')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.tooltip\n\n $.fn.tooltip = Plugin\n $.fn.tooltip.Constructor = Tooltip\n\n\n // TOOLTIP NO CONFLICT\n // ===================\n\n $.fn.tooltip.noConflict = function () {\n $.fn.tooltip = old\n return this\n }\n\n }(jQuery);\n\n\n /* ========================================================================\n * Bootstrap: popover.js v3.3.5\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n +function ($) {\n 'use strict';\n\n // POPOVER PUBLIC CLASS DEFINITION\n // ===============================\n\n var Popover = function (element, options) {\n this.init('popover', element, options)\n }\n\n if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n Popover.VERSION = '3.3.5'\n\n Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n placement: 'right',\n trigger: 'click',\n content: '',\n template: ''\n })\n\n\n // NOTE: POPOVER EXTENDS tooltip.js\n // ================================\n\n Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n Popover.prototype.constructor = Popover\n\n Popover.prototype.getDefaults = function () {\n return Popover.DEFAULTS\n }\n\n Popover.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n var content = this.getContent()\n\n $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n ](content)\n\n $tip.removeClass('fade top bottom left right in')\n\n // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n // this manually by checking the contents.\n if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n }\n\n Popover.prototype.hasContent = function () {\n return this.getTitle() || this.getContent()\n }\n\n Popover.prototype.getContent = function () {\n var $e = this.$element\n var o = this.options\n\n return $e.attr('data-content')\n || (typeof o.content == 'function' ?\n o.content.call($e[0]) :\n o.content)\n }\n\n Popover.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n }\n\n\n // POPOVER PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.popover')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.popover\n\n $.fn.popover = Plugin\n $.fn.popover.Constructor = Popover\n\n\n // POPOVER NO CONFLICT\n // ===================\n\n $.fn.popover.noConflict = function () {\n $.fn.popover = old\n return this\n }\n\n }(jQuery);\n}\n\nfunction chart_title(args) {\n 'use strict';\n\n var svg = mg_get_svg_child_of(args.target);\n\n //remove the current title if it exists\n svg.select('.mg-header').remove();\n\n if (args.target && args.title) {\n var chartTitle = svg.insert('text')\n .attr('class', 'mg-header')\n .attr('x', args.center_title_full_width ? args.width /2 : (args.width + args.left - args.right) / 2)\n .attr('y', args.title_y_position)\n .attr('text-anchor', 'middle')\n .attr('dy', '0.55em');\n\n //show the title\n chartTitle.append('tspan')\n .attr('class', 'mg-chart-title')\n .text(args.title);\n\n //show and activate the description icon if we have a description\n if (args.show_tooltips && args.description && mg_jquery_exists()) {\n chartTitle.append('tspan')\n .attr('class', 'mg-chart-description')\n .attr('dx', '0.3em')\n .text('\\uf059');\n\n //now that the title is an svg text element, we'll have to trigger\n //mouseenter, mouseleave events manually for the popover to work properly\n var $chartTitle = $(chartTitle.node());\n $chartTitle.popover({\n html: true,\n animation: false,\n placement: 'top',\n content: args.description,\n container: args.target,\n trigger: 'manual',\n template: ''\n }).on('mouseenter', function() {\n d3.selectAll(args.target)\n .selectAll('.mg-popover')\n .remove();\n\n $(this).popover('show');\n $(d3.select(args.target).select('.popover').node())\n .on('mouseleave', function () {\n $chartTitle.popover('hide');\n });\n }).on('mouseleave', function () {\n setTimeout(function () {\n if (!$('.popover:hover').length) {\n $chartTitle.popover('hide');\n }\n }, 120);\n });\n } else if (args.show_tooltips && args.description && typeof $ === 'undefined') {\n args.error = 'In order to enable tooltips, please make sure you include jQuery.';\n }\n }\n\n if (args.error) {\n error(args);\n }\n}\n\nMG.chart_title = chart_title;\n\nfunction mg_add_scale_function(args, scalefcn_name, scale, accessor, inflation) {\n args.scalefns[scalefcn_name] = function(di) {\n if (inflation === undefined) return args.scales[scale](di[accessor]);\n else return args.scales[scale](di[accessor]) + inflation;\n };\n}\n\nfunction mg_position(str, args) {\n if (str === 'bottom' || str === 'top') {\n return [mg_get_plot_left(args), mg_get_plot_right(args)];\n }\n\n if (str === 'left' || str === 'right') {\n return [mg_get_plot_bottom(args), args.top];\n }\n}\n\nfunction mg_cat_position(str, args) {\n if (str === 'bottom' || str === 'top') {\n return [mg_get_plot_left(args), mg_get_plot_right(args)]\n }\n\n if (str === 'left' || str === 'right') {\n return [mg_get_plot_bottom(args), mg_get_plot_top(args)];\n }\n}\n\nfunction MGScale(args) {\n // big wrapper around d3 scale that automatically formats & calculates scale bounds\n // according to the data, and handles other niceties.\n var scaleArgs = {}\n scaleArgs.use_inflator = false;\n scaleArgs.zero_bottom = false;\n scaleArgs.scaleType = 'numerical';\n\n this.namespace = function(_namespace) {\n scaleArgs.namespace = _namespace;\n scaleArgs.namespace_accessor_name = scaleArgs.namespace + '_accessor';\n scaleArgs.scale_name = scaleArgs.namespace.toUpperCase();\n scaleArgs.scalefn_name = scaleArgs.namespace + 'f';\n return this;\n }\n\n this.scaleName = function(scaleName) {\n scaleArgs.scale_name = scaleName.toUpperCase();\n scaleArgs.scalefn_name = scaleName +'f';\n return this;\n }\n\n this.inflateDomain = function(tf) {\n scaleArgs.use_inflator = tf;\n return this;\n }\n\n this.zeroBottom = function(tf) {\n scaleArgs.zero_bottom = tf;\n return this;\n }\n\n /////////////////////////////////////////////////////////////////////////////////////////////////////////\n /// all scale domains are either numerical (number, date, etc.) or categorical (factor, label, etc) /////\n /////////////////////////////////////////////////////////////////////////////////////////////////////////\n // these functions automatically create the d3 scale function and place the domain.\n\n this.numericalDomainFromData = function() {\n var other_flat_data_arrays = [];\n\n if (arguments.length > 0) {\n other_flat_data_arrays = arguments;\n }\n\n // pull out a non-empty array in args.data.\n var illustrative_data;\n for (var i = 0; i < args.data.length; i++) {\n if (args.data[i].length > 0) {\n illustrative_data = args.data[i];\n }\n }\n scaleArgs.is_time_series = mg_is_date(illustrative_data[0][args[scaleArgs.namespace_accessor_name]])\n ? true\n : false;\n\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n\n mg_min_max_numerical(args, scaleArgs, other_flat_data_arrays, scaleArgs.use_inflator);\n\n var time_scale = (args.utc_time)\n ? d3.scaleUtc()\n : d3.scaleTime();\n\n args.scales[scaleArgs.scale_name] = (scaleArgs.is_time_series)\n ? time_scale\n : (mg_is_function(args[scaleArgs.namespace + '_scale_type']))\n ? args.y_scale_type()\n : (args[scaleArgs.namespace + '_scale_type'] === 'log')\n ? d3.scaleLog()\n : d3.scaleLinear();\n\n args.scales[scaleArgs.scale_name].domain([args.processed['min_' + scaleArgs.namespace], args.processed['max_' + scaleArgs.namespace]]);\n scaleArgs.scaleType = 'numerical';\n\n return this;\n }\n\n this.categoricalDomain = function(domain) {\n args.scales[scaleArgs.scale_name] = d3.scaleOrdinal().domain(domain);\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n return this;\n }\n\n this.categoricalDomainFromData = function() {\n // make args.categorical_variables.\n // lets make the categorical variables.\n var all_data = mg_flatten_array(args.data)\n //d3.set(data.map(function(d){return d[args.group_accessor]})).values()\n scaleArgs.categoricalVariables = d3.set(all_data.map(function(d) {\n return d[args[scaleArgs.namespace_accessor_name]] })).values();\n args.scales[scaleArgs.scale_name] = d3.scaleBand()\n .domain(scaleArgs.categoricalVariables);\n\n scaleArgs.scaleType = 'categorical';\n return this;\n }\n\n /////////////////////////////////////////////////////////////////////////////////////////////////////////////\n ////////// all scale ranges are either positional (for axes, etc) or arbitrary (colors, size, etc) //////////\n /////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n this.numericalRange = function(range) {\n if (typeof range === 'string') {\n args\n .scales[scaleArgs.scale_name]\n .range(mg_position(range, args));\n } else {\n args\n .scales[scaleArgs.scale_name]\n .range(range);\n }\n\n return this;\n }\n\n this.categoricalRangeBands = function(range, halfway) {\n if (halfway === undefined) halfway = false;\n\n var namespace = scaleArgs.namespace;\n var paddingPercentage = args[namespace + '_padding_percentage'];\n var outerPaddingPercentage = args[namespace + '_outer_padding_percentage'];\n if (typeof range === 'string') {\n // if string, it's a location. Place it accordingly.\n args.scales[scaleArgs.scale_name]\n .range(mg_position(range, args))\n .paddingInner(paddingPercentage)\n .paddingOuter(outerPaddingPercentage);\n } else {\n args.scales[scaleArgs.scale_name]\n .range(range)\n .paddingInner(paddingPercentage)\n .paddingOuter(outerPaddingPercentage);\n }\n\n mg_add_scale_function(\n args,\n scaleArgs.scalefn_name,\n scaleArgs.scale_name,\n args[scaleArgs.namespace_accessor_name],\n halfway\n ? args.scales[scaleArgs.scale_name].bandwidth() / 2\n : 0\n );\n\n return this;\n }\n\n this.categoricalRange = function(range) {\n args.scales[scaleArgs.scale_name].range(range);\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n return this;\n }\n\n this.categoricalColorRange = function() {\n args.scales[scaleArgs.scale_name] = args.scales[scaleArgs.scale_name].domain().length > 10\n ? d3.scaleOrdinal(d3.schemeCategory20)\n : d3.scaleOrdinal(d3.schemeCategory10);\n\n args\n .scales[scaleArgs.scale_name]\n .domain(scaleArgs.categoricalVariables);\n\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n return this;\n }\n\n this.clamp = function(yn) {\n args.scales[scaleArgs.scale_name].clamp(yn);\n return this;\n }\n\n return this;\n}\n\nMG.scale_factory = MGScale;\n\n/////////////////////////////// x, x_accessor, markers, baselines, etc.\nfunction mg_min_max_numerical(args, scaleArgs, additional_data_arrays) {\n // A BIT OF EXPLANATION ABOUT THIS FUNCTION\n // This function pulls out all the accessor values in all the arrays in args.data.\n // We also have this additional argument, additional_data_arrays, which is an array of arrays of raw data values.\n // These values also get concatenated to the data pulled from args.data, and the extents are calculate from that.\n // They are optional.\n //\n // This may seem arbitrary, but it gives us a lot of flexibility. For instance, if we're calculating\n // the min and max for the y axis of a line chart, we're going to want to also factor in baselines (horizontal lines\n // that might potentially be outside of the y value bounds). The easiest way to do this is in the line.js code\n // & scale creation to just flatten the args.baselines array, pull out hte values, and feed it in\n // so it appears in additional_data_arrays.\n var namespace = scaleArgs.namespace;\n var namespace_accessor_name = scaleArgs.namespace_accessor_name;\n var use_inflator = scaleArgs.use_inflator;\n var zero_bottom = scaleArgs.zero_bottom;\n\n var accessor = args[namespace_accessor_name];\n\n // add together all relevant data arrays.\n var all_data = mg_flatten_array(args.data)\n .map(function(dp) {\n return dp[accessor] })\n .concat(mg_flatten_array(additional_data_arrays));\n\n // do processing for log\n if (args[namespace + '_scale_type'] === 'log') {\n all_data = all_data.filter(function(d) {\n return d > 0;\n });\n }\n\n // use inflator?\n var extents = d3.extent(all_data);\n var min_val = extents[0];\n var max_val = extents[1];\n\n // bolt scale domain to zero when the right conditions are met:\n // not pulling the bottom of the range from data\n // not zero-bottomed\n // not a time series\n if (zero_bottom && !args['min_' + namespace + '_from_data'] && min_val > 0 && !scaleArgs.is_time_series) {\n min_val = args[namespace + '_scale_type'] === 'log' ? 1 : 0;\n }\n\n if (args[namespace + '_scale_type'] !== 'log' && min_val < 0 && !scaleArgs.is_time_series) {\n min_val = min_val - (min_val - min_val * args.inflator) * use_inflator;\n }\n\n if (!scaleArgs.is_time_series) {\n max_val = (max_val < 0) ? max_val + (max_val - max_val * args.inflator) * use_inflator : max_val * (use_inflator ? args.inflator : 1);\n }\n\n min_val = args['min_' + namespace] || min_val;\n max_val = args['max_' + namespace] || max_val;\n // if there's a single data point, we should custom-set the min and max values.\n\n if (min_val === max_val && !(args['min_' + namespace] && args['max_' + namespace])) {\n\n if (mg_is_date(min_val)) {\n max_val = new Date(MG.clone(min_val).setDate(min_val.getDate() + 1));\n min_val = new Date(MG.clone(min_val).setDate(min_val.getDate() - 1));\n } else if (typeof min_val === 'number') {\n min_val = min_val - 1;\n max_val = min_val + 1;\n mg_force_xax_count_to_be_two(args);\n }\n }\n\n args.processed['min_' + namespace] = min_val;\n args.processed['max_' + namespace] = max_val;\n\n MG.call_hook('x_axis.process_min_max', args, args.processed.min_x, args.processed.max_x);\n MG.call_hook('y_axis.process_min_max', args, args.processed.min_y, args.processed.max_y);\n}\n\nfunction mg_categorical_group_color_scale(args) {\n if (args.color_accessor !== false) {\n if (args.ygroup_accessor) {\n // add a custom accessor element.\n if (args.color_accessor === null) {\n args.color_accessor = args.y_accessor;\n } else {}\n }\n if (args.color_accessor !== null) {\n new MG.scale_factory(args)\n .namespace('color')\n .categoricalDomainFromData()\n .categoricalColorRange();\n }\n }\n}\n\nfunction mg_add_color_categorical_scale(args, domain, accessor) {\n args.scales.color = d3.scaleOrdinal(d3.schemeCategory20).domain(domain);\n args.scalefns.color = function(d) {\n return args.scales.color(d[accessor]);\n };\n}\n\nfunction mg_get_categorical_domain(data, accessor) {\n return d3.set(data.map(function(d) {\n return d[accessor]; }))\n .values();\n}\n\nfunction mg_get_color_domain(args) {\n var color_domain;\n if (args.color_domain === null) {\n if (args.color_type === 'number') {\n color_domain = d3.extent(args.data[0], function(d) {\n return d[args.color_accessor]; });\n } else if (args.color_type === 'category') {\n color_domain = mg_get_categorical_domain(args.data[0], args.color_accessor);\n\n }\n } else {\n color_domain = args.color_domain;\n }\n return color_domain;\n}\n\nfunction mg_get_color_range(args) {\n var color_range;\n if (args.color_range === null) {\n if (args.color_type === 'number') {\n color_range = ['blue', 'red'];\n } else {\n color_range = null;\n }\n } else {\n color_range = args.color_range;\n }\n return color_range;\n}\n\nfunction processScaleTicks (args, axis) {\n var accessor = args[axis + '_accessor'];\n var scale_ticks = args.scales[axis.toUpperCase()].ticks(args[axis + 'ax_count']);\n var max = args.processed['max_' + axis];\n\n function log10 (val) {\n if (val === 1000) {\n return 3;\n }\n if (val === 1000000) {\n return 7;\n }\n return Math.log(val) / Math.LN10;\n }\n\n if (args[axis + '_scale_type'] === 'log') {\n // get out only whole logs\n scale_ticks = scale_ticks.filter(function (d) {\n return Math.abs(log10(d)) % 1 < 1e-6 || Math.abs(log10(d)) % 1 > 1 - 1e-6;\n });\n }\n\n // filter out fraction ticks if our data is ints and if xmax > number of generated ticks\n var number_of_ticks = scale_ticks.length;\n\n // is our data object all ints?\n var data_is_int = true;\n args.data.forEach(function (d, i) {\n d.forEach(function (d, i) {\n if (d[accessor] % 1 !== 0) {\n data_is_int = false;\n return false;\n }\n });\n });\n\n if (data_is_int && number_of_ticks > max && args.format === 'count') {\n // remove non-integer ticks\n scale_ticks = scale_ticks.filter(function (d) {\n return d % 1 === 0;\n });\n }\n args.processed[axis + '_ticks'] = scale_ticks;\n}\n\nfunction rugPlacement (args, axisArgs) {\n var position = axisArgs.position;\n var ns = axisArgs.namespace;\n var coordinates = {};\n if (position === 'left') {\n coordinates.x1 = mg_get_left(args) + 1;\n coordinates.x2 = mg_get_left(args) + args.rug_buffer_size;\n coordinates.y1 = args.scalefns[ns + 'f'];\n coordinates.y2 = args.scalefns[ns + 'f'];\n }\n if (position === 'right') {\n coordinates.x1 = mg_get_right(args) - 1,\n coordinates.x2 = mg_get_right(args) - args.rug_buffer_size,\n coordinates.y1 = args.scalefns[ns + 'f'];\n coordinates.y2 = args.scalefns[ns + 'f'];\n }\n if (position === 'top') {\n coordinates.x1 = args.scalefns[ns + 'f'];\n coordinates.x2 = args.scalefns[ns + 'f'];\n coordinates.y1 = mg_get_top(args) + 1;\n coordinates.y2 = mg_get_top(args) + args.rug_buffer_size;\n }\n if (position === 'bottom') {\n coordinates.x1 = args.scalefns[ns + 'f'];\n coordinates.x2 = args.scalefns[ns + 'f'];\n coordinates.y1 = mg_get_bottom(args) - 1;\n coordinates.y2 = mg_get_bottom(args) - args.rug_buffer_size;\n }\n return coordinates;\n}\n\nfunction rimPlacement (args, axisArgs) {\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var tick_length = args.processed[ns + '_ticks'].length;\n var ticks = args.processed[ns + '_ticks'];\n var scale = args.scales[ns.toUpperCase()];\n var coordinates = {};\n\n if (position === 'left') {\n coordinates.x1 = mg_get_left(args);\n coordinates.x2 = mg_get_left(args);\n coordinates.y1 = scale(ticks[0]).toFixed(2);\n coordinates.y2 = scale(ticks[tick_length - 1]).toFixed(2);\n }\n if (position === 'right') {\n coordinates.x1 = mg_get_right(args);\n coordinates.x2 = mg_get_right(args);\n coordinates.y1 = scale(ticks[0]).toFixed(2);\n coordinates.y2 = scale(ticks[tick_length - 1]).toFixed(2);\n }\n if (position === 'top') {\n coordinates.x1 = mg_get_left(args);\n coordinates.x2 = mg_get_right(args);\n coordinates.y1 = mg_get_top(args);\n coordinates.y2 = mg_get_top(args);\n }\n if (position === 'bottom') {\n coordinates.x1 = mg_get_left(args);\n coordinates.x2 = mg_get_right(args);\n coordinates.y1 = mg_get_bottom(args);\n coordinates.y2 = mg_get_bottom(args);\n }\n\n if (position === 'left' || position === 'right') {\n if (args.axes_not_compact) {\n coordinates.y1 = mg_get_bottom(args);\n coordinates.y2 = mg_get_top(args);\n } else if (tick_length) {\n coordinates.y1 = scale(ticks[0]).toFixed(2);\n coordinates.y2 = scale(ticks[tick_length - 1]).toFixed(2);\n }\n }\n\n return coordinates;\n}\n\nfunction labelPlacement (args, axisArgs) {\n var position = axisArgs.position;\n var ns = axisArgs.namespace;\n var tickLength = args[ns + 'ax_tick_length'];\n var scale = args.scales[ns.toUpperCase()];\n var coordinates = {};\n\n if (position === 'left') {\n coordinates.x = mg_get_left(args) - tickLength * 3 / 2;\n coordinates.y = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.dx = -3;\n coordinates.dy = '.35em';\n coordinates.textAnchor = 'end';\n coordinates.text = function (d) {\n return mg_compute_yax_format(args)(d);\n };\n }\n if (position === 'right') {\n coordinates.x = mg_get_right(args) + tickLength * 3 / 2;\n coordinates.y = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.dx = 3;\n coordinates.dy = '.35em';\n coordinates.textAnchor = 'start';\n coordinates.text = function (d) {\n return mg_compute_yax_format(args)(d); };\n }\n if (position === 'top') {\n coordinates.x = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.y = (mg_get_top(args) - tickLength * 7 / 3).toFixed(2);\n coordinates.dx = 0;\n coordinates.dy = '0em';\n coordinates.textAnchor = 'middle';\n coordinates.text = function (d) {\n return mg_default_xax_format(args)(d);\n };\n }\n if (position === 'bottom') {\n coordinates.x = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.y = (mg_get_bottom(args) + tickLength * 7 / 3).toFixed(2);\n coordinates.dx = 0;\n coordinates.dy = '.50em';\n coordinates.textAnchor = 'middle';\n coordinates.text = function (d) {\n return mg_default_xax_format(args)(d);\n };\n }\n\n return coordinates;\n}\n\nfunction selectXaxFormat (args) {\n var c = args.chart_type;\n if (!args.processed.xax_format) {\n if (args.xax_format) {\n args.processed.xax_format = args.xax_format;\n } else {\n if (c === 'line' || c === 'point' || c === 'histogram') {\n args.processed.xax_format = mg_default_xax_format(args);\n } else if (c === 'bar') {\n args.processed.xax_format = mg_default_bar_xax_format(args);\n }\n }\n }\n}\n\nfunction secondaryLabels (g, args, axisArgs) {\n if (args.time_series && (args.show_years || args.show_secondary_x_label)) {\n var tf = mg_get_yformat_and_secondary_time_function(args);\n addSecondaryLabelElements(args, axisArgs, g, tf.timeframe, tf.yformat, tf.secondary);\n }\n}\n\nfunction addSecondaryLabelElements (args, axisArgs, g, time_frame, yformat, secondary_function) {\n var years = secondary_function(args.processed.min_x, args.processed.max_x);\n if (years.length === 0) {\n var first_tick = args.scales.X.ticks(args.xax_count)[0];\n years = [first_tick];\n }\n\n var yg = mg_add_g(g, 'mg-year-marker');\n if (time_frame === 'default' && args.show_year_markers) {\n yearMarkerLine(args, axisArgs, yg, years, yformat);\n }\n if (time_frame != 'years') yearMarkerText(args, axisArgs, yg, years, yformat);\n}\n\nfunction yearMarkerLine (args, axisArgs, g, years, yformat) {\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('line')\n .attr('x1', function (d) {\n return args.scales.X(d).toFixed(2); })\n .attr('x2', function (d) {\n return args.scales.X(d).toFixed(2); })\n .attr('y1', mg_get_top(args))\n .attr('y2', mg_get_bottom(args));\n}\n\nfunction yearMarkerText (args, axisArgs, g, years, yformat) {\n var position = axisArgs.position;\n var ns = axisArgs.namespace;\n var scale = args.scales[ns.toUpperCase()];\n var x, y, dy, textAnchor, textFcn;\n var xAxisTextElement = d3.select(args.target)\n .select('.mg-x-axis text').node().getBoundingClientRect();\n\n if (position === 'top') {\n x = function (d, i) {\n return scale(d).toFixed(2); };\n y = (mg_get_top(args) - args.xax_tick_length * 7 / 3) - (xAxisTextElement.height);\n dy = '.50em';\n textAnchor = 'middle';\n textFcn = function (d) {\n return yformat(new Date(d)); };\n }\n if (position === 'bottom') {\n x = function (d, i) {\n return scale(d).toFixed(2); };\n y = (mg_get_bottom(args) + args.xax_tick_length * 7 / 3) + (xAxisTextElement.height * 0.8);\n dy = '.50em';\n textAnchor = 'middle';\n textFcn = function (d) {\n return yformat(new Date(d)); };\n }\n\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('text')\n .attr('x', x)\n .attr('y', y)\n .attr('dy', dy)\n .attr('text-anchor', textAnchor)\n .text(textFcn);\n}\n\nfunction addNumericalLabels (g, args, axisArgs) {\n var ns = axisArgs.namespace;\n var coords = labelPlacement(args, axisArgs);\n var ticks = args.processed[ns + '_ticks'];\n\n var labels = g.selectAll('.mg-yax-labels')\n .data(ticks).enter()\n .append('text')\n .attr('x', coords.x)\n .attr('dx', coords.dx)\n .attr('y', coords.y)\n .attr('dy', coords.dy)\n .attr('text-anchor', coords.textAnchor)\n .text(coords.text);\n\n // move the labels if they overlap\n if (ns == 'x') {\n selectXaxFormat(args);\n if (args.time_series && args.european_clock) {\n labels.append('tspan').classed('mg-european-hours', true).text(function (_d, i) {\n var d = new Date(_d);\n if (i === 0) return d3.timeFormat('%H')(d);\n else return '';\n });\n labels.append('tspan').classed('mg-european-minutes-seconds', true).text(function (_d, i) {\n var d = new Date(_d);\n return ':' + args.processed.xax_format(d);\n });\n } else {\n labels.text(function (d) {\n return args.xax_units + args.processed.xax_format(d);\n });\n }\n secondaryLabels(g, args, axisArgs);\n }\n\n if (mg_elements_are_overlapping(labels)) {\n labels.filter(function (d, i) {\n return (i + 1) % 2 === 0;\n }).remove();\n\n var svg = mg_get_svg_child_of(args.target);\n svg.selectAll('.mg-' + ns + 'ax-ticks').filter(function (d, i) {\n return (i + 1) % 2 === 0; })\n .remove();\n }\n}\n\nfunction addTickLines (g, args, axisArgs) {\n // name\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var scale = args.scales[ns.toUpperCase()];\n\n var ticks = args.processed[ns + '_ticks'];\n var ticksClass = 'mg-' + ns + 'ax-ticks';\n var extendedTicksClass = 'mg-extended-' + ns + 'ax-ticks';\n var extendedTicks = args[ns + '_extended_ticks'];\n var tickLength = args[ns + 'ax_tick_length'];\n\n var x1, x2, y1, y2;\n\n if (position === 'left') {\n x1 = mg_get_left(args);\n x2 = extendedTicks ? mg_get_right(args) : mg_get_left(args) - tickLength;\n y1 = function (d) {\n return scale(d).toFixed(2);\n };\n y2 = function (d) {\n return scale(d).toFixed(2);\n };\n }\n if (position === 'right') {\n x1 = mg_get_right(args);\n x2 = extendedTicks ? mg_get_left(args) : mg_get_right(args) + tickLength;\n y1 = function (d) {\n return scale(d).toFixed(2);\n };\n y2 = function (d) {\n return scale(d).toFixed(2);\n };\n }\n if (position === 'top') {\n x1 = function (d) {\n return scale(d).toFixed(2);\n };\n x2 = function (d) {\n return scale(d).toFixed(2);\n };\n y1 = mg_get_top(args);\n y2 = extendedTicks ? mg_get_bottom(args) : mg_get_top(args) - tickLength;\n }\n if (position === 'bottom') {\n x1 = function (d) {\n return scale(d).toFixed(2);\n };\n x2 = function (d) {\n return scale(d).toFixed(2);\n };\n y1 = mg_get_bottom(args);\n y2 = extendedTicks ? mg_get_top(args) : mg_get_bottom(args) + tickLength;\n }\n\n g.selectAll('.' + ticksClass)\n .data(ticks).enter()\n .append('line')\n .classed(extendedTicksClass, extendedTicks)\n .attr('x1', x1)\n .attr('x2', x2)\n .attr('y1', y1)\n .attr('y2', y2);\n}\n\nfunction initializeAxisRim (g, args, axisArgs) {\n var namespace = axisArgs.namespace;\n var tick_length = args.processed[namespace + '_ticks'].length;\n\n var rim = rimPlacement(args, axisArgs);\n\n if (!args[namespace + '_extended_ticks'] && !args[namespace + '_extended_ticks'] && tick_length) {\n g.append('line')\n .attr('x1', rim.x1)\n .attr('x2', rim.x2)\n .attr('y1', rim.y1)\n .attr('y2', rim.y2);\n }\n}\n\nfunction initializeRug (args, rug_class) {\n var svg = mg_get_svg_child_of(args.target);\n var all_data = mg_flatten_array(args.data);\n var rug = svg.selectAll('line.' + rug_class).data(all_data);\n\n // set the attributes that do not change after initialization, per\n rug.enter().append('svg:line').attr('class', rug_class).attr('opacity', 0.3);\n\n // remove rug elements that are no longer in use\n mg_exit_and_remove(rug);\n\n // set coordinates of new rug elements\n mg_exit_and_remove(rug);\n return rug;\n}\n\nfunction rug (args, axisArgs) {\n 'use strict';\n args.rug_buffer_size = args.chart_type === 'point' ? args.buffer / 2 : args.buffer * 2 / 3;\n\n var rug = initializeRug(args, 'mg-' + axisArgs.namespace + '-rug');\n var rug_positions = rugPlacement(args, axisArgs);\n rug.attr('x1', rug_positions.x1)\n .attr('x2', rug_positions.x2)\n .attr('y1', rug_positions.y1)\n .attr('y2', rug_positions.y2);\n\n mg_add_color_accessor_to_rug(rug, args, 'mg-' + axisArgs.namespace + '-rug-mono');\n}\n\nfunction categoricalLabelPlacement (args, axisArgs, group) {\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var scale = args.scales[ns.toUpperCase()];\n var groupScale = args.scales[(ns + 'group').toUpperCase()];\n var coords = {};\n coords.cat = {};\n coords.group = {};\n // x, y, dy, text-anchor\n\n if (position === 'left') {\n coords.cat.x = mg_get_plot_left(args) - args.buffer;\n coords.cat.y = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = 'end';\n coords.group.x = mg_get_plot_left(args) - args.buffer;\n coords.group.y = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 : 0);\n coords.group.dy = '.35em';\n coords.group.textAnchor = args['rotate_' + ns + '_labels'] ? 'end' : 'end';\n }\n\n if (position === 'right') {\n coords.cat.x = mg_get_plot_right(args) - args.buffer;\n coords.cat.y = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = 'start';\n coords.group.x = mg_get_plot_right(args) - args.buffer;\n coords.group.y = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 : 0);\n coords.group.dy = '.35em';\n coords.group.textAnchor = 'start';\n }\n\n if (position === 'top') {\n coords.cat.x = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.y = mg_get_plot_top(args) + args.buffer;\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n coords.group.x = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 : 0);\n coords.group.y = mg_get_plot_top(args) + args.buffer;\n coords.group.dy = '.35em';\n coords.group.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n }\n\n if (position === 'bottom') {\n coords.cat.x = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.y = mg_get_plot_bottom(args) + args.buffer;\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n coords.group.x = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 - scale.bandwidth() / 2 : 0);\n coords.group.y = mg_get_plot_bottom(args) + args.buffer;\n coords.group.dy = '.35em';\n coords.group.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n }\n\n return coords;\n}\n\nfunction categoricalLabels (args, axisArgs) {\n var ns = axisArgs.namespace;\n var nsClass = 'mg-' + ns + '-axis';\n var scale = args.scales[ns.toUpperCase()];\n var groupScale = args.scales[(ns + 'group').toUpperCase()];\n var groupAccessor = ns + 'group_accessor';\n\n var svg = mg_get_svg_child_of(args.target);\n mg_selectAll_and_remove(svg, '.' + nsClass);\n var g = mg_add_g(svg, nsClass);\n var group_g;\n var groups = groupScale.domain && groupScale.domain()\n ? groupScale.domain()\n : ['1'];\n\n groups.forEach(function (group) {\n // grab group placement stuff.\n var coords = categoricalLabelPlacement(args, axisArgs, group);\n\n group_g = mg_add_g(g, 'mg-group-' + mg_normalize(group));\n if (args[groupAccessor] !== null) {\n var labels = group_g.append('text')\n .classed('mg-barplot-group-label', true)\n .attr('x', coords.group.x)\n .attr('y', coords.group.y)\n .attr('dy', coords.group.dy)\n .attr('text-anchor', coords.group.textAnchor)\n .text(group);\n\n } else {\n var labels = group_g.selectAll('text')\n .data(scale.domain())\n .enter()\n .append('text')\n .attr('x', coords.cat.x)\n .attr('y', coords.cat.y)\n .attr('dy', coords.cat.dy)\n .attr('text-anchor', coords.cat.textAnchor)\n .text(String);\n }\n if (args['rotate_' + ns + '_labels']) {\n rotateLabels(labels, args['rotate_' + ns + '_labels']);\n }\n });\n}\n\nfunction categoricalGuides (args, axisArgs) {\n // for each group\n // for each data point\n\n var ns = axisArgs.namespace;\n var scalef = args.scalefns[ns + 'f'];\n var groupf = args.scalefns[ns + 'groupf'];\n var groupScale = args.scales[(ns + 'group').toUpperCase()];\n var scale = args.scales[ns.toUpperCase()];\n var position = axisArgs.position;\n\n var svg = mg_get_svg_child_of(args.target);\n var alreadyPlotted = [];\n\n var x1, x2, y1, y2;\n var grs = (groupScale.domain && groupScale.domain()) ? groupScale.domain() : [null];\n\n mg_selectAll_and_remove(svg, '.mg-category-guides');\n var g = mg_add_g(svg, 'mg-category-guides');\n\n grs.forEach(function (group) {\n scale.domain().forEach(function (cat) {\n if (position === 'left' || position === 'right') {\n x1 = mg_get_plot_left(args);\n x2 = mg_get_plot_right(args);\n y1 = scale(cat) + groupScale(group) + scale.bandwidth() / 2;\n y2 = scale(cat) + groupScale(group) + scale.bandwidth() / 2;\n }\n\n if (position === 'top' || position === 'bottom') {\n x1 = scale(cat) + groupScale(group) + scale.bandwidth() / 2 * (group === null);\n x2 = scale(cat) + groupScale(group) + scale.bandwidth() / 2 * (group === null);\n y1 = mg_get_plot_bottom(args);\n y2 = mg_get_plot_top(args);\n }\n\n g.append('line')\n .attr('x1', x1)\n .attr('x2', x2)\n .attr('y1', y1)\n .attr('y2', y2)\n .attr('stroke-dasharray', '2,1');\n });\n\n var first = groupScale(group) + scale(scale.domain()[0]) + scale.bandwidth() / 2 * (group === null || (position !== 'top' && position != 'bottom'));\n var last = groupScale(group) + scale(scale.domain()[scale.domain().length - 1]) + scale.bandwidth() / 2 * (group === null || (position !== 'top' && position != 'bottom'));\n\n if (position === 'left' || position === 'right') {\n x11 = mg_get_plot_left(args);\n x21 = mg_get_plot_left(args);\n y11 = first;\n y21 = last;\n\n x12 = mg_get_plot_right(args);\n x22 = mg_get_plot_right(args);\n y12 = first;\n y22 = last;\n }\n\n if (position === 'bottom' || position === 'top') {\n x11 = first;\n x21 = last;\n y11 = mg_get_plot_bottom(args);\n y21 = mg_get_plot_bottom(args);\n\n x12 = first;\n x22 = last;\n y12 = mg_get_plot_top(args);\n y22 = mg_get_plot_top(args);\n }\n\n g.append('line')\n .attr('x1', x11)\n .attr('x2', x21)\n .attr('y1', y11)\n .attr('y2', y21)\n .attr('stroke-dasharray', '2,1');\n\n g.append('line')\n .attr('x1', x12)\n .attr('x2', x22)\n .attr('y1', y12)\n .attr('y2', y22)\n .attr('stroke-dasharray', '2,1');\n });\n}\n\nfunction rotateLabels (labels, rotation_degree) {\n if (rotation_degree) {\n labels.attr('transform', function () {\n var elem = d3.select(this);\n return 'rotate(' + rotation_degree + ' ' + elem.attr('x') + ',' + elem.attr('y') + ')';\n });\n\n }\n}\n\nfunction zeroLine (args, axisArgs) {\n var svg = mg_get_svg_child_of(args.target);\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var scale = args.scales[ns.toUpperCase()];\n var x1, x2, y1, y2;\n if (position === 'left' || position === 'right') {\n x1 = mg_get_plot_left(args);\n x2 = mg_get_plot_right(args);\n y1 = scale(0) + 1;\n y2 = scale(0) + 1;\n }\n if (position === 'bottom' || position === 'top') {\n y1 = mg_get_plot_top(args);\n y2 = mg_get_plot_bottom(args);\n x1 = scale(0) - 1;\n x2 = scale(0) - 1;\n }\n\n svg.append('line')\n .attr('x1', x1)\n .attr('x2', x2)\n .attr('y1', y1)\n .attr('y2', y2)\n .attr('stroke', 'black');\n}\n\nvar mgDrawAxis = {};\n\nmgDrawAxis.categorical = function (args, axisArgs) {\n var ns = axisArgs.namespace;\n\n categoricalLabels(args, axisArgs);\n categoricalGuides(args, axisArgs);\n};\n\nmgDrawAxis.numerical = function (args, axisArgs) {\n var namespace = axisArgs.namespace;\n var axisName = namespace + '_axis';\n var axisClass = 'mg-' + namespace + '-axis';\n var svg = mg_get_svg_child_of(args.target);\n\n mg_selectAll_and_remove(svg, '.' + axisClass);\n\n if (!args[axisName]) {\n return this;\n }\n\n var g = mg_add_g(svg, axisClass);\n\n processScaleTicks(args, namespace);\n initializeAxisRim(g, args, axisArgs);\n addTickLines(g, args, axisArgs);\n addNumericalLabels(g, args, axisArgs);\n\n // add label\n if (args[namespace + '_label']) {\n axisArgs.label(svg.select('.mg-' + namespace + '-axis'), args);\n }\n\n // add rugs\n if (args[namespace + '_rug']) {\n rug(args, axisArgs);\n }\n\n if (args.show_bar_zero) {\n mg_bar_add_zero_line(args);\n }\n\n return this;\n};\n\nfunction axisFactory (args) {\n var axisArgs = {};\n axisArgs.type = 'numerical';\n\n this.namespace = function (ns) {\n // take the ns in the scale, and use it to\n axisArgs.namespace = ns;\n return this;\n };\n\n this.rug = function (tf) {\n axisArgs.rug = tf;\n return this;\n };\n\n this.label = function (tf) {\n axisArgs.label = tf;\n return this;\n };\n\n this.type = function (t) {\n axisArgs.type = t;\n return this;\n };\n\n this.position = function (pos) {\n axisArgs.position = pos;\n return this;\n };\n\n this.zeroLine = function (tf) {\n axisArgs.zeroLine = tf;\n return this;\n };\n\n this.draw = function () {\n mgDrawAxis[axisArgs.type](args, axisArgs);\n return this;\n };\n\n return this;\n\n}\n\nMG.axis_factory = axisFactory;\n\n/* ================================================================================ */\n/* ================================================================================ */\n/* ================================================================================ */\n\nfunction y_rug (args) {\n 'use strict';\n\n if (!args.y_rug) {\n return;\n }\n\n args.rug_buffer_size = args.chart_type === 'point'\n ? args.buffer / 2\n : args.buffer * 2 / 3;\n\n var rug = mg_make_rug(args, 'mg-y-rug');\n\n rug.attr('x1', args.left + 1)\n .attr('x2', args.left + args.rug_buffer_size)\n .attr('y1', args.scalefns.yf)\n .attr('y2', args.scalefns.yf);\n\n mg_add_color_accessor_to_rug(rug, args, 'mg-y-rug-mono');\n}\n\nMG.y_rug = y_rug;\n\nfunction mg_change_y_extents_for_bars (args, my) {\n if (args.chart_type === 'bar') {\n my.min = 0;\n my.max = d3.max(args.data[0], function (d) {\n var trio = [];\n trio.push(d[args.y_accessor]);\n\n if (args.baseline_accessor !== null) {\n trio.push(d[args.baseline_accessor]);\n }\n\n if (args.predictor_accessor !== null) {\n trio.push(d[args.predictor_accessor]);\n }\n\n return Math.max.apply(null, trio);\n });\n }\n return my;\n}\n\nfunction mg_compute_yax_format (args) {\n var yax_format = args.yax_format;\n if (!yax_format) {\n if (args.format === 'count') {\n // increase decimals if we have small values, useful for realtime data\n if (args.processed.max_y < 0.0001) {\n args.decimals = 6;\n } else if (args.processed.max_y < 0.1) {\n args.decimals = 4;\n }\n\n yax_format = function (d) {\n var pf;\n\n if (d < 1.0 && d > -1.0 && d !== 0) {\n // don't scale tiny values\n pf = d3.format(',.' + args.decimals + 'f');\n } else if (d < 1000) {\n pf = d3.format(',.0f');\n } else {\n pf = d3.format(',.2s');\n }\n\n // are we adding units after the value or before?\n if (args.yax_units_append) {\n return pf(d) + args.yax_units;\n } else {\n return args.yax_units + pf(d);\n }\n };\n } else { // percentage\n yax_format = function (d_) {\n var n = d3.format('.0%');\n return n(d_);\n };\n }\n }\n return yax_format;\n}\n\nfunction mg_bar_add_zero_line (args) {\n var svg = mg_get_svg_child_of(args.target);\n var extents = args.scales.X.domain();\n if (0 >= extents[0] && extents[1] >= 0) {\n var r = args.scales.Y.range();\n var g = args.categorical_groups.length\n ? args.scales.YGROUP(args.categorical_groups[args.categorical_groups.length - 1])\n : args.scales.YGROUP();\n\n svg.append('svg:line')\n .attr('x1', args.scales.X(0))\n .attr('x2', args.scales.X(0))\n .attr('y1', r[0] + mg_get_plot_top(args))\n .attr('y2', r[r.length - 1] + g)\n .attr('stroke', 'black')\n .attr('opacity', .2);\n }\n}\n\nfunction set_min_max_y (args) {\n // flatten data\n // remove weird data, if log.\n var data = mg_flatten_array(args.data);\n\n if (args.y_scale_type === 'log') {\n data = data.filter(function (d) {\n return d[args.y_accessor] > 0;\n });\n }\n\n if (args.baselines) {\n data = data.concat(args.baselines);\n }\n\n var extents = d3.extent(data, function (d) {\n return d[args.y_accessor];\n });\n\n var my = {};\n my.min = extents[0];\n my.max = extents[1];\n // the default case is for the y-axis to start at 0, unless we explicitly want it\n // to start at an arbitrary number or from the data's minimum value\n if (my.min >= 0 && !args.min_y && !args.min_y_from_data) {\n my.min = 0;\n }\n\n mg_change_y_extents_for_bars(args, my);\n my.min = (args.min_y !== null) ? args.min_y : my.min;\n\n my.max = (args.max_y !== null) ? args.max_y : (my.max < 0) ? my.max + (my.max - my.max * args.inflator) : my.max * args.inflator;\n\n if (args.y_scale_type !== 'log' && my.min < 0) {\n my.min = my.min - (my.min - my.min * args.inflator);\n }\n\n if (!args.min_y && args.min_y_from_data) {\n var buff = (my.max - my.min) * .01;\n my.min = extents[0] - buff;\n my.max = extents[1] + buff;\n }\n args.processed.min_y = my.min;\n args.processed.max_y = my.max;\n}\n\nfunction mg_y_domain_range (args, scale) {\n scale.domain([args.processed.min_y, args.processed.max_y])\n .range([mg_get_plot_bottom(args), args.top]);\n return scale;\n}\n\nfunction mg_define_y_scales (args) {\n var scale = (mg_is_function(args.y_scale_type))\n ? args.y_scale_type()\n : (args.y_scale_type === 'log')\n ? d3.scaleLog()\n : d3.scaleLinear();\n\n if (args.y_scale_type === 'log') {\n if (args.chart_type === 'histogram') {\n // log histogram plots should start just below 1\n // so that bins with single counts are visible\n args.processed.min_y = 0.2;\n } else {\n if (args.processed.min_y <= 0) {\n args.processed.min_y = 1;\n }\n }\n }\n args.scales.Y = mg_y_domain_range(args, scale);\n args.scales.Y.clamp(args.y_scale_type === 'log');\n\n // used for ticks and such, and designed to be paired with log or linear\n args.scales.Y_axis = mg_y_domain_range(args, d3.scaleLinear());\n}\n\nfunction mg_add_y_label (g, args) {\n if (args.y_label) {\n g.append('text')\n .attr('class', 'label')\n .attr('x', function () {\n return -1 * (mg_get_plot_top(args) +\n ((mg_get_plot_bottom(args)) - (mg_get_plot_top(args))) / 2);\n })\n .attr('y', function () {\n return args.left / 2;\n })\n .attr('dy', '0.4em')\n .attr('text-anchor', 'middle')\n .text(function (d) {\n return args.y_label;\n })\n .attr('transform', function (d) {\n return 'rotate(-90)';\n });\n }\n}\n\nfunction mg_add_y_axis_rim (g, args) {\n var tick_length = args.processed.y_ticks.length;\n if (!args.x_extended_ticks && !args.y_extended_ticks && tick_length) {\n var y1scale, y2scale;\n\n if (args.axes_not_compact && args.chart_type !== 'bar') {\n y1scale = args.height - args.bottom;\n y2scale = args.top;\n } else if (tick_length) {\n y1scale = args.scales.Y(args.processed.y_ticks[0]).toFixed(2);\n y2scale = args.scales.Y(args.processed.y_ticks[tick_length - 1]).toFixed(2);\n } else {\n y1scale = 0;\n y2scale = 0;\n }\n\n g.append('line')\n .attr('x1', args.left)\n .attr('x2', args.left)\n .attr('y1', y1scale)\n .attr('y2', y2scale);\n }\n}\n\nfunction mg_add_y_axis_tick_lines (g, args) {\n g.selectAll('.mg-yax-ticks')\n .data(args.processed.y_ticks).enter()\n .append('line')\n .classed('mg-extended-yax-ticks', args.y_extended_ticks)\n .attr('x1', args.left)\n .attr('x2', function () {\n return (args.y_extended_ticks) ? args.width - args.right : args.left - args.yax_tick_length;\n })\n .attr('y1', function (d) {\n return args.scales.Y(d).toFixed(2);\n })\n .attr('y2', function (d) {\n return args.scales.Y(d).toFixed(2);\n });\n}\n\nfunction mg_add_y_axis_tick_labels (g, args) {\n var yax_format = mg_compute_yax_format(args);\n g.selectAll('.mg-yax-labels')\n .data(args.processed.y_ticks).enter()\n .append('text')\n .attr('x', args.left - args.yax_tick_length * 3 / 2)\n .attr('dx', -3)\n .attr('y', function (d) {\n return args.scales.Y(d).toFixed(2);\n })\n .attr('dy', '.35em')\n .attr('text-anchor', 'end')\n .text(function (d) {\n var o = yax_format(d);\n return o;\n });\n}\n\n// TODO ought to be deprecated, only used by histogram\nfunction y_axis (args) {\n if (!args.processed) {\n args.processed = {};\n }\n\n var svg = mg_get_svg_child_of(args.target);\n MG.call_hook('y_axis.process_min_max', args, args.processed.min_y, args.processed.max_y);\n mg_selectAll_and_remove(svg, '.mg-y-axis');\n\n if (!args.y_axis) {\n return this;\n }\n\n var g = mg_add_g(svg, 'mg-y-axis');\n mg_add_y_label(g, args);\n mg_process_scale_ticks(args, 'y');\n mg_add_y_axis_rim(g, args);\n mg_add_y_axis_tick_lines(g, args);\n mg_add_y_axis_tick_labels(g, args);\n\n if (args.y_rug) {\n y_rug(args);\n }\n\n return this;\n}\n\nMG.y_axis = y_axis;\n\nfunction mg_add_categorical_labels (args) {\n var svg = mg_get_svg_child_of(args.target);\n mg_selectAll_and_remove(svg, '.mg-y-axis');\n var g = mg_add_g(svg, 'mg-y-axis');\n var group_g;(args.categorical_groups.length ? args.categorical_groups : ['1']).forEach(function (group) {\n group_g = mg_add_g(g, 'mg-group-' + mg_normalize(group));\n\n if (args.ygroup_accessor !== null) {\n mg_add_group_label(group_g, group, args);\n } else {\n var labels = mg_add_graphic_labels(group_g, group, args);\n mg_rotate_labels(labels, args.rotate_y_labels);\n }\n });\n}\n\nfunction mg_add_graphic_labels (g, group, args) {\n return g.selectAll('text').data(args.scales.Y.domain()).enter().append('svg:text')\n .attr('x', args.left - args.buffer)\n .attr('y', function (d) {\n return args.scales.YGROUP(group) + args.scales.Y(d) + args.scales.Y.bandwidth() / 2;\n })\n .attr('dy', '.35em')\n .attr('text-anchor', 'end')\n .text(String);\n}\n\nfunction mg_add_group_label (g, group, args) {\n g.append('svg:text')\n .classed('mg-barplot-group-label', true)\n .attr('x', args.left - args.buffer)\n .attr('y', args.scales.YGROUP(group) + args.scales.YGROUP.bandwidth() / 2)\n .attr('dy', '.35em')\n .attr('text-anchor', 'end')\n .text(group);\n}\n\nfunction mg_draw_group_lines (args) {\n var svg = mg_get_svg_child_of(args.target);\n var groups = args.scales.YGROUP.domain();\n var first = groups[0];\n var last = groups[groups.length - 1];\n\n svg.select('.mg-category-guides').selectAll('mg-group-lines')\n .data(groups)\n .enter().append('line')\n .attr('x1', mg_get_plot_left(args))\n .attr('x2', mg_get_plot_left(args))\n .attr('y1', function (d) {\n return args.scales.YGROUP(d);\n })\n .attr('y2', function (d) {\n return args.scales.YGROUP(d) + args.ygroup_height;\n })\n .attr('stroke-width', 1);\n}\n\nfunction mg_y_categorical_show_guides (args) {\n // for each group\n // for each data point\n var svg = mg_get_svg_child_of(args.target);\n var alreadyPlotted = [];\n args.data[0].forEach(function (d) {\n if (alreadyPlotted.indexOf(d[args.y_accessor]) === -1) {\n svg.select('.mg-category-guides').append('line')\n .attr('x1', mg_get_plot_left(args))\n .attr('x2', mg_get_plot_right(args))\n .attr('y1', args.scalefns.yf(d) + args.scalefns.ygroupf(d))\n .attr('y2', args.scalefns.yf(d) + args.scalefns.ygroupf(d))\n .attr('stroke-dasharray', '2,1');\n }\n });\n}\n\nfunction y_axis_categorical (args) {\n if (!args.y_axis) {\n return this;\n }\n\n mg_add_categorical_labels(args);\n // mg_draw_group_scaffold(args);\n if (args.show_bar_zero) mg_bar_add_zero_line(args);\n if (args.ygroup_accessor) mg_draw_group_lines(args);\n if (args.y_categorical_show_guides) mg_y_categorical_show_guides(args);\n return this;\n}\n\nMG.y_axis_categorical = y_axis_categorical;\n\nfunction x_rug(args) {\n 'use strict';\n\n if(!args.x_rug) {\n return;\n }\n\n args.rug_buffer_size = args.chart_type === 'point'\n ? args.buffer / 2\n : args.buffer;\n\n var rug = mg_make_rug(args, 'mg-x-rug');\n\n rug.attr('x1', args.scalefns.xf)\n .attr('x2', args.scalefns.xf)\n .attr('y1', args.height - args.bottom - args.rug_buffer_size)\n .attr('y2', args.height - args.bottom);\n\n mg_add_color_accessor_to_rug(rug, args, 'mg-x-rug-mono');\n}\n\nMG.x_rug = x_rug;\n\nfunction mg_add_processed_object(args) {\n if (!args.processed) {\n args.processed = {};\n }\n}\n\n// TODO ought to be deprecated, only used by histogram\nfunction x_axis(args) {\n 'use strict';\n\n var svg = mg_get_svg_child_of(args.target);\n mg_add_processed_object(args);\n\n mg_select_xax_format(args);\n mg_selectAll_and_remove(svg, '.mg-x-axis');\n\n if (!args.x_axis) {\n return this;\n }\n\n var g = mg_add_g(svg, 'mg-x-axis');\n\n mg_add_x_ticks(g, args);\n mg_add_x_tick_labels(g, args);\n if (args.x_label) { mg_add_x_label(g, args); }\n if (args.x_rug) { x_rug(args); }\n\n return this;\n}\n\nMG.x_axis = x_axis;\n\nfunction x_axis_categorical(args) {\n var svg = mg_get_svg_child_of(args.target);\n var additional_buffer = 0;\n if (args.chart_type === 'bar') {\n additional_buffer = args.buffer + 5;\n }\n\n mg_add_categorical_scale(args, 'X', args.categorical_variables.reverse(), args.left, mg_get_plot_right(args) - additional_buffer);\n mg_add_scale_function(args, 'xf', 'X', 'value');\n mg_selectAll_and_remove(svg, '.mg-x-axis');\n\n var g = mg_add_g(svg, 'mg-x-axis');\n\n if (!args.x_axis) {\n return this;\n }\n\n mg_add_x_axis_categorical_labels(g, args, additional_buffer);\n return this;\n}\n\nfunction mg_add_x_axis_categorical_labels(g, args, additional_buffer) {\n var labels = g.selectAll('text')\n .data(args.categorical_variables)\n .enter()\n .append('text');\n\n labels\n .attr('x', function(d) {\n return args.scales.X(d) + args.scales.X.bandwidth() / 2 + (args.buffer) * args.bar_outer_padding_percentage + (additional_buffer / 2);\n })\n .attr('y', mg_get_plot_bottom(args))\n .attr('dy', '.35em')\n .attr('text-anchor', 'middle')\n .text(String);\n\n if (args.truncate_x_labels) {\n labels.each(function(d, idx) {\n var elem = this, width = args.scales.X.bandwidth();\n truncate_text(elem, d, width);\n });\n }\n mg_rotate_labels(labels, args.rotate_x_labels);\n}\n\nMG.x_axis_categorical = x_axis_categorical;\n\nfunction mg_point_add_color_scale(args) {\n var color_domain, color_range;\n\n if (args.color_accessor !== null) {\n color_domain = mg_get_color_domain(args);\n color_range = mg_get_color_range(args);\n\n if (args.color_type === 'number') {\n args.scales.color = d3.scaleLinear()\n .domain(color_domain)\n .range(color_range)\n .clamp(true);\n } else {\n args.scales.color = args.color_range !== null\n ? d3.scaleOrdinal().range(color_range)\n : (color_domain.length > 10\n ? d3.scaleOrdinal(d3.schemeCategory20)\n : d3.scaleOrdinal(d3.schemeCategory10));\n\n args.scales.color.domain(color_domain);\n }\n mg_add_scale_function(args, 'color', 'color', args.color_accessor);\n }\n}\n\nfunction mg_get_color_domain(args) {\n var color_domain;\n if (args.color_domain === null) {\n if (args.color_type === 'number') {\n color_domain = d3.extent(args.data[0], function(d) {\n return d[args.color_accessor];\n });\n } else if (args.color_type === 'category') {\n color_domain = d3.set(args.data[0]\n .map(function(d) {\n return d[args.color_accessor];\n }))\n .values();\n\n color_domain.sort();\n }\n } else {\n color_domain = args.color_domain;\n }\n return color_domain;\n}\n\nfunction mg_get_color_range(args) {\n var color_range;\n if (args.color_range === null) {\n if (args.color_type === 'number') {\n color_range = ['blue', 'red'];\n } else {\n color_range = null;\n }\n } else {\n color_range = args.color_range;\n }\n return color_range;\n}\n\nfunction mg_point_add_size_scale(args) {\n var min_size, max_size, size_domain, size_range;\n if (args.size_accessor !== null) {\n size_domain = mg_get_size_domain(args);\n size_range = mg_get_size_range(args);\n\n args.scales.size = d3.scaleLinear()\n .domain(size_domain)\n .range(size_range)\n .clamp(true);\n\n mg_add_scale_function(args, 'size', 'size', args.size_accessor);\n }\n}\n\nfunction mg_get_size_domain(args) {\n return (args.size_domain === null)\n ? d3.extent(args.data[0], function(d) { return d[args.size_accessor]; })\n : args.size_domain;\n}\n\nfunction mg_get_size_range(args) {\n var size_range;\n if (args.size_range === null) {\n size_range = [1, 5];\n } else {\n size_range = args.size_range;\n }\n return size_range;\n}\n\nfunction mg_add_x_label(g, args) {\n if (args.x_label) {\n g.append('text')\n .attr('class', 'label')\n .attr('x', function() {\n return mg_get_plot_left(args) + (mg_get_plot_right(args) - mg_get_plot_left(args)) / 2;\n })\n .attr('dx', args.x_label_nudge_x != null ? args.x_label_nudge_x : 0)\n .attr('y', function() {\n var xAxisTextElement = d3.select(args.target)\n .select('.mg-x-axis text').node().getBoundingClientRect();\n return mg_get_bottom(args) + args.xax_tick_length * (7 / 3) + xAxisTextElement.height * 0.8 + 10;\n })\n .attr('dy', '.5em')\n .attr('text-anchor', 'middle')\n .text(function(d) {\n return args.x_label;\n });\n }\n}\n\nfunction mg_default_bar_xax_format(args) {\n return function(d) {\n if (d < 1.0 && d > -1.0 && d !== 0) {\n // don't scale tiny values\n return args.xax_units + d.toFixed(args.decimals);\n } else {\n var pf = d3.format(',.0f');\n return args.xax_units + pf(d);\n }\n };\n}\n\nfunction mg_get_time_frame(diff) {\n // diff should be (max_x - min_x) / 1000, in other words, the difference in seconds.\n var time_frame;\n if (mg_milisec_diff(diff)) {\n time_frame = 'millis';\n } else if (mg_sec_diff(diff)) {\n time_frame = 'seconds';\n } else if (mg_day_diff(diff)) {\n time_frame = 'less-than-a-day';\n } else if (mg_four_days(diff)) {\n time_frame = 'four-days';\n } else if (mg_many_days(diff)) { // a handful of months?\n time_frame = 'many-days';\n } else if (mg_many_months(diff)) {\n time_frame = 'many-months';\n } else if (mg_years(diff)) {\n time_frame = 'years';\n } else {\n time_frame = 'default';\n }\n return time_frame;\n}\n\nfunction mg_milisec_diff(diff) {\n return diff < 10;\n}\n\nfunction mg_sec_diff(diff) {\n return diff < 60;\n}\n\nfunction mg_day_diff(diff) {\n return diff / (60 * 60) <= 24;\n}\n\nfunction mg_four_days(diff) {\n return diff / (60 * 60) <= 24 * 4;\n}\n\nfunction mg_many_days(diff) {\n return diff / (60 * 60 * 24) <= 93;\n}\n\nfunction mg_many_months(diff) {\n return diff / (60 * 60 * 24) < 365 * 2;\n}\n\nfunction mg_years(diff) {\n return diff / (60 * 60 * 24) >= 365 * 2;\n}\n\nfunction mg_get_time_format(utc, diff) {\n var main_time_format;\n if (mg_milisec_diff(diff)) {\n main_time_format = MG.time_format(utc, '%M:%S.%L');\n } else if (mg_sec_diff(diff)) {\n main_time_format = MG.time_format(utc, '%M:%S');\n } else if (mg_day_diff(diff)) {\n main_time_format = MG.time_format(utc, '%H:%M');\n } else if (mg_four_days(diff)) {\n main_time_format = MG.time_format(utc, '%H:%M');\n } else if (mg_many_days(diff)) {\n main_time_format = MG.time_format(utc, '%b %d');\n } else if (mg_many_months(diff)) {\n main_time_format = MG.time_format(utc, '%b');\n } else {\n main_time_format = MG.time_format(utc, '%Y');\n }\n return main_time_format;\n}\n\nfunction mg_process_time_format(args) {\n var diff;\n var main_time_format;\n var time_frame;\n\n if (args.time_series) {\n diff = (args.processed.max_x - args.processed.min_x) / 1000;\n time_frame = mg_get_time_frame(diff);\n main_time_format = mg_get_time_format(args.utc_time, diff);\n }\n\n args.processed.main_x_time_format = main_time_format;\n args.processed.x_time_frame = time_frame;\n}\n\nfunction mg_default_xax_format(args) {\n if (args.xax_format) {\n return args.xax_format;\n }\n\n var data = args.processed.original_data || args.data;\n var flattened = mg_flatten_array(data)[0];\n var test_point_x = flattened[args.processed.original_x_accessor || args.x_accessor];\n if (test_point_x === undefined) {\n test_point_x = flattened;\n }\n\n return function(d) {\n mg_process_time_format(args);\n\n if (mg_is_date(test_point_x)) {\n return args.processed.main_x_time_format(new Date(d));\n } else if (typeof test_point_x === 'number') {\n var is_float = d % 1 !== 0;\n var pf;\n\n if (is_float) {\n pf = d3.format(',.' + args.decimals + 'f');\n } else if (d < 1000) {\n pf = d3.format(',.0f');\n } else {\n pf = d3.format(',.2s');\n }\n return args.xax_units + pf(d);\n } else {\n return args.xax_units + d;\n }\n };\n}\n\nfunction mg_add_x_ticks(g, args) {\n mg_process_scale_ticks(args, 'x');\n mg_add_x_axis_rim(args, g);\n mg_add_x_axis_tick_lines(args, g);\n}\n\nfunction mg_add_x_axis_rim(args, g) {\n var tick_length = args.processed.x_ticks.length;\n var last_i = args.scales.X.ticks(args.xax_count).length - 1;\n\n if (!args.x_extended_ticks) {\n g.append('line')\n .attr('x1', function() {\n if (args.xax_count === 0) {\n return mg_get_plot_left(args);\n } else if (args.axes_not_compact && args.chart_type !== 'bar') {\n return args.left;\n } else {\n return (args.scales.X(args.scales.X.ticks(args.xax_count)[0])).toFixed(2);\n }\n })\n .attr('x2', function() {\n if (args.xax_count === 0 || (args.axes_not_compact && args.chart_type !== 'bar')) {\n return mg_get_right(args);\n } else {\n return args.scales.X(args.scales.X.ticks(args.xax_count)[last_i]).toFixed(2);\n }\n })\n .attr('y1', args.height - args.bottom)\n .attr('y2', args.height - args.bottom);\n }\n}\n\nfunction mg_add_x_axis_tick_lines(args, g) {\n g.selectAll('.mg-xax-ticks')\n .data(args.processed.x_ticks).enter()\n .append('line')\n .attr('x1', function(d) {\n return args.scales.X(d).toFixed(2); })\n .attr('x2', function(d) {\n return args.scales.X(d).toFixed(2); })\n .attr('y1', args.height - args.bottom)\n .attr('y2', function() {\n return (args.x_extended_ticks) ? args.top : args.height - args.bottom + args.xax_tick_length;\n })\n .attr('class', function() {\n if (args.x_extended_ticks) {\n return 'mg-extended-xax-ticks';\n }\n })\n .classed('mg-xax-ticks', true);\n}\n\nfunction mg_add_x_tick_labels(g, args) {\n mg_add_primary_x_axis_label(args, g);\n mg_add_secondary_x_axis_label(args, g);\n}\n\nfunction mg_add_primary_x_axis_label(args, g) {\n var labels = g.selectAll('.mg-xax-labels')\n .data(args.processed.x_ticks).enter()\n .append('text')\n .attr('x', function(d) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('y', (args.height - args.bottom + args.xax_tick_length * 7 / 3).toFixed(2))\n .attr('dy', '.50em')\n .attr('text-anchor', 'middle');\n\n if (args.time_series && args.european_clock) {\n labels.append('tspan').classed('mg-european-hours', true).text(function(_d, i) {\n var d = new Date(_d);\n if (i === 0) return d3.timeFormat('%H')(d);\n else return '';\n });\n labels.append('tspan').classed('mg-european-minutes-seconds', true).text(function(_d, i) {\n var d = new Date(_d);\n return ':' + args.processed.xax_format(d);\n });\n } else {\n labels.text(function(d) {\n return args.xax_units + args.processed.xax_format(d);\n });\n }\n\n // CHECK TO SEE IF OVERLAP for labels. If so,\n // remove half of them. This is a dirty hack.\n // We will need to figure out a more principled way of doing this.\n if (mg_elements_are_overlapping(labels)) {\n labels.filter(function(d, i) {\n return (i + 1) % 2 === 0;\n }).remove();\n\n var svg = mg_get_svg_child_of(args.target);\n svg.selectAll('.mg-xax-ticks')\n .filter(function(d, i) {\n return (i + 1) % 2 === 0;\n })\n .remove();\n }\n}\n\nfunction mg_add_secondary_x_axis_label(args, g) {\n if (args.time_series && (args.show_years || args.show_secondary_x_label)) {\n var tf = mg_get_yformat_and_secondary_time_function(args);\n mg_add_secondary_x_axis_elements(args, g, tf.timeframe, tf.yformat, tf.secondary);\n }\n}\n\nfunction mg_get_yformat_and_secondary_time_function(args) {\n var tf = {};\n tf.timeframe = args.processed.x_time_frame;\n switch (tf.timeframe) {\n case 'millis':\n case 'seconds':\n tf.secondary = d3.timeDays;\n if (args.european_clock) tf.yformat = MG.time_format(args.utc_time, '%b %d');\n else tf.yformat = MG.time_format(args.utc_time, '%I %p');\n break;\n case 'less-than-a-day':\n tf.secondary = d3.timeDays;\n tf.yformat = MG.time_format(args.utc_time, '%b %d');\n break;\n case 'four-days':\n tf.secondary = d3.timeDays;\n tf.yformat = MG.time_format(args.utc_time, '%b %d');\n break;\n case 'many-days':\n tf.secondary = d3.timeYears;\n tf.yformat = MG.time_format(args.utc_time, '%Y');\n break;\n case 'many-months':\n tf.secondary = d3.timeYears;\n tf.yformat = MG.time_format(args.utc_time, '%Y');\n break;\n default:\n tf.secondary = d3.timeYears;\n tf.yformat = MG.time_format(args.utc_time, '%Y');\n }\n return tf;\n}\n\nfunction mg_add_secondary_x_axis_elements(args, g, time_frame, yformat, secondary_function) {\n var years = secondary_function(args.processed.min_x, args.processed.max_x);\n if (years.length === 0) {\n var first_tick = args.scales.X.ticks(args.xax_count)[0];\n years = [first_tick];\n }\n\n var yg = mg_add_g(g, 'mg-year-marker');\n if (time_frame === 'default' && args.show_year_markers) {\n mg_add_year_marker_line(args, yg, years, yformat);\n }\n if (time_frame != 'years') mg_add_year_marker_text(args, yg, years, yformat);\n}\n\nfunction mg_add_year_marker_line(args, g, years, yformat) {\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('line')\n .attr('x1', function(d) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('x2', function(d) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('y1', mg_get_top(args))\n .attr('y2', mg_get_bottom(args));\n}\n\nfunction mg_add_year_marker_text(args, g, years, yformat) {\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('text')\n .attr('x', function(d, i) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('y', function() {\n var xAxisTextElement = d3.select(args.target)\n .select('.mg-x-axis text').node().getBoundingClientRect();\n return (mg_get_bottom(args) + args.xax_tick_length * 7 / 3) + (xAxisTextElement.height * 0.8);\n })\n .attr('dy', '.50em')\n .attr('text-anchor', 'middle')\n .text(function(d) {\n return yformat(new Date(d));\n });\n}\n\nfunction mg_min_max_x_for_nonbars(mx, args, data) {\n var extent_x = d3.extent(data, function(d) {\n return d[args.x_accessor];\n });\n mx.min = extent_x[0];\n mx.max = extent_x[1];\n}\n\nfunction mg_min_max_x_for_bars(mx, args, data) {\n mx.min = d3.min(data, function(d) {\n var trio = [\n d[args.x_accessor],\n (d[args.baseline_accessor]) ? d[args.baseline_accessor] : 0,\n (d[args.predictor_accessor]) ? d[args.predictor_accessor] : 0\n ];\n return Math.min.apply(null, trio);\n });\n\n if (mx.min > 0) mx.min = 0;\n\n mx.max = d3.max(data, function(d) {\n var trio = [\n d[args.x_accessor],\n (d[args.baseline_accessor]) ? d[args.baseline_accessor] : 0,\n (d[args.predictor_accessor]) ? d[args.predictor_accessor] : 0\n ];\n return Math.max.apply(null, trio);\n });\n return mx;\n}\n\nfunction mg_min_max_x_for_dates(mx) {\n var yesterday = MG.clone(mx.min).setDate(mx.min.getDate() - 1);\n var tomorrow = MG.clone(mx.min).setDate(mx.min.getDate() + 1);\n mx.min = yesterday;\n mx.max = tomorrow;\n}\n\nfunction mg_min_max_x_for_numbers(mx) {\n // TODO do we want to rewrite this?\n mx.min = mx.min - 1;\n mx.max = mx.max + 1;\n}\n\nfunction mg_min_max_x_for_strings(mx) {\n // TODO shouldn't be allowing strings here to be coerced into numbers\n mx.min = Number(mx.min) - 1;\n mx.max = Number(mx.max) + 1;\n}\n\nfunction mg_force_xax_count_to_be_two(args) {\n args.xax_count = 2;\n}\n\nfunction mg_sort_through_data_type_and_set_x_min_max_accordingly(mx, args, data) {\n if (args.chart_type === 'line' || args.chart_type === 'point' || args.chart_type === 'histogram') {\n mg_min_max_x_for_nonbars(mx, args, data);\n\n } else if (args.chart_type === 'bar') {\n mg_min_max_x_for_bars(mx, args, data);\n }\n // if data set is of length 1, expand the range so that we can build the x-axis\n if (mx.min === mx.max && !(args.min_x && args.max_x)) {\n if (mg_is_date(mx.min)) {\n mg_min_max_x_for_dates(mx);\n } else if (typeof min_x === 'number') {\n mg_min_max_x_for_numbers(mx);\n } else if (typeof min_x === 'string') {\n mg_min_max_x_for_strings(mx);\n }\n // force xax_count to be 2\n mg_force_xax_count_to_be_two(args);\n }\n}\n\nfunction mg_select_xax_format(args) {\n var c = args.chart_type;\n if (!args.processed.xax_format) {\n if (args.xax_format) {\n args.processed.xax_format = args.xax_format;\n } else {\n if (c === 'line' || c === 'point' || c === 'histogram') {\n args.processed.xax_format = mg_default_xax_format(args);\n } else if (c === 'bar') {\n args.processed.xax_format = mg_default_bar_xax_format(args);\n }\n }\n }\n}\n\nfunction mg_merge_args_with_defaults(args) {\n var defaults = {\n target: null,\n title: null,\n description: null\n };\n\n if (!args) {\n args = {};\n }\n\n if (!args.processed) {\n args.processed = {};\n }\n\n args = merge_with_defaults(args, defaults);\n return args;\n}\n\nfunction mg_is_time_series(args) {\n var first_elem = mg_flatten_array(args.processed.original_data || args.data)[0];\n args.time_series = mg_is_date(first_elem[args.processed.original_x_accessor || args.x_accessor]);\n}\n\nfunction mg_init_compute_width(args) {\n var svg_width = args.width;\n if (args.full_width) {\n svg_width = get_width(args.target);\n }\n if (args.x_axis_type === 'categorical' && svg_width === null) {\n svg_width = mg_categorical_calculate_height(args, 'x');\n }\n\n args.width = svg_width;\n}\n\nfunction mg_init_compute_height(args) {\n var svg_height = args.height;\n if (args.full_height) {\n svg_height = get_height(args.target);\n }\n if (args.y_axis_type === 'categorical' && svg_height === null) {\n svg_height = mg_categorical_calculate_height(args, 'y');\n }\n\n args.height = svg_height;\n}\n\nfunction mg_remove_svg_if_chart_type_has_changed(svg, args) {\n if ((!svg.selectAll('.mg-main-line').empty() && args.chart_type !== 'line') ||\n (!svg.selectAll('.mg-points').empty() && args.chart_type !== 'point') ||\n (!svg.selectAll('.mg-histogram').empty() && args.chart_type !== 'histogram') ||\n (!svg.selectAll('.mg-barplot').empty() && args.chart_type !== 'bar')\n ) {\n svg.remove();\n }\n}\n\nfunction mg_add_svg_if_it_doesnt_exist(svg, args) {\n if (mg_get_svg_child_of(args.target).empty()) {\n svg = d3.select(args.target)\n .append('svg')\n .classed('linked', args.linked)\n .attr('width', args.width)\n .attr('height', args.height);\n }\n return svg;\n}\n\nfunction mg_add_clip_path_for_plot_area(svg, args) {\n svg.selectAll('.mg-clip-path').remove();\n svg.append('defs')\n .attr('class', 'mg-clip-path')\n .append('clipPath')\n .attr('id', 'mg-plot-window-' + mg_target_ref(args.target))\n .append('svg:rect')\n .attr('x', mg_get_left(args))\n .attr('y', mg_get_top(args))\n .attr('width', args.width - args.left - args.right - args.buffer)\n .attr('height', args.height - args.top - args.bottom - args.buffer + 1);\n}\n\nfunction mg_adjust_width_and_height_if_changed(svg, args) {\n if (args.width !== Number(svg.attr('width'))) {\n svg.attr('width', args.width);\n }\n if (args.height !== Number(svg.attr('height'))) {\n svg.attr('height', args.height);\n }\n}\n\nfunction mg_set_viewbox_for_scaling(svg, args) {\n // we need to reconsider how we handle automatic scaling\n svg.attr('viewBox', '0 0 ' + args.width + ' ' + args.height);\n if (args.full_width || args.full_height) {\n svg.attr('preserveAspectRatio', 'xMinYMin meet');\n }\n}\n\nfunction mg_remove_missing_classes_and_text(svg) {\n // remove missing class\n svg.classed('mg-missing', false);\n\n // remove missing text\n svg.selectAll('.mg-missing-text').remove();\n svg.selectAll('.mg-missing-pane').remove();\n}\n\nfunction mg_remove_outdated_lines(svg, args) {\n // if we're updating an existing chart and we have fewer lines than\n // before, remove the outdated lines, e.g. if we had 3 lines, and we're calling\n // data_graphic() on the same target with 2 lines, remove the 3rd line\n\n var i = 0;\n\n if (svg.selectAll('.mg-main-line').nodes().length >= args.data.length) {\n // now, the thing is we can't just remove, say, line3 if we have a custom\n // line-color map, instead, see which are the lines to be removed, and delete those\n if (args.custom_line_color_map.length > 0) {\n var array_full_series = function(len) {\n var arr = new Array(len);\n for (var i = 0; i < arr.length; i++) { arr[i] = i + 1; }\n return arr;\n };\n\n // get an array of lines ids to remove\n var lines_to_remove = arr_diff(\n array_full_series(args.max_data_size),\n args.custom_line_color_map);\n\n for (i = 0; i < lines_to_remove.length; i++) {\n svg.selectAll('.mg-main-line.mg-line' + lines_to_remove[i] + '-color')\n .remove();\n }\n } else {\n // if we don't have a custom line-color map, just remove the lines from the end\n var num_of_new = args.data.length;\n var num_of_existing = (svg.selectAll('.mg-main-line').nodes()) ? svg.selectAll('.mg-main-line').nodes().length : 0;\n\n for (i = num_of_existing; i > num_of_new; i--) {\n svg.selectAll('.mg-main-line.mg-line' + i + '-color')\n .remove();\n }\n }\n }\n}\n\nfunction mg_raise_container_error(container, args) {\n if (container.empty()) {\n console.warn('The specified target element \"' + args.target + '\" could not be found in the page. The chart will not be rendered.');\n return;\n }\n}\n\nfunction categoricalInitialization(args, ns) {\n var which = ns === 'x' ? args.width : args.height;\n mg_categorical_count_number_of_groups(args, ns);\n mg_categorical_count_number_of_lanes(args, ns);\n mg_categorical_calculate_group_length(args, ns, which);\n if (which) mg_categorical_calculate_bar_thickness(args, ns);\n}\n\n\nfunction mg_categorical_count_number_of_groups(args, ns) {\n var accessor_string = ns + 'group_accessor';\n var accessor = args[accessor_string];\n args.categorical_groups = [];\n if (accessor) {\n var data = args.data[0];\n args.categorical_groups = d3.set(data.map(function(d) {\n return d[accessor] })).values();\n }\n}\n\nfunction mg_categorical_count_number_of_lanes(args, ns) {\n var accessor_string = ns + 'group_accessor';\n var groupAccessor = args[accessor_string];\n\n args.total_bars = args.data[0].length;\n if (groupAccessor) {\n var group_bars = count_array_elements(pluck(args.data[0], groupAccessor));\n group_bars = d3.max(Object.keys(group_bars).map(function(d) {\n return group_bars[d] }));\n args.bars_per_group = group_bars;\n } else {\n args.bars_per_group = args.data[0].length;\n }\n}\n\nfunction mg_categorical_calculate_group_length(args, ns, which) {\n var groupHeight = ns + 'group_height';\n if (which) {\n var gh = ns === 'y' ?\n (args.height - args.top - args.bottom - args.buffer * 2) / (args.categorical_groups.length || 1) :\n (args.width - args.left - args.right - args.buffer * 2) / (args.categorical_groups.length || 1);\n\n args[groupHeight] = gh;\n } else {\n var step = (1 + args[ns + '_padding_percentage']) * args.bar_thickness;\n args[groupHeight] = args.bars_per_group * step + args[ns + '_outer_padding_percentage'] * 2 * step; //args.bar_thickness + (((args.bars_per_group-1) * args.bar_thickness) * (args.bar_padding_percentage + args.bar_outer_padding_percentage*2));\n }\n}\n\nfunction mg_categorical_calculate_bar_thickness(args, ns) {\n // take one group height.\n var step = (args[ns + 'group_height']) / (args.bars_per_group + args[ns + '_outer_padding_percentage']);\n args.bar_thickness = step - (step * args[ns + '_padding_percentage']);\n}\n\nfunction mg_categorical_calculate_height(args, ns) {\n var groupContribution = (args[ns + 'group_height']) * (args.categorical_groups.length || 1);\n\n var marginContribution = ns === 'y'\n ? args.top + args.bottom + args.buffer * 2\n : args.left + args.right + args.buffer * 2;\n\n return groupContribution + marginContribution +\n (args.categorical_groups.length * args[ns + 'group_height'] * (args[ns + 'group_padding_percentage'] + args[ns + 'group_outer_padding_percentage']));\n}\n\nfunction mg_barchart_extrapolate_group_and_thickness_from_height(args) {\n // we need to set args.bar_thickness, group_height\n}\n\nfunction init(args) {\n 'use strict';\n args = arguments[0];\n args = mg_merge_args_with_defaults(args);\n // If you pass in a dom element for args.target, the expectation\n // of a string elsewhere will break.\n var container = d3.select(args.target);\n mg_raise_container_error(container, args);\n\n var svg = container.selectAll('svg');\n\n // some things that will need to be calculated if we have a categorical axis.\n if (args.y_axis_type === 'categorical') { categoricalInitialization(args, 'y'); }\n if (args.x_axis_type === 'categorical') { categoricalInitialization(args, 'x'); }\n\n mg_is_time_series(args);\n mg_init_compute_width(args);\n mg_init_compute_height(args);\n\n mg_remove_svg_if_chart_type_has_changed(svg, args);\n svg = mg_add_svg_if_it_doesnt_exist(svg, args);\n\n mg_add_clip_path_for_plot_area(svg, args);\n mg_adjust_width_and_height_if_changed(svg, args);\n mg_set_viewbox_for_scaling(svg, args);\n mg_remove_missing_classes_and_text(svg);\n chart_title(args);\n mg_remove_outdated_lines(svg, args);\n\n return this;\n}\n\nMG.init = init;\n\nfunction mg_return_label(d) {\n return d.label;\n}\n\nfunction mg_remove_existing_markers(svg) {\n svg.selectAll('.mg-markers').remove();\n svg.selectAll('.mg-baselines').remove();\n}\n\nfunction mg_in_range(args) {\n return function(d) {\n return (args.scales.X(d[args.x_accessor]) >= mg_get_plot_left(args)) && (args.scales.X(d[args.x_accessor]) <= mg_get_plot_right(args));\n };\n}\n\nfunction mg_x_position(args) {\n return function(d) {\n return args.scales.X(d[args.x_accessor]);\n };\n}\n\nfunction mg_x_position_fixed(args) {\n var _mg_x_pos = mg_x_position(args);\n return function(d) {\n return _mg_x_pos(d).toFixed(2);\n };\n}\n\nfunction mg_y_position_fixed(args) {\n var _mg_y_pos = args.scales.Y;\n return function(d) {\n return _mg_y_pos(d.value).toFixed(2);\n };\n}\n\nfunction mg_place_annotations(checker, class_name, args, svg, line_fcn, text_fcn) {\n var g;\n if (checker) {\n g = svg.append('g').attr('class', class_name);\n line_fcn(g, args);\n text_fcn(g, args);\n }\n}\n\nfunction mg_place_markers(args, svg) {\n mg_place_annotations(args.markers, 'mg-markers', args, svg, mg_place_marker_lines, mg_place_marker_text);\n}\n\nfunction mg_place_baselines(args, svg) {\n mg_place_annotations(args.baselines, 'mg-baselines', args, svg, mg_place_baseline_lines, mg_place_baseline_text);\n}\n\nfunction mg_place_marker_lines(gm, args) {\n var x_pos_fixed = mg_x_position_fixed(args);\n gm.selectAll('.mg-markers')\n .data(args.markers.filter(mg_in_range(args)))\n .enter()\n .append('line')\n .attr('x1', x_pos_fixed)\n .attr('x2', x_pos_fixed)\n .attr('y1', args.top)\n .attr('y2', mg_get_plot_bottom(args))\n .attr('class', function(d) {\n return d.lineclass;\n })\n .attr('stroke-dasharray', '3,1');\n}\n\nfunction mg_place_marker_text(gm, args) {\n gm.selectAll('.mg-markers')\n .data(args.markers.filter(mg_in_range(args)))\n .enter()\n .append('text')\n .attr('class', function(d) {\n return d.textclass || ''; })\n .classed('mg-marker-text', true)\n .attr('x', mg_x_position(args))\n .attr('y', args.x_axis_position === 'bottom' ? mg_get_top(args) * 0.95 : mg_get_bottom(args) + args.buffer)\n .attr('text-anchor', 'middle')\n .text(mg_return_label)\n .each(function(d) {\n if (d.click) {\n d3.select(this).style('cursor', 'pointer')\n .on('click', d.click);\n }\n });\n\n mg_prevent_horizontal_overlap(gm.selectAll('.mg-marker-text').nodes(), args);\n}\n\nfunction mg_place_baseline_lines(gb, args) {\n var y_pos = mg_y_position_fixed(args);\n gb.selectAll('.mg-baselines')\n .data(args.baselines)\n .enter().append('line')\n .attr('x1', mg_get_plot_left(args))\n .attr('x2', mg_get_plot_right(args))\n .attr('y1', y_pos)\n .attr('y2', y_pos);\n}\n\nfunction mg_place_baseline_text(gb, args) {\n var y_pos = mg_y_position_fixed(args);\n gb.selectAll('.mg-baselines')\n .data(args.baselines)\n .enter().append('text')\n .attr('x', mg_get_plot_right(args))\n .attr('y', y_pos)\n .attr('dy', -3)\n .attr('text-anchor', 'end')\n .text(mg_return_label);\n}\n\nfunction markers(args) {\n 'use strict';\n\n var svg = mg_get_svg_child_of(args.target);\n mg_remove_existing_markers(svg);\n mg_place_markers(args, svg);\n mg_place_baselines(args, svg);\n return this;\n}\n\nMG.markers = markers;\n\nfunction mg_clear_mouseover_container(svg) {\n svg.selectAll('.mg-active-datapoint-container').selectAll('*').remove();\n}\n\nfunction mg_setup_mouseover_container(svg, args) {\n svg.select('.mg-active-datapoint').remove();\n var text_anchor = args.mouseover_align === 'right'\n ? 'end'\n : (args.mouseover_align === 'left'\n ? 'start'\n : 'middle');\n\n var mouseover_x = (args.mouseover_align === 'right')\n ? mg_get_plot_right(args)\n : (args.mouseover_align === 'left'\n ? mg_get_plot_left(args)\n : (args.width - args.left - args.right) / 2 + args.left);\n\n var active_datapoint = svg.select('.mg-active-datapoint-container')\n .append('text')\n .attr('class', 'mg-active-datapoint')\n .attr('xml:space', 'preserve')\n .attr('text-anchor', text_anchor);\n\n // set the rollover text's position; if we have markers on two lines,\n // nudge up the rollover text a bit\n var active_datapoint_y_nudge = 0.75;\n\n var y_position = (args.x_axis_position === 'bottom')\n ? mg_get_top(args) * active_datapoint_y_nudge\n : mg_get_bottom(args) + args.buffer * 3;\n\n if (args.markers) {\n var yPos;\n svg.selectAll('.mg-marker-text')\n .each(function() {\n if (!yPos) {\n yPos = d3.select(this).attr('y');\n } else if (yPos !== d3.select(this).attr('y')) {\n active_datapoint_y_nudge = 0.56;\n }\n });\n }\n\n active_datapoint\n .attr('transform', 'translate(' + mouseover_x + ',' + (y_position) + ')');\n}\n\nfunction mg_mouseover_tspan(svg, text) {\n var tspan = '';\n var cl = null;\n if (arguments.length === 3) cl = arguments[2];\n tspan = svg.append('tspan').text(text);\n if (cl !== null) tspan.classed(cl, true);\n this.tspan = tspan;\n\n this.bold = function() {\n this.tspan.attr('font-weight', 'bold');\n return this;\n };\n\n this.font_size = function(pts) {\n this.tspan.attr('font-size', pts);\n return this;\n }\n\n this.x = function(x) {\n this.tspan.attr('x', x);\n return this;\n };\n this.y = function(y) {\n this.tspan.attr('y', y);\n return this;\n };\n this.elem = function() {\n return this.tspan;\n };\n return this;\n}\n\nfunction mg_reset_text_container(svg) {\n var textContainer = svg.select('.mg-active-datapoint');\n textContainer\n .selectAll('*')\n .remove();\n return textContainer;\n}\n\nfunction mg_mouseover_row(row_number, container, rargs) {\n var lineHeight = 1.1;\n this.rargs = rargs;\n\n var rrr = container.append('tspan')\n .attr('x', 0)\n .attr('y', (row_number * lineHeight) + 'em');\n\n this.text = function(text) {\n return mg_mouseover_tspan(rrr, text);\n }\n return this;\n}\n\nfunction mg_mouseover_text(args, rargs) {\n var lineHeight = 1.1;\n this.row_number = 0;\n this.rargs = rargs;\n mg_setup_mouseover_container(rargs.svg, args);\n\n this.text_container = mg_reset_text_container(rargs.svg);\n\n this.mouseover_row = function(rargs) {\n var that = this;\n var rrr = mg_mouseover_row(that.row_number, that.text_container, rargs);\n that.row_number += 1;\n return rrr;\n }\n\n return this;\n}\n\nfunction MG_WindowResizeTracker() {\n var targets = [];\n\n var Observer;\n if (typeof MutationObserver !== \"undefined\") {\n Observer = MutationObserver;\n } else if (typeof WebKitMutationObserver !== \"undefined\") {\n Observer = WebKitMutationObserver;\n }\n\n function window_listener() {\n targets.forEach(function(target) {\n var svg = d3.select(target).select('svg');\n\n // skip if svg is not visible\n if (!svg.empty() && (svg.node().parentNode.offsetWidth > 0 || svg.node().parentNode.offsetHeight > 0)) {\n var aspect = svg.attr('width') !== 0 ? (svg.attr('height') / svg.attr('width')) : 0;\n\n var newWidth = get_width(target);\n\n svg.attr('width', newWidth);\n svg.attr('height', aspect * newWidth);\n }\n });\n }\n\n function remove_target(target) {\n var index = targets.indexOf(target);\n if (index !== -1) {\n targets.splice(index, 1);\n }\n\n if (targets.length === 0) {\n window.removeEventListener('resize', window_listener, true);\n }\n }\n\n return {\n add_target: function(target) {\n if (targets.length === 0) {\n window.addEventListener('resize', window_listener, true);\n }\n\n if (targets.indexOf(target) === -1) {\n targets.push(target);\n\n if (Observer) {\n var observer = new Observer(function(mutations) {\n var targetNode = d3.select(target).node();\n\n if (!targetNode || mutations.some(\n function(mutation) {\n for (var i = 0; i < mutation.removedNodes.length; i++) {\n if (mutation.removedNodes[i] === targetNode) {\n return true;\n }\n }\n })) {\n observer.disconnect();\n remove_target(target);\n }\n });\n\n observer.observe(d3.select(target).node().parentNode, { childList: true });\n }\n }\n }\n };\n}\n\nvar mg_window_resize_tracker = new MG_WindowResizeTracker();\n\nfunction mg_window_listeners(args) {\n mg_if_aspect_ratio_resize_svg(args);\n}\n\nfunction mg_if_aspect_ratio_resize_svg(args) {\n // have we asked the svg to fill a div, if so resize with div\n if (args.full_width || args.full_height) {\n mg_window_resize_tracker.add_target(args.target);\n }\n}\n\nif (mg_jquery_exists()) {\n /*!\n * Bootstrap v3.3.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n /*!\n * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=c3834cc5b59ef727da53)\n * Config saved to config.json and https://gist.github.com/c3834cc5b59ef727da53\n */\n\n /* ========================================================================\n * Bootstrap: dropdown.js v3.3.1\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n +function ($) {\n 'use strict';\n\n if(typeof $().dropdown == 'function')\n return true;\n\n // DROPDOWN CLASS DEFINITION\n // =========================\n\n var backdrop = '.dropdown-backdrop';\n var toggle = '[data-toggle=\"dropdown\"]';\n var Dropdown = function (element) {\n $(element).on('click.bs.dropdown', this.toggle);\n };\n\n Dropdown.VERSION = '3.3.1';\n\n Dropdown.prototype.toggle = function (e) {\n var $this = $(this);\n\n if ($this.is('.disabled, :disabled')) return;\n\n var $parent = getParent($this);\n var isActive = $parent.hasClass('open');\n\n clearMenus();\n\n if (!isActive) {\n if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n // if mobile we use a backdrop because click events don't delegate\n $('').insertAfter($(this)).on('click', clearMenus);\n }\n\n var relatedTarget = { relatedTarget: this };\n $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget));\n\n if (e.isDefaultPrevented()) return;\n\n $this\n .trigger('focus')\n .attr('aria-expanded', 'true');\n\n $parent\n .toggleClass('open')\n .trigger('shown.bs.dropdown', relatedTarget);\n }\n\n return false;\n };\n\n Dropdown.prototype.keydown = function (e) {\n if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return;\n\n var $this = $(this);\n\n e.preventDefault();\n e.stopPropagation();\n\n if ($this.is('.disabled, :disabled')) return;\n\n var $parent = getParent($this);\n var isActive = $parent.hasClass('open');\n\n if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {\n if (e.which == 27) $parent.find(toggle).trigger('focus');\n return $this.trigger('click');\n }\n\n var desc = ' li:not(.divider):visible a';\n var $items = $parent.find('[role=\"menu\"]' + desc + ', [role=\"listbox\"]' + desc);\n\n if (!$items.length) return;\n\n var index = $items.index(e.target);\n\n if (e.which == 38 && index > 0) index--; // up\n if (e.which == 40 && index < $items.length - 1) index++; // down\n if (!~index) index = 0;\n\n $items.eq(index).trigger('focus');\n };\n\n function clearMenus(e) {\n if (e && e.which === 3) return;\n $(backdrop).remove();\n $(toggle).each(function () {\n var $this = $(this);\n var $parent = getParent($this);\n var relatedTarget = { relatedTarget: this };\n\n if (!$parent.hasClass('open')) return;\n\n $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget));\n\n if (e.isDefaultPrevented()) return;\n\n $this.attr('aria-expanded', 'false');\n $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget);\n });\n }\n\n function getParent($this) {\n var selector = $this.attr('data-target');\n\n if (!selector) {\n selector = $this.attr('href');\n selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, ''); // strip for ie7\n }\n\n var $parent = selector && $(selector);\n\n return $parent && $parent.length ? $parent : $this.parent();\n }\n\n\n // DROPDOWN PLUGIN DEFINITION\n // ==========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data('bs.dropdown');\n\n if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)));\n if (typeof option == 'string') data[option].call($this);\n });\n }\n\n var old = $.fn.dropdown;\n\n $.fn.dropdown = Plugin;\n $.fn.dropdown.Constructor = Dropdown;\n\n\n // DROPDOWN NO CONFLICT\n // ====================\n\n $.fn.dropdown.noConflict = function () {\n $.fn.dropdown = old;\n return this;\n };\n\n\n // APPLY TO STANDARD DROPDOWN ELEMENTS\n // ===================================\n\n $(document)\n .on('click.bs.dropdown.data-api', clearMenus)\n .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation(); })\n .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n .on('keydown.bs.dropdown.data-api', '[role=\"menu\"]', Dropdown.prototype.keydown)\n .on('keydown.bs.dropdown.data-api', '[role=\"listbox\"]', Dropdown.prototype.keydown);\n\n }(jQuery);\n}\n\nMG.button_layout = function(target) {\n 'use strict';\n this.target = target;\n this.feature_set = {};\n this.public_name = {};\n this.sorters = {};\n this.manual = [];\n this.manual_map = {};\n this.manual_callback = {};\n\n this._strip_punctuation = function(s) {\n var punctuationless = s.replace(/[^a-zA-Z0-9 _]+/g, '');\n var finalString = punctuationless.replace(/ +?/g, '');\n return finalString;\n };\n\n this.data = function(data) {\n this._data = data;\n return this;\n };\n\n this.manual_button = function(feature, feature_set, callback) {\n this.feature_set[feature] = feature_set;\n this.manual_map[this._strip_punctuation(feature)] = feature;\n this.manual_callback[feature] = callback; // the default is going to be the first feature.\n return this;\n };\n\n this.button = function(feature) {\n if (arguments.length > 1) {\n this.public_name[feature] = arguments[1];\n }\n\n if (arguments.length > 2) {\n this.sorters[feature] = arguments[2];\n }\n\n this.feature_set[feature] = [];\n return this;\n };\n\n this.callback = function(callback) {\n this._callback = callback;\n return this;\n };\n\n this.display = function() {\n var callback = this._callback;\n var manual_callback = this.manual_callback;\n var manual_map = this.manual_map;\n\n var d, f, features, feat;\n features = Object.keys(this.feature_set);\n\n var mapDtoF = function(f) {\n return d[f]; };\n\n var i;\n\n // build out this.feature_set with this.data\n for (i = 0; i < this._data.length; i++) {\n d = this._data[i];\n f = features.map(mapDtoF);\n for (var j = 0; j < features.length; j++) {\n feat = features[j];\n if (this.feature_set[feat].indexOf(f[j]) === -1) {\n this.feature_set[feat].push(f[j]);\n }\n }\n }\n\n for (feat in this.feature_set) {\n if (this.sorters.hasOwnProperty(feat)) {\n this.feature_set[feat].sort(this.sorters[feat]);\n }\n }\n\n $(this.target).empty();\n\n $(this.target).append(\"\");\n\n var dropdownLiAClick = function() {\n var k = $(this).data('key');\n var feature = $(this).data('feature');\n var manual_feature;\n $('.' + feature + '-btns button.btn span.title').html(k);\n if (!manual_map.hasOwnProperty(feature)) {\n callback(feature, k);\n } else {\n manual_feature = manual_map[feature];\n manual_callback[manual_feature](k);\n }\n\n return false;\n };\n\n for (var feature in this.feature_set) {\n features = this.feature_set[feature];\n $(this.target + ' div.segments').append(\n '' + // This never changes.\n '' +\n '' +\n (!this.manual_callback.hasOwnProperty(feature) ? '
' + '');\n\n for (i = 0; i < features.length; i++) {\n if (features[i] !== 'all' && features[i] !== undefined) { // strange bug with undefined being added to manual buttons.\n $(this.target + ' div.' + this._strip_punctuation(feature) + '-btns ul.dropdown-menu').append(\n '
';\n }\n });\n window.AugurRepos[this.repo].dependencies().then(function (dependencies) {\n _this.$refs['dependencies'].innerHTML = '';\n for (var i = 0; i < dependencies.dependencies.length && i < 10; i++) {\n _this.$refs['dependents'].innerHTML += dependencies.dependencies[i].name + '
';\n }\n });\n window.AugurRepos[this.repo].dependencyStats().then(function (depstats) {\n _this.$refs['totaldependents'].innerHTML = depstats['dependent_repositories'];\n _this.$refs['totaldependencies'].innerHTML = depstats['dependencies'];\n });\n }\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Total Dependents\")]),_vm._v(\" \"),_c('div',{ref:\"totaldependents\",staticClass:\"deps\"},[_vm._v(\"\\n Loading...\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Total Dependencies\")]),_vm._v(\" \"),_c('div',{ref:\"totaldependencies\",staticClass:\"deps\"},[_vm._v(\"\\n Loading...\\n \")])])]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Top Dependents\")]),_vm._v(\" \"),_c('div',{ref:\"dependents\",staticClass:\"deps\"},[_vm._v(\"\\n Loading...\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Top Dependencies\")]),_vm._v(\" \"),_c('div',{ref:\"dependencies\",staticClass:\"deps\",domProps:{\"innerHTML\":_vm._s(_vm.dependencies)}},[_vm._v(\"\\n Loading...\\n \")])])])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-210450fe\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-210450fe\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _metricsGraphics = require('metrics-graphics');\n\nvar _metricsGraphics2 = _interopRequireDefault(_metricsGraphics);\n\nvar _AugurStats = require('../AugurStats');\n\nvar _AugurStats2 = _interopRequireDefault(_AugurStats);\n\nvar _d = require('d3');\n\nvar d3 = _interopRequireWildcard(_d);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n_metricsGraphics2.default.data_graphic({\n title: \"Missing Data\",\n error: 'Data unavaliable for ' + title,\n chart_type: 'missing-data',\n missing_text: title + ' could not be loaded',\n target: undefined.$refs.chart,\n full_width: true,\n height: 200\n});\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"chart\",staticClass:\"linechart\"})}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-ebdae2a4\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-ebdae2a4\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _d = require('d3');\n\nvar d3 = _interopRequireWildcard(_d);\n\nvar _AugurStats = require('AugurStats');\n\nvar _AugurStats2 = _interopRequireDefault(_AugurStats);\n\nvar _vuex = require('vuex');\n\nvar _metricsgraphics = require('../../include/metricsgraphics');\n\nvar _metricsgraphics2 = _interopRequireDefault(_metricsgraphics);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nconsole.log(d3);\n\nexports.default = {\n props: ['source', 'citeUrl', 'citeText', 'title', 'percentage', 'comparedTo', 'disableRollingAverage'],\n computed: {\n repo: function repo() {\n return this.$store.state.baseRepo;\n },\n period: function period() {\n return this.$store.state.trailingAverage;\n },\n earliest: function earliest() {\n return this.$store.state.startDate;\n },\n latest: function latest() {\n return this.$store.state.endDate;\n },\n compare: function compare() {\n return this.$store.state.compare;\n },\n chart: function chart() {\n var _this = this;\n\n var config = {};\n\n config.earliest = this.earliest || new Date('01-01-2005');\n config.latest = this.latest || new Date();\n config.title = this.title || \"Activity\";\n config.full_width = true;\n config.height = 200;\n config.x_accessor = 'date';\n config.format = this.percentage ? 'percentage' : undefined;\n config.compare = this.compare;\n\n\n if (this.repo) {\n if (this.$refs.chart) {\n this.$refs.chart.className = 'linechart loader';\n }\n window.AugurRepos[this.repo][this.source]().then(function (baseData) {\n _this.$refs.chartStatus.innerHTML = '';\n if (baseData && baseData.length) {\n config.data = _AugurStats2.default.convertDates(baseData, _this.earliest, _this.latest);\n } else {\n config.data = [];\n }\n if (_this.comparedTo) {\n return AugurRepos[_this.comparedTo][_this.source]();\n }\n return new Promise(function (resolve, reject) {\n resolve();\n });\n }).then(function (compareData) {\n var keys = Object.keys(config.data[0]).splice(1);\n if (config.data && compareData && compareData.length) {\n if (config.compare == 'each') {\n var key = Object.keys(compareData[0])[1];\n var compare = _AugurStats2.default.rollingAverage(_AugurStats2.default.zscores(compareData, key), 'value', _this.period);\n var base = _AugurStats2.default.rollingAverage(_AugurStats2.default.zscores(config.data, key), 'value', _this.period);\n config.data = [base, compare];\n config.legend = [window.AugurRepos[_this.repo].toString(), window.AugurRepos[_this.comparedTo].toString()];\n config.colors = config.colors || ['#FF3647', '#999'];\n } else {\n console.log('rendering percentage');\n config.format = 'percentage';\n config.baselines = [{ value: 1, label: config.baseline }];\n config.data = _AugurStats2.default.makeRelative(config.data, compareData, {\n earliest: config.earliest,\n latest: config.latest,\n byDate: config.byDate,\n period: _this.period\n });\n }\n } else {\n if (!_this.disableRollingAverage) {\n config.legend = config.legend || [config.title.toLowerCase(), _this.period + ' day average'];\n var rolling = _AugurStats2.default.rollingAverage(config.data, keys[0], _this.period);\n config.data = _AugurStats2.default.convertKey(_AugurStats2.default.combine(config.data, rolling), keys[0]);\n config.colors = config.colors || ['#CCC', '#FF3647'];\n config.y_accessor = 'value';\n }\n }\n\n if (keys.length > 1) {\n config.legend_target = _this.$refs.legend;\n $(_this.$refs.chart).hover(function () {\n _this.$refs.legend.style.display = 'none';\n }, function () {\n _this.$refs.legend.style.display = 'block';\n });\n }\n\n _this.$refs.chart.className = 'linechart intro';\n config.target = _this.$refs.chart;\n _metricsgraphics2.default.data_graphic(config);\n });\n return '' + this.title + '...';\n }\n }\n } };\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('cite',{staticClass:\"metric\"},[_vm._v(\"Metric: \"),_c('a',{attrs:{\"href\":_vm.citeUrl,\"target\":\"_blank\"}},[_vm._v(_vm._s(_vm.citeText))])]),_vm._v(\" \"),_c('div',{ref:\"chart\",staticClass:\"linechart\"},[_c('div',{ref:\"legend\",staticClass:\"legend\"}),_vm._v(\" \"),_c('span',{ref:\"chartStatus\",domProps:{\"innerHTML\":_vm._s(_vm.chart)}})])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-4035d73d\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-4035d73d\", __vue__options__)\n }\n})()}","/*\n\tKube. CSS & JS Framework\n\tVersion 6.5.2\n\tUpdated: February 2, 2017\n\n\thttp://imperavi.com/kube/\n\n\tCopyright (c) 2009-2017, Imperavi LLC.\n\tLicense: MIT\n*/\nif (typeof jQuery === 'undefined') {throw new Error('Kube\\'s requires jQuery')};\n;(function($) { var version = $.fn.jquery.split('.'); if (version[0] == 1 && version[1] < 8) {throw new Error('Kube\\'s requires at least jQuery v1.8'); }})(jQuery);\n\n;(function()\n{\n // Inherits\n Function.prototype.inherits = function(parent)\n {\n var F = function () {};\n F.prototype = parent.prototype;\n var f = new F();\n\n for (var prop in this.prototype) f[prop] = this.prototype[prop];\n this.prototype = f;\n this.prototype.super = parent.prototype;\n };\n\n // Core Class\n var Kube = function(element, options)\n {\n options = (typeof options === 'object') ? options : {};\n\n this.$element = $(element);\n this.opts = $.extend(true, this.defaults, $.fn[this.namespace].options, this.$element.data(), options);\n this.$target = (typeof this.opts.target === 'string') ? $(this.opts.target) : null;\n };\n\n // Core Functionality\n Kube.prototype = {\n getInstance: function()\n {\n return this.$element.data('fn.' + this.namespace);\n },\n hasTarget: function()\n {\n return !(this.$target === null);\n },\n callback: function(type)\n {\n\t\tvar args = [].slice.call(arguments).splice(1);\n\n // on element callback\n if (this.$element)\n {\n args = this._fireCallback($._data(this.$element[0], 'events'), type, this.namespace, args);\n }\n\n // on target callback\n if (this.$target)\n {\n args = this._fireCallback($._data(this.$target[0], 'events'), type, this.namespace, args);\n\t\t}\n\n\t\t// opts callback\n\t\tif (this.opts && this.opts.callbacks && $.isFunction(this.opts.callbacks[type]))\n\t\t{\n return this.opts.callbacks[type].apply(this, args);\n\t\t}\n\n\t\treturn args;\n },\n _fireCallback: function(events, type, eventNamespace, args)\n {\n if (events && typeof events[type] !== 'undefined')\n {\n\t\t\tvar len = events[type].length;\n\t\t\tfor (var i = 0; i < len; i++)\n\t\t\t{\n\t\t\t\tvar namespace = events[type][i].namespace;\n\t\t\t\tif (namespace === eventNamespace)\n\t\t\t\t{\n\t\t\t\t\tvar value = events[type][i].handler.apply(this, args);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n return (typeof value === 'undefined') ? args : value;\n }\n };\n\n // Scope\n window.Kube = Kube;\n\n})();\n/**\n * @library Kube Plugin\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Plugin = {\n create: function(classname, pluginname)\n {\n pluginname = (typeof pluginname === 'undefined') ? classname.toLowerCase() : pluginname;\n\n $.fn[pluginname] = function(method, options)\n {\n var args = Array.prototype.slice.call(arguments, 1);\n var name = 'fn.' + pluginname;\n var val = [];\n\n this.each(function()\n {\n var $this = $(this), data = $this.data(name);\n options = (typeof method === 'object') ? method : options;\n\n if (!data)\n {\n // Initialization\n $this.data(name, {});\n $this.data(name, (data = new Kube[classname](this, options)));\n }\n\n // Call methods\n if (typeof method === 'string')\n {\n if ($.isFunction(data[method]))\n {\n var methodVal = data[method].apply(data, args);\n if (methodVal !== undefined)\n {\n val.push(methodVal);\n }\n }\n else\n {\n $.error('No such method \"' + method + '\" for ' + classname);\n }\n }\n\n });\n\n return (val.length === 0 || val.length === 1) ? ((val.length === 0) ? this : val[0]) : val;\n };\n\n $.fn[pluginname].options = {};\n\n return this;\n },\n autoload: function(pluginname)\n {\n var arr = pluginname.split(',');\n var len = arr.length;\n\n for (var i = 0; i < len; i++)\n {\n var name = arr[i].toLowerCase().split(',').map(function(s) { return s.trim() }).join(',');\n this.autoloadQueue.push(name);\n }\n\n return this;\n },\n autoloadQueue: [],\n startAutoload: function()\n {\n if (!window.MutationObserver || this.autoloadQueue.length === 0)\n {\n return;\n }\n\n var self = this;\n\t\tvar observer = new MutationObserver(function(mutations)\n\t\t{\n\t\t\tmutations.forEach(function(mutation)\n\t\t\t{\n\t\t\t\tvar newNodes = mutation.addedNodes;\n\t\t\t if (newNodes.length === 0 || (newNodes.length === 1 && newNodes.nodeType === 3))\n\t\t\t {\n\t\t\t\t return;\n\t\t\t\t}\n\n self.startAutoloadOnce();\n\t\t\t});\n\t\t});\n\n\t\t// pass in the target node, as well as the observer options\n\t\tobserver.observe(document, {\n\t\t\t subtree: true,\n\t\t\t childList: true\n\t\t});\n },\n startAutoloadOnce: function()\n {\n var self = this;\n var $nodes = $('[data-component]').not('[data-loaded]');\n\t\t$nodes.each(function()\n\t\t{\n\t\t\tvar $el = $(this);\n\t\t\tvar pluginname = $el.data('component');\n\n if (self.autoloadQueue.indexOf(pluginname) !== -1)\n {\n\t\t\t$el.attr('data-loaded', true);\n $el[pluginname]();\n }\n });\n\n },\n watch: function()\n {\n Kube.Plugin.startAutoloadOnce();\n Kube.Plugin.startAutoload();\n }\n };\n\n $(window).on('load', function()\n {\n Kube.Plugin.watch();\n });\n\n}(Kube));\n/**\n * @library Kube Animation\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Animation = function(element, effect, callback)\n {\n this.namespace = 'animation';\n this.defaults = {};\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.effect = effect;\n this.completeCallback = (typeof callback === 'undefined') ? false : callback;\n this.prefixes = ['', '-moz-', '-o-animation-', '-webkit-'];\n this.queue = [];\n\n this.start();\n };\n\n Kube.Animation.prototype = {\n start: function()\n {\n\t\tif (this.isSlideEffect()) this.setElementHeight();\n\n\t\t\tthis.addToQueue();\n\t\t\tthis.clean();\n\t\t\tthis.animate();\n },\n addToQueue: function()\n {\n this.queue.push(this.effect);\n },\n setElementHeight: function()\n {\n this.$element.height(this.$element.height());\n },\n removeElementHeight: function()\n {\n this.$element.css('height', '');\n },\n isSlideEffect: function()\n {\n return (this.effect === 'slideDown' || this.effect === 'slideUp');\n },\n isHideableEffect: function()\n {\n var effects = ['fadeOut', 'slideUp', 'flipOut', 'zoomOut', 'slideOutUp', 'slideOutRight', 'slideOutLeft'];\n\n\t\t\treturn ($.inArray(this.effect, effects) !== -1);\n },\n isToggleEffect: function()\n {\n return (this.effect === 'show' || this.effect === 'hide');\n },\n storeHideClasses: function()\n {\n if (this.$element.hasClass('hide-sm')) this.$element.data('hide-sm-class', true);\n else if (this.$element.hasClass('hide-md')) this.$element.data('hide-md-class', true);\n },\n revertHideClasses: function()\n {\n if (this.$element.data('hide-sm-class')) this.$element.addClass('hide-sm').removeData('hide-sm-class');\n else if (this.$element.data('hide-md-class')) this.$element.addClass('hide-md').removeData('hide-md-class');\n else this.$element.addClass('hide');\n },\n removeHideClass: function()\n {\n if (this.$element.data('hide-sm-class')) this.$element.removeClass('hide-sm');\n else if (this.$element.data('hide-md-class')) this.$element.removeClass('hide-md');\n else this.$element.removeClass('hide');\n },\n animate: function()\n {\n this.storeHideClasses();\n if (this.isToggleEffect())\n\t\t\t{\n\t\t\t\treturn this.makeSimpleEffects();\n }\n\n this.$element.addClass('kubeanimated');\n\t\t\tthis.$element.addClass(this.queue[0]);\n this.removeHideClass();\n\n\t\t\tvar _callback = (this.queue.length > 1) ? null : this.completeCallback;\n\t\t\tthis.complete('AnimationEnd', $.proxy(this.makeComplete, this), _callback);\n },\n makeSimpleEffects: function()\n {\n\t\tif (this.effect === 'show') this.removeHideClass();\n else if (this.effect === 'hide') this.revertHideClasses();\n\n if (typeof this.completeCallback === 'function') this.completeCallback(this);\n },\n\t\tmakeComplete: function()\n\t\t{\n if (this.$element.hasClass(this.queue[0]))\n {\n\t\t\t\tthis.clean();\n\t\t\t\tthis.queue.shift();\n\n\t\t\t\tif (this.queue.length) this.animate();\n\t\t\t}\n\t\t},\n complete: function(type, make, callback)\n\t\t{\n\t\tvar event = type.toLowerCase() + ' webkit' + type + ' o' + type + ' MS' + type;\n\n\t\t\tthis.$element.one(event, $.proxy(function()\n\t\t\t{\n\t\t\t\tif (typeof make === 'function') make();\n\t\t\t\tif (this.isHideableEffect()) this.revertHideClasses();\n\t\t\t\tif (this.isSlideEffect()) this.removeElementHeight();\n\t\t\t\tif (typeof callback === 'function') callback(this);\n\n\t\t\t\tthis.$element.off(event);\n\n\t\t\t}, this));\n\t\t},\n\t\tclean: function()\n\t\t{\n\t\t\tthis.$element.removeClass('kubeanimated').removeClass(this.queue[0]);\n\t\t}\n };\n\n // Inheritance\n Kube.Animation.inherits(Kube);\n\n}(Kube));\n\n// Plugin\n(function($)\n{\n $.fn.animation = function(effect, callback)\n {\n var name = 'fn.animation';\n\n return this.each(function()\n {\n var $this = $(this), data = $this.data(name);\n\n $this.data(name, {});\n $this.data(name, (data = new Kube.Animation(this, effect, callback)));\n });\n };\n\n $.fn.animation.options = {};\n\n})(jQuery);\n/**\n * @library Kube Detect\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Detect = function() {};\n\n Kube.Detect.prototype = {\n\tisMobile: function()\n\t{\n\t\treturn /(iPhone|iPod|BlackBerry|Android)/.test(navigator.userAgent);\n\t},\n\tisDesktop: function()\n\t{\n\t\treturn !/(iPhone|iPod|iPad|BlackBerry|Android)/.test(navigator.userAgent);\n\t},\n\tisMobileScreen: function()\n\t{\n\t\treturn ($(window).width() <= 768);\n\t},\n\tisTabletScreen: function()\n\t{\n\t\treturn ($(window).width() >= 768 && $(window).width() <= 1024);\n\t},\n\tisDesktopScreen: function()\n\t{\n\t\treturn ($(window).width() > 1024);\n\t}\n };\n\n\n}(Kube));\n/**\n * @library Kube FormData\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.FormData = function(app)\n {\n this.opts = app.opts;\n };\n\n Kube.FormData.prototype = {\n set: function(data)\n {\n this.data = data;\n },\n get: function(formdata)\n\t{\n\t\tthis.formdata = formdata;\n\n if (this.opts.appendForms) this.appendForms();\n if (this.opts.appendFields) this.appendFields();\n\n return this.data;\n\t},\n\tappendFields: function()\n\t{\n\t\tvar $fields = $(this.opts.appendFields);\n\t\tif ($fields.length === 0)\n\t\t{\n\t\t\treturn;\n }\n\n\t\tvar self = this;\n var str = '';\n\n if (this.formdata)\n {\n $fields.each(function()\n\t\t\t{\n\t\t\t\tself.data.append($(this).attr('name'), $(this).val());\n\t\t\t});\n }\n else\n {\n\t\t\t$fields.each(function()\n\t\t\t{\n\t\t\t\tstr += '&' + $(this).attr('name') + '=' + $(this).val();\n\t\t\t});\n\n\t\t\tthis.data = (this.data === '') ? str.replace(/^&/, '') : this.data + str;\n }\n\t},\n\tappendForms: function()\n\t{\n\t\tvar $forms = $(this.opts.appendForms);\n\t\tif ($forms.length === 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n if (this.formdata)\n {\n var self = this;\n var formsData = $(this.opts.appendForms).serializeArray();\n $.each(formsData, function(i,s)\n {\n\t\t\tself.data.append(s.name, s.value);\n });\n }\n else\n {\n var str = $forms.serialize();\n\n this.data = (this.data === '') ? str : this.data + '&' + str;\n }\n\t}\n };\n\n\n}(Kube));\n/**\n * @library Kube Response\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Response = function(app) {};\n\n Kube.Response.prototype = {\n parse: function(str)\n\t{\n\t\tif (str === '') return false;\n\n\t\tvar obj = {};\n\n\t\ttry {\n\t\t\tobj = JSON.parse(str);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (obj[0] !== undefined)\n\t\t{\n\t\t\tfor (var item in obj)\n\t\t\t{\n\t\t\t\tthis.parseItem(obj[item]);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.parseItem(obj);\n\t\t}\n\n\t\treturn obj;\n\t},\n\tparseItem: function(item)\n\t{\n\t\tif (item.type === 'value')\n\t\t{\n\t\t\t$.each(item.data, $.proxy(function(key, val)\n\t\t\t{\n\t\t\t\tval = (val === null || val === false) ? 0 : val;\n\t\t\t\tval = (val === true) ? 1 : val;\n\n\t\t\t\t$(key).val(val);\n\n\t\t\t}, this));\n\t\t}\n\t\telse if (item.type === 'html')\n\t\t{\n\t\t\t$.each(item.data, $.proxy(function(key, val)\n\t\t\t{\n\t\t\t\tval = (val === null || val === false) ? '' : val;\n\n\t\t\t\t$(key).html(this.stripslashes(val));\n\n\t\t\t}, this));\n\t\t}\n\t\telse if (item.type === 'addClass')\n\t\t{\n\t\t\t$.each(item.data, function(key, val)\n\t\t\t{\n\t\t\t\t$(key).addClass(val);\n\t\t\t});\n }\n\t\telse if (item.type === 'removeClass')\n\t\t{\n\t\t\t$.each(item.data, function(key, val)\n\t\t\t{\n\t\t\t\t$(key).removeClass(val);\n\t\t\t});\n }\n\t\telse if (item.type === 'command')\n\t\t{\n\t\t\t$.each(item.data, function(key, val)\n\t\t\t{\n\t\t\t\t$(val)[key]();\n\t\t\t});\n\t\t}\n\t\telse if (item.type === 'animation')\n\t\t{\n\t\t\t$.each(item.data, function(key, data)\n\t\t\t{\n\t\t\t\tdata.opts = (typeof data.opts === 'undefined') ? {} : data.opts;\n\n\t\t\t\t$(key).animation(data.name, data.opts);\n\t\t\t});\n\t\t}\n\t\telse if (item.type === 'location')\n\t\t{\n\t\t\ttop.location.href = item.data;\n\t\t}\n\t\telse if (item.type === 'notify')\n\t\t{\n\t\t\t$.notify(item.data);\n\t\t}\n\n\t\treturn item;\n\t},\n stripslashes: function(str)\n\t{\n\t\treturn (str+'').replace(/\\0/g, '0').replace(/\\\\([\\\\'\"])/g, '$1');\n }\n };\n\n\n}(Kube));\n/**\n * @library Kube Utils\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Utils = function() {};\n\n Kube.Utils.prototype = {\n disableBodyScroll: function()\n\t{\n\t\tvar $body = $('html');\n\t\tvar windowWidth = window.innerWidth;\n\n\t\tif (!windowWidth)\n\t\t{\n\t\t\tvar documentElementRect = document.documentElement.getBoundingClientRect();\n\t\t\twindowWidth = documentElementRect.right - Math.abs(documentElementRect.left);\n\t\t}\n\n\t\tvar isOverflowing = document.body.clientWidth < windowWidth;\n\t\tvar scrollbarWidth = this.measureScrollbar();\n\n\t\t$body.css('overflow', 'hidden');\n\t\tif (isOverflowing) $body.css('padding-right', scrollbarWidth);\n\t},\n\tmeasureScrollbar: function()\n\t{\n\t\tvar $body = $('body');\n\t\tvar scrollDiv = document.createElement('div');\n\t\tscrollDiv.className = 'scrollbar-measure';\n\n\t\t$body.append(scrollDiv);\n\t\tvar scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n\t\t$body[0].removeChild(scrollDiv);\n\t\treturn scrollbarWidth;\n\t},\n\tenableBodyScroll: function()\n\t{\n\t\t$('html').css({ 'overflow': '', 'padding-right': '' });\n\t}\n };\n\n\n}(Kube));\n/**\n * @library Kube Message\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Message = function(element, options)\n {\n this.namespace = 'message';\n this.defaults = {\n closeSelector: '.close',\n closeEvent: 'click',\n animationOpen: 'fadeIn',\n animationClose: 'fadeOut',\n callbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Message.prototype = {\n start: function()\n {\n this.$close = this.$element.find(this.opts.closeSelector);\n this.$close.on(this.opts.closeEvent + '.' + this.namespace, $.proxy(this.close, this));\n this.$element.addClass('open');\n },\n stop: function()\n {\n this.$close.off('.' + this.namespace);\n this.$element.removeClass('open');\n },\n open: function(e)\n {\n if (e) e.preventDefault();\n\n if (!this.isOpened())\n {\n this.callback('open');\n this.$element.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n }\n },\n isOpened: function()\n {\n return this.$element.hasClass('open');\n },\n onOpened: function()\n {\n this.callback('opened');\n this.$element.addClass('open');\n },\n close: function(e)\n {\n if (e) e.preventDefault();\n\n if (this.isOpened())\n {\n this.callback('close');\n this.$element.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n }\n },\n onClosed: function()\n {\n this.callback('closed');\n this.$element.removeClass('open');\n }\n };\n\n // Inheritance\n Kube.Message.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Message');\n Kube.Plugin.autoload('Message');\n\n}(Kube));\n/**\n * @library Kube Sticky\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Sticky = function(element, options)\n {\n this.namespace = 'sticky';\n this.defaults = {\n classname: 'fixed',\n offset: 0, // pixels\n callbacks: ['fixed', 'unfixed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Sticky.prototype = {\n start: function()\n {\n\t this.offsetTop = this.getOffsetTop();\n\n\t this.load();\n\t $(window).scroll($.proxy(this.load, this));\n\t},\n\tgetOffsetTop: function()\n\t{\n\t\treturn this.$element.offset().top;\n\t},\n\tload: function()\n\t{\n\t\treturn (this.isFix()) ? this.fixed() : this.unfixed();\n\t},\n\tisFix: function()\n\t{\n return ($(window).scrollTop() > (this.offsetTop + this.opts.offset));\n\t},\n\tfixed: function()\n\t{\n\t\tthis.$element.addClass(this.opts.classname).css('top', this.opts.offset + 'px');\n\t\tthis.callback('fixed');\n\t},\n\tunfixed: function()\n\t{\n\t\tthis.$element.removeClass(this.opts.classname).css('top', '');\n\t\tthis.callback('unfixed');\n }\n };\n\n // Inheritance\n Kube.Sticky.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Sticky');\n Kube.Plugin.autoload('Sticky');\n\n}(Kube));\n/**\n * @library Kube Toggleme\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Toggleme = function(element, options)\n {\n this.namespace = 'toggleme';\n this.defaults = {\n toggleEvent: 'click',\n target: null,\n text: '',\n animationOpen: 'slideDown',\n animationClose: 'slideUp',\n callbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Toggleme.prototype = {\n start: function()\n {\n if (!this.hasTarget()) return;\n\n this.$element.on(this.opts.toggleEvent + '.' + this.namespace, $.proxy(this.toggle, this));\n },\n stop: function()\n {\n this.$element.off('.' + this.namespace);\n this.revertText();\n },\n toggle: function(e)\n {\n if (this.isOpened()) this.close(e);\n else this.open(e);\n },\n open: function(e)\n {\n if (e) e.preventDefault();\n\n if (!this.isOpened())\n {\n this.storeText();\n this.callback('open');\n this.$target.animation('slideDown', $.proxy(this.onOpened, this));\n\n // changes the text of $element with a less delay to smooth\n setTimeout($.proxy(this.replaceText, this), 100);\n\t\t}\n },\n close: function(e)\n {\n if (e) e.preventDefault();\n\n if (this.isOpened())\n {\n this.callback('close');\n this.$target.animation('slideUp', $.proxy(this.onClosed, this));\n\t\t}\n },\n\tisOpened: function()\n {\n return (this.$target.hasClass('open'));\n },\n onOpened: function()\n {\n this.$target.addClass('open');\n\t\tthis.callback('opened');\n },\n onClosed: function()\n {\n this.$target.removeClass('open');\n this.revertText();\n\t\tthis.callback('closed');\n },\n storeText: function()\n {\n this.$element.data('replacement-text', this.$element.html());\n },\n revertText: function()\n {\n var text = this.$element.data('replacement-text');\n if (text) this.$element.html(text);\n\n this.$element.removeData('replacement-text');\n },\n replaceText: function()\n {\n if (this.opts.text !== '')\n {\n this.$element.html(this.opts.text);\n }\n }\n };\n\n // Inheritance\n Kube.Toggleme.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Toggleme');\n Kube.Plugin.autoload('Toggleme');\n\n}(Kube));\n/**\n * @library Kube Offcanvas\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Offcanvas = function(element, options)\n {\n this.namespace = 'offcanvas';\n this.defaults = {\n\t\ttarget: null, // selector\n\t\tpush: true, // boolean\n\t\twidth: '250px', // string\n\t\tdirection: 'left', // string: left or right\n\t\ttoggleEvent: 'click',\n\t\tclickOutside: true, // boolean\n\t\tanimationOpen: 'slideInLeft',\n\t\tanimationClose: 'slideOutLeft',\n\t\tcallbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Services\n this.utils = new Kube.Utils();\n this.detect = new Kube.Detect();\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Offcanvas.prototype = {\n start: function()\n {\n if (!this.hasTarget()) return;\n\n this.buildTargetWidth();\n this.buildAnimationDirection();\n\n this.$close = this.getCloseLink();\n this.$element.on(this.opts.toggleEvent + '.' + this.namespace, $.proxy(this.toggle, this));\n this.$target.addClass('offcanvas');\n\t},\n\tstop: function()\n\t{\n\t\tthis.closeAll();\n\n this.$element.off('.' + this.namespace);\n this.$close.off('.' + this.namespace);\n $(document).off('.' + this.namespace);\n\t},\n\ttoggle: function(e)\n\t{\n\t\tif (this.isOpened()) this.close(e);\n\t\telse this.open(e);\n },\n\tbuildTargetWidth: function()\n\t{\n this.opts.width = ($(window).width() < parseInt(this.opts.width)) ? '100%' : this.opts.width;\n\t},\n\tbuildAnimationDirection: function()\n\t{\n if (this.opts.direction === 'right')\n {\n this.opts.animationOpen = 'slideInRight';\n\t\t\tthis.opts.animationClose = 'slideOutRight';\n }\n\t},\n\tgetCloseLink: function()\n\t{\n return this.$target.find('.close');\n\t},\n\topen: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n if (!this.isOpened())\n {\n this.closeAll();\n\t\t\tthis.callback('open');\n\n this.$target.addClass('offcanvas-' + this.opts.direction);\n this.$target.css('width', this.opts.width);\n\n this.pushBody();\n\n\t\t\tthis.$target.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n\t\t}\n\t},\n\tcloseAll: function()\n\t{\n\t\tvar $elms = $(document).find('.offcanvas');\n\t\tif ($elms.length !== 0)\n\t\t{\n $elms.each(function()\n {\n var $el = $(this);\n\n if ($el.hasClass('open'))\n {\n $el.css('width', '').animation('hide');\n $el.removeClass('open offcanvas-left offcanvas-right');\n }\n\n });\n\n $(document).off('.' + this.namespace);\n $('body').css('left', '');\n\t\t}\n\t},\n\tclose: function(e)\n\t{\n\t\tif (e)\n\t\t{\n\t\tvar $el = $(e.target);\n\t\tvar isTag = ($el[0].tagName === 'A' || $el[0].tagName === 'BUTTON');\n\t\tif (isTag && $el.closest('.offcanvas').length !== 0 && !$el.hasClass('close'))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\te.preventDefault();\n }\n\n if (this.isOpened())\n\t\t{\n\t\t\tthis.utils.enableBodyScroll();\n\t\t\tthis.callback('close');\n this.pullBody();\n\t\t\tthis.$target.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n\t\t}\n\t},\n\tisOpened: function()\n {\n return (this.$target.hasClass('open'));\n },\n\tonOpened: function()\n\t{\n\t\tif (this.opts.clickOutside) $(document).on('click.' + this.namespace, $.proxy(this.close, this));\n\t\tif (this.detect.isMobileScreen()) $('html').addClass('no-scroll');\n\n $(document).on('keyup.' + this.namespace, $.proxy(this.handleKeyboard, this));\n this.$close.on('click.' + this.namespace, $.proxy(this.close, this));\n\n\t\tthis.utils.disableBodyScroll();\n this.$target.addClass('open');\n this.callback('opened');\n\t},\n\tonClosed: function()\n\t{\n\t\tif (this.detect.isMobileScreen()) $('html').removeClass('no-scroll');\n\n this.$target.css('width', '').removeClass('offcanvas-' + this.opts.direction);\n\n this.$close.off('.' + this.namespace);\n\t\t$(document).off('.' + this.namespace);\n\n this.$target.removeClass('open');\n\t\tthis.callback('closed');\n\t},\n\thandleKeyboard: function(e)\n\t{\n\t\tif (e.which === 27) this.close();\n\t},\n\tpullBody: function()\n\t{\n if (this.opts.push)\n {\n $('body').animate({ left: 0 }, 350, function() { $(this).removeClass('offcanvas-push-body'); });\n }\n\t},\n\tpushBody: function()\n\t{\n if (this.opts.push)\n {\n var properties = (this.opts.direction === 'left') ? { 'left': this.opts.width } : { 'left': '-' + this.opts.width };\n $('body').addClass('offcanvas-push-body').animate(properties, 200);\n }\n\t}\n };\n\n // Inheritance\n Kube.Offcanvas.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Offcanvas');\n Kube.Plugin.autoload('Offcanvas');\n\n}(Kube));\n/**\n * @library Kube Collapse\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Collapse = function(element, options)\n {\n this.namespace = 'collapse';\n this.defaults = {\n target: null,\n toggle: true,\n active: false, // string (hash = tab id selector)\n toggleClass: 'collapse-toggle',\n boxClass: 'collapse-box',\n callbacks: ['open', 'opened', 'close', 'closed'],\n\n // private\n hashes: [],\n\t\tcurrentHash: false,\n\t\tcurrentItem: false\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Collapse.prototype = {\n start: function()\n {\n // items\n this.$items = this.getItems();\n this.$items.each($.proxy(this.loadItems, this));\n\n // boxes\n this.$boxes = this.getBoxes();\n\n // active\n this.setActiveItem();\n },\n getItems: function()\n {\n return this.$element.find('.' + this.opts.toggleClass);\n },\n getBoxes: function()\n {\n return this.$element.find('.' + this.opts.boxClass);\n },\n\tloadItems: function(i, el)\n\t{\n\t\tvar item = this.getItem(el);\n\n\t\t// set item identificator\n\t\titem.$el.attr('rel', item.hash);\n\n // active\n\t\tif (!$(item.hash).hasClass('hide'))\n\t\t{\n\t\t\tthis.opts.currentItem = item;\n\t\t\tthis.opts.active = item.hash;\n\n item.$el.addClass('active');\n }\n\n\t\t// event\n\t\titem.$el.on('click.collapse', $.proxy(this.toggle, this));\n\n\t},\n\tsetActiveItem: function()\n\t{\n\t\tif (this.opts.active !== false)\n\t\t{\n\t\t\tthis.opts.currentItem = this.getItemBy(this.opts.active);\n\t\t\tthis.opts.active = this.opts.currentItem.hash;\n\t\t}\n\n if (this.opts.currentItem !== false)\n {\n\t\t this.addActive(this.opts.currentItem);\n\t\t this.opts.currentItem.$box.removeClass('hide');\n\t\t}\n\t},\n\taddActive: function(item)\n\t{\n\t\titem.$box.removeClass('hide').addClass('open');\n\t\titem.$el.addClass('active');\n\n\t\tif (item.$caret !== false) item.$caret.removeClass('down').addClass('up');\n\t\tif (item.$parent !== false) item.$parent.addClass('active');\n\n\t\tthis.opts.currentItem = item;\n\t},\n\tremoveActive: function(item)\n\t{\n\t\titem.$box.removeClass('open');\n\t\titem.$el.removeClass('active');\n\n\t\tif (item.$caret !== false) item.$caret.addClass('down').removeClass('up');\n\t\tif (item.$parent !== false) item.$parent.removeClass('active');\n\n\t\tthis.opts.currentItem = false;\n\t},\n toggle: function(e)\n {\n if (e) e.preventDefault();\n\n var target = $(e.target).closest('.' + this.opts.toggleClass).get(0) || e.target;\n var item = this.getItem(target);\n\n if (this.isOpened(item.hash)) this.close(item.hash);\n else this.open(e)\n },\n openAll: function()\n {\n this.$items.addClass('active');\n this.$boxes.addClass('open').removeClass('hide');\n },\n open: function(e, push)\n {\n\t\tif (typeof e === 'undefined') return;\n\t\tif (typeof e === 'object') e.preventDefault();\n\n var target = $(e.target).closest('.' + this.opts.toggleClass).get(0) || e.target;\n\t\tvar item = (typeof e === 'object') ? this.getItem(target) : this.getItemBy(e);\n\n\t\tif (item.$box.hasClass('open'))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.opts.toggle) this.closeAll();\n\n\t\tthis.callback('open', item);\n\t\tthis.addActive(item);\n\n item.$box.animation('slideDown', $.proxy(this.onOpened, this));\n },\n onOpened: function()\n {\n\t\tthis.callback('opened', this.opts.currentItem);\n },\n closeAll: function()\n {\n this.$items.removeClass('active').closest('li').removeClass('active');\n this.$boxes.removeClass('open').addClass('hide');\n },\n close: function(num)\n {\n\t\tvar item = this.getItemBy(num);\n\n\t\tthis.callback('close', item);\n\n\t\tthis.opts.currentItem = item;\n\n\t\titem.$box.animation('slideUp', $.proxy(this.onClosed, this));\n },\n onClosed: function()\n {\n var item = this.opts.currentItem;\n\n\t\tthis.removeActive(item);\n\t\tthis.callback('closed', item);\n },\n isOpened: function(hash)\n {\n return $(hash).hasClass('open');\n },\n\tgetItem: function(element)\n\t{\n\t\tvar item = {};\n\n\t\titem.$el = $(element);\n\t\titem.hash = item.$el.attr('href');\n\t\titem.$box = $(item.hash);\n\n\t\tvar $parent = item.$el.parent();\n\t\titem.$parent = ($parent[0].tagName === 'LI') ? $parent : false;\n\n\t\tvar $caret = item.$el.find('.caret');\n\t\titem.$caret = ($caret.length !== 0) ? $caret : false;\n\n\t\treturn item;\n\t},\n\tgetItemBy: function(num)\n\t{\n\t\tvar element = (typeof num === 'number') ? this.$items.eq(num-1) : this.$element.find('[rel=\"' + num + '\"]');\n\n\t\treturn this.getItem(element);\n }\n };\n\n // Inheritance\n Kube.Collapse.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Collapse');\n Kube.Plugin.autoload('Collapse');\n\n}(Kube));\n/**\n * @library Kube Dropdown\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Dropdown = function(element, options)\n {\n this.namespace = 'dropdown';\n this.defaults = {\n\t\ttarget: null,\n\t\ttoggleEvent: 'click',\n\t\theight: false, // integer\n\t\twidth: false, // integer\n\t\tanimationOpen: 'slideDown',\n\t\tanimationClose: 'slideUp',\n\t\tcaretUp: false,\n callbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Services\n this.utils = new Kube.Utils();\n this.detect = new Kube.Detect();\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Dropdown.prototype = {\n start: function()\n {\n this.buildClose();\n this.buildCaret();\n\n if (this.detect.isMobile()) this.buildMobileAnimation();\n\n this.$target.addClass('hide');\n this.$element.on(this.opts.toggleEvent + '.' + this.namespace, $.proxy(this.toggle, this));\n\n\t},\n\tstop: function()\n\t{\n\t\tthis.$element.off('.' + this.namespace);\n this.$target.removeClass('open').addClass('hide');\n\t\tthis.disableEvents();\n\t},\n\tbuildMobileAnimation: function()\n\t{\n this.opts.animationOpen = 'fadeIn';\n this.opts.animationClose = 'fadeOut';\n\t},\n\tbuildClose: function()\n\t{\n this.$close = this.$target.find('.close');\n\t},\n\tbuildCaret: function()\n\t{\n this.$caret = this.getCaret();\n\t\tthis.buildCaretPosition();\n\t},\n\tbuildCaretPosition: function()\n\t{\n\t\tvar height = this.$element.offset().top + this.$element.innerHeight() + this.$target.innerHeight();\n\n\t\tif ($(document).height() > height)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n this.opts.caretUp = true;\n\t\tthis.$caret.addClass('up');\n\t},\n\tgetCaret: function()\n\t{\n\t\treturn this.$element.find('.caret');\n\t},\n\ttoggleCaretOpen: function()\n\t{\n\t\tif (this.opts.caretUp) this.$caret.removeClass('up').addClass('down');\n\t\telse this.$caret.removeClass('down').addClass('up');\n\t},\n\ttoggleCaretClose: function()\n\t{\n\t\tif (this.opts.caretUp) this.$caret.removeClass('down').addClass('up');\n\t\telse this.$caret.removeClass('up').addClass('down');\n\t},\n\ttoggle: function(e)\n\t{\n\t\tif (this.isOpened()) this.close(e);\n\t\telse this.open(e);\n\t},\n\topen: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n this.callback('open');\n\t\t$('.dropdown').removeClass('open').addClass('hide');\n\n\t\tif (this.opts.height) this.$target.css('min-height', this.opts.height + 'px');\n\t\tif (this.opts.width) this.$target.width(this.opts.width);\n\n\t\tthis.setPosition();\n\t\tthis.toggleCaretOpen();\n\n\t\tthis.$target.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n\t},\n\tclose: function(e)\n\t{\n if (!this.isOpened())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (e)\n\t\t{\n\t\t\tif (this.shouldNotBeClosed(e.target))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tthis.utils.enableBodyScroll();\n\t\tthis.callback('close');\n\t\tthis.toggleCaretClose();\n\n\t\tthis.$target.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n\t},\n\tonClosed: function()\n\t{\n this.$target.removeClass('open');\n\t\tthis.disableEvents();\n\t\tthis.callback('closed');\n\t},\n\tonOpened: function()\n\t{\n\t\tthis.$target.addClass('open');\n\t\tthis.enableEvents();\n\t\tthis.callback('opened');\n\t},\n\tisOpened: function()\n\t{\n\t\treturn (this.$target.hasClass('open'));\n\t},\n\tenableEvents: function()\n\t{\n\t\tif (this.detect.isDesktop())\n\t\t{\n\t\t\tthis.$target.on('mouseover.' + this.namespace, $.proxy(this.utils.disableBodyScroll, this.utils))\n\t\t\t .on('mouseout.' + this.namespace, $.proxy(this.utils.enableBodyScroll, this.utils));\n\t\t}\n\n\t\t$(document).on('scroll.' + this.namespace, $.proxy(this.setPosition, this));\n\t\t$(window).on('resize.' + this.namespace, $.proxy(this.setPosition, this));\n\t\t$(document).on('click.' + this.namespace + ' touchstart.' + this.namespace, $.proxy(this.close, this));\n\t\t$(document).on('keydown.' + this.namespace, $.proxy(this.handleKeyboard, this));\n\t\tthis.$target.find('[data-action=\"dropdown-close\"]').on('click.' + this.namespace, $.proxy(this.close, this));\n\t},\n\tdisableEvents: function()\n\t{\n\t\tthis.$target.off('.' + this.namespace);\n\t\t$(document).off('.' + this.namespace);\n\t\t$(window).off('.' + this.namespace);\n\t},\n\thandleKeyboard: function(e)\n\t{\n\t\tif (e.which === 27) this.close(e);\n\t},\n\tshouldNotBeClosed: function(el)\n\t{\n if ($(el).attr('data-action') === 'dropdown-close' || el === this.$close[0])\n {\n return false;\n\t\t}\n\t\telse if ($(el).closest('.dropdown').length === 0)\n\t\t{\n\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t},\n isNavigationFixed: function()\n\t{\n\t\treturn (this.$element.closest('.fixed').length !== 0);\n\t},\n\tgetPlacement: function(height)\n\t{\n\t\treturn ($(document).height() < height) ? 'top' : 'bottom';\n\t},\n\tgetOffset: function(position)\n\t{\n\t\treturn (this.isNavigationFixed()) ? this.$element.position() : this.$element.offset();\n\t},\n\tgetPosition: function()\n\t{\n\t\treturn (this.isNavigationFixed()) ? 'fixed' : 'absolute';\n\t},\n\tsetPosition: function()\n\t{\n\t\tif (this.detect.isMobile())\n\t\t{\n this.$target.addClass('dropdown-mobile');\n return;\n\t\t}\n\n\t\tvar position = this.getPosition();\n\t\t\tvar coords = this.getOffset(position);\n\t\t\tvar height = this.$target.innerHeight();\n\t\t\tvar width = this.$target.innerWidth();\n\t\t\tvar placement = this.getPlacement(coords.top + height + this.$element.innerHeight());\n\t\t\tvar leftFix = ($(window).width() < (coords.left + width)) ? (width - this.$element.innerWidth()) : 0;\n\t\t\tvar top, left = coords.left - leftFix;\n\n\t\t\tif (placement === 'bottom')\n\t\t\t{\n\t\t\tif (!this.isOpened()) this.$caret.removeClass('up').addClass('down');\n\n\t\t\t\tthis.opts.caretUp = false;\n\t\t\t\ttop = coords.top + this.$element.outerHeight() + 1;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.opts.animationOpen = 'show';\n\t\t\t\tthis.opts.animationClose = 'hide';\n\n if (!this.isOpened()) this.$caret.addClass('up').removeClass('down');\n\n\t\t\t\tthis.opts.caretUp = true;\n\t\t\t\ttop = coords.top - height - 1;\n\t\t\t}\n\n\t\t\tthis.$target.css({ position: position, top: top + 'px', left: left + 'px' });\n\t}\n };\n\n // Inheritance\n Kube.Dropdown.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Dropdown');\n Kube.Plugin.autoload('Dropdown');\n\n}(Kube));\n/**\n * @library Kube Tabs\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Tabs = function(element, options)\n {\n this.namespace = 'tabs';\n this.defaults = {\n\t\tequals: false,\n\t\tactive: false, // string (hash = tab id selector)\n\t\tlive: false, // class selector\n\t\thash: true, //boolean\n\t\tcallbacks: ['init', 'next', 'prev', 'open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Tabs.prototype = {\n start: function()\n {\n if (this.opts.live !== false) this.buildLiveTabs();\n\n this.tabsCollection = [];\n this.hashesCollection = [];\n this.currentHash = [];\n this.currentItem = false;\n\n // items\n this.$items = this.getItems();\n this.$items.each($.proxy(this.loadItems, this));\n\n // tabs\n\t\tthis.$tabs = this.getTabs();\n\n // location hash\n\t\tthis.currentHash = this.getLocationHash();\n\n\t\t// close all\n\t\tthis.closeAll();\n\n // active & height\n\t\tthis.setActiveItem();\n\t\tthis.setItemHeight();\n\n // callback\n\t\tthis.callback('init');\n\n\t},\n\tgetTabs: function()\n\t{\n\t\treturn $(this.tabsCollection).map(function()\n\t\t{\n\t\treturn this.toArray();\n });\n\t},\n\tgetItems: function()\n\t{\n\t\treturn this.$element.find('a');\n\t},\n\tloadItems: function(i, el)\n\t{\n\t\tvar item = this.getItem(el);\n\n\t\t// set item identificator\n\t\titem.$el.attr('rel', item.hash);\n\n\t\t// collect item\n this.collectItem(item);\n\n // active\n\t\tif (item.$parent.hasClass('active'))\n\t\t{\n\t\t\tthis.currentItem = item;\n\t\t\tthis.opts.active = item.hash;\n\t\t}\n\n\t\t// event\n\t\titem.$el.on('click.tabs', $.proxy(this.open, this));\n\n\t},\n\tcollectItem: function(item)\n\t{\n\t\tthis.tabsCollection.push(item.$tab);\n\t\tthis.hashesCollection.push(item.hash);\n\t},\n\tbuildLiveTabs: function()\n\t{\n\t\tvar $layers = $(this.opts.live);\n\n\t\tif ($layers.length === 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.$liveTabsList = $('
');\n\t\t$layers.each($.proxy(this.buildLiveItem, this));\n\n\t\tthis.$element.html('').append(this.$liveTabsList);\n\n\t},\n\tbuildLiveItem: function(i, tab)\n\t{\n\t\tvar $tab = $(tab);\n\t\tvar $li = $('');\n\t\tvar $a = $('');\n\t\tvar index = i + 1;\n\n\t\t$tab.attr('id', this.getLiveItemId($tab, index));\n\n\t\tvar hash = '#' + $tab.attr('id');\n\t\tvar title = this.getLiveItemTitle($tab);\n\n\t\t$a.attr('href', hash).attr('rel', hash).text(title);\n\t\t$li.append($a);\n\n\t\tthis.$liveTabsList.append($li);\n\t},\n\tgetLiveItemId: function($tab, index)\n\t{\n\t\treturn (typeof $tab.attr('id') === 'undefined') ? this.opts.live.replace('.', '') + index : $tab.attr('id');\n\t},\n\tgetLiveItemTitle: function($tab)\n\t{\n\t\treturn (typeof $tab.attr('data-title') === 'undefined') ? $tab.attr('id') : $tab.attr('data-title');\n\t},\n\tsetActiveItem: function()\n\t{\n\t\tif (this.currentHash)\n\t\t{\n\t\t\tthis.currentItem = this.getItemBy(this.currentHash);\n\t\t\tthis.opts.active = this.currentHash;\n\t\t}\n\t\telse if (this.opts.active === false)\n\t\t{\n\t\t\tthis.currentItem = this.getItem(this.$items.first());\n\t\t\tthis.opts.active = this.currentItem.hash;\n\t\t}\n\n\t\tthis.addActive(this.currentItem);\n\t},\n\taddActive: function(item)\n\t{\n\t\titem.$parent.addClass('active');\n\t\titem.$tab.removeClass('hide').addClass('open');\n\n\t\tthis.currentItem = item;\n\t},\n\tremoveActive: function(item)\n\t{\n\t\titem.$parent.removeClass('active');\n\t\titem.$tab.addClass('hide').removeClass('open');\n\n\t\tthis.currentItem = false;\n\t},\n\tnext: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n\t\tvar item = this.getItem(this.fetchElement('next'));\n\n\t\tthis.open(item.hash);\n\t\tthis.callback('next', item);\n\n\t},\n\tprev: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n\t\tvar item = this.getItem(this.fetchElement('prev'));\n\n\t\tthis.open(item.hash);\n\t\tthis.callback('prev', item);\n\t},\n\tfetchElement: function(type)\n\t{\n var element;\n\t\tif (this.currentItem !== false)\n\t\t{\n\t\t\t// prev or next\n\t\t\telement = this.currentItem.$parent[type]().find('a');\n\n\t\t\tif (element.length === 0)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// first\n\t\t\telement = this.$items[0];\n\t\t}\n\n\t\treturn element;\n\t},\n\topen: function(e, push)\n\t{\n\t\tif (typeof e === 'undefined') return;\n\t\tif (typeof e === 'object') e.preventDefault();\n\n\t\tvar item = (typeof e === 'object') ? this.getItem(e.target) : this.getItemBy(e);\n\t\tthis.closeAll();\n\n\t\tthis.callback('open', item);\n\t\tthis.addActive(item);\n\n\t\t// push state (doesn't need to push at the start)\n this.pushStateOpen(push, item);\n\t\tthis.callback('opened', item);\n\t},\n\tpushStateOpen: function(push, item)\n\t{\n\t\tif (push !== false && this.opts.hash !== false)\n\t\t{\n\t\t\thistory.pushState(false, false, item.hash);\n\t\t}\n\t},\n\tclose: function(num)\n\t{\n\t\tvar item = this.getItemBy(num);\n\n\t\tif (!item.$parent.hasClass('active'))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.callback('close', item);\n\t\tthis.removeActive(item);\n\t\tthis.pushStateClose();\n\t\tthis.callback('closed', item);\n\n\t},\n\tpushStateClose: function()\n\t{\n if (this.opts.hash !== false)\n {\n\t\t\thistory.pushState(false, false, ' ');\n\t\t}\n\t},\n\tcloseAll: function()\n\t{\n\t\tthis.$tabs.removeClass('open').addClass('hide');\n\t\tthis.$items.parent().removeClass('active');\n\t},\n\tgetItem: function(element)\n\t{\n\t\tvar item = {};\n\n\t\titem.$el = $(element);\n\t\titem.hash = item.$el.attr('href');\n\t\titem.$parent = item.$el.parent();\n\t\titem.$tab = $(item.hash);\n\n\t\treturn item;\n\t},\n\tgetItemBy: function(num)\n\t{\n\t\tvar element = (typeof num === 'number') ? this.$items.eq(num-1) : this.$element.find('[rel=\"' + num + '\"]');\n\n\t\treturn this.getItem(element);\n\t},\n\tgetLocationHash: function()\n\t{\n\t\tif (this.opts.hash === false)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\treturn (this.isHash()) ? top.location.hash : false;\n\t},\n\tisHash: function()\n\t{\n\t\treturn !(top.location.hash === '' || $.inArray(top.location.hash, this.hashesCollection) === -1);\n\t},\n\tsetItemHeight: function()\n\t{\n\t\tif (this.opts.equals)\n\t\t{\n\t\tvar minHeight = this.getItemMaxHeight() + 'px';\n\t\t\tthis.$tabs.css('min-height', minHeight);\n\t\t}\n\t},\n\tgetItemMaxHeight: function()\n\t{\n\t\tvar max = 0;\n\t\tthis.$tabs.each(function()\n\t\t{\n\t\t\tvar h = $(this).height();\n\t\t\tmax = h > max ? h : max;\n\t\t});\n\n\t\treturn max;\n\t}\n };\n\n // Inheritance\n Kube.Tabs.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Tabs');\n Kube.Plugin.autoload('Tabs');\n\n}(Kube));\n/**\n * @library Kube Modal\n * @author Imperavi LLC\n * @license MIT\n */\n(function($)\n{\n $.modalcurrent = null;\n\t$.modalwindow = function(options)\n\t{\n\tvar opts = $.extend({}, options, { show: true });\n\tvar $element = $('');\n\n\t$element.modal(opts);\n\t};\n\n})(jQuery);\n\n(function(Kube)\n{\n Kube.Modal = function(element, options)\n {\n this.namespace = 'modal';\n this.defaults = {\n target: null,\n show: false,\n\t\turl: false,\n\t\theader: false,\n\t\twidth: '600px', // string\n\t\theight: false, // or string\n\t\tmaxHeight: false,\n\t\tposition: 'center', // top or center\n\t\toverlay: true,\n\t\tappendForms: false,\n\t\tappendFields: false,\n\t\tanimationOpen: 'show',\n\t\tanimationClose: 'hide',\n\t\tcallbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Services\n this.utils = new Kube.Utils();\n this.detect = new Kube.Detect();\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Modal.prototype = {\n start: function()\n {\n if (!this.hasTarget())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n if (this.opts.show) this.load();\n\t\telse this.$element.on('click.' + this.namespace, $.proxy(this.load, this));\n\t},\n\tbuildModal: function()\n\t{\n\t\tthis.$modal = this.$target.find('.modal');\n\t\tthis.$header = this.$target.find('.modal-header');\n\t\tthis.$close = this.$target.find('.close');\n\t\tthis.$body = this.$target.find('.modal-body');\n\t},\n\tbuildOverlay: function()\n\t{\n\t\tif (this.opts.overlay === false)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif ($('#modal-overlay').length !== 0)\n\t\t{\n\t\t\tthis.$overlay = $('#modal-overlay');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.$overlay = $('').addClass('hide');\n\t\t\t$('body').prepend(this.$overlay);\n\t\t}\n\n\t\tthis.$overlay.addClass('overlay');\n\t},\n\tbuildHeader: function()\n\t{\n\t\tif (this.opts.header) this.$header.html(this.opts.header);\n\t},\n\tload: function(e)\n\t{\n\t\tthis.buildModal();\n\t\tthis.buildOverlay();\n\t\tthis.buildHeader();\n\n if (this.opts.url) this.buildContent();\n else this.open(e);\n\t},\n\topen: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n if (this.isOpened())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.detect.isMobile()) this.opts.width = '96%';\n\t\tif (this.opts.overlay) this.$overlay.removeClass('hide');\n\n\t\tthis.$target.removeClass('hide');\n\t\tthis.$modal.removeClass('hide');\n\n this.enableEvents();\n\t\tthis.findActions();\n\n\t\tthis.resize();\n\t\t$(window).on('resize.' + this.namespace, $.proxy(this.resize, this));\n\n\t\tif (this.detect.isDesktop()) this.utils.disableBodyScroll();\n\n\t\t// enter\n\t\tthis.$modal.find('input[type=text],input[type=url],input[type=email]').on('keydown.' + this.namespace, $.proxy(this.handleEnter, this));\n\n\t\tthis.callback('open');\n\t\tthis.$modal.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n },\n close: function(e)\n {\n if (!this.$modal || !this.isOpened())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (e)\n\t\t{\n\t\t\tif (this.shouldNotBeClosed(e.target))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tthis.callback('close');\n\t\tthis.disableEvents();\n\n\t\tthis.$modal.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n\n if (this.opts.overlay) this.$overlay.animation(this.opts.animationClose);\n },\n\tonOpened: function()\n\t{\n\t\tthis.$modal.addClass('open');\n this.callback('opened');\n\n $.modalcurrent = this;\n\t},\n\tonClosed: function()\n\t{\n\t\tthis.callback('closed');\n\n this.$target.addClass('hide');\n this.$modal.removeClass('open');\n\n\t\tif (this.detect.isDesktop()) this.utils.enableBodyScroll();\n\n\t\tthis.$body.css('height', '');\n $.modalcurrent = null;\n\t},\n\tisOpened: function()\n\t{\n\t\treturn (this.$modal.hasClass('open'));\n\t},\n\tgetData: function()\n\t{\n var formdata = new Kube.FormData(this);\n formdata.set('');\n\n return formdata.get();\n\t},\n\tbuildContent: function()\n\t{\n\t\t$.ajax({\n\t\t\turl: this.opts.url + '?' + new Date().getTime(),\n\t\t\tcache: false,\n\t\t\ttype: 'post',\n\t\t\tdata: this.getData(),\n\t\t\tsuccess: $.proxy(function(data)\n\t\t\t{\n\t\t\t\tthis.$body.html(data);\n\t\t\t\tthis.open();\n\n\t\t\t}, this)\n\t\t});\n\t},\n\tbuildWidth: function()\n\t{\n\t\tvar width = this.opts.width;\n\t\tvar top = '2%';\n\t\tvar bottom = '2%';\n\t\tvar percent = width.match(/%$/);\n\n\t\tif ((parseInt(this.opts.width) > $(window).width()) && !percent)\n\t\t{\n width = '96%';\n\t\t}\n\t\telse if (!percent)\n\t\t{\n top = '16px';\n bottom = '16px';\n\t\t}\n\n\t\tthis.$modal.css({ 'width': width, 'margin-top': top, 'margin-bottom': bottom });\n\n\t},\n\tbuildPosition: function()\n\t{\n\t\tif (this.opts.position !== 'center')\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tvar windowHeight = $(window).height();\n\t\tvar height = this.$modal.outerHeight();\n\t\tvar top = (windowHeight/2 - height/2) + 'px';\n\n\t\tif (this.detect.isMobile()) top = '2%';\n\t\telse if (height > windowHeight) top = '16px';\n\n\t\tthis.$modal.css('margin-top', top);\n\t},\n\tbuildHeight: function()\n\t{\n\t\tvar windowHeight = $(window).height();\n\n\t\tif (this.opts.maxHeight)\n\t\t{\n\t\t\tvar padding = parseInt(this.$body.css('padding-top')) + parseInt(this.$body.css('padding-bottom'));\n\t\t\tvar margin = parseInt(this.$modal.css('margin-top')) + parseInt(this.$modal.css('margin-bottom'));\n\t\t\tvar height = windowHeight - this.$header.innerHeight() - padding - margin;\n\n\t\t\tthis.$body.height(height);\n\t\t}\n\t\telse if (this.opts.height !== false)\n\t\t{\n\t\t\tthis.$body.css('height', this.opts.height);\n\t\t}\n\n\t\tvar modalHeight = this.$modal.outerHeight();\n\t\tif (modalHeight > windowHeight)\n\t\t{\n\t\t\tthis.opts.animationOpen = 'show';\n\t\t\tthis.opts.animationClose = 'hide';\n\t\t}\n\t},\n\tresize: function()\n\t{\n\t\tthis.buildWidth();\n\t\tthis.buildPosition();\n\t\tthis.buildHeight();\n\t},\n\tenableEvents: function()\n\t{\n\t\tthis.$close.on('click.' + this.namespace, $.proxy(this.close, this));\n\t\t$(document).on('keyup.' + this.namespace, $.proxy(this.handleEscape, this));\n\t\tthis.$target.on('click.' + this.namespace, $.proxy(this.close, this));\n\t},\n\tdisableEvents: function()\n\t{\n\t\tthis.$close.off('.' + this.namespace);\n\t\t$(document).off('.' + this.namespace);\n\t\tthis.$target.off('.' + this.namespace);\n\t\t$(window).off('.' + this.namespace);\n\t},\n\tfindActions: function()\n\t{\n\t\tthis.$body.find('[data-action=\"modal-close\"]').on('mousedown.' + this.namespace, $.proxy(this.close, this));\n\t},\n\tsetHeader: function(header)\n\t{\n\t\tthis.$header.html(header);\n\t},\n\tsetContent: function(content)\n\t{\n\t\tthis.$body.html(content);\n\t},\n\tsetWidth: function(width)\n\t{\n\t\tthis.opts.width = width;\n\t\tthis.resize();\n\t},\n\tgetModal: function()\n\t{\n return this.$modal;\n\t},\n\tgetBody: function()\n\t{\n return this.$body;\n\t},\n\tgetHeader: function()\n\t{\n return this.$header;\n\t},\n\thandleEnter: function(e)\n\t{\n\t\tif (e.which === 13)\n\t\t{\n\t\te.preventDefault();\n\t\tthis.close(false);\n }\n\t},\n\thandleEscape: function(e)\n\t{\n\t\treturn (e.which === 27) ? this.close(false) : true;\n\t},\n\tshouldNotBeClosed: function(el)\n\t{\n if ($(el).attr('data-action') === 'modal-close' || el === this.$close[0])\n {\n return false;\n\t\t}\n\t\telse if ($(el).closest('.modal').length === 0)\n\t\t{\n\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n };\n\n // Inheritance\n Kube.Modal.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Modal');\n Kube.Plugin.autoload('Modal');\n\n}(Kube));","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define(['d3'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('d3'));\n } else {\n root.MG = factory(root.d3);\n }\n}(this, function(d3) {\n(typeof window === 'undefined' ? global : window).MG = {version: '2.11'};\n\n//a set of helper functions, some that we've written, others that we've borrowed\n\nMG.convert = {};\n\nMG.convert.date = function(data, accessor, time_format) {\n time_format = (typeof time_format === \"undefined\") ? '%Y-%m-%d' : time_format;\n var parse_time = d3.timeParse(time_format);\n data = data.map(function(d) {\n d[accessor] = parse_time(d[accessor].trim());\n return d;\n });\n\n return data;\n}\n\nMG.convert.number = function(data, accessor) {\n data = data.map(function(d) {\n d[accessor] = Number(d[accessor]);\n return d;\n });\n\n return data;\n}\n\nMG.time_format = function(utc, specifier) {\n return utc ? d3.utcFormat(specifier) : d3.timeFormat(specifier);\n}\n\nfunction mg_jquery_exists() {\n if (typeof jQuery !== 'undefined' || typeof $ !== 'undefined') {\n return true;\n } else {\n return false;\n }\n}\n\nfunction mg_get_rollover_time_format(args) {\n var fmt;\n switch (args.processed.x_time_frame) {\n case 'millis':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %H:%M:%S.%L');\n break;\n case 'seconds':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %H:%M:%S');\n break;\n case 'less-than-a-day':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %I:%M%p');\n break;\n case 'four-days':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %I:%M%p');\n break;\n default:\n fmt = MG.time_format(args.utc_time, '%b %e, %Y');\n }\n return fmt;\n}\n\nfunction mg_data_in_plot_bounds(datum, args) {\n return datum[args.x_accessor] >= args.processed.min_x &&\n datum[args.x_accessor] <= args.processed.max_x &&\n datum[args.y_accessor] >= args.processed.min_y &&\n datum[args.y_accessor] <= args.processed.max_y;\n}\n\nfunction is_array(thing) {\n return Object.prototype.toString.call(thing) === '[object Array]';\n}\n\nfunction is_function(thing) {\n return Object.prototype.toString.call(thing) === '[object Function]';\n}\n\nfunction is_empty_array(thing) {\n return is_array(thing) && thing.length === 0;\n}\n\nfunction is_object(thing) {\n return Object.prototype.toString.call(thing) === '[object Object]';\n}\n\nfunction is_array_of_arrays(data) {\n var all_elements = data.map(function(d) {\n return is_array(d) === true && d.length > 0;\n });\n\n return d3.sum(all_elements) === data.length;\n}\n\nfunction is_array_of_objects(data) {\n // is every element of data an object?\n var all_elements = data.map(function(d) {\n return is_object(d) === true;\n });\n\n return d3.sum(all_elements) === data.length;\n}\n\nfunction is_array_of_objects_or_empty(data) {\n return is_empty_array(data) || is_array_of_objects(data);\n}\n\nfunction pluck(arr, accessor) {\n return arr.map(function(d) {\n return d[accessor] });\n}\n\nfunction count_array_elements(arr) {\n return arr.reduce(function(a, b) { a[b] = a[b] + 1 || 1;\n return a; }, {});\n}\n\nfunction mg_get_bottom(args) {\n return args.height - args.bottom;\n}\n\nfunction mg_get_plot_bottom(args) {\n // returns the pixel location of the bottom side of the plot area.\n return mg_get_bottom(args) - args.buffer;\n}\n\nfunction mg_get_top(args) {\n return args.top;\n}\n\nfunction mg_get_plot_top(args) {\n // returns the pixel location of the top side of the plot area.\n return mg_get_top(args) + args.buffer;\n}\n\nfunction mg_get_left(args) {\n return args.left;\n}\n\nfunction mg_get_plot_left(args) {\n // returns the pixel location of the left side of the plot area.\n return mg_get_left(args) + args.buffer;\n}\n\nfunction mg_get_right(args) {\n return args.width - args.right;\n}\n\nfunction mg_get_plot_right(args) {\n // returns the pixel location of the right side of the plot area.\n return mg_get_right(args) - args.buffer;\n}\n\n//////// adding elements, removing elements /////////////\n\nfunction mg_exit_and_remove(elem) {\n elem.exit().remove();\n}\n\nfunction mg_selectAll_and_remove(svg, cl) {\n svg.selectAll(cl).remove();\n}\n\nfunction mg_add_g(svg, cl) {\n return svg.append('g').classed(cl, true);\n}\n\nfunction mg_remove_element(svg, elem) {\n svg.select(elem).remove();\n}\n\n//////// axis helper functions ////////////\n\nfunction mg_make_rug(args, rug_class) {\n var svg = mg_get_svg_child_of(args.target);\n var all_data = mg_flatten_array(args.data);\n var rug = svg.selectAll('line.' + rug_class).data(all_data);\n\n rug.enter()\n .append('line')\n .attr('class', rug_class)\n .attr('opacity', 0.3);\n\n //remove rug elements that are no longer in use\n mg_exit_and_remove(rug);\n\n //set coordinates of new rug elements\n mg_exit_and_remove(rug);\n return rug;\n}\n\nfunction mg_add_color_accessor_to_rug(rug, args, rug_mono_class) {\n if (args.color_accessor) {\n rug.attr('stroke', args.scalefns.colorf);\n rug.classed(rug_mono_class, false);\n } else {\n rug.attr('stroke', null);\n rug.classed(rug_mono_class, true);\n }\n}\n\nfunction mg_rotate_labels(labels, rotation_degree) {\n if (rotation_degree) {\n labels.attr({\n dy: 0,\n transform: function() {\n var elem = d3.select(this);\n return 'rotate(' + rotation_degree + ' ' + elem.attr('x') + ',' + elem.attr('y') + ')';\n }\n });\n }\n}\n\n//////////////////////////////////////////////////\n\nfunction mg_elements_are_overlapping(labels) {\n labels = labels.node();\n if (!labels) {\n return false;\n }\n\n for (var i = 0; i < labels.length; i++) {\n if (mg_is_horizontally_overlapping(labels[i], labels)) return true;\n }\n\n return false;\n}\n\nfunction mg_prevent_horizontal_overlap(labels, args) {\n if (!labels || labels.length == 1) {\n return;\n }\n\n //see if each of our labels overlaps any of the other labels\n for (var i = 0; i < labels.length; i++) {\n //if so, nudge it up a bit, if the label it intersects hasn't already been nudged\n if (mg_is_horizontally_overlapping(labels[i], labels)) {\n var node = d3.select(labels[i]);\n var newY = +node.attr('y');\n if (newY + 8 >= args.top) {\n newY = args.top - 16;\n }\n node.attr('y', newY);\n }\n }\n}\n\nfunction mg_prevent_vertical_overlap(labels, args) {\n if (!labels || labels.length == 1) {\n return;\n }\n\n labels.sort(function(b, a) {\n return d3.select(a).attr('y') - d3.select(b).attr('y');\n });\n\n labels.reverse();\n\n var overlap_amount, label_i, label_j;\n\n //see if each of our labels overlaps any of the other labels\n for (var i = 0; i < labels.length; i++) {\n //if so, nudge it up a bit, if the label it intersects hasn't already been nudged\n label_i = d3.select(labels[i]).text();\n\n for (var j = 0; j < labels.length; j++) {\n label_j = d3.select(labels[j]).text();\n overlap_amount = mg_is_vertically_overlapping(labels[i], labels[j]);\n\n if (overlap_amount !== false && label_i !== label_j) {\n var node = d3.select(labels[i]);\n var newY = +node.attr('y');\n newY = newY + overlap_amount;\n node.attr('y', newY);\n }\n }\n }\n}\n\nfunction mg_is_vertically_overlapping(element, sibling) {\n var element_bbox = element.getBoundingClientRect();\n var sibling_bbox = sibling.getBoundingClientRect();\n\n if (element_bbox.top <= sibling_bbox.bottom && element_bbox.top >= sibling_bbox.top) {\n return sibling_bbox.bottom - element_bbox.top;\n }\n\n return false;\n}\n\nfunction mg_is_horiz_overlap(element, sibling) {\n var element_bbox = element.getBoundingClientRect();\n var sibling_bbox = sibling.getBoundingClientRect();\n\n if (element_bbox.right >= sibling_bbox.left || element_bbox.top >= sibling_bbox.top) {\n return sibling_bbox.bottom - element_bbox.top;\n }\n return false;\n}\n\nfunction mg_is_horizontally_overlapping(element, labels) {\n var element_bbox = element.getBoundingClientRect();\n\n for (var i = 0; i < labels.length; i++) {\n if (labels[i] == element) {\n continue;\n }\n\n //check to see if this label overlaps with any of the other labels\n var sibling_bbox = labels[i].getBoundingClientRect();\n if (element_bbox.top === sibling_bbox.top &&\n !(sibling_bbox.left > element_bbox.right || sibling_bbox.right < element_bbox.left)\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction mg_infer_type(args, ns) {\n // must return categorical or numerical.\n var testPoint = mg_flatten_array(args.data);\n\n testPoint = testPoint[0][args[ns + '_accessor']];\n return typeof testPoint === 'string' ? 'categorical' : 'numerical';\n }\n\nfunction mg_get_svg_child_of(selector_or_node) {\n return d3.select(selector_or_node).select('svg');\n}\n\nfunction mg_flatten_array(arr) {\n var flat_data = [];\n return flat_data.concat.apply(flat_data, arr);\n}\n\nfunction mg_next_id() {\n if (typeof MG._next_elem_id === 'undefined') {\n MG._next_elem_id = 0;\n }\n\n return 'mg-' + (MG._next_elem_id++);\n}\n\nfunction mg_target_ref(target) {\n if (typeof target === 'string') {\n return mg_normalize(target);\n\n } else if (target instanceof window.HTMLElement) {\n var target_ref = target.getAttribute('data-mg-uid');\n if (!target_ref) {\n target_ref = mg_next_id();\n target.setAttribute('data-mg-uid', target_ref);\n }\n\n return target_ref;\n\n } else {\n console.warn('The specified target should be a string or an HTMLElement.', target);\n return mg_normalize(target);\n }\n}\n\nfunction mg_normalize(string) {\n return string\n .replace(/[^a-zA-Z0-9 _-]+/g, '')\n .replace(/ +?/g, '');\n}\n\nfunction get_pixel_dimension(target, dimension) {\n return Number(d3.select(target).style(dimension).replace(/px/g, ''));\n}\n\nfunction get_width(target) {\n return get_pixel_dimension(target, 'width');\n}\n\nfunction get_height(target) {\n return get_pixel_dimension(target, 'height');\n}\n\nfunction isNumeric(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\n\nvar each = function(obj, iterator, context) {\n // yanked out of underscore\n var breaker = {};\n if (obj === null) return obj;\n if (Array.prototype.forEach && obj.forEach === Array.prototype.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length === +obj.length) {\n for (var i = 0, length = obj.length; i < length; i++) {\n if (iterator.call(context, obj[i], i, obj) === breaker) return;\n }\n } else {\n for (var k in obj) {\n if (iterator.call(context, obj[k], k, obj) === breaker) return;\n }\n }\n\n return obj;\n};\n\nfunction merge_with_defaults(obj) {\n // taken from underscore\n each(Array.prototype.slice.call(arguments, 1), function(source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === void 0) obj[prop] = source[prop];\n }\n }\n });\n\n return obj;\n}\n\nMG.merge_with_defaults = merge_with_defaults;\n\nfunction number_of_values(data, accessor, value) {\n var values = data.filter(function(d) {\n return d[accessor] === value;\n });\n\n return values.length;\n}\n\nfunction has_values_below(data, accessor, value) {\n var values = data.filter(function(d) {\n return d[accessor] <= value;\n });\n\n return values.length > 0;\n}\n\nfunction has_too_many_zeros(data, accessor, zero_count) {\n return number_of_values(data, accessor, 0) >= zero_count;\n}\n\nfunction mg_is_date(obj) {\n return Object.prototype.toString.call(obj) === '[object Date]';\n}\n\nfunction mg_is_object(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nfunction mg_is_array(obj) {\n if (Array.isArray) {\n return Array.isArray(obj);\n }\n\n return Object.prototype.toString.call(obj) === '[object Array]';\n}\n\nfunction mg_is_function(obj) {\n return Object.prototype.toString.call(obj) === '[object Function]';\n}\n\n// deep copy\n// http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object\nMG.clone = function(obj) {\n var copy;\n\n // Handle the 3 simple types, and null or undefined\n if (null === obj || \"object\" !== typeof obj) return obj;\n\n // Handle Date\n if (mg_is_date(obj)) {\n copy = new Date();\n copy.setTime(obj.getTime());\n return copy;\n }\n\n // Handle Array\n if (mg_is_array(obj)) {\n copy = [];\n for (var i = 0, len = obj.length; i < len; i++) {\n copy[i] = MG.clone(obj[i]);\n }\n return copy;\n }\n\n // Handle Object\n if (mg_is_object(obj)) {\n copy = {};\n for (var attr in obj) {\n if (obj.hasOwnProperty(attr)) copy[attr] = MG.clone(obj[attr]);\n }\n return copy;\n }\n\n throw new Error(\"Unable to copy obj! Its type isn't supported.\");\n};\n\n// give us the difference of two int arrays\n// http://radu.cotescu.com/javascript-diff-function/\nfunction arr_diff(a, b) {\n var seen = [],\n diff = [],\n i;\n for (i = 0; i < b.length; i++)\n seen[b[i]] = true;\n for (i = 0; i < a.length; i++)\n if (!seen[a[i]])\n diff.push(a[i]);\n return diff;\n}\n\nMG.arr_diff = arr_diff;\n\n/**\n Print warning message to the console when a feature has been scheduled for removal\n\n @author Dan de Havilland (github.com/dandehavilland)\n @date 2014-12\n*/\nfunction warn_deprecation(message, untilVersion) {\n console.warn('Deprecation: ' + message + (untilVersion ? '. This feature will be removed in ' + untilVersion + '.' : ' the near future.'));\n console.trace();\n}\n\nMG.warn_deprecation = warn_deprecation;\n\n/**\n Truncate a string to fit within an SVG text node\n CSS text-overlow doesn't apply to SVG <= 1.2\n\n @author Dan de Havilland (github.com/dandehavilland)\n @date 2014-12-02\n*/\nfunction truncate_text(textObj, textString, width) {\n var bbox,\n position = 0;\n\n textObj.textContent = textString;\n bbox = textObj.getBBox();\n\n while (bbox.width > width) {\n textObj.textContent = textString.slice(0, --position) + '...';\n bbox = textObj.getBBox();\n\n if (textObj.textContent === '...') {\n break;\n }\n }\n}\n\nMG.truncate_text = truncate_text;\n\n/**\n Wrap the contents of a text node to a specific width\n\n Adapted from bl.ocks.org/mbostock/7555321\n\n @author Mike Bostock\n @author Dan de Havilland\n @date 2015-01-14\n*/\nfunction wrap_text(text, width, token, tspanAttrs) {\n text.each(function() {\n var text = d3.select(this),\n words = text.text().split(token || /\\s+/).reverse(),\n word,\n line = [],\n lineNumber = 0,\n lineHeight = 1.1, // ems\n y = text.attr(\"y\"),\n dy = 0,\n tspan = text.text(null)\n .append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"y\", dy + \"em\")\n .attr(tspanAttrs || {});\n\n while (!!(word = words.pop())) {\n line.push(word);\n tspan.text(line.join(\" \"));\n if (width === null || tspan.node().getComputedTextLength() > width) {\n line.pop();\n tspan.text(line.join(\" \"));\n line = [word];\n tspan = text\n .append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"y\", ++lineNumber * lineHeight + dy + \"em\")\n .attr(tspanAttrs || {})\n .text(word);\n }\n }\n });\n}\n\nMG.wrap_text = wrap_text;\n\nfunction register(chartType, descriptor, defaults) {\n MG.charts[chartType] = {\n descriptor: descriptor,\n defaults: defaults || {}\n };\n}\n\nMG.register = register;\n\n/**\n Record of all registered hooks.\n For internal use only.\n*/\nMG._hooks = {};\n\n/**\n Add a hook callthrough to the stack.\n\n Hooks are executed in the order that they were registered.\n*/\nMG.add_hook = function(name, func, context) {\n var hooks;\n\n if (!MG._hooks[name]) {\n MG._hooks[name] = [];\n }\n\n hooks = MG._hooks[name];\n\n var already_registered =\n hooks.filter(function(hook) {\n return hook.func === func;\n })\n .length > 0;\n\n if (already_registered) {\n throw 'That function is already registered.';\n }\n\n hooks.push({\n func: func,\n context: context\n });\n};\n\n/**\n Execute registered hooks.\n\n Optional arguments\n*/\nMG.call_hook = function(name) {\n var hooks = MG._hooks[name],\n result = [].slice.apply(arguments, [1]),\n processed;\n\n if (hooks) {\n hooks.forEach(function(hook) {\n if (hook.func) {\n var params = processed || result;\n\n if (params && params.constructor !== Array) {\n params = [params];\n }\n\n params = [].concat.apply([], params);\n processed = hook.func.apply(hook.context, params);\n }\n });\n }\n\n return processed || result;\n};\n\nMG.globals = {};\nMG.deprecations = {\n rollover_callback: { replacement: 'mouseover', version: '2.0' },\n rollout_callback: { replacement: 'mouseout', version: '2.0' },\n x_rollover_format: { replacement: 'x_mouseover', version: '2.10' },\n y_rollover_format: { replacement: 'y_mouseover', version: '2.10' },\n show_years: { replacement: 'show_secondary_x_label', version: '2.1' },\n xax_start_at_min: { replacement: 'axes_not_compact', version: '2.7' },\n interpolate_tension: { replacement: 'interpolate', version: '2.10' }\n};\nMG.globals.link = false;\nMG.globals.version = \"1.1\";\n\nMG.charts = {};\n\nMG.data_graphic = function(args) {\n 'use strict';\n var defaults = {\n missing_is_zero: false, // if true, missing values will be treated as zeros\n missing_is_hidden: false, // if true, missing values will appear as broken segments\n missing_is_hidden_accessor: null, // the accessor that determines the boolean value for missing data points\n legend: '' , // an array identifying the labels for a chart's lines\n legend_target: '', // if set, the specified element is populated with a legend\n error: '', // if set, a graph will show an error icon and log the error to the console\n animate_on_load: false, // animate lines on load\n top: 65, // the size of the top margin\n title_y_position: 10, // how many pixels from the top edge (0) should we show the title at\n center_title_full_width: false, // center the title over the full graph (i.e. ignore left and right margins)\n bottom: 45, // the size of the bottom margin\n right: 10, // size of the right margin\n left: 50, // size of the left margin\n buffer: 8, // the buffer between the actual chart area and the margins\n width: 350, // the width of the entire graphic\n height: 220, // the height of the entire graphic\n full_width: false, // sets the graphic width to be the width of the parent element and resizes dynamically\n full_height: false, // sets the graphic width to be the width of the parent element and resizes dynamically\n small_height_threshold: 120, // the height threshold for when smaller text appears\n small_width_threshold: 160, // the width threshold for when smaller text appears\n xax_count: 6, // number of x axis ticks\n xax_tick_length: 5, // x axis tick length\n axes_not_compact: true,\n yax_count: 3, // number of y axis ticks\n yax_tick_length: 5, // y axis tick length\n x_extended_ticks: false, // extends x axis ticks across chart - useful for tall charts\n y_extended_ticks: false, // extends y axis ticks across chart - useful for long charts\n y_scale_type: 'linear',\n max_x: null,\n max_y: null,\n min_x: null,\n min_y: null, // if set, y axis starts at an arbitrary value\n min_y_from_data: false, // if set, y axis will start at minimum value rather than at 0\n point_size: 2.5, // the size of the dot that appears on a line on mouse-over\n x_accessor: 'date',\n xax_units: '',\n x_label: '',\n x_sort: true,\n x_axis: true,\n y_axis: true,\n x_axis_position: 'bottom',\n y_axis_position: 'left',\n x_axis_type: null, // TO BE INTRODUCED IN 2.10\n y_axis_type: null, // TO BE INTRODUCED IN 2.10\n ygroup_accessor: null,\n xgroup_accessor:null,\n y_padding_percentage: 0.05, // for categorical scales\n y_outer_padding_percentage: .1, // for categorical scales\n ygroup_padding_percentage:.25, // for categorical scales\n ygroup_outer_padding_percentage: 0, // for categorical scales\n x_padding_percentage: 0.05, // for categorical scales\n x_outer_padding_percentage: .1, // for categorical scales\n xgroup_padding_percentage:.25, // for categorical scales\n xgroup_outer_padding_percentage: 0, // for categorical scales\n y_categorical_show_guides: false,\n x_categorical_show_guide: false,\n rotate_x_labels: 0,\n rotate_y_labels: 0,\n y_accessor: 'value',\n y_label: '',\n yax_units: '',\n yax_units_append: false,\n x_rug: false,\n y_rug: false,\n mouseover_align: 'right', // implemented in point.js\n x_mouseover: null,\n y_mouseover: null,\n transition_on_update: true,\n mouseover: null,\n click: null,\n show_rollover_text: true,\n show_confidence_band: null, // given [l, u] shows a confidence at each point from l to u\n xax_format: null, // xax_format is a function that formats the labels for the x axis.\n area: true,\n chart_type: 'line',\n data: [],\n decimals: 2, // the number of decimals in any rollover\n format: 'count', // format = {count, percentage}\n inflator: 10/9, // for setting y axis max\n linked: false, // links together all other graphs with linked:true, so rollovers in one trigger rollovers in the others\n linked_format: '%Y-%m-%d', // What granularity to link on for graphs. Default is at day\n list: false,\n baselines: null, // sets the baseline lines\n markers: null, // sets the marker lines\n scalefns: {},\n scales: {},\n utc_time: false,\n european_clock: false,\n show_year_markers: false,\n show_secondary_x_label: true,\n target: '#viz',\n interpolate: d3.curveCatmullRom.alpha(0), // interpolation method to use when rendering lines; increase tension if your data is irregular and you notice artifacts\n custom_line_color_map: [], // allows arbitrary mapping of lines to colors, e.g. [2,3] will map line 1 to color 2 and line 2 to color 3\n colors: null, // UNIMPLEMENTED - allows direct color mapping to line colors. Will eventually require\n max_data_size: null, // explicitly specify the the max number of line series, for use with custom_line_color_map\n aggregate_rollover: false, // links the lines in a multi-line chart\n show_tooltips: true // if enabled, a chart's description will appear in a tooltip (requires jquery)\n };\n\n MG.call_hook('global.defaults', defaults);\n\n if (!args) { args = {}; }\n\n var selected_chart = MG.charts[args.chart_type || defaults.chart_type];\n merge_with_defaults(args, selected_chart.defaults, defaults);\n\n if (args.list) {\n args.x_accessor = 0;\n args.y_accessor = 1;\n }\n\n // check for deprecated parameters\n for (var key in MG.deprecations) {\n if (args.hasOwnProperty(key)) {\n var deprecation = MG.deprecations[key],\n message = 'Use of `args.' + key + '` has been deprecated',\n replacement = deprecation.replacement,\n version;\n\n // transparently alias the deprecated\n if (replacement) {\n if (args[replacement]) {\n message += '. The replacement - `args.' + replacement + '` - has already been defined. This definition will be discarded.';\n } else {\n args[replacement] = args[key];\n }\n }\n\n if (deprecation.warned) {\n continue;\n }\n\n deprecation.warned = true;\n\n if (replacement) {\n message += ' in favor of `args.' + replacement + '`';\n }\n\n warn_deprecation(message, deprecation.version);\n }\n }\n\n MG.call_hook('global.before_init', args);\n\n new selected_chart.descriptor(args);\n\n return args.data;\n};\n\nif (mg_jquery_exists()) {\n /* ========================================================================\n * Bootstrap: tooltip.js v3.3.5\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n +function ($) {\n 'use strict';\n\n // TOOLTIP PUBLIC CLASS DEFINITION\n // ===============================\n\n var Tooltip = function (element, options) {\n this.type = null\n this.options = null\n this.enabled = null\n this.timeout = null\n this.hoverState = null\n this.$element = null\n this.inState = null\n\n this.init('tooltip', element, options)\n }\n\n Tooltip.VERSION = '3.3.5'\n\n Tooltip.TRANSITION_DURATION = 150\n\n Tooltip.DEFAULTS = {\n animation: true,\n placement: 'top',\n selector: false,\n template: '',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n container: false,\n viewport: {\n selector: 'body',\n padding: 0\n }\n }\n\n Tooltip.prototype.init = function (type, element, options) {\n this.enabled = true\n this.type = type\n this.$element = $(element)\n this.options = this.getOptions(options)\n this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n this.inState = { click: false, hover: false, focus: false }\n\n if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n }\n\n var triggers = this.options.trigger.split(' ')\n\n for (var i = triggers.length; i--;) {\n var trigger = triggers[i]\n\n if (trigger == 'click') {\n this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n } else if (trigger != 'manual') {\n var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'\n var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n }\n }\n\n this.options.selector ?\n (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n this.fixTitle()\n }\n\n Tooltip.prototype.getDefaults = function () {\n return Tooltip.DEFAULTS\n }\n\n Tooltip.prototype.getOptions = function (options) {\n options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n if (options.delay && typeof options.delay == 'number') {\n options.delay = {\n show: options.delay,\n hide: options.delay\n }\n }\n\n return options\n }\n\n Tooltip.prototype.getDelegateOptions = function () {\n var options = {}\n var defaults = this.getDefaults()\n\n this._options && $.each(this._options, function (key, value) {\n if (defaults[key] != value) options[key] = value\n })\n\n return options\n }\n\n Tooltip.prototype.enter = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n }\n\n if (self.tip().hasClass('in') || self.hoverState == 'in') {\n self.hoverState = 'in'\n return\n }\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'in'\n\n if (!self.options.delay || !self.options.delay.show) return self.show()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'in') self.show()\n }, self.options.delay.show)\n }\n\n Tooltip.prototype.isInStateTrue = function () {\n for (var key in this.inState) {\n if (this.inState[key]) return true\n }\n\n return false\n }\n\n Tooltip.prototype.leave = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n }\n\n if (self.isInStateTrue()) return\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'out'\n\n if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'out') self.hide()\n }, self.options.delay.hide)\n }\n\n Tooltip.prototype.show = function () {\n var e = $.Event('show.bs.' + this.type)\n\n if (this.hasContent() && this.enabled) {\n this.$element.trigger(e)\n\n var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n if (e.isDefaultPrevented() || !inDom) return\n var that = this\n\n var $tip = this.tip()\n\n var tipId = this.getUID(this.type)\n\n this.setContent()\n $tip.attr('id', tipId)\n this.$element.attr('aria-describedby', tipId)\n\n if (this.options.animation) $tip.addClass('fade')\n\n var placement = typeof this.options.placement == 'function' ?\n this.options.placement.call(this, $tip[0], this.$element[0]) :\n this.options.placement\n\n var autoToken = /\\s?auto?\\s?/i\n var autoPlace = autoToken.test(placement)\n if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n $tip\n .detach()\n .css({ top: 0, left: 0, display: 'block' })\n .addClass(placement)\n .data('bs.' + this.type, this)\n\n this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n this.$element.trigger('inserted.bs.' + this.type)\n\n var pos = this.getPosition()\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (autoPlace) {\n var orgPlacement = placement\n var viewportDim = this.getPosition(this.$viewport)\n\n placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :\n placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :\n placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :\n placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :\n placement\n\n $tip\n .removeClass(orgPlacement)\n .addClass(placement)\n }\n\n var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n this.applyPlacement(calculatedOffset, placement)\n\n var complete = function () {\n var prevHoverState = that.hoverState\n that.$element.trigger('shown.bs.' + that.type)\n that.hoverState = null\n\n if (prevHoverState == 'out') that.leave(that)\n }\n\n $.support.transition && this.$tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n }\n }\n\n Tooltip.prototype.applyPlacement = function (offset, placement) {\n var $tip = this.tip()\n var width = $tip[0].offsetWidth\n var height = $tip[0].offsetHeight\n\n // manually read margins because getBoundingClientRect includes difference\n var marginTop = parseInt($tip.css('margin-top'), 10)\n var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n // we must check for NaN for ie 8/9\n if (isNaN(marginTop)) marginTop = 0\n if (isNaN(marginLeft)) marginLeft = 0\n\n offset.top += marginTop\n offset.left += marginLeft\n\n // $.fn.offset doesn't round pixel values\n // so we use setOffset directly with our own function B-0\n $.offset.setOffset($tip[0], $.extend({\n using: function (props) {\n $tip.css({\n top: Math.round(props.top),\n left: Math.round(props.left)\n })\n }\n }, offset), 0)\n\n $tip.addClass('in')\n\n // check to see if placing tip in new offset caused the tip to resize itself\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (placement == 'top' && actualHeight != height) {\n offset.top = offset.top + height - actualHeight\n }\n\n var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n if (delta.left) offset.left += delta.left\n else offset.top += delta.top\n\n var isVertical = /top|bottom/.test(placement)\n var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n $tip.offset(offset)\n this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n }\n\n Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n this.arrow()\n .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n .css(isVertical ? 'top' : 'left', '')\n }\n\n Tooltip.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n\n $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n $tip.removeClass('fade in top bottom left right')\n }\n\n Tooltip.prototype.hide = function (callback) {\n var that = this\n var $tip = $(this.$tip)\n var e = $.Event('hide.bs.' + this.type)\n\n function complete() {\n if (that.hoverState != 'in') $tip.detach()\n that.$element\n .removeAttr('aria-describedby')\n .trigger('hidden.bs.' + that.type)\n callback && callback()\n }\n\n this.$element.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n $tip.removeClass('in')\n\n $.support.transition && $tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n\n this.hoverState = null\n\n return this\n }\n\n Tooltip.prototype.fixTitle = function () {\n var $e = this.$element\n if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n }\n }\n\n Tooltip.prototype.hasContent = function () {\n return this.getTitle()\n }\n\n Tooltip.prototype.getPosition = function ($element) {\n $element = $element || this.$element\n\n var el = $element[0]\n var isBody = el.tagName == 'BODY'\n\n var elRect = el.getBoundingClientRect()\n if (elRect.width == null) {\n // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n }\n var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()\n var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n return $.extend({}, elRect, scroll, outerDims, elOffset)\n }\n\n Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n }\n\n Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n var delta = { top: 0, left: 0 }\n if (!this.$viewport) return delta\n\n var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n var viewportDimensions = this.getPosition(this.$viewport)\n\n if (/right|left/.test(placement)) {\n var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll\n var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n if (topEdgeOffset < viewportDimensions.top) { // top overflow\n delta.top = viewportDimensions.top - topEdgeOffset\n } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n }\n } else {\n var leftEdgeOffset = pos.left - viewportPadding\n var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n delta.left = viewportDimensions.left - leftEdgeOffset\n } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n }\n }\n\n return delta\n }\n\n Tooltip.prototype.getTitle = function () {\n var title\n var $e = this.$element\n var o = this.options\n\n title = $e.attr('data-original-title')\n || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)\n\n return title\n }\n\n Tooltip.prototype.getUID = function (prefix) {\n do prefix += ~~(Math.random() * 1000000)\n while (document.getElementById(prefix))\n return prefix\n }\n\n Tooltip.prototype.tip = function () {\n if (!this.$tip) {\n this.$tip = $(this.options.template)\n if (this.$tip.length != 1) {\n throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n }\n }\n return this.$tip\n }\n\n Tooltip.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n }\n\n Tooltip.prototype.enable = function () {\n this.enabled = true\n }\n\n Tooltip.prototype.disable = function () {\n this.enabled = false\n }\n\n Tooltip.prototype.toggleEnabled = function () {\n this.enabled = !this.enabled\n }\n\n Tooltip.prototype.toggle = function (e) {\n var self = this\n if (e) {\n self = $(e.currentTarget).data('bs.' + this.type)\n if (!self) {\n self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n $(e.currentTarget).data('bs.' + this.type, self)\n }\n }\n\n if (e) {\n self.inState.click = !self.inState.click\n if (self.isInStateTrue()) self.enter(self)\n else self.leave(self)\n } else {\n self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n }\n }\n\n Tooltip.prototype.destroy = function () {\n var that = this\n clearTimeout(this.timeout)\n this.hide(function () {\n that.$element.off('.' + that.type).removeData('bs.' + that.type)\n if (that.$tip) {\n that.$tip.detach()\n }\n that.$tip = null\n that.$arrow = null\n that.$viewport = null\n })\n }\n\n\n // TOOLTIP PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.tooltip')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.tooltip\n\n $.fn.tooltip = Plugin\n $.fn.tooltip.Constructor = Tooltip\n\n\n // TOOLTIP NO CONFLICT\n // ===================\n\n $.fn.tooltip.noConflict = function () {\n $.fn.tooltip = old\n return this\n }\n\n }(jQuery);\n\n\n /* ========================================================================\n * Bootstrap: popover.js v3.3.5\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n +function ($) {\n 'use strict';\n\n // POPOVER PUBLIC CLASS DEFINITION\n // ===============================\n\n var Popover = function (element, options) {\n this.init('popover', element, options)\n }\n\n if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n Popover.VERSION = '3.3.5'\n\n Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n placement: 'right',\n trigger: 'click',\n content: '',\n template: ''\n })\n\n\n // NOTE: POPOVER EXTENDS tooltip.js\n // ================================\n\n Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n Popover.prototype.constructor = Popover\n\n Popover.prototype.getDefaults = function () {\n return Popover.DEFAULTS\n }\n\n Popover.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n var content = this.getContent()\n\n $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n ](content)\n\n $tip.removeClass('fade top bottom left right in')\n\n // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n // this manually by checking the contents.\n if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n }\n\n Popover.prototype.hasContent = function () {\n return this.getTitle() || this.getContent()\n }\n\n Popover.prototype.getContent = function () {\n var $e = this.$element\n var o = this.options\n\n return $e.attr('data-content')\n || (typeof o.content == 'function' ?\n o.content.call($e[0]) :\n o.content)\n }\n\n Popover.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n }\n\n\n // POPOVER PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.popover')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.popover\n\n $.fn.popover = Plugin\n $.fn.popover.Constructor = Popover\n\n\n // POPOVER NO CONFLICT\n // ===================\n\n $.fn.popover.noConflict = function () {\n $.fn.popover = old\n return this\n }\n\n }(jQuery);\n}\n\nfunction chart_title(args) {\n 'use strict';\n\n var svg = mg_get_svg_child_of(args.target);\n\n //remove the current title if it exists\n svg.select('.mg-header').remove();\n\n if (args.target && args.title) {\n var chartTitle = svg.insert('text')\n .attr('class', 'mg-header')\n .attr('x', args.center_title_full_width ? args.width /2 : (args.width + args.left - args.right) / 2)\n .attr('y', args.title_y_position)\n .attr('text-anchor', 'middle')\n .attr('dy', '0.55em');\n\n //show the title\n chartTitle.append('tspan')\n .attr('class', 'mg-chart-title')\n .text(args.title);\n\n //show and activate the description icon if we have a description\n if (args.show_tooltips && args.description && mg_jquery_exists()) {\n chartTitle.append('tspan')\n .attr('class', 'mg-chart-description')\n .attr('dx', '0.3em')\n .text('\\uf059');\n\n //now that the title is an svg text element, we'll have to trigger\n //mouseenter, mouseleave events manually for the popover to work properly\n var $chartTitle = $(chartTitle.node());\n $chartTitle.popover({\n html: true,\n animation: false,\n placement: 'top',\n content: args.description,\n container: args.target,\n trigger: 'manual',\n template: ''\n }).on('mouseenter', function() {\n d3.selectAll(args.target)\n .selectAll('.mg-popover')\n .remove();\n\n $(this).popover('show');\n $(d3.select(args.target).select('.popover').node())\n .on('mouseleave', function () {\n $chartTitle.popover('hide');\n });\n }).on('mouseleave', function () {\n setTimeout(function () {\n if (!$('.popover:hover').length) {\n $chartTitle.popover('hide');\n }\n }, 120);\n });\n } else if (args.show_tooltips && args.description && typeof $ === 'undefined') {\n args.error = 'In order to enable tooltips, please make sure you include jQuery.';\n }\n }\n\n if (args.error) {\n error(args);\n }\n}\n\nMG.chart_title = chart_title;\n\nfunction mg_add_scale_function(args, scalefcn_name, scale, accessor, inflation) {\n args.scalefns[scalefcn_name] = function(di) {\n if (inflation === undefined) return args.scales[scale](di[accessor]);\n else return args.scales[scale](di[accessor]) + inflation;\n };\n}\n\nfunction mg_position(str, args) {\n if (str === 'bottom' || str === 'top') {\n return [mg_get_plot_left(args), mg_get_plot_right(args)];\n }\n\n if (str === 'left' || str === 'right') {\n return [mg_get_plot_bottom(args), args.top];\n }\n}\n\nfunction mg_cat_position(str, args) {\n if (str === 'bottom' || str === 'top') {\n return [mg_get_plot_left(args), mg_get_plot_right(args)]\n }\n\n if (str === 'left' || str === 'right') {\n return [mg_get_plot_bottom(args), mg_get_plot_top(args)];\n }\n}\n\nfunction MGScale(args) {\n // big wrapper around d3 scale that automatically formats & calculates scale bounds\n // according to the data, and handles other niceties.\n var scaleArgs = {}\n scaleArgs.use_inflator = false;\n scaleArgs.zero_bottom = false;\n scaleArgs.scaleType = 'numerical';\n\n this.namespace = function(_namespace) {\n scaleArgs.namespace = _namespace;\n scaleArgs.namespace_accessor_name = scaleArgs.namespace + '_accessor';\n scaleArgs.scale_name = scaleArgs.namespace.toUpperCase();\n scaleArgs.scalefn_name = scaleArgs.namespace + 'f';\n return this;\n }\n\n this.scaleName = function(scaleName) {\n scaleArgs.scale_name = scaleName.toUpperCase();\n scaleArgs.scalefn_name = scaleName +'f';\n return this;\n }\n\n this.inflateDomain = function(tf) {\n scaleArgs.use_inflator = tf;\n return this;\n }\n\n this.zeroBottom = function(tf) {\n scaleArgs.zero_bottom = tf;\n return this;\n }\n\n /////////////////////////////////////////////////////////////////////////////////////////////////////////\n /// all scale domains are either numerical (number, date, etc.) or categorical (factor, label, etc) /////\n /////////////////////////////////////////////////////////////////////////////////////////////////////////\n // these functions automatically create the d3 scale function and place the domain.\n\n this.numericalDomainFromData = function() {\n var other_flat_data_arrays = [];\n\n if (arguments.length > 0) {\n other_flat_data_arrays = arguments;\n }\n\n // pull out a non-empty array in args.data.\n var illustrative_data;\n for (var i = 0; i < args.data.length; i++) {\n if (args.data[i].length > 0) {\n illustrative_data = args.data[i];\n }\n }\n scaleArgs.is_time_series = mg_is_date(illustrative_data[0][args[scaleArgs.namespace_accessor_name]])\n ? true\n : false;\n\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n\n mg_min_max_numerical(args, scaleArgs, other_flat_data_arrays, scaleArgs.use_inflator);\n\n var time_scale = (args.utc_time)\n ? d3.scaleUtc()\n : d3.scaleTime();\n\n args.scales[scaleArgs.scale_name] = (scaleArgs.is_time_series)\n ? time_scale\n : (mg_is_function(args[scaleArgs.namespace + '_scale_type']))\n ? args.y_scale_type()\n : (args[scaleArgs.namespace + '_scale_type'] === 'log')\n ? d3.scaleLog()\n : d3.scaleLinear();\n\n args.scales[scaleArgs.scale_name].domain([args.processed['min_' + scaleArgs.namespace], args.processed['max_' + scaleArgs.namespace]]);\n scaleArgs.scaleType = 'numerical';\n\n return this;\n }\n\n this.categoricalDomain = function(domain) {\n args.scales[scaleArgs.scale_name] = d3.scaleOrdinal().domain(domain);\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n return this;\n }\n\n this.categoricalDomainFromData = function() {\n // make args.categorical_variables.\n // lets make the categorical variables.\n var all_data = mg_flatten_array(args.data)\n //d3.set(data.map(function(d){return d[args.group_accessor]})).values()\n scaleArgs.categoricalVariables = d3.set(all_data.map(function(d) {\n return d[args[scaleArgs.namespace_accessor_name]] })).values();\n args.scales[scaleArgs.scale_name] = d3.scaleBand()\n .domain(scaleArgs.categoricalVariables);\n\n scaleArgs.scaleType = 'categorical';\n return this;\n }\n\n /////////////////////////////////////////////////////////////////////////////////////////////////////////////\n ////////// all scale ranges are either positional (for axes, etc) or arbitrary (colors, size, etc) //////////\n /////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n this.numericalRange = function(range) {\n if (typeof range === 'string') {\n args\n .scales[scaleArgs.scale_name]\n .range(mg_position(range, args));\n } else {\n args\n .scales[scaleArgs.scale_name]\n .range(range);\n }\n\n return this;\n }\n\n this.categoricalRangeBands = function(range, halfway) {\n if (halfway === undefined) halfway = false;\n\n var namespace = scaleArgs.namespace;\n var paddingPercentage = args[namespace + '_padding_percentage'];\n var outerPaddingPercentage = args[namespace + '_outer_padding_percentage'];\n if (typeof range === 'string') {\n // if string, it's a location. Place it accordingly.\n args.scales[scaleArgs.scale_name]\n .range(mg_position(range, args))\n .paddingInner(paddingPercentage)\n .paddingOuter(outerPaddingPercentage);\n } else {\n args.scales[scaleArgs.scale_name]\n .range(range)\n .paddingInner(paddingPercentage)\n .paddingOuter(outerPaddingPercentage);\n }\n\n mg_add_scale_function(\n args,\n scaleArgs.scalefn_name,\n scaleArgs.scale_name,\n args[scaleArgs.namespace_accessor_name],\n halfway\n ? args.scales[scaleArgs.scale_name].bandwidth() / 2\n : 0\n );\n\n return this;\n }\n\n this.categoricalRange = function(range) {\n args.scales[scaleArgs.scale_name].range(range);\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n return this;\n }\n\n this.categoricalColorRange = function() {\n args.scales[scaleArgs.scale_name] = args.scales[scaleArgs.scale_name].domain().length > 10\n ? d3.scaleOrdinal(d3.schemeCategory20)\n : d3.scaleOrdinal(d3.schemeCategory10);\n\n args\n .scales[scaleArgs.scale_name]\n .domain(scaleArgs.categoricalVariables);\n\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n return this;\n }\n\n this.clamp = function(yn) {\n args.scales[scaleArgs.scale_name].clamp(yn);\n return this;\n }\n\n return this;\n}\n\nMG.scale_factory = MGScale;\n\n/////////////////////////////// x, x_accessor, markers, baselines, etc.\nfunction mg_min_max_numerical(args, scaleArgs, additional_data_arrays) {\n // A BIT OF EXPLANATION ABOUT THIS FUNCTION\n // This function pulls out all the accessor values in all the arrays in args.data.\n // We also have this additional argument, additional_data_arrays, which is an array of arrays of raw data values.\n // These values also get concatenated to the data pulled from args.data, and the extents are calculate from that.\n // They are optional.\n //\n // This may seem arbitrary, but it gives us a lot of flexibility. For instance, if we're calculating\n // the min and max for the y axis of a line chart, we're going to want to also factor in baselines (horizontal lines\n // that might potentially be outside of the y value bounds). The easiest way to do this is in the line.js code\n // & scale creation to just flatten the args.baselines array, pull out hte values, and feed it in\n // so it appears in additional_data_arrays.\n var namespace = scaleArgs.namespace;\n var namespace_accessor_name = scaleArgs.namespace_accessor_name;\n var use_inflator = scaleArgs.use_inflator;\n var zero_bottom = scaleArgs.zero_bottom;\n\n var accessor = args[namespace_accessor_name];\n\n // add together all relevant data arrays.\n var all_data = mg_flatten_array(args.data)\n .map(function(dp) {\n return dp[accessor] })\n .concat(mg_flatten_array(additional_data_arrays));\n\n // do processing for log\n if (args[namespace + '_scale_type'] === 'log') {\n all_data = all_data.filter(function(d) {\n return d > 0;\n });\n }\n\n // use inflator?\n var extents = d3.extent(all_data);\n var min_val = extents[0];\n var max_val = extents[1];\n\n // bolt scale domain to zero when the right conditions are met:\n // not pulling the bottom of the range from data\n // not zero-bottomed\n // not a time series\n if (zero_bottom && !args['min_' + namespace + '_from_data'] && min_val > 0 && !scaleArgs.is_time_series) {\n min_val = args[namespace + '_scale_type'] === 'log' ? 1 : 0;\n }\n\n if (args[namespace + '_scale_type'] !== 'log' && min_val < 0 && !scaleArgs.is_time_series) {\n min_val = min_val - (min_val - min_val * args.inflator) * use_inflator;\n }\n\n if (!scaleArgs.is_time_series) {\n max_val = (max_val < 0) ? max_val + (max_val - max_val * args.inflator) * use_inflator : max_val * (use_inflator ? args.inflator : 1);\n }\n\n min_val = args['min_' + namespace] || min_val;\n max_val = args['max_' + namespace] || max_val;\n // if there's a single data point, we should custom-set the min and max values.\n\n if (min_val === max_val && !(args['min_' + namespace] && args['max_' + namespace])) {\n\n if (mg_is_date(min_val)) {\n max_val = new Date(MG.clone(min_val).setDate(min_val.getDate() + 1));\n min_val = new Date(MG.clone(min_val).setDate(min_val.getDate() - 1));\n } else if (typeof min_val === 'number') {\n min_val = min_val - 1;\n max_val = min_val + 1;\n mg_force_xax_count_to_be_two(args);\n }\n }\n\n args.processed['min_' + namespace] = min_val;\n args.processed['max_' + namespace] = max_val;\n\n MG.call_hook('x_axis.process_min_max', args, args.processed.min_x, args.processed.max_x);\n MG.call_hook('y_axis.process_min_max', args, args.processed.min_y, args.processed.max_y);\n}\n\nfunction mg_categorical_group_color_scale(args) {\n if (args.color_accessor !== false) {\n if (args.ygroup_accessor) {\n // add a custom accessor element.\n if (args.color_accessor === null) {\n args.color_accessor = args.y_accessor;\n } else {}\n }\n if (args.color_accessor !== null) {\n new MG.scale_factory(args)\n .namespace('color')\n .categoricalDomainFromData()\n .categoricalColorRange();\n }\n }\n}\n\nfunction mg_add_color_categorical_scale(args, domain, accessor) {\n args.scales.color = d3.scaleOrdinal(d3.schemeCategory20).domain(domain);\n args.scalefns.color = function(d) {\n return args.scales.color(d[accessor]);\n };\n}\n\nfunction mg_get_categorical_domain(data, accessor) {\n return d3.set(data.map(function(d) {\n return d[accessor]; }))\n .values();\n}\n\nfunction mg_get_color_domain(args) {\n var color_domain;\n if (args.color_domain === null) {\n if (args.color_type === 'number') {\n color_domain = d3.extent(args.data[0], function(d) {\n return d[args.color_accessor]; });\n } else if (args.color_type === 'category') {\n color_domain = mg_get_categorical_domain(args.data[0], args.color_accessor);\n\n }\n } else {\n color_domain = args.color_domain;\n }\n return color_domain;\n}\n\nfunction mg_get_color_range(args) {\n var color_range;\n if (args.color_range === null) {\n if (args.color_type === 'number') {\n color_range = ['blue', 'red'];\n } else {\n color_range = null;\n }\n } else {\n color_range = args.color_range;\n }\n return color_range;\n}\n\nfunction processScaleTicks (args, axis) {\n var accessor = args[axis + '_accessor'];\n var scale_ticks = args.scales[axis.toUpperCase()].ticks(args[axis + 'ax_count']);\n var max = args.processed['max_' + axis];\n\n function log10 (val) {\n if (val === 1000) {\n return 3;\n }\n if (val === 1000000) {\n return 7;\n }\n return Math.log(val) / Math.LN10;\n }\n\n if (args[axis + '_scale_type'] === 'log') {\n // get out only whole logs\n scale_ticks = scale_ticks.filter(function (d) {\n return Math.abs(log10(d)) % 1 < 1e-6 || Math.abs(log10(d)) % 1 > 1 - 1e-6;\n });\n }\n\n // filter out fraction ticks if our data is ints and if xmax > number of generated ticks\n var number_of_ticks = scale_ticks.length;\n\n // is our data object all ints?\n var data_is_int = true;\n args.data.forEach(function (d, i) {\n d.forEach(function (d, i) {\n if (d[accessor] % 1 !== 0) {\n data_is_int = false;\n return false;\n }\n });\n });\n\n if (data_is_int && number_of_ticks > max && args.format === 'count') {\n // remove non-integer ticks\n scale_ticks = scale_ticks.filter(function (d) {\n return d % 1 === 0;\n });\n }\n args.processed[axis + '_ticks'] = scale_ticks;\n}\n\nfunction rugPlacement (args, axisArgs) {\n var position = axisArgs.position;\n var ns = axisArgs.namespace;\n var coordinates = {};\n if (position === 'left') {\n coordinates.x1 = mg_get_left(args) + 1;\n coordinates.x2 = mg_get_left(args) + args.rug_buffer_size;\n coordinates.y1 = args.scalefns[ns + 'f'];\n coordinates.y2 = args.scalefns[ns + 'f'];\n }\n if (position === 'right') {\n coordinates.x1 = mg_get_right(args) - 1,\n coordinates.x2 = mg_get_right(args) - args.rug_buffer_size,\n coordinates.y1 = args.scalefns[ns + 'f'];\n coordinates.y2 = args.scalefns[ns + 'f'];\n }\n if (position === 'top') {\n coordinates.x1 = args.scalefns[ns + 'f'];\n coordinates.x2 = args.scalefns[ns + 'f'];\n coordinates.y1 = mg_get_top(args) + 1;\n coordinates.y2 = mg_get_top(args) + args.rug_buffer_size;\n }\n if (position === 'bottom') {\n coordinates.x1 = args.scalefns[ns + 'f'];\n coordinates.x2 = args.scalefns[ns + 'f'];\n coordinates.y1 = mg_get_bottom(args) - 1;\n coordinates.y2 = mg_get_bottom(args) - args.rug_buffer_size;\n }\n return coordinates;\n}\n\nfunction rimPlacement (args, axisArgs) {\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var tick_length = args.processed[ns + '_ticks'].length;\n var ticks = args.processed[ns + '_ticks'];\n var scale = args.scales[ns.toUpperCase()];\n var coordinates = {};\n\n if (position === 'left') {\n coordinates.x1 = mg_get_left(args);\n coordinates.x2 = mg_get_left(args);\n coordinates.y1 = scale(ticks[0]).toFixed(2);\n coordinates.y2 = scale(ticks[tick_length - 1]).toFixed(2);\n }\n if (position === 'right') {\n coordinates.x1 = mg_get_right(args);\n coordinates.x2 = mg_get_right(args);\n coordinates.y1 = scale(ticks[0]).toFixed(2);\n coordinates.y2 = scale(ticks[tick_length - 1]).toFixed(2);\n }\n if (position === 'top') {\n coordinates.x1 = mg_get_left(args);\n coordinates.x2 = mg_get_right(args);\n coordinates.y1 = mg_get_top(args);\n coordinates.y2 = mg_get_top(args);\n }\n if (position === 'bottom') {\n coordinates.x1 = mg_get_left(args);\n coordinates.x2 = mg_get_right(args);\n coordinates.y1 = mg_get_bottom(args);\n coordinates.y2 = mg_get_bottom(args);\n }\n\n if (position === 'left' || position === 'right') {\n if (args.axes_not_compact) {\n coordinates.y1 = mg_get_bottom(args);\n coordinates.y2 = mg_get_top(args);\n } else if (tick_length) {\n coordinates.y1 = scale(ticks[0]).toFixed(2);\n coordinates.y2 = scale(ticks[tick_length - 1]).toFixed(2);\n }\n }\n\n return coordinates;\n}\n\nfunction labelPlacement (args, axisArgs) {\n var position = axisArgs.position;\n var ns = axisArgs.namespace;\n var tickLength = args[ns + 'ax_tick_length'];\n var scale = args.scales[ns.toUpperCase()];\n var coordinates = {};\n\n if (position === 'left') {\n coordinates.x = mg_get_left(args) - tickLength * 3 / 2;\n coordinates.y = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.dx = -3;\n coordinates.dy = '.35em';\n coordinates.textAnchor = 'end';\n coordinates.text = function (d) {\n return mg_compute_yax_format(args)(d);\n };\n }\n if (position === 'right') {\n coordinates.x = mg_get_right(args) + tickLength * 3 / 2;\n coordinates.y = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.dx = 3;\n coordinates.dy = '.35em';\n coordinates.textAnchor = 'start';\n coordinates.text = function (d) {\n return mg_compute_yax_format(args)(d); };\n }\n if (position === 'top') {\n coordinates.x = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.y = (mg_get_top(args) - tickLength * 7 / 3).toFixed(2);\n coordinates.dx = 0;\n coordinates.dy = '0em';\n coordinates.textAnchor = 'middle';\n coordinates.text = function (d) {\n return mg_default_xax_format(args)(d);\n };\n }\n if (position === 'bottom') {\n coordinates.x = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.y = (mg_get_bottom(args) + tickLength * 7 / 3).toFixed(2);\n coordinates.dx = 0;\n coordinates.dy = '.50em';\n coordinates.textAnchor = 'middle';\n coordinates.text = function (d) {\n return mg_default_xax_format(args)(d);\n };\n }\n\n return coordinates;\n}\n\nfunction selectXaxFormat (args) {\n var c = args.chart_type;\n if (!args.processed.xax_format) {\n if (args.xax_format) {\n args.processed.xax_format = args.xax_format;\n } else {\n if (c === 'line' || c === 'point' || c === 'histogram') {\n args.processed.xax_format = mg_default_xax_format(args);\n } else if (c === 'bar') {\n args.processed.xax_format = mg_default_bar_xax_format(args);\n }\n }\n }\n}\n\nfunction secondaryLabels (g, args, axisArgs) {\n if (args.time_series && (args.show_years || args.show_secondary_x_label)) {\n var tf = mg_get_yformat_and_secondary_time_function(args);\n addSecondaryLabelElements(args, axisArgs, g, tf.timeframe, tf.yformat, tf.secondary);\n }\n}\n\nfunction addSecondaryLabelElements (args, axisArgs, g, time_frame, yformat, secondary_function) {\n var years = secondary_function(args.processed.min_x, args.processed.max_x);\n if (years.length === 0) {\n var first_tick = args.scales.X.ticks(args.xax_count)[0];\n years = [first_tick];\n }\n\n var yg = mg_add_g(g, 'mg-year-marker');\n if (time_frame === 'default' && args.show_year_markers) {\n yearMarkerLine(args, axisArgs, yg, years, yformat);\n }\n if (time_frame != 'years') yearMarkerText(args, axisArgs, yg, years, yformat);\n}\n\nfunction yearMarkerLine (args, axisArgs, g, years, yformat) {\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('line')\n .attr('x1', function (d) {\n return args.scales.X(d).toFixed(2); })\n .attr('x2', function (d) {\n return args.scales.X(d).toFixed(2); })\n .attr('y1', mg_get_top(args))\n .attr('y2', mg_get_bottom(args));\n}\n\nfunction yearMarkerText (args, axisArgs, g, years, yformat) {\n var position = axisArgs.position;\n var ns = axisArgs.namespace;\n var scale = args.scales[ns.toUpperCase()];\n var x, y, dy, textAnchor, textFcn;\n var xAxisTextElement = d3.select(args.target)\n .select('.mg-x-axis text').node().getBoundingClientRect();\n\n if (position === 'top') {\n x = function (d, i) {\n return scale(d).toFixed(2); };\n y = (mg_get_top(args) - args.xax_tick_length * 7 / 3) - (xAxisTextElement.height);\n dy = '.50em';\n textAnchor = 'middle';\n textFcn = function (d) {\n return yformat(new Date(d)); };\n }\n if (position === 'bottom') {\n x = function (d, i) {\n return scale(d).toFixed(2); };\n y = (mg_get_bottom(args) + args.xax_tick_length * 7 / 3) + (xAxisTextElement.height * 0.8);\n dy = '.50em';\n textAnchor = 'middle';\n textFcn = function (d) {\n return yformat(new Date(d)); };\n }\n\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('text')\n .attr('x', x)\n .attr('y', y)\n .attr('dy', dy)\n .attr('text-anchor', textAnchor)\n .text(textFcn);\n}\n\nfunction addNumericalLabels (g, args, axisArgs) {\n var ns = axisArgs.namespace;\n var coords = labelPlacement(args, axisArgs);\n var ticks = args.processed[ns + '_ticks'];\n\n var labels = g.selectAll('.mg-yax-labels')\n .data(ticks).enter()\n .append('text')\n .attr('x', coords.x)\n .attr('dx', coords.dx)\n .attr('y', coords.y)\n .attr('dy', coords.dy)\n .attr('text-anchor', coords.textAnchor)\n .text(coords.text);\n\n // move the labels if they overlap\n if (ns == 'x') {\n selectXaxFormat(args);\n if (args.time_series && args.european_clock) {\n labels.append('tspan').classed('mg-european-hours', true).text(function (_d, i) {\n var d = new Date(_d);\n if (i === 0) return d3.timeFormat('%H')(d);\n else return '';\n });\n labels.append('tspan').classed('mg-european-minutes-seconds', true).text(function (_d, i) {\n var d = new Date(_d);\n return ':' + args.processed.xax_format(d);\n });\n } else {\n labels.text(function (d) {\n return args.xax_units + args.processed.xax_format(d);\n });\n }\n secondaryLabels(g, args, axisArgs);\n }\n\n if (mg_elements_are_overlapping(labels)) {\n labels.filter(function (d, i) {\n return (i + 1) % 2 === 0;\n }).remove();\n\n var svg = mg_get_svg_child_of(args.target);\n svg.selectAll('.mg-' + ns + 'ax-ticks').filter(function (d, i) {\n return (i + 1) % 2 === 0; })\n .remove();\n }\n}\n\nfunction addTickLines (g, args, axisArgs) {\n // name\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var scale = args.scales[ns.toUpperCase()];\n\n var ticks = args.processed[ns + '_ticks'];\n var ticksClass = 'mg-' + ns + 'ax-ticks';\n var extendedTicksClass = 'mg-extended-' + ns + 'ax-ticks';\n var extendedTicks = args[ns + '_extended_ticks'];\n var tickLength = args[ns + 'ax_tick_length'];\n\n var x1, x2, y1, y2;\n\n if (position === 'left') {\n x1 = mg_get_left(args);\n x2 = extendedTicks ? mg_get_right(args) : mg_get_left(args) - tickLength;\n y1 = function (d) {\n return scale(d).toFixed(2);\n };\n y2 = function (d) {\n return scale(d).toFixed(2);\n };\n }\n if (position === 'right') {\n x1 = mg_get_right(args);\n x2 = extendedTicks ? mg_get_left(args) : mg_get_right(args) + tickLength;\n y1 = function (d) {\n return scale(d).toFixed(2);\n };\n y2 = function (d) {\n return scale(d).toFixed(2);\n };\n }\n if (position === 'top') {\n x1 = function (d) {\n return scale(d).toFixed(2);\n };\n x2 = function (d) {\n return scale(d).toFixed(2);\n };\n y1 = mg_get_top(args);\n y2 = extendedTicks ? mg_get_bottom(args) : mg_get_top(args) - tickLength;\n }\n if (position === 'bottom') {\n x1 = function (d) {\n return scale(d).toFixed(2);\n };\n x2 = function (d) {\n return scale(d).toFixed(2);\n };\n y1 = mg_get_bottom(args);\n y2 = extendedTicks ? mg_get_top(args) : mg_get_bottom(args) + tickLength;\n }\n\n g.selectAll('.' + ticksClass)\n .data(ticks).enter()\n .append('line')\n .classed(extendedTicksClass, extendedTicks)\n .attr('x1', x1)\n .attr('x2', x2)\n .attr('y1', y1)\n .attr('y2', y2);\n}\n\nfunction initializeAxisRim (g, args, axisArgs) {\n var namespace = axisArgs.namespace;\n var tick_length = args.processed[namespace + '_ticks'].length;\n\n var rim = rimPlacement(args, axisArgs);\n\n if (!args[namespace + '_extended_ticks'] && !args[namespace + '_extended_ticks'] && tick_length) {\n g.append('line')\n .attr('x1', rim.x1)\n .attr('x2', rim.x2)\n .attr('y1', rim.y1)\n .attr('y2', rim.y2);\n }\n}\n\nfunction initializeRug (args, rug_class) {\n var svg = mg_get_svg_child_of(args.target);\n var all_data = mg_flatten_array(args.data);\n var rug = svg.selectAll('line.' + rug_class).data(all_data);\n\n // set the attributes that do not change after initialization, per\n rug.enter().append('svg:line').attr('class', rug_class).attr('opacity', 0.3);\n\n // remove rug elements that are no longer in use\n mg_exit_and_remove(rug);\n\n // set coordinates of new rug elements\n mg_exit_and_remove(rug);\n return rug;\n}\n\nfunction rug (args, axisArgs) {\n 'use strict';\n args.rug_buffer_size = args.chart_type === 'point' ? args.buffer / 2 : args.buffer * 2 / 3;\n\n var rug = initializeRug(args, 'mg-' + axisArgs.namespace + '-rug');\n var rug_positions = rugPlacement(args, axisArgs);\n rug.attr('x1', rug_positions.x1)\n .attr('x2', rug_positions.x2)\n .attr('y1', rug_positions.y1)\n .attr('y2', rug_positions.y2);\n\n mg_add_color_accessor_to_rug(rug, args, 'mg-' + axisArgs.namespace + '-rug-mono');\n}\n\nfunction categoricalLabelPlacement (args, axisArgs, group) {\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var scale = args.scales[ns.toUpperCase()];\n var groupScale = args.scales[(ns + 'group').toUpperCase()];\n var coords = {};\n coords.cat = {};\n coords.group = {};\n // x, y, dy, text-anchor\n\n if (position === 'left') {\n coords.cat.x = mg_get_plot_left(args) - args.buffer;\n coords.cat.y = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = 'end';\n coords.group.x = mg_get_plot_left(args) - args.buffer;\n coords.group.y = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 : 0);\n coords.group.dy = '.35em';\n coords.group.textAnchor = args['rotate_' + ns + '_labels'] ? 'end' : 'end';\n }\n\n if (position === 'right') {\n coords.cat.x = mg_get_plot_right(args) - args.buffer;\n coords.cat.y = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = 'start';\n coords.group.x = mg_get_plot_right(args) - args.buffer;\n coords.group.y = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 : 0);\n coords.group.dy = '.35em';\n coords.group.textAnchor = 'start';\n }\n\n if (position === 'top') {\n coords.cat.x = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.y = mg_get_plot_top(args) + args.buffer;\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n coords.group.x = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 : 0);\n coords.group.y = mg_get_plot_top(args) + args.buffer;\n coords.group.dy = '.35em';\n coords.group.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n }\n\n if (position === 'bottom') {\n coords.cat.x = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.y = mg_get_plot_bottom(args) + args.buffer;\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n coords.group.x = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 - scale.bandwidth() / 2 : 0);\n coords.group.y = mg_get_plot_bottom(args) + args.buffer;\n coords.group.dy = '.35em';\n coords.group.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n }\n\n return coords;\n}\n\nfunction categoricalLabels (args, axisArgs) {\n var ns = axisArgs.namespace;\n var nsClass = 'mg-' + ns + '-axis';\n var scale = args.scales[ns.toUpperCase()];\n var groupScale = args.scales[(ns + 'group').toUpperCase()];\n var groupAccessor = ns + 'group_accessor';\n\n var svg = mg_get_svg_child_of(args.target);\n mg_selectAll_and_remove(svg, '.' + nsClass);\n var g = mg_add_g(svg, nsClass);\n var group_g;\n var groups = groupScale.domain && groupScale.domain()\n ? groupScale.domain()\n : ['1'];\n\n groups.forEach(function (group) {\n // grab group placement stuff.\n var coords = categoricalLabelPlacement(args, axisArgs, group);\n\n group_g = mg_add_g(g, 'mg-group-' + mg_normalize(group));\n if (args[groupAccessor] !== null) {\n var labels = group_g.append('text')\n .classed('mg-barplot-group-label', true)\n .attr('x', coords.group.x)\n .attr('y', coords.group.y)\n .attr('dy', coords.group.dy)\n .attr('text-anchor', coords.group.textAnchor)\n .text(group);\n\n } else {\n var labels = group_g.selectAll('text')\n .data(scale.domain())\n .enter()\n .append('text')\n .attr('x', coords.cat.x)\n .attr('y', coords.cat.y)\n .attr('dy', coords.cat.dy)\n .attr('text-anchor', coords.cat.textAnchor)\n .text(String);\n }\n if (args['rotate_' + ns + '_labels']) {\n rotateLabels(labels, args['rotate_' + ns + '_labels']);\n }\n });\n}\n\nfunction categoricalGuides (args, axisArgs) {\n // for each group\n // for each data point\n\n var ns = axisArgs.namespace;\n var scalef = args.scalefns[ns + 'f'];\n var groupf = args.scalefns[ns + 'groupf'];\n var groupScale = args.scales[(ns + 'group').toUpperCase()];\n var scale = args.scales[ns.toUpperCase()];\n var position = axisArgs.position;\n\n var svg = mg_get_svg_child_of(args.target);\n var alreadyPlotted = [];\n\n var x1, x2, y1, y2;\n var grs = (groupScale.domain && groupScale.domain()) ? groupScale.domain() : [null];\n\n mg_selectAll_and_remove(svg, '.mg-category-guides');\n var g = mg_add_g(svg, 'mg-category-guides');\n\n grs.forEach(function (group) {\n scale.domain().forEach(function (cat) {\n if (position === 'left' || position === 'right') {\n x1 = mg_get_plot_left(args);\n x2 = mg_get_plot_right(args);\n y1 = scale(cat) + groupScale(group) + scale.bandwidth() / 2;\n y2 = scale(cat) + groupScale(group) + scale.bandwidth() / 2;\n }\n\n if (position === 'top' || position === 'bottom') {\n x1 = scale(cat) + groupScale(group) + scale.bandwidth() / 2 * (group === null);\n x2 = scale(cat) + groupScale(group) + scale.bandwidth() / 2 * (group === null);\n y1 = mg_get_plot_bottom(args);\n y2 = mg_get_plot_top(args);\n }\n\n g.append('line')\n .attr('x1', x1)\n .attr('x2', x2)\n .attr('y1', y1)\n .attr('y2', y2)\n .attr('stroke-dasharray', '2,1');\n });\n\n var first = groupScale(group) + scale(scale.domain()[0]) + scale.bandwidth() / 2 * (group === null || (position !== 'top' && position != 'bottom'));\n var last = groupScale(group) + scale(scale.domain()[scale.domain().length - 1]) + scale.bandwidth() / 2 * (group === null || (position !== 'top' && position != 'bottom'));\n\n if (position === 'left' || position === 'right') {\n x11 = mg_get_plot_left(args);\n x21 = mg_get_plot_left(args);\n y11 = first;\n y21 = last;\n\n x12 = mg_get_plot_right(args);\n x22 = mg_get_plot_right(args);\n y12 = first;\n y22 = last;\n }\n\n if (position === 'bottom' || position === 'top') {\n x11 = first;\n x21 = last;\n y11 = mg_get_plot_bottom(args);\n y21 = mg_get_plot_bottom(args);\n\n x12 = first;\n x22 = last;\n y12 = mg_get_plot_top(args);\n y22 = mg_get_plot_top(args);\n }\n\n g.append('line')\n .attr('x1', x11)\n .attr('x2', x21)\n .attr('y1', y11)\n .attr('y2', y21)\n .attr('stroke-dasharray', '2,1');\n\n g.append('line')\n .attr('x1', x12)\n .attr('x2', x22)\n .attr('y1', y12)\n .attr('y2', y22)\n .attr('stroke-dasharray', '2,1');\n });\n}\n\nfunction rotateLabels (labels, rotation_degree) {\n if (rotation_degree) {\n labels.attr('transform', function () {\n var elem = d3.select(this);\n return 'rotate(' + rotation_degree + ' ' + elem.attr('x') + ',' + elem.attr('y') + ')';\n });\n\n }\n}\n\nfunction zeroLine (args, axisArgs) {\n var svg = mg_get_svg_child_of(args.target);\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var scale = args.scales[ns.toUpperCase()];\n var x1, x2, y1, y2;\n if (position === 'left' || position === 'right') {\n x1 = mg_get_plot_left(args);\n x2 = mg_get_plot_right(args);\n y1 = scale(0) + 1;\n y2 = scale(0) + 1;\n }\n if (position === 'bottom' || position === 'top') {\n y1 = mg_get_plot_top(args);\n y2 = mg_get_plot_bottom(args);\n x1 = scale(0) - 1;\n x2 = scale(0) - 1;\n }\n\n svg.append('line')\n .attr('x1', x1)\n .attr('x2', x2)\n .attr('y1', y1)\n .attr('y2', y2)\n .attr('stroke', 'black');\n}\n\nvar mgDrawAxis = {};\n\nmgDrawAxis.categorical = function (args, axisArgs) {\n var ns = axisArgs.namespace;\n\n categoricalLabels(args, axisArgs);\n categoricalGuides(args, axisArgs);\n};\n\nmgDrawAxis.numerical = function (args, axisArgs) {\n var namespace = axisArgs.namespace;\n var axisName = namespace + '_axis';\n var axisClass = 'mg-' + namespace + '-axis';\n var svg = mg_get_svg_child_of(args.target);\n\n mg_selectAll_and_remove(svg, '.' + axisClass);\n\n if (!args[axisName]) {\n return this;\n }\n\n var g = mg_add_g(svg, axisClass);\n\n processScaleTicks(args, namespace);\n initializeAxisRim(g, args, axisArgs);\n addTickLines(g, args, axisArgs);\n addNumericalLabels(g, args, axisArgs);\n\n // add label\n if (args[namespace + '_label']) {\n axisArgs.label(svg.select('.mg-' + namespace + '-axis'), args);\n }\n\n // add rugs\n if (args[namespace + '_rug']) {\n rug(args, axisArgs);\n }\n\n if (args.show_bar_zero) {\n mg_bar_add_zero_line(args);\n }\n\n return this;\n};\n\nfunction axisFactory (args) {\n var axisArgs = {};\n axisArgs.type = 'numerical';\n\n this.namespace = function (ns) {\n // take the ns in the scale, and use it to\n axisArgs.namespace = ns;\n return this;\n };\n\n this.rug = function (tf) {\n axisArgs.rug = tf;\n return this;\n };\n\n this.label = function (tf) {\n axisArgs.label = tf;\n return this;\n };\n\n this.type = function (t) {\n axisArgs.type = t;\n return this;\n };\n\n this.position = function (pos) {\n axisArgs.position = pos;\n return this;\n };\n\n this.zeroLine = function (tf) {\n axisArgs.zeroLine = tf;\n return this;\n };\n\n this.draw = function () {\n mgDrawAxis[axisArgs.type](args, axisArgs);\n return this;\n };\n\n return this;\n\n}\n\nMG.axis_factory = axisFactory;\n\n/* ================================================================================ */\n/* ================================================================================ */\n/* ================================================================================ */\n\nfunction y_rug (args) {\n 'use strict';\n\n if (!args.y_rug) {\n return;\n }\n\n args.rug_buffer_size = args.chart_type === 'point'\n ? args.buffer / 2\n : args.buffer * 2 / 3;\n\n var rug = mg_make_rug(args, 'mg-y-rug');\n\n rug.attr('x1', args.left + 1)\n .attr('x2', args.left + args.rug_buffer_size)\n .attr('y1', args.scalefns.yf)\n .attr('y2', args.scalefns.yf);\n\n mg_add_color_accessor_to_rug(rug, args, 'mg-y-rug-mono');\n}\n\nMG.y_rug = y_rug;\n\nfunction mg_change_y_extents_for_bars (args, my) {\n if (args.chart_type === 'bar') {\n my.min = 0;\n my.max = d3.max(args.data[0], function (d) {\n var trio = [];\n trio.push(d[args.y_accessor]);\n\n if (args.baseline_accessor !== null) {\n trio.push(d[args.baseline_accessor]);\n }\n\n if (args.predictor_accessor !== null) {\n trio.push(d[args.predictor_accessor]);\n }\n\n return Math.max.apply(null, trio);\n });\n }\n return my;\n}\n\nfunction mg_compute_yax_format (args) {\n var yax_format = args.yax_format;\n if (!yax_format) {\n if (args.format === 'count') {\n // increase decimals if we have small values, useful for realtime data\n if (args.processed.max_y < 0.0001) {\n args.decimals = 6;\n } else if (args.processed.max_y < 0.1) {\n args.decimals = 4;\n }\n\n yax_format = function (d) {\n var pf;\n\n if (d < 1.0 && d > -1.0 && d !== 0) {\n // don't scale tiny values\n pf = d3.format(',.' + args.decimals + 'f');\n } else if (d < 1000) {\n pf = d3.format(',.0f');\n } else {\n pf = d3.format(',.2s');\n }\n\n // are we adding units after the value or before?\n if (args.yax_units_append) {\n return pf(d) + args.yax_units;\n } else {\n return args.yax_units + pf(d);\n }\n };\n } else { // percentage\n yax_format = function (d_) {\n var n = d3.format('.0%');\n return n(d_);\n };\n }\n }\n return yax_format;\n}\n\nfunction mg_bar_add_zero_line (args) {\n var svg = mg_get_svg_child_of(args.target);\n var extents = args.scales.X.domain();\n if (0 >= extents[0] && extents[1] >= 0) {\n var r = args.scales.Y.range();\n var g = args.categorical_groups.length\n ? args.scales.YGROUP(args.categorical_groups[args.categorical_groups.length - 1])\n : args.scales.YGROUP();\n\n svg.append('svg:line')\n .attr('x1', args.scales.X(0))\n .attr('x2', args.scales.X(0))\n .attr('y1', r[0] + mg_get_plot_top(args))\n .attr('y2', r[r.length - 1] + g)\n .attr('stroke', 'black')\n .attr('opacity', .2);\n }\n}\n\nfunction set_min_max_y (args) {\n // flatten data\n // remove weird data, if log.\n var data = mg_flatten_array(args.data);\n\n if (args.y_scale_type === 'log') {\n data = data.filter(function (d) {\n return d[args.y_accessor] > 0;\n });\n }\n\n if (args.baselines) {\n data = data.concat(args.baselines);\n }\n\n var extents = d3.extent(data, function (d) {\n return d[args.y_accessor];\n });\n\n var my = {};\n my.min = extents[0];\n my.max = extents[1];\n // the default case is for the y-axis to start at 0, unless we explicitly want it\n // to start at an arbitrary number or from the data's minimum value\n if (my.min >= 0 && !args.min_y && !args.min_y_from_data) {\n my.min = 0;\n }\n\n mg_change_y_extents_for_bars(args, my);\n my.min = (args.min_y !== null) ? args.min_y : my.min;\n\n my.max = (args.max_y !== null) ? args.max_y : (my.max < 0) ? my.max + (my.max - my.max * args.inflator) : my.max * args.inflator;\n\n if (args.y_scale_type !== 'log' && my.min < 0) {\n my.min = my.min - (my.min - my.min * args.inflator);\n }\n\n if (!args.min_y && args.min_y_from_data) {\n var buff = (my.max - my.min) * .01;\n my.min = extents[0] - buff;\n my.max = extents[1] + buff;\n }\n args.processed.min_y = my.min;\n args.processed.max_y = my.max;\n}\n\nfunction mg_y_domain_range (args, scale) {\n scale.domain([args.processed.min_y, args.processed.max_y])\n .range([mg_get_plot_bottom(args), args.top]);\n return scale;\n}\n\nfunction mg_define_y_scales (args) {\n var scale = (mg_is_function(args.y_scale_type))\n ? args.y_scale_type()\n : (args.y_scale_type === 'log')\n ? d3.scaleLog()\n : d3.scaleLinear();\n\n if (args.y_scale_type === 'log') {\n if (args.chart_type === 'histogram') {\n // log histogram plots should start just below 1\n // so that bins with single counts are visible\n args.processed.min_y = 0.2;\n } else {\n if (args.processed.min_y <= 0) {\n args.processed.min_y = 1;\n }\n }\n }\n args.scales.Y = mg_y_domain_range(args, scale);\n args.scales.Y.clamp(args.y_scale_type === 'log');\n\n // used for ticks and such, and designed to be paired with log or linear\n args.scales.Y_axis = mg_y_domain_range(args, d3.scaleLinear());\n}\n\nfunction mg_add_y_label (g, args) {\n if (args.y_label) {\n g.append('text')\n .attr('class', 'label')\n .attr('x', function () {\n return -1 * (mg_get_plot_top(args) +\n ((mg_get_plot_bottom(args)) - (mg_get_plot_top(args))) / 2);\n })\n .attr('y', function () {\n return args.left / 2;\n })\n .attr('dy', '0.4em')\n .attr('text-anchor', 'middle')\n .text(function (d) {\n return args.y_label;\n })\n .attr('transform', function (d) {\n return 'rotate(-90)';\n });\n }\n}\n\nfunction mg_add_y_axis_rim (g, args) {\n var tick_length = args.processed.y_ticks.length;\n if (!args.x_extended_ticks && !args.y_extended_ticks && tick_length) {\n var y1scale, y2scale;\n\n if (args.axes_not_compact && args.chart_type !== 'bar') {\n y1scale = args.height - args.bottom;\n y2scale = args.top;\n } else if (tick_length) {\n y1scale = args.scales.Y(args.processed.y_ticks[0]).toFixed(2);\n y2scale = args.scales.Y(args.processed.y_ticks[tick_length - 1]).toFixed(2);\n } else {\n y1scale = 0;\n y2scale = 0;\n }\n\n g.append('line')\n .attr('x1', args.left)\n .attr('x2', args.left)\n .attr('y1', y1scale)\n .attr('y2', y2scale);\n }\n}\n\nfunction mg_add_y_axis_tick_lines (g, args) {\n g.selectAll('.mg-yax-ticks')\n .data(args.processed.y_ticks).enter()\n .append('line')\n .classed('mg-extended-yax-ticks', args.y_extended_ticks)\n .attr('x1', args.left)\n .attr('x2', function () {\n return (args.y_extended_ticks) ? args.width - args.right : args.left - args.yax_tick_length;\n })\n .attr('y1', function (d) {\n return args.scales.Y(d).toFixed(2);\n })\n .attr('y2', function (d) {\n return args.scales.Y(d).toFixed(2);\n });\n}\n\nfunction mg_add_y_axis_tick_labels (g, args) {\n var yax_format = mg_compute_yax_format(args);\n g.selectAll('.mg-yax-labels')\n .data(args.processed.y_ticks).enter()\n .append('text')\n .attr('x', args.left - args.yax_tick_length * 3 / 2)\n .attr('dx', -3)\n .attr('y', function (d) {\n return args.scales.Y(d).toFixed(2);\n })\n .attr('dy', '.35em')\n .attr('text-anchor', 'end')\n .text(function (d) {\n var o = yax_format(d);\n return o;\n });\n}\n\n// TODO ought to be deprecated, only used by histogram\nfunction y_axis (args) {\n if (!args.processed) {\n args.processed = {};\n }\n\n var svg = mg_get_svg_child_of(args.target);\n MG.call_hook('y_axis.process_min_max', args, args.processed.min_y, args.processed.max_y);\n mg_selectAll_and_remove(svg, '.mg-y-axis');\n\n if (!args.y_axis) {\n return this;\n }\n\n var g = mg_add_g(svg, 'mg-y-axis');\n mg_add_y_label(g, args);\n mg_process_scale_ticks(args, 'y');\n mg_add_y_axis_rim(g, args);\n mg_add_y_axis_tick_lines(g, args);\n mg_add_y_axis_tick_labels(g, args);\n\n if (args.y_rug) {\n y_rug(args);\n }\n\n return this;\n}\n\nMG.y_axis = y_axis;\n\nfunction mg_add_categorical_labels (args) {\n var svg = mg_get_svg_child_of(args.target);\n mg_selectAll_and_remove(svg, '.mg-y-axis');\n var g = mg_add_g(svg, 'mg-y-axis');\n var group_g;(args.categorical_groups.length ? args.categorical_groups : ['1']).forEach(function (group) {\n group_g = mg_add_g(g, 'mg-group-' + mg_normalize(group));\n\n if (args.ygroup_accessor !== null) {\n mg_add_group_label(group_g, group, args);\n } else {\n var labels = mg_add_graphic_labels(group_g, group, args);\n mg_rotate_labels(labels, args.rotate_y_labels);\n }\n });\n}\n\nfunction mg_add_graphic_labels (g, group, args) {\n return g.selectAll('text').data(args.scales.Y.domain()).enter().append('svg:text')\n .attr('x', args.left - args.buffer)\n .attr('y', function (d) {\n return args.scales.YGROUP(group) + args.scales.Y(d) + args.scales.Y.bandwidth() / 2;\n })\n .attr('dy', '.35em')\n .attr('text-anchor', 'end')\n .text(String);\n}\n\nfunction mg_add_group_label (g, group, args) {\n g.append('svg:text')\n .classed('mg-barplot-group-label', true)\n .attr('x', args.left - args.buffer)\n .attr('y', args.scales.YGROUP(group) + args.scales.YGROUP.bandwidth() / 2)\n .attr('dy', '.35em')\n .attr('text-anchor', 'end')\n .text(group);\n}\n\nfunction mg_draw_group_lines (args) {\n var svg = mg_get_svg_child_of(args.target);\n var groups = args.scales.YGROUP.domain();\n var first = groups[0];\n var last = groups[groups.length - 1];\n\n svg.select('.mg-category-guides').selectAll('mg-group-lines')\n .data(groups)\n .enter().append('line')\n .attr('x1', mg_get_plot_left(args))\n .attr('x2', mg_get_plot_left(args))\n .attr('y1', function (d) {\n return args.scales.YGROUP(d);\n })\n .attr('y2', function (d) {\n return args.scales.YGROUP(d) + args.ygroup_height;\n })\n .attr('stroke-width', 1);\n}\n\nfunction mg_y_categorical_show_guides (args) {\n // for each group\n // for each data point\n var svg = mg_get_svg_child_of(args.target);\n var alreadyPlotted = [];\n args.data[0].forEach(function (d) {\n if (alreadyPlotted.indexOf(d[args.y_accessor]) === -1) {\n svg.select('.mg-category-guides').append('line')\n .attr('x1', mg_get_plot_left(args))\n .attr('x2', mg_get_plot_right(args))\n .attr('y1', args.scalefns.yf(d) + args.scalefns.ygroupf(d))\n .attr('y2', args.scalefns.yf(d) + args.scalefns.ygroupf(d))\n .attr('stroke-dasharray', '2,1');\n }\n });\n}\n\nfunction y_axis_categorical (args) {\n if (!args.y_axis) {\n return this;\n }\n\n mg_add_categorical_labels(args);\n // mg_draw_group_scaffold(args);\n if (args.show_bar_zero) mg_bar_add_zero_line(args);\n if (args.ygroup_accessor) mg_draw_group_lines(args);\n if (args.y_categorical_show_guides) mg_y_categorical_show_guides(args);\n return this;\n}\n\nMG.y_axis_categorical = y_axis_categorical;\n\nfunction x_rug(args) {\n 'use strict';\n\n if(!args.x_rug) {\n return;\n }\n\n args.rug_buffer_size = args.chart_type === 'point'\n ? args.buffer / 2\n : args.buffer;\n\n var rug = mg_make_rug(args, 'mg-x-rug');\n\n rug.attr('x1', args.scalefns.xf)\n .attr('x2', args.scalefns.xf)\n .attr('y1', args.height - args.bottom - args.rug_buffer_size)\n .attr('y2', args.height - args.bottom);\n\n mg_add_color_accessor_to_rug(rug, args, 'mg-x-rug-mono');\n}\n\nMG.x_rug = x_rug;\n\nfunction mg_add_processed_object(args) {\n if (!args.processed) {\n args.processed = {};\n }\n}\n\n// TODO ought to be deprecated, only used by histogram\nfunction x_axis(args) {\n 'use strict';\n\n var svg = mg_get_svg_child_of(args.target);\n mg_add_processed_object(args);\n\n mg_select_xax_format(args);\n mg_selectAll_and_remove(svg, '.mg-x-axis');\n\n if (!args.x_axis) {\n return this;\n }\n\n var g = mg_add_g(svg, 'mg-x-axis');\n\n mg_add_x_ticks(g, args);\n mg_add_x_tick_labels(g, args);\n if (args.x_label) { mg_add_x_label(g, args); }\n if (args.x_rug) { x_rug(args); }\n\n return this;\n}\n\nMG.x_axis = x_axis;\n\nfunction x_axis_categorical(args) {\n var svg = mg_get_svg_child_of(args.target);\n var additional_buffer = 0;\n if (args.chart_type === 'bar') {\n additional_buffer = args.buffer + 5;\n }\n\n mg_add_categorical_scale(args, 'X', args.categorical_variables.reverse(), args.left, mg_get_plot_right(args) - additional_buffer);\n mg_add_scale_function(args, 'xf', 'X', 'value');\n mg_selectAll_and_remove(svg, '.mg-x-axis');\n\n var g = mg_add_g(svg, 'mg-x-axis');\n\n if (!args.x_axis) {\n return this;\n }\n\n mg_add_x_axis_categorical_labels(g, args, additional_buffer);\n return this;\n}\n\nfunction mg_add_x_axis_categorical_labels(g, args, additional_buffer) {\n var labels = g.selectAll('text')\n .data(args.categorical_variables)\n .enter()\n .append('text');\n\n labels\n .attr('x', function(d) {\n return args.scales.X(d) + args.scales.X.bandwidth() / 2 + (args.buffer) * args.bar_outer_padding_percentage + (additional_buffer / 2);\n })\n .attr('y', mg_get_plot_bottom(args))\n .attr('dy', '.35em')\n .attr('text-anchor', 'middle')\n .text(String);\n\n if (args.truncate_x_labels) {\n labels.each(function(d, idx) {\n var elem = this, width = args.scales.X.bandwidth();\n truncate_text(elem, d, width);\n });\n }\n mg_rotate_labels(labels, args.rotate_x_labels);\n}\n\nMG.x_axis_categorical = x_axis_categorical;\n\nfunction mg_point_add_color_scale(args) {\n var color_domain, color_range;\n\n if (args.color_accessor !== null) {\n color_domain = mg_get_color_domain(args);\n color_range = mg_get_color_range(args);\n\n if (args.color_type === 'number') {\n args.scales.color = d3.scaleLinear()\n .domain(color_domain)\n .range(color_range)\n .clamp(true);\n } else {\n args.scales.color = args.color_range !== null\n ? d3.scaleOrdinal().range(color_range)\n : (color_domain.length > 10\n ? d3.scaleOrdinal(d3.schemeCategory20)\n : d3.scaleOrdinal(d3.schemeCategory10));\n\n args.scales.color.domain(color_domain);\n }\n mg_add_scale_function(args, 'color', 'color', args.color_accessor);\n }\n}\n\nfunction mg_get_color_domain(args) {\n var color_domain;\n if (args.color_domain === null) {\n if (args.color_type === 'number') {\n color_domain = d3.extent(args.data[0], function(d) {\n return d[args.color_accessor];\n });\n } else if (args.color_type === 'category') {\n color_domain = d3.set(args.data[0]\n .map(function(d) {\n return d[args.color_accessor];\n }))\n .values();\n\n color_domain.sort();\n }\n } else {\n color_domain = args.color_domain;\n }\n return color_domain;\n}\n\nfunction mg_get_color_range(args) {\n var color_range;\n if (args.color_range === null) {\n if (args.color_type === 'number') {\n color_range = ['blue', 'red'];\n } else {\n color_range = null;\n }\n } else {\n color_range = args.color_range;\n }\n return color_range;\n}\n\nfunction mg_point_add_size_scale(args) {\n var min_size, max_size, size_domain, size_range;\n if (args.size_accessor !== null) {\n size_domain = mg_get_size_domain(args);\n size_range = mg_get_size_range(args);\n\n args.scales.size = d3.scaleLinear()\n .domain(size_domain)\n .range(size_range)\n .clamp(true);\n\n mg_add_scale_function(args, 'size', 'size', args.size_accessor);\n }\n}\n\nfunction mg_get_size_domain(args) {\n return (args.size_domain === null)\n ? d3.extent(args.data[0], function(d) { return d[args.size_accessor]; })\n : args.size_domain;\n}\n\nfunction mg_get_size_range(args) {\n var size_range;\n if (args.size_range === null) {\n size_range = [1, 5];\n } else {\n size_range = args.size_range;\n }\n return size_range;\n}\n\nfunction mg_add_x_label(g, args) {\n if (args.x_label) {\n g.append('text')\n .attr('class', 'label')\n .attr('x', function() {\n return mg_get_plot_left(args) + (mg_get_plot_right(args) - mg_get_plot_left(args)) / 2;\n })\n .attr('dx', args.x_label_nudge_x != null ? args.x_label_nudge_x : 0)\n .attr('y', function() {\n var xAxisTextElement = d3.select(args.target)\n .select('.mg-x-axis text').node().getBoundingClientRect();\n return mg_get_bottom(args) + args.xax_tick_length * (7 / 3) + xAxisTextElement.height * 0.8 + 10;\n })\n .attr('dy', '.5em')\n .attr('text-anchor', 'middle')\n .text(function(d) {\n return args.x_label;\n });\n }\n}\n\nfunction mg_default_bar_xax_format(args) {\n return function(d) {\n if (d < 1.0 && d > -1.0 && d !== 0) {\n // don't scale tiny values\n return args.xax_units + d.toFixed(args.decimals);\n } else {\n var pf = d3.format(',.0f');\n return args.xax_units + pf(d);\n }\n };\n}\n\nfunction mg_get_time_frame(diff) {\n // diff should be (max_x - min_x) / 1000, in other words, the difference in seconds.\n var time_frame;\n if (mg_milisec_diff(diff)) {\n time_frame = 'millis';\n } else if (mg_sec_diff(diff)) {\n time_frame = 'seconds';\n } else if (mg_day_diff(diff)) {\n time_frame = 'less-than-a-day';\n } else if (mg_four_days(diff)) {\n time_frame = 'four-days';\n } else if (mg_many_days(diff)) { // a handful of months?\n time_frame = 'many-days';\n } else if (mg_many_months(diff)) {\n time_frame = 'many-months';\n } else if (mg_years(diff)) {\n time_frame = 'years';\n } else {\n time_frame = 'default';\n }\n return time_frame;\n}\n\nfunction mg_milisec_diff(diff) {\n return diff < 10;\n}\n\nfunction mg_sec_diff(diff) {\n return diff < 60;\n}\n\nfunction mg_day_diff(diff) {\n return diff / (60 * 60) <= 24;\n}\n\nfunction mg_four_days(diff) {\n return diff / (60 * 60) <= 24 * 4;\n}\n\nfunction mg_many_days(diff) {\n return diff / (60 * 60 * 24) <= 93;\n}\n\nfunction mg_many_months(diff) {\n return diff / (60 * 60 * 24) < 365 * 2;\n}\n\nfunction mg_years(diff) {\n return diff / (60 * 60 * 24) >= 365 * 2;\n}\n\nfunction mg_get_time_format(utc, diff) {\n var main_time_format;\n if (mg_milisec_diff(diff)) {\n main_time_format = MG.time_format(utc, '%M:%S.%L');\n } else if (mg_sec_diff(diff)) {\n main_time_format = MG.time_format(utc, '%M:%S');\n } else if (mg_day_diff(diff)) {\n main_time_format = MG.time_format(utc, '%H:%M');\n } else if (mg_four_days(diff)) {\n main_time_format = MG.time_format(utc, '%H:%M');\n } else if (mg_many_days(diff)) {\n main_time_format = MG.time_format(utc, '%b %d');\n } else if (mg_many_months(diff)) {\n main_time_format = MG.time_format(utc, '%b');\n } else {\n main_time_format = MG.time_format(utc, '%Y');\n }\n return main_time_format;\n}\n\nfunction mg_process_time_format(args) {\n var diff;\n var main_time_format;\n var time_frame;\n\n if (args.time_series) {\n diff = (args.processed.max_x - args.processed.min_x) / 1000;\n time_frame = mg_get_time_frame(diff);\n main_time_format = mg_get_time_format(args.utc_time, diff);\n }\n\n args.processed.main_x_time_format = main_time_format;\n args.processed.x_time_frame = time_frame;\n}\n\nfunction mg_default_xax_format(args) {\n if (args.xax_format) {\n return args.xax_format;\n }\n\n var data = args.processed.original_data || args.data;\n var flattened = mg_flatten_array(data)[0];\n var test_point_x = flattened[args.processed.original_x_accessor || args.x_accessor];\n if (test_point_x === undefined) {\n test_point_x = flattened;\n }\n\n return function(d) {\n mg_process_time_format(args);\n\n if (mg_is_date(test_point_x)) {\n return args.processed.main_x_time_format(new Date(d));\n } else if (typeof test_point_x === 'number') {\n var is_float = d % 1 !== 0;\n var pf;\n\n if (is_float) {\n pf = d3.format(',.' + args.decimals + 'f');\n } else if (d < 1000) {\n pf = d3.format(',.0f');\n } else {\n pf = d3.format(',.2s');\n }\n return args.xax_units + pf(d);\n } else {\n return args.xax_units + d;\n }\n };\n}\n\nfunction mg_add_x_ticks(g, args) {\n mg_process_scale_ticks(args, 'x');\n mg_add_x_axis_rim(args, g);\n mg_add_x_axis_tick_lines(args, g);\n}\n\nfunction mg_add_x_axis_rim(args, g) {\n var tick_length = args.processed.x_ticks.length;\n var last_i = args.scales.X.ticks(args.xax_count).length - 1;\n\n if (!args.x_extended_ticks) {\n g.append('line')\n .attr('x1', function() {\n if (args.xax_count === 0) {\n return mg_get_plot_left(args);\n } else if (args.axes_not_compact && args.chart_type !== 'bar') {\n return args.left;\n } else {\n return (args.scales.X(args.scales.X.ticks(args.xax_count)[0])).toFixed(2);\n }\n })\n .attr('x2', function() {\n if (args.xax_count === 0 || (args.axes_not_compact && args.chart_type !== 'bar')) {\n return mg_get_right(args);\n } else {\n return args.scales.X(args.scales.X.ticks(args.xax_count)[last_i]).toFixed(2);\n }\n })\n .attr('y1', args.height - args.bottom)\n .attr('y2', args.height - args.bottom);\n }\n}\n\nfunction mg_add_x_axis_tick_lines(args, g) {\n g.selectAll('.mg-xax-ticks')\n .data(args.processed.x_ticks).enter()\n .append('line')\n .attr('x1', function(d) {\n return args.scales.X(d).toFixed(2); })\n .attr('x2', function(d) {\n return args.scales.X(d).toFixed(2); })\n .attr('y1', args.height - args.bottom)\n .attr('y2', function() {\n return (args.x_extended_ticks) ? args.top : args.height - args.bottom + args.xax_tick_length;\n })\n .attr('class', function() {\n if (args.x_extended_ticks) {\n return 'mg-extended-xax-ticks';\n }\n })\n .classed('mg-xax-ticks', true);\n}\n\nfunction mg_add_x_tick_labels(g, args) {\n mg_add_primary_x_axis_label(args, g);\n mg_add_secondary_x_axis_label(args, g);\n}\n\nfunction mg_add_primary_x_axis_label(args, g) {\n var labels = g.selectAll('.mg-xax-labels')\n .data(args.processed.x_ticks).enter()\n .append('text')\n .attr('x', function(d) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('y', (args.height - args.bottom + args.xax_tick_length * 7 / 3).toFixed(2))\n .attr('dy', '.50em')\n .attr('text-anchor', 'middle');\n\n if (args.time_series && args.european_clock) {\n labels.append('tspan').classed('mg-european-hours', true).text(function(_d, i) {\n var d = new Date(_d);\n if (i === 0) return d3.timeFormat('%H')(d);\n else return '';\n });\n labels.append('tspan').classed('mg-european-minutes-seconds', true).text(function(_d, i) {\n var d = new Date(_d);\n return ':' + args.processed.xax_format(d);\n });\n } else {\n labels.text(function(d) {\n return args.xax_units + args.processed.xax_format(d);\n });\n }\n\n // CHECK TO SEE IF OVERLAP for labels. If so,\n // remove half of them. This is a dirty hack.\n // We will need to figure out a more principled way of doing this.\n if (mg_elements_are_overlapping(labels)) {\n labels.filter(function(d, i) {\n return (i + 1) % 2 === 0;\n }).remove();\n\n var svg = mg_get_svg_child_of(args.target);\n svg.selectAll('.mg-xax-ticks')\n .filter(function(d, i) {\n return (i + 1) % 2 === 0;\n })\n .remove();\n }\n}\n\nfunction mg_add_secondary_x_axis_label(args, g) {\n if (args.time_series && (args.show_years || args.show_secondary_x_label)) {\n var tf = mg_get_yformat_and_secondary_time_function(args);\n mg_add_secondary_x_axis_elements(args, g, tf.timeframe, tf.yformat, tf.secondary);\n }\n}\n\nfunction mg_get_yformat_and_secondary_time_function(args) {\n var tf = {};\n tf.timeframe = args.processed.x_time_frame;\n switch (tf.timeframe) {\n case 'millis':\n case 'seconds':\n tf.secondary = d3.timeDays;\n if (args.european_clock) tf.yformat = MG.time_format(args.utc_time, '%b %d');\n else tf.yformat = MG.time_format(args.utc_time, '%I %p');\n break;\n case 'less-than-a-day':\n tf.secondary = d3.timeDays;\n tf.yformat = MG.time_format(args.utc_time, '%b %d');\n break;\n case 'four-days':\n tf.secondary = d3.timeDays;\n tf.yformat = MG.time_format(args.utc_time, '%b %d');\n break;\n case 'many-days':\n tf.secondary = d3.timeYears;\n tf.yformat = MG.time_format(args.utc_time, '%Y');\n break;\n case 'many-months':\n tf.secondary = d3.timeYears;\n tf.yformat = MG.time_format(args.utc_time, '%Y');\n break;\n default:\n tf.secondary = d3.timeYears;\n tf.yformat = MG.time_format(args.utc_time, '%Y');\n }\n return tf;\n}\n\nfunction mg_add_secondary_x_axis_elements(args, g, time_frame, yformat, secondary_function) {\n var years = secondary_function(args.processed.min_x, args.processed.max_x);\n if (years.length === 0) {\n var first_tick = args.scales.X.ticks(args.xax_count)[0];\n years = [first_tick];\n }\n\n var yg = mg_add_g(g, 'mg-year-marker');\n if (time_frame === 'default' && args.show_year_markers) {\n mg_add_year_marker_line(args, yg, years, yformat);\n }\n if (time_frame != 'years') mg_add_year_marker_text(args, yg, years, yformat);\n}\n\nfunction mg_add_year_marker_line(args, g, years, yformat) {\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('line')\n .attr('x1', function(d) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('x2', function(d) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('y1', mg_get_top(args))\n .attr('y2', mg_get_bottom(args));\n}\n\nfunction mg_add_year_marker_text(args, g, years, yformat) {\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('text')\n .attr('x', function(d, i) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('y', function() {\n var xAxisTextElement = d3.select(args.target)\n .select('.mg-x-axis text').node().getBoundingClientRect();\n return (mg_get_bottom(args) + args.xax_tick_length * 7 / 3) + (xAxisTextElement.height * 0.8);\n })\n .attr('dy', '.50em')\n .attr('text-anchor', 'middle')\n .text(function(d) {\n return yformat(new Date(d));\n });\n}\n\nfunction mg_min_max_x_for_nonbars(mx, args, data) {\n var extent_x = d3.extent(data, function(d) {\n return d[args.x_accessor];\n });\n mx.min = extent_x[0];\n mx.max = extent_x[1];\n}\n\nfunction mg_min_max_x_for_bars(mx, args, data) {\n mx.min = d3.min(data, function(d) {\n var trio = [\n d[args.x_accessor],\n (d[args.baseline_accessor]) ? d[args.baseline_accessor] : 0,\n (d[args.predictor_accessor]) ? d[args.predictor_accessor] : 0\n ];\n return Math.min.apply(null, trio);\n });\n\n if (mx.min > 0) mx.min = 0;\n\n mx.max = d3.max(data, function(d) {\n var trio = [\n d[args.x_accessor],\n (d[args.baseline_accessor]) ? d[args.baseline_accessor] : 0,\n (d[args.predictor_accessor]) ? d[args.predictor_accessor] : 0\n ];\n return Math.max.apply(null, trio);\n });\n return mx;\n}\n\nfunction mg_min_max_x_for_dates(mx) {\n var yesterday = MG.clone(mx.min).setDate(mx.min.getDate() - 1);\n var tomorrow = MG.clone(mx.min).setDate(mx.min.getDate() + 1);\n mx.min = yesterday;\n mx.max = tomorrow;\n}\n\nfunction mg_min_max_x_for_numbers(mx) {\n // TODO do we want to rewrite this?\n mx.min = mx.min - 1;\n mx.max = mx.max + 1;\n}\n\nfunction mg_min_max_x_for_strings(mx) {\n // TODO shouldn't be allowing strings here to be coerced into numbers\n mx.min = Number(mx.min) - 1;\n mx.max = Number(mx.max) + 1;\n}\n\nfunction mg_force_xax_count_to_be_two(args) {\n args.xax_count = 2;\n}\n\nfunction mg_sort_through_data_type_and_set_x_min_max_accordingly(mx, args, data) {\n if (args.chart_type === 'line' || args.chart_type === 'point' || args.chart_type === 'histogram') {\n mg_min_max_x_for_nonbars(mx, args, data);\n\n } else if (args.chart_type === 'bar') {\n mg_min_max_x_for_bars(mx, args, data);\n }\n // if data set is of length 1, expand the range so that we can build the x-axis\n if (mx.min === mx.max && !(args.min_x && args.max_x)) {\n if (mg_is_date(mx.min)) {\n mg_min_max_x_for_dates(mx);\n } else if (typeof min_x === 'number') {\n mg_min_max_x_for_numbers(mx);\n } else if (typeof min_x === 'string') {\n mg_min_max_x_for_strings(mx);\n }\n // force xax_count to be 2\n mg_force_xax_count_to_be_two(args);\n }\n}\n\nfunction mg_select_xax_format(args) {\n var c = args.chart_type;\n if (!args.processed.xax_format) {\n if (args.xax_format) {\n args.processed.xax_format = args.xax_format;\n } else {\n if (c === 'line' || c === 'point' || c === 'histogram') {\n args.processed.xax_format = mg_default_xax_format(args);\n } else if (c === 'bar') {\n args.processed.xax_format = mg_default_bar_xax_format(args);\n }\n }\n }\n}\n\nfunction mg_merge_args_with_defaults(args) {\n var defaults = {\n target: null,\n title: null,\n description: null\n };\n\n if (!args) {\n args = {};\n }\n\n if (!args.processed) {\n args.processed = {};\n }\n\n args = merge_with_defaults(args, defaults);\n return args;\n}\n\nfunction mg_is_time_series(args) {\n var first_elem = mg_flatten_array(args.processed.original_data || args.data)[0];\n args.time_series = mg_is_date(first_elem[args.processed.original_x_accessor || args.x_accessor]);\n}\n\nfunction mg_init_compute_width(args) {\n var svg_width = args.width;\n if (args.full_width) {\n svg_width = get_width(args.target);\n }\n if (args.x_axis_type === 'categorical' && svg_width === null) {\n svg_width = mg_categorical_calculate_height(args, 'x');\n }\n\n args.width = svg_width;\n}\n\nfunction mg_init_compute_height(args) {\n var svg_height = args.height;\n if (args.full_height) {\n svg_height = get_height(args.target);\n }\n if (args.y_axis_type === 'categorical' && svg_height === null) {\n svg_height = mg_categorical_calculate_height(args, 'y');\n }\n\n args.height = svg_height;\n}\n\nfunction mg_remove_svg_if_chart_type_has_changed(svg, args) {\n if ((!svg.selectAll('.mg-main-line').empty() && args.chart_type !== 'line') ||\n (!svg.selectAll('.mg-points').empty() && args.chart_type !== 'point') ||\n (!svg.selectAll('.mg-histogram').empty() && args.chart_type !== 'histogram') ||\n (!svg.selectAll('.mg-barplot').empty() && args.chart_type !== 'bar')\n ) {\n svg.remove();\n }\n}\n\nfunction mg_add_svg_if_it_doesnt_exist(svg, args) {\n if (mg_get_svg_child_of(args.target).empty()) {\n svg = d3.select(args.target)\n .append('svg')\n .classed('linked', args.linked)\n .attr('width', args.width)\n .attr('height', args.height);\n }\n return svg;\n}\n\nfunction mg_add_clip_path_for_plot_area(svg, args) {\n svg.selectAll('.mg-clip-path').remove();\n svg.append('defs')\n .attr('class', 'mg-clip-path')\n .append('clipPath')\n .attr('id', 'mg-plot-window-' + mg_target_ref(args.target))\n .append('svg:rect')\n .attr('x', mg_get_left(args))\n .attr('y', mg_get_top(args))\n .attr('width', args.width - args.left - args.right - args.buffer)\n .attr('height', args.height - args.top - args.bottom - args.buffer + 1);\n}\n\nfunction mg_adjust_width_and_height_if_changed(svg, args) {\n if (args.width !== Number(svg.attr('width'))) {\n svg.attr('width', args.width);\n }\n if (args.height !== Number(svg.attr('height'))) {\n svg.attr('height', args.height);\n }\n}\n\nfunction mg_set_viewbox_for_scaling(svg, args) {\n // we need to reconsider how we handle automatic scaling\n svg.attr('viewBox', '0 0 ' + args.width + ' ' + args.height);\n if (args.full_width || args.full_height) {\n svg.attr('preserveAspectRatio', 'xMinYMin meet');\n }\n}\n\nfunction mg_remove_missing_classes_and_text(svg) {\n // remove missing class\n svg.classed('mg-missing', false);\n\n // remove missing text\n svg.selectAll('.mg-missing-text').remove();\n svg.selectAll('.mg-missing-pane').remove();\n}\n\nfunction mg_remove_outdated_lines(svg, args) {\n // if we're updating an existing chart and we have fewer lines than\n // before, remove the outdated lines, e.g. if we had 3 lines, and we're calling\n // data_graphic() on the same target with 2 lines, remove the 3rd line\n\n var i = 0;\n\n if (svg.selectAll('.mg-main-line').nodes().length >= args.data.length) {\n // now, the thing is we can't just remove, say, line3 if we have a custom\n // line-color map, instead, see which are the lines to be removed, and delete those\n if (args.custom_line_color_map.length > 0) {\n var array_full_series = function(len) {\n var arr = new Array(len);\n for (var i = 0; i < arr.length; i++) { arr[i] = i + 1; }\n return arr;\n };\n\n // get an array of lines ids to remove\n var lines_to_remove = arr_diff(\n array_full_series(args.max_data_size),\n args.custom_line_color_map);\n\n for (i = 0; i < lines_to_remove.length; i++) {\n svg.selectAll('.mg-main-line.mg-line' + lines_to_remove[i] + '-color')\n .remove();\n }\n } else {\n // if we don't have a custom line-color map, just remove the lines from the end\n var num_of_new = args.data.length;\n var num_of_existing = (svg.selectAll('.mg-main-line').nodes()) ? svg.selectAll('.mg-main-line').nodes().length : 0;\n\n for (i = num_of_existing; i > num_of_new; i--) {\n svg.selectAll('.mg-main-line.mg-line' + i + '-color')\n .remove();\n }\n }\n }\n}\n\nfunction mg_raise_container_error(container, args) {\n if (container.empty()) {\n console.warn('The specified target element \"' + args.target + '\" could not be found in the page. The chart will not be rendered.');\n return;\n }\n}\n\nfunction categoricalInitialization(args, ns) {\n var which = ns === 'x' ? args.width : args.height;\n mg_categorical_count_number_of_groups(args, ns);\n mg_categorical_count_number_of_lanes(args, ns);\n mg_categorical_calculate_group_length(args, ns, which);\n if (which) mg_categorical_calculate_bar_thickness(args, ns);\n}\n\n\nfunction mg_categorical_count_number_of_groups(args, ns) {\n var accessor_string = ns + 'group_accessor';\n var accessor = args[accessor_string];\n args.categorical_groups = [];\n if (accessor) {\n var data = args.data[0];\n args.categorical_groups = d3.set(data.map(function(d) {\n return d[accessor] })).values();\n }\n}\n\nfunction mg_categorical_count_number_of_lanes(args, ns) {\n var accessor_string = ns + 'group_accessor';\n var groupAccessor = args[accessor_string];\n\n args.total_bars = args.data[0].length;\n if (groupAccessor) {\n var group_bars = count_array_elements(pluck(args.data[0], groupAccessor));\n group_bars = d3.max(Object.keys(group_bars).map(function(d) {\n return group_bars[d] }));\n args.bars_per_group = group_bars;\n } else {\n args.bars_per_group = args.data[0].length;\n }\n}\n\nfunction mg_categorical_calculate_group_length(args, ns, which) {\n var groupHeight = ns + 'group_height';\n if (which) {\n var gh = ns === 'y' ?\n (args.height - args.top - args.bottom - args.buffer * 2) / (args.categorical_groups.length || 1) :\n (args.width - args.left - args.right - args.buffer * 2) / (args.categorical_groups.length || 1);\n\n args[groupHeight] = gh;\n } else {\n var step = (1 + args[ns + '_padding_percentage']) * args.bar_thickness;\n args[groupHeight] = args.bars_per_group * step + args[ns + '_outer_padding_percentage'] * 2 * step; //args.bar_thickness + (((args.bars_per_group-1) * args.bar_thickness) * (args.bar_padding_percentage + args.bar_outer_padding_percentage*2));\n }\n}\n\nfunction mg_categorical_calculate_bar_thickness(args, ns) {\n // take one group height.\n var step = (args[ns + 'group_height']) / (args.bars_per_group + args[ns + '_outer_padding_percentage']);\n args.bar_thickness = step - (step * args[ns + '_padding_percentage']);\n}\n\nfunction mg_categorical_calculate_height(args, ns) {\n var groupContribution = (args[ns + 'group_height']) * (args.categorical_groups.length || 1);\n\n var marginContribution = ns === 'y'\n ? args.top + args.bottom + args.buffer * 2\n : args.left + args.right + args.buffer * 2;\n\n return groupContribution + marginContribution +\n (args.categorical_groups.length * args[ns + 'group_height'] * (args[ns + 'group_padding_percentage'] + args[ns + 'group_outer_padding_percentage']));\n}\n\nfunction mg_barchart_extrapolate_group_and_thickness_from_height(args) {\n // we need to set args.bar_thickness, group_height\n}\n\nfunction init(args) {\n 'use strict';\n args = arguments[0];\n args = mg_merge_args_with_defaults(args);\n // If you pass in a dom element for args.target, the expectation\n // of a string elsewhere will break.\n var container = d3.select(args.target);\n mg_raise_container_error(container, args);\n\n var svg = container.selectAll('svg');\n\n // some things that will need to be calculated if we have a categorical axis.\n if (args.y_axis_type === 'categorical') { categoricalInitialization(args, 'y'); }\n if (args.x_axis_type === 'categorical') { categoricalInitialization(args, 'x'); }\n\n mg_is_time_series(args);\n mg_init_compute_width(args);\n mg_init_compute_height(args);\n\n mg_remove_svg_if_chart_type_has_changed(svg, args);\n svg = mg_add_svg_if_it_doesnt_exist(svg, args);\n\n mg_add_clip_path_for_plot_area(svg, args);\n mg_adjust_width_and_height_if_changed(svg, args);\n mg_set_viewbox_for_scaling(svg, args);\n mg_remove_missing_classes_and_text(svg);\n chart_title(args);\n mg_remove_outdated_lines(svg, args);\n\n return this;\n}\n\nMG.init = init;\n\nfunction mg_return_label(d) {\n return d.label;\n}\n\nfunction mg_remove_existing_markers(svg) {\n svg.selectAll('.mg-markers').remove();\n svg.selectAll('.mg-baselines').remove();\n}\n\nfunction mg_in_range(args) {\n return function(d) {\n return (args.scales.X(d[args.x_accessor]) >= mg_get_plot_left(args)) && (args.scales.X(d[args.x_accessor]) <= mg_get_plot_right(args));\n };\n}\n\nfunction mg_x_position(args) {\n return function(d) {\n return args.scales.X(d[args.x_accessor]);\n };\n}\n\nfunction mg_x_position_fixed(args) {\n var _mg_x_pos = mg_x_position(args);\n return function(d) {\n return _mg_x_pos(d).toFixed(2);\n };\n}\n\nfunction mg_y_position_fixed(args) {\n var _mg_y_pos = args.scales.Y;\n return function(d) {\n return _mg_y_pos(d.value).toFixed(2);\n };\n}\n\nfunction mg_place_annotations(checker, class_name, args, svg, line_fcn, text_fcn) {\n var g;\n if (checker) {\n g = svg.append('g').attr('class', class_name);\n line_fcn(g, args);\n text_fcn(g, args);\n }\n}\n\nfunction mg_place_markers(args, svg) {\n mg_place_annotations(args.markers, 'mg-markers', args, svg, mg_place_marker_lines, mg_place_marker_text);\n}\n\nfunction mg_place_baselines(args, svg) {\n mg_place_annotations(args.baselines, 'mg-baselines', args, svg, mg_place_baseline_lines, mg_place_baseline_text);\n}\n\nfunction mg_place_marker_lines(gm, args) {\n var x_pos_fixed = mg_x_position_fixed(args);\n gm.selectAll('.mg-markers')\n .data(args.markers.filter(mg_in_range(args)))\n .enter()\n .append('line')\n .attr('x1', x_pos_fixed)\n .attr('x2', x_pos_fixed)\n .attr('y1', args.top)\n .attr('y2', mg_get_plot_bottom(args))\n .attr('class', function(d) {\n return d.lineclass;\n })\n .attr('stroke-dasharray', '3,1');\n}\n\nfunction mg_place_marker_text(gm, args) {\n gm.selectAll('.mg-markers')\n .data(args.markers.filter(mg_in_range(args)))\n .enter()\n .append('text')\n .attr('class', function(d) {\n return d.textclass || ''; })\n .classed('mg-marker-text', true)\n .attr('x', mg_x_position(args))\n .attr('y', args.x_axis_position === 'bottom' ? mg_get_top(args) * 0.95 : mg_get_bottom(args) + args.buffer)\n .attr('text-anchor', 'middle')\n .text(mg_return_label)\n .each(function(d) {\n if (d.click) {\n d3.select(this).style('cursor', 'pointer')\n .on('click', d.click);\n }\n });\n\n mg_prevent_horizontal_overlap(gm.selectAll('.mg-marker-text').nodes(), args);\n}\n\nfunction mg_place_baseline_lines(gb, args) {\n var y_pos = mg_y_position_fixed(args);\n gb.selectAll('.mg-baselines')\n .data(args.baselines)\n .enter().append('line')\n .attr('x1', mg_get_plot_left(args))\n .attr('x2', mg_get_plot_right(args))\n .attr('y1', y_pos)\n .attr('y2', y_pos);\n}\n\nfunction mg_place_baseline_text(gb, args) {\n var y_pos = mg_y_position_fixed(args);\n gb.selectAll('.mg-baselines')\n .data(args.baselines)\n .enter().append('text')\n .attr('x', mg_get_plot_right(args))\n .attr('y', y_pos)\n .attr('dy', -3)\n .attr('text-anchor', 'end')\n .text(mg_return_label);\n}\n\nfunction markers(args) {\n 'use strict';\n\n var svg = mg_get_svg_child_of(args.target);\n mg_remove_existing_markers(svg);\n mg_place_markers(args, svg);\n mg_place_baselines(args, svg);\n return this;\n}\n\nMG.markers = markers;\n\nfunction mg_clear_mouseover_container(svg) {\n svg.selectAll('.mg-active-datapoint-container').selectAll('*').remove();\n}\n\nfunction mg_setup_mouseover_container(svg, args) {\n svg.select('.mg-active-datapoint').remove();\n var text_anchor = args.mouseover_align === 'right'\n ? 'end'\n : (args.mouseover_align === 'left'\n ? 'start'\n : 'middle');\n\n var mouseover_x = (args.mouseover_align === 'right')\n ? mg_get_plot_right(args)\n : (args.mouseover_align === 'left'\n ? mg_get_plot_left(args)\n : (args.width - args.left - args.right) / 2 + args.left);\n\n var active_datapoint = svg.select('.mg-active-datapoint-container')\n .append('text')\n .attr('class', 'mg-active-datapoint')\n .attr('xml:space', 'preserve')\n .attr('text-anchor', text_anchor);\n\n // set the rollover text's position; if we have markers on two lines,\n // nudge up the rollover text a bit\n var active_datapoint_y_nudge = 0.75;\n\n var y_position = (args.x_axis_position === 'bottom')\n ? mg_get_top(args) * active_datapoint_y_nudge\n : mg_get_bottom(args) + args.buffer * 3;\n\n if (args.markers) {\n var yPos;\n svg.selectAll('.mg-marker-text')\n .each(function() {\n if (!yPos) {\n yPos = d3.select(this).attr('y');\n } else if (yPos !== d3.select(this).attr('y')) {\n active_datapoint_y_nudge = 0.56;\n }\n });\n }\n\n active_datapoint\n .attr('transform', 'translate(' + mouseover_x + ',' + (y_position) + ')');\n}\n\nfunction mg_mouseover_tspan(svg, text) {\n var tspan = '';\n var cl = null;\n if (arguments.length === 3) cl = arguments[2];\n tspan = svg.append('tspan').text(text);\n if (cl !== null) tspan.classed(cl, true);\n this.tspan = tspan;\n\n this.bold = function() {\n this.tspan.attr('font-weight', 'bold');\n return this;\n };\n\n this.font_size = function(pts) {\n this.tspan.attr('font-size', pts);\n return this;\n }\n\n this.x = function(x) {\n this.tspan.attr('x', x);\n return this;\n };\n this.y = function(y) {\n this.tspan.attr('y', y);\n return this;\n };\n this.elem = function() {\n return this.tspan;\n };\n return this;\n}\n\nfunction mg_reset_text_container(svg) {\n var textContainer = svg.select('.mg-active-datapoint');\n textContainer\n .selectAll('*')\n .remove();\n return textContainer;\n}\n\nfunction mg_mouseover_row(row_number, container, rargs) {\n var lineHeight = 1.1;\n this.rargs = rargs;\n\n var rrr = container.append('tspan')\n .attr('x', 0)\n .attr('y', (row_number * lineHeight) + 'em');\n\n this.text = function(text) {\n return mg_mouseover_tspan(rrr, text);\n }\n return this;\n}\n\nfunction mg_mouseover_text(args, rargs) {\n var lineHeight = 1.1;\n this.row_number = 0;\n this.rargs = rargs;\n mg_setup_mouseover_container(rargs.svg, args);\n\n this.text_container = mg_reset_text_container(rargs.svg);\n\n this.mouseover_row = function(rargs) {\n var that = this;\n var rrr = mg_mouseover_row(that.row_number, that.text_container, rargs);\n that.row_number += 1;\n return rrr;\n }\n\n return this;\n}\n\nfunction MG_WindowResizeTracker() {\n var targets = [];\n\n var Observer;\n if (typeof MutationObserver !== \"undefined\") {\n Observer = MutationObserver;\n } else if (typeof WebKitMutationObserver !== \"undefined\") {\n Observer = WebKitMutationObserver;\n }\n\n function window_listener() {\n targets.forEach(function(target) {\n var svg = d3.select(target).select('svg');\n\n // skip if svg is not visible\n if (!svg.empty() && (svg.node().parentNode.offsetWidth > 0 || svg.node().parentNode.offsetHeight > 0)) {\n var aspect = svg.attr('width') !== 0 ? (svg.attr('height') / svg.attr('width')) : 0;\n\n var newWidth = get_width(target);\n\n svg.attr('width', newWidth);\n svg.attr('height', aspect * newWidth);\n }\n });\n }\n\n function remove_target(target) {\n var index = targets.indexOf(target);\n if (index !== -1) {\n targets.splice(index, 1);\n }\n\n if (targets.length === 0) {\n window.removeEventListener('resize', window_listener, true);\n }\n }\n\n return {\n add_target: function(target) {\n if (targets.length === 0) {\n window.addEventListener('resize', window_listener, true);\n }\n\n if (targets.indexOf(target) === -1) {\n targets.push(target);\n\n if (Observer) {\n var observer = new Observer(function(mutations) {\n var targetNode = d3.select(target).node();\n\n if (!targetNode || mutations.some(\n function(mutation) {\n for (var i = 0; i < mutation.removedNodes.length; i++) {\n if (mutation.removedNodes[i] === targetNode) {\n return true;\n }\n }\n })) {\n observer.disconnect();\n remove_target(target);\n }\n });\n\n observer.observe(d3.select(target).node().parentNode, { childList: true });\n }\n }\n }\n };\n}\n\nvar mg_window_resize_tracker = new MG_WindowResizeTracker();\n\nfunction mg_window_listeners(args) {\n mg_if_aspect_ratio_resize_svg(args);\n}\n\nfunction mg_if_aspect_ratio_resize_svg(args) {\n // have we asked the svg to fill a div, if so resize with div\n if (args.full_width || args.full_height) {\n mg_window_resize_tracker.add_target(args.target);\n }\n}\n\nif (mg_jquery_exists()) {\n /*!\n * Bootstrap v3.3.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n /*!\n * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=c3834cc5b59ef727da53)\n * Config saved to config.json and https://gist.github.com/c3834cc5b59ef727da53\n */\n\n /* ========================================================================\n * Bootstrap: dropdown.js v3.3.1\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n +function ($) {\n 'use strict';\n\n if(typeof $().dropdown == 'function')\n return true;\n\n // DROPDOWN CLASS DEFINITION\n // =========================\n\n var backdrop = '.dropdown-backdrop';\n var toggle = '[data-toggle=\"dropdown\"]';\n var Dropdown = function (element) {\n $(element).on('click.bs.dropdown', this.toggle);\n };\n\n Dropdown.VERSION = '3.3.1';\n\n Dropdown.prototype.toggle = function (e) {\n var $this = $(this);\n\n if ($this.is('.disabled, :disabled')) return;\n\n var $parent = getParent($this);\n var isActive = $parent.hasClass('open');\n\n clearMenus();\n\n if (!isActive) {\n if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n // if mobile we use a backdrop because click events don't delegate\n $('').insertAfter($(this)).on('click', clearMenus);\n }\n\n var relatedTarget = { relatedTarget: this };\n $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget));\n\n if (e.isDefaultPrevented()) return;\n\n $this\n .trigger('focus')\n .attr('aria-expanded', 'true');\n\n $parent\n .toggleClass('open')\n .trigger('shown.bs.dropdown', relatedTarget);\n }\n\n return false;\n };\n\n Dropdown.prototype.keydown = function (e) {\n if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return;\n\n var $this = $(this);\n\n e.preventDefault();\n e.stopPropagation();\n\n if ($this.is('.disabled, :disabled')) return;\n\n var $parent = getParent($this);\n var isActive = $parent.hasClass('open');\n\n if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {\n if (e.which == 27) $parent.find(toggle).trigger('focus');\n return $this.trigger('click');\n }\n\n var desc = ' li:not(.divider):visible a';\n var $items = $parent.find('[role=\"menu\"]' + desc + ', [role=\"listbox\"]' + desc);\n\n if (!$items.length) return;\n\n var index = $items.index(e.target);\n\n if (e.which == 38 && index > 0) index--; // up\n if (e.which == 40 && index < $items.length - 1) index++; // down\n if (!~index) index = 0;\n\n $items.eq(index).trigger('focus');\n };\n\n function clearMenus(e) {\n if (e && e.which === 3) return;\n $(backdrop).remove();\n $(toggle).each(function () {\n var $this = $(this);\n var $parent = getParent($this);\n var relatedTarget = { relatedTarget: this };\n\n if (!$parent.hasClass('open')) return;\n\n $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget));\n\n if (e.isDefaultPrevented()) return;\n\n $this.attr('aria-expanded', 'false');\n $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget);\n });\n }\n\n function getParent($this) {\n var selector = $this.attr('data-target');\n\n if (!selector) {\n selector = $this.attr('href');\n selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, ''); // strip for ie7\n }\n\n var $parent = selector && $(selector);\n\n return $parent && $parent.length ? $parent : $this.parent();\n }\n\n\n // DROPDOWN PLUGIN DEFINITION\n // ==========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data('bs.dropdown');\n\n if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)));\n if (typeof option == 'string') data[option].call($this);\n });\n }\n\n var old = $.fn.dropdown;\n\n $.fn.dropdown = Plugin;\n $.fn.dropdown.Constructor = Dropdown;\n\n\n // DROPDOWN NO CONFLICT\n // ====================\n\n $.fn.dropdown.noConflict = function () {\n $.fn.dropdown = old;\n return this;\n };\n\n\n // APPLY TO STANDARD DROPDOWN ELEMENTS\n // ===================================\n\n $(document)\n .on('click.bs.dropdown.data-api', clearMenus)\n .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation(); })\n .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n .on('keydown.bs.dropdown.data-api', '[role=\"menu\"]', Dropdown.prototype.keydown)\n .on('keydown.bs.dropdown.data-api', '[role=\"listbox\"]', Dropdown.prototype.keydown);\n\n }(jQuery);\n}\n\nMG.button_layout = function(target) {\n 'use strict';\n this.target = target;\n this.feature_set = {};\n this.public_name = {};\n this.sorters = {};\n this.manual = [];\n this.manual_map = {};\n this.manual_callback = {};\n\n this._strip_punctuation = function(s) {\n var punctuationless = s.replace(/[^a-zA-Z0-9 _]+/g, '');\n var finalString = punctuationless.replace(/ +?/g, '');\n return finalString;\n };\n\n this.data = function(data) {\n this._data = data;\n return this;\n };\n\n this.manual_button = function(feature, feature_set, callback) {\n this.feature_set[feature] = feature_set;\n this.manual_map[this._strip_punctuation(feature)] = feature;\n this.manual_callback[feature] = callback; // the default is going to be the first feature.\n return this;\n };\n\n this.button = function(feature) {\n if (arguments.length > 1) {\n this.public_name[feature] = arguments[1];\n }\n\n if (arguments.length > 2) {\n this.sorters[feature] = arguments[2];\n }\n\n this.feature_set[feature] = [];\n return this;\n };\n\n this.callback = function(callback) {\n this._callback = callback;\n return this;\n };\n\n this.display = function() {\n var callback = this._callback;\n var manual_callback = this.manual_callback;\n var manual_map = this.manual_map;\n\n var d, f, features, feat;\n features = Object.keys(this.feature_set);\n\n var mapDtoF = function(f) {\n return d[f]; };\n\n var i;\n\n // build out this.feature_set with this.data\n for (i = 0; i < this._data.length; i++) {\n d = this._data[i];\n f = features.map(mapDtoF);\n for (var j = 0; j < features.length; j++) {\n feat = features[j];\n if (this.feature_set[feat].indexOf(f[j]) === -1) {\n this.feature_set[feat].push(f[j]);\n }\n }\n }\n\n for (feat in this.feature_set) {\n if (this.sorters.hasOwnProperty(feat)) {\n this.feature_set[feat].sort(this.sorters[feat]);\n }\n }\n\n $(this.target).empty();\n\n $(this.target).append(\"\");\n\n var dropdownLiAClick = function() {\n var k = $(this).data('key');\n var feature = $(this).data('feature');\n var manual_feature;\n $('.' + feature + '-btns button.btn span.title').html(k);\n if (!manual_map.hasOwnProperty(feature)) {\n callback(feature, k);\n } else {\n manual_feature = manual_map[feature];\n manual_callback[manual_feature](k);\n }\n\n return false;\n };\n\n for (var feature in this.feature_set) {\n features = this.feature_set[feature];\n $(this.target + ' div.segments').append(\n '' + // This never changes.\n '' +\n '' +\n (!this.manual_callback.hasOwnProperty(feature) ? '
' + '');\n\n for (i = 0; i < features.length; i++) {\n if (features[i] !== 'all' && features[i] !== undefined) { // strange bug with undefined being added to manual buttons.\n $(this.target + ' div.' + this._strip_punctuation(feature) + '-btns ul.dropdown-menu').append(\n ':@:/
diff --git a/unintegrated-python/busFactor/pythonBlameAuthorEmail.py b/unintegrated-python/busFactor/pythonBlameAuthorEmail.py
index 7c164bed31..fbf2b58c9b 100644
--- a/unintegrated-python/busFactor/pythonBlameAuthorEmail.py
+++ b/unintegrated-python/busFactor/pythonBlameAuthorEmail.py
@@ -13,9 +13,9 @@
@app.route("/")
def pythonBlameHistory():
- #path is the hardcoded folder for the last download of ghdata
- repo_path = './ghdata'
- #We must remove the old ghdata if we want to download a new copy.
+ #path is the hardcoded folder for the last download of augur
+ repo_path = './augur'
+ #We must remove the old augur if we want to download a new copy.
#In order to delete it, we must first change the permissions
#To be writable for all files and directories.
#Based on this: http://stackoverflow.com/questions/2853723/whats-the-python-way-for-recursively-setting-file-permissions
@@ -27,12 +27,12 @@ def pythonBlameHistory():
os.chmod(os.path.join(root, file), stat.S_IWRITE)
os.chmod(repo_path, stat.S_IWRITE)
- #delete the old ghdata
+ #delete the old augur
shutil.rmtree(repo_path)
- #Get the ghdata repository from GitHub
- repo = Repo.init('ghdata')
- origin = repo.create_remote('origin','https://github.com/OSSHealth/ghdata.git')
+ #Get the augur repository from GitHub
+ repo = Repo.init('augur')
+ origin = repo.create_remote('origin','https://github.com/OSSHealth/augur.git')
origin.fetch()
origin.pull(origin.refs[0].remote_head)
@@ -57,7 +57,7 @@ def pythonBlameHistory():
#You cannot use the os library file/directory loop for this part.
#(as was used above to change file permissions)
#That is because some files do not exist in every commit.
- #You must loop through the commit tree, not the ghdata directory.
+ #You must loop through the commit tree, not the augur directory.
for file_in_repo in repo.head.commit.tree.traverse():
#For each file, we want to clear out the total lines and user totals per file.
#That's because we're starting over with a new file.
diff --git a/unintegrated-python/busFactor/pythonBlameLinesInRepo.py b/unintegrated-python/busFactor/pythonBlameLinesInRepo.py
index 086d2bc267..89aff39ca9 100644
--- a/unintegrated-python/busFactor/pythonBlameLinesInRepo.py
+++ b/unintegrated-python/busFactor/pythonBlameLinesInRepo.py
@@ -9,9 +9,9 @@
@app.route("/")
def pythonBlameHistory():
- #path is the hardcoded folder for the last download of ghdata
- repo_path = './ghdata'
- #We must remove the old ghdata if we want to download a new copy.
+ #path is the hardcoded folder for the last download of augur
+ repo_path = './augur'
+ #We must remove the old augur if we want to download a new copy.
#In order to delete it, we must first change the permissions
#To be writable for all files and directories.
#Based on this: http://stackoverflow.com/questions/2853723/whats-the-python-way-for-recursively-setting-file-permissions
@@ -23,12 +23,12 @@ def pythonBlameHistory():
os.chmod(os.path.join(root, file), stat.S_IWRITE)
os.chmod(repo_path, stat.S_IWRITE)
- #delete the old ghdata
+ #delete the old augur
shutil.rmtree(repo_path)
- #Get the ghdata repository from GitHub
- repo = Repo.init('ghdata')
- origin = repo.create_remote('origin','https://github.com/OSSHealth/ghdata.git')
+ #Get the augur repository from GitHub
+ repo = Repo.init('augur')
+ origin = repo.create_remote('origin','https://github.com/OSSHealth/augur.git')
origin.fetch()
origin.pull(origin.refs[0].remote_head)
@@ -46,7 +46,7 @@ def pythonBlameHistory():
#You cannot use the os library file/directory loop for this part.
#(as was used above to change file permissions)
#That is because some files do not exist in every commit.
- #You must loop through the commit tree, not the ghdata directory.
+ #You must loop through the commit tree, not the augur directory.
for file_in_repo in repo.head.commit.tree.traverse():
#For each file, we want to clear out the total lines and organization totals per file.
#That's because we're starting over with a new file.
diff --git a/unintegrated-python/organizationHistory/pythonBlameHistoryTree.py b/unintegrated-python/organizationHistory/pythonBlameHistoryTree.py
index 0d53c71e93..915a09a11c 100644
--- a/unintegrated-python/organizationHistory/pythonBlameHistoryTree.py
+++ b/unintegrated-python/organizationHistory/pythonBlameHistoryTree.py
@@ -9,11 +9,11 @@
#You will need a MySQL server with the MSR14 datasource or other GHTorrent database with the same schema.
#Edit the line in this code that says db = sqlalchemy.create_engine to match your username:password@hostname:port/database.
-#This file is hardcoded to download the ghdata repository.
+#This file is hardcoded to download the augur repository.
#Since it is a preliminary example, each time it runs,
-#it deletes the local ghdata repo and re-downloads it (though this might not be a good option for the future).
-#Because of this: if you have a folder named ghdata whose contents you do not want deleted,
-#do not place this file in the same folder as your ghdata folder.
+#it deletes the local augur repo and re-downloads it (though this might not be a good option for the future).
+#Because of this: if you have a folder named augur whose contents you do not want deleted,
+#do not place this file in the same folder as your augur folder.
#to run this, type "python pythonBlameHistoryTree.py" into the command prompt
#You will see some output about running on 127.0.0.1:5000 in the command prompt
@@ -24,7 +24,7 @@
#the output shows the commit number and date, the total lines of code and other files (for example, the readme)
#and the percentage written by each organization.
-#expected output for ghdata should show only the spdx-tools organization (Matt is a member)
+#expected output for augur should show only the spdx-tools organization (Matt is a member)
#Number of lines corresponds to the lines written by Matt.
#You can see that earlier commits are lower on the page, and chronologically later ones appear higher up.
@@ -62,9 +62,9 @@
@app.route("/")
def pythonBlameHistory():
- #path is the hardcoded folder for the last download of ghdata
- repo_path = './ghdata'
- #We must remove the old ghdata if we want to download a new copy.
+ #path is the hardcoded folder for the last download of augur
+ repo_path = './augur'
+ #We must remove the old augur if we want to download a new copy.
#In order to delete it, we must first change the permissions
#To be writable for all files and directories.
#Based on this: http://stackoverflow.com/questions/2853723/whats-the-python-way-for-recursively-setting-file-permissions
@@ -76,7 +76,7 @@ def pythonBlameHistory():
os.chmod(os.path.join(root, file), stat.S_IWRITE)
os.chmod(repo_path, stat.S_IWRITE)
- #delete the old ghdata
+ #delete the old augur
shutil.rmtree(repo_path)
#connect to the database username:password@hostname:port/databasename
@@ -84,9 +84,9 @@ def pythonBlameHistory():
schema = sqlalchemy.MetaData()
schema.reflect(bind=db)
- #Get the ghdata repository from GitHub
- repo = Repo.init('ghdata')
- origin = repo.create_remote('origin','https://github.com/OSSHealth/ghdata.git')
+ #Get the augur repository from GitHub
+ repo = Repo.init('augur')
+ origin = repo.create_remote('origin','https://github.com/OSSHealth/augur.git')
origin.fetch()
origin.pull(origin.refs[0].remote_head)
@@ -123,7 +123,7 @@ def pythonBlameHistory():
#You cannot use the os library file/directory loop for this part.
#(as was used above to change file permissions)
#That is because some files do not exist in every commit.
- #You must loop through the commit tree, not the ghdata directory.
+ #You must loop through the commit tree, not the augur directory.
for file_in_repo in history_commit.tree.traverse():
#For each file, we want to clear out the total lines and organization totals per file.
#That's because we're starting over with a new file.
Quick search
Python Module Index
ghdata
augur
Quick search
Related Topics
-
+
diff --git a/frontend/app/components/AugurApp.vue b/frontend/app/components/AugurApp.vue
new file mode 100644
index 0000000000..15feb51878
--- /dev/null
+++ b/frontend/app/components/AugurApp.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/app/components/GHDataCards.vue b/frontend/app/components/AugurCards.vue
similarity index 100%
rename from frontend/app/components/GHDataCards.vue
rename to frontend/app/components/AugurCards.vue
diff --git a/frontend/app/components/GHDataHeader.vue b/frontend/app/components/AugurHeader.vue
similarity index 100%
rename from frontend/app/components/GHDataHeader.vue
rename to frontend/app/components/AugurHeader.vue
diff --git a/frontend/app/components/GHDataApp.vue b/frontend/app/components/GHDataApp.vue
deleted file mode 100644
index 7371d94aa2..0000000000
--- a/frontend/app/components/GHDataApp.vue
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
+
+
+
+
-
-
-
-
-
\ No newline at end of file
diff --git a/frontend/app/components/charts/BubbleChart.vue b/frontend/app/components/charts/BubbleChart.vue
index 3f9b19a068..d1cc604f30 100644
--- a/frontend/app/components/charts/BubbleChart.vue
+++ b/frontend/app/components/charts/BubbleChart.vue
@@ -10,7 +10,7 @@
@@ -13,10 +13,10 @@
-
-
-
-
-
+
diff --git a/frontend/public/static/app.css.map b/frontend/public/static/app.css.map
index da29f5d2d2..539478a9c2 100644
--- a/frontend/public/static/app.css.map
+++ b/frontend/public/static/app.css.map
@@ -1 +1 @@
-{"version":3,"sources":["app/include/kube/kube.css","app/include/metricsgraphics.css","app/styles/ghdata.styl"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5mEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"public/static/app.css","sourcesContent":["/*\n\tKube. CSS & JS Framework\n\tVersion 6.5.2\n\tUpdated: February 2, 2017\n\n\thttp://imperavi.com/kube/\n\n\tCopyright (c) 2009-2017, Imperavi LLC.\n\tLicense: MIT\n*/\nhtml {\n box-sizing: border-box; }\n\n*,\n*:before,\n*:after {\n box-sizing: inherit; }\n\n* {\n margin: 0;\n padding: 0;\n outline: 0;\n -webkit-overflow-scrolling: touch; }\n\nimg,\nvideo,\naudio {\n max-width: 100%; }\n\nimg,\nvideo {\n height: auto; }\n\nsvg {\n max-height: 100%; }\n\niframe {\n border: none; }\n\n::-moz-focus-inner {\n border: 0;\n padding: 0; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n vertical-align: middle;\n position: relative;\n bottom: 0.15rem;\n font-size: 115%;\n margin-right: 3px; }\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; }\n\ninput[type=\"search\"]::-webkit-search-decoration,\ninput[type=\"search\"]::-webkit-search-cancel-button {\n -webkit-appearance: none; }\n\n.black {\n color: #0d0d0e; }\n\n.inverted {\n color: #fff; }\n\n.error {\n color: #f03c69; }\n\n.success {\n color: #35beb1; }\n\n.warning {\n color: #f7ba45; }\n\n.focus {\n color: #1c86f2; }\n\n.aluminum {\n color: #f8f8f8; }\n\n.silver {\n color: #e0e1e1; }\n\n.lightgray {\n color: #d4d4d4; }\n\n.gray {\n color: #bdbdbd; }\n\n.midgray {\n color: #676b72; }\n\n.darkgray {\n color: #313439; }\n\n.bg-black {\n background-color: #0d0d0e; }\n\n.bg-inverted {\n background-color: #fff; }\n\n.bg-error {\n background-color: #f03c69; }\n\n.bg-success {\n background-color: #35beb1; }\n\n.bg-warning {\n background-color: #f7ba45; }\n\n.bg-focus {\n background-color: #1c86f2; }\n\n.bg-aluminum {\n background-color: #f8f8f8; }\n\n.bg-silver {\n background-color: #e0e1e1; }\n\n.bg-lightgray {\n background-color: #d4d4d4; }\n\n.bg-gray {\n background-color: #bdbdbd; }\n\n.bg-midgray {\n background-color: #676b72; }\n\n.bg-darkgray {\n background-color: #313439; }\n\n.bg-highlight {\n background-color: #edf2ff; }\n\nhtml,\nbody {\n font-size: 16px;\n line-height: 24px; }\n\nbody {\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n color: #313439;\n background-color: transparent; }\n\na {\n color: #3794de; }\n\na:hover {\n color: #f03c69; }\n\nh1.title, h1, h2, h3, h4, h5, h6 {\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n font-weight: bold;\n color: #0d0d0e;\n text-rendering: optimizeLegibility;\n margin-bottom: 16px; }\n\nh1.title {\n font-size: 60px;\n line-height: 64px;\n margin-bottom: 8px; }\n\nh1,\n.h1 {\n font-size: 48px;\n line-height: 52px; }\n\nh2,\n.h2 {\n font-size: 36px;\n line-height: 40px; }\n\nh3,\n.h3 {\n font-size: 24px;\n line-height: 32px; }\n\nh4,\n.h4 {\n font-size: 21px;\n line-height: 32px; }\n\nh5,\n.h5 {\n font-size: 18px;\n line-height: 28px; }\n\nh6,\n.h6 {\n font-size: 16px;\n line-height: 24px; }\n\nh1 a, .h1 a,\nh2 a, .h2 a,\nh3 a, .h3 a,\nh4 a, .h4 a,\nh5 a, .h5 a,\nh6 a, .h6 a {\n color: inherit; }\n\np + h2,\np + h3,\np + h4,\np + h5,\np + h6,\nul + h2,\nul + h3,\nul + h4,\nul + h5,\nul + h6,\nol + h2,\nol + h3,\nol + h4,\nol + h5,\nol + h6,\ndl + h2,\ndl + h3,\ndl + h4,\ndl + h5,\ndl + h6,\nblockquote + h2,\nblockquote + h3,\nblockquote + h4,\nblockquote + h5,\nblockquote + h6,\nhr + h2,\nhr + h3,\nhr + h4,\nhr + h5,\nhr + h6,\npre + h2,\npre + h3,\npre + h4,\npre + h5,\npre + h6,\ntable + h2,\ntable + h3,\ntable + h4,\ntable + h5,\ntable + h6,\nform + h2,\nform + h3,\nform + h4,\nform + h5,\nform + h6,\nfigure + h2,\nfigure + h3,\nfigure + h4,\nfigure + h5,\nfigure + h6 {\n margin-top: 24px; }\n\nul,\nul ul,\nul ol,\nol,\nol ul,\nol ol {\n margin: 0 0 0 24px; }\n\nol ol li {\n list-style-type: lower-alpha; }\n\nol ol ol li {\n list-style-type: lower-roman; }\n\nnav ul,\nnav ol {\n margin: 0;\n list-style: none; }\n nav ul ul,\n nav ul ol,\n nav ol ul,\n nav ol ol {\n margin-left: 24px; }\n\ndl dt {\n font-weight: bold; }\n\ndd {\n margin-left: 24px; }\n\np, blockquote, hr, pre, ol, ul, dl, table, fieldset, figure, address, form {\n margin-bottom: 16px; }\n\nhr {\n border: none;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n margin-top: -1px; }\n\nblockquote {\n padding-left: 1rem;\n border-left: 4px solid rgba(0, 0, 0, 0.1);\n font-style: italic;\n color: rgba(49, 52, 57, 0.65); }\n blockquote p {\n margin-bottom: .5rem; }\n\ntime, cite, small, figcaption {\n font-size: 87.5%; }\n\ncite {\n opacity: .6; }\n\nabbr[title], dfn[title] {\n border-bottom: 1px dotted rgba(0, 0, 0, 0.5);\n cursor: help; }\n\nvar {\n font-size: 16px;\n opacity: .6;\n font-style: normal; }\n\nmark, code, samp, kbd {\n position: relative;\n top: -1px;\n padding: 4px 4px 2px 4px;\n display: inline-block;\n line-height: 1;\n color: rgba(49, 52, 57, 0.85); }\n\ncode {\n background: #e0e1e1; }\n\nmark {\n background: #f7ba45; }\n\nsamp {\n color: #fff;\n background: #1c86f2; }\n\nkbd {\n border: 1px solid rgba(0, 0, 0, 0.1); }\n\nsub,\nsup {\n font-size: x-small;\n line-height: 0;\n margin-left: 1rem/4;\n position: relative; }\n\nsup {\n top: 0; }\n\nsub {\n bottom: 1px; }\n\npre, code, samp, var, kbd {\n font-family: Consolas, Monaco, \"Courier New\", monospace; }\n\npre, code, samp, var, kbd, mark {\n font-size: 87.5%; }\n\npre,\npre code {\n background: #f8f8f8;\n padding: 0;\n top: 0;\n display: block;\n line-height: 20px;\n color: rgba(49, 52, 57, 0.85);\n overflow: none;\n white-space: pre-wrap; }\n\npre {\n padding: 1rem; }\n\nfigcaption {\n opacity: .6; }\n\nfigure figcaption {\n position: relative;\n top: -1rem/2; }\n\nfigure pre {\n background: none;\n border: 1px solid rgba(0, 0, 0, 0.1);\n border-radius: 4px; }\n\nfigure .video-container,\nfigure pre {\n margin-bottom: 8px; }\n\n.text-left {\n text-align: left; }\n\n.text-center {\n text-align: center; }\n\n.text-right {\n text-align: right; }\n\nul.unstyled {\n margin-left: 0; }\n\nul.unstyled,\nul.unstyled ul {\n list-style: none; }\n\n.monospace {\n font-family: Consolas, Monaco, \"Courier New\", monospace; }\n\n.upper {\n text-transform: uppercase; }\n\n.lower {\n text-transform: lowercase; }\n\n.italic {\n font-style: italic !important; }\n\n.strong {\n font-weight: bold !important; }\n\n.normal {\n font-weight: normal !important; }\n\n.muted {\n opacity: .55; }\n\na.muted {\n color: #0d0d0e; }\n\na.muted:hover {\n opacity: 1; }\n\n.black {\n color: #0d0d0e; }\n\n.smaller {\n font-size: 12px;\n line-height: 20px; }\n\n.small {\n font-size: 14px;\n line-height: 20px; }\n\n.big {\n font-size: 18px;\n line-height: 28px; }\n\n.large {\n font-size: 20px;\n line-height: 32px; }\n\n.end {\n margin-bottom: 0 !important; }\n\n.highlight {\n background-color: #edf2ff; }\n\n.nowrap,\n.nowrap td {\n white-space: nowrap; }\n\n@media (min-width: 1230px) and (max-width: 1024px) {\n .columns-2,\n .columns-3,\n .columns-4 {\n column-gap: 24px; }\n .columns-2 {\n column-count: 2; }\n .columns-3 {\n column-count: 3; }\n .columns-4 {\n column-count: 4; } }\n\n.row {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap; }\n @media (max-width: 1230px) {\n .row {\n flex-direction: column;\n flex-wrap: nowrap; } }\n .row.gutters,\n .row.gutters > .row {\n margin-left: -2%; }\n @media (max-width: 1230px) {\n .row.gutters,\n .row.gutters > .row {\n margin-left: 0; } }\n .row.gutters > .col,\n .row.gutters > .row > .col {\n margin-left: 2%; }\n @media (max-width: 1230px) {\n .row.gutters > .col,\n .row.gutters > .row > .col {\n margin-left: 0; } }\n .row.around {\n justify-content: space-around; }\n .row.between {\n justify-content: space-between; }\n .row.auto .col {\n flex-grow: 1; }\n\n.col-1 {\n width: 8.33333%; }\n\n.offset-1 {\n margin-left: 8.33333%; }\n\n.col-2 {\n width: 16.66667%; }\n\n.offset-2 {\n margin-left: 16.66667%; }\n\n.col-3 {\n width: 25%; }\n\n.offset-3 {\n margin-left: 25%; }\n\n.col-4 {\n width: 33.33333%; }\n\n.offset-4 {\n margin-left: 33.33333%; }\n\n.col-5 {\n width: 41.66667%; }\n\n.offset-5 {\n margin-left: 41.66667%; }\n\n.col-6 {\n width: 50%; }\n\n.offset-6 {\n margin-left: 50%; }\n\n.col-7 {\n width: 58.33333%; }\n\n.offset-7 {\n margin-left: 58.33333%; }\n\n.col-8 {\n width: 66.66667%; }\n\n.offset-8 {\n margin-left: 66.66667%; }\n\n.col-9 {\n width: 75%; }\n\n.offset-9 {\n margin-left: 75%; }\n\n.col-10 {\n width: 83.33333%; }\n\n.offset-10 {\n margin-left: 83.33333%; }\n\n.col-11 {\n width: 91.66667%; }\n\n.offset-11 {\n margin-left: 91.66667%; }\n\n.col-12 {\n width: 100%; }\n\n.offset-12 {\n margin-left: 100%; }\n\n.gutters > .col-1 {\n width: calc(8.33333% - 2%); }\n\n.gutters > .offset-1 {\n margin-left: calc(8.33333% + 2%) !important; }\n\n.gutters > .col-2 {\n width: calc(16.66667% - 2%); }\n\n.gutters > .offset-2 {\n margin-left: calc(16.66667% + 2%) !important; }\n\n.gutters > .col-3 {\n width: calc(25% - 2%); }\n\n.gutters > .offset-3 {\n margin-left: calc(25% + 2%) !important; }\n\n.gutters > .col-4 {\n width: calc(33.33333% - 2%); }\n\n.gutters > .offset-4 {\n margin-left: calc(33.33333% + 2%) !important; }\n\n.gutters > .col-5 {\n width: calc(41.66667% - 2%); }\n\n.gutters > .offset-5 {\n margin-left: calc(41.66667% + 2%) !important; }\n\n.gutters > .col-6 {\n width: calc(50% - 2%); }\n\n.gutters > .offset-6 {\n margin-left: calc(50% + 2%) !important; }\n\n.gutters > .col-7 {\n width: calc(58.33333% - 2%); }\n\n.gutters > .offset-7 {\n margin-left: calc(58.33333% + 2%) !important; }\n\n.gutters > .col-8 {\n width: calc(66.66667% - 2%); }\n\n.gutters > .offset-8 {\n margin-left: calc(66.66667% + 2%) !important; }\n\n.gutters > .col-9 {\n width: calc(75% - 2%); }\n\n.gutters > .offset-9 {\n margin-left: calc(75% + 2%) !important; }\n\n.gutters > .col-10 {\n width: calc(83.33333% - 2%); }\n\n.gutters > .offset-10 {\n margin-left: calc(83.33333% + 2%) !important; }\n\n.gutters > .col-11 {\n width: calc(91.66667% - 2%); }\n\n.gutters > .offset-11 {\n margin-left: calc(91.66667% + 2%) !important; }\n\n.gutters > .col-12 {\n width: calc(100% - 2%); }\n\n.gutters > .offset-12 {\n margin-left: calc(100% + 2%) !important; }\n\n@media (max-width: 1230px) {\n [class^='offset-'],\n [class*=' offset-'] {\n margin-left: 0; } }\n\n.first {\n order: -1; }\n\n.last {\n order: 1; }\n\n@media (max-width: 1230px) {\n .row .col {\n margin-left: 0;\n width: 100%; }\n .row.gutters .col {\n margin-bottom: 16px; }\n .first-sm {\n order: -1; }\n .last-sm {\n order: 1; } }\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n max-width: 100%;\n width: 100%;\n empty-cells: show;\n font-size: 15px;\n line-height: 24px; }\n\ntable caption {\n text-align: left;\n font-size: 14px;\n font-weight: 500;\n color: #676b72; }\n\nth {\n text-align: left;\n font-weight: 700;\n vertical-align: bottom; }\n\ntd {\n vertical-align: top; }\n\ntr.align-middle td,\ntd.align-middle {\n vertical-align: middle; }\n\nth,\ntd {\n padding: 1rem 1rem;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05); }\n th:first-child,\n td:first-child {\n padding-left: 0; }\n th:last-child,\n td:last-child {\n padding-right: 0; }\n\ntfoot th,\ntfoot td {\n color: rgba(49, 52, 57, 0.5); }\n\ntable.bordered td,\ntable.bordered th {\n border: 1px solid rgba(0, 0, 0, 0.05); }\n\ntable.striped tr:nth-child(odd) td {\n background: #f8f8f8; }\n\ntable.bordered td:first-child,\ntable.bordered th:first-child,\ntable.striped td:first-child,\ntable.striped th:first-child {\n padding-left: 1rem; }\n\ntable.bordered td:last-child,\ntable.bordered th:last-child,\ntable.striped td:last-child,\ntable.striped th:last-child {\n padding-right: 1rem; }\n\ntable.unstyled td,\ntable.unstyled th {\n border: none;\n padding: 0; }\n\nfieldset {\n font-family: inherit;\n border: 1px solid rgba(0, 0, 0, 0.1);\n padding: 2rem;\n margin-bottom: 2rem;\n margin-top: 2rem; }\n\nlegend {\n font-weight: bold;\n font-size: 12px;\n text-transform: uppercase;\n padding: 0 1rem;\n margin-left: -1rem;\n top: 2px;\n position: relative;\n line-height: 0; }\n\ninput,\ntextarea,\nselect {\n display: block;\n width: 100%;\n font-family: inherit;\n font-size: 15px;\n height: 40px;\n outline: none;\n vertical-align: middle;\n background-color: #fff;\n border: 1px solid #d4d4d4;\n border-radius: 3px;\n box-shadow: none;\n padding: 0 12px; }\n\ninput.small,\ntextarea.small,\nselect.small {\n height: 36px;\n font-size: 13px;\n padding: 0 12px;\n border-radius: 3px; }\n\ninput.big,\ntextarea.big,\nselect.big {\n height: 48px;\n font-size: 17px;\n padding: 0 12px;\n border-radius: 3px; }\n\ninput:focus,\ntextarea:focus,\nselect:focus {\n outline: none;\n background-color: #fff;\n border-color: #1c86f2;\n box-shadow: 0 0 1px #1c86f2 inset; }\n\ninput.error,\ntextarea.error,\nselect.error {\n background-color: rgba(240, 60, 105, 0.1);\n border: 1px solid #f583a0; }\n input.error:focus,\n textarea.error:focus,\n select.error:focus {\n border-color: #f03c69;\n box-shadow: 0 0 1px #f03c69 inset; }\n\ninput.success,\ntextarea.success,\nselect.success {\n background-color: rgba(53, 190, 177, 0.1);\n border: 1px solid #6ad5cb; }\n input.success:focus,\n textarea.success:focus,\n select.success:focus {\n border-color: #35beb1;\n box-shadow: 0 0 1px #35beb1 inset; }\n\ninput:disabled, input.disabled,\ntextarea:disabled,\ntextarea.disabled,\nselect:disabled,\nselect.disabled {\n resize: none;\n opacity: 0.6;\n cursor: default;\n font-style: italic;\n color: rgba(0, 0, 0, 0.5); }\n\nselect {\n -webkit-appearance: none;\n background-image: url('data:image/svg+xml;utf8,');\n background-repeat: no-repeat;\n background-position: right 1rem center; }\n\nselect[multiple] {\n background-image: none;\n height: auto;\n padding: .5rem .75rem; }\n\ntextarea {\n height: auto;\n padding: 8px 12px;\n line-height: 24px;\n vertical-align: top; }\n\ninput[type=\"file\"] {\n width: auto;\n border: none;\n padding: 0;\n height: auto;\n background: none;\n box-shadow: none;\n display: inline-block; }\n\ninput[type=\"search\"],\ninput.search {\n background-repeat: no-repeat;\n background-position: 8px 53%;\n background-image: url('data:image/svg+xml;utf8,');\n padding-left: 32px; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n display: inline-block;\n width: auto;\n height: auto;\n padding: 0; }\n\nlabel {\n display: block;\n color: #313439;\n margin-bottom: 4px;\n font-size: 15px; }\n label.checkbox,\n label .desc,\n label .success,\n label .error {\n text-transform: none;\n font-weight: normal; }\n label.checkbox {\n font-size: 16px;\n line-height: 24px;\n cursor: pointer;\n color: inherit; }\n label.checkbox input {\n margin-top: 0; }\n\n.form-checkboxes label.checkbox {\n display: inline-block;\n margin-right: 16px; }\n\n.req {\n position: relative;\n top: 1px;\n font-weight: bold;\n color: #f03c69;\n font-size: 110%; }\n\n.desc {\n color: rgba(49, 52, 57, 0.5);\n font-size: 12px;\n line-height: 20px; }\n\nspan.desc {\n margin-left: 4px; }\n\ndiv.desc {\n margin-top: 4px;\n margin-bottom: -8px; }\n\n.form-buttons button,\n.form-buttons .button {\n margin-right: 8px; }\n\nform,\n.form-item {\n margin-bottom: 2rem; }\n\n.form > .form-item:last-child {\n margin-bottom: 0; }\n\n.form .row:last-child .form-item {\n margin-bottom: 0; }\n\n.form span.success,\n.form span.error {\n font-size: 12px;\n line-height: 20px;\n margin-left: 4px; }\n\n.form-inline input,\n.form-inline textarea,\n.form-inline select {\n display: inline-block;\n width: auto; }\n\n.append,\n.prepend {\n display: flex; }\n .append input,\n .prepend input {\n flex: 1; }\n .append .button,\n .append span,\n .prepend .button,\n .prepend span {\n flex-shrink: 0; }\n .append span,\n .prepend span {\n display: flex;\n flex-direction: column;\n justify-content: center;\n font-weight: normal;\n border: 1px solid #d4d4d4;\n background-color: #f8f8f8;\n padding: 0 .875rem;\n color: rgba(0, 0, 0, 0.5);\n font-size: 12px;\n white-space: nowrap; }\n\n.prepend input {\n border-radius: 0 3px 3px 0; }\n\n.prepend .button {\n margin-right: -1px;\n border-radius: 3px 0 0 3px !important; }\n\n.prepend span {\n border-right: none;\n border-radius: 3px 0 0 3px; }\n\n.append input {\n border-radius: 3px 0 0 3px; }\n\n.append .button {\n margin-left: -1px;\n border-radius: 0 3px 3px 0 !important; }\n\n.append span {\n border-left: none;\n border-radius: 0 3px 3px 0; }\n\nbutton,\n.button {\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n font-size: 15px;\n color: #fff;\n background-color: #1c86f2;\n border-radius: 3px;\n min-height: 40px;\n padding: 8px 20px;\n font-weight: 500;\n text-decoration: none;\n cursor: pointer;\n display: inline-block;\n line-height: 20px;\n border: 1px solid transparent;\n vertical-align: middle;\n -webkit-appearance: none; }\n button i,\n .button i {\n position: relative;\n top: 1px;\n margin: 0 2px; }\n\ninput[type=\"submit\"] {\n width: auto; }\n\nbutton:hover,\n.button:hover {\n outline: none;\n text-decoration: none;\n color: #fff;\n background-color: #4ca0f5; }\n\n.button:disabled,\n.button.disabled {\n cursor: default;\n font-style: normal;\n color: rgba(255, 255, 255, 0.7);\n background-color: rgba(28, 134, 242, 0.7); }\n\n.button.small {\n font-size: 13px;\n min-height: 36px;\n padding: 6px 20px;\n border-radius: 3px; }\n\n.button.big {\n font-size: 17px;\n min-height: 48px;\n padding: 13px 24px;\n border-radius: 3px; }\n\n.button.large {\n font-size: 19px;\n min-height: 56px;\n padding: 20px 36px;\n border-radius: 3px; }\n\n.button.outline {\n background: none;\n border-width: 2px;\n border-color: #1c86f2;\n color: #1c86f2; }\n .button.outline:hover {\n background: none;\n color: rgba(28, 134, 242, 0.6);\n border-color: rgba(28, 134, 242, 0.5); }\n .button.outline:disabled, .button.outline.disabled {\n background: none;\n color: rgba(28, 134, 242, 0.7);\n border-color: rgba(28, 134, 242, 0.5); }\n\n.button.inverted {\n color: #000;\n background-color: #fff; }\n .button.inverted:hover {\n color: #000;\n background-color: white; }\n .button.inverted:disabled, .button.inverted.disabled {\n color: rgba(0, 0, 0, 0.7);\n background-color: rgba(255, 255, 255, 0.7); }\n .button.inverted.outline {\n background: none;\n color: #fff;\n border-color: #fff; }\n .button.inverted.outline:hover {\n color: rgba(255, 255, 255, 0.6);\n border-color: rgba(255, 255, 255, 0.5); }\n .button.inverted.outline:disabled, .button.inverted.outline.disabled {\n background: none;\n color: rgba(255, 255, 255, 0.7);\n border-color: rgba(255, 255, 255, 0.5); }\n .button.inverted:hover {\n opacity: .7; }\n\n.button.round {\n border-radius: 56px; }\n\n.button.raised {\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); }\n\n.button.upper {\n text-transform: uppercase;\n letter-spacing: .04em;\n font-size: 13px; }\n .button.upper.small {\n font-size: 11px; }\n .button.upper.big {\n font-size: 13px; }\n .button.upper.large {\n font-size: 15px; }\n\n.button.secondary {\n color: #fff;\n background-color: #313439; }\n .button.secondary:hover {\n color: #fff;\n background-color: #606670; }\n .button.secondary:disabled, .button.secondary.disabled {\n color: rgba(255, 255, 255, 0.7);\n background-color: rgba(49, 52, 57, 0.7); }\n .button.secondary.outline {\n background: none;\n color: #313439;\n border-color: #313439; }\n .button.secondary.outline:hover {\n color: rgba(49, 52, 57, 0.6);\n border-color: rgba(49, 52, 57, 0.5); }\n .button.secondary.outline:disabled, .button.secondary.outline.disabled {\n background: none;\n color: rgba(49, 52, 57, 0.7);\n border-color: rgba(49, 52, 57, 0.5); }\n\n.label {\n display: inline-block;\n font-size: 13px;\n background: #e0e1e1;\n line-height: 18px;\n padding: 0 10px;\n font-weight: 500;\n color: #313439;\n border: 1px solid transparent;\n vertical-align: middle;\n text-decoration: none;\n border-radius: 4px; }\n .label a,\n .label a:hover {\n color: inherit;\n text-decoration: none; }\n\n.label.big {\n font-size: 14px;\n line-height: 24px;\n padding: 0 12px; }\n\n.label.upper {\n text-transform: uppercase;\n font-size: 11px; }\n\n.label.outline {\n background: none;\n border-color: #bdbdbd; }\n\n.label.badge {\n text-align: center;\n border-radius: 64px;\n padding: 0 6px; }\n .label.badge.big {\n padding: 0 8px; }\n\n.label.tag {\n padding: 0;\n background: none;\n border: none;\n text-transform: uppercase;\n font-size: 11px; }\n .label.tag.big {\n font-size: 13px; }\n\n.label.success {\n background: #35beb1;\n color: #fff; }\n .label.success.tag, .label.success.outline {\n background: none;\n border-color: #35beb1;\n color: #35beb1; }\n\n.label.error {\n background: #f03c69;\n color: #fff; }\n .label.error.tag, .label.error.outline {\n background: none;\n border-color: #f03c69;\n color: #f03c69; }\n\n.label.warning {\n background: #f7ba45;\n color: #0d0d0e; }\n .label.warning.tag, .label.warning.outline {\n background: none;\n border-color: #f7ba45;\n color: #f7ba45; }\n\n.label.focus {\n background: #1c86f2;\n color: #fff; }\n .label.focus.tag, .label.focus.outline {\n background: none;\n border-color: #1c86f2;\n color: #1c86f2; }\n\n.label.black {\n background: #0d0d0e;\n color: #fff; }\n .label.black.tag, .label.black.outline {\n background: none;\n border-color: #0d0d0e;\n color: #0d0d0e; }\n\n.label.inverted {\n background: #fff;\n color: #0d0d0e; }\n .label.inverted.tag, .label.inverted.outline {\n background: none;\n border-color: #fff;\n color: #fff; }\n\n.breadcrumbs {\n font-size: 14px;\n margin-bottom: 24px; }\n .breadcrumbs ul {\n display: flex;\n align-items: center; }\n .breadcrumbs.push-center ul {\n justify-content: center; }\n .breadcrumbs span,\n .breadcrumbs a {\n font-style: normal;\n padding: 0 10px;\n display: inline-block;\n white-space: nowrap; }\n .breadcrumbs li:after {\n display: inline-block;\n content: '/';\n color: rgba(0, 0, 0, 0.3); }\n .breadcrumbs li:last-child:after {\n display: none; }\n .breadcrumbs li:first-child span,\n .breadcrumbs li:first-child a {\n padding-left: 0; }\n .breadcrumbs li.active a {\n color: #313439;\n text-decoration: none;\n cursor: text; }\n\n.pagination {\n margin: 24px 0;\n font-size: 14px; }\n .pagination ul {\n display: flex;\n margin: 0; }\n .pagination.align-center ul {\n justify-content: center; }\n .pagination span,\n .pagination a {\n border-radius: 3px;\n display: inline-block;\n padding: 8px 12px;\n line-height: 1;\n white-space: nowrap;\n border: 1px solid transparent; }\n .pagination a {\n text-decoration: none;\n color: #313439; }\n .pagination a:hover {\n color: rgba(0, 0, 0, 0.5);\n border-color: #e0e1e1; }\n .pagination span,\n .pagination li.active a {\n color: rgba(0, 0, 0, 0.5);\n border-color: #e0e1e1;\n cursor: text; }\n .pagination.upper {\n font-size: 12px; }\n\n.pager span {\n line-height: 24px; }\n\n.pager span,\n.pager a {\n padding-left: 16px;\n padding-right: 16px;\n border-radius: 64px;\n border-color: rgba(0, 0, 0, 0.1); }\n\n.pager li {\n flex-basis: 50%; }\n\n.pager li.next {\n text-align: right; }\n\n.pager.align-center li {\n flex-basis: auto;\n margin-left: 4px;\n margin-right: 4px; }\n\n.pager.flat span,\n.pager.flat a {\n border: none;\n display: block;\n padding: 0; }\n\n.pager.flat a {\n font-weight: bold; }\n .pager.flat a:hover {\n background: none;\n text-decoration: underline; }\n\n@media (max-width: 1230px) {\n .pager.flat ul {\n flex-direction: column; }\n .pager.flat li {\n flex-basis: 100%;\n margin-bottom: 8px;\n text-align: left; } }\n\n@font-face {\n font-family: 'Kube';\n src: url(\"data:application/x-font-ttf;charset=utf-8;base64,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\") format(\"truetype\");\n font-weight: normal;\n font-style: normal; }\n\n[class^=\"kube-\"], [class*=\" kube-\"], .close, .caret {\n /* use !important to prevent issues with browser extensions that change fonts */\n font-family: 'Kube' !important;\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n line-height: 1;\n /* Better Font Rendering =========== */\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale; }\n\n.kube-calendar:before {\n content: \"\\e900\"; }\n\n.caret.down:before,\n.kube-caret-down:before {\n content: \"\\e901\"; }\n\n.caret.left:before,\n.kube-caret-left:before {\n content: \"\\e902\"; }\n\n.caret.right:before,\n.kube-caret-right:before {\n content: \"\\e903\"; }\n\n.caret.up:before,\n.kube-caret-up:before {\n content: \"\\e904\"; }\n\n.close:before,\n.kube-close:before {\n content: \"\\e905\"; }\n\n.kube-menu:before {\n content: \"\\e906\"; }\n\n.kube-search:before {\n content: \"\\e907\"; }\n\n.gutters .column.push-left,\n.push-left {\n margin-right: auto; }\n\n.gutters .column.push-right,\n.push-right {\n margin-left: auto; }\n\n.gutters .column.push-center,\n.push-center {\n margin-left: auto;\n margin-right: auto; }\n\n.gutters .column.push-middle,\n.push-middle {\n margin-top: auto;\n margin-bottom: auto; }\n\n.push-bottom {\n margin-top: auto; }\n\n@media (max-width: 1230px) {\n .gutters .column.push-left-sm,\n .push-left-sm {\n margin-left: 0; }\n .gutters .column.push-center-sm,\n .push-center-sm {\n margin-left: auto;\n margin-right: auto; }\n .push-top-sm {\n margin-top: 0; } }\n\n.align-middle {\n align-items: center; }\n\n.align-right {\n justify-content: flex-end; }\n\n.align-center {\n justify-content: center; }\n\n@media (max-width: 1230px) {\n .align-left-sm {\n justify-content: flex-start; } }\n\n.float-right {\n float: right; }\n\n.float-left {\n float: left; }\n\n@media (max-width: 1230px) {\n .float-right {\n float: none; }\n .float-left {\n float: none; } }\n\n.fixed {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 100;\n width: 100%; }\n\n.w5 {\n width: 5%; }\n\n.w10 {\n width: 10%; }\n\n.w15 {\n width: 15%; }\n\n.w20 {\n width: 20%; }\n\n.w25 {\n width: 25%; }\n\n.w30 {\n width: 30%; }\n\n.w35 {\n width: 35%; }\n\n.w40 {\n width: 40%; }\n\n.w45 {\n width: 45%; }\n\n.w50 {\n width: 50%; }\n\n.w55 {\n width: 55%; }\n\n.w60 {\n width: 60%; }\n\n.w65 {\n width: 65%; }\n\n.w70 {\n width: 70%; }\n\n.w75 {\n width: 75%; }\n\n.w80 {\n width: 80%; }\n\n.w85 {\n width: 85%; }\n\n.w90 {\n width: 90%; }\n\n.w95 {\n width: 95%; }\n\n.w100 {\n width: 100%; }\n\n.w-auto {\n width: auto; }\n\n.w-small {\n width: 480px; }\n\n.w-medium {\n width: 600px; }\n\n.w-big {\n width: 740px; }\n\n.w-large {\n width: 840px; }\n\n@media (max-width: 1230px) {\n .w-auto-sm {\n width: auto; }\n .w100-sm,\n .w-small,\n .w-medium,\n .w-big,\n .w-large {\n width: 100%; } }\n\n.max-w5 {\n max-width: 5%; }\n\n.max-w10 {\n max-width: 10%; }\n\n.max-w15 {\n max-width: 15%; }\n\n.max-w20 {\n max-width: 20%; }\n\n.max-w25 {\n max-width: 25%; }\n\n.max-w30 {\n max-width: 30%; }\n\n.max-w35 {\n max-width: 35%; }\n\n.max-w40 {\n max-width: 40%; }\n\n.max-w45 {\n max-width: 45%; }\n\n.max-w50 {\n max-width: 50%; }\n\n.max-w55 {\n max-width: 55%; }\n\n.max-w60 {\n max-width: 60%; }\n\n.max-w65 {\n max-width: 65%; }\n\n.max-w70 {\n max-width: 70%; }\n\n.max-w75 {\n max-width: 75%; }\n\n.max-w80 {\n max-width: 80%; }\n\n.max-w85 {\n max-width: 85%; }\n\n.max-w90 {\n max-width: 90%; }\n\n.max-w95 {\n max-width: 95%; }\n\n.max-w100 {\n max-width: 100%; }\n\n.max-w-small {\n max-width: 480px; }\n\n.max-w-medium {\n max-width: 600px; }\n\n.max-w-big {\n max-width: 740px; }\n\n.max-w-large {\n max-width: 840px; }\n\n@media (max-width: 1230px) {\n .max-w-auto-sm,\n .max-w-small,\n .max-w-medium,\n .max-w-big,\n .max-w-large {\n max-width: auto; } }\n\n.min-w5 {\n min-width: 5%; }\n\n.min-w10 {\n min-width: 10%; }\n\n.min-w15 {\n min-width: 15%; }\n\n.min-w20 {\n min-width: 20%; }\n\n.min-w25 {\n min-width: 25%; }\n\n.min-w30 {\n min-width: 30%; }\n\n.min-w35 {\n min-width: 35%; }\n\n.min-w40 {\n min-width: 40%; }\n\n.min-w45 {\n min-width: 45%; }\n\n.min-w50 {\n min-width: 50%; }\n\n.min-w55 {\n min-width: 55%; }\n\n.min-w60 {\n min-width: 60%; }\n\n.min-w65 {\n min-width: 65%; }\n\n.min-w70 {\n min-width: 70%; }\n\n.min-w75 {\n min-width: 75%; }\n\n.min-w80 {\n min-width: 80%; }\n\n.min-w85 {\n min-width: 85%; }\n\n.min-w90 {\n min-width: 90%; }\n\n.min-w95 {\n min-width: 95%; }\n\n.min-w100 {\n min-width: 100%; }\n\n.h25 {\n height: 25%; }\n\n.h50 {\n height: 50%; }\n\n.h100 {\n height: 100%; }\n\n.group:after {\n content: '';\n display: table;\n clear: both; }\n\n.flex {\n display: flex; }\n\n@media (max-width: 1230px) {\n .flex-column-sm {\n flex-direction: column; }\n .flex-w100-sm {\n flex: 0 0 100%; } }\n @media (max-width: 1230px) and (max-width: 1230px) {\n .flex-w100-sm {\n flex: 0 0 100% !important; } }\n\n.invisible {\n visibility: hidden; }\n\n.visible {\n visibility: visible; }\n\n.display-block {\n display: block; }\n\n.hide {\n display: none !important; }\n\n@media (max-width: 1230px) {\n .hide-sm {\n display: none !important; } }\n\n@media (min-width: 1230px) {\n .show-sm {\n display: none !important; } }\n\n@media print {\n .hide-print {\n display: none !important; }\n .show-print {\n display: block !important; } }\n\n.no-scroll {\n overflow: hidden;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100% !important; }\n\n.scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll; }\n\n.video-container {\n height: 0;\n padding-bottom: 56.25%;\n position: relative;\n margin-bottom: 16px; }\n .video-container iframe,\n .video-container object,\n .video-container embed {\n position: absolute;\n top: 0;\n left: 0;\n width: 100% !important;\n height: 100% !important; }\n\n.close {\n display: inline-block;\n min-height: 16px;\n min-width: 16px;\n line-height: 16px;\n vertical-align: middle;\n text-align: center;\n font-size: 12px;\n opacity: .6; }\n .close:hover {\n opacity: 1; }\n .close.small {\n font-size: 8px; }\n .close.big {\n font-size: 18px; }\n .close.white {\n color: #fff; }\n\n.caret {\n display: inline-block; }\n\n.button .caret {\n margin-right: -8px; }\n\n.overlay {\n position: fixed;\n z-index: 200;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(255, 255, 255, 0.95); }\n .overlay > .close {\n position: fixed;\n top: 1rem;\n right: 1rem; }\n\n@media print {\n * {\n background: transparent !important;\n color: black !important;\n box-shadow: none !important;\n text-shadow: none !important; }\n a,\n a:visited {\n text-decoration: underline; }\n pre, blockquote {\n border: 1px solid #999;\n page-break-inside: avoid; }\n p, h2, h3 {\n orphans: 3;\n widows: 3; }\n thead {\n display: table-header-group; }\n tr, img {\n page-break-inside: avoid; }\n img {\n max-width: 100% !important; }\n h2, h3, h4 {\n page-break-after: avoid; }\n @page {\n margin: 0.5cm; } }\n\n@keyframes slideUp {\n to {\n height: 0;\n padding-top: 0;\n padding-bottom: 0; } }\n\n@keyframes slideDown {\n from {\n height: 0;\n padding-top: 0;\n padding-bottom: 0; } }\n\n@keyframes fadeIn {\n from {\n opacity: 0; }\n to {\n opacity: 1; } }\n\n@keyframes fadeOut {\n from {\n opacity: 1; }\n to {\n opacity: 0; } }\n\n@keyframes flipIn {\n from {\n opacity: 0;\n transform: scaleY(0); }\n to {\n opacity: 1;\n transform: scaleY(1); } }\n\n@keyframes flipOut {\n from {\n opacity: 1;\n transform: scaleY(1); }\n to {\n opacity: 0;\n transform: scaleY(0); } }\n\n@keyframes zoomIn {\n from {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3); }\n 50% {\n opacity: 1; } }\n\n@keyframes zoomOut {\n from {\n opacity: 1; }\n 50% {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3); }\n to {\n opacity: 0; } }\n\n@keyframes slideInRight {\n from {\n transform: translate3d(100%, 0, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideInLeft {\n from {\n transform: translate3d(-100%, 0, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideInDown {\n from {\n transform: translate3d(0, -100%, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideOutLeft {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(-100%, 0, 0); } }\n\n@keyframes slideOutRight {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(100%, 0, 0); } }\n\n@keyframes slideOutUp {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(0, -100%, 0); } }\n\n@keyframes rotate {\n from {\n transform: rotate(0deg); }\n to {\n transform: rotate(360deg); } }\n\n@keyframes pulse {\n from {\n transform: scale3d(1, 1, 1); }\n 50% {\n transform: scale3d(1.03, 1.03, 1.03); }\n to {\n transform: scale3d(1, 1, 1); } }\n\n@keyframes shake {\n 15% {\n transform: translateX(0.5rem); }\n 30% {\n transform: translateX(-0.4rem); }\n 45% {\n transform: translateX(0.3rem); }\n 60% {\n transform: translateX(-0.2rem); }\n 75% {\n transform: translateX(0.1rem); }\n 90% {\n transform: translateX(0); }\n 90% {\n transform: translateX(0); } }\n\n.fadeIn {\n animation: fadeIn 250ms; }\n\n.fadeOut {\n animation: fadeOut 250ms; }\n\n.zoomIn {\n animation: zoomIn 200ms; }\n\n.zoomOut {\n animation: zoomOut 500ms; }\n\n.slideInRight {\n animation: slideInRight 500ms; }\n\n.slideInLeft {\n animation: slideInLeft 500ms; }\n\n.slideInDown {\n animation: slideInDown 500ms; }\n\n.slideOutLeft {\n animation: slideOutLeft 500ms; }\n\n.slideOutRight {\n animation: slideOutRight 500ms; }\n\n.slideOutUp {\n animation: slideOutUp 500ms; }\n\n.slideUp {\n overflow: hidden;\n animation: slideUp 200ms ease-in-out; }\n\n.slideDown {\n overflow: hidden;\n animation: slideDown 80ms ease-in-out; }\n\n.flipIn {\n animation: flipIn 250ms cubic-bezier(0.5, -0.5, 0.5, 1.5); }\n\n.flipOut {\n animation: flipOut 500ms cubic-bezier(0.5, -0.5, 0.5, 1.5); }\n\n.rotate {\n animation: rotate 500ms; }\n\n.pulse {\n animation: pulse 250ms 2; }\n\n.shake {\n animation: shake 500ms; }\n\n.dropdown {\n position: absolute;\n z-index: 100;\n top: 0;\n right: 0;\n width: 280px;\n color: #000;\n font-size: 15px;\n background: #fff;\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);\n border-radius: 3px;\n max-height: 300px;\n margin: 0;\n padding: 0;\n overflow: hidden; }\n .dropdown.dropdown-mobile {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n max-height: none;\n border: none; }\n .dropdown .close {\n margin: 20px auto; }\n .dropdown.open {\n overflow: auto; }\n .dropdown ul {\n list-style: none;\n margin: 0; }\n .dropdown ul li {\n border-bottom: 1px solid rgba(0, 0, 0, 0.07); }\n .dropdown ul li:last-child {\n border-bottom: none; }\n .dropdown ul a {\n display: block;\n padding: 12px;\n text-decoration: none;\n color: #000; }\n .dropdown ul a:hover {\n background: rgba(0, 0, 0, 0.05); }\n\n.message {\n font-family: Consolas, Monaco, \"Courier New\", monospace;\n font-size: 14px;\n line-height: 20px;\n background: #e0e1e1;\n color: #313439;\n padding: 1rem;\n padding-right: 2.5em;\n padding-bottom: .75rem;\n margin-bottom: 24px;\n position: relative; }\n .message a {\n color: inherit; }\n .message h2,\n .message h3,\n .message h4,\n .message h5,\n .message h6 {\n margin-bottom: 0; }\n .message .close {\n position: absolute;\n right: 1rem;\n top: 1.1rem; }\n\n.message.error {\n background: #f03c69;\n color: #fff; }\n\n.message.success {\n background: #35beb1;\n color: #fff; }\n\n.message.warning {\n background: #f7ba45; }\n\n.message.focus {\n background: #1c86f2;\n color: #fff; }\n\n.message.black {\n background: #0d0d0e;\n color: #fff; }\n\n.message.inverted {\n background: #fff; }\n\n.modal-box {\n position: fixed;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n overflow-x: hidden;\n overflow-y: auto;\n z-index: 200; }\n\n.modal {\n position: relative;\n margin: auto;\n margin-top: 16px;\n padding: 0;\n background: #fff;\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);\n border-radius: 8px;\n color: #000; }\n @media (max-width: 1230px) {\n .modal input,\n .modal textarea {\n font-size: 16px; } }\n .modal .close {\n position: absolute;\n top: 18px;\n right: 16px;\n opacity: .3; }\n .modal .close:hover {\n opacity: 1; }\n\n.modal-header {\n padding: 24px 32px;\n font-size: 18px;\n font-weight: bold;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05); }\n .modal-header:empty {\n display: none; }\n\n.modal-body {\n padding: 36px 56px; }\n\n@media (max-width: 1230px) {\n .modal-header,\n .modal-body {\n padding: 24px; } }\n\n.offcanvas {\n background: #fff;\n position: fixed;\n padding: 24px;\n height: 100%;\n top: 0;\n left: 0;\n z-index: 300;\n overflow-y: scroll; }\n\n.offcanvas .close {\n position: absolute;\n top: 8px;\n right: 8px; }\n\n.offcanvas-left {\n border-right: 1px solid rgba(0, 0, 0, 0.1); }\n\n.offcanvas-right {\n left: auto;\n right: 0;\n border-left: 1px solid rgba(0, 0, 0, 0.1); }\n\n.offcanvas-push-body {\n position: relative; }\n\n.tabs {\n margin-bottom: 24px;\n font-size: 14px; }\n .tabs li em,\n .tabs li.active a {\n color: #313439;\n border: 1px solid rgba(0, 0, 0, 0.1);\n cursor: default;\n text-decoration: none;\n background: none; }\n .tabs em,\n .tabs a {\n position: relative;\n top: 1px;\n font-style: normal;\n display: block;\n padding: .5rem 1rem;\n border: 1px solid transparent;\n color: rgba(0, 0, 0, 0.5);\n text-decoration: none; }\n .tabs a:hover {\n -moz-transition: all linear 0.2s;\n transition: all linear 0.2s;\n color: #313439;\n text-decoration: underline;\n background-color: #e0e1e1; }\n\n@media (min-width: 1230px) {\n .tabs ul {\n display: flex;\n margin-top: -1px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1); }\n .tabs li em,\n .tabs li.active a {\n border-bottom: 1px solid #fff; } }\n",".mg-active-datapoint {\n fill: black;\n font-size: 0.9rem;\n font-weight: 400;\n opacity: 0.8;\n}\n\n.mg-area1-color {\n fill: #0000ff;\n}\n\n.mg-area2-color {\n fill: #05b378;\n}\n\n.mg-area3-color {\n fill: #db4437;\n}\n\n.mg-area4-color {\n fill: #f8b128;\n}\n\n.mg-area5-color {\n fill: #5c5c5c;\n}\n\ntext.mg-barplot-group-label {\n font-weight:900;\n}\n\n.mg-barplot rect.mg-bar {\n shape-rendering: auto;\n}\n\n.mg-barplot rect.mg-bar.default-bar {\n fill: #b6b6fc;\n}\n\n.mg-barplot rect.mg-bar.default-active {\n fill: #9e9efc;\n}\n\n.mg-barplot .mg-bar-prediction {\n fill: #5b5b5b;\n}\n\n.mg-barplot .mg-bar-baseline {\n stroke: #5b5b5b;\n stroke-width: 2;\n}\n\n.mg-bar-target-element {\n font-size:11px;\n padding-left:5px;\n padding-right:5px;\n font-weight:300;\n}\n\n.mg-baselines line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-baselines text {\n fill: black;\n font-size: 0.9rem;\n opacity: 0.6;\n stroke: none;\n}\n\n.mg-baselines-small text {\n font-size: 0.6rem;\n}\n\n.mg-category-guides line {\n stroke: #b3b2b2;\n}\n\n.mg-header {\n cursor: default;\n font-size: 1.2rem;\n}\n\n.mg-header .mg-chart-description {\n fill: #ccc;\n font-family: FontAwesome;\n font-size: 1.2rem;\n}\n\n.mg-header .mg-warning {\n fill: #ccc;\n font-family: FontAwesome;\n font-size: 1.2rem;\n}\n\n.mg-points circle {\n opacity: 0.65;\n}\n\n.mg-popover {\n font-size: 0.95rem;\n}\n\n.mg-popover-content {\n cursor: auto;\n line-height: 17px;\n}\n\n.mg-data-table {\n margin-top: 30px;\n}\n\n.mg-data-table thead tr th {\n border-bottom: 1px solid darkgray;\n cursor: default;\n font-size: 1.1rem;\n font-weight: normal;\n padding: 5px 5px 8px 5px;\n text-align: right;\n}\n\n.mg-data-table thead tr th .fa {\n color: #ccc;\n padding-left: 4px;\n}\n\n.mg-data-table thead tr th .popover {\n font-size: 1rem;\n font-weight: normal;\n}\n\n.mg-data-table .secondary-title {\n color: darkgray;\n}\n\n.mg-data-table tbody tr td {\n margin: 2px;\n padding: 5px;\n vertical-align: top;\n}\n\n.mg-data-table tbody tr td.table-text {\n opacity: 0.8;\n padding-left: 30px;\n}\n\n.mg-y-axis line.mg-extended-yax-ticks {\n opacity: 0.4;\n}\n\n.mg-x-axis line.mg-extended-xax-ticks {\n opacity: 0.4;\n}\n\n.mg-histogram .axis path,\n.mg-histogram .axis line {\n fill: none;\n opacity: 0.7;\n shape-rendering: auto;\n stroke: #ccc;\n}\n\ntspan.hist-symbol {\n fill: #9e9efc;\n}\n\n.mg-histogram .mg-bar rect {\n fill: #b6b6fc;\n shape-rendering: auto;\n}\n\n.mg-histogram .mg-bar rect.active {\n fill: #9e9efc;\n}\n\n.mg-least-squares-line {\n stroke: red;\n stroke-width: 1px;\n}\n\n.mg-lowess-line {\n fill: none;\n stroke: red;\n}\n\n.mg-line1-color {\n stroke: #4040e8;\n}\n\n.mg-hover-line1-color {\n fill: #4040e8;\n}\n\n.mg-line2-color {\n stroke: #05b378;\n}\n\n.mg-hover-line2-color {\n fill: #05b378;\n}\n\n.mg-line3-color {\n stroke: #db4437;\n}\n\n.mg-hover-line3-color {\n fill: #db4437;\n}\n\n.mg-line4-color {\n stroke: #f8b128;\n}\n\n.mg-hover-line4-color {\n fill: #f8b128;\n}\n\n.mg-line5-color {\n stroke: #5c5c5c;\n}\n\n.mg-hover-line5-color {\n fill: #5c5c5c;\n}\n\n.mg-line-legend text {\n font-size: 0.9rem;\n font-weight: 300;\n stroke: none;\n}\n\n.mg-line1-legend-color {\n color: #4040e8;\n fill: #4040e8;\n}\n\n.mg-line2-legend-color {\n color: #05b378;\n fill: #05b378;\n}\n\n.mg-line3-legend-color {\n color: #db4437;\n fill: #db4437;\n}\n\n.mg-line4-legend-color {\n color: #f8b128;\n fill: #f8b128;\n}\n\n.mg-line5-legend-color {\n color: #5c5c5c;\n fill: #5c5c5c;\n}\n\n.mg-main-area-solid svg .mg-main-area {\n fill: #ccccff;\n opacity: 1;\n}\n\n.mg-markers line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-markers text {\n fill: black;\n font-size: 0.8rem;\n opacity: 0.6;\n}\n\n.mg-missing-text {\n opacity: 0.9;\n}\n\n.mg-missing-background {\n stroke: blue;\n fill: none;\n stroke-dasharray: 10,5;\n stroke-opacity: 0.05;\n stroke-width: 2;\n}\n\n.mg-missing .mg-main-line {\n opacity: 0.1;\n}\n\n.mg-missing .mg-main-area {\n opacity: 0.03;\n}\n\npath.mg-main-area {\n opacity: 0.2;\n stroke: none;\n}\n\npath.mg-confidence-band {\n fill: #ccc;\n opacity: 0.4;\n stroke: none;\n}\n\npath.mg-main-line {\n fill: none;\n opacity: 0.8;\n stroke-width: 1.1px;\n}\n\n.mg-points circle {\n fill-opacity: 0.4;\n stroke-opacity: 1;\n}\n\ncircle.mg-points-mono {\n fill: #0000ff;\n stroke: #0000ff;\n}\n\ntspan.mg-points-mono {\n fill: #0000ff;\n stroke: #0000ff;\n}\n\n/* a selected point in a scatterplot */\n.mg-points circle.selected {\n fill-opacity: 1;\n stroke-opacity: 1;\n}\n\n.mg-voronoi path {\n fill: none;\n pointer-events: all;\n stroke: none;\n stroke-opacity: 0.1;\n}\n\n.mg-x-rug-mono,\n.mg-y-rug-mono {\n stroke: black;\n}\n\n.mg-x-axis line,\n.mg-y-axis line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-x-axis text,\n.mg-y-axis text,\n.mg-histogram .axis text {\n fill: black;\n font-size: 0.9rem;\n opacity: 0.6;\n}\n\n.mg-x-axis .label,\n.mg-y-axis .label,\n.mg-axis .label {\n font-size: 0.8rem;\n text-transform: uppercase;\n font-weight: 400;\n}\n\n.mg-x-axis-small text,\n.mg-y-axis-small text,\n.mg-active-datapoint-small {\n font-size: 0.6rem;\n}\n\n.mg-x-axis-small .label,\n.mg-y-axis-small .label {\n font-size: 0.65rem;\n}\n\n.mg-european-hours {\n}\n\n.mg-year-marker text {\n fill: black;\n font-size: 0.7rem;\n opacity: 0.6;\n}\n\n.mg-year-marker line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-year-marker-small text {\n font-size: 0.6rem;\n}\n","body {\n background: #eaeaea;\n padding-bottom: 216px;\n}\nheader {\n width: 100%;\n min-height: 216px;\n padding: 48px;\n margin-bottom: 24px;\n background: #fafafa;\n}\nheader .search {\n margin-top: 48px;\n}\n#logo {\n display: block;\n margin: 0 auto;\n max-width: 400px;\n}\n.content {\n margin: auto;\n width: 95%;\n max-width: 1080px;\n}\nsection#landing h1 {\n font-size: 25px;\n}\nsection {\n padding: 36px;\n float: right;\n margin: 0 0 24px 0;\n background: #fafafa;\n box-shadow: 5px 5px 20px 2px rgba(0,0,0,0.03);\n}\nsection h2 {\n font-size: 21px;\n line-height: 32px;\n color: #7d7d7d;\n margin-bottom: 50px;\n}\nsection small {\n display: block;\n width: 100%;\n margin-top: 30px;\n padding-right: 20px;\n text-align: right;\n color: #aaa;\n}\nsection small a {\n color: #aaf;\n text-decoration: none;\n}\nsection.unmaterialized {\n box-shadow: 0 0 0 0;\n background: #f0f0f0;\n padding: 24px 24px 48px 24px;\n border-right: 1px solid #dedede;\n border-bottom: 1px solid #dedede;\n}\n#controls {\n padding: 36px;\n background: #f0f0f0;\n border-right: 1px solid #dedede;\n border-bottom: 1px solid #dedede;\n margin-bottom: 20px;\n}\n.fixed {\n position: relative;\n}\n@media (min-width: 1230px) {\n #cards {\n padding-bottom: 100px;\n position: relative;\n z-index: 9;\n }\n section {\n z-index: 10;\n width: calc(100% - 345px);\n float: right;\n }\n #landing {\n width: 100%;\n }\n .fixed-container {\n z-index: 0;\n position: absolute;\n top: 245px;\n left: calc(50% - (540px));\n }\n .fixed {\n position: fixed !important;\n top: 25px;\n }\n #controls {\n width: 325px;\n float: left;\n }\n}\ncite.metric {\n display: block;\n width: 100%;\n height: 0;\n float: right;\n text-align: center;\n font-size: 12px;\n color: #ccc;\n font-style: normal;\n padding-left: 50px;\n margin: 200px 0px -185px 0;\n}\ncite.metric a {\n color: #aaa;\n text-decoration: underline;\n}\n.linechart {\n height: 210px;\n margin-bottom: 30px;\n}\n.mg-line-legend {\n display: none;\n}\n.legend {\n position: relative;\n margin: 0;\n padding: 0;\n height: 0;\n top: 31px;\n left: 55px;\n fontSize: 14px;\n fontWeight: bold;\n opacity: 0.8;\n}\n.mg-baselines {\n opacity: 0.5;\n}\n.loader {\n width: 100%;\n text-align: center;\n line-height: 10;\n animation: outro 1s, loader 1.5s infinite;\n}\n.intro {\n animation: intro 2s;\n}\n@media print {\n body {\n zoom: 75%;\n }\n section {\n min-width: 800px;\n min-height: 10.5in;\n page-break-after: always;\n }\n section.unmaterialized {\n display: none;\n }\n}\n.hidden,\n.hidden > *,\n.hidden > small {\n display: none !important;\n}\n@-moz-keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-webkit-keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-o-keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-moz-keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-webkit-keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-o-keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-moz-keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n@-webkit-keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n@-o-keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n@keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n"]}
\ No newline at end of file
+{"version":3,"sources":["app/include/kube/kube.css","app/include/metricsgraphics.css","app/styles/augur.styl"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5mEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"public/static/app.css","sourcesContent":["/*\n\tKube. CSS & JS Framework\n\tVersion 6.5.2\n\tUpdated: February 2, 2017\n\n\thttp://imperavi.com/kube/\n\n\tCopyright (c) 2009-2017, Imperavi LLC.\n\tLicense: MIT\n*/\nhtml {\n box-sizing: border-box; }\n\n*,\n*:before,\n*:after {\n box-sizing: inherit; }\n\n* {\n margin: 0;\n padding: 0;\n outline: 0;\n -webkit-overflow-scrolling: touch; }\n\nimg,\nvideo,\naudio {\n max-width: 100%; }\n\nimg,\nvideo {\n height: auto; }\n\nsvg {\n max-height: 100%; }\n\niframe {\n border: none; }\n\n::-moz-focus-inner {\n border: 0;\n padding: 0; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n vertical-align: middle;\n position: relative;\n bottom: 0.15rem;\n font-size: 115%;\n margin-right: 3px; }\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; }\n\ninput[type=\"search\"]::-webkit-search-decoration,\ninput[type=\"search\"]::-webkit-search-cancel-button {\n -webkit-appearance: none; }\n\n.black {\n color: #0d0d0e; }\n\n.inverted {\n color: #fff; }\n\n.error {\n color: #f03c69; }\n\n.success {\n color: #35beb1; }\n\n.warning {\n color: #f7ba45; }\n\n.focus {\n color: #1c86f2; }\n\n.aluminum {\n color: #f8f8f8; }\n\n.silver {\n color: #e0e1e1; }\n\n.lightgray {\n color: #d4d4d4; }\n\n.gray {\n color: #bdbdbd; }\n\n.midgray {\n color: #676b72; }\n\n.darkgray {\n color: #313439; }\n\n.bg-black {\n background-color: #0d0d0e; }\n\n.bg-inverted {\n background-color: #fff; }\n\n.bg-error {\n background-color: #f03c69; }\n\n.bg-success {\n background-color: #35beb1; }\n\n.bg-warning {\n background-color: #f7ba45; }\n\n.bg-focus {\n background-color: #1c86f2; }\n\n.bg-aluminum {\n background-color: #f8f8f8; }\n\n.bg-silver {\n background-color: #e0e1e1; }\n\n.bg-lightgray {\n background-color: #d4d4d4; }\n\n.bg-gray {\n background-color: #bdbdbd; }\n\n.bg-midgray {\n background-color: #676b72; }\n\n.bg-darkgray {\n background-color: #313439; }\n\n.bg-highlight {\n background-color: #edf2ff; }\n\nhtml,\nbody {\n font-size: 16px;\n line-height: 24px; }\n\nbody {\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n color: #313439;\n background-color: transparent; }\n\na {\n color: #3794de; }\n\na:hover {\n color: #f03c69; }\n\nh1.title, h1, h2, h3, h4, h5, h6 {\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n font-weight: bold;\n color: #0d0d0e;\n text-rendering: optimizeLegibility;\n margin-bottom: 16px; }\n\nh1.title {\n font-size: 60px;\n line-height: 64px;\n margin-bottom: 8px; }\n\nh1,\n.h1 {\n font-size: 48px;\n line-height: 52px; }\n\nh2,\n.h2 {\n font-size: 36px;\n line-height: 40px; }\n\nh3,\n.h3 {\n font-size: 24px;\n line-height: 32px; }\n\nh4,\n.h4 {\n font-size: 21px;\n line-height: 32px; }\n\nh5,\n.h5 {\n font-size: 18px;\n line-height: 28px; }\n\nh6,\n.h6 {\n font-size: 16px;\n line-height: 24px; }\n\nh1 a, .h1 a,\nh2 a, .h2 a,\nh3 a, .h3 a,\nh4 a, .h4 a,\nh5 a, .h5 a,\nh6 a, .h6 a {\n color: inherit; }\n\np + h2,\np + h3,\np + h4,\np + h5,\np + h6,\nul + h2,\nul + h3,\nul + h4,\nul + h5,\nul + h6,\nol + h2,\nol + h3,\nol + h4,\nol + h5,\nol + h6,\ndl + h2,\ndl + h3,\ndl + h4,\ndl + h5,\ndl + h6,\nblockquote + h2,\nblockquote + h3,\nblockquote + h4,\nblockquote + h5,\nblockquote + h6,\nhr + h2,\nhr + h3,\nhr + h4,\nhr + h5,\nhr + h6,\npre + h2,\npre + h3,\npre + h4,\npre + h5,\npre + h6,\ntable + h2,\ntable + h3,\ntable + h4,\ntable + h5,\ntable + h6,\nform + h2,\nform + h3,\nform + h4,\nform + h5,\nform + h6,\nfigure + h2,\nfigure + h3,\nfigure + h4,\nfigure + h5,\nfigure + h6 {\n margin-top: 24px; }\n\nul,\nul ul,\nul ol,\nol,\nol ul,\nol ol {\n margin: 0 0 0 24px; }\n\nol ol li {\n list-style-type: lower-alpha; }\n\nol ol ol li {\n list-style-type: lower-roman; }\n\nnav ul,\nnav ol {\n margin: 0;\n list-style: none; }\n nav ul ul,\n nav ul ol,\n nav ol ul,\n nav ol ol {\n margin-left: 24px; }\n\ndl dt {\n font-weight: bold; }\n\ndd {\n margin-left: 24px; }\n\np, blockquote, hr, pre, ol, ul, dl, table, fieldset, figure, address, form {\n margin-bottom: 16px; }\n\nhr {\n border: none;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n margin-top: -1px; }\n\nblockquote {\n padding-left: 1rem;\n border-left: 4px solid rgba(0, 0, 0, 0.1);\n font-style: italic;\n color: rgba(49, 52, 57, 0.65); }\n blockquote p {\n margin-bottom: .5rem; }\n\ntime, cite, small, figcaption {\n font-size: 87.5%; }\n\ncite {\n opacity: .6; }\n\nabbr[title], dfn[title] {\n border-bottom: 1px dotted rgba(0, 0, 0, 0.5);\n cursor: help; }\n\nvar {\n font-size: 16px;\n opacity: .6;\n font-style: normal; }\n\nmark, code, samp, kbd {\n position: relative;\n top: -1px;\n padding: 4px 4px 2px 4px;\n display: inline-block;\n line-height: 1;\n color: rgba(49, 52, 57, 0.85); }\n\ncode {\n background: #e0e1e1; }\n\nmark {\n background: #f7ba45; }\n\nsamp {\n color: #fff;\n background: #1c86f2; }\n\nkbd {\n border: 1px solid rgba(0, 0, 0, 0.1); }\n\nsub,\nsup {\n font-size: x-small;\n line-height: 0;\n margin-left: 1rem/4;\n position: relative; }\n\nsup {\n top: 0; }\n\nsub {\n bottom: 1px; }\n\npre, code, samp, var, kbd {\n font-family: Consolas, Monaco, \"Courier New\", monospace; }\n\npre, code, samp, var, kbd, mark {\n font-size: 87.5%; }\n\npre,\npre code {\n background: #f8f8f8;\n padding: 0;\n top: 0;\n display: block;\n line-height: 20px;\n color: rgba(49, 52, 57, 0.85);\n overflow: none;\n white-space: pre-wrap; }\n\npre {\n padding: 1rem; }\n\nfigcaption {\n opacity: .6; }\n\nfigure figcaption {\n position: relative;\n top: -1rem/2; }\n\nfigure pre {\n background: none;\n border: 1px solid rgba(0, 0, 0, 0.1);\n border-radius: 4px; }\n\nfigure .video-container,\nfigure pre {\n margin-bottom: 8px; }\n\n.text-left {\n text-align: left; }\n\n.text-center {\n text-align: center; }\n\n.text-right {\n text-align: right; }\n\nul.unstyled {\n margin-left: 0; }\n\nul.unstyled,\nul.unstyled ul {\n list-style: none; }\n\n.monospace {\n font-family: Consolas, Monaco, \"Courier New\", monospace; }\n\n.upper {\n text-transform: uppercase; }\n\n.lower {\n text-transform: lowercase; }\n\n.italic {\n font-style: italic !important; }\n\n.strong {\n font-weight: bold !important; }\n\n.normal {\n font-weight: normal !important; }\n\n.muted {\n opacity: .55; }\n\na.muted {\n color: #0d0d0e; }\n\na.muted:hover {\n opacity: 1; }\n\n.black {\n color: #0d0d0e; }\n\n.smaller {\n font-size: 12px;\n line-height: 20px; }\n\n.small {\n font-size: 14px;\n line-height: 20px; }\n\n.big {\n font-size: 18px;\n line-height: 28px; }\n\n.large {\n font-size: 20px;\n line-height: 32px; }\n\n.end {\n margin-bottom: 0 !important; }\n\n.highlight {\n background-color: #edf2ff; }\n\n.nowrap,\n.nowrap td {\n white-space: nowrap; }\n\n@media (min-width: 1230px) and (max-width: 1024px) {\n .columns-2,\n .columns-3,\n .columns-4 {\n column-gap: 24px; }\n .columns-2 {\n column-count: 2; }\n .columns-3 {\n column-count: 3; }\n .columns-4 {\n column-count: 4; } }\n\n.row {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap; }\n @media (max-width: 1230px) {\n .row {\n flex-direction: column;\n flex-wrap: nowrap; } }\n .row.gutters,\n .row.gutters > .row {\n margin-left: -2%; }\n @media (max-width: 1230px) {\n .row.gutters,\n .row.gutters > .row {\n margin-left: 0; } }\n .row.gutters > .col,\n .row.gutters > .row > .col {\n margin-left: 2%; }\n @media (max-width: 1230px) {\n .row.gutters > .col,\n .row.gutters > .row > .col {\n margin-left: 0; } }\n .row.around {\n justify-content: space-around; }\n .row.between {\n justify-content: space-between; }\n .row.auto .col {\n flex-grow: 1; }\n\n.col-1 {\n width: 8.33333%; }\n\n.offset-1 {\n margin-left: 8.33333%; }\n\n.col-2 {\n width: 16.66667%; }\n\n.offset-2 {\n margin-left: 16.66667%; }\n\n.col-3 {\n width: 25%; }\n\n.offset-3 {\n margin-left: 25%; }\n\n.col-4 {\n width: 33.33333%; }\n\n.offset-4 {\n margin-left: 33.33333%; }\n\n.col-5 {\n width: 41.66667%; }\n\n.offset-5 {\n margin-left: 41.66667%; }\n\n.col-6 {\n width: 50%; }\n\n.offset-6 {\n margin-left: 50%; }\n\n.col-7 {\n width: 58.33333%; }\n\n.offset-7 {\n margin-left: 58.33333%; }\n\n.col-8 {\n width: 66.66667%; }\n\n.offset-8 {\n margin-left: 66.66667%; }\n\n.col-9 {\n width: 75%; }\n\n.offset-9 {\n margin-left: 75%; }\n\n.col-10 {\n width: 83.33333%; }\n\n.offset-10 {\n margin-left: 83.33333%; }\n\n.col-11 {\n width: 91.66667%; }\n\n.offset-11 {\n margin-left: 91.66667%; }\n\n.col-12 {\n width: 100%; }\n\n.offset-12 {\n margin-left: 100%; }\n\n.gutters > .col-1 {\n width: calc(8.33333% - 2%); }\n\n.gutters > .offset-1 {\n margin-left: calc(8.33333% + 2%) !important; }\n\n.gutters > .col-2 {\n width: calc(16.66667% - 2%); }\n\n.gutters > .offset-2 {\n margin-left: calc(16.66667% + 2%) !important; }\n\n.gutters > .col-3 {\n width: calc(25% - 2%); }\n\n.gutters > .offset-3 {\n margin-left: calc(25% + 2%) !important; }\n\n.gutters > .col-4 {\n width: calc(33.33333% - 2%); }\n\n.gutters > .offset-4 {\n margin-left: calc(33.33333% + 2%) !important; }\n\n.gutters > .col-5 {\n width: calc(41.66667% - 2%); }\n\n.gutters > .offset-5 {\n margin-left: calc(41.66667% + 2%) !important; }\n\n.gutters > .col-6 {\n width: calc(50% - 2%); }\n\n.gutters > .offset-6 {\n margin-left: calc(50% + 2%) !important; }\n\n.gutters > .col-7 {\n width: calc(58.33333% - 2%); }\n\n.gutters > .offset-7 {\n margin-left: calc(58.33333% + 2%) !important; }\n\n.gutters > .col-8 {\n width: calc(66.66667% - 2%); }\n\n.gutters > .offset-8 {\n margin-left: calc(66.66667% + 2%) !important; }\n\n.gutters > .col-9 {\n width: calc(75% - 2%); }\n\n.gutters > .offset-9 {\n margin-left: calc(75% + 2%) !important; }\n\n.gutters > .col-10 {\n width: calc(83.33333% - 2%); }\n\n.gutters > .offset-10 {\n margin-left: calc(83.33333% + 2%) !important; }\n\n.gutters > .col-11 {\n width: calc(91.66667% - 2%); }\n\n.gutters > .offset-11 {\n margin-left: calc(91.66667% + 2%) !important; }\n\n.gutters > .col-12 {\n width: calc(100% - 2%); }\n\n.gutters > .offset-12 {\n margin-left: calc(100% + 2%) !important; }\n\n@media (max-width: 1230px) {\n [class^='offset-'],\n [class*=' offset-'] {\n margin-left: 0; } }\n\n.first {\n order: -1; }\n\n.last {\n order: 1; }\n\n@media (max-width: 1230px) {\n .row .col {\n margin-left: 0;\n width: 100%; }\n .row.gutters .col {\n margin-bottom: 16px; }\n .first-sm {\n order: -1; }\n .last-sm {\n order: 1; } }\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n max-width: 100%;\n width: 100%;\n empty-cells: show;\n font-size: 15px;\n line-height: 24px; }\n\ntable caption {\n text-align: left;\n font-size: 14px;\n font-weight: 500;\n color: #676b72; }\n\nth {\n text-align: left;\n font-weight: 700;\n vertical-align: bottom; }\n\ntd {\n vertical-align: top; }\n\ntr.align-middle td,\ntd.align-middle {\n vertical-align: middle; }\n\nth,\ntd {\n padding: 1rem 1rem;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05); }\n th:first-child,\n td:first-child {\n padding-left: 0; }\n th:last-child,\n td:last-child {\n padding-right: 0; }\n\ntfoot th,\ntfoot td {\n color: rgba(49, 52, 57, 0.5); }\n\ntable.bordered td,\ntable.bordered th {\n border: 1px solid rgba(0, 0, 0, 0.05); }\n\ntable.striped tr:nth-child(odd) td {\n background: #f8f8f8; }\n\ntable.bordered td:first-child,\ntable.bordered th:first-child,\ntable.striped td:first-child,\ntable.striped th:first-child {\n padding-left: 1rem; }\n\ntable.bordered td:last-child,\ntable.bordered th:last-child,\ntable.striped td:last-child,\ntable.striped th:last-child {\n padding-right: 1rem; }\n\ntable.unstyled td,\ntable.unstyled th {\n border: none;\n padding: 0; }\n\nfieldset {\n font-family: inherit;\n border: 1px solid rgba(0, 0, 0, 0.1);\n padding: 2rem;\n margin-bottom: 2rem;\n margin-top: 2rem; }\n\nlegend {\n font-weight: bold;\n font-size: 12px;\n text-transform: uppercase;\n padding: 0 1rem;\n margin-left: -1rem;\n top: 2px;\n position: relative;\n line-height: 0; }\n\ninput,\ntextarea,\nselect {\n display: block;\n width: 100%;\n font-family: inherit;\n font-size: 15px;\n height: 40px;\n outline: none;\n vertical-align: middle;\n background-color: #fff;\n border: 1px solid #d4d4d4;\n border-radius: 3px;\n box-shadow: none;\n padding: 0 12px; }\n\ninput.small,\ntextarea.small,\nselect.small {\n height: 36px;\n font-size: 13px;\n padding: 0 12px;\n border-radius: 3px; }\n\ninput.big,\ntextarea.big,\nselect.big {\n height: 48px;\n font-size: 17px;\n padding: 0 12px;\n border-radius: 3px; }\n\ninput:focus,\ntextarea:focus,\nselect:focus {\n outline: none;\n background-color: #fff;\n border-color: #1c86f2;\n box-shadow: 0 0 1px #1c86f2 inset; }\n\ninput.error,\ntextarea.error,\nselect.error {\n background-color: rgba(240, 60, 105, 0.1);\n border: 1px solid #f583a0; }\n input.error:focus,\n textarea.error:focus,\n select.error:focus {\n border-color: #f03c69;\n box-shadow: 0 0 1px #f03c69 inset; }\n\ninput.success,\ntextarea.success,\nselect.success {\n background-color: rgba(53, 190, 177, 0.1);\n border: 1px solid #6ad5cb; }\n input.success:focus,\n textarea.success:focus,\n select.success:focus {\n border-color: #35beb1;\n box-shadow: 0 0 1px #35beb1 inset; }\n\ninput:disabled, input.disabled,\ntextarea:disabled,\ntextarea.disabled,\nselect:disabled,\nselect.disabled {\n resize: none;\n opacity: 0.6;\n cursor: default;\n font-style: italic;\n color: rgba(0, 0, 0, 0.5); }\n\nselect {\n -webkit-appearance: none;\n background-image: url('data:image/svg+xml;utf8,');\n background-repeat: no-repeat;\n background-position: right 1rem center; }\n\nselect[multiple] {\n background-image: none;\n height: auto;\n padding: .5rem .75rem; }\n\ntextarea {\n height: auto;\n padding: 8px 12px;\n line-height: 24px;\n vertical-align: top; }\n\ninput[type=\"file\"] {\n width: auto;\n border: none;\n padding: 0;\n height: auto;\n background: none;\n box-shadow: none;\n display: inline-block; }\n\ninput[type=\"search\"],\ninput.search {\n background-repeat: no-repeat;\n background-position: 8px 53%;\n background-image: url('data:image/svg+xml;utf8,');\n padding-left: 32px; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n display: inline-block;\n width: auto;\n height: auto;\n padding: 0; }\n\nlabel {\n display: block;\n color: #313439;\n margin-bottom: 4px;\n font-size: 15px; }\n label.checkbox,\n label .desc,\n label .success,\n label .error {\n text-transform: none;\n font-weight: normal; }\n label.checkbox {\n font-size: 16px;\n line-height: 24px;\n cursor: pointer;\n color: inherit; }\n label.checkbox input {\n margin-top: 0; }\n\n.form-checkboxes label.checkbox {\n display: inline-block;\n margin-right: 16px; }\n\n.req {\n position: relative;\n top: 1px;\n font-weight: bold;\n color: #f03c69;\n font-size: 110%; }\n\n.desc {\n color: rgba(49, 52, 57, 0.5);\n font-size: 12px;\n line-height: 20px; }\n\nspan.desc {\n margin-left: 4px; }\n\ndiv.desc {\n margin-top: 4px;\n margin-bottom: -8px; }\n\n.form-buttons button,\n.form-buttons .button {\n margin-right: 8px; }\n\nform,\n.form-item {\n margin-bottom: 2rem; }\n\n.form > .form-item:last-child {\n margin-bottom: 0; }\n\n.form .row:last-child .form-item {\n margin-bottom: 0; }\n\n.form span.success,\n.form span.error {\n font-size: 12px;\n line-height: 20px;\n margin-left: 4px; }\n\n.form-inline input,\n.form-inline textarea,\n.form-inline select {\n display: inline-block;\n width: auto; }\n\n.append,\n.prepend {\n display: flex; }\n .append input,\n .prepend input {\n flex: 1; }\n .append .button,\n .append span,\n .prepend .button,\n .prepend span {\n flex-shrink: 0; }\n .append span,\n .prepend span {\n display: flex;\n flex-direction: column;\n justify-content: center;\n font-weight: normal;\n border: 1px solid #d4d4d4;\n background-color: #f8f8f8;\n padding: 0 .875rem;\n color: rgba(0, 0, 0, 0.5);\n font-size: 12px;\n white-space: nowrap; }\n\n.prepend input {\n border-radius: 0 3px 3px 0; }\n\n.prepend .button {\n margin-right: -1px;\n border-radius: 3px 0 0 3px !important; }\n\n.prepend span {\n border-right: none;\n border-radius: 3px 0 0 3px; }\n\n.append input {\n border-radius: 3px 0 0 3px; }\n\n.append .button {\n margin-left: -1px;\n border-radius: 0 3px 3px 0 !important; }\n\n.append span {\n border-left: none;\n border-radius: 0 3px 3px 0; }\n\nbutton,\n.button {\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n font-size: 15px;\n color: #fff;\n background-color: #1c86f2;\n border-radius: 3px;\n min-height: 40px;\n padding: 8px 20px;\n font-weight: 500;\n text-decoration: none;\n cursor: pointer;\n display: inline-block;\n line-height: 20px;\n border: 1px solid transparent;\n vertical-align: middle;\n -webkit-appearance: none; }\n button i,\n .button i {\n position: relative;\n top: 1px;\n margin: 0 2px; }\n\ninput[type=\"submit\"] {\n width: auto; }\n\nbutton:hover,\n.button:hover {\n outline: none;\n text-decoration: none;\n color: #fff;\n background-color: #4ca0f5; }\n\n.button:disabled,\n.button.disabled {\n cursor: default;\n font-style: normal;\n color: rgba(255, 255, 255, 0.7);\n background-color: rgba(28, 134, 242, 0.7); }\n\n.button.small {\n font-size: 13px;\n min-height: 36px;\n padding: 6px 20px;\n border-radius: 3px; }\n\n.button.big {\n font-size: 17px;\n min-height: 48px;\n padding: 13px 24px;\n border-radius: 3px; }\n\n.button.large {\n font-size: 19px;\n min-height: 56px;\n padding: 20px 36px;\n border-radius: 3px; }\n\n.button.outline {\n background: none;\n border-width: 2px;\n border-color: #1c86f2;\n color: #1c86f2; }\n .button.outline:hover {\n background: none;\n color: rgba(28, 134, 242, 0.6);\n border-color: rgba(28, 134, 242, 0.5); }\n .button.outline:disabled, .button.outline.disabled {\n background: none;\n color: rgba(28, 134, 242, 0.7);\n border-color: rgba(28, 134, 242, 0.5); }\n\n.button.inverted {\n color: #000;\n background-color: #fff; }\n .button.inverted:hover {\n color: #000;\n background-color: white; }\n .button.inverted:disabled, .button.inverted.disabled {\n color: rgba(0, 0, 0, 0.7);\n background-color: rgba(255, 255, 255, 0.7); }\n .button.inverted.outline {\n background: none;\n color: #fff;\n border-color: #fff; }\n .button.inverted.outline:hover {\n color: rgba(255, 255, 255, 0.6);\n border-color: rgba(255, 255, 255, 0.5); }\n .button.inverted.outline:disabled, .button.inverted.outline.disabled {\n background: none;\n color: rgba(255, 255, 255, 0.7);\n border-color: rgba(255, 255, 255, 0.5); }\n .button.inverted:hover {\n opacity: .7; }\n\n.button.round {\n border-radius: 56px; }\n\n.button.raised {\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); }\n\n.button.upper {\n text-transform: uppercase;\n letter-spacing: .04em;\n font-size: 13px; }\n .button.upper.small {\n font-size: 11px; }\n .button.upper.big {\n font-size: 13px; }\n .button.upper.large {\n font-size: 15px; }\n\n.button.secondary {\n color: #fff;\n background-color: #313439; }\n .button.secondary:hover {\n color: #fff;\n background-color: #606670; }\n .button.secondary:disabled, .button.secondary.disabled {\n color: rgba(255, 255, 255, 0.7);\n background-color: rgba(49, 52, 57, 0.7); }\n .button.secondary.outline {\n background: none;\n color: #313439;\n border-color: #313439; }\n .button.secondary.outline:hover {\n color: rgba(49, 52, 57, 0.6);\n border-color: rgba(49, 52, 57, 0.5); }\n .button.secondary.outline:disabled, .button.secondary.outline.disabled {\n background: none;\n color: rgba(49, 52, 57, 0.7);\n border-color: rgba(49, 52, 57, 0.5); }\n\n.label {\n display: inline-block;\n font-size: 13px;\n background: #e0e1e1;\n line-height: 18px;\n padding: 0 10px;\n font-weight: 500;\n color: #313439;\n border: 1px solid transparent;\n vertical-align: middle;\n text-decoration: none;\n border-radius: 4px; }\n .label a,\n .label a:hover {\n color: inherit;\n text-decoration: none; }\n\n.label.big {\n font-size: 14px;\n line-height: 24px;\n padding: 0 12px; }\n\n.label.upper {\n text-transform: uppercase;\n font-size: 11px; }\n\n.label.outline {\n background: none;\n border-color: #bdbdbd; }\n\n.label.badge {\n text-align: center;\n border-radius: 64px;\n padding: 0 6px; }\n .label.badge.big {\n padding: 0 8px; }\n\n.label.tag {\n padding: 0;\n background: none;\n border: none;\n text-transform: uppercase;\n font-size: 11px; }\n .label.tag.big {\n font-size: 13px; }\n\n.label.success {\n background: #35beb1;\n color: #fff; }\n .label.success.tag, .label.success.outline {\n background: none;\n border-color: #35beb1;\n color: #35beb1; }\n\n.label.error {\n background: #f03c69;\n color: #fff; }\n .label.error.tag, .label.error.outline {\n background: none;\n border-color: #f03c69;\n color: #f03c69; }\n\n.label.warning {\n background: #f7ba45;\n color: #0d0d0e; }\n .label.warning.tag, .label.warning.outline {\n background: none;\n border-color: #f7ba45;\n color: #f7ba45; }\n\n.label.focus {\n background: #1c86f2;\n color: #fff; }\n .label.focus.tag, .label.focus.outline {\n background: none;\n border-color: #1c86f2;\n color: #1c86f2; }\n\n.label.black {\n background: #0d0d0e;\n color: #fff; }\n .label.black.tag, .label.black.outline {\n background: none;\n border-color: #0d0d0e;\n color: #0d0d0e; }\n\n.label.inverted {\n background: #fff;\n color: #0d0d0e; }\n .label.inverted.tag, .label.inverted.outline {\n background: none;\n border-color: #fff;\n color: #fff; }\n\n.breadcrumbs {\n font-size: 14px;\n margin-bottom: 24px; }\n .breadcrumbs ul {\n display: flex;\n align-items: center; }\n .breadcrumbs.push-center ul {\n justify-content: center; }\n .breadcrumbs span,\n .breadcrumbs a {\n font-style: normal;\n padding: 0 10px;\n display: inline-block;\n white-space: nowrap; }\n .breadcrumbs li:after {\n display: inline-block;\n content: '/';\n color: rgba(0, 0, 0, 0.3); }\n .breadcrumbs li:last-child:after {\n display: none; }\n .breadcrumbs li:first-child span,\n .breadcrumbs li:first-child a {\n padding-left: 0; }\n .breadcrumbs li.active a {\n color: #313439;\n text-decoration: none;\n cursor: text; }\n\n.pagination {\n margin: 24px 0;\n font-size: 14px; }\n .pagination ul {\n display: flex;\n margin: 0; }\n .pagination.align-center ul {\n justify-content: center; }\n .pagination span,\n .pagination a {\n border-radius: 3px;\n display: inline-block;\n padding: 8px 12px;\n line-height: 1;\n white-space: nowrap;\n border: 1px solid transparent; }\n .pagination a {\n text-decoration: none;\n color: #313439; }\n .pagination a:hover {\n color: rgba(0, 0, 0, 0.5);\n border-color: #e0e1e1; }\n .pagination span,\n .pagination li.active a {\n color: rgba(0, 0, 0, 0.5);\n border-color: #e0e1e1;\n cursor: text; }\n .pagination.upper {\n font-size: 12px; }\n\n.pager span {\n line-height: 24px; }\n\n.pager span,\n.pager a {\n padding-left: 16px;\n padding-right: 16px;\n border-radius: 64px;\n border-color: rgba(0, 0, 0, 0.1); }\n\n.pager li {\n flex-basis: 50%; }\n\n.pager li.next {\n text-align: right; }\n\n.pager.align-center li {\n flex-basis: auto;\n margin-left: 4px;\n margin-right: 4px; }\n\n.pager.flat span,\n.pager.flat a {\n border: none;\n display: block;\n padding: 0; }\n\n.pager.flat a {\n font-weight: bold; }\n .pager.flat a:hover {\n background: none;\n text-decoration: underline; }\n\n@media (max-width: 1230px) {\n .pager.flat ul {\n flex-direction: column; }\n .pager.flat li {\n flex-basis: 100%;\n margin-bottom: 8px;\n text-align: left; } }\n\n@font-face {\n font-family: 'Kube';\n src: url(\"data:application/x-font-ttf;charset=utf-8;base64,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\") format(\"truetype\");\n font-weight: normal;\n font-style: normal; }\n\n[class^=\"kube-\"], [class*=\" kube-\"], .close, .caret {\n /* use !important to prevent issues with browser extensions that change fonts */\n font-family: 'Kube' !important;\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n line-height: 1;\n /* Better Font Rendering =========== */\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale; }\n\n.kube-calendar:before {\n content: \"\\e900\"; }\n\n.caret.down:before,\n.kube-caret-down:before {\n content: \"\\e901\"; }\n\n.caret.left:before,\n.kube-caret-left:before {\n content: \"\\e902\"; }\n\n.caret.right:before,\n.kube-caret-right:before {\n content: \"\\e903\"; }\n\n.caret.up:before,\n.kube-caret-up:before {\n content: \"\\e904\"; }\n\n.close:before,\n.kube-close:before {\n content: \"\\e905\"; }\n\n.kube-menu:before {\n content: \"\\e906\"; }\n\n.kube-search:before {\n content: \"\\e907\"; }\n\n.gutters .column.push-left,\n.push-left {\n margin-right: auto; }\n\n.gutters .column.push-right,\n.push-right {\n margin-left: auto; }\n\n.gutters .column.push-center,\n.push-center {\n margin-left: auto;\n margin-right: auto; }\n\n.gutters .column.push-middle,\n.push-middle {\n margin-top: auto;\n margin-bottom: auto; }\n\n.push-bottom {\n margin-top: auto; }\n\n@media (max-width: 1230px) {\n .gutters .column.push-left-sm,\n .push-left-sm {\n margin-left: 0; }\n .gutters .column.push-center-sm,\n .push-center-sm {\n margin-left: auto;\n margin-right: auto; }\n .push-top-sm {\n margin-top: 0; } }\n\n.align-middle {\n align-items: center; }\n\n.align-right {\n justify-content: flex-end; }\n\n.align-center {\n justify-content: center; }\n\n@media (max-width: 1230px) {\n .align-left-sm {\n justify-content: flex-start; } }\n\n.float-right {\n float: right; }\n\n.float-left {\n float: left; }\n\n@media (max-width: 1230px) {\n .float-right {\n float: none; }\n .float-left {\n float: none; } }\n\n.fixed {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 100;\n width: 100%; }\n\n.w5 {\n width: 5%; }\n\n.w10 {\n width: 10%; }\n\n.w15 {\n width: 15%; }\n\n.w20 {\n width: 20%; }\n\n.w25 {\n width: 25%; }\n\n.w30 {\n width: 30%; }\n\n.w35 {\n width: 35%; }\n\n.w40 {\n width: 40%; }\n\n.w45 {\n width: 45%; }\n\n.w50 {\n width: 50%; }\n\n.w55 {\n width: 55%; }\n\n.w60 {\n width: 60%; }\n\n.w65 {\n width: 65%; }\n\n.w70 {\n width: 70%; }\n\n.w75 {\n width: 75%; }\n\n.w80 {\n width: 80%; }\n\n.w85 {\n width: 85%; }\n\n.w90 {\n width: 90%; }\n\n.w95 {\n width: 95%; }\n\n.w100 {\n width: 100%; }\n\n.w-auto {\n width: auto; }\n\n.w-small {\n width: 480px; }\n\n.w-medium {\n width: 600px; }\n\n.w-big {\n width: 740px; }\n\n.w-large {\n width: 840px; }\n\n@media (max-width: 1230px) {\n .w-auto-sm {\n width: auto; }\n .w100-sm,\n .w-small,\n .w-medium,\n .w-big,\n .w-large {\n width: 100%; } }\n\n.max-w5 {\n max-width: 5%; }\n\n.max-w10 {\n max-width: 10%; }\n\n.max-w15 {\n max-width: 15%; }\n\n.max-w20 {\n max-width: 20%; }\n\n.max-w25 {\n max-width: 25%; }\n\n.max-w30 {\n max-width: 30%; }\n\n.max-w35 {\n max-width: 35%; }\n\n.max-w40 {\n max-width: 40%; }\n\n.max-w45 {\n max-width: 45%; }\n\n.max-w50 {\n max-width: 50%; }\n\n.max-w55 {\n max-width: 55%; }\n\n.max-w60 {\n max-width: 60%; }\n\n.max-w65 {\n max-width: 65%; }\n\n.max-w70 {\n max-width: 70%; }\n\n.max-w75 {\n max-width: 75%; }\n\n.max-w80 {\n max-width: 80%; }\n\n.max-w85 {\n max-width: 85%; }\n\n.max-w90 {\n max-width: 90%; }\n\n.max-w95 {\n max-width: 95%; }\n\n.max-w100 {\n max-width: 100%; }\n\n.max-w-small {\n max-width: 480px; }\n\n.max-w-medium {\n max-width: 600px; }\n\n.max-w-big {\n max-width: 740px; }\n\n.max-w-large {\n max-width: 840px; }\n\n@media (max-width: 1230px) {\n .max-w-auto-sm,\n .max-w-small,\n .max-w-medium,\n .max-w-big,\n .max-w-large {\n max-width: auto; } }\n\n.min-w5 {\n min-width: 5%; }\n\n.min-w10 {\n min-width: 10%; }\n\n.min-w15 {\n min-width: 15%; }\n\n.min-w20 {\n min-width: 20%; }\n\n.min-w25 {\n min-width: 25%; }\n\n.min-w30 {\n min-width: 30%; }\n\n.min-w35 {\n min-width: 35%; }\n\n.min-w40 {\n min-width: 40%; }\n\n.min-w45 {\n min-width: 45%; }\n\n.min-w50 {\n min-width: 50%; }\n\n.min-w55 {\n min-width: 55%; }\n\n.min-w60 {\n min-width: 60%; }\n\n.min-w65 {\n min-width: 65%; }\n\n.min-w70 {\n min-width: 70%; }\n\n.min-w75 {\n min-width: 75%; }\n\n.min-w80 {\n min-width: 80%; }\n\n.min-w85 {\n min-width: 85%; }\n\n.min-w90 {\n min-width: 90%; }\n\n.min-w95 {\n min-width: 95%; }\n\n.min-w100 {\n min-width: 100%; }\n\n.h25 {\n height: 25%; }\n\n.h50 {\n height: 50%; }\n\n.h100 {\n height: 100%; }\n\n.group:after {\n content: '';\n display: table;\n clear: both; }\n\n.flex {\n display: flex; }\n\n@media (max-width: 1230px) {\n .flex-column-sm {\n flex-direction: column; }\n .flex-w100-sm {\n flex: 0 0 100%; } }\n @media (max-width: 1230px) and (max-width: 1230px) {\n .flex-w100-sm {\n flex: 0 0 100% !important; } }\n\n.invisible {\n visibility: hidden; }\n\n.visible {\n visibility: visible; }\n\n.display-block {\n display: block; }\n\n.hide {\n display: none !important; }\n\n@media (max-width: 1230px) {\n .hide-sm {\n display: none !important; } }\n\n@media (min-width: 1230px) {\n .show-sm {\n display: none !important; } }\n\n@media print {\n .hide-print {\n display: none !important; }\n .show-print {\n display: block !important; } }\n\n.no-scroll {\n overflow: hidden;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100% !important; }\n\n.scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll; }\n\n.video-container {\n height: 0;\n padding-bottom: 56.25%;\n position: relative;\n margin-bottom: 16px; }\n .video-container iframe,\n .video-container object,\n .video-container embed {\n position: absolute;\n top: 0;\n left: 0;\n width: 100% !important;\n height: 100% !important; }\n\n.close {\n display: inline-block;\n min-height: 16px;\n min-width: 16px;\n line-height: 16px;\n vertical-align: middle;\n text-align: center;\n font-size: 12px;\n opacity: .6; }\n .close:hover {\n opacity: 1; }\n .close.small {\n font-size: 8px; }\n .close.big {\n font-size: 18px; }\n .close.white {\n color: #fff; }\n\n.caret {\n display: inline-block; }\n\n.button .caret {\n margin-right: -8px; }\n\n.overlay {\n position: fixed;\n z-index: 200;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(255, 255, 255, 0.95); }\n .overlay > .close {\n position: fixed;\n top: 1rem;\n right: 1rem; }\n\n@media print {\n * {\n background: transparent !important;\n color: black !important;\n box-shadow: none !important;\n text-shadow: none !important; }\n a,\n a:visited {\n text-decoration: underline; }\n pre, blockquote {\n border: 1px solid #999;\n page-break-inside: avoid; }\n p, h2, h3 {\n orphans: 3;\n widows: 3; }\n thead {\n display: table-header-group; }\n tr, img {\n page-break-inside: avoid; }\n img {\n max-width: 100% !important; }\n h2, h3, h4 {\n page-break-after: avoid; }\n @page {\n margin: 0.5cm; } }\n\n@keyframes slideUp {\n to {\n height: 0;\n padding-top: 0;\n padding-bottom: 0; } }\n\n@keyframes slideDown {\n from {\n height: 0;\n padding-top: 0;\n padding-bottom: 0; } }\n\n@keyframes fadeIn {\n from {\n opacity: 0; }\n to {\n opacity: 1; } }\n\n@keyframes fadeOut {\n from {\n opacity: 1; }\n to {\n opacity: 0; } }\n\n@keyframes flipIn {\n from {\n opacity: 0;\n transform: scaleY(0); }\n to {\n opacity: 1;\n transform: scaleY(1); } }\n\n@keyframes flipOut {\n from {\n opacity: 1;\n transform: scaleY(1); }\n to {\n opacity: 0;\n transform: scaleY(0); } }\n\n@keyframes zoomIn {\n from {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3); }\n 50% {\n opacity: 1; } }\n\n@keyframes zoomOut {\n from {\n opacity: 1; }\n 50% {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3); }\n to {\n opacity: 0; } }\n\n@keyframes slideInRight {\n from {\n transform: translate3d(100%, 0, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideInLeft {\n from {\n transform: translate3d(-100%, 0, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideInDown {\n from {\n transform: translate3d(0, -100%, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes slideOutLeft {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(-100%, 0, 0); } }\n\n@keyframes slideOutRight {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(100%, 0, 0); } }\n\n@keyframes slideOutUp {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(0, -100%, 0); } }\n\n@keyframes rotate {\n from {\n transform: rotate(0deg); }\n to {\n transform: rotate(360deg); } }\n\n@keyframes pulse {\n from {\n transform: scale3d(1, 1, 1); }\n 50% {\n transform: scale3d(1.03, 1.03, 1.03); }\n to {\n transform: scale3d(1, 1, 1); } }\n\n@keyframes shake {\n 15% {\n transform: translateX(0.5rem); }\n 30% {\n transform: translateX(-0.4rem); }\n 45% {\n transform: translateX(0.3rem); }\n 60% {\n transform: translateX(-0.2rem); }\n 75% {\n transform: translateX(0.1rem); }\n 90% {\n transform: translateX(0); }\n 90% {\n transform: translateX(0); } }\n\n.fadeIn {\n animation: fadeIn 250ms; }\n\n.fadeOut {\n animation: fadeOut 250ms; }\n\n.zoomIn {\n animation: zoomIn 200ms; }\n\n.zoomOut {\n animation: zoomOut 500ms; }\n\n.slideInRight {\n animation: slideInRight 500ms; }\n\n.slideInLeft {\n animation: slideInLeft 500ms; }\n\n.slideInDown {\n animation: slideInDown 500ms; }\n\n.slideOutLeft {\n animation: slideOutLeft 500ms; }\n\n.slideOutRight {\n animation: slideOutRight 500ms; }\n\n.slideOutUp {\n animation: slideOutUp 500ms; }\n\n.slideUp {\n overflow: hidden;\n animation: slideUp 200ms ease-in-out; }\n\n.slideDown {\n overflow: hidden;\n animation: slideDown 80ms ease-in-out; }\n\n.flipIn {\n animation: flipIn 250ms cubic-bezier(0.5, -0.5, 0.5, 1.5); }\n\n.flipOut {\n animation: flipOut 500ms cubic-bezier(0.5, -0.5, 0.5, 1.5); }\n\n.rotate {\n animation: rotate 500ms; }\n\n.pulse {\n animation: pulse 250ms 2; }\n\n.shake {\n animation: shake 500ms; }\n\n.dropdown {\n position: absolute;\n z-index: 100;\n top: 0;\n right: 0;\n width: 280px;\n color: #000;\n font-size: 15px;\n background: #fff;\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);\n border-radius: 3px;\n max-height: 300px;\n margin: 0;\n padding: 0;\n overflow: hidden; }\n .dropdown.dropdown-mobile {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n max-height: none;\n border: none; }\n .dropdown .close {\n margin: 20px auto; }\n .dropdown.open {\n overflow: auto; }\n .dropdown ul {\n list-style: none;\n margin: 0; }\n .dropdown ul li {\n border-bottom: 1px solid rgba(0, 0, 0, 0.07); }\n .dropdown ul li:last-child {\n border-bottom: none; }\n .dropdown ul a {\n display: block;\n padding: 12px;\n text-decoration: none;\n color: #000; }\n .dropdown ul a:hover {\n background: rgba(0, 0, 0, 0.05); }\n\n.message {\n font-family: Consolas, Monaco, \"Courier New\", monospace;\n font-size: 14px;\n line-height: 20px;\n background: #e0e1e1;\n color: #313439;\n padding: 1rem;\n padding-right: 2.5em;\n padding-bottom: .75rem;\n margin-bottom: 24px;\n position: relative; }\n .message a {\n color: inherit; }\n .message h2,\n .message h3,\n .message h4,\n .message h5,\n .message h6 {\n margin-bottom: 0; }\n .message .close {\n position: absolute;\n right: 1rem;\n top: 1.1rem; }\n\n.message.error {\n background: #f03c69;\n color: #fff; }\n\n.message.success {\n background: #35beb1;\n color: #fff; }\n\n.message.warning {\n background: #f7ba45; }\n\n.message.focus {\n background: #1c86f2;\n color: #fff; }\n\n.message.black {\n background: #0d0d0e;\n color: #fff; }\n\n.message.inverted {\n background: #fff; }\n\n.modal-box {\n position: fixed;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n overflow-x: hidden;\n overflow-y: auto;\n z-index: 200; }\n\n.modal {\n position: relative;\n margin: auto;\n margin-top: 16px;\n padding: 0;\n background: #fff;\n box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);\n border-radius: 8px;\n color: #000; }\n @media (max-width: 1230px) {\n .modal input,\n .modal textarea {\n font-size: 16px; } }\n .modal .close {\n position: absolute;\n top: 18px;\n right: 16px;\n opacity: .3; }\n .modal .close:hover {\n opacity: 1; }\n\n.modal-header {\n padding: 24px 32px;\n font-size: 18px;\n font-weight: bold;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05); }\n .modal-header:empty {\n display: none; }\n\n.modal-body {\n padding: 36px 56px; }\n\n@media (max-width: 1230px) {\n .modal-header,\n .modal-body {\n padding: 24px; } }\n\n.offcanvas {\n background: #fff;\n position: fixed;\n padding: 24px;\n height: 100%;\n top: 0;\n left: 0;\n z-index: 300;\n overflow-y: scroll; }\n\n.offcanvas .close {\n position: absolute;\n top: 8px;\n right: 8px; }\n\n.offcanvas-left {\n border-right: 1px solid rgba(0, 0, 0, 0.1); }\n\n.offcanvas-right {\n left: auto;\n right: 0;\n border-left: 1px solid rgba(0, 0, 0, 0.1); }\n\n.offcanvas-push-body {\n position: relative; }\n\n.tabs {\n margin-bottom: 24px;\n font-size: 14px; }\n .tabs li em,\n .tabs li.active a {\n color: #313439;\n border: 1px solid rgba(0, 0, 0, 0.1);\n cursor: default;\n text-decoration: none;\n background: none; }\n .tabs em,\n .tabs a {\n position: relative;\n top: 1px;\n font-style: normal;\n display: block;\n padding: .5rem 1rem;\n border: 1px solid transparent;\n color: rgba(0, 0, 0, 0.5);\n text-decoration: none; }\n .tabs a:hover {\n -moz-transition: all linear 0.2s;\n transition: all linear 0.2s;\n color: #313439;\n text-decoration: underline;\n background-color: #e0e1e1; }\n\n@media (min-width: 1230px) {\n .tabs ul {\n display: flex;\n margin-top: -1px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1); }\n .tabs li em,\n .tabs li.active a {\n border-bottom: 1px solid #fff; } }\n",".mg-active-datapoint {\n fill: black;\n font-size: 0.9rem;\n font-weight: 400;\n opacity: 0.8;\n}\n\n.mg-area1-color {\n fill: #0000ff;\n}\n\n.mg-area2-color {\n fill: #05b378;\n}\n\n.mg-area3-color {\n fill: #db4437;\n}\n\n.mg-area4-color {\n fill: #f8b128;\n}\n\n.mg-area5-color {\n fill: #5c5c5c;\n}\n\ntext.mg-barplot-group-label {\n font-weight:900;\n}\n\n.mg-barplot rect.mg-bar {\n shape-rendering: auto;\n}\n\n.mg-barplot rect.mg-bar.default-bar {\n fill: #b6b6fc;\n}\n\n.mg-barplot rect.mg-bar.default-active {\n fill: #9e9efc;\n}\n\n.mg-barplot .mg-bar-prediction {\n fill: #5b5b5b;\n}\n\n.mg-barplot .mg-bar-baseline {\n stroke: #5b5b5b;\n stroke-width: 2;\n}\n\n.mg-bar-target-element {\n font-size:11px;\n padding-left:5px;\n padding-right:5px;\n font-weight:300;\n}\n\n.mg-baselines line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-baselines text {\n fill: black;\n font-size: 0.9rem;\n opacity: 0.6;\n stroke: none;\n}\n\n.mg-baselines-small text {\n font-size: 0.6rem;\n}\n\n.mg-category-guides line {\n stroke: #b3b2b2;\n}\n\n.mg-header {\n cursor: default;\n font-size: 1.2rem;\n}\n\n.mg-header .mg-chart-description {\n fill: #ccc;\n font-family: FontAwesome;\n font-size: 1.2rem;\n}\n\n.mg-header .mg-warning {\n fill: #ccc;\n font-family: FontAwesome;\n font-size: 1.2rem;\n}\n\n.mg-points circle {\n opacity: 0.65;\n}\n\n.mg-popover {\n font-size: 0.95rem;\n}\n\n.mg-popover-content {\n cursor: auto;\n line-height: 17px;\n}\n\n.mg-data-table {\n margin-top: 30px;\n}\n\n.mg-data-table thead tr th {\n border-bottom: 1px solid darkgray;\n cursor: default;\n font-size: 1.1rem;\n font-weight: normal;\n padding: 5px 5px 8px 5px;\n text-align: right;\n}\n\n.mg-data-table thead tr th .fa {\n color: #ccc;\n padding-left: 4px;\n}\n\n.mg-data-table thead tr th .popover {\n font-size: 1rem;\n font-weight: normal;\n}\n\n.mg-data-table .secondary-title {\n color: darkgray;\n}\n\n.mg-data-table tbody tr td {\n margin: 2px;\n padding: 5px;\n vertical-align: top;\n}\n\n.mg-data-table tbody tr td.table-text {\n opacity: 0.8;\n padding-left: 30px;\n}\n\n.mg-y-axis line.mg-extended-yax-ticks {\n opacity: 0.4;\n}\n\n.mg-x-axis line.mg-extended-xax-ticks {\n opacity: 0.4;\n}\n\n.mg-histogram .axis path,\n.mg-histogram .axis line {\n fill: none;\n opacity: 0.7;\n shape-rendering: auto;\n stroke: #ccc;\n}\n\ntspan.hist-symbol {\n fill: #9e9efc;\n}\n\n.mg-histogram .mg-bar rect {\n fill: #b6b6fc;\n shape-rendering: auto;\n}\n\n.mg-histogram .mg-bar rect.active {\n fill: #9e9efc;\n}\n\n.mg-least-squares-line {\n stroke: red;\n stroke-width: 1px;\n}\n\n.mg-lowess-line {\n fill: none;\n stroke: red;\n}\n\n.mg-line1-color {\n stroke: #4040e8;\n}\n\n.mg-hover-line1-color {\n fill: #4040e8;\n}\n\n.mg-line2-color {\n stroke: #05b378;\n}\n\n.mg-hover-line2-color {\n fill: #05b378;\n}\n\n.mg-line3-color {\n stroke: #db4437;\n}\n\n.mg-hover-line3-color {\n fill: #db4437;\n}\n\n.mg-line4-color {\n stroke: #f8b128;\n}\n\n.mg-hover-line4-color {\n fill: #f8b128;\n}\n\n.mg-line5-color {\n stroke: #5c5c5c;\n}\n\n.mg-hover-line5-color {\n fill: #5c5c5c;\n}\n\n.mg-line-legend text {\n font-size: 0.9rem;\n font-weight: 300;\n stroke: none;\n}\n\n.mg-line1-legend-color {\n color: #4040e8;\n fill: #4040e8;\n}\n\n.mg-line2-legend-color {\n color: #05b378;\n fill: #05b378;\n}\n\n.mg-line3-legend-color {\n color: #db4437;\n fill: #db4437;\n}\n\n.mg-line4-legend-color {\n color: #f8b128;\n fill: #f8b128;\n}\n\n.mg-line5-legend-color {\n color: #5c5c5c;\n fill: #5c5c5c;\n}\n\n.mg-main-area-solid svg .mg-main-area {\n fill: #ccccff;\n opacity: 1;\n}\n\n.mg-markers line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-markers text {\n fill: black;\n font-size: 0.8rem;\n opacity: 0.6;\n}\n\n.mg-missing-text {\n opacity: 0.9;\n}\n\n.mg-missing-background {\n stroke: blue;\n fill: none;\n stroke-dasharray: 10,5;\n stroke-opacity: 0.05;\n stroke-width: 2;\n}\n\n.mg-missing .mg-main-line {\n opacity: 0.1;\n}\n\n.mg-missing .mg-main-area {\n opacity: 0.03;\n}\n\npath.mg-main-area {\n opacity: 0.2;\n stroke: none;\n}\n\npath.mg-confidence-band {\n fill: #ccc;\n opacity: 0.4;\n stroke: none;\n}\n\npath.mg-main-line {\n fill: none;\n opacity: 0.8;\n stroke-width: 1.1px;\n}\n\n.mg-points circle {\n fill-opacity: 0.4;\n stroke-opacity: 1;\n}\n\ncircle.mg-points-mono {\n fill: #0000ff;\n stroke: #0000ff;\n}\n\ntspan.mg-points-mono {\n fill: #0000ff;\n stroke: #0000ff;\n}\n\n/* a selected point in a scatterplot */\n.mg-points circle.selected {\n fill-opacity: 1;\n stroke-opacity: 1;\n}\n\n.mg-voronoi path {\n fill: none;\n pointer-events: all;\n stroke: none;\n stroke-opacity: 0.1;\n}\n\n.mg-x-rug-mono,\n.mg-y-rug-mono {\n stroke: black;\n}\n\n.mg-x-axis line,\n.mg-y-axis line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-x-axis text,\n.mg-y-axis text,\n.mg-histogram .axis text {\n fill: black;\n font-size: 0.9rem;\n opacity: 0.6;\n}\n\n.mg-x-axis .label,\n.mg-y-axis .label,\n.mg-axis .label {\n font-size: 0.8rem;\n text-transform: uppercase;\n font-weight: 400;\n}\n\n.mg-x-axis-small text,\n.mg-y-axis-small text,\n.mg-active-datapoint-small {\n font-size: 0.6rem;\n}\n\n.mg-x-axis-small .label,\n.mg-y-axis-small .label {\n font-size: 0.65rem;\n}\n\n.mg-european-hours {\n}\n\n.mg-year-marker text {\n fill: black;\n font-size: 0.7rem;\n opacity: 0.6;\n}\n\n.mg-year-marker line {\n opacity: 1;\n shape-rendering: auto;\n stroke: #b3b2b2;\n stroke-width: 1px;\n}\n\n.mg-year-marker-small text {\n font-size: 0.6rem;\n}\n","body {\n background: #eaeaea;\n padding-bottom: 216px;\n}\nheader {\n width: 100%;\n min-height: 216px;\n padding: 48px;\n margin-bottom: 24px;\n background: #fafafa;\n}\nheader .search {\n margin-top: 48px;\n}\n#logo {\n display: block;\n margin: 0 auto;\n max-width: 400px;\n}\n.content {\n margin: auto;\n width: 95%;\n max-width: 1080px;\n}\nsection#landing h1 {\n font-size: 25px;\n}\nsection {\n padding: 36px;\n float: right;\n margin: 0 0 24px 0;\n background: #fafafa;\n box-shadow: 5px 5px 20px 2px rgba(0,0,0,0.03);\n}\nsection h2 {\n font-size: 21px;\n line-height: 32px;\n color: #7d7d7d;\n margin-bottom: 50px;\n}\nsection small {\n display: block;\n width: 100%;\n margin-top: 30px;\n padding-right: 20px;\n text-align: right;\n color: #aaa;\n}\nsection small a {\n color: #aaf;\n text-decoration: none;\n}\nsection.unmaterialized {\n box-shadow: 0 0 0 0;\n background: #f0f0f0;\n padding: 24px 24px 48px 24px;\n border-right: 1px solid #dedede;\n border-bottom: 1px solid #dedede;\n}\n#controls {\n padding: 36px;\n background: #f0f0f0;\n border-right: 1px solid #dedede;\n border-bottom: 1px solid #dedede;\n margin-bottom: 20px;\n}\n.fixed {\n position: relative;\n}\n@media (min-width: 1230px) {\n #cards {\n padding-bottom: 100px;\n position: relative;\n z-index: 9;\n }\n section {\n z-index: 10;\n width: calc(100% - 345px);\n float: right;\n }\n #landing {\n width: 100%;\n }\n .fixed-container {\n z-index: 0;\n position: absolute;\n top: 245px;\n left: calc(50% - (540px));\n }\n .fixed {\n position: fixed !important;\n top: 25px;\n }\n #controls {\n width: 325px;\n float: left;\n }\n}\ncite.metric {\n display: block;\n width: 100%;\n height: 0;\n float: right;\n text-align: center;\n font-size: 12px;\n color: #ccc;\n font-style: normal;\n padding-left: 50px;\n margin: 200px 0px -185px 0;\n}\ncite.metric a {\n color: #aaa;\n text-decoration: underline;\n}\n.linechart {\n height: 210px;\n margin-bottom: 30px;\n}\n.mg-line-legend {\n display: none;\n}\n.legend {\n position: relative;\n margin: 0;\n padding: 0;\n height: 0;\n top: 31px;\n left: 55px;\n fontSize: 14px;\n fontWeight: bold;\n opacity: 0.8;\n}\n.mg-baselines {\n opacity: 0.5;\n}\n.loader {\n width: 100%;\n text-align: center;\n line-height: 10;\n animation: outro 1s, loader 1.5s infinite;\n}\n.intro {\n animation: intro 2s;\n}\n@media print {\n body {\n zoom: 75%;\n }\n section {\n min-width: 800px;\n min-height: 10.5in;\n page-break-after: always;\n }\n section.unmaterialized {\n display: none;\n }\n}\n.hidden,\n.hidden > *,\n.hidden > small {\n display: none !important;\n}\n@-moz-keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-webkit-keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-o-keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@keyframes outro {\n 0% {\n opacity: 1;\n filter: grayscale(0%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-moz-keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-webkit-keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-o-keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@keyframes loader {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 50% {\n opacity: 0.4;\n filter: grayscale(50%);\n }\n 100% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n}\n@-moz-keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n@-webkit-keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n@-o-keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n@keyframes intro {\n 0% {\n opacity: 0.2;\n filter: grayscale(100%);\n }\n 100% {\n opacity: 1;\n filter: grayscale(0%);\n }\n}\n"]}
\ No newline at end of file
diff --git a/frontend/public/static/app.js b/frontend/public/static/app.js
index 09439e76e5..f358082114 100644
--- a/frontend/public/static/app.js
+++ b/frontend/public/static/app.js
@@ -153,30 +153,30 @@ var __makeRelativeRequire = function(require, mappings, pref) {
return require(name);
}
};
-require.register("GHData.js", function(exports, require, module) {
+require.register("Augur.js", function(exports, require, module) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
-exports.default = GHData;
+exports.default = Augur;
var queryString = require('query-string');
-function GHData() {
+function Augur() {
window.jQuery = require('jquery');
window.Vue = require('vue');
window.Vuex = require('vuex');
- var GHDataAPI = require('GHDataAPI').default;
- window.GHDataAPI = new GHDataAPI();
- window.GHDataRepos = {};
- window.GHDataStats = require('GHDataStats').default;
+ var AugurAPI = require('AugurAPI').default;
+ window.AugurAPI = new AugurAPI();
+ window.AugurRepos = {};
+ window.AugurStats = require('AugurStats').default;
window.$ = window.jQuery;
- var GHDataApp = require('./components/GHDataApp');
+ var AugurApp = require('./components/AugurApp');
Vue.use(Vuex);
- window.ghdata = new Vuex.Store({
+ window.augur = new Vuex.Store({
state: {
baseRepo: null,
comparedRepos: [],
@@ -188,25 +188,25 @@ function GHData() {
},
mutations: {
setBaseRepo: function setBaseRepo(state, payload) {
- var repo = window.GHDataAPI.Repo(payload.url);
- if (!window.GHDataRepos[repo.toString()]) {
- window.GHDataRepos[repo.toString()] = repo;
+ var repo = window.AugurAPI.Repo(payload.url);
+ if (!window.AugurRepos[repo.toString()]) {
+ window.AugurRepos[repo.toString()] = repo;
}
state.baseRepo = repo.toString();
if (!payload.keepCompared) {
state.comparedRepos = [];
}
- var title = repo.owner + '/' + repo.name + '- GHData';
+ var title = repo.owner + '/' + repo.name + '- Augur';
var queryString = '?repo=' + repo.owner + '+' + repo.name;
window.history.pushState(null, title, queryString);
},
addComparedRepo: function addComparedRepo(state, payload) {
- var repo = window.GHDataAPI.Repo(payload.url);
- if (!window.GHDataRepos[repo.toString()]) {
- window.GHDataRepos[repo.toString()] = repo;
+ var repo = window.AugurAPI.Repo(payload.url);
+ if (!window.AugurRepos[repo.toString()]) {
+ window.AugurRepos[repo.toString()] = repo;
}
state.comparedRepos.push(repo.toString());
- var title = 'GHData';
+ var title = 'Augur';
var queryString = window.location.search + '&comparedTo[]=' + repo.owner + '+' + repo.name;
window.history.pushState(null, title, queryString);
},
@@ -234,29 +234,29 @@ function GHData() {
compare: "each",
byDate: false
};
- window.history.pushState(null, 'GHData', '/');
+ window.history.pushState(null, 'Augur', '/');
} // end reset
} // end mutations
});
- GHDataApp.store = window.ghdata;
- window.GHDataApp = new Vue(GHDataApp).$mount('#app');
+ AugurApp.store = window.augur;
+ window.AugurApp = new Vue(AugurApp).$mount('#app');
// Load state from query string
var parsed = queryString.parse(location.search, { arrayFormat: 'bracket' });
if (parsed.repo) {
- window.GHDataApp.$store.commit('setBaseRepo', { url: parsed.repo.replace(' ', '/') });
+ window.AugurApp.$store.commit('setBaseRepo', { url: parsed.repo.replace(' ', '/') });
}
if (parsed.comparedTo) {
parsed.comparedTo.forEach(function (repo) {
- window.GHDataApp.$store.commit('addComparedRepo', { url: repo.replace(' ', '/') });
+ window.AugurApp.$store.commit('addComparedRepo', { url: repo.replace(' ', '/') });
});
}
}
});
-;require.register("GHDataAPI.js", function(exports, require, module) {
+;require.register("AugurAPI.js", function(exports, require, module) {
'use strict';
Object.defineProperty(exports, "__esModule", {
@@ -269,16 +269,16 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
var $ = require('jquery');
-var GHDataAPI = function () {
- function GHDataAPI(hostURL, version) {
- _classCallCheck(this, GHDataAPI);
+var AugurAPI = function () {
+ function AugurAPI(hostURL, version) {
+ _classCallCheck(this, AugurAPI);
this._version = version || 'unstable';
this._host = hostURL || 'http://' + window.location.hostname + ':5000/';
this.__cache = {};
}
- _createClass(GHDataAPI, [{
+ _createClass(AugurAPI, [{
key: 'Repo',
value: function Repo(owner, repoName) {
var _this = this;
@@ -358,13 +358,13 @@ var GHDataAPI = function () {
}
}]);
- return GHDataAPI;
+ return AugurAPI;
}();
-exports.default = GHDataAPI;
+exports.default = AugurAPI;
});
-;require.register("GHDataStats.js", function(exports, require, module) {
+;require.register("AugurStats.js", function(exports, require, module) {
'use strict';
Object.defineProperty(exports, "__esModule", {
@@ -375,19 +375,19 @@ var _createClass = function () { function defineProperties(target, props) { for
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-var GHDataStats = function () {
- function GHDataStats() {
- _classCallCheck(this, GHDataStats);
+var AugurStats = function () {
+ function AugurStats() {
+ _classCallCheck(this, AugurStats);
}
- _createClass(GHDataStats, null, [{
+ _createClass(AugurStats, null, [{
key: 'convertDates',
value: function convertDates(data, earliest, latest) {
earliest = earliest || new Date('01-01-2005');
latest = latest || new Date();
if (Array.isArray(data[0])) {
data = data.map(function (datum) {
- return GHDataStats.convertDates(datum);
+ return AugurStats.convertDates(datum);
});
} else {
@@ -405,7 +405,7 @@ var GHDataStats = function () {
value: function convertKey(data, key) {
if (Array.isArray(data[0])) {
data = data.map(function (datum) {
- return GHDataStats.convertKey(datum, key);
+ return AugurStats.convertKey(datum, key);
});
} else {
var EARLIEST = new Date('01-01-2005');
@@ -429,11 +429,11 @@ var GHDataStats = function () {
var flat = ary.map(function (e) {
return e[key];
});
- mean = mean || GHDataStats.averageArray(flat);
+ mean = mean || AugurStats.averageArray(flat);
var distances = flat.map(function (e) {
return (e - mean) * (e - mean);
});
- return Math.sqrt(GHDataStats.averageArray(distances));
+ return Math.sqrt(AugurStats.averageArray(distances));
}
}, {
key: 'describe',
@@ -441,8 +441,8 @@ var GHDataStats = function () {
var flat = ary.map(function (e) {
return e[key];
});
- var mean = GHDataStats.averageArray(flat);
- var stddev = GHDataStats.standardDeviation(ary, key, mean);
+ var mean = AugurStats.averageArray(flat);
+ var stddev = AugurStats.standardDeviation(ary, key, mean);
var variance = stddev * stddev;
return {
'mean': mean,
@@ -479,7 +479,7 @@ var GHDataStats = function () {
}
var average = { date: new Date(date) };
- average[key] = GHDataStats.averageArray(averageWindow.slice(0, windowSizeInDays));
+ average[key] = AugurStats.averageArray(averageWindow.slice(0, windowSizeInDays));
averageWindow.shift();
rolling.push(average);
}
@@ -491,7 +491,7 @@ var GHDataStats = function () {
if (!data) {
return [];
}
- baseline = baseline || GHDataStats.averageArray(data.map(function (e) {
+ baseline = baseline || AugurStats.averageArray(data.map(function (e) {
return e[key];
}));
data = data.map(function (datum) {
@@ -515,9 +515,9 @@ var GHDataStats = function () {
};
var data = {};
- data['base'] = GHDataStats.rollingAverage(GHDataStats.convertDates(GHDataStats.convertKey(baseData, Object.keys(baseData[0])[1]), config.earliest, config.latest), undefined, config.period);
+ data['base'] = AugurStats.rollingAverage(AugurStats.convertDates(AugurStats.convertKey(baseData, Object.keys(baseData[0])[1]), config.earliest, config.latest), undefined, config.period);
- data['compare'] = GHDataStats.rollingAverage(GHDataStats.convertDates(GHDataStats.convertKey(compareData, Object.keys(compareData[0])[1]), config.earliest, config.latest), undefined, config.period);
+ data['compare'] = AugurStats.rollingAverage(AugurStats.convertDates(AugurStats.convertKey(compareData, Object.keys(compareData[0])[1]), config.earliest, config.latest), undefined, config.period);
var smaller = data['base'][0].date < data['compare'][0].date ? 'base' : 'compare';
var larger = data['base'][0].date < data['compare'][0].date ? 'compare' : 'base';
@@ -551,7 +551,7 @@ var GHDataStats = function () {
key: 'zscores',
value: function zscores(data, key) {
key = key || 'value';
- var stats = GHDataStats.describe(data, key);
+ var stats = AugurStats.describe(data, key);
return data.map(function (e) {
var newObj = {};
if (e.date) {
@@ -569,10 +569,10 @@ var GHDataStats = function () {
}
}]);
- return GHDataStats;
+ return AugurStats;
}();
-exports.default = GHDataStats;
+exports.default = AugurStats;
});
;require.register("components/BaseRepoActivityCard.vue", function(exports, require, module) {
@@ -695,36 +695,36 @@ if (module.hot) {(function () { var hotAPI = require("vue-hot-reload-api")
})()}
});
-;require.register("components/GHDataApp.vue", function(exports, require, module) {
+;require.register("components/AugurApp.vue", function(exports, require, module) {
;(function(){
'use strict';
-var _GHDataHeader = require('./GHDataHeader.vue');
+var _AugurHeader = require('./AugurHeader.vue');
-var _GHDataHeader2 = _interopRequireDefault(_GHDataHeader);
+var _AugurHeader2 = _interopRequireDefault(_AugurHeader);
var _SidebarControls = require('./SidebarControls.vue');
var _SidebarControls2 = _interopRequireDefault(_SidebarControls);
-var _GHDataCards = require('./GHDataCards.vue');
+var _AugurCards = require('./AugurCards.vue');
-var _GHDataCards2 = _interopRequireDefault(_GHDataCards);
+var _AugurCards2 = _interopRequireDefault(_AugurCards);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
module.exports = {
components: {
- 'ghdata-header': _GHDataHeader2.default,
+ 'augur-header': _AugurHeader2.default,
SidebarControls: _SidebarControls2.default,
- 'ghdata-cards': _GHDataCards2.default
+ 'augur-cards': _AugurCards2.default
}
};
})()
if (module.exports.__esModule) module.exports = module.exports.default
var __vue__options__ = (typeof module.exports === "function"? module.exports.options: module.exports)
if (__vue__options__.functional) {console.error("[vueify] functional components are not supported and should be defined in plain js files using render functions.")}
-__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('ghdata-header'),_vm._v(" "),_c('div',{staticClass:"content"},[_c('sidebar-controls'),_vm._v(" "),_c('ghdata-cards')],1)],1)}
+__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('augur-header'),_vm._v(" "),_c('div',{staticClass:"content"},[_c('sidebar-controls'),_vm._v(" "),_c('augur-cards')],1)],1)}
__vue__options__.staticRenderFns = []
if (module.hot) {(function () { var hotAPI = require("vue-hot-reload-api")
hotAPI.install(require("vue"), true)
@@ -738,7 +738,7 @@ if (module.hot) {(function () { var hotAPI = require("vue-hot-reload-api")
})()}
});
-;require.register("components/GHDataCards.vue", function(exports, require, module) {
+;require.register("components/AugurCards.vue", function(exports, require, module) {
;(function(){
'use strict';
@@ -801,7 +801,7 @@ if (module.hot) {(function () { var hotAPI = require("vue-hot-reload-api")
})()}
});
-;require.register("components/GHDataHeader.vue", function(exports, require, module) {
+;require.register("components/AugurHeader.vue", function(exports, require, module) {
;(function(){
'use strict';
@@ -901,9 +901,9 @@ Object.defineProperty(exports, "__esModule", {
value: true
});
-var _GHDataStats = require('../../GHDataStats');
+var _AugurStats = require('../../AugurStats');
-var _GHDataStats2 = _interopRequireDefault(_GHDataStats);
+var _AugurStats2 = _interopRequireDefault(_AugurStats);
var _d = require('d3');
@@ -923,19 +923,19 @@ exports.default = {
var _this = this;
if (this.repo) {
- window.GHDataRepos[this.repo].dependents().then(function (dependents) {
+ window.AugurRepos[this.repo].dependents().then(function (dependents) {
_this.$refs['dependents'].innerHTML = '';
for (var i = 0; i < dependents.length && i < 10; i++) {
_this.$refs['dependents'].innerHTML += dependents[i].name + ''; } }); - window.GHDataRepos[this.repo].dependencies().then(function (dependencies) { + window.AugurRepos[this.repo].dependencies().then(function (dependencies) { _this.$refs['dependencies'].innerHTML = ''; for (var i = 0; i < dependencies.dependencies.length && i < 10; i++) { _this.$refs['dependents'].innerHTML += dependencies.dependencies[i].name + '
'; } }); - window.GHDataRepos[this.repo].dependencyStats().then(function (depstats) { + window.AugurRepos[this.repo].dependencyStats().then(function (depstats) { _this.$refs['totaldependents'].innerHTML = depstats['dependent_repositories']; _this.$refs['totaldependencies'].innerHTML = depstats['dependencies']; }); @@ -969,9 +969,9 @@ var _metricsGraphics = require('metrics-graphics'); var _metricsGraphics2 = _interopRequireDefault(_metricsGraphics); -var _GHDataStats = require('../GHDataStats'); +var _AugurStats = require('../AugurStats'); -var _GHDataStats2 = _interopRequireDefault(_GHDataStats); +var _AugurStats2 = _interopRequireDefault(_AugurStats); var _d = require('d3'); @@ -1020,9 +1020,9 @@ var _d = require('d3'); var d3 = _interopRequireWildcard(_d); -var _GHDataStats = require('GHDataStats'); +var _AugurStats = require('AugurStats'); -var _GHDataStats2 = _interopRequireDefault(_GHDataStats); +var _AugurStats2 = _interopRequireDefault(_AugurStats); var _vuex = require('vuex'); @@ -1073,15 +1073,15 @@ exports.default = { if (this.$refs.chart) { this.$refs.chart.className = 'linechart loader'; } - window.GHDataRepos[this.repo][this.source]().then(function (baseData) { + window.AugurRepos[this.repo][this.source]().then(function (baseData) { _this.$refs.chartStatus.innerHTML = ''; if (baseData && baseData.length) { - config.data = _GHDataStats2.default.convertDates(baseData, _this.earliest, _this.latest); + config.data = _AugurStats2.default.convertDates(baseData, _this.earliest, _this.latest); } else { config.data = []; } if (_this.comparedTo) { - return GHDataRepos[_this.comparedTo][_this.source](); + return AugurRepos[_this.comparedTo][_this.source](); } return new Promise(function (resolve, reject) { resolve(); @@ -1091,16 +1091,16 @@ exports.default = { if (config.data && compareData && compareData.length) { if (config.compare == 'each') { var key = Object.keys(compareData[0])[1]; - var compare = _GHDataStats2.default.rollingAverage(_GHDataStats2.default.zscores(compareData, key), 'value', _this.period); - var base = _GHDataStats2.default.rollingAverage(_GHDataStats2.default.zscores(config.data, key), 'value', _this.period); + var compare = _AugurStats2.default.rollingAverage(_AugurStats2.default.zscores(compareData, key), 'value', _this.period); + var base = _AugurStats2.default.rollingAverage(_AugurStats2.default.zscores(config.data, key), 'value', _this.period); config.data = [base, compare]; - config.legend = [window.GHDataRepos[_this.repo].toString(), window.GHDataRepos[_this.comparedTo].toString()]; + config.legend = [window.AugurRepos[_this.repo].toString(), window.AugurRepos[_this.comparedTo].toString()]; config.colors = config.colors || ['#FF3647', '#999']; } else { console.log('rendering percentage'); config.format = 'percentage'; config.baselines = [{ value: 1, label: config.baseline }]; - config.data = _GHDataStats2.default.makeRelative(config.data, compareData, { + config.data = _AugurStats2.default.makeRelative(config.data, compareData, { earliest: config.earliest, latest: config.latest, byDate: config.byDate, @@ -1110,8 +1110,8 @@ exports.default = { } else { if (!_this.disableRollingAverage) { config.legend = config.legend || [config.title.toLowerCase(), _this.period + ' day average']; - var rolling = _GHDataStats2.default.rollingAverage(config.data, keys[0], _this.period); - config.data = _GHDataStats2.default.convertKey(_GHDataStats2.default.combine(config.data, rolling), keys[0]); + var rolling = _AugurStats2.default.rollingAverage(config.data, keys[0], _this.period); + config.data = _AugurStats2.default.convertKey(_AugurStats2.default.combine(config.data, rolling), keys[0]); config.colors = config.colors || ['#CCC', '#FF3647']; config.y_accessor = 'value'; } diff --git a/frontend/public/static/app.js.map b/frontend/public/static/app.js.map index 3c1804f6e6..ade04debbf 100644 --- a/frontend/public/static/app.js.map +++ b/frontend/public/static/app.js.map @@ -1 +1 @@ -{"version":3,"sources":["app/GHData.js","app/GHDataAPI.js","app/GHDataStats.js","app/components/BaseRepoActivityCard.vue","app/components/BaseRepoEcosystemCard.vue","app/components/ComparedRepoActivityCard.vue","app/components/GHDataApp.vue","app/components/GHDataCards.vue","app/components/GHDataHeader.vue","app/components/SidebarControls.vue","app/components/charts/DependencyOverview.vue","app/components/charts/EmptyChart.vue","app/components/charts/LineChart.vue","app/include/kube/kube.js","app/include/metricsgraphics.js","app/include/mg_line_brushing.js"],"names":["GHData","queryString","require","window","jQuery","Vue","Vuex","GHDataAPI","default","GHDataRepos","GHDataStats","$","GHDataApp","use","ghdata","Store","state","baseRepo","comparedRepos","trailingAverage","startDate","Date","endDate","compare","byDate","mutations","setBaseRepo","payload","repo","Repo","url","toString","keepCompared","title","owner","name","history","pushState","addComparedRepo","push","location","search","setDates","parseInt","setCompare","reset","store","$mount","parsed","parse","arrayFormat","$store","commit","replace","comparedTo","forEach","hostURL","version","_version","_host","hostname","__cache","repoName","splitURL","split","length","Endpoint","endpoint","self","params","callback","btoa","created_at","now","Promise","resolve","reject","JSON","data","get","then","stringify","Timeseries","func","relativeTo","baselineRepo","commits","forks","issues","pulls","stars","tags","downloads","uniqueCommitters","pullsAcceptanceRate","issuesResponseTime","contributors","contributions","committerLocations","communityAge","linkingWebsites","busFactor","dependents","dependencies","dependencyStats","earliest","latest","Array","isArray","map","datum","convertDates","d","date","filter","key","convertKey","EARLIEST","value","ary","reduce","a","e","mean","flat","averageArray","distances","Math","sqrt","stddev","standardDeviation","variance","windowSizeInDays","rolling","averageWindow","i","lastFound","after","before","setDate","getDate","iter","average","slice","shift","baseline","baseData","compareData","config","undefined","period","base","rollingAverage","Object","keys","smaller","larger","result","toPush","x","stats","describe","newObj","zscore","from","arguments","Error","fn","jquery","Function","prototype","inherits","parent","F","f","prop","super","Kube","element","options","$element","opts","extend","defaults","namespace","$target","target","getInstance","hasTarget","type","args","call","splice","_fireCallback","_data","callbacks","isFunction","apply","events","eventNamespace","len","handler","Plugin","create","classname","pluginname","toLowerCase","method","val","each","$this","methodVal","error","autoload","arr","s","trim","join","autoloadQueue","startAutoload","MutationObserver","observer","mutation","newNodes","addedNodes","nodeType","startAutoloadOnce","observe","document","subtree","childList","$nodes","not","$el","indexOf","attr","watch","on","Animation","effect","completeCallback","prefixes","queue","start","isSlideEffect","setElementHeight","addToQueue","clean","animate","height","removeElementHeight","css","isHideableEffect","effects","inArray","isToggleEffect","storeHideClasses","hasClass","revertHideClasses","addClass","removeData","removeHideClass","removeClass","makeSimpleEffects","_callback","complete","proxy","makeComplete","make","event","one","off","animation","Detect","isMobile","test","navigator","userAgent","isDesktop","isMobileScreen","width","isTabletScreen","isDesktopScreen","FormData","app","set","formdata","appendForms","appendFields","$fields","str","append","$forms","formsData","serializeArray","serialize","Response","obj","item","parseItem","html","stripslashes","top","href","notify","Utils","disableBodyScroll","$body","windowWidth","innerWidth","documentElementRect","documentElement","getBoundingClientRect","right","abs","left","isOverflowing","body","clientWidth","scrollbarWidth","measureScrollbar","scrollDiv","createElement","className","offsetWidth","removeChild","enableBodyScroll","Message","closeSelector","closeEvent","animationOpen","animationClose","$close","find","close","stop","open","preventDefault","isOpened","onOpened","onClosed","Sticky","offset","offsetTop","getOffsetTop","load","scroll","isFix","fixed","unfixed","scrollTop","Toggleme","toggleEvent","text","toggle","revertText","storeText","setTimeout","replaceText","Offcanvas","direction","clickOutside","utils","detect","buildTargetWidth","buildAnimationDirection","getCloseLink","closeAll","pushBody","$elms","isTag","tagName","closest","pullBody","handleKeyboard","which","properties","Collapse","active","toggleClass","boxClass","hashes","currentHash","currentItem","$items","getItems","loadItems","$boxes","getBoxes","setActiveItem","el","getItem","hash","getItemBy","addActive","$box","$caret","$parent","removeActive","openAll","num","eq","Dropdown","caretUp","buildClose","buildCaret","buildMobileAnimation","disableEvents","getCaret","buildCaretPosition","innerHeight","toggleCaretOpen","toggleCaretClose","setPosition","shouldNotBeClosed","enableEvents","isNavigationFixed","getPlacement","getOffset","position","getPosition","coords","placement","leftFix","outerHeight","Tabs","equals","live","buildLiveTabs","tabsCollection","hashesCollection","$tabs","getTabs","getLocationHash","setItemHeight","toArray","collectItem","$tab","$layers","$liveTabsList","buildLiveItem","tab","$li","$a","index","getLiveItemId","getLiveItemTitle","first","next","fetchElement","prev","pushStateOpen","pushStateClose","isHash","minHeight","getItemMaxHeight","max","h","modalcurrent","modalwindow","show","modal","Modal","header","maxHeight","overlay","buildModal","$modal","$header","buildOverlay","$overlay","prepend","buildHeader","buildContent","findActions","resize","handleEnter","getData","ajax","getTime","cache","success","buildWidth","bottom","percent","match","buildPosition","windowHeight","buildHeight","padding","margin","modalHeight","handleEscape","setHeader","setContent","content","setWidth","getModal","getBody","getHeader","root","factory","define","amd","exports","module","MG","d3","global","convert","accessor","time_format","parse_time","timeParse","number","Number","utc","specifier","utcFormat","timeFormat","mg_jquery_exists","mg_get_rollover_time_format","fmt","processed","x_time_frame","utc_time","mg_data_in_plot_bounds","x_accessor","min_x","max_x","y_accessor","min_y","max_y","is_array","thing","is_function","is_empty_array","is_object","is_array_of_arrays","all_elements","sum","is_array_of_objects","is_array_of_objects_or_empty","pluck","count_array_elements","b","mg_get_bottom","mg_get_plot_bottom","buffer","mg_get_top","mg_get_plot_top","mg_get_left","mg_get_plot_left","mg_get_right","mg_get_plot_right","mg_exit_and_remove","elem","exit","remove","mg_selectAll_and_remove","svg","cl","selectAll","mg_add_g","classed","mg_remove_element","select","mg_make_rug","rug_class","mg_get_svg_child_of","all_data","mg_flatten_array","rug","enter","mg_add_color_accessor_to_rug","rug_mono_class","color_accessor","scalefns","colorf","mg_rotate_labels","labels","rotation_degree","dy","transform","mg_elements_are_overlapping","node","mg_is_horizontally_overlapping","mg_prevent_horizontal_overlap","newY","mg_prevent_vertical_overlap","sort","reverse","overlap_amount","label_i","label_j","j","mg_is_vertically_overlapping","sibling","element_bbox","sibling_bbox","mg_is_horiz_overlap","mg_infer_type","ns","testPoint","selector_or_node","flat_data","concat","mg_next_id","_next_elem_id","mg_target_ref","mg_normalize","HTMLElement","target_ref","getAttribute","setAttribute","console","warn","string","get_pixel_dimension","dimension","style","get_width","get_height","isNumeric","n","isNaN","parseFloat","isFinite","iterator","context","breaker","k","merge_with_defaults","source","number_of_values","values","has_values_below","has_too_many_zeros","zero_count","mg_is_date","mg_is_object","mg_is_array","mg_is_function","clone","copy","setTime","hasOwnProperty","arr_diff","seen","diff","warn_deprecation","message","untilVersion","trace","truncate_text","textObj","textString","bbox","textContent","getBBox","wrap_text","token","tspanAttrs","words","word","line","lineNumber","lineHeight","y","tspan","pop","getComputedTextLength","register","chartType","descriptor","charts","_hooks","add_hook","hooks","already_registered","hook","call_hook","constructor","globals","deprecations","rollover_callback","replacement","rollout_callback","x_rollover_format","y_rollover_format","show_years","xax_start_at_min","interpolate_tension","link","data_graphic","missing_is_zero","missing_is_hidden","missing_is_hidden_accessor","legend","legend_target","animate_on_load","title_y_position","center_title_full_width","full_width","full_height","small_height_threshold","small_width_threshold","xax_count","xax_tick_length","axes_not_compact","yax_count","yax_tick_length","x_extended_ticks","y_extended_ticks","y_scale_type","min_y_from_data","point_size","xax_units","x_label","x_sort","x_axis","y_axis","x_axis_position","y_axis_position","x_axis_type","y_axis_type","ygroup_accessor","xgroup_accessor","y_padding_percentage","y_outer_padding_percentage","ygroup_padding_percentage","ygroup_outer_padding_percentage","x_padding_percentage","x_outer_padding_percentage","xgroup_padding_percentage","xgroup_outer_padding_percentage","y_categorical_show_guides","x_categorical_show_guide","rotate_x_labels","rotate_y_labels","y_label","yax_units","yax_units_append","x_rug","y_rug","mouseover_align","x_mouseover","y_mouseover","transition_on_update","mouseover","click","show_rollover_text","show_confidence_band","xax_format","area","chart_type","decimals","format","inflator","linked","linked_format","list","baselines","markers","scales","european_clock","show_year_markers","show_secondary_x_label","interpolate","curveCatmullRom","alpha","custom_line_color_map","colors","max_data_size","aggregate_rollover","show_tooltips","selected_chart","deprecation","warned","Tooltip","enabled","timeout","hoverState","inState","init","VERSION","TRANSITION_DURATION","DEFAULTS","selector","template","trigger","delay","container","viewport","getOptions","$viewport","hover","focus","triggers","eventIn","eventOut","leave","_options","fixTitle","getDefaults","hide","getDelegateOptions","currentTarget","Event","tip","clearTimeout","isInStateTrue","hasContent","inDom","contains","ownerDocument","isDefaultPrevented","that","$tip","tipId","getUID","autoToken","autoPlace","detach","display","appendTo","insertAfter","pos","actualWidth","actualHeight","offsetHeight","orgPlacement","viewportDim","calculatedOffset","getCalculatedOffset","applyPlacement","prevHoverState","support","transition","emulateTransitionEnd","marginTop","marginLeft","setOffset","using","props","round","delta","getViewportAdjustedDelta","isVertical","arrowDelta","arrowOffsetPosition","replaceArrow","arrow","getTitle","removeAttr","$e","isBody","elRect","elOffset","outerDims","viewportPadding","viewportDimensions","topEdgeOffset","bottomEdgeOffset","leftEdgeOffset","rightEdgeOffset","o","prefix","random","getElementById","$arrow","enable","disable","toggleEnabled","destroy","option","old","tooltip","Constructor","noConflict","Popover","getContent","children","end","popover","chart_title","chartTitle","insert","description","$chartTitle","mg_add_scale_function","scalefcn_name","scale","inflation","di","mg_position","mg_cat_position","MGScale","scaleArgs","use_inflator","zero_bottom","scaleType","_namespace","namespace_accessor_name","scale_name","toUpperCase","scalefn_name","scaleName","inflateDomain","tf","zeroBottom","numericalDomainFromData","other_flat_data_arrays","illustrative_data","is_time_series","mg_min_max_numerical","time_scale","scaleUtc","scaleTime","scaleLog","scaleLinear","domain","categoricalDomain","scaleOrdinal","categoricalDomainFromData","categoricalVariables","scaleBand","numericalRange","range","categoricalRangeBands","halfway","paddingPercentage","outerPaddingPercentage","paddingInner","paddingOuter","bandwidth","categoricalRange","categoricalColorRange","schemeCategory20","schemeCategory10","clamp","yn","scale_factory","additional_data_arrays","dp","extents","extent","min_val","max_val","mg_force_xax_count_to_be_two","mg_categorical_group_color_scale","mg_add_color_categorical_scale","color","mg_get_categorical_domain","mg_get_color_domain","color_domain","color_type","mg_get_color_range","color_range","processScaleTicks","axis","scale_ticks","ticks","log10","log","LN10","number_of_ticks","data_is_int","rugPlacement","axisArgs","coordinates","x1","x2","rug_buffer_size","y1","y2","rimPlacement","tick_length","toFixed","labelPlacement","tickLength","dx","textAnchor","mg_compute_yax_format","mg_default_xax_format","selectXaxFormat","c","mg_default_bar_xax_format","secondaryLabels","g","time_series","mg_get_yformat_and_secondary_time_function","addSecondaryLabelElements","timeframe","yformat","secondary","time_frame","secondary_function","years","first_tick","X","yg","yearMarkerLine","yearMarkerText","textFcn","xAxisTextElement","addNumericalLabels","_d","addTickLines","ticksClass","extendedTicksClass","extendedTicks","initializeAxisRim","rim","initializeRug","rug_positions","categoricalLabelPlacement","group","groupScale","cat","categoricalLabels","nsClass","groupAccessor","group_g","groups","String","rotateLabels","categoricalGuides","scalef","groupf","alreadyPlotted","grs","last","x11","x21","y11","y21","x12","x22","y12","y22","zeroLine","mgDrawAxis","categorical","numerical","axisName","axisClass","label","show_bar_zero","mg_bar_add_zero_line","axisFactory","t","draw","axis_factory","yf","mg_change_y_extents_for_bars","my","min","trio","baseline_accessor","predictor_accessor","yax_format","pf","d_","r","Y","categorical_groups","YGROUP","set_min_max_y","buff","mg_y_domain_range","mg_define_y_scales","Y_axis","mg_add_y_label","mg_add_y_axis_rim","y_ticks","y1scale","y2scale","mg_add_y_axis_tick_lines","mg_add_y_axis_tick_labels","mg_process_scale_ticks","mg_add_categorical_labels","mg_add_group_label","mg_add_graphic_labels","mg_draw_group_lines","ygroup_height","mg_y_categorical_show_guides","ygroupf","y_axis_categorical","xf","mg_add_processed_object","mg_select_xax_format","mg_add_x_ticks","mg_add_x_tick_labels","mg_add_x_label","x_axis_categorical","additional_buffer","mg_add_categorical_scale","categorical_variables","mg_add_x_axis_categorical_labels","bar_outer_padding_percentage","truncate_x_labels","idx","mg_point_add_color_scale","mg_point_add_size_scale","min_size","max_size","size_domain","size_range","size_accessor","mg_get_size_domain","mg_get_size_range","size","x_label_nudge_x","mg_get_time_frame","mg_milisec_diff","mg_sec_diff","mg_day_diff","mg_four_days","mg_many_days","mg_many_months","mg_years","mg_get_time_format","main_time_format","mg_process_time_format","main_x_time_format","original_data","flattened","test_point_x","original_x_accessor","is_float","mg_add_x_axis_rim","mg_add_x_axis_tick_lines","x_ticks","last_i","mg_add_primary_x_axis_label","mg_add_secondary_x_axis_label","mg_add_secondary_x_axis_elements","timeDays","timeYears","mg_add_year_marker_line","mg_add_year_marker_text","mg_min_max_x_for_nonbars","mx","extent_x","mg_min_max_x_for_bars","mg_min_max_x_for_dates","yesterday","tomorrow","mg_min_max_x_for_numbers","mg_min_max_x_for_strings","mg_sort_through_data_type_and_set_x_min_max_accordingly","mg_merge_args_with_defaults","mg_is_time_series","first_elem","mg_init_compute_width","svg_width","mg_categorical_calculate_height","mg_init_compute_height","svg_height","mg_remove_svg_if_chart_type_has_changed","empty","mg_add_svg_if_it_doesnt_exist","mg_add_clip_path_for_plot_area","mg_adjust_width_and_height_if_changed","mg_set_viewbox_for_scaling","mg_remove_missing_classes_and_text","mg_remove_outdated_lines","nodes","array_full_series","lines_to_remove","num_of_new","num_of_existing","mg_raise_container_error","categoricalInitialization","mg_categorical_count_number_of_groups","mg_categorical_count_number_of_lanes","mg_categorical_calculate_group_length","mg_categorical_calculate_bar_thickness","accessor_string","total_bars","group_bars","bars_per_group","groupHeight","gh","step","bar_thickness","groupContribution","marginContribution","mg_barchart_extrapolate_group_and_thickness_from_height","mg_return_label","mg_remove_existing_markers","mg_in_range","mg_x_position","mg_x_position_fixed","_mg_x_pos","mg_y_position_fixed","_mg_y_pos","mg_place_annotations","checker","class_name","line_fcn","text_fcn","mg_place_markers","mg_place_marker_lines","mg_place_marker_text","mg_place_baselines","mg_place_baseline_lines","mg_place_baseline_text","gm","x_pos_fixed","lineclass","textclass","gb","y_pos","mg_clear_mouseover_container","mg_setup_mouseover_container","text_anchor","mouseover_x","active_datapoint","active_datapoint_y_nudge","y_position","yPos","mg_mouseover_tspan","bold","font_size","pts","mg_reset_text_container","textContainer","mg_mouseover_row","row_number","rargs","rrr","mg_mouseover_text","text_container","mouseover_row","MG_WindowResizeTracker","targets","Observer","WebKitMutationObserver","window_listener","parentNode","aspect","newWidth","remove_target","removeEventListener","add_target","addEventListener","targetNode","some","removedNodes","disconnect","mg_window_resize_tracker","mg_window_listeners","mg_if_aspect_ratio_resize_svg","dropdown","backdrop","is","getParent","isActive","clearMenus","relatedTarget","keydown","stopPropagation","desc","button_layout","feature_set","public_name","sorters","manual","manual_map","manual_callback","_strip_punctuation","punctuationless","finalString","manual_button","feature","button","features","feat","mapDtoF","dropdownLiAClick","manual_feature","mg_line_color_text","line_id","mg_line_graph_generators","plot","mg_add_line_generator","mg_add_area_generator","mg_add_flat_line_generator","mg_add_confidence_band_generator","existing_band","confidence_area","defined","y0","l","u","curve","flat_line","data_median","mg_add_confidence_band","which_line","confidenceBand","duration","mg_add_area","areas","display_area","appendChild","update_transition_duration","mg_default_color_for_path","this_path","mg_color_line","mg_add_line_element","median","mg_add_line","existing_line","lineTransition","attrTween","path_tween","mg_add_legend_element","this_legend","legend_text","anchor_point","anchor_orientation","legend_group","mg_plot_legend_if_legend_target","mg_add_legend_group","mg_remove_existing_line_rollover_elements","mg_add_rollover_circle","circle","mg_set_unique_line_id_for_each_series","mg_nest_data_for_voronoi","merge","mg_line_class_string","class_string","v","formatter","id","mg_add_voronoi_rollover","rollover_on","rollover_off","rollover_move","voronoi","polygons","mg_configure_voronoi_rollover","nest_data_for_aggregate_rollover","data_nested","nest","entries","entry","mg_add_aggregate_rollover","line_classes","lc","mg_line_class","mg_line_color_class","mg_rollover_id_class","mg_rollover_format_id","mg_configure_aggregate_rollover","mg_configure_singleton_rollover","mg_add_single_line_rollover","mg_is_singleton","rect","rect_first","__data__","mg_is_standard_multiline","mg_is_aggregated_rollover","mg_draw_all_line_elements","mg_remove_dangling_bands","this_data","mg_line_main_plot","use_data_y_min","continueWithDefault","mg_line_rollover_setup","graph","rolloverOn","rolloverOff","rolloverMove","mg_update_rollover_circle","mg_update_aggregate_rollover_circle","mg_update_generic_rollover_circle","mg_trigger_linked_mouseovers","mg_trigger_linked_mouseouts","datums","mg_remove_active_data_points_for_aggregate_rollover","mg_remove_active_data_points_for_generic_rollover","mg_remove_active_text","lineChart","internal_error","raw_data_transformation","process_line","mainPlot","rollover","windowListeners","row","mg_format_x_aggregate_mouseover","mg_format_x_mouseover","mg_format_y_mouseover","mouseout","mousemove","histogram","process_histogram","bar","bar_margin","format_rollover_number","mo","binned","bins","processed_x_accessor","processed_y_accessor","processed_dx_accessor","point_mouseover","mg_color_point_mouseover","mg_filter_out_plot_bounds","new_data","pointChart","process_point","xMaker","yMaker","xgroup_height","XGROUP","xgroupf","xoutf","youtf","colorScale","least_squares","add_ls","sizef","paths","active_point_size_increase","update","x_categorical_show_guides","ls","lowess","label_accessor","scaffold","mg_targeted_legend","div","orientation","outer_span","COLOR","legend_on_graph","lineCount","sub_container","barChart","ycolor_accessor","xcolor_accessor","barplot","fresh_render","bars","predictor_bars","pp","pp0","baseline_marks","perform_load_animation","should_transition","transition_duration","appropriate_size","length_type","width_type","length_coord","width_coord","length_scalefn","width_scalefn","length_scale","width_scale","length_accessor","width_accessor","length_coord_map","width_coord_map","length_map","width_map","reference_length_map","reference_length_coord_fn","reference_accessor","w","reference_data","reference_bars","reference_thickness","comparison_accessor","comparison_thickness","comparison_data","comparison_marks","comparison_width","rollover_x","rollover_anchor","rollover_align","is_vertical","data_accessor","label_units","rgb","darker","mg_format_data_for_mouseover","secondary_label_accessor","predictor_proportion","truncate_y_labels","data_table","standard_col","font_weight","columns","formatting_options","_format_element","fo","_add_column","_args","arg_type","standard_column","bullet","sparkline","table","colgroup","thead","tbody","this_column","this_title","tr","th","td_accessor","td_type","td_value","th_text","td_text","td","col","this_col","value_formatter","this_format","currency","secondary_accessor","mg_missing_add_text","missing_text","mg_missing_x_scale","mg_missing_y_scale","mg_make_fake_data","mg_add_missing_background_rect","mg_missing_add_line","mg_missing_add_area","mg_remove_all_children","mg_missing_remove_legend","missingData","show_missing_background","x_scale_type","single_object","array_of_objects","array_of_arrays","nested_array_of_arrays","nested_array_of_objects","mg_process_multiple_x_accessors","mg_process_multiple_y_accessors","mg_process_multiple_accessors","which_accessor","ya","series","processed_data","start_date","upto","setHours","existing_o","our_data","extracted_data","hist","thresholds","x0","this_pt","next_pt","original_y_accessor","process_categorical_variables","pd","bar_orientation","ls_line","fit","add_lowess","lowess_line","lowess_robust","inc","_l","yhat","_calculate_lowess_fit","x_proto","y_proto","zip","yi","q","quantile","ri","_bisquare_weight","p","x_","y_","xi","_x","_y","_xy","_xx","xhat","numerator","denominator","beta","_pow_weight","pow","_tricube_weight","_neighborhood_width","xis","_manhattan","_weighted_means","wxy","wsum","wxyi","xbar","ybar","_weighted_beta","denom","_weighted_least_squares","beta_i","_wm","residuals","floor","sorted_x","x_max","x_min","xy","smallest","largest","xi_neighbors","x_i","x0_i","delta_i","xyi","_output","fmt_string","time_rollover_format","fd","number_rollover_format","mg_format_y_rollover","formatted_y","mg_format_x_rollover","formatted_x","mouseover_fcn","check_time","formatted_data","time_fmt","mg_format_number_mouseover","d1","precision","path0","path1","cloneNode","n0","getTotalLength","n1","dt","points","p0","getPointAtLength","p1","render_markup_for_server","virtual_window","virtual_d3","original_d3","original_window","original_document","targetFn","render_markup_for_client","render_markup","init_virtual_window","jsdom","force","doc","QuerySelector","defaultView","AddBrushingCapability","line_brushing","set_brush_as_base","current","brushHistory","brushed","original","steps","zoom_in","zoom_out","get_brush_interval","resolution","brushing_interval","interval","timeDay","count","is_within_bounds","brushing","brushing_history","chartContext","isDragging","mouseDown","originX","brushingGroup","extentRect","mouse","opacity","mouseX","newX","xScale","yScale","flatData","boundedData","yBounds","xBounds","extentX0","extentX1","mapDtoX","mapDtoY","brushed_max_x","brushed_min_x","brushed_max_y","brushed_min_y","iterations","xValX0","invert","xValX1","previousBrush","after_brushing","brushing_manual_redraw","processXAxis","processYAxis","afterRollover"],"mappings":"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A;AACA;AACA;AACA;AACA;AAlCA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAvCA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAnCA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAvCA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3DA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3BA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAzDA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAhEA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA3CA;AAAA;CCAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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","file":"public/static/app.js","sourcesContent":["const queryString = require('query-string')\n\nexport default function GHData () {\n window.jQuery = require('jquery')\n window.Vue = require('vue')\n window.Vuex = require('vuex')\n let GHDataAPI = require('GHDataAPI').default\n window.GHDataAPI = new GHDataAPI()\n window.GHDataRepos = {}\n window.GHDataStats = require('GHDataStats').default\n window.$ = window.jQuery\n\n let GHDataApp = require('./components/GHDataApp')\n\n Vue.use(Vuex)\n\n window.ghdata = new Vuex.Store({\n state: {\n baseRepo: null,\n comparedRepos: [],\n trailingAverage: 180,\n startDate: new Date(\"1 January 2005\"),\n endDate: new Date(),\n compare: \"each\",\n byDate: false,\n },\n mutations: {\n setBaseRepo (state, payload) {\n let repo = window.GHDataAPI.Repo(payload.url)\n if (!window.GHDataRepos[repo.toString()]) {\n window.GHDataRepos[repo.toString()] = repo\n }\n state.baseRepo = repo.toString()\n if (!payload.keepCompared) {\n state.comparedRepos = []\n }\n let title = repo.owner + '/' + repo.name + '- GHData' \n let queryString = '?repo=' + repo.owner + '+' + repo.name\n window.history.pushState(null, title, queryString)\n },\n addComparedRepo (state, payload) {\n let repo = window.GHDataAPI.Repo(payload.url)\n if (!window.GHDataRepos[repo.toString()]) {\n window.GHDataRepos[repo.toString()] = repo\n }\n state.comparedRepos.push(repo.toString())\n let title = 'GHData' \n let queryString = window.location.search + '&comparedTo[]=' + repo.owner + '+' + repo.name\n window.history.pushState(null, title, queryString)\n },\n setDates (state, payload) {\n if (payload.startDate) {\n state.startDate = new Date(payload.startDate)\n }\n if (payload.endDate) {\n state.endDate = new Date(payload.endDate)\n }\n if (payload.trailingAverage) {\n state.trailingAverage = parseInt(payload.trailingAverage, 10)\n }\n },\n setCompare (state, payload) {\n state.compare = payload.compare\n },\n reset (state) {\n state = {\n baseRepo: null,\n comparedRepos: [],\n trailingAverage: 180,\n startDate: new Date(\"1 January 2005\"),\n endDate: new Date(),\n compare: \"each\",\n byDate: false,\n }\n window.history.pushState(null, 'GHData', '/')\n } // end reset\n } // end mutations\n })\n\n GHDataApp.store = window.ghdata\n window.GHDataApp = new Vue(GHDataApp).$mount('#app')\n\n // Load state from query string\n let parsed = queryString.parse(location.search, { arrayFormat: 'bracket' })\n if (parsed.repo) {\n window.GHDataApp.$store.commit('setBaseRepo', { url: parsed.repo.replace(' ', '/') })\n }\n if (parsed.comparedTo) {\n parsed.comparedTo.forEach((repo) => {\n window.GHDataApp.$store.commit('addComparedRepo', { url: repo.replace(' ', '/') })\n })\n }\n\n}","var $ = require('jquery')\n\nexport default class GHDataAPI {\n constructor(hostURL, version) {\n this._version = version || 'unstable'\n this._host = hostURL || 'http://' + window.location.hostname + ':5000/'\n this.__cache = {}\n }\n\n Repo(owner, repoName) {\n\n if (repoName) {\n var repo = {owner: owner, name: repoName}\n } else if (owner) {\n let splitURL = owner.split('/')\n if (splitURL.length < 3) {\n var repo = {owner: splitURL[0], name: splitURL[1]}\n } else {\n var repo = {owner: splitURL[3], name: splitURL[4]}\n }\n }\n\n repo.toString = () => { return repo.owner + '/' + repo.name }\n\n var Endpoint = (endpoint) => {\n var self = this;\n var url = this._host + this._version + '/' + repo.owner + '/' + repo.name + '/' + endpoint;\n return function (params, callback) {\n if (self.__cache[btoa(url)]) {\n if (self.__cache[btoa(url)].created_at > Date.now() - 1000 * 60) {\n return new Promise((resolve, reject) => {\n resolve(JSON.parse(self.__cache[btoa(url)].data))\n })\n }\n }\n return $.get(url, params, callback).then((data) => {\n self.__cache[btoa(url)] = {\n created_at: Date.now(),\n data: JSON.stringify(data)\n }\n if (typeof callback === 'function') {\n callback(data)\n }\n return new Promise((resolve, reject) => {\n resolve(data)\n })\n })\n }\n }\n\n var Timeseries = (endpoint) => {\n let func = Endpoint('timeseries/' + endpoint)\n func.relativeTo = (baselineRepo, params, callback) => {\n var url = 'timeseries/' + endpoint + '/relative_to/' + baselineRepo.owner + '/' + baselineRepo.name;\n return Endpoint(url)()\n }\n return func\n }\n\n repo.commits = Timeseries('commits')\n repo.forks = Timeseries('forks')\n repo.issues = Timeseries('issues')\n repo.pulls = Timeseries('pulls')\n repo.stars = Timeseries('stargazers')\n repo.tags = Timeseries('tags')\n repo.downloads = Timeseries('downloads')\n repo.uniqueCommitters = Timeseries('unique_committers')\n\n\n repo.pullsAcceptanceRate = Endpoint('pulls/acceptance_rate')\n repo.issuesResponseTime = Endpoint('issues/response_time')\n repo.contributors = Endpoint('contributors')\n repo.contributions = Endpoint('contributions')\n repo.committerLocations = Endpoint('committer_locations')\n repo.communityAge = Endpoint('community_age')\n repo.linkingWebsites = Endpoint('linking_websites')\n repo.busFactor = Endpoint('bus_factor')\n repo.dependents = Endpoint('dependents')\n repo.dependencies = Endpoint('dependencies')\n repo.dependencyStats = Endpoint('dependency_stats')\n\n return repo\n\n }\n}\n","export default class GHDataStats {\n\n static convertDates (data, earliest, latest) {\n earliest = earliest || new Date('01-01-2005')\n latest = latest || new Date()\n if (Array.isArray(data[0])) {\n data = data.map((datum) => {\n return GHDataStats.convertDates(datum)\n })\n } else {\n \n data = data.map((d) => {\n d.date = new Date(d.date)\n return d\n }).filter((d) => {\n return earliest < d.date && d.date < latest\n })\n }\n return data\n }\n\n static convertKey (data, key) {\n if (Array.isArray(data[0])) {\n data = data.map((datum) => {\n return GHDataStats.convertKey(datum, key)\n })\n } else {\n const EARLIEST = new Date('01-01-2005')\n data = data.map((d) => {\n d.value = d[key];\n return d;\n })\n }\n return data\n }\n\n static averageArray(ary) {\n return ary.reduce((a, e) => {return a + e}, 0) / (ary.length);\n }\n\n static standardDeviation(ary, key, mean) {\n let flat = ary.map((e) => {return e[key]})\n mean = mean || GHDataStats.averageArray(flat)\n let distances = flat.map((e) => {\n return (e - mean) * (e - mean)\n })\n return Math.sqrt(GHDataStats.averageArray(distances))\n }\n\n static describe(ary, key) {\n let flat = ary.map((e) => {return e[key]})\n let mean = GHDataStats.averageArray(flat)\n let stddev = GHDataStats.standardDeviation(ary, key, mean)\n let variance = stddev * stddev\n return {\n 'mean': mean,\n 'stddev': stddev,\n 'variance': variance\n }\n }\n\n static rollingAverage(data, key, windowSizeInDays) {\n key = key || 'value'\n windowSizeInDays = windowSizeInDays || 180\n let rolling = [];\n let averageWindow = [];\n let i = 0;\n let lastFound = -1;\n\n let after = new Date()\n let before = new Date()\n\n for (let date = new Date(data[0].date); date <= data[data.length - 1].date; date.setDate(date.getDate() + 1)) {\n \n after.setDate(date.getDate() - windowSizeInDays)\n\n if (averageWindow.length < windowSizeInDays) {\n for (; i < data.length && averageWindow.length <= windowSizeInDays; i++) {\n if (lastFound > -1) {\n for (let iter = new Date(data[lastFound].date); iter <= data[i].date; iter.setDate(iter.getDate() + 1)) {\n averageWindow.push( (data[i][key] + data[lastFound][key]) / 2 )\n }\n }\n lastFound = i\n }\n }\n\n let average = {date: new Date(date)}\n average[key] = GHDataStats.averageArray(averageWindow.slice(0, windowSizeInDays));\n averageWindow.shift()\n rolling.push(average);\n }\n return rolling\n }\n\n static convertToPercentages(data, key, baseline) {\n if (!data) {\n return []\n }\n baseline = baseline || GHDataStats.averageArray( data.map((e) => {return e[key]}) )\n data = data.map((datum) => {\n datum['value'] = (datum[key] / baseline)\n return datum\n })\n return data\n }\n\n static makeRelative(baseData, compareData, config) {\n\n config.byDate = (config.byDate != undefined)\n config.earliest = config.earliest || new Date('01-01-2005')\n config.latest = config.latest || new Date()\n config.period = config.period || 180\n\n let iter = {\n base: 0,\n compare: 0\n }\n let data = {}\n\n data['base'] = GHDataStats.rollingAverage(\n GHDataStats.convertDates(\n GHDataStats.convertKey(\n baseData, \n Object.keys(baseData[0])[1]\n ), config.earliest, config.latest\n ), undefined, config.period) \n\n data['compare'] = GHDataStats.rollingAverage(\n GHDataStats.convertDates(\n GHDataStats.convertKey(\n compareData, \n Object.keys(compareData[0])[1]\n ), config.earliest, config.latest\n ), undefined, config.period) \n\n let smaller = (data['base'][0].date < data['compare'][0].date) ? 'base' : 'compare'\n let larger = (data['base'][0].date < data['compare'][0].date) ? 'compare' : 'base'\n let result = []\n\n if (config.byDate) {\n for (; iter[smaller] < data[smaller].length; iter[smaller]++) {\n if (data['base'].date == data['compare'].date) {\n break\n }\n }\n }\n\n while (iter['base'] < data['base'].length && iter['compare'] < data['compare'].length) {\n let toPush = {\n value: data['compare'][iter.compare].value / data['base'][iter.base].value,\n }\n if (config.byDate) {\n toPush.date = data['base'][iter.base].date\n } else {\n toPush.x = iter.base\n }\n result.push(toPush)\n iter['base']++\n iter['compare']++\n }\n\n return result\n }\n\n static zscores(data, key) {\n key = key || 'value'\n let stats = GHDataStats.describe(data, key)\n return data.map((e) => {\n let newObj = {}\n if (e.date) {\n newObj.date = new Date(e.date)\n }\n let zscore = ((e[key] - stats['mean']) / stats['stddev'])\n newObj.value = zscore\n return newObj\n })\n }\n\n static combine() {\n return Array.from(arguments)\n }\n\n}",";(function(){\n'use strict';\n\nvar _LineChart = require('./charts/LineChart');\n\nvar _LineChart2 = _interopRequireDefault(_LineChart);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n components: {\n LineChart: _LineChart2.default\n },\n computed: {\n repo: function repo() {\n return this.$store.state.repo;\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('h1',[_vm._v(\"Activity\")]),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.$store.state.baseRepo))]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"commits\",\"title\":\"Commits / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"forks\",\"title\":\"Forks / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"issues\",\"title\":\"Issues / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-6\"},[_c('line-chart',{attrs:{\"source\":\"pulls\",\"title\":\"Pulls Requests / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Contributors\"}})],1),_vm._v(\" \"),_c('div',{staticClass:\"col col-6\"},[_c('line-chart',{attrs:{\"source\":\"uniqueCommitters\",\"title\":\"Unique Committers\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Contributors\",\"disableRollingAverage\":\"1\"}})],1)]),_vm._v(\" \"),_vm._m(0,false,false)])}\n__vue__options__.staticRenderFns = [function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('small',[_vm._v(\"Data provided by \"),_c('a',{attrs:{\"href\":\"http://ghtorrent.org/msr14.html\"}},[_vm._v(\"GHTorrent\")]),_vm._v(\" \"),_c('span',{staticClass:\"ghtorrent-version\"}),_vm._v(\" and the \"),_c('a',{attrs:{\"href\":\"https://developer.github.com/\"}},[_vm._v(\"GitHub API\")])])}]\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-7655e5a2\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-7655e5a2\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _LineChart = require('./charts/LineChart');\n\nvar _LineChart2 = _interopRequireDefault(_LineChart);\n\nvar _DependencyOverview = require('./charts/DependencyOverview');\n\nvar _DependencyOverview2 = _interopRequireDefault(_DependencyOverview);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n components: {\n LineChart: _LineChart2.default,\n DependencyOverview: _DependencyOverview2.default\n },\n computed: {\n repo: function repo() {\n return this.$store.state.repo;\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('h1',[_vm._v(\"Ecosystem\")]),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.$store.state.baseRepo))]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"downloads\",\"title\":\"Downloads / Day\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"stars\",\"title\":\"Stars / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\"}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('dependency-overview')],1)])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-2a4aa320\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-2a4aa320\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _LineChart = require('./charts/LineChart');\n\nvar _LineChart2 = _interopRequireDefault(_LineChart);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n props: ['comparedTo'],\n components: {\n LineChart: _LineChart2.default\n },\n computed: {\n repo: function repo() {\n return this.$store.state.repo;\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('div',{class:{ hidden: !this.repo },attrs:{\"id\":\"base-template\"}}),_vm._v(\" \"),_c('h1',[_vm._v(\"Activity Comparison\")]),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.comparedTo)+\" compared to \"+_vm._s(_vm.$store.state.baseRepo))]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"timeseries/forks\",\"title\":\"Forks / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"forks\",\"title\":\"Forks / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"issues\",\"title\":\"Issues / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"pullsAcceptanceRate\",\"title\":\"Pull Requests Created to Closed Ratio / Week\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Community Activty\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-12\"},[_c('line-chart',{attrs:{\"source\":\"uniqueCommitters\",\"title\":\"Unique Committers\",\"cite-url\":\"https://github.com/chaoss/metrics/blob/master/activity-metrics/community-activity.md\",\"cite-text\":\"Contributors\",\"compared-to\":_vm.comparedTo}})],1)]),_vm._v(\" \"),_vm._m(0,false,false)])}\n__vue__options__.staticRenderFns = [function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('small',[_vm._v(\"Data provided by \"),_c('a',{attrs:{\"href\":\"http://ghtorrent.org/msr14.html\"}},[_vm._v(\"GHTorrent\")]),_vm._v(\" \"),_c('span',{staticClass:\"ghtorrent-version\"}),_vm._v(\" and the \"),_c('a',{attrs:{\"href\":\"https://developer.github.com/\"}},[_vm._v(\"GitHub API\")])])}]\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-7c1c00fd\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-7c1c00fd\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _GHDataHeader = require('./GHDataHeader.vue');\n\nvar _GHDataHeader2 = _interopRequireDefault(_GHDataHeader);\n\nvar _SidebarControls = require('./SidebarControls.vue');\n\nvar _SidebarControls2 = _interopRequireDefault(_SidebarControls);\n\nvar _GHDataCards = require('./GHDataCards.vue');\n\nvar _GHDataCards2 = _interopRequireDefault(_GHDataCards);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n components: {\n 'ghdata-header': _GHDataHeader2.default,\n SidebarControls: _SidebarControls2.default,\n 'ghdata-cards': _GHDataCards2.default\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('ghdata-header'),_vm._v(\" \"),_c('div',{staticClass:\"content\"},[_c('sidebar-controls'),_vm._v(\" \"),_c('ghdata-cards')],1)],1)}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-f1292d0e\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-f1292d0e\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _BaseRepoActivityCard = require('./BaseRepoActivityCard');\n\nvar _BaseRepoActivityCard2 = _interopRequireDefault(_BaseRepoActivityCard);\n\nvar _BaseRepoEcosystemCard = require('./BaseRepoEcosystemCard');\n\nvar _BaseRepoEcosystemCard2 = _interopRequireDefault(_BaseRepoEcosystemCard);\n\nvar _ComparedRepoActivityCard = require('./ComparedRepoActivityCard');\n\nvar _ComparedRepoActivityCard2 = _interopRequireDefault(_ComparedRepoActivityCard);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = {\n components: {\n BaseRepoActivityCard: _BaseRepoActivityCard2.default,\n BaseRepoEcosystemCard: _BaseRepoEcosystemCard2.default,\n ComparedRepoActivityCard: _ComparedRepoActivityCard2.default\n },\n computed: {\n baseRepo: function baseRepo() {\n return this.$store.state.baseRepo;\n },\n comparedRepos: function comparedRepos() {\n return this.$store.state.comparedRepos;\n }\n },\n methods: {\n onRepo: function onRepo(e) {\n this.$store.commit('setBaseRepo', {\n url: e.target.value\n });\n },\n onCompare: function onCompare(e) {\n this.$store.commit('addComparedRepo', {\n url: e.target.value\n });\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"cards\",staticClass:\"content\"},[_c('section',{class:{ hidden: _vm.baseRepo, unmaterialized: true }},[_c('h3',[_vm._v(\"Enter a GitHub URL to get started\")]),_vm._v(\" \"),_c('input',{staticClass:\"search reposearch\",attrs:{\"type\":\"text\",\"placeholder\":\"GitHub URL\"},on:{\"change\":_vm.onRepo}})]),_vm._v(\" \"),_c('div',{class:{ hidden: !_vm.baseRepo }},[_c('base-repo-activity-card'),_vm._v(\" \"),_c('base-repo-ecosystem-card')],1),_vm._v(\" \"),_vm._l((_vm.comparedRepos),function(repo){return _c('div',{class:{ hidden: !_vm.comparedRepos.length },attrs:{\"id\":\"comparisonCards\"}},[_c('compared-repo-activity-card',{attrs:{\"comparedTo\":repo}})],1)}),_vm._v(\" \"),_c('section',{class:{ hidden: !_vm.baseRepo, unmaterialized: true }},[_c('h3',[_vm._v(\"Compare repository\")]),_vm._v(\" \"),_c('input',{staticClass:\"search reposearch\",attrs:{\"type\":\"text\",\"placeholder\":\"GitHub URL\"},on:{\"change\":_vm.onCompare}})])],2)}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-323615bb\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-323615bb\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nmodule.exports = {\n methods: {\n onRepo: function onRepo(e) {\n this.$store.commit('setBaseRepo', {\n url: e.target.value\n });\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('header',{staticClass:\"hide-print\"},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"row\"},[_vm._m(0,false,false),_vm._v(\" \"),_c('div',{staticClass:\"col col-5 push-right\"},[_c('div',{staticClass:\"form-item\"},[_c('input',{staticClass:\"search reposearch\",attrs:{\"type\":\"text\",\"name\":\"headersearch\",\"placeholder\":\"GitHub URL\"},on:{\"change\":_vm.onRepo}})])])])])])}\n__vue__options__.staticRenderFns = [function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"col col-4\"},[_c('img',{attrs:{\"src\":\"static/logo.png\",\"id\":\"logo\",\"alt\":\"CHAOSS: Community Health Analytics for Open Source Software\"}})])}]\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-30d34965\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-30d34965\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nmodule.exports = {\n methods: {\n onStartDateChange: function onStartDateChange(e) {\n var _this = this;\n\n if (this.startDateTimeout) {\n clearTimeout(this.startDateTimeout);\n }\n this.startDateTimeout = setTimeout(function () {\n _this.$store.commit('setDates', {\n startDate: e.target.value\n });\n }, 500);\n },\n onEndDateChange: function onEndDateChange(e) {\n var _this2 = this;\n\n if (this.endDateTimeout) {\n clearTimeout(this.endDateTimeout);\n delete this.endDateTimeout;\n }\n this.endDateTimeout = setTimeout(function () {\n _this2.$store.commit('setDates', {\n endDate: e.target.value\n });\n }, 500);\n },\n onTrailingAverageChange: function onTrailingAverageChange(e) {\n this.$store.commit('setDates', {\n trailingAverage: e.target.value\n });\n },\n onCompareChange: function onCompareChange(e) {\n this.$store.commit('setCompare', {\n compare: e.target.value\n });\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"row\",attrs:{\"id\":\"controls\"}},[_c('div',{staticClass:\"col col-12\"},[_c('div',{staticClass:\"form\"},[_c('h4',[_vm._v(\"Base Repository\")]),_vm._v(\" \"),_c('div',{staticClass:\"form-item\"},[_c('label',[_vm._v(\"Start Date \"),_c('input',{attrs:{\"type\":\"date\"},on:{\"change\":_vm.onStartDateChange}})])]),_vm._v(\" \"),_c('div',{staticClass:\"form-item\"},[_c('label',[_vm._v(\"End Date \"),_c('input',{attrs:{\"type\":\"date\"},on:{\"change\":_vm.onEndDateChange}})])]),_vm._v(\" \"),_c('div',{staticClass:\"form-item\"},[_c('label',[_vm._v(\"Trailing Average\")]),_vm._v(\" \"),_c('div',{staticClass:\"append\"},[_c('input',{attrs:{\"type\":\"number\",\"min\":\"2\",\"id\":\"averagetimespan\",\"value\":\"180\"},on:{\"change\":_vm.onTrailingAverageChange}}),_c('span',[_vm._v(\"days\")])])]),_vm._v(\" \"),_c('h4',[_vm._v(\"Comparisons\")]),_vm._v(\" \"),_c('div',{staticClass:\"form-item form-checkboxes\"},[_c('label',{staticClass:\"checkbox\"},[_c('input',{attrs:{\"name\":\"comparebaseline\",\"value\":\"each\",\"checked\":\"\",\"type\":\"radio\"},on:{\"change\":_vm.onCompareChange}}),_vm._v(\"Z-score trailing average\")]),_vm._v(\" \"),_c('label',{staticClass:\"checkbox\"},[_c('input',{attrs:{\"name\":\"comparebaseline\",\"value\":\"percentage\",\"type\":\"radio\"},on:{\"change\":_vm.onCompareChange}}),_vm._v(\"100% is the compared project\")])])])])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-0df51156\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-0df51156\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _GHDataStats = require('../../GHDataStats');\n\nvar _GHDataStats2 = _interopRequireDefault(_GHDataStats);\n\nvar _d = require('d3');\n\nvar d3 = _interopRequireWildcard(_d);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = {\n props: [],\n computed: {\n repo: function repo() {\n return this.$store.state.baseRepo;\n },\n dependencies: function dependencies() {\n var _this = this;\n\n if (this.repo) {\n window.GHDataRepos[this.repo].dependents().then(function (dependents) {\n _this.$refs['dependents'].innerHTML = '';\n for (var i = 0; i < dependents.length && i < 10; i++) {\n _this.$refs['dependents'].innerHTML += dependents[i].name + '
';\n }\n });\n window.GHDataRepos[this.repo].dependencies().then(function (dependencies) {\n _this.$refs['dependencies'].innerHTML = '';\n for (var i = 0; i < dependencies.dependencies.length && i < 10; i++) {\n _this.$refs['dependents'].innerHTML += dependencies.dependencies[i].name + '
';\n }\n });\n window.GHDataRepos[this.repo].dependencyStats().then(function (depstats) {\n _this.$refs['totaldependents'].innerHTML = depstats['dependent_repositories'];\n _this.$refs['totaldependencies'].innerHTML = depstats['dependencies'];\n });\n }\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Total Dependents\")]),_vm._v(\" \"),_c('div',{ref:\"totaldependents\",staticClass:\"deps\"},[_vm._v(\"\\n Loading...\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Total Dependencies\")]),_vm._v(\" \"),_c('div',{ref:\"totaldependencies\",staticClass:\"deps\"},[_vm._v(\"\\n Loading...\\n \")])])]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Top Dependents\")]),_vm._v(\" \"),_c('div',{ref:\"dependents\",staticClass:\"deps\"},[_vm._v(\"\\n Loading...\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Top Dependencies\")]),_vm._v(\" \"),_c('div',{ref:\"dependencies\",staticClass:\"deps\",domProps:{\"innerHTML\":_vm._s(_vm.dependencies)}},[_vm._v(\"\\n Loading...\\n \")])])])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-210450fe\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-210450fe\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _metricsGraphics = require('metrics-graphics');\n\nvar _metricsGraphics2 = _interopRequireDefault(_metricsGraphics);\n\nvar _GHDataStats = require('../GHDataStats');\n\nvar _GHDataStats2 = _interopRequireDefault(_GHDataStats);\n\nvar _d = require('d3');\n\nvar d3 = _interopRequireWildcard(_d);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n_metricsGraphics2.default.data_graphic({\n title: \"Missing Data\",\n error: 'Data unavaliable for ' + title,\n chart_type: 'missing-data',\n missing_text: title + ' could not be loaded',\n target: undefined.$refs.chart,\n full_width: true,\n height: 200\n});\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"chart\",staticClass:\"linechart\"})}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-ebdae2a4\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-ebdae2a4\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _d = require('d3');\n\nvar d3 = _interopRequireWildcard(_d);\n\nvar _GHDataStats = require('GHDataStats');\n\nvar _GHDataStats2 = _interopRequireDefault(_GHDataStats);\n\nvar _vuex = require('vuex');\n\nvar _metricsgraphics = require('../../include/metricsgraphics');\n\nvar _metricsgraphics2 = _interopRequireDefault(_metricsgraphics);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nconsole.log(d3);\n\nexports.default = {\n props: ['source', 'citeUrl', 'citeText', 'title', 'percentage', 'comparedTo', 'disableRollingAverage'],\n computed: {\n repo: function repo() {\n return this.$store.state.baseRepo;\n },\n period: function period() {\n return this.$store.state.trailingAverage;\n },\n earliest: function earliest() {\n return this.$store.state.startDate;\n },\n latest: function latest() {\n return this.$store.state.endDate;\n },\n compare: function compare() {\n return this.$store.state.compare;\n },\n chart: function chart() {\n var _this = this;\n\n var config = {};\n\n config.earliest = this.earliest || new Date('01-01-2005');\n config.latest = this.latest || new Date();\n config.title = this.title || \"Activity\";\n config.full_width = true;\n config.height = 200;\n config.x_accessor = 'date';\n config.format = this.percentage ? 'percentage' : undefined;\n config.compare = this.compare;\n\n\n if (this.repo) {\n if (this.$refs.chart) {\n this.$refs.chart.className = 'linechart loader';\n }\n window.GHDataRepos[this.repo][this.source]().then(function (baseData) {\n _this.$refs.chartStatus.innerHTML = '';\n if (baseData && baseData.length) {\n config.data = _GHDataStats2.default.convertDates(baseData, _this.earliest, _this.latest);\n } else {\n config.data = [];\n }\n if (_this.comparedTo) {\n return GHDataRepos[_this.comparedTo][_this.source]();\n }\n return new Promise(function (resolve, reject) {\n resolve();\n });\n }).then(function (compareData) {\n var keys = Object.keys(config.data[0]).splice(1);\n if (config.data && compareData && compareData.length) {\n if (config.compare == 'each') {\n var key = Object.keys(compareData[0])[1];\n var compare = _GHDataStats2.default.rollingAverage(_GHDataStats2.default.zscores(compareData, key), 'value', _this.period);\n var base = _GHDataStats2.default.rollingAverage(_GHDataStats2.default.zscores(config.data, key), 'value', _this.period);\n config.data = [base, compare];\n config.legend = [window.GHDataRepos[_this.repo].toString(), window.GHDataRepos[_this.comparedTo].toString()];\n config.colors = config.colors || ['#FF3647', '#999'];\n } else {\n console.log('rendering percentage');\n config.format = 'percentage';\n config.baselines = [{ value: 1, label: config.baseline }];\n config.data = _GHDataStats2.default.makeRelative(config.data, compareData, {\n earliest: config.earliest,\n latest: config.latest,\n byDate: config.byDate,\n period: _this.period\n });\n }\n } else {\n if (!_this.disableRollingAverage) {\n config.legend = config.legend || [config.title.toLowerCase(), _this.period + ' day average'];\n var rolling = _GHDataStats2.default.rollingAverage(config.data, keys[0], _this.period);\n config.data = _GHDataStats2.default.convertKey(_GHDataStats2.default.combine(config.data, rolling), keys[0]);\n config.colors = config.colors || ['#CCC', '#FF3647'];\n config.y_accessor = 'value';\n }\n }\n\n if (keys.length > 1) {\n config.legend_target = _this.$refs.legend;\n $(_this.$refs.chart).hover(function () {\n _this.$refs.legend.style.display = 'none';\n }, function () {\n _this.$refs.legend.style.display = 'block';\n });\n }\n\n _this.$refs.chart.className = 'linechart intro';\n config.target = _this.$refs.chart;\n _metricsgraphics2.default.data_graphic(config);\n });\n return '
' + this.title + '...
';\n }\n }\n } };\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('cite',{staticClass:\"metric\"},[_vm._v(\"Metric: \"),_c('a',{attrs:{\"href\":_vm.citeUrl,\"target\":\"_blank\"}},[_vm._v(_vm._s(_vm.citeText))])]),_vm._v(\" \"),_c('div',{ref:\"chart\",staticClass:\"linechart\"},[_c('div',{ref:\"legend\",staticClass:\"legend\"}),_vm._v(\" \"),_c('span',{ref:\"chartStatus\",domProps:{\"innerHTML\":_vm._s(_vm.chart)}})])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-4035d73d\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-4035d73d\", __vue__options__)\n }\n})()}","/*\n\tKube. CSS & JS Framework\n\tVersion 6.5.2\n\tUpdated: February 2, 2017\n\n\thttp://imperavi.com/kube/\n\n\tCopyright (c) 2009-2017, Imperavi LLC.\n\tLicense: MIT\n*/\nif (typeof jQuery === 'undefined') {throw new Error('Kube\\'s requires jQuery')};\n;(function($) { var version = $.fn.jquery.split('.'); if (version[0] == 1 && version[1] < 8) {throw new Error('Kube\\'s requires at least jQuery v1.8'); }})(jQuery);\n\n;(function()\n{\n // Inherits\n Function.prototype.inherits = function(parent)\n {\n var F = function () {};\n F.prototype = parent.prototype;\n var f = new F();\n\n for (var prop in this.prototype) f[prop] = this.prototype[prop];\n this.prototype = f;\n this.prototype.super = parent.prototype;\n };\n\n // Core Class\n var Kube = function(element, options)\n {\n options = (typeof options === 'object') ? options : {};\n\n this.$element = $(element);\n this.opts = $.extend(true, this.defaults, $.fn[this.namespace].options, this.$element.data(), options);\n this.$target = (typeof this.opts.target === 'string') ? $(this.opts.target) : null;\n };\n\n // Core Functionality\n Kube.prototype = {\n getInstance: function()\n {\n return this.$element.data('fn.' + this.namespace);\n },\n hasTarget: function()\n {\n return !(this.$target === null);\n },\n callback: function(type)\n {\n\t\tvar args = [].slice.call(arguments).splice(1);\n\n // on element callback\n if (this.$element)\n {\n args = this._fireCallback($._data(this.$element[0], 'events'), type, this.namespace, args);\n }\n\n // on target callback\n if (this.$target)\n {\n args = this._fireCallback($._data(this.$target[0], 'events'), type, this.namespace, args);\n\t\t}\n\n\t\t// opts callback\n\t\tif (this.opts && this.opts.callbacks && $.isFunction(this.opts.callbacks[type]))\n\t\t{\n return this.opts.callbacks[type].apply(this, args);\n\t\t}\n\n\t\treturn args;\n },\n _fireCallback: function(events, type, eventNamespace, args)\n {\n if (events && typeof events[type] !== 'undefined')\n {\n\t\t\tvar len = events[type].length;\n\t\t\tfor (var i = 0; i < len; i++)\n\t\t\t{\n\t\t\t\tvar namespace = events[type][i].namespace;\n\t\t\t\tif (namespace === eventNamespace)\n\t\t\t\t{\n\t\t\t\t\tvar value = events[type][i].handler.apply(this, args);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n return (typeof value === 'undefined') ? args : value;\n }\n };\n\n // Scope\n window.Kube = Kube;\n\n})();\n/**\n * @library Kube Plugin\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Plugin = {\n create: function(classname, pluginname)\n {\n pluginname = (typeof pluginname === 'undefined') ? classname.toLowerCase() : pluginname;\n\n $.fn[pluginname] = function(method, options)\n {\n var args = Array.prototype.slice.call(arguments, 1);\n var name = 'fn.' + pluginname;\n var val = [];\n\n this.each(function()\n {\n var $this = $(this), data = $this.data(name);\n options = (typeof method === 'object') ? method : options;\n\n if (!data)\n {\n // Initialization\n $this.data(name, {});\n $this.data(name, (data = new Kube[classname](this, options)));\n }\n\n // Call methods\n if (typeof method === 'string')\n {\n if ($.isFunction(data[method]))\n {\n var methodVal = data[method].apply(data, args);\n if (methodVal !== undefined)\n {\n val.push(methodVal);\n }\n }\n else\n {\n $.error('No such method \"' + method + '\" for ' + classname);\n }\n }\n\n });\n\n return (val.length === 0 || val.length === 1) ? ((val.length === 0) ? this : val[0]) : val;\n };\n\n $.fn[pluginname].options = {};\n\n return this;\n },\n autoload: function(pluginname)\n {\n var arr = pluginname.split(',');\n var len = arr.length;\n\n for (var i = 0; i < len; i++)\n {\n var name = arr[i].toLowerCase().split(',').map(function(s) { return s.trim() }).join(',');\n this.autoloadQueue.push(name);\n }\n\n return this;\n },\n autoloadQueue: [],\n startAutoload: function()\n {\n if (!window.MutationObserver || this.autoloadQueue.length === 0)\n {\n return;\n }\n\n var self = this;\n\t\tvar observer = new MutationObserver(function(mutations)\n\t\t{\n\t\t\tmutations.forEach(function(mutation)\n\t\t\t{\n\t\t\t\tvar newNodes = mutation.addedNodes;\n\t\t\t if (newNodes.length === 0 || (newNodes.length === 1 && newNodes.nodeType === 3))\n\t\t\t {\n\t\t\t\t return;\n\t\t\t\t}\n\n self.startAutoloadOnce();\n\t\t\t});\n\t\t});\n\n\t\t// pass in the target node, as well as the observer options\n\t\tobserver.observe(document, {\n\t\t\t subtree: true,\n\t\t\t childList: true\n\t\t});\n },\n startAutoloadOnce: function()\n {\n var self = this;\n var $nodes = $('[data-component]').not('[data-loaded]');\n\t\t$nodes.each(function()\n\t\t{\n\t\t\tvar $el = $(this);\n\t\t\tvar pluginname = $el.data('component');\n\n if (self.autoloadQueue.indexOf(pluginname) !== -1)\n {\n\t\t\t$el.attr('data-loaded', true);\n $el[pluginname]();\n }\n });\n\n },\n watch: function()\n {\n Kube.Plugin.startAutoloadOnce();\n Kube.Plugin.startAutoload();\n }\n };\n\n $(window).on('load', function()\n {\n Kube.Plugin.watch();\n });\n\n}(Kube));\n/**\n * @library Kube Animation\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Animation = function(element, effect, callback)\n {\n this.namespace = 'animation';\n this.defaults = {};\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.effect = effect;\n this.completeCallback = (typeof callback === 'undefined') ? false : callback;\n this.prefixes = ['', '-moz-', '-o-animation-', '-webkit-'];\n this.queue = [];\n\n this.start();\n };\n\n Kube.Animation.prototype = {\n start: function()\n {\n\t\tif (this.isSlideEffect()) this.setElementHeight();\n\n\t\t\tthis.addToQueue();\n\t\t\tthis.clean();\n\t\t\tthis.animate();\n },\n addToQueue: function()\n {\n this.queue.push(this.effect);\n },\n setElementHeight: function()\n {\n this.$element.height(this.$element.height());\n },\n removeElementHeight: function()\n {\n this.$element.css('height', '');\n },\n isSlideEffect: function()\n {\n return (this.effect === 'slideDown' || this.effect === 'slideUp');\n },\n isHideableEffect: function()\n {\n var effects = ['fadeOut', 'slideUp', 'flipOut', 'zoomOut', 'slideOutUp', 'slideOutRight', 'slideOutLeft'];\n\n\t\t\treturn ($.inArray(this.effect, effects) !== -1);\n },\n isToggleEffect: function()\n {\n return (this.effect === 'show' || this.effect === 'hide');\n },\n storeHideClasses: function()\n {\n if (this.$element.hasClass('hide-sm')) this.$element.data('hide-sm-class', true);\n else if (this.$element.hasClass('hide-md')) this.$element.data('hide-md-class', true);\n },\n revertHideClasses: function()\n {\n if (this.$element.data('hide-sm-class')) this.$element.addClass('hide-sm').removeData('hide-sm-class');\n else if (this.$element.data('hide-md-class')) this.$element.addClass('hide-md').removeData('hide-md-class');\n else this.$element.addClass('hide');\n },\n removeHideClass: function()\n {\n if (this.$element.data('hide-sm-class')) this.$element.removeClass('hide-sm');\n else if (this.$element.data('hide-md-class')) this.$element.removeClass('hide-md');\n else this.$element.removeClass('hide');\n },\n animate: function()\n {\n this.storeHideClasses();\n if (this.isToggleEffect())\n\t\t\t{\n\t\t\t\treturn this.makeSimpleEffects();\n }\n\n this.$element.addClass('kubeanimated');\n\t\t\tthis.$element.addClass(this.queue[0]);\n this.removeHideClass();\n\n\t\t\tvar _callback = (this.queue.length > 1) ? null : this.completeCallback;\n\t\t\tthis.complete('AnimationEnd', $.proxy(this.makeComplete, this), _callback);\n },\n makeSimpleEffects: function()\n {\n\t\tif (this.effect === 'show') this.removeHideClass();\n else if (this.effect === 'hide') this.revertHideClasses();\n\n if (typeof this.completeCallback === 'function') this.completeCallback(this);\n },\n\t\tmakeComplete: function()\n\t\t{\n if (this.$element.hasClass(this.queue[0]))\n {\n\t\t\t\tthis.clean();\n\t\t\t\tthis.queue.shift();\n\n\t\t\t\tif (this.queue.length) this.animate();\n\t\t\t}\n\t\t},\n complete: function(type, make, callback)\n\t\t{\n\t\tvar event = type.toLowerCase() + ' webkit' + type + ' o' + type + ' MS' + type;\n\n\t\t\tthis.$element.one(event, $.proxy(function()\n\t\t\t{\n\t\t\t\tif (typeof make === 'function') make();\n\t\t\t\tif (this.isHideableEffect()) this.revertHideClasses();\n\t\t\t\tif (this.isSlideEffect()) this.removeElementHeight();\n\t\t\t\tif (typeof callback === 'function') callback(this);\n\n\t\t\t\tthis.$element.off(event);\n\n\t\t\t}, this));\n\t\t},\n\t\tclean: function()\n\t\t{\n\t\t\tthis.$element.removeClass('kubeanimated').removeClass(this.queue[0]);\n\t\t}\n };\n\n // Inheritance\n Kube.Animation.inherits(Kube);\n\n}(Kube));\n\n// Plugin\n(function($)\n{\n $.fn.animation = function(effect, callback)\n {\n var name = 'fn.animation';\n\n return this.each(function()\n {\n var $this = $(this), data = $this.data(name);\n\n $this.data(name, {});\n $this.data(name, (data = new Kube.Animation(this, effect, callback)));\n });\n };\n\n $.fn.animation.options = {};\n\n})(jQuery);\n/**\n * @library Kube Detect\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Detect = function() {};\n\n Kube.Detect.prototype = {\n\tisMobile: function()\n\t{\n\t\treturn /(iPhone|iPod|BlackBerry|Android)/.test(navigator.userAgent);\n\t},\n\tisDesktop: function()\n\t{\n\t\treturn !/(iPhone|iPod|iPad|BlackBerry|Android)/.test(navigator.userAgent);\n\t},\n\tisMobileScreen: function()\n\t{\n\t\treturn ($(window).width() <= 768);\n\t},\n\tisTabletScreen: function()\n\t{\n\t\treturn ($(window).width() >= 768 && $(window).width() <= 1024);\n\t},\n\tisDesktopScreen: function()\n\t{\n\t\treturn ($(window).width() > 1024);\n\t}\n };\n\n\n}(Kube));\n/**\n * @library Kube FormData\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.FormData = function(app)\n {\n this.opts = app.opts;\n };\n\n Kube.FormData.prototype = {\n set: function(data)\n {\n this.data = data;\n },\n get: function(formdata)\n\t{\n\t\tthis.formdata = formdata;\n\n if (this.opts.appendForms) this.appendForms();\n if (this.opts.appendFields) this.appendFields();\n\n return this.data;\n\t},\n\tappendFields: function()\n\t{\n\t\tvar $fields = $(this.opts.appendFields);\n\t\tif ($fields.length === 0)\n\t\t{\n\t\t\treturn;\n }\n\n\t\tvar self = this;\n var str = '';\n\n if (this.formdata)\n {\n $fields.each(function()\n\t\t\t{\n\t\t\t\tself.data.append($(this).attr('name'), $(this).val());\n\t\t\t});\n }\n else\n {\n\t\t\t$fields.each(function()\n\t\t\t{\n\t\t\t\tstr += '&' + $(this).attr('name') + '=' + $(this).val();\n\t\t\t});\n\n\t\t\tthis.data = (this.data === '') ? str.replace(/^&/, '') : this.data + str;\n }\n\t},\n\tappendForms: function()\n\t{\n\t\tvar $forms = $(this.opts.appendForms);\n\t\tif ($forms.length === 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n if (this.formdata)\n {\n var self = this;\n var formsData = $(this.opts.appendForms).serializeArray();\n $.each(formsData, function(i,s)\n {\n\t\t\tself.data.append(s.name, s.value);\n });\n }\n else\n {\n var str = $forms.serialize();\n\n this.data = (this.data === '') ? str : this.data + '&' + str;\n }\n\t}\n };\n\n\n}(Kube));\n/**\n * @library Kube Response\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Response = function(app) {};\n\n Kube.Response.prototype = {\n parse: function(str)\n\t{\n\t\tif (str === '') return false;\n\n\t\tvar obj = {};\n\n\t\ttry {\n\t\t\tobj = JSON.parse(str);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (obj[0] !== undefined)\n\t\t{\n\t\t\tfor (var item in obj)\n\t\t\t{\n\t\t\t\tthis.parseItem(obj[item]);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.parseItem(obj);\n\t\t}\n\n\t\treturn obj;\n\t},\n\tparseItem: function(item)\n\t{\n\t\tif (item.type === 'value')\n\t\t{\n\t\t\t$.each(item.data, $.proxy(function(key, val)\n\t\t\t{\n\t\t\t\tval = (val === null || val === false) ? 0 : val;\n\t\t\t\tval = (val === true) ? 1 : val;\n\n\t\t\t\t$(key).val(val);\n\n\t\t\t}, this));\n\t\t}\n\t\telse if (item.type === 'html')\n\t\t{\n\t\t\t$.each(item.data, $.proxy(function(key, val)\n\t\t\t{\n\t\t\t\tval = (val === null || val === false) ? '' : val;\n\n\t\t\t\t$(key).html(this.stripslashes(val));\n\n\t\t\t}, this));\n\t\t}\n\t\telse if (item.type === 'addClass')\n\t\t{\n\t\t\t$.each(item.data, function(key, val)\n\t\t\t{\n\t\t\t\t$(key).addClass(val);\n\t\t\t});\n }\n\t\telse if (item.type === 'removeClass')\n\t\t{\n\t\t\t$.each(item.data, function(key, val)\n\t\t\t{\n\t\t\t\t$(key).removeClass(val);\n\t\t\t});\n }\n\t\telse if (item.type === 'command')\n\t\t{\n\t\t\t$.each(item.data, function(key, val)\n\t\t\t{\n\t\t\t\t$(val)[key]();\n\t\t\t});\n\t\t}\n\t\telse if (item.type === 'animation')\n\t\t{\n\t\t\t$.each(item.data, function(key, data)\n\t\t\t{\n\t\t\t\tdata.opts = (typeof data.opts === 'undefined') ? {} : data.opts;\n\n\t\t\t\t$(key).animation(data.name, data.opts);\n\t\t\t});\n\t\t}\n\t\telse if (item.type === 'location')\n\t\t{\n\t\t\ttop.location.href = item.data;\n\t\t}\n\t\telse if (item.type === 'notify')\n\t\t{\n\t\t\t$.notify(item.data);\n\t\t}\n\n\t\treturn item;\n\t},\n stripslashes: function(str)\n\t{\n\t\treturn (str+'').replace(/\\0/g, '0').replace(/\\\\([\\\\'\"])/g, '$1');\n }\n };\n\n\n}(Kube));\n/**\n * @library Kube Utils\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Utils = function() {};\n\n Kube.Utils.prototype = {\n disableBodyScroll: function()\n\t{\n\t\tvar $body = $('html');\n\t\tvar windowWidth = window.innerWidth;\n\n\t\tif (!windowWidth)\n\t\t{\n\t\t\tvar documentElementRect = document.documentElement.getBoundingClientRect();\n\t\t\twindowWidth = documentElementRect.right - Math.abs(documentElementRect.left);\n\t\t}\n\n\t\tvar isOverflowing = document.body.clientWidth < windowWidth;\n\t\tvar scrollbarWidth = this.measureScrollbar();\n\n\t\t$body.css('overflow', 'hidden');\n\t\tif (isOverflowing) $body.css('padding-right', scrollbarWidth);\n\t},\n\tmeasureScrollbar: function()\n\t{\n\t\tvar $body = $('body');\n\t\tvar scrollDiv = document.createElement('div');\n\t\tscrollDiv.className = 'scrollbar-measure';\n\n\t\t$body.append(scrollDiv);\n\t\tvar scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n\t\t$body[0].removeChild(scrollDiv);\n\t\treturn scrollbarWidth;\n\t},\n\tenableBodyScroll: function()\n\t{\n\t\t$('html').css({ 'overflow': '', 'padding-right': '' });\n\t}\n };\n\n\n}(Kube));\n/**\n * @library Kube Message\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Message = function(element, options)\n {\n this.namespace = 'message';\n this.defaults = {\n closeSelector: '.close',\n closeEvent: 'click',\n animationOpen: 'fadeIn',\n animationClose: 'fadeOut',\n callbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Message.prototype = {\n start: function()\n {\n this.$close = this.$element.find(this.opts.closeSelector);\n this.$close.on(this.opts.closeEvent + '.' + this.namespace, $.proxy(this.close, this));\n this.$element.addClass('open');\n },\n stop: function()\n {\n this.$close.off('.' + this.namespace);\n this.$element.removeClass('open');\n },\n open: function(e)\n {\n if (e) e.preventDefault();\n\n if (!this.isOpened())\n {\n this.callback('open');\n this.$element.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n }\n },\n isOpened: function()\n {\n return this.$element.hasClass('open');\n },\n onOpened: function()\n {\n this.callback('opened');\n this.$element.addClass('open');\n },\n close: function(e)\n {\n if (e) e.preventDefault();\n\n if (this.isOpened())\n {\n this.callback('close');\n this.$element.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n }\n },\n onClosed: function()\n {\n this.callback('closed');\n this.$element.removeClass('open');\n }\n };\n\n // Inheritance\n Kube.Message.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Message');\n Kube.Plugin.autoload('Message');\n\n}(Kube));\n/**\n * @library Kube Sticky\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Sticky = function(element, options)\n {\n this.namespace = 'sticky';\n this.defaults = {\n classname: 'fixed',\n offset: 0, // pixels\n callbacks: ['fixed', 'unfixed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Sticky.prototype = {\n start: function()\n {\n\t this.offsetTop = this.getOffsetTop();\n\n\t this.load();\n\t $(window).scroll($.proxy(this.load, this));\n\t},\n\tgetOffsetTop: function()\n\t{\n\t\treturn this.$element.offset().top;\n\t},\n\tload: function()\n\t{\n\t\treturn (this.isFix()) ? this.fixed() : this.unfixed();\n\t},\n\tisFix: function()\n\t{\n return ($(window).scrollTop() > (this.offsetTop + this.opts.offset));\n\t},\n\tfixed: function()\n\t{\n\t\tthis.$element.addClass(this.opts.classname).css('top', this.opts.offset + 'px');\n\t\tthis.callback('fixed');\n\t},\n\tunfixed: function()\n\t{\n\t\tthis.$element.removeClass(this.opts.classname).css('top', '');\n\t\tthis.callback('unfixed');\n }\n };\n\n // Inheritance\n Kube.Sticky.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Sticky');\n Kube.Plugin.autoload('Sticky');\n\n}(Kube));\n/**\n * @library Kube Toggleme\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Toggleme = function(element, options)\n {\n this.namespace = 'toggleme';\n this.defaults = {\n toggleEvent: 'click',\n target: null,\n text: '',\n animationOpen: 'slideDown',\n animationClose: 'slideUp',\n callbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Toggleme.prototype = {\n start: function()\n {\n if (!this.hasTarget()) return;\n\n this.$element.on(this.opts.toggleEvent + '.' + this.namespace, $.proxy(this.toggle, this));\n },\n stop: function()\n {\n this.$element.off('.' + this.namespace);\n this.revertText();\n },\n toggle: function(e)\n {\n if (this.isOpened()) this.close(e);\n else this.open(e);\n },\n open: function(e)\n {\n if (e) e.preventDefault();\n\n if (!this.isOpened())\n {\n this.storeText();\n this.callback('open');\n this.$target.animation('slideDown', $.proxy(this.onOpened, this));\n\n // changes the text of $element with a less delay to smooth\n setTimeout($.proxy(this.replaceText, this), 100);\n\t\t}\n },\n close: function(e)\n {\n if (e) e.preventDefault();\n\n if (this.isOpened())\n {\n this.callback('close');\n this.$target.animation('slideUp', $.proxy(this.onClosed, this));\n\t\t}\n },\n\tisOpened: function()\n {\n return (this.$target.hasClass('open'));\n },\n onOpened: function()\n {\n this.$target.addClass('open');\n\t\tthis.callback('opened');\n },\n onClosed: function()\n {\n this.$target.removeClass('open');\n this.revertText();\n\t\tthis.callback('closed');\n },\n storeText: function()\n {\n this.$element.data('replacement-text', this.$element.html());\n },\n revertText: function()\n {\n var text = this.$element.data('replacement-text');\n if (text) this.$element.html(text);\n\n this.$element.removeData('replacement-text');\n },\n replaceText: function()\n {\n if (this.opts.text !== '')\n {\n this.$element.html(this.opts.text);\n }\n }\n };\n\n // Inheritance\n Kube.Toggleme.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Toggleme');\n Kube.Plugin.autoload('Toggleme');\n\n}(Kube));\n/**\n * @library Kube Offcanvas\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Offcanvas = function(element, options)\n {\n this.namespace = 'offcanvas';\n this.defaults = {\n\t\ttarget: null, // selector\n\t\tpush: true, // boolean\n\t\twidth: '250px', // string\n\t\tdirection: 'left', // string: left or right\n\t\ttoggleEvent: 'click',\n\t\tclickOutside: true, // boolean\n\t\tanimationOpen: 'slideInLeft',\n\t\tanimationClose: 'slideOutLeft',\n\t\tcallbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Services\n this.utils = new Kube.Utils();\n this.detect = new Kube.Detect();\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Offcanvas.prototype = {\n start: function()\n {\n if (!this.hasTarget()) return;\n\n this.buildTargetWidth();\n this.buildAnimationDirection();\n\n this.$close = this.getCloseLink();\n this.$element.on(this.opts.toggleEvent + '.' + this.namespace, $.proxy(this.toggle, this));\n this.$target.addClass('offcanvas');\n\t},\n\tstop: function()\n\t{\n\t\tthis.closeAll();\n\n this.$element.off('.' + this.namespace);\n this.$close.off('.' + this.namespace);\n $(document).off('.' + this.namespace);\n\t},\n\ttoggle: function(e)\n\t{\n\t\tif (this.isOpened()) this.close(e);\n\t\telse this.open(e);\n },\n\tbuildTargetWidth: function()\n\t{\n this.opts.width = ($(window).width() < parseInt(this.opts.width)) ? '100%' : this.opts.width;\n\t},\n\tbuildAnimationDirection: function()\n\t{\n if (this.opts.direction === 'right')\n {\n this.opts.animationOpen = 'slideInRight';\n\t\t\tthis.opts.animationClose = 'slideOutRight';\n }\n\t},\n\tgetCloseLink: function()\n\t{\n return this.$target.find('.close');\n\t},\n\topen: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n if (!this.isOpened())\n {\n this.closeAll();\n\t\t\tthis.callback('open');\n\n this.$target.addClass('offcanvas-' + this.opts.direction);\n this.$target.css('width', this.opts.width);\n\n this.pushBody();\n\n\t\t\tthis.$target.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n\t\t}\n\t},\n\tcloseAll: function()\n\t{\n\t\tvar $elms = $(document).find('.offcanvas');\n\t\tif ($elms.length !== 0)\n\t\t{\n $elms.each(function()\n {\n var $el = $(this);\n\n if ($el.hasClass('open'))\n {\n $el.css('width', '').animation('hide');\n $el.removeClass('open offcanvas-left offcanvas-right');\n }\n\n });\n\n $(document).off('.' + this.namespace);\n $('body').css('left', '');\n\t\t}\n\t},\n\tclose: function(e)\n\t{\n\t\tif (e)\n\t\t{\n\t\tvar $el = $(e.target);\n\t\tvar isTag = ($el[0].tagName === 'A' || $el[0].tagName === 'BUTTON');\n\t\tif (isTag && $el.closest('.offcanvas').length !== 0 && !$el.hasClass('close'))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\te.preventDefault();\n }\n\n if (this.isOpened())\n\t\t{\n\t\t\tthis.utils.enableBodyScroll();\n\t\t\tthis.callback('close');\n this.pullBody();\n\t\t\tthis.$target.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n\t\t}\n\t},\n\tisOpened: function()\n {\n return (this.$target.hasClass('open'));\n },\n\tonOpened: function()\n\t{\n\t\tif (this.opts.clickOutside) $(document).on('click.' + this.namespace, $.proxy(this.close, this));\n\t\tif (this.detect.isMobileScreen()) $('html').addClass('no-scroll');\n\n $(document).on('keyup.' + this.namespace, $.proxy(this.handleKeyboard, this));\n this.$close.on('click.' + this.namespace, $.proxy(this.close, this));\n\n\t\tthis.utils.disableBodyScroll();\n this.$target.addClass('open');\n this.callback('opened');\n\t},\n\tonClosed: function()\n\t{\n\t\tif (this.detect.isMobileScreen()) $('html').removeClass('no-scroll');\n\n this.$target.css('width', '').removeClass('offcanvas-' + this.opts.direction);\n\n this.$close.off('.' + this.namespace);\n\t\t$(document).off('.' + this.namespace);\n\n this.$target.removeClass('open');\n\t\tthis.callback('closed');\n\t},\n\thandleKeyboard: function(e)\n\t{\n\t\tif (e.which === 27) this.close();\n\t},\n\tpullBody: function()\n\t{\n if (this.opts.push)\n {\n $('body').animate({ left: 0 }, 350, function() { $(this).removeClass('offcanvas-push-body'); });\n }\n\t},\n\tpushBody: function()\n\t{\n if (this.opts.push)\n {\n var properties = (this.opts.direction === 'left') ? { 'left': this.opts.width } : { 'left': '-' + this.opts.width };\n $('body').addClass('offcanvas-push-body').animate(properties, 200);\n }\n\t}\n };\n\n // Inheritance\n Kube.Offcanvas.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Offcanvas');\n Kube.Plugin.autoload('Offcanvas');\n\n}(Kube));\n/**\n * @library Kube Collapse\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Collapse = function(element, options)\n {\n this.namespace = 'collapse';\n this.defaults = {\n target: null,\n toggle: true,\n active: false, // string (hash = tab id selector)\n toggleClass: 'collapse-toggle',\n boxClass: 'collapse-box',\n callbacks: ['open', 'opened', 'close', 'closed'],\n\n // private\n hashes: [],\n\t\tcurrentHash: false,\n\t\tcurrentItem: false\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Collapse.prototype = {\n start: function()\n {\n // items\n this.$items = this.getItems();\n this.$items.each($.proxy(this.loadItems, this));\n\n // boxes\n this.$boxes = this.getBoxes();\n\n // active\n this.setActiveItem();\n },\n getItems: function()\n {\n return this.$element.find('.' + this.opts.toggleClass);\n },\n getBoxes: function()\n {\n return this.$element.find('.' + this.opts.boxClass);\n },\n\tloadItems: function(i, el)\n\t{\n\t\tvar item = this.getItem(el);\n\n\t\t// set item identificator\n\t\titem.$el.attr('rel', item.hash);\n\n // active\n\t\tif (!$(item.hash).hasClass('hide'))\n\t\t{\n\t\t\tthis.opts.currentItem = item;\n\t\t\tthis.opts.active = item.hash;\n\n item.$el.addClass('active');\n }\n\n\t\t// event\n\t\titem.$el.on('click.collapse', $.proxy(this.toggle, this));\n\n\t},\n\tsetActiveItem: function()\n\t{\n\t\tif (this.opts.active !== false)\n\t\t{\n\t\t\tthis.opts.currentItem = this.getItemBy(this.opts.active);\n\t\t\tthis.opts.active = this.opts.currentItem.hash;\n\t\t}\n\n if (this.opts.currentItem !== false)\n {\n\t\t this.addActive(this.opts.currentItem);\n\t\t this.opts.currentItem.$box.removeClass('hide');\n\t\t}\n\t},\n\taddActive: function(item)\n\t{\n\t\titem.$box.removeClass('hide').addClass('open');\n\t\titem.$el.addClass('active');\n\n\t\tif (item.$caret !== false) item.$caret.removeClass('down').addClass('up');\n\t\tif (item.$parent !== false) item.$parent.addClass('active');\n\n\t\tthis.opts.currentItem = item;\n\t},\n\tremoveActive: function(item)\n\t{\n\t\titem.$box.removeClass('open');\n\t\titem.$el.removeClass('active');\n\n\t\tif (item.$caret !== false) item.$caret.addClass('down').removeClass('up');\n\t\tif (item.$parent !== false) item.$parent.removeClass('active');\n\n\t\tthis.opts.currentItem = false;\n\t},\n toggle: function(e)\n {\n if (e) e.preventDefault();\n\n var target = $(e.target).closest('.' + this.opts.toggleClass).get(0) || e.target;\n var item = this.getItem(target);\n\n if (this.isOpened(item.hash)) this.close(item.hash);\n else this.open(e)\n },\n openAll: function()\n {\n this.$items.addClass('active');\n this.$boxes.addClass('open').removeClass('hide');\n },\n open: function(e, push)\n {\n\t\tif (typeof e === 'undefined') return;\n\t\tif (typeof e === 'object') e.preventDefault();\n\n var target = $(e.target).closest('.' + this.opts.toggleClass).get(0) || e.target;\n\t\tvar item = (typeof e === 'object') ? this.getItem(target) : this.getItemBy(e);\n\n\t\tif (item.$box.hasClass('open'))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.opts.toggle) this.closeAll();\n\n\t\tthis.callback('open', item);\n\t\tthis.addActive(item);\n\n item.$box.animation('slideDown', $.proxy(this.onOpened, this));\n },\n onOpened: function()\n {\n\t\tthis.callback('opened', this.opts.currentItem);\n },\n closeAll: function()\n {\n this.$items.removeClass('active').closest('li').removeClass('active');\n this.$boxes.removeClass('open').addClass('hide');\n },\n close: function(num)\n {\n\t\tvar item = this.getItemBy(num);\n\n\t\tthis.callback('close', item);\n\n\t\tthis.opts.currentItem = item;\n\n\t\titem.$box.animation('slideUp', $.proxy(this.onClosed, this));\n },\n onClosed: function()\n {\n var item = this.opts.currentItem;\n\n\t\tthis.removeActive(item);\n\t\tthis.callback('closed', item);\n },\n isOpened: function(hash)\n {\n return $(hash).hasClass('open');\n },\n\tgetItem: function(element)\n\t{\n\t\tvar item = {};\n\n\t\titem.$el = $(element);\n\t\titem.hash = item.$el.attr('href');\n\t\titem.$box = $(item.hash);\n\n\t\tvar $parent = item.$el.parent();\n\t\titem.$parent = ($parent[0].tagName === 'LI') ? $parent : false;\n\n\t\tvar $caret = item.$el.find('.caret');\n\t\titem.$caret = ($caret.length !== 0) ? $caret : false;\n\n\t\treturn item;\n\t},\n\tgetItemBy: function(num)\n\t{\n\t\tvar element = (typeof num === 'number') ? this.$items.eq(num-1) : this.$element.find('[rel=\"' + num + '\"]');\n\n\t\treturn this.getItem(element);\n }\n };\n\n // Inheritance\n Kube.Collapse.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Collapse');\n Kube.Plugin.autoload('Collapse');\n\n}(Kube));\n/**\n * @library Kube Dropdown\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Dropdown = function(element, options)\n {\n this.namespace = 'dropdown';\n this.defaults = {\n\t\ttarget: null,\n\t\ttoggleEvent: 'click',\n\t\theight: false, // integer\n\t\twidth: false, // integer\n\t\tanimationOpen: 'slideDown',\n\t\tanimationClose: 'slideUp',\n\t\tcaretUp: false,\n callbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Services\n this.utils = new Kube.Utils();\n this.detect = new Kube.Detect();\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Dropdown.prototype = {\n start: function()\n {\n this.buildClose();\n this.buildCaret();\n\n if (this.detect.isMobile()) this.buildMobileAnimation();\n\n this.$target.addClass('hide');\n this.$element.on(this.opts.toggleEvent + '.' + this.namespace, $.proxy(this.toggle, this));\n\n\t},\n\tstop: function()\n\t{\n\t\tthis.$element.off('.' + this.namespace);\n this.$target.removeClass('open').addClass('hide');\n\t\tthis.disableEvents();\n\t},\n\tbuildMobileAnimation: function()\n\t{\n this.opts.animationOpen = 'fadeIn';\n this.opts.animationClose = 'fadeOut';\n\t},\n\tbuildClose: function()\n\t{\n this.$close = this.$target.find('.close');\n\t},\n\tbuildCaret: function()\n\t{\n this.$caret = this.getCaret();\n\t\tthis.buildCaretPosition();\n\t},\n\tbuildCaretPosition: function()\n\t{\n\t\tvar height = this.$element.offset().top + this.$element.innerHeight() + this.$target.innerHeight();\n\n\t\tif ($(document).height() > height)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n this.opts.caretUp = true;\n\t\tthis.$caret.addClass('up');\n\t},\n\tgetCaret: function()\n\t{\n\t\treturn this.$element.find('.caret');\n\t},\n\ttoggleCaretOpen: function()\n\t{\n\t\tif (this.opts.caretUp) this.$caret.removeClass('up').addClass('down');\n\t\telse this.$caret.removeClass('down').addClass('up');\n\t},\n\ttoggleCaretClose: function()\n\t{\n\t\tif (this.opts.caretUp) this.$caret.removeClass('down').addClass('up');\n\t\telse this.$caret.removeClass('up').addClass('down');\n\t},\n\ttoggle: function(e)\n\t{\n\t\tif (this.isOpened()) this.close(e);\n\t\telse this.open(e);\n\t},\n\topen: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n this.callback('open');\n\t\t$('.dropdown').removeClass('open').addClass('hide');\n\n\t\tif (this.opts.height) this.$target.css('min-height', this.opts.height + 'px');\n\t\tif (this.opts.width) this.$target.width(this.opts.width);\n\n\t\tthis.setPosition();\n\t\tthis.toggleCaretOpen();\n\n\t\tthis.$target.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n\t},\n\tclose: function(e)\n\t{\n if (!this.isOpened())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (e)\n\t\t{\n\t\t\tif (this.shouldNotBeClosed(e.target))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tthis.utils.enableBodyScroll();\n\t\tthis.callback('close');\n\t\tthis.toggleCaretClose();\n\n\t\tthis.$target.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n\t},\n\tonClosed: function()\n\t{\n this.$target.removeClass('open');\n\t\tthis.disableEvents();\n\t\tthis.callback('closed');\n\t},\n\tonOpened: function()\n\t{\n\t\tthis.$target.addClass('open');\n\t\tthis.enableEvents();\n\t\tthis.callback('opened');\n\t},\n\tisOpened: function()\n\t{\n\t\treturn (this.$target.hasClass('open'));\n\t},\n\tenableEvents: function()\n\t{\n\t\tif (this.detect.isDesktop())\n\t\t{\n\t\t\tthis.$target.on('mouseover.' + this.namespace, $.proxy(this.utils.disableBodyScroll, this.utils))\n\t\t\t .on('mouseout.' + this.namespace, $.proxy(this.utils.enableBodyScroll, this.utils));\n\t\t}\n\n\t\t$(document).on('scroll.' + this.namespace, $.proxy(this.setPosition, this));\n\t\t$(window).on('resize.' + this.namespace, $.proxy(this.setPosition, this));\n\t\t$(document).on('click.' + this.namespace + ' touchstart.' + this.namespace, $.proxy(this.close, this));\n\t\t$(document).on('keydown.' + this.namespace, $.proxy(this.handleKeyboard, this));\n\t\tthis.$target.find('[data-action=\"dropdown-close\"]').on('click.' + this.namespace, $.proxy(this.close, this));\n\t},\n\tdisableEvents: function()\n\t{\n\t\tthis.$target.off('.' + this.namespace);\n\t\t$(document).off('.' + this.namespace);\n\t\t$(window).off('.' + this.namespace);\n\t},\n\thandleKeyboard: function(e)\n\t{\n\t\tif (e.which === 27) this.close(e);\n\t},\n\tshouldNotBeClosed: function(el)\n\t{\n if ($(el).attr('data-action') === 'dropdown-close' || el === this.$close[0])\n {\n return false;\n\t\t}\n\t\telse if ($(el).closest('.dropdown').length === 0)\n\t\t{\n\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t},\n isNavigationFixed: function()\n\t{\n\t\treturn (this.$element.closest('.fixed').length !== 0);\n\t},\n\tgetPlacement: function(height)\n\t{\n\t\treturn ($(document).height() < height) ? 'top' : 'bottom';\n\t},\n\tgetOffset: function(position)\n\t{\n\t\treturn (this.isNavigationFixed()) ? this.$element.position() : this.$element.offset();\n\t},\n\tgetPosition: function()\n\t{\n\t\treturn (this.isNavigationFixed()) ? 'fixed' : 'absolute';\n\t},\n\tsetPosition: function()\n\t{\n\t\tif (this.detect.isMobile())\n\t\t{\n this.$target.addClass('dropdown-mobile');\n return;\n\t\t}\n\n\t\tvar position = this.getPosition();\n\t\t\tvar coords = this.getOffset(position);\n\t\t\tvar height = this.$target.innerHeight();\n\t\t\tvar width = this.$target.innerWidth();\n\t\t\tvar placement = this.getPlacement(coords.top + height + this.$element.innerHeight());\n\t\t\tvar leftFix = ($(window).width() < (coords.left + width)) ? (width - this.$element.innerWidth()) : 0;\n\t\t\tvar top, left = coords.left - leftFix;\n\n\t\t\tif (placement === 'bottom')\n\t\t\t{\n\t\t\tif (!this.isOpened()) this.$caret.removeClass('up').addClass('down');\n\n\t\t\t\tthis.opts.caretUp = false;\n\t\t\t\ttop = coords.top + this.$element.outerHeight() + 1;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.opts.animationOpen = 'show';\n\t\t\t\tthis.opts.animationClose = 'hide';\n\n if (!this.isOpened()) this.$caret.addClass('up').removeClass('down');\n\n\t\t\t\tthis.opts.caretUp = true;\n\t\t\t\ttop = coords.top - height - 1;\n\t\t\t}\n\n\t\t\tthis.$target.css({ position: position, top: top + 'px', left: left + 'px' });\n\t}\n };\n\n // Inheritance\n Kube.Dropdown.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Dropdown');\n Kube.Plugin.autoload('Dropdown');\n\n}(Kube));\n/**\n * @library Kube Tabs\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Tabs = function(element, options)\n {\n this.namespace = 'tabs';\n this.defaults = {\n\t\tequals: false,\n\t\tactive: false, // string (hash = tab id selector)\n\t\tlive: false, // class selector\n\t\thash: true, //boolean\n\t\tcallbacks: ['init', 'next', 'prev', 'open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Tabs.prototype = {\n start: function()\n {\n if (this.opts.live !== false) this.buildLiveTabs();\n\n this.tabsCollection = [];\n this.hashesCollection = [];\n this.currentHash = [];\n this.currentItem = false;\n\n // items\n this.$items = this.getItems();\n this.$items.each($.proxy(this.loadItems, this));\n\n // tabs\n\t\tthis.$tabs = this.getTabs();\n\n // location hash\n\t\tthis.currentHash = this.getLocationHash();\n\n\t\t// close all\n\t\tthis.closeAll();\n\n // active & height\n\t\tthis.setActiveItem();\n\t\tthis.setItemHeight();\n\n // callback\n\t\tthis.callback('init');\n\n\t},\n\tgetTabs: function()\n\t{\n\t\treturn $(this.tabsCollection).map(function()\n\t\t{\n\t\treturn this.toArray();\n });\n\t},\n\tgetItems: function()\n\t{\n\t\treturn this.$element.find('a');\n\t},\n\tloadItems: function(i, el)\n\t{\n\t\tvar item = this.getItem(el);\n\n\t\t// set item identificator\n\t\titem.$el.attr('rel', item.hash);\n\n\t\t// collect item\n this.collectItem(item);\n\n // active\n\t\tif (item.$parent.hasClass('active'))\n\t\t{\n\t\t\tthis.currentItem = item;\n\t\t\tthis.opts.active = item.hash;\n\t\t}\n\n\t\t// event\n\t\titem.$el.on('click.tabs', $.proxy(this.open, this));\n\n\t},\n\tcollectItem: function(item)\n\t{\n\t\tthis.tabsCollection.push(item.$tab);\n\t\tthis.hashesCollection.push(item.hash);\n\t},\n\tbuildLiveTabs: function()\n\t{\n\t\tvar $layers = $(this.opts.live);\n\n\t\tif ($layers.length === 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.$liveTabsList = $('').addClass('hide');\n\t\t\t$('body').prepend(this.$overlay);\n\t\t}\n\n\t\tthis.$overlay.addClass('overlay');\n\t},\n\tbuildHeader: function()\n\t{\n\t\tif (this.opts.header) this.$header.html(this.opts.header);\n\t},\n\tload: function(e)\n\t{\n\t\tthis.buildModal();\n\t\tthis.buildOverlay();\n\t\tthis.buildHeader();\n\n if (this.opts.url) this.buildContent();\n else this.open(e);\n\t},\n\topen: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n if (this.isOpened())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.detect.isMobile()) this.opts.width = '96%';\n\t\tif (this.opts.overlay) this.$overlay.removeClass('hide');\n\n\t\tthis.$target.removeClass('hide');\n\t\tthis.$modal.removeClass('hide');\n\n this.enableEvents();\n\t\tthis.findActions();\n\n\t\tthis.resize();\n\t\t$(window).on('resize.' + this.namespace, $.proxy(this.resize, this));\n\n\t\tif (this.detect.isDesktop()) this.utils.disableBodyScroll();\n\n\t\t// enter\n\t\tthis.$modal.find('input[type=text],input[type=url],input[type=email]').on('keydown.' + this.namespace, $.proxy(this.handleEnter, this));\n\n\t\tthis.callback('open');\n\t\tthis.$modal.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n },\n close: function(e)\n {\n if (!this.$modal || !this.isOpened())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (e)\n\t\t{\n\t\t\tif (this.shouldNotBeClosed(e.target))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tthis.callback('close');\n\t\tthis.disableEvents();\n\n\t\tthis.$modal.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n\n if (this.opts.overlay) this.$overlay.animation(this.opts.animationClose);\n },\n\tonOpened: function()\n\t{\n\t\tthis.$modal.addClass('open');\n this.callback('opened');\n\n $.modalcurrent = this;\n\t},\n\tonClosed: function()\n\t{\n\t\tthis.callback('closed');\n\n this.$target.addClass('hide');\n this.$modal.removeClass('open');\n\n\t\tif (this.detect.isDesktop()) this.utils.enableBodyScroll();\n\n\t\tthis.$body.css('height', '');\n $.modalcurrent = null;\n\t},\n\tisOpened: function()\n\t{\n\t\treturn (this.$modal.hasClass('open'));\n\t},\n\tgetData: function()\n\t{\n var formdata = new Kube.FormData(this);\n formdata.set('');\n\n return formdata.get();\n\t},\n\tbuildContent: function()\n\t{\n\t\t$.ajax({\n\t\t\turl: this.opts.url + '?' + new Date().getTime(),\n\t\t\tcache: false,\n\t\t\ttype: 'post',\n\t\t\tdata: this.getData(),\n\t\t\tsuccess: $.proxy(function(data)\n\t\t\t{\n\t\t\t\tthis.$body.html(data);\n\t\t\t\tthis.open();\n\n\t\t\t}, this)\n\t\t});\n\t},\n\tbuildWidth: function()\n\t{\n\t\tvar width = this.opts.width;\n\t\tvar top = '2%';\n\t\tvar bottom = '2%';\n\t\tvar percent = width.match(/%$/);\n\n\t\tif ((parseInt(this.opts.width) > $(window).width()) && !percent)\n\t\t{\n width = '96%';\n\t\t}\n\t\telse if (!percent)\n\t\t{\n top = '16px';\n bottom = '16px';\n\t\t}\n\n\t\tthis.$modal.css({ 'width': width, 'margin-top': top, 'margin-bottom': bottom });\n\n\t},\n\tbuildPosition: function()\n\t{\n\t\tif (this.opts.position !== 'center')\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tvar windowHeight = $(window).height();\n\t\tvar height = this.$modal.outerHeight();\n\t\tvar top = (windowHeight/2 - height/2) + 'px';\n\n\t\tif (this.detect.isMobile()) top = '2%';\n\t\telse if (height > windowHeight) top = '16px';\n\n\t\tthis.$modal.css('margin-top', top);\n\t},\n\tbuildHeight: function()\n\t{\n\t\tvar windowHeight = $(window).height();\n\n\t\tif (this.opts.maxHeight)\n\t\t{\n\t\t\tvar padding = parseInt(this.$body.css('padding-top')) + parseInt(this.$body.css('padding-bottom'));\n\t\t\tvar margin = parseInt(this.$modal.css('margin-top')) + parseInt(this.$modal.css('margin-bottom'));\n\t\t\tvar height = windowHeight - this.$header.innerHeight() - padding - margin;\n\n\t\t\tthis.$body.height(height);\n\t\t}\n\t\telse if (this.opts.height !== false)\n\t\t{\n\t\t\tthis.$body.css('height', this.opts.height);\n\t\t}\n\n\t\tvar modalHeight = this.$modal.outerHeight();\n\t\tif (modalHeight > windowHeight)\n\t\t{\n\t\t\tthis.opts.animationOpen = 'show';\n\t\t\tthis.opts.animationClose = 'hide';\n\t\t}\n\t},\n\tresize: function()\n\t{\n\t\tthis.buildWidth();\n\t\tthis.buildPosition();\n\t\tthis.buildHeight();\n\t},\n\tenableEvents: function()\n\t{\n\t\tthis.$close.on('click.' + this.namespace, $.proxy(this.close, this));\n\t\t$(document).on('keyup.' + this.namespace, $.proxy(this.handleEscape, this));\n\t\tthis.$target.on('click.' + this.namespace, $.proxy(this.close, this));\n\t},\n\tdisableEvents: function()\n\t{\n\t\tthis.$close.off('.' + this.namespace);\n\t\t$(document).off('.' + this.namespace);\n\t\tthis.$target.off('.' + this.namespace);\n\t\t$(window).off('.' + this.namespace);\n\t},\n\tfindActions: function()\n\t{\n\t\tthis.$body.find('[data-action=\"modal-close\"]').on('mousedown.' + this.namespace, $.proxy(this.close, this));\n\t},\n\tsetHeader: function(header)\n\t{\n\t\tthis.$header.html(header);\n\t},\n\tsetContent: function(content)\n\t{\n\t\tthis.$body.html(content);\n\t},\n\tsetWidth: function(width)\n\t{\n\t\tthis.opts.width = width;\n\t\tthis.resize();\n\t},\n\tgetModal: function()\n\t{\n return this.$modal;\n\t},\n\tgetBody: function()\n\t{\n return this.$body;\n\t},\n\tgetHeader: function()\n\t{\n return this.$header;\n\t},\n\thandleEnter: function(e)\n\t{\n\t\tif (e.which === 13)\n\t\t{\n\t\te.preventDefault();\n\t\tthis.close(false);\n }\n\t},\n\thandleEscape: function(e)\n\t{\n\t\treturn (e.which === 27) ? this.close(false) : true;\n\t},\n\tshouldNotBeClosed: function(el)\n\t{\n if ($(el).attr('data-action') === 'modal-close' || el === this.$close[0])\n {\n return false;\n\t\t}\n\t\telse if ($(el).closest('.modal').length === 0)\n\t\t{\n\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n };\n\n // Inheritance\n Kube.Modal.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Modal');\n Kube.Plugin.autoload('Modal');\n\n}(Kube));","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define(['d3'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('d3'));\n } else {\n root.MG = factory(root.d3);\n }\n}(this, function(d3) {\n(typeof window === 'undefined' ? global : window).MG = {version: '2.11'};\n\n//a set of helper functions, some that we've written, others that we've borrowed\n\nMG.convert = {};\n\nMG.convert.date = function(data, accessor, time_format) {\n time_format = (typeof time_format === \"undefined\") ? '%Y-%m-%d' : time_format;\n var parse_time = d3.timeParse(time_format);\n data = data.map(function(d) {\n d[accessor] = parse_time(d[accessor].trim());\n return d;\n });\n\n return data;\n}\n\nMG.convert.number = function(data, accessor) {\n data = data.map(function(d) {\n d[accessor] = Number(d[accessor]);\n return d;\n });\n\n return data;\n}\n\nMG.time_format = function(utc, specifier) {\n return utc ? d3.utcFormat(specifier) : d3.timeFormat(specifier);\n}\n\nfunction mg_jquery_exists() {\n if (typeof jQuery !== 'undefined' || typeof $ !== 'undefined') {\n return true;\n } else {\n return false;\n }\n}\n\nfunction mg_get_rollover_time_format(args) {\n var fmt;\n switch (args.processed.x_time_frame) {\n case 'millis':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %H:%M:%S.%L');\n break;\n case 'seconds':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %H:%M:%S');\n break;\n case 'less-than-a-day':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %I:%M%p');\n break;\n case 'four-days':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %I:%M%p');\n break;\n default:\n fmt = MG.time_format(args.utc_time, '%b %e, %Y');\n }\n return fmt;\n}\n\nfunction mg_data_in_plot_bounds(datum, args) {\n return datum[args.x_accessor] >= args.processed.min_x &&\n datum[args.x_accessor] <= args.processed.max_x &&\n datum[args.y_accessor] >= args.processed.min_y &&\n datum[args.y_accessor] <= args.processed.max_y;\n}\n\nfunction is_array(thing) {\n return Object.prototype.toString.call(thing) === '[object Array]';\n}\n\nfunction is_function(thing) {\n return Object.prototype.toString.call(thing) === '[object Function]';\n}\n\nfunction is_empty_array(thing) {\n return is_array(thing) && thing.length === 0;\n}\n\nfunction is_object(thing) {\n return Object.prototype.toString.call(thing) === '[object Object]';\n}\n\nfunction is_array_of_arrays(data) {\n var all_elements = data.map(function(d) {\n return is_array(d) === true && d.length > 0;\n });\n\n return d3.sum(all_elements) === data.length;\n}\n\nfunction is_array_of_objects(data) {\n // is every element of data an object?\n var all_elements = data.map(function(d) {\n return is_object(d) === true;\n });\n\n return d3.sum(all_elements) === data.length;\n}\n\nfunction is_array_of_objects_or_empty(data) {\n return is_empty_array(data) || is_array_of_objects(data);\n}\n\nfunction pluck(arr, accessor) {\n return arr.map(function(d) {\n return d[accessor] });\n}\n\nfunction count_array_elements(arr) {\n return arr.reduce(function(a, b) { a[b] = a[b] + 1 || 1;\n return a; }, {});\n}\n\nfunction mg_get_bottom(args) {\n return args.height - args.bottom;\n}\n\nfunction mg_get_plot_bottom(args) {\n // returns the pixel location of the bottom side of the plot area.\n return mg_get_bottom(args) - args.buffer;\n}\n\nfunction mg_get_top(args) {\n return args.top;\n}\n\nfunction mg_get_plot_top(args) {\n // returns the pixel location of the top side of the plot area.\n return mg_get_top(args) + args.buffer;\n}\n\nfunction mg_get_left(args) {\n return args.left;\n}\n\nfunction mg_get_plot_left(args) {\n // returns the pixel location of the left side of the plot area.\n return mg_get_left(args) + args.buffer;\n}\n\nfunction mg_get_right(args) {\n return args.width - args.right;\n}\n\nfunction mg_get_plot_right(args) {\n // returns the pixel location of the right side of the plot area.\n return mg_get_right(args) - args.buffer;\n}\n\n//////// adding elements, removing elements /////////////\n\nfunction mg_exit_and_remove(elem) {\n elem.exit().remove();\n}\n\nfunction mg_selectAll_and_remove(svg, cl) {\n svg.selectAll(cl).remove();\n}\n\nfunction mg_add_g(svg, cl) {\n return svg.append('g').classed(cl, true);\n}\n\nfunction mg_remove_element(svg, elem) {\n svg.select(elem).remove();\n}\n\n//////// axis helper functions ////////////\n\nfunction mg_make_rug(args, rug_class) {\n var svg = mg_get_svg_child_of(args.target);\n var all_data = mg_flatten_array(args.data);\n var rug = svg.selectAll('line.' + rug_class).data(all_data);\n\n rug.enter()\n .append('line')\n .attr('class', rug_class)\n .attr('opacity', 0.3);\n\n //remove rug elements that are no longer in use\n mg_exit_and_remove(rug);\n\n //set coordinates of new rug elements\n mg_exit_and_remove(rug);\n return rug;\n}\n\nfunction mg_add_color_accessor_to_rug(rug, args, rug_mono_class) {\n if (args.color_accessor) {\n rug.attr('stroke', args.scalefns.colorf);\n rug.classed(rug_mono_class, false);\n } else {\n rug.attr('stroke', null);\n rug.classed(rug_mono_class, true);\n }\n}\n\nfunction mg_rotate_labels(labels, rotation_degree) {\n if (rotation_degree) {\n labels.attr({\n dy: 0,\n transform: function() {\n var elem = d3.select(this);\n return 'rotate(' + rotation_degree + ' ' + elem.attr('x') + ',' + elem.attr('y') + ')';\n }\n });\n }\n}\n\n//////////////////////////////////////////////////\n\nfunction mg_elements_are_overlapping(labels) {\n labels = labels.node();\n if (!labels) {\n return false;\n }\n\n for (var i = 0; i < labels.length; i++) {\n if (mg_is_horizontally_overlapping(labels[i], labels)) return true;\n }\n\n return false;\n}\n\nfunction mg_prevent_horizontal_overlap(labels, args) {\n if (!labels || labels.length == 1) {\n return;\n }\n\n //see if each of our labels overlaps any of the other labels\n for (var i = 0; i < labels.length; i++) {\n //if so, nudge it up a bit, if the label it intersects hasn't already been nudged\n if (mg_is_horizontally_overlapping(labels[i], labels)) {\n var node = d3.select(labels[i]);\n var newY = +node.attr('y');\n if (newY + 8 >= args.top) {\n newY = args.top - 16;\n }\n node.attr('y', newY);\n }\n }\n}\n\nfunction mg_prevent_vertical_overlap(labels, args) {\n if (!labels || labels.length == 1) {\n return;\n }\n\n labels.sort(function(b, a) {\n return d3.select(a).attr('y') - d3.select(b).attr('y');\n });\n\n labels.reverse();\n\n var overlap_amount, label_i, label_j;\n\n //see if each of our labels overlaps any of the other labels\n for (var i = 0; i < labels.length; i++) {\n //if so, nudge it up a bit, if the label it intersects hasn't already been nudged\n label_i = d3.select(labels[i]).text();\n\n for (var j = 0; j < labels.length; j++) {\n label_j = d3.select(labels[j]).text();\n overlap_amount = mg_is_vertically_overlapping(labels[i], labels[j]);\n\n if (overlap_amount !== false && label_i !== label_j) {\n var node = d3.select(labels[i]);\n var newY = +node.attr('y');\n newY = newY + overlap_amount;\n node.attr('y', newY);\n }\n }\n }\n}\n\nfunction mg_is_vertically_overlapping(element, sibling) {\n var element_bbox = element.getBoundingClientRect();\n var sibling_bbox = sibling.getBoundingClientRect();\n\n if (element_bbox.top <= sibling_bbox.bottom && element_bbox.top >= sibling_bbox.top) {\n return sibling_bbox.bottom - element_bbox.top;\n }\n\n return false;\n}\n\nfunction mg_is_horiz_overlap(element, sibling) {\n var element_bbox = element.getBoundingClientRect();\n var sibling_bbox = sibling.getBoundingClientRect();\n\n if (element_bbox.right >= sibling_bbox.left || element_bbox.top >= sibling_bbox.top) {\n return sibling_bbox.bottom - element_bbox.top;\n }\n return false;\n}\n\nfunction mg_is_horizontally_overlapping(element, labels) {\n var element_bbox = element.getBoundingClientRect();\n\n for (var i = 0; i < labels.length; i++) {\n if (labels[i] == element) {\n continue;\n }\n\n //check to see if this label overlaps with any of the other labels\n var sibling_bbox = labels[i].getBoundingClientRect();\n if (element_bbox.top === sibling_bbox.top &&\n !(sibling_bbox.left > element_bbox.right || sibling_bbox.right < element_bbox.left)\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction mg_infer_type(args, ns) {\n // must return categorical or numerical.\n var testPoint = mg_flatten_array(args.data);\n\n testPoint = testPoint[0][args[ns + '_accessor']];\n return typeof testPoint === 'string' ? 'categorical' : 'numerical';\n }\n\nfunction mg_get_svg_child_of(selector_or_node) {\n return d3.select(selector_or_node).select('svg');\n}\n\nfunction mg_flatten_array(arr) {\n var flat_data = [];\n return flat_data.concat.apply(flat_data, arr);\n}\n\nfunction mg_next_id() {\n if (typeof MG._next_elem_id === 'undefined') {\n MG._next_elem_id = 0;\n }\n\n return 'mg-' + (MG._next_elem_id++);\n}\n\nfunction mg_target_ref(target) {\n if (typeof target === 'string') {\n return mg_normalize(target);\n\n } else if (target instanceof window.HTMLElement) {\n var target_ref = target.getAttribute('data-mg-uid');\n if (!target_ref) {\n target_ref = mg_next_id();\n target.setAttribute('data-mg-uid', target_ref);\n }\n\n return target_ref;\n\n } else {\n console.warn('The specified target should be a string or an HTMLElement.', target);\n return mg_normalize(target);\n }\n}\n\nfunction mg_normalize(string) {\n return string\n .replace(/[^a-zA-Z0-9 _-]+/g, '')\n .replace(/ +?/g, '');\n}\n\nfunction get_pixel_dimension(target, dimension) {\n return Number(d3.select(target).style(dimension).replace(/px/g, ''));\n}\n\nfunction get_width(target) {\n return get_pixel_dimension(target, 'width');\n}\n\nfunction get_height(target) {\n return get_pixel_dimension(target, 'height');\n}\n\nfunction isNumeric(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\n\nvar each = function(obj, iterator, context) {\n // yanked out of underscore\n var breaker = {};\n if (obj === null) return obj;\n if (Array.prototype.forEach && obj.forEach === Array.prototype.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length === +obj.length) {\n for (var i = 0, length = obj.length; i < length; i++) {\n if (iterator.call(context, obj[i], i, obj) === breaker) return;\n }\n } else {\n for (var k in obj) {\n if (iterator.call(context, obj[k], k, obj) === breaker) return;\n }\n }\n\n return obj;\n};\n\nfunction merge_with_defaults(obj) {\n // taken from underscore\n each(Array.prototype.slice.call(arguments, 1), function(source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === void 0) obj[prop] = source[prop];\n }\n }\n });\n\n return obj;\n}\n\nMG.merge_with_defaults = merge_with_defaults;\n\nfunction number_of_values(data, accessor, value) {\n var values = data.filter(function(d) {\n return d[accessor] === value;\n });\n\n return values.length;\n}\n\nfunction has_values_below(data, accessor, value) {\n var values = data.filter(function(d) {\n return d[accessor] <= value;\n });\n\n return values.length > 0;\n}\n\nfunction has_too_many_zeros(data, accessor, zero_count) {\n return number_of_values(data, accessor, 0) >= zero_count;\n}\n\nfunction mg_is_date(obj) {\n return Object.prototype.toString.call(obj) === '[object Date]';\n}\n\nfunction mg_is_object(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nfunction mg_is_array(obj) {\n if (Array.isArray) {\n return Array.isArray(obj);\n }\n\n return Object.prototype.toString.call(obj) === '[object Array]';\n}\n\nfunction mg_is_function(obj) {\n return Object.prototype.toString.call(obj) === '[object Function]';\n}\n\n// deep copy\n// http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object\nMG.clone = function(obj) {\n var copy;\n\n // Handle the 3 simple types, and null or undefined\n if (null === obj || \"object\" !== typeof obj) return obj;\n\n // Handle Date\n if (mg_is_date(obj)) {\n copy = new Date();\n copy.setTime(obj.getTime());\n return copy;\n }\n\n // Handle Array\n if (mg_is_array(obj)) {\n copy = [];\n for (var i = 0, len = obj.length; i < len; i++) {\n copy[i] = MG.clone(obj[i]);\n }\n return copy;\n }\n\n // Handle Object\n if (mg_is_object(obj)) {\n copy = {};\n for (var attr in obj) {\n if (obj.hasOwnProperty(attr)) copy[attr] = MG.clone(obj[attr]);\n }\n return copy;\n }\n\n throw new Error(\"Unable to copy obj! Its type isn't supported.\");\n};\n\n// give us the difference of two int arrays\n// http://radu.cotescu.com/javascript-diff-function/\nfunction arr_diff(a, b) {\n var seen = [],\n diff = [],\n i;\n for (i = 0; i < b.length; i++)\n seen[b[i]] = true;\n for (i = 0; i < a.length; i++)\n if (!seen[a[i]])\n diff.push(a[i]);\n return diff;\n}\n\nMG.arr_diff = arr_diff;\n\n/**\n Print warning message to the console when a feature has been scheduled for removal\n\n @author Dan de Havilland (github.com/dandehavilland)\n @date 2014-12\n*/\nfunction warn_deprecation(message, untilVersion) {\n console.warn('Deprecation: ' + message + (untilVersion ? '. This feature will be removed in ' + untilVersion + '.' : ' the near future.'));\n console.trace();\n}\n\nMG.warn_deprecation = warn_deprecation;\n\n/**\n Truncate a string to fit within an SVG text node\n CSS text-overlow doesn't apply to SVG <= 1.2\n\n @author Dan de Havilland (github.com/dandehavilland)\n @date 2014-12-02\n*/\nfunction truncate_text(textObj, textString, width) {\n var bbox,\n position = 0;\n\n textObj.textContent = textString;\n bbox = textObj.getBBox();\n\n while (bbox.width > width) {\n textObj.textContent = textString.slice(0, --position) + '...';\n bbox = textObj.getBBox();\n\n if (textObj.textContent === '...') {\n break;\n }\n }\n}\n\nMG.truncate_text = truncate_text;\n\n/**\n Wrap the contents of a text node to a specific width\n\n Adapted from bl.ocks.org/mbostock/7555321\n\n @author Mike Bostock\n @author Dan de Havilland\n @date 2015-01-14\n*/\nfunction wrap_text(text, width, token, tspanAttrs) {\n text.each(function() {\n var text = d3.select(this),\n words = text.text().split(token || /\\s+/).reverse(),\n word,\n line = [],\n lineNumber = 0,\n lineHeight = 1.1, // ems\n y = text.attr(\"y\"),\n dy = 0,\n tspan = text.text(null)\n .append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"y\", dy + \"em\")\n .attr(tspanAttrs || {});\n\n while (!!(word = words.pop())) {\n line.push(word);\n tspan.text(line.join(\" \"));\n if (width === null || tspan.node().getComputedTextLength() > width) {\n line.pop();\n tspan.text(line.join(\" \"));\n line = [word];\n tspan = text\n .append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"y\", ++lineNumber * lineHeight + dy + \"em\")\n .attr(tspanAttrs || {})\n .text(word);\n }\n }\n });\n}\n\nMG.wrap_text = wrap_text;\n\nfunction register(chartType, descriptor, defaults) {\n MG.charts[chartType] = {\n descriptor: descriptor,\n defaults: defaults || {}\n };\n}\n\nMG.register = register;\n\n/**\n Record of all registered hooks.\n For internal use only.\n*/\nMG._hooks = {};\n\n/**\n Add a hook callthrough to the stack.\n\n Hooks are executed in the order that they were registered.\n*/\nMG.add_hook = function(name, func, context) {\n var hooks;\n\n if (!MG._hooks[name]) {\n MG._hooks[name] = [];\n }\n\n hooks = MG._hooks[name];\n\n var already_registered =\n hooks.filter(function(hook) {\n return hook.func === func;\n })\n .length > 0;\n\n if (already_registered) {\n throw 'That function is already registered.';\n }\n\n hooks.push({\n func: func,\n context: context\n });\n};\n\n/**\n Execute registered hooks.\n\n Optional arguments\n*/\nMG.call_hook = function(name) {\n var hooks = MG._hooks[name],\n result = [].slice.apply(arguments, [1]),\n processed;\n\n if (hooks) {\n hooks.forEach(function(hook) {\n if (hook.func) {\n var params = processed || result;\n\n if (params && params.constructor !== Array) {\n params = [params];\n }\n\n params = [].concat.apply([], params);\n processed = hook.func.apply(hook.context, params);\n }\n });\n }\n\n return processed || result;\n};\n\nMG.globals = {};\nMG.deprecations = {\n rollover_callback: { replacement: 'mouseover', version: '2.0' },\n rollout_callback: { replacement: 'mouseout', version: '2.0' },\n x_rollover_format: { replacement: 'x_mouseover', version: '2.10' },\n y_rollover_format: { replacement: 'y_mouseover', version: '2.10' },\n show_years: { replacement: 'show_secondary_x_label', version: '2.1' },\n xax_start_at_min: { replacement: 'axes_not_compact', version: '2.7' },\n interpolate_tension: { replacement: 'interpolate', version: '2.10' }\n};\nMG.globals.link = false;\nMG.globals.version = \"1.1\";\n\nMG.charts = {};\n\nMG.data_graphic = function(args) {\n 'use strict';\n var defaults = {\n missing_is_zero: false, // if true, missing values will be treated as zeros\n missing_is_hidden: false, // if true, missing values will appear as broken segments\n missing_is_hidden_accessor: null, // the accessor that determines the boolean value for missing data points\n legend: '' , // an array identifying the labels for a chart's lines\n legend_target: '', // if set, the specified element is populated with a legend\n error: '', // if set, a graph will show an error icon and log the error to the console\n animate_on_load: false, // animate lines on load\n top: 65, // the size of the top margin\n title_y_position: 10, // how many pixels from the top edge (0) should we show the title at\n center_title_full_width: false, // center the title over the full graph (i.e. ignore left and right margins)\n bottom: 45, // the size of the bottom margin\n right: 10, // size of the right margin\n left: 50, // size of the left margin\n buffer: 8, // the buffer between the actual chart area and the margins\n width: 350, // the width of the entire graphic\n height: 220, // the height of the entire graphic\n full_width: false, // sets the graphic width to be the width of the parent element and resizes dynamically\n full_height: false, // sets the graphic width to be the width of the parent element and resizes dynamically\n small_height_threshold: 120, // the height threshold for when smaller text appears\n small_width_threshold: 160, // the width threshold for when smaller text appears\n xax_count: 6, // number of x axis ticks\n xax_tick_length: 5, // x axis tick length\n axes_not_compact: true,\n yax_count: 3, // number of y axis ticks\n yax_tick_length: 5, // y axis tick length\n x_extended_ticks: false, // extends x axis ticks across chart - useful for tall charts\n y_extended_ticks: false, // extends y axis ticks across chart - useful for long charts\n y_scale_type: 'linear',\n max_x: null,\n max_y: null,\n min_x: null,\n min_y: null, // if set, y axis starts at an arbitrary value\n min_y_from_data: false, // if set, y axis will start at minimum value rather than at 0\n point_size: 2.5, // the size of the dot that appears on a line on mouse-over\n x_accessor: 'date',\n xax_units: '',\n x_label: '',\n x_sort: true,\n x_axis: true,\n y_axis: true,\n x_axis_position: 'bottom',\n y_axis_position: 'left',\n x_axis_type: null, // TO BE INTRODUCED IN 2.10\n y_axis_type: null, // TO BE INTRODUCED IN 2.10\n ygroup_accessor: null,\n xgroup_accessor:null,\n y_padding_percentage: 0.05, // for categorical scales\n y_outer_padding_percentage: .1, // for categorical scales\n ygroup_padding_percentage:.25, // for categorical scales\n ygroup_outer_padding_percentage: 0, // for categorical scales\n x_padding_percentage: 0.05, // for categorical scales\n x_outer_padding_percentage: .1, // for categorical scales\n xgroup_padding_percentage:.25, // for categorical scales\n xgroup_outer_padding_percentage: 0, // for categorical scales\n y_categorical_show_guides: false,\n x_categorical_show_guide: false,\n rotate_x_labels: 0,\n rotate_y_labels: 0,\n y_accessor: 'value',\n y_label: '',\n yax_units: '',\n yax_units_append: false,\n x_rug: false,\n y_rug: false,\n mouseover_align: 'right', // implemented in point.js\n x_mouseover: null,\n y_mouseover: null,\n transition_on_update: true,\n mouseover: null,\n click: null,\n show_rollover_text: true,\n show_confidence_band: null, // given [l, u] shows a confidence at each point from l to u\n xax_format: null, // xax_format is a function that formats the labels for the x axis.\n area: true,\n chart_type: 'line',\n data: [],\n decimals: 2, // the number of decimals in any rollover\n format: 'count', // format = {count, percentage}\n inflator: 10/9, // for setting y axis max\n linked: false, // links together all other graphs with linked:true, so rollovers in one trigger rollovers in the others\n linked_format: '%Y-%m-%d', // What granularity to link on for graphs. Default is at day\n list: false,\n baselines: null, // sets the baseline lines\n markers: null, // sets the marker lines\n scalefns: {},\n scales: {},\n utc_time: false,\n european_clock: false,\n show_year_markers: false,\n show_secondary_x_label: true,\n target: '#viz',\n interpolate: d3.curveCatmullRom.alpha(0), // interpolation method to use when rendering lines; increase tension if your data is irregular and you notice artifacts\n custom_line_color_map: [], // allows arbitrary mapping of lines to colors, e.g. [2,3] will map line 1 to color 2 and line 2 to color 3\n colors: null, // UNIMPLEMENTED - allows direct color mapping to line colors. Will eventually require\n max_data_size: null, // explicitly specify the the max number of line series, for use with custom_line_color_map\n aggregate_rollover: false, // links the lines in a multi-line chart\n show_tooltips: true // if enabled, a chart's description will appear in a tooltip (requires jquery)\n };\n\n MG.call_hook('global.defaults', defaults);\n\n if (!args) { args = {}; }\n\n var selected_chart = MG.charts[args.chart_type || defaults.chart_type];\n merge_with_defaults(args, selected_chart.defaults, defaults);\n\n if (args.list) {\n args.x_accessor = 0;\n args.y_accessor = 1;\n }\n\n // check for deprecated parameters\n for (var key in MG.deprecations) {\n if (args.hasOwnProperty(key)) {\n var deprecation = MG.deprecations[key],\n message = 'Use of `args.' + key + '` has been deprecated',\n replacement = deprecation.replacement,\n version;\n\n // transparently alias the deprecated\n if (replacement) {\n if (args[replacement]) {\n message += '. The replacement - `args.' + replacement + '` - has already been defined. This definition will be discarded.';\n } else {\n args[replacement] = args[key];\n }\n }\n\n if (deprecation.warned) {\n continue;\n }\n\n deprecation.warned = true;\n\n if (replacement) {\n message += ' in favor of `args.' + replacement + '`';\n }\n\n warn_deprecation(message, deprecation.version);\n }\n }\n\n MG.call_hook('global.before_init', args);\n\n new selected_chart.descriptor(args);\n\n return args.data;\n};\n\nif (mg_jquery_exists()) {\n /* ========================================================================\n * Bootstrap: tooltip.js v3.3.5\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n +function ($) {\n 'use strict';\n\n // TOOLTIP PUBLIC CLASS DEFINITION\n // ===============================\n\n var Tooltip = function (element, options) {\n this.type = null\n this.options = null\n this.enabled = null\n this.timeout = null\n this.hoverState = null\n this.$element = null\n this.inState = null\n\n this.init('tooltip', element, options)\n }\n\n Tooltip.VERSION = '3.3.5'\n\n Tooltip.TRANSITION_DURATION = 150\n\n Tooltip.DEFAULTS = {\n animation: true,\n placement: 'top',\n selector: false,\n template: ''\n }).on('mouseenter', function() {\n d3.selectAll(args.target)\n .selectAll('.mg-popover')\n .remove();\n\n $(this).popover('show');\n $(d3.select(args.target).select('.popover').node())\n .on('mouseleave', function () {\n $chartTitle.popover('hide');\n });\n }).on('mouseleave', function () {\n setTimeout(function () {\n if (!$('.popover:hover').length) {\n $chartTitle.popover('hide');\n }\n }, 120);\n });\n } else if (args.show_tooltips && args.description && typeof $ === 'undefined') {\n args.error = 'In order to enable tooltips, please make sure you include jQuery.';\n }\n }\n\n if (args.error) {\n error(args);\n }\n}\n\nMG.chart_title = chart_title;\n\nfunction mg_add_scale_function(args, scalefcn_name, scale, accessor, inflation) {\n args.scalefns[scalefcn_name] = function(di) {\n if (inflation === undefined) return args.scales[scale](di[accessor]);\n else return args.scales[scale](di[accessor]) + inflation;\n };\n}\n\nfunction mg_position(str, args) {\n if (str === 'bottom' || str === 'top') {\n return [mg_get_plot_left(args), mg_get_plot_right(args)];\n }\n\n if (str === 'left' || str === 'right') {\n return [mg_get_plot_bottom(args), args.top];\n }\n}\n\nfunction mg_cat_position(str, args) {\n if (str === 'bottom' || str === 'top') {\n return [mg_get_plot_left(args), mg_get_plot_right(args)]\n }\n\n if (str === 'left' || str === 'right') {\n return [mg_get_plot_bottom(args), mg_get_plot_top(args)];\n }\n}\n\nfunction MGScale(args) {\n // big wrapper around d3 scale that automatically formats & calculates scale bounds\n // according to the data, and handles other niceties.\n var scaleArgs = {}\n scaleArgs.use_inflator = false;\n scaleArgs.zero_bottom = false;\n scaleArgs.scaleType = 'numerical';\n\n this.namespace = function(_namespace) {\n scaleArgs.namespace = _namespace;\n scaleArgs.namespace_accessor_name = scaleArgs.namespace + '_accessor';\n scaleArgs.scale_name = scaleArgs.namespace.toUpperCase();\n scaleArgs.scalefn_name = scaleArgs.namespace + 'f';\n return this;\n }\n\n this.scaleName = function(scaleName) {\n scaleArgs.scale_name = scaleName.toUpperCase();\n scaleArgs.scalefn_name = scaleName +'f';\n return this;\n }\n\n this.inflateDomain = function(tf) {\n scaleArgs.use_inflator = tf;\n return this;\n }\n\n this.zeroBottom = function(tf) {\n scaleArgs.zero_bottom = tf;\n return this;\n }\n\n /////////////////////////////////////////////////////////////////////////////////////////////////////////\n /// all scale domains are either numerical (number, date, etc.) or categorical (factor, label, etc) /////\n /////////////////////////////////////////////////////////////////////////////////////////////////////////\n // these functions automatically create the d3 scale function and place the domain.\n\n this.numericalDomainFromData = function() {\n var other_flat_data_arrays = [];\n\n if (arguments.length > 0) {\n other_flat_data_arrays = arguments;\n }\n\n // pull out a non-empty array in args.data.\n var illustrative_data;\n for (var i = 0; i < args.data.length; i++) {\n if (args.data[i].length > 0) {\n illustrative_data = args.data[i];\n }\n }\n scaleArgs.is_time_series = mg_is_date(illustrative_data[0][args[scaleArgs.namespace_accessor_name]])\n ? true\n : false;\n\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n\n mg_min_max_numerical(args, scaleArgs, other_flat_data_arrays, scaleArgs.use_inflator);\n\n var time_scale = (args.utc_time)\n ? d3.scaleUtc()\n : d3.scaleTime();\n\n args.scales[scaleArgs.scale_name] = (scaleArgs.is_time_series)\n ? time_scale\n : (mg_is_function(args[scaleArgs.namespace + '_scale_type']))\n ? args.y_scale_type()\n : (args[scaleArgs.namespace + '_scale_type'] === 'log')\n ? d3.scaleLog()\n : d3.scaleLinear();\n\n args.scales[scaleArgs.scale_name].domain([args.processed['min_' + scaleArgs.namespace], args.processed['max_' + scaleArgs.namespace]]);\n scaleArgs.scaleType = 'numerical';\n\n return this;\n }\n\n this.categoricalDomain = function(domain) {\n args.scales[scaleArgs.scale_name] = d3.scaleOrdinal().domain(domain);\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n return this;\n }\n\n this.categoricalDomainFromData = function() {\n // make args.categorical_variables.\n // lets make the categorical variables.\n var all_data = mg_flatten_array(args.data)\n //d3.set(data.map(function(d){return d[args.group_accessor]})).values()\n scaleArgs.categoricalVariables = d3.set(all_data.map(function(d) {\n return d[args[scaleArgs.namespace_accessor_name]] })).values();\n args.scales[scaleArgs.scale_name] = d3.scaleBand()\n .domain(scaleArgs.categoricalVariables);\n\n scaleArgs.scaleType = 'categorical';\n return this;\n }\n\n /////////////////////////////////////////////////////////////////////////////////////////////////////////////\n ////////// all scale ranges are either positional (for axes, etc) or arbitrary (colors, size, etc) //////////\n /////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n this.numericalRange = function(range) {\n if (typeof range === 'string') {\n args\n .scales[scaleArgs.scale_name]\n .range(mg_position(range, args));\n } else {\n args\n .scales[scaleArgs.scale_name]\n .range(range);\n }\n\n return this;\n }\n\n this.categoricalRangeBands = function(range, halfway) {\n if (halfway === undefined) halfway = false;\n\n var namespace = scaleArgs.namespace;\n var paddingPercentage = args[namespace + '_padding_percentage'];\n var outerPaddingPercentage = args[namespace + '_outer_padding_percentage'];\n if (typeof range === 'string') {\n // if string, it's a location. Place it accordingly.\n args.scales[scaleArgs.scale_name]\n .range(mg_position(range, args))\n .paddingInner(paddingPercentage)\n .paddingOuter(outerPaddingPercentage);\n } else {\n args.scales[scaleArgs.scale_name]\n .range(range)\n .paddingInner(paddingPercentage)\n .paddingOuter(outerPaddingPercentage);\n }\n\n mg_add_scale_function(\n args,\n scaleArgs.scalefn_name,\n scaleArgs.scale_name,\n args[scaleArgs.namespace_accessor_name],\n halfway\n ? args.scales[scaleArgs.scale_name].bandwidth() / 2\n : 0\n );\n\n return this;\n }\n\n this.categoricalRange = function(range) {\n args.scales[scaleArgs.scale_name].range(range);\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n return this;\n }\n\n this.categoricalColorRange = function() {\n args.scales[scaleArgs.scale_name] = args.scales[scaleArgs.scale_name].domain().length > 10\n ? d3.scaleOrdinal(d3.schemeCategory20)\n : d3.scaleOrdinal(d3.schemeCategory10);\n\n args\n .scales[scaleArgs.scale_name]\n .domain(scaleArgs.categoricalVariables);\n\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n return this;\n }\n\n this.clamp = function(yn) {\n args.scales[scaleArgs.scale_name].clamp(yn);\n return this;\n }\n\n return this;\n}\n\nMG.scale_factory = MGScale;\n\n/////////////////////////////// x, x_accessor, markers, baselines, etc.\nfunction mg_min_max_numerical(args, scaleArgs, additional_data_arrays) {\n // A BIT OF EXPLANATION ABOUT THIS FUNCTION\n // This function pulls out all the accessor values in all the arrays in args.data.\n // We also have this additional argument, additional_data_arrays, which is an array of arrays of raw data values.\n // These values also get concatenated to the data pulled from args.data, and the extents are calculate from that.\n // They are optional.\n //\n // This may seem arbitrary, but it gives us a lot of flexibility. For instance, if we're calculating\n // the min and max for the y axis of a line chart, we're going to want to also factor in baselines (horizontal lines\n // that might potentially be outside of the y value bounds). The easiest way to do this is in the line.js code\n // & scale creation to just flatten the args.baselines array, pull out hte values, and feed it in\n // so it appears in additional_data_arrays.\n var namespace = scaleArgs.namespace;\n var namespace_accessor_name = scaleArgs.namespace_accessor_name;\n var use_inflator = scaleArgs.use_inflator;\n var zero_bottom = scaleArgs.zero_bottom;\n\n var accessor = args[namespace_accessor_name];\n\n // add together all relevant data arrays.\n var all_data = mg_flatten_array(args.data)\n .map(function(dp) {\n return dp[accessor] })\n .concat(mg_flatten_array(additional_data_arrays));\n\n // do processing for log\n if (args[namespace + '_scale_type'] === 'log') {\n all_data = all_data.filter(function(d) {\n return d > 0;\n });\n }\n\n // use inflator?\n var extents = d3.extent(all_data);\n var min_val = extents[0];\n var max_val = extents[1];\n\n // bolt scale domain to zero when the right conditions are met:\n // not pulling the bottom of the range from data\n // not zero-bottomed\n // not a time series\n if (zero_bottom && !args['min_' + namespace + '_from_data'] && min_val > 0 && !scaleArgs.is_time_series) {\n min_val = args[namespace + '_scale_type'] === 'log' ? 1 : 0;\n }\n\n if (args[namespace + '_scale_type'] !== 'log' && min_val < 0 && !scaleArgs.is_time_series) {\n min_val = min_val - (min_val - min_val * args.inflator) * use_inflator;\n }\n\n if (!scaleArgs.is_time_series) {\n max_val = (max_val < 0) ? max_val + (max_val - max_val * args.inflator) * use_inflator : max_val * (use_inflator ? args.inflator : 1);\n }\n\n min_val = args['min_' + namespace] || min_val;\n max_val = args['max_' + namespace] || max_val;\n // if there's a single data point, we should custom-set the min and max values.\n\n if (min_val === max_val && !(args['min_' + namespace] && args['max_' + namespace])) {\n\n if (mg_is_date(min_val)) {\n max_val = new Date(MG.clone(min_val).setDate(min_val.getDate() + 1));\n min_val = new Date(MG.clone(min_val).setDate(min_val.getDate() - 1));\n } else if (typeof min_val === 'number') {\n min_val = min_val - 1;\n max_val = min_val + 1;\n mg_force_xax_count_to_be_two(args);\n }\n }\n\n args.processed['min_' + namespace] = min_val;\n args.processed['max_' + namespace] = max_val;\n\n MG.call_hook('x_axis.process_min_max', args, args.processed.min_x, args.processed.max_x);\n MG.call_hook('y_axis.process_min_max', args, args.processed.min_y, args.processed.max_y);\n}\n\nfunction mg_categorical_group_color_scale(args) {\n if (args.color_accessor !== false) {\n if (args.ygroup_accessor) {\n // add a custom accessor element.\n if (args.color_accessor === null) {\n args.color_accessor = args.y_accessor;\n } else {}\n }\n if (args.color_accessor !== null) {\n new MG.scale_factory(args)\n .namespace('color')\n .categoricalDomainFromData()\n .categoricalColorRange();\n }\n }\n}\n\nfunction mg_add_color_categorical_scale(args, domain, accessor) {\n args.scales.color = d3.scaleOrdinal(d3.schemeCategory20).domain(domain);\n args.scalefns.color = function(d) {\n return args.scales.color(d[accessor]);\n };\n}\n\nfunction mg_get_categorical_domain(data, accessor) {\n return d3.set(data.map(function(d) {\n return d[accessor]; }))\n .values();\n}\n\nfunction mg_get_color_domain(args) {\n var color_domain;\n if (args.color_domain === null) {\n if (args.color_type === 'number') {\n color_domain = d3.extent(args.data[0], function(d) {\n return d[args.color_accessor]; });\n } else if (args.color_type === 'category') {\n color_domain = mg_get_categorical_domain(args.data[0], args.color_accessor);\n\n }\n } else {\n color_domain = args.color_domain;\n }\n return color_domain;\n}\n\nfunction mg_get_color_range(args) {\n var color_range;\n if (args.color_range === null) {\n if (args.color_type === 'number') {\n color_range = ['blue', 'red'];\n } else {\n color_range = null;\n }\n } else {\n color_range = args.color_range;\n }\n return color_range;\n}\n\nfunction processScaleTicks (args, axis) {\n var accessor = args[axis + '_accessor'];\n var scale_ticks = args.scales[axis.toUpperCase()].ticks(args[axis + 'ax_count']);\n var max = args.processed['max_' + axis];\n\n function log10 (val) {\n if (val === 1000) {\n return 3;\n }\n if (val === 1000000) {\n return 7;\n }\n return Math.log(val) / Math.LN10;\n }\n\n if (args[axis + '_scale_type'] === 'log') {\n // get out only whole logs\n scale_ticks = scale_ticks.filter(function (d) {\n return Math.abs(log10(d)) % 1 < 1e-6 || Math.abs(log10(d)) % 1 > 1 - 1e-6;\n });\n }\n\n // filter out fraction ticks if our data is ints and if xmax > number of generated ticks\n var number_of_ticks = scale_ticks.length;\n\n // is our data object all ints?\n var data_is_int = true;\n args.data.forEach(function (d, i) {\n d.forEach(function (d, i) {\n if (d[accessor] % 1 !== 0) {\n data_is_int = false;\n return false;\n }\n });\n });\n\n if (data_is_int && number_of_ticks > max && args.format === 'count') {\n // remove non-integer ticks\n scale_ticks = scale_ticks.filter(function (d) {\n return d % 1 === 0;\n });\n }\n args.processed[axis + '_ticks'] = scale_ticks;\n}\n\nfunction rugPlacement (args, axisArgs) {\n var position = axisArgs.position;\n var ns = axisArgs.namespace;\n var coordinates = {};\n if (position === 'left') {\n coordinates.x1 = mg_get_left(args) + 1;\n coordinates.x2 = mg_get_left(args) + args.rug_buffer_size;\n coordinates.y1 = args.scalefns[ns + 'f'];\n coordinates.y2 = args.scalefns[ns + 'f'];\n }\n if (position === 'right') {\n coordinates.x1 = mg_get_right(args) - 1,\n coordinates.x2 = mg_get_right(args) - args.rug_buffer_size,\n coordinates.y1 = args.scalefns[ns + 'f'];\n coordinates.y2 = args.scalefns[ns + 'f'];\n }\n if (position === 'top') {\n coordinates.x1 = args.scalefns[ns + 'f'];\n coordinates.x2 = args.scalefns[ns + 'f'];\n coordinates.y1 = mg_get_top(args) + 1;\n coordinates.y2 = mg_get_top(args) + args.rug_buffer_size;\n }\n if (position === 'bottom') {\n coordinates.x1 = args.scalefns[ns + 'f'];\n coordinates.x2 = args.scalefns[ns + 'f'];\n coordinates.y1 = mg_get_bottom(args) - 1;\n coordinates.y2 = mg_get_bottom(args) - args.rug_buffer_size;\n }\n return coordinates;\n}\n\nfunction rimPlacement (args, axisArgs) {\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var tick_length = args.processed[ns + '_ticks'].length;\n var ticks = args.processed[ns + '_ticks'];\n var scale = args.scales[ns.toUpperCase()];\n var coordinates = {};\n\n if (position === 'left') {\n coordinates.x1 = mg_get_left(args);\n coordinates.x2 = mg_get_left(args);\n coordinates.y1 = scale(ticks[0]).toFixed(2);\n coordinates.y2 = scale(ticks[tick_length - 1]).toFixed(2);\n }\n if (position === 'right') {\n coordinates.x1 = mg_get_right(args);\n coordinates.x2 = mg_get_right(args);\n coordinates.y1 = scale(ticks[0]).toFixed(2);\n coordinates.y2 = scale(ticks[tick_length - 1]).toFixed(2);\n }\n if (position === 'top') {\n coordinates.x1 = mg_get_left(args);\n coordinates.x2 = mg_get_right(args);\n coordinates.y1 = mg_get_top(args);\n coordinates.y2 = mg_get_top(args);\n }\n if (position === 'bottom') {\n coordinates.x1 = mg_get_left(args);\n coordinates.x2 = mg_get_right(args);\n coordinates.y1 = mg_get_bottom(args);\n coordinates.y2 = mg_get_bottom(args);\n }\n\n if (position === 'left' || position === 'right') {\n if (args.axes_not_compact) {\n coordinates.y1 = mg_get_bottom(args);\n coordinates.y2 = mg_get_top(args);\n } else if (tick_length) {\n coordinates.y1 = scale(ticks[0]).toFixed(2);\n coordinates.y2 = scale(ticks[tick_length - 1]).toFixed(2);\n }\n }\n\n return coordinates;\n}\n\nfunction labelPlacement (args, axisArgs) {\n var position = axisArgs.position;\n var ns = axisArgs.namespace;\n var tickLength = args[ns + 'ax_tick_length'];\n var scale = args.scales[ns.toUpperCase()];\n var coordinates = {};\n\n if (position === 'left') {\n coordinates.x = mg_get_left(args) - tickLength * 3 / 2;\n coordinates.y = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.dx = -3;\n coordinates.dy = '.35em';\n coordinates.textAnchor = 'end';\n coordinates.text = function (d) {\n return mg_compute_yax_format(args)(d);\n };\n }\n if (position === 'right') {\n coordinates.x = mg_get_right(args) + tickLength * 3 / 2;\n coordinates.y = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.dx = 3;\n coordinates.dy = '.35em';\n coordinates.textAnchor = 'start';\n coordinates.text = function (d) {\n return mg_compute_yax_format(args)(d); };\n }\n if (position === 'top') {\n coordinates.x = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.y = (mg_get_top(args) - tickLength * 7 / 3).toFixed(2);\n coordinates.dx = 0;\n coordinates.dy = '0em';\n coordinates.textAnchor = 'middle';\n coordinates.text = function (d) {\n return mg_default_xax_format(args)(d);\n };\n }\n if (position === 'bottom') {\n coordinates.x = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.y = (mg_get_bottom(args) + tickLength * 7 / 3).toFixed(2);\n coordinates.dx = 0;\n coordinates.dy = '.50em';\n coordinates.textAnchor = 'middle';\n coordinates.text = function (d) {\n return mg_default_xax_format(args)(d);\n };\n }\n\n return coordinates;\n}\n\nfunction selectXaxFormat (args) {\n var c = args.chart_type;\n if (!args.processed.xax_format) {\n if (args.xax_format) {\n args.processed.xax_format = args.xax_format;\n } else {\n if (c === 'line' || c === 'point' || c === 'histogram') {\n args.processed.xax_format = mg_default_xax_format(args);\n } else if (c === 'bar') {\n args.processed.xax_format = mg_default_bar_xax_format(args);\n }\n }\n }\n}\n\nfunction secondaryLabels (g, args, axisArgs) {\n if (args.time_series && (args.show_years || args.show_secondary_x_label)) {\n var tf = mg_get_yformat_and_secondary_time_function(args);\n addSecondaryLabelElements(args, axisArgs, g, tf.timeframe, tf.yformat, tf.secondary);\n }\n}\n\nfunction addSecondaryLabelElements (args, axisArgs, g, time_frame, yformat, secondary_function) {\n var years = secondary_function(args.processed.min_x, args.processed.max_x);\n if (years.length === 0) {\n var first_tick = args.scales.X.ticks(args.xax_count)[0];\n years = [first_tick];\n }\n\n var yg = mg_add_g(g, 'mg-year-marker');\n if (time_frame === 'default' && args.show_year_markers) {\n yearMarkerLine(args, axisArgs, yg, years, yformat);\n }\n if (time_frame != 'years') yearMarkerText(args, axisArgs, yg, years, yformat);\n}\n\nfunction yearMarkerLine (args, axisArgs, g, years, yformat) {\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('line')\n .attr('x1', function (d) {\n return args.scales.X(d).toFixed(2); })\n .attr('x2', function (d) {\n return args.scales.X(d).toFixed(2); })\n .attr('y1', mg_get_top(args))\n .attr('y2', mg_get_bottom(args));\n}\n\nfunction yearMarkerText (args, axisArgs, g, years, yformat) {\n var position = axisArgs.position;\n var ns = axisArgs.namespace;\n var scale = args.scales[ns.toUpperCase()];\n var x, y, dy, textAnchor, textFcn;\n var xAxisTextElement = d3.select(args.target)\n .select('.mg-x-axis text').node().getBoundingClientRect();\n\n if (position === 'top') {\n x = function (d, i) {\n return scale(d).toFixed(2); };\n y = (mg_get_top(args) - args.xax_tick_length * 7 / 3) - (xAxisTextElement.height);\n dy = '.50em';\n textAnchor = 'middle';\n textFcn = function (d) {\n return yformat(new Date(d)); };\n }\n if (position === 'bottom') {\n x = function (d, i) {\n return scale(d).toFixed(2); };\n y = (mg_get_bottom(args) + args.xax_tick_length * 7 / 3) + (xAxisTextElement.height * 0.8);\n dy = '.50em';\n textAnchor = 'middle';\n textFcn = function (d) {\n return yformat(new Date(d)); };\n }\n\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('text')\n .attr('x', x)\n .attr('y', y)\n .attr('dy', dy)\n .attr('text-anchor', textAnchor)\n .text(textFcn);\n}\n\nfunction addNumericalLabels (g, args, axisArgs) {\n var ns = axisArgs.namespace;\n var coords = labelPlacement(args, axisArgs);\n var ticks = args.processed[ns + '_ticks'];\n\n var labels = g.selectAll('.mg-yax-labels')\n .data(ticks).enter()\n .append('text')\n .attr('x', coords.x)\n .attr('dx', coords.dx)\n .attr('y', coords.y)\n .attr('dy', coords.dy)\n .attr('text-anchor', coords.textAnchor)\n .text(coords.text);\n\n // move the labels if they overlap\n if (ns == 'x') {\n selectXaxFormat(args);\n if (args.time_series && args.european_clock) {\n labels.append('tspan').classed('mg-european-hours', true).text(function (_d, i) {\n var d = new Date(_d);\n if (i === 0) return d3.timeFormat('%H')(d);\n else return '';\n });\n labels.append('tspan').classed('mg-european-minutes-seconds', true).text(function (_d, i) {\n var d = new Date(_d);\n return ':' + args.processed.xax_format(d);\n });\n } else {\n labels.text(function (d) {\n return args.xax_units + args.processed.xax_format(d);\n });\n }\n secondaryLabels(g, args, axisArgs);\n }\n\n if (mg_elements_are_overlapping(labels)) {\n labels.filter(function (d, i) {\n return (i + 1) % 2 === 0;\n }).remove();\n\n var svg = mg_get_svg_child_of(args.target);\n svg.selectAll('.mg-' + ns + 'ax-ticks').filter(function (d, i) {\n return (i + 1) % 2 === 0; })\n .remove();\n }\n}\n\nfunction addTickLines (g, args, axisArgs) {\n // name\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var scale = args.scales[ns.toUpperCase()];\n\n var ticks = args.processed[ns + '_ticks'];\n var ticksClass = 'mg-' + ns + 'ax-ticks';\n var extendedTicksClass = 'mg-extended-' + ns + 'ax-ticks';\n var extendedTicks = args[ns + '_extended_ticks'];\n var tickLength = args[ns + 'ax_tick_length'];\n\n var x1, x2, y1, y2;\n\n if (position === 'left') {\n x1 = mg_get_left(args);\n x2 = extendedTicks ? mg_get_right(args) : mg_get_left(args) - tickLength;\n y1 = function (d) {\n return scale(d).toFixed(2);\n };\n y2 = function (d) {\n return scale(d).toFixed(2);\n };\n }\n if (position === 'right') {\n x1 = mg_get_right(args);\n x2 = extendedTicks ? mg_get_left(args) : mg_get_right(args) + tickLength;\n y1 = function (d) {\n return scale(d).toFixed(2);\n };\n y2 = function (d) {\n return scale(d).toFixed(2);\n };\n }\n if (position === 'top') {\n x1 = function (d) {\n return scale(d).toFixed(2);\n };\n x2 = function (d) {\n return scale(d).toFixed(2);\n };\n y1 = mg_get_top(args);\n y2 = extendedTicks ? mg_get_bottom(args) : mg_get_top(args) - tickLength;\n }\n if (position === 'bottom') {\n x1 = function (d) {\n return scale(d).toFixed(2);\n };\n x2 = function (d) {\n return scale(d).toFixed(2);\n };\n y1 = mg_get_bottom(args);\n y2 = extendedTicks ? mg_get_top(args) : mg_get_bottom(args) + tickLength;\n }\n\n g.selectAll('.' + ticksClass)\n .data(ticks).enter()\n .append('line')\n .classed(extendedTicksClass, extendedTicks)\n .attr('x1', x1)\n .attr('x2', x2)\n .attr('y1', y1)\n .attr('y2', y2);\n}\n\nfunction initializeAxisRim (g, args, axisArgs) {\n var namespace = axisArgs.namespace;\n var tick_length = args.processed[namespace + '_ticks'].length;\n\n var rim = rimPlacement(args, axisArgs);\n\n if (!args[namespace + '_extended_ticks'] && !args[namespace + '_extended_ticks'] && tick_length) {\n g.append('line')\n .attr('x1', rim.x1)\n .attr('x2', rim.x2)\n .attr('y1', rim.y1)\n .attr('y2', rim.y2);\n }\n}\n\nfunction initializeRug (args, rug_class) {\n var svg = mg_get_svg_child_of(args.target);\n var all_data = mg_flatten_array(args.data);\n var rug = svg.selectAll('line.' + rug_class).data(all_data);\n\n // set the attributes that do not change after initialization, per\n rug.enter().append('svg:line').attr('class', rug_class).attr('opacity', 0.3);\n\n // remove rug elements that are no longer in use\n mg_exit_and_remove(rug);\n\n // set coordinates of new rug elements\n mg_exit_and_remove(rug);\n return rug;\n}\n\nfunction rug (args, axisArgs) {\n 'use strict';\n args.rug_buffer_size = args.chart_type === 'point' ? args.buffer / 2 : args.buffer * 2 / 3;\n\n var rug = initializeRug(args, 'mg-' + axisArgs.namespace + '-rug');\n var rug_positions = rugPlacement(args, axisArgs);\n rug.attr('x1', rug_positions.x1)\n .attr('x2', rug_positions.x2)\n .attr('y1', rug_positions.y1)\n .attr('y2', rug_positions.y2);\n\n mg_add_color_accessor_to_rug(rug, args, 'mg-' + axisArgs.namespace + '-rug-mono');\n}\n\nfunction categoricalLabelPlacement (args, axisArgs, group) {\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var scale = args.scales[ns.toUpperCase()];\n var groupScale = args.scales[(ns + 'group').toUpperCase()];\n var coords = {};\n coords.cat = {};\n coords.group = {};\n // x, y, dy, text-anchor\n\n if (position === 'left') {\n coords.cat.x = mg_get_plot_left(args) - args.buffer;\n coords.cat.y = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = 'end';\n coords.group.x = mg_get_plot_left(args) - args.buffer;\n coords.group.y = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 : 0);\n coords.group.dy = '.35em';\n coords.group.textAnchor = args['rotate_' + ns + '_labels'] ? 'end' : 'end';\n }\n\n if (position === 'right') {\n coords.cat.x = mg_get_plot_right(args) - args.buffer;\n coords.cat.y = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = 'start';\n coords.group.x = mg_get_plot_right(args) - args.buffer;\n coords.group.y = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 : 0);\n coords.group.dy = '.35em';\n coords.group.textAnchor = 'start';\n }\n\n if (position === 'top') {\n coords.cat.x = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.y = mg_get_plot_top(args) + args.buffer;\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n coords.group.x = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 : 0);\n coords.group.y = mg_get_plot_top(args) + args.buffer;\n coords.group.dy = '.35em';\n coords.group.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n }\n\n if (position === 'bottom') {\n coords.cat.x = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.y = mg_get_plot_bottom(args) + args.buffer;\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n coords.group.x = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 - scale.bandwidth() / 2 : 0);\n coords.group.y = mg_get_plot_bottom(args) + args.buffer;\n coords.group.dy = '.35em';\n coords.group.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n }\n\n return coords;\n}\n\nfunction categoricalLabels (args, axisArgs) {\n var ns = axisArgs.namespace;\n var nsClass = 'mg-' + ns + '-axis';\n var scale = args.scales[ns.toUpperCase()];\n var groupScale = args.scales[(ns + 'group').toUpperCase()];\n var groupAccessor = ns + 'group_accessor';\n\n var svg = mg_get_svg_child_of(args.target);\n mg_selectAll_and_remove(svg, '.' + nsClass);\n var g = mg_add_g(svg, nsClass);\n var group_g;\n var groups = groupScale.domain && groupScale.domain()\n ? groupScale.domain()\n : ['1'];\n\n groups.forEach(function (group) {\n // grab group placement stuff.\n var coords = categoricalLabelPlacement(args, axisArgs, group);\n\n group_g = mg_add_g(g, 'mg-group-' + mg_normalize(group));\n if (args[groupAccessor] !== null) {\n var labels = group_g.append('text')\n .classed('mg-barplot-group-label', true)\n .attr('x', coords.group.x)\n .attr('y', coords.group.y)\n .attr('dy', coords.group.dy)\n .attr('text-anchor', coords.group.textAnchor)\n .text(group);\n\n } else {\n var labels = group_g.selectAll('text')\n .data(scale.domain())\n .enter()\n .append('text')\n .attr('x', coords.cat.x)\n .attr('y', coords.cat.y)\n .attr('dy', coords.cat.dy)\n .attr('text-anchor', coords.cat.textAnchor)\n .text(String);\n }\n if (args['rotate_' + ns + '_labels']) {\n rotateLabels(labels, args['rotate_' + ns + '_labels']);\n }\n });\n}\n\nfunction categoricalGuides (args, axisArgs) {\n // for each group\n // for each data point\n\n var ns = axisArgs.namespace;\n var scalef = args.scalefns[ns + 'f'];\n var groupf = args.scalefns[ns + 'groupf'];\n var groupScale = args.scales[(ns + 'group').toUpperCase()];\n var scale = args.scales[ns.toUpperCase()];\n var position = axisArgs.position;\n\n var svg = mg_get_svg_child_of(args.target);\n var alreadyPlotted = [];\n\n var x1, x2, y1, y2;\n var grs = (groupScale.domain && groupScale.domain()) ? groupScale.domain() : [null];\n\n mg_selectAll_and_remove(svg, '.mg-category-guides');\n var g = mg_add_g(svg, 'mg-category-guides');\n\n grs.forEach(function (group) {\n scale.domain().forEach(function (cat) {\n if (position === 'left' || position === 'right') {\n x1 = mg_get_plot_left(args);\n x2 = mg_get_plot_right(args);\n y1 = scale(cat) + groupScale(group) + scale.bandwidth() / 2;\n y2 = scale(cat) + groupScale(group) + scale.bandwidth() / 2;\n }\n\n if (position === 'top' || position === 'bottom') {\n x1 = scale(cat) + groupScale(group) + scale.bandwidth() / 2 * (group === null);\n x2 = scale(cat) + groupScale(group) + scale.bandwidth() / 2 * (group === null);\n y1 = mg_get_plot_bottom(args);\n y2 = mg_get_plot_top(args);\n }\n\n g.append('line')\n .attr('x1', x1)\n .attr('x2', x2)\n .attr('y1', y1)\n .attr('y2', y2)\n .attr('stroke-dasharray', '2,1');\n });\n\n var first = groupScale(group) + scale(scale.domain()[0]) + scale.bandwidth() / 2 * (group === null || (position !== 'top' && position != 'bottom'));\n var last = groupScale(group) + scale(scale.domain()[scale.domain().length - 1]) + scale.bandwidth() / 2 * (group === null || (position !== 'top' && position != 'bottom'));\n\n if (position === 'left' || position === 'right') {\n x11 = mg_get_plot_left(args);\n x21 = mg_get_plot_left(args);\n y11 = first;\n y21 = last;\n\n x12 = mg_get_plot_right(args);\n x22 = mg_get_plot_right(args);\n y12 = first;\n y22 = last;\n }\n\n if (position === 'bottom' || position === 'top') {\n x11 = first;\n x21 = last;\n y11 = mg_get_plot_bottom(args);\n y21 = mg_get_plot_bottom(args);\n\n x12 = first;\n x22 = last;\n y12 = mg_get_plot_top(args);\n y22 = mg_get_plot_top(args);\n }\n\n g.append('line')\n .attr('x1', x11)\n .attr('x2', x21)\n .attr('y1', y11)\n .attr('y2', y21)\n .attr('stroke-dasharray', '2,1');\n\n g.append('line')\n .attr('x1', x12)\n .attr('x2', x22)\n .attr('y1', y12)\n .attr('y2', y22)\n .attr('stroke-dasharray', '2,1');\n });\n}\n\nfunction rotateLabels (labels, rotation_degree) {\n if (rotation_degree) {\n labels.attr('transform', function () {\n var elem = d3.select(this);\n return 'rotate(' + rotation_degree + ' ' + elem.attr('x') + ',' + elem.attr('y') + ')';\n });\n\n }\n}\n\nfunction zeroLine (args, axisArgs) {\n var svg = mg_get_svg_child_of(args.target);\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var scale = args.scales[ns.toUpperCase()];\n var x1, x2, y1, y2;\n if (position === 'left' || position === 'right') {\n x1 = mg_get_plot_left(args);\n x2 = mg_get_plot_right(args);\n y1 = scale(0) + 1;\n y2 = scale(0) + 1;\n }\n if (position === 'bottom' || position === 'top') {\n y1 = mg_get_plot_top(args);\n y2 = mg_get_plot_bottom(args);\n x1 = scale(0) - 1;\n x2 = scale(0) - 1;\n }\n\n svg.append('line')\n .attr('x1', x1)\n .attr('x2', x2)\n .attr('y1', y1)\n .attr('y2', y2)\n .attr('stroke', 'black');\n}\n\nvar mgDrawAxis = {};\n\nmgDrawAxis.categorical = function (args, axisArgs) {\n var ns = axisArgs.namespace;\n\n categoricalLabels(args, axisArgs);\n categoricalGuides(args, axisArgs);\n};\n\nmgDrawAxis.numerical = function (args, axisArgs) {\n var namespace = axisArgs.namespace;\n var axisName = namespace + '_axis';\n var axisClass = 'mg-' + namespace + '-axis';\n var svg = mg_get_svg_child_of(args.target);\n\n mg_selectAll_and_remove(svg, '.' + axisClass);\n\n if (!args[axisName]) {\n return this;\n }\n\n var g = mg_add_g(svg, axisClass);\n\n processScaleTicks(args, namespace);\n initializeAxisRim(g, args, axisArgs);\n addTickLines(g, args, axisArgs);\n addNumericalLabels(g, args, axisArgs);\n\n // add label\n if (args[namespace + '_label']) {\n axisArgs.label(svg.select('.mg-' + namespace + '-axis'), args);\n }\n\n // add rugs\n if (args[namespace + '_rug']) {\n rug(args, axisArgs);\n }\n\n if (args.show_bar_zero) {\n mg_bar_add_zero_line(args);\n }\n\n return this;\n};\n\nfunction axisFactory (args) {\n var axisArgs = {};\n axisArgs.type = 'numerical';\n\n this.namespace = function (ns) {\n // take the ns in the scale, and use it to\n axisArgs.namespace = ns;\n return this;\n };\n\n this.rug = function (tf) {\n axisArgs.rug = tf;\n return this;\n };\n\n this.label = function (tf) {\n axisArgs.label = tf;\n return this;\n };\n\n this.type = function (t) {\n axisArgs.type = t;\n return this;\n };\n\n this.position = function (pos) {\n axisArgs.position = pos;\n return this;\n };\n\n this.zeroLine = function (tf) {\n axisArgs.zeroLine = tf;\n return this;\n };\n\n this.draw = function () {\n mgDrawAxis[axisArgs.type](args, axisArgs);\n return this;\n };\n\n return this;\n\n}\n\nMG.axis_factory = axisFactory;\n\n/* ================================================================================ */\n/* ================================================================================ */\n/* ================================================================================ */\n\nfunction y_rug (args) {\n 'use strict';\n\n if (!args.y_rug) {\n return;\n }\n\n args.rug_buffer_size = args.chart_type === 'point'\n ? args.buffer / 2\n : args.buffer * 2 / 3;\n\n var rug = mg_make_rug(args, 'mg-y-rug');\n\n rug.attr('x1', args.left + 1)\n .attr('x2', args.left + args.rug_buffer_size)\n .attr('y1', args.scalefns.yf)\n .attr('y2', args.scalefns.yf);\n\n mg_add_color_accessor_to_rug(rug, args, 'mg-y-rug-mono');\n}\n\nMG.y_rug = y_rug;\n\nfunction mg_change_y_extents_for_bars (args, my) {\n if (args.chart_type === 'bar') {\n my.min = 0;\n my.max = d3.max(args.data[0], function (d) {\n var trio = [];\n trio.push(d[args.y_accessor]);\n\n if (args.baseline_accessor !== null) {\n trio.push(d[args.baseline_accessor]);\n }\n\n if (args.predictor_accessor !== null) {\n trio.push(d[args.predictor_accessor]);\n }\n\n return Math.max.apply(null, trio);\n });\n }\n return my;\n}\n\nfunction mg_compute_yax_format (args) {\n var yax_format = args.yax_format;\n if (!yax_format) {\n if (args.format === 'count') {\n // increase decimals if we have small values, useful for realtime data\n if (args.processed.max_y < 0.0001) {\n args.decimals = 6;\n } else if (args.processed.max_y < 0.1) {\n args.decimals = 4;\n }\n\n yax_format = function (d) {\n var pf;\n\n if (d < 1.0 && d > -1.0 && d !== 0) {\n // don't scale tiny values\n pf = d3.format(',.' + args.decimals + 'f');\n } else if (d < 1000) {\n pf = d3.format(',.0f');\n } else {\n pf = d3.format(',.2s');\n }\n\n // are we adding units after the value or before?\n if (args.yax_units_append) {\n return pf(d) + args.yax_units;\n } else {\n return args.yax_units + pf(d);\n }\n };\n } else { // percentage\n yax_format = function (d_) {\n var n = d3.format('.0%');\n return n(d_);\n };\n }\n }\n return yax_format;\n}\n\nfunction mg_bar_add_zero_line (args) {\n var svg = mg_get_svg_child_of(args.target);\n var extents = args.scales.X.domain();\n if (0 >= extents[0] && extents[1] >= 0) {\n var r = args.scales.Y.range();\n var g = args.categorical_groups.length\n ? args.scales.YGROUP(args.categorical_groups[args.categorical_groups.length - 1])\n : args.scales.YGROUP();\n\n svg.append('svg:line')\n .attr('x1', args.scales.X(0))\n .attr('x2', args.scales.X(0))\n .attr('y1', r[0] + mg_get_plot_top(args))\n .attr('y2', r[r.length - 1] + g)\n .attr('stroke', 'black')\n .attr('opacity', .2);\n }\n}\n\nfunction set_min_max_y (args) {\n // flatten data\n // remove weird data, if log.\n var data = mg_flatten_array(args.data);\n\n if (args.y_scale_type === 'log') {\n data = data.filter(function (d) {\n return d[args.y_accessor] > 0;\n });\n }\n\n if (args.baselines) {\n data = data.concat(args.baselines);\n }\n\n var extents = d3.extent(data, function (d) {\n return d[args.y_accessor];\n });\n\n var my = {};\n my.min = extents[0];\n my.max = extents[1];\n // the default case is for the y-axis to start at 0, unless we explicitly want it\n // to start at an arbitrary number or from the data's minimum value\n if (my.min >= 0 && !args.min_y && !args.min_y_from_data) {\n my.min = 0;\n }\n\n mg_change_y_extents_for_bars(args, my);\n my.min = (args.min_y !== null) ? args.min_y : my.min;\n\n my.max = (args.max_y !== null) ? args.max_y : (my.max < 0) ? my.max + (my.max - my.max * args.inflator) : my.max * args.inflator;\n\n if (args.y_scale_type !== 'log' && my.min < 0) {\n my.min = my.min - (my.min - my.min * args.inflator);\n }\n\n if (!args.min_y && args.min_y_from_data) {\n var buff = (my.max - my.min) * .01;\n my.min = extents[0] - buff;\n my.max = extents[1] + buff;\n }\n args.processed.min_y = my.min;\n args.processed.max_y = my.max;\n}\n\nfunction mg_y_domain_range (args, scale) {\n scale.domain([args.processed.min_y, args.processed.max_y])\n .range([mg_get_plot_bottom(args), args.top]);\n return scale;\n}\n\nfunction mg_define_y_scales (args) {\n var scale = (mg_is_function(args.y_scale_type))\n ? args.y_scale_type()\n : (args.y_scale_type === 'log')\n ? d3.scaleLog()\n : d3.scaleLinear();\n\n if (args.y_scale_type === 'log') {\n if (args.chart_type === 'histogram') {\n // log histogram plots should start just below 1\n // so that bins with single counts are visible\n args.processed.min_y = 0.2;\n } else {\n if (args.processed.min_y <= 0) {\n args.processed.min_y = 1;\n }\n }\n }\n args.scales.Y = mg_y_domain_range(args, scale);\n args.scales.Y.clamp(args.y_scale_type === 'log');\n\n // used for ticks and such, and designed to be paired with log or linear\n args.scales.Y_axis = mg_y_domain_range(args, d3.scaleLinear());\n}\n\nfunction mg_add_y_label (g, args) {\n if (args.y_label) {\n g.append('text')\n .attr('class', 'label')\n .attr('x', function () {\n return -1 * (mg_get_plot_top(args) +\n ((mg_get_plot_bottom(args)) - (mg_get_plot_top(args))) / 2);\n })\n .attr('y', function () {\n return args.left / 2;\n })\n .attr('dy', '0.4em')\n .attr('text-anchor', 'middle')\n .text(function (d) {\n return args.y_label;\n })\n .attr('transform', function (d) {\n return 'rotate(-90)';\n });\n }\n}\n\nfunction mg_add_y_axis_rim (g, args) {\n var tick_length = args.processed.y_ticks.length;\n if (!args.x_extended_ticks && !args.y_extended_ticks && tick_length) {\n var y1scale, y2scale;\n\n if (args.axes_not_compact && args.chart_type !== 'bar') {\n y1scale = args.height - args.bottom;\n y2scale = args.top;\n } else if (tick_length) {\n y1scale = args.scales.Y(args.processed.y_ticks[0]).toFixed(2);\n y2scale = args.scales.Y(args.processed.y_ticks[tick_length - 1]).toFixed(2);\n } else {\n y1scale = 0;\n y2scale = 0;\n }\n\n g.append('line')\n .attr('x1', args.left)\n .attr('x2', args.left)\n .attr('y1', y1scale)\n .attr('y2', y2scale);\n }\n}\n\nfunction mg_add_y_axis_tick_lines (g, args) {\n g.selectAll('.mg-yax-ticks')\n .data(args.processed.y_ticks).enter()\n .append('line')\n .classed('mg-extended-yax-ticks', args.y_extended_ticks)\n .attr('x1', args.left)\n .attr('x2', function () {\n return (args.y_extended_ticks) ? args.width - args.right : args.left - args.yax_tick_length;\n })\n .attr('y1', function (d) {\n return args.scales.Y(d).toFixed(2);\n })\n .attr('y2', function (d) {\n return args.scales.Y(d).toFixed(2);\n });\n}\n\nfunction mg_add_y_axis_tick_labels (g, args) {\n var yax_format = mg_compute_yax_format(args);\n g.selectAll('.mg-yax-labels')\n .data(args.processed.y_ticks).enter()\n .append('text')\n .attr('x', args.left - args.yax_tick_length * 3 / 2)\n .attr('dx', -3)\n .attr('y', function (d) {\n return args.scales.Y(d).toFixed(2);\n })\n .attr('dy', '.35em')\n .attr('text-anchor', 'end')\n .text(function (d) {\n var o = yax_format(d);\n return o;\n });\n}\n\n// TODO ought to be deprecated, only used by histogram\nfunction y_axis (args) {\n if (!args.processed) {\n args.processed = {};\n }\n\n var svg = mg_get_svg_child_of(args.target);\n MG.call_hook('y_axis.process_min_max', args, args.processed.min_y, args.processed.max_y);\n mg_selectAll_and_remove(svg, '.mg-y-axis');\n\n if (!args.y_axis) {\n return this;\n }\n\n var g = mg_add_g(svg, 'mg-y-axis');\n mg_add_y_label(g, args);\n mg_process_scale_ticks(args, 'y');\n mg_add_y_axis_rim(g, args);\n mg_add_y_axis_tick_lines(g, args);\n mg_add_y_axis_tick_labels(g, args);\n\n if (args.y_rug) {\n y_rug(args);\n }\n\n return this;\n}\n\nMG.y_axis = y_axis;\n\nfunction mg_add_categorical_labels (args) {\n var svg = mg_get_svg_child_of(args.target);\n mg_selectAll_and_remove(svg, '.mg-y-axis');\n var g = mg_add_g(svg, 'mg-y-axis');\n var group_g;(args.categorical_groups.length ? args.categorical_groups : ['1']).forEach(function (group) {\n group_g = mg_add_g(g, 'mg-group-' + mg_normalize(group));\n\n if (args.ygroup_accessor !== null) {\n mg_add_group_label(group_g, group, args);\n } else {\n var labels = mg_add_graphic_labels(group_g, group, args);\n mg_rotate_labels(labels, args.rotate_y_labels);\n }\n });\n}\n\nfunction mg_add_graphic_labels (g, group, args) {\n return g.selectAll('text').data(args.scales.Y.domain()).enter().append('svg:text')\n .attr('x', args.left - args.buffer)\n .attr('y', function (d) {\n return args.scales.YGROUP(group) + args.scales.Y(d) + args.scales.Y.bandwidth() / 2;\n })\n .attr('dy', '.35em')\n .attr('text-anchor', 'end')\n .text(String);\n}\n\nfunction mg_add_group_label (g, group, args) {\n g.append('svg:text')\n .classed('mg-barplot-group-label', true)\n .attr('x', args.left - args.buffer)\n .attr('y', args.scales.YGROUP(group) + args.scales.YGROUP.bandwidth() / 2)\n .attr('dy', '.35em')\n .attr('text-anchor', 'end')\n .text(group);\n}\n\nfunction mg_draw_group_lines (args) {\n var svg = mg_get_svg_child_of(args.target);\n var groups = args.scales.YGROUP.domain();\n var first = groups[0];\n var last = groups[groups.length - 1];\n\n svg.select('.mg-category-guides').selectAll('mg-group-lines')\n .data(groups)\n .enter().append('line')\n .attr('x1', mg_get_plot_left(args))\n .attr('x2', mg_get_plot_left(args))\n .attr('y1', function (d) {\n return args.scales.YGROUP(d);\n })\n .attr('y2', function (d) {\n return args.scales.YGROUP(d) + args.ygroup_height;\n })\n .attr('stroke-width', 1);\n}\n\nfunction mg_y_categorical_show_guides (args) {\n // for each group\n // for each data point\n var svg = mg_get_svg_child_of(args.target);\n var alreadyPlotted = [];\n args.data[0].forEach(function (d) {\n if (alreadyPlotted.indexOf(d[args.y_accessor]) === -1) {\n svg.select('.mg-category-guides').append('line')\n .attr('x1', mg_get_plot_left(args))\n .attr('x2', mg_get_plot_right(args))\n .attr('y1', args.scalefns.yf(d) + args.scalefns.ygroupf(d))\n .attr('y2', args.scalefns.yf(d) + args.scalefns.ygroupf(d))\n .attr('stroke-dasharray', '2,1');\n }\n });\n}\n\nfunction y_axis_categorical (args) {\n if (!args.y_axis) {\n return this;\n }\n\n mg_add_categorical_labels(args);\n // mg_draw_group_scaffold(args);\n if (args.show_bar_zero) mg_bar_add_zero_line(args);\n if (args.ygroup_accessor) mg_draw_group_lines(args);\n if (args.y_categorical_show_guides) mg_y_categorical_show_guides(args);\n return this;\n}\n\nMG.y_axis_categorical = y_axis_categorical;\n\nfunction x_rug(args) {\n 'use strict';\n\n if(!args.x_rug) {\n return;\n }\n\n args.rug_buffer_size = args.chart_type === 'point'\n ? args.buffer / 2\n : args.buffer;\n\n var rug = mg_make_rug(args, 'mg-x-rug');\n\n rug.attr('x1', args.scalefns.xf)\n .attr('x2', args.scalefns.xf)\n .attr('y1', args.height - args.bottom - args.rug_buffer_size)\n .attr('y2', args.height - args.bottom);\n\n mg_add_color_accessor_to_rug(rug, args, 'mg-x-rug-mono');\n}\n\nMG.x_rug = x_rug;\n\nfunction mg_add_processed_object(args) {\n if (!args.processed) {\n args.processed = {};\n }\n}\n\n// TODO ought to be deprecated, only used by histogram\nfunction x_axis(args) {\n 'use strict';\n\n var svg = mg_get_svg_child_of(args.target);\n mg_add_processed_object(args);\n\n mg_select_xax_format(args);\n mg_selectAll_and_remove(svg, '.mg-x-axis');\n\n if (!args.x_axis) {\n return this;\n }\n\n var g = mg_add_g(svg, 'mg-x-axis');\n\n mg_add_x_ticks(g, args);\n mg_add_x_tick_labels(g, args);\n if (args.x_label) { mg_add_x_label(g, args); }\n if (args.x_rug) { x_rug(args); }\n\n return this;\n}\n\nMG.x_axis = x_axis;\n\nfunction x_axis_categorical(args) {\n var svg = mg_get_svg_child_of(args.target);\n var additional_buffer = 0;\n if (args.chart_type === 'bar') {\n additional_buffer = args.buffer + 5;\n }\n\n mg_add_categorical_scale(args, 'X', args.categorical_variables.reverse(), args.left, mg_get_plot_right(args) - additional_buffer);\n mg_add_scale_function(args, 'xf', 'X', 'value');\n mg_selectAll_and_remove(svg, '.mg-x-axis');\n\n var g = mg_add_g(svg, 'mg-x-axis');\n\n if (!args.x_axis) {\n return this;\n }\n\n mg_add_x_axis_categorical_labels(g, args, additional_buffer);\n return this;\n}\n\nfunction mg_add_x_axis_categorical_labels(g, args, additional_buffer) {\n var labels = g.selectAll('text')\n .data(args.categorical_variables)\n .enter()\n .append('text');\n\n labels\n .attr('x', function(d) {\n return args.scales.X(d) + args.scales.X.bandwidth() / 2 + (args.buffer) * args.bar_outer_padding_percentage + (additional_buffer / 2);\n })\n .attr('y', mg_get_plot_bottom(args))\n .attr('dy', '.35em')\n .attr('text-anchor', 'middle')\n .text(String);\n\n if (args.truncate_x_labels) {\n labels.each(function(d, idx) {\n var elem = this, width = args.scales.X.bandwidth();\n truncate_text(elem, d, width);\n });\n }\n mg_rotate_labels(labels, args.rotate_x_labels);\n}\n\nMG.x_axis_categorical = x_axis_categorical;\n\nfunction mg_point_add_color_scale(args) {\n var color_domain, color_range;\n\n if (args.color_accessor !== null) {\n color_domain = mg_get_color_domain(args);\n color_range = mg_get_color_range(args);\n\n if (args.color_type === 'number') {\n args.scales.color = d3.scaleLinear()\n .domain(color_domain)\n .range(color_range)\n .clamp(true);\n } else {\n args.scales.color = args.color_range !== null\n ? d3.scaleOrdinal().range(color_range)\n : (color_domain.length > 10\n ? d3.scaleOrdinal(d3.schemeCategory20)\n : d3.scaleOrdinal(d3.schemeCategory10));\n\n args.scales.color.domain(color_domain);\n }\n mg_add_scale_function(args, 'color', 'color', args.color_accessor);\n }\n}\n\nfunction mg_get_color_domain(args) {\n var color_domain;\n if (args.color_domain === null) {\n if (args.color_type === 'number') {\n color_domain = d3.extent(args.data[0], function(d) {\n return d[args.color_accessor];\n });\n } else if (args.color_type === 'category') {\n color_domain = d3.set(args.data[0]\n .map(function(d) {\n return d[args.color_accessor];\n }))\n .values();\n\n color_domain.sort();\n }\n } else {\n color_domain = args.color_domain;\n }\n return color_domain;\n}\n\nfunction mg_get_color_range(args) {\n var color_range;\n if (args.color_range === null) {\n if (args.color_type === 'number') {\n color_range = ['blue', 'red'];\n } else {\n color_range = null;\n }\n } else {\n color_range = args.color_range;\n }\n return color_range;\n}\n\nfunction mg_point_add_size_scale(args) {\n var min_size, max_size, size_domain, size_range;\n if (args.size_accessor !== null) {\n size_domain = mg_get_size_domain(args);\n size_range = mg_get_size_range(args);\n\n args.scales.size = d3.scaleLinear()\n .domain(size_domain)\n .range(size_range)\n .clamp(true);\n\n mg_add_scale_function(args, 'size', 'size', args.size_accessor);\n }\n}\n\nfunction mg_get_size_domain(args) {\n return (args.size_domain === null)\n ? d3.extent(args.data[0], function(d) { return d[args.size_accessor]; })\n : args.size_domain;\n}\n\nfunction mg_get_size_range(args) {\n var size_range;\n if (args.size_range === null) {\n size_range = [1, 5];\n } else {\n size_range = args.size_range;\n }\n return size_range;\n}\n\nfunction mg_add_x_label(g, args) {\n if (args.x_label) {\n g.append('text')\n .attr('class', 'label')\n .attr('x', function() {\n return mg_get_plot_left(args) + (mg_get_plot_right(args) - mg_get_plot_left(args)) / 2;\n })\n .attr('dx', args.x_label_nudge_x != null ? args.x_label_nudge_x : 0)\n .attr('y', function() {\n var xAxisTextElement = d3.select(args.target)\n .select('.mg-x-axis text').node().getBoundingClientRect();\n return mg_get_bottom(args) + args.xax_tick_length * (7 / 3) + xAxisTextElement.height * 0.8 + 10;\n })\n .attr('dy', '.5em')\n .attr('text-anchor', 'middle')\n .text(function(d) {\n return args.x_label;\n });\n }\n}\n\nfunction mg_default_bar_xax_format(args) {\n return function(d) {\n if (d < 1.0 && d > -1.0 && d !== 0) {\n // don't scale tiny values\n return args.xax_units + d.toFixed(args.decimals);\n } else {\n var pf = d3.format(',.0f');\n return args.xax_units + pf(d);\n }\n };\n}\n\nfunction mg_get_time_frame(diff) {\n // diff should be (max_x - min_x) / 1000, in other words, the difference in seconds.\n var time_frame;\n if (mg_milisec_diff(diff)) {\n time_frame = 'millis';\n } else if (mg_sec_diff(diff)) {\n time_frame = 'seconds';\n } else if (mg_day_diff(diff)) {\n time_frame = 'less-than-a-day';\n } else if (mg_four_days(diff)) {\n time_frame = 'four-days';\n } else if (mg_many_days(diff)) { // a handful of months?\n time_frame = 'many-days';\n } else if (mg_many_months(diff)) {\n time_frame = 'many-months';\n } else if (mg_years(diff)) {\n time_frame = 'years';\n } else {\n time_frame = 'default';\n }\n return time_frame;\n}\n\nfunction mg_milisec_diff(diff) {\n return diff < 10;\n}\n\nfunction mg_sec_diff(diff) {\n return diff < 60;\n}\n\nfunction mg_day_diff(diff) {\n return diff / (60 * 60) <= 24;\n}\n\nfunction mg_four_days(diff) {\n return diff / (60 * 60) <= 24 * 4;\n}\n\nfunction mg_many_days(diff) {\n return diff / (60 * 60 * 24) <= 93;\n}\n\nfunction mg_many_months(diff) {\n return diff / (60 * 60 * 24) < 365 * 2;\n}\n\nfunction mg_years(diff) {\n return diff / (60 * 60 * 24) >= 365 * 2;\n}\n\nfunction mg_get_time_format(utc, diff) {\n var main_time_format;\n if (mg_milisec_diff(diff)) {\n main_time_format = MG.time_format(utc, '%M:%S.%L');\n } else if (mg_sec_diff(diff)) {\n main_time_format = MG.time_format(utc, '%M:%S');\n } else if (mg_day_diff(diff)) {\n main_time_format = MG.time_format(utc, '%H:%M');\n } else if (mg_four_days(diff)) {\n main_time_format = MG.time_format(utc, '%H:%M');\n } else if (mg_many_days(diff)) {\n main_time_format = MG.time_format(utc, '%b %d');\n } else if (mg_many_months(diff)) {\n main_time_format = MG.time_format(utc, '%b');\n } else {\n main_time_format = MG.time_format(utc, '%Y');\n }\n return main_time_format;\n}\n\nfunction mg_process_time_format(args) {\n var diff;\n var main_time_format;\n var time_frame;\n\n if (args.time_series) {\n diff = (args.processed.max_x - args.processed.min_x) / 1000;\n time_frame = mg_get_time_frame(diff);\n main_time_format = mg_get_time_format(args.utc_time, diff);\n }\n\n args.processed.main_x_time_format = main_time_format;\n args.processed.x_time_frame = time_frame;\n}\n\nfunction mg_default_xax_format(args) {\n if (args.xax_format) {\n return args.xax_format;\n }\n\n var data = args.processed.original_data || args.data;\n var flattened = mg_flatten_array(data)[0];\n var test_point_x = flattened[args.processed.original_x_accessor || args.x_accessor];\n if (test_point_x === undefined) {\n test_point_x = flattened;\n }\n\n return function(d) {\n mg_process_time_format(args);\n\n if (mg_is_date(test_point_x)) {\n return args.processed.main_x_time_format(new Date(d));\n } else if (typeof test_point_x === 'number') {\n var is_float = d % 1 !== 0;\n var pf;\n\n if (is_float) {\n pf = d3.format(',.' + args.decimals + 'f');\n } else if (d < 1000) {\n pf = d3.format(',.0f');\n } else {\n pf = d3.format(',.2s');\n }\n return args.xax_units + pf(d);\n } else {\n return args.xax_units + d;\n }\n };\n}\n\nfunction mg_add_x_ticks(g, args) {\n mg_process_scale_ticks(args, 'x');\n mg_add_x_axis_rim(args, g);\n mg_add_x_axis_tick_lines(args, g);\n}\n\nfunction mg_add_x_axis_rim(args, g) {\n var tick_length = args.processed.x_ticks.length;\n var last_i = args.scales.X.ticks(args.xax_count).length - 1;\n\n if (!args.x_extended_ticks) {\n g.append('line')\n .attr('x1', function() {\n if (args.xax_count === 0) {\n return mg_get_plot_left(args);\n } else if (args.axes_not_compact && args.chart_type !== 'bar') {\n return args.left;\n } else {\n return (args.scales.X(args.scales.X.ticks(args.xax_count)[0])).toFixed(2);\n }\n })\n .attr('x2', function() {\n if (args.xax_count === 0 || (args.axes_not_compact && args.chart_type !== 'bar')) {\n return mg_get_right(args);\n } else {\n return args.scales.X(args.scales.X.ticks(args.xax_count)[last_i]).toFixed(2);\n }\n })\n .attr('y1', args.height - args.bottom)\n .attr('y2', args.height - args.bottom);\n }\n}\n\nfunction mg_add_x_axis_tick_lines(args, g) {\n g.selectAll('.mg-xax-ticks')\n .data(args.processed.x_ticks).enter()\n .append('line')\n .attr('x1', function(d) {\n return args.scales.X(d).toFixed(2); })\n .attr('x2', function(d) {\n return args.scales.X(d).toFixed(2); })\n .attr('y1', args.height - args.bottom)\n .attr('y2', function() {\n return (args.x_extended_ticks) ? args.top : args.height - args.bottom + args.xax_tick_length;\n })\n .attr('class', function() {\n if (args.x_extended_ticks) {\n return 'mg-extended-xax-ticks';\n }\n })\n .classed('mg-xax-ticks', true);\n}\n\nfunction mg_add_x_tick_labels(g, args) {\n mg_add_primary_x_axis_label(args, g);\n mg_add_secondary_x_axis_label(args, g);\n}\n\nfunction mg_add_primary_x_axis_label(args, g) {\n var labels = g.selectAll('.mg-xax-labels')\n .data(args.processed.x_ticks).enter()\n .append('text')\n .attr('x', function(d) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('y', (args.height - args.bottom + args.xax_tick_length * 7 / 3).toFixed(2))\n .attr('dy', '.50em')\n .attr('text-anchor', 'middle');\n\n if (args.time_series && args.european_clock) {\n labels.append('tspan').classed('mg-european-hours', true).text(function(_d, i) {\n var d = new Date(_d);\n if (i === 0) return d3.timeFormat('%H')(d);\n else return '';\n });\n labels.append('tspan').classed('mg-european-minutes-seconds', true).text(function(_d, i) {\n var d = new Date(_d);\n return ':' + args.processed.xax_format(d);\n });\n } else {\n labels.text(function(d) {\n return args.xax_units + args.processed.xax_format(d);\n });\n }\n\n // CHECK TO SEE IF OVERLAP for labels. If so,\n // remove half of them. This is a dirty hack.\n // We will need to figure out a more principled way of doing this.\n if (mg_elements_are_overlapping(labels)) {\n labels.filter(function(d, i) {\n return (i + 1) % 2 === 0;\n }).remove();\n\n var svg = mg_get_svg_child_of(args.target);\n svg.selectAll('.mg-xax-ticks')\n .filter(function(d, i) {\n return (i + 1) % 2 === 0;\n })\n .remove();\n }\n}\n\nfunction mg_add_secondary_x_axis_label(args, g) {\n if (args.time_series && (args.show_years || args.show_secondary_x_label)) {\n var tf = mg_get_yformat_and_secondary_time_function(args);\n mg_add_secondary_x_axis_elements(args, g, tf.timeframe, tf.yformat, tf.secondary);\n }\n}\n\nfunction mg_get_yformat_and_secondary_time_function(args) {\n var tf = {};\n tf.timeframe = args.processed.x_time_frame;\n switch (tf.timeframe) {\n case 'millis':\n case 'seconds':\n tf.secondary = d3.timeDays;\n if (args.european_clock) tf.yformat = MG.time_format(args.utc_time, '%b %d');\n else tf.yformat = MG.time_format(args.utc_time, '%I %p');\n break;\n case 'less-than-a-day':\n tf.secondary = d3.timeDays;\n tf.yformat = MG.time_format(args.utc_time, '%b %d');\n break;\n case 'four-days':\n tf.secondary = d3.timeDays;\n tf.yformat = MG.time_format(args.utc_time, '%b %d');\n break;\n case 'many-days':\n tf.secondary = d3.timeYears;\n tf.yformat = MG.time_format(args.utc_time, '%Y');\n break;\n case 'many-months':\n tf.secondary = d3.timeYears;\n tf.yformat = MG.time_format(args.utc_time, '%Y');\n break;\n default:\n tf.secondary = d3.timeYears;\n tf.yformat = MG.time_format(args.utc_time, '%Y');\n }\n return tf;\n}\n\nfunction mg_add_secondary_x_axis_elements(args, g, time_frame, yformat, secondary_function) {\n var years = secondary_function(args.processed.min_x, args.processed.max_x);\n if (years.length === 0) {\n var first_tick = args.scales.X.ticks(args.xax_count)[0];\n years = [first_tick];\n }\n\n var yg = mg_add_g(g, 'mg-year-marker');\n if (time_frame === 'default' && args.show_year_markers) {\n mg_add_year_marker_line(args, yg, years, yformat);\n }\n if (time_frame != 'years') mg_add_year_marker_text(args, yg, years, yformat);\n}\n\nfunction mg_add_year_marker_line(args, g, years, yformat) {\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('line')\n .attr('x1', function(d) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('x2', function(d) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('y1', mg_get_top(args))\n .attr('y2', mg_get_bottom(args));\n}\n\nfunction mg_add_year_marker_text(args, g, years, yformat) {\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('text')\n .attr('x', function(d, i) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('y', function() {\n var xAxisTextElement = d3.select(args.target)\n .select('.mg-x-axis text').node().getBoundingClientRect();\n return (mg_get_bottom(args) + args.xax_tick_length * 7 / 3) + (xAxisTextElement.height * 0.8);\n })\n .attr('dy', '.50em')\n .attr('text-anchor', 'middle')\n .text(function(d) {\n return yformat(new Date(d));\n });\n}\n\nfunction mg_min_max_x_for_nonbars(mx, args, data) {\n var extent_x = d3.extent(data, function(d) {\n return d[args.x_accessor];\n });\n mx.min = extent_x[0];\n mx.max = extent_x[1];\n}\n\nfunction mg_min_max_x_for_bars(mx, args, data) {\n mx.min = d3.min(data, function(d) {\n var trio = [\n d[args.x_accessor],\n (d[args.baseline_accessor]) ? d[args.baseline_accessor] : 0,\n (d[args.predictor_accessor]) ? d[args.predictor_accessor] : 0\n ];\n return Math.min.apply(null, trio);\n });\n\n if (mx.min > 0) mx.min = 0;\n\n mx.max = d3.max(data, function(d) {\n var trio = [\n d[args.x_accessor],\n (d[args.baseline_accessor]) ? d[args.baseline_accessor] : 0,\n (d[args.predictor_accessor]) ? d[args.predictor_accessor] : 0\n ];\n return Math.max.apply(null, trio);\n });\n return mx;\n}\n\nfunction mg_min_max_x_for_dates(mx) {\n var yesterday = MG.clone(mx.min).setDate(mx.min.getDate() - 1);\n var tomorrow = MG.clone(mx.min).setDate(mx.min.getDate() + 1);\n mx.min = yesterday;\n mx.max = tomorrow;\n}\n\nfunction mg_min_max_x_for_numbers(mx) {\n // TODO do we want to rewrite this?\n mx.min = mx.min - 1;\n mx.max = mx.max + 1;\n}\n\nfunction mg_min_max_x_for_strings(mx) {\n // TODO shouldn't be allowing strings here to be coerced into numbers\n mx.min = Number(mx.min) - 1;\n mx.max = Number(mx.max) + 1;\n}\n\nfunction mg_force_xax_count_to_be_two(args) {\n args.xax_count = 2;\n}\n\nfunction mg_sort_through_data_type_and_set_x_min_max_accordingly(mx, args, data) {\n if (args.chart_type === 'line' || args.chart_type === 'point' || args.chart_type === 'histogram') {\n mg_min_max_x_for_nonbars(mx, args, data);\n\n } else if (args.chart_type === 'bar') {\n mg_min_max_x_for_bars(mx, args, data);\n }\n // if data set is of length 1, expand the range so that we can build the x-axis\n if (mx.min === mx.max && !(args.min_x && args.max_x)) {\n if (mg_is_date(mx.min)) {\n mg_min_max_x_for_dates(mx);\n } else if (typeof min_x === 'number') {\n mg_min_max_x_for_numbers(mx);\n } else if (typeof min_x === 'string') {\n mg_min_max_x_for_strings(mx);\n }\n // force xax_count to be 2\n mg_force_xax_count_to_be_two(args);\n }\n}\n\nfunction mg_select_xax_format(args) {\n var c = args.chart_type;\n if (!args.processed.xax_format) {\n if (args.xax_format) {\n args.processed.xax_format = args.xax_format;\n } else {\n if (c === 'line' || c === 'point' || c === 'histogram') {\n args.processed.xax_format = mg_default_xax_format(args);\n } else if (c === 'bar') {\n args.processed.xax_format = mg_default_bar_xax_format(args);\n }\n }\n }\n}\n\nfunction mg_merge_args_with_defaults(args) {\n var defaults = {\n target: null,\n title: null,\n description: null\n };\n\n if (!args) {\n args = {};\n }\n\n if (!args.processed) {\n args.processed = {};\n }\n\n args = merge_with_defaults(args, defaults);\n return args;\n}\n\nfunction mg_is_time_series(args) {\n var first_elem = mg_flatten_array(args.processed.original_data || args.data)[0];\n args.time_series = mg_is_date(first_elem[args.processed.original_x_accessor || args.x_accessor]);\n}\n\nfunction mg_init_compute_width(args) {\n var svg_width = args.width;\n if (args.full_width) {\n svg_width = get_width(args.target);\n }\n if (args.x_axis_type === 'categorical' && svg_width === null) {\n svg_width = mg_categorical_calculate_height(args, 'x');\n }\n\n args.width = svg_width;\n}\n\nfunction mg_init_compute_height(args) {\n var svg_height = args.height;\n if (args.full_height) {\n svg_height = get_height(args.target);\n }\n if (args.y_axis_type === 'categorical' && svg_height === null) {\n svg_height = mg_categorical_calculate_height(args, 'y');\n }\n\n args.height = svg_height;\n}\n\nfunction mg_remove_svg_if_chart_type_has_changed(svg, args) {\n if ((!svg.selectAll('.mg-main-line').empty() && args.chart_type !== 'line') ||\n (!svg.selectAll('.mg-points').empty() && args.chart_type !== 'point') ||\n (!svg.selectAll('.mg-histogram').empty() && args.chart_type !== 'histogram') ||\n (!svg.selectAll('.mg-barplot').empty() && args.chart_type !== 'bar')\n ) {\n svg.remove();\n }\n}\n\nfunction mg_add_svg_if_it_doesnt_exist(svg, args) {\n if (mg_get_svg_child_of(args.target).empty()) {\n svg = d3.select(args.target)\n .append('svg')\n .classed('linked', args.linked)\n .attr('width', args.width)\n .attr('height', args.height);\n }\n return svg;\n}\n\nfunction mg_add_clip_path_for_plot_area(svg, args) {\n svg.selectAll('.mg-clip-path').remove();\n svg.append('defs')\n .attr('class', 'mg-clip-path')\n .append('clipPath')\n .attr('id', 'mg-plot-window-' + mg_target_ref(args.target))\n .append('svg:rect')\n .attr('x', mg_get_left(args))\n .attr('y', mg_get_top(args))\n .attr('width', args.width - args.left - args.right - args.buffer)\n .attr('height', args.height - args.top - args.bottom - args.buffer + 1);\n}\n\nfunction mg_adjust_width_and_height_if_changed(svg, args) {\n if (args.width !== Number(svg.attr('width'))) {\n svg.attr('width', args.width);\n }\n if (args.height !== Number(svg.attr('height'))) {\n svg.attr('height', args.height);\n }\n}\n\nfunction mg_set_viewbox_for_scaling(svg, args) {\n // we need to reconsider how we handle automatic scaling\n svg.attr('viewBox', '0 0 ' + args.width + ' ' + args.height);\n if (args.full_width || args.full_height) {\n svg.attr('preserveAspectRatio', 'xMinYMin meet');\n }\n}\n\nfunction mg_remove_missing_classes_and_text(svg) {\n // remove missing class\n svg.classed('mg-missing', false);\n\n // remove missing text\n svg.selectAll('.mg-missing-text').remove();\n svg.selectAll('.mg-missing-pane').remove();\n}\n\nfunction mg_remove_outdated_lines(svg, args) {\n // if we're updating an existing chart and we have fewer lines than\n // before, remove the outdated lines, e.g. if we had 3 lines, and we're calling\n // data_graphic() on the same target with 2 lines, remove the 3rd line\n\n var i = 0;\n\n if (svg.selectAll('.mg-main-line').nodes().length >= args.data.length) {\n // now, the thing is we can't just remove, say, line3 if we have a custom\n // line-color map, instead, see which are the lines to be removed, and delete those\n if (args.custom_line_color_map.length > 0) {\n var array_full_series = function(len) {\n var arr = new Array(len);\n for (var i = 0; i < arr.length; i++) { arr[i] = i + 1; }\n return arr;\n };\n\n // get an array of lines ids to remove\n var lines_to_remove = arr_diff(\n array_full_series(args.max_data_size),\n args.custom_line_color_map);\n\n for (i = 0; i < lines_to_remove.length; i++) {\n svg.selectAll('.mg-main-line.mg-line' + lines_to_remove[i] + '-color')\n .remove();\n }\n } else {\n // if we don't have a custom line-color map, just remove the lines from the end\n var num_of_new = args.data.length;\n var num_of_existing = (svg.selectAll('.mg-main-line').nodes()) ? svg.selectAll('.mg-main-line').nodes().length : 0;\n\n for (i = num_of_existing; i > num_of_new; i--) {\n svg.selectAll('.mg-main-line.mg-line' + i + '-color')\n .remove();\n }\n }\n }\n}\n\nfunction mg_raise_container_error(container, args) {\n if (container.empty()) {\n console.warn('The specified target element \"' + args.target + '\" could not be found in the page. The chart will not be rendered.');\n return;\n }\n}\n\nfunction categoricalInitialization(args, ns) {\n var which = ns === 'x' ? args.width : args.height;\n mg_categorical_count_number_of_groups(args, ns);\n mg_categorical_count_number_of_lanes(args, ns);\n mg_categorical_calculate_group_length(args, ns, which);\n if (which) mg_categorical_calculate_bar_thickness(args, ns);\n}\n\n\nfunction mg_categorical_count_number_of_groups(args, ns) {\n var accessor_string = ns + 'group_accessor';\n var accessor = args[accessor_string];\n args.categorical_groups = [];\n if (accessor) {\n var data = args.data[0];\n args.categorical_groups = d3.set(data.map(function(d) {\n return d[accessor] })).values();\n }\n}\n\nfunction mg_categorical_count_number_of_lanes(args, ns) {\n var accessor_string = ns + 'group_accessor';\n var groupAccessor = args[accessor_string];\n\n args.total_bars = args.data[0].length;\n if (groupAccessor) {\n var group_bars = count_array_elements(pluck(args.data[0], groupAccessor));\n group_bars = d3.max(Object.keys(group_bars).map(function(d) {\n return group_bars[d] }));\n args.bars_per_group = group_bars;\n } else {\n args.bars_per_group = args.data[0].length;\n }\n}\n\nfunction mg_categorical_calculate_group_length(args, ns, which) {\n var groupHeight = ns + 'group_height';\n if (which) {\n var gh = ns === 'y' ?\n (args.height - args.top - args.bottom - args.buffer * 2) / (args.categorical_groups.length || 1) :\n (args.width - args.left - args.right - args.buffer * 2) / (args.categorical_groups.length || 1);\n\n args[groupHeight] = gh;\n } else {\n var step = (1 + args[ns + '_padding_percentage']) * args.bar_thickness;\n args[groupHeight] = args.bars_per_group * step + args[ns + '_outer_padding_percentage'] * 2 * step; //args.bar_thickness + (((args.bars_per_group-1) * args.bar_thickness) * (args.bar_padding_percentage + args.bar_outer_padding_percentage*2));\n }\n}\n\nfunction mg_categorical_calculate_bar_thickness(args, ns) {\n // take one group height.\n var step = (args[ns + 'group_height']) / (args.bars_per_group + args[ns + '_outer_padding_percentage']);\n args.bar_thickness = step - (step * args[ns + '_padding_percentage']);\n}\n\nfunction mg_categorical_calculate_height(args, ns) {\n var groupContribution = (args[ns + 'group_height']) * (args.categorical_groups.length || 1);\n\n var marginContribution = ns === 'y'\n ? args.top + args.bottom + args.buffer * 2\n : args.left + args.right + args.buffer * 2;\n\n return groupContribution + marginContribution +\n (args.categorical_groups.length * args[ns + 'group_height'] * (args[ns + 'group_padding_percentage'] + args[ns + 'group_outer_padding_percentage']));\n}\n\nfunction mg_barchart_extrapolate_group_and_thickness_from_height(args) {\n // we need to set args.bar_thickness, group_height\n}\n\nfunction init(args) {\n 'use strict';\n args = arguments[0];\n args = mg_merge_args_with_defaults(args);\n // If you pass in a dom element for args.target, the expectation\n // of a string elsewhere will break.\n var container = d3.select(args.target);\n mg_raise_container_error(container, args);\n\n var svg = container.selectAll('svg');\n\n // some things that will need to be calculated if we have a categorical axis.\n if (args.y_axis_type === 'categorical') { categoricalInitialization(args, 'y'); }\n if (args.x_axis_type === 'categorical') { categoricalInitialization(args, 'x'); }\n\n mg_is_time_series(args);\n mg_init_compute_width(args);\n mg_init_compute_height(args);\n\n mg_remove_svg_if_chart_type_has_changed(svg, args);\n svg = mg_add_svg_if_it_doesnt_exist(svg, args);\n\n mg_add_clip_path_for_plot_area(svg, args);\n mg_adjust_width_and_height_if_changed(svg, args);\n mg_set_viewbox_for_scaling(svg, args);\n mg_remove_missing_classes_and_text(svg);\n chart_title(args);\n mg_remove_outdated_lines(svg, args);\n\n return this;\n}\n\nMG.init = init;\n\nfunction mg_return_label(d) {\n return d.label;\n}\n\nfunction mg_remove_existing_markers(svg) {\n svg.selectAll('.mg-markers').remove();\n svg.selectAll('.mg-baselines').remove();\n}\n\nfunction mg_in_range(args) {\n return function(d) {\n return (args.scales.X(d[args.x_accessor]) >= mg_get_plot_left(args)) && (args.scales.X(d[args.x_accessor]) <= mg_get_plot_right(args));\n };\n}\n\nfunction mg_x_position(args) {\n return function(d) {\n return args.scales.X(d[args.x_accessor]);\n };\n}\n\nfunction mg_x_position_fixed(args) {\n var _mg_x_pos = mg_x_position(args);\n return function(d) {\n return _mg_x_pos(d).toFixed(2);\n };\n}\n\nfunction mg_y_position_fixed(args) {\n var _mg_y_pos = args.scales.Y;\n return function(d) {\n return _mg_y_pos(d.value).toFixed(2);\n };\n}\n\nfunction mg_place_annotations(checker, class_name, args, svg, line_fcn, text_fcn) {\n var g;\n if (checker) {\n g = svg.append('g').attr('class', class_name);\n line_fcn(g, args);\n text_fcn(g, args);\n }\n}\n\nfunction mg_place_markers(args, svg) {\n mg_place_annotations(args.markers, 'mg-markers', args, svg, mg_place_marker_lines, mg_place_marker_text);\n}\n\nfunction mg_place_baselines(args, svg) {\n mg_place_annotations(args.baselines, 'mg-baselines', args, svg, mg_place_baseline_lines, mg_place_baseline_text);\n}\n\nfunction mg_place_marker_lines(gm, args) {\n var x_pos_fixed = mg_x_position_fixed(args);\n gm.selectAll('.mg-markers')\n .data(args.markers.filter(mg_in_range(args)))\n .enter()\n .append('line')\n .attr('x1', x_pos_fixed)\n .attr('x2', x_pos_fixed)\n .attr('y1', args.top)\n .attr('y2', mg_get_plot_bottom(args))\n .attr('class', function(d) {\n return d.lineclass;\n })\n .attr('stroke-dasharray', '3,1');\n}\n\nfunction mg_place_marker_text(gm, args) {\n gm.selectAll('.mg-markers')\n .data(args.markers.filter(mg_in_range(args)))\n .enter()\n .append('text')\n .attr('class', function(d) {\n return d.textclass || ''; })\n .classed('mg-marker-text', true)\n .attr('x', mg_x_position(args))\n .attr('y', args.x_axis_position === 'bottom' ? mg_get_top(args) * 0.95 : mg_get_bottom(args) + args.buffer)\n .attr('text-anchor', 'middle')\n .text(mg_return_label)\n .each(function(d) {\n if (d.click) {\n d3.select(this).style('cursor', 'pointer')\n .on('click', d.click);\n }\n });\n\n mg_prevent_horizontal_overlap(gm.selectAll('.mg-marker-text').nodes(), args);\n}\n\nfunction mg_place_baseline_lines(gb, args) {\n var y_pos = mg_y_position_fixed(args);\n gb.selectAll('.mg-baselines')\n .data(args.baselines)\n .enter().append('line')\n .attr('x1', mg_get_plot_left(args))\n .attr('x2', mg_get_plot_right(args))\n .attr('y1', y_pos)\n .attr('y2', y_pos);\n}\n\nfunction mg_place_baseline_text(gb, args) {\n var y_pos = mg_y_position_fixed(args);\n gb.selectAll('.mg-baselines')\n .data(args.baselines)\n .enter().append('text')\n .attr('x', mg_get_plot_right(args))\n .attr('y', y_pos)\n .attr('dy', -3)\n .attr('text-anchor', 'end')\n .text(mg_return_label);\n}\n\nfunction markers(args) {\n 'use strict';\n\n var svg = mg_get_svg_child_of(args.target);\n mg_remove_existing_markers(svg);\n mg_place_markers(args, svg);\n mg_place_baselines(args, svg);\n return this;\n}\n\nMG.markers = markers;\n\nfunction mg_clear_mouseover_container(svg) {\n svg.selectAll('.mg-active-datapoint-container').selectAll('*').remove();\n}\n\nfunction mg_setup_mouseover_container(svg, args) {\n svg.select('.mg-active-datapoint').remove();\n var text_anchor = args.mouseover_align === 'right'\n ? 'end'\n : (args.mouseover_align === 'left'\n ? 'start'\n : 'middle');\n\n var mouseover_x = (args.mouseover_align === 'right')\n ? mg_get_plot_right(args)\n : (args.mouseover_align === 'left'\n ? mg_get_plot_left(args)\n : (args.width - args.left - args.right) / 2 + args.left);\n\n var active_datapoint = svg.select('.mg-active-datapoint-container')\n .append('text')\n .attr('class', 'mg-active-datapoint')\n .attr('xml:space', 'preserve')\n .attr('text-anchor', text_anchor);\n\n // set the rollover text's position; if we have markers on two lines,\n // nudge up the rollover text a bit\n var active_datapoint_y_nudge = 0.75;\n\n var y_position = (args.x_axis_position === 'bottom')\n ? mg_get_top(args) * active_datapoint_y_nudge\n : mg_get_bottom(args) + args.buffer * 3;\n\n if (args.markers) {\n var yPos;\n svg.selectAll('.mg-marker-text')\n .each(function() {\n if (!yPos) {\n yPos = d3.select(this).attr('y');\n } else if (yPos !== d3.select(this).attr('y')) {\n active_datapoint_y_nudge = 0.56;\n }\n });\n }\n\n active_datapoint\n .attr('transform', 'translate(' + mouseover_x + ',' + (y_position) + ')');\n}\n\nfunction mg_mouseover_tspan(svg, text) {\n var tspan = '';\n var cl = null;\n if (arguments.length === 3) cl = arguments[2];\n tspan = svg.append('tspan').text(text);\n if (cl !== null) tspan.classed(cl, true);\n this.tspan = tspan;\n\n this.bold = function() {\n this.tspan.attr('font-weight', 'bold');\n return this;\n };\n\n this.font_size = function(pts) {\n this.tspan.attr('font-size', pts);\n return this;\n }\n\n this.x = function(x) {\n this.tspan.attr('x', x);\n return this;\n };\n this.y = function(y) {\n this.tspan.attr('y', y);\n return this;\n };\n this.elem = function() {\n return this.tspan;\n };\n return this;\n}\n\nfunction mg_reset_text_container(svg) {\n var textContainer = svg.select('.mg-active-datapoint');\n textContainer\n .selectAll('*')\n .remove();\n return textContainer;\n}\n\nfunction mg_mouseover_row(row_number, container, rargs) {\n var lineHeight = 1.1;\n this.rargs = rargs;\n\n var rrr = container.append('tspan')\n .attr('x', 0)\n .attr('y', (row_number * lineHeight) + 'em');\n\n this.text = function(text) {\n return mg_mouseover_tspan(rrr, text);\n }\n return this;\n}\n\nfunction mg_mouseover_text(args, rargs) {\n var lineHeight = 1.1;\n this.row_number = 0;\n this.rargs = rargs;\n mg_setup_mouseover_container(rargs.svg, args);\n\n this.text_container = mg_reset_text_container(rargs.svg);\n\n this.mouseover_row = function(rargs) {\n var that = this;\n var rrr = mg_mouseover_row(that.row_number, that.text_container, rargs);\n that.row_number += 1;\n return rrr;\n }\n\n return this;\n}\n\nfunction MG_WindowResizeTracker() {\n var targets = [];\n\n var Observer;\n if (typeof MutationObserver !== \"undefined\") {\n Observer = MutationObserver;\n } else if (typeof WebKitMutationObserver !== \"undefined\") {\n Observer = WebKitMutationObserver;\n }\n\n function window_listener() {\n targets.forEach(function(target) {\n var svg = d3.select(target).select('svg');\n\n // skip if svg is not visible\n if (!svg.empty() && (svg.node().parentNode.offsetWidth > 0 || svg.node().parentNode.offsetHeight > 0)) {\n var aspect = svg.attr('width') !== 0 ? (svg.attr('height') / svg.attr('width')) : 0;\n\n var newWidth = get_width(target);\n\n svg.attr('width', newWidth);\n svg.attr('height', aspect * newWidth);\n }\n });\n }\n\n function remove_target(target) {\n var index = targets.indexOf(target);\n if (index !== -1) {\n targets.splice(index, 1);\n }\n\n if (targets.length === 0) {\n window.removeEventListener('resize', window_listener, true);\n }\n }\n\n return {\n add_target: function(target) {\n if (targets.length === 0) {\n window.addEventListener('resize', window_listener, true);\n }\n\n if (targets.indexOf(target) === -1) {\n targets.push(target);\n\n if (Observer) {\n var observer = new Observer(function(mutations) {\n var targetNode = d3.select(target).node();\n\n if (!targetNode || mutations.some(\n function(mutation) {\n for (var i = 0; i < mutation.removedNodes.length; i++) {\n if (mutation.removedNodes[i] === targetNode) {\n return true;\n }\n }\n })) {\n observer.disconnect();\n remove_target(target);\n }\n });\n\n observer.observe(d3.select(target).node().parentNode, { childList: true });\n }\n }\n }\n };\n}\n\nvar mg_window_resize_tracker = new MG_WindowResizeTracker();\n\nfunction mg_window_listeners(args) {\n mg_if_aspect_ratio_resize_svg(args);\n}\n\nfunction mg_if_aspect_ratio_resize_svg(args) {\n // have we asked the svg to fill a div, if so resize with div\n if (args.full_width || args.full_height) {\n mg_window_resize_tracker.add_target(args.target);\n }\n}\n\nif (mg_jquery_exists()) {\n /*!\n * Bootstrap v3.3.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n /*!\n * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=c3834cc5b59ef727da53)\n * Config saved to config.json and https://gist.github.com/c3834cc5b59ef727da53\n */\n\n /* ========================================================================\n * Bootstrap: dropdown.js v3.3.1\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n +function ($) {\n 'use strict';\n\n if(typeof $().dropdown == 'function')\n return true;\n\n // DROPDOWN CLASS DEFINITION\n // =========================\n\n var backdrop = '.dropdown-backdrop';\n var toggle = '[data-toggle=\"dropdown\"]';\n var Dropdown = function (element) {\n $(element).on('click.bs.dropdown', this.toggle);\n };\n\n Dropdown.VERSION = '3.3.1';\n\n Dropdown.prototype.toggle = function (e) {\n var $this = $(this);\n\n if ($this.is('.disabled, :disabled')) return;\n\n var $parent = getParent($this);\n var isActive = $parent.hasClass('open');\n\n clearMenus();\n\n if (!isActive) {\n if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n // if mobile we use a backdrop because click events don't delegate\n $('
',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n container: false,\n viewport: {\n selector: 'body',\n padding: 0\n }\n }\n\n Tooltip.prototype.init = function (type, element, options) {\n this.enabled = true\n this.type = type\n this.$element = $(element)\n this.options = this.getOptions(options)\n this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n this.inState = { click: false, hover: false, focus: false }\n\n if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n }\n\n var triggers = this.options.trigger.split(' ')\n\n for (var i = triggers.length; i--;) {\n var trigger = triggers[i]\n\n if (trigger == 'click') {\n this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n } else if (trigger != 'manual') {\n var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'\n var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n }\n }\n\n this.options.selector ?\n (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n this.fixTitle()\n }\n\n Tooltip.prototype.getDefaults = function () {\n return Tooltip.DEFAULTS\n }\n\n Tooltip.prototype.getOptions = function (options) {\n options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n if (options.delay && typeof options.delay == 'number') {\n options.delay = {\n show: options.delay,\n hide: options.delay\n }\n }\n\n return options\n }\n\n Tooltip.prototype.getDelegateOptions = function () {\n var options = {}\n var defaults = this.getDefaults()\n\n this._options && $.each(this._options, function (key, value) {\n if (defaults[key] != value) options[key] = value\n })\n\n return options\n }\n\n Tooltip.prototype.enter = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n }\n\n if (self.tip().hasClass('in') || self.hoverState == 'in') {\n self.hoverState = 'in'\n return\n }\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'in'\n\n if (!self.options.delay || !self.options.delay.show) return self.show()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'in') self.show()\n }, self.options.delay.show)\n }\n\n Tooltip.prototype.isInStateTrue = function () {\n for (var key in this.inState) {\n if (this.inState[key]) return true\n }\n\n return false\n }\n\n Tooltip.prototype.leave = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n }\n\n if (self.isInStateTrue()) return\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'out'\n\n if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'out') self.hide()\n }, self.options.delay.hide)\n }\n\n Tooltip.prototype.show = function () {\n var e = $.Event('show.bs.' + this.type)\n\n if (this.hasContent() && this.enabled) {\n this.$element.trigger(e)\n\n var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n if (e.isDefaultPrevented() || !inDom) return\n var that = this\n\n var $tip = this.tip()\n\n var tipId = this.getUID(this.type)\n\n this.setContent()\n $tip.attr('id', tipId)\n this.$element.attr('aria-describedby', tipId)\n\n if (this.options.animation) $tip.addClass('fade')\n\n var placement = typeof this.options.placement == 'function' ?\n this.options.placement.call(this, $tip[0], this.$element[0]) :\n this.options.placement\n\n var autoToken = /\\s?auto?\\s?/i\n var autoPlace = autoToken.test(placement)\n if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n $tip\n .detach()\n .css({ top: 0, left: 0, display: 'block' })\n .addClass(placement)\n .data('bs.' + this.type, this)\n\n this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n this.$element.trigger('inserted.bs.' + this.type)\n\n var pos = this.getPosition()\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (autoPlace) {\n var orgPlacement = placement\n var viewportDim = this.getPosition(this.$viewport)\n\n placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :\n placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :\n placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :\n placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :\n placement\n\n $tip\n .removeClass(orgPlacement)\n .addClass(placement)\n }\n\n var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n this.applyPlacement(calculatedOffset, placement)\n\n var complete = function () {\n var prevHoverState = that.hoverState\n that.$element.trigger('shown.bs.' + that.type)\n that.hoverState = null\n\n if (prevHoverState == 'out') that.leave(that)\n }\n\n $.support.transition && this.$tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n }\n }\n\n Tooltip.prototype.applyPlacement = function (offset, placement) {\n var $tip = this.tip()\n var width = $tip[0].offsetWidth\n var height = $tip[0].offsetHeight\n\n // manually read margins because getBoundingClientRect includes difference\n var marginTop = parseInt($tip.css('margin-top'), 10)\n var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n // we must check for NaN for ie 8/9\n if (isNaN(marginTop)) marginTop = 0\n if (isNaN(marginLeft)) marginLeft = 0\n\n offset.top += marginTop\n offset.left += marginLeft\n\n // $.fn.offset doesn't round pixel values\n // so we use setOffset directly with our own function B-0\n $.offset.setOffset($tip[0], $.extend({\n using: function (props) {\n $tip.css({\n top: Math.round(props.top),\n left: Math.round(props.left)\n })\n }\n }, offset), 0)\n\n $tip.addClass('in')\n\n // check to see if placing tip in new offset caused the tip to resize itself\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (placement == 'top' && actualHeight != height) {\n offset.top = offset.top + height - actualHeight\n }\n\n var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n if (delta.left) offset.left += delta.left\n else offset.top += delta.top\n\n var isVertical = /top|bottom/.test(placement)\n var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n $tip.offset(offset)\n this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n }\n\n Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n this.arrow()\n .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n .css(isVertical ? 'top' : 'left', '')\n }\n\n Tooltip.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n\n $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n $tip.removeClass('fade in top bottom left right')\n }\n\n Tooltip.prototype.hide = function (callback) {\n var that = this\n var $tip = $(this.$tip)\n var e = $.Event('hide.bs.' + this.type)\n\n function complete() {\n if (that.hoverState != 'in') $tip.detach()\n that.$element\n .removeAttr('aria-describedby')\n .trigger('hidden.bs.' + that.type)\n callback && callback()\n }\n\n this.$element.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n $tip.removeClass('in')\n\n $.support.transition && $tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n\n this.hoverState = null\n\n return this\n }\n\n Tooltip.prototype.fixTitle = function () {\n var $e = this.$element\n if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n }\n }\n\n Tooltip.prototype.hasContent = function () {\n return this.getTitle()\n }\n\n Tooltip.prototype.getPosition = function ($element) {\n $element = $element || this.$element\n\n var el = $element[0]\n var isBody = el.tagName == 'BODY'\n\n var elRect = el.getBoundingClientRect()\n if (elRect.width == null) {\n // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n }\n var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()\n var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n return $.extend({}, elRect, scroll, outerDims, elOffset)\n }\n\n Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n }\n\n Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n var delta = { top: 0, left: 0 }\n if (!this.$viewport) return delta\n\n var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n var viewportDimensions = this.getPosition(this.$viewport)\n\n if (/right|left/.test(placement)) {\n var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll\n var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n if (topEdgeOffset < viewportDimensions.top) { // top overflow\n delta.top = viewportDimensions.top - topEdgeOffset\n } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n }\n } else {\n var leftEdgeOffset = pos.left - viewportPadding\n var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n delta.left = viewportDimensions.left - leftEdgeOffset\n } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n }\n }\n\n return delta\n }\n\n Tooltip.prototype.getTitle = function () {\n var title\n var $e = this.$element\n var o = this.options\n\n title = $e.attr('data-original-title')\n || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)\n\n return title\n }\n\n Tooltip.prototype.getUID = function (prefix) {\n do prefix += ~~(Math.random() * 1000000)\n while (document.getElementById(prefix))\n return prefix\n }\n\n Tooltip.prototype.tip = function () {\n if (!this.$tip) {\n this.$tip = $(this.options.template)\n if (this.$tip.length != 1) {\n throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n }\n }\n return this.$tip\n }\n\n Tooltip.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n }\n\n Tooltip.prototype.enable = function () {\n this.enabled = true\n }\n\n Tooltip.prototype.disable = function () {\n this.enabled = false\n }\n\n Tooltip.prototype.toggleEnabled = function () {\n this.enabled = !this.enabled\n }\n\n Tooltip.prototype.toggle = function (e) {\n var self = this\n if (e) {\n self = $(e.currentTarget).data('bs.' + this.type)\n if (!self) {\n self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n $(e.currentTarget).data('bs.' + this.type, self)\n }\n }\n\n if (e) {\n self.inState.click = !self.inState.click\n if (self.isInStateTrue()) self.enter(self)\n else self.leave(self)\n } else {\n self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n }\n }\n\n Tooltip.prototype.destroy = function () {\n var that = this\n clearTimeout(this.timeout)\n this.hide(function () {\n that.$element.off('.' + that.type).removeData('bs.' + that.type)\n if (that.$tip) {\n that.$tip.detach()\n }\n that.$tip = null\n that.$arrow = null\n that.$viewport = null\n })\n }\n\n\n // TOOLTIP PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.tooltip')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.tooltip\n\n $.fn.tooltip = Plugin\n $.fn.tooltip.Constructor = Tooltip\n\n\n // TOOLTIP NO CONFLICT\n // ===================\n\n $.fn.tooltip.noConflict = function () {\n $.fn.tooltip = old\n return this\n }\n\n }(jQuery);\n\n\n /* ========================================================================\n * Bootstrap: popover.js v3.3.5\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n +function ($) {\n 'use strict';\n\n // POPOVER PUBLIC CLASS DEFINITION\n // ===============================\n\n var Popover = function (element, options) {\n this.init('popover', element, options)\n }\n\n if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n Popover.VERSION = '3.3.5'\n\n Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '
'\n })\n\n\n // NOTE: POPOVER EXTENDS tooltip.js\n // ================================\n\n Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n Popover.prototype.constructor = Popover\n\n Popover.prototype.getDefaults = function () {\n return Popover.DEFAULTS\n }\n\n Popover.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n var content = this.getContent()\n\n $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n ](content)\n\n $tip.removeClass('fade top bottom left right in')\n\n // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n // this manually by checking the contents.\n if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n }\n\n Popover.prototype.hasContent = function () {\n return this.getTitle() || this.getContent()\n }\n\n Popover.prototype.getContent = function () {\n var $e = this.$element\n var o = this.options\n\n return $e.attr('data-content')\n || (typeof o.content == 'function' ?\n o.content.call($e[0]) :\n o.content)\n }\n\n Popover.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n }\n\n\n // POPOVER PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.popover')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.popover\n\n $.fn.popover = Plugin\n $.fn.popover.Constructor = Popover\n\n\n // POPOVER NO CONFLICT\n // ===================\n\n $.fn.popover.noConflict = function () {\n $.fn.popover = old\n return this\n }\n\n }(jQuery);\n}\n\nfunction chart_title(args) {\n 'use strict';\n\n var svg = mg_get_svg_child_of(args.target);\n\n //remove the current title if it exists\n svg.select('.mg-header').remove();\n\n if (args.target && args.title) {\n var chartTitle = svg.insert('text')\n .attr('class', 'mg-header')\n .attr('x', args.center_title_full_width ? args.width /2 : (args.width + args.left - args.right) / 2)\n .attr('y', args.title_y_position)\n .attr('text-anchor', 'middle')\n .attr('dy', '0.55em');\n\n //show the title\n chartTitle.append('tspan')\n .attr('class', 'mg-chart-title')\n .text(args.title);\n\n //show and activate the description icon if we have a description\n if (args.show_tooltips && args.description && mg_jquery_exists()) {\n chartTitle.append('tspan')\n .attr('class', 'mg-chart-description')\n .attr('dx', '0.3em')\n .text('\\uf059');\n\n //now that the title is an svg text element, we'll have to trigger\n //mouseenter, mouseleave events manually for the popover to work properly\n var $chartTitle = $(chartTitle.node());\n $chartTitle.popover({\n html: true,\n animation: false,\n placement: 'top',\n content: args.description,\n container: args.target,\n trigger: 'manual',\n template: '
').insertAfter($(this)).on('click', clearMenus);\n }\n\n var relatedTarget = { relatedTarget: this };\n $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget));\n\n if (e.isDefaultPrevented()) return;\n\n $this\n .trigger('focus')\n .attr('aria-expanded', 'true');\n\n $parent\n .toggleClass('open')\n .trigger('shown.bs.dropdown', relatedTarget);\n }\n\n return false;\n };\n\n Dropdown.prototype.keydown = function (e) {\n if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return;\n\n var $this = $(this);\n\n e.preventDefault();\n e.stopPropagation();\n\n if ($this.is('.disabled, :disabled')) return;\n\n var $parent = getParent($this);\n var isActive = $parent.hasClass('open');\n\n if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {\n if (e.which == 27) $parent.find(toggle).trigger('focus');\n return $this.trigger('click');\n }\n\n var desc = ' li:not(.divider):visible a';\n var $items = $parent.find('[role=\"menu\"]' + desc + ', [role=\"listbox\"]' + desc);\n\n if (!$items.length) return;\n\n var index = $items.index(e.target);\n\n if (e.which == 38 && index > 0) index--; // up\n if (e.which == 40 && index < $items.length - 1) index++; // down\n if (!~index) index = 0;\n\n $items.eq(index).trigger('focus');\n };\n\n function clearMenus(e) {\n if (e && e.which === 3) return;\n $(backdrop).remove();\n $(toggle).each(function () {\n var $this = $(this);\n var $parent = getParent($this);\n var relatedTarget = { relatedTarget: this };\n\n if (!$parent.hasClass('open')) return;\n\n $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget));\n\n if (e.isDefaultPrevented()) return;\n\n $this.attr('aria-expanded', 'false');\n $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget);\n });\n }\n\n function getParent($this) {\n var selector = $this.attr('data-target');\n\n if (!selector) {\n selector = $this.attr('href');\n selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, ''); // strip for ie7\n }\n\n var $parent = selector && $(selector);\n\n return $parent && $parent.length ? $parent : $this.parent();\n }\n\n\n // DROPDOWN PLUGIN DEFINITION\n // ==========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data('bs.dropdown');\n\n if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)));\n if (typeof option == 'string') data[option].call($this);\n });\n }\n\n var old = $.fn.dropdown;\n\n $.fn.dropdown = Plugin;\n $.fn.dropdown.Constructor = Dropdown;\n\n\n // DROPDOWN NO CONFLICT\n // ====================\n\n $.fn.dropdown.noConflict = function () {\n $.fn.dropdown = old;\n return this;\n };\n\n\n // APPLY TO STANDARD DROPDOWN ELEMENTS\n // ===================================\n\n $(document)\n .on('click.bs.dropdown.data-api', clearMenus)\n .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation(); })\n .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n .on('keydown.bs.dropdown.data-api', '[role=\"menu\"]', Dropdown.prototype.keydown)\n .on('keydown.bs.dropdown.data-api', '[role=\"listbox\"]', Dropdown.prototype.keydown);\n\n }(jQuery);\n}\n\nMG.button_layout = function(target) {\n 'use strict';\n this.target = target;\n this.feature_set = {};\n this.public_name = {};\n this.sorters = {};\n this.manual = [];\n this.manual_map = {};\n this.manual_callback = {};\n\n this._strip_punctuation = function(s) {\n var punctuationless = s.replace(/[^a-zA-Z0-9 _]+/g, '');\n var finalString = punctuationless.replace(/ +?/g, '');\n return finalString;\n };\n\n this.data = function(data) {\n this._data = data;\n return this;\n };\n\n this.manual_button = function(feature, feature_set, callback) {\n this.feature_set[feature] = feature_set;\n this.manual_map[this._strip_punctuation(feature)] = feature;\n this.manual_callback[feature] = callback; // the default is going to be the first feature.\n return this;\n };\n\n this.button = function(feature) {\n if (arguments.length > 1) {\n this.public_name[feature] = arguments[1];\n }\n\n if (arguments.length > 2) {\n this.sorters[feature] = arguments[2];\n }\n\n this.feature_set[feature] = [];\n return this;\n };\n\n this.callback = function(callback) {\n this._callback = callback;\n return this;\n };\n\n this.display = function() {\n var callback = this._callback;\n var manual_callback = this.manual_callback;\n var manual_map = this.manual_map;\n\n var d, f, features, feat;\n features = Object.keys(this.feature_set);\n\n var mapDtoF = function(f) {\n return d[f]; };\n\n var i;\n\n // build out this.feature_set with this.data\n for (i = 0; i < this._data.length; i++) {\n d = this._data[i];\n f = features.map(mapDtoF);\n for (var j = 0; j < features.length; j++) {\n feat = features[j];\n if (this.feature_set[feat].indexOf(f[j]) === -1) {\n this.feature_set[feat].push(f[j]);\n }\n }\n }\n\n for (feat in this.feature_set) {\n if (this.sorters.hasOwnProperty(feat)) {\n this.feature_set[feat].sort(this.sorters[feat]);\n }\n }\n\n $(this.target).empty();\n\n $(this.target).append(\"\");\n\n var dropdownLiAClick = function() {\n var k = $(this).data('key');\n var feature = $(this).data('feature');\n var manual_feature;\n $('.' + feature + '-btns button.btn span.title').html(k);\n if (!manual_map.hasOwnProperty(feature)) {\n callback(feature, k);\n } else {\n manual_feature = manual_map[feature];\n manual_callback[manual_feature](k);\n }\n\n return false;\n };\n\n for (var feature in this.feature_set) {\n features = this.feature_set[feature];\n $(this.target + ' div.segments').append(\n '
';\n }\n });\n window.AugurRepos[this.repo].dependencies().then(function (dependencies) {\n _this.$refs['dependencies'].innerHTML = '';\n for (var i = 0; i < dependencies.dependencies.length && i < 10; i++) {\n _this.$refs['dependents'].innerHTML += dependencies.dependencies[i].name + '
';\n }\n });\n window.AugurRepos[this.repo].dependencyStats().then(function (depstats) {\n _this.$refs['totaldependents'].innerHTML = depstats['dependent_repositories'];\n _this.$refs['totaldependencies'].innerHTML = depstats['dependencies'];\n });\n }\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Total Dependents\")]),_vm._v(\" \"),_c('div',{ref:\"totaldependents\",staticClass:\"deps\"},[_vm._v(\"\\n Loading...\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Total Dependencies\")]),_vm._v(\" \"),_c('div',{ref:\"totaldependencies\",staticClass:\"deps\"},[_vm._v(\"\\n Loading...\\n \")])])]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Top Dependents\")]),_vm._v(\" \"),_c('div',{ref:\"dependents\",staticClass:\"deps\"},[_vm._v(\"\\n Loading...\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Top Dependencies\")]),_vm._v(\" \"),_c('div',{ref:\"dependencies\",staticClass:\"deps\",domProps:{\"innerHTML\":_vm._s(_vm.dependencies)}},[_vm._v(\"\\n Loading...\\n \")])])])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-210450fe\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-210450fe\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _metricsGraphics = require('metrics-graphics');\n\nvar _metricsGraphics2 = _interopRequireDefault(_metricsGraphics);\n\nvar _AugurStats = require('../AugurStats');\n\nvar _AugurStats2 = _interopRequireDefault(_AugurStats);\n\nvar _d = require('d3');\n\nvar d3 = _interopRequireWildcard(_d);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n_metricsGraphics2.default.data_graphic({\n title: \"Missing Data\",\n error: 'Data unavaliable for ' + title,\n chart_type: 'missing-data',\n missing_text: title + ' could not be loaded',\n target: undefined.$refs.chart,\n full_width: true,\n height: 200\n});\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"chart\",staticClass:\"linechart\"})}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-ebdae2a4\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-ebdae2a4\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _d = require('d3');\n\nvar d3 = _interopRequireWildcard(_d);\n\nvar _AugurStats = require('AugurStats');\n\nvar _AugurStats2 = _interopRequireDefault(_AugurStats);\n\nvar _vuex = require('vuex');\n\nvar _metricsgraphics = require('../../include/metricsgraphics');\n\nvar _metricsgraphics2 = _interopRequireDefault(_metricsgraphics);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nconsole.log(d3);\n\nexports.default = {\n props: ['source', 'citeUrl', 'citeText', 'title', 'percentage', 'comparedTo', 'disableRollingAverage'],\n computed: {\n repo: function repo() {\n return this.$store.state.baseRepo;\n },\n period: function period() {\n return this.$store.state.trailingAverage;\n },\n earliest: function earliest() {\n return this.$store.state.startDate;\n },\n latest: function latest() {\n return this.$store.state.endDate;\n },\n compare: function compare() {\n return this.$store.state.compare;\n },\n chart: function chart() {\n var _this = this;\n\n var config = {};\n\n config.earliest = this.earliest || new Date('01-01-2005');\n config.latest = this.latest || new Date();\n config.title = this.title || \"Activity\";\n config.full_width = true;\n config.height = 200;\n config.x_accessor = 'date';\n config.format = this.percentage ? 'percentage' : undefined;\n config.compare = this.compare;\n\n\n if (this.repo) {\n if (this.$refs.chart) {\n this.$refs.chart.className = 'linechart loader';\n }\n window.AugurRepos[this.repo][this.source]().then(function (baseData) {\n _this.$refs.chartStatus.innerHTML = '';\n if (baseData && baseData.length) {\n config.data = _AugurStats2.default.convertDates(baseData, _this.earliest, _this.latest);\n } else {\n config.data = [];\n }\n if (_this.comparedTo) {\n return AugurRepos[_this.comparedTo][_this.source]();\n }\n return new Promise(function (resolve, reject) {\n resolve();\n });\n }).then(function (compareData) {\n var keys = Object.keys(config.data[0]).splice(1);\n if (config.data && compareData && compareData.length) {\n if (config.compare == 'each') {\n var key = Object.keys(compareData[0])[1];\n var compare = _AugurStats2.default.rollingAverage(_AugurStats2.default.zscores(compareData, key), 'value', _this.period);\n var base = _AugurStats2.default.rollingAverage(_AugurStats2.default.zscores(config.data, key), 'value', _this.period);\n config.data = [base, compare];\n config.legend = [window.AugurRepos[_this.repo].toString(), window.AugurRepos[_this.comparedTo].toString()];\n config.colors = config.colors || ['#FF3647', '#999'];\n } else {\n console.log('rendering percentage');\n config.format = 'percentage';\n config.baselines = [{ value: 1, label: config.baseline }];\n config.data = _AugurStats2.default.makeRelative(config.data, compareData, {\n earliest: config.earliest,\n latest: config.latest,\n byDate: config.byDate,\n period: _this.period\n });\n }\n } else {\n if (!_this.disableRollingAverage) {\n config.legend = config.legend || [config.title.toLowerCase(), _this.period + ' day average'];\n var rolling = _AugurStats2.default.rollingAverage(config.data, keys[0], _this.period);\n config.data = _AugurStats2.default.convertKey(_AugurStats2.default.combine(config.data, rolling), keys[0]);\n config.colors = config.colors || ['#CCC', '#FF3647'];\n config.y_accessor = 'value';\n }\n }\n\n if (keys.length > 1) {\n config.legend_target = _this.$refs.legend;\n $(_this.$refs.chart).hover(function () {\n _this.$refs.legend.style.display = 'none';\n }, function () {\n _this.$refs.legend.style.display = 'block';\n });\n }\n\n _this.$refs.chart.className = 'linechart intro';\n config.target = _this.$refs.chart;\n _metricsgraphics2.default.data_graphic(config);\n });\n return '
' + // This never changes.\n '' +\n '
');\n\n for (i = 0; i < features.length; i++) {\n if (features[i] !== 'all' && features[i] !== undefined) { // strange bug with undefined being added to manual buttons.\n $(this.target + ' div.' + this._strip_punctuation(feature) + '-btns ul.dropdown-menu').append(\n '- ' +\n (!this.manual_callback.hasOwnProperty(feature) ? '
';\n }\n });\n window.AugurRepos[this.repo].dependencies().then(function (dependencies) {\n _this.$refs['dependencies'].innerHTML = '';\n for (var i = 0; i < dependencies.dependencies.length && i < 10; i++) {\n _this.$refs['dependents'].innerHTML += dependencies.dependencies[i].name + '
';\n }\n });\n window.AugurRepos[this.repo].dependencyStats().then(function (depstats) {\n _this.$refs['totaldependents'].innerHTML = depstats['dependent_repositories'];\n _this.$refs['totaldependencies'].innerHTML = depstats['dependencies'];\n });\n }\n }\n }\n};\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Total Dependents\")]),_vm._v(\" \"),_c('div',{ref:\"totaldependents\",staticClass:\"deps\"},[_vm._v(\"\\n Loading...\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Total Dependencies\")]),_vm._v(\" \"),_c('div',{ref:\"totaldependencies\",staticClass:\"deps\"},[_vm._v(\"\\n Loading...\\n \")])])]),_vm._v(\" \"),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Top Dependents\")]),_vm._v(\" \"),_c('div',{ref:\"dependents\",staticClass:\"deps\"},[_vm._v(\"\\n Loading...\\n \")])]),_vm._v(\" \"),_c('div',{staticClass:\"col col-6\"},[_c('h3',[_vm._v(\"Top Dependencies\")]),_vm._v(\" \"),_c('div',{ref:\"dependencies\",staticClass:\"deps\",domProps:{\"innerHTML\":_vm._s(_vm.dependencies)}},[_vm._v(\"\\n Loading...\\n \")])])])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-210450fe\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-210450fe\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nvar _metricsGraphics = require('metrics-graphics');\n\nvar _metricsGraphics2 = _interopRequireDefault(_metricsGraphics);\n\nvar _AugurStats = require('../AugurStats');\n\nvar _AugurStats2 = _interopRequireDefault(_AugurStats);\n\nvar _d = require('d3');\n\nvar d3 = _interopRequireWildcard(_d);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n_metricsGraphics2.default.data_graphic({\n title: \"Missing Data\",\n error: 'Data unavaliable for ' + title,\n chart_type: 'missing-data',\n missing_text: title + ' could not be loaded',\n target: undefined.$refs.chart,\n full_width: true,\n height: 200\n});\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"chart\",staticClass:\"linechart\"})}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-ebdae2a4\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-ebdae2a4\", __vue__options__)\n }\n})()}",";(function(){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _d = require('d3');\n\nvar d3 = _interopRequireWildcard(_d);\n\nvar _AugurStats = require('AugurStats');\n\nvar _AugurStats2 = _interopRequireDefault(_AugurStats);\n\nvar _vuex = require('vuex');\n\nvar _metricsgraphics = require('../../include/metricsgraphics');\n\nvar _metricsgraphics2 = _interopRequireDefault(_metricsgraphics);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nconsole.log(d3);\n\nexports.default = {\n props: ['source', 'citeUrl', 'citeText', 'title', 'percentage', 'comparedTo', 'disableRollingAverage'],\n computed: {\n repo: function repo() {\n return this.$store.state.baseRepo;\n },\n period: function period() {\n return this.$store.state.trailingAverage;\n },\n earliest: function earliest() {\n return this.$store.state.startDate;\n },\n latest: function latest() {\n return this.$store.state.endDate;\n },\n compare: function compare() {\n return this.$store.state.compare;\n },\n chart: function chart() {\n var _this = this;\n\n var config = {};\n\n config.earliest = this.earliest || new Date('01-01-2005');\n config.latest = this.latest || new Date();\n config.title = this.title || \"Activity\";\n config.full_width = true;\n config.height = 200;\n config.x_accessor = 'date';\n config.format = this.percentage ? 'percentage' : undefined;\n config.compare = this.compare;\n\n\n if (this.repo) {\n if (this.$refs.chart) {\n this.$refs.chart.className = 'linechart loader';\n }\n window.AugurRepos[this.repo][this.source]().then(function (baseData) {\n _this.$refs.chartStatus.innerHTML = '';\n if (baseData && baseData.length) {\n config.data = _AugurStats2.default.convertDates(baseData, _this.earliest, _this.latest);\n } else {\n config.data = [];\n }\n if (_this.comparedTo) {\n return AugurRepos[_this.comparedTo][_this.source]();\n }\n return new Promise(function (resolve, reject) {\n resolve();\n });\n }).then(function (compareData) {\n var keys = Object.keys(config.data[0]).splice(1);\n if (config.data && compareData && compareData.length) {\n if (config.compare == 'each') {\n var key = Object.keys(compareData[0])[1];\n var compare = _AugurStats2.default.rollingAverage(_AugurStats2.default.zscores(compareData, key), 'value', _this.period);\n var base = _AugurStats2.default.rollingAverage(_AugurStats2.default.zscores(config.data, key), 'value', _this.period);\n config.data = [base, compare];\n config.legend = [window.AugurRepos[_this.repo].toString(), window.AugurRepos[_this.comparedTo].toString()];\n config.colors = config.colors || ['#FF3647', '#999'];\n } else {\n console.log('rendering percentage');\n config.format = 'percentage';\n config.baselines = [{ value: 1, label: config.baseline }];\n config.data = _AugurStats2.default.makeRelative(config.data, compareData, {\n earliest: config.earliest,\n latest: config.latest,\n byDate: config.byDate,\n period: _this.period\n });\n }\n } else {\n if (!_this.disableRollingAverage) {\n config.legend = config.legend || [config.title.toLowerCase(), _this.period + ' day average'];\n var rolling = _AugurStats2.default.rollingAverage(config.data, keys[0], _this.period);\n config.data = _AugurStats2.default.convertKey(_AugurStats2.default.combine(config.data, rolling), keys[0]);\n config.colors = config.colors || ['#CCC', '#FF3647'];\n config.y_accessor = 'value';\n }\n }\n\n if (keys.length > 1) {\n config.legend_target = _this.$refs.legend;\n $(_this.$refs.chart).hover(function () {\n _this.$refs.legend.style.display = 'none';\n }, function () {\n _this.$refs.legend.style.display = 'block';\n });\n }\n\n _this.$refs.chart.className = 'linechart intro';\n config.target = _this.$refs.chart;\n _metricsgraphics2.default.data_graphic(config);\n });\n return '
' + this.title + '...
';\n }\n }\n } };\n})()\nif (module.exports.__esModule) module.exports = module.exports.default\nvar __vue__options__ = (typeof module.exports === \"function\"? module.exports.options: module.exports)\nif (__vue__options__.functional) {console.error(\"[vueify] functional components are not supported and should be defined in plain js files using render functions.\")}\n__vue__options__.render = function render () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('cite',{staticClass:\"metric\"},[_vm._v(\"Metric: \"),_c('a',{attrs:{\"href\":_vm.citeUrl,\"target\":\"_blank\"}},[_vm._v(_vm._s(_vm.citeText))])]),_vm._v(\" \"),_c('div',{ref:\"chart\",staticClass:\"linechart\"},[_c('div',{ref:\"legend\",staticClass:\"legend\"}),_vm._v(\" \"),_c('span',{ref:\"chartStatus\",domProps:{\"innerHTML\":_vm._s(_vm.chart)}})])])}\n__vue__options__.staticRenderFns = []\nif (module.hot) {(function () { var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), true)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-4035d73d\", __vue__options__)\n } else {\n hotAPI.reload(\"data-v-4035d73d\", __vue__options__)\n }\n})()}","/*\n\tKube. CSS & JS Framework\n\tVersion 6.5.2\n\tUpdated: February 2, 2017\n\n\thttp://imperavi.com/kube/\n\n\tCopyright (c) 2009-2017, Imperavi LLC.\n\tLicense: MIT\n*/\nif (typeof jQuery === 'undefined') {throw new Error('Kube\\'s requires jQuery')};\n;(function($) { var version = $.fn.jquery.split('.'); if (version[0] == 1 && version[1] < 8) {throw new Error('Kube\\'s requires at least jQuery v1.8'); }})(jQuery);\n\n;(function()\n{\n // Inherits\n Function.prototype.inherits = function(parent)\n {\n var F = function () {};\n F.prototype = parent.prototype;\n var f = new F();\n\n for (var prop in this.prototype) f[prop] = this.prototype[prop];\n this.prototype = f;\n this.prototype.super = parent.prototype;\n };\n\n // Core Class\n var Kube = function(element, options)\n {\n options = (typeof options === 'object') ? options : {};\n\n this.$element = $(element);\n this.opts = $.extend(true, this.defaults, $.fn[this.namespace].options, this.$element.data(), options);\n this.$target = (typeof this.opts.target === 'string') ? $(this.opts.target) : null;\n };\n\n // Core Functionality\n Kube.prototype = {\n getInstance: function()\n {\n return this.$element.data('fn.' + this.namespace);\n },\n hasTarget: function()\n {\n return !(this.$target === null);\n },\n callback: function(type)\n {\n\t\tvar args = [].slice.call(arguments).splice(1);\n\n // on element callback\n if (this.$element)\n {\n args = this._fireCallback($._data(this.$element[0], 'events'), type, this.namespace, args);\n }\n\n // on target callback\n if (this.$target)\n {\n args = this._fireCallback($._data(this.$target[0], 'events'), type, this.namespace, args);\n\t\t}\n\n\t\t// opts callback\n\t\tif (this.opts && this.opts.callbacks && $.isFunction(this.opts.callbacks[type]))\n\t\t{\n return this.opts.callbacks[type].apply(this, args);\n\t\t}\n\n\t\treturn args;\n },\n _fireCallback: function(events, type, eventNamespace, args)\n {\n if (events && typeof events[type] !== 'undefined')\n {\n\t\t\tvar len = events[type].length;\n\t\t\tfor (var i = 0; i < len; i++)\n\t\t\t{\n\t\t\t\tvar namespace = events[type][i].namespace;\n\t\t\t\tif (namespace === eventNamespace)\n\t\t\t\t{\n\t\t\t\t\tvar value = events[type][i].handler.apply(this, args);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n return (typeof value === 'undefined') ? args : value;\n }\n };\n\n // Scope\n window.Kube = Kube;\n\n})();\n/**\n * @library Kube Plugin\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Plugin = {\n create: function(classname, pluginname)\n {\n pluginname = (typeof pluginname === 'undefined') ? classname.toLowerCase() : pluginname;\n\n $.fn[pluginname] = function(method, options)\n {\n var args = Array.prototype.slice.call(arguments, 1);\n var name = 'fn.' + pluginname;\n var val = [];\n\n this.each(function()\n {\n var $this = $(this), data = $this.data(name);\n options = (typeof method === 'object') ? method : options;\n\n if (!data)\n {\n // Initialization\n $this.data(name, {});\n $this.data(name, (data = new Kube[classname](this, options)));\n }\n\n // Call methods\n if (typeof method === 'string')\n {\n if ($.isFunction(data[method]))\n {\n var methodVal = data[method].apply(data, args);\n if (methodVal !== undefined)\n {\n val.push(methodVal);\n }\n }\n else\n {\n $.error('No such method \"' + method + '\" for ' + classname);\n }\n }\n\n });\n\n return (val.length === 0 || val.length === 1) ? ((val.length === 0) ? this : val[0]) : val;\n };\n\n $.fn[pluginname].options = {};\n\n return this;\n },\n autoload: function(pluginname)\n {\n var arr = pluginname.split(',');\n var len = arr.length;\n\n for (var i = 0; i < len; i++)\n {\n var name = arr[i].toLowerCase().split(',').map(function(s) { return s.trim() }).join(',');\n this.autoloadQueue.push(name);\n }\n\n return this;\n },\n autoloadQueue: [],\n startAutoload: function()\n {\n if (!window.MutationObserver || this.autoloadQueue.length === 0)\n {\n return;\n }\n\n var self = this;\n\t\tvar observer = new MutationObserver(function(mutations)\n\t\t{\n\t\t\tmutations.forEach(function(mutation)\n\t\t\t{\n\t\t\t\tvar newNodes = mutation.addedNodes;\n\t\t\t if (newNodes.length === 0 || (newNodes.length === 1 && newNodes.nodeType === 3))\n\t\t\t {\n\t\t\t\t return;\n\t\t\t\t}\n\n self.startAutoloadOnce();\n\t\t\t});\n\t\t});\n\n\t\t// pass in the target node, as well as the observer options\n\t\tobserver.observe(document, {\n\t\t\t subtree: true,\n\t\t\t childList: true\n\t\t});\n },\n startAutoloadOnce: function()\n {\n var self = this;\n var $nodes = $('[data-component]').not('[data-loaded]');\n\t\t$nodes.each(function()\n\t\t{\n\t\t\tvar $el = $(this);\n\t\t\tvar pluginname = $el.data('component');\n\n if (self.autoloadQueue.indexOf(pluginname) !== -1)\n {\n\t\t\t$el.attr('data-loaded', true);\n $el[pluginname]();\n }\n });\n\n },\n watch: function()\n {\n Kube.Plugin.startAutoloadOnce();\n Kube.Plugin.startAutoload();\n }\n };\n\n $(window).on('load', function()\n {\n Kube.Plugin.watch();\n });\n\n}(Kube));\n/**\n * @library Kube Animation\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Animation = function(element, effect, callback)\n {\n this.namespace = 'animation';\n this.defaults = {};\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.effect = effect;\n this.completeCallback = (typeof callback === 'undefined') ? false : callback;\n this.prefixes = ['', '-moz-', '-o-animation-', '-webkit-'];\n this.queue = [];\n\n this.start();\n };\n\n Kube.Animation.prototype = {\n start: function()\n {\n\t\tif (this.isSlideEffect()) this.setElementHeight();\n\n\t\t\tthis.addToQueue();\n\t\t\tthis.clean();\n\t\t\tthis.animate();\n },\n addToQueue: function()\n {\n this.queue.push(this.effect);\n },\n setElementHeight: function()\n {\n this.$element.height(this.$element.height());\n },\n removeElementHeight: function()\n {\n this.$element.css('height', '');\n },\n isSlideEffect: function()\n {\n return (this.effect === 'slideDown' || this.effect === 'slideUp');\n },\n isHideableEffect: function()\n {\n var effects = ['fadeOut', 'slideUp', 'flipOut', 'zoomOut', 'slideOutUp', 'slideOutRight', 'slideOutLeft'];\n\n\t\t\treturn ($.inArray(this.effect, effects) !== -1);\n },\n isToggleEffect: function()\n {\n return (this.effect === 'show' || this.effect === 'hide');\n },\n storeHideClasses: function()\n {\n if (this.$element.hasClass('hide-sm')) this.$element.data('hide-sm-class', true);\n else if (this.$element.hasClass('hide-md')) this.$element.data('hide-md-class', true);\n },\n revertHideClasses: function()\n {\n if (this.$element.data('hide-sm-class')) this.$element.addClass('hide-sm').removeData('hide-sm-class');\n else if (this.$element.data('hide-md-class')) this.$element.addClass('hide-md').removeData('hide-md-class');\n else this.$element.addClass('hide');\n },\n removeHideClass: function()\n {\n if (this.$element.data('hide-sm-class')) this.$element.removeClass('hide-sm');\n else if (this.$element.data('hide-md-class')) this.$element.removeClass('hide-md');\n else this.$element.removeClass('hide');\n },\n animate: function()\n {\n this.storeHideClasses();\n if (this.isToggleEffect())\n\t\t\t{\n\t\t\t\treturn this.makeSimpleEffects();\n }\n\n this.$element.addClass('kubeanimated');\n\t\t\tthis.$element.addClass(this.queue[0]);\n this.removeHideClass();\n\n\t\t\tvar _callback = (this.queue.length > 1) ? null : this.completeCallback;\n\t\t\tthis.complete('AnimationEnd', $.proxy(this.makeComplete, this), _callback);\n },\n makeSimpleEffects: function()\n {\n\t\tif (this.effect === 'show') this.removeHideClass();\n else if (this.effect === 'hide') this.revertHideClasses();\n\n if (typeof this.completeCallback === 'function') this.completeCallback(this);\n },\n\t\tmakeComplete: function()\n\t\t{\n if (this.$element.hasClass(this.queue[0]))\n {\n\t\t\t\tthis.clean();\n\t\t\t\tthis.queue.shift();\n\n\t\t\t\tif (this.queue.length) this.animate();\n\t\t\t}\n\t\t},\n complete: function(type, make, callback)\n\t\t{\n\t\tvar event = type.toLowerCase() + ' webkit' + type + ' o' + type + ' MS' + type;\n\n\t\t\tthis.$element.one(event, $.proxy(function()\n\t\t\t{\n\t\t\t\tif (typeof make === 'function') make();\n\t\t\t\tif (this.isHideableEffect()) this.revertHideClasses();\n\t\t\t\tif (this.isSlideEffect()) this.removeElementHeight();\n\t\t\t\tif (typeof callback === 'function') callback(this);\n\n\t\t\t\tthis.$element.off(event);\n\n\t\t\t}, this));\n\t\t},\n\t\tclean: function()\n\t\t{\n\t\t\tthis.$element.removeClass('kubeanimated').removeClass(this.queue[0]);\n\t\t}\n };\n\n // Inheritance\n Kube.Animation.inherits(Kube);\n\n}(Kube));\n\n// Plugin\n(function($)\n{\n $.fn.animation = function(effect, callback)\n {\n var name = 'fn.animation';\n\n return this.each(function()\n {\n var $this = $(this), data = $this.data(name);\n\n $this.data(name, {});\n $this.data(name, (data = new Kube.Animation(this, effect, callback)));\n });\n };\n\n $.fn.animation.options = {};\n\n})(jQuery);\n/**\n * @library Kube Detect\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Detect = function() {};\n\n Kube.Detect.prototype = {\n\tisMobile: function()\n\t{\n\t\treturn /(iPhone|iPod|BlackBerry|Android)/.test(navigator.userAgent);\n\t},\n\tisDesktop: function()\n\t{\n\t\treturn !/(iPhone|iPod|iPad|BlackBerry|Android)/.test(navigator.userAgent);\n\t},\n\tisMobileScreen: function()\n\t{\n\t\treturn ($(window).width() <= 768);\n\t},\n\tisTabletScreen: function()\n\t{\n\t\treturn ($(window).width() >= 768 && $(window).width() <= 1024);\n\t},\n\tisDesktopScreen: function()\n\t{\n\t\treturn ($(window).width() > 1024);\n\t}\n };\n\n\n}(Kube));\n/**\n * @library Kube FormData\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.FormData = function(app)\n {\n this.opts = app.opts;\n };\n\n Kube.FormData.prototype = {\n set: function(data)\n {\n this.data = data;\n },\n get: function(formdata)\n\t{\n\t\tthis.formdata = formdata;\n\n if (this.opts.appendForms) this.appendForms();\n if (this.opts.appendFields) this.appendFields();\n\n return this.data;\n\t},\n\tappendFields: function()\n\t{\n\t\tvar $fields = $(this.opts.appendFields);\n\t\tif ($fields.length === 0)\n\t\t{\n\t\t\treturn;\n }\n\n\t\tvar self = this;\n var str = '';\n\n if (this.formdata)\n {\n $fields.each(function()\n\t\t\t{\n\t\t\t\tself.data.append($(this).attr('name'), $(this).val());\n\t\t\t});\n }\n else\n {\n\t\t\t$fields.each(function()\n\t\t\t{\n\t\t\t\tstr += '&' + $(this).attr('name') + '=' + $(this).val();\n\t\t\t});\n\n\t\t\tthis.data = (this.data === '') ? str.replace(/^&/, '') : this.data + str;\n }\n\t},\n\tappendForms: function()\n\t{\n\t\tvar $forms = $(this.opts.appendForms);\n\t\tif ($forms.length === 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n if (this.formdata)\n {\n var self = this;\n var formsData = $(this.opts.appendForms).serializeArray();\n $.each(formsData, function(i,s)\n {\n\t\t\tself.data.append(s.name, s.value);\n });\n }\n else\n {\n var str = $forms.serialize();\n\n this.data = (this.data === '') ? str : this.data + '&' + str;\n }\n\t}\n };\n\n\n}(Kube));\n/**\n * @library Kube Response\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Response = function(app) {};\n\n Kube.Response.prototype = {\n parse: function(str)\n\t{\n\t\tif (str === '') return false;\n\n\t\tvar obj = {};\n\n\t\ttry {\n\t\t\tobj = JSON.parse(str);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (obj[0] !== undefined)\n\t\t{\n\t\t\tfor (var item in obj)\n\t\t\t{\n\t\t\t\tthis.parseItem(obj[item]);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.parseItem(obj);\n\t\t}\n\n\t\treturn obj;\n\t},\n\tparseItem: function(item)\n\t{\n\t\tif (item.type === 'value')\n\t\t{\n\t\t\t$.each(item.data, $.proxy(function(key, val)\n\t\t\t{\n\t\t\t\tval = (val === null || val === false) ? 0 : val;\n\t\t\t\tval = (val === true) ? 1 : val;\n\n\t\t\t\t$(key).val(val);\n\n\t\t\t}, this));\n\t\t}\n\t\telse if (item.type === 'html')\n\t\t{\n\t\t\t$.each(item.data, $.proxy(function(key, val)\n\t\t\t{\n\t\t\t\tval = (val === null || val === false) ? '' : val;\n\n\t\t\t\t$(key).html(this.stripslashes(val));\n\n\t\t\t}, this));\n\t\t}\n\t\telse if (item.type === 'addClass')\n\t\t{\n\t\t\t$.each(item.data, function(key, val)\n\t\t\t{\n\t\t\t\t$(key).addClass(val);\n\t\t\t});\n }\n\t\telse if (item.type === 'removeClass')\n\t\t{\n\t\t\t$.each(item.data, function(key, val)\n\t\t\t{\n\t\t\t\t$(key).removeClass(val);\n\t\t\t});\n }\n\t\telse if (item.type === 'command')\n\t\t{\n\t\t\t$.each(item.data, function(key, val)\n\t\t\t{\n\t\t\t\t$(val)[key]();\n\t\t\t});\n\t\t}\n\t\telse if (item.type === 'animation')\n\t\t{\n\t\t\t$.each(item.data, function(key, data)\n\t\t\t{\n\t\t\t\tdata.opts = (typeof data.opts === 'undefined') ? {} : data.opts;\n\n\t\t\t\t$(key).animation(data.name, data.opts);\n\t\t\t});\n\t\t}\n\t\telse if (item.type === 'location')\n\t\t{\n\t\t\ttop.location.href = item.data;\n\t\t}\n\t\telse if (item.type === 'notify')\n\t\t{\n\t\t\t$.notify(item.data);\n\t\t}\n\n\t\treturn item;\n\t},\n stripslashes: function(str)\n\t{\n\t\treturn (str+'').replace(/\\0/g, '0').replace(/\\\\([\\\\'\"])/g, '$1');\n }\n };\n\n\n}(Kube));\n/**\n * @library Kube Utils\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Utils = function() {};\n\n Kube.Utils.prototype = {\n disableBodyScroll: function()\n\t{\n\t\tvar $body = $('html');\n\t\tvar windowWidth = window.innerWidth;\n\n\t\tif (!windowWidth)\n\t\t{\n\t\t\tvar documentElementRect = document.documentElement.getBoundingClientRect();\n\t\t\twindowWidth = documentElementRect.right - Math.abs(documentElementRect.left);\n\t\t}\n\n\t\tvar isOverflowing = document.body.clientWidth < windowWidth;\n\t\tvar scrollbarWidth = this.measureScrollbar();\n\n\t\t$body.css('overflow', 'hidden');\n\t\tif (isOverflowing) $body.css('padding-right', scrollbarWidth);\n\t},\n\tmeasureScrollbar: function()\n\t{\n\t\tvar $body = $('body');\n\t\tvar scrollDiv = document.createElement('div');\n\t\tscrollDiv.className = 'scrollbar-measure';\n\n\t\t$body.append(scrollDiv);\n\t\tvar scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n\t\t$body[0].removeChild(scrollDiv);\n\t\treturn scrollbarWidth;\n\t},\n\tenableBodyScroll: function()\n\t{\n\t\t$('html').css({ 'overflow': '', 'padding-right': '' });\n\t}\n };\n\n\n}(Kube));\n/**\n * @library Kube Message\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Message = function(element, options)\n {\n this.namespace = 'message';\n this.defaults = {\n closeSelector: '.close',\n closeEvent: 'click',\n animationOpen: 'fadeIn',\n animationClose: 'fadeOut',\n callbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Message.prototype = {\n start: function()\n {\n this.$close = this.$element.find(this.opts.closeSelector);\n this.$close.on(this.opts.closeEvent + '.' + this.namespace, $.proxy(this.close, this));\n this.$element.addClass('open');\n },\n stop: function()\n {\n this.$close.off('.' + this.namespace);\n this.$element.removeClass('open');\n },\n open: function(e)\n {\n if (e) e.preventDefault();\n\n if (!this.isOpened())\n {\n this.callback('open');\n this.$element.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n }\n },\n isOpened: function()\n {\n return this.$element.hasClass('open');\n },\n onOpened: function()\n {\n this.callback('opened');\n this.$element.addClass('open');\n },\n close: function(e)\n {\n if (e) e.preventDefault();\n\n if (this.isOpened())\n {\n this.callback('close');\n this.$element.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n }\n },\n onClosed: function()\n {\n this.callback('closed');\n this.$element.removeClass('open');\n }\n };\n\n // Inheritance\n Kube.Message.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Message');\n Kube.Plugin.autoload('Message');\n\n}(Kube));\n/**\n * @library Kube Sticky\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Sticky = function(element, options)\n {\n this.namespace = 'sticky';\n this.defaults = {\n classname: 'fixed',\n offset: 0, // pixels\n callbacks: ['fixed', 'unfixed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Sticky.prototype = {\n start: function()\n {\n\t this.offsetTop = this.getOffsetTop();\n\n\t this.load();\n\t $(window).scroll($.proxy(this.load, this));\n\t},\n\tgetOffsetTop: function()\n\t{\n\t\treturn this.$element.offset().top;\n\t},\n\tload: function()\n\t{\n\t\treturn (this.isFix()) ? this.fixed() : this.unfixed();\n\t},\n\tisFix: function()\n\t{\n return ($(window).scrollTop() > (this.offsetTop + this.opts.offset));\n\t},\n\tfixed: function()\n\t{\n\t\tthis.$element.addClass(this.opts.classname).css('top', this.opts.offset + 'px');\n\t\tthis.callback('fixed');\n\t},\n\tunfixed: function()\n\t{\n\t\tthis.$element.removeClass(this.opts.classname).css('top', '');\n\t\tthis.callback('unfixed');\n }\n };\n\n // Inheritance\n Kube.Sticky.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Sticky');\n Kube.Plugin.autoload('Sticky');\n\n}(Kube));\n/**\n * @library Kube Toggleme\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Toggleme = function(element, options)\n {\n this.namespace = 'toggleme';\n this.defaults = {\n toggleEvent: 'click',\n target: null,\n text: '',\n animationOpen: 'slideDown',\n animationClose: 'slideUp',\n callbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Toggleme.prototype = {\n start: function()\n {\n if (!this.hasTarget()) return;\n\n this.$element.on(this.opts.toggleEvent + '.' + this.namespace, $.proxy(this.toggle, this));\n },\n stop: function()\n {\n this.$element.off('.' + this.namespace);\n this.revertText();\n },\n toggle: function(e)\n {\n if (this.isOpened()) this.close(e);\n else this.open(e);\n },\n open: function(e)\n {\n if (e) e.preventDefault();\n\n if (!this.isOpened())\n {\n this.storeText();\n this.callback('open');\n this.$target.animation('slideDown', $.proxy(this.onOpened, this));\n\n // changes the text of $element with a less delay to smooth\n setTimeout($.proxy(this.replaceText, this), 100);\n\t\t}\n },\n close: function(e)\n {\n if (e) e.preventDefault();\n\n if (this.isOpened())\n {\n this.callback('close');\n this.$target.animation('slideUp', $.proxy(this.onClosed, this));\n\t\t}\n },\n\tisOpened: function()\n {\n return (this.$target.hasClass('open'));\n },\n onOpened: function()\n {\n this.$target.addClass('open');\n\t\tthis.callback('opened');\n },\n onClosed: function()\n {\n this.$target.removeClass('open');\n this.revertText();\n\t\tthis.callback('closed');\n },\n storeText: function()\n {\n this.$element.data('replacement-text', this.$element.html());\n },\n revertText: function()\n {\n var text = this.$element.data('replacement-text');\n if (text) this.$element.html(text);\n\n this.$element.removeData('replacement-text');\n },\n replaceText: function()\n {\n if (this.opts.text !== '')\n {\n this.$element.html(this.opts.text);\n }\n }\n };\n\n // Inheritance\n Kube.Toggleme.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Toggleme');\n Kube.Plugin.autoload('Toggleme');\n\n}(Kube));\n/**\n * @library Kube Offcanvas\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Offcanvas = function(element, options)\n {\n this.namespace = 'offcanvas';\n this.defaults = {\n\t\ttarget: null, // selector\n\t\tpush: true, // boolean\n\t\twidth: '250px', // string\n\t\tdirection: 'left', // string: left or right\n\t\ttoggleEvent: 'click',\n\t\tclickOutside: true, // boolean\n\t\tanimationOpen: 'slideInLeft',\n\t\tanimationClose: 'slideOutLeft',\n\t\tcallbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Services\n this.utils = new Kube.Utils();\n this.detect = new Kube.Detect();\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Offcanvas.prototype = {\n start: function()\n {\n if (!this.hasTarget()) return;\n\n this.buildTargetWidth();\n this.buildAnimationDirection();\n\n this.$close = this.getCloseLink();\n this.$element.on(this.opts.toggleEvent + '.' + this.namespace, $.proxy(this.toggle, this));\n this.$target.addClass('offcanvas');\n\t},\n\tstop: function()\n\t{\n\t\tthis.closeAll();\n\n this.$element.off('.' + this.namespace);\n this.$close.off('.' + this.namespace);\n $(document).off('.' + this.namespace);\n\t},\n\ttoggle: function(e)\n\t{\n\t\tif (this.isOpened()) this.close(e);\n\t\telse this.open(e);\n },\n\tbuildTargetWidth: function()\n\t{\n this.opts.width = ($(window).width() < parseInt(this.opts.width)) ? '100%' : this.opts.width;\n\t},\n\tbuildAnimationDirection: function()\n\t{\n if (this.opts.direction === 'right')\n {\n this.opts.animationOpen = 'slideInRight';\n\t\t\tthis.opts.animationClose = 'slideOutRight';\n }\n\t},\n\tgetCloseLink: function()\n\t{\n return this.$target.find('.close');\n\t},\n\topen: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n if (!this.isOpened())\n {\n this.closeAll();\n\t\t\tthis.callback('open');\n\n this.$target.addClass('offcanvas-' + this.opts.direction);\n this.$target.css('width', this.opts.width);\n\n this.pushBody();\n\n\t\t\tthis.$target.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n\t\t}\n\t},\n\tcloseAll: function()\n\t{\n\t\tvar $elms = $(document).find('.offcanvas');\n\t\tif ($elms.length !== 0)\n\t\t{\n $elms.each(function()\n {\n var $el = $(this);\n\n if ($el.hasClass('open'))\n {\n $el.css('width', '').animation('hide');\n $el.removeClass('open offcanvas-left offcanvas-right');\n }\n\n });\n\n $(document).off('.' + this.namespace);\n $('body').css('left', '');\n\t\t}\n\t},\n\tclose: function(e)\n\t{\n\t\tif (e)\n\t\t{\n\t\tvar $el = $(e.target);\n\t\tvar isTag = ($el[0].tagName === 'A' || $el[0].tagName === 'BUTTON');\n\t\tif (isTag && $el.closest('.offcanvas').length !== 0 && !$el.hasClass('close'))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\te.preventDefault();\n }\n\n if (this.isOpened())\n\t\t{\n\t\t\tthis.utils.enableBodyScroll();\n\t\t\tthis.callback('close');\n this.pullBody();\n\t\t\tthis.$target.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n\t\t}\n\t},\n\tisOpened: function()\n {\n return (this.$target.hasClass('open'));\n },\n\tonOpened: function()\n\t{\n\t\tif (this.opts.clickOutside) $(document).on('click.' + this.namespace, $.proxy(this.close, this));\n\t\tif (this.detect.isMobileScreen()) $('html').addClass('no-scroll');\n\n $(document).on('keyup.' + this.namespace, $.proxy(this.handleKeyboard, this));\n this.$close.on('click.' + this.namespace, $.proxy(this.close, this));\n\n\t\tthis.utils.disableBodyScroll();\n this.$target.addClass('open');\n this.callback('opened');\n\t},\n\tonClosed: function()\n\t{\n\t\tif (this.detect.isMobileScreen()) $('html').removeClass('no-scroll');\n\n this.$target.css('width', '').removeClass('offcanvas-' + this.opts.direction);\n\n this.$close.off('.' + this.namespace);\n\t\t$(document).off('.' + this.namespace);\n\n this.$target.removeClass('open');\n\t\tthis.callback('closed');\n\t},\n\thandleKeyboard: function(e)\n\t{\n\t\tif (e.which === 27) this.close();\n\t},\n\tpullBody: function()\n\t{\n if (this.opts.push)\n {\n $('body').animate({ left: 0 }, 350, function() { $(this).removeClass('offcanvas-push-body'); });\n }\n\t},\n\tpushBody: function()\n\t{\n if (this.opts.push)\n {\n var properties = (this.opts.direction === 'left') ? { 'left': this.opts.width } : { 'left': '-' + this.opts.width };\n $('body').addClass('offcanvas-push-body').animate(properties, 200);\n }\n\t}\n };\n\n // Inheritance\n Kube.Offcanvas.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Offcanvas');\n Kube.Plugin.autoload('Offcanvas');\n\n}(Kube));\n/**\n * @library Kube Collapse\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Collapse = function(element, options)\n {\n this.namespace = 'collapse';\n this.defaults = {\n target: null,\n toggle: true,\n active: false, // string (hash = tab id selector)\n toggleClass: 'collapse-toggle',\n boxClass: 'collapse-box',\n callbacks: ['open', 'opened', 'close', 'closed'],\n\n // private\n hashes: [],\n\t\tcurrentHash: false,\n\t\tcurrentItem: false\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Collapse.prototype = {\n start: function()\n {\n // items\n this.$items = this.getItems();\n this.$items.each($.proxy(this.loadItems, this));\n\n // boxes\n this.$boxes = this.getBoxes();\n\n // active\n this.setActiveItem();\n },\n getItems: function()\n {\n return this.$element.find('.' + this.opts.toggleClass);\n },\n getBoxes: function()\n {\n return this.$element.find('.' + this.opts.boxClass);\n },\n\tloadItems: function(i, el)\n\t{\n\t\tvar item = this.getItem(el);\n\n\t\t// set item identificator\n\t\titem.$el.attr('rel', item.hash);\n\n // active\n\t\tif (!$(item.hash).hasClass('hide'))\n\t\t{\n\t\t\tthis.opts.currentItem = item;\n\t\t\tthis.opts.active = item.hash;\n\n item.$el.addClass('active');\n }\n\n\t\t// event\n\t\titem.$el.on('click.collapse', $.proxy(this.toggle, this));\n\n\t},\n\tsetActiveItem: function()\n\t{\n\t\tif (this.opts.active !== false)\n\t\t{\n\t\t\tthis.opts.currentItem = this.getItemBy(this.opts.active);\n\t\t\tthis.opts.active = this.opts.currentItem.hash;\n\t\t}\n\n if (this.opts.currentItem !== false)\n {\n\t\t this.addActive(this.opts.currentItem);\n\t\t this.opts.currentItem.$box.removeClass('hide');\n\t\t}\n\t},\n\taddActive: function(item)\n\t{\n\t\titem.$box.removeClass('hide').addClass('open');\n\t\titem.$el.addClass('active');\n\n\t\tif (item.$caret !== false) item.$caret.removeClass('down').addClass('up');\n\t\tif (item.$parent !== false) item.$parent.addClass('active');\n\n\t\tthis.opts.currentItem = item;\n\t},\n\tremoveActive: function(item)\n\t{\n\t\titem.$box.removeClass('open');\n\t\titem.$el.removeClass('active');\n\n\t\tif (item.$caret !== false) item.$caret.addClass('down').removeClass('up');\n\t\tif (item.$parent !== false) item.$parent.removeClass('active');\n\n\t\tthis.opts.currentItem = false;\n\t},\n toggle: function(e)\n {\n if (e) e.preventDefault();\n\n var target = $(e.target).closest('.' + this.opts.toggleClass).get(0) || e.target;\n var item = this.getItem(target);\n\n if (this.isOpened(item.hash)) this.close(item.hash);\n else this.open(e)\n },\n openAll: function()\n {\n this.$items.addClass('active');\n this.$boxes.addClass('open').removeClass('hide');\n },\n open: function(e, push)\n {\n\t\tif (typeof e === 'undefined') return;\n\t\tif (typeof e === 'object') e.preventDefault();\n\n var target = $(e.target).closest('.' + this.opts.toggleClass).get(0) || e.target;\n\t\tvar item = (typeof e === 'object') ? this.getItem(target) : this.getItemBy(e);\n\n\t\tif (item.$box.hasClass('open'))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.opts.toggle) this.closeAll();\n\n\t\tthis.callback('open', item);\n\t\tthis.addActive(item);\n\n item.$box.animation('slideDown', $.proxy(this.onOpened, this));\n },\n onOpened: function()\n {\n\t\tthis.callback('opened', this.opts.currentItem);\n },\n closeAll: function()\n {\n this.$items.removeClass('active').closest('li').removeClass('active');\n this.$boxes.removeClass('open').addClass('hide');\n },\n close: function(num)\n {\n\t\tvar item = this.getItemBy(num);\n\n\t\tthis.callback('close', item);\n\n\t\tthis.opts.currentItem = item;\n\n\t\titem.$box.animation('slideUp', $.proxy(this.onClosed, this));\n },\n onClosed: function()\n {\n var item = this.opts.currentItem;\n\n\t\tthis.removeActive(item);\n\t\tthis.callback('closed', item);\n },\n isOpened: function(hash)\n {\n return $(hash).hasClass('open');\n },\n\tgetItem: function(element)\n\t{\n\t\tvar item = {};\n\n\t\titem.$el = $(element);\n\t\titem.hash = item.$el.attr('href');\n\t\titem.$box = $(item.hash);\n\n\t\tvar $parent = item.$el.parent();\n\t\titem.$parent = ($parent[0].tagName === 'LI') ? $parent : false;\n\n\t\tvar $caret = item.$el.find('.caret');\n\t\titem.$caret = ($caret.length !== 0) ? $caret : false;\n\n\t\treturn item;\n\t},\n\tgetItemBy: function(num)\n\t{\n\t\tvar element = (typeof num === 'number') ? this.$items.eq(num-1) : this.$element.find('[rel=\"' + num + '\"]');\n\n\t\treturn this.getItem(element);\n }\n };\n\n // Inheritance\n Kube.Collapse.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Collapse');\n Kube.Plugin.autoload('Collapse');\n\n}(Kube));\n/**\n * @library Kube Dropdown\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Dropdown = function(element, options)\n {\n this.namespace = 'dropdown';\n this.defaults = {\n\t\ttarget: null,\n\t\ttoggleEvent: 'click',\n\t\theight: false, // integer\n\t\twidth: false, // integer\n\t\tanimationOpen: 'slideDown',\n\t\tanimationClose: 'slideUp',\n\t\tcaretUp: false,\n callbacks: ['open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Services\n this.utils = new Kube.Utils();\n this.detect = new Kube.Detect();\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Dropdown.prototype = {\n start: function()\n {\n this.buildClose();\n this.buildCaret();\n\n if (this.detect.isMobile()) this.buildMobileAnimation();\n\n this.$target.addClass('hide');\n this.$element.on(this.opts.toggleEvent + '.' + this.namespace, $.proxy(this.toggle, this));\n\n\t},\n\tstop: function()\n\t{\n\t\tthis.$element.off('.' + this.namespace);\n this.$target.removeClass('open').addClass('hide');\n\t\tthis.disableEvents();\n\t},\n\tbuildMobileAnimation: function()\n\t{\n this.opts.animationOpen = 'fadeIn';\n this.opts.animationClose = 'fadeOut';\n\t},\n\tbuildClose: function()\n\t{\n this.$close = this.$target.find('.close');\n\t},\n\tbuildCaret: function()\n\t{\n this.$caret = this.getCaret();\n\t\tthis.buildCaretPosition();\n\t},\n\tbuildCaretPosition: function()\n\t{\n\t\tvar height = this.$element.offset().top + this.$element.innerHeight() + this.$target.innerHeight();\n\n\t\tif ($(document).height() > height)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n this.opts.caretUp = true;\n\t\tthis.$caret.addClass('up');\n\t},\n\tgetCaret: function()\n\t{\n\t\treturn this.$element.find('.caret');\n\t},\n\ttoggleCaretOpen: function()\n\t{\n\t\tif (this.opts.caretUp) this.$caret.removeClass('up').addClass('down');\n\t\telse this.$caret.removeClass('down').addClass('up');\n\t},\n\ttoggleCaretClose: function()\n\t{\n\t\tif (this.opts.caretUp) this.$caret.removeClass('down').addClass('up');\n\t\telse this.$caret.removeClass('up').addClass('down');\n\t},\n\ttoggle: function(e)\n\t{\n\t\tif (this.isOpened()) this.close(e);\n\t\telse this.open(e);\n\t},\n\topen: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n this.callback('open');\n\t\t$('.dropdown').removeClass('open').addClass('hide');\n\n\t\tif (this.opts.height) this.$target.css('min-height', this.opts.height + 'px');\n\t\tif (this.opts.width) this.$target.width(this.opts.width);\n\n\t\tthis.setPosition();\n\t\tthis.toggleCaretOpen();\n\n\t\tthis.$target.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n\t},\n\tclose: function(e)\n\t{\n if (!this.isOpened())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (e)\n\t\t{\n\t\t\tif (this.shouldNotBeClosed(e.target))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tthis.utils.enableBodyScroll();\n\t\tthis.callback('close');\n\t\tthis.toggleCaretClose();\n\n\t\tthis.$target.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n\t},\n\tonClosed: function()\n\t{\n this.$target.removeClass('open');\n\t\tthis.disableEvents();\n\t\tthis.callback('closed');\n\t},\n\tonOpened: function()\n\t{\n\t\tthis.$target.addClass('open');\n\t\tthis.enableEvents();\n\t\tthis.callback('opened');\n\t},\n\tisOpened: function()\n\t{\n\t\treturn (this.$target.hasClass('open'));\n\t},\n\tenableEvents: function()\n\t{\n\t\tif (this.detect.isDesktop())\n\t\t{\n\t\t\tthis.$target.on('mouseover.' + this.namespace, $.proxy(this.utils.disableBodyScroll, this.utils))\n\t\t\t .on('mouseout.' + this.namespace, $.proxy(this.utils.enableBodyScroll, this.utils));\n\t\t}\n\n\t\t$(document).on('scroll.' + this.namespace, $.proxy(this.setPosition, this));\n\t\t$(window).on('resize.' + this.namespace, $.proxy(this.setPosition, this));\n\t\t$(document).on('click.' + this.namespace + ' touchstart.' + this.namespace, $.proxy(this.close, this));\n\t\t$(document).on('keydown.' + this.namespace, $.proxy(this.handleKeyboard, this));\n\t\tthis.$target.find('[data-action=\"dropdown-close\"]').on('click.' + this.namespace, $.proxy(this.close, this));\n\t},\n\tdisableEvents: function()\n\t{\n\t\tthis.$target.off('.' + this.namespace);\n\t\t$(document).off('.' + this.namespace);\n\t\t$(window).off('.' + this.namespace);\n\t},\n\thandleKeyboard: function(e)\n\t{\n\t\tif (e.which === 27) this.close(e);\n\t},\n\tshouldNotBeClosed: function(el)\n\t{\n if ($(el).attr('data-action') === 'dropdown-close' || el === this.$close[0])\n {\n return false;\n\t\t}\n\t\telse if ($(el).closest('.dropdown').length === 0)\n\t\t{\n\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t},\n isNavigationFixed: function()\n\t{\n\t\treturn (this.$element.closest('.fixed').length !== 0);\n\t},\n\tgetPlacement: function(height)\n\t{\n\t\treturn ($(document).height() < height) ? 'top' : 'bottom';\n\t},\n\tgetOffset: function(position)\n\t{\n\t\treturn (this.isNavigationFixed()) ? this.$element.position() : this.$element.offset();\n\t},\n\tgetPosition: function()\n\t{\n\t\treturn (this.isNavigationFixed()) ? 'fixed' : 'absolute';\n\t},\n\tsetPosition: function()\n\t{\n\t\tif (this.detect.isMobile())\n\t\t{\n this.$target.addClass('dropdown-mobile');\n return;\n\t\t}\n\n\t\tvar position = this.getPosition();\n\t\t\tvar coords = this.getOffset(position);\n\t\t\tvar height = this.$target.innerHeight();\n\t\t\tvar width = this.$target.innerWidth();\n\t\t\tvar placement = this.getPlacement(coords.top + height + this.$element.innerHeight());\n\t\t\tvar leftFix = ($(window).width() < (coords.left + width)) ? (width - this.$element.innerWidth()) : 0;\n\t\t\tvar top, left = coords.left - leftFix;\n\n\t\t\tif (placement === 'bottom')\n\t\t\t{\n\t\t\tif (!this.isOpened()) this.$caret.removeClass('up').addClass('down');\n\n\t\t\t\tthis.opts.caretUp = false;\n\t\t\t\ttop = coords.top + this.$element.outerHeight() + 1;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.opts.animationOpen = 'show';\n\t\t\t\tthis.opts.animationClose = 'hide';\n\n if (!this.isOpened()) this.$caret.addClass('up').removeClass('down');\n\n\t\t\t\tthis.opts.caretUp = true;\n\t\t\t\ttop = coords.top - height - 1;\n\t\t\t}\n\n\t\t\tthis.$target.css({ position: position, top: top + 'px', left: left + 'px' });\n\t}\n };\n\n // Inheritance\n Kube.Dropdown.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Dropdown');\n Kube.Plugin.autoload('Dropdown');\n\n}(Kube));\n/**\n * @library Kube Tabs\n * @author Imperavi LLC\n * @license MIT\n */\n(function(Kube)\n{\n Kube.Tabs = function(element, options)\n {\n this.namespace = 'tabs';\n this.defaults = {\n\t\tequals: false,\n\t\tactive: false, // string (hash = tab id selector)\n\t\tlive: false, // class selector\n\t\thash: true, //boolean\n\t\tcallbacks: ['init', 'next', 'prev', 'open', 'opened', 'close', 'closed']\n };\n\n // Parent Constructor\n Kube.apply(this, arguments);\n\n // Initialization\n this.start();\n };\n\n // Functionality\n Kube.Tabs.prototype = {\n start: function()\n {\n if (this.opts.live !== false) this.buildLiveTabs();\n\n this.tabsCollection = [];\n this.hashesCollection = [];\n this.currentHash = [];\n this.currentItem = false;\n\n // items\n this.$items = this.getItems();\n this.$items.each($.proxy(this.loadItems, this));\n\n // tabs\n\t\tthis.$tabs = this.getTabs();\n\n // location hash\n\t\tthis.currentHash = this.getLocationHash();\n\n\t\t// close all\n\t\tthis.closeAll();\n\n // active & height\n\t\tthis.setActiveItem();\n\t\tthis.setItemHeight();\n\n // callback\n\t\tthis.callback('init');\n\n\t},\n\tgetTabs: function()\n\t{\n\t\treturn $(this.tabsCollection).map(function()\n\t\t{\n\t\treturn this.toArray();\n });\n\t},\n\tgetItems: function()\n\t{\n\t\treturn this.$element.find('a');\n\t},\n\tloadItems: function(i, el)\n\t{\n\t\tvar item = this.getItem(el);\n\n\t\t// set item identificator\n\t\titem.$el.attr('rel', item.hash);\n\n\t\t// collect item\n this.collectItem(item);\n\n // active\n\t\tif (item.$parent.hasClass('active'))\n\t\t{\n\t\t\tthis.currentItem = item;\n\t\t\tthis.opts.active = item.hash;\n\t\t}\n\n\t\t// event\n\t\titem.$el.on('click.tabs', $.proxy(this.open, this));\n\n\t},\n\tcollectItem: function(item)\n\t{\n\t\tthis.tabsCollection.push(item.$tab);\n\t\tthis.hashesCollection.push(item.hash);\n\t},\n\tbuildLiveTabs: function()\n\t{\n\t\tvar $layers = $(this.opts.live);\n\n\t\tif ($layers.length === 0)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.$liveTabsList = $('').addClass('hide');\n\t\t\t$('body').prepend(this.$overlay);\n\t\t}\n\n\t\tthis.$overlay.addClass('overlay');\n\t},\n\tbuildHeader: function()\n\t{\n\t\tif (this.opts.header) this.$header.html(this.opts.header);\n\t},\n\tload: function(e)\n\t{\n\t\tthis.buildModal();\n\t\tthis.buildOverlay();\n\t\tthis.buildHeader();\n\n if (this.opts.url) this.buildContent();\n else this.open(e);\n\t},\n\topen: function(e)\n\t{\n\t\tif (e) e.preventDefault();\n\n if (this.isOpened())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.detect.isMobile()) this.opts.width = '96%';\n\t\tif (this.opts.overlay) this.$overlay.removeClass('hide');\n\n\t\tthis.$target.removeClass('hide');\n\t\tthis.$modal.removeClass('hide');\n\n this.enableEvents();\n\t\tthis.findActions();\n\n\t\tthis.resize();\n\t\t$(window).on('resize.' + this.namespace, $.proxy(this.resize, this));\n\n\t\tif (this.detect.isDesktop()) this.utils.disableBodyScroll();\n\n\t\t// enter\n\t\tthis.$modal.find('input[type=text],input[type=url],input[type=email]').on('keydown.' + this.namespace, $.proxy(this.handleEnter, this));\n\n\t\tthis.callback('open');\n\t\tthis.$modal.animation(this.opts.animationOpen, $.proxy(this.onOpened, this));\n },\n close: function(e)\n {\n if (!this.$modal || !this.isOpened())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (e)\n\t\t{\n\t\t\tif (this.shouldNotBeClosed(e.target))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tthis.callback('close');\n\t\tthis.disableEvents();\n\n\t\tthis.$modal.animation(this.opts.animationClose, $.proxy(this.onClosed, this));\n\n if (this.opts.overlay) this.$overlay.animation(this.opts.animationClose);\n },\n\tonOpened: function()\n\t{\n\t\tthis.$modal.addClass('open');\n this.callback('opened');\n\n $.modalcurrent = this;\n\t},\n\tonClosed: function()\n\t{\n\t\tthis.callback('closed');\n\n this.$target.addClass('hide');\n this.$modal.removeClass('open');\n\n\t\tif (this.detect.isDesktop()) this.utils.enableBodyScroll();\n\n\t\tthis.$body.css('height', '');\n $.modalcurrent = null;\n\t},\n\tisOpened: function()\n\t{\n\t\treturn (this.$modal.hasClass('open'));\n\t},\n\tgetData: function()\n\t{\n var formdata = new Kube.FormData(this);\n formdata.set('');\n\n return formdata.get();\n\t},\n\tbuildContent: function()\n\t{\n\t\t$.ajax({\n\t\t\turl: this.opts.url + '?' + new Date().getTime(),\n\t\t\tcache: false,\n\t\t\ttype: 'post',\n\t\t\tdata: this.getData(),\n\t\t\tsuccess: $.proxy(function(data)\n\t\t\t{\n\t\t\t\tthis.$body.html(data);\n\t\t\t\tthis.open();\n\n\t\t\t}, this)\n\t\t});\n\t},\n\tbuildWidth: function()\n\t{\n\t\tvar width = this.opts.width;\n\t\tvar top = '2%';\n\t\tvar bottom = '2%';\n\t\tvar percent = width.match(/%$/);\n\n\t\tif ((parseInt(this.opts.width) > $(window).width()) && !percent)\n\t\t{\n width = '96%';\n\t\t}\n\t\telse if (!percent)\n\t\t{\n top = '16px';\n bottom = '16px';\n\t\t}\n\n\t\tthis.$modal.css({ 'width': width, 'margin-top': top, 'margin-bottom': bottom });\n\n\t},\n\tbuildPosition: function()\n\t{\n\t\tif (this.opts.position !== 'center')\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tvar windowHeight = $(window).height();\n\t\tvar height = this.$modal.outerHeight();\n\t\tvar top = (windowHeight/2 - height/2) + 'px';\n\n\t\tif (this.detect.isMobile()) top = '2%';\n\t\telse if (height > windowHeight) top = '16px';\n\n\t\tthis.$modal.css('margin-top', top);\n\t},\n\tbuildHeight: function()\n\t{\n\t\tvar windowHeight = $(window).height();\n\n\t\tif (this.opts.maxHeight)\n\t\t{\n\t\t\tvar padding = parseInt(this.$body.css('padding-top')) + parseInt(this.$body.css('padding-bottom'));\n\t\t\tvar margin = parseInt(this.$modal.css('margin-top')) + parseInt(this.$modal.css('margin-bottom'));\n\t\t\tvar height = windowHeight - this.$header.innerHeight() - padding - margin;\n\n\t\t\tthis.$body.height(height);\n\t\t}\n\t\telse if (this.opts.height !== false)\n\t\t{\n\t\t\tthis.$body.css('height', this.opts.height);\n\t\t}\n\n\t\tvar modalHeight = this.$modal.outerHeight();\n\t\tif (modalHeight > windowHeight)\n\t\t{\n\t\t\tthis.opts.animationOpen = 'show';\n\t\t\tthis.opts.animationClose = 'hide';\n\t\t}\n\t},\n\tresize: function()\n\t{\n\t\tthis.buildWidth();\n\t\tthis.buildPosition();\n\t\tthis.buildHeight();\n\t},\n\tenableEvents: function()\n\t{\n\t\tthis.$close.on('click.' + this.namespace, $.proxy(this.close, this));\n\t\t$(document).on('keyup.' + this.namespace, $.proxy(this.handleEscape, this));\n\t\tthis.$target.on('click.' + this.namespace, $.proxy(this.close, this));\n\t},\n\tdisableEvents: function()\n\t{\n\t\tthis.$close.off('.' + this.namespace);\n\t\t$(document).off('.' + this.namespace);\n\t\tthis.$target.off('.' + this.namespace);\n\t\t$(window).off('.' + this.namespace);\n\t},\n\tfindActions: function()\n\t{\n\t\tthis.$body.find('[data-action=\"modal-close\"]').on('mousedown.' + this.namespace, $.proxy(this.close, this));\n\t},\n\tsetHeader: function(header)\n\t{\n\t\tthis.$header.html(header);\n\t},\n\tsetContent: function(content)\n\t{\n\t\tthis.$body.html(content);\n\t},\n\tsetWidth: function(width)\n\t{\n\t\tthis.opts.width = width;\n\t\tthis.resize();\n\t},\n\tgetModal: function()\n\t{\n return this.$modal;\n\t},\n\tgetBody: function()\n\t{\n return this.$body;\n\t},\n\tgetHeader: function()\n\t{\n return this.$header;\n\t},\n\thandleEnter: function(e)\n\t{\n\t\tif (e.which === 13)\n\t\t{\n\t\te.preventDefault();\n\t\tthis.close(false);\n }\n\t},\n\thandleEscape: function(e)\n\t{\n\t\treturn (e.which === 27) ? this.close(false) : true;\n\t},\n\tshouldNotBeClosed: function(el)\n\t{\n if ($(el).attr('data-action') === 'modal-close' || el === this.$close[0])\n {\n return false;\n\t\t}\n\t\telse if ($(el).closest('.modal').length === 0)\n\t\t{\n\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n };\n\n // Inheritance\n Kube.Modal.inherits(Kube);\n\n // Plugin\n Kube.Plugin.create('Modal');\n Kube.Plugin.autoload('Modal');\n\n}(Kube));","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define(['d3'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('d3'));\n } else {\n root.MG = factory(root.d3);\n }\n}(this, function(d3) {\n(typeof window === 'undefined' ? global : window).MG = {version: '2.11'};\n\n//a set of helper functions, some that we've written, others that we've borrowed\n\nMG.convert = {};\n\nMG.convert.date = function(data, accessor, time_format) {\n time_format = (typeof time_format === \"undefined\") ? '%Y-%m-%d' : time_format;\n var parse_time = d3.timeParse(time_format);\n data = data.map(function(d) {\n d[accessor] = parse_time(d[accessor].trim());\n return d;\n });\n\n return data;\n}\n\nMG.convert.number = function(data, accessor) {\n data = data.map(function(d) {\n d[accessor] = Number(d[accessor]);\n return d;\n });\n\n return data;\n}\n\nMG.time_format = function(utc, specifier) {\n return utc ? d3.utcFormat(specifier) : d3.timeFormat(specifier);\n}\n\nfunction mg_jquery_exists() {\n if (typeof jQuery !== 'undefined' || typeof $ !== 'undefined') {\n return true;\n } else {\n return false;\n }\n}\n\nfunction mg_get_rollover_time_format(args) {\n var fmt;\n switch (args.processed.x_time_frame) {\n case 'millis':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %H:%M:%S.%L');\n break;\n case 'seconds':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %H:%M:%S');\n break;\n case 'less-than-a-day':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %I:%M%p');\n break;\n case 'four-days':\n fmt = MG.time_format(args.utc_time, '%b %e, %Y %I:%M%p');\n break;\n default:\n fmt = MG.time_format(args.utc_time, '%b %e, %Y');\n }\n return fmt;\n}\n\nfunction mg_data_in_plot_bounds(datum, args) {\n return datum[args.x_accessor] >= args.processed.min_x &&\n datum[args.x_accessor] <= args.processed.max_x &&\n datum[args.y_accessor] >= args.processed.min_y &&\n datum[args.y_accessor] <= args.processed.max_y;\n}\n\nfunction is_array(thing) {\n return Object.prototype.toString.call(thing) === '[object Array]';\n}\n\nfunction is_function(thing) {\n return Object.prototype.toString.call(thing) === '[object Function]';\n}\n\nfunction is_empty_array(thing) {\n return is_array(thing) && thing.length === 0;\n}\n\nfunction is_object(thing) {\n return Object.prototype.toString.call(thing) === '[object Object]';\n}\n\nfunction is_array_of_arrays(data) {\n var all_elements = data.map(function(d) {\n return is_array(d) === true && d.length > 0;\n });\n\n return d3.sum(all_elements) === data.length;\n}\n\nfunction is_array_of_objects(data) {\n // is every element of data an object?\n var all_elements = data.map(function(d) {\n return is_object(d) === true;\n });\n\n return d3.sum(all_elements) === data.length;\n}\n\nfunction is_array_of_objects_or_empty(data) {\n return is_empty_array(data) || is_array_of_objects(data);\n}\n\nfunction pluck(arr, accessor) {\n return arr.map(function(d) {\n return d[accessor] });\n}\n\nfunction count_array_elements(arr) {\n return arr.reduce(function(a, b) { a[b] = a[b] + 1 || 1;\n return a; }, {});\n}\n\nfunction mg_get_bottom(args) {\n return args.height - args.bottom;\n}\n\nfunction mg_get_plot_bottom(args) {\n // returns the pixel location of the bottom side of the plot area.\n return mg_get_bottom(args) - args.buffer;\n}\n\nfunction mg_get_top(args) {\n return args.top;\n}\n\nfunction mg_get_plot_top(args) {\n // returns the pixel location of the top side of the plot area.\n return mg_get_top(args) + args.buffer;\n}\n\nfunction mg_get_left(args) {\n return args.left;\n}\n\nfunction mg_get_plot_left(args) {\n // returns the pixel location of the left side of the plot area.\n return mg_get_left(args) + args.buffer;\n}\n\nfunction mg_get_right(args) {\n return args.width - args.right;\n}\n\nfunction mg_get_plot_right(args) {\n // returns the pixel location of the right side of the plot area.\n return mg_get_right(args) - args.buffer;\n}\n\n//////// adding elements, removing elements /////////////\n\nfunction mg_exit_and_remove(elem) {\n elem.exit().remove();\n}\n\nfunction mg_selectAll_and_remove(svg, cl) {\n svg.selectAll(cl).remove();\n}\n\nfunction mg_add_g(svg, cl) {\n return svg.append('g').classed(cl, true);\n}\n\nfunction mg_remove_element(svg, elem) {\n svg.select(elem).remove();\n}\n\n//////// axis helper functions ////////////\n\nfunction mg_make_rug(args, rug_class) {\n var svg = mg_get_svg_child_of(args.target);\n var all_data = mg_flatten_array(args.data);\n var rug = svg.selectAll('line.' + rug_class).data(all_data);\n\n rug.enter()\n .append('line')\n .attr('class', rug_class)\n .attr('opacity', 0.3);\n\n //remove rug elements that are no longer in use\n mg_exit_and_remove(rug);\n\n //set coordinates of new rug elements\n mg_exit_and_remove(rug);\n return rug;\n}\n\nfunction mg_add_color_accessor_to_rug(rug, args, rug_mono_class) {\n if (args.color_accessor) {\n rug.attr('stroke', args.scalefns.colorf);\n rug.classed(rug_mono_class, false);\n } else {\n rug.attr('stroke', null);\n rug.classed(rug_mono_class, true);\n }\n}\n\nfunction mg_rotate_labels(labels, rotation_degree) {\n if (rotation_degree) {\n labels.attr({\n dy: 0,\n transform: function() {\n var elem = d3.select(this);\n return 'rotate(' + rotation_degree + ' ' + elem.attr('x') + ',' + elem.attr('y') + ')';\n }\n });\n }\n}\n\n//////////////////////////////////////////////////\n\nfunction mg_elements_are_overlapping(labels) {\n labels = labels.node();\n if (!labels) {\n return false;\n }\n\n for (var i = 0; i < labels.length; i++) {\n if (mg_is_horizontally_overlapping(labels[i], labels)) return true;\n }\n\n return false;\n}\n\nfunction mg_prevent_horizontal_overlap(labels, args) {\n if (!labels || labels.length == 1) {\n return;\n }\n\n //see if each of our labels overlaps any of the other labels\n for (var i = 0; i < labels.length; i++) {\n //if so, nudge it up a bit, if the label it intersects hasn't already been nudged\n if (mg_is_horizontally_overlapping(labels[i], labels)) {\n var node = d3.select(labels[i]);\n var newY = +node.attr('y');\n if (newY + 8 >= args.top) {\n newY = args.top - 16;\n }\n node.attr('y', newY);\n }\n }\n}\n\nfunction mg_prevent_vertical_overlap(labels, args) {\n if (!labels || labels.length == 1) {\n return;\n }\n\n labels.sort(function(b, a) {\n return d3.select(a).attr('y') - d3.select(b).attr('y');\n });\n\n labels.reverse();\n\n var overlap_amount, label_i, label_j;\n\n //see if each of our labels overlaps any of the other labels\n for (var i = 0; i < labels.length; i++) {\n //if so, nudge it up a bit, if the label it intersects hasn't already been nudged\n label_i = d3.select(labels[i]).text();\n\n for (var j = 0; j < labels.length; j++) {\n label_j = d3.select(labels[j]).text();\n overlap_amount = mg_is_vertically_overlapping(labels[i], labels[j]);\n\n if (overlap_amount !== false && label_i !== label_j) {\n var node = d3.select(labels[i]);\n var newY = +node.attr('y');\n newY = newY + overlap_amount;\n node.attr('y', newY);\n }\n }\n }\n}\n\nfunction mg_is_vertically_overlapping(element, sibling) {\n var element_bbox = element.getBoundingClientRect();\n var sibling_bbox = sibling.getBoundingClientRect();\n\n if (element_bbox.top <= sibling_bbox.bottom && element_bbox.top >= sibling_bbox.top) {\n return sibling_bbox.bottom - element_bbox.top;\n }\n\n return false;\n}\n\nfunction mg_is_horiz_overlap(element, sibling) {\n var element_bbox = element.getBoundingClientRect();\n var sibling_bbox = sibling.getBoundingClientRect();\n\n if (element_bbox.right >= sibling_bbox.left || element_bbox.top >= sibling_bbox.top) {\n return sibling_bbox.bottom - element_bbox.top;\n }\n return false;\n}\n\nfunction mg_is_horizontally_overlapping(element, labels) {\n var element_bbox = element.getBoundingClientRect();\n\n for (var i = 0; i < labels.length; i++) {\n if (labels[i] == element) {\n continue;\n }\n\n //check to see if this label overlaps with any of the other labels\n var sibling_bbox = labels[i].getBoundingClientRect();\n if (element_bbox.top === sibling_bbox.top &&\n !(sibling_bbox.left > element_bbox.right || sibling_bbox.right < element_bbox.left)\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction mg_infer_type(args, ns) {\n // must return categorical or numerical.\n var testPoint = mg_flatten_array(args.data);\n\n testPoint = testPoint[0][args[ns + '_accessor']];\n return typeof testPoint === 'string' ? 'categorical' : 'numerical';\n }\n\nfunction mg_get_svg_child_of(selector_or_node) {\n return d3.select(selector_or_node).select('svg');\n}\n\nfunction mg_flatten_array(arr) {\n var flat_data = [];\n return flat_data.concat.apply(flat_data, arr);\n}\n\nfunction mg_next_id() {\n if (typeof MG._next_elem_id === 'undefined') {\n MG._next_elem_id = 0;\n }\n\n return 'mg-' + (MG._next_elem_id++);\n}\n\nfunction mg_target_ref(target) {\n if (typeof target === 'string') {\n return mg_normalize(target);\n\n } else if (target instanceof window.HTMLElement) {\n var target_ref = target.getAttribute('data-mg-uid');\n if (!target_ref) {\n target_ref = mg_next_id();\n target.setAttribute('data-mg-uid', target_ref);\n }\n\n return target_ref;\n\n } else {\n console.warn('The specified target should be a string or an HTMLElement.', target);\n return mg_normalize(target);\n }\n}\n\nfunction mg_normalize(string) {\n return string\n .replace(/[^a-zA-Z0-9 _-]+/g, '')\n .replace(/ +?/g, '');\n}\n\nfunction get_pixel_dimension(target, dimension) {\n return Number(d3.select(target).style(dimension).replace(/px/g, ''));\n}\n\nfunction get_width(target) {\n return get_pixel_dimension(target, 'width');\n}\n\nfunction get_height(target) {\n return get_pixel_dimension(target, 'height');\n}\n\nfunction isNumeric(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\n\nvar each = function(obj, iterator, context) {\n // yanked out of underscore\n var breaker = {};\n if (obj === null) return obj;\n if (Array.prototype.forEach && obj.forEach === Array.prototype.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length === +obj.length) {\n for (var i = 0, length = obj.length; i < length; i++) {\n if (iterator.call(context, obj[i], i, obj) === breaker) return;\n }\n } else {\n for (var k in obj) {\n if (iterator.call(context, obj[k], k, obj) === breaker) return;\n }\n }\n\n return obj;\n};\n\nfunction merge_with_defaults(obj) {\n // taken from underscore\n each(Array.prototype.slice.call(arguments, 1), function(source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === void 0) obj[prop] = source[prop];\n }\n }\n });\n\n return obj;\n}\n\nMG.merge_with_defaults = merge_with_defaults;\n\nfunction number_of_values(data, accessor, value) {\n var values = data.filter(function(d) {\n return d[accessor] === value;\n });\n\n return values.length;\n}\n\nfunction has_values_below(data, accessor, value) {\n var values = data.filter(function(d) {\n return d[accessor] <= value;\n });\n\n return values.length > 0;\n}\n\nfunction has_too_many_zeros(data, accessor, zero_count) {\n return number_of_values(data, accessor, 0) >= zero_count;\n}\n\nfunction mg_is_date(obj) {\n return Object.prototype.toString.call(obj) === '[object Date]';\n}\n\nfunction mg_is_object(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nfunction mg_is_array(obj) {\n if (Array.isArray) {\n return Array.isArray(obj);\n }\n\n return Object.prototype.toString.call(obj) === '[object Array]';\n}\n\nfunction mg_is_function(obj) {\n return Object.prototype.toString.call(obj) === '[object Function]';\n}\n\n// deep copy\n// http://stackoverflow.com/questions/728360/most-elegant-way-to-clone-a-javascript-object\nMG.clone = function(obj) {\n var copy;\n\n // Handle the 3 simple types, and null or undefined\n if (null === obj || \"object\" !== typeof obj) return obj;\n\n // Handle Date\n if (mg_is_date(obj)) {\n copy = new Date();\n copy.setTime(obj.getTime());\n return copy;\n }\n\n // Handle Array\n if (mg_is_array(obj)) {\n copy = [];\n for (var i = 0, len = obj.length; i < len; i++) {\n copy[i] = MG.clone(obj[i]);\n }\n return copy;\n }\n\n // Handle Object\n if (mg_is_object(obj)) {\n copy = {};\n for (var attr in obj) {\n if (obj.hasOwnProperty(attr)) copy[attr] = MG.clone(obj[attr]);\n }\n return copy;\n }\n\n throw new Error(\"Unable to copy obj! Its type isn't supported.\");\n};\n\n// give us the difference of two int arrays\n// http://radu.cotescu.com/javascript-diff-function/\nfunction arr_diff(a, b) {\n var seen = [],\n diff = [],\n i;\n for (i = 0; i < b.length; i++)\n seen[b[i]] = true;\n for (i = 0; i < a.length; i++)\n if (!seen[a[i]])\n diff.push(a[i]);\n return diff;\n}\n\nMG.arr_diff = arr_diff;\n\n/**\n Print warning message to the console when a feature has been scheduled for removal\n\n @author Dan de Havilland (github.com/dandehavilland)\n @date 2014-12\n*/\nfunction warn_deprecation(message, untilVersion) {\n console.warn('Deprecation: ' + message + (untilVersion ? '. This feature will be removed in ' + untilVersion + '.' : ' the near future.'));\n console.trace();\n}\n\nMG.warn_deprecation = warn_deprecation;\n\n/**\n Truncate a string to fit within an SVG text node\n CSS text-overlow doesn't apply to SVG <= 1.2\n\n @author Dan de Havilland (github.com/dandehavilland)\n @date 2014-12-02\n*/\nfunction truncate_text(textObj, textString, width) {\n var bbox,\n position = 0;\n\n textObj.textContent = textString;\n bbox = textObj.getBBox();\n\n while (bbox.width > width) {\n textObj.textContent = textString.slice(0, --position) + '...';\n bbox = textObj.getBBox();\n\n if (textObj.textContent === '...') {\n break;\n }\n }\n}\n\nMG.truncate_text = truncate_text;\n\n/**\n Wrap the contents of a text node to a specific width\n\n Adapted from bl.ocks.org/mbostock/7555321\n\n @author Mike Bostock\n @author Dan de Havilland\n @date 2015-01-14\n*/\nfunction wrap_text(text, width, token, tspanAttrs) {\n text.each(function() {\n var text = d3.select(this),\n words = text.text().split(token || /\\s+/).reverse(),\n word,\n line = [],\n lineNumber = 0,\n lineHeight = 1.1, // ems\n y = text.attr(\"y\"),\n dy = 0,\n tspan = text.text(null)\n .append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"y\", dy + \"em\")\n .attr(tspanAttrs || {});\n\n while (!!(word = words.pop())) {\n line.push(word);\n tspan.text(line.join(\" \"));\n if (width === null || tspan.node().getComputedTextLength() > width) {\n line.pop();\n tspan.text(line.join(\" \"));\n line = [word];\n tspan = text\n .append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"y\", ++lineNumber * lineHeight + dy + \"em\")\n .attr(tspanAttrs || {})\n .text(word);\n }\n }\n });\n}\n\nMG.wrap_text = wrap_text;\n\nfunction register(chartType, descriptor, defaults) {\n MG.charts[chartType] = {\n descriptor: descriptor,\n defaults: defaults || {}\n };\n}\n\nMG.register = register;\n\n/**\n Record of all registered hooks.\n For internal use only.\n*/\nMG._hooks = {};\n\n/**\n Add a hook callthrough to the stack.\n\n Hooks are executed in the order that they were registered.\n*/\nMG.add_hook = function(name, func, context) {\n var hooks;\n\n if (!MG._hooks[name]) {\n MG._hooks[name] = [];\n }\n\n hooks = MG._hooks[name];\n\n var already_registered =\n hooks.filter(function(hook) {\n return hook.func === func;\n })\n .length > 0;\n\n if (already_registered) {\n throw 'That function is already registered.';\n }\n\n hooks.push({\n func: func,\n context: context\n });\n};\n\n/**\n Execute registered hooks.\n\n Optional arguments\n*/\nMG.call_hook = function(name) {\n var hooks = MG._hooks[name],\n result = [].slice.apply(arguments, [1]),\n processed;\n\n if (hooks) {\n hooks.forEach(function(hook) {\n if (hook.func) {\n var params = processed || result;\n\n if (params && params.constructor !== Array) {\n params = [params];\n }\n\n params = [].concat.apply([], params);\n processed = hook.func.apply(hook.context, params);\n }\n });\n }\n\n return processed || result;\n};\n\nMG.globals = {};\nMG.deprecations = {\n rollover_callback: { replacement: 'mouseover', version: '2.0' },\n rollout_callback: { replacement: 'mouseout', version: '2.0' },\n x_rollover_format: { replacement: 'x_mouseover', version: '2.10' },\n y_rollover_format: { replacement: 'y_mouseover', version: '2.10' },\n show_years: { replacement: 'show_secondary_x_label', version: '2.1' },\n xax_start_at_min: { replacement: 'axes_not_compact', version: '2.7' },\n interpolate_tension: { replacement: 'interpolate', version: '2.10' }\n};\nMG.globals.link = false;\nMG.globals.version = \"1.1\";\n\nMG.charts = {};\n\nMG.data_graphic = function(args) {\n 'use strict';\n var defaults = {\n missing_is_zero: false, // if true, missing values will be treated as zeros\n missing_is_hidden: false, // if true, missing values will appear as broken segments\n missing_is_hidden_accessor: null, // the accessor that determines the boolean value for missing data points\n legend: '' , // an array identifying the labels for a chart's lines\n legend_target: '', // if set, the specified element is populated with a legend\n error: '', // if set, a graph will show an error icon and log the error to the console\n animate_on_load: false, // animate lines on load\n top: 65, // the size of the top margin\n title_y_position: 10, // how many pixels from the top edge (0) should we show the title at\n center_title_full_width: false, // center the title over the full graph (i.e. ignore left and right margins)\n bottom: 45, // the size of the bottom margin\n right: 10, // size of the right margin\n left: 50, // size of the left margin\n buffer: 8, // the buffer between the actual chart area and the margins\n width: 350, // the width of the entire graphic\n height: 220, // the height of the entire graphic\n full_width: false, // sets the graphic width to be the width of the parent element and resizes dynamically\n full_height: false, // sets the graphic width to be the width of the parent element and resizes dynamically\n small_height_threshold: 120, // the height threshold for when smaller text appears\n small_width_threshold: 160, // the width threshold for when smaller text appears\n xax_count: 6, // number of x axis ticks\n xax_tick_length: 5, // x axis tick length\n axes_not_compact: true,\n yax_count: 3, // number of y axis ticks\n yax_tick_length: 5, // y axis tick length\n x_extended_ticks: false, // extends x axis ticks across chart - useful for tall charts\n y_extended_ticks: false, // extends y axis ticks across chart - useful for long charts\n y_scale_type: 'linear',\n max_x: null,\n max_y: null,\n min_x: null,\n min_y: null, // if set, y axis starts at an arbitrary value\n min_y_from_data: false, // if set, y axis will start at minimum value rather than at 0\n point_size: 2.5, // the size of the dot that appears on a line on mouse-over\n x_accessor: 'date',\n xax_units: '',\n x_label: '',\n x_sort: true,\n x_axis: true,\n y_axis: true,\n x_axis_position: 'bottom',\n y_axis_position: 'left',\n x_axis_type: null, // TO BE INTRODUCED IN 2.10\n y_axis_type: null, // TO BE INTRODUCED IN 2.10\n ygroup_accessor: null,\n xgroup_accessor:null,\n y_padding_percentage: 0.05, // for categorical scales\n y_outer_padding_percentage: .1, // for categorical scales\n ygroup_padding_percentage:.25, // for categorical scales\n ygroup_outer_padding_percentage: 0, // for categorical scales\n x_padding_percentage: 0.05, // for categorical scales\n x_outer_padding_percentage: .1, // for categorical scales\n xgroup_padding_percentage:.25, // for categorical scales\n xgroup_outer_padding_percentage: 0, // for categorical scales\n y_categorical_show_guides: false,\n x_categorical_show_guide: false,\n rotate_x_labels: 0,\n rotate_y_labels: 0,\n y_accessor: 'value',\n y_label: '',\n yax_units: '',\n yax_units_append: false,\n x_rug: false,\n y_rug: false,\n mouseover_align: 'right', // implemented in point.js\n x_mouseover: null,\n y_mouseover: null,\n transition_on_update: true,\n mouseover: null,\n click: null,\n show_rollover_text: true,\n show_confidence_band: null, // given [l, u] shows a confidence at each point from l to u\n xax_format: null, // xax_format is a function that formats the labels for the x axis.\n area: true,\n chart_type: 'line',\n data: [],\n decimals: 2, // the number of decimals in any rollover\n format: 'count', // format = {count, percentage}\n inflator: 10/9, // for setting y axis max\n linked: false, // links together all other graphs with linked:true, so rollovers in one trigger rollovers in the others\n linked_format: '%Y-%m-%d', // What granularity to link on for graphs. Default is at day\n list: false,\n baselines: null, // sets the baseline lines\n markers: null, // sets the marker lines\n scalefns: {},\n scales: {},\n utc_time: false,\n european_clock: false,\n show_year_markers: false,\n show_secondary_x_label: true,\n target: '#viz',\n interpolate: d3.curveCatmullRom.alpha(0), // interpolation method to use when rendering lines; increase tension if your data is irregular and you notice artifacts\n custom_line_color_map: [], // allows arbitrary mapping of lines to colors, e.g. [2,3] will map line 1 to color 2 and line 2 to color 3\n colors: null, // UNIMPLEMENTED - allows direct color mapping to line colors. Will eventually require\n max_data_size: null, // explicitly specify the the max number of line series, for use with custom_line_color_map\n aggregate_rollover: false, // links the lines in a multi-line chart\n show_tooltips: true // if enabled, a chart's description will appear in a tooltip (requires jquery)\n };\n\n MG.call_hook('global.defaults', defaults);\n\n if (!args) { args = {}; }\n\n var selected_chart = MG.charts[args.chart_type || defaults.chart_type];\n merge_with_defaults(args, selected_chart.defaults, defaults);\n\n if (args.list) {\n args.x_accessor = 0;\n args.y_accessor = 1;\n }\n\n // check for deprecated parameters\n for (var key in MG.deprecations) {\n if (args.hasOwnProperty(key)) {\n var deprecation = MG.deprecations[key],\n message = 'Use of `args.' + key + '` has been deprecated',\n replacement = deprecation.replacement,\n version;\n\n // transparently alias the deprecated\n if (replacement) {\n if (args[replacement]) {\n message += '. The replacement - `args.' + replacement + '` - has already been defined. This definition will be discarded.';\n } else {\n args[replacement] = args[key];\n }\n }\n\n if (deprecation.warned) {\n continue;\n }\n\n deprecation.warned = true;\n\n if (replacement) {\n message += ' in favor of `args.' + replacement + '`';\n }\n\n warn_deprecation(message, deprecation.version);\n }\n }\n\n MG.call_hook('global.before_init', args);\n\n new selected_chart.descriptor(args);\n\n return args.data;\n};\n\nif (mg_jquery_exists()) {\n /* ========================================================================\n * Bootstrap: tooltip.js v3.3.5\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n +function ($) {\n 'use strict';\n\n // TOOLTIP PUBLIC CLASS DEFINITION\n // ===============================\n\n var Tooltip = function (element, options) {\n this.type = null\n this.options = null\n this.enabled = null\n this.timeout = null\n this.hoverState = null\n this.$element = null\n this.inState = null\n\n this.init('tooltip', element, options)\n }\n\n Tooltip.VERSION = '3.3.5'\n\n Tooltip.TRANSITION_DURATION = 150\n\n Tooltip.DEFAULTS = {\n animation: true,\n placement: 'top',\n selector: false,\n template: ''\n }).on('mouseenter', function() {\n d3.selectAll(args.target)\n .selectAll('.mg-popover')\n .remove();\n\n $(this).popover('show');\n $(d3.select(args.target).select('.popover').node())\n .on('mouseleave', function () {\n $chartTitle.popover('hide');\n });\n }).on('mouseleave', function () {\n setTimeout(function () {\n if (!$('.popover:hover').length) {\n $chartTitle.popover('hide');\n }\n }, 120);\n });\n } else if (args.show_tooltips && args.description && typeof $ === 'undefined') {\n args.error = 'In order to enable tooltips, please make sure you include jQuery.';\n }\n }\n\n if (args.error) {\n error(args);\n }\n}\n\nMG.chart_title = chart_title;\n\nfunction mg_add_scale_function(args, scalefcn_name, scale, accessor, inflation) {\n args.scalefns[scalefcn_name] = function(di) {\n if (inflation === undefined) return args.scales[scale](di[accessor]);\n else return args.scales[scale](di[accessor]) + inflation;\n };\n}\n\nfunction mg_position(str, args) {\n if (str === 'bottom' || str === 'top') {\n return [mg_get_plot_left(args), mg_get_plot_right(args)];\n }\n\n if (str === 'left' || str === 'right') {\n return [mg_get_plot_bottom(args), args.top];\n }\n}\n\nfunction mg_cat_position(str, args) {\n if (str === 'bottom' || str === 'top') {\n return [mg_get_plot_left(args), mg_get_plot_right(args)]\n }\n\n if (str === 'left' || str === 'right') {\n return [mg_get_plot_bottom(args), mg_get_plot_top(args)];\n }\n}\n\nfunction MGScale(args) {\n // big wrapper around d3 scale that automatically formats & calculates scale bounds\n // according to the data, and handles other niceties.\n var scaleArgs = {}\n scaleArgs.use_inflator = false;\n scaleArgs.zero_bottom = false;\n scaleArgs.scaleType = 'numerical';\n\n this.namespace = function(_namespace) {\n scaleArgs.namespace = _namespace;\n scaleArgs.namespace_accessor_name = scaleArgs.namespace + '_accessor';\n scaleArgs.scale_name = scaleArgs.namespace.toUpperCase();\n scaleArgs.scalefn_name = scaleArgs.namespace + 'f';\n return this;\n }\n\n this.scaleName = function(scaleName) {\n scaleArgs.scale_name = scaleName.toUpperCase();\n scaleArgs.scalefn_name = scaleName +'f';\n return this;\n }\n\n this.inflateDomain = function(tf) {\n scaleArgs.use_inflator = tf;\n return this;\n }\n\n this.zeroBottom = function(tf) {\n scaleArgs.zero_bottom = tf;\n return this;\n }\n\n /////////////////////////////////////////////////////////////////////////////////////////////////////////\n /// all scale domains are either numerical (number, date, etc.) or categorical (factor, label, etc) /////\n /////////////////////////////////////////////////////////////////////////////////////////////////////////\n // these functions automatically create the d3 scale function and place the domain.\n\n this.numericalDomainFromData = function() {\n var other_flat_data_arrays = [];\n\n if (arguments.length > 0) {\n other_flat_data_arrays = arguments;\n }\n\n // pull out a non-empty array in args.data.\n var illustrative_data;\n for (var i = 0; i < args.data.length; i++) {\n if (args.data[i].length > 0) {\n illustrative_data = args.data[i];\n }\n }\n scaleArgs.is_time_series = mg_is_date(illustrative_data[0][args[scaleArgs.namespace_accessor_name]])\n ? true\n : false;\n\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n\n mg_min_max_numerical(args, scaleArgs, other_flat_data_arrays, scaleArgs.use_inflator);\n\n var time_scale = (args.utc_time)\n ? d3.scaleUtc()\n : d3.scaleTime();\n\n args.scales[scaleArgs.scale_name] = (scaleArgs.is_time_series)\n ? time_scale\n : (mg_is_function(args[scaleArgs.namespace + '_scale_type']))\n ? args.y_scale_type()\n : (args[scaleArgs.namespace + '_scale_type'] === 'log')\n ? d3.scaleLog()\n : d3.scaleLinear();\n\n args.scales[scaleArgs.scale_name].domain([args.processed['min_' + scaleArgs.namespace], args.processed['max_' + scaleArgs.namespace]]);\n scaleArgs.scaleType = 'numerical';\n\n return this;\n }\n\n this.categoricalDomain = function(domain) {\n args.scales[scaleArgs.scale_name] = d3.scaleOrdinal().domain(domain);\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n return this;\n }\n\n this.categoricalDomainFromData = function() {\n // make args.categorical_variables.\n // lets make the categorical variables.\n var all_data = mg_flatten_array(args.data)\n //d3.set(data.map(function(d){return d[args.group_accessor]})).values()\n scaleArgs.categoricalVariables = d3.set(all_data.map(function(d) {\n return d[args[scaleArgs.namespace_accessor_name]] })).values();\n args.scales[scaleArgs.scale_name] = d3.scaleBand()\n .domain(scaleArgs.categoricalVariables);\n\n scaleArgs.scaleType = 'categorical';\n return this;\n }\n\n /////////////////////////////////////////////////////////////////////////////////////////////////////////////\n ////////// all scale ranges are either positional (for axes, etc) or arbitrary (colors, size, etc) //////////\n /////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n this.numericalRange = function(range) {\n if (typeof range === 'string') {\n args\n .scales[scaleArgs.scale_name]\n .range(mg_position(range, args));\n } else {\n args\n .scales[scaleArgs.scale_name]\n .range(range);\n }\n\n return this;\n }\n\n this.categoricalRangeBands = function(range, halfway) {\n if (halfway === undefined) halfway = false;\n\n var namespace = scaleArgs.namespace;\n var paddingPercentage = args[namespace + '_padding_percentage'];\n var outerPaddingPercentage = args[namespace + '_outer_padding_percentage'];\n if (typeof range === 'string') {\n // if string, it's a location. Place it accordingly.\n args.scales[scaleArgs.scale_name]\n .range(mg_position(range, args))\n .paddingInner(paddingPercentage)\n .paddingOuter(outerPaddingPercentage);\n } else {\n args.scales[scaleArgs.scale_name]\n .range(range)\n .paddingInner(paddingPercentage)\n .paddingOuter(outerPaddingPercentage);\n }\n\n mg_add_scale_function(\n args,\n scaleArgs.scalefn_name,\n scaleArgs.scale_name,\n args[scaleArgs.namespace_accessor_name],\n halfway\n ? args.scales[scaleArgs.scale_name].bandwidth() / 2\n : 0\n );\n\n return this;\n }\n\n this.categoricalRange = function(range) {\n args.scales[scaleArgs.scale_name].range(range);\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n return this;\n }\n\n this.categoricalColorRange = function() {\n args.scales[scaleArgs.scale_name] = args.scales[scaleArgs.scale_name].domain().length > 10\n ? d3.scaleOrdinal(d3.schemeCategory20)\n : d3.scaleOrdinal(d3.schemeCategory10);\n\n args\n .scales[scaleArgs.scale_name]\n .domain(scaleArgs.categoricalVariables);\n\n mg_add_scale_function(args, scaleArgs.scalefn_name, scaleArgs.scale_name, args[scaleArgs.namespace_accessor_name]);\n return this;\n }\n\n this.clamp = function(yn) {\n args.scales[scaleArgs.scale_name].clamp(yn);\n return this;\n }\n\n return this;\n}\n\nMG.scale_factory = MGScale;\n\n/////////////////////////////// x, x_accessor, markers, baselines, etc.\nfunction mg_min_max_numerical(args, scaleArgs, additional_data_arrays) {\n // A BIT OF EXPLANATION ABOUT THIS FUNCTION\n // This function pulls out all the accessor values in all the arrays in args.data.\n // We also have this additional argument, additional_data_arrays, which is an array of arrays of raw data values.\n // These values also get concatenated to the data pulled from args.data, and the extents are calculate from that.\n // They are optional.\n //\n // This may seem arbitrary, but it gives us a lot of flexibility. For instance, if we're calculating\n // the min and max for the y axis of a line chart, we're going to want to also factor in baselines (horizontal lines\n // that might potentially be outside of the y value bounds). The easiest way to do this is in the line.js code\n // & scale creation to just flatten the args.baselines array, pull out hte values, and feed it in\n // so it appears in additional_data_arrays.\n var namespace = scaleArgs.namespace;\n var namespace_accessor_name = scaleArgs.namespace_accessor_name;\n var use_inflator = scaleArgs.use_inflator;\n var zero_bottom = scaleArgs.zero_bottom;\n\n var accessor = args[namespace_accessor_name];\n\n // add together all relevant data arrays.\n var all_data = mg_flatten_array(args.data)\n .map(function(dp) {\n return dp[accessor] })\n .concat(mg_flatten_array(additional_data_arrays));\n\n // do processing for log\n if (args[namespace + '_scale_type'] === 'log') {\n all_data = all_data.filter(function(d) {\n return d > 0;\n });\n }\n\n // use inflator?\n var extents = d3.extent(all_data);\n var min_val = extents[0];\n var max_val = extents[1];\n\n // bolt scale domain to zero when the right conditions are met:\n // not pulling the bottom of the range from data\n // not zero-bottomed\n // not a time series\n if (zero_bottom && !args['min_' + namespace + '_from_data'] && min_val > 0 && !scaleArgs.is_time_series) {\n min_val = args[namespace + '_scale_type'] === 'log' ? 1 : 0;\n }\n\n if (args[namespace + '_scale_type'] !== 'log' && min_val < 0 && !scaleArgs.is_time_series) {\n min_val = min_val - (min_val - min_val * args.inflator) * use_inflator;\n }\n\n if (!scaleArgs.is_time_series) {\n max_val = (max_val < 0) ? max_val + (max_val - max_val * args.inflator) * use_inflator : max_val * (use_inflator ? args.inflator : 1);\n }\n\n min_val = args['min_' + namespace] || min_val;\n max_val = args['max_' + namespace] || max_val;\n // if there's a single data point, we should custom-set the min and max values.\n\n if (min_val === max_val && !(args['min_' + namespace] && args['max_' + namespace])) {\n\n if (mg_is_date(min_val)) {\n max_val = new Date(MG.clone(min_val).setDate(min_val.getDate() + 1));\n min_val = new Date(MG.clone(min_val).setDate(min_val.getDate() - 1));\n } else if (typeof min_val === 'number') {\n min_val = min_val - 1;\n max_val = min_val + 1;\n mg_force_xax_count_to_be_two(args);\n }\n }\n\n args.processed['min_' + namespace] = min_val;\n args.processed['max_' + namespace] = max_val;\n\n MG.call_hook('x_axis.process_min_max', args, args.processed.min_x, args.processed.max_x);\n MG.call_hook('y_axis.process_min_max', args, args.processed.min_y, args.processed.max_y);\n}\n\nfunction mg_categorical_group_color_scale(args) {\n if (args.color_accessor !== false) {\n if (args.ygroup_accessor) {\n // add a custom accessor element.\n if (args.color_accessor === null) {\n args.color_accessor = args.y_accessor;\n } else {}\n }\n if (args.color_accessor !== null) {\n new MG.scale_factory(args)\n .namespace('color')\n .categoricalDomainFromData()\n .categoricalColorRange();\n }\n }\n}\n\nfunction mg_add_color_categorical_scale(args, domain, accessor) {\n args.scales.color = d3.scaleOrdinal(d3.schemeCategory20).domain(domain);\n args.scalefns.color = function(d) {\n return args.scales.color(d[accessor]);\n };\n}\n\nfunction mg_get_categorical_domain(data, accessor) {\n return d3.set(data.map(function(d) {\n return d[accessor]; }))\n .values();\n}\n\nfunction mg_get_color_domain(args) {\n var color_domain;\n if (args.color_domain === null) {\n if (args.color_type === 'number') {\n color_domain = d3.extent(args.data[0], function(d) {\n return d[args.color_accessor]; });\n } else if (args.color_type === 'category') {\n color_domain = mg_get_categorical_domain(args.data[0], args.color_accessor);\n\n }\n } else {\n color_domain = args.color_domain;\n }\n return color_domain;\n}\n\nfunction mg_get_color_range(args) {\n var color_range;\n if (args.color_range === null) {\n if (args.color_type === 'number') {\n color_range = ['blue', 'red'];\n } else {\n color_range = null;\n }\n } else {\n color_range = args.color_range;\n }\n return color_range;\n}\n\nfunction processScaleTicks (args, axis) {\n var accessor = args[axis + '_accessor'];\n var scale_ticks = args.scales[axis.toUpperCase()].ticks(args[axis + 'ax_count']);\n var max = args.processed['max_' + axis];\n\n function log10 (val) {\n if (val === 1000) {\n return 3;\n }\n if (val === 1000000) {\n return 7;\n }\n return Math.log(val) / Math.LN10;\n }\n\n if (args[axis + '_scale_type'] === 'log') {\n // get out only whole logs\n scale_ticks = scale_ticks.filter(function (d) {\n return Math.abs(log10(d)) % 1 < 1e-6 || Math.abs(log10(d)) % 1 > 1 - 1e-6;\n });\n }\n\n // filter out fraction ticks if our data is ints and if xmax > number of generated ticks\n var number_of_ticks = scale_ticks.length;\n\n // is our data object all ints?\n var data_is_int = true;\n args.data.forEach(function (d, i) {\n d.forEach(function (d, i) {\n if (d[accessor] % 1 !== 0) {\n data_is_int = false;\n return false;\n }\n });\n });\n\n if (data_is_int && number_of_ticks > max && args.format === 'count') {\n // remove non-integer ticks\n scale_ticks = scale_ticks.filter(function (d) {\n return d % 1 === 0;\n });\n }\n args.processed[axis + '_ticks'] = scale_ticks;\n}\n\nfunction rugPlacement (args, axisArgs) {\n var position = axisArgs.position;\n var ns = axisArgs.namespace;\n var coordinates = {};\n if (position === 'left') {\n coordinates.x1 = mg_get_left(args) + 1;\n coordinates.x2 = mg_get_left(args) + args.rug_buffer_size;\n coordinates.y1 = args.scalefns[ns + 'f'];\n coordinates.y2 = args.scalefns[ns + 'f'];\n }\n if (position === 'right') {\n coordinates.x1 = mg_get_right(args) - 1,\n coordinates.x2 = mg_get_right(args) - args.rug_buffer_size,\n coordinates.y1 = args.scalefns[ns + 'f'];\n coordinates.y2 = args.scalefns[ns + 'f'];\n }\n if (position === 'top') {\n coordinates.x1 = args.scalefns[ns + 'f'];\n coordinates.x2 = args.scalefns[ns + 'f'];\n coordinates.y1 = mg_get_top(args) + 1;\n coordinates.y2 = mg_get_top(args) + args.rug_buffer_size;\n }\n if (position === 'bottom') {\n coordinates.x1 = args.scalefns[ns + 'f'];\n coordinates.x2 = args.scalefns[ns + 'f'];\n coordinates.y1 = mg_get_bottom(args) - 1;\n coordinates.y2 = mg_get_bottom(args) - args.rug_buffer_size;\n }\n return coordinates;\n}\n\nfunction rimPlacement (args, axisArgs) {\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var tick_length = args.processed[ns + '_ticks'].length;\n var ticks = args.processed[ns + '_ticks'];\n var scale = args.scales[ns.toUpperCase()];\n var coordinates = {};\n\n if (position === 'left') {\n coordinates.x1 = mg_get_left(args);\n coordinates.x2 = mg_get_left(args);\n coordinates.y1 = scale(ticks[0]).toFixed(2);\n coordinates.y2 = scale(ticks[tick_length - 1]).toFixed(2);\n }\n if (position === 'right') {\n coordinates.x1 = mg_get_right(args);\n coordinates.x2 = mg_get_right(args);\n coordinates.y1 = scale(ticks[0]).toFixed(2);\n coordinates.y2 = scale(ticks[tick_length - 1]).toFixed(2);\n }\n if (position === 'top') {\n coordinates.x1 = mg_get_left(args);\n coordinates.x2 = mg_get_right(args);\n coordinates.y1 = mg_get_top(args);\n coordinates.y2 = mg_get_top(args);\n }\n if (position === 'bottom') {\n coordinates.x1 = mg_get_left(args);\n coordinates.x2 = mg_get_right(args);\n coordinates.y1 = mg_get_bottom(args);\n coordinates.y2 = mg_get_bottom(args);\n }\n\n if (position === 'left' || position === 'right') {\n if (args.axes_not_compact) {\n coordinates.y1 = mg_get_bottom(args);\n coordinates.y2 = mg_get_top(args);\n } else if (tick_length) {\n coordinates.y1 = scale(ticks[0]).toFixed(2);\n coordinates.y2 = scale(ticks[tick_length - 1]).toFixed(2);\n }\n }\n\n return coordinates;\n}\n\nfunction labelPlacement (args, axisArgs) {\n var position = axisArgs.position;\n var ns = axisArgs.namespace;\n var tickLength = args[ns + 'ax_tick_length'];\n var scale = args.scales[ns.toUpperCase()];\n var coordinates = {};\n\n if (position === 'left') {\n coordinates.x = mg_get_left(args) - tickLength * 3 / 2;\n coordinates.y = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.dx = -3;\n coordinates.dy = '.35em';\n coordinates.textAnchor = 'end';\n coordinates.text = function (d) {\n return mg_compute_yax_format(args)(d);\n };\n }\n if (position === 'right') {\n coordinates.x = mg_get_right(args) + tickLength * 3 / 2;\n coordinates.y = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.dx = 3;\n coordinates.dy = '.35em';\n coordinates.textAnchor = 'start';\n coordinates.text = function (d) {\n return mg_compute_yax_format(args)(d); };\n }\n if (position === 'top') {\n coordinates.x = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.y = (mg_get_top(args) - tickLength * 7 / 3).toFixed(2);\n coordinates.dx = 0;\n coordinates.dy = '0em';\n coordinates.textAnchor = 'middle';\n coordinates.text = function (d) {\n return mg_default_xax_format(args)(d);\n };\n }\n if (position === 'bottom') {\n coordinates.x = function (d) {\n return scale(d).toFixed(2);\n };\n coordinates.y = (mg_get_bottom(args) + tickLength * 7 / 3).toFixed(2);\n coordinates.dx = 0;\n coordinates.dy = '.50em';\n coordinates.textAnchor = 'middle';\n coordinates.text = function (d) {\n return mg_default_xax_format(args)(d);\n };\n }\n\n return coordinates;\n}\n\nfunction selectXaxFormat (args) {\n var c = args.chart_type;\n if (!args.processed.xax_format) {\n if (args.xax_format) {\n args.processed.xax_format = args.xax_format;\n } else {\n if (c === 'line' || c === 'point' || c === 'histogram') {\n args.processed.xax_format = mg_default_xax_format(args);\n } else if (c === 'bar') {\n args.processed.xax_format = mg_default_bar_xax_format(args);\n }\n }\n }\n}\n\nfunction secondaryLabels (g, args, axisArgs) {\n if (args.time_series && (args.show_years || args.show_secondary_x_label)) {\n var tf = mg_get_yformat_and_secondary_time_function(args);\n addSecondaryLabelElements(args, axisArgs, g, tf.timeframe, tf.yformat, tf.secondary);\n }\n}\n\nfunction addSecondaryLabelElements (args, axisArgs, g, time_frame, yformat, secondary_function) {\n var years = secondary_function(args.processed.min_x, args.processed.max_x);\n if (years.length === 0) {\n var first_tick = args.scales.X.ticks(args.xax_count)[0];\n years = [first_tick];\n }\n\n var yg = mg_add_g(g, 'mg-year-marker');\n if (time_frame === 'default' && args.show_year_markers) {\n yearMarkerLine(args, axisArgs, yg, years, yformat);\n }\n if (time_frame != 'years') yearMarkerText(args, axisArgs, yg, years, yformat);\n}\n\nfunction yearMarkerLine (args, axisArgs, g, years, yformat) {\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('line')\n .attr('x1', function (d) {\n return args.scales.X(d).toFixed(2); })\n .attr('x2', function (d) {\n return args.scales.X(d).toFixed(2); })\n .attr('y1', mg_get_top(args))\n .attr('y2', mg_get_bottom(args));\n}\n\nfunction yearMarkerText (args, axisArgs, g, years, yformat) {\n var position = axisArgs.position;\n var ns = axisArgs.namespace;\n var scale = args.scales[ns.toUpperCase()];\n var x, y, dy, textAnchor, textFcn;\n var xAxisTextElement = d3.select(args.target)\n .select('.mg-x-axis text').node().getBoundingClientRect();\n\n if (position === 'top') {\n x = function (d, i) {\n return scale(d).toFixed(2); };\n y = (mg_get_top(args) - args.xax_tick_length * 7 / 3) - (xAxisTextElement.height);\n dy = '.50em';\n textAnchor = 'middle';\n textFcn = function (d) {\n return yformat(new Date(d)); };\n }\n if (position === 'bottom') {\n x = function (d, i) {\n return scale(d).toFixed(2); };\n y = (mg_get_bottom(args) + args.xax_tick_length * 7 / 3) + (xAxisTextElement.height * 0.8);\n dy = '.50em';\n textAnchor = 'middle';\n textFcn = function (d) {\n return yformat(new Date(d)); };\n }\n\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('text')\n .attr('x', x)\n .attr('y', y)\n .attr('dy', dy)\n .attr('text-anchor', textAnchor)\n .text(textFcn);\n}\n\nfunction addNumericalLabels (g, args, axisArgs) {\n var ns = axisArgs.namespace;\n var coords = labelPlacement(args, axisArgs);\n var ticks = args.processed[ns + '_ticks'];\n\n var labels = g.selectAll('.mg-yax-labels')\n .data(ticks).enter()\n .append('text')\n .attr('x', coords.x)\n .attr('dx', coords.dx)\n .attr('y', coords.y)\n .attr('dy', coords.dy)\n .attr('text-anchor', coords.textAnchor)\n .text(coords.text);\n\n // move the labels if they overlap\n if (ns == 'x') {\n selectXaxFormat(args);\n if (args.time_series && args.european_clock) {\n labels.append('tspan').classed('mg-european-hours', true).text(function (_d, i) {\n var d = new Date(_d);\n if (i === 0) return d3.timeFormat('%H')(d);\n else return '';\n });\n labels.append('tspan').classed('mg-european-minutes-seconds', true).text(function (_d, i) {\n var d = new Date(_d);\n return ':' + args.processed.xax_format(d);\n });\n } else {\n labels.text(function (d) {\n return args.xax_units + args.processed.xax_format(d);\n });\n }\n secondaryLabels(g, args, axisArgs);\n }\n\n if (mg_elements_are_overlapping(labels)) {\n labels.filter(function (d, i) {\n return (i + 1) % 2 === 0;\n }).remove();\n\n var svg = mg_get_svg_child_of(args.target);\n svg.selectAll('.mg-' + ns + 'ax-ticks').filter(function (d, i) {\n return (i + 1) % 2 === 0; })\n .remove();\n }\n}\n\nfunction addTickLines (g, args, axisArgs) {\n // name\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var scale = args.scales[ns.toUpperCase()];\n\n var ticks = args.processed[ns + '_ticks'];\n var ticksClass = 'mg-' + ns + 'ax-ticks';\n var extendedTicksClass = 'mg-extended-' + ns + 'ax-ticks';\n var extendedTicks = args[ns + '_extended_ticks'];\n var tickLength = args[ns + 'ax_tick_length'];\n\n var x1, x2, y1, y2;\n\n if (position === 'left') {\n x1 = mg_get_left(args);\n x2 = extendedTicks ? mg_get_right(args) : mg_get_left(args) - tickLength;\n y1 = function (d) {\n return scale(d).toFixed(2);\n };\n y2 = function (d) {\n return scale(d).toFixed(2);\n };\n }\n if (position === 'right') {\n x1 = mg_get_right(args);\n x2 = extendedTicks ? mg_get_left(args) : mg_get_right(args) + tickLength;\n y1 = function (d) {\n return scale(d).toFixed(2);\n };\n y2 = function (d) {\n return scale(d).toFixed(2);\n };\n }\n if (position === 'top') {\n x1 = function (d) {\n return scale(d).toFixed(2);\n };\n x2 = function (d) {\n return scale(d).toFixed(2);\n };\n y1 = mg_get_top(args);\n y2 = extendedTicks ? mg_get_bottom(args) : mg_get_top(args) - tickLength;\n }\n if (position === 'bottom') {\n x1 = function (d) {\n return scale(d).toFixed(2);\n };\n x2 = function (d) {\n return scale(d).toFixed(2);\n };\n y1 = mg_get_bottom(args);\n y2 = extendedTicks ? mg_get_top(args) : mg_get_bottom(args) + tickLength;\n }\n\n g.selectAll('.' + ticksClass)\n .data(ticks).enter()\n .append('line')\n .classed(extendedTicksClass, extendedTicks)\n .attr('x1', x1)\n .attr('x2', x2)\n .attr('y1', y1)\n .attr('y2', y2);\n}\n\nfunction initializeAxisRim (g, args, axisArgs) {\n var namespace = axisArgs.namespace;\n var tick_length = args.processed[namespace + '_ticks'].length;\n\n var rim = rimPlacement(args, axisArgs);\n\n if (!args[namespace + '_extended_ticks'] && !args[namespace + '_extended_ticks'] && tick_length) {\n g.append('line')\n .attr('x1', rim.x1)\n .attr('x2', rim.x2)\n .attr('y1', rim.y1)\n .attr('y2', rim.y2);\n }\n}\n\nfunction initializeRug (args, rug_class) {\n var svg = mg_get_svg_child_of(args.target);\n var all_data = mg_flatten_array(args.data);\n var rug = svg.selectAll('line.' + rug_class).data(all_data);\n\n // set the attributes that do not change after initialization, per\n rug.enter().append('svg:line').attr('class', rug_class).attr('opacity', 0.3);\n\n // remove rug elements that are no longer in use\n mg_exit_and_remove(rug);\n\n // set coordinates of new rug elements\n mg_exit_and_remove(rug);\n return rug;\n}\n\nfunction rug (args, axisArgs) {\n 'use strict';\n args.rug_buffer_size = args.chart_type === 'point' ? args.buffer / 2 : args.buffer * 2 / 3;\n\n var rug = initializeRug(args, 'mg-' + axisArgs.namespace + '-rug');\n var rug_positions = rugPlacement(args, axisArgs);\n rug.attr('x1', rug_positions.x1)\n .attr('x2', rug_positions.x2)\n .attr('y1', rug_positions.y1)\n .attr('y2', rug_positions.y2);\n\n mg_add_color_accessor_to_rug(rug, args, 'mg-' + axisArgs.namespace + '-rug-mono');\n}\n\nfunction categoricalLabelPlacement (args, axisArgs, group) {\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var scale = args.scales[ns.toUpperCase()];\n var groupScale = args.scales[(ns + 'group').toUpperCase()];\n var coords = {};\n coords.cat = {};\n coords.group = {};\n // x, y, dy, text-anchor\n\n if (position === 'left') {\n coords.cat.x = mg_get_plot_left(args) - args.buffer;\n coords.cat.y = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = 'end';\n coords.group.x = mg_get_plot_left(args) - args.buffer;\n coords.group.y = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 : 0);\n coords.group.dy = '.35em';\n coords.group.textAnchor = args['rotate_' + ns + '_labels'] ? 'end' : 'end';\n }\n\n if (position === 'right') {\n coords.cat.x = mg_get_plot_right(args) - args.buffer;\n coords.cat.y = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = 'start';\n coords.group.x = mg_get_plot_right(args) - args.buffer;\n coords.group.y = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 : 0);\n coords.group.dy = '.35em';\n coords.group.textAnchor = 'start';\n }\n\n if (position === 'top') {\n coords.cat.x = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.y = mg_get_plot_top(args) + args.buffer;\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n coords.group.x = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 : 0);\n coords.group.y = mg_get_plot_top(args) + args.buffer;\n coords.group.dy = '.35em';\n coords.group.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n }\n\n if (position === 'bottom') {\n coords.cat.x = function (d) {\n return groupScale(group) + scale(d) + scale.bandwidth() / 2;\n };\n coords.cat.y = mg_get_plot_bottom(args) + args.buffer;\n coords.cat.dy = '.35em';\n coords.cat.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n coords.group.x = groupScale(group) + (groupScale.bandwidth ? groupScale.bandwidth() / 2 - scale.bandwidth() / 2 : 0);\n coords.group.y = mg_get_plot_bottom(args) + args.buffer;\n coords.group.dy = '.35em';\n coords.group.textAnchor = args['rotate_' + ns + '_labels'] ? 'start' : 'middle';\n }\n\n return coords;\n}\n\nfunction categoricalLabels (args, axisArgs) {\n var ns = axisArgs.namespace;\n var nsClass = 'mg-' + ns + '-axis';\n var scale = args.scales[ns.toUpperCase()];\n var groupScale = args.scales[(ns + 'group').toUpperCase()];\n var groupAccessor = ns + 'group_accessor';\n\n var svg = mg_get_svg_child_of(args.target);\n mg_selectAll_and_remove(svg, '.' + nsClass);\n var g = mg_add_g(svg, nsClass);\n var group_g;\n var groups = groupScale.domain && groupScale.domain()\n ? groupScale.domain()\n : ['1'];\n\n groups.forEach(function (group) {\n // grab group placement stuff.\n var coords = categoricalLabelPlacement(args, axisArgs, group);\n\n group_g = mg_add_g(g, 'mg-group-' + mg_normalize(group));\n if (args[groupAccessor] !== null) {\n var labels = group_g.append('text')\n .classed('mg-barplot-group-label', true)\n .attr('x', coords.group.x)\n .attr('y', coords.group.y)\n .attr('dy', coords.group.dy)\n .attr('text-anchor', coords.group.textAnchor)\n .text(group);\n\n } else {\n var labels = group_g.selectAll('text')\n .data(scale.domain())\n .enter()\n .append('text')\n .attr('x', coords.cat.x)\n .attr('y', coords.cat.y)\n .attr('dy', coords.cat.dy)\n .attr('text-anchor', coords.cat.textAnchor)\n .text(String);\n }\n if (args['rotate_' + ns + '_labels']) {\n rotateLabels(labels, args['rotate_' + ns + '_labels']);\n }\n });\n}\n\nfunction categoricalGuides (args, axisArgs) {\n // for each group\n // for each data point\n\n var ns = axisArgs.namespace;\n var scalef = args.scalefns[ns + 'f'];\n var groupf = args.scalefns[ns + 'groupf'];\n var groupScale = args.scales[(ns + 'group').toUpperCase()];\n var scale = args.scales[ns.toUpperCase()];\n var position = axisArgs.position;\n\n var svg = mg_get_svg_child_of(args.target);\n var alreadyPlotted = [];\n\n var x1, x2, y1, y2;\n var grs = (groupScale.domain && groupScale.domain()) ? groupScale.domain() : [null];\n\n mg_selectAll_and_remove(svg, '.mg-category-guides');\n var g = mg_add_g(svg, 'mg-category-guides');\n\n grs.forEach(function (group) {\n scale.domain().forEach(function (cat) {\n if (position === 'left' || position === 'right') {\n x1 = mg_get_plot_left(args);\n x2 = mg_get_plot_right(args);\n y1 = scale(cat) + groupScale(group) + scale.bandwidth() / 2;\n y2 = scale(cat) + groupScale(group) + scale.bandwidth() / 2;\n }\n\n if (position === 'top' || position === 'bottom') {\n x1 = scale(cat) + groupScale(group) + scale.bandwidth() / 2 * (group === null);\n x2 = scale(cat) + groupScale(group) + scale.bandwidth() / 2 * (group === null);\n y1 = mg_get_plot_bottom(args);\n y2 = mg_get_plot_top(args);\n }\n\n g.append('line')\n .attr('x1', x1)\n .attr('x2', x2)\n .attr('y1', y1)\n .attr('y2', y2)\n .attr('stroke-dasharray', '2,1');\n });\n\n var first = groupScale(group) + scale(scale.domain()[0]) + scale.bandwidth() / 2 * (group === null || (position !== 'top' && position != 'bottom'));\n var last = groupScale(group) + scale(scale.domain()[scale.domain().length - 1]) + scale.bandwidth() / 2 * (group === null || (position !== 'top' && position != 'bottom'));\n\n if (position === 'left' || position === 'right') {\n x11 = mg_get_plot_left(args);\n x21 = mg_get_plot_left(args);\n y11 = first;\n y21 = last;\n\n x12 = mg_get_plot_right(args);\n x22 = mg_get_plot_right(args);\n y12 = first;\n y22 = last;\n }\n\n if (position === 'bottom' || position === 'top') {\n x11 = first;\n x21 = last;\n y11 = mg_get_plot_bottom(args);\n y21 = mg_get_plot_bottom(args);\n\n x12 = first;\n x22 = last;\n y12 = mg_get_plot_top(args);\n y22 = mg_get_plot_top(args);\n }\n\n g.append('line')\n .attr('x1', x11)\n .attr('x2', x21)\n .attr('y1', y11)\n .attr('y2', y21)\n .attr('stroke-dasharray', '2,1');\n\n g.append('line')\n .attr('x1', x12)\n .attr('x2', x22)\n .attr('y1', y12)\n .attr('y2', y22)\n .attr('stroke-dasharray', '2,1');\n });\n}\n\nfunction rotateLabels (labels, rotation_degree) {\n if (rotation_degree) {\n labels.attr('transform', function () {\n var elem = d3.select(this);\n return 'rotate(' + rotation_degree + ' ' + elem.attr('x') + ',' + elem.attr('y') + ')';\n });\n\n }\n}\n\nfunction zeroLine (args, axisArgs) {\n var svg = mg_get_svg_child_of(args.target);\n var ns = axisArgs.namespace;\n var position = axisArgs.position;\n var scale = args.scales[ns.toUpperCase()];\n var x1, x2, y1, y2;\n if (position === 'left' || position === 'right') {\n x1 = mg_get_plot_left(args);\n x2 = mg_get_plot_right(args);\n y1 = scale(0) + 1;\n y2 = scale(0) + 1;\n }\n if (position === 'bottom' || position === 'top') {\n y1 = mg_get_plot_top(args);\n y2 = mg_get_plot_bottom(args);\n x1 = scale(0) - 1;\n x2 = scale(0) - 1;\n }\n\n svg.append('line')\n .attr('x1', x1)\n .attr('x2', x2)\n .attr('y1', y1)\n .attr('y2', y2)\n .attr('stroke', 'black');\n}\n\nvar mgDrawAxis = {};\n\nmgDrawAxis.categorical = function (args, axisArgs) {\n var ns = axisArgs.namespace;\n\n categoricalLabels(args, axisArgs);\n categoricalGuides(args, axisArgs);\n};\n\nmgDrawAxis.numerical = function (args, axisArgs) {\n var namespace = axisArgs.namespace;\n var axisName = namespace + '_axis';\n var axisClass = 'mg-' + namespace + '-axis';\n var svg = mg_get_svg_child_of(args.target);\n\n mg_selectAll_and_remove(svg, '.' + axisClass);\n\n if (!args[axisName]) {\n return this;\n }\n\n var g = mg_add_g(svg, axisClass);\n\n processScaleTicks(args, namespace);\n initializeAxisRim(g, args, axisArgs);\n addTickLines(g, args, axisArgs);\n addNumericalLabels(g, args, axisArgs);\n\n // add label\n if (args[namespace + '_label']) {\n axisArgs.label(svg.select('.mg-' + namespace + '-axis'), args);\n }\n\n // add rugs\n if (args[namespace + '_rug']) {\n rug(args, axisArgs);\n }\n\n if (args.show_bar_zero) {\n mg_bar_add_zero_line(args);\n }\n\n return this;\n};\n\nfunction axisFactory (args) {\n var axisArgs = {};\n axisArgs.type = 'numerical';\n\n this.namespace = function (ns) {\n // take the ns in the scale, and use it to\n axisArgs.namespace = ns;\n return this;\n };\n\n this.rug = function (tf) {\n axisArgs.rug = tf;\n return this;\n };\n\n this.label = function (tf) {\n axisArgs.label = tf;\n return this;\n };\n\n this.type = function (t) {\n axisArgs.type = t;\n return this;\n };\n\n this.position = function (pos) {\n axisArgs.position = pos;\n return this;\n };\n\n this.zeroLine = function (tf) {\n axisArgs.zeroLine = tf;\n return this;\n };\n\n this.draw = function () {\n mgDrawAxis[axisArgs.type](args, axisArgs);\n return this;\n };\n\n return this;\n\n}\n\nMG.axis_factory = axisFactory;\n\n/* ================================================================================ */\n/* ================================================================================ */\n/* ================================================================================ */\n\nfunction y_rug (args) {\n 'use strict';\n\n if (!args.y_rug) {\n return;\n }\n\n args.rug_buffer_size = args.chart_type === 'point'\n ? args.buffer / 2\n : args.buffer * 2 / 3;\n\n var rug = mg_make_rug(args, 'mg-y-rug');\n\n rug.attr('x1', args.left + 1)\n .attr('x2', args.left + args.rug_buffer_size)\n .attr('y1', args.scalefns.yf)\n .attr('y2', args.scalefns.yf);\n\n mg_add_color_accessor_to_rug(rug, args, 'mg-y-rug-mono');\n}\n\nMG.y_rug = y_rug;\n\nfunction mg_change_y_extents_for_bars (args, my) {\n if (args.chart_type === 'bar') {\n my.min = 0;\n my.max = d3.max(args.data[0], function (d) {\n var trio = [];\n trio.push(d[args.y_accessor]);\n\n if (args.baseline_accessor !== null) {\n trio.push(d[args.baseline_accessor]);\n }\n\n if (args.predictor_accessor !== null) {\n trio.push(d[args.predictor_accessor]);\n }\n\n return Math.max.apply(null, trio);\n });\n }\n return my;\n}\n\nfunction mg_compute_yax_format (args) {\n var yax_format = args.yax_format;\n if (!yax_format) {\n if (args.format === 'count') {\n // increase decimals if we have small values, useful for realtime data\n if (args.processed.max_y < 0.0001) {\n args.decimals = 6;\n } else if (args.processed.max_y < 0.1) {\n args.decimals = 4;\n }\n\n yax_format = function (d) {\n var pf;\n\n if (d < 1.0 && d > -1.0 && d !== 0) {\n // don't scale tiny values\n pf = d3.format(',.' + args.decimals + 'f');\n } else if (d < 1000) {\n pf = d3.format(',.0f');\n } else {\n pf = d3.format(',.2s');\n }\n\n // are we adding units after the value or before?\n if (args.yax_units_append) {\n return pf(d) + args.yax_units;\n } else {\n return args.yax_units + pf(d);\n }\n };\n } else { // percentage\n yax_format = function (d_) {\n var n = d3.format('.0%');\n return n(d_);\n };\n }\n }\n return yax_format;\n}\n\nfunction mg_bar_add_zero_line (args) {\n var svg = mg_get_svg_child_of(args.target);\n var extents = args.scales.X.domain();\n if (0 >= extents[0] && extents[1] >= 0) {\n var r = args.scales.Y.range();\n var g = args.categorical_groups.length\n ? args.scales.YGROUP(args.categorical_groups[args.categorical_groups.length - 1])\n : args.scales.YGROUP();\n\n svg.append('svg:line')\n .attr('x1', args.scales.X(0))\n .attr('x2', args.scales.X(0))\n .attr('y1', r[0] + mg_get_plot_top(args))\n .attr('y2', r[r.length - 1] + g)\n .attr('stroke', 'black')\n .attr('opacity', .2);\n }\n}\n\nfunction set_min_max_y (args) {\n // flatten data\n // remove weird data, if log.\n var data = mg_flatten_array(args.data);\n\n if (args.y_scale_type === 'log') {\n data = data.filter(function (d) {\n return d[args.y_accessor] > 0;\n });\n }\n\n if (args.baselines) {\n data = data.concat(args.baselines);\n }\n\n var extents = d3.extent(data, function (d) {\n return d[args.y_accessor];\n });\n\n var my = {};\n my.min = extents[0];\n my.max = extents[1];\n // the default case is for the y-axis to start at 0, unless we explicitly want it\n // to start at an arbitrary number or from the data's minimum value\n if (my.min >= 0 && !args.min_y && !args.min_y_from_data) {\n my.min = 0;\n }\n\n mg_change_y_extents_for_bars(args, my);\n my.min = (args.min_y !== null) ? args.min_y : my.min;\n\n my.max = (args.max_y !== null) ? args.max_y : (my.max < 0) ? my.max + (my.max - my.max * args.inflator) : my.max * args.inflator;\n\n if (args.y_scale_type !== 'log' && my.min < 0) {\n my.min = my.min - (my.min - my.min * args.inflator);\n }\n\n if (!args.min_y && args.min_y_from_data) {\n var buff = (my.max - my.min) * .01;\n my.min = extents[0] - buff;\n my.max = extents[1] + buff;\n }\n args.processed.min_y = my.min;\n args.processed.max_y = my.max;\n}\n\nfunction mg_y_domain_range (args, scale) {\n scale.domain([args.processed.min_y, args.processed.max_y])\n .range([mg_get_plot_bottom(args), args.top]);\n return scale;\n}\n\nfunction mg_define_y_scales (args) {\n var scale = (mg_is_function(args.y_scale_type))\n ? args.y_scale_type()\n : (args.y_scale_type === 'log')\n ? d3.scaleLog()\n : d3.scaleLinear();\n\n if (args.y_scale_type === 'log') {\n if (args.chart_type === 'histogram') {\n // log histogram plots should start just below 1\n // so that bins with single counts are visible\n args.processed.min_y = 0.2;\n } else {\n if (args.processed.min_y <= 0) {\n args.processed.min_y = 1;\n }\n }\n }\n args.scales.Y = mg_y_domain_range(args, scale);\n args.scales.Y.clamp(args.y_scale_type === 'log');\n\n // used for ticks and such, and designed to be paired with log or linear\n args.scales.Y_axis = mg_y_domain_range(args, d3.scaleLinear());\n}\n\nfunction mg_add_y_label (g, args) {\n if (args.y_label) {\n g.append('text')\n .attr('class', 'label')\n .attr('x', function () {\n return -1 * (mg_get_plot_top(args) +\n ((mg_get_plot_bottom(args)) - (mg_get_plot_top(args))) / 2);\n })\n .attr('y', function () {\n return args.left / 2;\n })\n .attr('dy', '0.4em')\n .attr('text-anchor', 'middle')\n .text(function (d) {\n return args.y_label;\n })\n .attr('transform', function (d) {\n return 'rotate(-90)';\n });\n }\n}\n\nfunction mg_add_y_axis_rim (g, args) {\n var tick_length = args.processed.y_ticks.length;\n if (!args.x_extended_ticks && !args.y_extended_ticks && tick_length) {\n var y1scale, y2scale;\n\n if (args.axes_not_compact && args.chart_type !== 'bar') {\n y1scale = args.height - args.bottom;\n y2scale = args.top;\n } else if (tick_length) {\n y1scale = args.scales.Y(args.processed.y_ticks[0]).toFixed(2);\n y2scale = args.scales.Y(args.processed.y_ticks[tick_length - 1]).toFixed(2);\n } else {\n y1scale = 0;\n y2scale = 0;\n }\n\n g.append('line')\n .attr('x1', args.left)\n .attr('x2', args.left)\n .attr('y1', y1scale)\n .attr('y2', y2scale);\n }\n}\n\nfunction mg_add_y_axis_tick_lines (g, args) {\n g.selectAll('.mg-yax-ticks')\n .data(args.processed.y_ticks).enter()\n .append('line')\n .classed('mg-extended-yax-ticks', args.y_extended_ticks)\n .attr('x1', args.left)\n .attr('x2', function () {\n return (args.y_extended_ticks) ? args.width - args.right : args.left - args.yax_tick_length;\n })\n .attr('y1', function (d) {\n return args.scales.Y(d).toFixed(2);\n })\n .attr('y2', function (d) {\n return args.scales.Y(d).toFixed(2);\n });\n}\n\nfunction mg_add_y_axis_tick_labels (g, args) {\n var yax_format = mg_compute_yax_format(args);\n g.selectAll('.mg-yax-labels')\n .data(args.processed.y_ticks).enter()\n .append('text')\n .attr('x', args.left - args.yax_tick_length * 3 / 2)\n .attr('dx', -3)\n .attr('y', function (d) {\n return args.scales.Y(d).toFixed(2);\n })\n .attr('dy', '.35em')\n .attr('text-anchor', 'end')\n .text(function (d) {\n var o = yax_format(d);\n return o;\n });\n}\n\n// TODO ought to be deprecated, only used by histogram\nfunction y_axis (args) {\n if (!args.processed) {\n args.processed = {};\n }\n\n var svg = mg_get_svg_child_of(args.target);\n MG.call_hook('y_axis.process_min_max', args, args.processed.min_y, args.processed.max_y);\n mg_selectAll_and_remove(svg, '.mg-y-axis');\n\n if (!args.y_axis) {\n return this;\n }\n\n var g = mg_add_g(svg, 'mg-y-axis');\n mg_add_y_label(g, args);\n mg_process_scale_ticks(args, 'y');\n mg_add_y_axis_rim(g, args);\n mg_add_y_axis_tick_lines(g, args);\n mg_add_y_axis_tick_labels(g, args);\n\n if (args.y_rug) {\n y_rug(args);\n }\n\n return this;\n}\n\nMG.y_axis = y_axis;\n\nfunction mg_add_categorical_labels (args) {\n var svg = mg_get_svg_child_of(args.target);\n mg_selectAll_and_remove(svg, '.mg-y-axis');\n var g = mg_add_g(svg, 'mg-y-axis');\n var group_g;(args.categorical_groups.length ? args.categorical_groups : ['1']).forEach(function (group) {\n group_g = mg_add_g(g, 'mg-group-' + mg_normalize(group));\n\n if (args.ygroup_accessor !== null) {\n mg_add_group_label(group_g, group, args);\n } else {\n var labels = mg_add_graphic_labels(group_g, group, args);\n mg_rotate_labels(labels, args.rotate_y_labels);\n }\n });\n}\n\nfunction mg_add_graphic_labels (g, group, args) {\n return g.selectAll('text').data(args.scales.Y.domain()).enter().append('svg:text')\n .attr('x', args.left - args.buffer)\n .attr('y', function (d) {\n return args.scales.YGROUP(group) + args.scales.Y(d) + args.scales.Y.bandwidth() / 2;\n })\n .attr('dy', '.35em')\n .attr('text-anchor', 'end')\n .text(String);\n}\n\nfunction mg_add_group_label (g, group, args) {\n g.append('svg:text')\n .classed('mg-barplot-group-label', true)\n .attr('x', args.left - args.buffer)\n .attr('y', args.scales.YGROUP(group) + args.scales.YGROUP.bandwidth() / 2)\n .attr('dy', '.35em')\n .attr('text-anchor', 'end')\n .text(group);\n}\n\nfunction mg_draw_group_lines (args) {\n var svg = mg_get_svg_child_of(args.target);\n var groups = args.scales.YGROUP.domain();\n var first = groups[0];\n var last = groups[groups.length - 1];\n\n svg.select('.mg-category-guides').selectAll('mg-group-lines')\n .data(groups)\n .enter().append('line')\n .attr('x1', mg_get_plot_left(args))\n .attr('x2', mg_get_plot_left(args))\n .attr('y1', function (d) {\n return args.scales.YGROUP(d);\n })\n .attr('y2', function (d) {\n return args.scales.YGROUP(d) + args.ygroup_height;\n })\n .attr('stroke-width', 1);\n}\n\nfunction mg_y_categorical_show_guides (args) {\n // for each group\n // for each data point\n var svg = mg_get_svg_child_of(args.target);\n var alreadyPlotted = [];\n args.data[0].forEach(function (d) {\n if (alreadyPlotted.indexOf(d[args.y_accessor]) === -1) {\n svg.select('.mg-category-guides').append('line')\n .attr('x1', mg_get_plot_left(args))\n .attr('x2', mg_get_plot_right(args))\n .attr('y1', args.scalefns.yf(d) + args.scalefns.ygroupf(d))\n .attr('y2', args.scalefns.yf(d) + args.scalefns.ygroupf(d))\n .attr('stroke-dasharray', '2,1');\n }\n });\n}\n\nfunction y_axis_categorical (args) {\n if (!args.y_axis) {\n return this;\n }\n\n mg_add_categorical_labels(args);\n // mg_draw_group_scaffold(args);\n if (args.show_bar_zero) mg_bar_add_zero_line(args);\n if (args.ygroup_accessor) mg_draw_group_lines(args);\n if (args.y_categorical_show_guides) mg_y_categorical_show_guides(args);\n return this;\n}\n\nMG.y_axis_categorical = y_axis_categorical;\n\nfunction x_rug(args) {\n 'use strict';\n\n if(!args.x_rug) {\n return;\n }\n\n args.rug_buffer_size = args.chart_type === 'point'\n ? args.buffer / 2\n : args.buffer;\n\n var rug = mg_make_rug(args, 'mg-x-rug');\n\n rug.attr('x1', args.scalefns.xf)\n .attr('x2', args.scalefns.xf)\n .attr('y1', args.height - args.bottom - args.rug_buffer_size)\n .attr('y2', args.height - args.bottom);\n\n mg_add_color_accessor_to_rug(rug, args, 'mg-x-rug-mono');\n}\n\nMG.x_rug = x_rug;\n\nfunction mg_add_processed_object(args) {\n if (!args.processed) {\n args.processed = {};\n }\n}\n\n// TODO ought to be deprecated, only used by histogram\nfunction x_axis(args) {\n 'use strict';\n\n var svg = mg_get_svg_child_of(args.target);\n mg_add_processed_object(args);\n\n mg_select_xax_format(args);\n mg_selectAll_and_remove(svg, '.mg-x-axis');\n\n if (!args.x_axis) {\n return this;\n }\n\n var g = mg_add_g(svg, 'mg-x-axis');\n\n mg_add_x_ticks(g, args);\n mg_add_x_tick_labels(g, args);\n if (args.x_label) { mg_add_x_label(g, args); }\n if (args.x_rug) { x_rug(args); }\n\n return this;\n}\n\nMG.x_axis = x_axis;\n\nfunction x_axis_categorical(args) {\n var svg = mg_get_svg_child_of(args.target);\n var additional_buffer = 0;\n if (args.chart_type === 'bar') {\n additional_buffer = args.buffer + 5;\n }\n\n mg_add_categorical_scale(args, 'X', args.categorical_variables.reverse(), args.left, mg_get_plot_right(args) - additional_buffer);\n mg_add_scale_function(args, 'xf', 'X', 'value');\n mg_selectAll_and_remove(svg, '.mg-x-axis');\n\n var g = mg_add_g(svg, 'mg-x-axis');\n\n if (!args.x_axis) {\n return this;\n }\n\n mg_add_x_axis_categorical_labels(g, args, additional_buffer);\n return this;\n}\n\nfunction mg_add_x_axis_categorical_labels(g, args, additional_buffer) {\n var labels = g.selectAll('text')\n .data(args.categorical_variables)\n .enter()\n .append('text');\n\n labels\n .attr('x', function(d) {\n return args.scales.X(d) + args.scales.X.bandwidth() / 2 + (args.buffer) * args.bar_outer_padding_percentage + (additional_buffer / 2);\n })\n .attr('y', mg_get_plot_bottom(args))\n .attr('dy', '.35em')\n .attr('text-anchor', 'middle')\n .text(String);\n\n if (args.truncate_x_labels) {\n labels.each(function(d, idx) {\n var elem = this, width = args.scales.X.bandwidth();\n truncate_text(elem, d, width);\n });\n }\n mg_rotate_labels(labels, args.rotate_x_labels);\n}\n\nMG.x_axis_categorical = x_axis_categorical;\n\nfunction mg_point_add_color_scale(args) {\n var color_domain, color_range;\n\n if (args.color_accessor !== null) {\n color_domain = mg_get_color_domain(args);\n color_range = mg_get_color_range(args);\n\n if (args.color_type === 'number') {\n args.scales.color = d3.scaleLinear()\n .domain(color_domain)\n .range(color_range)\n .clamp(true);\n } else {\n args.scales.color = args.color_range !== null\n ? d3.scaleOrdinal().range(color_range)\n : (color_domain.length > 10\n ? d3.scaleOrdinal(d3.schemeCategory20)\n : d3.scaleOrdinal(d3.schemeCategory10));\n\n args.scales.color.domain(color_domain);\n }\n mg_add_scale_function(args, 'color', 'color', args.color_accessor);\n }\n}\n\nfunction mg_get_color_domain(args) {\n var color_domain;\n if (args.color_domain === null) {\n if (args.color_type === 'number') {\n color_domain = d3.extent(args.data[0], function(d) {\n return d[args.color_accessor];\n });\n } else if (args.color_type === 'category') {\n color_domain = d3.set(args.data[0]\n .map(function(d) {\n return d[args.color_accessor];\n }))\n .values();\n\n color_domain.sort();\n }\n } else {\n color_domain = args.color_domain;\n }\n return color_domain;\n}\n\nfunction mg_get_color_range(args) {\n var color_range;\n if (args.color_range === null) {\n if (args.color_type === 'number') {\n color_range = ['blue', 'red'];\n } else {\n color_range = null;\n }\n } else {\n color_range = args.color_range;\n }\n return color_range;\n}\n\nfunction mg_point_add_size_scale(args) {\n var min_size, max_size, size_domain, size_range;\n if (args.size_accessor !== null) {\n size_domain = mg_get_size_domain(args);\n size_range = mg_get_size_range(args);\n\n args.scales.size = d3.scaleLinear()\n .domain(size_domain)\n .range(size_range)\n .clamp(true);\n\n mg_add_scale_function(args, 'size', 'size', args.size_accessor);\n }\n}\n\nfunction mg_get_size_domain(args) {\n return (args.size_domain === null)\n ? d3.extent(args.data[0], function(d) { return d[args.size_accessor]; })\n : args.size_domain;\n}\n\nfunction mg_get_size_range(args) {\n var size_range;\n if (args.size_range === null) {\n size_range = [1, 5];\n } else {\n size_range = args.size_range;\n }\n return size_range;\n}\n\nfunction mg_add_x_label(g, args) {\n if (args.x_label) {\n g.append('text')\n .attr('class', 'label')\n .attr('x', function() {\n return mg_get_plot_left(args) + (mg_get_plot_right(args) - mg_get_plot_left(args)) / 2;\n })\n .attr('dx', args.x_label_nudge_x != null ? args.x_label_nudge_x : 0)\n .attr('y', function() {\n var xAxisTextElement = d3.select(args.target)\n .select('.mg-x-axis text').node().getBoundingClientRect();\n return mg_get_bottom(args) + args.xax_tick_length * (7 / 3) + xAxisTextElement.height * 0.8 + 10;\n })\n .attr('dy', '.5em')\n .attr('text-anchor', 'middle')\n .text(function(d) {\n return args.x_label;\n });\n }\n}\n\nfunction mg_default_bar_xax_format(args) {\n return function(d) {\n if (d < 1.0 && d > -1.0 && d !== 0) {\n // don't scale tiny values\n return args.xax_units + d.toFixed(args.decimals);\n } else {\n var pf = d3.format(',.0f');\n return args.xax_units + pf(d);\n }\n };\n}\n\nfunction mg_get_time_frame(diff) {\n // diff should be (max_x - min_x) / 1000, in other words, the difference in seconds.\n var time_frame;\n if (mg_milisec_diff(diff)) {\n time_frame = 'millis';\n } else if (mg_sec_diff(diff)) {\n time_frame = 'seconds';\n } else if (mg_day_diff(diff)) {\n time_frame = 'less-than-a-day';\n } else if (mg_four_days(diff)) {\n time_frame = 'four-days';\n } else if (mg_many_days(diff)) { // a handful of months?\n time_frame = 'many-days';\n } else if (mg_many_months(diff)) {\n time_frame = 'many-months';\n } else if (mg_years(diff)) {\n time_frame = 'years';\n } else {\n time_frame = 'default';\n }\n return time_frame;\n}\n\nfunction mg_milisec_diff(diff) {\n return diff < 10;\n}\n\nfunction mg_sec_diff(diff) {\n return diff < 60;\n}\n\nfunction mg_day_diff(diff) {\n return diff / (60 * 60) <= 24;\n}\n\nfunction mg_four_days(diff) {\n return diff / (60 * 60) <= 24 * 4;\n}\n\nfunction mg_many_days(diff) {\n return diff / (60 * 60 * 24) <= 93;\n}\n\nfunction mg_many_months(diff) {\n return diff / (60 * 60 * 24) < 365 * 2;\n}\n\nfunction mg_years(diff) {\n return diff / (60 * 60 * 24) >= 365 * 2;\n}\n\nfunction mg_get_time_format(utc, diff) {\n var main_time_format;\n if (mg_milisec_diff(diff)) {\n main_time_format = MG.time_format(utc, '%M:%S.%L');\n } else if (mg_sec_diff(diff)) {\n main_time_format = MG.time_format(utc, '%M:%S');\n } else if (mg_day_diff(diff)) {\n main_time_format = MG.time_format(utc, '%H:%M');\n } else if (mg_four_days(diff)) {\n main_time_format = MG.time_format(utc, '%H:%M');\n } else if (mg_many_days(diff)) {\n main_time_format = MG.time_format(utc, '%b %d');\n } else if (mg_many_months(diff)) {\n main_time_format = MG.time_format(utc, '%b');\n } else {\n main_time_format = MG.time_format(utc, '%Y');\n }\n return main_time_format;\n}\n\nfunction mg_process_time_format(args) {\n var diff;\n var main_time_format;\n var time_frame;\n\n if (args.time_series) {\n diff = (args.processed.max_x - args.processed.min_x) / 1000;\n time_frame = mg_get_time_frame(diff);\n main_time_format = mg_get_time_format(args.utc_time, diff);\n }\n\n args.processed.main_x_time_format = main_time_format;\n args.processed.x_time_frame = time_frame;\n}\n\nfunction mg_default_xax_format(args) {\n if (args.xax_format) {\n return args.xax_format;\n }\n\n var data = args.processed.original_data || args.data;\n var flattened = mg_flatten_array(data)[0];\n var test_point_x = flattened[args.processed.original_x_accessor || args.x_accessor];\n if (test_point_x === undefined) {\n test_point_x = flattened;\n }\n\n return function(d) {\n mg_process_time_format(args);\n\n if (mg_is_date(test_point_x)) {\n return args.processed.main_x_time_format(new Date(d));\n } else if (typeof test_point_x === 'number') {\n var is_float = d % 1 !== 0;\n var pf;\n\n if (is_float) {\n pf = d3.format(',.' + args.decimals + 'f');\n } else if (d < 1000) {\n pf = d3.format(',.0f');\n } else {\n pf = d3.format(',.2s');\n }\n return args.xax_units + pf(d);\n } else {\n return args.xax_units + d;\n }\n };\n}\n\nfunction mg_add_x_ticks(g, args) {\n mg_process_scale_ticks(args, 'x');\n mg_add_x_axis_rim(args, g);\n mg_add_x_axis_tick_lines(args, g);\n}\n\nfunction mg_add_x_axis_rim(args, g) {\n var tick_length = args.processed.x_ticks.length;\n var last_i = args.scales.X.ticks(args.xax_count).length - 1;\n\n if (!args.x_extended_ticks) {\n g.append('line')\n .attr('x1', function() {\n if (args.xax_count === 0) {\n return mg_get_plot_left(args);\n } else if (args.axes_not_compact && args.chart_type !== 'bar') {\n return args.left;\n } else {\n return (args.scales.X(args.scales.X.ticks(args.xax_count)[0])).toFixed(2);\n }\n })\n .attr('x2', function() {\n if (args.xax_count === 0 || (args.axes_not_compact && args.chart_type !== 'bar')) {\n return mg_get_right(args);\n } else {\n return args.scales.X(args.scales.X.ticks(args.xax_count)[last_i]).toFixed(2);\n }\n })\n .attr('y1', args.height - args.bottom)\n .attr('y2', args.height - args.bottom);\n }\n}\n\nfunction mg_add_x_axis_tick_lines(args, g) {\n g.selectAll('.mg-xax-ticks')\n .data(args.processed.x_ticks).enter()\n .append('line')\n .attr('x1', function(d) {\n return args.scales.X(d).toFixed(2); })\n .attr('x2', function(d) {\n return args.scales.X(d).toFixed(2); })\n .attr('y1', args.height - args.bottom)\n .attr('y2', function() {\n return (args.x_extended_ticks) ? args.top : args.height - args.bottom + args.xax_tick_length;\n })\n .attr('class', function() {\n if (args.x_extended_ticks) {\n return 'mg-extended-xax-ticks';\n }\n })\n .classed('mg-xax-ticks', true);\n}\n\nfunction mg_add_x_tick_labels(g, args) {\n mg_add_primary_x_axis_label(args, g);\n mg_add_secondary_x_axis_label(args, g);\n}\n\nfunction mg_add_primary_x_axis_label(args, g) {\n var labels = g.selectAll('.mg-xax-labels')\n .data(args.processed.x_ticks).enter()\n .append('text')\n .attr('x', function(d) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('y', (args.height - args.bottom + args.xax_tick_length * 7 / 3).toFixed(2))\n .attr('dy', '.50em')\n .attr('text-anchor', 'middle');\n\n if (args.time_series && args.european_clock) {\n labels.append('tspan').classed('mg-european-hours', true).text(function(_d, i) {\n var d = new Date(_d);\n if (i === 0) return d3.timeFormat('%H')(d);\n else return '';\n });\n labels.append('tspan').classed('mg-european-minutes-seconds', true).text(function(_d, i) {\n var d = new Date(_d);\n return ':' + args.processed.xax_format(d);\n });\n } else {\n labels.text(function(d) {\n return args.xax_units + args.processed.xax_format(d);\n });\n }\n\n // CHECK TO SEE IF OVERLAP for labels. If so,\n // remove half of them. This is a dirty hack.\n // We will need to figure out a more principled way of doing this.\n if (mg_elements_are_overlapping(labels)) {\n labels.filter(function(d, i) {\n return (i + 1) % 2 === 0;\n }).remove();\n\n var svg = mg_get_svg_child_of(args.target);\n svg.selectAll('.mg-xax-ticks')\n .filter(function(d, i) {\n return (i + 1) % 2 === 0;\n })\n .remove();\n }\n}\n\nfunction mg_add_secondary_x_axis_label(args, g) {\n if (args.time_series && (args.show_years || args.show_secondary_x_label)) {\n var tf = mg_get_yformat_and_secondary_time_function(args);\n mg_add_secondary_x_axis_elements(args, g, tf.timeframe, tf.yformat, tf.secondary);\n }\n}\n\nfunction mg_get_yformat_and_secondary_time_function(args) {\n var tf = {};\n tf.timeframe = args.processed.x_time_frame;\n switch (tf.timeframe) {\n case 'millis':\n case 'seconds':\n tf.secondary = d3.timeDays;\n if (args.european_clock) tf.yformat = MG.time_format(args.utc_time, '%b %d');\n else tf.yformat = MG.time_format(args.utc_time, '%I %p');\n break;\n case 'less-than-a-day':\n tf.secondary = d3.timeDays;\n tf.yformat = MG.time_format(args.utc_time, '%b %d');\n break;\n case 'four-days':\n tf.secondary = d3.timeDays;\n tf.yformat = MG.time_format(args.utc_time, '%b %d');\n break;\n case 'many-days':\n tf.secondary = d3.timeYears;\n tf.yformat = MG.time_format(args.utc_time, '%Y');\n break;\n case 'many-months':\n tf.secondary = d3.timeYears;\n tf.yformat = MG.time_format(args.utc_time, '%Y');\n break;\n default:\n tf.secondary = d3.timeYears;\n tf.yformat = MG.time_format(args.utc_time, '%Y');\n }\n return tf;\n}\n\nfunction mg_add_secondary_x_axis_elements(args, g, time_frame, yformat, secondary_function) {\n var years = secondary_function(args.processed.min_x, args.processed.max_x);\n if (years.length === 0) {\n var first_tick = args.scales.X.ticks(args.xax_count)[0];\n years = [first_tick];\n }\n\n var yg = mg_add_g(g, 'mg-year-marker');\n if (time_frame === 'default' && args.show_year_markers) {\n mg_add_year_marker_line(args, yg, years, yformat);\n }\n if (time_frame != 'years') mg_add_year_marker_text(args, yg, years, yformat);\n}\n\nfunction mg_add_year_marker_line(args, g, years, yformat) {\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('line')\n .attr('x1', function(d) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('x2', function(d) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('y1', mg_get_top(args))\n .attr('y2', mg_get_bottom(args));\n}\n\nfunction mg_add_year_marker_text(args, g, years, yformat) {\n g.selectAll('.mg-year-marker')\n .data(years).enter()\n .append('text')\n .attr('x', function(d, i) {\n return args.scales.X(d).toFixed(2);\n })\n .attr('y', function() {\n var xAxisTextElement = d3.select(args.target)\n .select('.mg-x-axis text').node().getBoundingClientRect();\n return (mg_get_bottom(args) + args.xax_tick_length * 7 / 3) + (xAxisTextElement.height * 0.8);\n })\n .attr('dy', '.50em')\n .attr('text-anchor', 'middle')\n .text(function(d) {\n return yformat(new Date(d));\n });\n}\n\nfunction mg_min_max_x_for_nonbars(mx, args, data) {\n var extent_x = d3.extent(data, function(d) {\n return d[args.x_accessor];\n });\n mx.min = extent_x[0];\n mx.max = extent_x[1];\n}\n\nfunction mg_min_max_x_for_bars(mx, args, data) {\n mx.min = d3.min(data, function(d) {\n var trio = [\n d[args.x_accessor],\n (d[args.baseline_accessor]) ? d[args.baseline_accessor] : 0,\n (d[args.predictor_accessor]) ? d[args.predictor_accessor] : 0\n ];\n return Math.min.apply(null, trio);\n });\n\n if (mx.min > 0) mx.min = 0;\n\n mx.max = d3.max(data, function(d) {\n var trio = [\n d[args.x_accessor],\n (d[args.baseline_accessor]) ? d[args.baseline_accessor] : 0,\n (d[args.predictor_accessor]) ? d[args.predictor_accessor] : 0\n ];\n return Math.max.apply(null, trio);\n });\n return mx;\n}\n\nfunction mg_min_max_x_for_dates(mx) {\n var yesterday = MG.clone(mx.min).setDate(mx.min.getDate() - 1);\n var tomorrow = MG.clone(mx.min).setDate(mx.min.getDate() + 1);\n mx.min = yesterday;\n mx.max = tomorrow;\n}\n\nfunction mg_min_max_x_for_numbers(mx) {\n // TODO do we want to rewrite this?\n mx.min = mx.min - 1;\n mx.max = mx.max + 1;\n}\n\nfunction mg_min_max_x_for_strings(mx) {\n // TODO shouldn't be allowing strings here to be coerced into numbers\n mx.min = Number(mx.min) - 1;\n mx.max = Number(mx.max) + 1;\n}\n\nfunction mg_force_xax_count_to_be_two(args) {\n args.xax_count = 2;\n}\n\nfunction mg_sort_through_data_type_and_set_x_min_max_accordingly(mx, args, data) {\n if (args.chart_type === 'line' || args.chart_type === 'point' || args.chart_type === 'histogram') {\n mg_min_max_x_for_nonbars(mx, args, data);\n\n } else if (args.chart_type === 'bar') {\n mg_min_max_x_for_bars(mx, args, data);\n }\n // if data set is of length 1, expand the range so that we can build the x-axis\n if (mx.min === mx.max && !(args.min_x && args.max_x)) {\n if (mg_is_date(mx.min)) {\n mg_min_max_x_for_dates(mx);\n } else if (typeof min_x === 'number') {\n mg_min_max_x_for_numbers(mx);\n } else if (typeof min_x === 'string') {\n mg_min_max_x_for_strings(mx);\n }\n // force xax_count to be 2\n mg_force_xax_count_to_be_two(args);\n }\n}\n\nfunction mg_select_xax_format(args) {\n var c = args.chart_type;\n if (!args.processed.xax_format) {\n if (args.xax_format) {\n args.processed.xax_format = args.xax_format;\n } else {\n if (c === 'line' || c === 'point' || c === 'histogram') {\n args.processed.xax_format = mg_default_xax_format(args);\n } else if (c === 'bar') {\n args.processed.xax_format = mg_default_bar_xax_format(args);\n }\n }\n }\n}\n\nfunction mg_merge_args_with_defaults(args) {\n var defaults = {\n target: null,\n title: null,\n description: null\n };\n\n if (!args) {\n args = {};\n }\n\n if (!args.processed) {\n args.processed = {};\n }\n\n args = merge_with_defaults(args, defaults);\n return args;\n}\n\nfunction mg_is_time_series(args) {\n var first_elem = mg_flatten_array(args.processed.original_data || args.data)[0];\n args.time_series = mg_is_date(first_elem[args.processed.original_x_accessor || args.x_accessor]);\n}\n\nfunction mg_init_compute_width(args) {\n var svg_width = args.width;\n if (args.full_width) {\n svg_width = get_width(args.target);\n }\n if (args.x_axis_type === 'categorical' && svg_width === null) {\n svg_width = mg_categorical_calculate_height(args, 'x');\n }\n\n args.width = svg_width;\n}\n\nfunction mg_init_compute_height(args) {\n var svg_height = args.height;\n if (args.full_height) {\n svg_height = get_height(args.target);\n }\n if (args.y_axis_type === 'categorical' && svg_height === null) {\n svg_height = mg_categorical_calculate_height(args, 'y');\n }\n\n args.height = svg_height;\n}\n\nfunction mg_remove_svg_if_chart_type_has_changed(svg, args) {\n if ((!svg.selectAll('.mg-main-line').empty() && args.chart_type !== 'line') ||\n (!svg.selectAll('.mg-points').empty() && args.chart_type !== 'point') ||\n (!svg.selectAll('.mg-histogram').empty() && args.chart_type !== 'histogram') ||\n (!svg.selectAll('.mg-barplot').empty() && args.chart_type !== 'bar')\n ) {\n svg.remove();\n }\n}\n\nfunction mg_add_svg_if_it_doesnt_exist(svg, args) {\n if (mg_get_svg_child_of(args.target).empty()) {\n svg = d3.select(args.target)\n .append('svg')\n .classed('linked', args.linked)\n .attr('width', args.width)\n .attr('height', args.height);\n }\n return svg;\n}\n\nfunction mg_add_clip_path_for_plot_area(svg, args) {\n svg.selectAll('.mg-clip-path').remove();\n svg.append('defs')\n .attr('class', 'mg-clip-path')\n .append('clipPath')\n .attr('id', 'mg-plot-window-' + mg_target_ref(args.target))\n .append('svg:rect')\n .attr('x', mg_get_left(args))\n .attr('y', mg_get_top(args))\n .attr('width', args.width - args.left - args.right - args.buffer)\n .attr('height', args.height - args.top - args.bottom - args.buffer + 1);\n}\n\nfunction mg_adjust_width_and_height_if_changed(svg, args) {\n if (args.width !== Number(svg.attr('width'))) {\n svg.attr('width', args.width);\n }\n if (args.height !== Number(svg.attr('height'))) {\n svg.attr('height', args.height);\n }\n}\n\nfunction mg_set_viewbox_for_scaling(svg, args) {\n // we need to reconsider how we handle automatic scaling\n svg.attr('viewBox', '0 0 ' + args.width + ' ' + args.height);\n if (args.full_width || args.full_height) {\n svg.attr('preserveAspectRatio', 'xMinYMin meet');\n }\n}\n\nfunction mg_remove_missing_classes_and_text(svg) {\n // remove missing class\n svg.classed('mg-missing', false);\n\n // remove missing text\n svg.selectAll('.mg-missing-text').remove();\n svg.selectAll('.mg-missing-pane').remove();\n}\n\nfunction mg_remove_outdated_lines(svg, args) {\n // if we're updating an existing chart and we have fewer lines than\n // before, remove the outdated lines, e.g. if we had 3 lines, and we're calling\n // data_graphic() on the same target with 2 lines, remove the 3rd line\n\n var i = 0;\n\n if (svg.selectAll('.mg-main-line').nodes().length >= args.data.length) {\n // now, the thing is we can't just remove, say, line3 if we have a custom\n // line-color map, instead, see which are the lines to be removed, and delete those\n if (args.custom_line_color_map.length > 0) {\n var array_full_series = function(len) {\n var arr = new Array(len);\n for (var i = 0; i < arr.length; i++) { arr[i] = i + 1; }\n return arr;\n };\n\n // get an array of lines ids to remove\n var lines_to_remove = arr_diff(\n array_full_series(args.max_data_size),\n args.custom_line_color_map);\n\n for (i = 0; i < lines_to_remove.length; i++) {\n svg.selectAll('.mg-main-line.mg-line' + lines_to_remove[i] + '-color')\n .remove();\n }\n } else {\n // if we don't have a custom line-color map, just remove the lines from the end\n var num_of_new = args.data.length;\n var num_of_existing = (svg.selectAll('.mg-main-line').nodes()) ? svg.selectAll('.mg-main-line').nodes().length : 0;\n\n for (i = num_of_existing; i > num_of_new; i--) {\n svg.selectAll('.mg-main-line.mg-line' + i + '-color')\n .remove();\n }\n }\n }\n}\n\nfunction mg_raise_container_error(container, args) {\n if (container.empty()) {\n console.warn('The specified target element \"' + args.target + '\" could not be found in the page. The chart will not be rendered.');\n return;\n }\n}\n\nfunction categoricalInitialization(args, ns) {\n var which = ns === 'x' ? args.width : args.height;\n mg_categorical_count_number_of_groups(args, ns);\n mg_categorical_count_number_of_lanes(args, ns);\n mg_categorical_calculate_group_length(args, ns, which);\n if (which) mg_categorical_calculate_bar_thickness(args, ns);\n}\n\n\nfunction mg_categorical_count_number_of_groups(args, ns) {\n var accessor_string = ns + 'group_accessor';\n var accessor = args[accessor_string];\n args.categorical_groups = [];\n if (accessor) {\n var data = args.data[0];\n args.categorical_groups = d3.set(data.map(function(d) {\n return d[accessor] })).values();\n }\n}\n\nfunction mg_categorical_count_number_of_lanes(args, ns) {\n var accessor_string = ns + 'group_accessor';\n var groupAccessor = args[accessor_string];\n\n args.total_bars = args.data[0].length;\n if (groupAccessor) {\n var group_bars = count_array_elements(pluck(args.data[0], groupAccessor));\n group_bars = d3.max(Object.keys(group_bars).map(function(d) {\n return group_bars[d] }));\n args.bars_per_group = group_bars;\n } else {\n args.bars_per_group = args.data[0].length;\n }\n}\n\nfunction mg_categorical_calculate_group_length(args, ns, which) {\n var groupHeight = ns + 'group_height';\n if (which) {\n var gh = ns === 'y' ?\n (args.height - args.top - args.bottom - args.buffer * 2) / (args.categorical_groups.length || 1) :\n (args.width - args.left - args.right - args.buffer * 2) / (args.categorical_groups.length || 1);\n\n args[groupHeight] = gh;\n } else {\n var step = (1 + args[ns + '_padding_percentage']) * args.bar_thickness;\n args[groupHeight] = args.bars_per_group * step + args[ns + '_outer_padding_percentage'] * 2 * step; //args.bar_thickness + (((args.bars_per_group-1) * args.bar_thickness) * (args.bar_padding_percentage + args.bar_outer_padding_percentage*2));\n }\n}\n\nfunction mg_categorical_calculate_bar_thickness(args, ns) {\n // take one group height.\n var step = (args[ns + 'group_height']) / (args.bars_per_group + args[ns + '_outer_padding_percentage']);\n args.bar_thickness = step - (step * args[ns + '_padding_percentage']);\n}\n\nfunction mg_categorical_calculate_height(args, ns) {\n var groupContribution = (args[ns + 'group_height']) * (args.categorical_groups.length || 1);\n\n var marginContribution = ns === 'y'\n ? args.top + args.bottom + args.buffer * 2\n : args.left + args.right + args.buffer * 2;\n\n return groupContribution + marginContribution +\n (args.categorical_groups.length * args[ns + 'group_height'] * (args[ns + 'group_padding_percentage'] + args[ns + 'group_outer_padding_percentage']));\n}\n\nfunction mg_barchart_extrapolate_group_and_thickness_from_height(args) {\n // we need to set args.bar_thickness, group_height\n}\n\nfunction init(args) {\n 'use strict';\n args = arguments[0];\n args = mg_merge_args_with_defaults(args);\n // If you pass in a dom element for args.target, the expectation\n // of a string elsewhere will break.\n var container = d3.select(args.target);\n mg_raise_container_error(container, args);\n\n var svg = container.selectAll('svg');\n\n // some things that will need to be calculated if we have a categorical axis.\n if (args.y_axis_type === 'categorical') { categoricalInitialization(args, 'y'); }\n if (args.x_axis_type === 'categorical') { categoricalInitialization(args, 'x'); }\n\n mg_is_time_series(args);\n mg_init_compute_width(args);\n mg_init_compute_height(args);\n\n mg_remove_svg_if_chart_type_has_changed(svg, args);\n svg = mg_add_svg_if_it_doesnt_exist(svg, args);\n\n mg_add_clip_path_for_plot_area(svg, args);\n mg_adjust_width_and_height_if_changed(svg, args);\n mg_set_viewbox_for_scaling(svg, args);\n mg_remove_missing_classes_and_text(svg);\n chart_title(args);\n mg_remove_outdated_lines(svg, args);\n\n return this;\n}\n\nMG.init = init;\n\nfunction mg_return_label(d) {\n return d.label;\n}\n\nfunction mg_remove_existing_markers(svg) {\n svg.selectAll('.mg-markers').remove();\n svg.selectAll('.mg-baselines').remove();\n}\n\nfunction mg_in_range(args) {\n return function(d) {\n return (args.scales.X(d[args.x_accessor]) >= mg_get_plot_left(args)) && (args.scales.X(d[args.x_accessor]) <= mg_get_plot_right(args));\n };\n}\n\nfunction mg_x_position(args) {\n return function(d) {\n return args.scales.X(d[args.x_accessor]);\n };\n}\n\nfunction mg_x_position_fixed(args) {\n var _mg_x_pos = mg_x_position(args);\n return function(d) {\n return _mg_x_pos(d).toFixed(2);\n };\n}\n\nfunction mg_y_position_fixed(args) {\n var _mg_y_pos = args.scales.Y;\n return function(d) {\n return _mg_y_pos(d.value).toFixed(2);\n };\n}\n\nfunction mg_place_annotations(checker, class_name, args, svg, line_fcn, text_fcn) {\n var g;\n if (checker) {\n g = svg.append('g').attr('class', class_name);\n line_fcn(g, args);\n text_fcn(g, args);\n }\n}\n\nfunction mg_place_markers(args, svg) {\n mg_place_annotations(args.markers, 'mg-markers', args, svg, mg_place_marker_lines, mg_place_marker_text);\n}\n\nfunction mg_place_baselines(args, svg) {\n mg_place_annotations(args.baselines, 'mg-baselines', args, svg, mg_place_baseline_lines, mg_place_baseline_text);\n}\n\nfunction mg_place_marker_lines(gm, args) {\n var x_pos_fixed = mg_x_position_fixed(args);\n gm.selectAll('.mg-markers')\n .data(args.markers.filter(mg_in_range(args)))\n .enter()\n .append('line')\n .attr('x1', x_pos_fixed)\n .attr('x2', x_pos_fixed)\n .attr('y1', args.top)\n .attr('y2', mg_get_plot_bottom(args))\n .attr('class', function(d) {\n return d.lineclass;\n })\n .attr('stroke-dasharray', '3,1');\n}\n\nfunction mg_place_marker_text(gm, args) {\n gm.selectAll('.mg-markers')\n .data(args.markers.filter(mg_in_range(args)))\n .enter()\n .append('text')\n .attr('class', function(d) {\n return d.textclass || ''; })\n .classed('mg-marker-text', true)\n .attr('x', mg_x_position(args))\n .attr('y', args.x_axis_position === 'bottom' ? mg_get_top(args) * 0.95 : mg_get_bottom(args) + args.buffer)\n .attr('text-anchor', 'middle')\n .text(mg_return_label)\n .each(function(d) {\n if (d.click) {\n d3.select(this).style('cursor', 'pointer')\n .on('click', d.click);\n }\n });\n\n mg_prevent_horizontal_overlap(gm.selectAll('.mg-marker-text').nodes(), args);\n}\n\nfunction mg_place_baseline_lines(gb, args) {\n var y_pos = mg_y_position_fixed(args);\n gb.selectAll('.mg-baselines')\n .data(args.baselines)\n .enter().append('line')\n .attr('x1', mg_get_plot_left(args))\n .attr('x2', mg_get_plot_right(args))\n .attr('y1', y_pos)\n .attr('y2', y_pos);\n}\n\nfunction mg_place_baseline_text(gb, args) {\n var y_pos = mg_y_position_fixed(args);\n gb.selectAll('.mg-baselines')\n .data(args.baselines)\n .enter().append('text')\n .attr('x', mg_get_plot_right(args))\n .attr('y', y_pos)\n .attr('dy', -3)\n .attr('text-anchor', 'end')\n .text(mg_return_label);\n}\n\nfunction markers(args) {\n 'use strict';\n\n var svg = mg_get_svg_child_of(args.target);\n mg_remove_existing_markers(svg);\n mg_place_markers(args, svg);\n mg_place_baselines(args, svg);\n return this;\n}\n\nMG.markers = markers;\n\nfunction mg_clear_mouseover_container(svg) {\n svg.selectAll('.mg-active-datapoint-container').selectAll('*').remove();\n}\n\nfunction mg_setup_mouseover_container(svg, args) {\n svg.select('.mg-active-datapoint').remove();\n var text_anchor = args.mouseover_align === 'right'\n ? 'end'\n : (args.mouseover_align === 'left'\n ? 'start'\n : 'middle');\n\n var mouseover_x = (args.mouseover_align === 'right')\n ? mg_get_plot_right(args)\n : (args.mouseover_align === 'left'\n ? mg_get_plot_left(args)\n : (args.width - args.left - args.right) / 2 + args.left);\n\n var active_datapoint = svg.select('.mg-active-datapoint-container')\n .append('text')\n .attr('class', 'mg-active-datapoint')\n .attr('xml:space', 'preserve')\n .attr('text-anchor', text_anchor);\n\n // set the rollover text's position; if we have markers on two lines,\n // nudge up the rollover text a bit\n var active_datapoint_y_nudge = 0.75;\n\n var y_position = (args.x_axis_position === 'bottom')\n ? mg_get_top(args) * active_datapoint_y_nudge\n : mg_get_bottom(args) + args.buffer * 3;\n\n if (args.markers) {\n var yPos;\n svg.selectAll('.mg-marker-text')\n .each(function() {\n if (!yPos) {\n yPos = d3.select(this).attr('y');\n } else if (yPos !== d3.select(this).attr('y')) {\n active_datapoint_y_nudge = 0.56;\n }\n });\n }\n\n active_datapoint\n .attr('transform', 'translate(' + mouseover_x + ',' + (y_position) + ')');\n}\n\nfunction mg_mouseover_tspan(svg, text) {\n var tspan = '';\n var cl = null;\n if (arguments.length === 3) cl = arguments[2];\n tspan = svg.append('tspan').text(text);\n if (cl !== null) tspan.classed(cl, true);\n this.tspan = tspan;\n\n this.bold = function() {\n this.tspan.attr('font-weight', 'bold');\n return this;\n };\n\n this.font_size = function(pts) {\n this.tspan.attr('font-size', pts);\n return this;\n }\n\n this.x = function(x) {\n this.tspan.attr('x', x);\n return this;\n };\n this.y = function(y) {\n this.tspan.attr('y', y);\n return this;\n };\n this.elem = function() {\n return this.tspan;\n };\n return this;\n}\n\nfunction mg_reset_text_container(svg) {\n var textContainer = svg.select('.mg-active-datapoint');\n textContainer\n .selectAll('*')\n .remove();\n return textContainer;\n}\n\nfunction mg_mouseover_row(row_number, container, rargs) {\n var lineHeight = 1.1;\n this.rargs = rargs;\n\n var rrr = container.append('tspan')\n .attr('x', 0)\n .attr('y', (row_number * lineHeight) + 'em');\n\n this.text = function(text) {\n return mg_mouseover_tspan(rrr, text);\n }\n return this;\n}\n\nfunction mg_mouseover_text(args, rargs) {\n var lineHeight = 1.1;\n this.row_number = 0;\n this.rargs = rargs;\n mg_setup_mouseover_container(rargs.svg, args);\n\n this.text_container = mg_reset_text_container(rargs.svg);\n\n this.mouseover_row = function(rargs) {\n var that = this;\n var rrr = mg_mouseover_row(that.row_number, that.text_container, rargs);\n that.row_number += 1;\n return rrr;\n }\n\n return this;\n}\n\nfunction MG_WindowResizeTracker() {\n var targets = [];\n\n var Observer;\n if (typeof MutationObserver !== \"undefined\") {\n Observer = MutationObserver;\n } else if (typeof WebKitMutationObserver !== \"undefined\") {\n Observer = WebKitMutationObserver;\n }\n\n function window_listener() {\n targets.forEach(function(target) {\n var svg = d3.select(target).select('svg');\n\n // skip if svg is not visible\n if (!svg.empty() && (svg.node().parentNode.offsetWidth > 0 || svg.node().parentNode.offsetHeight > 0)) {\n var aspect = svg.attr('width') !== 0 ? (svg.attr('height') / svg.attr('width')) : 0;\n\n var newWidth = get_width(target);\n\n svg.attr('width', newWidth);\n svg.attr('height', aspect * newWidth);\n }\n });\n }\n\n function remove_target(target) {\n var index = targets.indexOf(target);\n if (index !== -1) {\n targets.splice(index, 1);\n }\n\n if (targets.length === 0) {\n window.removeEventListener('resize', window_listener, true);\n }\n }\n\n return {\n add_target: function(target) {\n if (targets.length === 0) {\n window.addEventListener('resize', window_listener, true);\n }\n\n if (targets.indexOf(target) === -1) {\n targets.push(target);\n\n if (Observer) {\n var observer = new Observer(function(mutations) {\n var targetNode = d3.select(target).node();\n\n if (!targetNode || mutations.some(\n function(mutation) {\n for (var i = 0; i < mutation.removedNodes.length; i++) {\n if (mutation.removedNodes[i] === targetNode) {\n return true;\n }\n }\n })) {\n observer.disconnect();\n remove_target(target);\n }\n });\n\n observer.observe(d3.select(target).node().parentNode, { childList: true });\n }\n }\n }\n };\n}\n\nvar mg_window_resize_tracker = new MG_WindowResizeTracker();\n\nfunction mg_window_listeners(args) {\n mg_if_aspect_ratio_resize_svg(args);\n}\n\nfunction mg_if_aspect_ratio_resize_svg(args) {\n // have we asked the svg to fill a div, if so resize with div\n if (args.full_width || args.full_height) {\n mg_window_resize_tracker.add_target(args.target);\n }\n}\n\nif (mg_jquery_exists()) {\n /*!\n * Bootstrap v3.3.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n /*!\n * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=c3834cc5b59ef727da53)\n * Config saved to config.json and https://gist.github.com/c3834cc5b59ef727da53\n */\n\n /* ========================================================================\n * Bootstrap: dropdown.js v3.3.1\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n +function ($) {\n 'use strict';\n\n if(typeof $().dropdown == 'function')\n return true;\n\n // DROPDOWN CLASS DEFINITION\n // =========================\n\n var backdrop = '.dropdown-backdrop';\n var toggle = '[data-toggle=\"dropdown\"]';\n var Dropdown = function (element) {\n $(element).on('click.bs.dropdown', this.toggle);\n };\n\n Dropdown.VERSION = '3.3.1';\n\n Dropdown.prototype.toggle = function (e) {\n var $this = $(this);\n\n if ($this.is('.disabled, :disabled')) return;\n\n var $parent = getParent($this);\n var isActive = $parent.hasClass('open');\n\n clearMenus();\n\n if (!isActive) {\n if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n // if mobile we use a backdrop because click events don't delegate\n $('
',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n container: false,\n viewport: {\n selector: 'body',\n padding: 0\n }\n }\n\n Tooltip.prototype.init = function (type, element, options) {\n this.enabled = true\n this.type = type\n this.$element = $(element)\n this.options = this.getOptions(options)\n this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n this.inState = { click: false, hover: false, focus: false }\n\n if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n }\n\n var triggers = this.options.trigger.split(' ')\n\n for (var i = triggers.length; i--;) {\n var trigger = triggers[i]\n\n if (trigger == 'click') {\n this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n } else if (trigger != 'manual') {\n var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'\n var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n }\n }\n\n this.options.selector ?\n (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n this.fixTitle()\n }\n\n Tooltip.prototype.getDefaults = function () {\n return Tooltip.DEFAULTS\n }\n\n Tooltip.prototype.getOptions = function (options) {\n options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n if (options.delay && typeof options.delay == 'number') {\n options.delay = {\n show: options.delay,\n hide: options.delay\n }\n }\n\n return options\n }\n\n Tooltip.prototype.getDelegateOptions = function () {\n var options = {}\n var defaults = this.getDefaults()\n\n this._options && $.each(this._options, function (key, value) {\n if (defaults[key] != value) options[key] = value\n })\n\n return options\n }\n\n Tooltip.prototype.enter = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n }\n\n if (self.tip().hasClass('in') || self.hoverState == 'in') {\n self.hoverState = 'in'\n return\n }\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'in'\n\n if (!self.options.delay || !self.options.delay.show) return self.show()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'in') self.show()\n }, self.options.delay.show)\n }\n\n Tooltip.prototype.isInStateTrue = function () {\n for (var key in this.inState) {\n if (this.inState[key]) return true\n }\n\n return false\n }\n\n Tooltip.prototype.leave = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n }\n\n if (self.isInStateTrue()) return\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'out'\n\n if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'out') self.hide()\n }, self.options.delay.hide)\n }\n\n Tooltip.prototype.show = function () {\n var e = $.Event('show.bs.' + this.type)\n\n if (this.hasContent() && this.enabled) {\n this.$element.trigger(e)\n\n var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n if (e.isDefaultPrevented() || !inDom) return\n var that = this\n\n var $tip = this.tip()\n\n var tipId = this.getUID(this.type)\n\n this.setContent()\n $tip.attr('id', tipId)\n this.$element.attr('aria-describedby', tipId)\n\n if (this.options.animation) $tip.addClass('fade')\n\n var placement = typeof this.options.placement == 'function' ?\n this.options.placement.call(this, $tip[0], this.$element[0]) :\n this.options.placement\n\n var autoToken = /\\s?auto?\\s?/i\n var autoPlace = autoToken.test(placement)\n if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n $tip\n .detach()\n .css({ top: 0, left: 0, display: 'block' })\n .addClass(placement)\n .data('bs.' + this.type, this)\n\n this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n this.$element.trigger('inserted.bs.' + this.type)\n\n var pos = this.getPosition()\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (autoPlace) {\n var orgPlacement = placement\n var viewportDim = this.getPosition(this.$viewport)\n\n placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :\n placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :\n placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :\n placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :\n placement\n\n $tip\n .removeClass(orgPlacement)\n .addClass(placement)\n }\n\n var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n this.applyPlacement(calculatedOffset, placement)\n\n var complete = function () {\n var prevHoverState = that.hoverState\n that.$element.trigger('shown.bs.' + that.type)\n that.hoverState = null\n\n if (prevHoverState == 'out') that.leave(that)\n }\n\n $.support.transition && this.$tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n }\n }\n\n Tooltip.prototype.applyPlacement = function (offset, placement) {\n var $tip = this.tip()\n var width = $tip[0].offsetWidth\n var height = $tip[0].offsetHeight\n\n // manually read margins because getBoundingClientRect includes difference\n var marginTop = parseInt($tip.css('margin-top'), 10)\n var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n // we must check for NaN for ie 8/9\n if (isNaN(marginTop)) marginTop = 0\n if (isNaN(marginLeft)) marginLeft = 0\n\n offset.top += marginTop\n offset.left += marginLeft\n\n // $.fn.offset doesn't round pixel values\n // so we use setOffset directly with our own function B-0\n $.offset.setOffset($tip[0], $.extend({\n using: function (props) {\n $tip.css({\n top: Math.round(props.top),\n left: Math.round(props.left)\n })\n }\n }, offset), 0)\n\n $tip.addClass('in')\n\n // check to see if placing tip in new offset caused the tip to resize itself\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (placement == 'top' && actualHeight != height) {\n offset.top = offset.top + height - actualHeight\n }\n\n var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n if (delta.left) offset.left += delta.left\n else offset.top += delta.top\n\n var isVertical = /top|bottom/.test(placement)\n var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n $tip.offset(offset)\n this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n }\n\n Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n this.arrow()\n .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n .css(isVertical ? 'top' : 'left', '')\n }\n\n Tooltip.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n\n $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n $tip.removeClass('fade in top bottom left right')\n }\n\n Tooltip.prototype.hide = function (callback) {\n var that = this\n var $tip = $(this.$tip)\n var e = $.Event('hide.bs.' + this.type)\n\n function complete() {\n if (that.hoverState != 'in') $tip.detach()\n that.$element\n .removeAttr('aria-describedby')\n .trigger('hidden.bs.' + that.type)\n callback && callback()\n }\n\n this.$element.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n $tip.removeClass('in')\n\n $.support.transition && $tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n\n this.hoverState = null\n\n return this\n }\n\n Tooltip.prototype.fixTitle = function () {\n var $e = this.$element\n if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n }\n }\n\n Tooltip.prototype.hasContent = function () {\n return this.getTitle()\n }\n\n Tooltip.prototype.getPosition = function ($element) {\n $element = $element || this.$element\n\n var el = $element[0]\n var isBody = el.tagName == 'BODY'\n\n var elRect = el.getBoundingClientRect()\n if (elRect.width == null) {\n // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n }\n var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()\n var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n return $.extend({}, elRect, scroll, outerDims, elOffset)\n }\n\n Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n }\n\n Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n var delta = { top: 0, left: 0 }\n if (!this.$viewport) return delta\n\n var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n var viewportDimensions = this.getPosition(this.$viewport)\n\n if (/right|left/.test(placement)) {\n var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll\n var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n if (topEdgeOffset < viewportDimensions.top) { // top overflow\n delta.top = viewportDimensions.top - topEdgeOffset\n } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n }\n } else {\n var leftEdgeOffset = pos.left - viewportPadding\n var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n delta.left = viewportDimensions.left - leftEdgeOffset\n } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n }\n }\n\n return delta\n }\n\n Tooltip.prototype.getTitle = function () {\n var title\n var $e = this.$element\n var o = this.options\n\n title = $e.attr('data-original-title')\n || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)\n\n return title\n }\n\n Tooltip.prototype.getUID = function (prefix) {\n do prefix += ~~(Math.random() * 1000000)\n while (document.getElementById(prefix))\n return prefix\n }\n\n Tooltip.prototype.tip = function () {\n if (!this.$tip) {\n this.$tip = $(this.options.template)\n if (this.$tip.length != 1) {\n throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n }\n }\n return this.$tip\n }\n\n Tooltip.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n }\n\n Tooltip.prototype.enable = function () {\n this.enabled = true\n }\n\n Tooltip.prototype.disable = function () {\n this.enabled = false\n }\n\n Tooltip.prototype.toggleEnabled = function () {\n this.enabled = !this.enabled\n }\n\n Tooltip.prototype.toggle = function (e) {\n var self = this\n if (e) {\n self = $(e.currentTarget).data('bs.' + this.type)\n if (!self) {\n self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n $(e.currentTarget).data('bs.' + this.type, self)\n }\n }\n\n if (e) {\n self.inState.click = !self.inState.click\n if (self.isInStateTrue()) self.enter(self)\n else self.leave(self)\n } else {\n self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n }\n }\n\n Tooltip.prototype.destroy = function () {\n var that = this\n clearTimeout(this.timeout)\n this.hide(function () {\n that.$element.off('.' + that.type).removeData('bs.' + that.type)\n if (that.$tip) {\n that.$tip.detach()\n }\n that.$tip = null\n that.$arrow = null\n that.$viewport = null\n })\n }\n\n\n // TOOLTIP PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.tooltip')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.tooltip\n\n $.fn.tooltip = Plugin\n $.fn.tooltip.Constructor = Tooltip\n\n\n // TOOLTIP NO CONFLICT\n // ===================\n\n $.fn.tooltip.noConflict = function () {\n $.fn.tooltip = old\n return this\n }\n\n }(jQuery);\n\n\n /* ========================================================================\n * Bootstrap: popover.js v3.3.5\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n +function ($) {\n 'use strict';\n\n // POPOVER PUBLIC CLASS DEFINITION\n // ===============================\n\n var Popover = function (element, options) {\n this.init('popover', element, options)\n }\n\n if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n Popover.VERSION = '3.3.5'\n\n Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '
'\n })\n\n\n // NOTE: POPOVER EXTENDS tooltip.js\n // ================================\n\n Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n Popover.prototype.constructor = Popover\n\n Popover.prototype.getDefaults = function () {\n return Popover.DEFAULTS\n }\n\n Popover.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n var content = this.getContent()\n\n $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n ](content)\n\n $tip.removeClass('fade top bottom left right in')\n\n // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n // this manually by checking the contents.\n if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n }\n\n Popover.prototype.hasContent = function () {\n return this.getTitle() || this.getContent()\n }\n\n Popover.prototype.getContent = function () {\n var $e = this.$element\n var o = this.options\n\n return $e.attr('data-content')\n || (typeof o.content == 'function' ?\n o.content.call($e[0]) :\n o.content)\n }\n\n Popover.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n }\n\n\n // POPOVER PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.popover')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.popover\n\n $.fn.popover = Plugin\n $.fn.popover.Constructor = Popover\n\n\n // POPOVER NO CONFLICT\n // ===================\n\n $.fn.popover.noConflict = function () {\n $.fn.popover = old\n return this\n }\n\n }(jQuery);\n}\n\nfunction chart_title(args) {\n 'use strict';\n\n var svg = mg_get_svg_child_of(args.target);\n\n //remove the current title if it exists\n svg.select('.mg-header').remove();\n\n if (args.target && args.title) {\n var chartTitle = svg.insert('text')\n .attr('class', 'mg-header')\n .attr('x', args.center_title_full_width ? args.width /2 : (args.width + args.left - args.right) / 2)\n .attr('y', args.title_y_position)\n .attr('text-anchor', 'middle')\n .attr('dy', '0.55em');\n\n //show the title\n chartTitle.append('tspan')\n .attr('class', 'mg-chart-title')\n .text(args.title);\n\n //show and activate the description icon if we have a description\n if (args.show_tooltips && args.description && mg_jquery_exists()) {\n chartTitle.append('tspan')\n .attr('class', 'mg-chart-description')\n .attr('dx', '0.3em')\n .text('\\uf059');\n\n //now that the title is an svg text element, we'll have to trigger\n //mouseenter, mouseleave events manually for the popover to work properly\n var $chartTitle = $(chartTitle.node());\n $chartTitle.popover({\n html: true,\n animation: false,\n placement: 'top',\n content: args.description,\n container: args.target,\n trigger: 'manual',\n template: '
').insertAfter($(this)).on('click', clearMenus);\n }\n\n var relatedTarget = { relatedTarget: this };\n $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget));\n\n if (e.isDefaultPrevented()) return;\n\n $this\n .trigger('focus')\n .attr('aria-expanded', 'true');\n\n $parent\n .toggleClass('open')\n .trigger('shown.bs.dropdown', relatedTarget);\n }\n\n return false;\n };\n\n Dropdown.prototype.keydown = function (e) {\n if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return;\n\n var $this = $(this);\n\n e.preventDefault();\n e.stopPropagation();\n\n if ($this.is('.disabled, :disabled')) return;\n\n var $parent = getParent($this);\n var isActive = $parent.hasClass('open');\n\n if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {\n if (e.which == 27) $parent.find(toggle).trigger('focus');\n return $this.trigger('click');\n }\n\n var desc = ' li:not(.divider):visible a';\n var $items = $parent.find('[role=\"menu\"]' + desc + ', [role=\"listbox\"]' + desc);\n\n if (!$items.length) return;\n\n var index = $items.index(e.target);\n\n if (e.which == 38 && index > 0) index--; // up\n if (e.which == 40 && index < $items.length - 1) index++; // down\n if (!~index) index = 0;\n\n $items.eq(index).trigger('focus');\n };\n\n function clearMenus(e) {\n if (e && e.which === 3) return;\n $(backdrop).remove();\n $(toggle).each(function () {\n var $this = $(this);\n var $parent = getParent($this);\n var relatedTarget = { relatedTarget: this };\n\n if (!$parent.hasClass('open')) return;\n\n $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget));\n\n if (e.isDefaultPrevented()) return;\n\n $this.attr('aria-expanded', 'false');\n $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget);\n });\n }\n\n function getParent($this) {\n var selector = $this.attr('data-target');\n\n if (!selector) {\n selector = $this.attr('href');\n selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, ''); // strip for ie7\n }\n\n var $parent = selector && $(selector);\n\n return $parent && $parent.length ? $parent : $this.parent();\n }\n\n\n // DROPDOWN PLUGIN DEFINITION\n // ==========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this);\n var data = $this.data('bs.dropdown');\n\n if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)));\n if (typeof option == 'string') data[option].call($this);\n });\n }\n\n var old = $.fn.dropdown;\n\n $.fn.dropdown = Plugin;\n $.fn.dropdown.Constructor = Dropdown;\n\n\n // DROPDOWN NO CONFLICT\n // ====================\n\n $.fn.dropdown.noConflict = function () {\n $.fn.dropdown = old;\n return this;\n };\n\n\n // APPLY TO STANDARD DROPDOWN ELEMENTS\n // ===================================\n\n $(document)\n .on('click.bs.dropdown.data-api', clearMenus)\n .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation(); })\n .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n .on('keydown.bs.dropdown.data-api', '[role=\"menu\"]', Dropdown.prototype.keydown)\n .on('keydown.bs.dropdown.data-api', '[role=\"listbox\"]', Dropdown.prototype.keydown);\n\n }(jQuery);\n}\n\nMG.button_layout = function(target) {\n 'use strict';\n this.target = target;\n this.feature_set = {};\n this.public_name = {};\n this.sorters = {};\n this.manual = [];\n this.manual_map = {};\n this.manual_callback = {};\n\n this._strip_punctuation = function(s) {\n var punctuationless = s.replace(/[^a-zA-Z0-9 _]+/g, '');\n var finalString = punctuationless.replace(/ +?/g, '');\n return finalString;\n };\n\n this.data = function(data) {\n this._data = data;\n return this;\n };\n\n this.manual_button = function(feature, feature_set, callback) {\n this.feature_set[feature] = feature_set;\n this.manual_map[this._strip_punctuation(feature)] = feature;\n this.manual_callback[feature] = callback; // the default is going to be the first feature.\n return this;\n };\n\n this.button = function(feature) {\n if (arguments.length > 1) {\n this.public_name[feature] = arguments[1];\n }\n\n if (arguments.length > 2) {\n this.sorters[feature] = arguments[2];\n }\n\n this.feature_set[feature] = [];\n return this;\n };\n\n this.callback = function(callback) {\n this._callback = callback;\n return this;\n };\n\n this.display = function() {\n var callback = this._callback;\n var manual_callback = this.manual_callback;\n var manual_map = this.manual_map;\n\n var d, f, features, feat;\n features = Object.keys(this.feature_set);\n\n var mapDtoF = function(f) {\n return d[f]; };\n\n var i;\n\n // build out this.feature_set with this.data\n for (i = 0; i < this._data.length; i++) {\n d = this._data[i];\n f = features.map(mapDtoF);\n for (var j = 0; j < features.length; j++) {\n feat = features[j];\n if (this.feature_set[feat].indexOf(f[j]) === -1) {\n this.feature_set[feat].push(f[j]);\n }\n }\n }\n\n for (feat in this.feature_set) {\n if (this.sorters.hasOwnProperty(feat)) {\n this.feature_set[feat].sort(this.sorters[feat]);\n }\n }\n\n $(this.target).empty();\n\n $(this.target).append(\"\");\n\n var dropdownLiAClick = function() {\n var k = $(this).data('key');\n var feature = $(this).data('feature');\n var manual_feature;\n $('.' + feature + '-btns button.btn span.title').html(k);\n if (!manual_map.hasOwnProperty(feature)) {\n callback(feature, k);\n } else {\n manual_feature = manual_map[feature];\n manual_callback[manual_feature](k);\n }\n\n return false;\n };\n\n for (var feature in this.feature_set) {\n features = this.feature_set[feature];\n $(this.target + ' div.segments').append(\n ':@:/
diff --git a/unintegrated-python/busFactor/pythonBlameAuthorEmail.py b/unintegrated-python/busFactor/pythonBlameAuthorEmail.py
index 7c164bed31..fbf2b58c9b 100644
--- a/unintegrated-python/busFactor/pythonBlameAuthorEmail.py
+++ b/unintegrated-python/busFactor/pythonBlameAuthorEmail.py
@@ -13,9 +13,9 @@
@app.route("/")
def pythonBlameHistory():
- #path is the hardcoded folder for the last download of ghdata
- repo_path = './ghdata'
- #We must remove the old ghdata if we want to download a new copy.
+ #path is the hardcoded folder for the last download of augur
+ repo_path = './augur'
+ #We must remove the old augur if we want to download a new copy.
#In order to delete it, we must first change the permissions
#To be writable for all files and directories.
#Based on this: http://stackoverflow.com/questions/2853723/whats-the-python-way-for-recursively-setting-file-permissions
@@ -27,12 +27,12 @@ def pythonBlameHistory():
os.chmod(os.path.join(root, file), stat.S_IWRITE)
os.chmod(repo_path, stat.S_IWRITE)
- #delete the old ghdata
+ #delete the old augur
shutil.rmtree(repo_path)
- #Get the ghdata repository from GitHub
- repo = Repo.init('ghdata')
- origin = repo.create_remote('origin','https://github.com/OSSHealth/ghdata.git')
+ #Get the augur repository from GitHub
+ repo = Repo.init('augur')
+ origin = repo.create_remote('origin','https://github.com/OSSHealth/augur.git')
origin.fetch()
origin.pull(origin.refs[0].remote_head)
@@ -57,7 +57,7 @@ def pythonBlameHistory():
#You cannot use the os library file/directory loop for this part.
#(as was used above to change file permissions)
#That is because some files do not exist in every commit.
- #You must loop through the commit tree, not the ghdata directory.
+ #You must loop through the commit tree, not the augur directory.
for file_in_repo in repo.head.commit.tree.traverse():
#For each file, we want to clear out the total lines and user totals per file.
#That's because we're starting over with a new file.
diff --git a/unintegrated-python/busFactor/pythonBlameLinesInRepo.py b/unintegrated-python/busFactor/pythonBlameLinesInRepo.py
index 086d2bc267..89aff39ca9 100644
--- a/unintegrated-python/busFactor/pythonBlameLinesInRepo.py
+++ b/unintegrated-python/busFactor/pythonBlameLinesInRepo.py
@@ -9,9 +9,9 @@
@app.route("/")
def pythonBlameHistory():
- #path is the hardcoded folder for the last download of ghdata
- repo_path = './ghdata'
- #We must remove the old ghdata if we want to download a new copy.
+ #path is the hardcoded folder for the last download of augur
+ repo_path = './augur'
+ #We must remove the old augur if we want to download a new copy.
#In order to delete it, we must first change the permissions
#To be writable for all files and directories.
#Based on this: http://stackoverflow.com/questions/2853723/whats-the-python-way-for-recursively-setting-file-permissions
@@ -23,12 +23,12 @@ def pythonBlameHistory():
os.chmod(os.path.join(root, file), stat.S_IWRITE)
os.chmod(repo_path, stat.S_IWRITE)
- #delete the old ghdata
+ #delete the old augur
shutil.rmtree(repo_path)
- #Get the ghdata repository from GitHub
- repo = Repo.init('ghdata')
- origin = repo.create_remote('origin','https://github.com/OSSHealth/ghdata.git')
+ #Get the augur repository from GitHub
+ repo = Repo.init('augur')
+ origin = repo.create_remote('origin','https://github.com/OSSHealth/augur.git')
origin.fetch()
origin.pull(origin.refs[0].remote_head)
@@ -46,7 +46,7 @@ def pythonBlameHistory():
#You cannot use the os library file/directory loop for this part.
#(as was used above to change file permissions)
#That is because some files do not exist in every commit.
- #You must loop through the commit tree, not the ghdata directory.
+ #You must loop through the commit tree, not the augur directory.
for file_in_repo in repo.head.commit.tree.traverse():
#For each file, we want to clear out the total lines and organization totals per file.
#That's because we're starting over with a new file.
diff --git a/unintegrated-python/organizationHistory/pythonBlameHistoryTree.py b/unintegrated-python/organizationHistory/pythonBlameHistoryTree.py
index 0d53c71e93..915a09a11c 100644
--- a/unintegrated-python/organizationHistory/pythonBlameHistoryTree.py
+++ b/unintegrated-python/organizationHistory/pythonBlameHistoryTree.py
@@ -9,11 +9,11 @@
#You will need a MySQL server with the MSR14 datasource or other GHTorrent database with the same schema.
#Edit the line in this code that says db = sqlalchemy.create_engine to match your username:password@hostname:port/database.
-#This file is hardcoded to download the ghdata repository.
+#This file is hardcoded to download the augur repository.
#Since it is a preliminary example, each time it runs,
-#it deletes the local ghdata repo and re-downloads it (though this might not be a good option for the future).
-#Because of this: if you have a folder named ghdata whose contents you do not want deleted,
-#do not place this file in the same folder as your ghdata folder.
+#it deletes the local augur repo and re-downloads it (though this might not be a good option for the future).
+#Because of this: if you have a folder named augur whose contents you do not want deleted,
+#do not place this file in the same folder as your augur folder.
#to run this, type "python pythonBlameHistoryTree.py" into the command prompt
#You will see some output about running on 127.0.0.1:5000 in the command prompt
@@ -24,7 +24,7 @@
#the output shows the commit number and date, the total lines of code and other files (for example, the readme)
#and the percentage written by each organization.
-#expected output for ghdata should show only the spdx-tools organization (Matt is a member)
+#expected output for augur should show only the spdx-tools organization (Matt is a member)
#Number of lines corresponds to the lines written by Matt.
#You can see that earlier commits are lower on the page, and chronologically later ones appear higher up.
@@ -62,9 +62,9 @@
@app.route("/")
def pythonBlameHistory():
- #path is the hardcoded folder for the last download of ghdata
- repo_path = './ghdata'
- #We must remove the old ghdata if we want to download a new copy.
+ #path is the hardcoded folder for the last download of augur
+ repo_path = './augur'
+ #We must remove the old augur if we want to download a new copy.
#In order to delete it, we must first change the permissions
#To be writable for all files and directories.
#Based on this: http://stackoverflow.com/questions/2853723/whats-the-python-way-for-recursively-setting-file-permissions
@@ -76,7 +76,7 @@ def pythonBlameHistory():
os.chmod(os.path.join(root, file), stat.S_IWRITE)
os.chmod(repo_path, stat.S_IWRITE)
- #delete the old ghdata
+ #delete the old augur
shutil.rmtree(repo_path)
#connect to the database username:password@hostname:port/databasename
@@ -84,9 +84,9 @@ def pythonBlameHistory():
schema = sqlalchemy.MetaData()
schema.reflect(bind=db)
- #Get the ghdata repository from GitHub
- repo = Repo.init('ghdata')
- origin = repo.create_remote('origin','https://github.com/OSSHealth/ghdata.git')
+ #Get the augur repository from GitHub
+ repo = Repo.init('augur')
+ origin = repo.create_remote('origin','https://github.com/OSSHealth/augur.git')
origin.fetch()
origin.pull(origin.refs[0].remote_head)
@@ -123,7 +123,7 @@ def pythonBlameHistory():
#You cannot use the os library file/directory loop for this part.
#(as was used above to change file permissions)
#That is because some files do not exist in every commit.
- #You must loop through the commit tree, not the ghdata directory.
+ #You must loop through the commit tree, not the augur directory.
for file_in_repo in history_commit.tree.traverse():
#For each file, we want to clear out the total lines and organization totals per file.
#That's because we're starting over with a new file.
' + // This never changes.\n '' +\n '
');\n\n for (i = 0; i < features.length; i++) {\n if (features[i] !== 'all' && features[i] !== undefined) { // strange bug with undefined being added to manual buttons.\n $(this.target + ' div.' + this._strip_punctuation(feature) + '-btns ul.dropdown-menu').append(\n '- ' +\n (!this.manual_callback.hasOwnProperty(feature) ? '