From ff02d8dde52df5700686f7d05aecaa40995963cf Mon Sep 17 00:00:00 2001 From: exposed Date: Fri, 19 Jan 2024 18:17:22 -0500 Subject: [PATCH] docs --- .idea/modules.xml | 8 - .idea/wglog.iml | 9 - README.md | 27 +- async.go | 12 +- async_test.go | 57 +- docs.go | 8 + docs/404.html | 70 ++ docs/index.html | 11 + docs/lib/godoc/analysis/call-eg.png | Bin 0 -> 11383 bytes docs/lib/godoc/analysis/call3.png | Bin 0 -> 16960 bytes docs/lib/godoc/analysis/callers1.png | Bin 0 -> 13068 bytes docs/lib/godoc/analysis/callers2.png | Bin 0 -> 20822 bytes docs/lib/godoc/analysis/chan1.png | Bin 0 -> 44287 bytes docs/lib/godoc/analysis/chan2a.png | Bin 0 -> 19600 bytes docs/lib/godoc/analysis/chan2b.png | Bin 0 -> 18204 bytes docs/lib/godoc/analysis/error1.png | Bin 0 -> 13633 bytes docs/lib/godoc/analysis/help.html | 254 +++++ docs/lib/godoc/analysis/ident-def.png | Bin 0 -> 13141 bytes docs/lib/godoc/analysis/ident-field.png | Bin 0 -> 12131 bytes docs/lib/godoc/analysis/ident-func.png | Bin 0 -> 12554 bytes docs/lib/godoc/analysis/ipcg-func.png | Bin 0 -> 10919 bytes docs/lib/godoc/analysis/ipcg-pkg.png | Bin 0 -> 21092 bytes docs/lib/godoc/analysis/typeinfo-pkg.png | Bin 0 -> 30004 bytes docs/lib/godoc/analysis/typeinfo-src.png | Bin 0 -> 16891 bytes docs/lib/godoc/callgraph.html | 15 + docs/lib/godoc/dirlist.html | 31 + docs/lib/godoc/error.html | 9 + docs/lib/godoc/example.html | 28 + docs/lib/godoc/favicon.ico | Bin 0 -> 5686 bytes docs/lib/godoc/godoc.html | 108 +++ docs/lib/godoc/godocs.js | 688 ++++++++++++++ docs/lib/godoc/gopher/pkg.png | Bin 0 -> 5409 bytes docs/lib/godoc/images/minus.gif | Bin 0 -> 58 bytes docs/lib/godoc/images/plus.gif | Bin 0 -> 61 bytes docs/lib/godoc/images/treeview-black-line.gif | Bin 0 -> 1010 bytes docs/lib/godoc/images/treeview-black.gif | Bin 0 -> 381 bytes .../godoc/images/treeview-default-line.gif | Bin 0 -> 848 bytes docs/lib/godoc/images/treeview-default.gif | Bin 0 -> 387 bytes docs/lib/godoc/images/treeview-gray-line.gif | Bin 0 -> 1010 bytes docs/lib/godoc/images/treeview-gray.gif | Bin 0 -> 394 bytes docs/lib/godoc/implements.html | 9 + docs/lib/godoc/jquery.js | 2 + docs/lib/godoc/jquery.treeview.css | 76 ++ docs/lib/godoc/jquery.treeview.edit.js | 39 + docs/lib/godoc/jquery.treeview.js | 250 +++++ docs/lib/godoc/methodset.html | 9 + docs/lib/godoc/package.html | 292 ++++++ docs/lib/godoc/packageroot.html | 150 +++ docs/lib/godoc/play.js | 114 +++ docs/lib/godoc/playground.js | 593 ++++++++++++ docs/lib/godoc/search.html | 66 ++ docs/lib/godoc/searchcode.html | 64 ++ docs/lib/godoc/searchdoc.html | 24 + docs/lib/godoc/searchtxt.html | 42 + docs/lib/godoc/style.css | 897 ++++++++++++++++++ docs/pkg/github.com/index.html | 121 +++ docs/pkg/github.com/point-c/index.html | 110 +++ docs/pkg/github.com/point-c/wglog/index.html | 333 +++++++ docs/pkg/index.html | 161 ++++ go.mod | 22 +- go.sum | 94 +- multi.go | 31 +- multi_test.go | 7 +- noop.go | 2 +- slog.go | 13 +- slog_test.go | 8 +- 66 files changed, 4783 insertions(+), 81 deletions(-) delete mode 100644 .idea/modules.xml delete mode 100644 .idea/wglog.iml create mode 100644 docs.go create mode 100644 docs/404.html create mode 100644 docs/index.html create mode 100644 docs/lib/godoc/analysis/call-eg.png create mode 100644 docs/lib/godoc/analysis/call3.png create mode 100644 docs/lib/godoc/analysis/callers1.png create mode 100644 docs/lib/godoc/analysis/callers2.png create mode 100644 docs/lib/godoc/analysis/chan1.png create mode 100644 docs/lib/godoc/analysis/chan2a.png create mode 100644 docs/lib/godoc/analysis/chan2b.png create mode 100644 docs/lib/godoc/analysis/error1.png create mode 100644 docs/lib/godoc/analysis/help.html create mode 100644 docs/lib/godoc/analysis/ident-def.png create mode 100644 docs/lib/godoc/analysis/ident-field.png create mode 100644 docs/lib/godoc/analysis/ident-func.png create mode 100644 docs/lib/godoc/analysis/ipcg-func.png create mode 100644 docs/lib/godoc/analysis/ipcg-pkg.png create mode 100644 docs/lib/godoc/analysis/typeinfo-pkg.png create mode 100644 docs/lib/godoc/analysis/typeinfo-src.png create mode 100644 docs/lib/godoc/callgraph.html create mode 100644 docs/lib/godoc/dirlist.html create mode 100644 docs/lib/godoc/error.html create mode 100644 docs/lib/godoc/example.html create mode 100644 docs/lib/godoc/favicon.ico create mode 100644 docs/lib/godoc/godoc.html create mode 100644 docs/lib/godoc/godocs.js create mode 100644 docs/lib/godoc/gopher/pkg.png create mode 100644 docs/lib/godoc/images/minus.gif create mode 100644 docs/lib/godoc/images/plus.gif create mode 100644 docs/lib/godoc/images/treeview-black-line.gif create mode 100644 docs/lib/godoc/images/treeview-black.gif create mode 100644 docs/lib/godoc/images/treeview-default-line.gif create mode 100644 docs/lib/godoc/images/treeview-default.gif create mode 100644 docs/lib/godoc/images/treeview-gray-line.gif create mode 100644 docs/lib/godoc/images/treeview-gray.gif create mode 100644 docs/lib/godoc/implements.html create mode 100644 docs/lib/godoc/jquery.js create mode 100644 docs/lib/godoc/jquery.treeview.css create mode 100644 docs/lib/godoc/jquery.treeview.edit.js create mode 100644 docs/lib/godoc/jquery.treeview.js create mode 100644 docs/lib/godoc/methodset.html create mode 100644 docs/lib/godoc/package.html create mode 100644 docs/lib/godoc/packageroot.html create mode 100644 docs/lib/godoc/play.js create mode 100644 docs/lib/godoc/playground.js create mode 100644 docs/lib/godoc/search.html create mode 100644 docs/lib/godoc/searchcode.html create mode 100644 docs/lib/godoc/searchdoc.html create mode 100644 docs/lib/godoc/searchtxt.html create mode 100644 docs/lib/godoc/style.css create mode 100644 docs/pkg/github.com/index.html create mode 100644 docs/pkg/github.com/point-c/index.html create mode 100644 docs/pkg/github.com/point-c/wglog/index.html create mode 100644 docs/pkg/index.html diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 8e9df54..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/wglog.iml b/.idea/wglog.iml deleted file mode 100644 index 5e764c4..0000000 --- a/.idea/wglog.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/README.md b/README.md index a9421da..eb30b71 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,15 @@ # wglog -[![Go Reference](https://pkg.go.dev/badge/github.com/point-c/wglog@v0.0.2.svg)](https://godocs.io/github.com/point-c/wglog@v0.0.3) This is a set of extensions for `Wireguard-go`'s logger. +## Installation + +To use wglog in your Go project, install it using `go get`: + +```bash +go get github.com/point-c/wglog +``` + ## Loggers - `noop`: Non-nil logger that does nothing. @@ -13,4 +20,20 @@ This is a set of extensions for `Wireguard-go`'s logger. - `Errorf` - `slog.LevelError` - `multi`: Emits log messages on multiple loggers. -- `async`: Runs the logger funcs in a goroutine. \ No newline at end of file +- `async`: Runs the logger funcs in a goroutine. + +## Testing + +The package includes tests that demonstrate its functionality. Use Go's testing tools to run the tests: + +```bash +go test +``` + +## Godocs + +To regenerate godocs: + +```bash +go generate -tags docs ./... +``` diff --git a/async.go b/async.go index 81c75cd..bc586e2 100644 --- a/async.go +++ b/async.go @@ -3,9 +3,17 @@ package wglog import "golang.zx2c4.com/wireguard/device" // Async will call the underlying logger methods in a goroutine. +// If a field in logger is nil, it will not spawn a goroutine. func Async(logger *device.Logger) *device.Logger { return &device.Logger{ - Verbosef: func(format string, args ...any) { go logger.Verbosef(format, args...) }, - Errorf: func(format string, args ...any) { go logger.Errorf(format, args...) }, + Verbosef: async(logger.Verbosef), + Errorf: async(logger.Errorf), } } + +func async(fn FmtFn) (r func(string, ...any)) { + if fn == nil { + return noopFn + } + return func(s string, a ...any) { go fn(s, a...) } +} diff --git a/async_test.go b/async_test.go index 6d5696d..546338f 100644 --- a/async_test.go +++ b/async_test.go @@ -9,28 +9,39 @@ import ( ) func TestAsync(t *testing.T) { - var v, va, e, ea bool - var wg sync.WaitGroup - wg.Add(2) - l := Async(&device.Logger{ - Verbosef: func(string, ...any) { - t.Helper() - defer wg.Done() - v = true - va = runtime.Callers(3, make([]uintptr, 1)) == 0 - }, - Errorf: func(string, ...any) { - t.Helper() - defer wg.Done() - e = true - ea = runtime.Callers(3, make([]uintptr, 1)) == 0 - }, + t.Run("normal", func(t *testing.T) { + var v, va, e, ea bool + var w sync.WaitGroup + w.Add(2) + l := Async(&device.Logger{ + Verbosef: func(string, ...any) { + defer w.Done() + v = true + // Check if func was called with `go` + // https://stackoverflow.com/a/56702614 + va = runtime.Callers(3, make([]uintptr, 1)) == 0 + }, + Errorf: func(string, ...any) { + defer w.Done() + e = true + // Check if func was called with `go` + // https://stackoverflow.com/a/56702614 + ea = runtime.Callers(3, make([]uintptr, 1)) == 0 + }, + }) + l.Verbosef("") + l.Errorf("") + w.Wait() + require.True(t, v, "failed to call verbose") + require.True(t, va, "failed to call verbose in a goroutine") + require.True(t, e, "failed to call error") + require.True(t, ea, "failed to call error in a goroutine") + }) + t.Run("noop", func(t *testing.T) { + l := Async(new(device.Logger)) + require.NotNil(t, l.Verbosef) + require.NotNil(t, l.Errorf) + l.Verbosef("") + l.Errorf("") }) - l.Verbosef("") - l.Errorf("") - wg.Wait() - require.True(t, v, "failed to call verbose") - require.True(t, va, "failed to call verbose in a goroutine") - require.True(t, e, "failed to call error") - require.True(t, ea, "failed to call error in a goroutine") } diff --git a/docs.go b/docs.go new file mode 100644 index 0000000..e33cc51 --- /dev/null +++ b/docs.go @@ -0,0 +1,8 @@ +//go:build docs + +package wglog + +//go:generate rm -rf docs +//go:generate go run "github.com/johnstarich/go/gopages" -base /$GOPACKAGE -internal -out docs -source-link "https://github.com/point-c/$GOPACKAGE/blob/main/{{.Path}}{{if .Line}}#L{{.Line}}{{end}}" + +import _ "github.com/johnstarich/go/gopages" diff --git a/docs/404.html b/docs/404.html new file mode 100644 index 0000000..b8c0b04 --- /dev/null +++ b/docs/404.html @@ -0,0 +1,70 @@ + + + + + + + + Page not found - GoPages + + + + + + + + + + + + + + + +
+... +
+ +
+ + + +
+
+ + +

+ Page not found + +

+ + + + + + + + + + +

+ +Oops, this page doesn't exist. + +

+

If something should be here, open an issue.

+ + + + +
+
+ + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..ffd1b0a --- /dev/null +++ b/docs/index.html @@ -0,0 +1,11 @@ + + + + + + + Click here to see this module's documentation. + + diff --git a/docs/lib/godoc/analysis/call-eg.png b/docs/lib/godoc/analysis/call-eg.png new file mode 100644 index 0000000000000000000000000000000000000000..c48bf4d92077c7ec3b1d8bad9cbb3517b4f9b5d2 GIT binary patch literal 11383 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 LRk~c##P5FrjrJ^s literal 0 HcmV?d00001 diff --git a/docs/lib/godoc/analysis/call3.png b/docs/lib/godoc/analysis/call3.png new file mode 100644 index 0000000000000000000000000000000000000000..387a38c64fc2c2c3d6943253dc880a3af732bff6 GIT binary patch literal 16960 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 Sbi)4L0+5kV1ec2$`u`6mdZ97^ literal 0 HcmV?d00001 diff --git a/docs/lib/godoc/analysis/callers2.png b/docs/lib/godoc/analysis/callers2.png new file mode 100644 index 0000000000000000000000000000000000000000..59a84edbc993cc241e7e1e717c7218df87e72aa6 GIT binary patch literal 20822 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

