zip_helper.cljs 702 B

123456789101112131415161718192021222324252627
  1. (ns frontend.handler.export.zip-helper
  2. "zipper helpers used in opml&html exporting"
  3. (:require [clojure.zip :as z]))
  4. (defn goto-last
  5. [loc]
  6. (let [loc* (z/next loc)]
  7. (if (z/end? loc*)
  8. loc
  9. (recur loc*))))
  10. (defn get-level
  11. [loc]
  12. (count (z/path loc)))
  13. (defn goto-level
  14. [loc level]
  15. (let [current-level (get-level loc)]
  16. (assert (<= level (inc current-level))
  17. (print-str :level level :current-level current-level))
  18. (let [diff (- level current-level)
  19. up-or-down (if (pos? diff) z/down z/up)
  20. diff* (abs diff)]
  21. (loop [loc loc count* diff*]
  22. (if (zero? count*)
  23. loc
  24. (recur (up-or-down loc) (dec count*)))))))