diff --git a/source/html/sync.go b/source/html/sync.go index 98046a792a98f9c5b220f963fd997aa86dfd4983..fd178314c3ba415ed87734737989f5c68e9361fb 100644 --- a/source/html/sync.go +++ b/source/html/sync.go @@ -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 } }