diff --git a/.sass-cache/04a574b9dcb788863f265d0854fa0662dfc4ec26/_sprite-img.scssc b/.sass-cache/04a574b9dcb788863f265d0854fa0662dfc4ec26/_sprite-img.scssc
new file mode 100644
index 0000000..b6529dc
Binary files /dev/null and b/.sass-cache/04a574b9dcb788863f265d0854fa0662dfc4ec26/_sprite-img.scssc differ
diff --git a/.sass-cache/08fcbf94d16843235606008eb5d7f071f891b5e3/_compass.scssc b/.sass-cache/08fcbf94d16843235606008eb5d7f071f891b5e3/_compass.scssc
new file mode 100644
index 0000000..beacafa
Binary files /dev/null and b/.sass-cache/08fcbf94d16843235606008eb5d7f071f891b5e3/_compass.scssc differ
diff --git a/.sass-cache/0d93976ff9f11556b314694e7a9476cfb8ac8aee/_css3.scssc b/.sass-cache/0d93976ff9f11556b314694e7a9476cfb8ac8aee/_css3.scssc
new file mode 100644
index 0000000..1b08861
Binary files /dev/null and b/.sass-cache/0d93976ff9f11556b314694e7a9476cfb8ac8aee/_css3.scssc differ
diff --git a/.sass-cache/0d93976ff9f11556b314694e7a9476cfb8ac8aee/_support.scssc b/.sass-cache/0d93976ff9f11556b314694e7a9476cfb8ac8aee/_support.scssc
new file mode 100644
index 0000000..4e45a13
Binary files /dev/null and b/.sass-cache/0d93976ff9f11556b314694e7a9476cfb8ac8aee/_support.scssc differ
diff --git a/.sass-cache/0d93976ff9f11556b314694e7a9476cfb8ac8aee/_typography.scssc b/.sass-cache/0d93976ff9f11556b314694e7a9476cfb8ac8aee/_typography.scssc
new file mode 100644
index 0000000..8a3af56
Binary files /dev/null and b/.sass-cache/0d93976ff9f11556b314694e7a9476cfb8ac8aee/_typography.scssc differ
diff --git a/.sass-cache/0d93976ff9f11556b314694e7a9476cfb8ac8aee/_utilities.scssc b/.sass-cache/0d93976ff9f11556b314694e7a9476cfb8ac8aee/_utilities.scssc
new file mode 100644
index 0000000..e1f94a1
Binary files /dev/null and b/.sass-cache/0d93976ff9f11556b314694e7a9476cfb8ac8aee/_utilities.scssc differ
diff --git a/.sass-cache/239a9c624c3a8681b3d94b4f9d74395e71f83ace/_alternating-rows-and-columns.scssc b/.sass-cache/239a9c624c3a8681b3d94b4f9d74395e71f83ace/_alternating-rows-and-columns.scssc
new file mode 100644
index 0000000..705ba16
Binary files /dev/null and b/.sass-cache/239a9c624c3a8681b3d94b4f9d74395e71f83ace/_alternating-rows-and-columns.scssc differ
diff --git a/.sass-cache/239a9c624c3a8681b3d94b4f9d74395e71f83ace/_borders.scssc b/.sass-cache/239a9c624c3a8681b3d94b4f9d74395e71f83ace/_borders.scssc
new file mode 100644
index 0000000..46f8718
Binary files /dev/null and b/.sass-cache/239a9c624c3a8681b3d94b4f9d74395e71f83ace/_borders.scssc differ
diff --git a/.sass-cache/239a9c624c3a8681b3d94b4f9d74395e71f83ace/_scaffolding.scssc b/.sass-cache/239a9c624c3a8681b3d94b4f9d74395e71f83ace/_scaffolding.scssc
new file mode 100644
index 0000000..5b2fa26
Binary files /dev/null and b/.sass-cache/239a9c624c3a8681b3d94b4f9d74395e71f83ace/_scaffolding.scssc differ
diff --git a/.sass-cache/23d5ef384c29bd24badd6f68776d8714160be6c3/_compass.scssc b/.sass-cache/23d5ef384c29bd24badd6f68776d8714160be6c3/_compass.scssc
new file mode 100644
index 0000000..4980c4f
Binary files /dev/null and b/.sass-cache/23d5ef384c29bd24badd6f68776d8714160be6c3/_compass.scssc differ
diff --git a/.sass-cache/2fa2ac005e1db686dbfa7f8e46abbe511ad34e34/_contrast.scssc b/.sass-cache/2fa2ac005e1db686dbfa7f8e46abbe511ad34e34/_contrast.scssc
new file mode 100644
index 0000000..61d6b47
Binary files /dev/null and b/.sass-cache/2fa2ac005e1db686dbfa7f8e46abbe511ad34e34/_contrast.scssc differ
diff --git a/.sass-cache/317365441f48b6949a9ab75c27a1be4de6d6609f/_bullets.scssc b/.sass-cache/317365441f48b6949a9ab75c27a1be4de6d6609f/_bullets.scssc
new file mode 100644
index 0000000..d886242
Binary files /dev/null and b/.sass-cache/317365441f48b6949a9ab75c27a1be4de6d6609f/_bullets.scssc differ
diff --git a/.sass-cache/317365441f48b6949a9ab75c27a1be4de6d6609f/_horizontal-list.scssc b/.sass-cache/317365441f48b6949a9ab75c27a1be4de6d6609f/_horizontal-list.scssc
new file mode 100644
index 0000000..5949abc
Binary files /dev/null and b/.sass-cache/317365441f48b6949a9ab75c27a1be4de6d6609f/_horizontal-list.scssc differ
diff --git a/.sass-cache/317365441f48b6949a9ab75c27a1be4de6d6609f/_inline-block-list.scssc b/.sass-cache/317365441f48b6949a9ab75c27a1be4de6d6609f/_inline-block-list.scssc
new file mode 100644
index 0000000..9dcb9cf
Binary files /dev/null and b/.sass-cache/317365441f48b6949a9ab75c27a1be4de6d6609f/_inline-block-list.scssc differ
diff --git a/.sass-cache/317365441f48b6949a9ab75c27a1be4de6d6609f/_inline-list.scssc b/.sass-cache/317365441f48b6949a9ab75c27a1be4de6d6609f/_inline-list.scssc
new file mode 100644
index 0000000..9b35044
Binary files /dev/null and b/.sass-cache/317365441f48b6949a9ab75c27a1be4de6d6609f/_inline-list.scssc differ
diff --git a/.sass-cache/34d6b06780dc1bc120d2fb8126ac6e6373b8cb85/_hover-link.scssc b/.sass-cache/34d6b06780dc1bc120d2fb8126ac6e6373b8cb85/_hover-link.scssc
new file mode 100644
index 0000000..09aff93
Binary files /dev/null and b/.sass-cache/34d6b06780dc1bc120d2fb8126ac6e6373b8cb85/_hover-link.scssc differ
diff --git a/.sass-cache/34d6b06780dc1bc120d2fb8126ac6e6373b8cb85/_link-colors.scssc b/.sass-cache/34d6b06780dc1bc120d2fb8126ac6e6373b8cb85/_link-colors.scssc
new file mode 100644
index 0000000..0548940
Binary files /dev/null and b/.sass-cache/34d6b06780dc1bc120d2fb8126ac6e6373b8cb85/_link-colors.scssc differ
diff --git a/.sass-cache/34d6b06780dc1bc120d2fb8126ac6e6373b8cb85/_unstyled-link.scssc b/.sass-cache/34d6b06780dc1bc120d2fb8126ac6e6373b8cb85/_unstyled-link.scssc
new file mode 100644
index 0000000..626b4c7
Binary files /dev/null and b/.sass-cache/34d6b06780dc1bc120d2fb8126ac6e6373b8cb85/_unstyled-link.scssc differ
diff --git a/.sass-cache/364af386fb40ab5f67c4b7ae571302cd5dfce4db/_clearfix.scssc b/.sass-cache/364af386fb40ab5f67c4b7ae571302cd5dfce4db/_clearfix.scssc
new file mode 100644
index 0000000..b036470
Binary files /dev/null and b/.sass-cache/364af386fb40ab5f67c4b7ae571302cd5dfce4db/_clearfix.scssc differ
diff --git a/.sass-cache/364af386fb40ab5f67c4b7ae571302cd5dfce4db/_float.scssc b/.sass-cache/364af386fb40ab5f67c4b7ae571302cd5dfce4db/_float.scssc
new file mode 100644
index 0000000..d4e85c5
Binary files /dev/null and b/.sass-cache/364af386fb40ab5f67c4b7ae571302cd5dfce4db/_float.scssc differ
diff --git a/.sass-cache/364af386fb40ab5f67c4b7ae571302cd5dfce4db/_hacks.scssc b/.sass-cache/364af386fb40ab5f67c4b7ae571302cd5dfce4db/_hacks.scssc
new file mode 100644
index 0000000..b26cc5c
Binary files /dev/null and b/.sass-cache/364af386fb40ab5f67c4b7ae571302cd5dfce4db/_hacks.scssc differ
diff --git a/.sass-cache/364af386fb40ab5f67c4b7ae571302cd5dfce4db/_min.scssc b/.sass-cache/364af386fb40ab5f67c4b7ae571302cd5dfce4db/_min.scssc
new file mode 100644
index 0000000..992a1b9
Binary files /dev/null and b/.sass-cache/364af386fb40ab5f67c4b7ae571302cd5dfce4db/_min.scssc differ
diff --git a/.sass-cache/364af386fb40ab5f67c4b7ae571302cd5dfce4db/_reset.scssc b/.sass-cache/364af386fb40ab5f67c4b7ae571302cd5dfce4db/_reset.scssc
new file mode 100644
index 0000000..0237025
Binary files /dev/null and b/.sass-cache/364af386fb40ab5f67c4b7ae571302cd5dfce4db/_reset.scssc differ
diff --git a/.sass-cache/364af386fb40ab5f67c4b7ae571302cd5dfce4db/_tag-cloud.scssc b/.sass-cache/364af386fb40ab5f67c4b7ae571302cd5dfce4db/_tag-cloud.scssc
new file mode 100644
index 0000000..844259b
Binary files /dev/null and b/.sass-cache/364af386fb40ab5f67c4b7ae571302cd5dfce4db/_tag-cloud.scssc differ
diff --git a/.sass-cache/464787d364b085b2a1532d12f327cae4d9a1fbe8/_color.scssc b/.sass-cache/464787d364b085b2a1532d12f327cae4d9a1fbe8/_color.scssc
new file mode 100644
index 0000000..90bfb73
Binary files /dev/null and b/.sass-cache/464787d364b085b2a1532d12f327cae4d9a1fbe8/_color.scssc differ
diff --git a/.sass-cache/464787d364b085b2a1532d12f327cae4d9a1fbe8/_general.scssc b/.sass-cache/464787d364b085b2a1532d12f327cae4d9a1fbe8/_general.scssc
new file mode 100644
index 0000000..92cf2c6
Binary files /dev/null and b/.sass-cache/464787d364b085b2a1532d12f327cae4d9a1fbe8/_general.scssc differ
diff --git a/.sass-cache/464787d364b085b2a1532d12f327cae4d9a1fbe8/_sprites.scssc b/.sass-cache/464787d364b085b2a1532d12f327cae4d9a1fbe8/_sprites.scssc
new file mode 100644
index 0000000..3717579
Binary files /dev/null and b/.sass-cache/464787d364b085b2a1532d12f327cae4d9a1fbe8/_sprites.scssc differ
diff --git a/.sass-cache/464787d364b085b2a1532d12f327cae4d9a1fbe8/_tables.scssc b/.sass-cache/464787d364b085b2a1532d12f327cae4d9a1fbe8/_tables.scssc
new file mode 100644
index 0000000..b30f488
Binary files /dev/null and b/.sass-cache/464787d364b085b2a1532d12f327cae4d9a1fbe8/_tables.scssc differ
diff --git a/.sass-cache/652acee66a6350cd12b5764c17e0ec5643043448/_hover-link.scssc b/.sass-cache/652acee66a6350cd12b5764c17e0ec5643043448/_hover-link.scssc
new file mode 100644
index 0000000..f2f68fb
Binary files /dev/null and b/.sass-cache/652acee66a6350cd12b5764c17e0ec5643043448/_hover-link.scssc differ
diff --git a/.sass-cache/652acee66a6350cd12b5764c17e0ec5643043448/_link-colors.scssc b/.sass-cache/652acee66a6350cd12b5764c17e0ec5643043448/_link-colors.scssc
new file mode 100644
index 0000000..eee39ce
Binary files /dev/null and b/.sass-cache/652acee66a6350cd12b5764c17e0ec5643043448/_link-colors.scssc differ
diff --git a/.sass-cache/652acee66a6350cd12b5764c17e0ec5643043448/_unstyled-link.scssc b/.sass-cache/652acee66a6350cd12b5764c17e0ec5643043448/_unstyled-link.scssc
new file mode 100644
index 0000000..9a9ef1f
Binary files /dev/null and b/.sass-cache/652acee66a6350cd12b5764c17e0ec5643043448/_unstyled-link.scssc differ
diff --git a/.sass-cache/6a5e80823f45fabd0f482ab196d00ba5367a3640/_ellipsis.scssc b/.sass-cache/6a5e80823f45fabd0f482ab196d00ba5367a3640/_ellipsis.scssc
new file mode 100644
index 0000000..a6a18b2
Binary files /dev/null and b/.sass-cache/6a5e80823f45fabd0f482ab196d00ba5367a3640/_ellipsis.scssc differ
diff --git a/.sass-cache/6a5e80823f45fabd0f482ab196d00ba5367a3640/_force-wrap.scssc b/.sass-cache/6a5e80823f45fabd0f482ab196d00ba5367a3640/_force-wrap.scssc
new file mode 100644
index 0000000..85c7c22
Binary files /dev/null and b/.sass-cache/6a5e80823f45fabd0f482ab196d00ba5367a3640/_force-wrap.scssc differ
diff --git a/.sass-cache/6a5e80823f45fabd0f482ab196d00ba5367a3640/_nowrap.scssc b/.sass-cache/6a5e80823f45fabd0f482ab196d00ba5367a3640/_nowrap.scssc
new file mode 100644
index 0000000..5941299
Binary files /dev/null and b/.sass-cache/6a5e80823f45fabd0f482ab196d00ba5367a3640/_nowrap.scssc differ
diff --git a/.sass-cache/6a5e80823f45fabd0f482ab196d00ba5367a3640/_replacement.scssc b/.sass-cache/6a5e80823f45fabd0f482ab196d00ba5367a3640/_replacement.scssc
new file mode 100644
index 0000000..91adf27
Binary files /dev/null and b/.sass-cache/6a5e80823f45fabd0f482ab196d00ba5367a3640/_replacement.scssc differ
diff --git a/.sass-cache/6df777ee3b65b7516d0ac997dcd3c1fd4e01d050/_css3.scssc b/.sass-cache/6df777ee3b65b7516d0ac997dcd3c1fd4e01d050/_css3.scssc
new file mode 100644
index 0000000..57449d7
Binary files /dev/null and b/.sass-cache/6df777ee3b65b7516d0ac997dcd3c1fd4e01d050/_css3.scssc differ
diff --git a/.sass-cache/6df777ee3b65b7516d0ac997dcd3c1fd4e01d050/_support.scssc b/.sass-cache/6df777ee3b65b7516d0ac997dcd3c1fd4e01d050/_support.scssc
new file mode 100644
index 0000000..a0c1ef6
Binary files /dev/null and b/.sass-cache/6df777ee3b65b7516d0ac997dcd3c1fd4e01d050/_support.scssc differ
diff --git a/.sass-cache/6df777ee3b65b7516d0ac997dcd3c1fd4e01d050/_typography.scssc b/.sass-cache/6df777ee3b65b7516d0ac997dcd3c1fd4e01d050/_typography.scssc
new file mode 100644
index 0000000..50e19e2
Binary files /dev/null and b/.sass-cache/6df777ee3b65b7516d0ac997dcd3c1fd4e01d050/_typography.scssc differ
diff --git a/.sass-cache/6df777ee3b65b7516d0ac997dcd3c1fd4e01d050/_utilities.scssc b/.sass-cache/6df777ee3b65b7516d0ac997dcd3c1fd4e01d050/_utilities.scssc
new file mode 100644
index 0000000..50c3db0
Binary files /dev/null and b/.sass-cache/6df777ee3b65b7516d0ac997dcd3c1fd4e01d050/_utilities.scssc differ
diff --git a/.sass-cache/72445ab9bb3f55ecc817b41799d8a931ea1fe3c1/%042.pngc b/.sass-cache/72445ab9bb3f55ecc817b41799d8a931ea1fe3c1/%042.pngc
new file mode 100644
index 0000000..d9039ce
Binary files /dev/null and b/.sass-cache/72445ab9bb3f55ecc817b41799d8a931ea1fe3c1/%042.pngc differ
diff --git a/.sass-cache/793d1e7a87895ee996fa533abf984f50a9a92f0e/_grid-background.scssc b/.sass-cache/793d1e7a87895ee996fa533abf984f50a9a92f0e/_grid-background.scssc
new file mode 100644
index 0000000..4f3aed9
Binary files /dev/null and b/.sass-cache/793d1e7a87895ee996fa533abf984f50a9a92f0e/_grid-background.scssc differ
diff --git a/.sass-cache/7b66f216ba48720b6444fb2f0e15ba21ed3d1f53/_links.scssc b/.sass-cache/7b66f216ba48720b6444fb2f0e15ba21ed3d1f53/_links.scssc
new file mode 100644
index 0000000..58a49f0
Binary files /dev/null and b/.sass-cache/7b66f216ba48720b6444fb2f0e15ba21ed3d1f53/_links.scssc differ
diff --git a/.sass-cache/7b66f216ba48720b6444fb2f0e15ba21ed3d1f53/_lists.scssc b/.sass-cache/7b66f216ba48720b6444fb2f0e15ba21ed3d1f53/_lists.scssc
new file mode 100644
index 0000000..a3f5010
Binary files /dev/null and b/.sass-cache/7b66f216ba48720b6444fb2f0e15ba21ed3d1f53/_lists.scssc differ
diff --git a/.sass-cache/7b66f216ba48720b6444fb2f0e15ba21ed3d1f53/_text.scssc b/.sass-cache/7b66f216ba48720b6444fb2f0e15ba21ed3d1f53/_text.scssc
new file mode 100644
index 0000000..3398d4b
Binary files /dev/null and b/.sass-cache/7b66f216ba48720b6444fb2f0e15ba21ed3d1f53/_text.scssc differ
diff --git a/.sass-cache/7b66f216ba48720b6444fb2f0e15ba21ed3d1f53/_vertical_rhythm.scssc b/.sass-cache/7b66f216ba48720b6444fb2f0e15ba21ed3d1f53/_vertical_rhythm.scssc
new file mode 100644
index 0000000..1ced1a9
Binary files /dev/null and b/.sass-cache/7b66f216ba48720b6444fb2f0e15ba21ed3d1f53/_vertical_rhythm.scssc differ
diff --git a/.sass-cache/7f14bd7ad205d2fe0408374db7f1af8534773a39/_alternating-rows-and-columns.scssc b/.sass-cache/7f14bd7ad205d2fe0408374db7f1af8534773a39/_alternating-rows-and-columns.scssc
new file mode 100644
index 0000000..2a25e5f
Binary files /dev/null and b/.sass-cache/7f14bd7ad205d2fe0408374db7f1af8534773a39/_alternating-rows-and-columns.scssc differ
diff --git a/.sass-cache/7f14bd7ad205d2fe0408374db7f1af8534773a39/_borders.scssc b/.sass-cache/7f14bd7ad205d2fe0408374db7f1af8534773a39/_borders.scssc
new file mode 100644
index 0000000..4d3cbf6
Binary files /dev/null and b/.sass-cache/7f14bd7ad205d2fe0408374db7f1af8534773a39/_borders.scssc differ
diff --git a/.sass-cache/7f14bd7ad205d2fe0408374db7f1af8534773a39/_scaffolding.scssc b/.sass-cache/7f14bd7ad205d2fe0408374db7f1af8534773a39/_scaffolding.scssc
new file mode 100644
index 0000000..52fb322
Binary files /dev/null and b/.sass-cache/7f14bd7ad205d2fe0408374db7f1af8534773a39/_scaffolding.scssc differ
diff --git a/.sass-cache/8c788c8b1d8fa906da36196695c6206e2aef9fe6/_clearfix.scssc b/.sass-cache/8c788c8b1d8fa906da36196695c6206e2aef9fe6/_clearfix.scssc
new file mode 100644
index 0000000..4f3b271
Binary files /dev/null and b/.sass-cache/8c788c8b1d8fa906da36196695c6206e2aef9fe6/_clearfix.scssc differ
diff --git a/.sass-cache/8c788c8b1d8fa906da36196695c6206e2aef9fe6/_float.scssc b/.sass-cache/8c788c8b1d8fa906da36196695c6206e2aef9fe6/_float.scssc
new file mode 100644
index 0000000..42aecfd
Binary files /dev/null and b/.sass-cache/8c788c8b1d8fa906da36196695c6206e2aef9fe6/_float.scssc differ
diff --git a/.sass-cache/8c788c8b1d8fa906da36196695c6206e2aef9fe6/_hacks.scssc b/.sass-cache/8c788c8b1d8fa906da36196695c6206e2aef9fe6/_hacks.scssc
new file mode 100644
index 0000000..5ce3930
Binary files /dev/null and b/.sass-cache/8c788c8b1d8fa906da36196695c6206e2aef9fe6/_hacks.scssc differ
diff --git a/.sass-cache/8c788c8b1d8fa906da36196695c6206e2aef9fe6/_min.scssc b/.sass-cache/8c788c8b1d8fa906da36196695c6206e2aef9fe6/_min.scssc
new file mode 100644
index 0000000..22e5450
Binary files /dev/null and b/.sass-cache/8c788c8b1d8fa906da36196695c6206e2aef9fe6/_min.scssc differ
diff --git a/.sass-cache/8c788c8b1d8fa906da36196695c6206e2aef9fe6/_reset.scssc b/.sass-cache/8c788c8b1d8fa906da36196695c6206e2aef9fe6/_reset.scssc
new file mode 100644
index 0000000..f12e359
Binary files /dev/null and b/.sass-cache/8c788c8b1d8fa906da36196695c6206e2aef9fe6/_reset.scssc differ
diff --git a/.sass-cache/8c788c8b1d8fa906da36196695c6206e2aef9fe6/_tag-cloud.scssc b/.sass-cache/8c788c8b1d8fa906da36196695c6206e2aef9fe6/_tag-cloud.scssc
new file mode 100644
index 0000000..b74de35
Binary files /dev/null and b/.sass-cache/8c788c8b1d8fa906da36196695c6206e2aef9fe6/_tag-cloud.scssc differ
diff --git a/.sass-cache/91d41d8ae736901f28d3ee5b4635654c505f977f/_utilities.scssc b/.sass-cache/91d41d8ae736901f28d3ee5b4635654c505f977f/_utilities.scssc
new file mode 100644
index 0000000..c1d2024
Binary files /dev/null and b/.sass-cache/91d41d8ae736901f28d3ee5b4635654c505f977f/_utilities.scssc differ
diff --git a/.sass-cache/94d53fa9c38d7c717e56eb4ec327a1a7ca6718b2/_base.scssc b/.sass-cache/94d53fa9c38d7c717e56eb4ec327a1a7ca6718b2/_base.scssc
new file mode 100644
index 0000000..e358e45
Binary files /dev/null and b/.sass-cache/94d53fa9c38d7c717e56eb4ec327a1a7ca6718b2/_base.scssc differ
diff --git a/.sass-cache/94d53fa9c38d7c717e56eb4ec327a1a7ca6718b2/_sprite-img.scssc b/.sass-cache/94d53fa9c38d7c717e56eb4ec327a1a7ca6718b2/_sprite-img.scssc
new file mode 100644
index 0000000..62fb725
Binary files /dev/null and b/.sass-cache/94d53fa9c38d7c717e56eb4ec327a1a7ca6718b2/_sprite-img.scssc differ
diff --git a/.sass-cache/968647386db2a8391c43e3caac39c31d385ffd1a/_color.scssc b/.sass-cache/968647386db2a8391c43e3caac39c31d385ffd1a/_color.scssc
new file mode 100644
index 0000000..eafbe68
Binary files /dev/null and b/.sass-cache/968647386db2a8391c43e3caac39c31d385ffd1a/_color.scssc differ
diff --git a/.sass-cache/968647386db2a8391c43e3caac39c31d385ffd1a/_general.scssc b/.sass-cache/968647386db2a8391c43e3caac39c31d385ffd1a/_general.scssc
new file mode 100644
index 0000000..2fd7127
Binary files /dev/null and b/.sass-cache/968647386db2a8391c43e3caac39c31d385ffd1a/_general.scssc differ
diff --git a/.sass-cache/968647386db2a8391c43e3caac39c31d385ffd1a/_sprites.scssc b/.sass-cache/968647386db2a8391c43e3caac39c31d385ffd1a/_sprites.scssc
new file mode 100644
index 0000000..3197f1b
Binary files /dev/null and b/.sass-cache/968647386db2a8391c43e3caac39c31d385ffd1a/_sprites.scssc differ
diff --git a/.sass-cache/968647386db2a8391c43e3caac39c31d385ffd1a/_tables.scssc b/.sass-cache/968647386db2a8391c43e3caac39c31d385ffd1a/_tables.scssc
new file mode 100644
index 0000000..e9ff7dd
Binary files /dev/null and b/.sass-cache/968647386db2a8391c43e3caac39c31d385ffd1a/_tables.scssc differ
diff --git a/.sass-cache/974b4ebd7dd0bf6ecf5479eac937ff33476925bf/cms.scssc b/.sass-cache/974b4ebd7dd0bf6ecf5479eac937ff33476925bf/cms.scssc
new file mode 100644
index 0000000..fe1b331
Binary files /dev/null and b/.sass-cache/974b4ebd7dd0bf6ecf5479eac937ff33476925bf/cms.scssc differ
diff --git a/.sass-cache/9e5e64a19dcc48d5a907402d44291a30c3e7e94b/_ellipsis.scssc b/.sass-cache/9e5e64a19dcc48d5a907402d44291a30c3e7e94b/_ellipsis.scssc
new file mode 100644
index 0000000..5776059
Binary files /dev/null and b/.sass-cache/9e5e64a19dcc48d5a907402d44291a30c3e7e94b/_ellipsis.scssc differ
diff --git a/.sass-cache/9e5e64a19dcc48d5a907402d44291a30c3e7e94b/_force-wrap.scssc b/.sass-cache/9e5e64a19dcc48d5a907402d44291a30c3e7e94b/_force-wrap.scssc
new file mode 100644
index 0000000..c2ab553
Binary files /dev/null and b/.sass-cache/9e5e64a19dcc48d5a907402d44291a30c3e7e94b/_force-wrap.scssc differ
diff --git a/.sass-cache/9e5e64a19dcc48d5a907402d44291a30c3e7e94b/_nowrap.scssc b/.sass-cache/9e5e64a19dcc48d5a907402d44291a30c3e7e94b/_nowrap.scssc
new file mode 100644
index 0000000..901edce
Binary files /dev/null and b/.sass-cache/9e5e64a19dcc48d5a907402d44291a30c3e7e94b/_nowrap.scssc differ
diff --git a/.sass-cache/9e5e64a19dcc48d5a907402d44291a30c3e7e94b/_replacement.scssc b/.sass-cache/9e5e64a19dcc48d5a907402d44291a30c3e7e94b/_replacement.scssc
new file mode 100644
index 0000000..491615b
Binary files /dev/null and b/.sass-cache/9e5e64a19dcc48d5a907402d44291a30c3e7e94b/_replacement.scssc differ
diff --git a/.sass-cache/a403801076324cee6c49740bfa6a465be208f0fa/%042.pngc b/.sass-cache/a403801076324cee6c49740bfa6a465be208f0fa/%042.pngc
new file mode 100644
index 0000000..9a434d3
Binary files /dev/null and b/.sass-cache/a403801076324cee6c49740bfa6a465be208f0fa/%042.pngc differ
diff --git a/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_appearance.scssc b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_appearance.scssc
new file mode 100644
index 0000000..d9362bd
Binary files /dev/null and b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_appearance.scssc differ
diff --git a/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_background-clip.scssc b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_background-clip.scssc
new file mode 100644
index 0000000..31508f0
Binary files /dev/null and b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_background-clip.scssc differ
diff --git a/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_background-origin.scssc b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_background-origin.scssc
new file mode 100644
index 0000000..c05e58c
Binary files /dev/null and b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_background-origin.scssc differ
diff --git a/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_background-size.scssc b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_background-size.scssc
new file mode 100644
index 0000000..d027371
Binary files /dev/null and b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_background-size.scssc differ
diff --git a/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_border-radius.scssc b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_border-radius.scssc
new file mode 100644
index 0000000..9ecc55c
Binary files /dev/null and b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_border-radius.scssc differ
diff --git a/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_box-shadow.scssc b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_box-shadow.scssc
new file mode 100644
index 0000000..9187bd6
Binary files /dev/null and b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_box-shadow.scssc differ
diff --git a/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_box-sizing.scssc b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_box-sizing.scssc
new file mode 100644
index 0000000..9061226
Binary files /dev/null and b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_box-sizing.scssc differ
diff --git a/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_box.scssc b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_box.scssc
new file mode 100644
index 0000000..092e389
Binary files /dev/null and b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_box.scssc differ
diff --git a/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_columns.scssc b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_columns.scssc
new file mode 100644
index 0000000..f51acb8
Binary files /dev/null and b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_columns.scssc differ
diff --git a/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_font-face.scssc b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_font-face.scssc
new file mode 100644
index 0000000..0d1a337
Binary files /dev/null and b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_font-face.scssc differ
diff --git a/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_gradient.scssc b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_gradient.scssc
new file mode 100644
index 0000000..08f4c76
Binary files /dev/null and b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_gradient.scssc differ
diff --git a/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_images.scssc b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_images.scssc
new file mode 100644
index 0000000..3c77266
Binary files /dev/null and b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_images.scssc differ
diff --git a/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_inline-block.scssc b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_inline-block.scssc
new file mode 100644
index 0000000..36fd3ec
Binary files /dev/null and b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_inline-block.scssc differ
diff --git a/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_opacity.scssc b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_opacity.scssc
new file mode 100644
index 0000000..cd42072
Binary files /dev/null and b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_opacity.scssc differ
diff --git a/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_shared.scssc b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_shared.scssc
new file mode 100644
index 0000000..33bb733
Binary files /dev/null and b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_shared.scssc differ
diff --git a/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_text-shadow.scssc b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_text-shadow.scssc
new file mode 100644
index 0000000..627f441
Binary files /dev/null and b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_text-shadow.scssc differ
diff --git a/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_transform.scssc b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_transform.scssc
new file mode 100644
index 0000000..e3d9e74
Binary files /dev/null and b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_transform.scssc differ
diff --git a/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_transition.scssc b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_transition.scssc
new file mode 100644
index 0000000..7791197
Binary files /dev/null and b/.sass-cache/af1289ca7f010b3d69f8884f2e2c729a035d2186/_transition.scssc differ
diff --git a/.sass-cache/b7214e687b1e7e64010120db4cced0edfb47477b/_bullets.scssc b/.sass-cache/b7214e687b1e7e64010120db4cced0edfb47477b/_bullets.scssc
new file mode 100644
index 0000000..21654f9
Binary files /dev/null and b/.sass-cache/b7214e687b1e7e64010120db4cced0edfb47477b/_bullets.scssc differ
diff --git a/.sass-cache/b7214e687b1e7e64010120db4cced0edfb47477b/_horizontal-list.scssc b/.sass-cache/b7214e687b1e7e64010120db4cced0edfb47477b/_horizontal-list.scssc
new file mode 100644
index 0000000..1eceec7
Binary files /dev/null and b/.sass-cache/b7214e687b1e7e64010120db4cced0edfb47477b/_horizontal-list.scssc differ
diff --git a/.sass-cache/b7214e687b1e7e64010120db4cced0edfb47477b/_inline-block-list.scssc b/.sass-cache/b7214e687b1e7e64010120db4cced0edfb47477b/_inline-block-list.scssc
new file mode 100644
index 0000000..88394f0
Binary files /dev/null and b/.sass-cache/b7214e687b1e7e64010120db4cced0edfb47477b/_inline-block-list.scssc differ
diff --git a/.sass-cache/b7214e687b1e7e64010120db4cced0edfb47477b/_inline-list.scssc b/.sass-cache/b7214e687b1e7e64010120db4cced0edfb47477b/_inline-list.scssc
new file mode 100644
index 0000000..fab5a59
Binary files /dev/null and b/.sass-cache/b7214e687b1e7e64010120db4cced0edfb47477b/_inline-list.scssc differ
diff --git a/.sass-cache/c72ca4cb11b5180ff6addaf61bd8a5812fcc77ef/_contrast.scssc b/.sass-cache/c72ca4cb11b5180ff6addaf61bd8a5812fcc77ef/_contrast.scssc
new file mode 100644
index 0000000..8621f2a
Binary files /dev/null and b/.sass-cache/c72ca4cb11b5180ff6addaf61bd8a5812fcc77ef/_contrast.scssc differ
diff --git a/.sass-cache/cc5c8cad7c31fa45a998a22ca5156cd3c8ae244e/_grid-background.scssc b/.sass-cache/cc5c8cad7c31fa45a998a22ca5156cd3c8ae244e/_grid-background.scssc
new file mode 100644
index 0000000..61bd2e3
Binary files /dev/null and b/.sass-cache/cc5c8cad7c31fa45a998a22ca5156cd3c8ae244e/_grid-background.scssc differ
diff --git a/.sass-cache/ccbaed75e65ce9506ff5cd281367a2316dbd3082/_utilities.scssc b/.sass-cache/ccbaed75e65ce9506ff5cd281367a2316dbd3082/_utilities.scssc
new file mode 100644
index 0000000..408ca3c
Binary files /dev/null and b/.sass-cache/ccbaed75e65ce9506ff5cd281367a2316dbd3082/_utilities.scssc differ
diff --git a/.sass-cache/ddacfb0766cb5c1c8daa1d5f93768f43b9ce24a1/_default.scssc b/.sass-cache/ddacfb0766cb5c1c8daa1d5f93768f43b9ce24a1/_default.scssc
new file mode 100644
index 0000000..41d3877
Binary files /dev/null and b/.sass-cache/ddacfb0766cb5c1c8daa1d5f93768f43b9ce24a1/_default.scssc differ
diff --git a/.sass-cache/dff6a38c198f5bc43f7761ba34bd2f77c7ae40c3/_links.scssc b/.sass-cache/dff6a38c198f5bc43f7761ba34bd2f77c7ae40c3/_links.scssc
new file mode 100644
index 0000000..29a1f68
Binary files /dev/null and b/.sass-cache/dff6a38c198f5bc43f7761ba34bd2f77c7ae40c3/_links.scssc differ
diff --git a/.sass-cache/dff6a38c198f5bc43f7761ba34bd2f77c7ae40c3/_lists.scssc b/.sass-cache/dff6a38c198f5bc43f7761ba34bd2f77c7ae40c3/_lists.scssc
new file mode 100644
index 0000000..f263ea6
Binary files /dev/null and b/.sass-cache/dff6a38c198f5bc43f7761ba34bd2f77c7ae40c3/_lists.scssc differ
diff --git a/.sass-cache/dff6a38c198f5bc43f7761ba34bd2f77c7ae40c3/_text.scssc b/.sass-cache/dff6a38c198f5bc43f7761ba34bd2f77c7ae40c3/_text.scssc
new file mode 100644
index 0000000..a6d557f
Binary files /dev/null and b/.sass-cache/dff6a38c198f5bc43f7761ba34bd2f77c7ae40c3/_text.scssc differ
diff --git a/.sass-cache/dff6a38c198f5bc43f7761ba34bd2f77c7ae40c3/_vertical_rhythm.scssc b/.sass-cache/dff6a38c198f5bc43f7761ba34bd2f77c7ae40c3/_vertical_rhythm.scssc
new file mode 100644
index 0000000..8c033b0
Binary files /dev/null and b/.sass-cache/dff6a38c198f5bc43f7761ba34bd2f77c7ae40c3/_vertical_rhythm.scssc differ
diff --git a/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_appearance.scssc b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_appearance.scssc
new file mode 100644
index 0000000..dacc15d
Binary files /dev/null and b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_appearance.scssc differ
diff --git a/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_background-clip.scssc b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_background-clip.scssc
new file mode 100644
index 0000000..492586f
Binary files /dev/null and b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_background-clip.scssc differ
diff --git a/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_background-origin.scssc b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_background-origin.scssc
new file mode 100644
index 0000000..7297d40
Binary files /dev/null and b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_background-origin.scssc differ
diff --git a/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_background-size.scssc b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_background-size.scssc
new file mode 100644
index 0000000..bc3cc17
Binary files /dev/null and b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_background-size.scssc differ
diff --git a/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_border-radius.scssc b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_border-radius.scssc
new file mode 100644
index 0000000..f745611
Binary files /dev/null and b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_border-radius.scssc differ
diff --git a/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_box-shadow.scssc b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_box-shadow.scssc
new file mode 100644
index 0000000..67779ee
Binary files /dev/null and b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_box-shadow.scssc differ
diff --git a/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_box-sizing.scssc b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_box-sizing.scssc
new file mode 100644
index 0000000..cbfd7dd
Binary files /dev/null and b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_box-sizing.scssc differ
diff --git a/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_box.scssc b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_box.scssc
new file mode 100644
index 0000000..658514e
Binary files /dev/null and b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_box.scssc differ
diff --git a/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_columns.scssc b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_columns.scssc
new file mode 100644
index 0000000..a9b5685
Binary files /dev/null and b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_columns.scssc differ
diff --git a/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_filter.scssc b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_filter.scssc
new file mode 100644
index 0000000..1efe041
Binary files /dev/null and b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_filter.scssc differ
diff --git a/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_font-face.scssc b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_font-face.scssc
new file mode 100644
index 0000000..6e3db51
Binary files /dev/null and b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_font-face.scssc differ
diff --git a/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_hyphenation.scssc b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_hyphenation.scssc
new file mode 100644
index 0000000..df15530
Binary files /dev/null and b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_hyphenation.scssc differ
diff --git a/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_images.scssc b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_images.scssc
new file mode 100644
index 0000000..0ed26ef
Binary files /dev/null and b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_images.scssc differ
diff --git a/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_inline-block.scssc b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_inline-block.scssc
new file mode 100644
index 0000000..cd69c2c
Binary files /dev/null and b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_inline-block.scssc differ
diff --git a/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_opacity.scssc b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_opacity.scssc
new file mode 100644
index 0000000..144cd07
Binary files /dev/null and b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_opacity.scssc differ
diff --git a/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_regions.scssc b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_regions.scssc
new file mode 100644
index 0000000..fa9be0a
Binary files /dev/null and b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_regions.scssc differ
diff --git a/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_shared.scssc b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_shared.scssc
new file mode 100644
index 0000000..e998162
Binary files /dev/null and b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_shared.scssc differ
diff --git a/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_text-shadow.scssc b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_text-shadow.scssc
new file mode 100644
index 0000000..0c50518
Binary files /dev/null and b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_text-shadow.scssc differ
diff --git a/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_transform.scssc b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_transform.scssc
new file mode 100644
index 0000000..7d95583
Binary files /dev/null and b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_transform.scssc differ
diff --git a/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_transition.scssc b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_transition.scssc
new file mode 100644
index 0000000..f3e6ef2
Binary files /dev/null and b/.sass-cache/ea570abe83f92f7ffebe8752050015ad028a313d/_transition.scssc differ
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100755
index 0000000..61429c7
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,23 @@
+Copyright (c) 2013, Michael Strong
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ Redistributions in binary form must reproduce the above copyright notice, this
+ list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
diff --git a/_config/config.yml b/_config/config.yml
index 846a09e..e69de29 100755
--- a/_config/config.yml
+++ b/_config/config.yml
@@ -1,7 +0,0 @@
----
-Only:
- moduleexists: 'widgets'
----
-BlogPost:
- defaults:
- 'InheritSideBar': true
diff --git a/composer.json b/composer.json
new file mode 100755
index 0000000..c0ead7e
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,21 @@
+{
+ "name": "micmania1/silverstripe-blog",
+ "description": "A fresh take on blogging in Silverstripe set out to tackle the issue of a cluttered Site Tree.",
+ "type": "silverstripe-module",
+ "require": {
+ "silverstripe/framework": "3.1.*",
+ "silverstripe/cms": "3.1.*"
+ },
+ "license": "BSD-2-Clause",
+ "authors": [
+ {
+ "name": "Michael Strong",
+ "email": "micmania@hotmail.co.uk"
+ }
+ ],
+ "suggest": {
+ "silverstripe/widgets": "Some widgets come with the blog which are compatible with the widgets module.",
+ "silverstripe/comments": "This module adds comments to your blog."
+ },
+ "minimum-stability": "dev"
+}
diff --git a/config.rb b/config.rb
new file mode 100755
index 0000000..29d09bc
--- /dev/null
+++ b/config.rb
@@ -0,0 +1,24 @@
+# Require any additional compass plugins here.
+
+# Set this to the root of your project when deployed:
+http_path = "/"
+css_dir = "css"
+sass_dir = "scss"
+images_dir = "images"
+javascripts_dir = "javascript"
+
+# You can select your preferred output style here (can be overridden via the command line):
+# output_style = :expanded or :nested or :compact or :compressed
+
+# To enable relative paths to assets via compass helper functions. Uncomment:
+relative_assets = true
+
+# To disable debugging comments that display the original location of your selectors. Uncomment:
+line_comments = true
+
+
+# If you prefer the indented syntax, you might want to regenerate this
+# project again passing --syntax sass, or you can uncomment this:
+# preferred_syntax = :sass
+# and then run:
+# sass-convert -R --from scss --to sass scss scss && rm -rf sass && mv scss sass
diff --git a/css/cms.css b/css/cms.css
index f4f7083..3382c86 100755
--- a/css/cms.css
+++ b/css/cms.css
@@ -1,9 +1,35 @@
-.cms .ss-gridfield .gridfield-dropdown {
- margin: 3px 8px 0 0;
- border-bottom: none;
-}
-
-.cms .ss-gridfield .gridfield-dropdown .chzn-container,
-.cms .ss-gridfield .gridfield-dropdown .dropdown {
- min-width: 195px;
-}
\ No newline at end of file
+/**
+ * CMS Styles
+**/
+/**
+ * Include Compass framework */
+/*
+ * Sprite maps & Icons */
+/* line 42, blog-icon/*.png */
+.blog-icon-sprite, .blog-icon .blog-icon-timer {
+ background: url('../images/blog-icon-s1d712fffa2.png') no-repeat;
+}
+
+/* line 60, ../../../../lib/gems/1.8/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/utilities/sprites/_base.scss */
+.blog-icon .blog-icon-timer {
+ background-position: 0 0;
+}
+
+/* line 21, ../scss/cms.scss */
+.cms .ss-gridfield .gridfield-dropdown {
+ margin: 3px 8px 0 0;
+ border-bottom: none;
+}
+/* line 26, ../scss/cms.scss */
+.cms .ss-gridfield .gridfield-dropdown .chzn-container,
+.cms .ss-gridfield .gridfield-dropdown .dropdown {
+ min-width: 195px;
+}
+/* line 35, ../scss/cms.scss */
+.cms table.ss-gridfield-table tr td .blog-icon {
+ width: 16px;
+ height: 16px;
+ display: block;
+ float: left;
+ margin-right: 6px;
+}
diff --git a/extensions/BlogPostFilter.php b/extensions/BlogPostFilter.php
index c3e6ea8..1941caa 100755
--- a/extensions/BlogPostFilter.php
+++ b/extensions/BlogPostFilter.php
@@ -7,11 +7,13 @@ class BlogPostFilter extends DataExtension {
**/
public function augmentSQL(SQLQuery &$query) {
- $stage = Versioned::current_stage();
- if($stage == "Stage") $stage = "";
- else $stage = "_" . Convert::raw2sql($stage);
+ if(!Permission::check("VIEW_DRAFT_CONTENT")) {
+ $stage = Versioned::current_stage();
+ if($stage == "Stage") $stage = "";
+ else $stage = "_" . Convert::raw2sql($stage);
- $query->addWhere("PublishDate < NOW()");
+ $query->addWhere("PublishDate < NOW()");
+ }
}
diff --git a/forms/gridfield/GridFieldAddByDBField.php b/forms/gridfield/GridFieldAddByDBField.php
index e87e0af..9bdd351 100755
--- a/forms/gridfield/GridFieldAddByDBField.php
+++ b/forms/gridfield/GridFieldAddByDBField.php
@@ -73,7 +73,15 @@ class GridFieldAddByDBField implements GridField_ActionProvider, GridField_HTMLP
$id = $gridField->getList()->add($obj);
if(!$id) {
- $gridField->setError(_t("GridFieldAddByDBField.ADDFAIL", "Unable to save " . $obj->Title . " to the database."), "error");
+ $gridField->setError(_t(
+ "GridFieldAddByDBField.AddFail",
+ "Unable to save {class} to the database.",
+ "Unable to add the DataObject.",
+ array(
+ "class" => $obj->class
+ )),
+ "error"
+ );
}
} else {
throw new UnexpectedValueException("Invalid field (" . $dbField . ") on " . $obj->ClassName . ".");
@@ -99,8 +107,12 @@ class GridFieldAddByDBField implements GridField_ActionProvider, GridField_HTMLP
->setAttribute("placeholder", $obj->fieldLabel($dbField))
->addExtraClass("no-change-track");
- $addAction = new GridField_FormAction($gridField, 'add',
- sprintf(_t('GridField.ADD', "Add %s"), $obj->i18n_singular_name()), 'add', 'add');
+ $addAction = new GridField_FormAction($gridField,
+ 'add',
+ _t('GridFieldAddByDBField.Add', "Add {name}", "Add button text", array("name" => $obj->i18n_singular_name())),
+ 'add',
+ 'add'
+ );
$addAction->setAttribute('data-icon', 'add');
// Start thinking about rending this back to the GF
diff --git a/forms/gridfield/GridFieldSiteTreeAddNewButton.php b/forms/gridfield/GridFieldBlogPostAddNewButton.php
similarity index 87%
rename from forms/gridfield/GridFieldSiteTreeAddNewButton.php
rename to forms/gridfield/GridFieldBlogPostAddNewButton.php
index b829367..0a66efd 100755
--- a/forms/gridfield/GridFieldSiteTreeAddNewButton.php
+++ b/forms/gridfield/GridFieldBlogPostAddNewButton.php
@@ -9,7 +9,7 @@
* @package framework
* @subpackage fields-gridfield
*/
-class GridFieldSiteTreeAddNewButton extends GridFieldAddNewButton
+class GridFieldBlogPostAddNewButton extends GridFieldAddNewButton
implements GridField_ActionProvider {
public function getHTMLFragments($gridField) {
@@ -24,15 +24,19 @@ class GridFieldSiteTreeAddNewButton extends GridFieldAddNewButton
if(!$this->buttonName) {
// provide a default button name, can be changed by calling {@link setButtonName()} on this component
$objectName = $singleton->i18n_singular_name();
- $this->buttonName = _t('GridField.Add', 'Add {name}', array('name' => $objectName));
+ $this->buttonName = _t('GridFieldSiteTreeAddNewButton.Add', 'Add {name}', "Add button text", array('name' => $singleton->i18n_singular_name()));
}
$state = $gridField->State->GridFieldSiteTreeAddNewButton;
$state->currentPageID = $parent->ID;
$state->pageType = $parent->defaultChild();
- $addAction = new GridField_FormAction($gridField, 'add',
- sprintf(_t('GridField.ADD', "Add %s"), $singleton->i18n_singular_name()), 'add', 'add');
+ $addAction = new GridField_FormAction($gridField,
+ 'add',
+ $this->buttonName,
+ 'add',
+ 'add'
+ );
$addAction->setAttribute('data-icon', 'add')->addExtraClass("no-ajax");
$allowedChildren = $parent->allowedChildren();
diff --git a/forms/gridfield/GridFieldBlogPostState.php b/forms/gridfield/GridFieldBlogPostState.php
new file mode 100755
index 0000000..8a52128
--- /dev/null
+++ b/forms/gridfield/GridFieldBlogPostState.php
@@ -0,0 +1,72 @@
+hasMethod("isPublished")) {
+ $published = $record->isPublished();
+ if(!$published) {
+ return _t("GridFieldBlogPostState.Draft", ' Saved as Draft');
+ } else if (strtotime($record->PublishDate) > time()) {
+ return _t(
+ "GridFieldBlogPostState.Timer",
+ ' Publish at {date}',
+ "State for when a post is published.", array(
+ "date" => $record->dbObject("PublishDate")->Nice()
+ )
+ );
+ } else {
+ return _t(
+ "GridFieldBlogPostState.Published",
+ ' Published on {date}',
+ "State for when a post is published.",
+ array(
+ "date" => $record->dbObject("PublishDate")->Nice()
+ )
+ );
+ }
+ }
+ }
+ }
+
+ public function getColumnAttributes($gridField, $record, $columnName) {
+ if($columnName == "State") {
+ if($record->hasMethod("isPublished")) {
+ $published = $record->isPublished();
+ if(!$published) {
+ $class = "blog-icon draft";
+ } else if (strtotime($record->PublishDate) > time()) {
+ $class = "blog-icon timer";
+ } else {
+ $class = "blog-icon published";
+ }
+ return array("class" => $class);
+ }
+ }
+ return array();
+ }
+
+ public function getColumnMetaData($gridField, $columnName) {
+ switch($columnName) {
+ case 'State':
+ return array("title" => _t("GridFieldBlogPostState.StateTitle", "State", "Column title for state"));
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/forms/gridfield/GridFieldConfig_SiteTree.php b/forms/gridfield/GridFieldConfig_BlogPost.php
similarity index 75%
rename from forms/gridfield/GridFieldConfig_SiteTree.php
rename to forms/gridfield/GridFieldConfig_BlogPost.php
index 7ed18a6..0e1fd6a 100755
--- a/forms/gridfield/GridFieldConfig_SiteTree.php
+++ b/forms/gridfield/GridFieldConfig_BlogPost.php
@@ -8,12 +8,12 @@
*
* @author Michael String
**/
-class GridFieldConfig_SiteTree extends GridFieldConfig {
+class GridFieldConfig_BlogPost extends GridFieldConfig {
public function __construct($itemsPerPage = null) {
parent::__construct($itemsPerPage);
$this->addComponent(new GridFieldButtonRow('before'));
- $this->addComponent(new GridFieldSiteTreeAddNewButton('buttons-before-left'));
+ $this->addComponent(new GridFieldBlogPostAddNewButton('buttons-before-left'));
$this->addComponent(new GridFieldToolbarHeader());
$this->addComponent($sort = new GridFieldSortableHeader());
$this->addComponent($filter = new GridFieldFilterHeader());
@@ -21,7 +21,8 @@ class GridFieldConfig_SiteTree extends GridFieldConfig {
$this->addComponent(new GridFieldSiteTreeEditButton());
$this->addComponent(new GridFieldPageCount('toolbar-header-right'));
$this->addComponent($pagination = new GridFieldPaginator($itemsPerPage));
+ $this->addComponent(new GridFieldBlogPostState());
- $pagination->setThrowExceptionOnBadDataType(false);
+ $pagination->setThrowExceptionOnBadDataType(true);
}
}
\ No newline at end of file
diff --git a/images/blog-icon-s1d712fffa2.png b/images/blog-icon-s1d712fffa2.png
new file mode 100644
index 0000000..91db84e
Binary files /dev/null and b/images/blog-icon-s1d712fffa2.png differ
diff --git a/images/blog-icon/timer.png b/images/blog-icon/timer.png
new file mode 100755
index 0000000..a71bc4d
Binary files /dev/null and b/images/blog-icon/timer.png differ
diff --git a/lang/_manifest_exclude b/lang/_manifest_exclude
new file mode 100644
index 0000000..e69de29
diff --git a/lang/en.yml b/lang/en.yml
new file mode 100755
index 0000000..43b869f
--- /dev/null
+++ b/lang/en.yml
@@ -0,0 +1,37 @@
+en:
+ GridFieldAddByDBField:
+ AddFail: 'Unable to save {class} to the database.'
+ Add: 'Add {name}'
+ GridFieldSiteTreeAddNewButton:
+ Add: 'Add {name}'
+ GridFieldBlogPostState:
+ StateTitle: 'State'
+ Draft: ' Saved as Draft'
+ Published: ' Published on {date}'
+ Timer: ' Publish at {date}'
+ BlogPost:
+ PublishDate: 'Publish Date'
+ Categories: 'Categories'
+ Tags: 'Tags'
+ FeaturedImage: 'Featured Image'
+ Blog:
+ BlogPosts: 'Blog Posts'
+ Categories: 'Categories'
+ Tags: 'Tags'
+ PostsPerPage: 'Posts Per Page'
+ BlogTag:
+ Title: 'Title'
+ BlogCategory:
+ Title: 'Title'
+ BlogRecentPostsWidget:
+ Blog: 'Blog'
+ NumberOfPosts: 'Number of Posts'
+ BlogCategoriesWidget:
+ Blog: 'Blog'
+ BlogArchiveWidget:
+ Blog: 'Blog'
+ Monthly: 'Monthly'
+ Yearly: 'Yearly'
+ NumberToDisplay: 'Number to Display'
+ BlogTagsWidget:
+ Blog: 'Blog'
\ No newline at end of file
diff --git a/page/Blog.php b/model/Blog.php
similarity index 69%
rename from page/Blog.php
rename to model/Blog.php
index cc23379..ac9e19a 100755
--- a/page/Blog.php
+++ b/model/Blog.php
@@ -27,24 +27,19 @@ class Blog extends Page {
"BlogFilter",
);
- /**
- * Whether or not to show BlogPost's in a GridField. Usually this will be
- * the case when they're hidden from the SiteTree.
- *
- * @var boolean
- **/
- private static $show_posts_in_gridfield = true;
-
+ private static $defaults = array(
+ "ProvideComments" => false,
+ );
public function getCMSFields() {
$fields = parent::getCMSFields();
- if($this->config()->get("show_posts_in_gridfield")) {
+ if(!Config::inst()->get("BlogPost", "show_in_sitetree")) {
$gridField = new GridField(
"BlogPost",
- _t("Blog.FieldLabels.BlogPosts", "Blog Posts"),
- $this->AllChildrenIncludingDeleted(),
- GridFieldConfig_SiteTree::create()
+ _t("Blog.BlogPosts", "Blog Posts"),
+ $this->getBlogPosts(),
+ GridFieldConfig_BlogPost::create()
);
$fields->addFieldToTab("Root.BlogPosts", $gridField);
}
@@ -56,14 +51,14 @@ class Blog extends Page {
$categories = GridField::create(
"Categories",
- _t("Blog.FieldLabels.Categories", "Categories"),
+ _t("Blog.Categories", "Categories"),
$this->Categories(),
$config
);
$tags = GridField::create(
"Tags",
- _t("Blog.FieldLabels.Tags", "Tags"),
+ _t("Blog.Tags", "Tags"),
$this->Tags(),
$config
);
@@ -79,7 +74,7 @@ class Blog extends Page {
public function getSettingsFields() {
$fields = parent::getSettingsFields();
- $fields->addFieldToTab("Root.Settings", NumericField::create("PostsPerPage", _t("Blog.FieldLabels.POSTSPERPAGE", "Posts Per Page")));
+ $fields->addFieldToTab("Root.Settings", NumericField::create("PostsPerPage", _t("Blog.PostsPerPage", "Posts Per Page")));
return $fields;
}
@@ -94,8 +89,8 @@ class Blog extends Page {
public function getExcludedSiteTreeClassNames() {
$classes = array();
$tmpClasses = ClassInfo::subClassesFor("BlogPost");
- foreach($tmpClasses as $class) {
- if(!Config::inst()->get($class, "show_in_site_tree")) {
+ if(!Config::inst()->get("BlogPost", "show_in_sitetree")) {
+ foreach($tmpClasses as $class) {
$classes[$class] = $class;
}
}
@@ -131,12 +126,13 @@ class Blog_Controller extends Page_Controller {
'archive',
'tag',
'category',
+ 'rss',
);
private static $url_handlers = array(
'tag/$Tag!' => 'tag',
'category/$Category!' => 'category',
- 'archive/$Year!/$Month' => 'archive',
+ 'archive/$Year!/$Month/$Day' => 'archive',
);
@@ -164,38 +160,32 @@ class Blog_Controller extends Page_Controller {
public function archive() {
$year = $this->getArchiveYear();
$month = $this->getArchiveMonth();
+ $day = $this->getArchiveDay();
// If an invalid month has been passed, we can return a 404.
if($this->request->param("Month") && !$month) {
return $this->httpError(404, "Not Found");
+
+ // Check for valid day
+ if($this->request->param("Day") && !$day) {
+ return $this->httpError(404, "Not Found");
+ }
}
if($year) {
- if($month) {
- $startDate = $year . '-' . $month . '-01 00:00:00';
- if($month == 12) {
- $endDate = ($year+1) . '-01-01 00:00:00';
- } else {
- $endDate = $year . '-' . ($month + 1) . '-' . '01 00:00:00';
- }
- } else {
- $startDate = $year . '-01-01 00:00:00';
- $endDate = ($year+1) . '12-31 23:59:59';
- }
-
- // Ensure that we never fetch back unpublished future posts.
- if(strtotime($endDate) > time()) {
- $endDate = date('Y-m-d H:i:s');
- }
-
$query = $this->getBlogPosts()->dataQuery();
$stage = $query->getQueryParam("Versioned.stage");
if($stage) $stage = '_' . Convert::raw2sql($stage);
$query->innerJoin("BlogPost", "`SiteTree" . $stage . "`.`ID` = `BlogPost" . $stage . "`.`ID`");
- $query->where("`PublishDate` >= '" . Convert::raw2sql($startDate) . "'
- AND `PublishDate` < '" . Convert::raw2sql($endDate) . "'");
+ $query->where("YEAR(PublishDate) = '" . Convert::raw2sql($year) . "'");
+ if($month) {
+ $query->where("MONTH(PublishDate) = '" . Convert::raw2sql($month) . "'");
+ if($day) {
+ $query->where("DAY(PublishDate) = '" . Convert::raw2sql($day) . "'");
+ }
+ }
$this->blogPosts = $this->getBlogPosts()->setDataQuery($query);
return $this->render();
@@ -237,6 +227,18 @@ class Blog_Controller extends Page_Controller {
+ /**
+ * Displays an RSS feed of blog posts
+ *
+ * @return string HTML
+ **/
+ public function rss() {
+ $rss = new RSSFeed($this->getBlogPosts(), $this->Link(), $this->MetaDescription, $this->MetaTitle);
+ return $rss->outputToBrowser();
+ }
+
+
+
/**
* Returns a list of paginated blog posts based on the blogPost dataList
*
@@ -299,7 +301,7 @@ class Blog_Controller extends Page_Controller {
public function getArchiveYear() {
$year = $this->request->param("Year");
if(preg_match("/^[0-9]{4}$/", $year)) {
- return $year;
+ return (int) $year;
}
return null;
}
@@ -314,28 +316,69 @@ class Blog_Controller extends Page_Controller {
public function getArchiveMonth() {
$month = $this->request->param("Month");
if(preg_match("/^[0-9]{1,2}$/", $month)) {
- if($month > 0 && $month < 13)
- return $month;
+ if($month > 0 && $month < 13) {
+ // Check that we have a valid date.
+ if(checkdate($month, 01, $this->getArchiveYear())) {
+ return (int) $month;
+ }
+ }
}
return null;
}
+ /**
+ * Fetches the archive day from the url
+ *
+ * @return int|null
+ **/
+ public function getArchiveDay() {
+ $day = $this->request->param("Day");
+ if(preg_match("/^[0-9]{1,2}$/", $day)) {
+
+ // Check that we have a valid date
+ if(checkdate($this->getArchiveMonth(), $day, $this->getArchiveYear())) {
+ return (int) $day;
+ }
+ }
+ return null;
+ }
+
+
+
+ /**
+ * Returns the current archive date.
+ *
+ * @return Date
+ **/
public function getArchiveDate() {
$year = $this->getArchiveYear();
$month = $this->getArchiveMonth();
+ $day = $this->getArchiveDay();
if($year) {
if($month) {
- $startDate = $year . '-' . $month . '-01 00:00:00';
+ $date = $year . '-' . $month . '-01';
+ if($day) {
+ $date = $year . '-' . $month . '-' . $day;
+ }
} else {
- $startDate = $year . '-01-01 00:00:00';
+ $date = $year . '-01-01';
}
- $date = new Date("ArchiveDate");
- $date->setValue($startDate);
- return $date;
+ return DBField::create_field("Date", $date);
}
}
+
+
+ /**
+ * Returns a link to the RSS feed.
+ *
+ * @return string URL
+ **/
+ public function getRSSLink() {
+ return $this->Link("rss");
+ }
+
}
\ No newline at end of file
diff --git a/model/BlogCategory.php b/model/BlogCategory.php
index 279254b..dbb843f 100755
--- a/model/BlogCategory.php
+++ b/model/BlogCategory.php
@@ -30,7 +30,7 @@ class BlogCategory extends DataObject {
public function getCMSFields() {
$fields = new FieldList(
- TextField::create("Title", _t("BlogTag.FieldLabels.TITLE", "Title"))
+ TextField::create("Title", _t("BlogCategory.Title", "Title"))
);
$this->extend("updateCMSFields", $fields);
return $fields;
diff --git a/page/BlogPost.php b/model/BlogPost.php
similarity index 74%
rename from page/BlogPost.php
rename to model/BlogPost.php
index aa67c9f..3fb71ff 100755
--- a/page/BlogPost.php
+++ b/model/BlogPost.php
@@ -27,51 +27,36 @@ class BlogPost extends Page {
);
private static $defaults = array(
- "ShowInMenus" => 0,
+ "ShowInMenus" => false,
+ "InheritSideBar" => true, // Support for widgets
+ "ProvideComments" => true, // Support for comments
);
-
- /**
- * @var array
- **/
private static $allowed_children = array();
-
-
- /**
- * Set the default sort to publish date
- *
- * @var string
- **/
- private static $default_sort = "PublishDate DESC";
-
-
-
- /**
- * Add blog post filter to BlogPost
- *
- * @var array
- **/
private static $extensions = array(
"BlogPostFilter",
);
+ private static $searchable_fields = array(
+ "Title"
+ );
+ private static $summary_fields = array(
+ "Title",
+ );
+
+ private static $default_sort = "PublishDate DESC";
- /**
- * @var boolean
- **/
public static $can_be_root = false;
-
-
/**
* This will display or hide the current class from the SiteTree. This
* variable can be configured using YAML.
*
* @var boolean
**/
- private static $show_in_site_tree = false;
+ private static $show_in_sitetree = false;
@@ -80,25 +65,25 @@ class BlogPost extends Page {
// Add Publish date fields
$fields->insertAfter(
- $publishDate = DatetimeField::create("PublishDate", _t("BlogPost.FieldLabels.PUBLISHDATE", "Publish Date")),
+ $publishDate = DatetimeField::create("PublishDate", _t("BlogPost.PublishDate", "Publish Date")),
"Content"
);
$publishDate->getDateField()->setConfig("showcalendar", true);
// Add Categories & Tags fields
$categories = $this->Parent()->Categories()->map()->toArray();
- $categoriesField = ListboxField::create("Categories", _t("BlogPost.FieldLabels.CATEGORIES", "Categories"), $categories)
+ $categoriesField = ListboxField::create("Categories", _t("BlogPost.Categories", "Categories"), $categories)
->setMultiple(true);
$fields->insertAfter($categoriesField, "PublishDate");
$tags = $this->Parent()->Tags()->map()->toArray();
- $tagsField = ListboxField::create("Tags", _t("BlogPost.FieldLabels.TAGS", "Tags"), $tags)
+ $tagsField = ListboxField::create("Tags", _t("BlogPost.Tags", "Tags"), $tags)
->setMultiple(true);
$fields->insertAfter($tagsField, "Categories");
// Add featured image
$fields->insertBefore(
- $uploadField = UploadField::create("FeaturedImage", _t("BlogPost.FieldLabels.FEATUREDIMAGE", "Featured Image")),
+ $uploadField = UploadField::create("FeaturedImage", _t("BlogPost.FeaturedImage", "Featured Image")),
"Content"
);
$uploadField->getValidator()->setAllowedExtensions(array('jpg', 'jpeg', 'png', 'gif'));
@@ -155,11 +140,20 @@ class BlogPost extends Page {
/**
* Returns a monthly archive link for the current blog post.
*
+ * @param $type string day|month|year
+ *
* @return string URL
**/
- public function getMonthlyArchiveLink() {
+ public function getMonthlyArchiveLink($type = "day") {
$date = $this->dbObject("PublishDate");
- return Controller::join_links($this->Parent()->Link("archive"), $date->format("Y"), $date->format("m"));
+ $year = $date->format("Y");
+ if($type != "year") {
+ if($type == "day") {
+ return Controller::join_links($this->Parent()->Link("archive"), $date->format("Y"), $date->format("m"), $date->format("d"));
+ }
+ return Controller::join_links($this->Parent()->Link("archive"), $date->format("Y"), $date->format("m"));
+ }
+ return Controller::join_links($this->Parent()->Link("archive"), $date->format("Y"));
}
diff --git a/model/BlogTag.php b/model/BlogTag.php
index 9eec41d..cd97706 100755
--- a/model/BlogTag.php
+++ b/model/BlogTag.php
@@ -28,7 +28,7 @@ class BlogTag extends DataObject {
public function getCMSFields() {
$fields = new FieldList(
- TextField::create("Title", _t("BlogTag.FieldLabels.TITLE", "Title"))
+ TextField::create("Title", _t("BlogTag.Title", "Title"))
);
$this->extend("updateCMSFields", $fields);
return $fields;
diff --git a/scss/cms.scss b/scss/cms.scss
new file mode 100755
index 0000000..4e45c5f
--- /dev/null
+++ b/scss/cms.scss
@@ -0,0 +1,45 @@
+/**
+ * CMS Styles
+**/
+
+/**
+ * Include Compass framework */
+@import "compass";
+
+/*
+ * Sprite maps & Icons */
+@import "compass/utilities/sprites/base";
+@import "blog-icon/*.png";
+
+.blog-icon {
+ @include all-blog-icon-sprites;
+}
+
+.cms {
+
+ .ss-gridfield {
+ .gridfield-dropdown {
+ margin: 3px 8px 0 0;
+ border-bottom: none;
+
+ .chzn-container,
+ .dropdown {
+ min-width: 195px;
+ }
+ }
+ }
+
+ table.ss-gridfield-table {
+ tr {
+ td {
+ .blog-icon {
+ width: 16px;
+ height: 16px;
+ display: block;
+ float: left;
+ margin-right: 6px;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/templates/widgets/BlogArchiveWidget.ss b/templates/widgets/BlogArchiveWidget.ss
index a5162c6..5a30f2b 100755
--- a/templates/widgets/BlogArchiveWidget.ss
+++ b/templates/widgets/BlogArchiveWidget.ss
@@ -1,9 +1,7 @@
<% if Archive %>
-
\ No newline at end of file
+<% end_if %>
\ No newline at end of file
diff --git a/templates/widgets/BlogCategoriesWidget.ss b/templates/widgets/BlogCategoriesWidget.ss
index 298c683..395a87c 100755
--- a/templates/widgets/BlogCategoriesWidget.ss
+++ b/templates/widgets/BlogCategoriesWidget.ss
@@ -1,7 +1,7 @@
-
\ No newline at end of file
+<% end_if %>
\ No newline at end of file
diff --git a/templates/widgets/BlogRecentPostsWidget.ss b/templates/widgets/BlogRecentPostsWidget.ss
index c3bd5e2..c1905e4 100755
--- a/templates/widgets/BlogRecentPostsWidget.ss
+++ b/templates/widgets/BlogRecentPostsWidget.ss
@@ -1,7 +1,7 @@
-
\ No newline at end of file
+<% end_if %>
\ No newline at end of file
diff --git a/templates/widgets/BlogTagsWidget.ss b/templates/widgets/BlogTagsWidget.ss
index c83796c..faa10a0 100755
--- a/templates/widgets/BlogTagsWidget.ss
+++ b/templates/widgets/BlogTagsWidget.ss
@@ -1,7 +1,7 @@
-
\ No newline at end of file
+<% end_if %>
\ No newline at end of file
diff --git a/widgets/BlogArchiveWidget.php b/widgets/BlogArchiveWidget.php
index ad8181d..1598899 100755
--- a/widgets/BlogArchiveWidget.php
+++ b/widgets/BlogArchiveWidget.php
@@ -26,12 +26,12 @@ class BlogArchiveWidget extends Widget {
$type = $this->dbObject("Type")->enumValues();
foreach($type as $k => $v) {
- $type[$k] = _t("BlogArchiveWidget." . strtoupper($v), $v);
+ $type[$k] = _t("BlogArchiveWidget." . ucfirst(strtolower($v)), $v);
}
- $fields->push(DropdownField::create("BlogID", _t("BlogArchiveWidget.FieldLabels.BLOG", "Blog"), Blog::get()->map()));
- $fields->push(DropdownField::create("Type", _t("BlogArchiveWidget.FieldLabels.TYPE", "Type"), $type));
- $fields->push(NumericField::create("NumberToDisplay", _t("BlogArchiveWidget.LabelFields.NUMBERTODISPLAY", "No. to Display")));
+ $fields->push(DropdownField::create("BlogID", _t("BlogArchiveWidget.Blog", "Blog"), Blog::get()->map()));
+ $fields->push(DropdownField::create("Type", _t("BlogArchiveWidget.Type", "Type"), $type));
+ $fields->push(NumericField::create("NumberToDisplay", _t("BlogArchiveWidget.NumberToDisplay", "No. to Display")));
return $fields;
}
diff --git a/widgets/BlogCategoriesWIdget.php b/widgets/BlogCategoriesWIdget.php
index aba9710..cf26726 100755
--- a/widgets/BlogCategoriesWIdget.php
+++ b/widgets/BlogCategoriesWIdget.php
@@ -16,7 +16,7 @@ class BlogCategoriesWidget extends Widget {
public function getCMSFields() {
$fields = parent::getCMSFields();
- $fields->push(DropdownField::create("BlogID", _t("BlogCategoriesWidget.FieldLabels.BLOG", "Blog"), Blog::get()->map()));
+ $fields->push(DropdownField::create("BlogID", _t("BlogCategoriesWidget.Blog", "Blog"), Blog::get()->map()));
return $fields;
}
diff --git a/widgets/BlogRecentPostsWidget.php b/widgets/BlogRecentPostsWidget.php
index 9b05a81..cda733e 100755
--- a/widgets/BlogRecentPostsWidget.php
+++ b/widgets/BlogRecentPostsWidget.php
@@ -18,8 +18,8 @@ class BlogRecentPostsWidget extends Widget {
public function getCMSFields() {
$fields = parent::getCMSFields();
- $fields->push(DropdownField::create("BlogID", _t("BlogCategoriesWidget.FieldLabels.BLOG", "Blog"), Blog::get()->map()));
- $fields->push(NumericField::create("NumberOfPosts", _t("BlogRecentPostsWidget.FieldLabels.NUMBEROFPOSTS", "Number of Posts")));
+ $fields->push(DropdownField::create("BlogID", _t("BlogRecentPostsWidget.Blog", "Blog"), Blog::get()->map()));
+ $fields->push(NumericField::create("NumberOfPosts", _t("BlogRecentPostsWidget.NumberOfPosts", "Number of Posts")));
return $fields;
}
diff --git a/widgets/BlogTagsWidget.php b/widgets/BlogTagsWidget.php
index dc0fef2..a3f4251 100755
--- a/widgets/BlogTagsWidget.php
+++ b/widgets/BlogTagsWidget.php
@@ -16,7 +16,7 @@ class BlogTagsWidget extends Widget {
public function getCMSFields() {
$fields = parent::getCMSFields();
- $fields->push(DropdownField::create("BlogID", _t("BlogCategoriesWidget.FieldLabels.BLOG", "Blog"), Blog::get()->map()));
+ $fields->push(DropdownField::create("BlogID", _t("BlogTagsWidget.Blog", "Blog"), Blog::get()->map()));
return $fields;
}