From 78a2eb0980d68c875506018cfe0a0e69e2365ddc Mon Sep 17 00:00:00 2001 From: Kyle Belanger Date: Thu, 12 Oct 2023 08:45:37 -0400 Subject: [PATCH] transfering old posts --- _quarto.yml | 3 +- _site/blog.html | 88 +- _site/listings.json | 3 + .../WHO_LIFE.png | Bin 0 -> 173876 bytes .../facets-and-a-lesson-in-humility.html | 518 + .../figure-html/unnamed-chunk-4-1.png | Bin 0 -> 89024 bytes .../flu_surveillance.png | Bin 0 -> 169296 bytes .../line-graphs-and-interactivity.html | 590 + .../figure-html/unnamed-chunk-5-1.png | Bin 0 -> 27026 bytes ...-exploration-of-who-tuberculosis-data.html | 720 + .../figure-html/unnamed-chunk-5-1.png | Bin 0 -> 27770 bytes .../figure-html/unnamed-chunk-6-1.png | Bin 0 -> 30005 bytes .../figure-html/unnamed-chunk-7-1.png | Bin 0 -> 27920 bytes .../figure-html/unnamed-chunk-8-1.png | Bin 0 -> 22230 bytes .../figure-html/unnamed-chunk-9-1.png | Bin 0 -> 27984 bytes _site/search.json | 72 +- .../crosstalk-1.2.0/css/crosstalk.min.css | 1 + .../site_libs/crosstalk-1.2.0/js/crosstalk.js | 1474 +++ .../crosstalk-1.2.0/js/crosstalk.js.map | 37 + .../crosstalk-1.2.0/js/crosstalk.min.js | 2 + .../crosstalk-1.2.0/js/crosstalk.min.js.map | 1 + .../crosstalk-1.2.0/scss/crosstalk.scss | 75 + .../htmlwidgets-1.6.2/htmlwidgets.js | 901 ++ .../site_libs/jquery-3.5.1/jquery-AUTHORS.txt | 357 + _site/site_libs/jquery-3.5.1/jquery.js | 10872 ++++++++++++++++ _site/site_libs/jquery-3.5.1/jquery.min.js | 2 + _site/site_libs/jquery-3.5.1/jquery.min.map | 1 + .../site_libs/plotly-binding-4.10.2/plotly.js | 941 ++ .../plotly-htmlwidgets.css | 9 + .../plotly-main-2.11.1/plotly-latest.min.js | 69 + .../typedarray-0.1/typedarray.min.js | 1 + .../WHO_LIFE.png | Bin 0 -> 173876 bytes .../facets-and-a-lesson-in-humility.qmd | 85 + .../flu_surveillance.png | Bin 0 -> 169296 bytes .../line-graphs-and-interactivity.qmd | 136 + ...PI_NY.GDP.PCAP.CD_DS2_en_csv_v2_713080.csv | 269 + .../API_SP.POP.TOTL_DS2_en_csv_v2_713131.csv | 269 + .../TB_notifications_2020-02-11.csv | 8287 ++++++++++++ ...c-exploration-of-who-tuberculosis-data.qmd | 278 + posts/_metadata.yml | 4 +- 40 files changed, 26060 insertions(+), 5 deletions(-) create mode 100644 _site/posts/2020-01-29_facets-and-humility/WHO_LIFE.png create mode 100644 _site/posts/2020-01-29_facets-and-humility/facets-and-a-lesson-in-humility.html create mode 100644 _site/posts/2020-01-29_facets-and-humility/facets-and-a-lesson-in-humility_files/figure-html/unnamed-chunk-4-1.png create mode 100644 _site/posts/2020-02-10_line-graphs-and-interactivity/flu_surveillance.png create mode 100644 _site/posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html create mode 100644 _site/posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity_files/figure-html/unnamed-chunk-5-1.png create mode 100644 _site/posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data.html create mode 100644 _site/posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data_files/figure-html/unnamed-chunk-5-1.png create mode 100644 _site/posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data_files/figure-html/unnamed-chunk-6-1.png create mode 100644 _site/posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data_files/figure-html/unnamed-chunk-7-1.png create mode 100644 _site/posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data_files/figure-html/unnamed-chunk-8-1.png create mode 100644 _site/posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data_files/figure-html/unnamed-chunk-9-1.png create mode 100644 _site/site_libs/crosstalk-1.2.0/css/crosstalk.min.css create mode 100644 _site/site_libs/crosstalk-1.2.0/js/crosstalk.js create mode 100644 _site/site_libs/crosstalk-1.2.0/js/crosstalk.js.map create mode 100644 _site/site_libs/crosstalk-1.2.0/js/crosstalk.min.js create mode 100644 _site/site_libs/crosstalk-1.2.0/js/crosstalk.min.js.map create mode 100644 _site/site_libs/crosstalk-1.2.0/scss/crosstalk.scss create mode 100644 _site/site_libs/htmlwidgets-1.6.2/htmlwidgets.js create mode 100644 _site/site_libs/jquery-3.5.1/jquery-AUTHORS.txt create mode 100644 _site/site_libs/jquery-3.5.1/jquery.js create mode 100644 _site/site_libs/jquery-3.5.1/jquery.min.js create mode 100644 _site/site_libs/jquery-3.5.1/jquery.min.map create mode 100644 _site/site_libs/plotly-binding-4.10.2/plotly.js create mode 100644 _site/site_libs/plotly-htmlwidgets-css-2.11.1/plotly-htmlwidgets.css create mode 100644 _site/site_libs/plotly-main-2.11.1/plotly-latest.min.js create mode 100644 _site/site_libs/typedarray-0.1/typedarray.min.js create mode 100644 posts/2020-01-29_facets-and-humility/WHO_LIFE.png create mode 100644 posts/2020-01-29_facets-and-humility/facets-and-a-lesson-in-humility.qmd create mode 100644 posts/2020-02-10_line-graphs-and-interactivity/flu_surveillance.png create mode 100644 posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.qmd create mode 100644 posts/2020-02-13_basic-who-TB-data/API_NY.GDP.PCAP.CD_DS2_en_csv_v2_713080.csv create mode 100644 posts/2020-02-13_basic-who-TB-data/API_SP.POP.TOTL_DS2_en_csv_v2_713131.csv create mode 100644 posts/2020-02-13_basic-who-TB-data/TB_notifications_2020-02-11.csv create mode 100644 posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data.qmd diff --git a/_quarto.yml b/_quarto.yml index 2f8ca7b..ffd8a87 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -2,7 +2,8 @@ project: type: website render: - "*.qmd" - - "!old_posts/" + - "*.rmd" + - "!old_posts/" #using for the time being to store old blog post while converting website: title: "Kyle Belanger" diff --git a/_site/blog.html b/_site/blog.html index 6be9fcb..2a34b64 100644 --- a/_site/blog.html +++ b/_site/blog.html @@ -156,7 +156,7 @@ ul.task-list li input[type="checkbox"] { +
Categories
All (4)
@@ -169,7 +169,91 @@ ul.task-list li input[type="checkbox"] {
-
+
+
+

+
+ + +
+
+
+

Example Line Graph

+
+ + +
+
+
+

+
+ + +
+
diff --git a/_site/listings.json b/_site/listings.json index c289d3a..f912281 100644 --- a/_site/listings.json +++ b/_site/listings.json @@ -2,6 +2,9 @@ { "listing": "/blog.html", "items": [ + "/posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data.html", + "/posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html", + "/posts/2020-01-29_facets-and-humility/facets-and-a-lesson-in-humility.html", "/posts/2020-01-04_my-start-to-r/my-start-to-r.html" ] } diff --git a/_site/posts/2020-01-29_facets-and-humility/WHO_LIFE.png b/_site/posts/2020-01-29_facets-and-humility/WHO_LIFE.png new file mode 100644 index 0000000000000000000000000000000000000000..7b45fde70d494e191b53cb2ce0e7bb5c861c92f6 GIT binary patch literal 173876 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%0DN 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 z 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 SV3P$CMyaZ#p;#zy>ib_`qG(M3 literal 0 HcmV?d00001 diff --git a/_site/posts/2020-01-29_facets-and-humility/facets-and-a-lesson-in-humility.html b/_site/posts/2020-01-29_facets-and-humility/facets-and-a-lesson-in-humility.html new file mode 100644 index 0000000..06a1f28 --- /dev/null +++ b/_site/posts/2020-01-29_facets-and-humility/facets-and-a-lesson-in-humility.html @@ -0,0 +1,518 @@ + + + + + + + + + + + +Kyle Belanger - Facets and a Lesson in Humility + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+
+
+

Facets and a Lesson in Humility

+

A look at Tableau for Healthcare Chapter 8. Table Lens graph.

+
+
+ + +
+ +
+
Author
+ +
+ +
+
Published
+
+

January 29, 2020

+
+
+ + +
+ + +
+ + +
+ + + +
+ + + + +

Todays post is a lesson in Facets, as well as humility. The task this week was to replicate the graph in Chapter 8 of Tableau for Healthcare in R. The graph in question is called a Table Lens (This is the name the book uses, however I did have trouble finding this name in Google searches), it is a collection of charts with a common theme, this time looking at countries in various WHO regions and some statistics associated with mortality as well as health expenditure. I say this is a lesson in humiltiy as I have read through the excellent book R for Data Science, and yet the idea of faceting a ggplot graph slipped my mind. This ended with hours of trying to find a package in R to line up graphs, and way more time then I care to admit spent on getting things prefect. I did find such a package called cowplots, which can be found here. While this is an excellent package, its use was unecessary and I reverted back to using the excellent facet feature of GGplot, which can be seen below!

+
+

Load Libraries

+
+
library(magrittr) #pipes
+library(ggplot2) #ploting 
+library(dplyr)
+library(tidyr)
+
+
+
+

Import Data

+
+
ds <- readxl::read_xlsx(path = "../2020-01-04_my-start-to-r/Tableau 10 Training Practice Data.xlsx"
+                        ,sheet = "03 - WHO Life Expect & Mort"
+                        )
+
+
+
+

Clean Names and Transform

+
+
varnames <-  c("who_region", "country", "year" , "sex" , "life_expect_birth" , "neo_mort"
+               ,"under_five_mort" , "health_expenditure")
+names(ds) <- varnames
+
+# Order Countries based on Life Expectancy at Birth
+
+ds$country <- factor(ds$country, levels = ds$country[order(ds$life_expect_birth)]) 
+
+#To "Long" Form
+
+ds1 <-  ds %>% pivot_longer(5:8)#select columns 5 throuh 8, leave new columns at default names
+
+# Set up labels for Facet, as well as function for Facet Labeller
+
+facet_labels <-  list(
+"life_expect_birth"   = "Life Expectancy at Birth "                            
+,"neo_mort"           = "Neonatal Mortality Rate"             
+,"under_five_mort"    = "Under-Five Mortality Rate"
+,"health_expenditure" = "Health Expenditure per Capita (US$)"  )
+
+variable_labeller <- function(variable,value){
+  return(facet_labels[value])
+}
+
+
+
+

Graphs

+
+
hightlight_countries <- (c("Mauritania", "South Africa")) 
+
+g1 <-  ds1 %>% filter(who_region == "Africa") %>% 
+  mutate(name = factor(name, levels = c("life_expect_birth" , "neo_mort"
+               ,"under_five_mort" , "health_expenditure"))
+         ,highlight = country %in% hightlight_countries) %>% 
+  ggplot(aes(x = country, y = value, fill = highlight)) +
+  geom_col(show.legend = FALSE) +
+  coord_flip() +
+  labs(
+    title = "World Bank Life Expectancy, Neonatal & Under-Five Mortality Rates, and Health Expenditure Analysis"
+    ,x  = NULL
+    ,y = NULL
+  ) +
+  facet_grid(~name, scales = "free_x",labeller = variable_labeller) +
+  theme_bw() +
+  geom_text(aes(label = round(value, 0)), hjust = 0) +
+  scale_y_continuous(expand = expand_scale(mult = c(0,0.2))) +
+  scale_fill_manual(values = c("TRUE" = "#fc8d59", "FALSE" = "#2b83ba"))
+g1
+
+

+
+
+ + +
+ +

Reuse

Citation

BibTeX citation:
@online{belanger2020,
+  author = {Belanger, Kyle},
+  title = {Facets and a {Lesson} in {Humility}},
+  date = {2020-01-29},
+  langid = {en}
+}
+
For attribution, please cite this work as:
+Belanger, Kyle. 2020. “Facets and a Lesson in Humility.” +January 29, 2020. +
+ +
+ + + + \ No newline at end of file diff --git a/_site/posts/2020-01-29_facets-and-humility/facets-and-a-lesson-in-humility_files/figure-html/unnamed-chunk-4-1.png b/_site/posts/2020-01-29_facets-and-humility/facets-and-a-lesson-in-humility_files/figure-html/unnamed-chunk-4-1.png new file mode 100644 index 0000000000000000000000000000000000000000..020dff9b3037dd5ec9a7956414620041fccb67d8 GIT binary patch literal 89024 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 literal 0 HcmV?d00001 diff --git a/_site/posts/2020-02-10_line-graphs-and-interactivity/flu_surveillance.png b/_site/posts/2020-02-10_line-graphs-and-interactivity/flu_surveillance.png new file mode 100644 index 0000000000000000000000000000000000000000..7bfd4dfbe9b68731c9feae329732aeed529b217c GIT binary patch literal 169296 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 literal 0 HcmV?d00001 diff --git a/_site/posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html b/_site/posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html new file mode 100644 index 0000000..ce0ce3e --- /dev/null +++ b/_site/posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html @@ -0,0 +1,590 @@ + + + + + + + + + + + +Kyle Belanger - Line Graphs and Interactivity + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+ +
+ +
+
+
+

Line Graphs and Interactivity

+

Tableau for Healthcare Chapter 10. Static and Interactive examples

+
+
+ + +
+ +
+
Author
+ +
+ +
+
Published
+
+

February 10, 2020

+
+
+ + +
+ + +
+ + +
+ + + +
+ + + + +

Today’s post is all about line graphs using both ggplot for a static graph as well as a package called plotly for interactivity (more on this later). The example graph and data is again coming from Tableau for Healthcare, Chapter 10. Example Line Graph

+
+

Load Libraries

+

As always first step is to load in our libraries, I am using quite a few here, some are a bit overkill for this example but I wanted to play around with some fun features today.

+
+
library(magrittr) #pipes
+library(ggplot2) #ploting 
+library(dplyr)  # data manipulation
+library(tidyr) # tidy data
+library(lubridate) #work with dates
+library(stringr) # manipulate strings
+library(plotly)
+
+
+
+

Import Data

+

Next lets import our data, this week we are using the sheet Flu Occurrence FY2013-2016. I am unsure if this is form a real data set or not but it is good for demonstration purposes! After importing we can glimpse at our data to understand what is contained within.

+
+
ds <- readxl::read_xlsx(path = "../2020-01-04_my-start-to-r/Tableau 10 Training Practice Data.xlsx"
+                        ,sheet = "05 - Flu Occurrence FY2013-2016"
+                        )
+ds %>% glimpse()
+
+
Rows: 48
+Columns: 4
+$ Date                                         <dttm> 2012-10-27, 2012-11-24, …
+$ `Tests (+) for Influenza (count)`            <dbl> 995, 3228, 22368, 24615, …
+$ `Total Respiratory Specimens Tested (count)` <dbl> 18986, 24757, 66683, 7561…
+$ `% Tests (+) for Influenza`                  <dbl> 0.05240704, 0.13038737, 0…
+
+
+
+
+

Transform Data

+

I went a bit overboard today with renaming the variables. I wanted to practice writing a function and while it might not be the prettiest or the best way to do this, it worked for what I was trying to accomplish. Note the use of sapply, which lets us run the function on each column name.

+
+
format_names <- function(x) {
+  #Fucntion to set all names to lower case, and strip unneeded characters
+  x <- tolower(x)
+  x <- str_replace_all(x,c(#set each pattern equal to replacement
+                       " "         = "_"
+                      ,"\\(\\+\\)" = "pos"  #regualr experssion to match (+)
+                      ,"\\("       = ""
+                      ,"\\)"       = ""
+                      ,"\\%"       = "pct"
+                      )
+                  ) 
+                }
+
+#run the format name function on all names from DS
+colnames(ds) <- sapply(colnames(ds),format_names)    
+
+

Now is were the fun really starts! For this particular data set there are a couple things we need to add to replicate the example. In the original data set the date is stored with month, day, and year; the day is irrelevant and we need to pull out the month as well as the year. For this we can use the lubridate package, first we pull out the month and set it as a factor. For this example our year actually starts in October, so we set our factor to start at October (10), and end with September (9). We then pull out the year, which presents us with a different problem. Again our year starts in October, instead of January. To solve this I have created a variable called date adjustment, in this column is our month is 10 or greater, we will place a 1, if not a 0. We then set our fiscal year to be the actual year plus the date adjustment, this allows us to have our dates in the right fiscal year. Last the percent column is currently listed as a decimal, so we will convert this to a percentage.

+
+
# split date time
+ds1 <- ds %>% mutate(
+        #create month column, then set factors and labels to start fiscal year in Oct
+        month = month(ds$date)
+        ,month = factor(month
+                        ,levels = c(10:12, 1:9)
+                        ,labels = c(month.abb[10:12],month.abb[1:9]))
+       ,year = year(ds$date)
+        ,date_adjustment = ifelse(month(ds$date) >= 10, 1,0 )
+        ,fiscal_year = factor(year + date_adjustment)
+        #convert % Pos from decmial to pct
+        ,pct_tests_pos_for_influenza = round(pct_tests_pos_for_influenza * 100, digits = 0)
+        )
+
+ds1 %>% glimpse()
+
+
Rows: 48
+Columns: 8
+$ date                                     <dttm> 2012-10-27, 2012-11-24, 2012…
+$ tests_pos_for_influenza_count            <dbl> 995, 3228, 22368, 24615, 1179…
+$ total_respiratory_specimens_tested_count <dbl> 18986, 24757, 66683, 75614, 5…
+$ pct_tests_pos_for_influenza              <dbl> 5, 13, 34, 33, 23, 17, 11, 6,…
+$ month                                    <fct> Oct, Nov, Dec, Jan, Feb, Mar,…
+$ year                                     <dbl> 2012, 2012, 2012, 2013, 2013,…
+$ date_adjustment                          <dbl> 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,…
+$ fiscal_year                              <fct> 2013, 2013, 2013, 2013, 2013,…
+
+
+
+
+

GGplot

+

The graph here is pretty straight forward with one exception, group! For this line graph we want ggplot to connect the lines of the same year, if we do not explicitly state this using the group mapping, ggplot will try to connect all the lines together, which of course is not at all what we want!

+
+
g1 <- ds1 %>% 
+    ggplot(aes(x = month, y = pct_tests_pos_for_influenza, color = fiscal_year
+               ,group = fiscal_year)) +
+  geom_line() +
+  labs(
+    x  = NULL
+    ,y = "% Tests (+) for Influenza"
+    ,color = NULL
+    ,title = "Flu Viral Surveillance: % Respiratory Specimens Positive for Influenza \nOctober - September \nFor Flu Seasons 2013 - 2016"
+  ) +
+  theme_classic() +
+  scale_y_continuous(breaks = seq(0,40,5)) +
+  scale_color_manual(values = c("#a6611a","#dfc27d","#80cdc1","#018571"))
+
+g1
+
+

+
+
+
+
+

plotly

+

One of the nice features of Tableau is the fact the graphs are interactive, while a good graph should speak for itself, end users love pretty things. I have been experimenting with Plotly, which has an open source package for R (as well as many other programming languages!). This example only just scratches the surface, but there will be many more to come!

+
+
g2 <- ds1 %>% 
+    plot_ly(x = ~month, y = ~pct_tests_pos_for_influenza, type = "scatter", mode = "lines" 
+            ,color = ~fiscal_year
+            ,colors = c("#a6611a","#dfc27d","#80cdc1","#018571")
+            , hoverinfo = 'y') %>% 
+    layout(xaxis = list(
+                        title = ""
+                    )
+           ,yaxis = list(
+                        title = "% Tests (+) for Influenza"
+                    )
+           ,title = "Flu Viral Surveillance: % Respiratory Specimens Positive for Influenza"
+           ,legend = list(
+                      x = 100
+                      ,y = 0.5
+                      )   
+           
+           )
+
+g2
+
+
+ +
+
+ + +
+ +

Reuse

Citation

BibTeX citation:
@online{belanger2020,
+  author = {Belanger, Kyle},
+  title = {Line {Graphs} and {Interactivity}},
+  date = {2020-02-10},
+  langid = {en}
+}
+
For attribution, please cite this work as:
+Belanger, Kyle. 2020. “Line Graphs and Interactivity.” +February 10, 2020. +
+ +
+ + + + \ No newline at end of file diff --git a/_site/posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity_files/figure-html/unnamed-chunk-5-1.png b/_site/posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity_files/figure-html/unnamed-chunk-5-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fc7a967c38537ebd6c1f8a82693b2d07084049d1 GIT binary patch literal 27026 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 + + + + + + + + + + +Kyle Belanger - Basic Exploration of WHO Tuberculosis Data + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+
+
+

Basic Exploration of WHO Tuberculosis Data

+

Today I am going to dive into some real life data from the World Health Organization (WHO), exploring new and relapse cases of Tuberculosis. I clean up the data, and then make a few graphs to explore different variables.

+
+
+ + +
+ +
+
Author
+ +
+ +
+
Published
+
+

February 13, 2020

+
+
+ + +
+ + +
+ + +
+ + + +
+ + + + +
+

TL:DR

+

Today I am going to dive into some real life data from the World Health Organization (WHO), exploring new and relapse cases of Tuberculosis. I clean up the data, and then make a few graphs to explore different variables.

+
+
+

Load Packages

+

Since I am going to use quite a few packages in the tidyverse I am going to load them all in at once instead of individually.

+
+
library(tidyverse)
+
+
+
+

Load in Data

+

We are using the WHO data set which contains tuberculosis (TB) cases broken down by year, this data set is contained in the Tidyr package, however its only recent up to 2014. For a little added fun I have downloaded the latest data from the WHO website, Found here. For some added fun I have also included GDP per Capita data from World bank Found here

+
+
who_raw <-  read.csv("TB_notifications_2020-02-11.csv")
+
+#GPD file contains 4 rows of instrusctions above the actually data, we can tell
+#read.csv to skip these using the skip command
+gpd_raw <-  read.csv("API_NY.GDP.PCAP.CD_DS2_en_csv_v2_713080.csv",
+                     skip = 4)
+
+
+
+

Transform

+

This data set is very ugly looking! The first 3 columns are all country Identifiers, with column four indicating the WHO region. This is redundant and can be dropped down to one Identifier and Region. As we can see there are quite a few Variable columns that are in fact values and not true Variables. When reading the data dictionary for this data set, WHO has changed their reporting over the years, so for our purposes we can strip a lot of the extra data out. Lets try and look at three types of TB, Extrapulmonary, Lab Diagnosed, and Clinician Diagnosed. As well as try and look at the breakdowns by Age and Sex of new and relapse case (post 2012) Lots of Cleaning to do, lets get to it!

+
+
who1 <- who_raw %>% 
+  #lets drop some columns not needed for our exploration, what each column means can be found in the CSV Data dictionary file
+  select(-iso2
+         ,-iso_numeric
+         ,-(rdx_data_available:hiv_reg_new2)
+         ,-(new_sp:rel_in_agesex_flg)
+         ) %>%
+  #Lets just look at new date
+  filter(year >= 2013) %>% 
+  #Move the values that are currently stored as variables to observations
+  pivot_longer(cols = newrel_m04:newrel_sexunkageunk
+               ,names_to = "key"
+               ,values_to = "values"
+              ) %>% 
+  separate(col = key
+           ,into = c("new","sexage")
+          ,sep = "_"
+          )  %>% 
+  #the data set contains male, female and unknown
+  mutate_if(is.character
+            ,str_replace_all
+            ,pattern = "sexunk"
+            , replacement = "u"
+            ) %>% 
+  separate(col = sexage
+           ,into = c("sex","age")
+           ,sep = 1) %>% 
+  mutate(age_start = case_when(
+    str_detect(age, "65") ~ "65"
+    ,(str_length(age) == 2) ~ str_match(age, "\\S")
+    ,(str_length(age) == 3) ~ str_match(age, "\\S")
+    ,(str_length(age) == 4) ~ str_match(age, "\\S\\S")
+    
+    ,TRUE ~ ""
+    )
+    ,age_end = case_when(
+      str_detect(age, "65") ~ "& Over"
+      ,(str_length(age) == 2) ~ str_match(age, "\\S$")
+    ,(str_length(age) == 3) ~ str_match(age, "\\S\\S$")
+    ,(str_length(age) == 4) ~ str_match(age, "\\S\\S$")
+    ,TRUE ~ ""
+    ))
+
+#overall  WHO data is now cleaned and tidy.  
+  
+# Lets tidy up the GPD data so we can match it to our WHO data set
+gdp1 <- gpd_raw %>% 
+  select(-(Indicator.Name:X2012)
+         ,-X2019
+         ,-X) %>% 
+  pivot_longer(cols = X2013:X2018
+               ,names_to  = "year" 
+               ,values_to = "gdp") %>% 
+  mutate_if(is.character
+            ,str_remove_all
+            ,pattern = "X(?=\\d*)")  # regex to check for an X followed by a digit
+
+
+
+

Join Data

+

Lets combine the data sets so we can later visual TB Cases based on a countries GDP per capita.

+
+
who_combined <- who1 %>% 
+  rename(Country.Code = iso3) %>% 
+  mutate(year = as.character(year)) %>% 
+  left_join(y = gdp1) %>% 
+  select(-Country.Name)
+
+
+
+

Analyze

+

Lets first explore 2018 and see if GDP has any affect on the amount of TB cases in a particular country.

+
+
g1 <- who_combined %>% 
+  filter(str_detect(age,"014|15plus|u"),year == 2018) %>% 
+  group_by(country) %>% 
+  summarise(sum_tb_cases = (sum(values,na.rm = TRUE)/10000)
+            ,gdp = first(gdp)/1000
+            ,who_region = first(g_whoregion)) %>% 
+  mutate(
+         label = ifelse((sum_tb_cases>50), yes = as.character(country),no = "")) %>% 
+  ggplot(aes(x = gdp, y = sum_tb_cases )) +
+  geom_point(aes(color = who_region)) +
+  ggrepel::geom_text_repel(aes(x = gdp, y = sum_tb_cases, label = label)) +
+  labs(
+    title = "Total TB Cases by Country compared to Gross Domestic Product (GDP)"
+    ,x = "GDP (per 1,000USD)"
+    ,y = "Total TB Case (per 10,000 cases)"
+    ,color = "WHO Region"
+    ) +
+  theme_bw() 
+g1
+
+

+
+
+
+

Subset

+

Lets subset the above data to remove some of the outliers.

+
+
g2 <- who_combined %>% 
+  filter(str_detect(age,"014|15plus|u"),year == 2018) %>% 
+  group_by(country) %>% 
+  summarise(sum_tb_cases = (sum(values,na.rm = TRUE)/10000)
+            ,gdp = first(gdp)/1000
+            ,who_region = first(g_whoregion)) %>% 
+  mutate(
+         label = ifelse((sum_tb_cases>50), yes = as.character(country),no = "")) %>% 
+  ggplot(aes(x = gdp, y = sum_tb_cases )) +
+  geom_point(aes(color = who_region)) +
+  ggrepel::geom_text_repel(aes(x = gdp, y = sum_tb_cases, label = label)) +
+  labs(
+    title = "Total TB Cases by Country compared to Gross Domestic Product (GDP)"
+    ,x = "GDP (per 1,000USD)"
+    ,y = "Total TB Case (per 10,000 cases)"
+    ,color = "WHO Region"
+    ) +
+  xlim(0,50) +
+  ylim(0,50) +
+  theme_bw() 
+
+g2
+
+

+
+
+

We can see in the graph above there seems to be a small correlation between lower GDP and amount of TB cases.

+
+
+

A different way to look

+

Could there be any correlation between a countries population and the amount of TB cases? Maybe its just as simple as having more people means more people to get sick? Lets bring in another data set, again from World Bank Found Here, this contains total population data by country.

+
+
pop_raw <-  read.csv("API_SP.POP.TOTL_DS2_en_csv_v2_713131.csv"
+                     ,skip = 4)
+#If this looks famialer its because it is, the data set looks very simalar to the GDP data
+#In the future this could be moved to a function to allow cleaning much easier
+pop1 <- pop_raw %>% 
+  select(-(Indicator.Name:X2012)
+         ,-X2019
+         ,-X) %>% 
+  pivot_longer(cols = X2013:X2018
+               ,names_to  = "year" 
+               ,values_to = "population") %>% 
+  mutate_if(is.character
+            ,str_remove_all
+            ,pattern = "X(?=\\d*)")
+
+#now lets combine this into are overall data set
+
+who_combined <- who_combined %>% 
+  mutate(year = as.character(year)) %>% 
+  left_join(y = pop1) %>% 
+  select(-Country.Name)
+
+#now lets Graph again
+
+g3 <- who_combined %>% 
+  filter(str_detect(age,"014|15plus|u"),year == 2018) %>% 
+  group_by(country) %>% 
+  summarise(sum_tb_cases = (sum(values,na.rm = TRUE)/10000)
+            ,population = first(population)/1000000
+            ,who_region = first(g_whoregion)) %>% 
+  mutate(
+         label = ifelse((population>250), yes = as.character(country),no = "")) %>%
+  ggplot(aes(x = population, y = sum_tb_cases )) +
+  geom_point(aes(color = who_region)) +
+  ggrepel::geom_text_repel(aes(x = population, y = sum_tb_cases, label = label)) +
+  labs(
+    title = "Total TB Cases by Country compared to Gross Domestic Product (GDP)"
+    ,x = "Population (in Millions)"
+    ,y = "Total TB Case (per 10,000 cases)"
+    ,color = "WHO Region"
+    ) +
+  theme_bw() 
+
+ g3 
+
+

+
+
+
+

Further Exploration

+

Maybe we are on to something, the more people, the more likely they are to get sick! However India seems to have a very large number of cases so lets break these cases down further by age group for 2018.

+
+
g4 <- who_combined %>% 
+  filter(year == 2018
+         ,country == "India"
+         ,!(str_detect(age,"15plus|ageunk|u|014"))
+         ,(str_detect(sex,"m|f"))
+         )  %>% 
+  mutate(age_range = glue::glue("{age_start} -- {age_end}")) %>% 
+  ggplot(aes(x = reorder(age_range, as.numeric(age_start)), y = (values/1000), fill = sex)) +
+  geom_col(position = "dodge") +
+  labs(
+    title = "TB Case in India by age and gender 2018"
+    ,x    = NULL
+    ,y    = "Total Cases (per 1000)"
+    ,fill = "Gender") +
+  scale_fill_manual(labels = c("Female","Male"), values = c("#e9a3c9","#67a9cf") )
+  
+g4
+
+

+
+
+

There seems to be a huge spike in cases after adolescences. Females have a sharp decline the older they get, where as male case stay elevated with a slight decrease at 55.

+
+
+
+

Last Exploration

+

Lets look at overall cases in India, going back to 1980 and see if there as been any trends. To get these numbers we will go back to our raw data and strip everything out expect the total count

+
+
g5 <- who_raw %>% 
+  filter(country == "India") %>% 
+  select(year, c_newinc) %>% 
+  ggplot(aes(x = year, y = c_newinc/1000000)) +
+  geom_line() +
+  geom_point() +
+  labs(
+    title = "New and Relapse Tuberculosis Cases In India \n1980 -- 2018"
+    ,x    = NULL
+    ,y    = "Total Cases (in millions)") +
+  theme_bw() +
+  theme(plot.title = element_text(hjust = 0.5)) + #center title 
+  scale_x_continuous(breaks = seq(1980,2020,5)) +
+  scale_y_continuous(breaks = scales::pretty_breaks(n=10))  #different way to add tick marks
+g5
+
+

+
+
+

Cases were steadily rising from 1980 to 1990, then suddenly feel off. Starting in the early 2010s there was a sharp increase and the amount of new and relapse cases just keep growing.

+
+
+
+

Next Steps

+

While no other country has the amount of cases that India does, the sudden spike in cases at adolescences asks the question do other countries follow this same trend? We can also see the sudden spike in the 2010s, again is this just based in India or do we see this trend in other countries. There is much more exploration we can do with this data set at a later time!

+ + +
+ +

Reuse

Citation

BibTeX citation:
@online{belanger2020,
+  author = {Belanger, Kyle},
+  title = {Basic {Exploration} of {WHO} {Tuberculosis} {Data}},
+  date = {2020-02-13},
+  langid = {en}
+}
+
For attribution, please cite this work as:
+Belanger, Kyle. 2020. “Basic Exploration of WHO Tuberculosis +Data.” February 13, 2020. +
+ +
+ + + + \ No newline at end of file diff --git a/_site/posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data_files/figure-html/unnamed-chunk-5-1.png b/_site/posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data_files/figure-html/unnamed-chunk-5-1.png new file mode 100644 index 0000000000000000000000000000000000000000..66548015c15beed43744fd573d92b347e6abbfd0 GIT binary patch literal 27770 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 literal 0 HcmV?d00001 diff --git a/_site/posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data_files/figure-html/unnamed-chunk-6-1.png b/_site/posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data_files/figure-html/unnamed-chunk-6-1.png new file mode 100644 index 0000000000000000000000000000000000000000..15e321ea4e3b2a228d6f33567ffdd12d8249247c GIT binary patch literal 30005 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�f7Ge&=M~J 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 Kr91!d%Rd31)gIpf literal 0 HcmV?d00001 diff --git a/_site/posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data_files/figure-html/unnamed-chunk-7-1.png b/_site/posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data_files/figure-html/unnamed-chunk-7-1.png new file mode 100644 index 0000000000000000000000000000000000000000..76dadac50bb00542f8a2a27fa3862102f65e031a GIT binary patch literal 27920 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 SeYaSd&5R6hT`Rrf6!9-)&-s@C literal 0 HcmV?d00001 diff --git a/_site/posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data_files/figure-html/unnamed-chunk-8-1.png b/_site/posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data_files/figure-html/unnamed-chunk-8-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c7f95c4c0e0a2563b2702503a011709f953cd020 GIT binary patch literal 22230 zcmeHv2V4`~mna>qQBhG5u!5+72!c{VP!#=?qNt#hs7Mho2m%386%_>`Abz0IqN0eA zCcT8HNHbCdsi8;-H6hXxAS8Jcl%n$AxBK?J_uKvL7lwh%+#&rw;>P1q8GN1ndR0v;?$(bBKU_ zrka`>a0&RXC1B6L%>MxYglO5@YuN+mOs$X*tq|Z$G2(wj?haL%+3q1b0;+Ghf1osEDlc@Xfzkj3XVT3<|3%;4jgrlkH4 zY_EE@4k^}vcIjnIW8xF>7PS`LG*JNo1JxQdK!@3FtdM}gL5QHhmd$tpfzTDE0@$Mx zI|LxxL{^4jv9jfvKJe82E=V6Ho#EBO9%tg15n21k`Xdr# zD{GFY5o2RLo{O{7)ZoUl0~a*3+gwXKai3y+(@*Q&o5Z)Fr~KUY)zK5=?I}}rDg*7*LD8z1XU|da z63L#mn-)D^+)H~AoCj`jZM~#ogq3iVdM?qM8=E$nl`++#Rlp(?Ukzj=$G=J~-La!| z)6|CEx5vsI-nHjG#=)S2RxCR`6U-@ED~9dXd0;!l0)l`**ez(U!MsawB&mWrj6je% z!=05)yi)M)-18Nsh%>KYYx^1YU$Yj|Cy;v$JxAMoXe zubC?0iuazwF;g1kCiFY&qO*j&pWfHOTfWy>-K@P8zt~S!17@Riw>vq}W-Il$c8{hz zqQG_qR;sjAC^u&bCOe1B{bs1gwHqs;$VHTBB;wG%7P6dbt%kmfZjnUutkyg@V|?Rk zlk(vs@tHVOf^d@$Vfft>;&r%It3i|RP>yv~!QjW`wn>t$;_wH4R zblu`vusin|IHicF+P1%`OlIIMw=O40OGCIHmOi%p>@Iv{mOGai>ni3k5SoFGg13Z< zC+9wGF+&}AS3HnM*?RRHO7C)s01^ElX(jSQj32BeS)%s_LwCf=DE8%=&sL|fk9=w!vMu2 zA8jh`F>-dmk5ItEQ3PAim-iJ3=T^(U8ru85PHdccbbzs+!0@MWw?|Kfc?5r3$&~hB zqx}cb+BQ2B2i?$LlDdisn-a}Y%U{FW12rSOrqY&#tR2H@Sdb{K*%QH1%LoeO{zre0 z)EWgohpxp1*jiWQeF=2co%F~&cjpKsf^rjj#`1*pYkP<$>`Wbg9osACg=c~8Wp-%d zxqV&trF*BI6!?`l$QHf0~){) z^Oaz8eKi>HY#Ca)KjR=}7oLFG5rDbJ^I*LaP+WfolI4`6h7VGx81^|UI_kk*^Rasb zHo|#)1k%!ZprMK3EauU9Hb^>8SoHN~KE`MAuuW1A&%0;$F{ai-&-3iAjB!F_KriY| z-oA`YsmIH(v`1r9PfxwoLaW7KH7d>>_xz-Sl^es>CEp0|S${P@u)3!O+fR%b)+sRO zzE0I_pp|_&vSEW@O9SjGWdNJ$THDmp>a(+_F7M#rVPbbnGdQ2MBEI%$d1Q9ES{tZw z$kdm!EwO}hsKL1^nC$~P<~(IvqlQ1s_X`^}zYCYuD7{k$^y(5Zv?e!)^{%Y5jYBsf zNOJpGJ8Zb*TD8}n#$ztegM+Xd!7`&F=_tb4-Jm?7ChyBZ{*|^JLpXP$)aksqQ_k);@X9PqHS?&FGrUqGt5-wr zujJUc3CsSiG&RS1j*g&GmOLgy_GwAp_j2NzU|XThN7hs&7ItfEY+nvV=Xs-?QMWp^ z%&29kUB*u2B}*Oaw_5V{Cn~AIS62;3%80**1+Cs#Mfcwuifw&zH9xa)spAOitHdjX zGy#=>lcF92sII}dm}H!Z4*QcOX-e-&Wt}0$%*Hq8uLrEdMN;WYNCTlc;-rivq@5>9 zt~|HgN^f}1xSe{Wq{gJ#Yy{4)%4#P{;4_DzWKVhh+_2Y zwj?Y}_DhqG@>E>};FpAK7dv)d#Xjj+S6FQJwBc2gciW|m#-^dDs|96w&Xk>d@#U#4 z1L?IPmbf?iBjPUkC$gITd08@u@06{ca%a*xn?{xsQdU9oYxAImF@4d0~%=RS9=-H0+Z&Kie$Ow;49%~}Shu!9gwG==dAe!MH`@{19NSp_b zorU6XBzQCA5+L=O=w!=%pyCAAlWo@-vAO1Y7&F!f`iNY8$-b*GO`7}ho*-sx%l?pp z&d>wrBhs|nR(aAtd)+_HQ?}vA^+$I_{|p-y&;rAT>s5(tPf?GNYYOmNO~EEq7gGG` zWC7zl;+u;ltIU$oZwG8Z7%#7Z>+R-JJxbsm`Dj`2WPZNZ`H{jxl2Wq5)bO;;?NGU| zgP0&Bs)cIFo-68)P8$BJFp(_B@U6+VjT@dUE&_eszt6oM)Tjyp%U*FUSgm6q_72zUv4NS=yC{R2q|%R z>`~qDbztm0({H7e(1|5NuTAQ&L`AC`tADpC+p)gmAohwrq*hTmt~J?+dPA#d;2l-a zTBv7dz!JfiqJp(Aw7$OTAq0vCWtkgfiWl7$2)l{xf9qSH!^muzJi6(r35O4LvC!+| zsXVmPK;fv@NJ{>@o`kHA;I{{@B=&6n52u3*WQ{8q_hSA!@+mdNwnW(}qAX~W$ZBmb z+9|Kc%@PM8slY|Me=g22WXozG37@*K|R)(Z0tx%l2R49O$9F4ss z2ezk|?xBw<`A+7CsgEbBA2D^DQk*~r49&6SWmjheEFlUCVW#rt*-kg=UfYvaeCw=0L&$JrHU(N!0GLd!p zCtxC*@n&x=gYViQz|J=Enm75BD;a)#s~fvdB}`gh;?+$K4_Cwore-lR#vkPx8o;Cw zUB7)$KEF=C2UsrN_|MIMnDFn`gq3Tm^rj||=ysy(S*Q-l%@fR+dZzzr{ZY;EaKJo4 zZyi#)2j1`9DvyU&9#@`vHr~;gF&tQrCXO8rd#Dxy+pPpxzwG783+45Gc1H{#j7pU$ zLQzNA*ck=a3Kg^&(ru`V;p=|~|6ZR$P z+)w!OxgHJRL=8M-3-lFNza@*S7d_V?N+vr09J&jH0VSH|xB67CeYN#ZwCk(#YA=q8 zsEY{&=$6L3f08UtzMqXn>%t9vhn0~c^UPQkV9a%HE+VK#X84?p_@w?or1PKbQxzmO z?mrWz7Plrg zXddczL86|ksK-!O@vsTwOk`A|%7(b88y>b-8UeSy2_fcOAiG;FdkgXAJk9XK?rfNM z7jRPl-28_LfS&vpWkPI7G}d<$elb5KIXE4^r}cNybfABI0mwZRfYd?u2lf9n{(~DU z7Vl6G1vx(O4{CWSqmv@~`hvrf)$Cg|mmB|Z^}mB1dGUJCvJOhb5b^m$`nQiM)KIM?f7J4 zhGw%|_x5B??s)%15Mg8j(dN>kJCivTsz&dz2If;KYpUc1eRD>bn3kozxc+f?@9%^>OSGrbMLl}8_tDB>sQ}#n$lT#hUAniY>c_uXJ59;xR zxK`-BBJswZGGu()rKDL$4+!&fJIShRClpQq^H<%EBBO&yE|)>Tf=R7+sV)7HaOsoQ zp?`33Ilvvnh|Bw3uAaoF9;`7^6014ZI&U0Krhn1f)ux$yfOl-7ybgvsHj~@VnAFp) z_>$Pn;O7i5vTR>9(f@Q@TI&WBvX&?@$qA4e`4%65{7`I*6Uz&i(Qy$UeZMo7y4GWd2#HlS^o*7%qnp|2@?-o;~8Rm_T6uDL|t^SE*yhhl4sQUt9v!r<*}eaMVJ_w2z} zCTm9a1@pT0o9c(8V1JndShv4n58izhTKFZlNr=3X2K0d}*3sN?~RB}dkD-gO>keRv2tmIPbg_mvn-EJ3dY6arg zC}zOD8{-!+X5m;>7|**2`Ssqv+3`Pcv&dlezY`_x!>)!!v(7MEmOrtXvDzC0H-N11 z|L7*UQE^_+=`@oMb)sRqSac=@a6Wqj?%L%|mxF*Tb%XJdm8mY%rM79_mF)nkN7I$0 zX$saK{`l5f-U}bknOO^Bd=hISNRG^W*YjTLwmI{p~5W%cx$0kC*mT1%m9CM(eJ)ZqOUus*_K%+T@}8O0=Y0n;9aOg0#XUNzIpa_HLqc>U_15^TtGW1~@}}#9-@9H( z+bg66_!cP#f9S1(!vXg^epVNjDLlVxkr`k9N#YyCS5#Z@$9Hnqkrh9z>GJB8V9LpkB{yIG&d%!B_ixA~-;k}S*oIoE zUSyE_vuN{U&|8~^dPn5wQgR*>O!#}a?g?JIK_pG0_j#p#npv_{!uU}1(|6|+NhTFM=uV6-8UzxZ+*7;dta>e>)_%X|8GN(q>=E})=3yucUEn=lR`q%fZE^3gY7|$2-NvpRf_}DlxZ~>ghoDXO z1;5?|OBw9HIFWQ}WtF=L=3Mc!Gh~t;l;gR+s+=MvXylcElM%EAkHTN8b-2b^`UT%all*Q|qgoq#5|BNMRPM_P9V~7L<$0WrcfLS0s6N)owq${1C37 zf79-g|KE3db$AFS3AhFId#&}10&>Z_OU;i{oK@gU}b5OCs*=>eQ= zWx>SKQQ?(ujf(QV6C!2KLUS+VCR4Ip*Lv7G;+I|_lF|BF7|E9??`cgRH`&V zP4w_p2H=aGsfK7%D)uS0X@hvvEbJkhZjlX zbi?mwe%MVZe4FYfU%eA=sd5n}lHR$mib)q0%JuDZTvN3z_Ybt>Bc2~$cD5T*&Be!9 zXRkI(^iEo{`svJa%5jm=_gq?Y^jTC!o6~s-du%X#n4OGVgkAY*W^g?E6Z9CXra* zJ1^CbQ)?S(K<I8b`OKLB`0c^{AZv45r>KImF^Cyu zUI_GOxO-Vc4gLs8{5Xg-k4yGWsie|=37Y&KGMM1)ztc618+^ad3e|zWxuiP&H!EcG zX^_eLuBQ~tLsID~+{|$X+59iG&ILp8@1Qy*_nz`1-czU8m)>#w-I10kT#lO;m-t_= z9nk(4af%t@IHh`5>hC1U>9W_4gaUN0cpDH{$kCb{CB_HIs?#QM7p8;sQFZRR6b(bk zs`vA{M2Oi97 zTnjLdwVl@U&0ik5K%`0tx9XxcJTeh#I-+?omuc~n?w8V4hf^u&%-21Qb%V%lvznC) zOfX6w@DqVU&s6)c;ZuX~1n|09hFkvvL$1nW*0B%BpQx8T&QHHU_rwIPXS1DO#wy}5 z8|Lz0z&tedC!1DO?OTuneMtTP9Ry1k_xf>4an;_wioHzW+26m5s-;UEyQrFrdIN7^ z<$bq^PNzqQo`oKQ;4ti>!Q)@W7nad6;mPlvR4|83{W}fio_2$wnxY1>KC!kD57rIh$u z@(Yz5tcEMY&Kv?FN7#VGFq@FGZuS@EZd=+5tPi~oUt1EJ^Ex^&ZED1Y5nWV>3viSz zX9g_$VtLqzjLn2G> z7qEsc9feS75lj@buv7njHNkk+D|!M&Hr#f8e(P_rwMBW#z2>c(siPqz5Oi~wn;;#v z;tCvMUXJulXb#zqPoU4&f21=$6~A8*%AtOzX+i zI}XGpn2w?2YqZ-8d=tFcM5GTE-fl+uWf1KbPx#j!xiA*P1{OAzhbItPZ@V_Pk_QVP zomEMY#aPKWY29B~ClDKZA1AL3w4??;(DrH%+`+Kb~RD&@u?(mF}Ot54@U&9LRYKmt1%OT#eCOE9X( zuWi)*t%ce0UZC<~Jaz|-vwdp3FgsputQx+#y;gd1u*v(-(V0kJKc9|8;vSyL$Td~H zI0vVN&0TW&tGp=dbH+)<51W2bqJQP=PVC1M$Oq0)yWG8g)l$`VY*Op~^P;2UTU!nO za`}Z0MWCDoWK{j>ll~DoQPxhsC>{{8-UkH~!Vl!7u@T8r`1~WS7iP`oXY2+d4ZySx z&9Rc3zhpx|l<8opS!x=z2Y>9?3~PXT%mNtc;+!D^s zm3934BwtRj1Jj}KFF@h8ZTKNTpY@>?Sa2Tm$XI-jW>Q5D164D0*l*VQ$UovD5VJO4 zeS(C@y#X&vP{V8XoPoqzM@r>02NG4D%=$S?pkDkF@0A(=Z_{l(D{KD*AfN8h>`?}K zNs-R!@G@NlAa{Q7BUu z<9W%vu?}?Yr^u1mhdd<`40td;lWw)RPsi+sK=yJpQeLL2s4$j09!AB)a8ua6UT3z( zLX(+wa!{go@>o&7eOvO;$wvw}q(KTuBrhLj3c(o@ha(0PBRfexBcx_;Ih~@^$JJ3zSq0spPp>sSRwTP`td!6~%3w#2s7iEF?t0(gKu(m#rb_DR-iiwSW zEnx5Y>}ST_AgIf=E}~=7>HRsP{j-Lg#Rs~3{dOQRseXAwP#2Zs)KzmF^Y(ADlx&s1 zTxFd{wnVSMZlHP%Brbq_{nM{pfK(#S(hKG2oXDLKS(wwvzrIigMr!2H`FfE=oi4LL zplH$e;)tGugO}Jtc)RU1-7_ej3Ub;AsBu3AhkZs_FVUBIs?&;mGqLl&P{YcqLh7sJ z{2b_%YbMLMWZ9tW#<}$hGgTv{`II<9c$Iv8CyrL{j4(_icD#FLS#*O=g@;Gp>lxe~ ztS9YW)M*{>zE)wg5|7vN?1i;?T3+SjqeB++m9GlhdSExJJ%UGC-21-&;itXMRQPfS zg3;GPL35o}Pu0+2+Vk3X;%UK3R#H_x^*zb;@uaK*$IzMNbDp8Z8TkqOo)#JQ&XLJQ zlY3`^b*`gBs)8J*$hNKa(ORnTD=x-w(yl_Ge90c&cBd1lUl{aWP)Ut>f%jrk={Z>q z9x%BRUyxOXa6bq!mpVPzJ2HuSrl1*KhGf{3NG+SS?q9fa4ML9YIh0jsQ(%|Q8n%Sy zT8|fNQxk;GUu_0AK&{Om@2ZZ^m}h?Xioau(;W2@_<7YmEOGl}+oKv?EPPBQovABZV zxF#8$v=o%Nyc49bkcO+@5%+jp#K_Y5x8O-Y&k8bUJk_o}AcXPTF}M)r#6% zy=Ngp4Q#z35r}HnwV^JeqmG$x&W|Ziy>>YS*0^5(_^3E_K2N3lAORD9~nwab7+%o1ttO?=9#hjDiM#dEpZ6B zDJHd%_EmdeYgBX2_t>R7ENN7l(5&PCh0H6^P_WWMZtEEk!N8NSu{LoP%!3O&ls<$q zPaE$QUk0+>w}>`k_71c9j7K*YhMpicTF3ny&9TX+#(vu*FVs{#pIrG3RUPHr8t7T* zMoiPV3-Iu4X4?3R)YXO0M_p`d?$+7p{t`7e=b-+W90ATBn3}2K{iVe#r0S6!C*sn* z<~jH;k1j(3Z8G7FxKmL94;L^6Ad~`=HW0dVg9(T!Nh_S4y8c4LY2n;ZGM!;Cn>Nfd zrfnPMX9x4i0%G~odjWAkte{(a+Xx#u|HArXV(Hl{9N9*!!gKZhpG0S8;d7u-*Nznz zpM_|)dGzdgIXZ7xe#iG}80&;^vBG^}lsTgUDVH_$g8v?gqKKi!-JXQCoBipIKqh6S zz1fdSFS?0_)?g-zfQhFKdIjgZIb@Ne^c>?Bo!_gRtL(svKQ#Q*iv*LT%#YZ7ZW-jSytA|uRhFimS0@)UUvHZe{?)|74Rh_LN*8Iy-Yn}E_zQt->??6#=I7H-LgGv zj%{)q9()1(8(p)raz$0#Zv+6L@0tb$K`rNWVA6>2JI)JuzG+Qa-aBLn>_ZITVX_?i z9=})Eva)LJ9Gm%N9}jULiV|a00=#0NT%LaDm$^COJYuXKq^9n|Q`tuh(<1tLaz|z- zU9&=DzTduHT0tbe0fF(oG7d&A(BkRl^)h)j!bf4%aTU`z`p zb9@y&{{C`t0k`s#Il%LpWb~Q*Wtf7yih19!(C0?xf9J9XO-r&5ufywg)Syse|F(Qy zxIi`n&faEg+mrL1r0CU*1AUSV-M?Htah`O5!q>9OA_H#c+sKlviWn5aTW^u$67r%n z7u;=Zu#~bx{DtXt&=wNC-i>bSYD}bKx3a#K^8z$OA2dy`fnF=5Ws@&n4M(m#HpdcR z;#_hNQgR%Jb>Hadlm{%>p8ifg3&{hAhjl_~=K5x4L2#MEpZHI|X5nQ56);AUm7?+s zWYJJvMB!Y;CVVR}Wm_UBqoND=EByr!7Ct&P&j|vLqD2q| z)La`~7&J=Ti>f*9^A~vU7V*fZE$zL?k)8VPth%yFV-{ha(D~7kue;1!r}Ur9J@c7f z6+Ydm06+XV`IDaRl;c@+e#yL0&0i?aXOb5>&Je}?GGvI{>2PV5C4sC%)U!GbJ*O*x zxbTxgsifk#Iks=+o97JeKt>+4fL z!_WCj{wnxs>7!IbJ1MTpSrF*NwlYupoJGzIFgq&x=Jb+!KD67w^3z#)@)wy@?;eWx zdH5%{r#0=UqZgFw+z2=vu$cI0_mtmcB`*0a<*5`p)r~M0d`)a= z=K&}73ilLP!%tjE&a18KZ8>tvRgrg3?UiIf$_Lap} z_DHoRYaEDewqTAB%jqUUPfBAhE81pV;RD~}dw8<<#R*8N$=4rFqY&6B@dNKB{6%2T z*$?insM-VUQ2T*U!f_q24b5PBfFkO^7BxP5Bwm4pHUJyif^|RGZ00X4;WyG|N+51e zFVW#cYS>C!Grc6|4zR<`7MEgP%3q!GOQ%;kfUNTJi3g{X_Up&jYkT?pgwPF0iZ;w# zJiQ;RT*;0G)QoRu6m=ixsW7hs5lsJcuW59|e)dPB)_z?@~+j&xgpz?_3o>CDta{I@@V z&$Ao&nq@1Oh@$beF%?$__TsBigQ2sWcG!{~0`Dv~{cqn-wzn0KF|h3!!-zy{qLE`A z#BFsB_0#)O>Vw*jPOR&1pVYfMy+``##PI;+igGt0nw&CYOhvlD0%0442kKbjC$M?W zu59MAPFkYdB#%}}vH>69wv(E;f|JdgznM>6&QZ2$^Igu>D>557*w$m;dS3%yyPJiO z)g^&VRs(xlgkwmWJwe#zn5ARah;kq62^8z`qIcq7HpFLf2K&8|>$3vWvx*lz!G>RZ zC-N0ezuK02F^;&;*p(f&^9I9}BY+yL;+f~?Qhj|6m=__g#9R-vPZuN}AdQ!I9IHH& zgIp}XxR+xu$g<8POb^~wTGTS_;pI*}Ej6r7P*ZU7dmNZg2 zMNYiC^D8zed+$YZ`G+3ffYw!o1`52Fx66hbhIaL7t1FL1Wj9-nW26E}ytbs5zSTyL zQ^iJyYMtWkJ7Y;Qn#OCZB1b^Jt#2C`F1r(-;+`I`suWMPYSL5W<~3XJ%0k3bRgK%A z`kr}CFQ3t+J4a)&%i6JvEZQ=%P$PFznRWY7bQS@l%FuwHLo%5%zPu2ELt8OHSku{T zq|G?({yseHYBOE6kt{F;zh@&1%)d-hmW1=VfrrIoLK`O6Jt-VRtpIkB_qkWzEfxPF z8_!F=(Ag@C5hb`Cq$#xvuqTs<^hnM78Ck`B&T!thvCJ&SG)wIeex4kLT@K@Wpzly( zOsYvhgdy(@(sPtM<<|y{CdsBhdRby2?3?yv7@Q|fmI*oy>{iM18e)JwcD*CF)bnyD zzTE-e>AuF1Gf?7fD)ZY>vM8gz_y)5Ub?6Vo$-J@|r9r}TGIE+Lrj89*N=JUKeQkX> z*Vkw4pc{@of(eCHUQ55PjvpgE&<&?@sM}sFeuY4xI%CJ9yEXguwtFvyWv7UzqN8nl z{jMQg^qJHnci8c;5aI@fcde_Ir)Ul~Q3~7&9TCn^1Y;%3a^~*;M&I5R$9}P zoXu6baHgjHlIv%B+{qq3Y!+ipa>m-W+*pjR)B%xnWK;a&Uia#VUEdh4E(Igm19f9= zhKjO&(#kabuPX4R=oJLFn>5V`OKC#<&>n=YF$Qsb|GUCRgXu{;yrRR7cmj9x>5Y&?m$ed7h!){HD7s?d9SeC(0EHvo$?YA6Hr zW|9{W+t#3UH-X~>nV{{CxSC_v)Jn^7y(sJ$gO)& zkb3EYmh&vQYaDWEq#%84(_o!H34~Yy*Mw(Jau%;0+@9S|x>+YVxNVx7sQOktgj?Zi zJ%qC%p{KIo6f-poa0CANmRHZ)O!4YekT8;1u5VI!mS_C_9PIi1rB~vBw<<{$Ai^0H zk=MiThvm|_gFz2*7q#&UdUunpSz_S3$yqij{j6QDV2?V?Q##W>%Z`BGwW8|Xcr?$6 z0KHK@21~Q6A9V_}cs+?VYciKxS)-k6Ynk1Og0)>Rl*eP1}lyha*}q9tmN*1Z7@I&uqB zJvTZYaO1IRYxVQ#?el7Pg{gn8?A}~_&#RrScQ?{fMXjhH^lgE;E4!Ro z7?cUP$VjZUCG7oa_%cpoq~^xqwB+J@Id0l8YCml2}Hit_7a{txu>gd-}JCCT4X6#^hdaC$xm; z!KB9;GddQptyLw8oc>#3v$^eGEa1gshNI_`N3PkJLfGKD#m-E>OhL`!KF+RJHhZ1( zedJiX9D^j)0W3{z1*pRPfI4$Y6NDS2i8>iy=jOw?Txz`$Q1yakWD``C!mM;ncA5Cp zDhRzMhe?lcr9S_~QbxLoeq6#}>E5LliKO@VWs}eo&ZZE}5&(zygI=e&M7M+Tn|vU` z7-sh}|0xAAIUIjV} etxHe%O+jqAru({J;60-P#||4CBptkP^M3&eV>ssk literal 0 HcmV?d00001 diff --git a/_site/posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data_files/figure-html/unnamed-chunk-9-1.png b/_site/posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data_files/figure-html/unnamed-chunk-9-1.png new file mode 100644 index 0000000000000000000000000000000000000000..450ffc077bce5b0e9eaf9beea72047c89a09b58f GIT binary patch literal 27984 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 literal 0 HcmV?d00001 diff --git a/_site/search.json b/_site/search.json index 81766a6..da44963 100644 --- a/_site/search.json +++ b/_site/search.json @@ -39,7 +39,7 @@ "href": "blog.html", "title": "Posts", "section": "", - "text": "My Start to R\n\n\nA short introduction to my blog, and R journey.\n\n\n\n\n\n\n\n\n\nJan 24, 2020\n\n\nKyle Belanger\n\n\n\n\n\n\nNo matching items" + "text": "Basic Exploration of WHO Tuberculosis Data\n\n\nToday I am going to dive into some real life data from the World Health Organization (WHO), exploring new and relapse cases of Tuberculosis. I clean up the data, and then make a few graphs to explore different variables.\n\n\n\n\n\n\n\n\n\nFeb 13, 2020\n\n\nKyle Belanger\n\n\n\n\n\n\n \n\n\n\n\nLine Graphs and Interactivity\n\n\nTableau for Healthcare Chapter 10. Static and Interactive examples\n\n\n\n\n\n\n\n\n\nFeb 10, 2020\n\n\nKyle Belanger\n\n\n\n\n\n\n \n\n\n\n\nFacets and a Lesson in Humility\n\n\nA look at Tableau for Healthcare Chapter 8. Table Lens graph.\n\n\n\n\n\n\n\n\n\nJan 29, 2020\n\n\nKyle Belanger\n\n\n\n\n\n\n \n\n\n\n\nMy Start to R\n\n\nA short introduction to my blog, and R journey.\n\n\n\n\n\n\n\n\n\nJan 24, 2020\n\n\nKyle Belanger\n\n\n\n\n\n\nNo matching items" }, { "objectID": "posts/post-with-code/index.html", @@ -54,5 +54,75 @@ "title": "My Start to R", "section": "", "text": "Today starts my attempt at sharing my R journey with the world! I have been learning R off and on now since late 2019, I have begun to take it much more serious as I work through my Data Analytics class at UCF. My love for all things numbers and graphs has really blossomed, and I am choosing to share that love with anyone who cares to read. I will not claim to be the best at R, or any programming for that matter, but these are my attempts. Each post in this serious will be replicated a graph created in Tableau from the book Tableau for Healthcare. Todays graph is a simple horizontal bar chart, in transferring to both a new blog site and computer I have unfortunately lost the original bar graph, but trust me the one I created looks just like it.\n\nLoad Libraries\n\nlibrary(tidyr)\nlibrary(magrittr)\nlibrary(ggplot2)\nlibrary(stringr)\nlibrary(dplyr)\n\n\n\nImport Data\n\nds <- readxl::read_excel(\n path = \"Tableau 10 Training Practice Data.xlsx\" \n ,sheet = \"02 - Patient Falls-Single Hosp\"\n )\n\n\n\nClean Data Names\n\n#should make reusable forumla at later time\nnames(ds) <- tolower(names(ds))\nnames(ds) <- str_replace_all(names(ds),\" \", \"_\")\n\n\n\nConvert Data to ‘Long Form’\n\nds1 <- ds %>% \n gather(\"patient_falls_no_injury_rate\" , \"patient_falls_with_injury_rate\"\n ,key = \"injury\" \n ,value = \"rate\" ) %>% \n mutate(injury = (injury == \"patient_falls_with_injury_rate\"))\n\n\n\nGraph 5.1\n\nb1 <- ds %>% \n ggplot(mapping = aes(x = reorder(type_of_care,total_patient_falls_rate ) , y = total_patient_falls_rate)) +\n geom_col(fill = \"#2b83ba\") + \n coord_flip() +\n scale_y_continuous(breaks = NULL) +\n theme(axis.ticks = element_blank()) +\n labs(title = \"Rate of Patient Falls (per 1,000 Pateint Days)\\nby Type of Care for FY2017\"\n ,x = NULL\n ,y = NULL\n ) +\n theme_classic() +\n geom_text(aes(label = format(total_patient_falls_rate, digits = 2)), nudge_y = -.25, color = \"white\")\n \nb1\n\n\n\n\n\n\n\n\nCitationBibTeX citation:@online{belanger2020,\n author = {Belanger, Kyle},\n title = {My {Start} to {R}},\n date = {2020-01-24},\n langid = {en}\n}\nFor attribution, please cite this work as:\nBelanger, Kyle. 2020. “My Start to R.” January 24, 2020." + }, + { + "objectID": "posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data.html", + "href": "posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data.html", + "title": "Basic Exploration of WHO Tuberculosis Data", + "section": "", + "text": "Today I am going to dive into some real life data from the World Health Organization (WHO), exploring new and relapse cases of Tuberculosis. I clean up the data, and then make a few graphs to explore different variables." + }, + { + "objectID": "posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data.html#a-different-way-to-look", + "href": "posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data.html#a-different-way-to-look", + "title": "Basic Exploration of WHO Tuberculosis Data", + "section": "A different way to look", + "text": "A different way to look\nCould there be any correlation between a countries population and the amount of TB cases? Maybe its just as simple as having more people means more people to get sick? Lets bring in another data set, again from World Bank Found Here, this contains total population data by country.\n\npop_raw <- read.csv(\"API_SP.POP.TOTL_DS2_en_csv_v2_713131.csv\"\n ,skip = 4)\n#If this looks famialer its because it is, the data set looks very simalar to the GDP data\n#In the future this could be moved to a function to allow cleaning much easier\npop1 <- pop_raw %>% \n select(-(Indicator.Name:X2012)\n ,-X2019\n ,-X) %>% \n pivot_longer(cols = X2013:X2018\n ,names_to = \"year\" \n ,values_to = \"population\") %>% \n mutate_if(is.character\n ,str_remove_all\n ,pattern = \"X(?=\\\\d*)\")\n\n#now lets combine this into are overall data set\n\nwho_combined <- who_combined %>% \n mutate(year = as.character(year)) %>% \n left_join(y = pop1) %>% \n select(-Country.Name)\n\n#now lets Graph again\n\ng3 <- who_combined %>% \n filter(str_detect(age,\"014|15plus|u\"),year == 2018) %>% \n group_by(country) %>% \n summarise(sum_tb_cases = (sum(values,na.rm = TRUE)/10000)\n ,population = first(population)/1000000\n ,who_region = first(g_whoregion)) %>% \n mutate(\n label = ifelse((population>250), yes = as.character(country),no = \"\")) %>%\n ggplot(aes(x = population, y = sum_tb_cases )) +\n geom_point(aes(color = who_region)) +\n ggrepel::geom_text_repel(aes(x = population, y = sum_tb_cases, label = label)) +\n labs(\n title = \"Total TB Cases by Country compared to Gross Domestic Product (GDP)\"\n ,x = \"Population (in Millions)\"\n ,y = \"Total TB Case (per 10,000 cases)\"\n ,color = \"WHO Region\"\n ) +\n theme_bw() \n\n g3 \n\n\n\n\n\nFurther Exploration\nMaybe we are on to something, the more people, the more likely they are to get sick! However India seems to have a very large number of cases so lets break these cases down further by age group for 2018.\n\ng4 <- who_combined %>% \n filter(year == 2018\n ,country == \"India\"\n ,!(str_detect(age,\"15plus|ageunk|u|014\"))\n ,(str_detect(sex,\"m|f\"))\n ) %>% \n mutate(age_range = glue::glue(\"{age_start} -- {age_end}\")) %>% \n ggplot(aes(x = reorder(age_range, as.numeric(age_start)), y = (values/1000), fill = sex)) +\n geom_col(position = \"dodge\") +\n labs(\n title = \"TB Case in India by age and gender 2018\"\n ,x = NULL\n ,y = \"Total Cases (per 1000)\"\n ,fill = \"Gender\") +\n scale_fill_manual(labels = c(\"Female\",\"Male\"), values = c(\"#e9a3c9\",\"#67a9cf\") )\n \ng4\n\n\n\n\nThere seems to be a huge spike in cases after adolescences. Females have a sharp decline the older they get, where as male case stay elevated with a slight decrease at 55." + }, + { + "objectID": "posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data.html#last-exploration", + "href": "posts/2020-02-13_basic-who-TB-data/basic-exploration-of-who-tuberculosis-data.html#last-exploration", + "title": "Basic Exploration of WHO Tuberculosis Data", + "section": "Last Exploration", + "text": "Last Exploration\nLets look at overall cases in India, going back to 1980 and see if there as been any trends. To get these numbers we will go back to our raw data and strip everything out expect the total count\n\ng5 <- who_raw %>% \n filter(country == \"India\") %>% \n select(year, c_newinc) %>% \n ggplot(aes(x = year, y = c_newinc/1000000)) +\n geom_line() +\n geom_point() +\n labs(\n title = \"New and Relapse Tuberculosis Cases In India \\n1980 -- 2018\"\n ,x = NULL\n ,y = \"Total Cases (in millions)\") +\n theme_bw() +\n theme(plot.title = element_text(hjust = 0.5)) + #center title \n scale_x_continuous(breaks = seq(1980,2020,5)) +\n scale_y_continuous(breaks = scales::pretty_breaks(n=10)) #different way to add tick marks\ng5\n\n\n\n\nCases were steadily rising from 1980 to 1990, then suddenly feel off. Starting in the early 2010s there was a sharp increase and the amount of new and relapse cases just keep growing." + }, + { + "objectID": "posts/2020-01-29_facets-and-humility/facets-and-a-lesson-in-humility.html", + "href": "posts/2020-01-29_facets-and-humility/facets-and-a-lesson-in-humility.html", + "title": "Facets and a Lesson in Humility", + "section": "", + "text": "Todays post is a lesson in Facets, as well as humility. The task this week was to replicate the graph in Chapter 8 of Tableau for Healthcare in R. The graph in question is called a Table Lens (This is the name the book uses, however I did have trouble finding this name in Google searches), it is a collection of charts with a common theme, this time looking at countries in various WHO regions and some statistics associated with mortality as well as health expenditure. I say this is a lesson in humiltiy as I have read through the excellent book R for Data Science, and yet the idea of faceting a ggplot graph slipped my mind. This ended with hours of trying to find a package in R to line up graphs, and way more time then I care to admit spent on getting things prefect. I did find such a package called cowplots, which can be found here. While this is an excellent package, its use was unecessary and I reverted back to using the excellent facet feature of GGplot, which can be seen below! \n\nLoad Libraries\n\nlibrary(magrittr) #pipes\nlibrary(ggplot2) #ploting \nlibrary(dplyr)\nlibrary(tidyr)\n\n\n\nImport Data\n\nds <- readxl::read_xlsx(path = \"../2020-01-04_my-start-to-r/Tableau 10 Training Practice Data.xlsx\"\n ,sheet = \"03 - WHO Life Expect & Mort\"\n )\n\n\n\nClean Names and Transform\n\nvarnames <- c(\"who_region\", \"country\", \"year\" , \"sex\" , \"life_expect_birth\" , \"neo_mort\"\n ,\"under_five_mort\" , \"health_expenditure\")\nnames(ds) <- varnames\n\n# Order Countries based on Life Expectancy at Birth\n\nds$country <- factor(ds$country, levels = ds$country[order(ds$life_expect_birth)]) \n\n#To \"Long\" Form\n\nds1 <- ds %>% pivot_longer(5:8)#select columns 5 throuh 8, leave new columns at default names\n\n# Set up labels for Facet, as well as function for Facet Labeller\n\nfacet_labels <- list(\n\"life_expect_birth\" = \"Life Expectancy at Birth \" \n,\"neo_mort\" = \"Neonatal Mortality Rate\" \n,\"under_five_mort\" = \"Under-Five Mortality Rate\"\n,\"health_expenditure\" = \"Health Expenditure per Capita (US$)\" )\n\nvariable_labeller <- function(variable,value){\n return(facet_labels[value])\n}\n\n\n\nGraphs\n\nhightlight_countries <- (c(\"Mauritania\", \"South Africa\")) \n\ng1 <- ds1 %>% filter(who_region == \"Africa\") %>% \n mutate(name = factor(name, levels = c(\"life_expect_birth\" , \"neo_mort\"\n ,\"under_five_mort\" , \"health_expenditure\"))\n ,highlight = country %in% hightlight_countries) %>% \n ggplot(aes(x = country, y = value, fill = highlight)) +\n geom_col(show.legend = FALSE) +\n coord_flip() +\n labs(\n title = \"World Bank Life Expectancy, Neonatal & Under-Five Mortality Rates, and Health Expenditure Analysis\"\n ,x = NULL\n ,y = NULL\n ) +\n facet_grid(~name, scales = \"free_x\",labeller = variable_labeller) +\n theme_bw() +\n geom_text(aes(label = round(value, 0)), hjust = 0) +\n scale_y_continuous(expand = expand_scale(mult = c(0,0.2))) +\n scale_fill_manual(values = c(\"TRUE\" = \"#fc8d59\", \"FALSE\" = \"#2b83ba\"))\ng1\n\n\n\n\n\n\n\n\nReusehttps://creativecommons.org/licenses/by/4.0/CitationBibTeX citation:@online{belanger2020,\n author = {Belanger, Kyle},\n title = {Facets and a {Lesson} in {Humility}},\n date = {2020-01-29},\n langid = {en}\n}\nFor attribution, please cite this work as:\nBelanger, Kyle. 2020. “Facets and a Lesson in Humility.”\nJanuary 29, 2020." + }, + { + "objectID": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html", + "href": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html", + "title": "Line Graphs and Interactivity", + "section": "", + "text": "Today’s post is all about line graphs using both ggplot for a static graph as well as a package called plotly for interactivity (more on this later). The example graph and data is again coming from Tableau for Healthcare, Chapter 10." + }, + { + "objectID": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#load-libraries", + "href": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#load-libraries", + "title": "Line Graphs and Interactivity", + "section": "Load Libraries", + "text": "Load Libraries\nAs always first step is to load in our libraries, I am using quite a few here, some are a bit overkill for this example but I wanted to play around with some fun features today.\n\nlibrary(magrittr) #pipes\nlibrary(ggplot2) #ploting \nlibrary(dplyr) # data manipulation\nlibrary(tidyr) # tidy data\nlibrary(lubridate) #work with dates\nlibrary(stringr) # manipulate strings\nlibrary(plotly)" + }, + { + "objectID": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#import-data", + "href": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#import-data", + "title": "Line Graphs and Interactivity", + "section": "Import Data", + "text": "Import Data\nNext lets import our data, this week we are using the sheet Flu Occurrence FY2013-2016. I am unsure if this is form a real data set or not but it is good for demonstration purposes! After importing we can glimpse at our data to understand what is contained within.\n\nds <- readxl::read_xlsx(path = \"../2020-01-04_my-start-to-r/Tableau 10 Training Practice Data.xlsx\"\n ,sheet = \"05 - Flu Occurrence FY2013-2016\"\n )\nds %>% glimpse()\n\nRows: 48\nColumns: 4\n$ Date <dttm> 2012-10-27, 2012-11-24, …\n$ `Tests (+) for Influenza (count)` <dbl> 995, 3228, 22368, 24615, …\n$ `Total Respiratory Specimens Tested (count)` <dbl> 18986, 24757, 66683, 7561…\n$ `% Tests (+) for Influenza` <dbl> 0.05240704, 0.13038737, 0…" + }, + { + "objectID": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#transform-data", + "href": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#transform-data", + "title": "Line Graphs and Interactivity", + "section": "Transform Data", + "text": "Transform Data\nI went a bit overboard today with renaming the variables. I wanted to practice writing a function and while it might not be the prettiest or the best way to do this, it worked for what I was trying to accomplish. Note the use of sapply, which lets us run the function on each column name.\n\nformat_names <- function(x) {\n #Fucntion to set all names to lower case, and strip unneeded characters\n x <- tolower(x)\n x <- str_replace_all(x,c(#set each pattern equal to replacement\n \" \" = \"_\"\n ,\"\\\\(\\\\+\\\\)\" = \"pos\" #regualr experssion to match (+)\n ,\"\\\\(\" = \"\"\n ,\"\\\\)\" = \"\"\n ,\"\\\\%\" = \"pct\"\n )\n ) \n }\n\n#run the format name function on all names from DS\ncolnames(ds) <- sapply(colnames(ds),format_names) \n\nNow is were the fun really starts! For this particular data set there are a couple things we need to add to replicate the example. In the original data set the date is stored with month, day, and year; the day is irrelevant and we need to pull out the month as well as the year. For this we can use the lubridate package, first we pull out the month and set it as a factor. For this example our year actually starts in October, so we set our factor to start at October (10), and end with September (9). We then pull out the year, which presents us with a different problem. Again our year starts in October, instead of January. To solve this I have created a variable called date adjustment, in this column is our month is 10 or greater, we will place a 1, if not a 0. We then set our fiscal year to be the actual year plus the date adjustment, this allows us to have our dates in the right fiscal year. Last the percent column is currently listed as a decimal, so we will convert this to a percentage.\n\n# split date time\nds1 <- ds %>% mutate(\n #create month column, then set factors and labels to start fiscal year in Oct\n month = month(ds$date)\n ,month = factor(month\n ,levels = c(10:12, 1:9)\n ,labels = c(month.abb[10:12],month.abb[1:9]))\n ,year = year(ds$date)\n ,date_adjustment = ifelse(month(ds$date) >= 10, 1,0 )\n ,fiscal_year = factor(year + date_adjustment)\n #convert % Pos from decmial to pct\n ,pct_tests_pos_for_influenza = round(pct_tests_pos_for_influenza * 100, digits = 0)\n )\n\nds1 %>% glimpse()\n\nRows: 48\nColumns: 8\n$ date <dttm> 2012-10-27, 2012-11-24, 2012…\n$ tests_pos_for_influenza_count <dbl> 995, 3228, 22368, 24615, 1179…\n$ total_respiratory_specimens_tested_count <dbl> 18986, 24757, 66683, 75614, 5…\n$ pct_tests_pos_for_influenza <dbl> 5, 13, 34, 33, 23, 17, 11, 6,…\n$ month <fct> Oct, Nov, Dec, Jan, Feb, Mar,…\n$ year <dbl> 2012, 2012, 2012, 2013, 2013,…\n$ date_adjustment <dbl> 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,…\n$ fiscal_year <fct> 2013, 2013, 2013, 2013, 2013,…" + }, + { + "objectID": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#ggplot", + "href": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#ggplot", + "title": "Line Graphs and Interactivity", + "section": "GGplot", + "text": "GGplot\nThe graph here is pretty straight forward with one exception, group! For this line graph we want ggplot to connect the lines of the same year, if we do not explicitly state this using the group mapping, ggplot will try to connect all the lines together, which of course is not at all what we want!\n\ng1 <- ds1 %>% \n ggplot(aes(x = month, y = pct_tests_pos_for_influenza, color = fiscal_year\n ,group = fiscal_year)) +\n geom_line() +\n labs(\n x = NULL\n ,y = \"% Tests (+) for Influenza\"\n ,color = NULL\n ,title = \"Flu Viral Surveillance: % Respiratory Specimens Positive for Influenza \\nOctober - September \\nFor Flu Seasons 2013 - 2016\"\n ) +\n theme_classic() +\n scale_y_continuous(breaks = seq(0,40,5)) +\n scale_color_manual(values = c(\"#a6611a\",\"#dfc27d\",\"#80cdc1\",\"#018571\"))\n\ng1" + }, + { + "objectID": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#plotly", + "href": "posts/2020-02-10_line-graphs-and-interactivity/line-graphs-and-interactivity.html#plotly", + "title": "Line Graphs and Interactivity", + "section": "plotly", + "text": "plotly\nOne of the nice features of Tableau is the fact the graphs are interactive, while a good graph should speak for itself, end users love pretty things. I have been experimenting with Plotly, which has an open source package for R (as well as many other programming languages!). This example only just scratches the surface, but there will be many more to come!\n\ng2 <- ds1 %>% \n plot_ly(x = ~month, y = ~pct_tests_pos_for_influenza, type = \"scatter\", mode = \"lines\" \n ,color = ~fiscal_year\n ,colors = c(\"#a6611a\",\"#dfc27d\",\"#80cdc1\",\"#018571\")\n , hoverinfo = 'y') %>% \n layout(xaxis = list(\n title = \"\"\n )\n ,yaxis = list(\n title = \"% Tests (+) for Influenza\"\n )\n ,title = \"Flu Viral Surveillance: % Respiratory Specimens Positive for Influenza\"\n ,legend = list(\n x = 100\n ,y = 0.5\n ) \n \n )\n\ng2" } ] \ No newline at end of file diff --git a/_site/site_libs/crosstalk-1.2.0/css/crosstalk.min.css b/_site/site_libs/crosstalk-1.2.0/css/crosstalk.min.css new file mode 100644 index 0000000..6b45382 --- /dev/null +++ b/_site/site_libs/crosstalk-1.2.0/css/crosstalk.min.css @@ -0,0 +1 @@ +.container-fluid.crosstalk-bscols{margin-left:-30px;margin-right:-30px;white-space:normal}body>.container-fluid.crosstalk-bscols{margin-left:auto;margin-right:auto}.crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column{display:inline-block;padding-right:12px;vertical-align:top}@media only screen and (max-width: 480px){.crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column{display:block;padding-right:inherit}}.crosstalk-input{margin-bottom:15px}.crosstalk-input .control-label{margin-bottom:0;vertical-align:middle}.crosstalk-input input[type="checkbox"]{margin:4px 0 0;margin-top:1px;line-height:normal}.crosstalk-input .checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.crosstalk-input .checkbox>label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.crosstalk-input .checkbox input[type="checkbox"],.crosstalk-input .checkbox-inline input[type="checkbox"]{position:absolute;margin-top:2px;margin-left:-20px}.crosstalk-input .checkbox+.checkbox{margin-top:-5px}.crosstalk-input .checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.crosstalk-input .checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px} diff --git a/_site/site_libs/crosstalk-1.2.0/js/crosstalk.js b/_site/site_libs/crosstalk-1.2.0/js/crosstalk.js new file mode 100644 index 0000000..fd9eb53 --- /dev/null +++ b/_site/site_libs/crosstalk-1.2.0/js/crosstalk.js @@ -0,0 +1,1474 @@ +(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o b) { + return 1; + } +} + +/** + * @private + */ + +var FilterSet = function () { + function FilterSet() { + _classCallCheck(this, FilterSet); + + this.reset(); + } + + _createClass(FilterSet, [{ + key: "reset", + value: function reset() { + // Key: handle ID, Value: array of selected keys, or null + this._handles = {}; + // Key: key string, Value: count of handles that include it + this._keys = {}; + this._value = null; + this._activeHandles = 0; + } + }, { + key: "update", + value: function update(handleId, keys) { + if (keys !== null) { + keys = keys.slice(0); // clone before sorting + keys.sort(naturalComparator); + } + + var _diffSortedLists = (0, _util.diffSortedLists)(this._handles[handleId], keys), + added = _diffSortedLists.added, + removed = _diffSortedLists.removed; + + this._handles[handleId] = keys; + + for (var i = 0; i < added.length; i++) { + this._keys[added[i]] = (this._keys[added[i]] || 0) + 1; + } + for (var _i = 0; _i < removed.length; _i++) { + this._keys[removed[_i]]--; + } + + this._updateValue(keys); + } + + /** + * @param {string[]} keys Sorted array of strings that indicate + * a superset of possible keys. + * @private + */ + + }, { + key: "_updateValue", + value: function _updateValue() { + var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._allKeys; + + var handleCount = Object.keys(this._handles).length; + if (handleCount === 0) { + this._value = null; + } else { + this._value = []; + for (var i = 0; i < keys.length; i++) { + var count = this._keys[keys[i]]; + if (count === handleCount) { + this._value.push(keys[i]); + } + } + } + } + }, { + key: "clear", + value: function clear(handleId) { + if (typeof this._handles[handleId] === "undefined") { + return; + } + + var keys = this._handles[handleId]; + if (!keys) { + keys = []; + } + + for (var i = 0; i < keys.length; i++) { + this._keys[keys[i]]--; + } + delete this._handles[handleId]; + + this._updateValue(); + } + }, { + key: "value", + get: function get() { + return this._value; + } + }, { + key: "_allKeys", + get: function get() { + var allKeys = Object.keys(this._keys); + allKeys.sort(naturalComparator); + return allKeys; + } + }]); + + return FilterSet; +}(); + +exports.default = FilterSet; + +},{"./util":11}],4:[function(require,module,exports){ +(function (global){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.default = group; + +var _var2 = require("./var"); + +var _var3 = _interopRequireDefault(_var2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +// Use a global so that multiple copies of crosstalk.js can be loaded and still +// have groups behave as singletons across all copies. +global.__crosstalk_groups = global.__crosstalk_groups || {}; +var groups = global.__crosstalk_groups; + +function group(groupName) { + if (groupName && typeof groupName === "string") { + if (!groups.hasOwnProperty(groupName)) { + groups[groupName] = new Group(groupName); + } + return groups[groupName]; + } else if ((typeof groupName === "undefined" ? "undefined" : _typeof(groupName)) === "object" && groupName._vars && groupName.var) { + // Appears to already be a group object + return groupName; + } else if (Array.isArray(groupName) && groupName.length == 1 && typeof groupName[0] === "string") { + return group(groupName[0]); + } else { + throw new Error("Invalid groupName argument"); + } +} + +var Group = function () { + function Group(name) { + _classCallCheck(this, Group); + + this.name = name; + this._vars = {}; + } + + _createClass(Group, [{ + key: "var", + value: function _var(name) { + if (!name || typeof name !== "string") { + throw new Error("Invalid var name"); + } + + if (!this._vars.hasOwnProperty(name)) this._vars[name] = new _var3.default(this, name); + return this._vars[name]; + } + }, { + key: "has", + value: function has(name) { + if (!name || typeof name !== "string") { + throw new Error("Invalid var name"); + } + + return this._vars.hasOwnProperty(name); + } + }]); + + return Group; +}(); + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./var":12}],5:[function(require,module,exports){ +(function (global){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _group = require("./group"); + +var _group2 = _interopRequireDefault(_group); + +var _selection = require("./selection"); + +var _filter = require("./filter"); + +var _input = require("./input"); + +require("./input_selectize"); + +require("./input_checkboxgroup"); + +require("./input_slider"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var defaultGroup = (0, _group2.default)("default"); + +function var_(name) { + return defaultGroup.var(name); +} + +function has(name) { + return defaultGroup.has(name); +} + +if (global.Shiny) { + global.Shiny.addCustomMessageHandler("update-client-value", function (message) { + if (typeof message.group === "string") { + (0, _group2.default)(message.group).var(message.name).set(message.value); + } else { + var_(message.name).set(message.value); + } + }); +} + +var crosstalk = { + group: _group2.default, + var: var_, + has: has, + SelectionHandle: _selection.SelectionHandle, + FilterHandle: _filter.FilterHandle, + bind: _input.bind +}; + +/** + * @namespace crosstalk + */ +exports.default = crosstalk; + +global.crosstalk = crosstalk; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./filter":2,"./group":4,"./input":6,"./input_checkboxgroup":7,"./input_selectize":8,"./input_slider":9,"./selection":10}],6:[function(require,module,exports){ +(function (global){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.register = register; +exports.bind = bind; +var $ = global.jQuery; + +var bindings = {}; + +function register(reg) { + bindings[reg.className] = reg; + if (global.document && global.document.readyState !== "complete") { + $(function () { + bind(); + }); + } else if (global.document) { + setTimeout(bind, 100); + } +} + +function bind() { + Object.keys(bindings).forEach(function (className) { + var binding = bindings[className]; + $("." + binding.className).not(".crosstalk-input-bound").each(function (i, el) { + bindInstance(binding, el); + }); + }); +} + +// Escape jQuery identifier +function $escape(val) { + return val.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1"); +} + +function bindEl(el) { + var $el = $(el); + Object.keys(bindings).forEach(function (className) { + if ($el.hasClass(className) && !$el.hasClass("crosstalk-input-bound")) { + var binding = bindings[className]; + bindInstance(binding, el); + } + }); +} + +function bindInstance(binding, el) { + var jsonEl = $(el).find("script[type='application/json'][data-for='" + $escape(el.id) + "']"); + var data = JSON.parse(jsonEl[0].innerText); + + var instance = binding.factory(el, data); + $(el).data("crosstalk-instance", instance); + $(el).addClass("crosstalk-input-bound"); +} + +if (global.Shiny) { + var inputBinding = new global.Shiny.InputBinding(); + var _$ = global.jQuery; + _$.extend(inputBinding, { + find: function find(scope) { + return _$(scope).find(".crosstalk-input"); + }, + initialize: function initialize(el) { + if (!_$(el).hasClass("crosstalk-input-bound")) { + bindEl(el); + } + }, + getId: function getId(el) { + return el.id; + }, + getValue: function getValue(el) {}, + setValue: function setValue(el, value) {}, + receiveMessage: function receiveMessage(el, data) {}, + subscribe: function subscribe(el, callback) { + _$(el).data("crosstalk-instance").resume(); + }, + unsubscribe: function unsubscribe(el) { + _$(el).data("crosstalk-instance").suspend(); + } + }); + global.Shiny.inputBindings.register(inputBinding, "crosstalk.inputBinding"); +} + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],7:[function(require,module,exports){ +(function (global){ +"use strict"; + +var _input = require("./input"); + +var input = _interopRequireWildcard(_input); + +var _filter = require("./filter"); + +function _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; } } + +var $ = global.jQuery; + +input.register({ + className: "crosstalk-input-checkboxgroup", + + factory: function factory(el, data) { + /* + * map: {"groupA": ["keyA", "keyB", ...], ...} + * group: "ct-groupname" + */ + var ctHandle = new _filter.FilterHandle(data.group); + + var lastKnownKeys = void 0; + var $el = $(el); + $el.on("change", "input[type='checkbox']", function () { + var checked = $el.find("input[type='checkbox']:checked"); + if (checked.length === 0) { + lastKnownKeys = null; + ctHandle.clear(); + } else { + var keys = {}; + checked.each(function () { + data.map[this.value].forEach(function (key) { + keys[key] = true; + }); + }); + var keyArray = Object.keys(keys); + keyArray.sort(); + lastKnownKeys = keyArray; + ctHandle.set(keyArray); + } + }); + + return { + suspend: function suspend() { + ctHandle.clear(); + }, + resume: function resume() { + if (lastKnownKeys) ctHandle.set(lastKnownKeys); + } + }; + } +}); + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./filter":2,"./input":6}],8:[function(require,module,exports){ +(function (global){ +"use strict"; + +var _input = require("./input"); + +var input = _interopRequireWildcard(_input); + +var _util = require("./util"); + +var util = _interopRequireWildcard(_util); + +var _filter = require("./filter"); + +function _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; } } + +var $ = global.jQuery; + +input.register({ + className: "crosstalk-input-select", + + factory: function factory(el, data) { + /* + * items: {value: [...], label: [...]} + * map: {"groupA": ["keyA", "keyB", ...], ...} + * group: "ct-groupname" + */ + + var first = [{ value: "", label: "(All)" }]; + var items = util.dataframeToD3(data.items); + var opts = { + options: first.concat(items), + valueField: "value", + labelField: "label", + searchField: "label" + }; + + var select = $(el).find("select")[0]; + + var selectize = $(select).selectize(opts)[0].selectize; + + var ctHandle = new _filter.FilterHandle(data.group); + + var lastKnownKeys = void 0; + selectize.on("change", function () { + if (selectize.items.length === 0) { + lastKnownKeys = null; + ctHandle.clear(); + } else { + var keys = {}; + selectize.items.forEach(function (group) { + data.map[group].forEach(function (key) { + keys[key] = true; + }); + }); + var keyArray = Object.keys(keys); + keyArray.sort(); + lastKnownKeys = keyArray; + ctHandle.set(keyArray); + } + }); + + return { + suspend: function suspend() { + ctHandle.clear(); + }, + resume: function resume() { + if (lastKnownKeys) ctHandle.set(lastKnownKeys); + } + }; + } +}); + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./filter":2,"./input":6,"./util":11}],9:[function(require,module,exports){ +(function (global){ +"use strict"; + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +var _input = require("./input"); + +var input = _interopRequireWildcard(_input); + +var _filter = require("./filter"); + +function _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; } } + +var $ = global.jQuery; +var strftime = global.strftime; + +input.register({ + className: "crosstalk-input-slider", + + factory: function factory(el, data) { + /* + * map: {"groupA": ["keyA", "keyB", ...], ...} + * group: "ct-groupname" + */ + var ctHandle = new _filter.FilterHandle(data.group); + + var opts = {}; + var $el = $(el).find("input"); + var dataType = $el.data("data-type"); + var timeFormat = $el.data("time-format"); + var round = $el.data("round"); + var timeFormatter = void 0; + + // Set up formatting functions + if (dataType === "date") { + timeFormatter = strftime.utc(); + opts.prettify = function (num) { + return timeFormatter(timeFormat, new Date(num)); + }; + } else if (dataType === "datetime") { + var timezone = $el.data("timezone"); + if (timezone) timeFormatter = strftime.timezone(timezone);else timeFormatter = strftime; + + opts.prettify = function (num) { + return timeFormatter(timeFormat, new Date(num)); + }; + } else if (dataType === "number") { + if (typeof round !== "undefined") opts.prettify = function (num) { + var factor = Math.pow(10, round); + return Math.round(num * factor) / factor; + }; + } + + $el.ionRangeSlider(opts); + + function getValue() { + var result = $el.data("ionRangeSlider").result; + + // Function for converting numeric value from slider to appropriate type. + var convert = void 0; + var dataType = $el.data("data-type"); + if (dataType === "date") { + convert = function convert(val) { + return formatDateUTC(new Date(+val)); + }; + } else if (dataType === "datetime") { + convert = function convert(val) { + // Convert ms to s + return +val / 1000; + }; + } else { + convert = function convert(val) { + return +val; + }; + } + + if ($el.data("ionRangeSlider").options.type === "double") { + return [convert(result.from), convert(result.to)]; + } else { + return convert(result.from); + } + } + + var lastKnownKeys = null; + + $el.on("change.crosstalkSliderInput", function (event) { + if (!$el.data("updating") && !$el.data("animating")) { + var _getValue = getValue(), + _getValue2 = _slicedToArray(_getValue, 2), + from = _getValue2[0], + to = _getValue2[1]; + + var keys = []; + for (var i = 0; i < data.values.length; i++) { + var val = data.values[i]; + if (val >= from && val <= to) { + keys.push(data.keys[i]); + } + } + keys.sort(); + ctHandle.set(keys); + lastKnownKeys = keys; + } + }); + + // let $el = $(el); + // $el.on("change", "input[type="checkbox"]", function() { + // let checked = $el.find("input[type="checkbox"]:checked"); + // if (checked.length === 0) { + // ctHandle.clear(); + // } else { + // let keys = {}; + // checked.each(function() { + // data.map[this.value].forEach(function(key) { + // keys[key] = true; + // }); + // }); + // let keyArray = Object.keys(keys); + // keyArray.sort(); + // ctHandle.set(keyArray); + // } + // }); + + return { + suspend: function suspend() { + ctHandle.clear(); + }, + resume: function resume() { + if (lastKnownKeys) ctHandle.set(lastKnownKeys); + } + }; + } +}); + +// Convert a number to a string with leading zeros +function padZeros(n, digits) { + var str = n.toString(); + while (str.length < digits) { + str = "0" + str; + }return str; +} + +// Given a Date object, return a string in yyyy-mm-dd format, using the +// UTC date. This may be a day off from the date in the local time zone. +function formatDateUTC(date) { + if (date instanceof Date) { + return date.getUTCFullYear() + "-" + padZeros(date.getUTCMonth() + 1, 2) + "-" + padZeros(date.getUTCDate(), 2); + } else { + return null; + } +} + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./filter":2,"./input":6}],10:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.SelectionHandle = undefined; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _events = require("./events"); + +var _events2 = _interopRequireDefault(_events); + +var _group = require("./group"); + +var _group2 = _interopRequireDefault(_group); + +var _util = require("./util"); + +var util = _interopRequireWildcard(_util); + +function _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; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/** + * Use this class to read and write (and listen for changes to) the selection + * for a Crosstalk group. This is intended to be used for linked brushing. + * + * If two (or more) `SelectionHandle` instances in the same webpage share the + * same group name, they will share the same state. Setting the selection using + * one `SelectionHandle` instance will result in the `value` property instantly + * changing across the others, and `"change"` event listeners on all instances + * (including the one that initiated the sending) will fire. + * + * @param {string} [group] - The name of the Crosstalk group, or if none, + * null or undefined (or any other falsy value). This can be changed later + * via the [SelectionHandle#setGroup](#setGroup) method. + * @param {Object} [extraInfo] - An object whose properties will be copied to + * the event object whenever an event is emitted. + */ +var SelectionHandle = exports.SelectionHandle = function () { + function SelectionHandle() { + var group = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + var extraInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + + _classCallCheck(this, SelectionHandle); + + this._eventRelay = new _events2.default(); + this._emitter = new util.SubscriptionTracker(this._eventRelay); + + // Name of the group we're currently tracking, if any. Can change over time. + this._group = null; + // The Var we're currently tracking, if any. Can change over time. + this._var = null; + // The event handler subscription we currently have on var.on("change"). + this._varOnChangeSub = null; + + this._extraInfo = util.extend({ sender: this }, extraInfo); + + this.setGroup(group); + } + + /** + * Changes the Crosstalk group membership of this SelectionHandle. The group + * being switched away from (if any) will not have its selection value + * modified as a result of calling `setGroup`, even if this handle was the + * most recent handle to set the selection of the group. + * + * The group being switched to (if any) will also not have its selection value + * modified as a result of calling `setGroup`. If you want to set the + * selection value of the new group, call `set` explicitly. + * + * @param {string} group - The name of the Crosstalk group, or null (or + * undefined) to clear the group. + */ + + + _createClass(SelectionHandle, [{ + key: "setGroup", + value: function setGroup(group) { + var _this = this; + + // If group is unchanged, do nothing + if (this._group === group) return; + // Treat null, undefined, and other falsy values the same + if (!this._group && !group) return; + + if (this._var) { + this._var.off("change", this._varOnChangeSub); + this._var = null; + this._varOnChangeSub = null; + } + + this._group = group; + + if (group) { + this._var = (0, _group2.default)(group).var("selection"); + var sub = this._var.on("change", function (e) { + _this._eventRelay.trigger("change", e, _this); + }); + this._varOnChangeSub = sub; + } + } + + /** + * Retrieves the current selection for the group represented by this + * `SelectionHandle`. + * + * - If no selection is active, then this value will be falsy. + * - If a selection is active, but no data points are selected, then this + * value will be an empty array. + * - If a selection is active, and data points are selected, then the keys + * of the selected data points will be present in the array. + */ + + }, { + key: "_mergeExtraInfo", + + + /** + * Combines the given `extraInfo` (if any) with the handle's default + * `_extraInfo` (if any). + * @private + */ + value: function _mergeExtraInfo(extraInfo) { + // Important incidental effect: shallow clone is returned + return util.extend({}, this._extraInfo ? this._extraInfo : null, extraInfo ? extraInfo : null); + } + + /** + * Overwrites the current selection for the group, and raises the `"change"` + * event among all of the group's '`SelectionHandle` instances (including + * this one). + * + * @fires SelectionHandle#change + * @param {string[]} selectedKeys - Falsy, empty array, or array of keys (see + * {@link SelectionHandle#value}). + * @param {Object} [extraInfo] - Extra properties to be included on the event + * object that's passed to listeners (in addition to any options that were + * passed into the `SelectionHandle` constructor). + */ + + }, { + key: "set", + value: function set(selectedKeys, extraInfo) { + if (this._var) this._var.set(selectedKeys, this._mergeExtraInfo(extraInfo)); + } + + /** + * Overwrites the current selection for the group, and raises the `"change"` + * event among all of the group's '`SelectionHandle` instances (including + * this one). + * + * @fires SelectionHandle#change + * @param {Object} [extraInfo] - Extra properties to be included on the event + * object that's passed to listeners (in addition to any that were passed + * into the `SelectionHandle` constructor). + */ + + }, { + key: "clear", + value: function clear(extraInfo) { + if (this._var) this.set(void 0, this._mergeExtraInfo(extraInfo)); + } + + /** + * Subscribes to events on this `SelectionHandle`. + * + * @param {string} eventType - Indicates the type of events to listen to. + * Currently, only `"change"` is supported. + * @param {SelectionHandle~listener} listener - The callback function that + * will be invoked when the event occurs. + * @return {string} - A token to pass to {@link SelectionHandle#off} to cancel + * this subscription. + */ + + }, { + key: "on", + value: function on(eventType, listener) { + return this._emitter.on(eventType, listener); + } + + /** + * Cancels event subscriptions created by {@link SelectionHandle#on}. + * + * @param {string} eventType - The type of event to unsubscribe. + * @param {string|SelectionHandle~listener} listener - Either the callback + * function previously passed into {@link SelectionHandle#on}, or the + * string that was returned from {@link SelectionHandle#on}. + */ + + }, { + key: "off", + value: function off(eventType, listener) { + return this._emitter.off(eventType, listener); + } + + /** + * Shuts down the `SelectionHandle` object. + * + * Removes all event listeners that were added through this handle. + */ + + }, { + key: "close", + value: function close() { + this._emitter.removeAllListeners(); + this.setGroup(null); + } + }, { + key: "value", + get: function get() { + return this._var ? this._var.get() : null; + } + }]); + + return SelectionHandle; +}(); + +/** + * @callback SelectionHandle~listener + * @param {Object} event - An object containing details of the event. For + * `"change"` events, this includes the properties `value` (the new + * value of the selection, or `undefined` if no selection is active), + * `oldValue` (the previous value of the selection), and `sender` (the + * `SelectionHandle` instance that made the change). + */ + +/** + * @event SelectionHandle#change + * @type {object} + * @property {object} value - The new value of the selection, or `undefined` + * if no selection is active. + * @property {object} oldValue - The previous value of the selection. + * @property {SelectionHandle} sender - The `SelectionHandle` instance that + * changed the value. + */ + +},{"./events":1,"./group":4,"./util":11}],11:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.extend = extend; +exports.checkSorted = checkSorted; +exports.diffSortedLists = diffSortedLists; +exports.dataframeToD3 = dataframeToD3; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function extend(target) { + for (var _len = arguments.length, sources = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + sources[_key - 1] = arguments[_key]; + } + + for (var i = 0; i < sources.length; i++) { + var src = sources[i]; + if (typeof src === "undefined" || src === null) continue; + + for (var key in src) { + if (src.hasOwnProperty(key)) { + target[key] = src[key]; + } + } + } + return target; +} + +function checkSorted(list) { + for (var i = 1; i < list.length; i++) { + if (list[i] <= list[i - 1]) { + throw new Error("List is not sorted or contains duplicate"); + } + } +} + +function diffSortedLists(a, b) { + var i_a = 0; + var i_b = 0; + + if (!a) a = []; + if (!b) b = []; + + var a_only = []; + var b_only = []; + + checkSorted(a); + checkSorted(b); + + while (i_a < a.length && i_b < b.length) { + if (a[i_a] === b[i_b]) { + i_a++; + i_b++; + } else if (a[i_a] < b[i_b]) { + a_only.push(a[i_a++]); + } else { + b_only.push(b[i_b++]); + } + } + + if (i_a < a.length) a_only = a_only.concat(a.slice(i_a)); + if (i_b < b.length) b_only = b_only.concat(b.slice(i_b)); + return { + removed: a_only, + added: b_only + }; +} + +// Convert from wide: { colA: [1,2,3], colB: [4,5,6], ... } +// to long: [ {colA: 1, colB: 4}, {colA: 2, colB: 5}, ... ] +function dataframeToD3(df) { + var names = []; + var length = void 0; + for (var name in df) { + if (df.hasOwnProperty(name)) names.push(name); + if (_typeof(df[name]) !== "object" || typeof df[name].length === "undefined") { + throw new Error("All fields must be arrays"); + } else if (typeof length !== "undefined" && length !== df[name].length) { + throw new Error("All fields must be arrays of the same length"); + } + length = df[name].length; + } + var results = []; + var item = void 0; + for (var row = 0; row < length; row++) { + item = {}; + for (var col = 0; col < names.length; col++) { + item[names[col]] = df[names[col]][row]; + } + results.push(item); + } + return results; +} + +/** + * Keeps track of all event listener additions/removals and lets all active + * listeners be removed with a single operation. + * + * @private + */ + +var SubscriptionTracker = exports.SubscriptionTracker = function () { + function SubscriptionTracker(emitter) { + _classCallCheck(this, SubscriptionTracker); + + this._emitter = emitter; + this._subs = {}; + } + + _createClass(SubscriptionTracker, [{ + key: "on", + value: function on(eventType, listener) { + var sub = this._emitter.on(eventType, listener); + this._subs[sub] = eventType; + return sub; + } + }, { + key: "off", + value: function off(eventType, listener) { + var sub = this._emitter.off(eventType, listener); + if (sub) { + delete this._subs[sub]; + } + return sub; + } + }, { + key: "removeAllListeners", + value: function removeAllListeners() { + var _this = this; + + var current_subs = this._subs; + this._subs = {}; + Object.keys(current_subs).forEach(function (sub) { + _this._emitter.off(current_subs[sub], sub); + }); + } + }]); + + return SubscriptionTracker; +}(); + +},{}],12:[function(require,module,exports){ +(function (global){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _events = require("./events"); + +var _events2 = _interopRequireDefault(_events); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var Var = function () { + function Var(group, name, /*optional*/value) { + _classCallCheck(this, Var); + + this._group = group; + this._name = name; + this._value = value; + this._events = new _events2.default(); + } + + _createClass(Var, [{ + key: "get", + value: function get() { + return this._value; + } + }, { + key: "set", + value: function set(value, /*optional*/event) { + if (this._value === value) { + // Do nothing; the value hasn't changed + return; + } + var oldValue = this._value; + this._value = value; + // Alert JavaScript listeners that the value has changed + var evt = {}; + if (event && (typeof event === "undefined" ? "undefined" : _typeof(event)) === "object") { + for (var k in event) { + if (event.hasOwnProperty(k)) evt[k] = event[k]; + } + } + evt.oldValue = oldValue; + evt.value = value; + this._events.trigger("change", evt, this); + + // TODO: Make this extensible, to let arbitrary back-ends know that + // something has changed + if (global.Shiny && global.Shiny.onInputChange) { + global.Shiny.onInputChange(".clientValue-" + (this._group.name !== null ? this._group.name + "-" : "") + this._name, typeof value === "undefined" ? null : value); + } + } + }, { + key: "on", + value: function on(eventType, listener) { + return this._events.on(eventType, listener); + } + }, { + key: "off", + value: function off(eventType, listener) { + return this._events.off(eventType, listener); + } + }]); + + return Var; +}(); + +exports.default = Var; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"./events":1}]},{},[5]) +//# sourceMappingURL=crosstalk.js.map diff --git a/_site/site_libs/crosstalk-1.2.0/js/crosstalk.js.map b/_site/site_libs/crosstalk-1.2.0/js/crosstalk.js.map new file mode 100644 index 0000000..cff94f0 --- /dev/null +++ b/_site/site_libs/crosstalk-1.2.0/js/crosstalk.js.map @@ -0,0 +1,37 @@ +{ + "version": 3, + "sources": [ + "node_modules/browser-pack/_prelude.js", + "javascript/src/events.js", + "javascript/src/filter.js", + "javascript/src/filterset.js", + "javascript/src/group.js", + "javascript/src/index.js", + "javascript/src/input.js", + "javascript/src/input_checkboxgroup.js", + "javascript/src/input_selectize.js", + "javascript/src/input_slider.js", + "javascript/src/selection.js", + "javascript/src/util.js", + "javascript/src/var.js" + ], + "names": [], + "mappings": "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", + "file": "generated.js", + "sourceRoot": "", + "sourcesContent": [ + "(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Combine the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Close the handle. This clears this handle's contribution to the filter set,\n * and unsubscribes all event listeners.\n */\n close() {\n this._emitter.removeAllListeners();\n this.clear();\n this.setGroup(null);\n }\n\n /**\n * Clear this handle's contribution to the filter set.\n *\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n clear(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.clear(this._id);\n this._onChange(extraInfo);\n }\n\n /**\n * Set this handle's contribution to the filter set. This array should consist\n * of the keys of the rows that _should_ be displayed; any keys that are not\n * present in the array will be considered _filtered out_. Note that multiple\n * `FilterHandle` instances in the group may each contribute an array of keys,\n * and only those keys that appear in _all_ of the arrays make it through the\n * filter.\n *\n * @param {string[]} keys - Empty array, or array of keys. To clear the\n * filter, don't pass an empty array; instead, use the\n * {@link FilterHandle#clear} method.\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n set(keys, extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.update(this._id, keys);\n this._onChange(extraInfo);\n }\n\n /**\n * @return {string[]|null} - Either: 1) an array of keys that made it through\n * all of the `FilterHandle` instances, or, 2) `null`, which means no filter\n * is being applied (all data should be displayed).\n */\n get filteredKeys() {\n return this._filterSet ? this._filterSet.value : null;\n }\n\n /**\n * Subscribe to events on this `FilterHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {FilterHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link FilterHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancel event subscriptions created by {@link FilterHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|FilterHandle~listener} listener - Either the callback\n * function previously passed into {@link FilterHandle#on}, or the\n * string that was returned from {@link FilterHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n _onChange(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterVar.set(this._filterSet.value, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * @callback FilterHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the filter set, or `null` if no filter set is active),\n * `oldValue` (the previous value of the filter set), and `sender` (the\n * `FilterHandle` instance that made the change).\n */\n\n}\n\n/**\n * @event FilterHandle#change\n * @type {object}\n * @property {object} value - The new value of the filter set, or `null`\n * if no filter set is active.\n * @property {object} oldValue - The previous value of the filter set.\n * @property {FilterHandle} sender - The `FilterHandle` instance that\n * changed the value.\n */\n", + "import { diffSortedLists } from \"./util\";\n\nfunction naturalComparator(a, b) {\n if (a === b) {\n return 0;\n } else if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n }\n}\n\n/**\n * @private\n */\nexport default class FilterSet {\n constructor() {\n this.reset();\n }\n\n reset() {\n // Key: handle ID, Value: array of selected keys, or null\n this._handles = {};\n // Key: key string, Value: count of handles that include it\n this._keys = {};\n this._value = null;\n this._activeHandles = 0;\n }\n\n get value() {\n return this._value;\n }\n\n update(handleId, keys) {\n if (keys !== null) {\n keys = keys.slice(0); // clone before sorting\n keys.sort(naturalComparator);\n }\n\n let {added, removed} = diffSortedLists(this._handles[handleId], keys);\n this._handles[handleId] = keys;\n\n for (let i = 0; i < added.length; i++) {\n this._keys[added[i]] = (this._keys[added[i]] || 0) + 1;\n }\n for (let i = 0; i < removed.length; i++) {\n this._keys[removed[i]]--;\n }\n\n this._updateValue(keys);\n }\n\n /**\n * @param {string[]} keys Sorted array of strings that indicate\n * a superset of possible keys.\n * @private\n */\n _updateValue(keys = this._allKeys) {\n let handleCount = Object.keys(this._handles).length;\n if (handleCount === 0) {\n this._value = null;\n } else {\n this._value = [];\n for (let i = 0; i < keys.length; i++) {\n let count = this._keys[keys[i]];\n if (count === handleCount) {\n this._value.push(keys[i]);\n }\n }\n }\n }\n\n clear(handleId) {\n if (typeof(this._handles[handleId]) === \"undefined\") {\n return;\n }\n\n let keys = this._handles[handleId];\n if (!keys) {\n keys = [];\n }\n\n for (let i = 0; i < keys.length; i++) {\n this._keys[keys[i]]--;\n }\n delete this._handles[handleId];\n\n this._updateValue();\n }\n\n get _allKeys() {\n let allKeys = Object.keys(this._keys);\n allKeys.sort(naturalComparator);\n return allKeys;\n }\n}\n", + "import Var from \"./var\";\n\n// Use a global so that multiple copies of crosstalk.js can be loaded and still\n// have groups behave as singletons across all copies.\nglobal.__crosstalk_groups = global.__crosstalk_groups || {};\nlet groups = global.__crosstalk_groups;\n\nexport default function group(groupName) {\n if (groupName && typeof(groupName) === \"string\") {\n if (!groups.hasOwnProperty(groupName)) {\n groups[groupName] = new Group(groupName);\n }\n return groups[groupName];\n } else if (typeof(groupName) === \"object\" && groupName._vars && groupName.var) {\n // Appears to already be a group object\n return groupName;\n } else if (Array.isArray(groupName) &&\n groupName.length == 1 &&\n typeof(groupName[0]) === \"string\") {\n return group(groupName[0]);\n } else {\n throw new Error(\"Invalid groupName argument\");\n }\n}\n\nclass Group {\n constructor(name) {\n this.name = name;\n this._vars = {};\n }\n\n var(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n if (!this._vars.hasOwnProperty(name))\n this._vars[name] = new Var(this, name);\n return this._vars[name];\n }\n\n has(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n return this._vars.hasOwnProperty(name);\n }\n}\n", + "import group from \"./group\";\nimport { SelectionHandle } from \"./selection\";\nimport { FilterHandle } from \"./filter\";\nimport { bind } from \"./input\";\nimport \"./input_selectize\";\nimport \"./input_checkboxgroup\";\nimport \"./input_slider\";\n\nconst defaultGroup = group(\"default\");\n\nfunction var_(name) {\n return defaultGroup.var(name);\n}\n\nfunction has(name) {\n return defaultGroup.has(name);\n}\n\nif (global.Shiny) {\n global.Shiny.addCustomMessageHandler(\"update-client-value\", function(message) {\n if (typeof(message.group) === \"string\") {\n group(message.group).var(message.name).set(message.value);\n } else {\n var_(message.name).set(message.value);\n }\n });\n}\n\nconst crosstalk = {\n group: group,\n var: var_,\n has: has,\n SelectionHandle: SelectionHandle,\n FilterHandle: FilterHandle,\n bind: bind\n};\n\n/**\n * @namespace crosstalk\n */\nexport default crosstalk;\nglobal.crosstalk = crosstalk;\n", + "let $ = global.jQuery;\n\nlet bindings = {};\n\nexport function register(reg) {\n bindings[reg.className] = reg;\n if (global.document && global.document.readyState !== \"complete\") {\n $(() => {\n bind();\n });\n } else if (global.document) {\n setTimeout(bind, 100);\n }\n}\n\nexport function bind() {\n Object.keys(bindings).forEach(function(className) {\n let binding = bindings[className];\n $(\".\" + binding.className).not(\".crosstalk-input-bound\").each(function(i, el) {\n bindInstance(binding, el);\n });\n });\n}\n\n// Escape jQuery identifier\nfunction $escape(val) {\n return val.replace(/([!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~])/g, \"\\\\$1\");\n}\n\nfunction bindEl(el) {\n let $el = $(el);\n Object.keys(bindings).forEach(function(className) {\n if ($el.hasClass(className) && !$el.hasClass(\"crosstalk-input-bound\")) {\n let binding = bindings[className];\n bindInstance(binding, el);\n }\n });\n}\n\nfunction bindInstance(binding, el) {\n let jsonEl = $(el).find(\"script[type='application/json'][data-for='\" + $escape(el.id) + \"']\");\n let data = JSON.parse(jsonEl[0].innerText);\n\n let instance = binding.factory(el, data);\n $(el).data(\"crosstalk-instance\", instance);\n $(el).addClass(\"crosstalk-input-bound\");\n}\n\nif (global.Shiny) {\n let inputBinding = new global.Shiny.InputBinding();\n let $ = global.jQuery;\n $.extend(inputBinding, {\n find: function(scope) {\n return $(scope).find(\".crosstalk-input\");\n },\n initialize: function(el) {\n if (!$(el).hasClass(\"crosstalk-input-bound\")) {\n bindEl(el);\n }\n },\n getId: function(el) {\n return el.id;\n },\n getValue: function(el) {\n\n },\n setValue: function(el, value) {\n\n },\n receiveMessage: function(el, data) {\n\n },\n subscribe: function(el, callback) {\n $(el).data(\"crosstalk-instance\").resume();\n },\n unsubscribe: function(el) {\n $(el).data(\"crosstalk-instance\").suspend();\n }\n });\n global.Shiny.inputBindings.register(inputBinding, \"crosstalk.inputBinding\");\n}\n", + "import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-checkboxgroup\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n let $el = $(el);\n $el.on(\"change\", \"input[type='checkbox']\", function() {\n let checked = $el.find(\"input[type='checkbox']:checked\");\n if (checked.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n checked.each(function() {\n data.map[this.value].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n", + "import * as input from \"./input\";\nimport * as util from \"./util\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-select\",\n\n factory: function(el, data) {\n /*\n * items: {value: [...], label: [...]}\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n\n let first = [{value: \"\", label: \"(All)\"}];\n let items = util.dataframeToD3(data.items);\n let opts = {\n options: first.concat(items),\n valueField: \"value\",\n labelField: \"label\",\n searchField: \"label\"\n };\n\n let select = $(el).find(\"select\")[0];\n\n let selectize = $(select).selectize(opts)[0].selectize;\n\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n selectize.on(\"change\", function() {\n if (selectize.items.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n selectize.items.forEach(function(group) {\n data.map[group].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n", + "import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\nlet strftime = global.strftime;\n\ninput.register({\n className: \"crosstalk-input-slider\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let opts = {};\n let $el = $(el).find(\"input\");\n let dataType = $el.data(\"data-type\");\n let timeFormat = $el.data(\"time-format\");\n let round = $el.data(\"round\");\n let timeFormatter;\n\n // Set up formatting functions\n if (dataType === \"date\") {\n timeFormatter = strftime.utc();\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n\n } else if (dataType === \"datetime\") {\n let timezone = $el.data(\"timezone\");\n if (timezone)\n timeFormatter = strftime.timezone(timezone);\n else\n timeFormatter = strftime;\n\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n } else if (dataType === \"number\") {\n if (typeof round !== \"undefined\")\n opts.prettify = function(num) {\n let factor = Math.pow(10, round);\n return Math.round(num * factor) / factor;\n };\n }\n\n $el.ionRangeSlider(opts);\n\n function getValue() {\n let result = $el.data(\"ionRangeSlider\").result;\n\n // Function for converting numeric value from slider to appropriate type.\n let convert;\n let dataType = $el.data(\"data-type\");\n if (dataType === \"date\") {\n convert = function(val) {\n return formatDateUTC(new Date(+val));\n };\n } else if (dataType === \"datetime\") {\n convert = function(val) {\n // Convert ms to s\n return +val / 1000;\n };\n } else {\n convert = function(val) { return +val; };\n }\n\n if ($el.data(\"ionRangeSlider\").options.type === \"double\") {\n return [convert(result.from), convert(result.to)];\n } else {\n return convert(result.from);\n }\n }\n\n let lastKnownKeys = null;\n\n $el.on(\"change.crosstalkSliderInput\", function(event) {\n if (!$el.data(\"updating\") && !$el.data(\"animating\")) {\n let [from, to] = getValue();\n let keys = [];\n for (let i = 0; i < data.values.length; i++) {\n let val = data.values[i];\n if (val >= from && val <= to) {\n keys.push(data.keys[i]);\n }\n }\n keys.sort();\n ctHandle.set(keys);\n lastKnownKeys = keys;\n }\n });\n\n\n // let $el = $(el);\n // $el.on(\"change\", \"input[type=\"checkbox\"]\", function() {\n // let checked = $el.find(\"input[type=\"checkbox\"]:checked\");\n // if (checked.length === 0) {\n // ctHandle.clear();\n // } else {\n // let keys = {};\n // checked.each(function() {\n // data.map[this.value].forEach(function(key) {\n // keys[key] = true;\n // });\n // });\n // let keyArray = Object.keys(keys);\n // keyArray.sort();\n // ctHandle.set(keyArray);\n // }\n // });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n\n\n// Convert a number to a string with leading zeros\nfunction padZeros(n, digits) {\n let str = n.toString();\n while (str.length < digits)\n str = \"0\" + str;\n return str;\n}\n\n// Given a Date object, return a string in yyyy-mm-dd format, using the\n// UTC date. This may be a day off from the date in the local time zone.\nfunction formatDateUTC(date) {\n if (date instanceof Date) {\n return date.getUTCFullYear() + \"-\" +\n padZeros(date.getUTCMonth()+1, 2) + \"-\" +\n padZeros(date.getUTCDate(), 2);\n\n } else {\n return null;\n }\n}\n", + "import Events from \"./events\";\nimport grp from \"./group\";\nimport * as util from \"./util\";\n\n/**\n * Use this class to read and write (and listen for changes to) the selection\n * for a Crosstalk group. This is intended to be used for linked brushing.\n *\n * If two (or more) `SelectionHandle` instances in the same webpage share the\n * same group name, they will share the same state. Setting the selection using\n * one `SelectionHandle` instance will result in the `value` property instantly\n * changing across the others, and `\"change\"` event listeners on all instances\n * (including the one that initiated the sending) will fire.\n *\n * @param {string} [group] - The name of the Crosstalk group, or if none,\n * null or undefined (or any other falsy value). This can be changed later\n * via the [SelectionHandle#setGroup](#setGroup) method.\n * @param {Object} [extraInfo] - An object whose properties will be copied to\n * the event object whenever an event is emitted.\n */\nexport class SelectionHandle {\n\n constructor(group = null, extraInfo = null) {\n this._eventRelay = new Events();\n this._emitter = new util.SubscriptionTracker(this._eventRelay);\n\n // Name of the group we're currently tracking, if any. Can change over time.\n this._group = null;\n // The Var we're currently tracking, if any. Can change over time.\n this._var = null;\n // The event handler subscription we currently have on var.on(\"change\").\n this._varOnChangeSub = null;\n\n this._extraInfo = util.extend({ sender: this }, extraInfo);\n\n this.setGroup(group);\n }\n\n /**\n * Changes the Crosstalk group membership of this SelectionHandle. The group\n * being switched away from (if any) will not have its selection value\n * modified as a result of calling `setGroup`, even if this handle was the\n * most recent handle to set the selection of the group.\n *\n * The group being switched to (if any) will also not have its selection value\n * modified as a result of calling `setGroup`. If you want to set the\n * selection value of the new group, call `set` explicitly.\n *\n * @param {string} group - The name of the Crosstalk group, or null (or\n * undefined) to clear the group.\n */\n setGroup(group) {\n // If group is unchanged, do nothing\n if (this._group === group)\n return;\n // Treat null, undefined, and other falsy values the same\n if (!this._group && !group)\n return;\n\n if (this._var) {\n this._var.off(\"change\", this._varOnChangeSub);\n this._var = null;\n this._varOnChangeSub = null;\n }\n\n this._group = group;\n\n if (group) {\n this._var = grp(group).var(\"selection\");\n let sub = this._var.on(\"change\", (e) => {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Retrieves the current selection for the group represented by this\n * `SelectionHandle`.\n *\n * - If no selection is active, then this value will be falsy.\n * - If a selection is active, but no data points are selected, then this\n * value will be an empty array.\n * - If a selection is active, and data points are selected, then the keys\n * of the selected data points will be present in the array.\n */\n get value() {\n return this._var ? this._var.get() : null;\n }\n\n /**\n * Combines the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n // Important incidental effect: shallow clone is returned\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {string[]} selectedKeys - Falsy, empty array, or array of keys (see\n * {@link SelectionHandle#value}).\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `SelectionHandle` constructor).\n */\n set(selectedKeys, extraInfo) {\n if (this._var)\n this._var.set(selectedKeys, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any that were passed\n * into the `SelectionHandle` constructor).\n */\n clear(extraInfo) {\n if (this._var)\n this.set(void 0, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Subscribes to events on this `SelectionHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {SelectionHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link SelectionHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancels event subscriptions created by {@link SelectionHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|SelectionHandle~listener} listener - Either the callback\n * function previously passed into {@link SelectionHandle#on}, or the\n * string that was returned from {@link SelectionHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n /**\n * Shuts down the `SelectionHandle` object.\n *\n * Removes all event listeners that were added through this handle.\n */\n close() {\n this._emitter.removeAllListeners();\n this.setGroup(null);\n }\n}\n\n/**\n * @callback SelectionHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the selection, or `undefined` if no selection is active),\n * `oldValue` (the previous value of the selection), and `sender` (the\n * `SelectionHandle` instance that made the change).\n */\n\n/**\n * @event SelectionHandle#change\n * @type {object}\n * @property {object} value - The new value of the selection, or `undefined`\n * if no selection is active.\n * @property {object} oldValue - The previous value of the selection.\n * @property {SelectionHandle} sender - The `SelectionHandle` instance that\n * changed the value.\n */\n", + "export function extend(target, ...sources) {\n for (let i = 0; i < sources.length; i++) {\n let src = sources[i];\n if (typeof(src) === \"undefined\" || src === null)\n continue;\n\n for (let key in src) {\n if (src.hasOwnProperty(key)) {\n target[key] = src[key];\n }\n }\n }\n return target;\n}\n\nexport function checkSorted(list) {\n for (let i = 1; i < list.length; i++) {\n if (list[i] <= list[i-1]) {\n throw new Error(\"List is not sorted or contains duplicate\");\n }\n }\n}\n\nexport function diffSortedLists(a, b) {\n let i_a = 0;\n let i_b = 0;\n\n if (!a) a = [];\n if (!b) b = [];\n\n let a_only = [];\n let b_only = [];\n\n checkSorted(a);\n checkSorted(b);\n\n while (i_a < a.length && i_b < b.length) {\n if (a[i_a] === b[i_b]) {\n i_a++;\n i_b++;\n } else if (a[i_a] < b[i_b]) {\n a_only.push(a[i_a++]);\n } else {\n b_only.push(b[i_b++]);\n }\n }\n\n if (i_a < a.length)\n a_only = a_only.concat(a.slice(i_a));\n if (i_b < b.length)\n b_only = b_only.concat(b.slice(i_b));\n return {\n removed: a_only,\n added: b_only\n };\n}\n\n// Convert from wide: { colA: [1,2,3], colB: [4,5,6], ... }\n// to long: [ {colA: 1, colB: 4}, {colA: 2, colB: 5}, ... ]\nexport function dataframeToD3(df) {\n let names = [];\n let length;\n for (let name in df) {\n if (df.hasOwnProperty(name))\n names.push(name);\n if (typeof(df[name]) !== \"object\" || typeof(df[name].length) === \"undefined\") {\n throw new Error(\"All fields must be arrays\");\n } else if (typeof(length) !== \"undefined\" && length !== df[name].length) {\n throw new Error(\"All fields must be arrays of the same length\");\n }\n length = df[name].length;\n }\n let results = [];\n let item;\n for (let row = 0; row < length; row++) {\n item = {};\n for (let col = 0; col < names.length; col++) {\n item[names[col]] = df[names[col]][row];\n }\n results.push(item);\n }\n return results;\n}\n\n/**\n * Keeps track of all event listener additions/removals and lets all active\n * listeners be removed with a single operation.\n *\n * @private\n */\nexport class SubscriptionTracker {\n constructor(emitter) {\n this._emitter = emitter;\n this._subs = {};\n }\n\n on(eventType, listener) {\n let sub = this._emitter.on(eventType, listener);\n this._subs[sub] = eventType;\n return sub;\n }\n\n off(eventType, listener) {\n let sub = this._emitter.off(eventType, listener);\n if (sub) {\n delete this._subs[sub];\n }\n return sub;\n }\n\n removeAllListeners() {\n let current_subs = this._subs;\n this._subs = {};\n Object.keys(current_subs).forEach((sub) => {\n this._emitter.off(current_subs[sub], sub);\n });\n }\n}\n", + "import Events from \"./events\";\n\nexport default class Var {\n constructor(group, name, /*optional*/ value) {\n this._group = group;\n this._name = name;\n this._value = value;\n this._events = new Events();\n }\n\n get() {\n return this._value;\n }\n\n set(value, /*optional*/ event) {\n if (this._value === value) {\n // Do nothing; the value hasn't changed\n return;\n }\n let oldValue = this._value;\n this._value = value;\n // Alert JavaScript listeners that the value has changed\n let evt = {};\n if (event && typeof(event) === \"object\") {\n for (let k in event) {\n if (event.hasOwnProperty(k))\n evt[k] = event[k];\n }\n }\n evt.oldValue = oldValue;\n evt.value = value;\n this._events.trigger(\"change\", evt, this);\n\n // TODO: Make this extensible, to let arbitrary back-ends know that\n // something has changed\n if (global.Shiny && global.Shiny.onInputChange) {\n global.Shiny.onInputChange(\n \".clientValue-\" +\n (this._group.name !== null ? this._group.name + \"-\" : \"\") +\n this._name,\n typeof(value) === \"undefined\" ? null : value\n );\n }\n }\n\n on(eventType, listener) {\n return this._events.on(eventType, listener);\n }\n\n off(eventType, listener) {\n return this._events.off(eventType, listener);\n }\n}\n" + ] +} \ No newline at end of file diff --git a/_site/site_libs/crosstalk-1.2.0/js/crosstalk.min.js b/_site/site_libs/crosstalk-1.2.0/js/crosstalk.min.js new file mode 100644 index 0000000..b7ec0ac --- /dev/null +++ b/_site/site_libs/crosstalk-1.2.0/js/crosstalk.min.js @@ -0,0 +1,2 @@ +!function o(u,a,l){function s(n,e){if(!a[n]){if(!u[n]){var t="function"==typeof require&&require;if(!e&&t)return t(n,!0);if(f)return f(n,!0);var r=new Error("Cannot find module '"+n+"'");throw r.code="MODULE_NOT_FOUND",r}var i=a[n]={exports:{}};u[n][0].call(i.exports,function(e){var t=u[n][1][e];return s(t||e)},i,i.exports,o,u,a,l)}return a[n].exports}for(var f="function"==typeof require&&require,e=0;e?@[\\\]^`{|}~])/g,"\\$1")+"']"),r=JSON.parse(n[0].innerText),i=e.factory(t,r);o(t).data("crosstalk-instance",i),o(t).addClass("crosstalk-input-bound")}if(t.Shiny){var e=new t.Shiny.InputBinding,u=t.jQuery;u.extend(e,{find:function(e){return u(e).find(".crosstalk-input")},initialize:function(e){var t,n;u(e).hasClass("crosstalk-input-bound")||(n=o(t=e),Object.keys(r).forEach(function(e){n.hasClass(e)&&!n.hasClass("crosstalk-input-bound")&&i(r[e],t)}))},getId:function(e){return e.id},getValue:function(e){},setValue:function(e,t){},receiveMessage:function(e,t){},subscribe:function(e,t){u(e).data("crosstalk-instance").resume()},unsubscribe:function(e){u(e).data("crosstalk-instance").suspend()}}),t.Shiny.inputBindings.register(e,"crosstalk.inputBinding")}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],7:[function(r,e,t){(function(e){"use strict";var t=function(e){{if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}}(r("./input")),n=r("./filter");var a=e.jQuery;t.register({className:"crosstalk-input-checkboxgroup",factory:function(e,r){var i=new n.FilterHandle(r.group),o=void 0,u=a(e);return u.on("change","input[type='checkbox']",function(){var e=u.find("input[type='checkbox']:checked");if(0===e.length)o=null,i.clear();else{var t={};e.each(function(){r.map[this.value].forEach(function(e){t[e]=!0})});var n=Object.keys(t);n.sort(),o=n,i.set(n)}}),{suspend:function(){i.clear()},resume:function(){o&&i.set(o)}}}})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./filter":2,"./input":6}],8:[function(r,e,t){(function(e){"use strict";var t=n(r("./input")),l=n(r("./util")),s=r("./filter");function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}var f=e.jQuery;t.register({className:"crosstalk-input-select",factory:function(e,n){var t=l.dataframeToD3(n.items),r={options:[{value:"",label:"(All)"}].concat(t),valueField:"value",labelField:"label",searchField:"label"},i=f(e).find("select")[0],o=f(i).selectize(r)[0].selectize,u=new s.FilterHandle(n.group),a=void 0;return o.on("change",function(){if(0===o.items.length)a=null,u.clear();else{var t={};o.items.forEach(function(e){n.map[e].forEach(function(e){t[e]=!0})});var e=Object.keys(t);e.sort(),a=e,u.set(e)}}),{suspend:function(){u.clear()},resume:function(){a&&u.set(a)}}}})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./filter":2,"./input":6,"./util":11}],9:[function(n,e,t){(function(e){"use strict";var d=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var u,a=e[Symbol.iterator]();!(r=(u=a.next()).done)&&(n.push(u.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&a.return&&a.return()}finally{if(i)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},t=function(e){{if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}}(n("./input")),a=n("./filter");var v=e.jQuery,p=e.strftime;function y(e,t){for(var n=e.toString();n.length {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Combine the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Close the handle. This clears this handle's contribution to the filter set,\n * and unsubscribes all event listeners.\n */\n close() {\n this._emitter.removeAllListeners();\n this.clear();\n this.setGroup(null);\n }\n\n /**\n * Clear this handle's contribution to the filter set.\n *\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n clear(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.clear(this._id);\n this._onChange(extraInfo);\n }\n\n /**\n * Set this handle's contribution to the filter set. This array should consist\n * of the keys of the rows that _should_ be displayed; any keys that are not\n * present in the array will be considered _filtered out_. Note that multiple\n * `FilterHandle` instances in the group may each contribute an array of keys,\n * and only those keys that appear in _all_ of the arrays make it through the\n * filter.\n *\n * @param {string[]} keys - Empty array, or array of keys. To clear the\n * filter, don't pass an empty array; instead, use the\n * {@link FilterHandle#clear} method.\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n set(keys, extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.update(this._id, keys);\n this._onChange(extraInfo);\n }\n\n /**\n * @return {string[]|null} - Either: 1) an array of keys that made it through\n * all of the `FilterHandle` instances, or, 2) `null`, which means no filter\n * is being applied (all data should be displayed).\n */\n get filteredKeys() {\n return this._filterSet ? this._filterSet.value : null;\n }\n\n /**\n * Subscribe to events on this `FilterHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {FilterHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link FilterHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancel event subscriptions created by {@link FilterHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|FilterHandle~listener} listener - Either the callback\n * function previously passed into {@link FilterHandle#on}, or the\n * string that was returned from {@link FilterHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n _onChange(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterVar.set(this._filterSet.value, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * @callback FilterHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the filter set, or `null` if no filter set is active),\n * `oldValue` (the previous value of the filter set), and `sender` (the\n * `FilterHandle` instance that made the change).\n */\n\n}\n\n/**\n * @event FilterHandle#change\n * @type {object}\n * @property {object} value - The new value of the filter set, or `null`\n * if no filter set is active.\n * @property {object} oldValue - The previous value of the filter set.\n * @property {FilterHandle} sender - The `FilterHandle` instance that\n * changed the value.\n */\n","import { diffSortedLists } from \"./util\";\n\nfunction naturalComparator(a, b) {\n if (a === b) {\n return 0;\n } else if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n }\n}\n\n/**\n * @private\n */\nexport default class FilterSet {\n constructor() {\n this.reset();\n }\n\n reset() {\n // Key: handle ID, Value: array of selected keys, or null\n this._handles = {};\n // Key: key string, Value: count of handles that include it\n this._keys = {};\n this._value = null;\n this._activeHandles = 0;\n }\n\n get value() {\n return this._value;\n }\n\n update(handleId, keys) {\n if (keys !== null) {\n keys = keys.slice(0); // clone before sorting\n keys.sort(naturalComparator);\n }\n\n let {added, removed} = diffSortedLists(this._handles[handleId], keys);\n this._handles[handleId] = keys;\n\n for (let i = 0; i < added.length; i++) {\n this._keys[added[i]] = (this._keys[added[i]] || 0) + 1;\n }\n for (let i = 0; i < removed.length; i++) {\n this._keys[removed[i]]--;\n }\n\n this._updateValue(keys);\n }\n\n /**\n * @param {string[]} keys Sorted array of strings that indicate\n * a superset of possible keys.\n * @private\n */\n _updateValue(keys = this._allKeys) {\n let handleCount = Object.keys(this._handles).length;\n if (handleCount === 0) {\n this._value = null;\n } else {\n this._value = [];\n for (let i = 0; i < keys.length; i++) {\n let count = this._keys[keys[i]];\n if (count === handleCount) {\n this._value.push(keys[i]);\n }\n }\n }\n }\n\n clear(handleId) {\n if (typeof(this._handles[handleId]) === \"undefined\") {\n return;\n }\n\n let keys = this._handles[handleId];\n if (!keys) {\n keys = [];\n }\n\n for (let i = 0; i < keys.length; i++) {\n this._keys[keys[i]]--;\n }\n delete this._handles[handleId];\n\n this._updateValue();\n }\n\n get _allKeys() {\n let allKeys = Object.keys(this._keys);\n allKeys.sort(naturalComparator);\n return allKeys;\n }\n}\n","import Var from \"./var\";\n\n// Use a global so that multiple copies of crosstalk.js can be loaded and still\n// have groups behave as singletons across all copies.\nglobal.__crosstalk_groups = global.__crosstalk_groups || {};\nlet groups = global.__crosstalk_groups;\n\nexport default function group(groupName) {\n if (groupName && typeof(groupName) === \"string\") {\n if (!groups.hasOwnProperty(groupName)) {\n groups[groupName] = new Group(groupName);\n }\n return groups[groupName];\n } else if (typeof(groupName) === \"object\" && groupName._vars && groupName.var) {\n // Appears to already be a group object\n return groupName;\n } else if (Array.isArray(groupName) &&\n groupName.length == 1 &&\n typeof(groupName[0]) === \"string\") {\n return group(groupName[0]);\n } else {\n throw new Error(\"Invalid groupName argument\");\n }\n}\n\nclass Group {\n constructor(name) {\n this.name = name;\n this._vars = {};\n }\n\n var(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n if (!this._vars.hasOwnProperty(name))\n this._vars[name] = new Var(this, name);\n return this._vars[name];\n }\n\n has(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n return this._vars.hasOwnProperty(name);\n }\n}\n","import group from \"./group\";\nimport { SelectionHandle } from \"./selection\";\nimport { FilterHandle } from \"./filter\";\nimport { bind } from \"./input\";\nimport \"./input_selectize\";\nimport \"./input_checkboxgroup\";\nimport \"./input_slider\";\n\nconst defaultGroup = group(\"default\");\n\nfunction var_(name) {\n return defaultGroup.var(name);\n}\n\nfunction has(name) {\n return defaultGroup.has(name);\n}\n\nif (global.Shiny) {\n global.Shiny.addCustomMessageHandler(\"update-client-value\", function(message) {\n if (typeof(message.group) === \"string\") {\n group(message.group).var(message.name).set(message.value);\n } else {\n var_(message.name).set(message.value);\n }\n });\n}\n\nconst crosstalk = {\n group: group,\n var: var_,\n has: has,\n SelectionHandle: SelectionHandle,\n FilterHandle: FilterHandle,\n bind: bind\n};\n\n/**\n * @namespace crosstalk\n */\nexport default crosstalk;\nglobal.crosstalk = crosstalk;\n","let $ = global.jQuery;\n\nlet bindings = {};\n\nexport function register(reg) {\n bindings[reg.className] = reg;\n if (global.document && global.document.readyState !== \"complete\") {\n $(() => {\n bind();\n });\n } else if (global.document) {\n setTimeout(bind, 100);\n }\n}\n\nexport function bind() {\n Object.keys(bindings).forEach(function(className) {\n let binding = bindings[className];\n $(\".\" + binding.className).not(\".crosstalk-input-bound\").each(function(i, el) {\n bindInstance(binding, el);\n });\n });\n}\n\n// Escape jQuery identifier\nfunction $escape(val) {\n return val.replace(/([!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~])/g, \"\\\\$1\");\n}\n\nfunction bindEl(el) {\n let $el = $(el);\n Object.keys(bindings).forEach(function(className) {\n if ($el.hasClass(className) && !$el.hasClass(\"crosstalk-input-bound\")) {\n let binding = bindings[className];\n bindInstance(binding, el);\n }\n });\n}\n\nfunction bindInstance(binding, el) {\n let jsonEl = $(el).find(\"script[type='application/json'][data-for='\" + $escape(el.id) + \"']\");\n let data = JSON.parse(jsonEl[0].innerText);\n\n let instance = binding.factory(el, data);\n $(el).data(\"crosstalk-instance\", instance);\n $(el).addClass(\"crosstalk-input-bound\");\n}\n\nif (global.Shiny) {\n let inputBinding = new global.Shiny.InputBinding();\n let $ = global.jQuery;\n $.extend(inputBinding, {\n find: function(scope) {\n return $(scope).find(\".crosstalk-input\");\n },\n initialize: function(el) {\n if (!$(el).hasClass(\"crosstalk-input-bound\")) {\n bindEl(el);\n }\n },\n getId: function(el) {\n return el.id;\n },\n getValue: function(el) {\n\n },\n setValue: function(el, value) {\n\n },\n receiveMessage: function(el, data) {\n\n },\n subscribe: function(el, callback) {\n $(el).data(\"crosstalk-instance\").resume();\n },\n unsubscribe: function(el) {\n $(el).data(\"crosstalk-instance\").suspend();\n }\n });\n global.Shiny.inputBindings.register(inputBinding, \"crosstalk.inputBinding\");\n}\n","import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-checkboxgroup\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n let $el = $(el);\n $el.on(\"change\", \"input[type='checkbox']\", function() {\n let checked = $el.find(\"input[type='checkbox']:checked\");\n if (checked.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n checked.each(function() {\n data.map[this.value].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n","import * as input from \"./input\";\nimport * as util from \"./util\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-select\",\n\n factory: function(el, data) {\n /*\n * items: {value: [...], label: [...]}\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n\n let first = [{value: \"\", label: \"(All)\"}];\n let items = util.dataframeToD3(data.items);\n let opts = {\n options: first.concat(items),\n valueField: \"value\",\n labelField: \"label\",\n searchField: \"label\"\n };\n\n let select = $(el).find(\"select\")[0];\n\n let selectize = $(select).selectize(opts)[0].selectize;\n\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n selectize.on(\"change\", function() {\n if (selectize.items.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n selectize.items.forEach(function(group) {\n data.map[group].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n","import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\nlet strftime = global.strftime;\n\ninput.register({\n className: \"crosstalk-input-slider\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let opts = {};\n let $el = $(el).find(\"input\");\n let dataType = $el.data(\"data-type\");\n let timeFormat = $el.data(\"time-format\");\n let round = $el.data(\"round\");\n let timeFormatter;\n\n // Set up formatting functions\n if (dataType === \"date\") {\n timeFormatter = strftime.utc();\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n\n } else if (dataType === \"datetime\") {\n let timezone = $el.data(\"timezone\");\n if (timezone)\n timeFormatter = strftime.timezone(timezone);\n else\n timeFormatter = strftime;\n\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n } else if (dataType === \"number\") {\n if (typeof round !== \"undefined\")\n opts.prettify = function(num) {\n let factor = Math.pow(10, round);\n return Math.round(num * factor) / factor;\n };\n }\n\n $el.ionRangeSlider(opts);\n\n function getValue() {\n let result = $el.data(\"ionRangeSlider\").result;\n\n // Function for converting numeric value from slider to appropriate type.\n let convert;\n let dataType = $el.data(\"data-type\");\n if (dataType === \"date\") {\n convert = function(val) {\n return formatDateUTC(new Date(+val));\n };\n } else if (dataType === \"datetime\") {\n convert = function(val) {\n // Convert ms to s\n return +val / 1000;\n };\n } else {\n convert = function(val) { return +val; };\n }\n\n if ($el.data(\"ionRangeSlider\").options.type === \"double\") {\n return [convert(result.from), convert(result.to)];\n } else {\n return convert(result.from);\n }\n }\n\n let lastKnownKeys = null;\n\n $el.on(\"change.crosstalkSliderInput\", function(event) {\n if (!$el.data(\"updating\") && !$el.data(\"animating\")) {\n let [from, to] = getValue();\n let keys = [];\n for (let i = 0; i < data.values.length; i++) {\n let val = data.values[i];\n if (val >= from && val <= to) {\n keys.push(data.keys[i]);\n }\n }\n keys.sort();\n ctHandle.set(keys);\n lastKnownKeys = keys;\n }\n });\n\n\n // let $el = $(el);\n // $el.on(\"change\", \"input[type=\"checkbox\"]\", function() {\n // let checked = $el.find(\"input[type=\"checkbox\"]:checked\");\n // if (checked.length === 0) {\n // ctHandle.clear();\n // } else {\n // let keys = {};\n // checked.each(function() {\n // data.map[this.value].forEach(function(key) {\n // keys[key] = true;\n // });\n // });\n // let keyArray = Object.keys(keys);\n // keyArray.sort();\n // ctHandle.set(keyArray);\n // }\n // });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n\n\n// Convert a number to a string with leading zeros\nfunction padZeros(n, digits) {\n let str = n.toString();\n while (str.length < digits)\n str = \"0\" + str;\n return str;\n}\n\n// Given a Date object, return a string in yyyy-mm-dd format, using the\n// UTC date. This may be a day off from the date in the local time zone.\nfunction formatDateUTC(date) {\n if (date instanceof Date) {\n return date.getUTCFullYear() + \"-\" +\n padZeros(date.getUTCMonth()+1, 2) + \"-\" +\n padZeros(date.getUTCDate(), 2);\n\n } else {\n return null;\n }\n}\n","import Events from \"./events\";\nimport grp from \"./group\";\nimport * as util from \"./util\";\n\n/**\n * Use this class to read and write (and listen for changes to) the selection\n * for a Crosstalk group. This is intended to be used for linked brushing.\n *\n * If two (or more) `SelectionHandle` instances in the same webpage share the\n * same group name, they will share the same state. Setting the selection using\n * one `SelectionHandle` instance will result in the `value` property instantly\n * changing across the others, and `\"change\"` event listeners on all instances\n * (including the one that initiated the sending) will fire.\n *\n * @param {string} [group] - The name of the Crosstalk group, or if none,\n * null or undefined (or any other falsy value). This can be changed later\n * via the [SelectionHandle#setGroup](#setGroup) method.\n * @param {Object} [extraInfo] - An object whose properties will be copied to\n * the event object whenever an event is emitted.\n */\nexport class SelectionHandle {\n\n constructor(group = null, extraInfo = null) {\n this._eventRelay = new Events();\n this._emitter = new util.SubscriptionTracker(this._eventRelay);\n\n // Name of the group we're currently tracking, if any. Can change over time.\n this._group = null;\n // The Var we're currently tracking, if any. Can change over time.\n this._var = null;\n // The event handler subscription we currently have on var.on(\"change\").\n this._varOnChangeSub = null;\n\n this._extraInfo = util.extend({ sender: this }, extraInfo);\n\n this.setGroup(group);\n }\n\n /**\n * Changes the Crosstalk group membership of this SelectionHandle. The group\n * being switched away from (if any) will not have its selection value\n * modified as a result of calling `setGroup`, even if this handle was the\n * most recent handle to set the selection of the group.\n *\n * The group being switched to (if any) will also not have its selection value\n * modified as a result of calling `setGroup`. If you want to set the\n * selection value of the new group, call `set` explicitly.\n *\n * @param {string} group - The name of the Crosstalk group, or null (or\n * undefined) to clear the group.\n */\n setGroup(group) {\n // If group is unchanged, do nothing\n if (this._group === group)\n return;\n // Treat null, undefined, and other falsy values the same\n if (!this._group && !group)\n return;\n\n if (this._var) {\n this._var.off(\"change\", this._varOnChangeSub);\n this._var = null;\n this._varOnChangeSub = null;\n }\n\n this._group = group;\n\n if (group) {\n this._var = grp(group).var(\"selection\");\n let sub = this._var.on(\"change\", (e) => {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Retrieves the current selection for the group represented by this\n * `SelectionHandle`.\n *\n * - If no selection is active, then this value will be falsy.\n * - If a selection is active, but no data points are selected, then this\n * value will be an empty array.\n * - If a selection is active, and data points are selected, then the keys\n * of the selected data points will be present in the array.\n */\n get value() {\n return this._var ? this._var.get() : null;\n }\n\n /**\n * Combines the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n // Important incidental effect: shallow clone is returned\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {string[]} selectedKeys - Falsy, empty array, or array of keys (see\n * {@link SelectionHandle#value}).\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `SelectionHandle` constructor).\n */\n set(selectedKeys, extraInfo) {\n if (this._var)\n this._var.set(selectedKeys, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any that were passed\n * into the `SelectionHandle` constructor).\n */\n clear(extraInfo) {\n if (this._var)\n this.set(void 0, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Subscribes to events on this `SelectionHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {SelectionHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link SelectionHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancels event subscriptions created by {@link SelectionHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|SelectionHandle~listener} listener - Either the callback\n * function previously passed into {@link SelectionHandle#on}, or the\n * string that was returned from {@link SelectionHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n /**\n * Shuts down the `SelectionHandle` object.\n *\n * Removes all event listeners that were added through this handle.\n */\n close() {\n this._emitter.removeAllListeners();\n this.setGroup(null);\n }\n}\n\n/**\n * @callback SelectionHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the selection, or `undefined` if no selection is active),\n * `oldValue` (the previous value of the selection), and `sender` (the\n * `SelectionHandle` instance that made the change).\n */\n\n/**\n * @event SelectionHandle#change\n * @type {object}\n * @property {object} value - The new value of the selection, or `undefined`\n * if no selection is active.\n * @property {object} oldValue - The previous value of the selection.\n * @property {SelectionHandle} sender - The `SelectionHandle` instance that\n * changed the value.\n */\n","export function extend(target, ...sources) {\n for (let i = 0; i < sources.length; i++) {\n let src = sources[i];\n if (typeof(src) === \"undefined\" || src === null)\n continue;\n\n for (let key in src) {\n if (src.hasOwnProperty(key)) {\n target[key] = src[key];\n }\n }\n }\n return target;\n}\n\nexport function checkSorted(list) {\n for (let i = 1; i < list.length; i++) {\n if (list[i] <= list[i-1]) {\n throw new Error(\"List is not sorted or contains duplicate\");\n }\n }\n}\n\nexport function diffSortedLists(a, b) {\n let i_a = 0;\n let i_b = 0;\n\n if (!a) a = [];\n if (!b) b = [];\n\n let a_only = [];\n let b_only = [];\n\n checkSorted(a);\n checkSorted(b);\n\n while (i_a < a.length && i_b < b.length) {\n if (a[i_a] === b[i_b]) {\n i_a++;\n i_b++;\n } else if (a[i_a] < b[i_b]) {\n a_only.push(a[i_a++]);\n } else {\n b_only.push(b[i_b++]);\n }\n }\n\n if (i_a < a.length)\n a_only = a_only.concat(a.slice(i_a));\n if (i_b < b.length)\n b_only = b_only.concat(b.slice(i_b));\n return {\n removed: a_only,\n added: b_only\n };\n}\n\n// Convert from wide: { colA: [1,2,3], colB: [4,5,6], ... }\n// to long: [ {colA: 1, colB: 4}, {colA: 2, colB: 5}, ... ]\nexport function dataframeToD3(df) {\n let names = [];\n let length;\n for (let name in df) {\n if (df.hasOwnProperty(name))\n names.push(name);\n if (typeof(df[name]) !== \"object\" || typeof(df[name].length) === \"undefined\") {\n throw new Error(\"All fields must be arrays\");\n } else if (typeof(length) !== \"undefined\" && length !== df[name].length) {\n throw new Error(\"All fields must be arrays of the same length\");\n }\n length = df[name].length;\n }\n let results = [];\n let item;\n for (let row = 0; row < length; row++) {\n item = {};\n for (let col = 0; col < names.length; col++) {\n item[names[col]] = df[names[col]][row];\n }\n results.push(item);\n }\n return results;\n}\n\n/**\n * Keeps track of all event listener additions/removals and lets all active\n * listeners be removed with a single operation.\n *\n * @private\n */\nexport class SubscriptionTracker {\n constructor(emitter) {\n this._emitter = emitter;\n this._subs = {};\n }\n\n on(eventType, listener) {\n let sub = this._emitter.on(eventType, listener);\n this._subs[sub] = eventType;\n return sub;\n }\n\n off(eventType, listener) {\n let sub = this._emitter.off(eventType, listener);\n if (sub) {\n delete this._subs[sub];\n }\n return sub;\n }\n\n removeAllListeners() {\n let current_subs = this._subs;\n this._subs = {};\n Object.keys(current_subs).forEach((sub) => {\n this._emitter.off(current_subs[sub], sub);\n });\n }\n}\n","import Events from \"./events\";\n\nexport default class Var {\n constructor(group, name, /*optional*/ value) {\n this._group = group;\n this._name = name;\n this._value = value;\n this._events = new Events();\n }\n\n get() {\n return this._value;\n }\n\n set(value, /*optional*/ event) {\n if (this._value === value) {\n // Do nothing; the value hasn't changed\n return;\n }\n let oldValue = this._value;\n this._value = value;\n // Alert JavaScript listeners that the value has changed\n let evt = {};\n if (event && typeof(event) === \"object\") {\n for (let k in event) {\n if (event.hasOwnProperty(k))\n evt[k] = event[k];\n }\n }\n evt.oldValue = oldValue;\n evt.value = value;\n this._events.trigger(\"change\", evt, this);\n\n // TODO: Make this extensible, to let arbitrary back-ends know that\n // something has changed\n if (global.Shiny && global.Shiny.onInputChange) {\n global.Shiny.onInputChange(\n \".clientValue-\" +\n (this._group.name !== null ? this._group.name + \"-\" : \"\") +\n this._name,\n typeof(value) === \"undefined\" ? null : value\n );\n }\n }\n\n on(eventType, listener) {\n return this._events.on(eventType, listener);\n }\n\n off(eventType, listener) {\n return this._events.off(eventType, listener);\n }\n}\n"]} \ No newline at end of file diff --git a/_site/site_libs/crosstalk-1.2.0/scss/crosstalk.scss b/_site/site_libs/crosstalk-1.2.0/scss/crosstalk.scss new file mode 100644 index 0000000..3566561 --- /dev/null +++ b/_site/site_libs/crosstalk-1.2.0/scss/crosstalk.scss @@ -0,0 +1,75 @@ +/* Adjust margins outwards, so column contents line up with the edges of the + parent of container-fluid. */ +.container-fluid.crosstalk-bscols { + margin-left: -30px; + margin-right: -30px; + white-space: normal; +} + +/* But don't adjust the margins outwards if we're directly under the body, + i.e. we were the top-level of something at the console. */ +body > .container-fluid.crosstalk-bscols { + margin-left: auto; + margin-right: auto; +} + +.crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column { + display: inline-block; + padding-right: 12px; + vertical-align: top; +} + +@media only screen and (max-width:480px) { + .crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column { + display: block; + padding-right: inherit; + } +} + +/* Relevant BS3 styles to make filter_checkbox() look reasonable without Bootstrap */ +.crosstalk-input { + margin-bottom: 15px; /* a la .form-group */ + .control-label { + margin-bottom: 0; + vertical-align: middle; + } + input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px; + line-height: normal; + } + .checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; + } + .checkbox > label{ + padding-left: 20px; + margin-bottom: 0; + font-weight: 400; + cursor: pointer; + } + .checkbox input[type="checkbox"], + .checkbox-inline input[type="checkbox"] { + position: absolute; + margin-top: 2px; + margin-left: -20px; + } + .checkbox + .checkbox { + margin-top: -5px; + } + .checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: 400; + vertical-align: middle; + cursor: pointer; + } + .checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; + } +} diff --git a/_site/site_libs/htmlwidgets-1.6.2/htmlwidgets.js b/_site/site_libs/htmlwidgets-1.6.2/htmlwidgets.js new file mode 100644 index 0000000..1067d02 --- /dev/null +++ b/_site/site_libs/htmlwidgets-1.6.2/htmlwidgets.js @@ -0,0 +1,901 @@ +(function() { + // If window.HTMLWidgets is already defined, then use it; otherwise create a + // new object. This allows preceding code to set options that affect the + // initialization process (though none currently exist). + window.HTMLWidgets = window.HTMLWidgets || {}; + + // See if we're running in a viewer pane. If not, we're in a web browser. + var viewerMode = window.HTMLWidgets.viewerMode = + /\bviewer_pane=1\b/.test(window.location); + + // See if we're running in Shiny mode. If not, it's a static document. + // Note that static widgets can appear in both Shiny and static modes, but + // obviously, Shiny widgets can only appear in Shiny apps/documents. + var shinyMode = window.HTMLWidgets.shinyMode = + typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings; + + // We can't count on jQuery being available, so we implement our own + // version if necessary. + function querySelectorAll(scope, selector) { + if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) { + return scope.find(selector); + } + if (scope.querySelectorAll) { + return scope.querySelectorAll(selector); + } + } + + function asArray(value) { + if (value === null) + return []; + if ($.isArray(value)) + return value; + return [value]; + } + + // Implement jQuery's extend + function extend(target /*, ... */) { + if (arguments.length == 1) { + return target; + } + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + } + return target; + } + + // IE8 doesn't support Array.forEach. + function forEach(values, callback, thisArg) { + if (values.forEach) { + values.forEach(callback, thisArg); + } else { + for (var i = 0; i < values.length; i++) { + callback.call(thisArg, values[i], i, values); + } + } + } + + // Replaces the specified method with the return value of funcSource. + // + // Note that funcSource should not BE the new method, it should be a function + // that RETURNS the new method. funcSource receives a single argument that is + // the overridden method, it can be called from the new method. The overridden + // method can be called like a regular function, it has the target permanently + // bound to it so "this" will work correctly. + function overrideMethod(target, methodName, funcSource) { + var superFunc = target[methodName] || function() {}; + var superFuncBound = function() { + return superFunc.apply(target, arguments); + }; + target[methodName] = funcSource(superFuncBound); + } + + // Add a method to delegator that, when invoked, calls + // delegatee.methodName. If there is no such method on + // the delegatee, but there was one on delegator before + // delegateMethod was called, then the original version + // is invoked instead. + // For example: + // + // var a = { + // method1: function() { console.log('a1'); } + // method2: function() { console.log('a2'); } + // }; + // var b = { + // method1: function() { console.log('b1'); } + // }; + // delegateMethod(a, b, "method1"); + // delegateMethod(a, b, "method2"); + // a.method1(); + // a.method2(); + // + // The output would be "b1", "a2". + function delegateMethod(delegator, delegatee, methodName) { + var inherited = delegator[methodName]; + delegator[methodName] = function() { + var target = delegatee; + var method = delegatee[methodName]; + + // The method doesn't exist on the delegatee. Instead, + // call the method on the delegator, if it exists. + if (!method) { + target = delegator; + method = inherited; + } + + if (method) { + return method.apply(target, arguments); + } + }; + } + + // Implement a vague facsimilie of jQuery's data method + function elementData(el, name, value) { + if (arguments.length == 2) { + return el["htmlwidget_data_" + name]; + } else if (arguments.length == 3) { + el["htmlwidget_data_" + name] = value; + return el; + } else { + throw new Error("Wrong number of arguments for elementData: " + + arguments.length); + } + } + + // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex + function escapeRegExp(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + } + + function hasClass(el, className) { + var re = new RegExp("\\b" + escapeRegExp(className) + "\\b"); + return re.test(el.className); + } + + // elements - array (or array-like object) of HTML elements + // className - class name to test for + // include - if true, only return elements with given className; + // if false, only return elements *without* given className + function filterByClass(elements, className, include) { + var results = []; + for (var i = 0; i < elements.length; i++) { + if (hasClass(elements[i], className) == include) + results.push(elements[i]); + } + return results; + } + + function on(obj, eventName, func) { + if (obj.addEventListener) { + obj.addEventListener(eventName, func, false); + } else if (obj.attachEvent) { + obj.attachEvent(eventName, func); + } + } + + function off(obj, eventName, func) { + if (obj.removeEventListener) + obj.removeEventListener(eventName, func, false); + else if (obj.detachEvent) { + obj.detachEvent(eventName, func); + } + } + + // Translate array of values to top/right/bottom/left, as usual with + // the "padding" CSS property + // https://developer.mozilla.org/en-US/docs/Web/CSS/padding + function unpackPadding(value) { + if (typeof(value) === "number") + value = [value]; + if (value.length === 1) { + return {top: value[0], right: value[0], bottom: value[0], left: value[0]}; + } + if (value.length === 2) { + return {top: value[0], right: value[1], bottom: value[0], left: value[1]}; + } + if (value.length === 3) { + return {top: value[0], right: value[1], bottom: value[2], left: value[1]}; + } + if (value.length === 4) { + return {top: value[0], right: value[1], bottom: value[2], left: value[3]}; + } + } + + // Convert an unpacked padding object to a CSS value + function paddingToCss(paddingObj) { + return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px"; + } + + // Makes a number suitable for CSS + function px(x) { + if (typeof(x) === "number") + return x + "px"; + else + return x; + } + + // Retrieves runtime widget sizing information for an element. + // The return value is either null, or an object with fill, padding, + // defaultWidth, defaultHeight fields. + function sizingPolicy(el) { + var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']"); + if (!sizingEl) + return null; + var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}"); + if (viewerMode) { + return sp.viewer; + } else { + return sp.browser; + } + } + + // @param tasks Array of strings (or falsy value, in which case no-op). + // Each element must be a valid JavaScript expression that yields a + // function. Or, can be an array of objects with "code" and "data" + // properties; in this case, the "code" property should be a string + // of JS that's an expr that yields a function, and "data" should be + // an object that will be added as an additional argument when that + // function is called. + // @param target The object that will be "this" for each function + // execution. + // @param args Array of arguments to be passed to the functions. (The + // same arguments will be passed to all functions.) + function evalAndRun(tasks, target, args) { + if (tasks) { + forEach(tasks, function(task) { + var theseArgs = args; + if (typeof(task) === "object") { + theseArgs = theseArgs.concat([task.data]); + task = task.code; + } + var taskFunc = tryEval(task); + if (typeof(taskFunc) !== "function") { + throw new Error("Task must be a function! Source:\n" + task); + } + taskFunc.apply(target, theseArgs); + }); + } + } + + // Attempt eval() both with and without enclosing in parentheses. + // Note that enclosing coerces a function declaration into + // an expression that eval() can parse + // (otherwise, a SyntaxError is thrown) + function tryEval(code) { + var result = null; + try { + result = eval("(" + code + ")"); + } catch(error) { + if (!(error instanceof SyntaxError)) { + throw error; + } + try { + result = eval(code); + } catch(e) { + if (e instanceof SyntaxError) { + throw error; + } else { + throw e; + } + } + } + return result; + } + + function initSizing(el) { + var sizing = sizingPolicy(el); + if (!sizing) + return; + + var cel = document.getElementById("htmlwidget_container"); + if (!cel) + return; + + if (typeof(sizing.padding) !== "undefined") { + document.body.style.margin = "0"; + document.body.style.padding = paddingToCss(unpackPadding(sizing.padding)); + } + + if (sizing.fill) { + document.body.style.overflow = "hidden"; + document.body.style.width = "100%"; + document.body.style.height = "100%"; + document.documentElement.style.width = "100%"; + document.documentElement.style.height = "100%"; + cel.style.position = "absolute"; + var pad = unpackPadding(sizing.padding); + cel.style.top = pad.top + "px"; + cel.style.right = pad.right + "px"; + cel.style.bottom = pad.bottom + "px"; + cel.style.left = pad.left + "px"; + el.style.width = "100%"; + el.style.height = "100%"; + + return { + getWidth: function() { return cel.getBoundingClientRect().width; }, + getHeight: function() { return cel.getBoundingClientRect().height; } + }; + + } else { + el.style.width = px(sizing.width); + el.style.height = px(sizing.height); + + return { + getWidth: function() { return cel.getBoundingClientRect().width; }, + getHeight: function() { return cel.getBoundingClientRect().height; } + }; + } + } + + // Default implementations for methods + var defaults = { + find: function(scope) { + return querySelectorAll(scope, "." + this.name); + }, + renderError: function(el, err) { + var $el = $(el); + + this.clearError(el); + + // Add all these error classes, as Shiny does + var errClass = "shiny-output-error"; + if (err.type !== null) { + // use the classes of the error condition as CSS class names + errClass = errClass + " " + $.map(asArray(err.type), function(type) { + return errClass + "-" + type; + }).join(" "); + } + errClass = errClass + " htmlwidgets-error"; + + // Is el inline or block? If inline or inline-block, just display:none it + // and add an inline error. + var display = $el.css("display"); + $el.data("restore-display-mode", display); + + if (display === "inline" || display === "inline-block") { + $el.hide(); + if (err.message !== "") { + var errorSpan = $("").addClass(errClass); + errorSpan.text(err.message); + $el.after(errorSpan); + } + } else if (display === "block") { + // If block, add an error just after the el, set visibility:none on the + // el, and position the error to be on top of the el. + // Mark it with a unique ID and CSS class so we can remove it later. + $el.css("visibility", "hidden"); + if (err.message !== "") { + var errorDiv = $("
").addClass(errClass).css("position", "absolute") + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + // setting width can push out the page size, forcing otherwise + // unnecessary scrollbars to appear and making it impossible for + // the element to shrink; so use max-width instead + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + errorDiv.text(err.message); + $el.after(errorDiv); + + // Really dumb way to keep the size/position of the error in sync with + // the parent element as the window is resized or whatever. + var intId = setInterval(function() { + if (!errorDiv[0].parentElement) { + clearInterval(intId); + return; + } + errorDiv + .css("top", el.offsetTop) + .css("left", el.offsetLeft) + .css("maxWidth", el.offsetWidth) + .css("height", el.offsetHeight); + }, 500); + } + } + }, + clearError: function(el) { + var $el = $(el); + var display = $el.data("restore-display-mode"); + $el.data("restore-display-mode", null); + + if (display === "inline" || display === "inline-block") { + if (display) + $el.css("display", display); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } else if (display === "block"){ + $el.css("visibility", "inherit"); + $(el.nextSibling).filter(".htmlwidgets-error").remove(); + } + }, + sizing: {} + }; + + // Called by widget bindings to register a new type of widget. The definition + // object can contain the following properties: + // - name (required) - A string indicating the binding name, which will be + // used by default as the CSS classname to look for. + // - initialize (optional) - A function(el) that will be called once per + // widget element; if a value is returned, it will be passed as the third + // value to renderValue. + // - renderValue (required) - A function(el, data, initValue) that will be + // called with data. Static contexts will cause this to be called once per + // element; Shiny apps will cause this to be called multiple times per + // element, as the data changes. + window.HTMLWidgets.widget = function(definition) { + if (!definition.name) { + throw new Error("Widget must have a name"); + } + if (!definition.type) { + throw new Error("Widget must have a type"); + } + // Currently we only support output widgets + if (definition.type !== "output") { + throw new Error("Unrecognized widget type '" + definition.type + "'"); + } + // TODO: Verify that .name is a valid CSS classname + + // Support new-style instance-bound definitions. Old-style class-bound + // definitions have one widget "object" per widget per type/class of + // widget; the renderValue and resize methods on such widget objects + // take el and instance arguments, because the widget object can't + // store them. New-style instance-bound definitions have one widget + // object per widget instance; the definition that's passed in doesn't + // provide renderValue or resize methods at all, just the single method + // factory(el, width, height) + // which returns an object that has renderValue(x) and resize(w, h). + // This enables a far more natural programming style for the widget + // author, who can store per-instance state using either OO-style + // instance fields or functional-style closure variables (I guess this + // is in contrast to what can only be called C-style pseudo-OO which is + // what we required before). + if (definition.factory) { + definition = createLegacyDefinitionAdapter(definition); + } + + if (!definition.renderValue) { + throw new Error("Widget must have a renderValue function"); + } + + // For static rendering (non-Shiny), use a simple widget registration + // scheme. We also use this scheme for Shiny apps/documents that also + // contain static widgets. + window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || []; + // Merge defaults into the definition; don't mutate the original definition. + var staticBinding = extend({}, defaults, definition); + overrideMethod(staticBinding, "find", function(superfunc) { + return function(scope) { + var results = superfunc(scope); + // Filter out Shiny outputs, we only want the static kind + return filterByClass(results, "html-widget-output", false); + }; + }); + window.HTMLWidgets.widgets.push(staticBinding); + + if (shinyMode) { + // Shiny is running. Register the definition with an output binding. + // The definition itself will not be the output binding, instead + // we will make an output binding object that delegates to the + // definition. This is because we foolishly used the same method + // name (renderValue) for htmlwidgets definition and Shiny bindings + // but they actually have quite different semantics (the Shiny + // bindings receive data that includes lots of metadata that it + // strips off before calling htmlwidgets renderValue). We can't + // just ignore the difference because in some widgets it's helpful + // to call this.renderValue() from inside of resize(), and if + // we're not delegating, then that call will go to the Shiny + // version instead of the htmlwidgets version. + + // Merge defaults with definition, without mutating either. + var bindingDef = extend({}, defaults, definition); + + // This object will be our actual Shiny binding. + var shinyBinding = new Shiny.OutputBinding(); + + // With a few exceptions, we'll want to simply use the bindingDef's + // version of methods if they are available, otherwise fall back to + // Shiny's defaults. NOTE: If Shiny's output bindings gain additional + // methods in the future, and we want them to be overrideable by + // HTMLWidget binding definitions, then we'll need to add them to this + // list. + delegateMethod(shinyBinding, bindingDef, "getId"); + delegateMethod(shinyBinding, bindingDef, "onValueChange"); + delegateMethod(shinyBinding, bindingDef, "onValueError"); + delegateMethod(shinyBinding, bindingDef, "renderError"); + delegateMethod(shinyBinding, bindingDef, "clearError"); + delegateMethod(shinyBinding, bindingDef, "showProgress"); + + // The find, renderValue, and resize are handled differently, because we + // want to actually decorate the behavior of the bindingDef methods. + + shinyBinding.find = function(scope) { + var results = bindingDef.find(scope); + + // Only return elements that are Shiny outputs, not static ones + var dynamicResults = results.filter(".html-widget-output"); + + // It's possible that whatever caused Shiny to think there might be + // new dynamic outputs, also caused there to be new static outputs. + // Since there might be lots of different htmlwidgets bindings, we + // schedule execution for later--no need to staticRender multiple + // times. + if (results.length !== dynamicResults.length) + scheduleStaticRender(); + + return dynamicResults; + }; + + // Wrap renderValue to handle initialization, which unfortunately isn't + // supported natively by Shiny at the time of this writing. + + shinyBinding.renderValue = function(el, data) { + Shiny.renderDependencies(data.deps); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var i = 0; data.evals && i < data.evals.length; i++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]); + } + if (!bindingDef.renderOnNullValue) { + if (data.x === null) { + el.style.visibility = "hidden"; + return; + } else { + el.style.visibility = "inherit"; + } + } + if (!elementData(el, "initialized")) { + initSizing(el); + + elementData(el, "initialized", true); + if (bindingDef.initialize) { + var rect = el.getBoundingClientRect(); + var result = bindingDef.initialize(el, rect.width, rect.height); + elementData(el, "init_result", result); + } + } + bindingDef.renderValue(el, data.x, elementData(el, "init_result")); + evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]); + }; + + // Only override resize if bindingDef implements it + if (bindingDef.resize) { + shinyBinding.resize = function(el, width, height) { + // Shiny can call resize before initialize/renderValue have been + // called, which doesn't make sense for widgets. + if (elementData(el, "initialized")) { + bindingDef.resize(el, width, height, elementData(el, "init_result")); + } + }; + } + + Shiny.outputBindings.register(shinyBinding, bindingDef.name); + } + }; + + var scheduleStaticRenderTimerId = null; + function scheduleStaticRender() { + if (!scheduleStaticRenderTimerId) { + scheduleStaticRenderTimerId = setTimeout(function() { + scheduleStaticRenderTimerId = null; + window.HTMLWidgets.staticRender(); + }, 1); + } + } + + // Render static widgets after the document finishes loading + // Statically render all elements that are of this widget's class + window.HTMLWidgets.staticRender = function() { + var bindings = window.HTMLWidgets.widgets || []; + forEach(bindings, function(binding) { + var matches = binding.find(document.documentElement); + forEach(matches, function(el) { + var sizeObj = initSizing(el, binding); + + var getSize = function(el) { + if (sizeObj) { + return {w: sizeObj.getWidth(), h: sizeObj.getHeight()} + } else { + var rect = el.getBoundingClientRect(); + return {w: rect.width, h: rect.height} + } + }; + + if (hasClass(el, "html-widget-static-bound")) + return; + el.className = el.className + " html-widget-static-bound"; + + var initResult; + if (binding.initialize) { + var size = getSize(el); + initResult = binding.initialize(el, size.w, size.h); + elementData(el, "init_result", initResult); + } + + if (binding.resize) { + var lastSize = getSize(el); + var resizeHandler = function(e) { + var size = getSize(el); + if (size.w === 0 && size.h === 0) + return; + if (size.w === lastSize.w && size.h === lastSize.h) + return; + lastSize = size; + binding.resize(el, size.w, size.h, initResult); + }; + + on(window, "resize", resizeHandler); + + // This is needed for cases where we're running in a Shiny + // app, but the widget itself is not a Shiny output, but + // rather a simple static widget. One example of this is + // an rmarkdown document that has runtime:shiny and widget + // that isn't in a render function. Shiny only knows to + // call resize handlers for Shiny outputs, not for static + // widgets, so we do it ourselves. + if (window.jQuery) { + window.jQuery(document).on( + "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets", + resizeHandler + ); + window.jQuery(document).on( + "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets", + resizeHandler + ); + } + + // This is needed for the specific case of ioslides, which + // flips slides between display:none and display:block. + // Ideally we would not have to have ioslide-specific code + // here, but rather have ioslides raise a generic event, + // but the rmarkdown package just went to CRAN so the + // window to getting that fixed may be long. + if (window.addEventListener) { + // It's OK to limit this to window.addEventListener + // browsers because ioslides itself only supports + // such browsers. + on(document, "slideenter", resizeHandler); + on(document, "slideleave", resizeHandler); + } + } + + var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']"); + if (scriptData) { + var data = JSON.parse(scriptData.textContent || scriptData.text); + // Resolve strings marked as javascript literals to objects + if (!(data.evals instanceof Array)) data.evals = [data.evals]; + for (var k = 0; data.evals && k < data.evals.length; k++) { + window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]); + } + binding.renderValue(el, data.x, initResult); + evalAndRun(data.jsHooks.render, initResult, [el, data.x]); + } + }); + }); + + invokePostRenderHandlers(); + } + + + function has_jQuery3() { + if (!window.jQuery) { + return false; + } + var $version = window.jQuery.fn.jquery; + var $major_version = parseInt($version.split(".")[0]); + return $major_version >= 3; + } + + /* + / Shiny 1.4 bumped jQuery from 1.x to 3.x which means jQuery's + / on-ready handler (i.e., $(fn)) is now asyncronous (i.e., it now + / really means $(setTimeout(fn)). + / https://jquery.com/upgrade-guide/3.0/#breaking-change-document-ready-handlers-are-now-asynchronous + / + / Since Shiny uses $() to schedule initShiny, shiny>=1.4 calls initShiny + / one tick later than it did before, which means staticRender() is + / called renderValue() earlier than (advanced) widget authors might be expecting. + / https://github.com/rstudio/shiny/issues/2630 + / + / For a concrete example, leaflet has some methods (e.g., updateBounds) + / which reference Shiny methods registered in initShiny (e.g., setInputValue). + / Since leaflet is privy to this life-cycle, it knows to use setTimeout() to + / delay execution of those methods (until Shiny methods are ready) + / https://github.com/rstudio/leaflet/blob/18ec981/javascript/src/index.js#L266-L268 + / + / Ideally widget authors wouldn't need to use this setTimeout() hack that + / leaflet uses to call Shiny methods on a staticRender(). In the long run, + / the logic initShiny should be broken up so that method registration happens + / right away, but binding happens later. + */ + function maybeStaticRenderLater() { + if (shinyMode && has_jQuery3()) { + window.jQuery(window.HTMLWidgets.staticRender); + } else { + window.HTMLWidgets.staticRender(); + } + } + + if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", function() { + document.removeEventListener("DOMContentLoaded", arguments.callee, false); + maybeStaticRenderLater(); + }, false); + } else if (document.attachEvent) { + document.attachEvent("onreadystatechange", function() { + if (document.readyState === "complete") { + document.detachEvent("onreadystatechange", arguments.callee); + maybeStaticRenderLater(); + } + }); + } + + + window.HTMLWidgets.getAttachmentUrl = function(depname, key) { + // If no key, default to the first item + if (typeof(key) === "undefined") + key = 1; + + var link = document.getElementById(depname + "-" + key + "-attachment"); + if (!link) { + throw new Error("Attachment " + depname + "/" + key + " not found in document"); + } + return link.getAttribute("href"); + }; + + window.HTMLWidgets.dataframeToD3 = function(df) { + var names = []; + var length; + for (var name in df) { + if (df.hasOwnProperty(name)) + names.push(name); + if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { + throw new Error("All fields must be arrays"); + } else if (typeof(length) !== "undefined" && length !== df[name].length) { + throw new Error("All fields must be arrays of the same length"); + } + length = df[name].length; + } + var results = []; + var item; + for (var row = 0; row < length; row++) { + item = {}; + for (var col = 0; col < names.length; col++) { + item[names[col]] = df[names[col]][row]; + } + results.push(item); + } + return results; + }; + + window.HTMLWidgets.transposeArray2D = function(array) { + if (array.length === 0) return array; + var newArray = array[0].map(function(col, i) { + return array.map(function(row) { + return row[i] + }) + }); + return newArray; + }; + // Split value at splitChar, but allow splitChar to be escaped + // using escapeChar. Any other characters escaped by escapeChar + // will be included as usual (including escapeChar itself). + function splitWithEscape(value, splitChar, escapeChar) { + var results = []; + var escapeMode = false; + var currentResult = ""; + for (var pos = 0; pos < value.length; pos++) { + if (!escapeMode) { + if (value[pos] === splitChar) { + results.push(currentResult); + currentResult = ""; + } else if (value[pos] === escapeChar) { + escapeMode = true; + } else { + currentResult += value[pos]; + } + } else { + currentResult += value[pos]; + escapeMode = false; + } + } + if (currentResult !== "") { + results.push(currentResult); + } + return results; + } + // Function authored by Yihui/JJ Allaire + window.HTMLWidgets.evaluateStringMember = function(o, member) { + var parts = splitWithEscape(member, '.', '\\'); + for (var i = 0, l = parts.length; i < l; i++) { + var part = parts[i]; + // part may be a character or 'numeric' member name + if (o !== null && typeof o === "object" && part in o) { + if (i == (l - 1)) { // if we are at the end of the line then evalulate + if (typeof o[part] === "string") + o[part] = tryEval(o[part]); + } else { // otherwise continue to next embedded object + o = o[part]; + } + } + } + }; + + // Retrieve the HTMLWidget instance (i.e. the return value of an + // HTMLWidget binding's initialize() or factory() function) + // associated with an element, or null if none. + window.HTMLWidgets.getInstance = function(el) { + return elementData(el, "init_result"); + }; + + // Finds the first element in the scope that matches the selector, + // and returns the HTMLWidget instance (i.e. the return value of + // an HTMLWidget binding's initialize() or factory() function) + // associated with that element, if any. If no element matches the + // selector, or the first matching element has no HTMLWidget + // instance associated with it, then null is returned. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.find = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var el = scope.querySelector(selector); + if (el === null) { + return null; + } else { + return window.HTMLWidgets.getInstance(el); + } + }; + + // Finds all elements in the scope that match the selector, and + // returns the HTMLWidget instances (i.e. the return values of + // an HTMLWidget binding's initialize() or factory() function) + // associated with the elements, in an array. If elements that + // match the selector don't have an associated HTMLWidget + // instance, the returned array will contain nulls. + // + // The scope argument is optional, and defaults to window.document. + window.HTMLWidgets.findAll = function(scope, selector) { + if (arguments.length == 1) { + selector = scope; + scope = document; + } + + var nodes = scope.querySelectorAll(selector); + var results = []; + for (var i = 0; i < nodes.length; i++) { + results.push(window.HTMLWidgets.getInstance(nodes[i])); + } + return results; + }; + + var postRenderHandlers = []; + function invokePostRenderHandlers() { + while (postRenderHandlers.length) { + var handler = postRenderHandlers.shift(); + if (handler) { + handler(); + } + } + } + + // Register the given callback function to be invoked after the + // next time static widgets are rendered. + window.HTMLWidgets.addPostRenderHandler = function(callback) { + postRenderHandlers.push(callback); + }; + + // Takes a new-style instance-bound definition, and returns an + // old-style class-bound definition. This saves us from having + // to rewrite all the logic in this file to accomodate both + // types of definitions. + function createLegacyDefinitionAdapter(defn) { + var result = { + name: defn.name, + type: defn.type, + initialize: function(el, width, height) { + return defn.factory(el, width, height); + }, + renderValue: function(el, x, instance) { + return instance.renderValue(x); + }, + resize: function(el, width, height, instance) { + return instance.resize(width, height); + } + }; + + if (defn.find) + result.find = defn.find; + if (defn.renderError) + result.renderError = defn.renderError; + if (defn.clearError) + result.clearError = defn.clearError; + + return result; + } +})(); diff --git a/_site/site_libs/jquery-3.5.1/jquery-AUTHORS.txt b/_site/site_libs/jquery-3.5.1/jquery-AUTHORS.txt new file mode 100644 index 0000000..06df1a5 --- /dev/null +++ b/_site/site_libs/jquery-3.5.1/jquery-AUTHORS.txt @@ -0,0 +1,357 @@ +Authors ordered by first contribution. + +John Resig +Gilles van den Hoven +Michael Geary +Stefan Petre +Yehuda Katz +Corey Jewett +Klaus Hartl +Franck Marcia +Jörn Zaefferer +Paul Bakaus +Brandon Aaron +Mike Alsup +Dave Methvin +Ed Engelhardt +Sean Catchpole +Paul Mclanahan +David Serduke +Richard D. Worth +Scott González +Ariel Flesler +Cheah Chu Yeow +Andrew Chalkley +Fabio Buffoni +Stefan Bauckmeier  +Jon Evans +TJ Holowaychuk +Riccardo De Agostini +Michael Bensoussan +Louis-Rémi Babé +Robert Katić +Damian Janowski +Anton Kovalyov +Dušan B. Jovanovic +Earle Castledine +Rich Dougherty +Kim Dalsgaard +Andrea Giammarchi +Fabian Jakobs +Mark Gibson +Karl Swedberg +Justin Meyer +Ben Alman +James Padolsey +David Petersen +Batiste Bieler +Jake Archibald +Alexander Farkas +Filipe Fortes +Rick Waldron +Neeraj Singh +Paul Irish +Iraê Carvalho +Matt Curry +Michael Monteleone +Noah Sloan +Tom Viner +J. Ryan Stinnett +Douglas Neiner +Adam J. Sontag +Heungsub Lee +Dave Reed +Carl Fürstenberg +Jacob Wright +Ralph Whitbeck +unknown +temp01 +Colin Snover +Jared Grippe +Ryan W Tenney +Alex Sexton +Pinhook +Ron Otten +Jephte Clain +Anton Matzneller +Dan Heberden +Henri Wiechers +Russell Holbrook +Julian Aubourg +Gianni Alessandro Chiappetta +Scott Jehl +James Burke +Jonas Pfenniger +Xavi Ramirez +Sylvester Keil +Brandon Sterne +Mathias Bynens +Lee Carpenter +Timmy Willison <4timmywil@gmail.com> +Corey Frang +Digitalxero +David Murdoch +Josh Varner +Charles McNulty +Jordan Boesch +Jess Thrysoee +Michael Murray +Alexis Abril +Rob Morgan +John Firebaugh +Sam Bisbee +Gilmore Davidson +Brian Brennan +Xavier Montillet +Daniel Pihlstrom +Sahab Yazdani +avaly +Scott Hughes +Mike Sherov +Greg Hazel +Schalk Neethling +Denis Knauf +Timo Tijhof +Steen Nielsen +Anton Ryzhov +Shi Chuan +Matt Mueller +Berker Peksag +Toby Brain +Justin +Daniel Herman +Oleg Gaidarenko +Rock Hymas +Richard Gibson +Rafaël Blais Masson +cmc3cn <59194618@qq.com> +Joe Presbrey +Sindre Sorhus +Arne de Bree +Vladislav Zarakovsky +Andrew E Monat +Oskari +Joao Henrique de Andrade Bruni +tsinha +Dominik D. Geyer +Matt Farmer +Trey Hunner +Jason Moon +Jeffery To +Kris Borchers +Vladimir Zhuravlev +Jacob Thornton +Chad Killingsworth +Vitya Muhachev +Nowres Rafid +David Benjamin +Alan Plum +Uri Gilad +Chris Faulkner +Marcel Greter +Elijah Manor +Daniel Chatfield +Daniel Gálvez +Nikita Govorov +Wesley Walser +Mike Pennisi +Matthias Jäggli +Devin Cooper +Markus Staab +Dave Riddle +Callum Macrae +Jonathan Sampson +Benjamin Truyman +Jay Merrifield +James Huston +Sai Lung Wong +Erick Ruiz de Chávez +David Bonner +Allen J Schmidt Jr +Akintayo Akinwunmi +MORGAN +Ismail Khair +Carl Danley +Mike Petrovich +Greg Lavallee +Tom H Fuertes +Roland Eckl +Yiming He +David Fox +Bennett Sorbo +Paul Ramos +Rod Vagg +Sebastian Burkhard +Zachary Adam Kaplan +Adam Coulombe +nanto_vi +nanto +Danil Somsikov +Ryunosuke SATO +Diego Tres +Jean Boussier +Andrew Plummer +Mark Raddatz +Pascal Borreli +Isaac Z. Schlueter +Karl Sieburg +Nguyen Phuc Lam +Dmitry Gusev +Steven Benner +Li Xudong +Michał Gołębiowski-Owczarek +Renato Oliveira dos Santos +Frederic Junod +Tom H Fuertes +Mitch Foley +ros3cin +Kyle Robinson Young +John Paul +Jason Bedard +Chris Talkington +Eddie Monge +Terry Jones +Jason Merino +Dan Burzo +Jeremy Dunck +Chris Price +Guy Bedford +njhamann +Goare Mao +Amey Sakhadeo +Mike Sidorov +Anthony Ryan +Lihan Li +George Kats +Dongseok Paeng +Ronny Springer +Ilya Kantor +Marian Sollmann +Chris Antaki +David Hong +Jakob Stoeck +Christopher Jones +Forbes Lindesay +S. Andrew Sheppard +Leonardo Balter +Rodrigo Rosenfeld Rosas +Daniel Husar +Philip Jägenstedt +John Hoven +Roman Reiß +Benjy Cui +Christian Kosmowski +David Corbacho +Liang Peng +TJ VanToll +Aurelio De Rosa +Senya Pugach +Dan Hart +Nazar Mokrynskyi +Benjamin Tan +Amit Merchant +Jason Bedard +Veaceslav Grimalschi +Richard McDaniel +Arthur Verschaeve +Shivaji Varma +Ben Toews +Bin Xin +Neftaly Hernandez +T.J. Crowder +Nicolas HENRY +Frederic Hemberger +Victor Homyakov +Aditya Raghavan +Anne-Gaelle Colom +Leonardo Braga +George Mauer +Stephen Edgar +Thomas Tortorini +Jörn Wagner +Jon Hester +Colin Frick +Winston Howes +Alexander O'Mara +Chris Rebert +Bastian Buchholz +Mu Haibao +Calvin Metcalf +Arthur Stolyar +Gabriel Schulhof +Gilad Peleg +Julian Alexander Murillo +Kevin Kirsche +Martin Naumann +Yongwoo Jeon +John-David Dalton +Marek Lewandowski +Bruno Pérel +Daniel Nill +Reed Loden +Sean Henderson +Gary Ye +Richard Kraaijenhagen +Connor Atherton +Christian Grete +Tom von Clef +Liza Ramo +Joelle Fleurantin +Steve Mao +Jon Dufresne +Jae Sung Park +Josh Soref +Saptak Sengupta +Henry Wong +Jun Sun +Martijn W. van der Lee +Devin Wilson +Damian Senn +Zack Hall +Vitaliy Terziev +Todor Prikumov +Bernhard M. Wiedemann +Jha Naman +Alexander Lisianoi +William Robinet +Joe Trumbull +Alexander K +Ralin Chimev +Felipe Sateler +Christophe Tafani-Dereeper +Manoj Kumar +David Broder-Rodgers +Alex Louden +Alex Padilla +karan-96 +南漂一卒 +Erik Lax +Boom Lee +Andreas Solleder +Pierre Spring +Shashanka Nataraj +CDAGaming +Matan Kotler-Berkowitz <205matan@gmail.com> +Jordan Beland +Henry Zhu +Nilton Cesar +basil.belokon +Andrey Meshkov +tmybr11 +Luis Emilio Velasco Sanchez +Ed S +Bert Zhang +Sébastien Règne +wartmanm <3869625+wartmanm@users.noreply.github.com> +Siddharth Dungarwal +abnud1 +Andrei Fangli +Marja Hölttä +buddh4 +Hoang +Wonseop Kim +Pat O'Callaghan +JuanMa Ruiz +Ahmed.S.ElAfifi +Sean Robinson +Christian Oliff diff --git a/_site/site_libs/jquery-3.5.1/jquery.js b/_site/site_libs/jquery-3.5.1/jquery.js new file mode 100644 index 0000000..5093733 --- /dev/null +++ b/_site/site_libs/jquery-3.5.1/jquery.js @@ -0,0 +1,10872 @@ +/*! + * jQuery JavaScript Library v3.5.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2020-05-04T22:49Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.5.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.5 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2020-03-14 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem.namespaceURI, + docElem = ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px"; + tr.style.height = "1px"; + trChild.style.height = "9px"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( + dataPriv.get( cur, "events" ) || Object.create( null ) + )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script + if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( "