From e9253de72e8b38eb8f4a85c9d07c91f057844888 Mon Sep 17 00:00:00 2001 From: Atilim Gunes Baydin Date: Sat, 12 Jun 2021 19:33:26 +0100 Subject: [PATCH 1/6] copy sig tooltips --- .../{copy-md-blue.png => copy-md-hover.png} | Bin .../img/{copy-blue.png => copy-xml-hover.png} | Bin docs/content/img/{copy.png => copy-xml.png} | Bin .../img/{github-blue.png => github-hover.png} | Bin src/FSharp.Formatting.ApiDocs/GenerateHtml.fs | 77 +++++++++--------- 5 files changed, 38 insertions(+), 39 deletions(-) rename docs/content/img/{copy-md-blue.png => copy-md-hover.png} (100%) rename docs/content/img/{copy-blue.png => copy-xml-hover.png} (100%) rename docs/content/img/{copy.png => copy-xml.png} (100%) rename docs/content/img/{github-blue.png => github-hover.png} (100%) diff --git a/docs/content/img/copy-md-blue.png b/docs/content/img/copy-md-hover.png similarity index 100% rename from docs/content/img/copy-md-blue.png rename to docs/content/img/copy-md-hover.png diff --git a/docs/content/img/copy-blue.png b/docs/content/img/copy-xml-hover.png similarity index 100% rename from docs/content/img/copy-blue.png rename to docs/content/img/copy-xml-hover.png diff --git a/docs/content/img/copy.png b/docs/content/img/copy-xml.png similarity index 100% rename from docs/content/img/copy.png rename to docs/content/img/copy-xml.png diff --git a/docs/content/img/github-blue.png b/docs/content/img/github-hover.png similarity index 100% rename from docs/content/img/github-blue.png rename to docs/content/img/github-hover.png diff --git a/src/FSharp.Formatting.ApiDocs/GenerateHtml.fs b/src/FSharp.Formatting.ApiDocs/GenerateHtml.fs index 6a9bda82f..ece3a353c 100644 --- a/src/FSharp.Formatting.ApiDocs/GenerateHtml.fs +++ b/src/FSharp.Formatting.ApiDocs/GenerateHtml.fs @@ -43,19 +43,19 @@ type HtmlRender(model: ApiDocModel) = | Some href -> a [Href href; Class"fsdocs-source-link" ] [ img [Src (sprintf "%scontent/img/github.png" root); Class "normal"] - img [Src (sprintf "%scontent/img/github-blue.png" root); Class "hover"] + img [Src (sprintf "%scontent/img/github-hover.png" root); Class "hover"] ] ] let removeParen (memberName:string) = let firstParen = memberName.IndexOf("(") if firstParen > 0 then memberName.Substring(0, firstParen) else memberName - // Copy XML sig for use in `cref` XML + // Copy XML sig for use in `cref` XML let copyXmlSigIcon xmlDocSig = - div [ Class"fsdocs-source-link"; OnClick (sprintf "Clipboard_CopyTo('')" xmlDocSig) ] [ - img [Src (sprintf "%scontent/img/copy.png" root); Class "normal"] - img [Src (sprintf "%scontent/img/copy-blue.png" root); Class "hover"] - ] + div [ Class"fsdocs-source-link"; Title "Copy signature (XML)"; OnClick (sprintf "Clipboard_CopyTo('')" xmlDocSig) ] [ + img [Src (sprintf "%scontent/img/copy-xml.png" root); Class "normal"] + img [Src (sprintf "%scontent/img/copy-xml-hover.png" root); Class "hover"] + ] let copyXmlSigIconForSymbol (symbol: FSharpSymbol) = [ match symbol with @@ -75,10 +75,10 @@ type HtmlRender(model: ApiDocModel) = if xmlDocSig.Contains("``") then "```" elif xmlDocSig.Contains("`") then "``" else "`" - div [ Class"fsdocs-source-link"; OnClick (sprintf "Clipboard_CopyTo('%scref:%s%s')" delim xmlDocSig delim) ] [ + div [ Class"fsdocs-source-link"; Title "Copy signature (Markdown)"; OnClick (sprintf "Clipboard_CopyTo('%scref:%s%s')" delim xmlDocSig delim) ] [ img [Src (sprintf "%scontent/img/copy-md.png" root); Class "normal"] - img [Src (sprintf "%scontent/img/copy-md-blue.png" root); Class "hover"] - ] + img [Src (sprintf "%scontent/img/copy-md-hover.png" root); Class "hover"] + ] let copyXmlSigIconForSymbolMarkdown (symbol: FSharpSymbol) = [ match symbol with @@ -104,7 +104,7 @@ type HtmlRender(model: ApiDocModel) = for m in members do tr [] [ td [Class "fsdocs-member-usage"] [ - + codeWithToolTip [ // This adds #MemberName anchor. These may be ambiguous due to overloading p [] [a [Id m.Name] [a [Href ("#"+m.Name)] [embed m.UsageHtml]]] @@ -147,13 +147,13 @@ type HtmlRender(model: ApiDocModel) = // where these have not been explicitly declared match m.FormatTypeArguments with | None -> () - | Some v -> + | Some v -> !!"Type parameters: " encode(v) ] ] ] - + td [Class "fsdocs-member-xmldoc"] [ div [Class "fsdocs-summary"] [ yield! copyXmlSigIconForSymbolMarkdown m.Symbol @@ -209,11 +209,11 @@ type HtmlRender(model: ApiDocModel) = td [] [embed html]] ] - for e in m.Comment.Notes do + for e in m.Comment.Notes do h5 [Class "fsdocs-note-header"] [!! "Note"] p [Class "fsdocs-note"] [embed e] - for e in m.Comment.Examples do + for e in m.Comment.Examples do h5 [Class "fsdocs-example-header"] [!! "Example"] p [Class "fsdocs-example"] [embed e] @@ -240,10 +240,10 @@ type HtmlRender(model: ApiDocModel) = ] ] tbody [] [ - for e in entities do + for e in entities do tr [] [ td [Class "fsdocs-entity-name"] [ - let nm = e.Name + let nm = e.Name let multi = (entities |> List.filter (fun e -> e.Name = nm) |> List.length) > 1 let nmWithSiffix = if multi then (if e.IsTypeDefinition then nm + " (Type)" else nm + " (Module)") else nm @@ -268,7 +268,7 @@ type HtmlRender(model: ApiDocModel) = let entity = info.Entity let members = entity.AllMembers |> List.filter (fun e -> not e.IsObsolete) let byCategory = members |> Categorise.getMembersByCategory - + let usageName = match info.ParentModule with | Some m when m.RequiresQualifiedAccess -> m.Name + "." + entity.Name @@ -283,12 +283,12 @@ type HtmlRender(model: ApiDocModel) = | None -> () | Some parentModule -> dt [] [!! "Parent Module: "; a [Href (parentModule.Url(root, collectionName, qualify, model.FileExtensions.InUrl))] [!! parentModule.Name ]] - + match entity.AbbreviatedType with | Some abbreviatedTyp -> dt [] [!! "Abbreviation For: "; embed abbreviatedTyp] - + | None -> () match entity.BaseType with @@ -305,10 +305,10 @@ type HtmlRender(model: ApiDocModel) = if i <> 0 then !! ", " embed ity ] - + if entity.Symbol.IsValueType then dt [] [!! ("Kind: Struct")] - + match entity.DelegateSignature with | Some d -> dt [] [!! ("Delegate Signature: "); embed d] @@ -338,30 +338,30 @@ type HtmlRender(model: ApiDocModel) = | Some r -> p [Class "fsdocs-remarks"] [embed r] | None -> () - for note in entity.Comment.Notes do + for note in entity.Comment.Notes do h5 [Class "fsdocs-note-header"] [!! "Note"] p [Class "fsdocs-note"] [embed note] - for example in entity.Comment.Examples do + for example in entity.Comment.Examples do h5 [Class "fsdocs-example-header"] [!! "Example"] p [Class "fsdocs-example"] [embed example] ] if (byCategory.Length > 1) then - // If there is more than 1 category in the type, generate TOC + // If there is more than 1 category in the type, generate TOC h3 [] [!!"Table of contents"] ul [] [ for (index, _, name) in byCategory do li [] [ a [Href (sprintf "#section%d" index)] [!! name ] ] ] - + // - + let nestedEntities = entity.NestedEntities |> List.filter (fun e -> not e.IsObsolete) - + if (nestedEntities.Length > 0) then div [] [ h3 [] [!! (if nestedEntities |> List.forall (fun e -> not e.IsTypeDefinition) then "Nested modules" @@ -369,7 +369,7 @@ type HtmlRender(model: ApiDocModel) = else "Types and nested modules")] yield! renderEntities nestedEntities ] - + for (index, ms, name) in byCategory do // Iterate over all the categories and print members. If there are more than one // categories, print the category heading (as

) and add XML comment from the type @@ -400,7 +400,7 @@ type HtmlRender(model: ApiDocModel) = match nsdocs.Remarks with | Some r -> p [] [embed r ] | None -> () - + | None -> () ] @@ -411,17 +411,17 @@ type HtmlRender(model: ApiDocModel) = for category in allByCategory do li [] [a [Href ("#category-" + category.CategoryIndex)] [!!category.CategoryName]] ] - + for category in allByCategory do if (allByCategory.Length > 1) then h3 [] [a [Class "anchor"; Name ("category-" + category.CategoryIndex); Href ("#category-" + category.CategoryIndex)] [!! category.CategoryName]] yield! renderEntities category.CategoryEntites - ] + ] let tableOfNamespacesAux () = [ let categorise = Categorise.model model - + for _allByCategory, ns in categorise do // Generate the entry for the namespace @@ -439,15 +439,15 @@ type HtmlRender(model: ApiDocModel) = [ // For FSharp.Core we make all entries available to other docs else there's not a lot else to show. // - // For non-FSharp.Core we only show one link "API Reference" in the nav menu + // For non-FSharp.Core we only show one link "API Reference" in the nav menu if otherDocs && model.Collection.CollectionName <> "FSharp.Core" then li [Class "nav-header"] [!! "API Reference"] - li [ Class "nav-item" ] [a [Class "nav-link"; Href (model.IndexFileUrl(root, collectionName, qualify, model.FileExtensions.InUrl))] [!! "All Namespaces" ] ] + li [ Class "nav-item" ] [a [Class "nav-link"; Href (model.IndexFileUrl(root, collectionName, qualify, model.FileExtensions.InUrl))] [!! "All Namespaces" ] ] else let categorise = Categorise.model model - - let someExist = categorise.Length > 0 + + let someExist = categorise.Length > 0 if someExist then li [Class "nav-header"] [!! "Namespaces"] @@ -455,7 +455,7 @@ type HtmlRender(model: ApiDocModel) = for allByCategory, ns in categorise do // Generate the entry for the namespace - li [ Class ("nav-item" + + li [ Class ("nav-item" + // add the 'active' class if this is the namespace of the thing being shown match nsOpt with | Some ns2 when ns.Name = ns2.Name -> " active" @@ -521,7 +521,7 @@ type HtmlRender(model: ApiDocModel) = ] ] let pageTitle = sprintf "%s (API Reference)" collectionName - let toc = listOfNamespacesNav false None + let toc = listOfNamespacesNav false None let substitutions = getSubstitutons model.Substitutions toc content pageTitle let outFile = Path.Combine(outDir, model.IndexOutputFile(collectionName, model.Qualify, model.FileExtensions.InFile) ) printfn " Generating %s" outFile @@ -547,4 +547,3 @@ type HtmlRender(model: ApiDocModel) = let outFile = Path.Combine(outDir, info.Entity.OutputFile(collectionName, model.Qualify, model.FileExtensions.InFile)) printfn " Generating %s" outFile SimpleTemplating.UseFileAsSimpleTemplate (substitutions, templateOpt, outFile) - From fe649ec3d38e296cf62d30fe2d097442680b198a Mon Sep 17 00:00:00 2001 From: Atilim Gunes Baydin Date: Sat, 12 Jun 2021 19:37:52 +0100 Subject: [PATCH 2/6] github tooltip --- src/FSharp.Formatting.ApiDocs/GenerateHtml.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FSharp.Formatting.ApiDocs/GenerateHtml.fs b/src/FSharp.Formatting.ApiDocs/GenerateHtml.fs index ece3a353c..578c831e4 100644 --- a/src/FSharp.Formatting.ApiDocs/GenerateHtml.fs +++ b/src/FSharp.Formatting.ApiDocs/GenerateHtml.fs @@ -41,7 +41,7 @@ type HtmlRender(model: ApiDocModel) = [ match url with | None -> () | Some href -> - a [Href href; Class"fsdocs-source-link" ] [ + a [Href href; Class"fsdocs-source-link"; Title "Source on GitHub" ] [ img [Src (sprintf "%scontent/img/github.png" root); Class "normal"] img [Src (sprintf "%scontent/img/github-hover.png" root); Class "hover"] ] ] From f69b68cc1f2c210f729565903082bcd204c3d935 Mon Sep 17 00:00:00 2001 From: Atilim Gunes Baydin Date: Sun, 13 Jun 2021 00:29:25 +0100 Subject: [PATCH 3/6] update icons --- docs/content/img/copy-md-hover.png | Bin 754 -> 2886 bytes docs/content/img/copy-md.png | Bin 682 -> 3351 bytes docs/content/img/copy-xml-hover.png | Bin 727 -> 3192 bytes docs/content/img/copy-xml.png | Bin 661 -> 3486 bytes docs/content/img/github-hover.png | Bin 817 -> 7695 bytes docs/content/img/github.png | Bin 806 -> 7642 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/content/img/copy-md-hover.png b/docs/content/img/copy-md-hover.png index 6a952b7a7e22651bf678ed6fa05be35e73dc5a2b..b14e94129a15d575b23e6298d364c4272593c1a8 100644 GIT binary patch literal 2886 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 literal 754 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0*6UNK~y+TV?1-} zAOkf36O^VH3?YN=+`Tt**8JCR-a`3=0Ct1s&RaBT(hO&3`^>C@gNKelMezbetYzmG z-??*-m6i4H-@lp~YT@C*C8gENm(4FOsrvl+3lkI5j~_o=oEBKFMtX$FvP{Def#!}i;D}&M*>i7aCETk?rJ%5^!UAd58l830E|Q-A;IF(>dNvWV2XM3 z=52dtUvGCS%xnMufB*hHD>KF0%bl5-87c^j%71?a1q6T$8*57-Dk`Z0dKn@G(GMgc zT&N@e{QV0|HEe8bs;bILN(ykKs-ldXP+3@5{xkfCuz{uk-325eT&Rm|Z7i#68Z|Z5 ze*eZ2kU+r5$oTK?-xDWJOG=1Cg}`P(S@19d0${iJw9mjD0& diff --git a/docs/content/img/copy-md.png b/docs/content/img/copy-md.png index 3a83b331b365f8daddc94b22895c31f60823bce5..72de73815f7f422e1f359a1e8c10b5ea5680cbf1 100644 GIT binary patch literal 3351 zcmb_edoo!c$iPrl~c*hp!5a{YEy*|xH4s3q9w!~|{f zfRaE%m45U4$n*U?t|50AX7Z|CyTn(v^UB~!rO^w@b?7)}q?zi6FZgC&MTOgSSQ?&nr+cvig#)-Q@`P)bU5JG`_R_PY0-`AtRcekyUiM^vZ9bi z@`5H58+_Hg!@r)g?~y;Wlz;WmtMT%lt68VIeAU##;omO(viqZ&RsS#QA>_t`raJES zU%REghK;Nz)~kw%e})Wwok<;0IYz*H3LW-~tSnTxsnwY`$K@^#3k+XZoI}mFh{5EV92!rqNNFbRVS#qoC#mJNYr`5?Bgn~x(jC7(hl&IU8TBgu#JI1&9EO)K#lnzuU!e40mI zMj$Xz`Wx!zkd;I3H-sda6CxlQOuIcSfw4dPK(Cn+2ZVadC*TO6Z+sI2nXR1^c(Qrt z*)6hD#Y{~o#U^Lg!X_{gy!<}HYEePa8O?g++Gv%$)338ebMSBLTegrrW8emC2iV*U zg=`N)>c>ir*O>;wP;Wbi|V_;;Wr0Pr7~hXLRpV2Vi=fm5R zsQ%M2o3nB9x<}GATO6EB4*JfHQw0Xsts-NFSAo%^<(vI-}p6agK8XcoLBaC-h?8+z zYTc{9(tQs^)@HO5Rtr3MIc?)wRKE+-O1NVo!NEp7y}jRcATm8ugA?b$n|ak>)`gCn zxAJ|U67I_BD$0ce?|FukIzL&NSC{ogzhfY5VdBzzkE+Jp9V1bIb0wKCSfJME1PJ4~ z9cN!Oej=P#o-nplaBCy|J)2FTP&Cr$iU|*js74ON52a~zR}mL(xLbQFl`9Xh*YC+} zC8IqBth@0{OjFZ!7|Z+m2BO)Y#bhBAN4>Hy z`oZvC&#L|=st$eHRcgzPLMCGnUv$R0YZuPV>Y_&hjW-^kX9_xf#$`4dOuHV2AM;4$ z+(|31o+=aIo)#1oobC0sa8~7b?YQ@x&}D%Dgjs&j=ZB9mVyI@?dMT^5?2;&cWa)hCrUfA>jK|66zgVVww0AucUiP_yKiq=Q{EGfqu0# z($Qy6mP^s3{mQ^AOB1I*^?WF(Z=mUD`o>zVKVh*sfbne!%Ix!^(P znc-Cz{Bhec4_=vEt+i@KTkb*csC{gNAAWUy!&XE@T>uPQp__aP z`=TWIo?o8wf$3=nrl86eyLrXD{qN8M;WZWhpht1u_{RE&y}a{rFOy>m(Y#$b zOlKTrlUAZd&(a~7*k-W3F(RhHrvcB4YR(MmzqlyNi!#iRWN~vA0qir((ueAXac4N0Kbp^j_Hni2C^vox6E0$;l-* zvMIkTrP0U! z{^h#h{S+>jyWBTm)tkXPr^Co12`&FFMYMyI@n}0nMq{cE#Spq9uu%Ze?)XX8gK_^WBn>HSHuyhji62 zA>v(Z%LUsoJyHQpskh~&N!7x$AyaDE*6~mIfPPDu%9XUb!EaxPQE~Om&Ajy&y2%o8 zIx)JUJo0~fuT^=EOW+TaFGIDZ8O2xndAh*$qN7x%0!Y|&y?od0p_1oF+ofu zND!Zpfni(GWP~d-L_jlG-9heF=xiwf6QLYd290zRTvj2I*}GtwD>kl26|Oqg9LM2f zAPih`iK*d#B87lF+&4g^hD#&0!`kyF4{kpPs!c1h7a*^RP-BjM!&^_7Oq5d;^?A>3 zpV_4-?`4n8KpsQZH-cpjNn^Xv%$>1;7d5;?f~*&dmaj?zlxq%L*kk?d`(Muf&F}w% zUP-n@DXH^g4=PFlprOFJxSFIN2tGmw@c`(;f#gXb3<5x`NxF)?5sTdm&cQH`VUOiR zBw?t|ogf~D`7g|MCy0For3CsNeIpK+A)^m~SQ+wE0YCzX2ovi4353%eIGKPkej`CY zhcB$U#@c#Ebu literal 682 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 ByA%Kb literal 727 zcmV;|0x127P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0&Gb{K~y+TW88D{ z1_Lz!6O^VH3^{}D-MzJN_T)EjUP1Y|0X~D4%%47ca<{FMduevU(L;NoqBsD0td-{_ z-@kK{g_ZU1-@j@a+5us)^<~+!mTsym&HDQJGb0n@&mTYRoIUc(>Y*B7fCWl}!Iewr z#3iIUC(VWO85rhF>*L_yx_0^eoMoG#LJSO92_fIUedXffhVsDx#cSWbei0H8g>t|k zC97!7j-xIfeo#Ibh)GC&{`?8bfdLd3F)}i7aB!|)wPb2<3kN4BM39M*321+4Oj3Go z8IXJS)Un^ce*ORV4s$L~ zK*W&&N?@NpapdxaGf5c*P(CW~b2J7zO;TD`LQ3ZSyEnD16XX?@p>mim;^F0+IjL*) z(s@um14DFDW@36i&@B+|^QVu22*~*Q^$SD<0?-Zm_49{cNR+I+A`2@Uko)`hFMT63 zAftcg(!%s;uo5Wv`{xgo1qSF|1IBcGYA(<=CMIZv{`&P32t~!jZ(O^SlNgqfUl9_O z@b}+8W|#s9KsV_A-COV9zCrdH1lTyZHgrxtarEHBd$&J)co!C(EGQ%ll>-Abul@i2 z?OS3-zKf?HGYdlM-`~IdfDhtq#|No&J7(mZ!z79s!t^I#~|Az8W0V5;BzkmO_n<_W$KMNIt0d#|a zLAz?nTqY)FC?6I4|NkEt36b$>P(BhsH;8P2uRJ0N3^s!p7y$M~@t`*CHl+Xn002ov JPDHLkV1j@lLIeN+ diff --git a/docs/content/img/copy-xml.png b/docs/content/img/copy-xml.png index 8fcdc1d4ea6377f7d68fb2cca8909251c31e90d2..e5606b907bc27d4e4df733971aa952a118f89a09 100644 GIT binary patch literal 3486 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 diff --git a/docs/content/img/github.png b/docs/content/img/github.png index 5d48d83fab5dfd443c9e3bec2a262537f4ecece8..ff34f3540f4d1ccc47407cfa74a25632becbe6c2 100644 GIT binary patch literal 7642 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 literal 806 zcmV+>1KIqEP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qRNAp5A0007&NklyiRZ_dM+J&{THbRBQ2Kj2Fi3@98KxAP};1Qsq1e#z#5bWXI>-9m9nx-eS z;LglB+?hM`xSRik)nhS zmCyV8bF;H=Ha46NhhuklV|{(jZ1(wl)$3~{K#t_UT3rwOUQwkUZk`IKqA(%lf9*?v0qwene zR;dZU^Lb1hBmT-{IBbo$TCdkjbKAnTx5p?-g#s^De}1#c#Jt$`1kaP~`+!0~W|YN+ z1vu+M0lyz-tjJ5dUD4Bn)qlUeok}JJ)*bM-JkP(~+?2~?Oa*pybcASK2n(SZ9YxLf zfP4*w&?%DfdTmWmps=s3FfucI2FS$Jg@Du3Q_{TeCnq1BPRzGqVgip!q6FWLkHr!& zX;)YD?2JUI5P;7WVpEfo*=#nQPNP$}DUAsbPaLsNZa0mIg#c*bUTA@7W(JmQY?D|B zyXtniXh1-N5P;G~hlfdatg$pyLHs(6CL9h^?=6~z08Ezm;NY3XlFQ|&OTf=``nkmt k3 Date: Sun, 13 Jun 2021 00:37:41 +0100 Subject: [PATCH 4/6] icon size --- docs/content/fsdocs-default.css | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/content/fsdocs-default.css b/docs/content/fsdocs-default.css index 11aa7e874..1452455b2 100644 --- a/docs/content/fsdocs-default.css +++ b/docs/content/fsdocs-default.css @@ -379,6 +379,8 @@ body { .fsdocs-source-link img { border-style: none; margin-left: 10px; + width: auto; + height: 1.4em; } .fsdocs-source-link .hover { @@ -409,7 +411,7 @@ body { } /*-------------------------------------------------------------------------- - + /*--------------------------------------------------------------------------*/ #fsdocs-content table.pre pre { From 65cdf16d5d738fa84703b8f607ebe125746c7e47 Mon Sep 17 00:00:00 2001 From: Atilim Gunes Baydin Date: Sun, 13 Jun 2021 00:48:06 +0100 Subject: [PATCH 5/6] fix bug --- src/FSharp.Formatting.ApiDocs/GenerateHtml.fs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/FSharp.Formatting.ApiDocs/GenerateHtml.fs b/src/FSharp.Formatting.ApiDocs/GenerateHtml.fs index 578c831e4..7b206bf96 100644 --- a/src/FSharp.Formatting.ApiDocs/GenerateHtml.fs +++ b/src/FSharp.Formatting.ApiDocs/GenerateHtml.fs @@ -41,7 +41,7 @@ type HtmlRender(model: ApiDocModel) = [ match url with | None -> () | Some href -> - a [Href href; Class"fsdocs-source-link"; Title "Source on GitHub" ] [ + a [Href href; Class"fsdocs-source-link"; Title"Source on GitHub" ] [ img [Src (sprintf "%scontent/img/github.png" root); Class "normal"] img [Src (sprintf "%scontent/img/github-hover.png" root); Class "hover"] ] ] @@ -52,7 +52,7 @@ type HtmlRender(model: ApiDocModel) = // Copy XML sig for use in `cref` XML let copyXmlSigIcon xmlDocSig = - div [ Class"fsdocs-source-link"; Title "Copy signature (XML)"; OnClick (sprintf "Clipboard_CopyTo('')" xmlDocSig) ] [ + div [ Class"fsdocs-source-link"; Title"Copy signature (XML)"; OnClick (sprintf "Clipboard_CopyTo('')" xmlDocSig) ] [ img [Src (sprintf "%scontent/img/copy-xml.png" root); Class "normal"] img [Src (sprintf "%scontent/img/copy-xml-hover.png" root); Class "hover"] ] @@ -75,7 +75,7 @@ type HtmlRender(model: ApiDocModel) = if xmlDocSig.Contains("``") then "```" elif xmlDocSig.Contains("`") then "``" else "`" - div [ Class"fsdocs-source-link"; Title "Copy signature (Markdown)"; OnClick (sprintf "Clipboard_CopyTo('%scref:%s%s')" delim xmlDocSig delim) ] [ + div [ Class"fsdocs-source-link"; Title"Copy signature (Markdown)"; OnClick (sprintf "Clipboard_CopyTo('%scref:%s%s')" delim xmlDocSig delim) ] [ img [Src (sprintf "%scontent/img/copy-md.png" root); Class "normal"] img [Src (sprintf "%scontent/img/copy-md-hover.png" root); Class "hover"] ] From 3491ffbe9587e7a769702a30b685b3039051929d Mon Sep 17 00:00:00 2001 From: Atilim Gunes Baydin Date: Sun, 13 Jun 2021 01:01:40 +0100 Subject: [PATCH 6/6] attempt fix --- src/FSharp.Formatting.ApiDocs/GenerateHtml.fs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/FSharp.Formatting.ApiDocs/GenerateHtml.fs b/src/FSharp.Formatting.ApiDocs/GenerateHtml.fs index 7b206bf96..564d7ed82 100644 --- a/src/FSharp.Formatting.ApiDocs/GenerateHtml.fs +++ b/src/FSharp.Formatting.ApiDocs/GenerateHtml.fs @@ -41,7 +41,7 @@ type HtmlRender(model: ApiDocModel) = [ match url with | None -> () | Some href -> - a [Href href; Class"fsdocs-source-link"; Title"Source on GitHub" ] [ + a [Href href; Class"fsdocs-source-link"; HtmlProperties.Title "Source on GitHub" ] [ img [Src (sprintf "%scontent/img/github.png" root); Class "normal"] img [Src (sprintf "%scontent/img/github-hover.png" root); Class "hover"] ] ] @@ -52,7 +52,7 @@ type HtmlRender(model: ApiDocModel) = // Copy XML sig for use in `cref` XML let copyXmlSigIcon xmlDocSig = - div [ Class"fsdocs-source-link"; Title"Copy signature (XML)"; OnClick (sprintf "Clipboard_CopyTo('')" xmlDocSig) ] [ + div [ Class"fsdocs-source-link"; HtmlProperties.Title "Copy signature (XML)"; OnClick (sprintf "Clipboard_CopyTo('')" xmlDocSig) ] [ img [Src (sprintf "%scontent/img/copy-xml.png" root); Class "normal"] img [Src (sprintf "%scontent/img/copy-xml-hover.png" root); Class "hover"] ] @@ -75,7 +75,7 @@ type HtmlRender(model: ApiDocModel) = if xmlDocSig.Contains("``") then "```" elif xmlDocSig.Contains("`") then "``" else "`" - div [ Class"fsdocs-source-link"; Title"Copy signature (Markdown)"; OnClick (sprintf "Clipboard_CopyTo('%scref:%s%s')" delim xmlDocSig delim) ] [ + div [ Class"fsdocs-source-link"; HtmlProperties.Title "Copy signature (Markdown)"; OnClick (sprintf "Clipboard_CopyTo('%scref:%s%s')" delim xmlDocSig delim) ] [ img [Src (sprintf "%scontent/img/copy-md.png" root); Class "normal"] img [Src (sprintf "%scontent/img/copy-md-hover.png" root); Class "hover"] ]