diff --git a/examples/example3/source/page1.html b/examples/example3/source/page1.html new file mode 100644 index 0000000000000000000000000000000000000000..c2ce39f0739a842265b43a2ab4b87991b9ab9680 --- /dev/null +++ b/examples/example3/source/page1.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="color-scheme" content="dark light"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>Page 1</title> + <style> + *:not(:defined) { + visibility: hidden; + } + </style> +</head> +<body> + <h1>Page 1</h1> + + +<footer> + <p>Footer</p> +</footer> +</body> \ No newline at end of file diff --git a/examples/example3/source/page2.html b/examples/example3/source/page2.html new file mode 100644 index 0000000000000000000000000000000000000000..a1c106bba286bcd232f25b122de62e4f81a25a7d --- /dev/null +++ b/examples/example3/source/page2.html @@ -0,0 +1,17 @@ +<!DOCTYPE html><html lang="en"><head> + <meta charset="UTF-8"/> + <meta name="color-scheme" content="dark light"/> + <meta name="viewport" content="width=device-width, initial-scale=1.0"/> + <title>Page 2</title> + <style> + *:not(:defined) { + visibility: hidden; + } + </style> +</head> +<body> +<h1>Page 2</h1> +<footer> + <p>Footer</p> +</footer> +</body></html> \ No newline at end of file diff --git a/examples/example3/source/parts/exclude.html b/examples/example3/source/parts/exclude.html new file mode 100644 index 0000000000000000000000000000000000000000..df25c90fd2194cf63f234a8aa96b71ca3993db46 --- /dev/null +++ b/examples/example3/source/parts/exclude.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="color-scheme" content="dark light"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>Exclude this</title> + <style> + *:not(:defined) { + visibility: hidden; + } + </style> +</head> +<body> +<h1>Exclude This</h1> +</body> \ No newline at end of file diff --git a/examples/example3/sync.yaml b/examples/example3/sync.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cd25680efd6cab612933922453015e32acf9c351 --- /dev/null +++ b/examples/example3/sync.yaml @@ -0,0 +1,9 @@ +sync: + - source: + path: "source/page1.html" + selector: "footer" + destination: + path: "source/" + exclude: + - "source/page1.html" + - "source/parts/*" diff --git a/source/html/sync.go b/source/html/sync.go index 93c76ce47189c36e80b8e952a0adbde0ad6b3cbb..f65c0d0d863b8734bb5b809da16777a5e4a4c0ee 100644 --- a/source/html/sync.go +++ b/source/html/sync.go @@ -91,31 +91,28 @@ func SyncHtml(p string) error { return nil } - if exclude != nil { - for _, e := range exclude { - e, err := filepath.Abs(e) - if err != nil { - return err - } - if e == pp { - return nil - } - } - } - ext := filepath.Ext(pp) - if ext == ".html" { + if ext != ".html" { + return nil + } - var dd *html.Node - if dd, err = readHTML(pp); err != nil { - return err - } + excludeFlag, err2 := checkExcludes(exclude, pp) + if err2 != nil { + return err2 + } - destinationFiles[pp] = dd - destinationFile[absSource] = append(destinationFile[absSource], pp) + if excludeFlag { + return nil + } + var dd *html.Node + if dd, err = readHTML(pp); err != nil { + return err } + destinationFiles[pp] = dd + destinationFile[absSource] = append(destinationFile[absSource], pp) + return nil }); err != nil { return err @@ -123,22 +120,13 @@ func SyncHtml(p string) error { } else if filepath.Ext(d) == ".html" { if exclude != nil { - for _, e := range exclude { - e, err := filepath.Abs(e) - if err != nil { - return err - } - - if e == d { - return nil - } - - if r, err := filepath.Match(e, d); err != nil { - return err - } else if r { - return nil - } + excludeFlag, err2 := checkExcludes(exclude, d) + if err2 != nil { + return err2 + } + if excludeFlag { + continue } } @@ -259,3 +247,25 @@ func SyncHtml(p string) error { return nil } + +func checkExcludes(exclude []string, d string) (bool, error) { + for _, e := range exclude { + e, err := filepath.Abs(e) + if err != nil { + return false, err + } + + if e == d { + return true, nil + } + + if r, err := filepath.Match(e, d); err != nil { + return false, err + } else if r { + return true, nil + } + + } + + return false, nil +}