diff --git a/layouts/partials/bootstrap/btn-link.html b/layouts/partials/bootstrap/btn-link.html
index d9ca829..f64b88e 100644
--- a/layouts/partials/bootstrap/btn-link.html
+++ b/layouts/partials/bootstrap/btn-link.html
@@ -15,27 +15,14 @@
{{- with .Get 2 }}{{ $outline = . }}{{ end }}
{{- with .Get 3 }}{{ $size = . }}{{ end }}
{{- end }}
-{{- $uri := urls.Parse $url }}
-{{- $external := true }}
-{{- if not $uri.Scheme }}
- {{- $external = false }}
- {{- with site.GetPage $url }}
- {{- $url = .RelPermalink }}
- {{- else }}
- {{- if hasPrefix $url "/" }}
- {{- $url = relURL $url }}
- {{- else }}
- {{- $url = printf "%s%s" .Page.RelPermalink $url }}
- {{- end }}
- {{- end }}
-{{- end }}
+{{- $uri := partial "bootstrap/functions/url" (dict "URL" $url "Page" .Page) }}
{{- $classes := slice "btn" }}
{{- $classes = $classes | append (printf (cond $outline "btn-outline-%s" "btn-%s") $style) }}
{{- with $size }}{{ $classes = $classes | append (printf "btn-%s" .) }}{{ end }}
{{- with $class }}{{ $classes = $classes | append . }}{{ end }}
+ href="{{ $uri.URL }}"
+ {{ if $uri.External }}target="_blank" rel="external"{{ end }}>
{{- .Inner -}}
diff --git a/layouts/partials/bootstrap/dropdown-divider.html b/layouts/partials/bootstrap/dropdown-divider.html
new file mode 100644
index 0000000..d4abf1f
--- /dev/null
+++ b/layouts/partials/bootstrap/dropdown-divider.html
@@ -0,0 +1 @@
+
diff --git a/layouts/partials/bootstrap/dropdown-item.html b/layouts/partials/bootstrap/dropdown-item.html
new file mode 100644
index 0000000..d350589
--- /dev/null
+++ b/layouts/partials/bootstrap/dropdown-item.html
@@ -0,0 +1,18 @@
+{{- $url := "" }}
+{{- $text := "" }}
+{{- if .IsNamedParams }}
+ {{- $text = .Get "text" }}
+ {{- $url = .Get "url" }}
+{{- else }}
+ {{- $text = .Get 0 }}
+ {{- $url = .Get 1 }}
+{{- end }}
+{{- $uri := partial "bootstrap/functions/url" (dict "URL" $url "Page" .Page) }}
+
+
+ {{ $text }}
+
+
diff --git a/layouts/partials/bootstrap/dropdown.html b/layouts/partials/bootstrap/dropdown.html
new file mode 100644
index 0000000..78db9ed
--- /dev/null
+++ b/layouts/partials/bootstrap/dropdown.html
@@ -0,0 +1,25 @@
+{{- $name := "" }}
+{{- $style := "primary" }}
+{{- $size := "" }}
+{{- $items := slice }}
+{{- if .IsNamedParams }}
+ {{- $name = .Get "name" }}
+ {{- with .Get "style" }}{{ $style = . }}{{ end }}
+ {{- with .Get "size" }}{{ $size = . }}{{ end }}
+{{- else }}
+ {{- $name = .Get 0 }}
+ {{- with .Get 1 }}{{ $style = . }}{{ end }}
+ {{- with .Get 2 }}{{ $size = . }}{{ end }}
+{{- end }}
+
+
+
+
diff --git a/layouts/partials/bootstrap/functions/url.html b/layouts/partials/bootstrap/functions/url.html
new file mode 100644
index 0000000..9de59b3
--- /dev/null
+++ b/layouts/partials/bootstrap/functions/url.html
@@ -0,0 +1,16 @@
+{{- $url := .URL }}
+{{- $uri := urls.Parse $url }}
+{{- $external := true }}
+{{- if not $uri.Scheme }}
+ {{- $external = false }}
+ {{- with site.GetPage $url }}
+ {{- $url = .RelPermalink }}
+ {{- else }}
+ {{- if hasPrefix $url "/" }}
+ {{- $url = relURL $url }}
+ {{- else }}
+ {{- $url = printf "%s%s" .Page.RelPermalink $url }}
+ {{- end }}
+ {{- end }}
+{{- end }}
+{{- return (dict "External" $external "URL" $url) }}
diff --git a/layouts/shortcodes/bootstrap/dropdown-divider.html b/layouts/shortcodes/bootstrap/dropdown-divider.html
new file mode 100644
index 0000000..e002806
--- /dev/null
+++ b/layouts/shortcodes/bootstrap/dropdown-divider.html
@@ -0,0 +1 @@
+{{- partialCached "bootstrap/dropdown-divider" . }}
diff --git a/layouts/shortcodes/bootstrap/dropdown-item.html b/layouts/shortcodes/bootstrap/dropdown-item.html
new file mode 100644
index 0000000..5409487
--- /dev/null
+++ b/layouts/shortcodes/bootstrap/dropdown-item.html
@@ -0,0 +1 @@
+{{- partial "bootstrap/dropdown-item" . }}
diff --git a/layouts/shortcodes/bootstrap/dropdown.html b/layouts/shortcodes/bootstrap/dropdown.html
new file mode 100644
index 0000000..48b51e9
--- /dev/null
+++ b/layouts/shortcodes/bootstrap/dropdown.html
@@ -0,0 +1,2 @@
+{{- if .Inner }}{{ end }}
+{{- partial "bootstrap/dropdown" . }}
diff --git a/layouts/shortcodes/bs/dropdown-divider.html b/layouts/shortcodes/bs/dropdown-divider.html
new file mode 100644
index 0000000..e002806
--- /dev/null
+++ b/layouts/shortcodes/bs/dropdown-divider.html
@@ -0,0 +1 @@
+{{- partialCached "bootstrap/dropdown-divider" . }}
diff --git a/layouts/shortcodes/bs/dropdown-item.html b/layouts/shortcodes/bs/dropdown-item.html
new file mode 100644
index 0000000..5409487
--- /dev/null
+++ b/layouts/shortcodes/bs/dropdown-item.html
@@ -0,0 +1 @@
+{{- partial "bootstrap/dropdown-item" . }}
diff --git a/layouts/shortcodes/bs/dropdown.html b/layouts/shortcodes/bs/dropdown.html
new file mode 100644
index 0000000..48b51e9
--- /dev/null
+++ b/layouts/shortcodes/bs/dropdown.html
@@ -0,0 +1,2 @@
+{{- if .Inner }}{{ end }}
+{{- partial "bootstrap/dropdown" . }}