C-R1{Rylyo#i)HGCdbmX-3G)(j)3{3RQtV|qi z)U50*$pi$PTpYYy^biU%9$sz%K4t+yeo-NIArYZ$T6$4&k#t4|St&kwDNcYH0ALOP zSO8>Xr2&?30IOH>igK@QfNF{Yh+h$uRFq11_%v07k?j!CzP(e^P(yaW#c=xYMO(5| zOjKJ}iyly@8=`Y?t0z6Gxt*zz0%X<5GDaOeg`L`=1sB0!@Kmz=t11)TW+jWw)byIbM zLxZ|JJoVG{^fHVcBD)hKzM5p1L_~#qM0c5GnSYOs_Kxed%CiC|_Qfa0Ip*8sB)Zub zIQpgZB&8(!r}Y)2c{!K5rlu$VjEPOpO!F=Shhz_CW@q?Sc$Q^DqH=%c(@%_;OftTzWITS_OaIf!NsoO z#lhi$&dH9sv7C{y;okApp|Q1JQ_$ZN1>=*Wzh(yxhKDAm#wVv%2Iq&SW+vBWi$`Wx zhZje8W=m)1XQr3N52q(57dPh@HV>An7MB<1R;SjN7H8HLmsfU|*OunimsfwUEU#~# z{jU4Hv9__bezLx?w!OQxv$?l@0QFin0K8b7lluI&mj9{*39;CdHq942OV-G zA=aEA3tfkXa+n4S0Sn%)A!Z(=KR^!Y0|m_|k)2R+B5gL>4pM;+@}|&43wzu5d#Z&K zHI0i~7u4lj;Hur@!fo&v_w8D9PdghmeA2|)?gVczZ|7y}ZhG@A@9xt{ipPtU1=c6n zLA}Joe<+ip#g39Xfdc^g(Uq7103+Q0uO}Ne{kQDW+y^|x*zS~;u$ED&53o7dlZ!#Z zO-*&Jb(Ki6$-l4DPXx5>SygagT{xK7G3O?W1aXWW2O@Qeap+o}3!9*fs4Q z>ZdJ!Ay+jKDrA5!FH{cLbLFb(0Sq|syka_idAkD}Nnc2-HGb^kA*FbvwGCKBbvq#4 zhBbqj)uBqv<6q=S@7sP79HF_b%*3$5+L@EfK*@dwlx^)heJeFMRh+S(VXgk5NF1NW zli0pKEc(a`CH(A$IRe1AQ6>a2!RYQq4yaKr9D6|8L;>3Zi3l)KQ0X2P5>MEX69UFY znP*HbY;ZM9NBxt+(Gvyyfm4U9BLUU@K*S0FU>Spw77vMCU30qOI~Z%vso|%GPDng# z9wGk}q&F~mc!Zz;K#2bT{nJPms>j$)4glQJQPOF(>bkRgcO7!0pCeWfJMucm2DnFU z4k~l6&Z3PKj$3cytmEQx$Q~jZ7j6I8{Fdx`I=-;ig-`}%`uy?d!EN}*x#B1L6UiuT zI^85sX8I~A25SO8TuBoT*T{#3aMZ`>+zT#>W4|6Bt<4@W>Yiu+W~6@2k7fCxCrAcK zRk^$naLjX?he%Uk+Hp;am5q7HT#)NjvDXhKnk&g# ze3~OaGEXhnnFBJRP0mR~crgrB?DCZ!gkp%Z#`n6Esy$@u6O~7OMq6AP8*KXbuDdo1 zD|)hlrdI{@ibBy!I`NeKz)C}0-Oa&zAcdCT z*aBB&d67k>SL6;sJyRrRunDB+#!AENa8?`4cMcmR!?efpt$&d<7!>B1jHxZLdRsMG z%k3Q>$X?t4TA=wt9muQQsb$&N!rHfiWu}5+SJ-NuRKQSz&31#ubH);KWDHyii?;a_ zah^?s>fbK*wZnqrAX}6#bv`ojo#h$aUK6}7$#vIYuz1My!JE;o4dw;*&t^LM1N{#( z@xnhppqmb>G23CrVwEfCQD123b2%m*$1137yqe=DyuW(Q~|9$Md2UK-p(BCCOO?3vK>GTsoAd z@)~!BFI%7OV8NpFUjYY;KbPm6#2Z3%?)#O`7);p^O zJ`+qMrXTm&P&%8CRdg6(tUOT(d840%MfeyYM6u4Yx)dpOQid&3X$H?PA3#hC?#{8SxZkRB^YViFp#o+4Y_2$x{wpq|oa72qR0?&} z@0#b4c2PG(-fBBJbhAD(H(_Z*@$ET?jy*Gva(jO0L}j+~jN<9upv%~!JB}I*ra!7Y za~q;t8d~K{4qfkJR~%8TU`4KJ4y38rj|&~*JIwsRndrn(##RqD1a6zgdRov`m4U3l zc}vA%5SBpp>KR*vMv)dIoSK;rc;+_t$u?H8=VdhhnUD`$@VQ}NB$o*WOdICKq}Qbr=d26wQmD*DdiOCA;1FZPU>|WERFgjS#_uqrc&l*R39|5pc2aXIj(sE$kybaQ!eY9K6|2?y2_>gg{wS@sQEr{md< z6U%j2?`JvMvU;hL^);B?sd6&&$cPBdBN#kF4Chq5m}cQ7vktB6=d4f%XCa1A-4yCF zGdQGkS^tfEt`sKaI#!$YRM|L3{e1mof#gk*Q+j+s{4ZdYk2no&%3swQ&)-*Z^ zb;z!vq>ViAn-L6Al@Jzh-Qa7eNv8v`+}gha$M~`nMAgm7u-Yn22ut8u9}@y{t>f3Eg~J;oII37f;W=h-;H;tY22 z1nSDnh2I|i&wsf#HauXm;tWQyXHUNLbFUu!*l23z8P`r4@d4^f4bd{m?%JGwK{vOb zyL)cu+Eh5X?-w;_Ft$EUIkc_U9;JQ z@kliY8iM68t2&iqK#h~%^s{86Ogl(o@Xus3((8JD3#Z(z2YmOPSqod9u=p(KUVrPl zo-`vL>9JKR$INdcUNzuo;$N6&3C;2dF#)=rP zg1&KAZlcS?#Z_tlCTUj6_|wh%x$3ZEDnT1)Z0<)_`xCmMNVC#~kdnkjoy-r7B;n9ov|%aWr>>Wj3Pa9rD5$yE(c6 zu{Xs>v$9v4zmTX?MlhRb=ddL~5diqRDAD#3Y28)K82v^1)J@uK|Ez3JENmTz(A%EMx%XYnEIPCJHRPO-A>H ztN@Kb8apF){Jj?yoIP8w0iR0$HnKA>(G~tFo?$9A^g&J|0QeTeA#unAy~9hamP&!e za;Vv$yiIvRIFCINJgHY*cK{>~o~stnI3m37`710Nr#+;3Q8e+vHvl0u0FZz%8w3DR z!u|peTYva9tlt*`=bPdSiA05o!HlU?Jz;N0lk95796RvC(YBB?7V#UgaV?~wHDPKB z*SqEy#%7I9MPD(V9bLDUengW(4^#6zeGOfNJ~=6!R>$YcMP`q;t>yOWF*YXs*_lh# zJ-^twG9u{kC9unvo1QYNt?e%lhDXwK)!3~YnEM714X+2YuHL%xPtHXv(F@p4woJj(3Y^D z-A}?U#j3NHEp$6IZzCHoW1+&kt78+pr(9^O;|-Y2&zG9D=R>DUi}>k+XvV=FLD7jp zUc^7L{*B{eA;8kS0#NaaJHXCs_U6p24{^gtd>&7g+YL|=}Z!sQyXTQDcIkE(4_GG88`?*5J?eq0f_n+hc1{zZg{Ir!dqZuE%8u4;jnm7>5SK7PuMb*h2ugWiq41 zGnk;Lxbk}dgJ*R0OB0e6KX2et{VW>h^}o#oPg|`_H#k{sqzlg`H`l5!d0Mx5tkm}| zTn+J6vx5h_mkl*twugHy58cQ*SK=y2;}%f;ia~agm=lBS8>3#6llriK{Kmk72A z+C;3`^izZi(7U`iPN4F)srWp;j!Z|dnaho{?Rf+Jgo~}McxTy)RAGtMnWeS0&Mdu! zQd{$xyxIJX$$@t@!gE`eM5i{^dkGl?Nv90*GT6vZsBSXid`BvQxe)%RopGP1O;I$T z!#UAEH`V!|FwSz&>~v}Aw3uFI+-$*&{0TXoa>R0g{Hi>nY$&FI(LrOO5nbpF2>6aZ zlFrs}sE7EHKV|(gaP=U>fnQPAYvZx=>E(v32vuN{e4~cUW2}UKVQJu`@&0g)yJ2p@ zw;1y5-CE}t(C)%zAUN~A?uMgfVz$xBSXXz+4qd%kx9MvJDUwTfbKdbUGb)bfJ*h@E z^Hbi-CXm14ZWWK4Q5~Ba6wACR>Z5jzmG>yYQm0QshdsT@AB-P%EXq(G>9_7CNI^`z ztPwhLZ!kSS@6YEm=C`U=)ZLFeA1oCx%C^pO7$S8jBvG!b^{cgMN})8@wrik0mks{1 zJIf6*>-NLCb+_7^L-RV+MSEV$@rmC6l{W=g{y>-zbf!FUp};s^{0ux?gj@9I0j)%@ z$)xy;+h?cJF9u-S=t5lGz)q4e$`wU(?#k>ozepBm&e%`D8MzrWE$t0PY$qRA1VkX0 zT2TC2Mf4@iE0<01`3^Z-7#0-CCEVl(Lr2^*`-zY37_=m^ETpP|1gX$@XW0#YCGjiJ zNmtU77x%{)vm*2^OhFjEg$`&L^Xm+0M|KM%OUeTgs_$5+kQk&^!o#xaVr?laD@zlJ z#?pu=_9CSe($q4rmL^hp)TfH@hJ~j2jW?5yX;3sN@xx<|py2gxPEpXy6YSlWH@)WJ zbJVTMIoT??KVf^d-@C1lcVA@a|2)eU)(P%QE8lpHX$yA3rZ2rNkHbE)8V#F6dpY3v zz;mJ{dt2@v_-nq(M7A6xXs-e%x}>@M@+z**{|QPx&$~O8WtVMVO@NZ7Iqa$;xX>H+ zy7Ozu6#Y#Ab@HtCje7pLE#Wyi=5K)>K49x!B8H~+yDE^sv~w|IXo$Y7!(b4PK~O$u zDmabxoMbk!e`+AXOXVYDpu`VV3NIatt+`$7^BP_XpvPWk@Qbm<-kfM>+{?5ZCfU8f zp=B-o{f6Z%Iculo4qvJds(@07dgR5hY$l)l$(Pz~MB;&H3H}+bg-Cy04el&3g6w?% zh||xVYZIJ#hCV09(I<6Xi*Gg+(@VK7?lDi7+;lhT7E9E$c+GG^SVwJjC^_pfo)vZ1 zQU!hP$gm^3Lz9e7Uhe@BuEE6l0#$kusb|h2FB~EF&kT%(Fns(vptn$7;b3Y|H+cuP z2=LgSo{G0|PBW=U&3F%3K&9e9Qa1KS2PpbBs#RH|IH>pX} z-uA2+FZm2;%GKYo{qpn_zjT+#+yZW=S->kQE+l8zw0>&j6}&g$%SVn{g!-O zmN`(*Nu)F%wEjr>SKz#TnmP0XclxbCflvK9921DY-MyV*0s2Tzj^H1##on3;(72r< z|2y+sJ+h~p4tsozVz+_`NKHH_!qef+2hAPK9I`r^o1by-EeGTL*boXpO1B*LKX8xT z88d0U6OIZV{5d9b$U>zFNqE0**^pb^JP=5w%iGhYQKwq?-i+^K6L6AVaWBBEDU2aR ztgRj?Xtt`0_B!nd9XQ2hj4hYUfdJ>rxI>$a4vX8R0Ih=PXLqmGz2m9K#}o=RwQ8Kt zD{V{MsApN{MNTL5r}1kYXVjN`nFN}E8KaT6KqU_&ne###`)GHbzUG4h0pk4?n`*|& zn;jjxm<|Ik*!!8w$@z16Dk`ctfK=#Cc1yZj&pwjw5EIW|Gq0N@8|*5($>GM?8+uDh zoVK%?WmoaZ@xoE}%^mkZM|MBFM*d{WLZ}h3O=iNEG36?A&2+A7uPVovRZJ?E@t9SY z-Aqi6bXX*Lq>fVb#g&NM@xtK#{+J-maZ%u>!{zg_WHm!VX8QsP6~}02X-Zt@Tyufp zsSY3I^ZiVtP5NesF8wdCN6M!+LpuwrwT<-1p5z5xJR^J+0#V$Z^Te z%rv6Bi9&yZ+sa>~3sR!$O$4*Fmr(CI3iFo-%q!Ozgs&la3(iZJDUtA%U&(_``8|+W}926G@?4Ykg30R4!t zkn-FPE%2-wC_A4PQws+`$A$96@I5-)`oZF$bf!0rD|$XESo)F(?#(c z?P(ZfgOUwW4r)?+Hnk`oWhMMOh6pyMN0+t+f}*a&+9KQy0F|?7Ll;*zMAyLv&VjeX z?PqUat!~`MO3gD4*?eaP;90}cvyKfsFJI!*^G4UKtLYW^_mp(=;~YaGf4hxg-FB*+ z>eYo-7x|sm%DRn9Vs5g1Nx1>Gwe&!k>@|IAKp> z&_>bGX`5ROFBhnJH)Q%P%p8)7K%^=kk95=tqs5Pj+_K@7tDO_2eIB=!5==Eg0JQj+ z?H&F%)OgH>%$m>up;oGIC^;u#r6)q4zS#{I&L>)@G(u|+nSAb-sFwEikd$EB&<(3s z0}%byN$L&4LRK)@bTAo8G7~LlnSvX&OZVS?faNv)NRHS?L;+1&g_?~9*0pXg7X_y4 z;;ad;{^|S278dXUBM zF8DZl1DcbTIjo2i01%!M8D?Q-zjdk&(ur8TT=r|MF*ZPdt)Es1nj3jV0Poj1zv>+M zlKYF44o84fql2m2`{Y^{~J8e0A}- z_C&IJnb5@4`A2d3;PgiSD`Fa0*QD}7JI!3O=dRCFE&tTAPQ^g)^7DF;42a6f*R>& zY;4tY_TplM_=WAVFp$S{V`l_G04uUX*wxdYVd$NKPZk3_%wlT(U4xQ}GA3q=ik##{ z3E}ifOd~Rl*xMuaM|cE0HatbR3ARz$k!c2P+w(}8qUY%nXXm-g9)=*4_Kqp8IoH16&fK4Fv{JiMZfncayHBuom zV&^%8996NcFr*h=%lu|ww$#rItHhelE}oC}&sn=q_Ma3^SW$G{9E~|os)7F0Yx}c2 zPD`koF#wNA2-;8NIpcHNO8jN@_Ok{wzWS*{n#sojyvAw2Axz=^a#xqMrdo~-Z%b~l zYGtz>87o=a!)Fand@)~DBfVeqe7xAkB`Q*W9Ab|hi{E}mFaXu^U2woQG3M_kRwH{} zD8ektpGe7U%&i;!YnJIK*nCVAuM)maDNg&*yw{v{O zkoSdHf@3!EQv`pm8^^rmKGSD*M~ksvpW>>ZY8$z0SP1y32P+mwO_%D8Eq+j z`(DGOGdGU>$_M0l&%)b$*i$#aUKDx1P{b`3JfvVC46WBYUmEe7u#Yi%w?Y{SSsiqNI>GGHp4aEb7oj{&LlOgHns?P-x3n)F)qF~OAyFDD2VMtjI;uhS zmS=bHf3nikm^bJ4Z(gG+&`pn|mo?P*9x~IyZyH`XTW9noY}rSxMB&4CJ|VmS!QPz) z1Tq~jPcnkhYr6MO&dbxwx&1v+B6+bj#m-Zp-NervjL^tItc>eyGh^E6Kf<%&np^mX zxs6qLRk5#P{>6DlXFkbKs3(gYc#EV`PL%Nt{mva;WcAQ_KEU6BXLjhvv#=q%f=*w` z{fTI)VumI2p++=b)u8Nl9vkw`xtm-C6{teTJW{U-&ukMZf^^HTlAAWZbCLZbhD|Br z*ME3N2_;RI%18PiGQvk5Y7+^}rucgYfp@f+iQnH9r+DDTIKKC>oaM0?vq-%0JhUU% z+=|tgFM{F87(0Kt0J|10?X1j15(Z7Mg7+zNMugFCP1pF#%K0>HFG(%;%+CkU=dv+NPW=gB z&y!jiEMs^0!KOKcVQ(e~!0G#7oZS$~7Z$%bT-qhyvlTVdJ-ve!#Oh>&+UeeKd);H@GKRcS+%l>cmBs{&&EOsx0yq&R+K5~x#`I-e1 zEUNi@k=;EV34Nhm2#Xw~PCoD(foZ1S-ObFLhy4NCSXBxdN#_ZRRFm>o3{hu>DRd+! zxg{}0lK%|Q!ZMHWn|0|$GE-Z9e0zy?l&eeWn=c8MX;0vjq*v4G6id5BX8Tn=cG8lT z3pGa+b)n2XVMsYMA$JFxe$LDo{qnB4?yna1iFw^384NM6h_~oEsye=55OtHF5Jr_} z1V4dgFjEjVe(dVB~vD3#2mS50*-uilHzldP`->>;`;E~n?{~HS)Oz;Dow#|ILd%J>n7V z+}#M4@kLgoLRERlwAnw3{3j-k9Ja7MI66Vb9bi&^)TiLlX9g>D_-G7ZcaF^Xjkef$ zJK!Uxl(AX<{CWo8xfW&XM(#A;D%{R)jL}pFrqUEM*JWE!`(<1A0Nm$)^Vj_|=9?xY z6*xA!o?94E-Fj}4;Bt!&HP_dgrB6#Z3^sQ!t_*Sg)FqTKRpN{2_=-De{Xk&5`;ax( zYO>d~{Kb))iDB#O=}EnI_p8T~??J3*+1a!5o5Q0O`xg441PL@ehr%O;CFlaH%TCQ{ zU%CpeNf>M%E1iy3+x4CRI>+HwX-y8-WYqaDRQVjC-rL%v3%Y5~n!O^m=Alt+k$$Q9 zju+NjJcnv=++z`g9>j)~5TF!Zc^G+WDcyn2w3|5f+*BCMAO}xLn^SSm`(a2?N{)ft z=No)0dkyzaq6|z-qu;{+qB+@}ZpL*q^Rjw%tl^cP{B0hByPm85g_MfxHo;L>30p%A z{{lozTTYl(IP-*o*Y9k=|55#i|2UVwtTk2-=YuywW8u=J2$fKJhI){CIob4Vwh61% z3i~Kd0`6$`e?0$`T1ddJgcnz@#cFAMo5!221@m%mb$SIw!`X=KU=BZIfQyZ0+uQV;zRPE@TN|0u0F_1UZu;mCqd0|}KIN{i}Qbq;-Qd*^}xgTA`>A^(tJ2Iy8{J?^%;&av-X%H}vX zytW5g$5&#fu>B#cWG8Tk>b2iMOp z+NN{c&Ic)`D>V>(nhmR8{+-han;vEi#e!|A@IZK9yzYMq8a6C{mtr~~*N#_jjh{J; z38zmw<4bXaG9E@@m-j1V{q8OQ*y$iFsO|U;ma-bb?vseBJ*?L`tt#mA`7BH&iufk6 z^kEQ;zW4At|J;faIOAqX&P>!yo4qNx2ZQHcPN5|Bk!mpV-0OeuqAqfj5i&+_S(5|p z`;WonBrQCzTgyHCjQdIL8R(q1@9I8IaEENc3&|P6SZKl`tyFke$@w|=8qOI@6+E)5 z@13xaZM{(WCG%d6YEOVs@7nA3RKj5k{dM=q|B+EH0MR=z(myi$U11rB@P^K%MGc{~ zocAwAPS%=|u$g3jO)_nqgjMe9ip&>F2srWhF9`ll{y;hRrd0-pTRxP{88^Y4nP{T# z=_Qk^7xTQq_XYP1eeM?#9SyK{%MS&9?W1SO9<*10uGc+(k>q(zbqkf?LrZZU={L_a zhb%BZFd?En+nzX|LE+ffBQFgTRPgNNrQg)P&$Pam4t11ht3KhdX7LJLDtvTlXwX$~S@VOem`+FzmYnj6 zJA4gh8RRy6q69>c?Z5y;`v`&L1lKG?5G3YE@|6$0z+CVG2xW6Ljmu#Gl$>!iD!)ah zEqxSr8G?A4SKxjsslvRrzy3I`kL#7cY&GOvfKvDKzPV;1^j-Gb2mFoTQ;8U_?^@&s8qjnRIaWGkg zeDcc&Km-+xLfIOO7LfvRt_U}A{pqBA3IZghm0J*IrI#6_OG8yqux!dPu#Y(Hd}ZKR zeE&J0IWaU^4Kr2@5`AvEk#~Iq=QNk2zuV1;8gw|F88TA2%$1B8Xz?i5@K3*RGT6Jg zh6Ib1eU1_s*EuxQv@$wiwB-o$BWG!AjKb?x-w;T2)+x4~>(0O1;&vMN;Wr?Ii|pF{ z{&9l&3hQX^DE=;=o92frE$~vMAy6&6lKUHsJw4dsES-98dTTP!XJX6$m9spnv(ax* zb!i8CVa(}bS* z**nDsz&!g;nv+khrP|PXP&{hN*iD?#MiT-_EBv^9-jH!vmWewDQSxzCAB>Aron>gS zs+tIpe|`>^Mk}v7P_|aF-`@(39EwP=0dC zvwcw%kjy&uYC(x+7;9<>rFA|06@y*2v)fkl{HXb%Q;q{xT$NL+RzRzw)!I%u89kug zYz=NUk!nar?!U8Q<&nkSrkLR&_=EjERpt|aG}y=ispBAt(vlzj{kC`N#=7q{fOP43 z(T4tjI<{2G{?+9CP0=tE8?U&KjuBjeI}_28Cq@WdN)UU5s9F?OL@Gtb( zk#jy|_P3(@|6rnR)7HnGXm&~#6_KvXZk?ltxmZJ5cjPkUf;5xW+VQ|5Uu9)s$dOo$ zSb-tmCk?0xTJzN2P`#cl2aXp|)#etHB&KAFHhGj*jt6NrgYWa2mjrrXI*eDB8U~?3 zSY-yHpiSz>n~L)6Umi|I!ouXI@&rp4#y zvzH=3N

3DY-i%DU~Drxm6&U+UY@Lf8BXM&E((jM%N(qYp5zS z?{o=IdLZxn-?xztTj10wPZy3Hp6~QS8OqYf+VU_FcxMX9DQF%x_A&Q**=kElL5Bse z50eJ|6^rsU;&CQONk~4I^{#vQV8|c@XD6<=KE;H+K}n_hyB4;1*j5&zRe{vGkP^1s z&3E2}4!IF=GWBYC5~NuZQ?qa9gU_!oT-ruIBDZtlg}z*>hi-X8ib2@Z5~?HXNV9~T zMUTVNDP*Z;HU4i-?5es}@-IEUUG&Esy{QPyS0G*)mzg-!9Z#GSwW)^K#=MU(P+|r> z{hKi)C%JS~f|HfCs2LFbUN4qOlW5j`r=>|=jewWtjpelXuTZ}W$l7UXRWPvWF&=RW zgQ@Yd(uMnd?l;(@`c$#SF$zb7dnS~tjqt-oKd4!-v7Uu!dy4)Q&Sf#xq`{0@f1x@( zw+SQqyW7kc{CW`rgB&|2ySSkCSf1^p37H9|+A6a@A~&phP`u7;P}d#oqC)g@QT&bH z;l7N}(xRy0)^kM~u(dF7b!>FFp}(YZu2g1P9k^O$ydnP@mKWGvwEP#;qvAwYM}ub& zFc7IcrH*DNO6<2i`x>GvWA~YL0SiXzVwmn5&bM7M(;>cgva<1tmUlcIYtm4o8kC!yMu$(Vde>+#D{RGA?q?@hCsl4VSc@_kXZF zu0D)SKDq>Lu!8r}6KCbd)|lO&i-aSN_lGSRb=prk6USLi%4r09;Rf{;i}SNLC9_o= z1b_&d9a=5l0I1X))x6sFd1G+<8(B;-adeq1IVqi^6#OiE%BVM`q7R&~n7^Xn-VJk2 zA@lkBm^&BEPF+h(zrWC~KcY!#0%cln7naqd1=W2X9hv>b5z4%f^-=?u>4g(_a??Hw z&7Cv5va5q_LxZe$i$YR9=s)nB(U#RG9~q-JC+xNVs;9-bfSZN!{_WJROOKAFz&te4 zL(^o}CO-EvlbjRGy&Z4q2DGd75jXRh_@d*_zWh{h^&)%~lRRI3O%RI$=zkBxA6Cuu z`DO}WfZB0{E+UVmx_b+1Mvr~dYs^c3fB&a}Kvju{a4NtLO;`n1R7UmJlymGgvAo}# zvHD+%bC%qBW%gwG3h9DD0r?Yqp8&n2*`S)SeJ=aEc_Q2$g|~p^IA2JgfXG)P?}RE^ zLFLoiO~5xrcqA95-x(Pnv-oyViPGT!w{Kyn1fZAk->0bPAL6^xGxuA?foNFC2Our3 KAXX^?g8VNtj$YIN literal 0 HcmV?d00001 diff --git a/docs/lib/godoc/analysis/help.html b/docs/lib/godoc/analysis/help.html new file mode 100644 index 0000000..dd1b606 --- /dev/null +++ b/docs/lib/godoc/analysis/help.html @@ -0,0 +1,254 @@ + + + + + + +

+ When invoked with the -analysis flag, godoc performs + static analysis on the Go packages it indexes and displays the + results in the source and package views. This document provides a + brief tour of these features. +

+ +

Type analysis features

+

+ godoc -analysis=type performs static checking similar + to that done by a compiler: it detects ill-formed programs, resolves + each identifier to the entity it denotes, computes the type of each + expression and the method set of each type, and determines which + types are assignable to each interface type. + + Type analysis is relatively quick, requiring about 10 seconds for + the >200 packages of the standard library, for example. +

+ +

Compiler errors

+

+ If any source file contains a compilation error, the source view + will highlight the errant location in red. Hovering over it + displays the error message. +

+
+ +

Identifier resolution

+

+ In the source view, every referring identifier is annotated with + information about the language entity it refers to: a package, + constant, variable, type, function or statement label. + + Hovering over the identifier reveals the entity's kind and type + (e.g. var x int or func f + func(int) string). +

+
+
+ +

+ Clicking the link takes you to the entity's definition. +

+
+ +

Type information: size/alignment, method set, interfaces

+

+ Clicking on the identifier that defines a named type causes a panel + to appear, displaying information about the named type, including + its size and alignment in bytes, its + method set, and its + implements relation: the set of types T that are assignable to + or from this type U where at least one of T or U is an interface. + + This example shows information about net/rpc.methodType. +

+ +

+ The method set includes not only the declared methods of the type, + but also any methods "promoted" from anonymous fields of structs, + such as sync.Mutex in this example. + + In addition, the receiver type is displayed as *T or + T depending on whether it requires the address or just + a copy of the receiver value. +

+

+ The method set and implements relation are also available + via the package view. +

+ + +

Pointer analysis features

+

+ godoc -analysis=pointer additionally performs a precise + whole-program pointer analysis. In other words, it + approximates the set of memory locations to which each + reference—not just vars of kind *T, but also + []T, func, map, + chan, and interface—may refer. This + information reveals the possible destinations of each dynamic call + (via a func variable or interface method), and the + relationship between send and receive operations on the same + channel. +

+

+ Compared to type analysis, pointer analysis requires more time and + memory, and is impractical for code bases exceeding a million lines. +

+ +

Call graph navigation

+

+ When pointer analysis is complete, the source view annotates the + code with callers and callees information: callers + information is associated with the func keyword that + declares a function, and callees information is associated with the + open paren '(' of + a function call. +

+

+ In this example, hovering over the declaration of the + rot13 function (defined in strings/strings_test.go) + reveals that it is called in exactly one place. +

+ +

+ Clicking the link navigates to the sole caller. (If there were + multiple callers, a list of choices would be displayed first.) +

+ +

+ Notice that hovering over this call reveals that there are 19 + possible callees at this site, of which our rot13 + function was just one: this is a dynamic call through a variable of + type func(rune) rune. + + Clicking on the call brings up the list of all 19 potential callees, + shown truncated. Many of them are anonymous functions. +

+ +

+ Pointer analysis gives a very precise approximation of the call + graph compared to type-based techniques. + + As a case in point, the next example shows the dynamic call inside + the testing package responsible for calling all + user-defined functions named ExampleXYZ. +

+ +

+ Recall that all such functions have type func(), + i.e. no arguments and no results. A type-based approximation could + only conclude that this call might dispatch to any function matching + that type—and these are very numerous in most + programs—but pointer analysis can track the flow of specific + func values through the testing package. + + As an indication of its precision, the result contains only + functions whose name starts with Example. +

+ +

Intra-package call graph

+

+ The same call graph information is presented in a very different way + in the package view. For each package, an interactive tree view + allows exploration of the call graph as it relates to just that + package; all functions from other packages are elided. + + The roots of the tree are the external entry points of the package: + not only its exported functions, but also any unexported or + anonymous functions that are called (dynamically) from outside the + package. +

+

+ This example shows the entry points of the + path/filepath package, with the call graph for + Glob expanded several levels +

+ +

+ Notice that the nodes for Glob and Join appear multiple times: the + tree is a partial unrolling of a cyclic graph; the full unrolling + is in general infinite. +

+

+ For each function documented in the package view, another + interactive tree view allows exploration of the same graph starting + at that function. + + This is a portion of the internal graph of + net/http.ListenAndServe. +

+ + +

Channel peers (send ↔ receive)

+

+ Because concurrent Go programs use channels to pass not just values + but also control between different goroutines, it is natural when + reading Go code to want to navigate from a channel send to the + corresponding receive so as to understand the sequence of events. +

+

+ Godoc annotates every channel operation—make, send, range, + receive, close—with a link to a panel displaying information + about other operations that might alias the same channel. +

+

+ This example, from the tests of net/http, shows a send + operation on a chan bool. +

+ +

+ Clicking on the <- send operator reveals that this + channel is made at a unique location (line 332) and that there are + three receive operations that might read this value. + + It hardly needs pointing out that some channel element types are + very widely used (e.g. struct{}, bool, int, interface{}) and that a + typical Go program might contain dozens of receive operations on a + value of type chan bool; yet the pointer analysis is + able to distinguish operations on channels at a much finer precision + than based on their type alone. +

+

+ Notice also that the send occurs in a different (anonymous) function + from the outer one containing the make and the receive + operations. +

+

+ Here's another example of send on a different chan + bool, also in package net/http: +

+ +

+ The analysis finds just one receive operation that might receive + from this channel, in the test for this feature. +

+ + +

Known issues

+

+ All analysis results pertain to exactly + one configuration (e.g. amd64 linux). Files that are conditionally + compiled based on different platforms or build tags are not visible + to the analysis. +

+

+ Files that import "C" require + preprocessing by the cgo tool. The file offsets after preprocessing + do not align with the unpreprocessed file, so markup is misaligned. +

+

+ Files are not periodically re-analyzed. + If the files change underneath the running server, the displayed + markup is misaligned. +

+

+ Additional issues are listed at + tools/godoc/analysis/README. +

diff --git a/docs/lib/godoc/analysis/ident-def.png b/docs/lib/godoc/analysis/ident-def.png new file mode 100644 index 0000000000000000000000000000000000000000..b0d9e55ad6f275709e1e57cfe9ad7b7b02099608 GIT binary patch literal 13141 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 literal 0 HcmV?d00001 diff --git a/docs/lib/godoc/analysis/ident-field.png b/docs/lib/godoc/analysis/ident-field.png new file mode 100644 index 0000000000000000000000000000000000000000..76cbe5a334050e6d513bd18ae04c300e9ce847dc GIT binary patch literal 12131 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́@GvHe`5C$#pKj?0A%c0AiEq0JR&WXLl%*@NJE zN2>#CGi`Uf;V{`bqy2Ab3FW@4YoTmQ zMFuy6^2Ql}R-w&G4;QisvY*InORp(yydPJ)rEE>XeP9AO&|R_NkvgtGFRDo8oMUvE z^9{D^eL(t3oKToO%(M2Hd*e+pfPLYeziZ!X910Z*GwX?-D9`3SJ?$AXvbklM zBT%si?(V@)OKElgO9=l8R$rn)tSqhN8Rj%sU%sAR2l{K@fn01qejUFQNHf%i()Mu* z`>(i9)a2+sCtIQAPsgGLez&(nl9L3h!6{vyEw*lhzg1AANr+x##hl|k@tNKSh_PGU z7q?kId;XudTnn>+g_fzg7Ns6J`p?w^Ke#2@gZkH~yGR zb5O*ZOoDP~f@Eos4Us_OM|Y-J1XkQtFw7QhG9RrW6PY0JjXpnY3%13DeTzk)RZook zKi&?BJ)2z~0U4wvUi_V`*UhJNXylr{ijw_Ke+#!oN?j%fiEu(=Jzc zU0glG8Ssu!%Vv9DAW7mQ&ZEwm0SOZdTc1_a>9-@2?WZTqj8TxN(Eg2KuO83UoGi;I zZx3u#^f`Wqr19)OV`oKF&eNFkCLV?*x75xW`aJtS8vd`~!ADQ{LHg2b1}#`?I82@o z37z8Kk(Wy57QzSqL2mn7>mM4TP|JJ5ZFEHZKhoN_Yrxkn7~Mz1SdMbugMJ$#bnfws zXm)WOJ)9k3nmyo8GOUg-_dsG-gl}^GT+1E^`)~8{V~BI<^GQ}CtnB~4t^EJ=E0G>y zUynG~s4}hNV`9qMzq3CY{ww7-?#$&**opJTK(NoyJ0dSilqneE=1lqDy8sXQ z>{rnN1&nm+rSZ9c04#s!YyS@>Wz*3P)NCxXx4RzcI1^x7&!yY+8j#$|OaD{;aIvsn z%gDsQ*{*Hi8MSqiT^&oOdKN*go1UeoAqMzW+h&GHod#*_xm%}d1 z8Js8fueN8}E_jl#(K_{*NS*u?jh9&9;Siux5x6?NzMFa2c?Ygq0u-x5aExi5jUj+9 zgm?bwKF7$CXby+JNL&m+8{<3z48U6V9Jz1LoIdBDFX)o|H<@W>-Ao#zcm2})Ld=2c z@Y;-&6tDZu{#TVrriHSITv~gxqqVY|+F- zb1%ulpOsMSbN|~r0kZ>X3R|NNcbfAC90ipq8D zd~r+n_-p}aCE)Kn|6BsQXJPSYi2QMIE!Tj+VM&Ftmm3!G_KQh+>vs9i{t<&``%aT;ti7iBt9m)D7bmWw0*3`jOy7?5lBl!zBN=(id^B9>u25 z_AcX{mKiY;{}U$OHz`l9a;?~>IpoIyhVpHLl8guWWp|WjHp@l#&V=550c5NSpLenM zy>tvp6e}Gp>SbpvHj(AOiQ86$i7%li51h%e{Igg;N+^O}S_J30h?Y>l=KqIN<AQ>3e*O3((W^5!{lSZz+n$%ZtmR`;1FWt2jiPI^_;-kMtifcU&evR{Y_;qtR5$dAh@~md_<42!!=pK<#1f_P8!`B|^H_$p z)Wz-Hdt0r&?pPPbE=r=de);5WofPI?NKpVNwOfN+Hz;lf2K;IRAg9HJI|U=7 z)lJE&t8n${t8e441Qb=OY#plE)?f+Mj_n49Z=#{PI$b7CjiZ$}X^&St0wk3{Rz0_t zD7stz|IjuFW=On;9Yt0utDs!x_`f)mxVjI8)UP?@Vi54`mN7v220(T8`z))%YVeIP zfdt>qoh{?bBUu@sINM_8KkDN`x6YHilP2e?JC`o5_dje&wzOLRnXwUwQ_(i#vdhrp zEC#O{2A|7!hf1yQUUED1xfX7LkAgn+?F4S=#9g{-89G&{p?TrdRLSjcC-m3k5jv-2p&*EG=j!%FXNK}NJH1Zi#zm#&9 z@rviewlJO}5~nJhChpw2{ut@#53OMGJ0#|xh)YOsGvV-r62Qe;zU}$r(!t@F1_bj7yh<4h6 zSZ3tyaN&}rL=`M^sI;J)kJ<^6feOO9fOxo@`LWXyf#hC`Xiny;@5tb1ryWEn=R3AGk*fW zYP=(&1w)#aQSaSKLK-1&&X;|fSzWr((9@DGNBka`3a}$)d|S6hEOBP`qV5ufP}>jd z-#O+WIqrvoQ}nv>l8$!!7&gju0}Sti-7ZfX*`tPd|i5|RUR?TMg$P!Dzo zf3{sJcw-z)Cw{fsP2G@uJ|13Kb67b&ZLL?E3^~im!Hz;<3S(v$KxG338a`(N;rIUF z#{yFbBEl*qLd1#TT?CHaszs5c?ui3`F{_GK7qg6ZiQF*83K@Mx7?bXS>8joCxr;

i z%D>!bAO7+hUUWVEb`kIBjA_-L;5wlY4-J=svib^oFm`E`N?Lu*83!8dsXcN1OkJY6 z!QX4XX@@?wd}aO<=t%Q<(XKrh~o zq~B`#KlqX7??4PYj?B-G2u9MI_NI2zcNg1*4Q#ABd%j)5dNG~WvVbSADjM1qel0nh zmoBtP=|DpeVlRhzPdplVt{!+B1NmK*fxtA6$Za`b8gE^CWZK6FY-g-aGcY+YN47eAXLnOy~{h8+B(-4ZaI^Z@6xJdW3 zm5zpM7*yzq`6hF!NnrD8-8u5XvJRVhme0%d38~TOQ@I3IOV(nTJ(a5*IR-~ANJc9k z{2dXHW)bkUJ{ZE*T{3}QlqqykQ{h;*{b5CT^MgU~uS>R(s2a1kEh0K^%YUozicroo z0tQeu3Ov>3EhBvuq_n~C9Am)PM>TE{Gig4(qsSSmjpO92Ro&i=j86K} zMG67hNca^iwX@cWES$7&&+<~C4ja>h@1CK}tk$D|%t_o@$4||Q`dJ-UEo1@<<+@7{ zAdBsUzA1gHGH4N=IY_}l^cb_xopl{p4!~4Sc593a+lAz3PqdFEoPRVpsDI$AdMoF# z#wZGJIJ;sAQzqGeZBwfC#q3q+@rVn+NLy1!mW_IX?_CbKP{8L6@n;^JFZ6!nnYMmx z0Jee8nsadgbuJh+@9s+5Bx41+|C-l- zX>OSQm*1odoNFz=t-?l4FjND*(8Ol`73}@1$aKYW?kGH%kaf)_gVZvTrk=GOz*cz4 z5~l8S!r7Uvs3Dzg6uM?aNKTpMTc+?!)9Z)K?R|FQba#9G+*B3n9pQm=B0>8vMv_LJ zMdIphE|vGD%7h{(~Db{o9*%x}rw zz|-o>T7>&pFZH!x&2+EfI7c##b&uXREfM%#D|9yMEEV`EABh@KaSrK2WIdoM<|i&x zIhkjg_pDSgqpzg-A*sTqO9fgVBI)NZQ6izf*2XA_7>L)*lmhZpH@5?q)7?~!w>i)L f&pQwyPdE*UO}nloc4~+}Hy{Bd6uy*+>HGgL_e%kn literal 0 HcmV?d00001 diff --git a/docs/lib/godoc/analysis/ipcg-func.png b/docs/lib/godoc/analysis/ipcg-func.png new file mode 100644 index 0000000000000000000000000000000000000000..523318d68b0533f63591fad2c19e5f0da263bee1 GIT binary patch literal 10919 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 F_+P-4@R9%k literal 0 HcmV?d00001 diff --git a/docs/lib/godoc/analysis/ipcg-pkg.png b/docs/lib/godoc/analysis/ipcg-pkg.png new file mode 100644 index 0000000000000000000000000000000000000000..e029068551826c4a75f392676f0f5369f4cb46fa GIT binary patch literal 21092 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 K=d#Wzp$P!eNVgUM literal 0 HcmV?d00001 diff --git a/docs/lib/godoc/analysis/typeinfo-pkg.png b/docs/lib/godoc/analysis/typeinfo-pkg.png new file mode 100644 index 0000000000000000000000000000000000000000..91bd5f74588c5f43ef82e05bd543898659de53c8 GIT binary patch literal 30004 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

+ + diff --git a/docs/lib/godoc/dirlist.html b/docs/lib/godoc/dirlist.html new file mode 100644 index 0000000..a3e1a2f --- /dev/null +++ b/docs/lib/godoc/dirlist.html @@ -0,0 +1,31 @@ + + +

+ + + + + + + + + + + +{{range .}} + + {{$name_html := fileInfoName . | html}} + + + + + + +{{end}} + +
File Bytes Modified
..
{{$name_html}}{{html .Size}}{{fileInfoTime . | html}}
+

diff --git a/docs/lib/godoc/error.html b/docs/lib/godoc/error.html new file mode 100644 index 0000000..7573aa2 --- /dev/null +++ b/docs/lib/godoc/error.html @@ -0,0 +1,9 @@ + + +

+{{html .}} +

diff --git a/docs/lib/godoc/example.html b/docs/lib/godoc/example.html new file mode 100644 index 0000000..a7f6691 --- /dev/null +++ b/docs/lib/godoc/example.html @@ -0,0 +1,28 @@ +
+ +
+

Example{{example_suffix .Name}}

+ {{with .Doc}}

{{html .}}

{{end}} + {{$output := .Output}} + {{with .Play}} +
+
+
{{html $output}}
+
+ Run + Format + +
+
+ {{else}} +

Code:

+
{{.Code}}
+ {{with .Output}} +

Output:

+
{{html .}}
+ {{end}} + {{end}} +
+
diff --git a/docs/lib/godoc/favicon.ico b/docs/lib/godoc/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8d225846dbcda496ba803b828c4786b21cc84d01 GIT binary patch literal 5686 zcmeHL4Qx|Y6h33c%}oagh()0_%1;O(L4mbFbVLmNO!o_pK(h=QmG>Gj0Dp1$i%G?a*Xb00*Zl+=^xHy#gX9;;9klhC_gGfM^tl54Hq zN-B=8KPo?fAIN`q)__`Pf%@y10W~k(nR{Vd#p#Gnr1As!|Bv%uUN{Fw^JXYieKe`d zzZvR2Kj{8nsXc+#HYjwd{P07=cUC0hO6hzw+^+ZFU#~ld%O&$5WcRDz2Z_J6DiynP z-o~cPW!SXsAaZsV;;UUn$ox7FS(!_aw=JPt@tqZEu&%WsWleFXv~2yse;5DKQph*= z0WBARJ9fZv61lq%DA=*HR^dfsG{(L(8Pn%&P;XEja?6{y7f~8$JS+Rp)$Ff%YcI*RnhK&{cdmtNiVGadJ0XF?rG$Onq}K z@_)$jlK2eUTOeOv~?9P$ee01br-zOe1aZ|vm!mkZgAQy=i&<@?#(oSlO{eFu1`u&5Yv z-RG|Q@X?+!)$GyJJv#(#j!Ff;o^1<^Sjlj~7vExv+$&@y2WCUQRp4V0$jZw0*c5)) zY#dYF7oFmpro?)52kW0lYg2`Se>{Jd8vj0Te6wV<#7#3cZCD}U(((5=|C{~r9S#TL zXCz?A&=IgMO5^-DxbvUsr~7+Z8OBeD!pKphk(VdVM3I7j-j;;L3tksKIL#(wqVT~y z+4ySQ6r)^r=w19#_95D;t!S^Y0?rygyWR}3N9tXtoKJ6|_qg5Z+9&sWMa#uxe6!K4 zHmnWm$F3w-Qx236UpNW-bK|jQd5kJUQo<{+eV>3k;!LWscCi;{O{`618^Zof%XsX_uwc)YILw*( zvcijvF`O0q&+;~*(}7F|yE;#Z8;^{YCKPOs$LS-9xO!p%8qR*C=MEsn~7LW{xpL3+($fi^UQ=O^Tezb&|n!m~B)s-E@=cPlJ1Icj-i~H*-ws>HMPp zA8$6I;O?Sy@#&$HCioyy&a?PV!JjLXFBIbY#l0Hexx~M@G-~89ijzi*_XSFw6G@Ac z#?aDaiS}f?LEmPWiT|6>v0W0a+p?2(?pRI7@)uIk{v~wsP#Tr|yq-!6v#9Y*3ZZfl zp<2*lLTxIcCXM)v(bd{Aax}M6%Uuxvzob?f!qI!V72pRl5Xito$bep>^=cY@H_dzZ z()RDyPwTe-RM?4IGB29wF3w7Q=`{B z5 + + + + + +{{with .Tabtitle}} + {{html .}} - Go Documentation Server +{{else}} + Go Documentation Server +{{end}} + +{{if .TreeView}} + +{{end}} + + +{{if .TreeView}} + + +{{end}} + +{{if .Playground}} + +{{end}} +{{with .Version}}{{end}} + + + + +
+... +
+ +
+ + + +
+ +
+ +
+ +{{if .Playground}} +
+
+
+
+ Run + Format + +
+
+{{end}} + +
+
+ +{{if or .Title .SrcPath}} +

+ {{html .Title}} + {{html .SrcPath | srcBreadcrumb}} +

+{{end}} + +{{with .Subtitle}} +

{{html .}}

+{{end}} + +{{with .SrcPath}} +

+ Documentation: {{html . | srcToPkgLink}} +

+{{end}} + +{{/* The Table of Contents is automatically inserted in this
. + Do not delete this
. */}} + + +{{/* Body is HTML-escaped elsewhere */}} +{{printf "%s" .Body}} + + + +
+
+ + diff --git a/docs/lib/godoc/godocs.js b/docs/lib/godoc/godocs.js new file mode 100644 index 0000000..7f02ba2 --- /dev/null +++ b/docs/lib/godoc/godocs.js @@ -0,0 +1,688 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* A little code to ease navigation of these documents. + * + * On window load we: + * + Generate a table of contents (generateTOC) + * + Bind foldable sections (bindToggles) + * + Bind links to foldable sections (bindToggleLinks) + */ + +(function() { + 'use strict'; + + // Mobile-friendly topbar menu + $(function() { + var menu = $('#menu'); + var menuButton = $('#menu-button'); + var menuButtonArrow = $('#menu-button-arrow'); + menuButton.click(function(event) { + menu.toggleClass('menu-visible'); + menuButtonArrow.toggleClass('vertical-flip'); + event.preventDefault(); + return false; + }); + }); + + /* Generates a table of contents: looks for h2 and h3 elements and generates + * links. "Decorates" the element with id=="nav" with this table of contents. + */ + function generateTOC() { + if ($('#manual-nav').length > 0) { + return; + } + + // For search, we send the toc precomputed from server-side. + // TODO: Ideally, this should always be precomputed for all pages, but then + // we need to do HTML parsing on the server-side. + if (location.pathname === '/search') { + return; + } + + var nav = $('#nav'); + if (nav.length === 0) { + return; + } + + var toc_items = []; + $(nav) + .nextAll('h2, h3') + .each(function() { + var node = this; + if (node.id == '') node.id = 'tmp_' + toc_items.length; + var link = $('') + .attr('href', '#' + node.id) + .text($(node).text()); + var item; + if ($(node).is('h2')) { + item = $('
'); + } else { + // h3 + item = $('
'); + } + item.append(link); + toc_items.push(item); + }); + if (toc_items.length <= 1) { + return; + } + var dl1 = $('
'); + var dl2 = $('
'); + + var split_index = toc_items.length / 2 + 1; + if (split_index < 8) { + split_index = toc_items.length; + } + for (var i = 0; i < split_index; i++) { + dl1.append(toc_items[i]); + } + for (; /* keep using i */ i < toc_items.length; i++) { + dl2.append(toc_items[i]); + } + + var tocTable = $('').appendTo(nav); + var tocBody = $('').appendTo(tocTable); + var tocRow = $('').appendTo(tocBody); + + // 1st column + $(']","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*\s*$/g,bz={option:[1,""],legend:[1,"
","
"],thead:[1,"
') + .appendTo(tocRow) + .append(dl1); + // 2nd column + $('') + .appendTo(tocRow) + .append(dl2); + } + + function bindToggle(el) { + $('.toggleButton', el).click(function() { + if ($(this).closest('.toggle, .toggleVisible')[0] != el) { + // Only trigger the closest toggle header. + return; + } + + if ($(el).is('.toggle')) { + $(el) + .addClass('toggleVisible') + .removeClass('toggle'); + } else { + $(el) + .addClass('toggle') + .removeClass('toggleVisible'); + } + }); + } + + function bindToggles(selector) { + $(selector).each(function(i, el) { + bindToggle(el); + }); + } + + function bindToggleLink(el, prefix) { + $(el).click(function() { + var href = $(el).attr('href'); + var i = href.indexOf('#' + prefix); + if (i < 0) { + return; + } + var id = '#' + prefix + href.slice(i + 1 + prefix.length); + if ($(id).is('.toggle')) { + $(id) + .find('.toggleButton') + .first() + .click(); + } + }); + } + function bindToggleLinks(selector, prefix) { + $(selector).each(function(i, el) { + bindToggleLink(el, prefix); + }); + } + + function setupDropdownPlayground() { + if (!$('#page').is('.wide')) { + return; // don't show on front page + } + var button = $('#playgroundButton'); + var div = $('#playground'); + var setup = false; + button.toggle( + function() { + button.addClass('active'); + div.show(); + if (setup) { + return; + } + setup = true; + playground({ + codeEl: $('.code', div), + outputEl: $('.output', div), + runEl: $('.run', div), + fmtEl: $('.fmt', div), + shareEl: $('.share', div), + shareRedirect: '//play.golang.org/p/', + }); + }, + function() { + button.removeClass('active'); + div.hide(); + } + ); + $('#menu').css('min-width', '+=60'); + + // Hide inline playground if we click somewhere on the page. + // This is needed in mobile devices, where the "Play" button + // is not clickable once the playground opens up. + $('#page').click(function() { + if (button.hasClass('active')) { + button.click(); + } + }); + } + + function setupInlinePlayground() { + 'use strict'; + // Set up playground when each element is toggled. + $('div.play').each(function(i, el) { + // Set up playground for this example. + var setup = function() { + var code = $('.code', el); + playground({ + codeEl: code, + outputEl: $('.output', el), + runEl: $('.run', el), + fmtEl: $('.fmt', el), + shareEl: $('.share', el), + shareRedirect: '//play.golang.org/p/', + }); + + // Make the code textarea resize to fit content. + var resize = function() { + code.height(0); + var h = code[0].scrollHeight; + code.height(h + 20); // minimize bouncing. + code.closest('.input').height(h); + }; + code.on('keydown', resize); + code.on('keyup', resize); + code.keyup(); // resize now. + }; + + // If example already visible, set up playground now. + if ($(el).is(':visible')) { + setup(); + return; + } + + // Otherwise, set up playground when example is expanded. + var built = false; + $(el) + .closest('.toggle') + .click(function() { + // Only set up once. + if (!built) { + setup(); + built = true; + } + }); + }); + } + + // fixFocus tries to put focus to div#page so that keyboard navigation works. + function fixFocus() { + var page = $('div#page'); + var topbar = $('div#topbar'); + page.css('outline', 0); // disable outline when focused + page.attr('tabindex', -1); // and set tabindex so that it is focusable + $(window) + .resize(function(evt) { + // only focus page when the topbar is at fixed position (that is, it's in + // front of page, and keyboard event will go to the former by default.) + // by focusing page, keyboard event will go to page so that up/down arrow, + // space, etc. will work as expected. + if (topbar.css('position') == 'fixed') page.focus(); + }) + .resize(); + } + + function toggleHash() { + var id = window.location.hash.substring(1); + // Open all of the toggles for a particular hash. + var els = $( + document.getElementById(id), + $('a[name]').filter(function() { + return $(this).attr('name') == id; + }) + ); + + while (els.length) { + for (var i = 0; i < els.length; i++) { + var el = $(els[i]); + if (el.is('.toggle')) { + el.find('.toggleButton') + .first() + .click(); + } + } + els = el.parent(); + } + } + + function personalizeInstallInstructions() { + var prefix = '?download='; + var s = window.location.search; + if (s.indexOf(prefix) != 0) { + // No 'download' query string; detect "test" instructions from User Agent. + if (navigator.platform.indexOf('Win') != -1) { + $('.testUnix').hide(); + $('.testWindows').show(); + } else { + $('.testUnix').show(); + $('.testWindows').hide(); + } + return; + } + + var filename = s.substr(prefix.length); + var filenameRE = /^go1\.\d+(\.\d+)?([a-z0-9]+)?\.([a-z0-9]+)(-[a-z0-9]+)?(-osx10\.[68])?\.([a-z.]+)$/; + var m = filenameRE.exec(filename); + if (!m) { + // Can't interpret file name; bail. + return; + } + $('.downloadFilename').text(filename); + $('.hideFromDownload').hide(); + + var os = m[3]; + var ext = m[6]; + if (ext != 'tar.gz') { + $('#tarballInstructions').hide(); + } + if (os != 'darwin' || ext != 'pkg') { + $('#darwinPackageInstructions').hide(); + } + if (os != 'windows') { + $('#windowsInstructions').hide(); + $('.testUnix').show(); + $('.testWindows').hide(); + } else { + if (ext != 'msi') { + $('#windowsInstallerInstructions').hide(); + } + if (ext != 'zip') { + $('#windowsZipInstructions').hide(); + } + $('.testUnix').hide(); + $('.testWindows').show(); + } + + var download = 'https://dl.google.com/go/' + filename; + + var message = $( + '

' + + 'Your download should begin shortly. ' + + 'If it does not, click this link.

' + ); + message.find('a').attr('href', download); + message.insertAfter('#nav'); + + window.location = download; + } + + function updateVersionTags() { + var v = window.goVersion; + if (/^go[0-9.]+$/.test(v)) { + $('.versionTag') + .empty() + .text(v); + $('.whereTag').hide(); + } + } + + function addPermalinks() { + function addPermalink(source, parent) { + var id = source.attr('id'); + if (id == '' || id.indexOf('tmp_') === 0) { + // Auto-generated permalink. + return; + } + if (parent.find('> .permalink').length) { + // Already attached. + return; + } + parent + .append(' ') + .append($("").attr('href', '#' + id)); + } + + $('#page .container') + .find('h2[id], h3[id]') + .each(function() { + var el = $(this); + addPermalink(el, el); + }); + + $('#page .container') + .find('dl[id]') + .each(function() { + var el = $(this); + // Add the anchor to the "dt" element. + addPermalink(el, el.find('> dt').first()); + }); + } + + $('.js-expandAll').click(function() { + if ($(this).hasClass('collapsed')) { + toggleExamples('toggle'); + $(this).text('(Collapse All)'); + } else { + toggleExamples('toggleVisible'); + $(this).text('(Expand All)'); + } + $(this).toggleClass('collapsed'); + }); + + function toggleExamples(className) { + // We need to explicitly iterate through divs starting with "example_" + // to avoid toggling Overview and Index collapsibles. + $("[id^='example_']").each(function() { + // Check for state and click it only if required. + if ($(this).hasClass(className)) { + $(this) + .find('.toggleButton') + .first() + .click(); + } + }); + } + + $(document).ready(function() { + generateTOC(); + addPermalinks(); + bindToggles('.toggle'); + bindToggles('.toggleVisible'); + bindToggleLinks('.exampleLink', 'example_'); + bindToggleLinks('.overviewLink', ''); + bindToggleLinks('.examplesLink', ''); + bindToggleLinks('.indexLink', ''); + setupDropdownPlayground(); + setupInlinePlayground(); + fixFocus(); + setupTypeInfo(); + setupCallgraphs(); + toggleHash(); + personalizeInstallInstructions(); + updateVersionTags(); + + // godoc.html defines window.initFuncs in the tag, and root.html and + // codewalk.js push their on-page-ready functions to the list. + // We execute those functions here, to avoid loading jQuery until the page + // content is loaded. + for (var i = 0; i < window.initFuncs.length; i++) window.initFuncs[i](); + }); + + // -- analysis --------------------------------------------------------- + + // escapeHTML returns HTML for s, with metacharacters quoted. + // It is safe for use in both elements and attributes + // (unlike the "set innerText, read innerHTML" trick). + function escapeHTML(s) { + return s + .replace(/&/g, '&') + .replace(/\"/g, '"') + .replace(/\'/g, ''') + .replace(//g, '>'); + } + + // makeAnchor returns HTML for an element, given an anchorJSON object. + function makeAnchor(json) { + var html = escapeHTML(json.Text); + if (json.Href != '') { + html = "" + html + ''; + } + return html; + } + + function showLowFrame(html) { + var lowframe = document.getElementById('lowframe'); + lowframe.style.height = '200px'; + lowframe.innerHTML = + "

" + + html + + '

\n' + + "
"; + } + + document.hideLowFrame = function() { + var lowframe = document.getElementById('lowframe'); + lowframe.style.height = '0px'; + }; + + // onClickCallers is the onclick action for the 'func' tokens of a + // function declaration. + document.onClickCallers = function(index) { + var data = document.ANALYSIS_DATA[index]; + if (data.Callers.length == 1 && data.Callers[0].Sites.length == 1) { + document.location = data.Callers[0].Sites[0].Href; // jump to sole caller + return; + } + + var html = + 'Callers of ' + escapeHTML(data.Callee) + ':
\n'; + for (var i = 0; i < data.Callers.length; i++) { + var caller = data.Callers[i]; + html += '' + escapeHTML(caller.Func) + ''; + var sites = caller.Sites; + if (sites != null && sites.length > 0) { + html += ' at line '; + for (var j = 0; j < sites.length; j++) { + if (j > 0) { + html += ', '; + } + html += '' + makeAnchor(sites[j]) + ''; + } + } + html += '
\n'; + } + showLowFrame(html); + }; + + // onClickCallees is the onclick action for the '(' token of a function call. + document.onClickCallees = function(index) { + var data = document.ANALYSIS_DATA[index]; + if (data.Callees.length == 1) { + document.location = data.Callees[0].Href; // jump to sole callee + return; + } + + var html = 'Callees of this ' + escapeHTML(data.Descr) + ':
\n'; + for (var i = 0; i < data.Callees.length; i++) { + html += '' + makeAnchor(data.Callees[i]) + '
\n'; + } + showLowFrame(html); + }; + + // onClickTypeInfo is the onclick action for identifiers declaring a named type. + document.onClickTypeInfo = function(index) { + var data = document.ANALYSIS_DATA[index]; + var html = + 'Type ' + + data.Name + + ': ' + + '      (size=' + + data.Size + + ', align=' + + data.Align + + ')
\n'; + html += implementsHTML(data); + html += methodsetHTML(data); + showLowFrame(html); + }; + + // implementsHTML returns HTML for the implements relation of the + // specified TypeInfoJSON value. + function implementsHTML(info) { + var html = ''; + if (info.ImplGroups != null) { + for (var i = 0; i < info.ImplGroups.length; i++) { + var group = info.ImplGroups[i]; + var x = '' + escapeHTML(group.Descr) + ' '; + for (var j = 0; j < group.Facts.length; j++) { + var fact = group.Facts[j]; + var y = '' + makeAnchor(fact.Other) + ''; + if (fact.ByKind != null) { + html += escapeHTML(fact.ByKind) + ' type ' + y + ' implements ' + x; + } else { + html += x + ' implements ' + y; + } + html += '
\n'; + } + } + } + return html; + } + + // methodsetHTML returns HTML for the methodset of the specified + // TypeInfoJSON value. + function methodsetHTML(info) { + var html = ''; + if (info.Methods != null) { + for (var i = 0; i < info.Methods.length; i++) { + html += '' + makeAnchor(info.Methods[i]) + '
\n'; + } + } + return html; + } + + // onClickComm is the onclick action for channel "make" and "<-" + // send/receive tokens. + document.onClickComm = function(index) { + var ops = document.ANALYSIS_DATA[index].Ops; + if (ops.length == 1) { + document.location = ops[0].Op.Href; // jump to sole element + return; + } + + var html = 'Operations on this channel:
\n'; + for (var i = 0; i < ops.length; i++) { + html += + makeAnchor(ops[i].Op) + + ' by ' + + escapeHTML(ops[i].Fn) + + '
\n'; + } + if (ops.length == 0) { + html += '(none)
\n'; + } + showLowFrame(html); + }; + + $(window).load(function() { + // Scroll window so that first selection is visible. + // (This means we don't need to emit id='L%d' spans for each line.) + // TODO(adonovan): ideally, scroll it so that it's under the pointer, + // but I don't know how to get the pointer y coordinate. + var elts = document.getElementsByClassName('selection'); + if (elts.length > 0) { + elts[0].scrollIntoView(); + } + }); + + // setupTypeInfo populates the "Implements" and "Method set" toggle for + // each type in the package doc. + function setupTypeInfo() { + for (var i in document.ANALYSIS_DATA) { + var data = document.ANALYSIS_DATA[i]; + + var el = document.getElementById('implements-' + i); + if (el != null) { + // el != null => data is TypeInfoJSON. + if (data.ImplGroups != null) { + el.innerHTML = implementsHTML(data); + el.parentNode.parentNode.style.display = 'block'; + } + } + + var el = document.getElementById('methodset-' + i); + if (el != null) { + // el != null => data is TypeInfoJSON. + if (data.Methods != null) { + el.innerHTML = methodsetHTML(data); + el.parentNode.parentNode.style.display = 'block'; + } + } + } + } + + function setupCallgraphs() { + if (document.CALLGRAPH == null) { + return; + } + document.getElementById('pkg-callgraph').style.display = 'block'; + + var treeviews = document.getElementsByClassName('treeview'); + for (var i = 0; i < treeviews.length; i++) { + var tree = treeviews[i]; + if (tree.id == null || tree.id.indexOf('callgraph-') != 0) { + continue; + } + var id = tree.id.substring('callgraph-'.length); + $(tree).treeview({ collapsed: true, animated: 'fast' }); + document.cgAddChildren(tree, tree, [id]); + tree.parentNode.parentNode.style.display = 'block'; + } + } + + document.cgAddChildren = function(tree, ul, indices) { + if (indices != null) { + for (var i = 0; i < indices.length; i++) { + var li = cgAddChild(tree, ul, document.CALLGRAPH[indices[i]]); + if (i == indices.length - 1) { + $(li).addClass('last'); + } + } + } + $(tree).treeview({ animated: 'fast', add: ul }); + }; + + // cgAddChild adds an
  • element for document.CALLGRAPH node cgn to + // the parent
      element ul. tree is the tree's root
        element. + function cgAddChild(tree, ul, cgn) { + var li = document.createElement('li'); + ul.appendChild(li); + li.className = 'closed'; + + var code = document.createElement('code'); + + if (cgn.Callees != null) { + $(li).addClass('expandable'); + + // Event handlers and innerHTML updates don't play nicely together, + // hence all this explicit DOM manipulation. + var hitarea = document.createElement('div'); + hitarea.className = 'hitarea expandable-hitarea'; + li.appendChild(hitarea); + + li.appendChild(code); + + var childUL = document.createElement('ul'); + li.appendChild(childUL); + childUL.setAttribute('style', 'display: none;'); + + var onClick = function() { + document.cgAddChildren(tree, childUL, cgn.Callees); + hitarea.removeEventListener('click', onClick); + }; + hitarea.addEventListener('click', onClick); + } else { + li.appendChild(code); + } + code.innerHTML += ' ' + makeAnchor(cgn.Func); + return li; + } +})(); diff --git a/docs/lib/godoc/gopher/pkg.png b/docs/lib/godoc/gopher/pkg.png new file mode 100644 index 0000000000000000000000000000000000000000..ac96551b5560ae794b87e46c6882743483fb6d58 GIT binary patch literal 5409 zcmV++72fKJP)EX>4Tx04UF6U|^o$=;GwcB*4H>P*hUn9^@Dq5gDbxex8Aiftdje5|fJy90LM; zKxTdhXgqT*)0qVOgts26(GF~&iMtEMVaXtB?^X?mX->RDfvmM3c;1dC8@c^ z3Z8k%`9%f!MTsS;DL}PQJ3xTfCBH<$Jux#+!N@?Bfyw|Bjt~|id=O#?kX%|+1`kRG z1_1^I1_K5Mh5&{{hI)nt3`ZH>Fp4v}FqSf|V7$j9#uUUff$0LXFmojHLgqItmMk4C zw^;R9TUqb1S+Y%I`^Fy5zMDgdql@DUXCmhXE=R5{+?w1Ac%*oy@(S@z;uGeZ#xKLa zSU^W$hoGzA6`@q2AHuyNDk6JD!$rS{O%gW}zami~DJOYMDqmV!`h-lGth($ixjuOp z`9BI<6$_R0l-??@RVh$4QT?fQP`yhdR8vXwgVq7Ve5b_{%L!I>*10xuwt;r8_SO!@jyg_i&Ppx{uJUdQ?#dqOp1NKp-Znn& zzQKM8{`mp*ffIw42JZ^F82U1tDMBvNDk>tnB4%dnp121IY>B!_VaW|CYf^8fb7WX# zW@gRJzL?9NXP;kDu&MA}v35yT>8i3f75bGWRl8~!YrX2G)<102YpQ8J+bY*q*nYHA zx~r)Bbgyb(WB=WWHj`#g{yQ~(+Tj@*Gy7+KpOY~6^nCLLOBabOZe8+iS?2P4D??VD zUgNTM-+Idp+cueO-m=wX+x8t+JNNH)-E($d*!~9xa}NDH(tb?*_==O(r_P;8KKtwZ zq>I{@j$TQ;`tSOjn>M%Z-l@N*eE-D5yvJfs_CL#fA@cIz>-@L!?=F03`egd~)z<~z z!+#3=I`yaZpX2}k01W^SG`erD8vp7;_0q)IJ~O&-hKDG>+k#BCnEv@06+u~1-^jbJ3&O``|iJz0O0^25c%%* z-wK&XCIo?hzf1!8{wOFi@T>ph7fQiPedmM&@uOwZwHpe$d`}G3Gobx5=?Tflab&9j z!IMApp>7A=?MX!NY+r8*>h!njDYYkoWvsFURxY+@;LEexGk75gFs5vE2rlVGW?(VB z`6!^jCGngq;Q8Lx9u!UJDL%;`^$hCRa}b4N?=k~Fhm+|S2_jHMToG9C_FjDyR?mRz z{O1?}Jg!Y`VhGyV|FEDHNn*yJwC?sKfPZ*N1%UDJu3qX2UeueOLd=DWB><#2vG%AQ zU<~HeeO|#DJ;hQ_eupUF!JaN$e20M%?8)bOo>)L$u)IhUiNwJlqGxb%aAmLB(Et#h z&c5aXftX;#P(A%8dWcT~7-K%!#*3Q@y#QadxjY#4KGEUriJo$kIbA#efH9zc%LO~* z+=^C40EjUXaut%?4CY!`dv@mBc&PFK#0W6|uv^Fc0m?H5u)sHoT?qt66yBa7z*Ktg z%(FS7;>^>lB>?sd^) zMvaQk$Zs;ac_xZfl2*eWYO?PJQ-hKL#JsS77k{9VgQF$?(8#f|$7|Xg95INpiV>cn zCi|R3L}1J?f0@#MiTmQv*xARPXdE2R6A>|g20$pYJ=f&mk3{^MIIGZ5(ubss*<0Jz z>Ew8h=XoZIcp;;D>~Vqk&YPzWqyhnD17pYbJJqOBlszoCcmHXXqRqxJ@B%34rFR5U zo9|eEOXwYdb75p+#L$DA=M5e`>&vLg6DEDLC$HJ&^kqrU@d>f6&aypLaVUCszCHb` zsE7sYGk5ICI6|Y&(*H~BGpwt<)nx@(d zOB2>zRXaFoW$um{h(PeD6UrctK6Z4{wB--)4Ues;Q>j~N%P4%f@BMS~MpcWZsa0<_cXnv?2379dDVGgSo&rd)Cz;+Z zVq-> zJjXfmqo03!cgdrY$5%%!it97}&_ktC*{ap*O`TSo!{xAAOv+tzuQqpiS)i-Pf{j*$ zjbS(3o$z6LzCxpZy!`cF_4&TCvb4Nr-Qa1TCA~2uE^76d*<~@AboH4D zxAblnKu0nuQuEuCGnQu$dH$9DpAPN+%iq5B?fpj;rPY^*Mvsh6-d38kZ_}15rA=y` z(cEsZ+B?ndT0_H{lwuR-k5iHb3k!mkfH8M_`Qhnr{=;+s_?+xt`={M0F1nMo?bFDZ z!RzB%0kr0>i=G@V&jdNxUd2`@r5hEt`oitnFUyoP4C;o6TaRVfZVfcX4o!)iZF!0A*yqm1~kx#`gQ; zka0r?4F6(b(z=6rwHmFeskyfJ&h`yOW*z{T`)*v~U4>GiHRueb<8N4a_-lyB=^&m1 z;D#Z2_`#f*0SPQieMFWP&jy1u@y`fAd;D-CV{VDh!G z*Be_}TC|3kxf(YCAQ`04KYQZGF>$lb$hoHjqbh@))c-iurL?HX)Eja|b?(MR=@m8r z@M^ZiTyJiwRq2!F)cNYD41z#H$DBW}d~C7H_ayEfvAiQ-6OStI@VcEpsR2;w;@|a6 zzE@jSc6z~*n=Kv!sCmP@8}h1V!-Du)i#On-zzzyrWZ!#U0C2DP&9|n2lC7zq&sw$N z@W}(m$~l0pj`;VX7fR)gMQbMSZFCdRrP>v9qDG}po?d715CB;KR1?6j8dT&VfWbCx zkY2&hL+ZIMPICw!%pRUJ0 zzIfxl$ICMupWYZ)clNl;!HTcH7N5fad)dN)sfE>zP1!MvN<9QPpRAd9U9%)w(r{fO+#B)9n=kr--Yn9DcCr-QTWPtV2 z!l_T@&S`P`<1>gQn?H?saga=Q5;!$;^0=YP%De>of_N90$D|D8V{Rb;W@{L|fK z>W1rIewF9&0`{8|Rt){F-Q&|U2z#;r^9e8gLH7JPSmwMEe`$BrfZHzq>d5;5m93hz z_OVY@-6;zgc$+Ric0l5hx`zD3nRiVdz_S0tK9?<=bRWmCW&HYolF43fLg}BD>FpN9 z+*LZ$(uEe_>41oL-W&OZ0{}Yp2#mm6^mR)HezdK;u4viRvu1!-M*sGXl@I2TZx@8k zgY(w*|3f;E`F>rO&Fa}bS5dS0I*2WvJmG~tFJw3YfC`T>5WsiY6si3pmfum9WXwKe z1?+L7>Rn9e#lE#4e*31^q4fYMFF)`&dFzygEvMJ&z^t>A`pEv}zt=kez}vXS=r79F zwiSQ;VCqdp;kK!ltjw@vYpcuO-vzLs{^SqjJL>Fl(xe?RxHzj^zt+T!Fx>`6pK zjDxFb`g3o-{L)*)Cw%xp^s0B~Nq8Be<58s$h)^Qpx^$BhuZ)+)R~Wl|tyr+9FPV6r zcTN60cVg11H)OJ@H>%D}u7H@lc{DE541p~r0<*h*ideq?g+cW?H_sz@H>IyXP;78`C0G>%;+@>N(Hjmu$cWLSJ6{K6k2$e3 zC1t>Ap69w8mM#K7JmbA~t-PvQWpsEUUbxRoyxWyM|@Y}T)RuU)d!KEV+!zI5GXJZ zou5(DX>~ZbKu4GC--&mZCe7V6GL4D!An|Ti%yg5FW?{y;X&o*v@8yG=L($$4U_6m> z%b-+VLS#sYuTZ`YT_r;=*cqXRy&(YNflFyF360h}mu@+`PUDbLWFfpah)}iM8nBvZ z9~+iSCwR=8&R9JH3mS$G0r7Y|vz-ZqFeDc3Hb>y(3Aa70S3U&9Bj=MRBpDF&y7v2V zC7xg)gy#f6C>eE!i6%(B$s|z4qH+%Cl@9?>6;-|S|BEK#2bGwT76mT3#sGYnt1Wr-WzvYf)kCjlqdTevXx4B_ieOllKd zB=!+R1ZF_Sqa|7oghcFtuPYc)8Ahhi2&FO&$ydDsRoN3?*AjI{vUZ7UM6vDr?>(E& z1;;2o>gkwqpu3&~;sM;f4awRGC|jU}KwgKHN#K@daAD?#ttV`7uFmNu)3EM}l&$Q} z{SvTeOdCSyut3!;6>=9Dr9%pUTst?AXb2FFuOr~$hysx(0(ursQ{dax0#pi|c3xO) z6U}YA^L0K{y?BGOd)3UF)Z9MxdT^s0tXtk6SIQd#il`w7YG3E&b z`Pf`eROCbZQ6TO-c`+&H4xG1i+lsvdS2tR)Z2#VQXsbIaezDBHPm^$wV zox7&AAQah!wqnb=7iSzT>yQuI-XmTT02e^^rISlV)9_F|0Rk=!{N{S<##ISx6hCKA z|LPszj<`?6ByXZfdI+8T-()LbYH0nLIalx&B17Wq8yv#kQKBb6D12*dlXULbn>~H{ zL_~W_gQL5v-chIOqcl|Up9)({R}b* zM>}3*dsrK~fK0A#e??IranjH8rq|el44?WiGuFXEMHS5QM`WCIx z1CXv&b92pmuMI8m572vmHzq{Sdx?8jT&%!Vj9z|b4jb|glMq8ZKpv-^dF-C+OR8<& z4I4x#^x5?!$y8W~sN&eOT4m&Y$%|7EzlYIFe1^Qn70gG=rU^%;XLNOce<|?v-h32_ z>jGO$cIH5VSM;`qczFG{%9L literal 0 HcmV?d00001 diff --git a/docs/lib/godoc/images/minus.gif b/docs/lib/godoc/images/minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..b15d7e102bec2ee560d5973b604ec0a9ed8cfd8d GIT binary patch literal 58 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 literal 0 HcmV?d00001 diff --git a/docs/lib/godoc/implements.html b/docs/lib/godoc/implements.html new file mode 100644 index 0000000..5f65b86 --- /dev/null +++ b/docs/lib/godoc/implements.html @@ -0,0 +1,9 @@ + diff --git a/docs/lib/godoc/jquery.js b/docs/lib/godoc/jquery.js new file mode 100644 index 0000000..bc3fbc8 --- /dev/null +++ b/docs/lib/godoc/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v1.8.2 jquery.com | jquery.org/license */ +(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write(""),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b
        a",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="
        t
        ",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="
        ",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;be.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="
        ",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="

        ",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b0)for(e=d;e=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/
  • ","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X
    ","
    "]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1>");try{for(;d1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]===""&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("
    ").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window); \ No newline at end of file diff --git a/docs/lib/godoc/jquery.treeview.css b/docs/lib/godoc/jquery.treeview.css new file mode 100644 index 0000000..cf3cc08 --- /dev/null +++ b/docs/lib/godoc/jquery.treeview.css @@ -0,0 +1,76 @@ +/* https://github.com/jzaefferer/jquery-treeview/blob/1.4.2/jquery.treeview.css */ +/* License: MIT. */ +.treeview, .treeview ul { + padding: 0; + margin: 0; + list-style: none; +} + +.treeview ul { + background-color: white; + margin-top: 4px; +} + +.treeview .hitarea { + background: url(images/treeview-default.gif) -64px -25px no-repeat; + height: 16px; + width: 16px; + margin-left: -16px; + float: left; + cursor: pointer; +} +/* fix for IE6 */ +* html .hitarea { + display: inline; + float:none; +} + +.treeview li { + margin: 0; + padding: 3px 0pt 3px 16px; +} + +.treeview a.selected { + background-color: #eee; +} + +#treecontrol { margin: 1em 0; display: none; } + +.treeview .hover { color: red; cursor: pointer; } + +.treeview li { background: url(images/treeview-default-line.gif) 0 0 no-repeat; } +.treeview li.collapsable, .treeview li.expandable { background-position: 0 -176px; } + +.treeview .expandable-hitarea { background-position: -80px -3px; } + +.treeview li.last { background-position: 0 -1766px } +.treeview li.lastCollapsable, .treeview li.lastExpandable { background-image: url(images/treeview-default.gif); } +.treeview li.lastCollapsable { background-position: 0 -111px } +.treeview li.lastExpandable { background-position: -32px -67px } + +.treeview div.lastCollapsable-hitarea, .treeview div.lastExpandable-hitarea { background-position: 0; } + +.treeview-red li { background-image: url(images/treeview-red-line.gif); } +.treeview-red .hitarea, .treeview-red li.lastCollapsable, .treeview-red li.lastExpandable { background-image: url(images/treeview-red.gif); } + +.treeview-black li { background-image: url(images/treeview-black-line.gif); } +.treeview-black .hitarea, .treeview-black li.lastCollapsable, .treeview-black li.lastExpandable { background-image: url(images/treeview-black.gif); } + +.treeview-gray li { background-image: url(images/treeview-gray-line.gif); } +.treeview-gray .hitarea, .treeview-gray li.lastCollapsable, .treeview-gray li.lastExpandable { background-image: url(images/treeview-gray.gif); } + +.treeview-famfamfam li { background-image: url(images/treeview-famfamfam-line.gif); } +.treeview-famfamfam .hitarea, .treeview-famfamfam li.lastCollapsable, .treeview-famfamfam li.lastExpandable { background-image: url(images/treeview-famfamfam.gif); } + +.treeview .placeholder { + background: url(images/ajax-loader.gif) 0 0 no-repeat; + height: 16px; + width: 16px; + display: block; +} + +.filetree li { padding: 3px 0 2px 16px; } +.filetree span.folder, .filetree span.file { padding: 1px 0 1px 16px; display: block; } +.filetree span.folder { background: url(images/folder.gif) 0 0 no-repeat; } +.filetree li.expandable span.folder { background: url(images/folder-closed.gif) 0 0 no-repeat; } +.filetree span.file { background: url(images/file.gif) 0 0 no-repeat; } diff --git a/docs/lib/godoc/jquery.treeview.edit.js b/docs/lib/godoc/jquery.treeview.edit.js new file mode 100644 index 0000000..4d0f15e --- /dev/null +++ b/docs/lib/godoc/jquery.treeview.edit.js @@ -0,0 +1,39 @@ +/* https://github.com/jzaefferer/jquery-treeview/blob/1.4.2/jquery.treeview.edit.js */ +/* License: MIT. */ +(function($) { + var CLASSES = $.treeview.classes; + var proxied = $.fn.treeview; + $.fn.treeview = function(settings) { + settings = $.extend({}, settings); + if (settings.add) { + return this.trigger("add", [settings.add]); + } + if (settings.remove) { + return this.trigger("remove", [settings.remove]); + } + return proxied.apply(this, arguments).bind("add", function(event, branches) { + $(branches).prev() + .removeClass(CLASSES.last) + .removeClass(CLASSES.lastCollapsable) + .removeClass(CLASSES.lastExpandable) + .find(">.hitarea") + .removeClass(CLASSES.lastCollapsableHitarea) + .removeClass(CLASSES.lastExpandableHitarea); + $(branches).find("li").andSelf().prepareBranches(settings).applyClasses(settings, $(this).data("toggler")); + }).bind("remove", function(event, branches) { + var prev = $(branches).prev(); + var parent = $(branches).parent(); + $(branches).remove(); + prev.filter(":last-child").addClass(CLASSES.last) + .filter("." + CLASSES.expandable).replaceClass(CLASSES.last, CLASSES.lastExpandable).end() + .find(">.hitarea").replaceClass(CLASSES.expandableHitarea, CLASSES.lastExpandableHitarea).end() + .filter("." + CLASSES.collapsable).replaceClass(CLASSES.last, CLASSES.lastCollapsable).end() + .find(">.hitarea").replaceClass(CLASSES.collapsableHitarea, CLASSES.lastCollapsableHitarea); + if (parent.is(":not(:has(>))") && parent[0] != this) { + parent.parent().removeClass(CLASSES.collapsable).removeClass(CLASSES.expandable) + parent.siblings(".hitarea").andSelf().remove(); + } + }); + }; + +})(jQuery); diff --git a/docs/lib/godoc/jquery.treeview.js b/docs/lib/godoc/jquery.treeview.js new file mode 100644 index 0000000..27cee3f --- /dev/null +++ b/docs/lib/godoc/jquery.treeview.js @@ -0,0 +1,250 @@ +/* + * Treeview 1.4.2 - jQuery plugin to hide and show branches of a tree + * + * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/ + * + * Copyright Jörn Zaefferer + * Released under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + */ + +;(function($) { + + // TODO rewrite as a widget, removing all the extra plugins + $.extend($.fn, { + swapClass: function(c1, c2) { + var c1Elements = this.filter('.' + c1); + this.filter('.' + c2).removeClass(c2).addClass(c1); + c1Elements.removeClass(c1).addClass(c2); + return this; + }, + replaceClass: function(c1, c2) { + return this.filter('.' + c1).removeClass(c1).addClass(c2).end(); + }, + hoverClass: function(className) { + className = className || "hover"; + return this.hover(function() { + $(this).addClass(className); + }, function() { + $(this).removeClass(className); + }); + }, + heightToggle: function(animated, callback) { + animated ? + this.animate({ height: "toggle" }, animated, callback) : + this.each(function(){ + jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ](); + if(callback) + callback.apply(this, arguments); + }); + }, + heightHide: function(animated, callback) { + if (animated) { + this.animate({ height: "hide" }, animated, callback); + } else { + this.hide(); + if (callback) + this.each(callback); + } + }, + prepareBranches: function(settings) { + if (!settings.prerendered) { + // mark last tree items + this.filter(":last-child:not(ul)").addClass(CLASSES.last); + // collapse whole tree, or only those marked as closed, anyway except those marked as open + this.filter((settings.collapsed ? "" : "." + CLASSES.closed) + ":not(." + CLASSES.open + ")").find(">ul").hide(); + } + // return all items with sublists + return this.filter(":has(>ul)"); + }, + applyClasses: function(settings, toggler) { + // TODO use event delegation + this.filter(":has(>ul):not(:has(>a))").find(">span").unbind("click.treeview").bind("click.treeview", function(event) { + // don't handle click events on children, eg. checkboxes + if ( this == event.target ) + toggler.apply($(this).next()); + }).add( $("a", this) ).hoverClass(); + + if (!settings.prerendered) { + // handle closed ones first + this.filter(":has(>ul:hidden)") + .addClass(CLASSES.expandable) + .replaceClass(CLASSES.last, CLASSES.lastExpandable); + + // handle open ones + this.not(":has(>ul:hidden)") + .addClass(CLASSES.collapsable) + .replaceClass(CLASSES.last, CLASSES.lastCollapsable); + + // create hitarea if not present + var hitarea = this.find("div." + CLASSES.hitarea); + if (!hitarea.length) + hitarea = this.prepend("
    ").find("div." + CLASSES.hitarea); + hitarea.removeClass().addClass(CLASSES.hitarea).each(function() { + var classes = ""; + $.each($(this).parent().attr("class").split(" "), function() { + classes += this + "-hitarea "; + }); + $(this).addClass( classes ); + }) + } + + // apply event to hitarea + this.find("div." + CLASSES.hitarea).click( toggler ); + }, + treeview: function(settings) { + + settings = $.extend({ + cookieId: "treeview" + }, settings); + + if ( settings.toggle ) { + var callback = settings.toggle; + settings.toggle = function() { + return callback.apply($(this).parent()[0], arguments); + }; + } + + // factory for treecontroller + function treeController(tree, control) { + // factory for click handlers + function handler(filter) { + return function() { + // reuse toggle event handler, applying the elements to toggle + // start searching for all hitareas + toggler.apply( $("div." + CLASSES.hitarea, tree).filter(function() { + // for plain toggle, no filter is provided, otherwise we need to check the parent element + return filter ? $(this).parent("." + filter).length : true; + }) ); + return false; + }; + } + // click on first element to collapse tree + $("a:eq(0)", control).click( handler(CLASSES.collapsable) ); + // click on second to expand tree + $("a:eq(1)", control).click( handler(CLASSES.expandable) ); + // click on third to toggle tree + $("a:eq(2)", control).click( handler() ); + } + + // handle toggle event + function toggler() { + $(this) + .parent() + // swap classes for hitarea + .find(">.hitarea") + .swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea ) + .swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea ) + .end() + // swap classes for parent li + .swapClass( CLASSES.collapsable, CLASSES.expandable ) + .swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable ) + // find child lists + .find( ">ul" ) + // toggle them + .heightToggle( settings.animated, settings.toggle ); + if ( settings.unique ) { + $(this).parent() + .siblings() + // swap classes for hitarea + .find(">.hitarea") + .replaceClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea ) + .replaceClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea ) + .end() + .replaceClass( CLASSES.collapsable, CLASSES.expandable ) + .replaceClass( CLASSES.lastCollapsable, CLASSES.lastExpandable ) + .find( ">ul" ) + .heightHide( settings.animated, settings.toggle ); + } + } + this.data("toggler", toggler); + + function serialize() { + function binary(arg) { + return arg ? 1 : 0; + } + var data = []; + branches.each(function(i, e) { + data[i] = $(e).is(":has(>ul:visible)") ? 1 : 0; + }); + $.cookie(settings.cookieId, data.join(""), settings.cookieOptions ); + } + + function deserialize() { + var stored = $.cookie(settings.cookieId); + if ( stored ) { + var data = stored.split(""); + branches.each(function(i, e) { + $(e).find(">ul")[ parseInt(data[i]) ? "show" : "hide" ](); + }); + } + } + + // add treeview class to activate styles + this.addClass("treeview"); + + // prepare branches and find all tree items with child lists + var branches = this.find("li").prepareBranches(settings); + + switch(settings.persist) { + case "cookie": + var toggleCallback = settings.toggle; + settings.toggle = function() { + serialize(); + if (toggleCallback) { + toggleCallback.apply(this, arguments); + } + }; + deserialize(); + break; + case "location": + var current = this.find("a").filter(function() { + return location.href.toLowerCase().indexOf(this.href.toLowerCase()) == 0; + }); + if ( current.length ) { + // TODO update the open/closed classes + var items = current.addClass("selected").parents("ul, li").add( current.next() ).show(); + if (settings.prerendered) { + // if prerendered is on, replicate the basic class swapping + items.filter("li") + .swapClass( CLASSES.collapsable, CLASSES.expandable ) + .swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable ) + .find(">.hitarea") + .swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea ) + .swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea ); + } + } + break; + } + + branches.applyClasses(settings, toggler); + + // if control option is set, create the treecontroller and show it + if ( settings.control ) { + treeController(this, settings.control); + $(settings.control).show(); + } + + return this; + } + }); + + // classes used by the plugin + // need to be styled via external stylesheet, see first example + $.treeview = {}; + var CLASSES = ($.treeview.classes = { + open: "open", + closed: "closed", + expandable: "expandable", + expandableHitarea: "expandable-hitarea", + lastExpandableHitarea: "lastExpandable-hitarea", + collapsable: "collapsable", + collapsableHitarea: "collapsable-hitarea", + lastCollapsableHitarea: "lastCollapsable-hitarea", + lastCollapsable: "lastCollapsable", + lastExpandable: "lastExpandable", + last: "last", + hitarea: "hitarea" + }); + +})(jQuery); diff --git a/docs/lib/godoc/methodset.html b/docs/lib/godoc/methodset.html new file mode 100644 index 0000000..1b339e3 --- /dev/null +++ b/docs/lib/godoc/methodset.html @@ -0,0 +1,9 @@ + diff --git a/docs/lib/godoc/package.html b/docs/lib/godoc/package.html new file mode 100644 index 0000000..a04b08b --- /dev/null +++ b/docs/lib/godoc/package.html @@ -0,0 +1,292 @@ + + +{{with .PDoc}} + + + {{if $.IsMain}} + {{/* command documentation */}} + {{comment_html $ .Doc}} + {{else}} + {{/* package documentation */}} +
    +
    +
    import "{{html .ImportPath}}"
    +
    +
    +
    Overview
    +
    Index
    + {{if $.Examples}} +
    Examples
    + {{end}} + {{if $.Dirs}} +
    Subdirectories
    + {{end}} +
    +
    + +
    + +
    +

    Overview ▾

    + {{comment_html $ .Doc}} + {{example_html $ ""}} +
    +
    + +
    + +
    +

    Index ▾

    + + +
    +
    + {{if .Consts}} +
    Constants
    + {{end}} + {{if .Vars}} +
    Variables
    + {{end}} + {{range .Funcs}} + {{$name_html := html .Name}} +
    {{node_html $ .Decl false | sanitize}}
    + {{end}} + {{range .Types}} + {{$tname_html := html .Name}} +
    type {{$tname_html}}
    + {{range .Funcs}} + {{$name_html := html .Name}} +
        {{node_html $ .Decl false | sanitize}}
    + {{end}} + {{range .Methods}} + {{$name_html := html .Name}} +
        {{node_html $ .Decl false | sanitize}}
    + {{end}} + {{end}} + {{if $.Notes}} + {{range $marker, $item := $.Notes}} +
    {{noteTitle $marker | html}}s
    + {{end}} + {{end}} +
    +
    + + {{if $.Examples}} +
    +

    Examples

    + +
    + {{range $.Examples}} +
    {{example_name .Name}}
    + {{end}} +
    +
    + {{end}} + + {{with .Filenames}} +

    Package files

    +

    + + {{range .}} + {{.|filename|html}} + {{end}} + +

    + {{end}} +
    +
    + + {{if ne $.CallGraph "null"}} + + {{end}} + + {{with .Consts}} +

    Constants

    + {{range .}} + {{comment_html $ .Doc}} +
    {{node_html $ .Decl true}}
    + {{end}} + {{end}} + {{with .Vars}} +

    Variables

    + {{range .}} + {{comment_html $ .Doc}} +
    {{node_html $ .Decl true}}
    + {{end}} + {{end}} + {{range .Funcs}} + {{/* Name is a string - no need for FSet */}} + {{$name_html := html .Name}} +

    func {{$name_html}} + + {{$since := since "func" "" .Name $.PDoc.ImportPath}} + {{if $since}}{{$since}}{{end}} +

    +
    {{node_html $ .Decl true}}
    + {{comment_html $ .Doc}} + {{example_html $ .Name}} + {{callgraph_html $ "" .Name}} + + {{end}} + {{range .Types}} + {{$tname := .Name}} + {{$tname_html := html .Name}} +

    type {{$tname_html}} + + {{$since := since "type" "" .Name $.PDoc.ImportPath}} + {{if $since}}{{$since}}{{end}} +

    + {{comment_html $ .Doc}} +
    {{node_html $ .Decl true}}
    + + {{range .Consts}} + {{comment_html $ .Doc}} +
    {{node_html $ .Decl true}}
    + {{end}} + + {{range .Vars}} + {{comment_html $ .Doc}} +
    {{node_html $ .Decl true}}
    + {{end}} + + {{example_html $ $tname}} + {{implements_html $ $tname}} + {{methodset_html $ $tname}} + + {{range .Funcs}} + {{$name_html := html .Name}} +

    func {{$name_html}} + + {{$since := since "func" "" .Name $.PDoc.ImportPath}} + {{if $since}}{{$since}}{{end}} +

    +
    {{node_html $ .Decl true}}
    + {{comment_html $ .Doc}} + {{example_html $ .Name}} + {{callgraph_html $ "" .Name}} + {{end}} + + {{range .Methods}} + {{$name_html := html .Name}} +

    func ({{html .Recv}}) {{$name_html}} + + {{$since := since "method" .Recv .Name $.PDoc.ImportPath}} + {{if $since}}{{$since}}{{end}} +

    +
    {{node_html $ .Decl true}}
    + {{comment_html $ .Doc}} + {{$name := printf "%s_%s" $tname .Name}} + {{example_html $ $name}} + {{callgraph_html $ .Recv .Name}} + {{end}} + {{end}} + {{end}} + + {{with $.Notes}} + {{range $marker, $content := .}} +

    {{noteTitle $marker | html}}s

    +
      + {{range .}} +
    • {{comment_html $ .Body}}
    • + {{end}} +
    + {{end}} + {{end}} +{{end}} + +{{with .PAst}} + {{range $filename, $ast := .}} + {{$filename|filename|html}}:
    {{node_html $ $ast false}}
    + {{end}} +{{end}} + +{{with .Dirs}} + {{/* DirList entries are numbers and strings - no need for FSet */}} + {{if $.PDoc}} +

    Subdirectories

    + {{end}} +
    +
    + + + + + + {{if not (or (eq $.Dirname "/src/cmd") $.DirFlat)}} + + + + {{end}} + + {{range .List}} + + {{if $.DirFlat}} + {{if .HasPkg}} + + {{end}} + {{else}} + + {{end}} + + + {{end}} +
    NameSynopsis
    ..
    + {{html .Path}} + + {{html .Name}} + + {{html .Synopsis}} +
    +
    +{{end}} diff --git a/docs/lib/godoc/packageroot.html b/docs/lib/godoc/packageroot.html new file mode 100644 index 0000000..98f570b --- /dev/null +++ b/docs/lib/godoc/packageroot.html @@ -0,0 +1,150 @@ + + +{{with .PAst}} + {{range $filename, $ast := .}} + {{$filename|filename|html}}:
    {{node_html $ $ast false}}
    + {{end}} +{{end}} + +{{with .Dirs}} + {{/* DirList entries are numbers and strings - no need for FSet */}} + {{if $.PDoc}} +

    Subdirectories

    + {{end}} +
    + +
    +
    Standard library
    + {{if hasThirdParty .List }} +
    Third party
    + {{end}} +
    Other packages
    +
    Sub-repositories
    +
    Community
    +
    +
    + +
    + +
    +

    Standard library ▾

    +
    + + + + + + + {{range .List}} + + {{if eq .RootType "GOROOT"}} + {{if $.DirFlat}} + {{if .HasPkg}} + + {{end}} + {{else}} + + {{end}} + + {{end}} + + {{end}} +
    NameSynopsis
    + {{html .Path}} + + {{html .Name}} + + {{html .Synopsis}} +
    +
    +
    +
    + + {{if hasThirdParty .List }} +
    + +
    +

    Third party ▾

    +
    + + + + + + + {{range .List}} + + {{if eq .RootType "GOPATH"}} + {{if $.DirFlat}} + {{if .HasPkg}} + + {{end}} + {{else}} + + {{end}} + + {{end}} + + {{end}} +
    NameSynopsis
    + {{html .Path}} + + {{html .Name}} + + {{html .Synopsis}} +
    +
    +
    +
    + {{end}} + +

    Other packages

    +

    Sub-repositories

    +

    + These packages are part of the Go Project but outside the main Go tree. + They are developed under looser compatibility requirements than the Go core. + Install them with "go get". +

    +
      +
    • benchmarks — benchmarks to measure Go as it is developed.
    • +
    • blogblog.golang.org's implementation.
    • +
    • buildbuild.golang.org's implementation.
    • +
    • crypto — additional cryptography packages.
    • +
    • debug — an experimental debugger for Go.
    • +
    • image — additional imaging packages.
    • +
    • mobile — experimental support for Go on mobile platforms.
    • +
    • net — additional networking packages.
    • +
    • perf — packages and tools for performance measurement, storage, and analysis.
    • +
    • pkgsite — home of the pkg.go.dev website.
    • +
    • review — a tool for working with Gerrit code reviews.
    • +
    • sync — additional concurrency primitives.
    • +
    • sys — packages for making system calls.
    • +
    • text — packages for working with text.
    • +
    • time — additional time packages.
    • +
    • tools — godoc, goimports, gorename, and other tools.
    • +
    • tourtour.golang.org's implementation.
    • +
    • exp — experimental and deprecated packages (handle with care; may change without warning).
    • +
    + +

    Community

    +

    + These services can help you find Open Source packages provided by the community. +

    + +{{end}} diff --git a/docs/lib/godoc/play.js b/docs/lib/godoc/play.js new file mode 100644 index 0000000..9cb1539 --- /dev/null +++ b/docs/lib/godoc/play.js @@ -0,0 +1,114 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +function initPlayground(transport) { + 'use strict'; + + function text(node) { + var s = ''; + for (var i = 0; i < node.childNodes.length; i++) { + var n = node.childNodes[i]; + if (n.nodeType === 1) { + if (n.tagName === 'BUTTON') continue; + if (n.tagName === 'SPAN' && n.className === 'number') continue; + if (n.tagName === 'DIV' || n.tagName === 'BR' || n.tagName === 'PRE') { + s += '\n'; + } + s += text(n); + continue; + } + if (n.nodeType === 3) { + s += n.nodeValue; + } + } + return s.replace('\xA0', ' '); // replace non-breaking spaces + } + + // When presenter notes are enabled, the index passed + // here will identify the playground to be synced + function init(code, index) { + var output = document.createElement('div'); + var outpre = document.createElement('pre'); + var running; + + if ($ && $(output).resizable) { + $(output).resizable({ + handles: 'n,w,nw', + minHeight: 27, + minWidth: 135, + maxHeight: 608, + maxWidth: 990, + }); + } + + function onKill() { + if (running) running.Kill(); + if (window.notesEnabled) updatePlayStorage('onKill', index); + } + + function onRun(e) { + var sk = e.shiftKey || localStorage.getItem('play-shiftKey') === 'true'; + if (running) running.Kill(); + output.style.display = 'block'; + outpre.textContent = ''; + run1.style.display = 'none'; + var options = { Race: sk }; + running = transport.Run(text(code), PlaygroundOutput(outpre), options); + if (window.notesEnabled) updatePlayStorage('onRun', index, e); + } + + function onClose() { + if (running) running.Kill(); + output.style.display = 'none'; + run1.style.display = 'inline-block'; + if (window.notesEnabled) updatePlayStorage('onClose', index); + } + + if (window.notesEnabled) { + playgroundHandlers.onRun.push(onRun); + playgroundHandlers.onClose.push(onClose); + playgroundHandlers.onKill.push(onKill); + } + + var run1 = document.createElement('button'); + run1.textContent = 'Run'; + run1.className = 'run'; + run1.addEventListener('click', onRun, false); + var run2 = document.createElement('button'); + run2.className = 'run'; + run2.textContent = 'Run'; + run2.addEventListener('click', onRun, false); + var kill = document.createElement('button'); + kill.className = 'kill'; + kill.textContent = 'Kill'; + kill.addEventListener('click', onKill, false); + var close = document.createElement('button'); + close.className = 'close'; + close.textContent = 'Close'; + close.addEventListener('click', onClose, false); + + var button = document.createElement('div'); + button.classList.add('buttons'); + button.appendChild(run1); + // Hack to simulate insertAfter + code.parentNode.insertBefore(button, code.nextSibling); + + var buttons = document.createElement('div'); + buttons.classList.add('buttons'); + buttons.appendChild(run2); + buttons.appendChild(kill); + buttons.appendChild(close); + + output.classList.add('output'); + output.appendChild(buttons); + output.appendChild(outpre); + output.style.display = 'none'; + code.parentNode.insertBefore(output, button.nextSibling); + } + + var play = document.querySelectorAll('div.playground'); + for (var i = 0; i < play.length; i++) { + init(play[i], i); + } +} diff --git a/docs/lib/godoc/playground.js b/docs/lib/godoc/playground.js new file mode 100644 index 0000000..2dd1753 --- /dev/null +++ b/docs/lib/godoc/playground.js @@ -0,0 +1,593 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +In the absence of any formal way to specify interfaces in JavaScript, +here's a skeleton implementation of a playground transport. + + function Transport() { + // Set up any transport state (eg, make a websocket connection). + return { + Run: function(body, output, options) { + // Compile and run the program 'body' with 'options'. + // Call the 'output' callback to display program output. + return { + Kill: function() { + // Kill the running program. + } + }; + } + }; + } + + // The output callback is called multiple times, and each time it is + // passed an object of this form. + var write = { + Kind: 'string', // 'start', 'stdout', 'stderr', 'end' + Body: 'string' // content of write or end status message + } + + // The first call must be of Kind 'start' with no body. + // Subsequent calls may be of Kind 'stdout' or 'stderr' + // and must have a non-null Body string. + // The final call should be of Kind 'end' with an optional + // Body string, signifying a failure ("killed", for example). + + // The output callback must be of this form. + // See PlaygroundOutput (below) for an implementation. + function outputCallback(write) { + } +*/ + +// HTTPTransport is the default transport. +// enableVet enables running vet if a program was compiled and ran successfully. +// If vet returned any errors, display them before the output of a program. +function HTTPTransport(enableVet) { + 'use strict'; + + function playback(output, data) { + // Backwards compatibility: default values do not affect the output. + var events = data.Events || []; + var errors = data.Errors || ''; + var status = data.Status || 0; + var isTest = data.IsTest || false; + var testsFailed = data.TestsFailed || 0; + + var timeout; + output({ Kind: 'start' }); + function next() { + if (!events || events.length === 0) { + if (isTest) { + if (testsFailed > 0) { + output({ + Kind: 'system', + Body: + '\n' + + testsFailed + + ' test' + + (testsFailed > 1 ? 's' : '') + + ' failed.', + }); + } else { + output({ Kind: 'system', Body: '\nAll tests passed.' }); + } + } else { + if (status > 0) { + output({ Kind: 'end', Body: 'status ' + status + '.' }); + } else { + if (errors !== '') { + // errors are displayed only in the case of timeout. + output({ Kind: 'end', Body: errors + '.' }); + } else { + output({ Kind: 'end' }); + } + } + } + return; + } + var e = events.shift(); + if (e.Delay === 0) { + output({ Kind: e.Kind, Body: e.Message }); + next(); + return; + } + timeout = setTimeout(function() { + output({ Kind: e.Kind, Body: e.Message }); + next(); + }, e.Delay / 1000000); + } + next(); + return { + Stop: function() { + clearTimeout(timeout); + }, + }; + } + + function error(output, msg) { + output({ Kind: 'start' }); + output({ Kind: 'stderr', Body: msg }); + output({ Kind: 'end' }); + } + + function buildFailed(output, msg) { + output({ Kind: 'start' }); + output({ Kind: 'stderr', Body: msg }); + output({ Kind: 'system', Body: '\nGo build failed.' }); + } + + var seq = 0; + return { + Run: function(body, output, options) { + seq++; + var cur = seq; + var playing; + $.ajax('/compile', { + type: 'POST', + data: { version: 2, body: body, withVet: enableVet }, + dataType: 'json', + success: function(data) { + if (seq != cur) return; + if (!data) return; + if (playing != null) playing.Stop(); + if (data.Errors) { + if (data.Errors === 'process took too long') { + // Playback the output that was captured before the timeout. + playing = playback(output, data); + } else { + buildFailed(output, data.Errors); + } + return; + } + if (!data.Events) { + data.Events = []; + } + if (data.VetErrors) { + // Inject errors from the vet as the first events in the output. + data.Events.unshift({ + Message: 'Go vet exited.\n\n', + Kind: 'system', + Delay: 0, + }); + data.Events.unshift({ + Message: data.VetErrors, + Kind: 'stderr', + Delay: 0, + }); + } + + if (!enableVet || data.VetOK || data.VetErrors) { + playing = playback(output, data); + return; + } + + // In case the server support doesn't support + // compile+vet in same request signaled by the + // 'withVet' parameter above, also try the old way. + // TODO: remove this when it falls out of use. + // It is 2019-05-13 now. + $.ajax('/vet', { + data: { body: body }, + type: 'POST', + dataType: 'json', + success: function(dataVet) { + if (dataVet.Errors) { + // inject errors from the vet as the first events in the output + data.Events.unshift({ + Message: 'Go vet exited.\n\n', + Kind: 'system', + Delay: 0, + }); + data.Events.unshift({ + Message: dataVet.Errors, + Kind: 'stderr', + Delay: 0, + }); + } + playing = playback(output, data); + }, + error: function() { + playing = playback(output, data); + }, + }); + }, + error: function() { + error(output, 'Error communicating with remote server.'); + }, + }); + return { + Kill: function() { + if (playing != null) playing.Stop(); + output({ Kind: 'end', Body: 'killed' }); + }, + }; + }, + }; +} + +function SocketTransport() { + 'use strict'; + + var id = 0; + var outputs = {}; + var started = {}; + var websocket; + if (window.location.protocol == 'http:') { + websocket = new WebSocket('ws://' + window.location.host + '/socket'); + } else if (window.location.protocol == 'https:') { + websocket = new WebSocket('wss://' + window.location.host + '/socket'); + } + + websocket.onclose = function() { + console.log('websocket connection closed'); + }; + + websocket.onmessage = function(e) { + var m = JSON.parse(e.data); + var output = outputs[m.Id]; + if (output === null) return; + if (!started[m.Id]) { + output({ Kind: 'start' }); + started[m.Id] = true; + } + output({ Kind: m.Kind, Body: m.Body }); + }; + + function send(m) { + websocket.send(JSON.stringify(m)); + } + + return { + Run: function(body, output, options) { + var thisID = id + ''; + id++; + outputs[thisID] = output; + send({ Id: thisID, Kind: 'run', Body: body, Options: options }); + return { + Kill: function() { + send({ Id: thisID, Kind: 'kill' }); + }, + }; + }, + }; +} + +function PlaygroundOutput(el) { + 'use strict'; + + return function(write) { + if (write.Kind == 'start') { + el.innerHTML = ''; + return; + } + + var cl = 'system'; + if (write.Kind == 'stdout' || write.Kind == 'stderr') cl = write.Kind; + + var m = write.Body; + if (write.Kind == 'end') { + m = '\nProgram exited' + (m ? ': ' + m : '.'); + } + + if (m.indexOf('IMAGE:') === 0) { + // TODO(adg): buffer all writes before creating image + var url = 'data:image/png;base64,' + m.substr(6); + var img = document.createElement('img'); + img.src = url; + el.appendChild(img); + return; + } + + // ^L clears the screen. + var s = m.split('\x0c'); + if (s.length > 1) { + el.innerHTML = ''; + m = s.pop(); + } + + m = m.replace(/&/g, '&'); + m = m.replace(//g, '>'); + + var needScroll = el.scrollTop + el.offsetHeight == el.scrollHeight; + + var span = document.createElement('span'); + span.className = cl; + span.innerHTML = m; + el.appendChild(span); + + if (needScroll) el.scrollTop = el.scrollHeight - el.offsetHeight; + }; +} + +(function() { + function lineHighlight(error) { + var regex = /prog.go:([0-9]+)/g; + var r = regex.exec(error); + while (r) { + $('.lines div') + .eq(r[1] - 1) + .addClass('lineerror'); + r = regex.exec(error); + } + } + function highlightOutput(wrappedOutput) { + return function(write) { + if (write.Body) lineHighlight(write.Body); + wrappedOutput(write); + }; + } + function lineClear() { + $('.lineerror').removeClass('lineerror'); + } + + // opts is an object with these keys + // codeEl - code editor element + // outputEl - program output element + // runEl - run button element + // fmtEl - fmt button element (optional) + // fmtImportEl - fmt "imports" checkbox element (optional) + // shareEl - share button element (optional) + // shareURLEl - share URL text input element (optional) + // shareRedirect - base URL to redirect to on share (optional) + // toysEl - toys select element (optional) + // enableHistory - enable using HTML5 history API (optional) + // transport - playground transport to use (default is HTTPTransport) + // enableShortcuts - whether to enable shortcuts (Ctrl+S/Cmd+S to save) (default is false) + // enableVet - enable running vet and displaying its errors + function playground(opts) { + var code = $(opts.codeEl); + var transport = opts['transport'] || new HTTPTransport(opts['enableVet']); + var running; + + // autoindent helpers. + function insertTabs(n) { + // find the selection start and end + var start = code[0].selectionStart; + var end = code[0].selectionEnd; + // split the textarea content into two, and insert n tabs + var v = code[0].value; + var u = v.substr(0, start); + for (var i = 0; i < n; i++) { + u += '\t'; + } + u += v.substr(end); + // set revised content + code[0].value = u; + // reset caret position after inserted tabs + code[0].selectionStart = start + n; + code[0].selectionEnd = start + n; + } + function autoindent(el) { + var curpos = el.selectionStart; + var tabs = 0; + while (curpos > 0) { + curpos--; + if (el.value[curpos] == '\t') { + tabs++; + } else if (tabs > 0 || el.value[curpos] == '\n') { + break; + } + } + setTimeout(function() { + insertTabs(tabs); + }, 1); + } + + // NOTE(cbro): e is a jQuery event, not a DOM event. + function handleSaveShortcut(e) { + if (e.isDefaultPrevented()) return false; + if (!e.metaKey && !e.ctrlKey) return false; + if (e.key != 'S' && e.key != 's') return false; + + e.preventDefault(); + + // Share and save + share(function(url) { + window.location.href = url + '.go?download=true'; + }); + + return true; + } + + function keyHandler(e) { + if (opts.enableShortcuts && handleSaveShortcut(e)) return; + + if (e.keyCode == 9 && !e.ctrlKey) { + // tab (but not ctrl-tab) + insertTabs(1); + e.preventDefault(); + return false; + } + if (e.keyCode == 13) { + // enter + if (e.shiftKey) { + // +shift + run(); + e.preventDefault(); + return false; + } + if (e.ctrlKey) { + // +control + fmt(); + e.preventDefault(); + } else { + autoindent(e.target); + } + } + return true; + } + code.unbind('keydown').bind('keydown', keyHandler); + var outdiv = $(opts.outputEl).empty(); + var output = $('
    ').appendTo(outdiv);
    +
    +    function body() {
    +      return $(opts.codeEl).val();
    +    }
    +    function setBody(text) {
    +      $(opts.codeEl).val(text);
    +    }
    +    function origin(href) {
    +      return ('' + href)
    +        .split('/')
    +        .slice(0, 3)
    +        .join('/');
    +    }
    +
    +    var pushedEmpty = window.location.pathname == '/';
    +    function inputChanged() {
    +      if (pushedEmpty) {
    +        return;
    +      }
    +      pushedEmpty = true;
    +      $(opts.shareURLEl).hide();
    +      window.history.pushState(null, '', '/');
    +    }
    +    function popState(e) {
    +      if (e === null) {
    +        return;
    +      }
    +      if (e && e.state && e.state.code) {
    +        setBody(e.state.code);
    +      }
    +    }
    +    var rewriteHistory = false;
    +    if (
    +      window.history &&
    +      window.history.pushState &&
    +      window.addEventListener &&
    +      opts.enableHistory
    +    ) {
    +      rewriteHistory = true;
    +      code[0].addEventListener('input', inputChanged);
    +      window.addEventListener('popstate', popState);
    +    }
    +
    +    function setError(error) {
    +      if (running) running.Kill();
    +      lineClear();
    +      lineHighlight(error);
    +      output
    +        .empty()
    +        .addClass('error')
    +        .text(error);
    +    }
    +    function loading() {
    +      lineClear();
    +      if (running) running.Kill();
    +      output.removeClass('error').text('Waiting for remote server...');
    +    }
    +    function run() {
    +      loading();
    +      running = transport.Run(
    +        body(),
    +        highlightOutput(PlaygroundOutput(output[0]))
    +      );
    +    }
    +
    +    function fmt() {
    +      loading();
    +      var data = { body: body() };
    +      if ($(opts.fmtImportEl).is(':checked')) {
    +        data['imports'] = 'true';
    +      }
    +      $.ajax('/fmt', {
    +        data: data,
    +        type: 'POST',
    +        dataType: 'json',
    +        success: function(data) {
    +          if (data.Error) {
    +            setError(data.Error);
    +          } else {
    +            setBody(data.Body);
    +            setError('');
    +          }
    +        },
    +      });
    +    }
    +
    +    var shareURL; // jQuery element to show the shared URL.
    +    var sharing = false; // true if there is a pending request.
    +    var shareCallbacks = [];
    +    function share(opt_callback) {
    +      if (opt_callback) shareCallbacks.push(opt_callback);
    +
    +      if (sharing) return;
    +      sharing = true;
    +
    +      var sharingData = body();
    +      $.ajax('https://play.golang.org/share', {
    +        processData: false,
    +        data: sharingData,
    +        type: 'POST',
    +        contentType: 'text/plain; charset=utf-8',
    +        complete: function(xhr) {
    +          sharing = false;
    +          if (xhr.status != 200) {
    +            alert('Server error; try again.');
    +            return;
    +          }
    +          if (opts.shareRedirect) {
    +            window.location = opts.shareRedirect + xhr.responseText;
    +          }
    +          var path = '/p/' + xhr.responseText;
    +          var url = origin(window.location) + path;
    +
    +          for (var i = 0; i < shareCallbacks.length; i++) {
    +            shareCallbacks[i](url);
    +          }
    +          shareCallbacks = [];
    +
    +          if (shareURL) {
    +            shareURL
    +              .show()
    +              .val(url)
    +              .focus()
    +              .select();
    +
    +            if (rewriteHistory) {
    +              var historyData = { code: sharingData };
    +              window.history.pushState(historyData, '', path);
    +              pushedEmpty = false;
    +            }
    +          }
    +        },
    +      });
    +    }
    +
    +    $(opts.runEl).click(run);
    +    $(opts.fmtEl).click(fmt);
    +
    +    if (
    +      opts.shareEl !== null &&
    +      (opts.shareURLEl !== null || opts.shareRedirect !== null)
    +    ) {
    +      if (opts.shareURLEl) {
    +        shareURL = $(opts.shareURLEl).hide();
    +      }
    +      $(opts.shareEl).click(function() {
    +        share();
    +      });
    +    }
    +
    +    if (opts.toysEl !== null) {
    +      $(opts.toysEl).bind('change', function() {
    +        var toy = $(this).val();
    +        $.ajax('/doc/play/' + toy, {
    +          processData: false,
    +          type: 'GET',
    +          complete: function(xhr) {
    +            if (xhr.status != 200) {
    +              alert('Server error; try again.');
    +              return;
    +            }
    +            setBody(xhr.responseText);
    +          },
    +        });
    +      });
    +    }
    +  }
    +
    +  window.playground = playground;
    +})();
    diff --git a/docs/lib/godoc/search.html b/docs/lib/godoc/search.html
    new file mode 100644
    index 0000000..3714e1d
    --- /dev/null
    +++ b/docs/lib/godoc/search.html
    @@ -0,0 +1,66 @@
    +
    +
    +{{ $colCount := tocColCount .}}
    +{{/* Generate the TOC */}}
    +
    +
    +{{with .Alert}}
    +	

    + {{html .}} +

    +{{end}} +{{with .Alt}} +

    + Did you mean: + {{range .Alts}} + {{html .}} + {{end}} +

    +{{end}} diff --git a/docs/lib/godoc/searchcode.html b/docs/lib/godoc/searchcode.html new file mode 100644 index 0000000..a032e64 --- /dev/null +++ b/docs/lib/godoc/searchcode.html @@ -0,0 +1,64 @@ + +{{$query_url := urlquery .Query}} +{{if not .Idents}} + {{with .Pak}} +

    Package {{html $.Query}}

    +

    + + {{range .}} + {{$pkg_html := pkgLink .Pak.Path | html}} + + {{end}} +
    {{$pkg_html}}
    +

    + {{end}} +{{end}} +{{with .Hit}} + {{with .Decls}} +

    Package-level declarations

    + {{range .}} + {{$pkg_html := pkgLink .Pak.Path | html}} +

    package {{html .Pak.Name}}

    + {{range .Files}} + {{$file := .File.Path}} + {{range .Groups}} + {{range .}} + {{$line := infoLine .}} + {{$file}}:{{$line}} + {{infoSnippet_html .}} + {{end}} + {{end}} + {{end}} + {{end}} + {{end}} + {{with .Others}} +

    Local declarations and uses

    + {{range .}} + {{$pkg_html := pkgLink .Pak.Path | html}} +

    package {{html .Pak.Name}}

    + {{range .Files}} + {{$file := .File.Path}} + {{$file}} + + {{range .Groups}} + + + + + + + {{end}} +
    {{index . 0 | infoKind_html}} + {{range .}} + {{$line := infoLine .}} + {{$line}} + {{end}} +
    + {{end}} + {{end}} + {{end}} +{{end}} diff --git a/docs/lib/godoc/searchdoc.html b/docs/lib/godoc/searchdoc.html new file mode 100644 index 0000000..84dcb34 --- /dev/null +++ b/docs/lib/godoc/searchdoc.html @@ -0,0 +1,24 @@ + +{{range $key, $val := .Idents}} + {{if $val}} +

    {{$key.Name}}

    + {{range $val}} + {{$pkg_html := pkgLink .Path | html}} + {{if eq "Packages" $key.Name}} + {{html .Path}} + {{else}} + {{$doc_html := docLink .Path .Name| html}} + {{html .Package}}.{{.Name}} + {{end}} + {{if .Doc}} +

    {{comment_html $ .Doc}}

    + {{else}} +

    No documentation available

    + {{end}} + {{end}} + {{end}} +{{end}} diff --git a/docs/lib/godoc/searchtxt.html b/docs/lib/godoc/searchtxt.html new file mode 100644 index 0000000..7e4a978 --- /dev/null +++ b/docs/lib/godoc/searchtxt.html @@ -0,0 +1,42 @@ + +{{$query_url := urlquery .Query}} +{{with .Textual}} + {{if $.Complete}} +

    {{html $.Found}} textual occurrences

    + {{else}} +

    More than {{html $.Found}} textual occurrences

    +

    + Not all files or lines containing "{{html $.Query}}" are shown. +

    + {{end}} +

    + + {{range .}} + {{$file := .Filename}} + + + + + + + + {{end}} + {{if not $.Complete}} + + {{end}} +
    + {{$file}}: + {{len .Lines}} + {{range .Lines}} + {{html .}} + {{end}} + {{if not $.Complete}} + ... + {{end}} +
    ...
    +

    +{{end}} diff --git a/docs/lib/godoc/style.css b/docs/lib/godoc/style.css new file mode 100644 index 0000000..e54ad6f --- /dev/null +++ b/docs/lib/godoc/style.css @@ -0,0 +1,897 @@ +body { + margin: 0; + font-family: Arial, sans-serif; + background-color: #fff; + line-height: 1.3; + text-align: center; + color: #222; +} +textarea { + /* Inherit text color from body avoiding illegible text in the case where the + * user has inverted the browsers custom text and background colors. */ + color: inherit; +} +pre, +code { + font-family: Menlo, monospace; + font-size: 0.875rem; +} +pre { + line-height: 1.4; + overflow-x: auto; +} +pre .comment { + color: #006600; +} +pre .highlight, +pre .highlight-comment, +pre .selection-highlight, +pre .selection-highlight-comment { + background: #ffff00; +} +pre .selection, +pre .selection-comment { + background: #ff9632; +} +pre .ln { + color: #999; + background: #efefef; +} +.ln { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + /* Ensure 8 characters in the document - which due to floating + * point rendering issues, might have a width of less than 1 each - are 8 + * characters wide, so a tab in the 9th position indents properly. See + * https://github.com/webcompat/web-bugs/issues/17530#issuecomment-402675091 + * for more information. */ + display: inline-block; + width: 8ch; +} + +.search-nav { + margin-left: 1.25rem; + font-size: 0.875rem; + column-gap: 1.25rem; + column-fill: auto; + column-width: 14rem; +} + +.search-nav .indent { + margin-left: 1.25rem; +} + +a, +.exampleHeading .text, +.expandAll { + color: #375eab; + text-decoration: none; +} +a:hover, +.exampleHeading .text:hover, +.expandAll:hover { + text-decoration: underline; +} +.article a { + text-decoration: underline; +} +.article .title a { + text-decoration: none; +} + +.permalink { + display: none; +} +:hover > .permalink { + display: inline; +} + +p, +li { + max-width: 50rem; + word-wrap: break-word; +} +p, +pre, +ul, +ol { + margin: 1.25rem; +} +pre { + background: #efefef; + padding: 0.625rem; + border-radius: 0.3125rem; +} + +h1, +h2, +h3, +h4, +.rootHeading { + margin: 1.25rem 0 1.25rem; + padding: 0; + color: #375eab; + font-weight: bold; +} +h1 { + font-size: 1.75rem; + line-height: 1; +} +h1 .text-muted { + color: #777; +} +h2 { + font-size: 1.25rem; + background: #e0ebf5; + padding: 0.5rem; + line-height: 1.25; + font-weight: normal; + overflow: auto; + overflow-wrap: break-word; +} +h2 a { + font-weight: bold; +} +h3 { + font-size: 1.25rem; + line-height: 1.25; + overflow: auto; + overflow-wrap: break-word; +} +h3, +h4 { + margin: 1.25rem 0.3125rem; +} +h4 { + font-size: 1rem; +} +.rootHeading { + font-size: 1.25rem; + margin: 0; +} + +h2 > span, +h3 > span { + float: right; + margin: 0 25px 0 0; + font-weight: normal; + color: #5279c7; +} + +dl { + margin: 1.25rem; +} +dd { + margin: 0 0 0 1.25rem; +} +dl, +dd { + font-size: 0.875rem; +} +div#nav table td { + vertical-align: top; +} + +#pkg-index h3 { + font-size: 1rem; +} +.pkg-dir { + padding: 0 0.625rem; +} +.pkg-dir table { + border-collapse: collapse; + border-spacing: 0; +} +.pkg-name { + padding-right: 0.625rem; +} +.alert { + color: #aa0000; +} + +.top-heading { + float: left; + padding: 1.313rem 0; + font-size: 1.25rem; + font-weight: normal; +} +.top-heading a { + color: #222; + text-decoration: none; +} + +#pkg-examples h3 { + float: left; +} + +#pkg-examples dl { + clear: both; +} + +.expandAll { + cursor: pointer; + float: left; + margin: 1.25rem 0; +} + +div#topbar { + background: #e0ebf5; + height: 4rem; + overflow: hidden; +} + +div#page { + width: 100%; +} +div#page > .container, +div#topbar > .container { + text-align: left; + margin-left: auto; + margin-right: auto; + padding: 0 1.25rem; +} +div#topbar > .container, +div#page > .container { + max-width: 59.38rem; +} +div#page.wide > .container, +div#topbar.wide > .container { + max-width: none; +} +div#plusone { + float: right; + clear: right; + margin-top: 0.3125rem; +} + +div#footer { + text-align: center; + color: #666; + font-size: 0.875rem; + margin: 2.5rem 0; +} + +div#menu > a, +input#search, +div#learn .buttons a, +div.play .buttons a, +div#blog .read a, +#menu-button { + padding: 0.625rem; + + text-decoration: none; + font-size: 1rem; + border-radius: 0.3125rem; +} +div#playground .buttons a, +div#menu > a, +input#search, +#menu-button { + border: 0.0625rem solid #375eab; +} +div#playground .buttons a, +div#menu > a, +#menu-button { + color: white; + background: #375eab; +} +#playgroundButton.active { + background: white; + color: #375eab; +} +a#start, +div#learn .buttons a, +div.play .buttons a, +div#blog .read a { + color: #222; + border: 0.0625rem solid #375eab; + background: #e0ebf5; +} +.download { + width: 9.375rem; +} + +div#menu { + text-align: right; + padding: 0.625rem; + white-space: nowrap; + max-height: 0; + -moz-transition: max-height 0.25s linear; + transition: max-height 0.25s linear; + width: 100%; +} +div#menu.menu-visible { + max-height: 31.25rem; +} +div#menu > a, +#menu-button { + margin: 0.625rem 0.125rem; + padding: 0.625rem; +} +::-webkit-input-placeholder { + color: #7f7f7f; + opacity: 1; +} +::placeholder { + color: #7f7f7f; + opacity: 1; +} +#menu .search-box { + display: inline-flex; + width: 8.75rem; +} +input#search { + background: white; + color: #222; + box-sizing: border-box; + -webkit-appearance: none; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right: 0; + margin-right: 0; + flex-grow: 1; + max-width: 100%; + min-width: 5.625rem; +} +input#search:-webkit-search-decoration { + -webkit-appearance: none; +} +input#search:-moz-ui-invalid { + box-shadow: unset; +} +input#search + button { + display: inline; + font-size: 1em; + background-color: #375eab; + color: white; + border: 0.0625rem solid #375eab; + border-top-left-radius: 0; + border-top-right-radius: 0.3125rem; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0.3125rem; + margin-left: 0; + cursor: pointer; +} +input#search + button span { + display: flex; +} +input#search + button svg { + fill: white; +} + +#menu-button { + display: none; + position: absolute; + right: 0.3125rem; + top: 0; + margin-right: 0.3125rem; +} +#menu-button-arrow { + display: inline-block; +} +.vertical-flip { + transform: rotate(-180deg); +} + +div.left { + float: left; + clear: left; + margin-right: 2.5%; +} +div.right { + float: right; + clear: right; + margin-left: 2.5%; +} +div.left, +div.right { + width: 45%; +} + +div#learn, +div#about { + padding-top: 1.25rem; +} +div#learn h2, +div#about { + margin: 0; +} +div#about { + font-size: 1.25rem; + margin: 0 auto 1.875rem; +} +a#start { + display: block; + padding: 0.625rem; + + text-align: center; + text-decoration: none; + border-radius: 0.3125rem; +} +a#start .big { + display: block; + font-weight: bold; + font-size: 1.25rem; +} +a#start .desc { + display: block; + font-size: 0.875rem; + font-weight: normal; + margin-top: 0.3125rem; +} + +div#learn .popout { + float: right; + display: block; + cursor: pointer; + font-size: 0.75rem; + background: url(/doc/share.png) no-repeat; + background-position: right center; + padding: 0.375rem 1.688rem; +} +div#learn pre, +div#learn textarea { + padding: 0; + margin: 0; + font-family: Menlo, monospace; + font-size: 0.875rem; +} +div#learn .input { + padding: 0.625rem; + margin-top: 0.625rem; + height: 9.375rem; + + border-top-left-radius: 0.3125rem; + border-top-right-radius: 0.3125rem; +} +div#learn .input textarea { + width: 100%; + height: 100%; + border: none; + outline: none; + resize: none; +} +div#learn .output { + border-top: none !important; + + padding: 0.625rem; + height: 3.688rem; + overflow: auto; + + border-bottom-right-radius: 0.3125rem; + border-bottom-left-radius: 0.3125rem; +} +div#learn .output pre { + padding: 0; + border-radius: 0; +} +div#learn .input, +div#learn .input textarea, +div#learn .output, +div#learn .output pre { + background: #ffffd8; +} +div#learn .input, +div#learn .output { + border: 0.0625rem solid #375eab; +} +div#learn .buttons { + float: right; + padding: 1.25rem 0 0.625rem 0; + text-align: right; +} +div#learn .buttons a { + height: 1rem; + margin-left: 0.3125rem; + padding: 0.625rem; +} +div#learn .toys { + margin-top: 0.5rem; +} +div#learn .toys select { + font-size: 0.875rem; + border: 0.0625rem solid #375eab; + margin: 0; +} +div#learn .output .exit { + display: none; +} + +div#video { + max-width: 100%; +} +div#blog, +div#video { + margin-top: 2.5rem; +} +div#blog > a, +div#blog > div, +div#blog > h2, +div#video > a, +div#video > div, +div#video > h2 { + margin-bottom: 0.625rem; +} +div#blog .title, +div#video .title { + display: block; + font-size: 1.25rem; +} +div#blog .when { + color: #666; + font-size: 0.875rem; +} +div#blog .read { + text-align: right; +} + +@supports (--c: 0) { + [style*='--aspect-ratio-padding:'] { + position: relative; + overflow: hidden; + padding-top: var(--aspect-ratio-padding); + } + + [style*='--aspect-ratio-padding:'] > * { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } +} + +.toggleButton { + cursor: pointer; +} +.toggle > .collapsed { + display: block; +} +.toggle > .expanded { + display: none; +} +.toggleVisible > .collapsed { + display: none; +} +.toggleVisible > .expanded { + display: block; +} + +table.codetable { + margin-left: auto; + margin-right: auto; + border-style: none; +} +table.codetable td { + padding-right: 0.625rem; +} +hr { + border-style: none; + border-top: 0.0625rem solid black; +} + +img.gopher { + float: right; + margin-left: 0.625rem; + margin-top: -2.5rem; + margin-bottom: 0.625rem; + z-index: -1; +} +h2 { + clear: right; +} + +/* example and drop-down playground */ +div.play { + padding: 0 1.25rem 2.5rem 1.25rem; +} +div.play pre, +div.play textarea, +div.play .lines { + padding: 0; + margin: 0; + font-family: Menlo, monospace; + font-size: 0.875rem; +} +div.play .input { + padding: 0.625rem; + margin-top: 0.625rem; + + border-top-left-radius: 0.3125rem; + border-top-right-radius: 0.3125rem; + + overflow: hidden; +} +div.play .input textarea { + width: 100%; + height: 100%; + border: none; + outline: none; + resize: none; + + overflow: hidden; +} +div#playground .input textarea { + overflow: auto; + resize: auto; +} +div.play .output { + border-top: none !important; + + padding: 0.625rem; + max-height: 12.5rem; + overflow: auto; + + border-bottom-right-radius: 0.3125rem; + border-bottom-left-radius: 0.3125rem; +} +div.play .output pre { + padding: 0; + border-radius: 0; +} +div.play .input, +div.play .input textarea, +div.play .output, +div.play .output pre { + background: #ffffd8; +} +div.play .input, +div.play .output { + border: 0.0625rem solid #375eab; +} +div.play .buttons { + float: right; + padding: 1.25rem 0 0.625rem 0; + text-align: right; +} +div.play .buttons a { + height: 1rem; + margin-left: 0.3125rem; + padding: 0.625rem; + cursor: pointer; +} +.output .stderr { + color: #933; +} +.output .system { + color: #999; +} + +/* drop-down playground */ +div#playground { + /* start hidden; revealed by javascript */ + display: none; +} +div#playground { + position: absolute; + top: 3.938rem; + right: 1.25rem; + padding: 0 0.625rem 0.625rem 0.625rem; + z-index: 1; + text-align: left; + background: #e0ebf5; + + border: 0.0625rem solid #b0bbc5; + border-top: none; + + border-bottom-left-radius: 0.3125rem; + border-bottom-right-radius: 0.3125rem; +} +div#playground .code { + width: 32.5rem; + height: 12.5rem; +} +div#playground .output { + height: 6.25rem; +} + +/* Inline runnable snippets (play.js/initPlayground) */ +#content .code pre, +#content .playground pre, +#content .output pre { + margin: 0; + padding: 0; + background: none; + border: none; + outline: 0 solid transparent; + overflow: auto; +} +#content .playground .number, +#content .code .number { + color: #999; +} +#content .code, +#content .playground, +#content .output { + width: auto; + margin: 1.25rem; + padding: 0.625rem; + border-radius: 0.3125rem; +} +#content .code, +#content .playground { + background: #e9e9e9; +} +#content .output { + background: #202020; +} +#content .output .stdout, +#content .output pre { + color: #e6e6e6; +} +#content .output .stderr, +#content .output .error { + color: rgb(244, 74, 63); +} +#content .output .system, +#content .output .exit { + color: rgb(255, 209, 77); +} +#content .buttons { + position: relative; + float: right; + top: -3.125rem; + right: 1.875rem; +} +#content .output .buttons { + top: -3.75rem; + right: 0; + height: 0; +} +#content .buttons .kill { + display: none; + visibility: hidden; +} +a.error { + font-weight: bold; + color: white; + background-color: darkred; + border-bottom-left-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; + padding: 0.125rem 0.25rem 0.125rem 0.25rem; /* TRBL */ +} + +#heading-narrow { + display: none; +} + +.downloading { + background: #f9f9be; + padding: 0.625rem; + text-align: center; + border-radius: 0.3125rem; +} + +@media (max-width: 58.125em) { + #heading-wide { + display: none; + } + #heading-narrow { + display: block; + } +} + +@media (max-width: 47.5em) { + .container .left, + .container .right { + width: auto; + float: none; + } + + div#about { + max-width: 31.25rem; + text-align: center; + } +} + +@media (min-width: 43.75em) and (max-width: 62.5em) { + div#menu > a { + margin: 0.3125rem 0; + font-size: 0.875rem; + } + + input#search { + font-size: 0.875rem; + } +} + +@media (max-width: 43.75em) { + body { + font-size: 0.9375rem; + } + + div#playground { + left: 0; + right: 0; + } + + pre, + code { + font-size: 0.866rem; + } + + div#page > .container { + padding: 0 0.625rem; + } + + div#topbar { + height: auto; + padding: 0.625rem; + } + + div#topbar > .container { + padding: 0; + } + + #heading-wide { + display: block; + } + #heading-narrow { + display: none; + } + + .top-heading { + float: none; + display: inline-block; + padding: 0.75rem; + } + + div#menu { + padding: 0; + min-width: 0; + text-align: left; + float: left; + } + + div#menu > a { + display: block; + margin-left: 0; + margin-right: 0; + } + + #menu .search-box { + display: flex; + width: 100%; + } + + #menu-button { + display: inline-block; + } + + p, + pre, + ul, + ol { + margin: 0.625rem; + } + + .pkg-synopsis { + display: none; + } + + img.gopher { + display: none; + } +} + +@media (max-width: 30em) { + #heading-wide { + display: none; + } + #heading-narrow { + display: block; + } +} + +@media print { + pre { + background: #fff; + border: 0.0625rem solid #bbb; + white-space: pre-wrap; + } +} diff --git a/docs/pkg/github.com/index.html b/docs/pkg/github.com/index.html new file mode 100644 index 0000000..3952f77 --- /dev/null +++ b/docs/pkg/github.com/index.html @@ -0,0 +1,121 @@ + + + + + + + + /src/github.com - GoPages + + + + + + + + + + + + + + + +
    +... +
    + + + + + +
    +
    + + +

    + Directory /src/github.com + +

    + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameSynopsis
    ..
    + point-c + + +
    + wglog + + +
    +
    + + + + + +
    +
    + + diff --git a/docs/pkg/github.com/point-c/index.html b/docs/pkg/github.com/point-c/index.html new file mode 100644 index 0000000..4b11ac1 --- /dev/null +++ b/docs/pkg/github.com/point-c/index.html @@ -0,0 +1,110 @@ + + + + + + + + /src/github.com/point-c - GoPages + + + + + + + + + + + + + + + +
    +... +
    + + + + + +
    +
    + + +

    + Directory /src/github.com/point-c + +

    + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + +
    NameSynopsis
    ..
    + wglog + + +
    +
    + + + + + +
    +
    + + diff --git a/docs/pkg/github.com/point-c/wglog/index.html b/docs/pkg/github.com/point-c/wglog/index.html new file mode 100644 index 0000000..0364a60 --- /dev/null +++ b/docs/pkg/github.com/point-c/wglog/index.html @@ -0,0 +1,333 @@ + + + + + + + + wglog - GoPages + + + + + + + + + + + + + + + +
    +... +
    + + + + + +
    +
    + + +

    + Package wglog + +

    + + + + + + + + + + + + + + + + + +
    +
    +
    import "github.com/point-c/wglog"
    +
    +
    +
    Overview
    +
    Index
    + + +
    +
    + +
    + +
    +

    Overview ▾

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

    Variables

    + +

    validNil is a set of reflect.Kind that will not panic on reflect.Value.IsNil if reflect.Value is valid. + +

    var validNil = []reflect.Kind{reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Pointer, reflect.Slice}
    + + + + + +

    func Async + + + +

    +
    func Async(logger *device.Logger) *device.Logger
    +

    Async will call the underlying logger methods in a goroutine. +If a field in logger is nil, it will not spawn a goroutine. + + + + + + + +

    func Multi + + + +

    +
    func Multi(loggers ...*device.Logger) *device.Logger
    +

    Multi will emit a logged message on all given loggers. + + + + + + + +

    func Noop + + + +

    +
    func Noop() *device.Logger
    +

    Noop is a logger that does not output anything. +The logger and both of its funcs are not nil. + + + + + + + +

    func Slog + + + +

    +
    func Slog(logger *slog.Logger) *device.Logger
    +

    Slog creates a device.Logger instance that is backed by a specified slog.Logger. +No args are passed to the slog logger, instead the message is created from the format string and args passed to the device.Logger.Verbosef and device.Logger.Errorf funcs. +Verbose messages are logged at the Debug level, while errors are logged at the Error level. + + + + + + + +

    func async + + + +

    +
    func async(fn FmtFn) (r func(string, ...any))
    + + + + + + + +

    func elseDefault + + + +

    +
    func elseDefault[T any](v, def T) T
    + + + + + + + +

    func multi + + + +

    +
    func multi(fns []FmtFn) func(string, ...any)
    + + + + + + + + +

    type FmtFn + + + +

    +

    FmtFn is a function capable of outputting a printf style string. + +

    type FmtFn func(string, ...any)
    + + + + + +
    var noopFn FmtFn = func(string, ...any) {}
    + + + + + + + + +

    func collectFns + + + +

    +
    func collectFns(loggers []*device.Logger) (verbosef, errorf []FmtFn)
    + + + + + + + + + + + + + + + + + + + +
    +
    + + diff --git a/docs/pkg/index.html b/docs/pkg/index.html new file mode 100644 index 0000000..7ff24c5 --- /dev/null +++ b/docs/pkg/index.html @@ -0,0 +1,161 @@ + + + + + + + + Packages - GoPages + + + + + + + + + + + + + + + +
    +... +
    + + + + + +
    +
    + + +

    + Packages + +

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

    Standard library ▾

    +
    + + + + + + + + + + + + + + + + + + + +
    NameSynopsis
    +
    +
    +
    + + + +

    Other packages

    +

    Sub-repositories

    +

    + These packages are part of the Go Project but outside the main Go tree. + They are developed under looser compatibility requirements than the Go core. + Install them with "go get". +

    +
      +
    • benchmarks — benchmarks to measure Go as it is developed.
    • +
    • blogblog.golang.org's implementation.
    • +
    • buildbuild.golang.org's implementation.
    • +
    • crypto — additional cryptography packages.
    • +
    • debug — an experimental debugger for Go.
    • +
    • image — additional imaging packages.
    • +
    • mobile — experimental support for Go on mobile platforms.
    • +
    • net — additional networking packages.
    • +
    • perf — packages and tools for performance measurement, storage, and analysis.
    • +
    • pkgsite — home of the pkg.go.dev website.
    • +
    • review — a tool for working with Gerrit code reviews.
    • +
    • sync — additional concurrency primitives.
    • +
    • sys — packages for making system calls.
    • +
    • text — packages for working with text.
    • +
    • time — additional time packages.
    • +
    • tools — godoc, goimports, gorename, and other tools.
    • +
    • tourtour.golang.org's implementation.
    • +
    • exp — experimental and deprecated packages (handle with care; may change without warning).
    • +
    + +

    Community

    +

    + These services can help you find Open Source packages provided by the community. +

    + + + + + + +
    +
    + + diff --git a/go.mod b/go.mod index 3305bb4..1a21497 100644 --- a/go.mod +++ b/go.mod @@ -3,16 +3,32 @@ module github.com/point-c/wglog go 1.21.1 require ( + github.com/johnstarich/go/gopages v0.1.25 github.com/stretchr/testify v1.8.4 golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173 ) require ( github.com/davecgh/go-spew v1.1.1 // indirect + github.com/emirpasic/gods v1.12.0 // indirect + github.com/go-git/gcfg v1.5.0 // indirect + github.com/go-git/go-billy/v5 v5.0.0 // indirect + github.com/go-git/go-git/v5 v5.0.0 // indirect + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect + github.com/johnstarich/go/pipe v0.2.0 // indirect + github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - golang.org/x/crypto v0.13.0 // indirect - golang.org/x/net v0.15.0 // indirect - golang.org/x/sys v0.12.0 // indirect + github.com/sergi/go-diff v1.1.0 // indirect + github.com/xanzy/ssh-agent v0.2.1 // indirect + github.com/yuin/goldmark v1.4.13 // indirect + golang.org/x/crypto v0.16.0 // indirect + golang.org/x/mod v0.14.0 // indirect + golang.org/x/net v0.19.0 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/tools v0.16.0 // indirect golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect + gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 167dd8e..b886645 100644 --- a/go.sum +++ b/go.sum @@ -1,25 +1,105 @@ +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= +github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= +github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= +github.com/go-git/go-billy/v5 v5.0.0 h1:7NQHvd9FVid8VL4qVUMm8XifBK+2xCoZ2lSk0agRrHM= +github.com/go-git/go-billy/v5 v5.0.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-git-fixtures/v4 v4.0.1 h1:q+IFMfLx200Q3scvt2hN79JsEzy4AmBTp/pqnefH+Bc= +github.com/go-git/go-git-fixtures/v4 v4.0.1/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= +github.com/go-git/go-git/v5 v5.0.0 h1:k5RWPm4iJwYtfWoxIJy4wJX9ON7ihPeZZYC1fLYDnpg= +github.com/go-git/go-git/v5 v5.0.0/go.mod h1:oYD8y9kWsGINPFJoLdaScGCN6dlKg23blmClfZwtUVA= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/johnstarich/go/gopages v0.1.25 h1:27L0wd/z4SSKDeejY/U7hcO47iVZXs6MiqopdYhFg7U= +github.com/johnstarich/go/gopages v0.1.25/go.mod h1:bDbbU12wQ9LqpnpMWXGPxODP6S2KXhkmeWGHdfbOXTk= +github.com/johnstarich/go/pipe v0.2.0 h1:YtM8f4JfpxlOhQoc47OZVIpyvsdBO+PByR2ABRt3tBc= +github.com/johnstarich/go/pipe v0.2.0/go.mod h1:3X9IdVJJnI7pkpzEH6np98wqHl55zFmbilKG+9+koMo= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd h1:Coekwdh0v2wtGp9Gmz1Ze3eVRAWJMLokvN3QjdzCHLY= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= -golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= -golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= -golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70= +github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= +github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= +golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44= golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM= +golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 h1:B82qJJgjvYKsXS9jeunTOisW56dUokqW/FOteYJJ/yg= golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2/go.mod h1:deeaetjYA+DHMHg+sMSMI58GrEteJUUzzw7en6TJQcI= golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173 h1:/jFs0duh4rdb8uIfPMv78iAJGcPKDeqAFnaLBropIC4= golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173/go.mod h1:tkCQ4FQXmpAgYVh++1cq16/dH4QJtmvpRv19DWGAHSA= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gvisor.dev/gvisor v0.0.0-20230927004350-cbd86285d259 h1:TbRPT0HtzFP3Cno1zZo7yPzEEnfu8EjLfl6IU9VfqkQ= diff --git a/multi.go b/multi.go index 1ea69cb..4c548e7 100644 --- a/multi.go +++ b/multi.go @@ -2,22 +2,27 @@ package wglog import "golang.zx2c4.com/wireguard/device" +// FmtFn is a function capable of outputting a printf style string. +type FmtFn func(string, ...any) + // Multi will emit a logged message on all given loggers. -// If the logger or any of its funcs are nil they will be skipped. func Multi(loggers ...*device.Logger) *device.Logger { - verbosef, errorf := func(string, ...any) {}, func(string, ...any) {} - appendFmtFn := func(fn1, fn2 func(string, ...any)) func(string, ...any) { - return func(s string, a ...any) { fn1(s, a...); fn2(s, a...) } - } + verbosef, errorf := collectFns(loggers) + return &device.Logger{Verbosef: multi(verbosef), Errorf: multi(errorf)} +} + +func collectFns(loggers []*device.Logger) (verbosef, errorf []FmtFn) { for _, l := range loggers { - if l != nil { - if l.Verbosef != nil { - verbosef = appendFmtFn(l.Verbosef, verbosef) - } - if l.Errorf != nil { - errorf = appendFmtFn(l.Errorf, errorf) - } + verbosef = append(verbosef, elseDefault(l.Verbosef, noopFn)) + errorf = append(errorf, elseDefault(l.Errorf, noopFn)) + } + return +} + +func multi(fns []FmtFn) func(string, ...any) { + return func(s string, a ...any) { + for _, fn := range fns { + fn(s, a...) } } - return &device.Logger{Verbosef: verbosef, Errorf: errorf} } diff --git a/multi_test.go b/multi_test.go index d90ba0a..701a9e5 100644 --- a/multi_test.go +++ b/multi_test.go @@ -21,17 +21,16 @@ func TestMulti(t *testing.T) { func getMultipleLoggers(t *testing.T, n int) (loggers []*device.Logger, checkAllCalled func()) { t.Helper() - checkAllCalled = func() { t.Helper() } + checkAllCalled = func() {} for i := 0; i < n; i++ { var v, e bool l := device.Logger{ - Verbosef: func(string, ...any) { t.Helper(); v = true }, - Errorf: func(string, ...any) { t.Helper(); e = true }, + Verbosef: func(string, ...any) { v = true }, + Errorf: func(string, ...any) { e = true }, } loggers = append(loggers, &l) fn := checkAllCalled checkAllCalled = func() { - t.Helper() fn() require.True(t, v) require.True(t, e) diff --git a/noop.go b/noop.go index 44c9e43..52c3de9 100644 --- a/noop.go +++ b/noop.go @@ -4,7 +4,7 @@ import ( "golang.zx2c4.com/wireguard/device" ) -var noopFn = func(string, ...any) {} +var noopFn FmtFn = func(string, ...any) {} // Noop is a logger that does not output anything. // The logger and both of its funcs are not nil. diff --git a/slog.go b/slog.go index 4905b1f..a40fdb8 100644 --- a/slog.go +++ b/slog.go @@ -4,22 +4,27 @@ import ( "fmt" "golang.zx2c4.com/wireguard/device" "log/slog" + "reflect" + "slices" ) // Slog creates a [device.Logger] instance that is backed by a specified [slog.Logger]. // No args are passed to the slog logger, instead the message is created from the format string and args passed to the [device.Logger].Verbosef and [device.Logger].Errorf funcs. // Verbose messages are logged at the Debug level, while errors are logged at the Error level. func Slog(logger *slog.Logger) *device.Logger { - logger = loggerElseDefault(logger, slog.Default()) + logger = elseDefault(logger, slog.Default()) return &device.Logger{ Verbosef: func(format string, args ...any) { logger.Debug(fmt.Sprintf(format, args...)) }, Errorf: func(format string, args ...any) { logger.Error(fmt.Sprintf(format, args...)) }, } } -func loggerElseDefault(logger, def *slog.Logger) *slog.Logger { - if logger == nil { +// validNil is a set of [reflect.Kind] that will not panic on [reflect.Value.IsNil] if [reflect.Value] is valid. +var validNil = []reflect.Kind{reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Pointer, reflect.Slice} + +func elseDefault[T any](v, def T) T { + if vv := reflect.ValueOf(v); slices.Contains(validNil, vv.Kind()) && (vv.IsZero() || vv.IsNil()) { return def } - return logger + return v } diff --git a/slog_test.go b/slog_test.go index 224d3cd..cce9af6 100644 --- a/slog_test.go +++ b/slog_test.go @@ -35,7 +35,6 @@ type testSlogHandler struct { } func (t *testSlogHandler) Check() { - t.t.Helper() if t.invalid != nil { require.NotNil(t.t, t.invalid, "level(%s)", t.invalid.String()) } @@ -44,7 +43,6 @@ func (t *testSlogHandler) Check() { } func (t *testSlogHandler) Handle(_ context.Context, record slog.Record) error { - t.t.Helper() switch record.Level { case slog.LevelDebug: t.debug = true @@ -56,6 +54,6 @@ func (t *testSlogHandler) Handle(_ context.Context, record slog.Record) error { return nil } -func (t *testSlogHandler) Enabled(context.Context, slog.Level) bool { t.t.Helper(); return true } -func (t *testSlogHandler) WithAttrs([]slog.Attr) slog.Handler { t.t.Helper(); return t } -func (t *testSlogHandler) WithGroup(string) slog.Handler { t.t.Helper(); return t } +func (t *testSlogHandler) Enabled(context.Context, slog.Level) bool { return true } +func (t *testSlogHandler) WithAttrs([]slog.Attr) slog.Handler { return t } +func (t *testSlogHandler) WithGroup(string) slog.Handler { return t }