Browse code

update site

guangchuang yu authored on 25/07/2017 05:29:36
Showing59 changed files

... ...
@@ -44,11 +44,14 @@ clean:
44 44
 	cd ..;\
45 45
 	$(RM) -r $(PKGNAME).Rcheck/
46 46
 
47
-site: 
47
+site:
48 48
 	cd site_src;\
49 49
 	Rscript -e 'blogdown::build_site()';\
50 50
 	cd ..
51 51
 
52
+preview:
53
+	Rscript -e 'setwd("site_src"); blogdown::serve_site()'
54
+
52 55
 mkdocs: mdfiles
53 56
 	cd mkdocs;\
54 57
 	mkdocs build;\
... ...
@@ -15,6 +15,7 @@ html_preview: false
15 15
 library("badger")
16 16
 library("ypages")
17 17
 library("ggplot2")
18
+library("yyplot")
18 19
 ```
19 20
 
20 21
 <img src="https://raw.githubusercontent.com/Bioconductor/BiocStickers/master/ggtree/ggtree.png" height="200" align="right" />
... ...
@@ -65,28 +66,22 @@ __G Yu__, DK Smith, H Zhu, Y Guan, TTY Lam^\*^. ggtree: an R package for visuali
65 66
 
66 67
 `r badge_doi("10.1111/2041-210X.12628", "green")`
67 68
 `r badge_altmetric("10533079", "green")`
69
+`r badge_citation("HtEfBTGE9r8C", "7268358477862164627", "green")`
70
+
68 71
 
69 72
 ----------------------------------------------------------------------------------------
70 73
 
71 74
 
72 75
 ### Citation
73 76
 
74
-`r badge_citation("HtEfBTGE9r8C", "7268358477862164627", "green")`
75
-
76
-
77 77
 
78 78
 ```{r echo=F, comment=NA}
79
-d <- get_article_cite_history('DO5oG40AAAAJ', 'HtEfBTGE9r8C')
80
-## txtplot(d$year, d$cites)
81
-## library("ggalt")
82
-## p <- ggplot(d, aes(year, cites)) + geom_lollipop(point.size=3, point.colour='firebrick') +
83
-p <- ggplot(d, aes(year, cites)) + geom_segment(aes(xend=year, yend=0)) + geom_point(size=3, color='firebrick') +
84
-    theme_minimal() + xlab(NULL) + ylab(NULL) + labs(title="Citation", caption="data from Google Scholar")
85
-ggsave(p, file="docs/citation.png", width=8, height=4)
79
+p <- plot_citation_trend('DO5oG40AAAAJ', 'HtEfBTGE9r8C')
80
+ggsave(p, file="docs/images/citation.png", width=8, height=4)
86 81
 ```
87 82
 
88 83
 
89
-<img src="docs/citation.png" width="890"/>
84
+<img src="docs/images/citation.png" width="890"/>
90 85
 
91 86
 
92 87
 ### Download stats
... ...
@@ -104,10 +99,10 @@ x <- x[-nrow(x), ] # last month data is not complete
104 99
 p <- ggplot(x, aes(end, Nb_of_distinct_IPs)) + geom_point() + geom_line() +
105 100
     theme_minimal() +xlab(NULL) + ylab(NULL) +
106 101
     labs(title="ggtree", subtitle="Monthly download stats (distinct IPs)", caption="data from Bioconductor")
107
-ggsave(p, file="docs/dlstats.png", width=8, height=4)
102
+ggsave(p, file="docs/images/dlstats.png", width=8, height=4)
108 103
 ```
109 104
 
110
-<img src="docs/dlstats.png" width="890"/>
105
+<img src="docs/images/dlstats.png" width="890"/>
111 106
 
112 107
 ## Contributors
113 108
 
... ...
@@ -27,21 +27,19 @@ Please cite the following article when using `ggtree`:
27 27
 
28 28
 **G Yu**, DK Smith, H Zhu, Y Guan, TTY Lam<sup>\*</sup>. ggtree: an R package for visualization and annotation of phylogenetic trees with their covariates and other associated data. ***Methods in Ecology and Evolution***. 2017, 8(1):28-36.
29 29
 
