diff --git a/.gitignore b/.gitignore
index 65aac50..798fe87 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,7 @@
*.html
Content/
docSet.dsidx
+# Downloaded CSS files
+docs.min.css
+holygrail.min.css
+syntax-highlighter.min.css
diff --git a/Makefile b/Makefile
index b3d368e..8fc0f15 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
default: complete
-complete: run-combined package-apex package-vf package-combined
+complete: run-combined package-combined clean-index run-apex package-apex clean-index run-vf package-vf
run-apex:
(cd SFDashC && go run *.go --silent apexcode)
@@ -15,8 +15,9 @@ package-apex:
$(eval type = Apex)
$(eval package = Salesforce $(type).docset)
mkdir -p "$(package)/Contents/Resources/Documents"
- cp -r SFDashC/atlas.en-us.200.0.apexcode.meta "$(package)/Contents/Resources/Documents/"
+ cp -r SFDashC/atlas.en-us.apexcode.meta "$(package)/Contents/Resources/Documents/"
cp SFDashC/*.html "$(package)/Contents/Resources/Documents/"
+ cp SFDashC/*.css "$(package)/Contents/Resources/Documents/"
cp SFDashC/Info-$(type).plist "$(package)/Contents/Info.plist"
cp SFDashC/docSet.dsidx "$(package)/Contents/Resources/"
@@ -24,8 +25,9 @@ package-vf:
$(eval type = Pages)
$(eval package = Salesforce $(type).docset)
mkdir -p "$(package)/Contents/Resources/Documents"
- cp -r SFDashC/atlas.en-us.200.0.pages.meta "$(package)/Contents/Resources/Documents/"
+ cp -r SFDashC/atlas.en-us.pages.meta "$(package)/Contents/Resources/Documents/"
cp SFDashC/*.html "$(package)/Contents/Resources/Documents/"
+ cp SFDashC/*.css "$(package)/Contents/Resources/Documents/"
cp SFDashC/Info-$(type).plist "$(package)/Contents/Info.plist"
cp SFDashC/docSet.dsidx "$(package)/Contents/Resources/"
@@ -35,10 +37,14 @@ package-combined:
mkdir -p "$(package)/Contents/Resources/Documents"
cp -r SFDashC/*.meta "$(package)/Contents/Resources/Documents/"
cp SFDashC/*.html "$(package)/Contents/Resources/Documents/"
+ cp SFDashC/*.css "$(package)/Contents/Resources/Documents/"
cp SFDashC/Info-$(type).plist "$(package)/Contents/Info.plist"
cp SFDashC/docSet.dsidx "$(package)/Contents/Resources/"
-clean:
- rm -fr SFDashC/*.meta
+clean-index:
rm -f SFDashC/docSet.dsidx
+
+clean: clean-index
+ rm -fr SFDashC/*.meta
+ rm -f SFDashC/*.css
rm -fr *.docset
diff --git a/SFDashC/Info-Apex.plist b/SFDashC/Info-Apex.plist
index 887be53..d827904 100644
--- a/SFDashC/Info-Apex.plist
+++ b/SFDashC/Info-Apex.plist
@@ -12,5 +12,7 @@
dashIndexFilePath
apexcode.html
+ DashDocSetFallbackURL
+ https://developer.salesforce.com/docs/
diff --git a/SFDashC/Info-Combined.plist b/SFDashC/Info-Combined.plist
index fae7ba4..05648b7 100644
--- a/SFDashC/Info-Combined.plist
+++ b/SFDashC/Info-Combined.plist
@@ -13,5 +13,7 @@
dashIndexFilePath
index.htm
+ DashDocSetFallbackURL
+ https://developer.salesforce.com/docs/
diff --git a/SFDashC/Info-Pages.plist b/SFDashC/Info-Pages.plist
index 0ffa501..8ffc812 100644
--- a/SFDashC/Info-Pages.plist
+++ b/SFDashC/Info-Pages.plist
@@ -12,5 +12,7 @@
dashIndexFilePath
pages.html
+ DashDocSetFallbackURL
+ https://developer.salesforce.com/docs/
diff --git a/SFDashC/main.go b/SFDashC/main.go
index afcac11..09aac6b 100644
--- a/SFDashC/main.go
+++ b/SFDashC/main.go
@@ -7,6 +7,7 @@ import (
"fmt"
"github.com/coopernurse/gorp"
_ "github.com/mattn/go-sqlite3"
+ "io"
"io/ioutil"
"net/http"
"os"
@@ -24,7 +25,7 @@ TODO:
// CSS Paths
var cssBasePath = "https://developer.salesforce.com/resource/stylesheets"
-var cssFiles = []string{"docs.min.css"}
+var cssFiles = []string{"holygrail.min.css", "docs.min.css", "syntax-highlighter.min.css"}
// JSON Structs
@@ -163,7 +164,10 @@ func saveMainContent(toc *AtlasTOC) {
ExitIfError(err)
defer ofile.Close()
- _, err = ofile.WriteString(content)
+ _, err = ofile.WriteString(
+ "" +
+ content,
+ )
ExitIfError(err)
}
}
@@ -174,6 +178,13 @@ func main() {
WithoutWarning()
}
+ // Download CSS
+ for _, cssFile := range cssFiles {
+ throttle <- 1
+ wg.Add(1)
+ go downloadCSS(cssFile, &wg)
+ }
+
// Init the Sqlite db
dbmap = initDb()
err := dbmap.TruncateTables()
@@ -198,16 +209,6 @@ func main() {
printSuccess(toc)
}
- // Download CSS
- throttle <- 1
- /*
- * wg.Add(1)
-
- * for _, cssUrl := range cssFiles {
- * go downloadLink(cssBasePath+"/"+cssUrl, &wg)
- * }
- */
-
wg.Wait()
}
@@ -333,23 +334,25 @@ func (entry TOCEntry) CleanTitle(t SupportedType) string {
}
// GetRelLink extracts only the relative link from the Link Href
-func (entry TOCEntry) GetRelLink() (relLink string) {
+func (entry TOCEntry) GetRelLink(removeAnchor bool) (relLink string) {
if entry.LinkAttr.Href == "" {
return
}
// Get the JSON file
relLink = entry.LinkAttr.Href
- anchorIndex := strings.LastIndex(relLink, "#")
- if anchorIndex > 0 {
- relLink = relLink[0:anchorIndex]
+ if removeAnchor {
+ anchorIndex := strings.LastIndex(relLink, "#")
+ if anchorIndex > 0 {
+ relLink = relLink[0:anchorIndex]
+ }
}
return
}
// GetContent retrieves Content for this TOCEntry from the API
func (entry TOCEntry) GetContent(toc *AtlasTOC) (content *TOCContent, err error) {
- relLink := entry.GetRelLink()
+ relLink := entry.GetRelLink(true)
if relLink == "" {
return
}
@@ -371,7 +374,6 @@ func (entry TOCEntry) GetContent(toc *AtlasTOC) (content *TOCContent, err error)
// Read the downloaded JSON
defer resp.Body.Close()
contents, err := ioutil.ReadAll(resp.Body)
- // fmt.Println(string(contents))
if err != nil {
return
}
@@ -379,6 +381,13 @@ func (entry TOCEntry) GetContent(toc *AtlasTOC) (content *TOCContent, err error)
// Load into Struct
content = new(TOCContent)
err = json.Unmarshal([]byte(contents), content)
+ if err != nil {
+ fmt.Println("Error reading JSON")
+ fmt.Println(resp.Status)
+ fmt.Println(url)
+ fmt.Println(string(contents))
+ return
+ }
return
}
@@ -435,19 +444,19 @@ func processChildReferences(entry TOCEntry, entryType *SupportedType, toc *Atlas
}
// GetContentFilepath returns the filepath that should be used for the content
-func (entry TOCEntry) GetContentFilepath(toc *AtlasTOC) string {
- relLink := entry.GetRelLink()
+func (entry TOCEntry) GetContentFilepath(toc *AtlasTOC, removeAnchor bool) string {
+ relLink := entry.GetRelLink(removeAnchor)
if relLink == "" {
ExitIfError(NewFormatedError("Link not found for %s", entry.ID))
}
- return fmt.Sprintf("%s/%s/%s", toc.Version.VersionURL, toc.Deliverable, relLink)
+ return fmt.Sprintf("atlas.%s.%s.meta/%s/%s", toc.Locale, toc.Deliverable, toc.Deliverable, relLink)
}
func downloadContent(entry TOCEntry, toc *AtlasTOC, wg *sync.WaitGroup) {
defer wg.Done()
- filePath := entry.GetContentFilepath(toc)
+ filePath := entry.GetContentFilepath(toc, true)
// Make sure file doesn't exist first
if _, err := os.Stat(filePath); os.IsNotExist(err) {
content, err := entry.GetContent(toc)
@@ -461,13 +470,45 @@ func downloadContent(entry TOCEntry, toc *AtlasTOC, wg *sync.WaitGroup) {
ofile, err := os.Create(filePath)
ExitIfError(err)
+ header := "" +
+ "\n"
+ for _, cssFile := range cssFiles {
+ header += fmt.Sprintf("", cssFile)
+ }
+ header += ""
+
defer ofile.Close()
- _, err = ofile.WriteString("\n" + content.Content)
+ _, err = ofile.WriteString(
+ header + content.Content,
+ )
ExitIfError(err)
}
<-throttle
}
+func downloadCSS(fileName string, wg *sync.WaitGroup) {
+ defer wg.Done()
+
+ if _, err := os.Stat(fileName); os.IsNotExist(err) {
+ err = os.MkdirAll(filepath.Dir(fileName), 0755)
+ ExitIfError(err)
+
+ ofile, err := os.Create(fileName)
+ ExitIfError(err)
+ defer ofile.Close()
+
+ cssURL := cssBasePath + "/" + fileName
+ response, err := http.Get(cssURL)
+ ExitIfError(err)
+ defer response.Body.Close()
+
+ _, err = io.Copy(ofile, response.Body)
+ ExitIfError(err)
+ }
+
+ <-throttle
+}
+
/**********************
Database
**********************/
@@ -477,7 +518,7 @@ func saveSearchIndex(dbmap *gorp.DbMap, entry TOCEntry, entryType *SupportedType
return
}
- relLink := entry.GetContentFilepath(toc)
+ relLink := entry.GetContentFilepath(toc, false)
name := entry.CleanTitle(*entryType)
if entryType.ShowNamespace && len(entryHierarchy) > 0 {
// Show namespace for methods