... | ... |
@@ -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 |
-[](http://dx.doi.org/10.1111/2041-210X.12628) [](https://www.altmetric.com/details/10533079) |
|
30 |
+[](http://dx.doi.org/10.1111/2041-210X.12628) [](https://www.altmetric.com/details/10533079) [](https://scholar.google.com.hk/scholar?oi=bibs&hl=en&cites=7268358477862164627) |
|
31 | 31 |
|
32 | 32 |
------------------------------------------------------------------------ |
33 | 33 |
|
34 | 34 |
### Citation |
35 | 35 |
|
36 |
-[](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 |
[](https://bioconductor.org/packages/stats/bioc/ggtree) [](https://bioconductor.org/packages/stats/bioc/ggtree) [](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,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 |
... | ... |
@@ -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'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 |
|
... | ... |
@@ -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("ggtree")</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("ggtree")</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'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 |
- } |
|