30
-[![](https://img.shields.io/badge/doi-10.1111/2041--210X.12628-green.svg?style=flat)](http://dx.doi.org/10.1111/2041-210X.12628) [![](https://img.shields.io/badge/Altmetric-351-green.svg?style=flat)](https://www.altmetric.com/details/10533079)
30
+[![](https://img.shields.io/badge/doi-10.1111/2041--210X.12628-green.svg?style=flat)](http://dx.doi.org/10.1111/2041-210X.12628) [![](https://img.shields.io/badge/Altmetric-351-green.svg?style=flat)](https://www.altmetric.com/details/10533079) [![citation](https://img.shields.io/badge/cited%20by-28-green.svg?style=flat)](https://scholar.google.com.hk/scholar?oi=bibs&hl=en&cites=7268358477862164627)
31 31
 
32 32
 ------------------------------------------------------------------------
33 33
 
34 34
 ### Citation
35 35
 
36
-[![citation](https://img.shields.io/badge/cited%20by-28-green.svg?style=flat)](https://scholar.google.com.hk/scholar?oi=bibs&hl=en&cites=7268358477862164627)
37
-
38
-<img src="docs/citation.png" width="890"/>
36
+<img src="docs/images/citation.png" width="890"/>
39 37
 
40 38
 ### Download stats
41 39
 
42 40
 [![download](http://www.bioconductor.org/shields/downloads/ggtree.svg)](https://bioconductor.org/packages/stats/bioc/ggtree) [![](https://img.shields.io/badge/download-17269/total-blue.svg?style=flat)](https://bioconductor.org/packages/stats/bioc/ggtree) [![](https://img.shields.io/badge/download-885/month-blue.svg?style=flat)](https://bioconductor.org/packages/stats/bioc/ggtree)
43 41
 
44
-<img src="docs/dlstats.png" width="890"/>
42
+<img src="docs/images/dlstats.png" width="890"/>
45 43
 
46 44
 Contributors
47 45
 ------------
... ...
@@ -2,13 +2,13 @@
2 2
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
3 3
   <channel>
4 4
     <title>Categories on ggtree - Guangchuang Yu</title>
5
-    <link>https://guangchuangyu.github.io/ggtree/categories/</link>
5
+    <link>/categories/</link>
6 6
     <description>Recent content in Categories on ggtree - Guangchuang Yu</description>
7 7
     <generator>Hugo -- gohugo.io</generator>
8 8
     <language>en-us</language>
9 9
     <copyright>Released under the Artistic-2.0 license</copyright>
10 10
     
11
-	<atom:link href="https://guangchuangyu.github.io/ggtree/categories/index.xml" rel="self" type="application/rss+xml" />
11
+	<atom:link href="/categories/index.xml" rel="self" type="application/rss+xml" />
12 12
     
13 13
     
14 14
   </channel>
15 15
deleted file mode 100644
16 16
Binary files a/docs/citation.png and /dev/null differ
17 17
deleted file mode 100644
18 18
Binary files a/docs/dlstats.png and /dev/null differ
... ...
@@ -15,42 +15,42 @@
15 15
     
16 16
     <meta name="description" content="Visualization and annotation of phylogenetic trees.">
17 17
     
18
-    <link rel="canonical" href="https://guangchuangyu.github.io/ggtree/documentation/">
18
+    <link rel="canonical" href="../documentation/">
19 19
     
20 20
     <meta name="author" content="Guangchuang Yu">
21 21
     
22 22
 
23
-    <meta property="og:url" content="https://guangchuangyu.github.io/ggtree/documentation/">
23
+    <meta property="og:url" content="/documentation/">
24 24
     <meta property="og:title" content="ggtree - Guangchuang Yu">
25
-    <meta property="og:image" content="https://guangchuangyu.github.io/ggtree/images/gc.png">
25
+    <meta property="og:image" content="/images/gc.png">
26 26
     <meta name="apple-mobile-web-app-title" content="ggtree - Guangchuang Yu">
27 27
     <meta name="apple-mobile-web-app-capable" content="yes">
28 28
     <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
29 29
 
30
-    <link rel="shortcut icon" type="image/x-icon" href="https://guangchuangyu.github.io/ggtree/images/favicon.ico">
31
-    <link rel="icon" type="image/x-icon" href="https://guangchuangyu.github.io/ggtree/images/favicon.ico">
30
+    <link rel="shortcut icon" type="image/x-icon" href="../images/favicon.ico">
31
+    <link rel="icon" type="image/x-icon" href="../images/favicon.ico">
32 32
 
33 33
     <style>
34 34
       @font-face {
35 35
         font-family: 'Icon';
36
-        src: url('https://guangchuangyu.github.io/ggtree/fonts/icon.eot');
37
-        src: url('https://guangchuangyu.github.io/ggtree/fonts/icon.eot')
36
+        src: url('/fonts/icon.eot');
37
+        src: url('/fonts/icon.eot')
38 38
                format('embedded-opentype'),
39
-             url('https://guangchuangyu.github.io/ggtree/fonts/icon.woff')
39
+             url('/fonts/icon.woff')
40 40
                format('woff'),
41
-             url('https://guangchuangyu.github.io/ggtree/fonts/icon.ttf')
41
+             url('/fonts/icon.ttf')
42 42
                format('truetype'),
43
-             url('https://guangchuangyu.github.io/ggtree/fonts/icon.svg')
43
+             url('/fonts/icon.svg')
44 44
                format('svg');
45 45
         font-weight: normal;
46 46
         font-style: normal;
47 47
       }
48 48
     </style>
49 49
 
50
-    <link rel="stylesheet" href="https://guangchuangyu.github.io/ggtree/stylesheets/application.css">
51
-    <link rel="stylesheet" href="https://guangchuangyu.github.io/ggtree/stylesheets/temporary.css">
52
-    <link rel="stylesheet" href="https://guangchuangyu.github.io/ggtree/stylesheets/palettes.css">
53
-    <link rel="stylesheet" href="https://guangchuangyu.github.io/ggtree/stylesheets/highlight/highlight.css">
50
+    <link rel="stylesheet" href="../stylesheets/application.css">
51
+    <link rel="stylesheet" href="../stylesheets/temporary.css">
52
+    <link rel="stylesheet" href="../stylesheets/palettes.css">
53
+    <link rel="stylesheet" href="../stylesheets/highlight/highlight.css">
54 54
 
55 55
     
56 56
     
... ...
@@ -66,7 +66,7 @@
66 66
     </style>
67 67
 
68 68
     
69
-    <script src="https://guangchuangyu.github.io/ggtree/javascripts/modernizr.js"></script>
69
+    <script src="../javascripts/modernizr.js"></script>
70 70
 
71 71
     
72 72
 
... ...
@@ -138,7 +138,7 @@
138 138
     <div class="banner">
139 139
       
140 140
         <div class="logo">
141
-          <img src="https://guangchuangyu.github.io/ggtree/images/gc.png">
141
+          <img src="../images/gc.png">
142 142
         </div>
143 143
       
144 144
       <div class="name">
... ...
@@ -455,7 +455,7 @@
455 455
 <nav class="pagination" aria-label="Footer">
456 456
   <div class="previous">
457 457
   
458
-      <a href="https://guangchuangyu.github.io/ggtree/" title="ggtree: visualization and annotation of phylogenetic trees">
458
+      <a href="../" title="ggtree: visualization and annotation of phylogenetic trees">
459 459
         <span class="direction">
460 460
           Previous
461 461
         </span>
... ...
@@ -475,7 +475,7 @@
475 475
 
476 476
   <div class="next">
477 477
   
478
-      <a href="https://guangchuangyu.github.io/ggtree/faq/" title="FAQ">
478
+      <a href="../faq/" title="FAQ">
479 479
         <span class="direction">
480 480
           Next
481 481
         </span>
... ...
@@ -514,12 +514,12 @@
514 514
 
515 515
     <script>
516 516
     
517
-      var base_url = 'https:\/\/guangchuangyu.github.io\/ggtree\/';
517
+      var base_url = '\/';
518 518
       var repo_id  = 'GuangchuangYu\/ggtree';
519 519
     
520 520
     </script>
521 521
 
522
-    <script src="https://guangchuangyu.github.io/ggtree/javascripts/application.js"></script>
522
+    <script src="../javascripts/application.js"></script>
523 523
     
524 524
 
525 525
     <script>
... ...
@@ -2,22 +2,22 @@
2 2
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
3 3
   <channel>
4 4
     <title>Documentations on ggtree - Guangchuang Yu</title>
5
-    <link>https://guangchuangyu.github.io/ggtree/documentation/</link>
5
+    <link>/documentation/</link>
6 6
     <description>Recent content in Documentations on ggtree - Guangchuang Yu</description>
7 7
     <generator>Hugo -- gohugo.io</generator>
8 8
     <language>en-us</language>
9 9
     <copyright>Released under the Artistic-2.0 license</copyright>
10 10
     <lastBuildDate>Mon, 24 Jul 2017 00:11:02 +0100</lastBuildDate>
11 11
     
12
-	<atom:link href="https://guangchuangyu.github.io/ggtree/documentation/index.xml" rel="self" type="application/rss+xml" />
12
+	<atom:link href="/documentation/index.xml" rel="self" type="application/rss+xml" />
13 13
     
14 14
     
15 15
     <item>
16 16
       <title>Documentation</title>
17
-      <link>https://guangchuangyu.github.io/ggtree/documentation/</link>
17
+      <link>/documentation/</link>
18 18
       <pubDate>Mon, 24 Jul 2017 00:11:02 +0100</pubDate>
19 19
       
20
-      <guid>https://guangchuangyu.github.io/ggtree/documentation/</guid>
20
+      <guid>/documentation/</guid>
21 21
       <description>Vignettes  ggtree Tree Data Import Tree Visualization Tree Annotation Tree Manipulation Advance Tree Annotation ggtree utilities Phylomoji    Blog posts  News and updates  viewing and annotating phylogenetic tree with ggtree ggtree in Bioconductor 3.1 BioC 3.1: NEWS of my BioC packages BioC 3.2: NEWS of my BioC packages News of ggtree BioC 3.3: NEWS of my BioC packages BioC 3.4: NEWS of my BioC packages ggtree paper published    Data manipulation  subsetting data in ggtree ggtree supports phylip tree format convert graphic object to tree object using treeio    Tree visualization  ggtree - updating a tree view an example of drawing beast tree using ggtree Phylogenetic trees in R using ggtree  The Molecular Ecologist    Tree annotation  label edge number in ggtree Edge coloring with user data subview Annotate a phylogenetic tree with insets ggtree annotate phylogenetic tree with local images embed images in ggplot2 via subview and annotate a phylogenetic tree with images using inset function identify method for ggtree facet_plot: a general solution to associate data with phylogenetic tree align genomic features with phylogenetic tree xlim_tree: set x axis limits for only Tree panel add layer to specific panel of facet_plot output    Tree manipulation  flip and rotate branches in ggtree    Application  ggtree for microbiome data ggtree for outbreak data ggtree version of plotTree reproducible logo generated by ggtree    Funny stuff  ggtree with funny fonts comic phylogenetic tree with ggtree and comicR use emoji font in R    User’s feedback  tweets of ggtree Join the group chat on  and    Find out more on https://guangchuangyu.</description>
22 22
     </item>
23 23
     
... ...
@@ -15,42 +15,42 @@
15 15
     
16 16
     <meta name="description" content="Visualization and annotation of phylogenetic trees.">
17 17
     
18
-    <link rel="canonical" href="https://guangchuangyu.github.io/ggtree/faq/">
18
+    <link rel="canonical" href="../faq/">
19 19
     
20 20
     <meta name="author" content="Guangchuang Yu">
21 21
     
22 22
 
23
-    <meta property="og:url" content="https://guangchuangyu.github.io/ggtree/faq/">
23
+    <meta property="og:url" content="/faq/">
24 24
     <meta property="og:title" content="ggtree - Guangchuang Yu">
25
-    <meta property="og:image" content="https://guangchuangyu.github.io/ggtree/images/gc.png">
25
+    <meta property="og:image" content="/images/gc.png">
26 26
     <meta name="apple-mobile-web-app-title" content="ggtree - Guangchuang Yu">
27 27
     <meta name="apple-mobile-web-app-capable" content="yes">
28 28
     <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
29 29
 
30
-    <link rel="shortcut icon" type="image/x-icon" href="https://guangchuangyu.github.io/ggtree/images/favicon.ico">
31
-    <link rel="icon" type="image/x-icon" href="https://guangchuangyu.github.io/ggtree/images/favicon.ico">
30
+    <link rel="shortcut icon" type="image/x-icon" href="../images/favicon.ico">
31
+    <link rel="icon" type="image/x-icon" href="../images/favicon.ico">
32 32
 
33 33
     <style>
34 34
       @font-face {
35 35
         font-family: 'Icon';
36
-        src: url('https://guangchuangyu.github.io/ggtree/fonts/icon.eot');
37
-        src: url('https://guangchuangyu.github.io/ggtree/fonts/icon.eot')
36
+        src: url('/fonts/icon.eot');
37
+        src: url('/fonts/icon.eot')
38 38
                format('embedded-opentype'),
39
-             url('https://guangchuangyu.github.io/ggtree/fonts/icon.woff')
39
+             url('/fonts/icon.woff')
40 40
                format('woff'),
41
-             url('https://guangchuangyu.github.io/ggtree/fonts/icon.ttf')
41
+             url('/fonts/icon.ttf')
42 42
                format('truetype'),
43
-             url('https://guangchuangyu.github.io/ggtree/fonts/icon.svg')
43
+             url('/fonts/icon.svg')
44 44
                format('svg');
45 45
         font-weight: normal;
46 46
         font-style: normal;
47 47
       }
48 48
     </style>
49 49
 
50
-    <link rel="stylesheet" href="https://guangchuangyu.github.io/ggtree/stylesheets/application.css">
51
-    <link rel="stylesheet" href="https://guangchuangyu.github.io/ggtree/stylesheets/temporary.css">
52
-    <link rel="stylesheet" href="https://guangchuangyu.github.io/ggtree/stylesheets/palettes.css">
53
-    <link rel="stylesheet" href="https://guangchuangyu.github.io/ggtree/stylesheets/highlight/highlight.css">
50
+    <link rel="stylesheet" href="../stylesheets/application.css">
51
+    <link rel="stylesheet" href="../stylesheets/temporary.css">
52
+    <link rel="stylesheet" href="../stylesheets/palettes.css">
53
+    <link rel="stylesheet" href="../stylesheets/highlight/highlight.css">
54 54
 
55 55
     
56 56
     
... ...
@@ -66,7 +66,7 @@
66 66
     </style>
67 67
 
68 68
     
69
-    <script src="https://guangchuangyu.github.io/ggtree/javascripts/modernizr.js"></script>
69
+    <script src="../javascripts/modernizr.js"></script>
70 70
 
71 71
     
72 72
 
... ...
@@ -138,7 +138,7 @@
138 138
     <div class="banner">
139 139
       
140 140
         <div class="logo">
141
-          <img src="https://guangchuangyu.github.io/ggtree/images/gc.png">
141
+          <img src="../images/gc.png">
142 142
         </div>
143 143
       
144 144
       <div class="name">
... ...
@@ -440,7 +440,7 @@ q + geom_text(data=d, aes(label=label))</code></pre>
440 440
 <nav class="pagination" aria-label="Footer">
441 441
   <div class="previous">
442 442
   
443
-      <a href="https://guangchuangyu.github.io/ggtree/documentation/" title="Documentation">
443
+      <a href="../documentation/" title="Documentation">
444 444
         <span class="direction">
445 445
           Previous
446 446
         </span>
... ...
@@ -460,7 +460,7 @@ q + geom_text(data=d, aes(label=label))</code></pre>
460 460
 
461 461
   <div class="next">
462 462
   
463
-      <a href="https://guangchuangyu.github.io/ggtree/featured-articles/" title="Featured Articles">
463
+      <a href="../featured-articles/" title="Featured Articles">
464 464
         <span class="direction">
465 465
           Next
466 466
         </span>
... ...
@@ -499,12 +499,12 @@ q + geom_text(data=d, aes(label=label))</code></pre>
499 499
 
500 500
     <script>
501 501
     
502
-      var base_url = 'https:\/\/guangchuangyu.github.io\/ggtree\/';
502
+      var base_url = '\/';
503 503
       var repo_id  = 'GuangchuangYu\/ggtree';
504 504
     
505 505
     </script>
506 506
 
507
-    <script src="https://guangchuangyu.github.io/ggtree/javascripts/application.js"></script>
507
+    <script src="../javascripts/application.js"></script>
508 508
     
509 509
 
510 510
     <script>
... ...
@@ -2,22 +2,22 @@
2 2
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
3 3
   <channel>
4 4
     <title>Faqs on ggtree - Guangchuang Yu</title>
5
-    <link>https://guangchuangyu.github.io/ggtree/faq/</link>
5
+    <link>/faq/</link>
6 6
     <description>Recent content in Faqs on ggtree - Guangchuang Yu</description>
7 7
     <generator>Hugo -- gohugo.io</generator>
8 8
     <language>en-us</language>
9 9
     <copyright>Released under the Artistic-2.0 license</copyright>
10 10
     <lastBuildDate>Mon, 24 Jul 2017 00:11:02 +0100</lastBuildDate>
11 11
     
12
-	<atom:link href="https://guangchuangyu.github.io/ggtree/faq/index.xml" rel="self" type="application/rss+xml" />
12
+	<atom:link href="/faq/index.xml" rel="self" type="application/rss+xml" />
13 13
     
14 14
     
15 15
     <item>
16 16
       <title>FAQ</title>
17
-      <link>https://guangchuangyu.github.io/ggtree/faq/</link>
17
+      <link>/faq/</link>
18 18
       <pubDate>Mon, 24 Jul 2017 00:11:02 +0100</pubDate>
19 19
       
20
-      <guid>https://guangchuangyu.github.io/ggtree/faq/</guid>
20
+      <guid>/faq/</guid>
21 21
       <description>Installation  Could not find function If you got this error, please make sure you are using the latest R and ggtree.
22 22
 Packages in Bioconductor, like ggtree, have different release policy compare to CRAN. There are two branches, release and devel, in parallel. Release branch is more stable and only document improvement and bug fixes will commit to it. New functions will only commit to devel branch.
23 23
 Sometimes I may write blog post to introduce new functions which is not available in release branch, you need to install the devel version of ggtree in order to use these new functions.</description>
... ...
@@ -15,42 +15,42 @@
15 15
     
16 16
     <meta name="description" content="Visualization and annotation of phylogenetic trees.">
17 17
     
18
-    <link rel="canonical" href="https://guangchuangyu.github.io/ggtree/featured-articles/">
18
+    <link rel="canonical" href="../featured-articles/">
19 19
     
20 20
     <meta name="author" content="Guangchuang Yu">
21 21
     
22 22
 
23
-    <meta property="og:url" content="https://guangchuangyu.github.io/ggtree/featured-articles/">
23
+    <meta property="og:url" content="/featured-articles/">
24 24
     <meta property="og:title" content="ggtree - Guangchuang Yu">
25
-    <meta property="og:image" content="https://guangchuangyu.github.io/ggtree/images/gc.png">
25
+    <meta property="og:image" content="/images/gc.png">
26 26
     <meta name="apple-mobile-web-app-title" content="ggtree - Guangchuang Yu">
27 27
     <meta name="apple-mobile-web-app-capable" content="yes">
28 28
     <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
29 29
 
30
-    <link rel="shortcut icon" type="image/x-icon" href="https://guangchuangyu.github.io/ggtree/images/favicon.ico">
31
-    <link rel="icon" type="image/x-icon" href="https://guangchuangyu.github.io/ggtree/images/favicon.ico">
30
+    <link rel="shortcut icon" type="image/x-icon" href="../images/favicon.ico">
31
+    <link rel="icon" type="image/x-icon" href="../images/favicon.ico">
32 32
 
33 33
     <style>
34 34
       @font-face {
35 35
         font-family: 'Icon';
36
-        src: url('https://guangchuangyu.github.io/ggtree/fonts/icon.eot');
37
-        src: url('https://guangchuangyu.github.io/ggtree/fonts/icon.eot')
36
+        src: url('/fonts/icon.eot');
37
+        src: url('/fonts/icon.eot')
38 38
                format('embedded-opentype'),
39
-             url('https://guangchuangyu.github.io/ggtree/fonts/icon.woff')
39
+             url('/fonts/icon.woff')
40 40
                format('woff'),
41
-             url('https://guangchuangyu.github.io/ggtree/fonts/icon.ttf')
41
+             url('/fonts/icon.ttf')
42 42
                format('truetype'),
43
-             url('https://guangchuangyu.github.io/ggtree/fonts/icon.svg')
43
+             url('/fonts/icon.svg')
44 44
                format('svg');
45 45
         font-weight: normal;
46 46
         font-style: normal;
47 47
       }
48 48
     </style>
49 49
 
50
-    <link rel="stylesheet" href="https://guangchuangyu.github.io/ggtree/stylesheets/application.css">
51
-    <link rel="stylesheet" href="https://guangchuangyu.github.io/ggtree/stylesheets/temporary.css">
52
-    <link rel="stylesheet" href="https://guangchuangyu.github.io/ggtree/stylesheets/palettes.css">
53
-    <link rel="stylesheet" href="https://guangchuangyu.github.io/ggtree/stylesheets/highlight/highlight.css">
50
+    <link rel="stylesheet" href="../stylesheets/application.css">
51
+    <link rel="stylesheet" href="../stylesheets/temporary.css">
52
+    <link rel="stylesheet" href="../stylesheets/palettes.css">
53
+    <link rel="stylesheet" href="../stylesheets/highlight/highlight.css">
54 54
 
55 55
     
56 56
     
... ...
@@ -66,7 +66,7 @@
66 66
     </style>
67 67
 
68 68
     
69
-    <script src="https://guangchuangyu.github.io/ggtree/javascripts/modernizr.js"></script>
69
+    <script src="../javascripts/modernizr.js"></script>
70 70
 
71 71
     
72 72
 
... ...
@@ -138,7 +138,7 @@
138 138
     <div class="banner">
139 139
       
140 140
         <div class="logo">
141
-          <img src="https://guangchuangyu.github.io/ggtree/images/gc.png">
141
+          <img src="../images/gc.png">
142 142
         </div>
143 143
       
144 144
       <div class="name">
... ...
@@ -325,9 +325,7 @@
325 325
 
326 326
 			<p><link rel="stylesheet" href="https://guangchuangyu.github.io/css/font-awesome.min.css"></p>
327 327
 <p><a href="https://github.com/GuangchuangYu/featured_img">Let us know</a> if you have published using <code>ggtree</code> and your publication will be featured here.</p>
328
-<p><img src="../featured-articles/index_files/figure-html/unnamed-chunk-1-1.png" width="844.8" /></p>
329
-<!-- citation:=HtEfBTGE9r8C:=7268358477862164627 -->
330
-<!-- article_citation:=HtEfBTGE9r8C -->
328
+<p><img src="../images/citation.png" width="880"/></p>
331 329
 <div id="section" class="section level2">
332 330
 <h2><i class="fa fa-calendar"></i> 2017</h2>
333 331
 <p><a href="http://dx.doi.org/10.1073/pnas.1617959114">Phylogenetic analysis of the human antibody repertoire reveals quantitative signatures of immune senescence and aging</a>. <strong><em>PNAS</em></strong>, 2017</p>
... ...
@@ -356,7 +354,7 @@
356 354
 <nav class="pagination" aria-label="Footer">
357 355
   <div class="previous">
358 356
   
359
-      <a href="https://guangchuangyu.github.io/ggtree/faq/" title="FAQ">
357
+      <a href="../faq/" title="FAQ">
360 358
         <span class="direction">
361 359
           Previous
362 360
         </span>
... ...
@@ -376,7 +374,7 @@
376 374
 
377 375
   <div class="next">
378 376
   
379
-      <a href="https://guangchuangyu.github.io/ggtree/gallery/" title="Gallery">
377
+      <a href="../gallery/" title="Gallery">
380 378
         <span class="direction">
381 379
           Next
382 380
         </span>
... ...
@@ -415,12 +413,12 @@
415 413
 
416 414
     <script>
417 415
     
418
-      var base_url = 'https:\/\/guangchuangyu.github.io\/ggtree\/';
416
+      var base_url = '\/';
419 417
       var repo_id  = 'GuangchuangYu\/ggtree';
420 418
     
421 419
     </script>
422 420
 
423
-    <script src="https://guangchuangyu.github.io/ggtree/javascripts/application.js"></script>
421
+    <script src="../javascripts/application.js"></script>
424 422
     
425 423
 
426 424
     <script>
... ...
@@ -11,28 +11,9 @@ weight: 30
11 11
 [Let us know](https://github.com/GuangchuangYu/featured_img) if you have published using `ggtree` and your publication will be featured here.
12 12
 
13 13
 
14
+<img src="../images/citation.png" width="880"/>
14 15
 
15 16
 
16
-```{r echo=F, message=F, fig.width=8.8, fig.height=4.5}
17
-library(scholar)
18
-library(ggplot2)
19
-
20
-id <- "DO5oG40AAAAJ"
21
-pubid <- "HtEfBTGE9r8C"
22
-df <- get_article_cite_history(id, pubid)
23
-df$year <- as.factor(df$year)
24
-p <- ggplot(df, aes(year, cites)) + geom_col(fill='steelblue', width=.6) + theme_minimal()
25
-title <- paste('Cited by', sum(df$cites))
26
-p <- p + xlab(NULL) + ylab(NULL) + ggtitle(title)
27
-print(p)
28
-#ggplotly(p, height=440, width=880)
29
-```
30
-
31
-
32
-<!-- citation:=HtEfBTGE9r8C:=7268358477862164627 -->
33
-
34
-<!-- article_citation:=HtEfBTGE9r8C -->
35
-
36 17
 
37 18
 ## <i class="fa fa-calendar"></i> 2017
38 19
 
... ...
@@ -2,22 +2,22 @@
2 2
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
3 3
   <channel>
4 4
     <title>Featured-articles on ggtree - Guangchuang Yu</title>
5
-    <link>https://guangchuangyu.github.io/ggtree/featured-articles/</link>
5
+    <link>/featured-articles/</link>
6 6
     <description>Recent content in Featured-articles on ggtree - Guangchuang Yu</description>
7 7
     <generator>Hugo -- gohugo.io</generator>
8 8
     <language>en-us</language>
9 9
     <copyright>Released under the Artistic-2.0 license</copyright>
10 10
     <lastBuildDate>Mon, 24 Jul 2017 00:11:02 +0100</lastBuildDate>
11 11
     
12
-	<atom:link href="https://guangchuangyu.github.io/ggtree/featured-articles/index.xml" rel="self" type="application/rss+xml" />
12
+	<atom:link href="/featured-articles/index.xml" rel="self" type="application/rss+xml" />
13 13
     
14 14
     
15 15
     <item>
16 16
       <title>Featured Articles</title>
17
-      <link>https://guangchuangyu.github.io/ggtree/featured-articles/</link>
17
+      <link>/featured-articles/</link>
18 18
       <pubDate>Mon, 24 Jul 2017 00:11:02 +0100</pubDate>
19 19
       
20
-      <guid>https://guangchuangyu.github.io/ggtree/featured-articles/</guid>
20
+      <guid>/featured-articles/</guid>
21 21
       <description>Let us know if you have published using ggtree and your publication will be featured here.
22 22
  2017 Phylogenetic analysis of the human antibody repertoire reveals quantitative signatures of immune senescence and aging. PNAS, 2017
23 23
 Horses in Denmark Are a Reservoir of Diverse Clones of Methicillin-Resistant and -Susceptible Staphylococcus aureus. Frontiers in Microbiology, 2017, 8:543
24 24
deleted file mode 100644
25 25
Binary files a/docs/featured-articles/index_files/figure-html/unnamed-chunk-1-1.png and /dev/null differ
26 26
deleted file mode 100644
27 27
Binary files a/docs/featured-articles/index_files/figure-html/unnamed-chunk-2-1.png and /dev/null differ
... ...
@@ -15,42 +15,42 @@
15 15
     
16 16
     <meta name="description" content="Visualization and annotation of phylogenetic trees.">
17 17
     
18
-    <link rel="canonical" href="https://guangchuangyu.github.io/ggtree/gallery/">
18
+    <link rel="canonical" href="../gallery/">
19 19
     
20 20
     <meta name="author" content="Guangchuang Yu">
21 21
     
22 22
 
23
-    <meta property="og:url" content="https://guangchuangyu.github.io/ggtree/gallery/">
23
+    <meta property="og:url" content="/gallery/">
24 24
     <meta property="og:title" content="ggtree - Guangchuang Yu">
25
-    <meta property="og:image" content="https://guangchuangyu.github.io/ggtree/images/gc.png">
25
+    <meta property="og:image" content="/images/gc.png">
26 26
     <meta name="apple-mobile-web-app-title" content="ggtree - Guangchuang Yu">
27 27
     <meta name="apple-mobile-web-app-capable" content="yes">
28 28
     <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
29 29
 
30
-    <link rel="shortcut icon" type="image/x-icon" href="https://guangchuangyu.github.io/ggtree/images/favicon.ico">
31
-    <link rel="icon" type="image/x-icon" href="https://guangchuangyu.github.io/ggtree/images/favicon.ico">
30
+    <link rel="shortcut icon" type="image/x-icon" href="../images/favicon.ico">
31
+    <link rel="icon" type="image/x-icon" href="../images/favicon.ico">
32 32
 
33 33
     <style>
34 34
       @font-face {
35 35
         font-family: 'Icon';
36
-        src: url('https://guangchuangyu.github.io/ggtree/fonts/icon.eot');
37
-        src: url('https://guangchuangyu.github.io/ggtree/fonts/icon.eot')
36
+        src: url('/fonts/icon.eot');
37
+        src: url('/fonts/icon.eot')
38 38
                format('embedded-opentype'),
39
-             url('https://guangchuangyu.github.io/ggtree/fonts/icon.woff')
39
+             url('/fonts/icon.woff')
40 40
                format('woff'),
41
-             url('https://guangchuangyu.github.io/ggtree/fonts/icon.ttf')
41
+             url('/fonts/icon.ttf')
42 42
                format('truetype'),
43
-             url('https://guangchuangyu.github.io/ggtree/fonts/icon.svg')
43
+             url('/fonts/icon.svg')
44 44
                format('svg');
45 45
         font-weight: normal;
46 46
         font-style: normal;
47 47
       }
48 48
     </style>
49 49
 
50
-    <link rel="stylesheet" href="https://guangchuangyu.github.io/ggtree/stylesheets/application.css">
51
-    <link rel="stylesheet" href="https://guangchuangyu.github.io/ggtree/stylesheets/temporary.css">
52
-    <link rel="stylesheet" href="https://guangchuangyu.github.io/ggtree/stylesheets/palettes.css">
53
-    <link rel="stylesheet" href="https://guangchuangyu.github.io/ggtree/stylesheets/highlight/highlight.css">
50
+    <link rel="stylesheet" href="../stylesheets/application.css">
51
+    <link rel="stylesheet" href="../stylesheets/temporary.css">
52
+    <link rel="stylesheet" href="../stylesheets/palettes.css">
53
+    <link rel="stylesheet" href="../stylesheets/highlight/highlight.css">
54 54
 
55 55
     
56 56
     
... ...
@@ -66,7 +66,7 @@
66 66
     </style>
67 67
 
68 68
     
69
-    <script src="https://guangchuangyu.github.io/ggtree/javascripts/modernizr.js"></script>
69
+    <script src="../javascripts/modernizr.js"></script>
70 70
 
71 71
     
72 72
 
... ...
@@ -138,7 +138,7 @@
138 138
     <div class="banner">
139 139
       
140 140
         <div class="logo">
141
-          <img src="https://guangchuangyu.github.io/ggtree/images/gc.png">
141
+          <img src="../images/gc.png">
142 142
         </div>
143 143
       
144 144
       <div class="name">
... ...
@@ -460,7 +460,7 @@ multiple sequence alignment with <a href="https://twitter.com/hashtag/phylogenet
460 460
 <nav class="pagination" aria-label="Footer">
461 461
   <div class="previous">
462 462
   
463
-      <a href="https://guangchuangyu.github.io/ggtree/featured-articles/" title="Featured Articles">
463
+      <a href="../featured-articles/" title="Featured Articles">
464 464
         <span class="direction">
465 465
           Previous
466 466
         </span>
... ...
@@ -503,12 +503,12 @@ multiple sequence alignment with <a href="https://twitter.com/hashtag/phylogenet
503 503
 
504 504
     <script>
505 505
     
506
-      var base_url = 'https:\/\/guangchuangyu.github.io\/ggtree\/';
506
+      var base_url = '\/';
507 507
       var repo_id  = 'GuangchuangYu\/ggtree';
508 508
     
509 509
     </script>
510 510
 
511
-    <script src="https://guangchuangyu.github.io/ggtree/javascripts/application.js"></script>
511
+    <script src="../javascripts/application.js"></script>
512 512
     
513 513
 
514 514
     <script>
... ...
@@ -2,22 +2,22 @@
2 2
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
3 3
   <channel>
4 4
     <title>Galleries on ggtree - Guangchuang Yu</title>
5
-    <link>https://guangchuangyu.github.io/ggtree/gallery/</link>
5
+    <link>/gallery/</link>
6 6
     <description>Recent content in Galleries on ggtree - Guangchuang Yu</description>
7 7
     <generator>Hugo -- gohugo.io</generator>
8 8
     <language>en-us</language>
9 9
     <copyright>Released under the Artistic-2.0 license</copyright>
10 10
     <lastBuildDate>Mon, 24 Jul 2017 00:11:02 +0100</lastBuildDate>
11 11
     
12
-	<atom:link href="https://guangchuangyu.github.io/ggtree/gallery/index.xml" rel="self" type="application/rss+xml" />
12
+	<atom:link href="/gallery/index.xml" rel="self" type="application/rss+xml" />
13 13
     
14 14
     
15 15
     <item>
16 16
       <title>Gallery</title>
17
-      <link>https://guangchuangyu.github.io/ggtree/gallery/</link>
17
+      <link>/gallery/</link>
18 18
       <pubDate>Mon, 24 Jul 2017 00:11:02 +0100</pubDate>
19 19
       
20
-      <guid>https://guangchuangyu.github.io/ggtree/gallery/</guid>
20
+      <guid>/gallery/</guid>
21 21
       <description>Journal Articles  http://dx.doi.org/10.3389/fmicb.2017.00543    https://doi.org/10.3389/fmicb.2017.00456    http://dx.doi.org/10.1186/s40168-017-0232-3    http://dx.doi.org/10.1111/2041-210X.12628    http://dx.doi.org/10.1128/AEM.02307-16    http://dx.doi.org/10.3389%2Ffcimb.2016.00036    http://dx.doi.org/10.1016/j.meegid.2015.12.006     Tweets Adaptive radiation of #Darwin&#39;s finches showing #genotypic and #morphometric evolution. Good excuse to practice with #ggtree @guangchuangyu pic.twitter.com/JJZ3Yje58s — Will Harvey (@_wharvey) February 15, 2017  am quite liking #ggtree #rstats #ggplot pic.</description>
22 22
     </item>
23 23
     
24 24
new file mode 100644
25 25
Binary files /dev/null and b/docs/images/citation.png differ
26 26
new file mode 100644
27 27
Binary files /dev/null and b/docs/images/dlstats.png differ
... ...
@@ -15,42 +15,42 @@
15 15
     
16 16
     <meta name="description" content="Visualization and annotation of phylogenetic trees.">
17 17
     
18
-    <link rel="canonical" href="https://guangchuangyu.github.io/ggtree/">
18
+    <link rel="canonical" href="./">
19 19
     
20 20
     <meta name="author" content="Guangchuang Yu">
21 21
     
22 22
 
23
-    <meta property="og:url" content="https://guangchuangyu.github.io/ggtree/">
23
+    <meta property="og:url" content="/">
24 24
     <meta property="og:title" content="ggtree - Guangchuang Yu">
25
-    <meta property="og:image" content="https://guangchuangyu.github.io/ggtree/images/gc.png">
25
+    <meta property="og:image" content="/images/gc.png">
26 26
     <meta name="apple-mobile-web-app-title" content="ggtree - Guangchuang Yu">
27 27
     <meta name="apple-mobile-web-app-capable" content="yes">
28 28
     <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
29 29
 
30
-    <link rel="shortcut icon" type="image/x-icon" href="https://guangchuangyu.github.io/ggtree/images/favicon.ico">
31
-    <link rel="icon" type="image/x-icon" href="https://guangchuangyu.github.io/ggtree/images/favicon.ico">
30
+    <link rel="shortcut icon" type="image/x-icon" href="./images/favicon.ico">
31
+    <link rel="icon" type="image/x-icon" href="./images/favicon.ico">
32 32
 
33 33
     <style>
34 34
       @font-face {
35 35
         font-family: 'Icon';
36
-        src: url('https://guangchuangyu.github.io/ggtree/fonts/icon.eot');
37
-        src: url('https://guangchuangyu.github.io/ggtree/fonts/icon.eot')
36
+        src: url('/fonts/icon.eot');
37
+        src: url('/fonts/icon.eot')
38 38
                format('embedded-opentype'),
39
-             url('https://guangchuangyu.github.io/ggtree/fonts/icon.woff')
39
+             url('/fonts/icon.woff')
40 40
                format('woff'),
41
-             url('https://guangchuangyu.github.io/ggtree/fonts/icon.ttf')
41
+             url('/fonts/icon.ttf')
42 42
                format('truetype'),
43
-             url('https://guangchuangyu.github.io/ggtree/fonts/icon.svg')
43
+             url('/fonts/icon.svg')
44 44
                format('svg');
45 45
         font-weight: normal;
46 46
         font-style: normal;
47 47
       }
48 48
     </style>
49 49
 
50
-    <link rel="stylesheet" href="https://guangchuangyu.github.io/ggtree/stylesheets/application.css">
51
-    <link rel="stylesheet" href="https://guangchuangyu.github.io/ggtree/stylesheets/temporary.css">
52
-    <link rel="stylesheet" href="https://guangchuangyu.github.io/ggtree/stylesheets/palettes.css">
53
-    <link rel="stylesheet" href="https://guangchuangyu.github.io/ggtree/stylesheets/highlight/highlight.css">
50
+    <link rel="stylesheet" href="./stylesheets/application.css">
51
+    <link rel="stylesheet" href="./stylesheets/temporary.css">
52
+    <link rel="stylesheet" href="./stylesheets/palettes.css">
53
+    <link rel="stylesheet" href="./stylesheets/highlight/highlight.css">
54 54
 
55 55
     
56 56
     
... ...
@@ -66,11 +66,11 @@
66 66
     </style>
67 67
 
68 68
     
69
-    <script src="https://guangchuangyu.github.io/ggtree/javascripts/modernizr.js"></script>
69
+    <script src="./javascripts/modernizr.js"></script>
70 70
 
71 71
     
72
-    <link href="https://guangchuangyu.github.io/ggtree/index.xml" rel="alternate" type="application/rss+xml" title="ggtree - Guangchuang Yu" />
73
-    <link href="https://guangchuangyu.github.io/ggtree/index.xml" rel="feed" type="application/rss+xml" title="ggtree - Guangchuang Yu" />
72
+    <link href="./index.xml" rel="alternate" type="application/rss+xml" title="ggtree - Guangchuang Yu" />
73
+    <link href="./index.xml" rel="feed" type="application/rss+xml" title="ggtree - Guangchuang Yu" />
74 74
     
75 75
 
76 76
   </head>
... ...
@@ -141,7 +141,7 @@
141 141
     <div class="banner">
142 142
       
143 143
         <div class="logo">
144
-          <img src="https://guangchuangyu.github.io/ggtree/images/gc.png">
144
+          <img src="./images/gc.png">
145 145
         </div>
146 146
       
147 147
       <div class="name">
... ...
@@ -187,12 +187,15 @@
187 187
 
188 188
 
189 189
 
190
-<a  title="ggtree" href="./">
190
+<a class="current" title="ggtree" href="./">
191 191
 	
192 192
 	ggtree
193 193
 </a>
194 194
 
195 195
 
196
+<ul id="scrollspy">
197
+</ul>
198
+
196 199
 
197 200
   
198 201
 </li>
... ...
@@ -453,7 +456,7 @@ biocLite(&quot;ggtree&quot;)</code></pre>
453 456
   
454 457
 
455 458
   <div class="next">
456
-      <a href="https://guangchuangyu.github.io/ggtree/documentation/" title="Documentation">
459
+      <a href="./documentation/" title="Documentation">
457 460
         <span class="direction">
458 461
           Next
459 462
         </span>
... ...
@@ -489,12 +492,12 @@ biocLite(&quot;ggtree&quot;)</code></pre>
489 492
 
490 493
     <script>
491 494
     
492
-      var base_url = 'https:\/\/guangchuangyu.github.io\/ggtree\/';
495
+      var base_url = '\/';
493 496
       var repo_id  = 'GuangchuangYu\/ggtree';
494 497
     
495 498
     </script>
496 499
 
497
-    <script src="https://guangchuangyu.github.io/ggtree/javascripts/application.js"></script>
500
+    <script src="./javascripts/application.js"></script>
498 501
     
499 502
 
500 503
     <script>
... ...
@@ -2,41 +2,41 @@
2 2
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
3 3
   <channel>
4 4
     <title>ggtree - Guangchuang Yu</title>
5
-    <link>https://guangchuangyu.github.io/ggtree/</link>
5
+    <link>/</link>
6 6
     <description>Recent content on ggtree - Guangchuang Yu</description>
7 7
     <generator>Hugo -- gohugo.io</generator>
8 8
     <language>en-us</language>
9 9
     <copyright>Released under the Artistic-2.0 license</copyright>
10 10
     <lastBuildDate>Sat, 08 Jul 2017 21:07:13 +0100</lastBuildDate>
11 11
     
12
-	<atom:link href="https://guangchuangyu.github.io/ggtree/index.xml" rel="self" type="application/rss+xml" />
12
+	<atom:link href="/index.xml" rel="self" type="application/rss+xml" />
13 13
     
14 14
     
15 15
     <item>
16 16
       <title>ggtree: visualization and annotation of phylogenetic trees</title>
17
-      <link>https://guangchuangyu.github.io/ggtree/</link>
17
+      <link>/</link>
18 18
       <pubDate>Sat, 08 Jul 2017 21:07:13 +0100</pubDate>
19 19
       
20
-      <guid>https://guangchuangyu.github.io/ggtree/</guid>
20
+      <guid>/</guid>
21 21
       <description>The ggtree package extending the ggplot2 package. It based on grammar of graphics and takes all the good parts of ggplot2. ggtree is designed for not only viewing phylogenetic tree but also displaying annotation data on the tree. ggtree is released within the Bioconductor project and the source code is hosted on  GitHub.
22 22
  Authors Guangchuang Yu and Tommy Tsan-Yuk Lam, School of Public Health, The University of Hong Kong.</description>
23 23
     </item>
24 24
     
25 25
     <item>
26 26
       <title>Documentation</title>
27
-      <link>https://guangchuangyu.github.io/ggtree/documentation/</link>
27
+      <link>/documentation/</link>
28 28
       <pubDate>Mon, 24 Jul 2017 00:11:02 +0100</pubDate>
29 29
       
30
-      <guid>https://guangchuangyu.github.io/ggtree/documentation/</guid>
30
+      <guid>/documentation/</guid>
31 31
       <description>Vignettes  ggtree Tree Data Import Tree Visualization Tree Annotation Tree Manipulation Advance Tree Annotation ggtree utilities Phylomoji    Blog posts  News and updates  viewing and annotating phylogenetic tree with ggtree ggtree in Bioconductor 3.1 BioC 3.1: NEWS of my BioC packages BioC 3.2: NEWS of my BioC packages News of ggtree BioC 3.3: NEWS of my BioC packages BioC 3.4: NEWS of my BioC packages ggtree paper published    Data manipulation  subsetting data in ggtree ggtree supports phylip tree format convert graphic object to tree object using treeio    Tree visualization  ggtree - updating a tree view an example of drawing beast tree using ggtree Phylogenetic trees in R using ggtree  The Molecular Ecologist    Tree annotation  label edge number in ggtree Edge coloring with user data subview Annotate a phylogenetic tree with insets ggtree annotate phylogenetic tree with local images embed images in ggplot2 via subview and annotate a phylogenetic tree with images using inset function identify method for ggtree facet_plot: a general solution to associate data with phylogenetic tree align genomic features with phylogenetic tree xlim_tree: set x axis limits for only Tree panel add layer to specific panel of facet_plot output    Tree manipulation  flip and rotate branches in ggtree    Application  ggtree for microbiome data ggtree for outbreak data ggtree version of plotTree reproducible logo generated by ggtree    Funny stuff  ggtree with funny fonts comic phylogenetic tree with ggtree and comicR use emoji font in R    User’s feedback  tweets of ggtree Join the group chat on  and    Find out more on https://guangchuangyu.</description>
32 32
     </item>
33 33
     
34 34
     <item>
35 35
       <title>FAQ</title>
36
-      <link>https://guangchuangyu.github.io/ggtree/faq/</link>
36
+      <link>/faq/</link>
37 37
       <pubDate>Mon, 24 Jul 2017 00:11:02 +0100</pubDate>
38 38
       
39
-      <guid>https://guangchuangyu.github.io/ggtree/faq/</guid>
39
+      <guid>/faq/</guid>
40 40
       <description>Installation  Could not find function If you got this error, please make sure you are using the latest R and ggtree.
41 41
 Packages in Bioconductor, like ggtree, have different release policy compare to CRAN. There are two branches, release and devel, in parallel. Release branch is more stable and only document improvement and bug fixes will commit to it. New functions will only commit to devel branch.
42 42
 Sometimes I may write blog post to introduce new functions which is not available in release branch, you need to install the devel version of ggtree in order to use these new functions.</description>
... ...
@@ -44,10 +44,10 @@ Sometimes I may write blog post to introduce new functions which is not availabl
44 44
     
45 45
     <item>
46 46
       <title>Featured Articles</title>
47
-      <link>https://guangchuangyu.github.io/ggtree/featured-articles/</link>
47
+      <link>/featured-articles/</link>
48 48
       <pubDate>Mon, 24 Jul 2017 00:11:02 +0100</pubDate>
49 49
       
50
-      <guid>https://guangchuangyu.github.io/ggtree/featured-articles/</guid>
50
+      <guid>/featured-articles/</guid>
51 51
       <description>Let us know if you have published using ggtree and your publication will be featured here.
52 52
  2017 Phylogenetic analysis of the human antibody repertoire reveals quantitative signatures of immune senescence and aging. PNAS, 2017
53 53
 Horses in Denmark Are a Reservoir of Diverse Clones of Methicillin-Resistant and -Susceptible Staphylococcus aureus. Frontiers in Microbiology, 2017, 8:543
... ...
@@ -56,10 +56,10 @@ Gut metagenomes of type 2 diabetic patients have characteristic single-nucleotid
56 56
     
57 57
     <item>
58 58
       <title>Gallery</title>
59
-      <link>https://guangchuangyu.github.io/ggtree/gallery/</link>
59
+      <link>/gallery/</link>
60 60
       <pubDate>Mon, 24 Jul 2017 00:11:02 +0100</pubDate>
61 61
       
62
-      <guid>https://guangchuangyu.github.io/ggtree/gallery/</guid>
62
+      <guid>/gallery/</guid>
63 63
       <description>Journal Articles  http://dx.doi.org/10.3389/fmicb.2017.00543    https://doi.org/10.3389/fmicb.2017.00456    http://dx.doi.org/10.1186/s40168-017-0232-3    http://dx.doi.org/10.1111/2041-210X.12628    http://dx.doi.org/10.1128/AEM.02307-16    http://dx.doi.org/10.3389%2Ffcimb.2016.00036    http://dx.doi.org/10.1016/j.meegid.2015.12.006     Tweets Adaptive radiation of #Darwin&#39;s finches showing #genotypic and #morphometric evolution. Good excuse to practice with #ggtree @guangchuangyu pic.twitter.com/JJZ3Yje58s — Will Harvey (@_wharvey) February 15, 2017  am quite liking #ggtree #rstats #ggplot pic.</description>
64 64
     </item>
65 65
     
66 66
deleted file mode 100644
... ...
@@ -1,27 +0,0 @@
1
-/* Adjust margins outwards, so column contents line up with the edges of the
2
-   parent of container-fluid. */
3
-.container-fluid.crosstalk-bscols {
4
-  margin-left: -30px;
5
-  margin-right: -30px;
6
-  white-space: normal;
7
-}
8
-
9
-/* But don't adjust the margins outwards if we're directly under the body,
10
-   i.e. we were the top-level of something at the console. */
11
-body > .container-fluid.crosstalk-bscols {
12
-  margin-left: auto;
13
-  margin-right: auto;
14
-}
15
-
16
-.crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column {
17
-  display: inline-block;
18
-  padding-right: 12px;
19
-  vertical-align: top;
20
-}
21
-
22
-@media only screen and (max-width:480px) {
23
-  .crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column {
24
-    display: block;
25
-    padding-right: inherit;
26
-  }
27
-}
28 0
deleted file mode 100644
... ...
@@ -1,1471 +0,0 @@
1
-(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<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
2
-"use strict";
3
-
4
-Object.defineProperty(exports, "__esModule", {
5
-  value: true
6
-});
7
-
8
-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; }; }();
9
-
10
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
11
-
12
-var Events = function () {
13
-  function Events() {
14
-    _classCallCheck(this, Events);
15
-
16
-    this._types = {};
17
-    this._seq = 0;
18
-  }
19
-
20
-  _createClass(Events, [{
21
-    key: "on",
22
-    value: function on(eventType, listener) {
23
-      var subs = this._types[eventType];
24
-      if (!subs) {
25
-        subs = this._types[eventType] = {};
26
-      }
27
-      var sub = "sub" + this._seq++;
28
-      subs[sub] = listener;
29
-      return sub;
30
-    }
31
-
32
-    // Returns false if no match, or string for sub name if matched
33
-
34
-  }, {
35
-    key: "off",
36
-    value: function off(eventType, listener) {
37
-      var subs = this._types[eventType];
38
-      if (typeof listener === "function") {
39
-        for (var key in subs) {
40
-          if (subs.hasOwnProperty(key)) {
41
-            if (subs[key] === listener) {
42
-              delete subs[key];
43
-              return key;
44
-            }
45
-          }
46
-        }
47
-        return false;
48
-      } else if (typeof listener === "string") {
49
-        if (subs && subs[listener]) {
50
-          delete subs[listener];
51
-          return listener;
52
-        }
53
-        return false;
54
-      } else {
55
-        throw new Error("Unexpected type for listener");
56
-      }
57
-    }
58
-  }, {
59
-    key: "trigger",
60
-    value: function trigger(eventType, arg, thisObj) {
61
-      var subs = this._types[eventType];
62
-      for (var key in subs) {
63
-        if (subs.hasOwnProperty(key)) {
64
-          subs[key].call(thisObj, arg);
65
-        }
66
-      }
67
-    }
68
-  }]);
69
-
70
-  return Events;
71
-}();
72
-
73
-exports.default = Events;
74
-
75
-},{}],2:[function(require,module,exports){
76
-"use strict";
77
-
78
-Object.defineProperty(exports, "__esModule", {
79
-  value: true
80
-});
81
-exports.FilterHandle = undefined;
82
-
83
-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; }; }();
84
-
85
-var _events = require("./events");
86
-
87
-var _events2 = _interopRequireDefault(_events);
88
-
89
-var _filterset = require("./filterset");
90
-
91
-var _filterset2 = _interopRequireDefault(_filterset);
92
-
93
-var _group = require("./group");
94
-
95
-var _group2 = _interopRequireDefault(_group);
96
-
97
-var _util = require("./util");
98
-
99
-var util = _interopRequireWildcard(_util);
100
-
101
-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; } }
102
-
103
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
104
-
105
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
106
-
107
-function getFilterSet(group) {
108
-  var fsVar = group.var("filterset");
109
-  var result = fsVar.get();
110
-  if (!result) {
111
-    result = new _filterset2.default();
112
-    fsVar.set(result);
113
-  }
114
-  return result;
115
-}
116
-
117
-var id = 1;
118
-function nextId() {
119
-  return id++;
120
-}
121
-
122
-var FilterHandle = exports.FilterHandle = function () {
123
-  /**
124
-   * @classdesc
125
-   * Use this class to contribute to, and listen for changes to, the filter set
126
-   * for the given group of widgets. Filter input controls should create one
127
-   * `FilterHandle` and only call {@link FilterHandle#set}. Output widgets that
128
-   * wish to displayed filtered data should create one `FilterHandle` and use
129
-   * the {@link FilterHandle#filteredKeys} property and listen for change
130
-   * events.
131
-   *
132
-   * If two (or more) `FilterHandle` instances in the same webpage share the
133
-   * same group name, they will contribute to a single "filter set". Each
134
-   * `FilterHandle` starts out with a `null` value, which means they take
135
-   * nothing away from the set of data that should be shown. To make a
136
-   * `FilterHandle` actually remove data from the filter set, set its value to
137
-   * an array of keys which should be displayed. Crosstalk will aggregate the
138
-   * various key arrays by finding their intersection; only keys that are
139
-   * present in all non-null filter handles are considered part of the filter
140
-   * set.
141
-   *
142
-   * @param {string} [group] - The name of the Crosstalk group, or if none,
143
-   *   null or undefined (or any other falsy value). This can be changed later
144
-   *   via the @{link FilterHandle#setGroup} method.
145
-   * @param {Object} [extraInfo] - An object whose properties will be copied to
146
-   *   the event object whenever an event is emitted.
147
-   */
148
-  function FilterHandle(group, extraInfo) {
149
-    _classCallCheck(this, FilterHandle);
150
-
151
-    this._eventRelay = new _events2.default();
152
-    this._emitter = new util.SubscriptionTracker(this._eventRelay);
153
-
154
-    // Name of the group we're currently tracking, if any. Can change over time.
155
-    this._group = null;
156
-    // The filterSet that we're tracking, if any. Can change over time.
157
-    this._filterSet = null;
158
-    // The Var we're currently tracking, if any. Can change over time.
159
-    this._filterVar = null;
160
-    // The event handler subscription we currently have on var.on("change").
161
-    this._varOnChangeSub = null;
162
-
163
-    this._extraInfo = util.extend({ sender: this }, extraInfo);
164
-
165
-    this._id = "filter" + nextId();
166
-
167
-    this.setGroup(group);
168
-  }
169
-
170
-  /**
171
-   * Changes the Crosstalk group membership of this FilterHandle. If `set()` was
172
-   * previously called on this handle, switching groups will clear those keys
173
-   * from the old group's filter set. These keys will not be applied to the new
174
-   * group's filter set either. In other words, `setGroup()` effectively calls
175
-   * `clear()` before switching groups.
176
-   *
177
-   * @param {string} group - The name of the Crosstalk group, or null (or
178
-   *   undefined) to clear the group.
179
-   */
180
-
181
-
182
-  _createClass(FilterHandle, [{
183
-    key: "setGroup",
184
-    value: function setGroup(group) {
185
-      var _this = this;
186
-
187
-      // If group is unchanged, do nothing
188
-      if (this._group === group) return;
189
-      // Treat null, undefined, and other falsy values the same
190
-      if (!this._group && !group) return;
191
-
192
-      if (this._filterVar) {
193
-        this._filterVar.off("change", this._varOnChangeSub);
194
-        this.clear();
195
-        this._varOnChangeSub = null;
196
-        this._filterVar = null;
197
-        this._filterSet = null;
198
-      }
199
-
200
-      this._group = group;
201
-
202
-      if (group) {
203
-        group = (0, _group2.default)(group);
204
-        this._filterSet = getFilterSet(group);
205
-        this._filterVar = (0, _group2.default)(group).var("filter");
206
-        var sub = this._filterVar.on("change", function (e) {
207
-          _this._eventRelay.trigger("change", e, _this);
208
-        });
209
-        this._varOnChangeSub = sub;
210
-      }
211
-    }
212
-
213
-    /**
214
-     * Combine the given `extraInfo` (if any) with the handle's default
215
-     * `_extraInfo` (if any).
216
-     * @private
217
-     */
218
-
219
-  }, {
220
-    key: "_mergeExtraInfo",
221
-    value: function _mergeExtraInfo(extraInfo) {
222
-      return util.extend({}, this._extraInfo ? this._extraInfo : null, extraInfo ? extraInfo : null);
223
-    }
224
-
225
-    /**
226
-     * Close the handle. This clears this handle's contribution to the filter set,
227
-     * and unsubscribes all event listeners.
228
-     */
229
-
230
-  }, {
231
-    key: "close",
232
-    value: function close() {
233
-      this._emitter.removeAllListeners();
234
-      this.clear();
235
-      this.setGroup(null);
236
-    }
237
-
238
-    /**
239
-     * Clear this handle's contribution to the filter set.
240
-     *
241
-     * @param {Object} [extraInfo] - Extra properties to be included on the event
242
-     *   object that's passed to listeners (in addition to any options that were
243
-     *   passed into the `FilterHandle` constructor).
244
-     */
245
-
246
-  }, {
247
-    key: "clear",
248
-    value: function clear(extraInfo) {
249
-      if (!this._filterSet) return;
250
-      this._filterSet.clear(this._id);
251
-      this._onChange(extraInfo);
252
-    }
253
-
254
-    /**
255
-     * Set this handle's contribution to the filter set. This array should consist
256
-     * of the keys of the rows that _should_ be displayed; any keys that are not
257
-     * present in the array will be considered _filtered out_. Note that multiple
258
-     * `FilterHandle` instances in the group may each contribute an array of keys,
259
-     * and only those keys that appear in _all_ of the arrays make it through the
260
-     * filter.
261
-     *
262
-     * @param {string[]} keys - Empty array, or array of keys. To clear the
263
-     *   filter, don't pass an empty array; instead, use the
264
-     *   {@link FilterHandle#clear} method.
265
-     * @param {Object} [extraInfo] - Extra properties to be included on the event
266
-     *   object that's passed to listeners (in addition to any options that were
267
-     *   passed into the `FilterHandle` constructor).
268
-     */
269
-
270
-  }, {
271
-    key: "set",
272
-    value: function set(keys, extraInfo) {
273
-      if (!this._filterSet) return;
274
-      this._filterSet.update(this._id, keys);
275
-      this._onChange(extraInfo);
276
-    }
277
-
278
-    /**
279
-     * @return {string[]|null} - Either: 1) an array of keys that made it through
280
-     *   all of the `FilterHandle` instances, or, 2) `null`, which means no filter
281
-     *   is being applied (all data should be displayed).
282
-     */
283
-
284
-  }, {
285
-    key: "on",
286
-
287
-
288
-    /**
289
-     * Subscribe to events on this `FilterHandle`.
290
-     *
291
-     * @param {string} eventType - Indicates the type of events to listen to.
292
-     *   Currently, only `"change"` is supported.
293
-     * @param {FilterHandle~listener} listener - The callback function that
294
-     *   will be invoked when the event occurs.
295
-     * @return {string} - A token to pass to {@link FilterHandle#off} to cancel
296
-     *   this subscription.
297
-     */
298
-    value: function on(eventType, listener) {
299
-      return this._emitter.on(eventType, listener);
300
-    }
301
-
302
-    /**
303
-     * Cancel event subscriptions created by {@link FilterHandle#on}.
304
-     *
305
-     * @param {string} eventType - The type of event to unsubscribe.
306
-     * @param {string|FilterHandle~listener} listener - Either the callback
307
-     *   function previously passed into {@link FilterHandle#on}, or the
308
-     *   string that was returned from {@link FilterHandle#on}.
309
-     */
310
-
311
-  }, {
312
-    key: "off",
313
-    value: function off(eventType, listener) {
314
-      return this._emitter.off(eventType, listener);
315
-    }
316
-  }, {
317
-    key: "_onChange",
318
-    value: function _onChange(extraInfo) {
319
-      if (!this._filterSet) return;
320
-      this._filterVar.set(this._filterSet.value, this._mergeExtraInfo(extraInfo));
321
-    }
322
-
323
-    /**
324
-     * @callback FilterHandle~listener
325
-     * @param {Object} event - An object containing details of the event. For
326
-     *   `"change"` events, this includes the properties `value` (the new
327
-     *   value of the filter set, or `null` if no filter set is active),
328
-     *   `oldValue` (the previous value of the filter set), and `sender` (the
329
-     *   `FilterHandle` instance that made the change).
330
-     */
331
-
332
-    /**
333
-     * @event FilterHandle#change
334
-     * @type {object}
335
-     * @property {object} value - The new value of the filter set, or `null`
336
-     *   if no filter set is active.
337
-     * @property {object} oldValue - The previous value of the filter set.
338
-     * @property {FilterHandle} sender - The `FilterHandle` instance that
339
-     *   changed the value.
340
-     */
341
-
342
-  }, {
343
-    key: "filteredKeys",
344
-    get: function get() {
345
-      return this._filterSet ? this._filterSet.value : null;
346
-    }
347
-  }]);
348
-
349
-  return FilterHandle;
350
-}();
351
-
352
-},{"./events":1,"./filterset":3,"./group":4,"./util":11}],3:[function(require,module,exports){
353
-"use strict";
354
-
355
-Object.defineProperty(exports, "__esModule", {
356
-  value: true
357
-});
358
-
359
-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; }; }();
360
-
361
-var _util = require("./util");
362
-
363
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
364
-
365
-function naturalComparator(a, b) {
366
-  if (a === b) {
367
-    return 0;
368
-  } else if (a < b) {
369
-    return -1;
370
-  } else if (a > b) {
371
-    return 1;
372
-  }
373
-}
374
-
375
-/**
376
- * @private
377
- */
378
-
379
-var FilterSet = function () {
380
-  function FilterSet() {
381
-    _classCallCheck(this, FilterSet);
382
-
383
-    this.reset();
384
-  }
385
-
386
-  _createClass(FilterSet, [{
387
-    key: "reset",
388
-    value: function reset() {
389
-      // Key: handle ID, Value: array of selected keys, or null
390
-      this._handles = {};
391
-      // Key: key string, Value: count of handles that include it
392
-      this._keys = {};
393
-      this._value = null;
394
-      this._activeHandles = 0;
395
-    }
396
-  }, {
397
-    key: "update",
398
-    value: function update(handleId, keys) {
399
-      if (keys !== null) {
400
-        keys = keys.slice(0); // clone before sorting
401
-        keys.sort(naturalComparator);
402
-      }
403
-
404
-      var _diffSortedLists = (0, _util.diffSortedLists)(this._handles[handleId], keys),
405
-          added = _diffSortedLists.added,
406
-          removed = _diffSortedLists.removed;
407
-
408
-      this._handles[handleId] = keys;
409
-
410
-      for (var i = 0; i < added.length; i++) {
411
-        this._keys[added[i]] = (this._keys[added[i]] || 0) + 1;
412
-      }
413
-      for (var _i = 0; _i < removed.length; _i++) {
414
-        this._keys[removed[_i]]--;
415
-      }
416
-
417
-      this._updateValue(keys);
418
-    }
419
-
420
-    /**
421
-     * @param {string[]} keys Sorted array of strings that indicate
422
-     * a superset of possible keys.
423
-     * @private
424
-     */
425
-
426
-  }, {
427
-    key: "_updateValue",
428
-    value: function _updateValue() {
429
-      var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._allKeys;
430
-
431
-      var handleCount = Object.keys(this._handles).length;
432
-      if (handleCount === 0) {
433
-        this._value = null;
434
-      } else {
435
-        this._value = [];
436
-        for (var i = 0; i < keys.length; i++) {
437
-          var count = this._keys[keys[i]];
438
-          if (count === handleCount) {
439
-            this._value.push(keys[i]);
440
-          }
441
-        }
442
-      }
443
-    }
444
-  }, {
445
-    key: "clear",
446
-    value: function clear(handleId) {
447
-      if (typeof this._handles[handleId] === "undefined") {
448
-        return;
449
-      }
450
-
451
-      var keys = this._handles[handleId];
452
-      if (!keys) {
453
-        keys = [];
454
-      }
455
-
456
-      for (var i = 0; i < keys.length; i++) {
457
-        this._keys[keys[i]]--;
458
-      }
459
-      delete this._handles[handleId];
460
-
461
-      this._updateValue();
462
-    }
463
-  }, {
464
-    key: "value",
465
-    get: function get() {
466
-      return this._value;
467
-    }
468
-  }, {
469
-    key: "_allKeys",
470
-    get: function get() {
471
-      var allKeys = Object.keys(this._keys);
472
-      allKeys.sort(naturalComparator);
473
-      return allKeys;
474
-    }
475
-  }]);
476
-
477
-  return FilterSet;
478
-}();
479
-
480
-exports.default = FilterSet;
481
-
482
-},{"./util":11}],4:[function(require,module,exports){
483
-(function (global){
484
-"use strict";
485
-
486
-Object.defineProperty(exports, "__esModule", {
487
-  value: true
488
-});
489
-
490
-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; }; }();
491
-
492
-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; };
493
-
494
-exports.default = group;
495
-
496
-var _var2 = require("./var");
497
-
498
-var _var3 = _interopRequireDefault(_var2);
499
-
500
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
501
-
502
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
503
-
504
-// Use a global so that multiple copies of crosstalk.js can be loaded and still
505
-// have groups behave as singletons across all copies.
506
-global.__crosstalk_groups = global.__crosstalk_groups || {};
507
-var groups = global.__crosstalk_groups;
508
-
509
-function group(groupName) {
510
-  if (groupName && typeof groupName === "string") {
511
-    if (!groups.hasOwnProperty(groupName)) {
512
-      groups[groupName] = new Group(groupName);
513
-    }
514
-    return groups[groupName];
515
-  } else if ((typeof groupName === "undefined" ? "undefined" : _typeof(groupName)) === "object" && groupName._vars && groupName.var) {
516
-    // Appears to already be a group object
517
-    return groupName;
518
-  } else if (Array.isArray(groupName) && groupName.length == 1 && typeof groupName[0] === "string") {
519
-    return group(groupName[0]);
520
-  } else {
521
-    throw new Error("Invalid groupName argument");
522
-  }
523
-}
524
-
525
-var Group = function () {
526
-  function Group(name) {
527
-    _classCallCheck(this, Group);
528
-
529
-    this.name = name;
530
-    this._vars = {};
531
-  }
532
-
533
-  _createClass(Group, [{
534
-    key: "var",
535
-    value: function _var(name) {
536
-      if (!name || typeof name !== "string") {
537
-        throw new Error("Invalid var name");
538
-      }
539
-
540
-      if (!this._vars.hasOwnProperty(name)) this._vars[name] = new _var3.default(this, name);
541
-      return this._vars[name];
542
-    }
543
-  }, {
544
-    key: "has",
545
-    value: function has(name) {
546
-      if (!name || typeof name !== "string") {
547
-        throw new Error("Invalid var name");
548
-      }
549
-
550
-      return this._vars.hasOwnProperty(name);
551
-    }
552
-  }]);
553
-
554
-  return Group;
555
-}();
556
-
557
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
558
-
559
-},{"./var":12}],5:[function(require,module,exports){
560
-(function (global){
561
-"use strict";
562
-
563
-Object.defineProperty(exports, "__esModule", {
564
-  value: true
565
-});
566
-
567
-var _group = require("./group");
568
-
569
-var _group2 = _interopRequireDefault(_group);
570
-
571
-var _selection = require("./selection");
572
-
573
-var _filter = require("./filter");
574
-
575
-require("./input");
576
-
577
-require("./input_selectize");
578
-
579
-require("./input_checkboxgroup");
580
-
581
-require("./input_slider");
582
-
583
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
584
-
585
-var defaultGroup = (0, _group2.default)("default");
586
-
587
-function var_(name) {
588
-  return defaultGroup.var(name);
589
-}
590
-
591
-function has(name) {
592
-  return defaultGroup.has(name);
593
-}
594
-
595
-if (global.Shiny) {
596
-  global.Shiny.addCustomMessageHandler("update-client-value", function (message) {
597
-    if (typeof message.group === "string") {
598
-      (0, _group2.default)(message.group).var(message.name).set(message.value);
599
-    } else {
600
-      var_(message.name).set(message.value);
601
-    }
602
-  });
603
-}
604
-
605
-var crosstalk = {
606
-  group: _group2.default,
607
-  var: var_,
608
-  has: has,
609
-  SelectionHandle: _selection.SelectionHandle,
610
-  FilterHandle: _filter.FilterHandle
611
-};
612
-
613
-/**
614
- * @namespace crosstalk
615
- */
616
-exports.default = crosstalk;
617
-
618
-global.crosstalk = crosstalk;
619
-
620
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
621
-
622
-},{"./filter":2,"./group":4,"./input":6,"./input_checkboxgroup":7,"./input_selectize":8,"./input_slider":9,"./selection":10}],6:[function(require,module,exports){
623
-(function (global){
624
-"use strict";
625
-
626
-Object.defineProperty(exports, "__esModule", {
627
-  value: true
628
-});
629
-exports.register = register;
630
-var $ = global.jQuery;
631
-
632
-var bindings = {};
633
-
634
-function register(reg) {
635
-  bindings[reg.className] = reg;
636
-  if (global.document && global.document.readyState !== "complete") {
637
-    $(function () {
638
-      bind();
639
-    });
640
-  } else if (global.document) {
641
-    setTimeout(bind, 100);
642
-  }
643
-}
644
-
645
-function bind() {
646
-  Object.keys(bindings).forEach(function (className) {
647
-    var binding = bindings[className];
648
-    $("." + binding.className).not(".crosstalk-input-bound").each(function (i, el) {
649
-      bindInstance(binding, el);
650
-    });
651
-  });
652
-}
653
-
654
-// Escape jQuery identifier
655
-function $escape(val) {
656
-  return val.replace(/([!"#$%&'()*+,.\/:;<=>?@\[\\\]^`{|}~])/g, "\\$1");
657
-}
658
-
659
-function bindEl(el) {
660
-  var $el = $(el);
661
-  Object.keys(bindings).forEach(function (className) {
662
-    if ($el.hasClass(className) && !$el.hasClass("crosstalk-input-bound")) {
663
-      var binding = bindings[className];
664
-      bindInstance(binding, el);
665
-    }
666
-  });
667
-}
668
-
669
-function bindInstance(binding, el) {
670
-  var jsonEl = $(el).find("script[type='application/json'][data-for='" + $escape(el.id) + "']");
671
-  var data = JSON.parse(jsonEl[0].innerText);
672
-
673
-  var instance = binding.factory(el, data);
674
-  $(el).data("crosstalk-instance", instance);
675
-  $(el).addClass("crosstalk-input-bound");
676
-}
677
-
678
-if (global.Shiny) {
679
-  (function () {
680
-    var inputBinding = new global.Shiny.InputBinding();
681
-    var $ = global.jQuery;
682
-    $.extend(inputBinding, {
683
-      find: function find(scope) {
684
-        return $(scope).find(".crosstalk-input");
685
-      },
686
-      initialize: function initialize(el) {
687
-        if (!$(el).hasClass("crosstalk-input-bound")) {
688
-          bindEl(el);
689
-        }
690
-      },
691
-      getId: function getId(el) {
692
-        return el.id;
693
-      },
694
-      getValue: function getValue(el) {},
695
-      setValue: function setValue(el, value) {},
696
-      receiveMessage: function receiveMessage(el, data) {},
697
-      subscribe: function subscribe(el, callback) {
698
-        $(el).data("crosstalk-instance").resume();
699
-      },
700
-      unsubscribe: function unsubscribe(el) {
701
-        $(el).data("crosstalk-instance").suspend();
702
-      }
703
-    });
704
-    global.Shiny.inputBindings.register(inputBinding, "crosstalk.inputBinding");
705
-  })();
706
-}
707
-
708
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
709
-
710
-},{}],7:[function(require,module,exports){
711
-(function (global){
712
-"use strict";
713
-
714
-var _input = require("./input");
715
-
716
-var input = _interopRequireWildcard(_input);
717
-
718
-var _filter = require("./filter");
719
-
720
-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; } }
721
-
722
-var $ = global.jQuery;
723
-
724
-input.register({
725
-  className: "crosstalk-input-checkboxgroup",
726
-
727
-  factory: function factory(el, data) {
728
-    /*
729
-     * map: {"groupA": ["keyA", "keyB", ...], ...}
730
-     * group: "ct-groupname"
731
-     */
732
-    var ctHandle = new _filter.FilterHandle(data.group);
733
-
734
-    var lastKnownKeys = void 0;
735
-    var $el = $(el);
736
-    $el.on("change", "input[type='checkbox']", function () {
737
-      var checked = $el.find("input[type='checkbox']:checked");
738
-      if (checked.length === 0) {
739
-        lastKnownKeys = null;
740
-        ctHandle.clear();
741
-      } else {
742
-        (function () {
743
-          var keys = {};
744
-          checked.each(function () {
745
-            data.map[this.value].forEach(function (key) {
746
-              keys[key] = true;
747
-            });
748
-          });
749
-          var keyArray = Object.keys(keys);
750
-          keyArray.sort();
751
-          lastKnownKeys = keyArray;
752
-          ctHandle.set(keyArray);
753
-        })();
754
-      }
755
-    });
756
-
757
-    return {
758
-      suspend: function suspend() {
759
-        ctHandle.clear();
760
-      },
761
-      resume: function resume() {
762
-        if (lastKnownKeys) ctHandle.set(lastKnownKeys);
763
-      }
764
-    };
765
-  }
766
-});
767
-
768
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
769
-
770
-},{"./filter":2,"./input":6}],8:[function(require,module,exports){
771
-(function (global){
772
-"use strict";
773
-
774
-var _input = require("./input");
775
-
776
-var input = _interopRequireWildcard(_input);
777
-
778
-var _util = require("./util");
779
-
780
-var util = _interopRequireWildcard(_util);
781
-
782
-var _filter = require("./filter");
783
-
784
-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; } }
785
-
786
-var $ = global.jQuery;
787
-
788
-input.register({
789
-  className: "crosstalk-input-select",
790
-
791
-  factory: function factory(el, data) {
792
-    /*
793
-     * items: {value: [...], label: [...]}
794
-     * map: {"groupA": ["keyA", "keyB", ...], ...}
795
-     * group: "ct-groupname"
796
-     */
797
-
798
-    var first = [{ value: "", label: "(All)" }];
799
-    var items = util.dataframeToD3(data.items);
800
-    var opts = {
801
-      options: first.concat(items),
802
-      valueField: "value",
803
-      labelField: "label",
804
-      searchField: "label"
805
-    };
806
-
807
-    var select = $(el).find("select")[0];
808
-
809
-    var selectize = $(select).selectize(opts)[0].selectize;
810
-
811
-    var ctHandle = new _filter.FilterHandle(data.group);
812
-
813
-    var lastKnownKeys = void 0;
814
-    selectize.on("change", function () {
815
-      if (selectize.items.length === 0) {
816
-        lastKnownKeys = null;
817
-        ctHandle.clear();
818
-      } else {
819
-        (function () {
820
-          var keys = {};
821
-          selectize.items.forEach(function (group) {
822
-            data.map[group].forEach(function (key) {
823
-              keys[key] = true;
824
-            });
825
-          });
826
-          var keyArray = Object.keys(keys);
827
-          keyArray.sort();
828
-          lastKnownKeys = keyArray;
829
-          ctHandle.set(keyArray);
830
-        })();
831
-      }
832
-    });
833
-
834
-    return {
835
-      suspend: function suspend() {
836
-        ctHandle.clear();
837
-      },
838
-      resume: function resume() {
839
-        if (lastKnownKeys) ctHandle.set(lastKnownKeys);
840
-      }
841
-    };
842
-  }
843
-});
844
-
845
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
846
-
847
-},{"./filter":2,"./input":6,"./util":11}],9:[function(require,module,exports){
848
-(function (global){
849
-"use strict";
850
-
851
-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"); } }; }();
852
-
853
-var _input = require("./input");
854
-
855
-var input = _interopRequireWildcard(_input);
856
-
857
-var _filter = require("./filter");
858
-
859
-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; } }
860
-
861
-var $ = global.jQuery;
862
-var strftime = global.strftime;
863
-
864
-input.register({
865
-  className: "crosstalk-input-slider",
866
-
867
-  factory: function factory(el, data) {
868
-    /*
869
-     * map: {"groupA": ["keyA", "keyB", ...], ...}
870
-     * group: "ct-groupname"
871
-     */
872
-    var ctHandle = new _filter.FilterHandle(data.group);
873
-
874
-    var opts = {};
875
-    var $el = $(el).find("input");
876
-    var dataType = $el.data("data-type");
877
-    var timeFormat = $el.data("time-format");
878
-    var timeFormatter = void 0;
879
-
880
-    // Set up formatting functions
881
-    if (dataType === "date") {
882
-      timeFormatter = strftime.utc();
883
-      opts.prettify = function (num) {
884
-        return timeFormatter(timeFormat, new Date(num));
885
-      };
886
-    } else if (dataType === "datetime") {
887
-      var timezone = $el.data("timezone");
888
-      if (timezone) timeFormatter = strftime.timezone(timezone);else timeFormatter = strftime;
889
-
890
-      opts.prettify = function (num) {
891
-        return timeFormatter(timeFormat, new Date(num));
892
-      };
893
-    }
894
-
895
-    $el.ionRangeSlider(opts);
896
-
897
-    function getValue() {
898
-      var result = $el.data("ionRangeSlider").result;
899
-
900
-      // Function for converting numeric value from slider to appropriate type.
901
-      var convert = void 0;
902
-      var dataType = $el.data("data-type");
903
-      if (dataType === "date") {
904
-        convert = function convert(val) {
905
-          return formatDateUTC(new Date(+val));
906
-        };
907
-      } else if (dataType === "datetime") {
908
-        convert = function convert(val) {
909
-          // Convert ms to s
910
-          return +val / 1000;
911
-        };
912
-      } else {
913
-        convert = function convert(val) {
914
-          return +val;
915
-        };
916
-      }
917
-
918
-      if ($el.data("ionRangeSlider").options.type === "double") {
919
-        return [convert(result.from), convert(result.to)];
920
-      } else {
921
-        return convert(result.from);
922
-      }
923
-    }
924
-
925
-    var lastKnownKeys = null;
926
-
927
-    $el.on("change.crosstalkSliderInput", function (event) {
928
-      if (!$el.data("updating") && !$el.data("animating")) {
929
-        var _getValue = getValue(),
930
-            _getValue2 = _slicedToArray(_getValue, 2),
931
-            from = _getValue2[0],
932
-            to = _getValue2[1];
933
-
934
-        var keys = [];
935
-        for (var i = 0; i < data.values.length; i++) {
936
-          var val = data.values[i];
937
-          if (val >= from && val <= to) {
938
-            keys.push(data.keys[i]);
939
-          }
940
-        }
941
-        keys.sort();
942
-        ctHandle.set(keys);
943
-        lastKnownKeys = keys;
944
-      }
945
-    });
946
-
947
-    // let $el = $(el);
948
-    // $el.on("change", "input[type="checkbox"]", function() {
949
-    //   let checked = $el.find("input[type="checkbox"]:checked");
950
-    //   if (checked.length === 0) {
951
-    //     ctHandle.clear();
952
-    //   } else {
953
-    //     let keys = {};
954
-    //     checked.each(function() {
955
-    //       data.map[this.value].forEach(function(key) {
956
-    //         keys[key] = true;
957
-    //       });
958
-    //     });
959
-    //     let keyArray = Object.keys(keys);
960
-    //     keyArray.sort();
961
-    //     ctHandle.set(keyArray);
962
-    //   }
963
-    // });
964
-
965
-    return {
966
-      suspend: function suspend() {
967
-        ctHandle.clear();
968
-      },
969
-      resume: function resume() {
970
-        if (lastKnownKeys) ctHandle.set(lastKnownKeys);
971
-      }
972
-    };
973
-  }
974
-});
975
-
976
-// Convert a number to a string with leading zeros
977
-function padZeros(n, digits) {
978
-  var str = n.toString();
979
-  while (str.length < digits) {
980
-    str = "0" + str;
981
-  }return str;
982
-}
983
-
984
-// Given a Date object, return a string in yyyy-mm-dd format, using the
985
-// UTC date. This may be a day off from the date in the local time zone.
986
-function formatDateUTC(date) {
987
-  if (date instanceof Date) {
988
-    return date.getUTCFullYear() + "-" + padZeros(date.getUTCMonth() + 1, 2) + "-" + padZeros(date.getUTCDate(), 2);
989
-  } else {
990
-    return null;
991
-  }
992
-}
993
-
994
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
995
-
996
-},{"./filter":2,"./input":6}],10:[function(require,module,exports){
997
-"use strict";
998
-
999
-Object.defineProperty(exports, "__esModule", {
1000
-  value: true
1001