Removed accordion and sidebar examples

Removed accordion and sidebar examples

--- src/css-guide/styles/components.cljs
+++ src/css-guide/styles/components.cljs
@@ -1446,154 +1446,6 @@
 ;; OBJECTS start here
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

-(defexample accordion
-  "# Accordion Example"
-  (dom/div #js {}
-    (let [accordion (or (om/get-state this :accordion) 0)
-          accordion-select (fn [a] (if (not (= accordion a)) (om/update-state! this assoc :accordion a) (om/update-state! this assoc :accordion 0)))
-          accordion-active (fn [a] (if (= accordion a) " is-active" ""))]
-      (dom/div #js {}
-        (dom/div #js {:className "o-accordion"}
-          (dom/div #js {:id        "a1"
-                        :className (str "o-accordion__title is-nested " (accordion-active 1))
-                        :onClick   #(accordion-select 1)}
-            (dom/span #js {:className " c-badge c-badge--informative "} " 2 ") " Contacts ")
-          (dom/div #js {:className (str " o-accordion__content " (accordion-active 1))}
-            (dom/div #js {:className " o-accordion__group "}
-              (dom/div #js {:className " o-accordion__info o-accordion__info--critical "}
-                (dom/svg #js {:xmlns " http:// www.w3.org /2000/svg" :width "24" :height "24" :className "c-icon is-neutral" :viewBox "0 0 24 24"}
-                  (dom/path #js {:d "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.94-3.5 3.22-6 3.22z"})) " Kennee ")
-              (dom/div #js {:className "o-accordion__info"}
-                (dom/svg #js {:xmlns "http://www.w3.org/2000/svg" :width "24" :height "24" :className "c-icon is-neutral" :viewBox "0 0 24 24"}
-                  (dom/path #js {:d "M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"})) " ilovemicrosoft@yahoo.com ")
-              (dom/div #js {:className "o-accordion__info"}
-                (dom/svg #js {:xmlns "http://www.w3.org/2000/svg" :width "24" :height "24" :className "c-icon is-neutral" :viewBox "0 0 24 24"}
-                  (dom/path #js {:d "M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"})) " 2m ago ")
-              (dom/div #js {:className "o-accordion__actions"}
-                (dom/span #js {:className "o-accordion__action"}
-                  (dom/svg #js {:xmlns "http://www.w3.org/2000/svg" :width "24" :height "24" :className "c-icon is-informative" :viewBox "0 0 24 24"}
-                    (dom/path #js {:d "M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z"})))
-                (dom/span #js {:className "o-accordion__action o-accordion__action--informative"}
-                  (dom/svg #js {:xmlns "http://www.w3.org/2000/svg" :width "24" :height "24" :className "c-icon is-informative" :viewBox "0 0 24 24"}
-                    (dom/path #js {:d "M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z"})))
-                (dom/span #js {:className "o-accordion__action o-accordion__action--success"}
-                  (dom/svg #js {:xmlns "http://www.w3.org/2000/svg" :width "24" :height "24" :className "c-icon is-informative" :viewBox "0 0 24 24"}
-                    (dom/path #js {:d "M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z"})))))
-            (dom/div #js {:className "o-accordion__group"}
-              (dom/div #js {:className "o-accordion__info o-accordion__info--critical"}
-                (dom/svg #js {:xmlns "http://www.w3.org/2000/svg" :width "24" :height "24" :className "c-icon is-neutral" :viewBox "0 0 24 24"}
-                  (dom/path #js {:d "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.94-3.5 3.22-6 3.22z"})) " Krassy Pants ")
-              (dom/div #js {:className "o-accordion__info"}
-                (dom/svg #js {:xmlns "http://www.w3.org/2000/svg" :width "24" :height "24" :className "c-icon is-neutral" :viewBox "0 0 24 24"}
-                  (dom/path #js {:d "M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"})) " krass@pants.com ")
-              (dom/div #js {:className "o-accordion__info"}
-                (dom/svg #js {:xmlns "http://www.w3.org/2000/svg" :width "24" :height "24" :className "c-icon is-neutral" :viewBox "0 0 24 24"}
-                  (dom/path #js {:d "M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"})) " 2m ago ")
-              (dom/div #js {:className "o-accordion__actions"}
-                (dom/span #js {:className "o-accordion__action"}
-                  (dom/svg #js {:xmlns "http://www.w3.org/2000/svg" :width "24" :height "24" :className "c-icon is-informative" :viewBox "0 0 24 24"}
-                    (dom/path #js {:d "M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z"}))))))
-          (dom/div #js {:id        "a2"
-                        :className (str "o-accordion__title is-nested" (accordion-active 2))
-                        :onClick   #(accordion-select 2)} " What kinds of dogs are there? ")
-          (dom/div #js {:className (str "o-accordion__content" (accordion-active 2))}
-            (dom/p #js {} "There are many breeds of dogs. Each breed varies in size and temperament. Owners often select a breed of dog that they find to be compatible with their own lifestyle and desires from a companion."))
-          (dom/div #js {:id        "a3"
-                        :className (str "o-accordion__title is-nested" (accordion-active 3))
-                        :onClick   #(accordion-select 3)} " How do you acquire a dog? ")
-          (dom/div #js {:className (str "o-accordion__content" (accordion-active 3))}
-            (dom/p #js {} "Three common ways for a prospective owner to acquire a dog is from pet shops, private owners, or shelters.")
-            (dom/p #js {:className "is-nested"} "A pet shop may be the most convenient way to buy a dog. Buying a dog from a private owner allows you to assess the pedigree and upbringing of your dog before choosing to take it home. Lastly, finding your dog from a shelter, helps give a good home to a dog who may not find one so readily."))
-          (dom/div #js {:id        "a4"
-                        :className (str "o-accordion__title is-nested" (accordion-active 4))
-                        :onClick   #(accordion-select 4)} " How do you acquire a dog? ")
-          (dom/div #js {:className (str "o-accordion__content" (accordion-active 4))}
-            (dom/p #js {} "Three common ways for a prospective owner to acquire a dog is from pet shops, private owners, or shelters.")
-            (dom/p #js {:className "is-nested"} "A pet shop may be the most convenient way to buy a dog. Buying a dog from a private owner allows you to assess the pedigree and upbringing of your dog before choosing to take it home. Lastly, finding your dog from a shelter, helps give a good home to a dog who may not find one so readily."))
-          (dom/div #js {:id        "a5"
-                        :className (str "o-accordion__title is-nested" (accordion-active 5))
-                        :onClick   #(accordion-select 5)} " How do you acquire a dog? ")
-          (dom/div #js {:className (str "o-accordion__content" (accordion-active 5))}
-            (dom/p #js {} "Three common ways for a prospective owner to acquire a dog is from pet shops, private owners, or shelters.")
-            (dom/p #js {:className "is-nested"} "A pet shop may be the most convenient way to buy a dog. Buying a dog from a private owner allows you to assess the pedigree and upbringing of your dog before choosing to take it home. Lastly, finding your dog from a shelter, helps give a good home to a dog who may not find one so readily."))
-          (dom/div #js {:className "o-accordion__title"} " Non-nested title ")))
-      )))
-
-(defexample accordion-nested
-  "### Nested
-
-  Notice how you can add `.is-nested` to any element and it collapses and expands with `.is-active`
-  "
-  (let [accordion (or (om/get-state this :accordion) 1)
-        accordion-select (fn [a] (if (not (= accordion a)) (om/update-state! this assoc :accordion a) (om/update-state! this assoc :accordion 0)))
-        accordion-active (fn [a] (if (= accordion a) " is-active" ""))]
-    (dom/div #js {}
-      (dom/div #js {:className "o-accordion"}
-        (dom/div #js {:className "o-accordion__title"} "Recent notes")
-        (dom/div #js {:className "o-accordion__content is-active"}
-          (dom/div #js {:className "o-accordion__group"}
-            (dom/div #js {:className "o-accordion__info"}
-              (dom/div #js {:className "o-accordion__meta"}
-                (dom/div #js {:className "o-accordion__meta-item"}
-                  (dom/svg #js {:xmlns "http://www.w3.org/2000/svg" :width "24" :height "24" :className "c-icon c-icon--small" :viewBox "0 0 24 24"}
-                    (dom/path #js {:d "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.94-3.5 3.22-6 3.22z"})) " Agent Name ")
-                (dom/div #js {:className "o-accordion__meta-item"}
-                  (dom/svg #js {:xmlns "http://www.w3.org/2000/svg" :width "24" :height "24" :className "c-icon c-icon--small" :viewBox "0 0 24 24"}
-                    (dom/path #js {:d "M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"})) " 3 days ago "))
-              (dom/p #js {:id        "a1"
-                          :className (str "is-nested" (accordion-active 1))
-                          :onClick   #(accordion-select 1)} "So strongly and metaphysically did I conceive of my situation then, that while earnestly watching his motions, I seemed distinctly to perceive in the tumultuous business of cutting-in and attending to a whale, there is much running backwards and forwards among the crew.")))
-          (dom/div #js {:className "o-accordion__group"}
-            (dom/div #js {:className "o-accordion__info"}
-              (dom/div #js {:className "o-accordion__meta"}
-                (dom/div #js {:className "o-accordion__meta-item"}
-                  (dom/svg #js {:xmlns "http://www.w3.org/2000/svg" :width "24" :height "24" :className "c-icon c-icon--small" :viewBox "0 0 24 24"}
-                    (dom/path #js {:d "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.94-3.5 3.22-6 3.22z"})) " Agent Name ")
-                (dom/div #js {:className "o-accordion__meta-item"}
-                  (dom/svg #js {:xmlns "http://www.w3.org/2000/svg" :width "24" :height "24" :className "c-icon c-icon--small" :viewBox "0 0 24 24"}
-                    (dom/path #js {:d "M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"})) " 3 days ago "))
-              (dom/p #js {:className "is-nested"} "So strongly and metaphysically did I conceive of my situation then, that while earnestly watching his motions, I seemed distinctly to perceive in the tumultuous business of cutting-in and attending to a whale, there is much running backwards and forwards among the crew.")))
-          (dom/div #js {:className "o-accordion__group"}
-            (dom/div #js {:className "o-accordion__info"}
-              (dom/div #js {:className "o-accordion__meta"}
-                (dom/div #js {:className "o-accordion__meta-item"}
-                  (dom/svg #js {:xmlns "http://www.w3.org/2000/svg" :width "24" :height "24" :className "c-icon c-icon--small" :viewBox "0 0 24 24"}
-                    (dom/path #js {:d "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.94-3.5 3.22-6 3.22z"})) " Agent Name ")
-                (dom/div #js {:className "o-accordion__meta-item"}
-                  (dom/svg #js {:xmlns "http://www.w3.org/2000/svg" :width "24" :height "24" :className "c-icon c-icon--small" :viewBox "0 0 24 24"}
-                    (dom/path #js {:d "M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"})) " 3 days ago "))
-              (dom/p #js {:id        "a2"
-                          :className (str "is-nested" (accordion-active 2))
-                          :onClick   #(accordion-select 2)} "So strongly and metaphysically did I conceive of my situation then, that while earnestly watching his motions, I seemed distinctly to perceive in the tumultuous business of cutting-in and attending to a whale, there is much running backwards and forwards among the crew."))))))
-    ))
-
-;; TODO Fix, accordion sidebar is not appearing
-(defexample accordion-sidebar
-  "# Accordion inside a Sidebar Example"
-  (dom/div #js {}
-    (dom/nav #js {:className "o-sidebar [is-collapsed]"}
-      (dom/div #js {:className "o-accordion o-accordion--small"}
-        (dom/div #js {:className "o-accordion__title is-nested is-active"} " Title 1 ")
-        (dom/div #js {:className "o-accordion__content is-active"}
-          (dom/div #js {:className "o-accordion__group"}
-            (dom/div #js {:className "o-accordion__info"} "View 1")
-            (dom/div #js {:className "o-accordion__actions"}
-              (dom/span #js {:className "o-accordion__action"}
-                (dom/svg #js {:xmlns "http://www.w3.org/2000/svg" :width "24" :height "24" :className "c-icon is-informative" :viewBox "0 0 24 24"}
-                  (dom/path #js {:d "M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z"})))))
-          (dom/div #js {:className "o-accordion__group"}
-            (dom/div #js {:className "o-accordion__info"} "View 2.1")
-            (dom/div #js {:className "o-accordion__actions"}
-              (dom/span #js {:className "o-accordion__action"}
-                (dom/svg #js {:xmlns "http://www.w3.org/2000/svg" :width "24" :height "24" :className "c-icon is-informative" :viewBox "0 0 24 24"}
-                  (dom/path #js {:d "M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z"}))))))
-        (dom/div #js {:className "o-accordion__title is-selected"} "Title 2")
-        (dom/div #js {:className "o-accordion__title"} "Title 3")
-        (dom/div #js {:className "o-accordion__title is-informative"}
-          (dom/svg #js {:xmlns "http://www.w3.org/2000/svg" :width "24" :height "24" :className "c-icon c-icon--small" :viewBox "0 0 24 24"}
-            (dom/path #js {:d "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"})) " Action 1 "))
-      (dom/div #js {:className "o-sidebar__toggle"}))))
-
 (defn toggle-pause [this] (om/update-state! this update :pause not))
 (defexample button-group
   "# Button Group"
@@ -1864,70 +1716,6 @@
     ))

-(defexample sidebar
-  "# Sidebar Example
-
-  **Deprecated** We should be using the drawer component or 2-pane article layout instead.
-  "
-  (let [example-class-modifier (str (if (om/get-state this :sidebar-visible) "" " u-hide")
-                                 (if (om/get-state this :sidebar-collapsed) " is-collapsed" ""))]
-    (dom/div #js {}
-      (dom/button #js {:className "c-button"
-                       :onClick   #(om/update-state! this update :sidebar-visible not)} "Show/Hide Example")
-      (dom/nav #js {:style     #js {:left "50" :top "200" :width "16.25em" :height "300px"}
-                    :className (str "o-sidebar o-sidebar--large" example-class-modifier)}
-        (dom/div #js {:className "o-sidebar__controls"}
-          (dom/input #js {:placeholder "Search library..." :className "c-input"})
-          (dom/button #js {:className "c-button c-button--icon u-absolute--top-right"}
-            (dom/svg #js {:version "1.1" :width "24" :height "24" :aria-labelledby "title" :role "img" :className "c-icon c-icon--search " :viewBox "0 0 24 24"}
-              (dom/title #js {} "Search")
-              (dom/path #js {:d "M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"})))
-          (dom/div #js {:className "u-wrapper c-dropdown--picker"}
-            (dom/button #js {:className "c-button c-button--small"} " Filter items "
-              (dom/svg #js {:version "1.1" :width "24" :height "24" :aria-labelledby "title" :role "img" :className "c-icon c-icon--arrow-drop-down" :viewBox "0 0 24 24"}
-                (dom/title #js {} "Arrow Drop Down")
-                (dom/path #js {:d "M7 10l5 5 5-5z"}))))
-          (dom/button #js {:className "c-button c-button--anchor c-button--small"}
-            (dom/svg #js {:version "1.1" :width "24" :height "24" :aria-labelledby "title" :role "img" :className "c-icon c-icon--remove-circle " :viewBox "0 0 24 24"}
-              (dom/title #js {} "Remove Circle")
-              (dom/path #js {:d "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11H7v-2h10v2z"})) " Clear "))
-        (dom/div #js {:className "o-accordion o-accordion--small"}
-          (dom/div #js {:className "o-accordion__title is-nested is-active"} "Title 1")
-          (dom/div #js {:className "o-accordion__content"}
-            (dom/div #js {:className "o-accordion__group"}
-              (dom/div #js {:className "o-accordion__info"} "View 1")
-              (dom/div #js {:className "o-accordion__action"}
-                (dom/svg #js {:xmlns "http://www.w3.org/2000/svg" :width "24" :height "24" :className "c-icon is-informative" :viewBox "0 0 24 24"}
-                  (dom/path #js {:d "M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z"}))))
-            (dom/div #js {:className "o-accordion__group"}
-              (dom/div #js {:className "o-accordion__info"} "View 2.1")
-              (dom/div #js {:className "o-accordion__action"}
-                (dom/svg #js {:xmlns "http://www.w3.org/2000/svg" :width "24" :height "24" :className "c-icon is-informative" :viewBox "0 0 24 24"}
-                  (dom/path #js {:d "M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z"})))))
-          (dom/div #js {:className "o-accordion__title is-selected"} "Title 2")
-          (dom/div #js {:className "o-accordion__title"} "Title 3")
-          (map (fn [n] (dom/div #js {:className "o-accordion__group"}
-                         (dom/div #js {:className "o-accordion__info"} (str "View " n))))
-            (range 3 20))
-
-          (dom/div #js {:className "o-accordion__title is-informative"}
-            (dom/svg #js {:xmlns "http://www.w3.org/2000/svg" :width "24" :height "24" :className "c-icon c-icon--small" :viewBox "0 0 24 24"}
-              (dom/path #js {:d "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"})) " Action 1 "))
-        (dom/div #js {:className "o-sidebar__toggle"})))))
-
-(defexample sidebar-right
-  "# Sidebar Right side and inline example"
-  (let [example-class-modifier (str (if (om/get-state this :sidebar-visible) "" " u-hide")
-                                 (if (om/get-state this :sidebar-collapsed) " is-collapsed" ""))]
-    (dom/div #js {}
-      (dom/button #js {:className "c-button"
-                       :onClick   #(om/update-state! this update :sidebar-visible not)} "Show/Hide Example")
-      (dom/nav #js {:className (str "o-sidebar o-sidebar--right o-sidebar--inline" example-class-modifier)}
-        (dom/textarea #js {:placeholder "Start typing here..." :className "c-input c-input--multi-line c-input--note"})
-        (dom/button #js {:className "c-button"} "Save")
-        (dom/div #js {:className "o-sidebar__toggle o-sidebar__toggle--alt"
-                      :onClick   #(om/update-state! this update :sidebar-collapsed not)})))))
-
 (defexample toolbar
   "# Toolbar Example"
   (let [changed-menu (om/get-state this :changed-menu)
@@ -2303,14 +2091,5 @@
                       textarea
                       input-validation
                       ]}
-          {:id :accordion :title "Accordion [Deprecated]" :examples [accordion accordion-sidebar accordion-nested]
-           :documentation
-               "# Accordion [Deprecated]
-
-               Note: Expansion panels are better designed to show more information in a flexible way. We also have the list component now for showing informational data.
-
-               This object is redesigned to be un-opinionated and flexible for almost any interactive list you might need in your app. The simplified markup resembles this node list:
-               ``` shell\n.o-accordion [ --inline | --right | --small ]\n   __title   [ is-active | is-nested | is-selected ]\n   __content [ is-active ]\n     __group\n       __info\n       __actions\n         __action [ --informative | --success ]\n         __meta\n           __meta-item\n```"}
-          {:id :sidebar :title "Sidebar [Deprecated]" :examples [sidebar sidebar-right]}
           ])))


implement subgroup clusters

implement subgroup clusters

--- src/polismath/math/conversation.clj
+++ src/polismath/math/conversation.clj
@@ -225,6 +225,10 @@
                         [(:id clst) (count (:members clst))])
                       base-clusters)))

+
+      ;; Here we compute the top level clusters; These are the traditional clusters we've been using for some time now.
+      ;; Below we'll use these as the basis for a second level of subgroup clusters
+
       ; Compute group-clusters for multiple k values
       :group-clusterings
             (plmb/fnk [conv base-clusters-weights base-clusters-proj opts']
@@ -234,10 +238,8 @@
                       (clusters/kmeans base-clusters-proj k
                         :last-clusters
                           ; A little pedantic here in case no clustering yet for this k
-                          (let [last-clusterings (:group-clusterings conv)]
-                            (if last-clusterings
-                              (last-clusterings k)
-                              last-clusterings))
+                          (when-let [last-clusterings (:group-clusterings conv)]
+                            (last-clusterings k))
                         :cluster-iters (:group-iters opts')
                         :weights base-clusters-weights)))
                   (range 2 (inc (max-k-fn base-clusters-proj (:max-k opts'))))))
@@ -270,9 +272,94 @@

       ; Pick the cluster corresponding to smoothed K value from group-k-smoother
       :group-clusters
-            (plmb/fnk [group-clusterings group-k-smoother]
-              (get group-clusterings
-                (:smoothed-k group-k-smoother)))
+      (plmb/fnk [group-clusterings group-k-smoother]
+        (get group-clusterings
+          (:smoothed-k group-k-smoother)))
+
+
+      ;; Now we're going to do the same thing for subclusters, or 2-level, 2-down hierarchical clustering
+      ;; This will more or less look the same, except that we'll have to do it for
+
+      ;; Compute subgroup-clusters for each group id, for multiple k values, returning a nested map of:
+      ;;     {:group-id {:k [clusters] ...} ...}
+      :subgroup-clusterings
+      (plmb/fnk [conv base-clusters-weights base-clusters-proj group-clusters opts']
+        (let [group-ids (mapv :id group-clusters)]
+          ;; For each group cluster id
+          (plmb/map-from-keys
+            (fn [gid]
+              ;; For each k value...
+              ;; TODO Here we should really:
+              ;; * not return anyting if group cluster less than 10% (or some such) of population
+              ;; * not return anything if group cluster generally too small to subcluster (10?)
+              ;; * how do we handle these possibilties downstream?
+              (plmb/map-from-keys
+                (fn [k]
+                  ;; We sort by id just to have a canonical repr
+                  (sort-by
+                    :id
+                    (clusters/kmeans base-clusters-proj k
+                                     :last-clusters (get-in conv [:subgroup-clusterings gid k]) ;; ok if nil
+                                     ;; TODO: Really need to properly account for what happens when group k changes...
+                                     ;; QUESTION: Add subgroup iters? For now assume same parameter value as group; level
+                                     :cluster-iters (:group-iters opts')
+                                     :weights base-clusters-weights)))
+                (range 2 (inc (max-k-fn base-clusters-proj (:max-k opts'))))))
+            group-ids)))
+
+      ; Compute silhouette values for the various clusterings
+      :subgroup-clusterings-silhouettes
+      (plmb/fnk [subgroup-clusterings bucket-dists]
+        (plmb/map-vals
+          (partial
+            plmb/map-vals
+            (partial clusters/silhouette bucket-dists))
+          subgroup-clusterings))
+
+      ; This smooths changes in cluster counts (K-vals) by remembering what the last K was, and only changing
+      ; after (:group-k-buffer opts') many times on a new K value
+      :subgroup-k-smoother
+      (plmb/fnk
+        [conv subgroup-clusterings subgroup-clusterings-silhouettes opts']
+        (into {}
+          (map
+            (fn [[gid group-subgroup-clusterings]]
+              (let [group-subgroup-silhouettes (get subgroup-clusterings-silhouettes gid)
+                    {:keys [last-k last-k-count smoothed-k] :or {last-k-count 0}}
+                    (get-in conv [:subgroup-k-smoother gid])
+                    count-buffer (:group-k-buffer opts')
+                    ; Find best K value for current data, given silhouette
+                    this-k       (apply max-key group-subgroup-silhouettes (keys group-subgroup-clusterings))
+                    ; If this and last K values are the same, increment counter
+                    same         (if last-k (= this-k last-k) false)
+                    this-k-count (if same (+ last-k-count 1) 1)
+                    ; if seen > buffer many times, switch, OW, take last smoothed
+                    smoothed-k   (if (>= this-k-count count-buffer)
+                                   this-k
+                                   (if smoothed-k smoothed-k this-k))]
+                ;; We return a map of key-value pairs that look like this:
+                ;; This is maybe where we could put information about whether the last count matches for the sake of subgroups...
+                [gid
+                 {:last-k       this-k
+                  :last-k-count this-k-count
+                  :smoothed-k   smoothed-k}]))
+            subgroup-clusterings)))
+
+      ;; This is a little different from the group version above; For each group, we take the subgroup clustering with
+      ;; the best silhouette, and we mapcat those together into a single global clustering, which is strictly a
+      ;; subclustering (refinement) of the courser group clustering. To each of the clusters in this clustering,
+      ;; we assoc the :parent-id (or should it be :group-id?)
+      :subgroup-clusters
+      (plmb/fnk [subgroup-clusterings subgroup-k-smoother]
+        (mapcat
+          (fn [[gid group-subgroup-clusterings]]
+            (when-let [smoothed-k (get-in subgroup-k-smoother [gid :smoothed-k])]
+              (map
+                (plmb/fn-> (assoc :group-id gid))
+                (get group-subgroup-clusterings smoothed-k))))
+          subgroup-clusterings))
+
+

       ;; a vector of member vectors, sorted by base cluster id
       :bid-to-pid (plmb/fnk [base-clusters]


add a fuction, write-page

add a fuction, write-page

--- src/kalar_plugins/templates/page.clj
+++ src/kalar_plugins/templates/page.clj
@@ -48,6 +48,13 @@
     (let [loaded-md (load-md page)]
       (assoc loaded-md :link (str "/" lang-cd (:link loaded-md))))))

+(defn- write-page [compiled-page]
+  "To be implemented."
+  (let [output (io/file (kfile/find-dest) (:link compiled-page))
+        template (-> compiled-page :template first)]
+    (kfile/touch output)
+    (require (symbol (str/replace  template #"/.*"  "")))
+    (spit output ((var-get (resolve (symbol template))) compiled-page))))

 (defn load-md-excerpt [^String md]


user-group-id to :kixi.user-group/id

user-group-id to :kixi.user-group/id

--- src/kixi/datastore/metadatastore.clj
+++ src/kixi/datastore/metadatastore.clj
@@ -16,7 +16,7 @@
 (s/def ::header sc/bool?)
 (s/def :kixi.user/id sc/uuid)

-(s/def ::group-id sc/uuid)
+(s/def :kixi.user-group/id sc/uuid)

 (def file-activities
    [:visible :read])
@@ -26,11 +26,11 @@

 (s/def ::file-sharing
   (s/map-of (set file-activities)
-            (s/coll-of ::group-id)))
+            (s/coll-of :kixi.user-group/id)))

 (s/def ::file-metadata-sharing
   (s/map-of (set file-metadata-activities)
-            (s/coll-of ::group-id)))
+            (s/coll-of :kixi.user-group/id)))

 (s/def :kixi.datastore.request/type #{::seg/group-rows-by-column})


Fixed typos and removed reflection warnings

--- rosado/processing/processing.clj
+++ rosado/processing/processing.clj
@@ -17,9 +17,9 @@
 ;; to an instance of processing.core.PApplet
 (def #^PApplet *applet*)

-(defn abs-int [n] (PApplet/abs n))
-
-(defn abs-float [n] (PApplet/abs n))
+(defn abs-int [n] (PApplet/abs (int n)))
+
+(defn abs-float [n] (PApplet/abs (float n)))

 (defn acos [n] (PApplet/acos n))

@@ -29,11 +29,11 @@
   [what] (.alpha *applet* (int what)))

 (defn ambient
-  ([gray] (.ambient (float gray)))
-  ([x y z] (.ambient (float x) (float y) (float z))))
+  ([gray] (.ambient *applet* (float gray)))
+  ([x y z] (.ambient *applet* (float x) (float y) (float z))))

 (defn ambient-int
-  [rgb] (.ambient (int rgb)))
+  [rgb] (.ambient *applet* (int rgb)))

 (defn ambient-light
   ([red green blue]
@@ -76,7 +76,7 @@

 (defn background-int
   ([rgb] (.background *applet* (int rgb)))
-  ([rgb alpha] (.background *applet* (int rgb) (int alpha))))
+  ([rgb alpha] (.background *applet* (int rgb) (float alpha))))

 (defn background-image
   [#^PImage img] (.background *applet* img))
@@ -119,15 +119,13 @@
   [a b c d t] (.bezierTangent *applet* (float a) (float b) (float c) (float d) (float t)))

 (defn bezier-vertex
-  ([x1 y1 x2 y2 x3 y3 x4 y4]
+  ([x2 y2 x3 y3 x4 y4]
 	 (.bezierVertex *applet*
-			  (float x1) (float y1)
 			  (float x2) (float y2)
 			  (float x3) (float y3)
 			  (float x4) (float y4)))
   ([x1 y1 z1 x2 y2 z2 x3 y3 z3 x4 y4 z4]
 	 (.bezierVertex *applet*
-			  (float x1) (float y1) (float z1)
 			  (float x2) (float y2) (float z2)
 			  (float x3) (float y3) (float z3)
 			  (float x4) (float y4) (float z4))))
@@ -149,8 +147,6 @@
   ([size] (.box *applet* (int size)))
   ([w h d] (.box *applet* (float w) (float h) (float d))))

-(defn brake-shape [] (.brakeShape *applet*))
-
 (defn brightness [what] (.brightness *applet* (int what)))

 (defn camera
@@ -170,7 +166,7 @@

 (defn color-int
   ([gray] (.background *applet* (int gray)))
-  ([gray alpha] (.background *applet* (int gray) (int alpha)))
+  ([gray alpha] (.background *applet* (int gray) (float alpha)))
   ([r g b] (.background *applet* (int r) (int g) (int b)))
   ([r g b a] (.background *applet* (int r) (int g) (int b) (int a))))

@@ -326,7 +322,7 @@

 (defn fill-int
   ([rgb] (.fill *applet* (int rgb)))
-  ([rgb alpha] (.fill *applet* (int rgb) (int alpha))))
+  ([rgb alpha] (.fill *applet* (int rgb) (float alpha))))

 (defn fill
   ([rgb] (fill-int rgb))
@@ -357,7 +353,7 @@

 (defn hint [which] (.hint *applet* (int which)))

-(defn hour [] (.hour *applet*))
+(defn hour [] (PApplet/hour))

 (defn hue [what] (.hue *applet* (int what)))

@@ -380,9 +376,9 @@

 (defn lights [] (.lights *applet*))

-(defn lights-specular
+(defn light-specular
   [x y z]
-  (.lights *applet* (float x) (float y) (float z)))
+  (.lightSpecular *applet* (float x) (float y) (float z)))

 (defn line
   ([x1 y1 x2 y2] (.line *applet* (float x1) (float y1) (float x2) (float y2)))
@@ -407,10 +403,10 @@
 ;; $$main

 (defn map-to [val istart istop ostart ostop]
-  (.map *applet* val istart istop ostart ostop))
+  (PApplet/map val istart istop ostart ostop))

 (defn mask
-  ([#^ints alpha-array] (.mask alpha-array)))
+  ([#^ints alpha-array] (.mask *applet* alpha-array)))

 (defn mask-image [#^PImage img] (.mask *applet* img))

@@ -447,7 +443,7 @@

 (defn no-cursor [] (.noCursor *applet*))

-(defn no-fill [] (.no-fill *applet*))
+(defn no-fill [] (.noFill *applet*))

 (defn noise
   ([x] (.noise *applet* (float x)))
@@ -474,7 +470,7 @@

 (defn no-tint [] (.noTint *applet*))

-(defn open [filename] (PApplet/open filename))
+(defn open [#^java.lang.String filename] (PApplet/open filename))

 ;; $$open -- overload

@@ -531,7 +527,7 @@
 (defn rect [x1 y1 x2 y2]
   (.rect *applet* (float x1) (float y1) (float x2) (float y2)))

-(defn rect-mode [mode] (.rectMode (int mode)))
+(defn rect-mode [mode] (.rectMode *applet* (int mode)))

 (defn red [what] (.red *applet* (int what)))

@@ -553,7 +549,7 @@

 (defn rotate
   ([angle] (.rotate *applet* (float angle)))
-  ([angle vx vy vz] (.roate *applet* (float angle) (float vx) (float vy) (float vz))))
+  ([angle vx vy vz] (.rotate *applet* (float angle) (float vx) (float vy) (float vz))))

 (defn rotate-x [angle] (.rotateX *applet* (float angle)))

@@ -669,7 +665,7 @@

 (defn stroke-int
   ([rgb] (.stroke *applet* (int rgb)))
-  ([rgb alpha] (.stroke *applet* (int rgb) (int alpha))))
+  ([rgb alpha] (.stroke *applet* (int rgb) (float alpha))))

 (defn stroke-cap [cap] (.strokeCap *applet* (int cap)))

@@ -705,9 +701,9 @@
   ([align] (.textAlign *applet* (int align)))
   ([align-x align-y] (.textAlign *applet* (int align-x) (int align-y))))

-(defn text-ascent [] (.textAscend *applet*))
-
-(defn text-descend [] (.textDescend *applet*))
+(defn text-ascent [] (.textAscent *applet*))
+
+(defn text-descend [] (.textDescent *applet*))

 (defn text-font
   ([#^PFont which] (.textFont *applet* which))
@@ -739,7 +735,7 @@

 (defn tint-int
   ([rgb] (.tint *applet* (int rgb)))
-  ([rgb alpha] (.tint *applet* (int rgb) (int alpha))))
+  ([rgb alpha] (.tint *applet* (int rgb) (float alpha))))

 (defn translate
   ([tx ty] (.translate *applet* (float tx) (float ty)))


Remove FC for a smaller failing test case.

--- test/onyx/peer/colors_flow_test.clj
+++ test/onyx/peer/colors_flow_test.clj
@@ -115,7 +115,7 @@
    [:process-green :green-out]
    ])

-(def flow-conditions
+#_(def flow-conditions
   [#_{:flow/from :colors-in
     :flow/to :all
     :flow/short-circuit? true
@@ -201,7 +201,7 @@
 (onyx.api/submit-job
  peer-config
  {:catalog catalog :workflow workflow
-  :flow-conditions flow-conditions
+;;  :flow-conditions flow-conditions
   :task-scheduler :onyx.task-scheduler/balanced})

 (def red (take-segments! red-out-chan))


Fixed regression introduced with 353e0656c4fb

Fixes #35

--- src/main/clojure/vimclojure/repl.clj
+++ src/main/clojure/vimclojure/repl.clj
@@ -55,7 +55,7 @@

 (defn make-repl
   "Create a new Repl."
-  ([id] (make-repl (the-ns 'user)))
+  ([id] (make-repl id (the-ns 'user)))
   ([id namespace]
    (struct-map repl
                :id                 id


Add some styles to simple responses

Add some styles to simple responses

--- modules/bootstrap/src/modular/bootstrap/cylon/user_forms.clj
+++ modules/bootstrap/src/modular/bootstrap/cylon/user_forms.clj
@@ -154,9 +154,15 @@
     (boilerplate
      this req
      (html
-      [:div
-       [:style (styles)]
-       (:message model)
+      [:div.row {:style "padding-top: 50px"}
+       [:div.col-md-2]
+       [:div.col-md-10
+        [:h2  (:header model)]]]
+      [:div.row
+       [:div.col-md-2]
+       [:div.col-md-10
+        [:style (styles)]
+        (:message model)]
        ]))
     )


remove compile dep from jar

remove compile dep from jar

--- tasks.clj
+++ tasks.clj
@@ -14,6 +14,8 @@
 (deftask clean
   (clean (file "src" tokyocabinet))
   (clean (file "src" tokyocabinet-java)))
+
+(remove-dep! jar compile)

 (deftask compile-native #{clean}
   (log (format "Compiling tokyocabinet for %s/%s" (os-name) (os-arch)))


use SQL with comments as unit test for #4 - robust SQL parsing

--- test/asphalt/core_test.clj
+++ test/asphalt/core_test.clj
@@ -27,7 +27,9 @@

 (a/defsql sql-insert "INSERT INTO emp (name, salary, dept) VALUES (^string $name, ^int $salary, ^string $dept)")

-(a/defsql sql-select "SELECT ^string name, ^int salary, ^string dept FROM emp")
+(a/defsql sql-select "SELECT ^string name, -- ^int age,
+-- ^boolean gender,
+^int salary, ^string dept FROM emp")

 (a/defsql sql-selfew "SELECT ^string name, ^int salary, ^string dept FROM emp WHERE name = ?")


Fix meter-test.

Fix meter-test.

--- test/blocks/meter_test.clj
+++ test/blocks/meter_test.clj
@@ -74,21 +74,27 @@
       @(s/put! stream :x)
       @(s/put! stream :x)
       (Thread/sleep 30)
-      (is (or (= [{:type ::meter/list-stream
-                   :label "TestStore"
-                   :value 2}]
-                 @events)
-              (= [{:type ::meter/list-stream
+      (let [result @events]
+        (if (= 1 (count result))
+          (is (= {:type ::meter/list-stream
+                  :method :blocks.meter-test/flow
+                  :label "TestStore"
+                  :value 2}
+                 (first result)))
+          (is (= [{:type ::meter/list-stream
+                   :method :blocks.meter-test/flow
                    :label "TestStore"
                    :value 1}
                   {:type ::meter/list-stream
+                   :method :blocks.meter-test/flow
                    :label "TestStore"
                    :value 1}]
-                 @events)))
+                 result))))
       (reset! events [])
       @(s/put! stream :x)
       (s/close! stream)
       (is (= [{:type ::meter/list-stream
+               :method :blocks.meter-test/flow
                :label "TestStore"
                :value 1}]
              @events)))))


added filtering of data

added filtering of data

--- app/views/viz/plot.cljs
+++ app/views/viz/plot.cljs
@@ -24,6 +24,11 @@
                                  "#EFBD2E"
                                  "#73B845"
                                  "#009BDD"])
+
+(defn hide? [bounds d]
+  (let [{:keys [low high]} bounds
+        t (get-in d [:timestamp])]
+    (and (>= t low) (< t high))))

 (defn events->chan
   "Given a target DOM element and event type return a channel of
@@ -103,11 +108,8 @@
             (v (x-scale (:x-cen vpts)) (y-scale (:y-max vpts)) (z-scale (:z-min vpts))) (v (x-scale (:x-cen vpts)) (y-scale (:y-max vpts)) (z-scale (:z-min vpts)))
             (v (x-scale (:x-cen vpts)) (y-scale (:y-min vpts)) (z-scale (:z-min vpts))) (v (x-scale (:x-cen vpts)) (y-scale (:y-min vpts)) (z-scale (:z-max vpts)))
             ]]
-    (println vpts)
-    (println (x-scale (:x-max vpts)))
     (doseq [v vs]
       (-> new-line-geo .-vertices (.push v)))
-    (log/fine l "updating lineo geo")
     (. scatter-plot (remove line))
     (let [new-line (-> (js/THREE.BoxHelper. (js/THREE.Line. new-line-geo
                                                             line-material
@@ -117,8 +119,11 @@
       (. scatter-plot (add new-line))
       (om/set-state! owner :line new-line))

-    (let [point-geo (js/THREE.Geometry.)]
-      (doseq [d datoms]
+    (let [point-geo (js/THREE.Geometry.)
+          time-bound (om/get-state owner :time-bound)
+          ds (filter (partial hide? time-bound) datoms)]
+
+      (doseq [d ds]
         (let [x (x-scale (:x d))
               y (y-scale (:y d))
               z (z-scale (:z d))]
@@ -128,14 +133,10 @@
         (. scatter-plot (remove points))
         (. scatter-plot (add new-points))
         (om/set-state! owner :points new-points)
-
         (.clear renderer)
         (. camera (lookAt (.-position scene)))
         (. renderer (render scene camera))
-        (.log js/console renderer)))))
-
-(defn update-plot [e]
-  (log/fine l "new datoms"))
+        ))))

 ;; ref: http://bl.ocks.org/phil-pedruco/9852362
 (defcomponent plot-view
@@ -162,16 +163,38 @@
       :sx 0
       :sy 0
       :down false
-      :update-chan (chan)
+      :time-bound {:low (.-MIN_VALUE js/Number) :high (.-MAX_VALUE js/Number)}
       }))
   (will-mount
+   [_]
+   (do
+     (let [{:keys [ws-chan select-chan event-bus]} (om/get-shared owner)
+           e-chan (chan)
+           ws-sub-chan (chan (sliding-buffer 25))]
+       (async/tap (:bus event-bus) e-chan)
+       (sub (:pub ws-chan) :post ws-sub-chan)
+       (go-loop
+           [[m c] (alts! [ws-sub-chan select-chan e-chan])]
+         (when m
+           (condp = c
+             ws-sub-chan (do
+                           (om/update-state! owner :datoms #(conj % (:data m)))
+                           (render owner (om/get-state owner :datoms)))
+             select-chan (do
+                           (om/set-state! owner :time-bound m)
+                           (render owner (om/get-state owner :datoms)))
+             e-chan (if (= m :reset)
+                      (om/set-state! owner :datoms [])))
+           (recur (alts! [ws-sub-chan select-chan e-chan]))))))
+   )
+  (did-mount
    [_]
    (do
      (let [{:keys [:renderer :camera :scene :scatter-plot :w :h]} (om/get-state owner)
            down (chan) up (chan) move (chan)]
-       (events->chan js/window EventType.MOUSEDOWN down)
-       (events->chan js/window EventType.MOUSEUP up)
-       (events->chan js/window EventType.MOUSEMOVE move)
+       (events->chan (om/get-node owner "plot") EventType.MOUSEDOWN down)
+       (events->chan (om/get-node owner "plot") EventType.MOUSEUP up)
+       (events->chan (om/get-node owner "plot") EventType.MOUSEMOVE move)
        (go-loop [[event c] (alts! [down up move])]
          (condp = c
            down (do
@@ -192,38 +215,18 @@
                     (om/set-state! owner :sy (+ sy dy))
                     ))
            (log/warning l "nothing!"))
-         (recur (alts! [down up move])))
-       )
-     (let [{:keys [ws-chan select-chan event-bus]} (om/get-shared owner)
-           e-chan (chan)
-           ws-sub-chan (chan (sliding-buffer 25))]
-       (async/tap (:bus event-bus) e-chan)
-       (sub (:pub ws-chan) :post ws-sub-chan)
-       (go-loop
-           [[m c] (alts! [ws-sub-chan e-chan])]
-
-         (when m
-           (condp = c
-             ws-sub-chan (do
-                           (om/update-state! owner :datoms #(conj % (:data m)))
-                           (render owner (om/get-state owner :datoms))))
-           e-chan (if (= m :reset)
-                    (om/set-state! owner :datoms []))
-           (recur (alts! [ws-sub-chan select-chan e-chan]))))))
-   )
-  (did-mount
-   [_]
-   (let [{:keys [renderer camera scene scatter-plot w h]} (om/get-state owner)]
-     (. renderer (setSize w h))
-     (dommy/append! (om/get-node owner "plot") (.-domElement renderer))
-     (. renderer (setClearColor 0xEEEEEE 1.0))
-     (. scene (add scatter-plot))
-     (aset camera "position" "x" 200)
-     (aset camera "position" "y" -100)
-     (aset camera "position" "z" 100)
-     (aset scatter-plot "rotation" "y" 0)
-     (render owner (om/get-state owner :datoms))
-     (animate renderer camera scene (.getTime (js/Date.))))
+         (recur (alts! [down up move]))))
+     (let [{:keys [renderer camera scene scatter-plot w h]} (om/get-state owner)]
+       (. renderer (setSize w h))
+       (dommy/append! (om/get-node owner "plot") (.-domElement renderer))
+       (. renderer (setClearColor 0xEEEEEE 1.0))
+       (. scene (add scatter-plot))
+       (aset camera "position" "x" 200)
+       (aset camera "position" "y" -100)
+       (aset camera "position" "z" 100)
+       (aset scatter-plot "rotation" "y" 0)
+       (render owner (om/get-state owner :datoms))
+       (animate renderer camera scene (.getTime (js/Date.)))))

    )
   (render


Disable coloured output in midje.emission.plugins.junit

Fixes: #368

--- src/midje/emission/plugins/junit.clj
+++ src/midje/emission/plugins/junit.clj
@@ -14,7 +14,8 @@

 ;; This plugin requires all emission api calls to be
 ;; forwarded to it.
-(config/change-defaults :print-level :print-facts)
+(config/change-defaults :print-level :print-facts
+                        :colorize false)

 (defonce report-file (atom nil))
 (defonce last-fact (atom {}))


CMR-3044: Updated proto-repl

CMR-3044: Updated proto-repl

--- dev-system/project.clj
+++ dev-system/project.clj
@@ -100,7 +100,7 @@
                         ;; Must be listed here as metadata db depends on it.
                         [drift "1.5.3"]
                         [proto-repl-charts "0.3.0"]
-                        [proto-repl "0.3.0"]]
+                        [proto-repl "0.3.1"]]
          :source-paths ["src" "dev" "test"]
          :injections [(require 'pjstadig.humane-test-output)
                       (pjstadig.humane-test-output/activate!)]}


Stop event propagation when clicking editor background

--- frontend/src/faceboard/views/editor.cljs
+++ frontend/src/faceboard/views/editor.cljs
@@ -43,7 +43,8 @@
     (let [new-value (model->json data)
           old-value (if (nil? *codemirror*) new-value (codemirror-value))
           not-in-sync (not (= old-value new-value))]
-      (dom/div {:class "editor"}
+      (dom/div {:class "editor"
+                :on-click #(.stopPropagation %)}
         (dom/div {:class       "editor-host"
                   :ref         "host"
                   :on-key-down #(handle-codemirror-key %)})


Inbox: Remove unnecessary CSS classes

Inbox: Remove unnecessary CSS classes

--- src-cljs/pepa/workflows/inbox2.cljs
+++ src-cljs/pepa/workflows/inbox2.cljs
@@ -95,11 +95,8 @@
 ;;; `:id' and use that id to update the selection information.
 (ui/defcomponent inbox-column-page [page owner {:keys [page-click!]}]
   (render [_]
-    [:li.page {:draggable true          ;TODO: only `:draggable' when
-                                        ;`(not :unsaved?)'
-               :class [(when (:selected? page) "selected")
-                       ;; TODO: `:unsaved?'
-                       (when (:working? page)  "working")]
+    [:li.page {:draggable true
+               :class [(when (:selected? page) "selected")]
                :on-drag-start (fn [e]
                                 (println "inbox-column-page")
                                 (doto e.dataTransfer
@@ -168,8 +165,7 @@
                                (when (satisfies? ColumnDropTarget (om/value column))
                                  (.preventDefault e)))
                :on-drag-start (partial column-drag-start state column owner)
-               :on-drag-end (fn [_]
-                              (println "on-drag-end"))
+               :on-drag-end (fn [_] (println "on-drag-end"))
                :on-drop (fn [e]
                           (println "on-drop")
                           (let [page-cache (::page-cache column)


Another test that depended on function metadata.

--- test/midje/util/t_report.clj
+++ test/midje/util/t_report.clj
@@ -30,7 +30,7 @@
 ;; In the case of the checker (exactly odd?), you want to see failures
 ;; written in terms of a function name instead of some absurdly complicated
 ;; #<core$even_QMARK_ clojure.core$even_QMARK_@15ee9cc3>
-(fact "(exactly odd?) is printed attractively"
+(future-fact "(exactly odd?) is printed attractively"
   (attractively-stringified-form even?) => "a function named 'even?'"
   (attractively-stringified-form (fn [n] 1)) => #"fn__")


added disconnect event

added disconnect event

--- src/server/socketio-interface.cljs
+++ src/server/socketio-interface.cljs
@@ -17,7 +17,15 @@
     (fn [room-id username]
       (server-interface/sign-in (.-id socket) room-id username
         (fn [user-id]
-          (.emit socket "sign-in-success" user-id))))))
+          (.emit socket "sign-in-success" user-id)))))
+
+  (.on socket "disconnect"
+    (fn []
+      (println "Socket id" (.-id socket) "has disconnected")
+      (server-interface/sign-out (.-id socket)
+                                 #(println "Socket id:"
+                                           (.-id socket)
+                                           "has successfully signed out!")))))

 (defn start-listening! []
   (.on io "connection" connection))


remove print statement

remove print statement

Signed-off-by: yenda <96f164ad4d9b2b0dacf8ebee2bb1eeb3aa69adf1@status.im>

--- src/status_im/utils/semaphores.cljs
+++ src/status_im/utils/semaphores.cljs
@@ -7,7 +7,6 @@

 (fx/defn free [{:keys [db]} semaphore]
   #_{:pre [(keyword? semaphore)]}
-  (println {:db (update db :semaphores disj semaphore)})
   {:db (update db :semaphores disj semaphore)})

 (defn locked? [{:keys [db]} semaphore]


Allow enabling/disabling of logger in running app

Loading the one.repmax.logging namespace no longer automatically creates
a reaction for logging events. Logging :model-change events has a hugely
negative impact on performance (e.g., filtering the exercise list is
about 2 orders of magnitude slower when :model-change events are being
sent to the logger). To avoid this performance hit, logging is disabled
by default; it can be enabled on demand when needed.

--- src/app/cljs/one/repmax/logging.cljs
+++ src/app/cljs/one/repmax/logging.cljs
@@ -1,11 +1,8 @@
-(ns ^{:doc "When this library is loaded, create a logger named
-'events' and send all application-specific events to it.
+(ns ^{:doc "When this library is loaded, create a logger named 'events'.

-To view log messages in the browser console, add a call
-to `(log/console-output)` to this namespace or evaluate this from the
-REPL.
+           See comments at end of file for example usage.

-For more information see library.logging."}
+           For more information see one.logging."}
   one.repmax.logging
   (:require [one.dispatch :as dispatch]
             [one.logging :as log]))
@@ -13,8 +10,30 @@
 (def ^{:doc "The logger that receives all application-specific events."}
   logger (log/get-logger "events"))

-(dispatch/react-to (constantly true)
-                   (fn [t d] (log/info logger (str (pr-str t) " - " (pr-str d)))))
+(defn log!
+  "Create a new reaction that will react to ALL events and log them to the
+  given logger.

-;; log to the console
-(log/start-display (log/console-output))
+  WARNING: For events that have a large amount of data (which is the case for
+  most :model-change events in One Rep Max), sending these events to the logger
+  has a significant negative performance impact on the application. You are
+  recommended to log events ONLY For debugging purposes."
+  [logger]
+  (dispatch/react-to (constantly true)
+                     (fn [t d] (log/info logger (str (pr-str t) " - " (pr-str d))))))
+
+(comment
+
+  ;; register a reaction that will react to ALL events and log them to the 'events' logger
+  (def logging-reaction (log! logger))
+
+  ;; send the the log output to the console
+  (log/start-display (log/console-output))
+
+  ;; stop logging events
+  (dispatch/delete-reaction logging-reaction)
+
+  ;; change the logging level
+  (log/set-level logger :fine)
+
+  )


[#3158] Fix test

[#3158] Fix test

--- backend/test/akvo/lumen/lib/data_group_test.clj
+++ backend/test/akvo/lumen/lib/data_group_test.clj
@@ -44,4 +44,4 @@

 (deftest ^:unit data-groups-view
   (let [expected "CREATE TEMP VIEW foo AS SELECT * FROM bar"]
-    (is (= expected (data-group/data-groups-view "foo" true false "SELECT * FROM bar")))))
+    (is (= expected (data-group/data-groups-view "foo" true false "SELECT * FROM bar ")))))


multiple bind test

multiple bind test

--- dev/dev/core.cljs
+++ dev/dev/core.cljs
@@ -106,8 +106,12 @@
         [:div
          [:div (pr-str (m/bind bind-test-ref))]
          [:div (pr-str (m/bind bind-test-ref get :v))]
-         [:div (pr-str "Divisible by 10: "
-                       (m/bind bind-test-ref #(zero? (rem (:v %) 10))))]])
+         [:div "Divisible by 10: "
+          (pr-str
+           (m/bind bind-test-ref #(zero? (rem (:v %) 10))))]
+         [:div "Some Atom:"
+          (pr-str
+           (m/bind some-atom))]])
       [:button {:on-click (fn [_]
                             (swap! bind-test-ref update :v inc))}
        "inc"]


Transaction update test takes stringified int

* not sure if this is the interface I want.

--- test/swanson/transactions_test.clj
+++ test/swanson/transactions_test.clj
@@ -11,6 +11,6 @@
 (deftest test-transactions-route
   (testing  "transactions route works"
     (let  [req (request :put "/transactions/826")
-           json "{\"category_id\": 4}"
+           json "{\"category_id\": \"4\"}"
            response (app (body req json))]
       (is  (= (:status response) 201)))))


Stringify event IDs

Stringify event IDs

--- src/checkin_halake/models/events.clj
+++ src/checkin_halake/models/events.clj
@@ -3,18 +3,20 @@
             [environ.core :refer [env]])
   (:use checkin-halake.models.core))

-(defn- fix-event [doc]
-  (dissoc doc :password))
+(defn- fix-event [event]
+  (-> event
+      (assoc :id (str (:_id event))) ;; FIXME: :id is a necessary field?
+      (dissoc :_id)))

 (defn register-event [title image-url event-at content-url]
   (let [event {:title title, :image-url image-url,
                :event-at event-at, :content-url content-url,
                :createdAt (java.util.Date.)}]
-    (mc/insert-and-return db "events" event)))
+    (fix-event (mc/insert-and-return db "events" event))))

 ;; (register-event "Swift開発講座" "/images/evnets/inside_halake.png" (java.util.Date ) "taro@email.com" "hoge" "Taro" "090")

 (defn query-events []
-  (mc/find-maps db "events"))
+  (map fix-event (mc/find-maps db "events")))

 ;; (query-events)


Try subscribing public URL

Try subscribing public URL

--- src/sns_beanstalk_chat/handler.clj
+++ src/sns_beanstalk_chat/handler.clj
@@ -59,8 +59,7 @@
         creds    {:eulalie/type :refresh :current current}]
     (log/info (pr-str {:event :start :data {:role iam-role :creds creds :topic topic}}))
     (eulalie.creds/periodically-refresh! current iam-role)
-    (let [internal-ip (instance-data/retrieve!! :local-ipv4)
+    (let [hostname (instance-data/retrieve!! :public-hostname)
           events      (async/chan)]
-      (http/run-server (make-internal-app events)
-                       {:port 8080 :ip internal-ip}))
-    (subscribe-sns!! creds internal-ip topic)))
+      (http/run-server (make-internal-app events) {:port 8080})
+      (subscribe-sns!! creds hostname topic))))


chapter 5, part 2: sequence abstraction

chapter 5, part 2: sequence abstraction

--- src/clj_prj03/ch5_core_functions.clj
+++ src/clj_prj03/ch5_core_functions.clj
@@ -23,3 +23,179 @@
 ;; casting can be done with (into)
 (into {} (map (fn [[key val]] [key (inc val)])
   {:max 30 :min 10}))
+
+  ; ----------------------------------
+  ; Part 2: Sequence Abstraction
+  ; ----------------------------------
+
+  ; Objects may be treated as a seq:
+
+  (map identity {:name "Bill Compton" :occupation "Dead mopey guy"})
+  (seq {:name "Bill Compton" :occupation "Dead mopey guy"})
+  ;; -> both return a seq (list of vectors)
+
+  ; map function
+  (map inc [1 2 3])
+
+  (map str ["a" "b" "c"] ["A" "B" "C"])
+  ;; equivalent to:
+  (list (str "a" "A") (str "b" "B") (str "c" "C"))
+
+  (def human-consumption [8.1 7.3 6.6 5.0])
+  (def critter-consumption [0.0 0.2 0.3 1.1])
+  (defn unify-diet-data
+    [human critter]
+    {:human human
+     :critter critter})
+
+  (map unify-diet-data human-consumption critter-consumption)
+
+  ;; you can also pass a collection of functions to map
+  (def sum #(reduce + %))
+  (def avg #(/ (sum %) (count %)))
+  (defn stats
+    [numbers]
+    (map #(% numbers) [sum count avg]))
+
+  (stats [3 4 10])
+  (stats [80 1 44 13 6])
+
+
+  ; reduce function
+  (reduce (fn [new-map [key val]]
+             (assoc new-map key (inc val)))
+          {}
+          {:max 30 :min 10})
+
+  (reduce (fn [new-map [key val]]
+            (if (> val 4)
+               (assoc new-map key val)
+                new-map))
+    {}
+    {:human 4.1
+     :critter 3.9})
+
+  ; take, drop, take-while, drop-while
+  (take 3 [1 2 3 4 5 6 7 8 9 10])  ; [1 2 3]
+  (drop 3 [1 2 3 4 5 6 7 8 9 10])  ; [4 5 6 7 8 9 10]
+
+  (def food-journal
+    [{:month 1 :day 1 :human 5.3 :critter 2.3}
+     {:month 1 :day 2 :human 5.1 :critter 2.0}
+     {:month 2 :day 1 :human 4.9 :critter 2.1}
+     {:month 2 :day 2 :human 5.0 :critter 2.5}
+     {:month 3 :day 1 :human 4.2 :critter 3.3}
+     {:month 3 :day 2 :human 4.0 :critter 3.8}
+     {:month 4 :day 1 :human 3.7 :critter 3.9}
+     {:month 4 :day 2 :human 3.7 :critter 3.6}])
+
+  (take-while #(< (:month %) 3) food-journal)
+  (drop-while #(< (:month %) 3) food-journal)
+  (take-while #(< (:month %) 4)
+              (drop-while #(< (:month %) 2) food-journal))
+
+  ; filter, some
+
+  (filter #(< (:human %) 5) food-journal)  ; goes through all
+  (some #(> (:critter %) 5) food-journal)
+  (some #(> (:critter %) 3) food-journal)
+  ; checks if a condition holds for any element in the sequence
+
+  (some #(and (> (:critter %) 3) %) food-journal)
+
+  ; sort
+  (sort [3 1 2])
+  (sort-by count ["aaa" "c" "bb"])
+
+  ; concat
+  (concat [1 2] [3 4])
+
+  ; 2.3 Lazy seqs
+  (def vampire-database
+    {0 {:makes-blood-puns? false, :has-pulse? true :name "McFishwich"}
+     1 {:makes-blood-puns? false, :has-pulse? true :name "McMackson"}
+     2 {:makes-blood-puns? true, :has-pulse? false :name "Damon Salvatore"}
+     3 {:makes-blood-puns? true, :has-pulse? true :name "Mickey Mouse"}})
+
+  (defn vampire-related-details
+    [ssn]
+    (Thread/sleep 1000)
+    (get vampire-database ssn))
+
+  (defn vampire?
+    [record]
+    (and (:makes-blood-puns? record)
+         (not (:has-pulse? record))))
+
+  (defn identify-vampire
+    [ssn]
+    (first (filter vampire?
+      (map vampire-related-details ssn))))
+
+  ;; clojure clusters in groups of 32
+  ;; so this takes 32 seconds, not 3 seconds
+  (time (identify-vampire (range 0 1000000)))
+
+
+  (def identities
+    [{:alias "Batman" :real "Bruce Wayne"}
+     {:alias "Spiderman" :real "Peter Parker"}
+     {:alias "Santa" :real "Your mom"}
+     {:alias "Easter Bunny" :real "Your dad"}
+     {:alias "alias 5", :real "real 5"}
+     {:alias "alias 6", :real "real 6"}
+     {:alias "alias 7", :real "real 7"}
+     {:alias "alias 8", :real "real 8"}
+     {:alias "alias 9", :real "real 9"}
+     {:alias "alias 10", :real "real 10"}
+     {:alias "alias 11", :real "real 11"}
+     {:alias "alias 12", :real "real 12"}
+     {:alias "alias 13", :real "real 13"}
+     {:alias "alias 14", :real "real 14"}
+     {:alias "alias 15", :real "real 15"}
+     {:alias "alias 16", :real "real 16"}
+     {:alias "alias 17", :real "real 17"}
+     {:alias "alias 18", :real "real 18"}
+     {:alias "alias 19", :real "real 19"}
+     {:alias "alias 20", :real "real 20"}
+     {:alias "alias 21", :real "real 21"}
+     {:alias "alias 22", :real "real 22"}
+     {:alias "alias 23", :real "real 23"}
+     {:alias "alias 24", :real "real 24"}
+     {:alias "alias 25", :real "real 25"}
+     {:alias "alias 26", :real "real 26"}
+     {:alias "alias 27", :real "real 27"}
+     {:alias "alias 28", :real "real 28"}
+     {:alias "alias 29", :real "real 29"}
+     {:alias "alias 30", :real "real 30"}
+     {:alias "alias 31", :real "real 31"}
+     {:alias "alias 32", :real "real 32"}
+     {:alias "alias 33", :real "real 33"}
+     {:alias "alias 34", :real "real 34"}])
+
+  (defn snitch
+    "Announce real identity to the world"
+    [identity]
+    (println (:real identity))
+    (:real identity))
+
+  (def revealed-identities (map snitch identities))
+  (first revealed-identities)
+
+;; doesn't print real 33 and real 34
+
+;; lazy value is also cached:
+(first revealed-identities) ;; doesn't reprint whole sequence
+
+(doall revealed-identities)
+
+; Infinite sequences
+(concat (take 8 (repeat "na")) ["Batman!"])
+(take 3 (repeatedly (fn [] (rand-int 10))))
+
+(defn even-numbers
+  ([] (even-numbers 0))
+  ([n] (cons n (lazy-seq (even-numbers (+ n 2))))))
+(take 10 (even-numbers))
+
+(cons 0 '(2 4 6))


[BUGFIX] Correctly destroy qtip for lesson <div>s

[BUGFIX] Correctly destroy qtip for lesson
s

Previously any removed lesson
s left behind hidden qtip
s
which were only observed using the Chrome Developer tools. Turns out the
proper way to destroy qtip is to do it through the API.

Signed-off-by: Pang Yan Han <22594c345857f664c61cd411f607c4d40a9d4af9@gmail.com>

--- src/cljs/cljs_nusmods/timetable.cljs
+++ src/cljs/cljs_nusmods/timetable.cljs
@@ -1053,9 +1053,10 @@
   "Removes the <div> object of a lesson module, and replaces the former
    columns occupied by its parent <td> with new <td> elements."
   [$lessonDiv startTime endTime]
-  (let [$parentTd (parent $lessonDiv)]
+  (let [$parentTd (parent $lessonDiv)
+        qtipApi   (.qtip $lessonDiv "api")]
     (remove-attr $parentTd "colspan")
-    (.qtip $lessonDiv "destroy")
+    (.destroy qtipApi true)
     (.remove $lessonDiv)
     (add-missing-td-elements-replacing-lesson $parentTd startTime endTime)
     (html-timetable-display-saturday-if-needed!)))


Commented k-medoids clustering

Commented k-medoids clustering

--- src/rdf_path_examples/clustering.clj
+++ src/rdf_path_examples/clustering.clj
@@ -16,7 +16,9 @@
   [^PersistentHashSet paths
    distance-fn'
    ^Number k]
-  (let [distance-fn (fn [a b] (if (= a b) 0 (distance-fn' a b)))
+  (let [; Wrap distance function, so that it allows to compare the same paths.
+        distance-fn (fn [a b] (if (= a b) 0 (distance-fn' a b)))
+        ; Function for selecting initial medoids
         vj (fn [path]
              (mapsum (fn [i]
                        (/ (distance-fn path i)
@@ -25,17 +27,21 @@
         initial-clusters (into {}
                                (map (comp #(vector % #{}) first)
                                     (take k (sort-by second (map (juxt identity vj) paths)))))
+        ; Path is assigned to the medoid it is closest to.
         assign-to-cluster (fn [clusters path]
                             (update clusters
                                     (reduce (partial min-key (partial distance-fn path)) (keys clusters))
                                     conj
                                     path))
+        ; Compute the total sum of distances of medoids to the members of their clusters.
         sum-distances (fn [clusters]
                         (mapsum (fn [[medoid members]]
                                   (mapsum (partial distance-fn medoid) members))
                                 clusters))
+        ; Compute the total of distances between the members of a cluster.
         total-distance (fn [cluster member]
                          (mapsum (partial distance-fn member) cluster))
+        ; Find new medoid from members of a cluster.
         find-new-medoid (fn [[medoid members]]
                           (cond ; If the cluster is empty, return its medoid.
                                 (empty? members) medoid
@@ -44,7 +50,6 @@
                                 ; Otherwise select the members with the minimum total distance to the others
                                 :else (apply min-key (partial total-distance members) members)))
         recluster (fn [clusters]
-                    (log/info clusters)
                     (let [initial-clusters (into {} (map (comp #(vector % #{}) find-new-medoid)
                                                          clusters))]
                       (reduce assign-to-cluster
@@ -57,7 +62,7 @@
             distance-sum (sum-distances clusters)
             new-distance-sum (sum-distances new-clusters)]
         (if (= distance-sum new-distance-sum)
-          (keys clusters)
+          (keys clusters) ; If the total distance stays the same, return the medoids.
           (recur (if (> distance-sum new-distance-sum) new-clusters clusters)))))))

 (defn k-medoids-initialization


Use simplifying macro for visualisations.

--- src/cljs/town_client/components.cljs
+++ src/cljs/town_client/components.cljs
@@ -18,38 +18,29 @@
   [:select.navigate-areas] [neighborhoods]
   {[root] (content (map neighborhood-menu-item neighborhoods))})

-(defsnippet future-visualization "public/kaupunginosa/index.html"
+(defstatvisualisation future-visualisation "public/kaupunginosa/index.html"
   [:.choice-graphs [:.g-choice :.future]] []
-  {[[:.choice-line (attr-has :data-choice "verylikely")]]    (set-attr :style {:width "0%"})
-   [[:.choice-line (attr-has :data-choice "quitelikely")]]   (set-attr :style {:width "10%"})
-   [[:.choice-line (attr-has :data-choice "notsure")]]       (set-attr :style {:width "20%"})
-   [[:.choice-line (attr-has :data-choice "quiteunlikely")]] (set-attr :style {:width "30%"})
-   [[:.choice-line (attr-has :data-choice "veryunlikely")]]  (set-attr :style {:width "40%"})})
-(defsnippet family-visualization "public/kaupunginosa/index.html"
+  [["verylikely" 40] ["quitelikely" 30] ["notsure" 20]
+  ["quiteunlikely" 10] ["veryunlikely" 0]])
+
+(defstatvisualisation family-visualisation "public/kaupunginosa/index.html"
   [:.choice-graphs [:.g-choice :.family]] []
-  {[[:.choice-line (attr-has :data-choice "single")]]        (set-attr :style {:width "0%"})
-   [[:.choice-line (attr-has :data-choice "couple")]]        (set-attr :style {:width "10%"})
-   [[:.choice-line (attr-has :data-choice "withkids")]]      (set-attr :style {:width "20%"})
-   [[:.choice-line (attr-has :data-choice "group")]]         (set-attr :style {:width "30%"})
-   [[:.choice-line (attr-has :data-choice "other")]]         (set-attr :style {:width "40%"})})
-(defsnippet transport-visualization "public/kaupunginosa/index.html"
+  [["single" 0] ["couple" 10] ["withkids" 20] ["group" 30] ["other" 40]])
+
+(defstatvisualisation transport-visualisation "public/kaupunginosa/index.html"
   [:.choice-graphs [:.g-choice :.transport]] []
-  {[[:.choice-line (attr-has :data-choice "car")]]           (set-attr :style {:width "0%"})
-   [[:.choice-line (attr-has :data-choice "bike")]]          (set-attr :style {:width "10%"})
-   [[:.choice-line (attr-has :data-choice "walk")]]          (set-attr :style {:width "20%"})
-   [[:.choice-line (attr-has :data-choice "public")]]        (set-attr :style {:width "30%"})})
+  [["car" 100] ["bike" 50] ["walk" 20] ["public" 100]])

-(defstatvisualisation age-visualization "public/kaupunginosa/index.html"
+(defstatvisualisation age-visualisation "public/kaupunginosa/index.html"
   [:.choice-graphs [:.g-choice :.age]] []
   [[0 80] [16 70] [20 60] [25 50] [30 40] [40 50] [50 60] [60 70] [70 80]])

 (defsnippet background-info-section "public/kaupunginosa/index.html"
   [[:.g-info-section :.background]] []
-  {[:.choice-graphs [:.g-choice :.future]] (substitute (future-visualization))
-   [:.choice-graphs [:.g-choice :.family]] (substitute (family-visualization))
-   [:.choice-graphs [:.g-choice :.transport]] (substitute (transport-visualization))
-   [:.choice-graphs [:.g-choice :.age]] (substitute (age-visualization))})
-
+  {[:.choice-graphs [:.g-choice :.future]] (substitute (future-visualisation))
+   [:.choice-graphs [:.g-choice :.family]] (substitute (family-visualisation))
+   [:.choice-graphs [:.g-choice :.transport]] (substitute (transport-visualisation))
+   [:.choice-graphs [:.g-choice :.age]] (substitute (age-visualisation))})

 (defsnippet head "public/kaupunginosa/index.html" [:head] [neighborhood]
   {[:title] (content neighborhood)})


some renaming in profiling ns

some renaming in profiling ns

--- src/com/billpiel/sayid/profiling.clj
+++ src/com/billpiel/sayid/profiling.clj
@@ -76,23 +76,21 @@
                        :kids-time kids-time
                        :arg-set #{(:args tree)}})))

-(defn add-metrics-to-rec
-  [rec]
-  (let [rec' (->> rec
+(defn decorate-tree-with-metrics
+  [tree]
+  (let [tree' (->> tree
                   :children
                   (mapv add-durations-to-tree)
                   rec/mk-recording)]
-    (->> rec'
+    (->> tree'
         :children
         (map get-fn-metrics)
         (apply merge-fn-metrics)
         finalize-metrics
-        (assoc rec' :fn-metrics))))
-
-
+        (assoc tree' :fn-metrics))))

 (defn get-report
-  [rec])
+  [tree])

 (defn print-report
-  [rec])
+  [tree])


[FIX #2351] Lt translation fixed.

[FIX #2351] Lt translation fixed.

Lt translation fixed.

--- src/status_im/translations/lt.cljs
+++ src/status_im/translations/lt.cljs
@@ -8,13 +8,13 @@
    :chat-name                             "Pokalbio pavadinimas"
    :notifications-title                   "Perspėjimai ir garsai"
    :offline                               "Neprisijungęs"
-   :search-for                            "Ieskoti..."
+   :search-for                            "Ieškoti..."
    :cancel                                "Atšaukti"
    :next                                  "Sekantis"
    :open                                  "Atidaryti"
    :description                           "Aprašymas"
    :url                                   "URL"
-   :type-a-message                        "Įveskite pranešimą..."
+   :type-a-message                        "Įveskite žinutę..."
    :type-a-command                        "Pradėkite rašyti komandą..."
    :error                                 "Klaida"
    :unknown-status-go-error               "Nežinoma status-go klaida"
@@ -22,15 +22,11 @@
    :yes                                   "Taip"
    :no                                    "Ne"

-   :camera-access-error                   "Norėdami suteikti reikalingą fotoaparato leidimą, eikite į savo sistemos nustatymus ir įsitikinkite, kad pasirinktas Status > Camera."
-   :photos-access-error                   "Norėdami suteikti reikalingą fotoaparato leidimą, eikite į savo sistemos nustatymus ir įsitikinkite, kad pasirinktas Status > Camera."
+   :camera-access-error                   "Norėdami suteikti reikalingą leidimą filmuoti, eikite į savo sistemos nustatymus ir įsitikinkite, kad pasirinktas Status > Camera."
+   :photos-access-error                   "Norėdami suteikti reikalingą leidimą fotografuoti, eikite į savo sistemos nustatymus ir įsitikinkite, kad pasirinktas Status > Photo."

    ;;drawer
-   :invite-friends                        "Pakviesti draugus"
-   :faq                                   "DUK"
    :switch-users                          "Pasikeisti naudotoją"
-   :feedback                              "Turite atsiliepimą?\nPakratykite telefoną!"
-   :view-all                              "Rodyti viską"
    :current-network                       "Dabartinis tinklas"

    ;;chat
@@ -39,10 +35,10 @@
    :search-chat                           "Ieškoti pokalbyje"
    :members                               {:one   "1 narys"
                                            :other "{{count}} nariai"
-                                           :zero  "jokių nariū"}
-   :members-active                        {:one   "1 nrys"
+                                           :zero  "jokių narių"}
+   :members-active                        {:one   "1 narys"
                                            :other "{{count}} nariai"
-                                           :zero  "jokių nariū"}
+                                           :zero  "jokių narių"}
    :public-group-status                   "Viešas"
    :active-online                         "Prisijungęs"
    :active-unknown                        "Nežinomas"
@@ -50,17 +46,17 @@
    :no-messages                           "Jokių žinučių"
    :suggestions-requests                  "Užklausimai"
    :suggestions-commands                  "Komandos"
-   :faucet-success                        "Dalintuvas užklausa gauta"
-   :faucet-error                          "Dalintuvas užklausos klaida"
+   :faucet-success                        "Dalintuvo užklausa gauta"
+   :faucet-error                          "Dalintuvo užklausos klaida"

    ;;sync
    :sync-in-progress                      "Sinchronizuojama..."
    :sync-synced                           "Sinchronizuota"

    ;;messages
-   :status-sending                        "Siunčiama"
+   :status-sending                        "Siunčiama..."
    :status-pending                        "Laukiama"
-   :status-sent                           "Nusiūsta"
+   :status-sent                           "Nusiųsta"
    :status-seen-by-everyone               "Visų matyta"
    :status-seen                           "Matyta"
    :status-delivered                      "Pristatyta"
@@ -76,7 +72,6 @@
                                            :other "valandos"}
    :datetime-day                          {:one   "diena"
                                            :other "dienos"}
-   :datetime-multiple                     "s"
    :datetime-ago                          "prieš"
    :datetime-yesterday                    "vakar"
    :datetime-today                        "šiandien"
@@ -84,13 +79,10 @@
    ;;profile
    :profile                               "Profilis"
    :edit-profile                          "Redaguoti profilį"
-   :report-user                           "Pranešti apie vartotoją"
    :message                               "Žinutė"
-   :username                              "Prisijungimo vardas"
    :not-specified                         "Nenurodyta"
-   :public-key                            "Viešas raktas"
+   :public-key                            "Viešasis raktas"
    :phone-number                          "Telefono numeris"
-   :email                                 "El. paštas"
    :update-status                         "Atsinaujinkite būseną..."
    :add-a-status                          "Pridėkite būseną..."
    :status-prompt                         "Sukurkite būseną, kad žmonės žinotų, ką jūs siūlote. Taip pat galite naudoti #hashtagus."
@@ -98,18 +90,14 @@
    :in-contacts                           "Kontaktuose"
    :remove-from-contacts                  "Ištrinti iš kontaktų"
    :start-conversation                    "Pradėti pokalbį"
-   :send-transaction                      "Siųsti transakciją"
-   :share-qr                              "Dalintis QR"
-   :error-incorrect-name                  "Pasirinkite kita vardą"
-   :error-incorrect-email                 "Neteisingas el. paštas"
-   :profile-testnet-icon                  "Testnet"
-   :profile-testnet-text                  "Tik Testnet. Nesiųskite ETH arba SNT į savo adresą"
+   :send-transaction                      "Siųsti sandėrį"
+   :testnet-text                          "Jūs esate testiniame tinkle {{testnet}}. Nesiųskite tikru ETH arba SNT į jūsų adresą"
+   :mainnet-text                          "Jūs esate pagrindiniame tinkle. Tikri ETH bus siunčiami"

    ;;make_photo
-   :image-source-title                    "Profilio atvaizdai"
+   :image-source-title                    "Profilio atvaizdas"
    :image-source-make-photo               "Fotografuoti"
    :image-source-gallery                  "Pasirinkti iš galerijos"
-   :image-source-cancel                   "Atšaukti"

    ;;sharing
    :sharing-copy-to-clipboard             "Kopijuoti į iškarpinę"
@@ -117,24 +105,22 @@
    :sharing-cancel                        "Atšaukti"

    :browsing-title                        "Naršyti"
-   :browsing-browse                       "@naršyti"
    :browsing-open-in-web-browser          "Atverti naršyklėje"
    :browsing-cancel                       "Naršyti"

    ;;sign-up
    :contacts-syncronized                  "Jūsų kontaktai buvo sinchronizuoti"
-   :confirmation-code                     (str "Dėkui! Mes išsiuntėme jums teksto pranešimą su patvirtinimo kodu. Prašau nurodyti kodą, kad patvirtintumėte savo telefono numerį")
-   :incorrect-code                        (str "Atsiprašome, kodas neteisingas, prašome įvesti dar kartą")
-   :generate-passphrase                   (str "Aš sukursiu slaptažodį, kad galėtumėte atkurti savo prieigą arba prisijungti iš kito įrenginio")
-   :phew-here-is-your-passphrase          "* Vajė *, buvo sunkoka, čia yra jūsų slaptažodis, * išsaugokite jį! * jeigu reikės atkurti jūsų paskyrą."
-   :here-is-your-passphrase               "Čia yra jūsų slaptažodis, * išsaugokite jį! * jeigu reikės atkurti jūsų paskyrą."
-   :here-is-your-signing-phrase           "Čia yra jūsų pasirašymo frazė. Ją naudosite, kad patvirtintumėte savo sandorius. * Užsirašykite ir saugokite!"
-   :written-down                          "Įsitikinkite, kad saugiai jį pasirašėte"
+   :confirmation-code                     (str "Dėkui! Mes išsiuntėme jums teksto pranešimą su patvirtinimo kodu. "
+						"Prašau nurodyti šį kodą, kad patvirtintumėte savo telefono numerį")
+   :incorrect-code                        (str "Atsiprašome, kodas neteisingas, prašome įvesti jį dar kartą")
+   :phew-here-is-your-passphrase          "Vajė, buvo sunkoka, čia yra jūsų slaptažodis, *išsaugokite jį!* jeigu reikės atkurti jūsų paskyrą."
+   :here-is-your-passphrase               "Čia yra jūsų slaptafrazė, *išsaugokite ją!* jeigu reikės atkurti jūsų paskyrą."
+   :here-is-your-signing-phrase           "Čia yra jūsų pasirašymo frazė. Ją naudosite, kad patvirtintumėte savo sandorius. *Užsirašykite ir saugokite!*"
    :phone-number-required                 "Palieskite čia, jei norite įvesti savo telefono numerį, tam kad rasti jūsų draugus"
    :shake-your-phone                      "Radote klaidą arba turite pasiūlymų? Tiesiog ~pakratykite~ savo telefoną!"
-   :intro-status                          "Naudokitės šiuo pokalbiu, kad nustatytumėte savo paskyrą ir pakeistumėte savo nustatymus!"
-   :intro-message1                        "Sveiki atvykę į Status \nPalieskite šį pranešimą, kad nustatytumėte slaptažodį ir pradėtumėte!"
-   :account-generation-message            "Sekundėlę, vyksta nemenki skaičiavimai!"
+   :intro-status                          "Kalbėkite su manimi, kad nustatytumėte savo paskyrą ir pakeistumėte savo nustatymus!"
+   :intro-message1                        "Sveiki atvykę į Status!\nPalieskite šį pranešimą, kad nustatytumėte slaptažodį ir pradėtumėte!"
+   :account-generation-message            "Sekundėlę, vyksta nemenki skaičiavimai! Generuojama jūsų paskyra!"
    :move-to-internal-failure-message      "Mums reikia perkelti keletą svarbių failų iš išorinės į vidinę atmintį. Norėdami tai padaryti, mums reikia jūsų leidimo. Būsimose versijose mes nenaudosime išorinės atminties."
    :debug-enabled                         "Debug serveris buvo paleistas! Dabar galite paleisti *status-dev-cli scan*, kad surastumėte serverį iš savo kompiuterio tame pačiame tinkle."

@@ -146,12 +132,11 @@

    ;;chats
    :chats                                 "Pokalbiai"
-   :new-chat                              "Naujas pokalbis"
    :delete-chat                           "Trinti pokalbį"
    :new-group-chat                        "Naujas grupinis pokalbis"
    :new-public-group-chat                 "Jungtis prie grupinio pokalbio"
    :edit-chats                            "Redaguoti grupinius pokalbius"
-   :search-chats                          "Ieskoti pokalbių"
+   :search-chats                          "Ieškoti pokalbių"
    :empty-topic                           "Tuščia tema"
    :topic-format                          "Netinkamas formatas [a-z0-9\\-]+"
    :public-group-topic                    "Tema"
@@ -162,15 +147,16 @@
    :search-tags                           "Įveskite paieškos kriterijus"
    :popular-tags                          "Populiarūs hashtagai"
    :recent                                "Paskiausios būsenos"
-   :no-statuses-found                     "Jokių busenų nerasta"
+   :no-statuses-found                     "Jokių būsenų nerasta"
    :chat                                  "Pokalbis"
    :all                                   "Viskas"
    :public-chats                          "Vieši pokalbiai"
    :soon                                  "Greitai"
    :public-chat-user-count                "{{count}} asmenys"
    :dapps                                 "DApp'ai"
+   :dapp-profile                          "ÐApp'ų profilis"
    :no-statuses-discovered                "Jokių būsenų nerasta"
-   :no-statuses-discovered-body           "Kai kas nors paskelbia būsena,\nmatysite ją čia."
+   :no-statuses-discovered-body           "Kai kas nors paskelbia būseną,\nmatysite ją čia."
    :no-hashtags-discovered-title          "Jokių hashtagų nerasta"
    :no-hashtags-discovered-body           "Kai hashtagas tampa populiarus,\nmatysite jį čia."

@@ -180,14 +166,11 @@
    ;;contacts
    :contacts                              "Kontaktai"
    :new-contact                           "Nauji kontaktai"
-   :delete-contact                        "Trinti kontakta"
-   :delete-contact-confirmation           "Šis yrašas bus pasalintas iš kontaktų"
+   :delete-contact                        "Trinti kontaktą"
+   :delete-contact-confirmation           "Šis įrašas bus pašalintas iš kontaktų"
    :remove-from-group                     "Pašalinti iš grupės"
    :edit-contacts                         "Redaguoti kontaktus"
    :search-contacts                       "Ieškoti kontaktų"
-   :show-all                              "RODYTI VISKĄ"
-   :contacts-group-dapps                  "ÐApp'ai"
-   :contacts-group-people                 "Asmenys"
    :contacts-group-new-chat               "Pradėti naują pokalbį"
    :choose-from-contacts                  "Pasirinkti iš kontaktų"
    :no-contacts                           "Jokių kontaktų nerasta"
@@ -197,36 +180,17 @@

    ;;group-settings
    :remove                                "Pašalinti"
-   :save                                  "issaugoti"
+   :save                                  "išsaugoti"
    :delete                                "Ištrinti"
-   :change-color                          "Keisti spalvą"
    :clear-history                         "Naikinti istoriją"
    :mute-notifications                    "Nutildyti pranešimus"
    :leave-chat                            "Palikti pokalbį"
-   :delete-and-leave                      "Trinti ir išeiti"
    :chat-settings                         "Pokalbio nustatymai"
    :edit                                  "Redaguoti"
    :add-members                           "Pridėti narių"
-   :blue                                  "Mėlyna"
-   :purple                                "Purpurinis"
-   :green                                 "Žalia"
-   :red                                   "Rudona"

    ;;commands
-   :money-command-description             "Siūsti pinigų"
-   :location-command-description          "Siūsti koordinates"
-   :phone-command-description             "Siūsti telefono numerį"
-   :phone-request-text                    "Telefono numerio užklausa"
-   :confirmation-code-command-description "Siūsti patvirtinimo kodą"
-   :confirmation-code-request-text        "Konfiguravimo kodo užklausa"
-   :send-command-description              "Siūsti komandą"
-   :request-command-description           "Siūsti užklausą"
-   :keypair-password-command-description  "Raktinės komandos aprašymas..."
-   :help-command-description              "Pagalba"
-   :request                               "Užklausa"
    :chat-send-eth                         "{{amount}} ETH"
-   :chat-send-eth-to                      "{{amount}} ETH siūsti {{chat-name}}"
-   :chat-send-eth-from                    "{{amount}} ETH nuo {{chat-name}}"

    ;;location command
    :your-current-location                 "Jūsų dabartinė vieta"
@@ -239,68 +203,49 @@
    :sharing-copy-to-clipboard-coordinates "Kopijuoti koordinates"

    ;;new-group
-   :group-chat-name                       "Pokalbio vardas"
-   :empty-group-chat-name                 "Pasirinkite vardą"
-   :illegal-group-chat-name               "Pasirinkite kitą vardą"
-   :new-group                             "nauja grupė"
-   :reorder-groups                        "Rušiuoti grupes"
-   :group-name                            "Grupės vardas"
+   :new-group                             "Nauja grupė"
+   :reorder-groups                        "Rūšiuoti grupes"
    :edit-group                            "Redaguoti grupę"
    :delete-group                          "Trinti grupę"
-   :delete-group-confirmation             "Ši grupė bus pašalinta is jūsų grupių sarašo. Jūsų kontaktai nepakis."
+   :delete-group-confirmation             "Ši grupė bus pašalinta iš jūsų grupių sarašo. Jūsų kontaktai nepakis."
    :delete-group-prompt                   "Tai neįtakos jūsų kontaktų"
-   :group-members                         "Grupės nariai"
-   :contact-s                             {:one   "kontactas"
-                                           :other "kontactai"}
-
-   ;;participants
-   :add-participants                      "Pridėti dalyvių"
-   :remove-participants                   "Pašalinti dalyvių"
+   :contact-s                             {:one   "kontaktas"
+                                           :other "kontaktai"}

    ;;protocol
-   :received-invitation                   "Gautas pakvietimas į pokalbį"
+   :received-invitation                   "gautas pakvietimas į pokalbį"
    :removed-from-chat                     "pašalino tave iš pokalbio"
-   :left                                  "išejo"
+   :left                                  "išėjo"
    :invited                               "pakviestas"
    :removed                               "perkeltas"
-   :You                                   "tu"
+   :You                                   "Tu"

    ;;new-contact
    :add-new-contact                       "Pridėti naują kontaktą"
-   :import-qr                             "Importuoti"
    :scan-qr                               "Skanuoti QR"
-   :swow-qr                               "Rodyti QR"
    :name                                  "Vardas"
-   :whisper-identity                      "Whisper Tapatybė"
    :address-explication                   "Gal čia turėtų būti tekstas, kuriame būtų paaiškinta, kas yra adresas ir kur jo ieškoti"
-   :enter-valid-address                   "Įveskite teisingą adresą arba skanuokite QR kodą"
-   :enter-valid-public-key                "Įveskite teisyngą viešąjį raktą arba skanuokite QR kodą"
+   :enter-valid-public-key                "Įveskite teisingą viešąjį raktą arba skanuokite QR kodą"
    :contact-already-added                 "Šis kontaktas jau pridėtas"
-   :can-not-add-yourself                  "Negalima savęs pridėti"
+   :can-not-add-yourself                  "Negalima pridėti savęs"
    :unknown-address                       "Nežinomas adresas"

    ;;login
    :connect                               "Jungtis"
    :address                               "Adresas"
    :password                              "Slaptažodis"
-   :login                                 "Prisijungimas"
    :sign-in-to-status                     "Jungtis į Status"
    :sign-in                               "Prisijungti"
    :wrong-password                        "Neteisingas slaptažodis"
-   :enter-password                        "Įveskite slatažodį"
+   :enter-password                        "Įveskite slaptažodį"

    ;;recover
-   :recover-from-passphrase               "Atkurti iš slaptažodžio"
-   :recover-explain                       "Norėdami susigrąžinti prieigą, įveskite slaptažodžio slaptafrazę"
-   :passphrase                            "Slaptažodis"
+   :passphrase                            "Slaptafrazė"
    :recover                               "Atkurti"
-   :enter-valid-passphrase                "Įveskite slaptažodį"
-   :enter-valid-password                  "Įvestike slaptažodį"
    :twelve-words-in-correct-order         "12 žodžių teisinga tvarka"

    ;;accounts
    :recover-access                        "Atkurti prieigą"
-   :add-account                           "Pridėti paskyrą"
    :create-new-account                    "Sukurti naują paskyrą"

    ;;wallet-qr-code
@@ -309,35 +254,17 @@
    ;;validation
    :invalid-phone                         "Neteisingas telefono numeris"
    :amount                                "Paskyra"
-   :not-enough-eth                        (str "Nepakankamas ETH balansas "
-                                               "({{balance}} ETH)")

    ;;transactions
    :confirm                               "Patvirtinti"
-   :confirm-transactions                  {:one   "Patvirtinti transakciją"
-                                           :other "Patvirtinti {{count}} transakciją"
-                                           :zero  "Jokios transakcijos"}
-   :transactions-confirmed                {:one   "Transakcija patvirtinta"
-                                           :other "{{count}} transakcijos patvirtintos"
-                                           :zero  "Jokios transakcijos nepatvirtintos"}
-   :transaction                           "Transakcija"
-   :unsigned-transactions                 "Kepasirašytos transakcijos"
-   :no-unsigned-transactions              "Jokių nepasirašytų transakcijų"
-   :unsigned-transaction-expired          "Nepasirašyta transakcija baigėsi"
-   :enter-password-transactions           {:one   "Patvirtinkite transakciją slaptažodžiu"
-                                           :other "Patvirtinkite transakcijas slaptažodžiu"}
+   :transaction                           "Sandėris"
+   :unsigned-transaction-expired          "Nepasirašytas sandėris baigėsi"
    :status                                "Status"
-   :pending-confirmation                  "Laukiama patvirtinimo"
    :recipient                             "Gavėjas"
-   :one-more-item                         "Dar viena daikta"
-   :fee                                   "Mokestis"
-   :estimated-fee                         "numatomas mokestis"
-   :value                                 "Vertė"
    :to                                    "Į"
    :from                                  "Iš"
    :data                                  "Duomenys"
    :got-it                                "Gavo"
-   :contract-creation                     "Contrakto kūrimas"
    :block                                 "Blokas"
    :hash                                  "Hash"
    :gas-limit                             "Gas limitas"
@@ -345,9 +272,9 @@
    :gas-used                              "Gas sunaudota"
    :cost-fee                              "Kaina/Mokestis"
    :nonce                                 "Nonce"
-   :confirmations                         "patvirtinimas"
+   :confirmations                         "Patvirtinimas"
    :confirmations-helper-text             "Jei norite būti tikri, kad jūsų sandoris nebus kompromituotas, palaukite, kol jis gaus mažiausiai 10 blokų patvirtinimą"
-   :copy-transaction-hash                 "Copijuoti transakcijos hash"
+   :copy-transaction-hash                 "Kopijuoti sandėrio hash"
    :open-on-etherscan                     "Atidaryti Etherscan"

    ;;webview
@@ -355,7 +282,7 @@

    ;;testfairy warning
    :testfairy-title                       "Įspėjimas!"
-   :testfairy-message                     "You are using app installed from a nightly build. For testing purposes this build includes session recording if wifi connection is used, so all your interaction with app is saved (as video and log) and might be used by development team to investigate possible issues. Saved video/log do not include your passwords. Recording is done only if app is installed from a nightly build. Nothing is recorded if app is installed from PlayStore or TestFlight."
+   :testfairy-message                     "Naudojate programą, įdiegtą iš naktinio kūrimo. Testavimo tikslais šiame kūrime įrašomas seansas, jei naudojamas \"Wi-Fi\" ryšys, taigi visa sąveika su programa išsaugoma (kaip vaizdo įrašas ir žurnalas) ir gali būti naudojama kūrėjų komandos, kad ištirtų galimus klausimus. Išsaugotas vaizdo įrašas/žurnalas neįtraukia slaptažodžių. Įrašymas atliekamas tik tada, jei programa yra įdiegta iš naktinio kūrimo. Nieko nėra įrašoma, jei programa įdiegta iš \"PlayStore\" arba \"TestFlight\""

    ;; wallet
    :wallet                                "Piniginė"
@@ -363,7 +290,7 @@
    :your-wallets                          "Jūsų piniginės"
    :main-wallet                           "Pagrindinė piniginė"
    :wallet-error                          "Klaida užkraunant duomenis"
-   :wallet-send                           "Siūsti"
+   :wallet-send                           "Siųsti"
    :wallet-request                        "Užklausa"
    :wallet-exchange                       "Keitykla"
    :wallet-assets                         "Aktyvai"
@@ -372,48 +299,45 @@
    :wallet-settings                       "Piniginės nustatymai"
    :signing-phrase-description            "Pasirašykite sandorį įvesdami savo slaptažodį. Įsitikinkite, kad aukščiau esantys žodžiai atitinka jūsų slaptą pasirašymo frazę"
    :wallet-insufficient-funds             "Nepakankamos lėšos"
-   :request-transaction                   "Reikalauti transakcijos"
-   :send-request                          "Siūsti užklausą"
+   :request-transaction                   "Reikalauti sandėrio"
+   :send-request                          "Siųsti užklausą"
    :share                                 "Dalintis"
    :eth                                   "ETH"
    :currency                              "Valiuta"
    :usd-currency                          "USD"
-   :transactions                          "Transakcijos"
-   :transaction-details                   "Transakcijų detalės"
+   :transactions                          "Sandėriai"
+   :transaction-details                   "Sandėrių detalės"
+   :transaction-failed                    "Sandoris nepavyko"
    :transactions-sign                     "Pasirašyti"
-   :transactions-sign-all                 "Pasirašyti viska"
-   :transactions-sign-transaction         "Pasirašyti transakciją"
-   :transactions-sign-later               "Pasirašyti"
-   :transactions-sign-all-text            "Pasirašykite sandorį įvesdami savo slaptažodį.\nĮsitikinkite, kad aukščiau esantys žodžiai atitinka jūsų slaptą pasirašymo frazę"
-   :transactions-sign-input-placeholder   "Įveskite slaptažodį"
-   :transactions-delete                   "Trinti transakciją"
-   :transactions-delete-content           "Transakcija bus pašalinta iš nepasirašyto sarašo"
+   :transactions-sign-all                 "Pasirašyti viską"
+   :transactions-sign-transaction         "Pasirašyti sandorį"
+   :transactions-sign-later               "Pasirašyti veliau"
+   :transactions-delete                   "Trinti sandorį"
+   :transactions-delete-content           "Sandoris bus pašalintas iš nepasirašytų sarašo"
    :transactions-history                  "Istorija"
    :transactions-unsigned                 "Nepasirašyta"
    :transactions-history-empty            "Tu neturi sandorių istorijos"
-   :transactions-unsigned-empty           "Jūs neturite nepasirašytų transakcijų"
+   :transactions-unsigned-empty           "Jūs neturite nepasirašytų sandorių"
    :transactions-filter-title             "Filtruoti istoriją"
    :transactions-filter-tokens            "Žėtonai"
    :transactions-filter-type              "Tipas"
    :transactions-filter-select-all        "Rinktis viską"
-   :view-transaction-details              "Žiūrėti transakcijų detales"
+   :view-transaction-details              "Žiūrėti sandėrių detales"
    :transaction-description               "Jei norite būti tikri, kad jūsų sandoris nebus kompromituotas, palaukite, kol jis gaus mažiausiai 10 blokų patvirtinimą"
-   :transaction-sent                      "Transakcija išsiūsta"
-   :transaction-moved-text                "Transakcija sėkmingai perkelta į “Nepasirašytos”"
-   :transaction-moved-title               "Transakcija perkelta"
-   :sign-later-title                      "Pasirašyti transakcijas vėliau?"
+   :transaction-sent                      "Sandėris išsiųstas"
+   :transaction-moved-text                "Sandėris sėkmingai perkeltas į “Nepasirašytos”"
+   :transaction-moved-title               "Sandėris perkeltas"
+   :sign-later-title                      "Pasirašyti sandėrį vėliau?"
    :sign-later-text                       "Galėsite prisijungti prie operacijų istorijos"
-   :not-applicable                        "Netaikoma nepasirašytoms transakcijoms"
+   :not-applicable                        "Netaikoma nepasirašytiems sandėriams"

    ;; Wallet Send
-   :wallet-send-transaction               "Siūsti Transakciją"
-   :wallet-send-step                      "Žingsnis {{step}} iš {{number}}"
    :wallet-choose-recipient               "Pasirinkti gavėją"
    :wallet-choose-from-contacts           "Pasirinkti iš kontaktų"
    :wallet-address-from-clipboard         "Įklijuoti adresą"
    :wallet-invalid-address                "Neteisingas adresas: \n {{data}}"
+   :wallet-invalid-chain-id               "Tinklas nesutampa su: \n {{data}}"
    :wallet-browse-photos                  "Naršyti žinutes"
-   :validation-amount-invalid             "Kiekis netinkamas"
    :validation-amount-invalid-number      "Kiekio skaičius netinkamas"
    :validation-amount-is-too-precise      "Suma yra per daug tiksli. Mažiausias vienetas, kurį galite siųsti, yra 1 Wei (1x10^-18 ETH)"

@@ -424,12 +348,11 @@
    :add-network                           "Pridėti tinklą"
    :add-new-network                       "Pridėti naują tinklą"
    :existing-networks                     "Egzistuojantys tinklai"
-   :add-json-file                         "pridėti JSON failą"
+   :add-json-file                         "Pridėti JSON failą"
    :paste-json-as-text                    "Įklijuoti JSON kaip tekstą"
    :paste-json                            "Įklijuoti JSON"
    :specify-rpc-url                       "Nurodykite RPC URL"
-   :edit-rpc-url                          "Redaguoti RPC URL"
-   :edit-network-config                   "Redaguoti tinklo nustatymus"
+   :edit-network-config                   "Redaguoti tinklo konfiguraciją"
    :connected                             "Jungtis"
    :process-json                          "Apdoroti JSON"
    :error-processing-json                 "Klaida apdorojant JSON"