Skip to content
Snippets Groups Projects
Verified Commit 3ac9703b authored by Volker Schukai's avatar Volker Schukai :alien:
Browse files

fix: sync command

parent 82e77d4a
No related branches found
Tags 0.5.7
No related merge requests found
......@@ -66,7 +66,7 @@ func SyncHtml(p string) error {
if err != nil {
return err
}
if sourceFiles[absSource], err = readHTML(absSource); err != nil {
return err
}
......@@ -140,85 +140,89 @@ func SyncHtml(p string) error {
destinationFile[absSource] = append(destinationFile[absSource], d)
}
}
}
for _, r := range specification.Sync {
source := r.Source
absSource, err := filepath.Abs(source.Path)
if err != nil {
return err
}
sourceSelector := source.Selector
for _, r := range specification.Sync {
source := r.Source
absSource, err := filepath.Abs(source.Path)
if err != nil {
return err
}
sourceSelector := source.Selector
query, err := cascadia.Compile(sourceSelector)
if err != nil {
return err
query, err := cascadia.Compile(sourceSelector)
if err != nil {
return err
}
s, ok := sourceFiles[absSource]
if !ok {
return fmt.Errorf("source file isn't found: %s", absSource)
}
sourceNode := query.MatchFirst(s)
dp := destinationFile[absSource]
for _, d := range dp {
destinationSelector := r.Destination.Selector
if destinationSelector == "" {
destinationSelector = sourceSelector
}
sourceNode := query.MatchFirst(sourceFiles[absSource])
keepMap := make(map[string][]*html.Node)
dp := destinationFile[absSource]
for _, d := range dp {
destinationSelector := r.Destination.Selector
if destinationSelector == "" {
destinationSelector = sourceSelector
for _, n := range r.Destination.Keep {
q, err := cascadia.Compile(n)
if err != nil {
return err
}
keepMap := make(map[string][]*html.Node)
kNode := q.MatchAll(destinationFiles[d])
if kNode == nil {
return fmt.Errorf("keep node not found: %s", n)
}
for _, n := range r.Destination.Keep {
q, err := cascadia.Compile(n)
if err != nil {
return err
}
for _, k := range kNode {
keepMap[n] = append(keepMap[n], k)
}
kNode := q.MatchAll(destinationFiles[d])
if kNode == nil {
return fmt.Errorf("keep node not found: %s", n)
}
}
for _, k := range kNode {
keepMap[n] = append(keepMap[n], k)
}
query, err := cascadia.Compile(destinationSelector)
if err != nil {
return err
}
destinationData := query.MatchFirst(destinationFiles[d])
}
if destinationData == nil {
return fmt.Errorf("could not find selector %s in %s", destinationSelector, d)
}
query, err := cascadia.Compile(destinationSelector)
n := engine.CloneNode(sourceNode)
destinationData.Parent.InsertBefore(n, destinationData)
destinationData.Parent.RemoveChild(destinationData)
for sel, k := range keepMap {
cas, err := cascadia.Compile(sel)
if err != nil {
return err
}
destinationData := query.MatchFirst(destinationFiles[d])
if destinationData == nil {
return fmt.Errorf("could not find selector %s in %s", destinationSelector, d)
x := cas.MatchAll(destinationFiles[d])
if x == nil {
return fmt.Errorf("could not find selector %s in %s", sel, d)
}
n := engine.CloneNode(sourceNode)
destinationData.Parent.InsertBefore(n, destinationData)
destinationData.Parent.RemoveChild(destinationData)
for sel, k := range keepMap {
cas, err := cascadia.Compile(sel)
if err != nil {
return err
}
x := cas.MatchAll(destinationFiles[d])
if x == nil {
return fmt.Errorf("could not find selector %s in %s", sel, d)
}
for _, n1 := range x {
for _, kk := range k {
for _, n1 := range x {
// node already removed, for example, by a previous keep
if n1.Parent == nil {
continue
}
for _, kk := range k {
n1.Parent.InsertBefore(engine.CloneNode(kk), n1)
n1.Parent.RemoveChild(n1)
// node already removed, for example, by a previous keep
if n1.Parent == nil {
continue
}
n1.Parent.InsertBefore(engine.CloneNode(kk), n1)
n1.Parent.RemoveChild(n1)
}
}
......@@ -227,21 +231,21 @@ func SyncHtml(p string) error {
}
for p, d := range destinationFiles {
fp, err := os.Create(p)
if err != nil {
return err
}
err = html.Render(fp, d)
err2 := fp.Close()
if err2 != nil {
return err2
}
}
if err != nil {
return err
}
for p, d := range destinationFiles {
fp, err := os.Create(p)
if err != nil {
return err
}
err = html.Render(fp, d)
err2 := fp.Close()
if err2 != nil {
return err2
}
if err != nil {
return err
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment