        [:a.dribbble-name profile-link
         [:strong (dribbble-attrs class-map "name" "innerText")]]]
       [:div.dribbble-link
-       [:a.dribbble-site (dribbble-attrs class-map "links" "href")
+       [:a.dribbble-site (dribbble-attrs class-map ["links" "web"] "href")
         ; [:span "unfold.co"]
-        [:span (dribbble-attrs class-map "links" "innerText")]]]]
+        [:span (dribbble-attrs class-map ["links" "web"] "innerText")]]]]
      (demo-with-blank-canvas (cdn-path "/blog/private-docs-early-access/grant-access.gif") "Grant someone access with their email address.")]))

    (json/encode class-map) username)])

(defn dribbble-attrs [class-map prop attr & {:as extra-attrs}]
  (merge extra-attrs
         {:class (str (:class extra-attrs) " " (get class-map prop))
          :data-attr attr}))

; (defn dribbble-card [username]
;   (let [props ["comments_received_count" "bio" "shots_count" "can_upload_shot" "followings_count"

          var nodes = document.getElementsByClassName(classMap[key]);
          for (var i = 0; i < nodes.length; i++) {
            var node = nodes[i];
            var field = fields[key];
            if (subprop = node.getAttribute('data-subprop')) {
              for (k of subprop.split(',')) {
                field = field[k];
              }
            }
            node[node.getAttribute('data-attr')] = field;
          }
        }
      }
