{{ page.title | markdownify | remove: "
" | remove: "
" }}{% endif %} + {% if page.read_time %} + + {% endif %} +diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..ebe01992 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +_assets/css/vendor/* linguist-vendored +_assets/js/plugins/* linguist-vendored +_assets/js/vendor/* linguist-vendored +assets/fonts/* linguist-vendored +assets/js/vendor/* linguist-vendored \ No newline at end of file diff --git a/.gitignore b/.gitignore index b52456d7..21206165 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,10 @@ -_site/* -_theme_packages/* - -Thumbs.db +*.sublime-project +*.sublime-workspace .DS_Store - -!.gitkeep - -.rbenv-version -.rvmrc - -*~ +.jekyll-metadata +.sass-cache +_asset_bundler_cache +_site +codekit-config.json +node_modules +npm-debug.log* \ No newline at end of file diff --git a/404.html b/404.html deleted file mode 100644 index c1a0ad43..00000000 --- a/404.html +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: master -title: 404公益--帮助别人、帮助自己 ---- -
{{text | replace:"|.", "{" | replace:".|", "}" | replace:">", ">" | replace:"<", "<" }}
-{% endif %}
-{% assign text = nil %}
\ No newline at end of file
diff --git a/_includes/JB/pages_list b/_includes/JB/pages_list
deleted file mode 100644
index 42f827a8..00000000
--- a/_includes/JB/pages_list
+++ /dev/null
@@ -1,39 +0,0 @@
-{% comment %}{% endcomment %}
-
-{% if site.JB.pages_list.provider == "custom" %}
- {% include custom/pages_list %}
-{% else %}
- {% for node in pages_list %}
- {% if node.title != null %}
- {% if group == null or group == node.group %}
- {% if page.url == node.url %}
- {{ f.btn_label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}
+ {% endif %} ++ {{ site.data.ui-text[site.locale].tags_label | default: "Tags:" }} + + {% for hash in tag_hashes %} + {% assign keyValue = hash | split: '#' %} + {% capture tag_word %}{{ keyValue[1] | strip_newlines }}{% endcapture %} + {{ tag_word }}{% unless forloop.last %}, {% endunless %} + {% endfor %} + +
+{% endif %} \ No newline at end of file diff --git a/_includes/toc b/_includes/toc new file mode 100644 index 00000000..6ba831c9 --- /dev/null +++ b/_includes/toc @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/_layouts/archive-taxonomy.html b/_layouts/archive-taxonomy.html new file mode 100644 index 00000000..4d5827f1 --- /dev/null +++ b/_layouts/archive-taxonomy.html @@ -0,0 +1,16 @@ +--- +layout: default +author_profile: false +--- + +" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "" %}
{% endif %}{% unless _pre_before contains "" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = "
Step | Bytes |
raw | {{ content | size }}{% if _profile_endings %} |
endings | {{ _profile_endings }}{% endif %}{% if _profile_startings %} |
startings | {{ _profile_startings }}{% endif %}{% if _profile_comments %} |
comments | {{ _profile_comments }}{% endif %}{% if _profile_collapse %} |
collapse | {{ _profile_collapse }}{% endif %}{% if _profile_clippings %} |
clippings | {{ _profile_clippings }}{% endif %} |
" | remove: "
" }}{% endif %} + {% if page.read_time %} + + {% endif %} +优秀的开源流程引擎(BPM平台) |
工作流在每一个需要流程处理的系统中不可或缺,符合BPMN2.0规范且开源的流程引擎(或平台)才是每个公司需要的,结合长期以来(从jBPM4停止更新)开源流程引擎的使用上可以分为Activiti和jBPM5,前者是jBPM作者Tom的又一力作,而jBMP5则是基于Drools Flow的产物。从设计思想、源码开放、技术支持以及社区的活跃度几点对比很明显Activiti优于jBPM5,另外本书中强调过很多次的一句话:“Activiti不仅仅是一个引擎,它还是一个流程平台”;Activiti可以轻松驱动你的业务流程、搭建统一的流程平台。
@@ -28,7 +28,7 @@ 国内Activiti领域第一人(最权威专家和布道师)撰写,Activiti项目负责人Tijs Rademakers高度认可并推荐;根据Activiti最新版本系统、深度讲解了BPM2.0规范,以及Activiti功能、用法、技巧、最佳实践和源代码分析。` tag.
+
+### Preformatted Tag
+
+This tag styles large blocks of code.
+
+
+.post-title {
+ margin: 0 0 5px;
+ font-weight: bold;
+ font-size: 38px;
+ line-height: 1.2;
+ and here's a line of some really, really, really, really long text, just to see how the PRE tag handles it and to find out how it overflows;
+}
+
+
+### Quote Tag
+
+Developers, developers, developers…
–Steve Ballmer
+
+### Strong Tag
+
+This tag shows **bold text**.
+
+### Subscript Tag
+
+Getting our science styling on with H2O, which should push the "2" down.
+
+### Superscript Tag
+
+Still sticking with science and Isaac Newton's E = MC2, which should lift the 2 up.
+
+### Variable Tag
+
+This allows you to denote variables.
+
+{% include base_path %}
+{% for post in site.pages %}
+{% include archive-single.html %}
+{% endfor %}
\ No newline at end of file
diff --git a/_pages/blog.html b/_pages/blog.html
new file mode 100644
index 00000000..be6cfd0e
--- /dev/null
+++ b/_pages/blog.html
@@ -0,0 +1,17 @@
+---
+layout: archive
+permalink: /blog.html
+title: "Posts by Year"
+author_profile: true
+---
+
+{% include base_path %}
+{% capture written_year %}'None'{% endcapture %}
+{% for post in site.posts %}
+ {% capture year %}{{ post.date | date: '%Y' }}{% endcapture %}
+ {% if year != written_year %}
+ {{ year }}
+ {% capture written_year %}{{ year }}{% endcapture %}
+ {% endif %}
+ {% include archive-single.html %}
+{% endfor %}
\ No newline at end of file
diff --git a/_pages/category-archive.html b/_pages/category-archive.html
new file mode 100644
index 00000000..3ed3378f
--- /dev/null
+++ b/_pages/category-archive.html
@@ -0,0 +1,17 @@
+---
+layout: archive
+permalink: /categories/
+title: "Posts by Category"
+author_profile: true
+---
+
+{% include base_path %}
+{% include group-by-array collection=site.posts field="categories" %}
+
+{% for category in group_names %}
+ {% assign posts = group_items[forloop.index0] %}
+ {{ category }}
+ {% for post in posts %}
+ {% include archive-single.html %}
+ {% endfor %}
+{% endfor %}
\ No newline at end of file
diff --git a/_pages/collection-archive.html b/_pages/collection-archive.html
new file mode 100644
index 00000000..344c51ea
--- /dev/null
+++ b/_pages/collection-archive.html
@@ -0,0 +1,24 @@
+---
+layout: archive
+title: "Posts by Collection"
+permalink: /collection-archive/
+author_profile: true
+---
+
+{% include base_path %}
+{% capture written_label %}'None'{% endcapture %}
+
+{% for collection in site.collections %}
+ {% unless collection.output == false or collection.label == "posts" %}
+ {% capture label %}{{ collection.label }}{% endcapture %}
+ {% if label != written_label %}
+ {{ label }}
+ {% capture written_label %}{{ label }}{% endcapture %}
+ {% endif %}
+ {% endunless %}
+ {% for post in collection.docs %}
+ {% unless collection.output == false or collection.label == "posts" %}
+ {% include archive-single.html %}
+ {% endunless %}
+ {% endfor %}
+{% endfor %}
\ No newline at end of file
diff --git a/_pages/home.md b/_pages/home.md
new file mode 100644
index 00000000..67565331
--- /dev/null
+++ b/_pages/home.md
@@ -0,0 +1,36 @@
+---
+layout: splash
+permalink: /
+header:
+ overlay_color: "#5e616c"
+ overlay_image: unsplash-image-3.jpg
+ caption:
+excerpt: '深入研究,覆盖领域:Serverless/FaaS、Kubernetes、Docker,BPM Platform Activiti.
《Activiti实战》配套源码
{::nomarkdown} {:/nomarkdown}'
+feature_row:
+ - image_path: mm-customizable-feature.png
+ alt: "customizable"
+ title: "Serverless"
+ excerpt: "下一次革命即将来袭,把握未来!"
+ url: "/category/serverless"
+ btn_label: "Learn More"
+ - image_path: mm-responsive-feature.png
+ alt: "fully responsive"
+ title: "K8s + Docker"
+ excerpt: "Kubernetes + Docker"
+ url: "/category/kubernetes"
+ btn_label: "Learn More"
+ - image_path: activiti-in-action-small.jpg
+ alt: "《Activiti实战》"
+ title: "《Activiti实战》"
+ excerpt: "全面介绍BPM平台 - Activiti,咖啡兔著"
+ url: "/activiti-in-action.html"
+ btn_label: "Learn More"
+github:
+ - excerpt: '{::nomarkdown} {:/nomarkdown}'
+intro:
+ - excerpt: while (true) { share() }
+---
+
+{% include feature_row id="intro" type="center" %}
+
+{% include feature_row %}
diff --git a/_pages/lorem-ipsum.md b/_pages/lorem-ipsum.md
new file mode 100644
index 00000000..13be88ae
--- /dev/null
+++ b/_pages/lorem-ipsum.md
@@ -0,0 +1,52 @@
+---
+title: "Lorem Ipsum"
+permalink: /lorem-ipsum/
+---
+
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec mollis. Quisque convallis libero in sapien pharetra tincidunt. Aliquam elit ante, malesuada id, tempor eu, gravida id, odio. Maecenas suscipit, risus et eleifend imperdiet, nisi orci ullamcorper massa, et adipiscing orci velit quis magna. Praesent sit amet ligula id orci venenatis auctor. Phasellus porttitor, metus non tincidunt dapibus, orci pede pretium neque, sit amet adipiscing ipsum lectus et libero. Aenean bibendum. Curabitur mattis quam id urna. Vivamus dui. Donec nonummy lacinia lorem. Cras risus arcu, sodales ac, ultrices ac, mollis quis, justo. Sed a libero. Quisque risus erat, posuere at, tristique non, lacinia quis, eros.
+
+Cras volutpat, lacus quis semper pharetra, nisi enim dignissim est, et sollicitudin quam ipsum vel mi. Sed commodo urna ac urna. Nullam eu tortor. Curabitur sodales scelerisque magna. Donec ultricies tristique pede. Nullam libero. Nam sollicitudin felis vel metus. Nullam posuere molestie metus. Nullam molestie, nunc id suscipit rhoncus, felis mi vulputate lacus, a ultrices tortor dolor eget augue. Aenean ultricies felis ut turpis. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse placerat tellus ac nulla. Proin adipiscing sem ac risus. Maecenas nisi. Cras semper.
+
+Praesent interdum mollis neque. In egestas nulla eget pede. Integer eu purus sed diam dictum scelerisque. Morbi cursus velit et felis. Maecenas faucibus aliquet erat. In aliquet rhoncus tellus. Integer auctor nibh a nunc fringilla tempus. Cras turpis urna, dignissim vel, suscipit pulvinar, rutrum quis, sem. Ut lobortis convallis dui. Sed nonummy orci a justo. Morbi nec diam eget eros eleifend tincidunt.
+
+Curabitur non elit. Pellentesque iaculis, nisl non aliquet adipiscing, purus urna aliquet orci, sed sodales pede neque at massa. Pellentesque laoreet, enim eget varius mollis, sapien erat suscipit metus, sit amet iaculis nulla sapien id felis. Aliquam erat volutpat. Nam congue nulla a ligula. Morbi tempor hendrerit erat. Curabitur augue. Vestibulum nulla est, commodo et, fringilla quis, bibendum eget, ipsum. Suspendisse pulvinar iaculis ante. Mauris dignissim ante quis nisi. Aliquam ante mi, aliquam et, pellentesque ac, dapibus et, enim. In vulputate justo vel magna. Phasellus imperdiet justo. Proin odio orci, dapibus id, porta a, pellentesque id, erat. Aliquam erat volutpat. Mauris nonummy varius libero. Sed dolor ipsum, tempor non, aliquet et, pulvinar quis, dui. Pellentesque mauris diam, lobortis id, varius varius, facilisis at, nulla.
+
+Cras pede. Nullam id velit sit amet turpis tincidunt sagittis. Nunc malesuada. Nunc consequat scelerisque odio. Donec eu leo. Nunc pellentesque felis sed odio. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus lobortis metus in lectus. Cras mollis quam eget sapien. Pellentesque non lorem sit amet sem lacinia euismod.
+
+Nulla eget diam eget leo imperdiet consequat. Morbi nunc magna, pellentesque eu, porta at, ultricies ut, neque. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In tincidunt. Praesent ut orci id eros congue ultrices. Mauris non neque. Donec nulla ante, molestie sit amet, fermentum nec, blandit sit amet, purus. Fusce eget diam eu odio iaculis mollis. Phasellus consectetuer pede quis nisi. Proin non sem ut elit pulvinar faucibus. In a turpis nec augue fringilla elementum.
+
+Nullam felis. Donec in nulla. Suspendisse sodales, turpis in suscipit ullamcorper, enim nunc sagittis risus, eu auctor velit tortor ut turpis. Mauris id augue at neque aliquam eleifend. Sed eget augue. Nunc faucibus ligula sed massa. Etiam non nulla. Etiam accumsan ullamcorper nisl. In pharetra massa at nunc. Nunc elementum. Duis sodales enim nec libero. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Praesent dapibus eros sodales urna. Duis magna nisi, lobortis quis, tincidunt rutrum, posuere non, ipsum.
+
+Aliquam convallis neque vitae diam. In diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis fermentum arcu in tortor. Sed nibh leo, rhoncus eu, fermentum et, scelerisque ac, massa. Cras id turpis. Etiam commodo sem luctus lorem. Morbi at mi. In rutrum. Aenean luctus pede euismod tortor. Phasellus dictum. Cras neque justo, venenatis sit amet, tristique et, vulputate in, dui. Etiam sed mi gravida sapien imperdiet dictum. Aliquam gravida orci a tortor. Donec tempor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus risus ante, pellentesque vitae, luctus eget, scelerisque sed, libero. Donec massa.
+
+Donec libero mauris, volutpat at, convallis vel, laoreet euismod, augue. In accumsan malesuada risus. Mauris metus magna, condimentum in, nonummy non, ornare eu, velit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin posuere. Proin rhoncus rutrum lorem. Phasellus dignissim massa non libero volutpat tincidunt. In hac habitasse platea dictumst. Phasellus eget eros. Nulla in nulla. Vivamus quis mauris. Maecenas pharetra rhoncus tellus. Sed sit amet lacus.
+
+Quisque interdum felis a tellus. Aliquam sed diam ac velit aliquam rutrum. Morbi commodo, risus a pulvinar adipiscing, tortor pede posuere risus, ac ornare tellus massa nec lectus. Vivamus mollis metus ac sapien. Nam sed est a libero ullamcorper dapibus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aenean a erat ac nibh accumsan volutpat. Phasellus pulvinar consequat turpis. Curabitur ante metus, tempus ut, consequat eu, sollicitudin sit amet, justo. Duis ut libero.
+
+Հայերեն
+
+Lorem Ipsum-ը տպագրության և տպագրական արդյունաբերության համար նախատեսված մոդելային տեքստ է: Սկսած 1500-ականներից\` Lorem Ipsum-ը հանդիսացել է տպագրական արդյունաբերության ստանդարտ մոդելային տեքստ, ինչը մի անհայտ տպագրիչի կողմից տարբեր տառատեսակների օրինակների գիրք ստեղծելու ջանքերի արդյունք է: Այս տեքստը ոչ միայն կարողացել է գոյատևել հինգ դարաշրջան, այլև ներառվել է էլեկտրոնային տպագրության մեջ\` մնալով էապես անփոփոխ: Այն հայտնի է դարձել 1960-ականներին Lorem Ipsum բովանդակող Letraset էջերի թողարկման արդյունքում, իսկ ավելի ուշ համակարգչային տպագրության այնպիսի ծրագրերի թողարկման հետևանքով, ինչպիսին է Aldus PageMaker-ը, որը ներառում է Lorem Ipsum-ի տարատեսակներ:
+
+Български
+
+Lorem Ipsum е елементарен примерен текст, използван в печатарската и типографската индустрия. Lorem Ipsum е индустриален стандарт от около 1500 година, когато неизвестен печатар взема няколко печатарски букви и ги разбърква, за да напечата с тях книга с примерни шрифтове. Този начин не само е оцелял повече от 5 века, но е навлязъл и в публикуването на електронни издания като е запазен почти без промяна. Популяризиран е през 60те години на 20ти век със издаването на Letraset листи, съдържащи Lorem Ipsum пасажи, популярен е и в наши дни във софтуер за печатни издания като Aldus PageMaker, който включва различни версии на Lorem Ipsum.
+
+Català
+
+Lorem Ipsum és un text de farciment usat per la indústria de la tipografia i la impremta. Lorem Ipsum ha estat el text estàndard de la indústria des de l’any 1500, quan un impressor desconegut va fer servir una galerada de text i la va mesclar per crear un llibre de mostres tipogràfiques. No només ha sobreviscut cinc segles, sinó que ha fet el salt cap a la creació de tipus de lletra electrònics, romanent essencialment sense canvis. Es va popularitzar l’any 1960 amb el llançament de fulls Letraset que contenien passatges de Lorem Ipsum, i més recentment amb programari d’autoedició com Aldus Pagemaker que inclou versions de Lorem Ipsum.
+
+Hrvatski
+
+Lorem Ipsum je jednostavno probni tekst koji se koristi u tiskarskoj i slovoslagarskoj industriji. Lorem Ipsum postoji kao industrijski standard još od 16-og stoljeća, kada je nepoznati tiskar uzeo tiskarsku galiju slova i posložio ih da bi napravio knjigu s uzorkom tiska. Taj je tekst ne samo preživio pet stoljeća, već se i vinuo u svijet elektronskog slovoslagarstva, ostajući u suštini nepromijenjen. Postao je popularan tijekom 1960-ih s pojavom Letraset listova s odlomcima Lorem Ipsum-a, a u skorije vrijeme sa software-om za stolno izdavaštvo kao što je Aldus PageMaker koji također sadrži varijante Lorem Ipsum-a.
+
+Česky
+
+Lorem Ipsum je demonstrativní výplňový text používaný v tiskařském a knihařském průmyslu. Lorem Ipsum je považováno za standard v této oblasti už od začátku 16. století, kdy dnes neznámý tiskař vzal kusy textu a na jejich základě vytvořil speciální vzorovou knihu. Jeho odkaz nevydržel pouze pět století, on přežil i nástup elektronické sazby v podstatě beze změny. Nejvíce popularizováno bylo Lorem Ipsum v šedesátých letech 20. století, kdy byly vydávány speciální vzorníky s jeho pasážemi a později pak díky počítačovým DTP programům jako Aldus PageMaker.
+
+Româna
+
+Lorem Ipsum este pur şi simplu o machetă pentru text a industriei tipografice. Lorem Ipsum a fost macheta standard a industriei încă din secolul al XVI-lea, când un tipograf anonim a luat o planşetă de litere şi le-a amestecat pentru a crea o carte demonstrativă pentru literele respective. Nu doar că a supravieţuit timp de cinci secole, dar şi a facut saltul în tipografia electronică practic neschimbată. A fost popularizată în anii ’60 odată cu ieşirea colilor Letraset care conţineau pasaje Lorem Ipsum, iar mai recent, prin programele de publicare pentru calculator, ca Aldus PageMaker care includeau versiuni de Lorem Ipsum.
+
+Српски
+
+Lorem Ipsum је једноставно модел текста који се користи у штампарској и словослагачкој индустрији. Lorem ipsum је био стандард за модел текста још од 1500. године, када је непознати штампар узео кутију са словима и сложио их како би направио узорак књиге. Не само што је овај модел опстао пет векова, него је чак почео да се користи и у електронским медијима, непроменивши се. Популаризован је шездесетих година двадесетог века заједно са листовима летерсета који су садржали Lorem Ipsum пасусе, а данас са софтверским пакетом за прелом као што је Aldus PageMaker који је садржао Lorem Ipsum верзије.
\ No newline at end of file
diff --git a/_pages/page-a.md b/_pages/page-a.md
new file mode 100644
index 00000000..3083db24
--- /dev/null
+++ b/_pages/page-a.md
@@ -0,0 +1,7 @@
+---
+title: "Page A"
+permalink: /page-a/
+date: 2011-06-23T18:38:52+00:00
+---
+
+Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.
\ No newline at end of file
diff --git a/_pages/page-archive.html b/_pages/page-archive.html
new file mode 100644
index 00000000..c1c5d7ca
--- /dev/null
+++ b/_pages/page-archive.html
@@ -0,0 +1,11 @@
+---
+layout: archive
+title: "Page Archive"
+permalink: /page-archive/
+author_profile: false
+---
+
+{% include base_path %}
+{% for post in site.pages %}
+ {% include archive-single.html %}
+{% endfor %}
\ No newline at end of file
diff --git a/_pages/page-b.md b/_pages/page-b.md
new file mode 100644
index 00000000..d15ce122
--- /dev/null
+++ b/_pages/page-b.md
@@ -0,0 +1,7 @@
+---
+title: "Page B"
+permalink: /page-b/
+date: 2011-06-23T18:39:14+00:00
+---
+
+(lorem ipsum)
\ No newline at end of file
diff --git a/_pages/portfolio-archive.html b/_pages/portfolio-archive.html
new file mode 100644
index 00000000..4aafb84a
--- /dev/null
+++ b/_pages/portfolio-archive.html
@@ -0,0 +1,14 @@
+---
+layout: archive
+title: "Portfolio"
+permalink: /portfolio/
+author_profile: false
+---
+
+{% include base_path %}
+
+
+ {% for post in site.portfolio %}
+ {% include archive-single.html type="grid" %}
+ {% endfor %}
+
\ No newline at end of file
diff --git a/_pages/recipes-archive.html b/_pages/recipes-archive.html
new file mode 100644
index 00000000..27c6a584
--- /dev/null
+++ b/_pages/recipes-archive.html
@@ -0,0 +1,12 @@
+---
+layout: archive
+title: "Recipes"
+permalink: /recipes/
+author_profile: false
+---
+
+{% include base_path %}
+
+{% for post in site.recipes %}
+ {% include archive-single.html %}
+{% endfor %}
\ No newline at end of file
diff --git a/_pages/sample-page.md b/_pages/sample-page.md
new file mode 100644
index 00000000..060e53b8
--- /dev/null
+++ b/_pages/sample-page.md
@@ -0,0 +1,15 @@
+---
+title: "Sample Page"
+permalink: /sample-page/
+date: 2016-02-24T03:02:20+00:00
+---
+
+This is an example page. It's different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this:
+
+> Hi there! I'm a bike messenger by day, aspiring actor by night, and this is my website. I live in Los Angeles, have a great dog named Jack, and I like pi'a coladas. (And gettin' caught in the rain.)
+
+...or something like this:
+
+> The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.
+
+You should probably delete this page and create new pages for your content. Have fun!
\ No newline at end of file
diff --git a/_pages/sitemap.md b/_pages/sitemap.md
new file mode 100644
index 00000000..9fd359dc
--- /dev/null
+++ b/_pages/sitemap.md
@@ -0,0 +1,37 @@
+---
+layout: archive
+title: "Sitemap"
+permalink: /sitemap/
+author_profile: false
+---
+
+{% include base_path %}
+
+A list of all the posts and pages found on the site. For you robots out there is an [XML version]({{ base_path }}/sitemap.xml) available for digesting as well.
+
+Pages
+{% for post in site.pages %}
+ {% include archive-single.html %}
+{% endfor %}
+
+Posts
+{% for post in site.posts %}
+ {% include archive-single.html %}
+{% endfor %}
+
+{% capture written_label %}'None'{% endcapture %}
+
+{% for collection in site.collections %}
+{% unless collection.output == false or collection.label == "posts" %}
+ {% capture label %}{{ collection.label }}{% endcapture %}
+ {% if label != written_label %}
+ {{ label }}
+ {% capture written_label %}{{ label }}{% endcapture %}
+ {% endif %}
+{% endunless %}
+{% for post in collection.docs %}
+ {% unless collection.output == false or collection.label == "posts" %}
+ {% include archive-single.html %}
+ {% endunless %}
+{% endfor %}
+{% endfor %}
\ No newline at end of file
diff --git a/_pages/splash-page.md b/_pages/splash-page.md
new file mode 100644
index 00000000..2ca5efb1
--- /dev/null
+++ b/_pages/splash-page.md
@@ -0,0 +1,65 @@
+---
+title: "Splash Page"
+layout: splash
+permalink: /splash-page/
+date: 2016-03-23T11:48:41-04:00
+header:
+ overlay_color: "#000"
+ overlay_filter: "0.5"
+ overlay_image: unsplash-image-1.jpg
+ cta_label: "Download"
+ cta_url: "https://github.com/mmistakes/minimal-mistakes/"
+ caption: "Photo credit: [**Unsplash**](https://unsplash.com)"
+excerpt: "Bacon ipsum dolor sit amet salami ham hock ham, hamburger corned beef short ribs kielbasa biltong t-bone drumstick tri-tip tail sirloin pork chop."
+intro:
+ - excerpt: 'Nullam suscipit et nam, tellus velit pellentesque at malesuada, enim eaque. Quis nulla, netus tempor in diam gravida tincidunt, *proin faucibus* voluptate felis id sollicitudin. Centered with `type="center"`'
+feature_row:
+ - image_path: unsplash-gallery-image-1-th.jpg
+ alt: "placeholder image 1"
+ title: "Placeholder 1"
+ excerpt: "This is some sample content that goes here with **Markdown** formatting."
+ - image_path: unsplash-gallery-image-2-th.jpg
+ alt: "placeholder image 2"
+ title: "Placeholder 2"
+ excerpt: "This is some sample content that goes here with **Markdown** formatting."
+ url: "#test-link"
+ btn_label: "Read More"
+ btn_class: "btn--inverse"
+ - image_path: unsplash-gallery-image-3-th.jpg
+ title: "Placeholder 3"
+ excerpt: "This is some sample content that goes here with **Markdown** formatting."
+feature_row2:
+ - image_path: unsplash-gallery-image-2-th.jpg
+ alt: "placeholder image 2"
+ title: "Placeholder Image Left Aligned"
+ excerpt: 'This is some sample content that goes here with **Markdown** formatting. Left aligned with `type="left"`'
+ url: "#test-link"
+ btn_label: "Read More"
+ btn_class: "btn--inverse"
+feature_row3:
+ - image_path: unsplash-gallery-image-2-th.jpg
+ alt: "placeholder image 2"
+ title: "Placeholder Image Right Aligned"
+ excerpt: 'This is some sample content that goes here with **Markdown** formatting. Right aligned with `type="right"`'
+ url: "#test-link"
+ btn_label: "Read More"
+ btn_class: "btn--inverse"
+feature_row4:
+ - image_path: unsplash-gallery-image-2-th.jpg
+ alt: "placeholder image 2"
+ title: "Placeholder Image Center Aligned"
+ excerpt: 'This is some sample content that goes here with **Markdown** formatting. Centered with `type="center"`'
+ url: "#test-link"
+ btn_label: "Read More"
+ btn_class: "btn--inverse"
+---
+
+{% include feature_row id="intro" type="center" %}
+
+{% include feature_row %}
+
+{% include feature_row id="feature_row2" type="left" %}
+
+{% include feature_row id="feature_row3" type="right" %}
+
+{% include feature_row id="feature_row4" type="center" %}
\ No newline at end of file
diff --git a/_pages/tag-archive.html b/_pages/tag-archive.html
new file mode 100644
index 00000000..4006381d
--- /dev/null
+++ b/_pages/tag-archive.html
@@ -0,0 +1,17 @@
+---
+layout: archive
+permalink: /tags/
+title: "Posts by Tags"
+author_profile: true
+---
+
+{% include base_path %}
+{% include group-by-array collection=site.posts field="tags" %}
+
+{% for tag in group_names %}
+ {% assign posts = group_items[forloop.index0] %}
+ {{ tag }}
+ {% for post in posts %}
+ {% include archive-single.html %}
+ {% endfor %}
+{% endfor %}
\ No newline at end of file
diff --git a/_pages/terms.md b/_pages/terms.md
new file mode 100644
index 00000000..410a7422
--- /dev/null
+++ b/_pages/terms.md
@@ -0,0 +1,58 @@
+---
+permalink: /terms/
+title: "Terms and Privacy Policy"
+modified: 2016-06-06
+---
+
+{% include base_path %}
+{% include toc %}
+
+## Privacy Policy
+
+The privacy of my visitors is extremely important. This Privacy Policy outlines the types of personal information that is received and collected and how it is used.
+
+First and foremost, I will never share your email address or any other personal information to anyone without your direct consent.
+
+### Log Files
+
+Like many other websites, this site uses log files to help learn about when, from where, and how often traffic flows to this site. The information in these log files include:
+
+* Internet Protocol addresses (IP)
+* Types of browser
+* Internet Service Provider (ISP)
+* Date and time stamp
+* Referring and exit pages
+* Number of clicks
+
+All of this information is not linked to anything that is personally identifiable.
+
+### Cookies and Web Beacons
+
+When you visit this site "convenience" cookies are stored on your computer when you submit a comment to help you log in faster to [Disqus](http://disqus.com) the next time you leave a comment.
+
+Third-party advertisers may also place and read cookies on your browser and/or use web beacons to collect information. This site has no access or control over these cookies. You should review the respective privacy policies on any and all third-party ad servers for more information regarding their practices and how to opt-out.
+
+If you wish to disable cookies, you may do so through your web browser options. Instructions for doing so can be found on the specific web browsers' websites.
+
+#### Google Analytics
+
+Google Analytics is a web analytics tool I use to help understand how visitors engage with this website. It reports website trends using cookies and web beacons without identifying individual visitors. You can read [Google Analytics Privacy Policy](http://www.google.com/analytics/learn/privacy.html).
+
+#### Google Adsense
+
+Google Adsense, a third party affiliate marketing network, uses cookies to help make sure I get a commission when you buy a product after clicking on a link or ad banner that takes you to the site of one of their merchants. You can read [Google Adsense Privacy Policy](http://support.google.com/adsense/bin/answer.py?hl=en&answer=48182).
+
+## Disclosure Policy
+
+I make money on this website through affiliate programs. If you click an affiliate link or ad banner and buy the product, you help support this website because I'll get a percentage of that sale.
+
+Currently I'm an affiliate for Amazon and Google Adsense.
+
+What this means for you:
+
+* I became an affiliate to earn revenue towards the costs of running and maintaining this website. Where I have direct control over which ads are served on this website I offer only products that are directly related to the topic of this website and products that a reader/subscriber would have a genuine interest in or need of.
+* I do not and will not recommend a product just for the sake of making money.
+* I do not let the compensation I receive influence the content, topics, posts, or opinions expressed on this website.
+* I respect and value my readers too much to write anything other than my own genuine and objective opinions and advice.
+
+Just like this website, my Disclosure Policy is a work in progress. As the revenue streams evolve, so will this page.
\ No newline at end of file
diff --git a/_pages/year-archive.html b/_pages/year-archive.html
new file mode 100644
index 00000000..7198ab65
--- /dev/null
+++ b/_pages/year-archive.html
@@ -0,0 +1,17 @@
+---
+layout: archive
+permalink: /year-archive/
+title: "Posts by Year"
+author_profile: true
+---
+
+{% include base_path %}
+{% capture written_year %}'None'{% endcapture %}
+{% for post in site.posts %}
+ {% capture year %}{{ post.date | date: '%Y' }}{% endcapture %}
+ {% if year != written_year %}
+ {{ year }}
+ {% capture written_year %}{{ year }}{% endcapture %}
+ {% endif %}
+ {% include archive-single.html %}
+{% endfor %}
\ No newline at end of file
diff --git a/_pets/lhasa-apso.md b/_pets/lhasa-apso.md
new file mode 100644
index 00000000..2673b6ba
--- /dev/null
+++ b/_pets/lhasa-apso.md
@@ -0,0 +1,8 @@
+---
+title: "Lhasa Apso"
+excerpt: "The Lhasa Apso is a non-sporting dog breed originating in Tibet."
+---
+
+> The Lhasa Apso (/ˈlɑːsə ˈæpsoʊ/ lah-sə ap-soh) is a non-sporting dog breed originating in Tibet. It was bred as an interior sentinel in the Buddhist monasteries, to alert the monks to any intruders who entered. Lhasa is the capital city of Tibet, and apso is a word in the Tibetan language meaning "bearded", so, Lhasa Apso simply means "long-haired Lhasa dog". There are, however, some who claim that the word "apso" is a form of the Tibetan word "rapso", meaning "goat-like", which would make the equivalent translation "wooly Lhasa dog".
+
+> From Wikipedia, the free encyclopedia
\ No newline at end of file
diff --git a/_pets/tabby.md b/_pets/tabby.md
new file mode 100644
index 00000000..b62b6745
--- /dev/null
+++ b/_pets/tabby.md
@@ -0,0 +1,8 @@
+---
+title: "Tabby"
+excerpt: "A tabby is any domestic cat that has a coat featuring distinctive stripes, dots, lines or swirling patterns, usually with a mark resembling an 'M' on its forehead."
+---
+
+> A tabby is any domestic cat that has a coat featuring distinctive stripes, dots, lines or swirling patterns, usually together with a mark resembling an 'M' on its forehead. Tabbies are sometimes erroneously assumed to be a cat breed. In fact, the tabby pattern is found in many breeds, as well as among the general mixed-breed population. The tabby pattern is a naturally occurring feature that may be related to the coloration of the domestic cat's direct ancestor, the African wildcat, which (along with the European wildcat and Asiatic wildcat) has a similar coloration.
+
+> From Wikipedia, the free encyclopedia
\ No newline at end of file
diff --git a/_portfolio/foo-bar-website.md b/_portfolio/foo-bar-website.md
new file mode 100644
index 00000000..79d9e828
--- /dev/null
+++ b/_portfolio/foo-bar-website.md
@@ -0,0 +1,30 @@
+---
+title: "Foo Bar Identity"
+excerpt: "Foo Bar design system including logo mark, website design, and branding applications."
+header:
+ image: foo-bar-identity.jpg
+ teaser: foo-bar-identity-th.jpg
+sidebar:
+ - title: "Role"
+ image: http://placehold.it/350x250
+ image_alt: "logo"
+ text: "Designer, Front-End Developer"
+ - title: "Responsibilities"
+ text: "Reuters try PR stupid commenters should isn't a business model"
+gallery:
+ - url: unsplash-gallery-image-1.jpg
+ image_path: unsplash-gallery-image-1-th.jpg
+ alt: "placeholder image 1"
+ - url: unsplash-gallery-image-2.jpg
+ image_path: unsplash-gallery-image-2-th.jpg
+ alt: "placeholder image 2"
+ - url: unsplash-gallery-image-3.jpg
+ image_path: unsplash-gallery-image-3-th.jpg
+ alt: "placeholder image 3"
+---
+
+Pictures of Goats section West Seattle Blog dingbat newspaper rubber cement Google+ newsroom cafe news.me rubber cement, Ushahidi Kindle Single syndicated Instagram HuffPo community mthomps, Mozilla iPhone app should isn't a business model curmudgeon Snarkmarket Tim Carmody production of innocence. Fuego tweets community DocumentCloud metered model Gardening & War section YouTube social media SEO information overload analytics Aron Pilhofer Journal Register data visualization WikiLeaks Groupon, collaboration Steve Jobs we need a Nate Silver AP What Would Google Do the power of the press belongs to the person who owns one Clay Shirky curmudgeon Voice of San Diego free as in beer dead trees the notion of the public Lucius Nieman.
+
+{% include gallery caption="This is a sample gallery to go along with this case study." %}
+
+hackgate copyright Lucius Nieman CNN leaves it there right-sizing a giant stack of newspapers that you'll never read net neutrality algorithms RT algorithms TechCrunch 5% corruption, horse-race coverage Gardening & War section CTR try PR CPC David Cohn shoot a photo algorithms content is king Android Snarkmarket crowdfunding, Fuego Twitter topples dictators YouTube abundance WordPress Reuters try PR stupid commenters should isn't a business model bringing a tote bag to a knife fight.
\ No newline at end of file
diff --git a/_posts/2009-02-07-import-javascript-in-web.markdown b/_posts/2009-02-07-import-javascript-in-web.markdown
index 59c50359..ad5dd74a 100644
--- a/_posts/2009-02-07-import-javascript-in-web.markdown
+++ b/_posts/2009-02-07-import-javascript-in-web.markdown
@@ -1,10 +1,9 @@
---
-layout: post
title: "关于WEB开发中引入javascript文件方式的一点建议"
wordpress_id: 12
wordpress_url: http://wsria.com/?p=12
date: 2009-02-07 18:24:46 +08:00
-category: javascript
+categories: javascript
tags:
- jquery
- prototype
diff --git a/_posts/2009-02-07-java-23-pattern.markdown b/_posts/2009-02-07-java-23-pattern.markdown
index 02d6c63d..130ca1bc 100644
--- a/_posts/2009-02-07-java-23-pattern.markdown
+++ b/_posts/2009-02-07-java-23-pattern.markdown
@@ -1,10 +1,9 @@
---
-layout: post
title: "经典:从追MM谈Java的23种设计模式"
wordpress_id: 20
wordpress_url: http://wsria.com/?p=20
date: 2009-02-07 18:45:18 +08:00
-category: design
+categories: design
tags:
- 设计模式
- java
diff --git a/_posts/2009-02-07-javascript-string-and-stringbuffer.markdown b/_posts/2009-02-07-javascript-string-and-stringbuffer.markdown
index 0942ba90..1dd39ff2 100644
--- a/_posts/2009-02-07-javascript-string-and-stringbuffer.markdown
+++ b/_posts/2009-02-07-javascript-string-and-stringbuffer.markdown
@@ -1,10 +1,9 @@
---
-layout: post
title: " javascript中字符串累加的性能优化(String和StringBuffer)"
wordpress_id: 17
wordpress_url: http://wsria.com/?p=17
date: 2009-02-07 18:38:39 +08:00
-category: javascript
+categories: javascript
tags:
- string
- StringBuffer
diff --git a/_posts/2009-02-07-json-lib-cycle-in-the-hierarchy.markdown b/_posts/2009-02-07-json-lib-cycle-in-the-hierarchy.markdown
index dfba71f5..9d322529 100644
--- a/_posts/2009-02-07-json-lib-cycle-in-the-hierarchy.markdown
+++ b/_posts/2009-02-07-json-lib-cycle-in-the-hierarchy.markdown
@@ -1,91 +1,90 @@
----
-layout: post
-title: "出现net.sf.json.JSONException: There is a cycle in the hierarchy异常的解决办法"
-wordpress_id: 14
-wordpress_url: http://wsria.com/?p=14
-date: 2009-02-07 18:33:22 +08:00
-category: json
-tags:
- - hibernate
- - json-lib
----
-因为项目中使用了AJAX技术,JAR包为:json-lib.jar,?在开发过程中遇到了一个JSON-LIB和Hibernate有关的问题:
-
-net.sf.json.JSONException: There is a cycle in the hierarchy!
-
-
-
-at net.sf.json.util.CycleDetectionStrategy$StrictCycleDetectionStrategy.handleRepeatedReferenceAsObject(CycleDetectionStrategy.java:97)
-at net.sf.json.JSONObject._fromBean(JSONObject.java:857)
-at net.sf.json.JSONObject.fromObject(JSONObject.java:192)
-at net.sf.json.JSONObject._processValue(JSONObject.java:2774)
-at net.sf.json.JSONObject._setInternal(JSONObject.java:2798)
-at net.sf.json.JSONObject.setValue(JSONObject.java:1507)
-at net.sf.json.JSONObject._fromBean(JSONObject.java:940)
-at net.sf.json.JSONObject.fromObject(JSONObject.java:192)
-at net.sf.json.JSONObject._processValue(JSONObject.java:2774)
-at net.sf.json.JSONObject._setInternal(JSONObject.java:2798)
-at net.sf.json.JSONObject.setValue(JSONObject.java:1507)
-at net.sf.json.JSONObject._fromBean(JSONObject.java:940)
-at net.sf.json.JSONObject.fromObject(JSONObject.java:192)
-at net.sf.json.JSONObject._processValue(JSONObject.java:2774)
-at net.sf.json.JSONObject._setInternal(JSONObject.java:2798)
-at net.sf.json.JSONObject.setValue(JSONObject.java:1507)
-at net.sf.json.JSONObject._fromBean(JSONObject.java:940)
-at net.sf.json.JSONObject.fromObject(JSONObject.java:192)
-at net.sf.json.JSONObject._processValue(JSONObject.java:2774)
-at net.sf.json.JSONObject._setInternal(JSONObject.java:2798)
-at net.sf.json.JSONObject.setValue(JSONObject.java:1507)
-at net.sf.json.JSONObject._fromBean(JSONObject.java:940)
-at net.sf.json.JSONObject.fromObject(JSONObject.java:192)
-at net.yanhl.iouser.action.IOUserAction.loadUser(IOUserAction.java:142)
-
-因为Hibernate中设置了自身关联:
-Iouser.hbm.xml:
-
-
-
-
-
-
-//设置自身关联的组对象
-
-public class GroupRelation implements Serializable {
-
-private static final long serialVersionUID = 6202253180943473205L;
-private Integer id;// 主键ID
-private Integer creatorId;// 创建人
-private Date createDate;// 创建日期
-private String groupName;// 组名称
-private GroupRelation parentGroup;
-private Set childGroups = new HashSet();
-
-
-
-
-
-
-
-
-
-
-
-
-起初想通过hibernate来解决问题,就是想过滤掉自身关联后来查资料发现不可能实现,最后找到通过JSON-LIB来过滤关联的集合属性,代码如下:
-
-JsonConfig config = new JsonConfig();
-config.setJsonPropertyFilter(new PropertyFilter(){
- public boolean apply(Object source, String name, Object value) {
- if(name.equals("parentGroup") || name.equals("childGroups")) {
- return true;
- } else {
- return false;
- }
- }
-});
-Iouser user = (Iouser) getBaseManager().get(Iouser.class, iouserId);
-JSONObject jsonObject = JSONObject.fromObject(user, config);
-
-
-当JSON-LIB解析JAVABEAN时过滤掉parentGroup、childGroups这两个属性,重新启动服务,pass
+---
+title: "出现net.sf.json.JSONException: There is a cycle in the hierarchy异常的解决办法"
+wordpress_id: 14
+wordpress_url: http://wsria.com/?p=14
+date: 2009-02-07 18:33:22 +08:00
+categories: json
+tags:
+ - hibernate
+ - json-lib
+---
+因为项目中使用了AJAX技术,JAR包为:json-lib.jar,?在开发过程中遇到了一个JSON-LIB和Hibernate有关的问题:
+
+net.sf.json.JSONException: There is a cycle in the hierarchy!
+
+
+
+at net.sf.json.util.CycleDetectionStrategy$StrictCycleDetectionStrategy.handleRepeatedReferenceAsObject(CycleDetectionStrategy.java:97)
+at net.sf.json.JSONObject._fromBean(JSONObject.java:857)
+at net.sf.json.JSONObject.fromObject(JSONObject.java:192)
+at net.sf.json.JSONObject._processValue(JSONObject.java:2774)
+at net.sf.json.JSONObject._setInternal(JSONObject.java:2798)
+at net.sf.json.JSONObject.setValue(JSONObject.java:1507)
+at net.sf.json.JSONObject._fromBean(JSONObject.java:940)
+at net.sf.json.JSONObject.fromObject(JSONObject.java:192)
+at net.sf.json.JSONObject._processValue(JSONObject.java:2774)
+at net.sf.json.JSONObject._setInternal(JSONObject.java:2798)
+at net.sf.json.JSONObject.setValue(JSONObject.java:1507)
+at net.sf.json.JSONObject._fromBean(JSONObject.java:940)
+at net.sf.json.JSONObject.fromObject(JSONObject.java:192)
+at net.sf.json.JSONObject._processValue(JSONObject.java:2774)
+at net.sf.json.JSONObject._setInternal(JSONObject.java:2798)
+at net.sf.json.JSONObject.setValue(JSONObject.java:1507)
+at net.sf.json.JSONObject._fromBean(JSONObject.java:940)
+at net.sf.json.JSONObject.fromObject(JSONObject.java:192)
+at net.sf.json.JSONObject._processValue(JSONObject.java:2774)
+at net.sf.json.JSONObject._setInternal(JSONObject.java:2798)
+at net.sf.json.JSONObject.setValue(JSONObject.java:1507)
+at net.sf.json.JSONObject._fromBean(JSONObject.java:940)
+at net.sf.json.JSONObject.fromObject(JSONObject.java:192)
+at net.yanhl.iouser.action.IOUserAction.loadUser(IOUserAction.java:142)
+
+因为Hibernate中设置了自身关联:
+Iouser.hbm.xml:
+
+
+
+
+
+
+//设置自身关联的组对象
+
+public class GroupRelation implements Serializable {
+
+private static final long serialVersionUID = 6202253180943473205L;
+private Integer id;// 主键ID
+private Integer creatorId;// 创建人
+private Date createDate;// 创建日期
+private String groupName;// 组名称
+private GroupRelation parentGroup;
+private Set childGroups = new HashSet();
+
+
+
+
+
+
+
+
+
+
+
+
+起初想通过hibernate来解决问题,就是想过滤掉自身关联后来查资料发现不可能实现,最后找到通过JSON-LIB来过滤关联的集合属性,代码如下:
+
+JsonConfig config = new JsonConfig();
+config.setJsonPropertyFilter(new PropertyFilter(){
+ public boolean apply(Object source, String name, Object value) {
+ if(name.equals("parentGroup") || name.equals("childGroups")) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+});
+Iouser user = (Iouser) getBaseManager().get(Iouser.class, iouserId);
+JSONObject jsonObject = JSONObject.fromObject(user, config);
+
+
+当JSON-LIB解析JAVABEAN时过滤掉parentGroup、childGroups这两个属性,重新启动服务,pass
diff --git a/_posts/2009-02-08-financial-pro-demo.markdown b/_posts/2009-02-08-financial-pro-demo.markdown
index bccd2d1d..b35eb265 100644
--- a/_posts/2009-02-08-financial-pro-demo.markdown
+++ b/_posts/2009-02-08-financial-pro-demo.markdown
@@ -1,21 +1,20 @@
----
-layout: post
-title: "基于jQuery开发的账务管理系统(个人版)演示"
-wordpress_id: 73
-wordpress_url: http://wsria.com/?p=73
-date: 2009-02-08 11:48:43 +08:00
-category: financial
-tags:
- - 演示
- - 视频
----
-开发此系统的初衷在于学习前台技术,然后就想到开发一个小系统,边开发边学习
-后来一天突然想到做账务系统(个人版),然后计划使用什么技术来实现,在公司待了也快两年了最看不惯的就是用户界面、体验,所以就计划使用目前比较成熟的Ajax框架来做前台,后台还是使用基于Java语言的SSH架构来实现
-平常工作忙只能下班或者周末开发、学习,在开始做的时候比较了几个目前比较流行的Ajax框架,例如:Ext、Prototype、jQuery、Dojo,后来经过比较还是选择了轻量级的Ajax框架jQuery来完成前台的功能,至于为什么使用jQuery请参见《推荐使用轻量级ajax框架-jQuery》
-经过近两年的BS开发经验积累我得知一个易用的系统最主要的是什么,简单的操作和友好提示+界面的美化是给用户的第一初体验,此系统就抓住了这一点为主攻方向,具体请下载视频观看
-此项目已在googlecode上建立版本库,如果你想学习jQuery或者参与后期开发请QQ或者E-mail联系我
-QQ:576525789
-gmail:yanhonglei@gmail.com(使用googlecode必须要有一个google账户)
-[download#15#format=1]
-
-
+---
+title: "基于jQuery开发的账务管理系统(个人版)演示"
+wordpress_id: 73
+wordpress_url: http://wsria.com/?p=73
+date: 2009-02-08 11:48:43 +08:00
+categories: financial
+tags:
+ - 演示
+ - 视频
+---
+开发此系统的初衷在于学习前台技术,然后就想到开发一个小系统,边开发边学习
+后来一天突然想到做账务系统(个人版),然后计划使用什么技术来实现,在公司待了也快两年了最看不惯的就是用户界面、体验,所以就计划使用目前比较成熟的Ajax框架来做前台,后台还是使用基于Java语言的SSH架构来实现
+平常工作忙只能下班或者周末开发、学习,在开始做的时候比较了几个目前比较流行的Ajax框架,例如:Ext、Prototype、jQuery、Dojo,后来经过比较还是选择了轻量级的Ajax框架jQuery来完成前台的功能,至于为什么使用jQuery请参见《推荐使用轻量级ajax框架-jQuery》
+经过近两年的BS开发经验积累我得知一个易用的系统最主要的是什么,简单的操作和友好提示+界面的美化是给用户的第一初体验,此系统就抓住了这一点为主攻方向,具体请下载视频观看
+此项目已在googlecode上建立版本库,如果你想学习jQuery或者参与后期开发请QQ或者E-mail联系我
+QQ:576525789
+gmail:yanhonglei@gmail.com(使用googlecode必须要有一个google账户)
+[download#15#format=1]
+
+
diff --git a/_posts/2009-02-08-great-programer-two-points.markdown b/_posts/2009-02-08-great-programer-two-points.markdown
index 612ae114..46fe48b5 100644
--- a/_posts/2009-02-08-great-programer-two-points.markdown
+++ b/_posts/2009-02-08-great-programer-two-points.markdown
@@ -1,10 +1,9 @@
---
-layout: post
title: "优秀程序员的两大要素:懒+笨"
wordpress_id: 67
wordpress_url: http://wsria.com/?p=67
date: 2009-02-08 11:12:15 +08:00
-category: programmer
+categories: programmer
tags:
- 懒
---
diff --git a/_posts/2009-02-08-jquery-in-action.markdown b/_posts/2009-02-08-jquery-in-action.markdown
index b70f264b..f9878149 100644
--- a/_posts/2009-02-08-jquery-in-action.markdown
+++ b/_posts/2009-02-08-jquery-in-action.markdown
@@ -1,35 +1,34 @@
----
-layout: post
-title: "《jQuery in Action》中文版即将上市"
-wordpress_id: 46
-wordpress_url: http://wsria.com/?p=46
-date: 2009-02-08 02:32:55 +08:00
-category: jquery
-tags:
- - 图书
----
-消息称2月中旬《jQuery in Action》中文版就要上市了
-
-虽然使用jQuery半年多了,但都是停留在应用层面上,等书出来了第一时间购买,达到理论+实践的目的
-
-?
-
-
-
-?
-
-?
-
-《jQuery in Action》中文版目录(试译):
-序
-前言
-第1章 jQuery入门(或jQuery简介)
-第2章 jQuery对象
-第3章 文档操作
-第4章 事件
-第5章 动画和效果
-第6章 实用函数
-第7章 扩展
-第8章 Ajax
-第9章 插件
-附录A JavaScript:应知未知的特性
+---
+title: "《jQuery in Action》中文版即将上市"
+wordpress_id: 46
+wordpress_url: http://wsria.com/?p=46
+date: 2009-02-08 02:32:55 +08:00
+categories: jquery
+tags:
+ - 图书
+---
+消息称2月中旬《jQuery in Action》中文版就要上市了
+
+虽然使用jQuery半年多了,但都是停留在应用层面上,等书出来了第一时间购买,达到理论+实践的目的
+
+?
+
+
+
+?
+
+?
+
+《jQuery in Action》中文版目录(试译):
+序
+前言
+第1章 jQuery入门(或jQuery简介)
+第2章 jQuery对象
+第3章 文档操作
+第4章 事件
+第5章 动画和效果
+第6章 实用函数
+第7章 扩展
+第8章 Ajax
+第9章 插件
+附录A JavaScript:应知未知的特性
diff --git a/_posts/2009-02-10-let-me-use-jquery.markdown b/_posts/2009-02-10-let-me-use-jquery.markdown
index 211039e7..f15bba6e 100644
--- a/_posts/2009-02-10-let-me-use-jquery.markdown
+++ b/_posts/2009-02-10-let-me-use-jquery.markdown
@@ -1,10 +1,9 @@
---
-layout: post
title: "推荐使用轻量级ajax框架-jQuery"
wordpress_id: 84
wordpress_url: http://wsria.com/?p=84
date: 2009-02-10 14:19:09 +08:00
-category: ria
+categories: ria
tags:
- jquery
- ajax
diff --git a/_posts/2009-02-13-finance-project1.markdown b/_posts/2009-02-13-finance-project1.markdown
index ed15ee9f..91af7dc3 100644
--- a/_posts/2009-02-13-finance-project1.markdown
+++ b/_posts/2009-02-13-finance-project1.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "基于Java、jQuery开发的账务管理系统(个人版)即将开源"
wordpress_id: 89
wordpress_url: http://www.wsria.com/?p=89
diff --git a/_posts/2009-02-14-financial-pro-sources.markdown b/_posts/2009-02-14-financial-pro-sources.markdown
index 3d6e7312..9b22d710 100644
--- a/_posts/2009-02-14-financial-pro-sources.markdown
+++ b/_posts/2009-02-14-financial-pro-sources.markdown
@@ -1,87 +1,86 @@
----
-layout: post
-title: "基于Java、jQuery应用的账务管理系统开源了(09.3.19更新)"
-wordpress_id: 136
-wordpress_url: http://www.wsria.com/?p=136
-date: 2009-02-14 17:35:00 +08:00
-category: financial
-tags:
- - 演示
- - 财务
----
-基于Java、jQuery开发的账务管理系统(个人版)系统演示及源码共享,致力于企业级RIA应用……
-
-
-
-在这个特殊的日子还是继续宅男的生活,过着没有情人的情人节,但是今年这个没有情人的情人节要献给广大Java、jQuery技术爱好者一份大礼,半年来周末、下班时间学习使用的账务管理系统公开源代码了,关于系统的说明请参看本博客相关文章,废话不说了,googlecode地址公布如下:
-
-2009.02.25更新……
-版本库主页:http://code.google.com/p/finance-p/
-匿名检出版本库:svn checkout http://finance-p.googlecode.com/svn/branches/v1-Final finance
-googlecode上去下载
-
-预览系统演示视频
-关于系统功能的内部实现会陆续发布文章供大家研究、学习
-
-如果你想参与到此项目的继续开发请联系博主
-
-代码、功能仅供学习、参考,肯定存在一定问题,希望一块学习
-更新2009.2.26
-最近有一个网友下载了基于Java、jQuery开发的账务管理系统,上次的文档写的不完整,在这里向各位表示歉意,下面写一个完整的安装文档:
-
-
-一、一个仅供学习之用的账务管理系统(个人版)
-
-系统简介: 1、实现了用户、组管理 2、实现了物品类别、详细管理 3、实现了基本账务(货币)管理
-
-开发此系统的初衷在于学习技术以便更好的应用在公司的项目中,本系统特别注重用户体验方面的设计,友好的界面和傻瓜式的操作
-
-前后台架构: 1、java语言(jdk1.5)、struts1.2.9、hibernate3.2.6.ga、spring2.0.8 2、前台:主要使用了轻量级的ajax开发框架jQuery,使用jQuery很轻松的降低了服务器压力提高了用户体验并且代码容易维护,尤其是jQuery的插件机制更是简易了代码 3、数据库版本为mysql5.0 4、编码:为防止ajax乱码,所以项目、数据库全部使用UTF-8编码
-
-浏览器兼容性: 目前的设计兼容IE7+、FireFox、Chrome(有一点路径问题) 因为IE6下的CSS文件还为完成所以使用IE6访问系统会出现布局不美观情况
-
-二、系统配置说明
-
-1、数据库
-
- - mysql,本人使用版本是5.0.18
- - 建立数据库名称为:finance,字符集设置为UTF-8,然后导入bak/finance.sql文件
-
-
-
-2、编译项目
-
-说明:本项目没有使用标准的WebRoot格式,源代码文件夹SRC位于/WEB-INF/SRC目录下
-
-
- - SVN版本库和压缩包中没有class文件,即/WEB-INF目录下没有classes目录,需要自己使用eclipse编译,所有用到的jar包都在WEB-INF/lib目录下,即eclipse中build path-->libraries设置,各个框架的版本上面都已说明
- - 编译时如果使用MyEclipse的话使用J2EE1.4这个library
- - 使用tomcat或者weblogic等服务器jar包的请自行引入
-
-
-3、设置、启动服务
-
- - 打开finance/WEB-INF/config/applicationContext.xml:
- - 修改第10、11行的数据库名和密码为你的mysql数据库用户名、密码
- - 部署tomcat应用:
-
- - 在tomcat目录confCatalinalocalhost下建立一个finance.xml
- - 内容:<Context docBase="D:projectsfinancetrunk" reloadable="true" privileged="true"></Context>
-docBase根据自己的情况设置
-
-
- - 做完上面两步后就可以启动服务了,如果应用名设置为finance就直接可以访问了,如果自己另外定了应用名称则需要修改common/js/plugin/weebox.js中第17行,改为:url: '/应用名称/common/js/plugin/bgiframe.js'即可
- - 访问系统最好使用Firefox浏览器,因为FF内置的JS引擎机制速度比IE快的多,或者google的Chrome浏览器也不错,其内置的JS8引擎比FF的性能还要好
-
-4、更新最新版本
-
-http://finance-p.googlecode.com/svn/trunk/
-
-声明:本系统仅供学习使用,禁止商业应用 版权归http://www.wsria.com所有
-
-如果有问题请联系作者:
-
-QQ:576525789
-MSN:yanhonglei@gmail.com
+---
+title: "基于Java、jQuery应用的账务管理系统开源了(09.3.19更新)"
+wordpress_id: 136
+wordpress_url: http://www.wsria.com/?p=136
+date: 2009-02-14 17:35:00 +08:00
+categories: financial
+tags:
+ - 演示
+ - 财务
+---
+基于Java、jQuery开发的账务管理系统(个人版)系统演示及源码共享,致力于企业级RIA应用……
+
+
+
+在这个特殊的日子还是继续宅男的生活,过着没有情人的情人节,但是今年这个没有情人的情人节要献给广大Java、jQuery技术爱好者一份大礼,半年来周末、下班时间学习使用的账务管理系统公开源代码了,关于系统的说明请参看本博客相关文章,废话不说了,googlecode地址公布如下:
+
+2009.02.25更新……
+版本库主页:http://code.google.com/p/finance-p/
+匿名检出版本库:svn checkout http://finance-p.googlecode.com/svn/branches/v1-Final finance
+googlecode上去下载
+
+预览系统演示视频
+关于系统功能的内部实现会陆续发布文章供大家研究、学习
+
+如果你想参与到此项目的继续开发请联系博主
+
+代码、功能仅供学习、参考,肯定存在一定问题,希望一块学习
+更新2009.2.26
+最近有一个网友下载了基于Java、jQuery开发的账务管理系统,上次的文档写的不完整,在这里向各位表示歉意,下面写一个完整的安装文档:
+
+
+一、一个仅供学习之用的账务管理系统(个人版)
+
+系统简介: 1、实现了用户、组管理 2、实现了物品类别、详细管理 3、实现了基本账务(货币)管理
+
+开发此系统的初衷在于学习技术以便更好的应用在公司的项目中,本系统特别注重用户体验方面的设计,友好的界面和傻瓜式的操作
+
+前后台架构: 1、java语言(jdk1.5)、struts1.2.9、hibernate3.2.6.ga、spring2.0.8 2、前台:主要使用了轻量级的ajax开发框架jQuery,使用jQuery很轻松的降低了服务器压力提高了用户体验并且代码容易维护,尤其是jQuery的插件机制更是简易了代码 3、数据库版本为mysql5.0 4、编码:为防止ajax乱码,所以项目、数据库全部使用UTF-8编码
+
+浏览器兼容性: 目前的设计兼容IE7+、FireFox、Chrome(有一点路径问题) 因为IE6下的CSS文件还为完成所以使用IE6访问系统会出现布局不美观情况
+
+二、系统配置说明
+
+1、数据库
+
+ - mysql,本人使用版本是5.0.18
+ - 建立数据库名称为:finance,字符集设置为UTF-8,然后导入bak/finance.sql文件
+
+
+
+2、编译项目
+
+说明:本项目没有使用标准的WebRoot格式,源代码文件夹SRC位于/WEB-INF/SRC目录下
+
+
+ - SVN版本库和压缩包中没有class文件,即/WEB-INF目录下没有classes目录,需要自己使用eclipse编译,所有用到的jar包都在WEB-INF/lib目录下,即eclipse中build path-->libraries设置,各个框架的版本上面都已说明
+ - 编译时如果使用MyEclipse的话使用J2EE1.4这个library
+ - 使用tomcat或者weblogic等服务器jar包的请自行引入
+
+
+3、设置、启动服务
+
+ - 打开finance/WEB-INF/config/applicationContext.xml:
+ - 修改第10、11行的数据库名和密码为你的mysql数据库用户名、密码
+ - 部署tomcat应用:
+
+ - 在tomcat目录confCatalinalocalhost下建立一个finance.xml
+ - 内容:<Context docBase="D:projectsfinancetrunk" reloadable="true" privileged="true"></Context>
+docBase根据自己的情况设置
+
+
+ - 做完上面两步后就可以启动服务了,如果应用名设置为finance就直接可以访问了,如果自己另外定了应用名称则需要修改common/js/plugin/weebox.js中第17行,改为:url: '/应用名称/common/js/plugin/bgiframe.js'即可
+ - 访问系统最好使用Firefox浏览器,因为FF内置的JS引擎机制速度比IE快的多,或者google的Chrome浏览器也不错,其内置的JS8引擎比FF的性能还要好
+
+4、更新最新版本
+
+http://finance-p.googlecode.com/svn/trunk/
+
+声明:本系统仅供学习使用,禁止商业应用 版权归http://www.wsria.com所有
+
+如果有问题请联系作者:
+
+QQ:576525789
+MSN:yanhonglei@gmail.com
diff --git a/_posts/2009-02-14-jquery-api-1.3-chm.markdown b/_posts/2009-02-14-jquery-api-1.3-chm.markdown
index 247744ed..e9ab17b1 100644
--- a/_posts/2009-02-14-jquery-api-1.3-chm.markdown
+++ b/_posts/2009-02-14-jquery-api-1.3-chm.markdown
@@ -1,10 +1,9 @@
---
-layout: post
title: "jQuery1.3中文API下载(HTML、chm版)"
wordpress_id: 151
wordpress_url: http://www.wsria.com/?p=151
date: 2009-02-14 19:19:10 +08:00
-category: jquery
+categories: jquery
tags:
- API
---
diff --git a/_posts/2009-02-14-programer-levels.markdown b/_posts/2009-02-14-programer-levels.markdown
index e9e07a1f..f240fa33 100644
--- a/_posts/2009-02-14-programer-levels.markdown
+++ b/_posts/2009-02-14-programer-levels.markdown
@@ -1,10 +1,9 @@
---
-layout: post
title: "程序员的十种级别,看看你属于哪个级别的程序员"
wordpress_id: 109
wordpress_url: http://www.wsria.com/?p=109
date: 2009-02-14 00:48:21 +08:00
-category: programmer
+categories: programmer
tags:
- level
---
diff --git a/_posts/2009-02-18-jquery-plugin-formValidator.markdown b/_posts/2009-02-18-jquery-plugin-formValidator.markdown
index f8ca8606..b203eb3e 100644
--- a/_posts/2009-02-18-jquery-plugin-formValidator.markdown
+++ b/_posts/2009-02-18-jquery-plugin-formValidator.markdown
@@ -1,49 +1,48 @@
----
-layout: post
-title: "推荐jQuery插件系列——表单验证formValidator"
-wordpress_id: 214
-wordpress_url: http://www.wsria.com/?p=214
-date: 2009-02-18 19:41:13 +08:00
-category: jquery
-tags:
- - plugin
- - 验证
----
-在开发各种BS架构的系统时表单验证是每个系统、网站都要做的一件事情,在客户端拦截用户的输入、选择是否合法从而降低对服务端的压力也增加用户体验,一般来说都会简单的验证必输项是否为空,或者必选项是否已选择,复杂一点的比如在注册时实时验证用户名是否重复,如此等等
-
-在开发账务管理系统的时候开始想使用自己在公司项目中写的一个验证方法,但是后来想想感觉功能太单调了,虽然能够满足系统的要求但是用户体验不好,所有的错误提示都是使用的alert的方式提示用户,而且没有实时验证的功能,最终放弃了;然后就在jQuery官网插件上搜索关于验证的插件,刚刚说的几个功能都得满足,找了几个最终选择了formValidator,下面是摘自插件官网上的:
-
-
-本插件于其他校验控件最大的区别有3点:
-
-1、校验功能可以扩展。
- 对 中文、英文、数字、整数、实数、Email地址格式、基于HTTP协议的网址格式、电话号码格式、手机号码格式、货币格式、邮政编码、身份证号码、QQ号 码、日期等等这些控制,别的表单校验控件是代码里写死的,而formValidator是通过外部js文件来扩展的,你可以通过写正则表达式和函数来无限的扩展这些功能。
-
-2、实现了校验代码于html代码的完全分离。
-你的所有信息都无需配置在校验表单元素上,你只要在js上配置你的信息。使美工(界面)和javascript工程师的工作不交织在一起
-
-3、你只需写一行代码就能完成一个表单元素的所有校验。你只需要写一行代码就能完成一下所有的控制
-
- - 支持所有类型客户端控件的校验
- - 支持jQuery所有的选择器语法,只要控件有唯一ID和type属性
- - 支持函数和正则表达式的扩展。提供扩展库formValidatorReg.js,你可以自由的添加、修改里面的内容。
- - 支持2种校验模式。第一种:文字提示(showword模式);第二种:弹出窗口提示(showalert模式)
- - 支持多个校验组。如果一个页面有多个提交按钮,分别做不同得提交,提交前要做不同的校验,所以你得用到校验组的功能。
- - 支持4种状态的信息提示功能,可以灵活的控制4种状态是否显示。第一种:刚打开网页的时候进行提示;第二种:获得焦点的时候进行提示;第三种:失去焦点时,校验成功时候的提示;第四种:失去焦点时,校验失败的错误提示。
- - 支持自动构建提示层。可以进行精确的定位。
- - 支持自定义错误提示信息。
- - 支持控件的字符长度、值范围、选择个数的控制。值范围支持数值型和字符型;选择的个数支持radio/checkbox/select三种控件
- - 支持2个控件值的比较。目前可以比较字符串和数值型。
- - 支持服务器端校验。
- - 支持输入格式的校验。
-
-
-大家可以到formValidator 官网上去查看具体效果及其使用方法,也可以在晚上7点之后访问我在账务管理系统中的实际应用效果供大家参考
-
-但是目前jQuery的版本更新到了1.3弃用了1.1和1.2版本中@写法,例如选择一个已选择的radio在1.1或者1.2版本中可以这样写:
-alert($(":radio[@checked]").length);
-但是在1.3中就不可以这样写,1.3的写法:
-alert($(":radio:checked").length);
-所以当我前段时间更新到1.3版本中就出现问题了,我上传一个我修改过的版本供大家下载:
-
-[download#10#format=1]
+---
+title: "推荐jQuery插件系列——表单验证formValidator"
+wordpress_id: 214
+wordpress_url: http://www.wsria.com/?p=214
+date: 2009-02-18 19:41:13 +08:00
+categories: jquery
+tags:
+ - plugin
+ - 验证
+---
+在开发各种BS架构的系统时表单验证是每个系统、网站都要做的一件事情,在客户端拦截用户的输入、选择是否合法从而降低对服务端的压力也增加用户体验,一般来说都会简单的验证必输项是否为空,或者必选项是否已选择,复杂一点的比如在注册时实时验证用户名是否重复,如此等等
+
+在开发账务管理系统的时候开始想使用自己在公司项目中写的一个验证方法,但是后来想想感觉功能太单调了,虽然能够满足系统的要求但是用户体验不好,所有的错误提示都是使用的alert的方式提示用户,而且没有实时验证的功能,最终放弃了;然后就在jQuery官网插件上搜索关于验证的插件,刚刚说的几个功能都得满足,找了几个最终选择了formValidator,下面是摘自插件官网上的:
+
+
+本插件于其他校验控件最大的区别有3点:
+
+1、校验功能可以扩展。
+ 对 中文、英文、数字、整数、实数、Email地址格式、基于HTTP协议的网址格式、电话号码格式、手机号码格式、货币格式、邮政编码、身份证号码、QQ号 码、日期等等这些控制,别的表单校验控件是代码里写死的,而formValidator是通过外部js文件来扩展的,你可以通过写正则表达式和函数来无限的扩展这些功能。
+
+2、实现了校验代码于html代码的完全分离。
+你的所有信息都无需配置在校验表单元素上,你只要在js上配置你的信息。使美工(界面)和javascript工程师的工作不交织在一起
+
+3、你只需写一行代码就能完成一个表单元素的所有校验。你只需要写一行代码就能完成一下所有的控制
+
+ - 支持所有类型客户端控件的校验
+ - 支持jQuery所有的选择器语法,只要控件有唯一ID和type属性
+ - 支持函数和正则表达式的扩展。提供扩展库formValidatorReg.js,你可以自由的添加、修改里面的内容。
+ - 支持2种校验模式。第一种:文字提示(showword模式);第二种:弹出窗口提示(showalert模式)
+ - 支持多个校验组。如果一个页面有多个提交按钮,分别做不同得提交,提交前要做不同的校验,所以你得用到校验组的功能。
+ - 支持4种状态的信息提示功能,可以灵活的控制4种状态是否显示。第一种:刚打开网页的时候进行提示;第二种:获得焦点的时候进行提示;第三种:失去焦点时,校验成功时候的提示;第四种:失去焦点时,校验失败的错误提示。
+ - 支持自动构建提示层。可以进行精确的定位。
+ - 支持自定义错误提示信息。
+ - 支持控件的字符长度、值范围、选择个数的控制。值范围支持数值型和字符型;选择的个数支持radio/checkbox/select三种控件
+ - 支持2个控件值的比较。目前可以比较字符串和数值型。
+ - 支持服务器端校验。
+ - 支持输入格式的校验。
+
+
+大家可以到formValidator 官网上去查看具体效果及其使用方法,也可以在晚上7点之后访问我在账务管理系统中的实际应用效果供大家参考
+
+但是目前jQuery的版本更新到了1.3弃用了1.1和1.2版本中@写法,例如选择一个已选择的radio在1.1或者1.2版本中可以这样写:
+alert($(":radio[@checked]").length);
+但是在1.3中就不可以这样写,1.3的写法:
+alert($(":radio:checked").length);
+所以当我前段时间更新到1.3版本中就出现问题了,我上传一个我修改过的版本供大家下载:
+
+[download#10#format=1]
diff --git a/_posts/2009-02-19-my-habit-of-programmer.markdown b/_posts/2009-02-19-my-habit-of-programmer.markdown
index c6133c44..5bcd6462 100644
--- a/_posts/2009-02-19-my-habit-of-programmer.markdown
+++ b/_posts/2009-02-19-my-habit-of-programmer.markdown
@@ -1,10 +1,9 @@
---
-layout: post
title: "我暴露了程序员的习惯"
wordpress_id: 232
wordpress_url: http://www.wsria.com/?p=232
date: 2009-02-19 22:19:03 +08:00
-category: study
+categories: study
tags:
- 学习机
---
diff --git a/_posts/2009-02-20-apply-friendly-links-readme.markdown b/_posts/2009-02-20-apply-friendly-links-readme.markdown
index 05778f37..b46a0949 100644
--- a/_posts/2009-02-20-apply-friendly-links-readme.markdown
+++ b/_posts/2009-02-20-apply-friendly-links-readme.markdown
@@ -1,10 +1,9 @@
---
-layout: post
title: "申请友链及说明"
wordpress_id: 237
wordpress_url: http://www.wsria.com/?p=237
date: 2009-02-20 11:33:31 +08:00
-category: blog
+categories: blog
tags:
- 友链
- 博客
diff --git a/_posts/2009-02-20-google-and-jquery.markdown b/_posts/2009-02-20-google-and-jquery.markdown
index 9e2e6438..7587f605 100644
--- a/_posts/2009-02-20-google-and-jquery.markdown
+++ b/_posts/2009-02-20-google-and-jquery.markdown
@@ -1,10 +1,9 @@
---
-layout: post
title: "从Google搜索联想到了jQuery"
wordpress_id: 245
wordpress_url: http://www.wsria.com/?p=245
date: 2009-02-20 22:10:17 +08:00
-category: google
+categories: google
tags:
- google
---
diff --git a/_posts/2009-02-20-oracle-single-table-self-tree.markdown b/_posts/2009-02-20-oracle-single-table-self-tree.markdown
index e0eefb5c..49615382 100644
--- a/_posts/2009-02-20-oracle-single-table-self-tree.markdown
+++ b/_posts/2009-02-20-oracle-single-table-self-tree.markdown
@@ -1,44 +1,43 @@
----
-layout: post
-title: "单表查询树形结构的SQL语句"
-wordpress_id: 241
-wordpress_url: http://www.wsria.com/?p=241
-date: 2009-02-20 18:25:14 +08:00
-category: database
-tags:
- - sql
- - 树
- - 关联
----
-今天在做一个项目模块的时候遇到了点问题,数据库设计是单表自身关联,就是增加一个字段保存父级ID实现树状数据结构,开始设计的时候没有考虑要怎么查询,今天做到着一步卡住了,不晓得怎么写SQL语句,当时还在想是不是没有这种案例,但是转念一想不肯能这么经典的案例都没有解决方案,然后google了一下晓得了:
-
-Start with...Connect By子句递归查询
-
-下面是从网上转载的内容:
-
-
-
-CREATE TABLE TBL_TEST
-(
-ID NUMBER,
-NAME VARCHAR2(100 BYTE),
-PID NUMBER DEFAULT 0
-);
-
-#插入测试数据:
-INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''1'''',''''10'''',''''0'''');
-INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''2'''',''''11'''',''''1'''');
-INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''3'''',''''20'''',''''0'''');
-INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''4'''',''''12'''',''''1'''');
-INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''5'''',''''121'''',''''2'''');
-
-#从Root往树末梢递归
-select * from TBL_TEST
-start with id=1
-connect by prior id = pid
-
-#从末梢往树ROOT递归
-select * from TBL_TEST
-start with id=5
-connect by prior pid = id
-
+---
+title: "单表查询树形结构的SQL语句"
+wordpress_id: 241
+wordpress_url: http://www.wsria.com/?p=241
+date: 2009-02-20 18:25:14 +08:00
+categories: database
+tags:
+ - sql
+ - 树
+ - 关联
+---
+今天在做一个项目模块的时候遇到了点问题,数据库设计是单表自身关联,就是增加一个字段保存父级ID实现树状数据结构,开始设计的时候没有考虑要怎么查询,今天做到着一步卡住了,不晓得怎么写SQL语句,当时还在想是不是没有这种案例,但是转念一想不肯能这么经典的案例都没有解决方案,然后google了一下晓得了:
+
+Start with...Connect By子句递归查询
+
+下面是从网上转载的内容:
+
+
+
+CREATE TABLE TBL_TEST
+(
+ID NUMBER,
+NAME VARCHAR2(100 BYTE),
+PID NUMBER DEFAULT 0
+);
+
+#插入测试数据:
+INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''1'''',''''10'''',''''0'''');
+INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''2'''',''''11'''',''''1'''');
+INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''3'''',''''20'''',''''0'''');
+INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''4'''',''''12'''',''''1'''');
+INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''5'''',''''121'''',''''2'''');
+
+#从Root往树末梢递归
+select * from TBL_TEST
+start with id=1
+connect by prior id = pid
+
+#从末梢往树ROOT递归
+select * from TBL_TEST
+start with id=5
+connect by prior pid = id
+
diff --git a/_posts/2009-02-21-javascript-compressor.markdown b/_posts/2009-02-21-javascript-compressor.markdown
index 51750b68..b3b4f640 100644
--- a/_posts/2009-02-21-javascript-compressor.markdown
+++ b/_posts/2009-02-21-javascript-compressor.markdown
@@ -1,10 +1,9 @@
---
-layout: post
title: "分享:JavaScript在线压缩工具"
wordpress_id: 249
wordpress_url: http://www.wsria.com/?p=249
date: 2009-02-21 18:27:03 +08:00
-category: javascript
+categories: javascript
tags:
- 压缩
---
diff --git a/_posts/2009-02-21-javascript-debug-experience.markdown b/_posts/2009-02-21-javascript-debug-experience.markdown
index a4bd305e..1a81d331 100644
--- a/_posts/2009-02-21-javascript-debug-experience.markdown
+++ b/_posts/2009-02-21-javascript-debug-experience.markdown
@@ -1,10 +1,9 @@
---
-layout: post
title: "转:Javascript 脚本的调试经验"
wordpress_id: 255
wordpress_url: http://www.wsria.com/?p=255
date: 2009-02-21 20:03:38 +08:00
-category: javascript
+categories: javascript
tags:
- 调试
---
diff --git a/_posts/2009-02-21-love-and-hate-firefox.markdown b/_posts/2009-02-21-love-and-hate-firefox.markdown
index 61f3f1c9..ef4acd31 100644
--- a/_posts/2009-02-21-love-and-hate-firefox.markdown
+++ b/_posts/2009-02-21-love-and-hate-firefox.markdown
@@ -1,21 +1,20 @@
----
-layout: post
-title: "既爱又恨Firefox"
-wordpress_id: 259
-wordpress_url: http://www.wsria.com/?p=259
-date: 2009-02-21 21:04:47 +08:00
-category: browser
-tags:
- - firefox
----
-对于开发人员来说使用FF应该多一些,自从IE7发布以后一直感觉慢,后来迫不得已使用了Firefox浏览器,从速度上来说比IE7要快的多,且IE7在打开多个标签的时候在执行“关闭其他标签”命令会“挂起”,需要过几秒钟才反应过来,使用FF没有这种那个情况发生,且易用、插件多(firebug最好),但是大家都知道的FF内存泄露很烦人,下面看看截图吧:
-
-
-
-这是在开了10个标签页后的内存消耗情况,如果使用的时间长消耗的更多,悲哀
-
-使用google的chrome吧有一些网站不兼容……
-
-哎,什么时候能有一款速度快、遵照W3C标准、有插件支持的浏览器
-
-发发牢骚):
+---
+title: "既爱又恨Firefox"
+wordpress_id: 259
+wordpress_url: http://www.wsria.com/?p=259
+date: 2009-02-21 21:04:47 +08:00
+categories: browser
+tags:
+ - firefox
+---
+对于开发人员来说使用FF应该多一些,自从IE7发布以后一直感觉慢,后来迫不得已使用了Firefox浏览器,从速度上来说比IE7要快的多,且IE7在打开多个标签的时候在执行“关闭其他标签”命令会“挂起”,需要过几秒钟才反应过来,使用FF没有这种那个情况发生,且易用、插件多(firebug最好),但是大家都知道的FF内存泄露很烦人,下面看看截图吧:
+
+
+
+这是在开了10个标签页后的内存消耗情况,如果使用的时间长消耗的更多,悲哀
+
+使用google的chrome吧有一些网站不兼容……
+
+哎,什么时候能有一款速度快、遵照W3C标准、有插件支持的浏览器
+
+发发牢骚):
diff --git a/_posts/2009-02-21-my97-datepicker.markdown b/_posts/2009-02-21-my97-datepicker.markdown
index 818fdaa8..2fc68b99 100644
--- a/_posts/2009-02-21-my97-datepicker.markdown
+++ b/_posts/2009-02-21-my97-datepicker.markdown
@@ -1,10 +1,9 @@
---
-layout: post
title: "推荐日期选择组件My97 DatePicker"
wordpress_id: 263
wordpress_url: http://www.wsria.com/?p=263
date: 2009-02-21 21:18:47 +08:00
-category: plugins
+categories: plugins
tags:
- my97
- 日期
diff --git a/_posts/2009-02-22-imitate-google-picture-use-jquery.markdown b/_posts/2009-02-22-imitate-google-picture-use-jquery.markdown
index ae42591d..1565cb77 100644
--- a/_posts/2009-02-22-imitate-google-picture-use-jquery.markdown
+++ b/_posts/2009-02-22-imitate-google-picture-use-jquery.markdown
@@ -1,52 +1,51 @@
----
-layout: post
-title: "模拟google相册鼠标移动提示信息"
-wordpress_id: 285
-wordpress_url: http://www.wsria.com/?p=285
-date: 2009-02-22 16:57:07 +08:00
-category: jquery
-tags:
- - google
- - 悬浮
----
-在jQuery中文社区中看到一篇帖子提问,http://bbs.jquery.org.cn/read.php?tid-3992.html
-
-模拟google的照片鼠标提示信息
-
-下面介绍如何实现:
-
-1、在html中增加两个img
-<img src="panda.jpg" border="0" alt="" width="231" height="300" />
-<img src="no.jpg" alt="" width="231" height="300" />
-2、准备一个提示信息使用的DIV层
-
-<div id="tipInfo" style="display:none"></div>
-
-
-
-这里一定要主意把tipInfo的position设置为absolute,我在做的时候就卡到这里了,后来发现原来忘了设置……
-
-3、javascript代码:
-$(function() {
- //$('#content img:not(:eq(0))')的意思是不显示第一张图片的信息
- $('#content img:not(:eq(0))').hover(
- function() {
- var position = $(this).position();
- var tipHight = $('#tipInfo').height();
-
- var endTop = (position.top + $(this).height()) - tipHight;
- //$(this).addClass('active');
- $("#tipInfo").width($(this).width())
- .html('作者:' + $(this).attr('author'))
- .show()
- .css({top: endTop + "px", left: position.left + "px"});
- },
- function() {
- //$(this).removeClass('active');
- $('#tipInfo').hide();
- }
- );
-});
-测试通过,代码很简单,点击这里查看演示
-
-源码[download#12#format=1]
+---
+title: "模拟google相册鼠标移动提示信息"
+wordpress_id: 285
+wordpress_url: http://www.wsria.com/?p=285
+date: 2009-02-22 16:57:07 +08:00
+categories: jquery
+tags:
+ - google
+ - 悬浮
+---
+在jQuery中文社区中看到一篇帖子提问,http://bbs.jquery.org.cn/read.php?tid-3992.html
+
+模拟google的照片鼠标提示信息
+
+下面介绍如何实现:
+
+1、在html中增加两个img
+<img src="panda.jpg" border="0" alt="" width="231" height="300" />
+<img src="no.jpg" alt="" width="231" height="300" />
+2、准备一个提示信息使用的DIV层
+
+<div id="tipInfo" style="display:none"></div>
+
+
+
+这里一定要主意把tipInfo的position设置为absolute,我在做的时候就卡到这里了,后来发现原来忘了设置……
+
+3、javascript代码:
+$(function() {
+ //$('#content img:not(:eq(0))')的意思是不显示第一张图片的信息
+ $('#content img:not(:eq(0))').hover(
+ function() {
+ var position = $(this).position();
+ var tipHight = $('#tipInfo').height();
+
+ var endTop = (position.top + $(this).height()) - tipHight;
+ //$(this).addClass('active');
+ $("#tipInfo").width($(this).width())
+ .html('作者:' + $(this).attr('author'))
+ .show()
+ .css({top: endTop + "px", left: position.left + "px"});
+ },
+ function() {
+ //$(this).removeClass('active');
+ $('#tipInfo').hide();
+ }
+ );
+});
+测试通过,代码很简单,点击这里查看演示
+
+源码[download#12#format=1]
diff --git a/_posts/2009-02-22-javascript-editor-spket.markdown b/_posts/2009-02-22-javascript-editor-spket.markdown
index c9ec073c..c25e8f5e 100644
--- a/_posts/2009-02-22-javascript-editor-spket.markdown
+++ b/_posts/2009-02-22-javascript-editor-spket.markdown
@@ -1,10 +1,9 @@
---
-layout: post
title: "推荐一个不错的js编辑工具Spket IDE for eclipse"
wordpress_id: 296
wordpress_url: http://www.wsria.com/?p=296
date: 2009-02-22 18:12:45 +08:00
-category: eclipse
+categories: eclipse
tags:
- eclipse
- spket
diff --git a/_posts/2009-02-24-jquery-json-java-struts.markdown b/_posts/2009-02-24-jquery-json-java-struts.markdown
index 8a47bfcd..0e970333 100644
--- a/_posts/2009-02-24-jquery-json-java-struts.markdown
+++ b/_posts/2009-02-24-jquery-json-java-struts.markdown
@@ -1,194 +1,193 @@
----
-layout: post
-title: "实例解析java + jQuery + json工作过程(登录)"
-wordpress_id: 300
-wordpress_url: http://www.wsria.com/?p=300
-date: 2009-02-24 21:55:29 +08:00
-category: jquery
-tags:
- - json
- - jqury
- - java
- - struts
----
-本文主要讲解在java环境下使用jQuery进行JSON数据传送的交互过程
-
-参考根据作者的账务管理系统(个人版) 源码下载 讲解
-
-
-一、相关技术、工具简介
-
-1、简单介绍一下JSON,JSON是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。已键值对形式表示数据,和java中的Map的数据存储形式相似,具体细节请参考http://www.json.org/json-zh.html。
-
-2、对应后台JSON的数据处理工具json-lib,包含各种格式数据的工具类,比如:JavaBean、数组、集合(Collection)等,参考API文档。
-
-3、jQuery框架中的数据表现形式,如果你熟悉jQuery的话就会发现jQuery的使用的数据传输都是JSON格式,比如我们经常使用的$.ajax方法:
-$.ajax({
- url : url,
- data : {
- id : chkValue
- },
- cache : false,
- dataType : "json",
- success : function(result){
- alert(result);
- }
-);
-其中 {...} 表示的就是JSON格式的数据
-
-二、前台工作方式
-为了能够容易理解以系统登录讲解,最后会以一个实例的方式讲解
-1、登录页面
-代码请参见 http://code.google.com/p/finance-p/source/browse/trunk/login.jsp
-用户名:
-
-
-密码:
-
-2、登录javascript文件 login.js
-/**
- * 设置表单验证规则
- */
-function regFormValidator() {
- $.formValidator.initConfig({formid:"loginForm"});
- $("#loginName").formValidator({
- onshow : "请输入用户名",
- onfocus : "用户名至少2个字,最多4个字"
- }).inputValidator({
- min : 1,
- onerror : "你输入的用户名非法,请确认"
- });
-
- $("#password").formValidator({
- onshow : "请输入密码"
- }).inputValidator({
- min : 6,
- onerror : "密码在6位以上,请确认"
- });
-}
-
-$(function() {
- // 注册表单验证插件
- regFormValidator();
-
- $('#submit').click(function(){
- // 验证输入的用户名、密码是否正确
- var valid = jQuery.formValidator.pageIsValid('1');
- if (valid) {
- $(this).attr('value', '正在登录……').attr('disabled', true);
- } else {
- return;
- }
-
- // 发送请求
- $.ajax({
- url : 'login.do',
- data : { loginName:$('#loginName').val(), password: $('#password').val() },
- success : function(result){
- // 根据result返回信息判断是否登录成功
- if(result && result == 'success') {
- window.location.href = 'index.jsp';
- } else {
- alert('登录失败,用户名或密码错误,请重试!');
- }
- }
- });
-
- });
-});
-这样当点击“登录”按钮的时候触发ajax请求:
-
- - 验证表单完整性
- - 发送ajax请求到后台,值通过data键已JSON格式传送至后台
- - 如果后台返回的result为success时表示登录成功,页面跳转至首页index.jsp
-
-三、后台工作方式
-
-后台要比前台操作复杂一些,以为涉及到数据库、编码或者一些业务逻辑
-
-1、获得请求参数
-
-有两种方式:
-
- - 通过request.getParameter("key")的方式
- - 通过json-lib工具包获取
-
-这我们主要讲解怎么通过json-lib获取参数
-
-首先我们来写一个公共的方法,可以返回一个net.sf.json.JSONObject对象,具体代码如下:
-/**
- * 读取请求参数转换JSONObject对象
- *
- * @param request HttpServletRequest 对象
- * @return json格式的String对象
- * @throws Exception
- */
-@SuppressWarnings("unchecked")
-protected JSONObject readJson(HttpServletRequest request) throws Exception {
- JSONObject jsonObject = new JSONObject();
- try {
- Map parameterMap = request.getParameterMap();
- // 通过循环遍历的方式获得key和value并set到JSONObject中
- Iterator paIter = parameterMap.keySet().iterator();
- while (paIter.hasNext()) {
- String key = paIter.next().toString();
- String[] values = (String[])parameterMap.get(key);
- jsonObject.accumulate(key, values[0]);
- }
- log.debug("从客户端获得json=" + jsonObject.toString());
- } catch (Exception e) {
- log.error("获取json数据出错,错误信息如下:nt" + e.getMessage());
- e.printStackTrace();
- throw e;
- }
- return jsonObject;
-}
-通过这个方法我们可以获得一个JSONObject对象,然后就可以通过key获得对应的value;
-
-2、登录处理Action
-public ActionForward login(ActionMapping mapping, ActionForm actionForm,
- HttpServletRequest request,HttpServletResponse response) throws Exception {
- JSONObject jsonObject = readJson(request);
- String name = jsonObject.getString("loginName");
- String pass = jsonObject.getString("password");
- try {
- int loginFlag = userManager.validLogin(name, pass);
- if (loginFlag == UserManager.LOGIN_SUCCESS) {
- User user = userManager.getUserByNameAndPass(name, pass);
- UserUtil.saveUser2Session(user, request);
- log.info("用户<" + user.getUserName()
- + ",ip=" + request.getRemoteAddr() + ">登录系统");
- print(response, RESBONSE_SUCCESS);
- } else if (loginFlag == UserManager.LOGIN_FAIL) {
- print(response, RESBONSE_ERROR);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
-}
-解释:
-
-在34行我们通过刚刚准备好的readJson方法获得一个JSONObject对象,接下来通过key获得用户名和密码,接下来就是业务逻辑的验证工作了,通过后我们向前台返回请求结果。
-我们还需要一个小方法向前台写结果,如上面44、46行
-protected void print(HttpServletResponse response, String info) throws IOException {
- try {
- response.getWriter().print(info);
- } catch (IOException e) {
- e.printStackTrace();
- throw e;
- }
-}
-这里有一点要说明,在获得输出流的时候有个小插曲,我在开发的时候使用的tomcat5.5.26版本,
-当时的写法为:
-response.getOutputStream().print(info);
-后来源码开源后一个网友使用的tomcat6版本,说系统不能正常运行,后来他查到了原因,因为获得输出流时出了问题,
-改成getWriter就没有问题了,集体也没有搞清除为什么会是这样……
-基于java开发时会使用struts,struts需要返回一个ActionMapping对象,但是在ajax请求不需要返回特定页面,因为根本没有跳转页面的动作,解决办法很简单,直接return null就可以了
-
-输出结果后jQuery的ajax的success方法就接收到了请求结果,然后就可以根据结果处理业务逻辑了O(∩_∩)O~
-
-OK,到此整个请求结束,有不明白的请留言或者到“关于”中联系我
-
-注:本文为原创文章,转载请注明来自 http://www.wsria.com/archives/300
-作者:www.wsria.com
+---
+title: "实例解析java + jQuery + json工作过程(登录)"
+wordpress_id: 300
+wordpress_url: http://www.wsria.com/?p=300
+date: 2009-02-24 21:55:29 +08:00
+categories: jquery
+tags:
+ - json
+ - jqury
+ - java
+ - struts
+---
+本文主要讲解在java环境下使用jQuery进行JSON数据传送的交互过程
+
+参考根据作者的账务管理系统(个人版) 源码下载 讲解
+
+
+一、相关技术、工具简介
+
+1、简单介绍一下JSON,JSON是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。已键值对形式表示数据,和java中的Map的数据存储形式相似,具体细节请参考http://www.json.org/json-zh.html。
+
+2、对应后台JSON的数据处理工具json-lib,包含各种格式数据的工具类,比如:JavaBean、数组、集合(Collection)等,参考API文档。
+
+3、jQuery框架中的数据表现形式,如果你熟悉jQuery的话就会发现jQuery的使用的数据传输都是JSON格式,比如我们经常使用的$.ajax方法:
+$.ajax({
+ url : url,
+ data : {
+ id : chkValue
+ },
+ cache : false,
+ dataType : "json",
+ success : function(result){
+ alert(result);
+ }
+);
+其中 {...} 表示的就是JSON格式的数据
+
+二、前台工作方式
+为了能够容易理解以系统登录讲解,最后会以一个实例的方式讲解
+1、登录页面
+代码请参见 http://code.google.com/p/finance-p/source/browse/trunk/login.jsp
+用户名:
+
+
+密码:
+
+2、登录javascript文件 login.js
+/**
+ * 设置表单验证规则
+ */
+function regFormValidator() {
+ $.formValidator.initConfig({formid:"loginForm"});
+ $("#loginName").formValidator({
+ onshow : "请输入用户名",
+ onfocus : "用户名至少2个字,最多4个字"
+ }).inputValidator({
+ min : 1,
+ onerror : "你输入的用户名非法,请确认"
+ });
+
+ $("#password").formValidator({
+ onshow : "请输入密码"
+ }).inputValidator({
+ min : 6,
+ onerror : "密码在6位以上,请确认"
+ });
+}
+
+$(function() {
+ // 注册表单验证插件
+ regFormValidator();
+
+ $('#submit').click(function(){
+ // 验证输入的用户名、密码是否正确
+ var valid = jQuery.formValidator.pageIsValid('1');
+ if (valid) {
+ $(this).attr('value', '正在登录……').attr('disabled', true);
+ } else {
+ return;
+ }
+
+ // 发送请求
+ $.ajax({
+ url : 'login.do',
+ data : { loginName:$('#loginName').val(), password: $('#password').val() },
+ success : function(result){
+ // 根据result返回信息判断是否登录成功
+ if(result && result == 'success') {
+ window.location.href = 'index.jsp';
+ } else {
+ alert('登录失败,用户名或密码错误,请重试!');
+ }
+ }
+ });
+
+ });
+});
+这样当点击“登录”按钮的时候触发ajax请求:
+
+ - 验证表单完整性
+ - 发送ajax请求到后台,值通过data键已JSON格式传送至后台
+ - 如果后台返回的result为success时表示登录成功,页面跳转至首页index.jsp
+
+三、后台工作方式
+
+后台要比前台操作复杂一些,以为涉及到数据库、编码或者一些业务逻辑
+
+1、获得请求参数
+
+有两种方式:
+
+ - 通过request.getParameter("key")的方式
+ - 通过json-lib工具包获取
+
+这我们主要讲解怎么通过json-lib获取参数
+
+首先我们来写一个公共的方法,可以返回一个net.sf.json.JSONObject对象,具体代码如下:
+/**
+ * 读取请求参数转换JSONObject对象
+ *
+ * @param request HttpServletRequest 对象
+ * @return json格式的String对象
+ * @throws Exception
+ */
+@SuppressWarnings("unchecked")
+protected JSONObject readJson(HttpServletRequest request) throws Exception {
+ JSONObject jsonObject = new JSONObject();
+ try {
+ Map parameterMap = request.getParameterMap();
+ // 通过循环遍历的方式获得key和value并set到JSONObject中
+ Iterator paIter = parameterMap.keySet().iterator();
+ while (paIter.hasNext()) {
+ String key = paIter.next().toString();
+ String[] values = (String[])parameterMap.get(key);
+ jsonObject.accumulate(key, values[0]);
+ }
+ log.debug("从客户端获得json=" + jsonObject.toString());
+ } catch (Exception e) {
+ log.error("获取json数据出错,错误信息如下:nt" + e.getMessage());
+ e.printStackTrace();
+ throw e;
+ }
+ return jsonObject;
+}
+通过这个方法我们可以获得一个JSONObject对象,然后就可以通过key获得对应的value;
+
+2、登录处理Action
+public ActionForward login(ActionMapping mapping, ActionForm actionForm,
+ HttpServletRequest request,HttpServletResponse response) throws Exception {
+ JSONObject jsonObject = readJson(request);
+ String name = jsonObject.getString("loginName");
+ String pass = jsonObject.getString("password");
+ try {
+ int loginFlag = userManager.validLogin(name, pass);
+ if (loginFlag == UserManager.LOGIN_SUCCESS) {
+ User user = userManager.getUserByNameAndPass(name, pass);
+ UserUtil.saveUser2Session(user, request);
+ log.info("用户<" + user.getUserName()
+ + ",ip=" + request.getRemoteAddr() + ">登录系统");
+ print(response, RESBONSE_SUCCESS);
+ } else if (loginFlag == UserManager.LOGIN_FAIL) {
+ print(response, RESBONSE_ERROR);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+}
+解释:
+
+在34行我们通过刚刚准备好的readJson方法获得一个JSONObject对象,接下来通过key获得用户名和密码,接下来就是业务逻辑的验证工作了,通过后我们向前台返回请求结果。
+我们还需要一个小方法向前台写结果,如上面44、46行
+protected void print(HttpServletResponse response, String info) throws IOException {
+ try {
+ response.getWriter().print(info);
+ } catch (IOException e) {
+ e.printStackTrace();
+ throw e;
+ }
+}
+这里有一点要说明,在获得输出流的时候有个小插曲,我在开发的时候使用的tomcat5.5.26版本,
+当时的写法为:
+response.getOutputStream().print(info);
+后来源码开源后一个网友使用的tomcat6版本,说系统不能正常运行,后来他查到了原因,因为获得输出流时出了问题,
+改成getWriter就没有问题了,集体也没有搞清除为什么会是这样……
+基于java开发时会使用struts,struts需要返回一个ActionMapping对象,但是在ajax请求不需要返回特定页面,因为根本没有跳转页面的动作,解决办法很简单,直接return null就可以了
+
+输出结果后jQuery的ajax的success方法就接收到了请求结果,然后就可以根据结果处理业务逻辑了O(∩_∩)O~
+
+OK,到此整个请求结束,有不明白的请留言或者到“关于”中联系我
+
+注:本文为原创文章,转载请注明来自 http://www.wsria.com/archives/300
+作者:www.wsria.com
diff --git a/_posts/2009-02-26-custom-loading-picture.markdown b/_posts/2009-02-26-custom-loading-picture.markdown
index f62c7d8d..2ec379a2 100644
--- a/_posts/2009-02-26-custom-loading-picture.markdown
+++ b/_posts/2009-02-26-custom-loading-picture.markdown
@@ -1,10 +1,9 @@
---
-layout: post
title: "自己动手定制ajax loading图片"
wordpress_id: 375
wordpress_url: http://www.wsria.com/?p=375
date: 2009-02-26 23:31:34 +08:00
-category: ajax
+categories: ajax
tags:
- ajax
- 图片
diff --git a/_posts/2009-02-28-java-jquery-ajax-json-login.markdown b/_posts/2009-02-28-java-jquery-ajax-json-login.markdown
index 9750fedf..7cc6da1b 100644
--- a/_posts/2009-02-28-java-jquery-ajax-json-login.markdown
+++ b/_posts/2009-02-28-java-jquery-ajax-json-login.markdown
@@ -1,161 +1,160 @@
----
-layout: post
-title: "实例解析java + jQuery + json工作过程(获取JSON数据)"
-wordpress_id: 369
-wordpress_url: http://www.wsria.com/?p=369
-date: 2009-02-28 18:39:27 +08:00
-category: jquery
-tags:
- - jquery
- - json
- - struts
----
-前天刚刚写的一篇关于《实例解析java + ajax(jQuery) + json工作过程(登录)》的文章引起了网友们的关注和好评,
-
-自从本站的账务管理系统(个人版)开源 以后很多网友询问系统的实现方式,我一一解释……,为此今天写文章详细讲解系统功能的实现细节。
-
-以本站的开源项目账务管理系统的“债务人”模块为例子讲解
-一、效果预览
-
-二、实现方式
-基本思想就是绑定列表中的人员名称触发事件,获得当前人员的ID发送ajax请求到后台,后台根据ID查询详细信息,返回JSON数据结果至前台,前台通过对话框组件显示人员详细
-1、绑定click事件到列表的人员名称
-在项目中的iouser/js/iouser.js文件中有这样一个方法:
-/**
- * 点击名称弹出详细
- */
-function regShowDetail() {
- $("span[name=iouid]").unbind('click').bind('click', function(){
- showDetail($(this).parent().parent().find('input[name=chk]').val());
- });
-}
-通过regShowDetail绑定了点击人员时执行showDetail的事件,
-$(this).parent().parent().find('input[name=chk]').val()
-//上面这句话就是获得列表左侧的复选框的value值以便传送给后台
-
- - 下面介绍一下showDetail方法的功能实现:
-
- * 查看用户详细资料
- * @param {} userId 用户ID
- */
-function showDetail(userId) {
- // 创建一个对话框组件
- var dialog = $.weeboxs.open('showDetail.html', {
- title: '正在加载用户信息……',
- contentType: 'ajax',
- width: 600,
- height: 350,
- animate: true,
- clickClose: false,
- type: 'wee',
- showOk: false,
- cancelBtnName: '关 闭',
- onopen: innerShowDetail
- });
-
- //内部函数,实现债务人详细信息的载入、设置值
- function innerShowDetail() {
- // 获得JSON格式的数据
- $.getJSON('load.do',{id : userId}, function(json) {
- // 根据key设置value
- for (key in json) {
- if(key == 'id'){
- $('#detailDiv #' + key).val(json[key]);
- } else {
- if(json[key] == ''){
- // 没有值设置为空
- $('#detailDiv #' + key).html('?');
- } else if(key == 'sex'){
- $('#detailDiv #' + key).html(json[key] == '0' ? '女' : '男');
- } else if(key == 'group'){
- if(json[key] != null) {
- $('#detailDiv #' + key).html(json[key]['groupName']);
- }
- } else {
- $('#detailDiv #' + key).html(json[key]);
- }
- }
- }
-
- //设置对话框标题和内容
- $('#detailDiv').removeAttr('class');
- dialog.setTitle('查看人员[' + json['userName'] + ']详细资料');
- dialog.setContent($('#detailDiv').html());
- });
- }
-}
-
- - showDetail方法首先打开一个对话框组件 加载一个静态的模板showDetail.html
-
- - 文件中的ID都是根据信息点命名的,这样便于通过ID设置值
-
-
- - 通过路径load.do 请求后台查询人员详细,后台处理类为net.yanhl.iouser.action.IOUserAction的loadUser()方法,代码请点击这里查看
-
- - 怎么查询一个POJO对象就介绍了,重点说明怎么返回JSON格式的数据
- - 这里还是使用java语言使用的JSON工具json-lib,关于json-lib的资料上篇文章也已介绍,这里不再重复;
-
// 获取一个Iouser对象,包含债务人的信息
-Iouser user = (Iouser) getBaseManager().get(Iouser.class, iouserId);
-
-//使用json-lib工具把一个POJO对象解析为一个JSON格式数据
-JSONObject jsonObject = JSONObject.fromObject(user, config);
-
-//向前台发送结果集
-print(response, jsonObject.toString());
-最中返回的结果集如下:
-{
-"age" : 56,
-"companyAddress" : "32",
-"companyName" : "未知",
-"companyPhone" : "--",
-"companyZip" : "",
-"createDate" : null,
-"creatorId" : 1,
-"group" : {
-"childSize" : 0,
-"createDate" : {
-"date" : 27,
-"day" : 6,
-"hours" : 0,
-"minutes" : 0,
-"month" : 11,
-"nanos" : 0,
-"seconds" : 0,
-"time" : 1230307200000,
-"timezoneOffset" : -480,
-"year" : 108
-},
-"creatorId" : 1,
-"groupName" : "商务",
-"id" : 33,
-"orderNum" : 0,
-"remark" : ""
-},
-"homeAddress" : "香港九龙",
-"homePhone" : "",
-"homeZip" : "",
-"id" : 12,
-"mobilePhone" : "15856453456",
-"orderNum" : 0,
-"remark" : "香港富豪",
-"sex" : "1",
-"userName" : "李嘉诚"
-}
-
-
-
- - 前台获得了结果集之后就可以根据key获得value来设置详细页面的内容了,代码如下:
-
for (key in json) {
- if(key == 'id'){
- $('#detailDiv #' + key).val(json[key]);
- } else {
- $('#detailDiv #' + key).val(json[key]);
- }
-}
-至此就是我们刚刚看到的效果了,是不是很简单O(∩_∩)O~
-
-附:
-
+---
+title: "实例解析java + jQuery + json工作过程(获取JSON数据)"
+wordpress_id: 369
+wordpress_url: http://www.wsria.com/?p=369
+date: 2009-02-28 18:39:27 +08:00
+categories: jquery
+tags:
+ - jquery
+ - json
+ - struts
+---
+前天刚刚写的一篇关于《实例解析java + ajax(jQuery) + json工作过程(登录)》的文章引起了网友们的关注和好评,
+
+自从本站的账务管理系统(个人版)开源 以后很多网友询问系统的实现方式,我一一解释……,为此今天写文章详细讲解系统功能的实现细节。
+
+以本站的开源项目账务管理系统的“债务人”模块为例子讲解
+一、效果预览
+
+二、实现方式
+基本思想就是绑定列表中的人员名称触发事件,获得当前人员的ID发送ajax请求到后台,后台根据ID查询详细信息,返回JSON数据结果至前台,前台通过对话框组件显示人员详细
+1、绑定click事件到列表的人员名称
+在项目中的iouser/js/iouser.js文件中有这样一个方法:
+/**
+ * 点击名称弹出详细
+ */
+function regShowDetail() {
+ $("span[name=iouid]").unbind('click').bind('click', function(){
+ showDetail($(this).parent().parent().find('input[name=chk]').val());
+ });
+}
+通过regShowDetail绑定了点击人员时执行showDetail的事件,
+$(this).parent().parent().find('input[name=chk]').val()
+//上面这句话就是获得列表左侧的复选框的value值以便传送给后台
+
+ - 下面介绍一下showDetail方法的功能实现:
+
+ * 查看用户详细资料
+ * @param {} userId 用户ID
+ */
+function showDetail(userId) {
+ // 创建一个对话框组件
+ var dialog = $.weeboxs.open('showDetail.html', {
+ title: '正在加载用户信息……',
+ contentType: 'ajax',
+ width: 600,
+ height: 350,
+ animate: true,
+ clickClose: false,
+ type: 'wee',
+ showOk: false,
+ cancelBtnName: '关 闭',
+ onopen: innerShowDetail
+ });
+
+ //内部函数,实现债务人详细信息的载入、设置值
+ function innerShowDetail() {
+ // 获得JSON格式的数据
+ $.getJSON('load.do',{id : userId}, function(json) {
+ // 根据key设置value
+ for (key in json) {
+ if(key == 'id'){
+ $('#detailDiv #' + key).val(json[key]);
+ } else {
+ if(json[key] == ''){
+ // 没有值设置为空
+ $('#detailDiv #' + key).html('?');
+ } else if(key == 'sex'){
+ $('#detailDiv #' + key).html(json[key] == '0' ? '女' : '男');
+ } else if(key == 'group'){
+ if(json[key] != null) {
+ $('#detailDiv #' + key).html(json[key]['groupName']);
+ }
+ } else {
+ $('#detailDiv #' + key).html(json[key]);
+ }
+ }
+ }
+
+ //设置对话框标题和内容
+ $('#detailDiv').removeAttr('class');
+ dialog.setTitle('查看人员[' + json['userName'] + ']详细资料');
+ dialog.setContent($('#detailDiv').html());
+ });
+ }
+}
+
+ - showDetail方法首先打开一个对话框组件 加载一个静态的模板showDetail.html
+
+ - 文件中的ID都是根据信息点命名的,这样便于通过ID设置值
+
+
+ - 通过路径load.do 请求后台查询人员详细,后台处理类为net.yanhl.iouser.action.IOUserAction的loadUser()方法,代码请点击这里查看
+
+ - 怎么查询一个POJO对象就介绍了,重点说明怎么返回JSON格式的数据
+ - 这里还是使用java语言使用的JSON工具json-lib,关于json-lib的资料上篇文章也已介绍,这里不再重复;
+
// 获取一个Iouser对象,包含债务人的信息
+Iouser user = (Iouser) getBaseManager().get(Iouser.class, iouserId);
+
+//使用json-lib工具把一个POJO对象解析为一个JSON格式数据
+JSONObject jsonObject = JSONObject.fromObject(user, config);
+
+//向前台发送结果集
+print(response, jsonObject.toString());
+最中返回的结果集如下:
+{
+"age" : 56,
+"companyAddress" : "32",
+"companyName" : "未知",
+"companyPhone" : "--",
+"companyZip" : "",
+"createDate" : null,
+"creatorId" : 1,
+"group" : {
+"childSize" : 0,
+"createDate" : {
+"date" : 27,
+"day" : 6,
+"hours" : 0,
+"minutes" : 0,
+"month" : 11,
+"nanos" : 0,
+"seconds" : 0,
+"time" : 1230307200000,
+"timezoneOffset" : -480,
+"year" : 108
+},
+"creatorId" : 1,
+"groupName" : "商务",
+"id" : 33,
+"orderNum" : 0,
+"remark" : ""
+},
+"homeAddress" : "香港九龙",
+"homePhone" : "",
+"homeZip" : "",
+"id" : 12,
+"mobilePhone" : "15856453456",
+"orderNum" : 0,
+"remark" : "香港富豪",
+"sex" : "1",
+"userName" : "李嘉诚"
+}
+
+
+
+ - 前台获得了结果集之后就可以根据key获得value来设置详细页面的内容了,代码如下:
+
for (key in json) {
+ if(key == 'id'){
+ $('#detailDiv #' + key).val(json[key]);
+ } else {
+ $('#detailDiv #' + key).val(json[key]);
+ }
+}
+至此就是我们刚刚看到的效果了,是不是很简单O(∩_∩)O~
+
+附:
+
diff --git a/_posts/2009-03-01-hr-tell-you-how-to-resume.markdown b/_posts/2009-03-01-hr-tell-you-how-to-resume.markdown
index f25ba949..a8320e99 100644
--- a/_posts/2009-03-01-hr-tell-you-how-to-resume.markdown
+++ b/_posts/2009-03-01-hr-tell-you-how-to-resume.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "HR教你怎么投简历"
wordpress_id: 412
wordpress_url: http://www.wsria.com/?p=412
diff --git a/_posts/2009-03-02-jquery-plugin-nyroModal.markdown b/_posts/2009-03-02-jquery-plugin-nyroModal.markdown
index 8134fa38..d4b2d858 100644
--- a/_posts/2009-03-02-jquery-plugin-nyroModal.markdown
+++ b/_posts/2009-03-02-jquery-plugin-nyroModal.markdown
@@ -1,24 +1,23 @@
----
-layout: post
-title: "jQuery.plugin——强大的遮罩层(nyroModal)"
-wordpress_id: 429
-wordpress_url: http://www.wsria.com/?p=429
-date: 2009-03-02 21:57:43 +08:00
-category: jquery
-tags:
- - 遮罩
- - jquery
----
-在cssrain那里看到的,特转载过来分享给大家;效果做的很华丽,给用户柔和的感觉,比blockUI还要好
-强大的 遮罩层, 它包括以下功能:
-
- - 以ajax远程加载内容
- - 以ajax加载内容
- - 显示图片
- - 对话框
- - iframe
- - 等等……
-
-
-演示:http://nyromodal.nyrodev.com/
-[download#18#format=1]
+---
+title: "jQuery.plugin——强大的遮罩层(nyroModal)"
+wordpress_id: 429
+wordpress_url: http://www.wsria.com/?p=429
+date: 2009-03-02 21:57:43 +08:00
+categories: jquery
+tags:
+ - 遮罩
+ - jquery
+---
+在cssrain那里看到的,特转载过来分享给大家;效果做的很华丽,给用户柔和的感觉,比blockUI还要好
+强大的 遮罩层, 它包括以下功能:
+
+ - 以ajax远程加载内容
+ - 以ajax加载内容
+ - 显示图片
+ - 对话框
+ - iframe
+ - 等等……
+
+
+演示:http://nyromodal.nyrodev.com/
+[download#18#format=1]
diff --git a/_posts/2009-03-11-ie-debug-tool-fullsource.markdown b/_posts/2009-03-11-ie-debug-tool-fullsource.markdown
index abf687dc..f72a43ec 100644
--- a/_posts/2009-03-11-ie-debug-tool-fullsource.markdown
+++ b/_posts/2009-03-11-ie-debug-tool-fullsource.markdown
@@ -1,10 +1,9 @@
---
-layout: post
title: "IE浏览器下的JS实用调试小工具——fullsource(2K)"
wordpress_id: 461
wordpress_url: http://www.wsria.com/?p=461
date: 2009-03-11 22:20:09 +08:00
-category: tools
+categories: tools
tags:
- IE
- 工具
diff --git a/_posts/2009-03-25-jquery-one-line-code-create-nine-nine-table.markdown b/_posts/2009-03-25-jquery-one-line-code-create-nine-nine-table.markdown
index ac86735b..b89d3db4 100644
--- a/_posts/2009-03-25-jquery-one-line-code-create-nine-nine-table.markdown
+++ b/_posts/2009-03-25-jquery-one-line-code-create-nine-nine-table.markdown
@@ -1,52 +1,51 @@
----
-layout: post
-title: "一行jQuery代码打印九九乘法表"
-wordpress_id: 471
-wordpress_url: http://www.wsria.com/?p=471
-date: 2009-03-25 19:30:46 +08:00
-category: jquery
-tags:
- - 乘法表
----
-网友西_西_佛用一行代码打印九九乘法表
-展示了jQuery的级联语法,简介且功能强大
-这个程序的要求:不能用if,for,var xx =等常见js代码。只能用jquery的链式代码。
-
-于是,要生成99表,必然要递归。可递归必然有终止的条件,那就得有if(n==0)return这样的
-代码,又是不被允许的。那么jquery怎么才能终止呢?我想到了用find('p:lt(n)'),n<0的时候
-是会终止的。
-
-而bind的使用,纯粹是为了递归循环。我们首先建立一个对象,绑定一个事件,无所谓了,比如error,然后在这个对象最后,triggerHandler一下,就能完成递归了。
-
-这个程序有两个递归循环,外层的是建立九个,内层的是建立9个,在创建p的时候,把99口诀打出来。
-代码如下:
-
-
-$(document).ready(function(){
-
- $("").data('fact',8).css('margin','10px')
- .appendTo(document.body)
- .bind('error',function(){
- $(this).parent().find("div:lt("+ ($(this).data('fact')) +")").eq(0)
- .before($(this).clone(true).data('fact',$(this).data('fact') - 1))
- .unbind('error')
- .append(
- $("").data('fact',$(this).data('fact')).width(20).height(20)
- .css('display','inline').css('margin','10px')
- .appendTo($(this))
- .bind('focus',function(){
- $(this).text(($(this).data('fact') + 1) +
- "x" +
- ($(this).parent().data('fact') + 1) +
- "=" +
- ($(this).data('fact') + 1)*($(this).parent().data('fact') + 1)
- )
- .parent().find("p:lt("+ ($(this).data('fact')) +")").eq(0)
- .before($(this).clone(true).data('fact',$(this).data('fact') - 1))
- .unbind('focus')
- .parent().find("p").eq(0).triggerHandler('focus');
- }).triggerHandler('focus')
- ).parent().find("div").eq(0).triggerHandler('error');
- }).triggerHandler('error');
-});
-
+---
+title: "一行jQuery代码打印九九乘法表"
+wordpress_id: 471
+wordpress_url: http://www.wsria.com/?p=471
+date: 2009-03-25 19:30:46 +08:00
+categories: jquery
+tags:
+ - 乘法表
+---
+网友西_西_佛用一行代码打印九九乘法表
+展示了jQuery的级联语法,简介且功能强大
+这个程序的要求:不能用if,for,var xx =等常见js代码。只能用jquery的链式代码。
+
+于是,要生成99表,必然要递归。可递归必然有终止的条件,那就得有if(n==0)return这样的
+代码,又是不被允许的。那么jquery怎么才能终止呢?我想到了用find('p:lt(n)'),n<0的时候
+是会终止的。
+
+而bind的使用,纯粹是为了递归循环。我们首先建立一个对象,绑定一个事件,无所谓了,比如error,然后在这个对象最后,triggerHandler一下,就能完成递归了。
+
+这个程序有两个递归循环,外层的是建立九个,内层的是建立9个,在创建p的时候,把99口诀打出来。
+代码如下:
+
+
+$(document).ready(function(){
+
+ $("").data('fact',8).css('margin','10px')
+ .appendTo(document.body)
+ .bind('error',function(){
+ $(this).parent().find("div:lt("+ ($(this).data('fact')) +")").eq(0)
+ .before($(this).clone(true).data('fact',$(this).data('fact') - 1))
+ .unbind('error')
+ .append(
+ $("").data('fact',$(this).data('fact')).width(20).height(20)
+ .css('display','inline').css('margin','10px')
+ .appendTo($(this))
+ .bind('focus',function(){
+ $(this).text(($(this).data('fact') + 1) +
+ "x" +
+ ($(this).parent().data('fact') + 1) +
+ "=" +
+ ($(this).data('fact') + 1)*($(this).parent().data('fact') + 1)
+ )
+ .parent().find("p:lt("+ ($(this).data('fact')) +")").eq(0)
+ .before($(this).clone(true).data('fact',$(this).data('fact') - 1))
+ .unbind('focus')
+ .parent().find("p").eq(0).triggerHandler('focus');
+ }).triggerHandler('focus')
+ ).parent().find("div").eq(0).triggerHandler('error');
+ }).triggerHandler('error');
+});
+
diff --git a/_posts/2009-03-29-beutiful-template-made-by-xhtml+css.markdown b/_posts/2009-03-29-beutiful-template-made-by-xhtml+css.markdown
index 878b1f87..76e77c75 100644
--- a/_posts/2009-03-29-beutiful-template-made-by-xhtml+css.markdown
+++ b/_posts/2009-03-29-beutiful-template-made-by-xhtml+css.markdown
@@ -1,10 +1,9 @@
---
-layout: post
title: "推荐国外著名的xhtml+css模板"
wordpress_id: 481
wordpress_url: http://www.wsria.com/?p=481
date: 2009-03-29 01:44:28 +08:00
-category: ria
+categories: ria
tags:
- 模板
---
diff --git a/_posts/2009-04-04-6-use-ajax-and-6-dont-use-ajax.markdown b/_posts/2009-04-04-6-use-ajax-and-6-dont-use-ajax.markdown
index 588cf3b2..fefe4dbf 100644
--- a/_posts/2009-04-04-6-use-ajax-and-6-dont-use-ajax.markdown
+++ b/_posts/2009-04-04-6-use-ajax-and-6-dont-use-ajax.markdown
@@ -1,68 +1,67 @@
----
-layout: post
-title: "6个你必须用到AJAX的地方与6个不必用到的地方"
-wordpress_id: 505
-wordpress_url: http://www.wsria.com/?p=505
-date: 2009-04-04 22:27:38 +08:00
-category: ria
-tags:
- - ajax
----
-用ajax开发系统、网站确实好给客户带来了很大的方便,也降低了服务器的压力,但是我们在开发的时候不能盲目的使用ajax,不是所有的情况都适合使用ajax的,下面是从CSDN上面看到的,分享给大家。
-
-
-
-下面是当前网页应用程序应该出现的地方:
-
- - 基于表单的交互
-
-表单是很慢的,非常慢。尝试编辑位于del.icio.us上面的一个书签?点击编辑链接打开一个编辑书签的表单页面,然后编辑你的内容并点击提交 按钮等待整个提交过程结束,最后返回上一页并向下滚动到你刚才编辑的书签那里查看内容是否已经正确更改。那AJAX呢?点击编辑链接马上开始更改标签内 容,点击提交按钮开始异步传输标签编辑的内容并立即看到更改后的内容而无需重载整个页面。
-
- - 深层树状导航
-
-总而言之,带有深层树状导航的应用程序通常是一个噩梦。在大多数情况中简单平直的拓扑结构以及搜索/标记可以很好的工作。但是如果一个 应用程序真正使用深层树状导航,使用JavaScript来管理拓扑ui(user interface用户接口),则使用Ajax懒加载深层数据可以降低服务器的负载。举例来说,为了阅读一个只有一行的结果来加载整个一个新页面是非常耗时的。
-
- - 实时用户对用户通讯
-
-在一个允许用户创建实时讨论的信息公 告系统中,迫使用户一次又一次的更新完页面看到答复是非常愚蠢的。回复应该是实时的,用户不应被迫总是去痴迷于刷新操作。即使是gmail这个已经对以前 像hotmail/yahoo mail的收件箱刷新,刷新收件箱标记的操作有所改进,也并没有充分的使用Ajax的功能来提示有新邮件到达。
-
- - 投票、是否选择、等级评价
-
-如果Ajax提交过程没有一个协调的UI提示是非常糟糕的,通过使用Ajax来提交一个调查或是否选择可以减少提交过程等待的痛苦。通过减少点击的 等待时间,Ajax应用程序变得越来越有交互性-如果要用40秒来提交一个投票,除非非常在意的话大多数人会选择放弃。如果只花1秒呢,非常大比例的人会 乐于参加投票的。(我在Netflix versus有2008张电影投票在IMDb.com有210张电影投票)
-
- - 过滤和复杂数据操作
-
-应用一个过滤、按日期排序、按日期和姓名排序、打开或关闭过滤器等等。任何一种高交换型操作应该交给JavaScript来处理而不是通过向服务器来提交一系列的请求。在查找或者操作大量数据的时候带来的视图上的改变最多不会超过30秒,Ajax真的使这些操作加速了。
-
- - 普通录入时的提示/自动补齐
-
-一些软件/JavaScript是擅长于帮助用户完成键入相同的文字或可以预测的文字的工作的。在del.icio.us 和 Gmail 中该功能是非常有益的,可以用来快速增加标记/email等。
-对于一个频繁使用的应用程序诸如网页邮件客户端或博客阅读器来说,用户有充足的时间来学习如何使用新的UI概念但是他们却无法接受一个非常缓慢 的反应速度。这种应用为Ajax变的更加普及起到了一个完美的杠杆作用。随着用户使用频率的增加,更多的Ajax部件应该加强用户的使用体验。
-
-但是对于网页应用程序来说,把每件事甚至任何事都用JavaScript来实现也是没有意义的。Ajax只是针对一些特定的环境才能带来显著的 帮助。在Ajax出现之前网页应用程序已经可以工作的很好了并且目前在网页开发中Ajax还存在着许多的缺陷和缺点。就算不从服务器端取得一个异步的信息 数据流一个平直的html网页日志也可以工作的很好。对于文档或文档之间的跳转来说,老旧的纯HTML仍然是最好的选择。简单或很少使用的应用程序就算不 用JavaScript同样可以很好的工作。
-
-下面是一些不应该用到Ajax的地方:
-
- - 简单的表单
-
-就算表单是Ajax技术的最大受益人,一个简单内容的表单,或提交订货单,或一次性的很少用到的表单都不应该使用以Ajax驱动的表单提交机制。总的来说,如果一个表单不是很长用,或已经工作的很好,那么就算使用Ajax也没有什么帮助。
-
- - 搜索
-
-实时搜索带来的痛苦要远大于他带来的帮助。这就是为什么Google Suggest还处于beta测试而并没有放在主页上的原因。在Start.com Live.com上搜索的时候你是不能使用返回按钮来查看上一次搜索或返回上一页的。或许还没有人来完成这项工作,但是完成这个工作应该是很困难的至少是 不太明知的或者会因此带来更多的麻烦。(译注:现在已经有很多开源的框架可以实现历史记录功能)
-
- - 基本导航
-
-总的来说,使用Ajax为一个基础的网站/程序做导航是一个可怕的念头。谁会把用来使自己的程序变的更好的时间花在编写代码模仿浏览器的行为上面?在基础页面中导航的操作中JavaScript是没有用的。
-
- - 替换大量的信息
-
-Ajax可以不用整页刷新来动态更新页面中改变的一小部分。但是如果一页上的大部分内容都需要更新,那为什么不从服务器那里获得一个新页面呢?
-
- - 显示操作
-
-虽然看上去Ajax是一个纯UI技术,其实不是这样的。他实际上是一个数据同步、操作、传输的技术。要想得到一个稳定的干净的网页程序,不使用 Ajax/JavaScript来直接完成用户接口是明智的。JavaScript可以分散分布并简单的操作XHTML/HTML DOM,根据CSS规则来决定如何让UI显示数据。
-
- - 无用的网页小部件
-
-滑块选择控件、拖拽控件、弹性控件(此处原文为bouncies,不知指为何物?)、鼠标样式、天气预报控件,这些小部件应该可以被更直接的控件代 替或者为了整洁干脆整个去掉。为了选择一种颜色,也许滑块选择控件可以选择一个正确的阴影颜色,但是在一个商店中选择一个价格,使用滑块选择控件选到分这 个单位对于用户来说有点过分。
+---
+title: "6个你必须用到AJAX的地方与6个不必用到的地方"
+wordpress_id: 505
+wordpress_url: http://www.wsria.com/?p=505
+date: 2009-04-04 22:27:38 +08:00
+categories: ria
+tags:
+ - ajax
+---
+用ajax开发系统、网站确实好给客户带来了很大的方便,也降低了服务器的压力,但是我们在开发的时候不能盲目的使用ajax,不是所有的情况都适合使用ajax的,下面是从CSDN上面看到的,分享给大家。
+
+
+
+下面是当前网页应用程序应该出现的地方:
+
+ - 基于表单的交互
+
+表单是很慢的,非常慢。尝试编辑位于del.icio.us上面的一个书签?点击编辑链接打开一个编辑书签的表单页面,然后编辑你的内容并点击提交 按钮等待整个提交过程结束,最后返回上一页并向下滚动到你刚才编辑的书签那里查看内容是否已经正确更改。那AJAX呢?点击编辑链接马上开始更改标签内 容,点击提交按钮开始异步传输标签编辑的内容并立即看到更改后的内容而无需重载整个页面。
+
+ - 深层树状导航
+
+总而言之,带有深层树状导航的应用程序通常是一个噩梦。在大多数情况中简单平直的拓扑结构以及搜索/标记可以很好的工作。但是如果一个 应用程序真正使用深层树状导航,使用JavaScript来管理拓扑ui(user interface用户接口),则使用Ajax懒加载深层数据可以降低服务器的负载。举例来说,为了阅读一个只有一行的结果来加载整个一个新页面是非常耗时的。
+
+ - 实时用户对用户通讯
+
+在一个允许用户创建实时讨论的信息公 告系统中,迫使用户一次又一次的更新完页面看到答复是非常愚蠢的。回复应该是实时的,用户不应被迫总是去痴迷于刷新操作。即使是gmail这个已经对以前 像hotmail/yahoo mail的收件箱刷新,刷新收件箱标记的操作有所改进,也并没有充分的使用Ajax的功能来提示有新邮件到达。
+
+ - 投票、是否选择、等级评价
+
+如果Ajax提交过程没有一个协调的UI提示是非常糟糕的,通过使用Ajax来提交一个调查或是否选择可以减少提交过程等待的痛苦。通过减少点击的 等待时间,Ajax应用程序变得越来越有交互性-如果要用40秒来提交一个投票,除非非常在意的话大多数人会选择放弃。如果只花1秒呢,非常大比例的人会 乐于参加投票的。(我在Netflix versus有2008张电影投票在IMDb.com有210张电影投票)
+
+ - 过滤和复杂数据操作
+
+应用一个过滤、按日期排序、按日期和姓名排序、打开或关闭过滤器等等。任何一种高交换型操作应该交给JavaScript来处理而不是通过向服务器来提交一系列的请求。在查找或者操作大量数据的时候带来的视图上的改变最多不会超过30秒,Ajax真的使这些操作加速了。
+
+ - 普通录入时的提示/自动补齐
+
+一些软件/JavaScript是擅长于帮助用户完成键入相同的文字或可以预测的文字的工作的。在del.icio.us 和 Gmail 中该功能是非常有益的,可以用来快速增加标记/email等。
+对于一个频繁使用的应用程序诸如网页邮件客户端或博客阅读器来说,用户有充足的时间来学习如何使用新的UI概念但是他们却无法接受一个非常缓慢 的反应速度。这种应用为Ajax变的更加普及起到了一个完美的杠杆作用。随着用户使用频率的增加,更多的Ajax部件应该加强用户的使用体验。
+
+但是对于网页应用程序来说,把每件事甚至任何事都用JavaScript来实现也是没有意义的。Ajax只是针对一些特定的环境才能带来显著的 帮助。在Ajax出现之前网页应用程序已经可以工作的很好了并且目前在网页开发中Ajax还存在着许多的缺陷和缺点。就算不从服务器端取得一个异步的信息 数据流一个平直的html网页日志也可以工作的很好。对于文档或文档之间的跳转来说,老旧的纯HTML仍然是最好的选择。简单或很少使用的应用程序就算不 用JavaScript同样可以很好的工作。
+
+下面是一些不应该用到Ajax的地方:
+
+ - 简单的表单
+
+就算表单是Ajax技术的最大受益人,一个简单内容的表单,或提交订货单,或一次性的很少用到的表单都不应该使用以Ajax驱动的表单提交机制。总的来说,如果一个表单不是很长用,或已经工作的很好,那么就算使用Ajax也没有什么帮助。
+
+ - 搜索
+
+实时搜索带来的痛苦要远大于他带来的帮助。这就是为什么Google Suggest还处于beta测试而并没有放在主页上的原因。在Start.com Live.com上搜索的时候你是不能使用返回按钮来查看上一次搜索或返回上一页的。或许还没有人来完成这项工作,但是完成这个工作应该是很困难的至少是 不太明知的或者会因此带来更多的麻烦。(译注:现在已经有很多开源的框架可以实现历史记录功能)
+
+ - 基本导航
+
+总的来说,使用Ajax为一个基础的网站/程序做导航是一个可怕的念头。谁会把用来使自己的程序变的更好的时间花在编写代码模仿浏览器的行为上面?在基础页面中导航的操作中JavaScript是没有用的。
+
+ - 替换大量的信息
+
+Ajax可以不用整页刷新来动态更新页面中改变的一小部分。但是如果一页上的大部分内容都需要更新,那为什么不从服务器那里获得一个新页面呢?
+
+ - 显示操作
+
+虽然看上去Ajax是一个纯UI技术,其实不是这样的。他实际上是一个数据同步、操作、传输的技术。要想得到一个稳定的干净的网页程序,不使用 Ajax/JavaScript来直接完成用户接口是明智的。JavaScript可以分散分布并简单的操作XHTML/HTML DOM,根据CSS规则来决定如何让UI显示数据。
+
+ - 无用的网页小部件
+
+滑块选择控件、拖拽控件、弹性控件(此处原文为bouncies,不知指为何物?)、鼠标样式、天气预报控件,这些小部件应该可以被更直接的控件代 替或者为了整洁干脆整个去掉。为了选择一种颜色,也许滑块选择控件可以选择一个正确的阴影颜色,但是在一个商店中选择一个价格,使用滑块选择控件选到分这 个单位对于用户来说有点过分。
diff --git a/_posts/2009-04-04-blog-wsria-pr-3-of-10.markdown b/_posts/2009-04-04-blog-wsria-pr-3-of-10.markdown
index 2651ce6a..363db772 100644
--- a/_posts/2009-04-04-blog-wsria-pr-3-of-10.markdown
+++ b/_posts/2009-04-04-blog-wsria-pr-3-of-10.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "庆祝博客PageRank提升到了3/10"
wordpress_id: 502
wordpress_url: http://www.wsria.com/?p=502
diff --git a/_posts/2009-04-04-wordcamp-2009-in-shanghai.markdown b/_posts/2009-04-04-wordcamp-2009-in-shanghai.markdown
index 28ceb3c2..4d31cb42 100644
--- a/_posts/2009-04-04-wordcamp-2009-in-shanghai.markdown
+++ b/_posts/2009-04-04-wordcamp-2009-in-shanghai.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "wordcamp 2009 in ShangHai归来"
excerpt: wordcamp 2009 in ShangHai
wordpress_id: 487
diff --git a/_posts/2009-04-21-ie-lose-session.markdown b/_posts/2009-04-21-ie-lose-session.markdown
index 03febbfb..145d6dd5 100644
--- a/_posts/2009-04-21-ie-lose-session.markdown
+++ b/_posts/2009-04-21-ie-lose-session.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "IE中丢失session问题解决办法"
wordpress_id: 510
wordpress_url: http://www.wsria.com/?p=510
diff --git a/_posts/2009-05-05-520.markdown b/_posts/2009-05-05-520.markdown
index 587c2e37..72113ebe 100644
--- a/_posts/2009-05-05-520.markdown
+++ b/_posts/2009-05-05-520.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "2009.5.1~5.3杭州之旅(露营、雨中游西湖)"
wordpress_id: 520
wordpress_url: http://www.wsria.com/?p=520
diff --git a/_posts/2009-05-11-wenchuan-512.markdown b/_posts/2009-05-11-wenchuan-512.markdown
index e743decb..365149dd 100644
--- a/_posts/2009-05-11-wenchuan-512.markdown
+++ b/_posts/2009-05-11-wenchuan-512.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "心系5.12(2009年5.12日 2:28分我们集体默哀3分钟)"
wordpress_id: 535
wordpress_url: http://www.wsria.com/?p=535
diff --git a/_posts/2009-05-23-jquery-optimize-3part.markdown b/_posts/2009-05-23-jquery-optimize-3part.markdown
index 54cb8ab3..fc546556 100644
--- a/_posts/2009-05-23-jquery-optimize-3part.markdown
+++ b/_posts/2009-05-23-jquery-optimize-3part.markdown
@@ -1,10 +1,9 @@
---
-layout: post
title: "jQuery性能优化指南"
wordpress_id: 555
wordpress_url: http://www.wsria.com/?p=555
date: 2009-05-23 14:54:48 +08:00
-category: jquery
+categories: jquery
tags:
- 性能优化
---
diff --git a/_posts/2009-06-08-wordcamp-tshirt.markdown b/_posts/2009-06-08-wordcamp-tshirt.markdown
index 65f60cae..4041601b 100644
--- a/_posts/2009-06-08-wordcamp-tshirt.markdown
+++ b/_posts/2009-06-08-wordcamp-tshirt.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "夏天到了,终于收到迟来的WordPress T恤了"
wordpress_id: 575
wordpress_url: http://www.wsria.com/?p=575
diff --git a/_posts/2009-06-22-how-to-judge-ajax-request.markdown b/_posts/2009-06-22-how-to-judge-ajax-request.markdown
index 5c5c0e2a..eab5b2b9 100644
--- a/_posts/2009-06-22-how-to-judge-ajax-request.markdown
+++ b/_posts/2009-06-22-how-to-judge-ajax-request.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "如何判断一个请求是否为AJAX请求"
wordpress_id: 582
wordpress_url: http://www.wsria.com/?p=582
diff --git a/_posts/2009-06-22-java-simple-security-use-spring-and-struts.markdown b/_posts/2009-06-22-java-simple-security-use-spring-and-struts.markdown
index 64b3999e..a3b47cd2 100644
--- a/_posts/2009-06-22-java-simple-security-use-spring-and-struts.markdown
+++ b/_posts/2009-06-22-java-simple-security-use-spring-and-struts.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "简单实现在基于Java的AJAX环境下未登录自动跳转流程详解(spring代理struts的action)"
wordpress_id: 588
wordpress_url: http://www.wsria.com/?p=588
diff --git a/_posts/2009-07-01-jquery-gbk-code-problem.markdown b/_posts/2009-07-01-jquery-gbk-code-problem.markdown
index a44a60cc..4c12074e 100644
--- a/_posts/2009-07-01-jquery-gbk-code-problem.markdown
+++ b/_posts/2009-07-01-jquery-gbk-code-problem.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "站点GBK编码下jQuery Ajax中文乱码解决方案"
wordpress_id: 611
wordpress_url: http://www.wsria.com/?p=611
diff --git a/_posts/2009-07-16-ajax-resources-site-miniajax.markdown b/_posts/2009-07-16-ajax-resources-site-miniajax.markdown
index c738c8d5..bd418503 100644
--- a/_posts/2009-07-16-ajax-resources-site-miniajax.markdown
+++ b/_posts/2009-07-16-ajax-resources-site-miniajax.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "推荐一个ajax资源站点"
wordpress_id: 640
wordpress_url: http://www.wsria.com/?p=640
diff --git a/_posts/2009-07-16-weeboxtree.markdown b/_posts/2009-07-16-weeboxtree.markdown
index ada05bc8..92bdfd4f 100644
--- a/_posts/2009-07-16-weeboxtree.markdown
+++ b/_posts/2009-07-16-weeboxtree.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "做了一次集成服务:基于weebox和simpletree的dialogtree诞生了"
wordpress_id: 625
wordpress_url: http://www.wsria.com/?p=625
diff --git a/_posts/2009-07-18-ie6-dead.markdown b/_posts/2009-07-18-ie6-dead.markdown
index a47a0b4d..00120469 100644
--- a/_posts/2009-07-18-ie6-dead.markdown
+++ b/_posts/2009-07-18-ie6-dead.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "Twitter用户发起“拒绝IE6”请愿活动"
wordpress_id: 645
wordpress_url: http://www.wsria.com/?p=645
diff --git a/_posts/2009-07-23-crazy-programmer.markdown b/_posts/2009-07-23-crazy-programmer.markdown
index 871c788c..29de93b7 100644
--- a/_posts/2009-07-23-crazy-programmer.markdown
+++ b/_posts/2009-07-23-crazy-programmer.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "《疯狂程序员》一书中的奥秘"
wordpress_id: 655
wordpress_url: http://www.wsria.com/?p=655
diff --git a/_posts/2009-07-27-jquery-plugin-hialert.markdown b/_posts/2009-07-27-jquery-plugin-hialert.markdown
index a8ee9d80..6cff0a2e 100644
--- a/_posts/2009-07-27-jquery-plugin-hialert.markdown
+++ b/_posts/2009-07-27-jquery-plugin-hialert.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "[推荐]改进的提示插件-jQuery.hiAlerts.1.0"
wordpress_id: 659
wordpress_url: http://www.wsria.com/?p=659
diff --git a/_posts/2009-07-29-jiwai-pause.markdown b/_posts/2009-07-29-jiwai-pause.markdown
index 4bafed7c..abef388b 100644
--- a/_posts/2009-07-29-jiwai-pause.markdown
+++ b/_posts/2009-07-29-jiwai-pause.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "叽歪怎么了?"
wordpress_id: 664
wordpress_url: http://www.wsria.com/?p=664
diff --git a/_posts/2009-07-30-hibernate-mysql-type-mapping.markdown b/_posts/2009-07-30-hibernate-mysql-type-mapping.markdown
index 5d966a69..b2f819e1 100644
--- a/_posts/2009-07-30-hibernate-mysql-type-mapping.markdown
+++ b/_posts/2009-07-30-hibernate-mysql-type-mapping.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "Hibernate的映射类型 hibernate mysql映射类型"
wordpress_id: 667
wordpress_url: http://www.wsria.com/?p=667
diff --git a/_posts/2009-08-04-hibernate-jsonlib-igore-fileds.markdown b/_posts/2009-08-04-hibernate-jsonlib-igore-fileds.markdown
index 0dab69f8..d0169423 100644
--- a/_posts/2009-08-04-hibernate-jsonlib-igore-fileds.markdown
+++ b/_posts/2009-08-04-hibernate-jsonlib-igore-fileds.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "使用hibernate和json-lib时忽略属性和集合"
wordpress_id: 670
wordpress_url: http://www.wsria.com/?p=670
diff --git a/_posts/2009-08-22-22-years-old-of-birthday.markdown b/_posts/2009-08-22-22-years-old-of-birthday.markdown
index b4737319..24f5d7b6 100644
--- a/_posts/2009-08-22-22-years-old-of-birthday.markdown
+++ b/_posts/2009-08-22-22-years-old-of-birthday.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "22岁生日"
wordpress_id: 691
wordpress_url: http://www.wsria.com/?p=691
diff --git a/_posts/2009-10-14-activex-grid-cell-cant-run-in-ie8.markdown b/_posts/2009-10-14-activex-grid-cell-cant-run-in-ie8.markdown
index a71af920..432e51ae 100644
--- a/_posts/2009-10-14-activex-grid-cell-cant-run-in-ie8.markdown
+++ b/_posts/2009-10-14-activex-grid-cell-cant-run-in-ie8.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "备忘:金格、用友CELL不能在IE8下使用的解决办法"
wordpress_id: 713
wordpress_url: http://www.wsria.com/?p=713
diff --git a/_posts/2009-10-24-other-hibernate-and-jsonlib.markdown b/_posts/2009-10-24-other-hibernate-and-jsonlib.markdown
index aa75ea2d..06965cc3 100644
--- a/_posts/2009-10-24-other-hibernate-and-jsonlib.markdown
+++ b/_posts/2009-10-24-other-hibernate-and-jsonlib.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "Json-lib 与 hibernate 共同使用的问题"
wordpress_id: 724
wordpress_url: http://www.wsria.com/?p=724
diff --git a/_posts/2009-11-03-egular-expressions-formula-and-tutorial-recommended.markdown b/_posts/2009-11-03-egular-expressions-formula-and-tutorial-recommended.markdown
index 0946059d..c1603082 100644
--- a/_posts/2009-11-03-egular-expressions-formula-and-tutorial-recommended.markdown
+++ b/_posts/2009-11-03-egular-expressions-formula-and-tutorial-recommended.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "推荐:正则表达式口诀及教程"
wordpress_id: 728
wordpress_url: http://www.wsria.com/?p=728
diff --git a/_posts/2009-11-18-are-you-a-blue-collar-or-white-collar-developer.markdown b/_posts/2009-11-18-are-you-a-blue-collar-or-white-collar-developer.markdown
index f26791a7..bf969153 100644
--- a/_posts/2009-11-18-are-you-a-blue-collar-or-white-collar-developer.markdown
+++ b/_posts/2009-11-18-are-you-a-blue-collar-or-white-collar-developer.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "程序员的学历有多重要"
wordpress_id: 731
wordpress_url: http://www.wsria.com/?p=731
diff --git a/_posts/2009-12-12-the-best-jquery-plugins-of-2009.markdown b/_posts/2009-12-12-the-best-jquery-plugins-of-2009.markdown
index 81f5a4d0..464b135a 100644
--- a/_posts/2009-12-12-the-best-jquery-plugins-of-2009.markdown
+++ b/_posts/2009-12-12-the-best-jquery-plugins-of-2009.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "推荐:2009 年度最佳 jQuery 插件"
wordpress_id: 733
wordpress_url: http://www.wsria.com/?p=733
diff --git a/_posts/2010-01-12-jquery-plugin-week-calendar.markdown b/_posts/2010-01-12-jquery-plugin-week-calendar.markdown
index e1c6e446..703bc3a2 100644
--- a/_posts/2010-01-12-jquery-plugin-week-calendar.markdown
+++ b/_posts/2010-01-12-jquery-plugin-week-calendar.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "推荐:基于jQuery开发仿Google Calendar(jQuery Week Calendar)"
wordpress_id: 762
wordpress_url: http://www.wsria.com/?p=762
diff --git a/_posts/2010-01-15-java-util-date-source.markdown b/_posts/2010-01-15-java-util-date-source.markdown
index c78fdbbd..4a37ef5a 100644
--- a/_posts/2010-01-15-java-util-date-source.markdown
+++ b/_posts/2010-01-15-java-util-date-source.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "分享:Java日期工具类"
wordpress_id: 785
wordpress_url: http://www.wsria.com/?p=785
diff --git a/_posts/2010-01-15-jquery-1.4-released.markdown b/_posts/2010-01-15-jquery-1.4-released.markdown
index a7de685d..46c5ce53 100644
--- a/_posts/2010-01-15-jquery-1.4-released.markdown
+++ b/_posts/2010-01-15-jquery-1.4-released.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "jQuery 1.4 正式版发布啦(14 Days of jQuery)"
wordpress_id: 772
wordpress_url: http://www.wsria.com/?p=772
diff --git a/_posts/2010-01-19-jquery-1.4-api.markdown b/_posts/2010-01-19-jquery-1.4-api.markdown
index 98da6adb..8a290eba 100644
--- a/_posts/2010-01-19-jquery-1.4-api.markdown
+++ b/_posts/2010-01-19-jquery-1.4-api.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "jQuery1.4 API 区别与更新中文版"
wordpress_id: 796
wordpress_url: http://www.wsria.com/?p=796
diff --git a/_posts/2010-01-27-how-to-designe-web2.0.markdown b/_posts/2010-01-27-how-to-designe-web2.0.markdown
index 64ad39a5..c17442fe 100644
--- a/_posts/2010-01-27-how-to-designe-web2.0.markdown
+++ b/_posts/2010-01-27-how-to-designe-web2.0.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "转:关于web2.0网站易用性设计的一些原则"
wordpress_id: 804
wordpress_url: http://www.wsria.com/?p=804
diff --git a/_posts/2010-02-02-shawpy-jquery-1.4.1-api.markdown b/_posts/2010-02-02-shawpy-jquery-1.4.1-api.markdown
index 9965ca3b..ac16bfb8 100644
--- a/_posts/2010-02-02-shawpy-jquery-1.4.1-api.markdown
+++ b/_posts/2010-02-02-shawpy-jquery-1.4.1-api.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "jQuery 1.4.1 中文文档 CHM 版发布"
wordpress_id: 807
wordpress_url: http://www.wsria.com/?p=807
diff --git a/_posts/2010-02-10-sexy-buttons.markdown b/_posts/2010-02-10-sexy-buttons.markdown
index 790f4c42..5ff29bfe 100644
--- a/_posts/2010-02-10-sexy-buttons.markdown
+++ b/_posts/2010-02-10-sexy-buttons.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "Sexy Buttons(Web 按钮[图标]素材)"
wordpress_id: 813
wordpress_url: http://www.wsria.com/?p=813
diff --git a/_posts/2010-02-25-programmer-health.markdown b/_posts/2010-02-25-programmer-health.markdown
index bdae21e2..d22b899e 100644
--- a/_posts/2010-02-25-programmer-health.markdown
+++ b/_posts/2010-02-25-programmer-health.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "[转][推荐]程序员们,请珍爱自己的身体"
wordpress_id: 818
wordpress_url: http://www.wsria.com/?p=818
diff --git a/_posts/2010-03-02-ie6-dead-in-google.markdown b/_posts/2010-03-02-ie6-dead-in-google.markdown
index a72e6e1b..8dad492c 100644
--- a/_posts/2010-03-02-ie6-dead-in-google.markdown
+++ b/_posts/2010-03-02-ie6-dead-in-google.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "IE6浏览器葬礼的背后"
wordpress_id: 914
wordpress_url: http://www.wsria.com/?p=914
diff --git a/_posts/2010-03-02-jquery-effects.markdown b/_posts/2010-03-02-jquery-effects.markdown
index 95909c83..1602ed9a 100644
--- a/_posts/2010-03-02-jquery-effects.markdown
+++ b/_posts/2010-03-02-jquery-effects.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "直逼 Flash 的流畅感:jQuery 运动特效展示"
wordpress_id: 918
wordpress_url: http://www.wsria.com/?p=918
diff --git a/_posts/2010-03-03-how-to-install-oracle11-in-win7.markdown b/_posts/2010-03-03-how-to-install-oracle11-in-win7.markdown
index 302e71a7..9a6842b3 100644
--- a/_posts/2010-03-03-how-to-install-oracle11-in-win7.markdown
+++ b/_posts/2010-03-03-how-to-install-oracle11-in-win7.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "Win7下不能安装Oracle11g解决办法"
wordpress_id: 927
wordpress_url: http://www.wsria.com/?p=927
diff --git a/_posts/2010-03-12-google-pasue-china-business.markdown b/_posts/2010-03-12-google-pasue-china-business.markdown
index 41bff1f5..42c4e922 100644
--- a/_posts/2010-03-12-google-pasue-china-business.markdown
+++ b/_posts/2010-03-12-google-pasue-china-business.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "[转][评论]谷歌重申不过滤搜索结果 做好停止中国业务准备"
wordpress_id: 934
wordpress_url: http://www.wsria.com/?p=934
diff --git a/_posts/2010-04-22-maven-assembly-repeat-classes.markdown b/_posts/2010-04-22-maven-assembly-repeat-classes.markdown
index 44f0dcda..e0013bef 100644
--- a/_posts/2010-04-22-maven-assembly-repeat-classes.markdown
+++ b/_posts/2010-04-22-maven-assembly-repeat-classes.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "Maven下用mvn assembly:assembly打包class文件重复"
wordpress_id: 958
wordpress_url: http://www.wsria.com/?p=958
diff --git a/_posts/2010-04-23-resovle-jqgrid-messy-code.markdown b/_posts/2010-04-23-resovle-jqgrid-messy-code.markdown
index 74ab28c7..d13daeeb 100644
--- a/_posts/2010-04-23-resovle-jqgrid-messy-code.markdown
+++ b/_posts/2010-04-23-resovle-jqgrid-messy-code.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "jqGrid查询中文乱码问题解决办法(2011-11-11)"
wordpress_id: 961
wordpress_url: http://www.wsria.com/?p=961
diff --git a/_posts/2010-05-18-hibernate-a-different-object-with-the-same-identifier-value-was-already-associated-with-the-session.markdown b/_posts/2010-05-18-hibernate-a-different-object-with-the-same-identifier-value-was-already-associated-with-the-session.markdown
index 16763bbe..76a10a66 100644
--- a/_posts/2010-05-18-hibernate-a-different-object-with-the-same-identifier-value-was-already-associated-with-the-session.markdown
+++ b/_posts/2010-05-18-hibernate-a-different-object-with-the-same-identifier-value-was-already-associated-with-the-session.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "解决a different object with the same identifier value was already associated with the session错误"
wordpress_id: 972
wordpress_url: http://www.wsria.com/?p=972
diff --git a/_posts/2010-05-20-15-javascript-web-ui.markdown b/_posts/2010-05-20-15-javascript-web-ui.markdown
index 5c9a961c..a6757217 100644
--- a/_posts/2010-05-20-15-javascript-web-ui.markdown
+++ b/_posts/2010-05-20-15-javascript-web-ui.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "[转][推荐]15 个 JavaScript Web UI 库"
wordpress_id: 974
wordpress_url: http://www.wsria.com/?p=974
diff --git a/_posts/2010-05-30-jasperreports-ireport.markdown b/_posts/2010-05-30-jasperreports-ireport.markdown
index 49b4fffe..4bd90fe0 100644
--- a/_posts/2010-05-30-jasperreports-ireport.markdown
+++ b/_posts/2010-05-30-jasperreports-ireport.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "JasperReports iReport导出PDF中文解决办法"
wordpress_id: 981
wordpress_url: http://www.wsria.com/?p=981
diff --git a/_posts/2010-06-19-add-dblclick-event-for-jstree.markdown b/_posts/2010-06-19-add-dblclick-event-for-jstree.markdown
index 0b8dd8c1..ab0ea126 100644
--- a/_posts/2010-06-19-add-dblclick-event-for-jstree.markdown
+++ b/_posts/2010-06-19-add-dblclick-event-for-jstree.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "为jstree添加双击事件切换[展开/收缩]功能"
wordpress_id: 989
wordpress_url: http://www.wsria.com/?p=989
diff --git a/_posts/2010-07-30-to-do-a-good-job-one-must-first-sharpen-one's-tools.markdown b/_posts/2010-07-30-to-do-a-good-job-one-must-first-sharpen-one's-tools.markdown
index 174dbef0..f1e11265 100644
--- a/_posts/2010-07-30-to-do-a-good-job-one-must-first-sharpen-one's-tools.markdown
+++ b/_posts/2010-07-30-to-do-a-good-job-one-must-first-sharpen-one's-tools.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "工欲善其事,必先利其器"
wordpress_id: 1026
wordpress_url: http://www.wsria.com/?p=1026
diff --git a/_posts/2010-08-07-maven-study-resources.markdown b/_posts/2010-08-07-maven-study-resources.markdown
index 31454e80..64db8bd4 100644
--- a/_posts/2010-08-07-maven-study-resources.markdown
+++ b/_posts/2010-08-07-maven-study-resources.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "Maven学习引导"
wordpress_id: 1072
wordpress_url: http://www.wsria.com/?p=1072
diff --git a/_posts/2010-08-09-springside-3.3.3-NoClassDefFoundError.markdown b/_posts/2010-08-09-springside-3.3.3-NoClassDefFoundError.markdown
index d8f95016..57169852 100644
--- a/_posts/2010-08-09-springside-3.3.3-NoClassDefFoundError.markdown
+++ b/_posts/2010-08-09-springside-3.3.3-NoClassDefFoundError.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "Springside3.3.3报错:java.lang.NoClassDefFoundError: org/codehaus/classworlds/Launcher解决办法"
wordpress_id: 1079
wordpress_url: http://www.wsria.com/?p=1079
diff --git a/_posts/2010-08-10-eclipse-maven-wtp-tomcat-cant-run.markdown b/_posts/2010-08-10-eclipse-maven-wtp-tomcat-cant-run.markdown
index f4a77413..bc8efc8f 100644
--- a/_posts/2010-08-10-eclipse-maven-wtp-tomcat-cant-run.markdown
+++ b/_posts/2010-08-10-eclipse-maven-wtp-tomcat-cant-run.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "Eclipse+Maven+WTP+Tomcat不能Run On Server其中一个原因"
wordpress_id: 1004
wordpress_url: http://www.wsria.com/?p=1004
diff --git a/_posts/2010-08-12-3-jquery-shade-plugin.markdown b/_posts/2010-08-12-3-jquery-shade-plugin.markdown
index 99eaaa5f..045d32e8 100644
--- a/_posts/2010-08-12-3-jquery-shade-plugin.markdown
+++ b/_posts/2010-08-12-3-jquery-shade-plugin.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "推荐精选3枚jQuery遮罩插件"
wordpress_id: 1100
wordpress_url: http://www.wsria.com/?p=1100
diff --git a/_posts/2010-08-15-apache-asia-roadshow-2010.markdown b/_posts/2010-08-15-apache-asia-roadshow-2010.markdown
index df37268a..0f6a65b7 100644
--- a/_posts/2010-08-15-apache-asia-roadshow-2010.markdown
+++ b/_posts/2010-08-15-apache-asia-roadshow-2010.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "Apache Asia Roadshow 2010归来"
wordpress_id: 1111
wordpress_url: http://www.wsria.com/?p=1111
diff --git a/_posts/2010-08-15-ci-hudson-course.markdown b/_posts/2010-08-15-ci-hudson-course.markdown
index d78c9c5e..a943e658 100644
--- a/_posts/2010-08-15-ci-hudson-course.markdown
+++ b/_posts/2010-08-15-ci-hudson-course.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "Hudson系列教程"
wordpress_id: 1135
wordpress_url: http://www.wsria.com/?p=1135
diff --git a/_posts/2010-08-16-apache-asia-roadshow-2010-juven-maven-ppt.markdown b/_posts/2010-08-16-apache-asia-roadshow-2010-juven-maven-ppt.markdown
index 0a44318f..c19246b8 100644
--- a/_posts/2010-08-16-apache-asia-roadshow-2010-juven-maven-ppt.markdown
+++ b/_posts/2010-08-16-apache-asia-roadshow-2010-juven-maven-ppt.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "Apache Asia Roadshow 2010 Juven Maven PPT和视频下载"
wordpress_id: 1139
wordpress_url: http://www.wsria.com/?p=1139
diff --git a/_posts/2010-08-20-autosize-jqgrid-use-javascript.markdown b/_posts/2010-08-20-autosize-jqgrid-use-javascript.markdown
index b7727810..b303d77c 100644
--- a/_posts/2010-08-20-autosize-jqgrid-use-javascript.markdown
+++ b/_posts/2010-08-20-autosize-jqgrid-use-javascript.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "利用JavaScript获取窗口/Body的宽度和高度(让jqGrid自适应窗口大小)"
wordpress_id: 1147
wordpress_url: http://www.wsria.com/?p=1147
diff --git a/_posts/2010-10-01-auto-update-lastest-chromium-in-windows.markdown b/_posts/2010-10-01-auto-update-lastest-chromium-in-windows.markdown
index 90ec7a40..0813419a 100644
--- a/_posts/2010-10-01-auto-update-lastest-chromium-in-windows.markdown
+++ b/_posts/2010-10-01-auto-update-lastest-chromium-in-windows.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "利用Windows的计划任务自动更新最新的Chromium"
wordpress_id: 1159
wordpress_url: http://www.wsria.com/?p=1159
diff --git a/_posts/2010-10-03-file-download-use-annotation-of-struts2.markdown b/_posts/2010-10-03-file-download-use-annotation-of-struts2.markdown
index f8609523..9fa7a0b7 100644
--- a/_posts/2010-10-03-file-download-use-annotation-of-struts2.markdown
+++ b/_posts/2010-10-03-file-download-use-annotation-of-struts2.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "Struts2 Annotation实现文件下载功能"
wordpress_id: 1172
wordpress_url: http://www.wsria.com/?p=1172
diff --git a/_posts/2010-10-12-springside.markdown b/_posts/2010-10-12-springside.markdown
index 2317b096..c7e06c9b 100644
--- a/_posts/2010-10-12-springside.markdown
+++ b/_posts/2010-10-12-springside.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "工欲善其事必先利其器--Java Web快速开发框架--Springside"
wordpress_id: 1188
wordpress_url: http://www.wsria.com/?p=1188
diff --git a/_posts/2010-10-18-jquery-plugin-area2select.markdown b/_posts/2010-10-18-jquery-plugin-area2select.markdown
index f8f17b7c..4d7ee951 100644
--- a/_posts/2010-10-18-jquery-plugin-area2select.markdown
+++ b/_posts/2010-10-18-jquery-plugin-area2select.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "城市级联选择插件jquery.area2select闪亮登场(前后台设计)"
wordpress_id: 1237
wordpress_url: http://www.wsria.com/?p=1237
diff --git a/_posts/2010-10-25-jquery-validate-multi-rules.markdown b/_posts/2010-10-25-jquery-validate-multi-rules.markdown
index 75b240d8..c55c1f97 100644
--- a/_posts/2010-10-25-jquery-validate-multi-rules.markdown
+++ b/_posts/2010-10-25-jquery-validate-multi-rules.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "jquery.validate插件remote规则相同值不验证的问题解决办法"
wordpress_id: 1273
wordpress_url: http://www.wsria.com/?p=1273
diff --git a/_posts/2010-10-27-maven-in-action-by-juvenxu.markdown b/_posts/2010-10-27-maven-in-action-by-juvenxu.markdown
index 6e47a3ff..422a49a1 100644
--- a/_posts/2010-10-27-maven-in-action-by-juvenxu.markdown
+++ b/_posts/2010-10-27-maven-in-action-by-juvenxu.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "《Maven实战》最新消息,11月初出版"
wordpress_id: 1288
wordpress_url: http://www.wsria.com/?p=1288
diff --git a/_posts/2010-11-01-maven-problem-collection.markdown b/_posts/2010-11-01-maven-problem-collection.markdown
index 169f7bb2..5b3738f3 100644
--- a/_posts/2010-11-01-maven-problem-collection.markdown
+++ b/_posts/2010-11-01-maven-problem-collection.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "Maven常见问题收集(持续更新-2010-12-15)"
wordpress_id: 1314
wordpress_url: http://www.wsria.com/?p=1314
diff --git a/_posts/2010-11-03-maven-war-plugin-parameters-diff.markdown b/_posts/2010-11-03-maven-war-plugin-parameters-diff.markdown
index 916a6cba..c1583772 100644
--- a/_posts/2010-11-03-maven-war-plugin-parameters-diff.markdown
+++ b/_posts/2010-11-03-maven-war-plugin-parameters-diff.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "maven-war-plugin插件的warSourceExcludes和packagingExcludes参数的区别"
wordpress_id: 1335
wordpress_url: http://www.wsria.com/?p=1335
diff --git a/_posts/2010-11-03-my-evernote.markdown b/_posts/2010-11-03-my-evernote.markdown
index 62ff9820..8f5fc15e 100644
--- a/_posts/2010-11-03-my-evernote.markdown
+++ b/_posts/2010-11-03-my-evernote.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "公布一下我的Evernote分享地址"
wordpress_id: 1331
wordpress_url: http://www.wsria.com/?p=1331
diff --git a/_posts/2010-11-05-sso-cas-full-course.markdown b/_posts/2010-11-05-sso-cas-full-course.markdown
index b13b9017..86961cd1 100644
--- a/_posts/2010-11-05-sso-cas-full-course.markdown
+++ b/_posts/2010-11-05-sso-cas-full-course.markdown
@@ -1,10 +1,9 @@
---
-layout: post
title: "CAS单点登录(SSO)完整教程(2012-02-01更新)"
wordpress_id: 1349
wordpress_url: http://www.wsria.com/?p=1349
date: 2010-11-05 20:25:51 +08:00
-category: sso
+categories: sso
tags:
- cas
- sso
diff --git a/_posts/2010-11-11-maven-multi-modules-designe.markdown b/_posts/2010-11-11-maven-multi-modules-designe.markdown
index 85b10d07..34874f7f 100644
--- a/_posts/2010-11-11-maven-multi-modules-designe.markdown
+++ b/_posts/2010-11-11-maven-multi-modules-designe.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "Maven多模块布局实例详解"
wordpress_id: 1405
wordpress_url: http://www.wsria.com/?p=1405
diff --git a/_posts/2010-11-19-maven-in-action-published.markdown b/_posts/2010-11-19-maven-in-action-published.markdown
index 024dbcae..38a31dd0 100644
--- a/_posts/2010-11-19-maven-in-action-published.markdown
+++ b/_posts/2010-11-19-maven-in-action-published.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "推荐:国内第一本Maven书籍——《Maven实战》"
wordpress_id: 1480
wordpress_url: http://www.wsria.com/?p=1480
diff --git a/_posts/2011-06-26-windows-server-2008-r2-x64-install-oracle-10g-r2.markdown b/_posts/2011-06-26-windows-server-2008-r2-x64-install-oracle-10g-r2.markdown
index 55eeb8c1..7a1b4d57 100644
--- a/_posts/2011-06-26-windows-server-2008-r2-x64-install-oracle-10g-r2.markdown
+++ b/_posts/2011-06-26-windows-server-2008-r2-x64-install-oracle-10g-r2.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "Windows Server 2008 R2 X64安装Oracle 10g R2后不能创建数据库问题解决办法"
wordpress_id: 1519
wordpress_url: http://www.wsria.com/?p=1519
diff --git a/_posts/2011-07-15-ubuntu-oracle-xe.markdown b/_posts/2011-07-15-ubuntu-oracle-xe.markdown
index a3cbf273..ea0fcc33 100644
--- a/_posts/2011-07-15-ubuntu-oracle-xe.markdown
+++ b/_posts/2011-07-15-ubuntu-oracle-xe.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "Ubuntu安装ORACLE-XE"
wordpress_id: 1529
wordpress_url: http://www.wsria.com/?p=1529
diff --git a/_posts/2011-07-16-ubuntu-nginx-phpmyadmin.markdown b/_posts/2011-07-16-ubuntu-nginx-phpmyadmin.markdown
index 217763c1..8fd0edc4 100644
--- a/_posts/2011-07-16-ubuntu-nginx-phpmyadmin.markdown
+++ b/_posts/2011-07-16-ubuntu-nginx-phpmyadmin.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "Ubuntu配置ngnix+phpmyadmin"
wordpress_id: 1540
wordpress_url: http://www.wsria.com/?p=1540
diff --git a/_posts/2011-07-24-use-jquery-ui-in-enterprise-summary.markdown b/_posts/2011-07-24-use-jquery-ui-in-enterprise-summary.markdown
index 26cd3384..c508457a 100644
--- a/_posts/2011-07-24-use-jquery-ui-in-enterprise-summary.markdown
+++ b/_posts/2011-07-24-use-jquery-ui-in-enterprise-summary.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "jQuery UI及其插件在企业环境的应用总结"
wordpress_id: 1549
wordpress_url: http://www.wsria.com/?p=1549
diff --git a/_posts/2011-08-13-springside3-shell-for-linux.markdown b/_posts/2011-08-13-springside3-shell-for-linux.markdown
index ffb89e43..632161f3 100644
--- a/_posts/2011-08-13-springside3-shell-for-linux.markdown
+++ b/_posts/2011-08-13-springside3-shell-for-linux.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "Linux下springside3快捷脚本(quick-start、generate-project)"
wordpress_id: 1580
wordpress_url: http://www.wsria.com/?p=1580
diff --git a/_posts/2011-12-09-springside4-shell-for-linux.markdown b/_posts/2011-12-09-springside4-shell-for-linux.markdown
index e6394fe1..e17d6d01 100644
--- a/_posts/2011-12-09-springside4-shell-for-linux.markdown
+++ b/_posts/2011-12-09-springside4-shell-for-linux.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "Linux下springside4快捷脚本(quick-start、generate-project)"
wordpress_id: 1605
wordpress_url: http://www.wsria.com/?p=1605
diff --git a/_posts/2012-02-04-ubuntu-nginx-install-dokuwiki.markdown b/_posts/2012-02-04-ubuntu-nginx-install-dokuwiki.markdown
index 24476d66..c6369607 100644
--- a/_posts/2012-02-04-ubuntu-nginx-install-dokuwiki.markdown
+++ b/_posts/2012-02-04-ubuntu-nginx-install-dokuwiki.markdown
@@ -1,5 +1,4 @@
---
-layout: post
title: "Linux(Ubuntu)环境安装配置Nginx+Dokuwiki"
wordpress_id: 1613
wordpress_url: http://www.wsria.com/?p=1613
diff --git a/_posts/2012-03-21-move-to-github.md b/_posts/2012-03-21-move-to-github.md
index ef37f015..0a5407fc 100644
--- a/_posts/2012-03-21-move-to-github.md
+++ b/_posts/2012-03-21-move-to-github.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "从Wordpress迁移到Github"
-category: blog
+categories: blog
tags:
- github
- wordpress
diff --git a/_posts/2012-03-22-workflow-activiti-action.md b/_posts/2012-03-22-workflow-activiti-action.md
index 5e1b8487..f7be14f9 100644
--- a/_posts/2012-03-22-workflow-activiti-action.md
+++ b/_posts/2012-03-22-workflow-activiti-action.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "工作流引擎Activiti使用总结"
-category: activiti
+categories: activiti
tags:
- activiti
- 工作流
diff --git a/_posts/2012-03-25-oh-my-zsh.md b/_posts/2012-03-25-oh-my-zsh.md
index a103e018..619f5c03 100644
--- a/_posts/2012-03-25-oh-my-zsh.md
+++ b/_posts/2012-03-25-oh-my-zsh.md
@@ -1,6 +1,5 @@
---
-layout: post
-category: shell
+categories: shell
title: "我最喜爱的工具-oh-my-zsh"
tags:
- shell
diff --git a/_posts/2012-03-27-git-submodule.md b/_posts/2012-03-27-git-submodule.md
index 82147ffa..589cb29c 100644
--- a/_posts/2012-03-27-git-submodule.md
+++ b/_posts/2012-03-27-git-submodule.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "Git Submodule使用完整教程"
-category: git
+categories: git
tags:
- scm
- git
diff --git a/_posts/2012-04-03-jquery-plugin-qtip.md b/_posts/2012-04-03-jquery-plugin-qtip.md
index 3fabc7b0..1eda9c34 100644
--- a/_posts/2012-04-03-jquery-plugin-qtip.md
+++ b/_posts/2012-04-03-jquery-plugin-qtip.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "推荐:jQuery提示插件qTip2"
-category: jquery
+categories: jquery
tags:
- jquery
- plugin
diff --git a/_posts/2012-04-05-install-git-1-7-10-use-tar.md b/_posts/2012-04-05-install-git-1-7-10-use-tar.md
index d0767632..0dabe32c 100644
--- a/_posts/2012-04-05-install-git-1-7-10-use-tar.md
+++ b/_posts/2012-04-05-install-git-1-7-10-use-tar.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "在Ubuntu上安装Git1.7.10-rc4(中文化)"
-category: git
+categories: git
tags:
- git
- 本地化
diff --git a/_posts/2012-04-10-install-lastest-git-on-ubuntu.md b/_posts/2012-04-10-install-lastest-git-on-ubuntu.md
index 0ac11954..f9b42a7d 100644
--- a/_posts/2012-04-10-install-lastest-git-on-ubuntu.md
+++ b/_posts/2012-04-10-install-lastest-git-on-ubuntu.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "在Ubuntu(Debian)上安装最新版Git"
-category: git
+categories: git
tags:
- git
- ubuntu
diff --git a/_posts/2012-04-14-install-ajaxplorer-on-ubuntu.md b/_posts/2012-04-14-install-ajaxplorer-on-ubuntu.md
index 84595543..2c7ac839 100644
--- a/_posts/2012-04-14-install-ajaxplorer-on-ubuntu.md
+++ b/_posts/2012-04-14-install-ajaxplorer-on-ubuntu.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "在Linux(Ubuntu)+Nginx安装配置AjaXplorer"
-category: tools
+categories: tools
tags:
- ajaxplorer
- linux
diff --git a/_posts/2012-04-23-synchronize-or-redesign-user-and-role-for-activiti.md b/_posts/2012-04-23-synchronize-or-redesign-user-and-role-for-activiti.md
index 511494cc..f9e5bb8b 100644
--- a/_posts/2012-04-23-synchronize-or-redesign-user-and-role-for-activiti.md
+++ b/_posts/2012-04-23-synchronize-or-redesign-user-and-role-for-activiti.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "同步或者重构Activiti Identify用户数据的多种方案比较"
-category: activiti
+categories: activiti
tags:
- activiti
- workflow
diff --git a/_posts/2012-05-01-activiti-designer-5.8-to-5.9.md b/_posts/2012-05-01-activiti-designer-5.8-to-5.9.md
index 11ebfad5..0490e5f1 100644
--- a/_posts/2012-05-01-activiti-designer-5.8-to-5.9.md
+++ b/_posts/2012-05-01-activiti-designer-5.8-to-5.9.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "从Activiti Designer5.8升级到5.9遇到的问题"
-category: activiti
+categories: activiti
tags:
- activiti
- designer
diff --git a/_posts/2012-05-18-let-activiti-record-variables-to-history.md b/_posts/2012-05-18-let-activiti-record-variables-to-history.md
index 377b9ff2..6b2761cb 100644
--- a/_posts/2012-05-18-let-activiti-record-variables-to-history.md
+++ b/_posts/2012-05-18-let-activiti-record-variables-to-history.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "让Activiti记录变量历史信息"
-category: activiti
+categories: activiti
tags:
- activiti
- history
diff --git a/_posts/2012-05-19-how-do-i-work-on-linux.md b/_posts/2012-05-19-how-do-i-work-on-linux.md
index c0e670d3..ad210d06 100644
--- a/_posts/2012-05-19-how-do-i-work-on-linux.md
+++ b/_posts/2012-05-19-how-do-i-work-on-linux.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "我是如何在Linux(Ubuntu)上工作的?"
-category: linux
+categories: linux
tags:
- Linux
- Ubuntu
diff --git a/_posts/2012-05-20-set-process-start-user.md b/_posts/2012-05-20-set-process-start-user.md
index fed8e2c7..5a0fd0c1 100644
--- a/_posts/2012-05-20-set-process-start-user.md
+++ b/_posts/2012-05-20-set-process-start-user.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "Activiti设置流程发起用户信息"
-category: activiti
+categories: activiti
tags:
- activiti
- 启动
diff --git a/_posts/2012-05-26-kft-activiti-demo.md b/_posts/2012-05-26-kft-activiti-demo.md
index 46439b16..b5fe76ea 100644
--- a/_posts/2012-05-26-kft-activiti-demo.md
+++ b/_posts/2012-05-26-kft-activiti-demo.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "Activiti快速入门项目-kft-activiti-demo"
-category: activiti
+categories: activiti
tags:
- activiti
- 入门
diff --git a/_posts/2012-06-07-how-to-build-and-run-activiti-modeler-use-signavio.md b/_posts/2012-06-07-how-to-build-and-run-activiti-modeler-use-signavio.md
index cbc043a4..9ca80b10 100644
--- a/_posts/2012-06-07-how-to-build-and-run-activiti-modeler-use-signavio.md
+++ b/_posts/2012-06-07-how-to-build-and-run-activiti-modeler-use-signavio.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "如何使用Signavio打包Activiti Modeler"
-category: activiti
+categories: activiti
tags:
- activiti
- signavio
@@ -73,8 +72,14 @@ Signavio是通过ant构建打包的,在打包之前需要更改一下build.pro
用编辑器打开signavio-core-components/ editor/build.xml文件。
-1. 找到<target name="com.signavio.editor.js.concat">,紧随其后添加一行配置代码:<property name="charset" value="utf-8"/>
标签中的<concat destfile='${build}/oryx.debug.js'>修改为
<concat destfile='${build}/oryx.debug.js' encoding="${charset}" outputencoding="${charset}">。
-
2. 找到<target name='com.signavio.editor.js.compress代码处,更改次target内的<java dir="${build}" jar="${root}/lib/yuicompressor-**2.4.2**.jar" fork="true" failonerror="true" output='${compress.temp}'>;将其中的yuicompressor-2.4.2.jar更改为yuicompressor-**2.4.7**.jar。
-
3. signavio默认使用yuicompressor-2.4.2版本压缩javascript和css文件,为了解决编码问题我们需要使用最新版本替换**2.4.2**版本,笔者在撰稿的时候最新的yuicompressor版本为**2.4.7**,读者也可以直接下载最新版本。访问[http://yuilibrary.com/download/yuicompressor/](http://yuilibrary.com/download/yuicompressor/) 下载第一个版本的压缩包,解压提取**build/yuicompressor-2.4.7.jar**文件并复制到signavio-core-components/yuicompressor/**editor/lib**目录中。
再次执行打包命令**ant build-all-in-one-war**一切正常,截图证明。
-
-
![](/files/2012/06/activiti-modeler-windows-build-success.png)
\ No newline at end of file
+1. 找到<target name="com.signavio.editor.js.concat">,紧随其后添加一行配置代码:<property name="charset" value="utf-8"/>
+标签中的<concat destfile='${build}/oryx.debug.js'>修改为
+<concat destfile='${build}/oryx.debug.js' encoding="${charset}" outputencoding="${charset}">。
+
+2. 找到<target name='com.signavio.editor.js.compress代码处,更改次target内的<java dir="${build}" jar="${root}/lib/yuicompressor-**2.4.2**.jar" fork="true" failonerror="true" output='${compress.temp}'>;将其中的yuicompressor-2.4.2.jar更改为yuicompressor-**2.4.7**.jar。
+
+3. signavio默认使用yuicompressor-2.4.2版本压缩javascript和css文件,为了解决编码问题我们需要使用最新版本替换**2.4.2**版本,笔者在撰稿的时候最新的yuicompressor版本为**2.4.7**,读者也可以直接下载最新版本。访问[http://yuilibrary.com/download/yuicompressor/](http://yuilibrary.com/download/yuicompressor/) 下载第一个版本的压缩包,解压提取**build/yuicompressor-2.4.7.jar**文件并复制到signavio-core-components/yuicompressor/**editor/lib**目录中。
+
+再次执行打包命令**ant build-all-in-one-war**一切正常,截图证明。
+
+![](/files/2012/06/activiti-modeler-windows-build-success.png)
diff --git a/_posts/2012-07-18-how-to-pack-process-resources.md b/_posts/2012-07-18-how-to-pack-process-resources.md
index c8940068..a6d653dc 100644
--- a/_posts/2012-07-18-how-to-pack-process-resources.md
+++ b/_posts/2012-07-18-how-to-pack-process-resources.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "如何打包Activiti的流程资源文件(bpmn20.xml、form、png)"
-category: activiti
+categories: activiti
tags:
- activiti
- 打包
diff --git a/_posts/2012-07-18-zsh-maven-complection.md b/_posts/2012-07-18-zsh-maven-complection.md
index 8f2266a4..cd4b6586 100644
--- a/_posts/2012-07-18-zsh-maven-complection.md
+++ b/_posts/2012-07-18-zsh-maven-complection.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "Zsh(oh-my-zsh)的Maven自动提示插件(zsh-maven-complection)"
-category: shell
+categories: shell
tags:
- shell
- zsh
diff --git a/_posts/2012-08-04-resources-index-of-learn-activiti.md b/_posts/2012-08-04-resources-index-of-learn-activiti.md
index e5675ec8..90a011fd 100644
--- a/_posts/2012-08-04-resources-index-of-learn-activiti.md
+++ b/_posts/2012-08-04-resources-index-of-learn-activiti.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "Activiti入门,学习资源索引"
-category: activiti
+categories: activiti
tags:
- activiti
- 教程
diff --git a/_posts/2012-08-05-diff-activiti-workflow-forms.md b/_posts/2012-08-05-diff-activiti-workflow-forms.md
index 2707d5b1..617e6c82 100644
--- a/_posts/2012-08-05-diff-activiti-workflow-forms.md
+++ b/_posts/2012-08-05-diff-activiti-workflow-forms.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "比较Activiti中三种不同的表单及其应用"
-category: activiti
+categories: activiti
tags:
- activiti
- 表单
diff --git a/_posts/2012-08-09-activiti-objects.md b/_posts/2012-08-09-activiti-objects.md
index 72537b3f..48c5f9ed 100644
--- a/_posts/2012-08-09-activiti-objects.md
+++ b/_posts/2012-08-09-activiti-objects.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "谈谈Activiti中流程对象之间的关系"
-category: activiti
+categories: activiti
tags:
- activiti
- 层级
diff --git a/_posts/2012-08-25-jqgrid-frozen-column-height.md b/_posts/2012-08-25-jqgrid-frozen-column-height.md
index 5976bb1c..ec06847e 100644
--- a/_posts/2012-08-25-jqgrid-frozen-column-height.md
+++ b/_posts/2012-08-25-jqgrid-frozen-column-height.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "jqGrid启用列冻结之后列高度不一致问题解决办法"
-category: jquery
+categories: jquery
tags:
- jqgrid
- 列冻结
diff --git a/_posts/2012-09-14-activiti-initiator.md b/_posts/2012-09-14-activiti-initiator.md
index 82d27f12..7ac9b2de 100644
--- a/_posts/2012-09-14-activiti-initiator.md
+++ b/_posts/2012-09-14-activiti-initiator.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "activiti:initiator的作用及其使用"
-category: activiti
+categories: activiti
tags:
- activiti
- initiator
diff --git a/_posts/2012-09-30-activiti-explorer-i18n-for-chinese.md b/_posts/2012-09-30-activiti-explorer-i18n-for-chinese.md
index ecca35cd..2da64248 100644
--- a/_posts/2012-09-30-activiti-explorer-i18n-for-chinese.md
+++ b/_posts/2012-09-30-activiti-explorer-i18n-for-chinese.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "Activiti Explorer中文汉化"
-category: activiti
+categories: activiti
tags:
- activiti
- 中文
diff --git a/_posts/2012-09-30-new-version-of-activiti-modeler.md b/_posts/2012-09-30-new-version-of-activiti-modeler.md
index 8c116cb9..a5928de9 100644
--- a/_posts/2012-09-30-new-version-of-activiti-modeler.md
+++ b/_posts/2012-09-30-new-version-of-activiti-modeler.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "新版Activiti Modeler发布以及教程"
-category: activiti
+categories: activiti
tags:
- activiti
- Activiti Modeler
diff --git a/_posts/2012-10-22-activiti-5.10-deploy-bpmn-directly.md b/_posts/2012-10-22-activiti-5.10-deploy-bpmn-directly.md
index 08f2cda5..6fdd0964 100644
--- a/_posts/2012-10-22-activiti-5.10-deploy-bpmn-directly.md
+++ b/_posts/2012-10-22-activiti-5.10-deploy-bpmn-directly.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "Activiti 5.10支持直接部署扩展名为bpmn的流程文件"
-category: activiti
+categories: activiti
tags:
- activiti
- 5.10
diff --git a/_posts/2012-11-22-jquery-ui-portlet.md b/_posts/2012-11-22-jquery-ui-portlet.md
index 37386981..3d25e322 100644
--- a/_posts/2012-11-22-jquery-ui-portlet.md
+++ b/_posts/2012-11-22-jquery-ui-portlet.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "基于jQuery UI的Portlet插件—jQuery UI Portlet"
-category: jquery
+categories: jquery
tags:
- jquery
- ui
diff --git a/_posts/2012-12-05-activiti-5-11-release.md b/_posts/2012-12-05-activiti-5-11-release.md
index 1279ff80..69641507 100644
--- a/_posts/2012-12-05-activiti-5-11-release.md
+++ b/_posts/2012-12-05-activiti-5-11-release.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "Activiti 5.11发布"
-category: activiti
+categories: activiti
tags:
- activiti
- bpmn2.0
diff --git a/_posts/2012-12-08-jquery-ui-portlet-v1.1.0-release.md b/_posts/2012-12-08-jquery-ui-portlet-v1.1.0-release.md
index 2355a45d..1260a062 100644
--- a/_posts/2012-12-08-jquery-ui-portlet-v1.1.0-release.md
+++ b/_posts/2012-12-08-jquery-ui-portlet-v1.1.0-release.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "jQuery UI Portlet V1.1.0 发布"
-category: jquery
+categories: jquery
tags:
- jquery
- ui
diff --git a/_posts/2012-12-15-activiti-explorer-5-11-garbled.md b/_posts/2012-12-15-activiti-explorer-5-11-garbled.md
index 4f7388ea..605fa7c6 100644
--- a/_posts/2012-12-15-activiti-explorer-5-11-garbled.md
+++ b/_posts/2012-12-15-activiti-explorer-5-11-garbled.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "Activiti Explorer 5.11登录页面乱码解决办法"
-category: activiti
+categories: activiti
tags:
- activiti
- explorer
diff --git a/_posts/2012-12-15-kft-activiti-1-5-release.md b/_posts/2012-12-15-kft-activiti-1-5-release.md
index 1a6fde6b..a5f89ba8 100644
--- a/_posts/2012-12-15-kft-activiti-1-5-release.md
+++ b/_posts/2012-12-15-kft-activiti-1-5-release.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "kft-activiti-demo 1.5.0 发布"
-category: activiti
+categories: activiti
tags:
- activiti
- kft-activiti-demo
diff --git a/_posts/2013-01-12-kft-activiti-demo-rest.md b/_posts/2013-01-12-kft-activiti-demo-rest.md
index 2625072b..445dceff 100644
--- a/_posts/2013-01-12-kft-activiti-demo-rest.md
+++ b/_posts/2013-01-12-kft-activiti-demo-rest.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "如何使用Activiti Rest模块"
-category: activiti
+categories: activiti
tags:
- activiti
- rest
diff --git a/_posts/2013-02-14-improve-performance-for-reading-diagram.md b/_posts/2013-02-14-improve-performance-for-reading-diagram.md
index e00874a3..61c16d45 100644
--- a/_posts/2013-02-14-improve-performance-for-reading-diagram.md
+++ b/_posts/2013-02-14-improve-performance-for-reading-diagram.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "利用静态服务提升读取Activiti流程图的性能"
-category: activiti
+categories: activiti
tags:
- activiti
- 静态
diff --git a/_posts/2013-03-06-activiti-5-12-release.md b/_posts/2013-03-06-activiti-5-12-release.md
index fbbb63bb..9e75d275 100644
--- a/_posts/2013-03-06-activiti-5-12-release.md
+++ b/_posts/2013-03-06-activiti-5-12-release.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "Activiti 5.12发布"
-category: activiti
+categories: activiti
tags:
- activiti
- bpmn2.0
diff --git a/_posts/2013-03-10-integrate-activiti-modeler.md b/_posts/2013-03-10-integrate-activiti-modeler.md
index be9e9106..3c983750 100644
--- a/_posts/2013-03-10-integrate-activiti-modeler.md
+++ b/_posts/2013-03-10-integrate-activiti-modeler.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "整合Activiti Modeler到业务系统(或BPM平台)"
-category: activiti
+categories: activiti
tags:
- activiti
- Activiti Modeler
diff --git a/_posts/2013-03-10-kft-activiti-demo-release-1-7.md b/_posts/2013-03-10-kft-activiti-demo-release-1-7.md
index 28b57b46..489db2df 100644
--- a/_posts/2013-03-10-kft-activiti-demo-release-1-7.md
+++ b/_posts/2013-03-10-kft-activiti-demo-release-1-7.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "Activiti快速入门项目kft-activiti-demo 1.7.0版本发布"
-category: activiti
+categories: activiti
tags:
- activiti
- Activiti Modeler
diff --git a/_posts/2013-03-23-activiti-designer-5-12-release.md b/_posts/2013-03-23-activiti-designer-5-12-release.md
index 7925f00b..93066071 100644
--- a/_posts/2013-03-23-activiti-designer-5-12-release.md
+++ b/_posts/2013-03-23-activiti-designer-5-12-release.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "Activiti Designer 5.12.0 发布"
-category: activiti
+categories: activiti
tags:
- activiti
- Activiti Designer
diff --git a/_posts/2013-03-26-intellij-deal-chinese-disorderly-code.md b/_posts/2013-03-26-intellij-deal-chinese-disorderly-code.md
index 854c443a..b75b4197 100644
--- a/_posts/2013-03-26-intellij-deal-chinese-disorderly-code.md
+++ b/_posts/2013-03-26-intellij-deal-chinese-disorderly-code.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "IntelliJ IDEA中文乱码解决办法"
-category: tools
+categories: tools
tags:
- 开发工具
- IntelliJ IDEA
diff --git a/_posts/2013-04-05-activiti-5-12-x.md b/_posts/2013-04-05-activiti-5-12-x.md
index e9caa089..edbebc48 100644
--- a/_posts/2013-04-05-activiti-5-12-x.md
+++ b/_posts/2013-04-05-activiti-5-12-x.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "Activiti 5.12.X 衍生版本发布"
-category: activiti
+categories: activiti
tags:
- activiti
- 5.12
diff --git a/_posts/2013-04-13-forum.md b/_posts/2013-04-13-forum.md
index 5e75c0bc..1e83e562 100644
--- a/_posts/2013-04-13-forum.md
+++ b/_posts/2013-04-13-forum.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "博客论坛正式上线"
-category: blog
+categories: blog
tags:
- 论坛
---
diff --git a/_posts/2013-04-19-about-process-egine-and-configuration.md b/_posts/2013-04-19-about-process-egine-and-configuration.md
index 14bbd8d2..f6d5c450 100644
--- a/_posts/2013-04-19-about-process-egine-and-configuration.md
+++ b/_posts/2013-04-19-about-process-egine-and-configuration.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "谈谈Activiti的引擎与引擎配置对象"
-category: activiti
+categories: activiti
tags:
- activiti
- 引擎配置对象
diff --git a/_posts/2013-05-27-dynamic-process-creation-and-deployment-in-100-lines.md b/_posts/2013-05-27-dynamic-process-creation-and-deployment-in-100-lines.md
index 13b6e0d2..7e786215 100644
--- a/_posts/2013-05-27-dynamic-process-creation-and-deployment-in-100-lines.md
+++ b/_posts/2013-05-27-dynamic-process-creation-and-deployment-in-100-lines.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "利用100行代码动态创建并部署流程"
-category: activiti
+categories: activiti
tags:
- activiti
- 动态
diff --git a/_posts/2013-06-29-a-successful-cofiguration-file-management-solution.md b/_posts/2013-06-29-a-successful-cofiguration-file-management-solution.md
index 4da423bd..cf7f9820 100644
--- a/_posts/2013-06-29-a-successful-cofiguration-file-management-solution.md
+++ b/_posts/2013-06-29-a-successful-cofiguration-file-management-solution.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "一个基于Maven的配置文件管理成功案例"
-category: solution
+categories: solution
tags:
- 配置文件
- 管理方式
diff --git a/_posts/2013-07-17-activiti-5.13.1-kft-released.md b/_posts/2013-07-17-activiti-5.13.1-kft-released.md
index 84bdfc93..25ea1f0b 100644
--- a/_posts/2013-07-17-activiti-5.13.1-kft-released.md
+++ b/_posts/2013-07-17-activiti-5.13.1-kft-released.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "Activiti 5.13修复版本5.13.1-kft发布"
-category: activiti
+categories: activiti
tags:
- ACT-1731
- Activiti
diff --git a/_posts/2013-08-30-using-uuid-as-primary-key-in-activiti.md b/_posts/2013-08-30-using-uuid-as-primary-key-in-activiti.md
index b6cfba9e..0b39e0ae 100644
--- a/_posts/2013-08-30-using-uuid-as-primary-key-in-activiti.md
+++ b/_posts/2013-08-30-using-uuid-as-primary-key-in-activiti.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "在Activiti中使用UUID作为主键生成策略"
-category: activiti
+categories: activiti
tags:
- Activiti
- UUID
diff --git a/_posts/2014-01-23-analyse-activity.md b/_posts/2014-01-23-analyse-activity.md
index e9c477f9..fa191bcb 100644
--- a/_posts/2014-01-23-analyse-activity.md
+++ b/_posts/2014-01-23-analyse-activity.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "剖析Activiti的Activity"
-category: activiti
+categories: activiti
tags:
- activiti
- Activity
@@ -20,7 +19,7 @@ tags:
## 3. 输出结果示例
-
+```
{taskDefinition=org.activiti.engine.impl.task.TaskDefinition@19c6e4d1, default=null, name=部门领导审批, documentation=null, type=userTask}
{conditionText=${!deptLeaderPass}, condition=org.activiti.engine.impl.el.UelExpressionCondition@50d8628f, name=不同意, documentation=null}
{conditionText=${deptLeaderPass}, condition=org.activiti.engine.impl.el.UelExpressionCondition@2e2ec3c0, name=同意, documentation=null}
@@ -33,4 +32,4 @@ tags:
{conditionText=${!reApply}, condition=org.activiti.engine.impl.el.UelExpressionCondition@3cf5dc8a, name=结束流程, documentation=null}
{name=Start, documentation=null, type=startEvent}
{name=End, documentation=null, type=endEvent}
-
\ No newline at end of file
+```
\ No newline at end of file
diff --git a/_posts/2014-04-18-activiti-with-jpa.md b/_posts/2014-04-18-activiti-with-jpa.md
index 57c7d61d..9b894b57 100644
--- a/_posts/2014-04-18-activiti-with-jpa.md
+++ b/_posts/2014-04-18-activiti-with-jpa.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "在Activiti中集成JPA(解决动态表单生成的大量数据)"
-category: activiti
+categories: activiti
tags:
- Activiti
---
diff --git a/_posts/2014-04-24-diagram-viewer.md b/_posts/2014-04-24-diagram-viewer.md
index a4857976..a280e41e 100644
--- a/_posts/2014-04-24-diagram-viewer.md
+++ b/_posts/2014-04-24-diagram-viewer.md
@@ -1,7 +1,6 @@
---
-layout: post
title: "集成Diagram Viewer跟踪流程"
-category: activiti
+categories: activiti
tags:
- Activiti
- Diagram Viewer
diff --git a/_posts/2015-12-27-integrate-new-activiti-modeler-and-rest.md b/_posts/2015-12-27-integrate-new-activiti-modeler-and-rest.md
index 4faabf5d..279c4871 100644
--- a/_posts/2015-12-27-integrate-new-activiti-modeler-and-rest.md
+++ b/_posts/2015-12-27-integrate-new-activiti-modeler-and-rest.md
@@ -1,12 +1,13 @@
---
-layout: post
title: "集成新版(5.17+)Activiti Modeler与Rest服务"
-category: activiti
+categories: activiti
tags:
- Activiti
- Activiti Modeler
---
+{% include toc title="Getting Started" %}
+
这又是一片迟来的博客,上一篇博文还是2014年4月24日写的,因为很多内容都在书(《[Activiti实战](activiti-in-action.html)》)里了已经有详细的解释了,不过由于书里面使用的是**5.16.4**版本,从**5.17.0**版本后Activiti Modeler的整合方式有些变化,所以写此博问作为补充内容。
**声明**:
diff --git a/_recipes/chocolate-chip-cookies.md b/_recipes/chocolate-chip-cookies.md
new file mode 100644
index 00000000..ddd52d78
--- /dev/null
+++ b/_recipes/chocolate-chip-cookies.md
@@ -0,0 +1,31 @@
+---
+title: "Chocolate Chip Cookies"
+---
+
+A chocolate chip cookie is a drop cookie that originated in the United States and features chocolate chips as its distinguishing ingredient.
+
+The traditional recipe combines a dough composed of butter and both brown and white sugar with semi-sweet chocolate chips. Variations include recipes with other types of chocolate as well as additional ingredients such as nuts or oatmeal.
+
+This recipe makes 4 dozen cookies.
+
+## Ingredients
+
+* 2 1/4 cups all-purpose flour
+* 1 teaspoon baking soda
+* 1/2 teaspoon salt
+* 1 cup butter, softened and cut to pieces
+* 1 cup sugar
+* 1 cup light brown sugar, packed
+* 2 teaspoons vanilla extract
+* 2 large eggs
+* 2 cups semi-sweet chocolate chips
+* 1/2 teaspoon nutmeg (optional)
+* 1 cup chopped pecans or walnuts (optional)
+
+## Directions
+
+1. Preheat the oven to 350 F.
+2. In a medium bowl, whisk flour with baking soda, nutmeg and salt.
+3. In a large bowl, beat butter with sugar and brown sugar until creamy and light. Add vanilla and eggs, one at a time, and mix until incorporated.
+4. Gradually add dry mixture into the butter-sugar wet blend, mixing with a spatula until combined. Add chocolate chips and nuts until just mixed.
+5. Drop tablespoon-sized clumps onto un-greased cookie sheets. Bake for 8-12 minutes, or until pale brown. Allow to cool on the pan for a minute or three, then transfer cookies to a wire rack to finish cooling.
\ No newline at end of file
diff --git a/_recipes/oatmeal-cookies.md b/_recipes/oatmeal-cookies.md
new file mode 100644
index 00000000..978ad4fe
--- /dev/null
+++ b/_recipes/oatmeal-cookies.md
@@ -0,0 +1,23 @@
+---
+title: "Oatmeal Cookies"
+---
+
+Oatmeal cookies are a proverbial favorite with both kids and adults. This crisp and chewy cookie is loaded with oats, dried fruit, and chopped nuts.
+
+## Ingredients
+
+* 1 cup butter, softened 1 cup white sugar
+* 1 cup packed brown sugar
+* 2 eggs
+* 1 teaspoon vanilla extract
+* 2 cups all-purpose flour
+* 1 teaspoon baking soda
+* 1 teaspoon salt
+* 1 1/2 teaspoons ground cinnamon
+* 3 cups quick cooking oats
+
+## Directions
+
+1. In a medium bowl, cream together butter, white sugar, and brown sugar. Beat in eggs one at a time, then stir in vanilla. Combine flour, baking soda, salt, and cinnamon; stir into the creamed mixture. Mix in oats. Cover, and chill dough for at least one hour.
+2. Preheat the oven to 375 degrees F (190 degrees C). Grease cookie sheets. Roll the dough into walnut sized balls, and place 2 inches apart on cookie sheets. Flatten each cookie with a large fork dipped in sugar.
+3. Bake for 8 to 10 minutes in preheated oven. Allow cookies to cool on baking sheet for 5 minutes before transferring to a wire rack to cool completely.
\ No newline at end of file
diff --git a/_recipes/peanut-butter-cookies.md b/_recipes/peanut-butter-cookies.md
new file mode 100644
index 00000000..b5eaae81
--- /dev/null
+++ b/_recipes/peanut-butter-cookies.md
@@ -0,0 +1,23 @@
+---
+title: "Peanut Butter Cookies"
+---
+
+A peanut butter cookie is a type of cookie that is distinguished for having peanut butter as a principal ingredient. The cookie generally originated in the United States, its development dating back to the 1910s.
+
+## Ingredients
+
+* 1 cup unsalted butter
+* 1 cup crunchy peanut butter
+* 1 cup white sugar
+* 1 cup packed brown sugar
+* 2 eggs 2
+* 1/2 cups all-purpose flour
+* 1 teaspoon baking powder
+* 1/2 teaspoon salt
+* 1 1/2 teaspoons baking soda
+
+## Directions
+
+1. Cream butter, peanut butter, and sugars together in a bowl; beat in eggs.
+2. In a separate bowl, sift flour, baking powder, baking soda, and salt; stir into butter mixture. Put dough in refrigerator for 1 hour.
+3. Roll dough into 1 inch balls and put on baking sheets. Flatten each ball with a fork, making a crisscross pattern. Bake in a preheated 375 degrees F oven for about 10 minutes or until cookies begin to brown.
\ No newline at end of file
diff --git a/_sass/_animations.scss b/_sass/_animations.scss
new file mode 100644
index 00000000..25ef77fb
--- /dev/null
+++ b/_sass/_animations.scss
@@ -0,0 +1,21 @@
+/* ==========================================================================
+ ANIMATIONS
+ ========================================================================== */
+
+@-webkit-keyframes intro {
+ 0% {
+ opacity: 0;
+ }
+ 100% {
+ opacity: 1;
+ }
+}
+
+@keyframes intro {
+ 0% {
+ opacity: 0;
+ }
+ 100% {
+ opacity: 1;
+ }
+}
\ No newline at end of file
diff --git a/_sass/_archive.scss b/_sass/_archive.scss
new file mode 100644
index 00000000..0509f814
--- /dev/null
+++ b/_sass/_archive.scss
@@ -0,0 +1,238 @@
+/* ==========================================================================
+ ARCHIVE
+ ========================================================================== */
+
+.archive {
+ margin-bottom: 2em;
+
+ @include breakpoint($medium) {
+ @include span(12 of 12);
+ }
+
+ @include breakpoint($large) {
+ @include span(10 of 12 last);
+ @include prefix(0.5 of 12);
+ }
+
+ a {
+ color: inherit;
+ text-decoration: none;
+ }
+}
+
+.archive__subtitle {
+ margin: 1.414em 0 0;
+ padding-bottom: 0.5em;
+ font-size: $type-size-5;
+ color: mix(#fff, $gray, 25%);
+ border-bottom: 1px solid $border-color;
+
+ + .list__item .archive__item-title {
+ margin-top: 0.5em;
+ }
+}
+
+.archive__item-title {
+ margin-bottom: 0.25em;
+ font-family: $sans-serif-narrow;
+
+ a + a {
+ opacity: 0.5;
+ }
+}
+
+/* remove border*/
+.page__content {
+
+ .archive__item-title {
+ margin-top: 1em;
+ border-bottom: none;
+ }
+}
+
+.archive__item-excerpt {
+ margin-top: 0;
+ font-size: $type-size-6;
+
+ & + p {
+ text-indent: 0;
+ }
+}
+
+.archive__item-teaser {
+ border-radius: $border-radius;
+ overflow: hidden;
+ img {
+ width: 100%;
+ }
+}
+
+.archive__item:hover {
+ .archive__item-teaser {
+ box-shadow: 0 0 10px rgba(#000, 0.25);
+ }
+
+ .archive__item-title {
+ text-decoration: underline;
+ }
+}
+
+
+/*
+ List view
+ ========================================================================== */
+
+.list__item {
+ @include breakpoint($medium) {
+ padding-right: $right-sidebar-width-narrow;
+ }
+
+ @include breakpoint($large) {
+ padding-right: $right-sidebar-width;
+ }
+
+ @include breakpoint($x-large) {
+ padding-right: $right-sidebar-width-wide;
+ }
+
+ .page__meta {
+ margin: 0 0 4px;
+ }
+}
+
+
+/*
+ Grid view
+ ========================================================================== */
+
+.grid__item {
+ margin-bottom: 2em;
+
+ .page__meta {
+ margin: 0 0 4px;
+ }
+
+ .archive__item-title {
+ margin-top: 0.5em;
+ font-size: $type-size-5;
+ }
+
+ .archive__item-excerpt {
+ display: none;
+ }
+
+ @include breakpoint($small) {
+ @include gallery(5 of 10);
+ .archive__item-teaser {
+ max-height: 200px;
+ }
+ }
+
+ @include breakpoint($medium) {
+ margin-left: 0; /* reset before mixin does its thing*/
+ margin-right: 0; /* reset before mixin does its thing*/
+ @include gallery(2.5 of 10);
+
+ .archive__item-teaser {
+ max-height: 120px;
+ }
+
+ .archive__item-excerpt {
+ display: block;
+ font-size: $type-size-6;
+ }
+ }
+}
+
+
+/*
+ Features
+ ========================================================================== */
+
+.feature__wrapper {
+ @include clearfix();
+ margin-bottom: 2em;
+ border-bottom: 1px solid $border-color;
+}
+
+.feature__item {
+ margin-bottom: 2em;
+ font-size: 1.25rem;
+
+ @include breakpoint($small) {
+ margin-bottom: 0;
+ @include gallery(4 of 12);
+
+ .feature__item-teaser {
+ max-height: 200px;
+ overflow: hidden;
+ }
+ }
+
+ &--left {
+ @include full();
+ font-size: 1.25rem;
+
+ .archive__item-teaser {
+ margin-bottom: 2em;
+ }
+
+ @include breakpoint($small) {
+ .archive__item-teaser {
+ @include span(5 of 12);
+ }
+
+ .archive__item-body {
+ @include span(7 of 12 last);
+ @include prefix(0.5 of 12);
+ @include suffix(1 of 12);
+ }
+ }
+ }
+
+ &--right {
+ @include full();
+ font-size: 1.25rem;
+
+ .archive__item-teaser {
+ margin-bottom: 2em;
+ }
+
+ @include breakpoint($small) {
+ text-align: right;
+
+ .archive__item-teaser {
+ @include span(5 of 12 rtl);
+ }
+
+ .archive__item-body {
+ @include span(7 of 12 last rtl);
+ @include prefix(0.5 of 12);
+ @include suffix(1 of 12);
+ }
+ }
+ }
+
+ &--center {
+ @include full();
+ font-size: 1.25rem;
+
+ .archive__item-teaser {
+ margin-bottom: 2em;
+ }
+
+ @include breakpoint($small) {
+ text-align: center;
+
+ .archive__item-teaser {
+ margin: 0 auto;
+ width: span(5 of 12);
+ }
+
+ .archive__item-body {
+ margin: 0 auto;
+ width: span(7 of 12);
+ }
+ }
+ }
+}
diff --git a/_sass/_base.scss b/_sass/_base.scss
new file mode 100644
index 00000000..2eda44d0
--- /dev/null
+++ b/_sass/_base.scss
@@ -0,0 +1,309 @@
+/* ==========================================================================
+ BASE ELEMENTS
+ ========================================================================== */
+
+body {
+ margin: 0;
+ padding: 0;
+ color: $text-color;
+ font-family: $global-font-family;
+ line-height: 1.5;
+
+ &.overflow--hidden {
+ /* when primary navigation is visible, the content in the background won't scroll */
+ overflow: hidden;
+ }
+}
+
+h1, h2, h3, h4, h5, h6 {
+ margin: 2em 0 0.5em;
+ line-height: 1.2;
+ font-family: $header-font-family;
+ font-weight: bold;
+}
+
+h1 {
+ margin-top: 0;
+ font-size: $type-size-3;
+}
+
+h2 {
+ font-size: $type-size-4;
+}
+
+h3 {
+ font-size: $type-size-5;
+}
+
+h4 {
+ font-size: $type-size-6;
+}
+
+h5 {
+ font-size: $type-size-6;
+}
+
+h6 {
+ font-size: $type-size-6;
+}
+
+small, .small {
+ font-size: $type-size-6;
+}
+
+p {
+ margin-bottom: 1.3em;
+}
+
+u,
+ins {
+ text-decoration: none;
+ border-bottom: 1px solid $text-color;
+ a {
+ color: inherit;
+ }
+}
+
+del a {
+ color: inherit;
+}
+
+/* reduce orphans and widows when printing */
+
+p, pre, blockquote, ul, ol, dl, figure, table, fieldset {
+ orphans: 3;
+ widows: 3;
+}
+
+/* abbreviations */
+
+abbr[title],
+abbr[data-original-title] {
+ text-decoration: none;
+ cursor: help;
+ border-bottom: 1px dotted $text-color;
+}
+
+/* blockquotes */
+
+blockquote {
+ margin: 2em 1em 2em 0;
+ padding-left: 1em;
+ padding-right: 1em;
+ font-style: italic;
+ border-left: 0.25em solid $primary-color;
+
+ cite {
+ font-style: italic;
+
+ &:before {
+ content: "\2014";
+ padding-right: 5px;
+ }
+ }
+}
+
+/* links */
+
+a {
+ &:focus {
+ @extend %tab-focus;
+ }
+
+ &:hover,
+ &:active {
+ outline: 0;
+ }
+}
+
+/* code */
+
+tt, code, kbd, samp, pre {
+ font-family: $monospace;
+}
+
+pre {
+ overflow-x: auto; /* add scrollbars to wide code blocks*/
+}
+
+p > code,
+a > code,
+li > code,
+figcaption > code,
+td > code {
+ padding-top: 0.1rem;
+ padding-bottom: 0.1rem;
+ font-size: $type-size-6;
+ background: $code-background-color;
+ border: 1px solid $lighter-gray;
+ border-radius: $border-radius;
+ box-shadow: $box-shadow;
+
+ &:before, &:after {
+ letter-spacing: -0.2em;
+ content: "\00a0"; /* non-breaking space*/
+ }
+}
+
+/* horizontal rule */
+
+hr {
+ display: block;
+ margin: 1em 0;
+ border: 0;
+ border-top: 1px solid $border-color;
+}
+
+/* lists */
+
+ul li,
+ol li {
+ margin-bottom: 0.5em;
+}
+
+li ul,
+li ol {
+ margin-top: 0.5em;
+}
+
+/*
+ Media and embeds
+ ========================================================================== */
+
+/* Figures and images */
+
+figure {
+ display: -webkit-box;
+ display: flex;
+ -webkit-box-pack: justify;
+ justify-content: space-between;
+ -webkit-box-align: start;
+ align-items: flex-start;
+ flex-wrap: wrap;
+ margin: 2em 0;
+
+ img,
+ iframe,
+ .fluid-width-video-wrapper {
+ margin-bottom: 1em;
+ }
+
+ img {
+ width: 100%;
+ border-radius: $border-radius;
+ -webkit-transition: $global-transition;
+ transition: $global-transition;
+ }
+
+ > a {
+ display: block;
+ }
+
+ &.half {
+ > a,
+ > img {
+ @include breakpoint($small) {
+ width: calc(50% - 0.5em);
+ }
+ }
+
+ figcaption {
+ width: 100%;
+ }
+ }
+
+ &.third {
+ > a,
+ > img {
+ @include breakpoint($small) {
+ width: calc(33.3333% - 0.5em);
+ }
+ }
+
+ figcaption {
+ width: 100%;
+ }
+ }
+}
+
+/* Figure captions */
+
+figcaption {
+ margin-bottom: 0.5em;
+ color: mix(#fff, $text-color, 25%);
+ font-family: $caption-font-family;
+ font-size: $type-size-6;
+
+ a {
+ color: inherit;
+ text-decoration: none;
+ border-bottom: 1px solid $light-gray;
+ -webkit-transition: $global-transition;
+ transition: $global-transition;
+
+ &:hover {
+ color: #000;
+ border-bottom-color: #000;
+ }
+ }
+}
+
+
+/* Fix IE9 SVG bug */
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+
+/*
+ Navigation lists
+ ========================================================================== */
+
+/**
+ * Removes margins, padding, and bullet points from navigation lists
+ *
+ * Example usage:
+ *
+ */
+
+nav {
+ ul {
+ margin: 0;
+ padding: 0;
+ }
+
+ li {
+ list-style: none;
+ }
+
+ a {
+ text-decoration: none;
+ }
+
+ /* override white-space for nested lists */
+ ul li,
+ ol li {
+ margin-bottom: 0;
+ }
+
+ li ul,
+ li ol {
+ margin-top: 0;
+ }
+}
+
+/*
+ Global animation transition
+ ========================================================================== */
+
+b, i, strong, em, blockquote, p, q, span, figure, img, h1, h2, header, input, a, tr, td, form button, input[type="submit"], .btn, .highlight, .archive__item-teaser {
+ -webkit-transition: $global-transition;
+ transition: $global-transition;
+}
\ No newline at end of file
diff --git a/_sass/_buttons.scss b/_sass/_buttons.scss
new file mode 100644
index 00000000..d6cf90ea
--- /dev/null
+++ b/_sass/_buttons.scss
@@ -0,0 +1,153 @@
+/* ==========================================================================
+ BUTTONS
+ ========================================================================== */
+
+/*
+ Default button
+ ========================================================================== */
+
+.btn {
+ /* default button */
+ display: inline-block;
+ margin-bottom: 0.25em;
+ padding: 0.5em 1em;
+ color: #fff !important;
+ font-family: $sans-serif;
+ font-size: $type-size-6;
+ font-weight: bold;
+ text-align: center;
+ text-decoration: none;
+ background-color: $primary-color;
+ border: 0 !important;
+ border-radius: $border-radius;
+ cursor: pointer;
+
+ &:hover {
+ background-color: mix(white, #000, 20%);
+ }
+
+ .icon {
+ margin-right: 0.5em;
+ }
+
+ .icon + .hidden {
+ margin-left: -0.5em; /* override for hidden text*/
+ }
+
+ /* fills width of parent container */
+
+ &--block {
+ display: block;
+ width: 100%;
+
+ + .btn--block {
+ margin-top: 0.25em;
+ }
+ }
+
+ /* for dark backgrounds */
+
+ &--inverse {
+ color: $gray !important;
+ border: 1px solid $light-gray !important; /* override*/
+ background-color: #fff;
+
+ &:hover {
+ color: #fff !important;
+ border-color: $gray;
+ }
+ }
+
+ /* light outline */
+
+ &--light-outline {
+ border: 1px solid #fff !important; /* override*/
+ background-color: transparent;
+ }
+
+ /* information */
+
+ &--info {
+ background-color: $info-color;
+
+ &:hover {
+ background-color: mix(#000, $info-color, 20%);
+ }
+ }
+
+ /* warning */
+
+ &--warning {
+ background-color: $warning-color;
+
+ &:hover {
+ background-color: mix(#000, $warning-color, 20%);
+ }
+ }
+
+ /* success */
+
+ &--success {
+ background-color: $success-color;
+
+ &:hover {
+ background-color: mix(#000, $success-color, 20%);
+ }
+ }
+
+ /* danger */
+
+ &--danger {
+ background-color: $danger-color;
+
+ &:hover {
+ background-color: mix(#000, $danger-color, 20%);
+ }
+ }
+
+ /* disabled */
+
+ &--disabled {
+ pointer-events: none;
+ cursor: not-allowed;
+ filter: alpha(opacity=65);
+ box-shadow: none;
+ opacity: 0.65;
+ }
+
+ /* social buttons */
+
+ $social:
+ (facebook, $facebook-color),
+ (twitter, $twitter-color),
+ (google-plus, $google-plus-color),
+ (linkedin, $linkedin-color);
+
+ @each $socialnetwork, $color in $social {
+ &--#{$socialnetwork} {
+ background-color: $color;
+
+ &:hover {
+ background-color: mix(#000, $color, 20%);
+ }
+ }
+ }
+
+ /* extra large button */
+
+ &--x-large {
+ font-size: $type-size-4;
+ }
+
+ /* large button */
+
+ &--large {
+ font-size: $type-size-5;
+ }
+
+ /* small button */
+
+ &--small {
+ font-size: $type-size-7;
+ }
+}
\ No newline at end of file
diff --git a/_sass/_footer.scss b/_sass/_footer.scss
new file mode 100644
index 00000000..f7b7ff80
--- /dev/null
+++ b/_sass/_footer.scss
@@ -0,0 +1,73 @@
+/* ==========================================================================
+ FOOTER
+ ========================================================================== */
+
+.page__footer {
+ @include full();
+ @include clearfix;
+ margin-top: 3em;
+ color: mix(#fff, $gray, 25%);
+ -webkit-animation: intro 0.3s both;
+ animation: intro 0.3s both;
+ -webkit-animation-delay: 0.45s;
+ animation-delay: 0.45s;
+ background-color: $lighter-gray;
+ border-top: 1px solid $light-gray;
+
+ footer {
+ @include container;
+ @include clearfix;
+ margin-top: 2em;
+ padding: 0 1em 2em;
+
+ @include breakpoint($x-large) {
+ max-width: $x-large;
+ }
+ }
+
+ a {
+ color: inherit;
+ text-decoration: none;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+
+ .fa {
+ color: mix(#fff, $gray, 25%);
+ }
+}
+
+.page__footer-copyright {
+ font-family: $global-font-family;
+ font-size: $type-size-7;
+}
+
+.page__footer-follow {
+
+ ul {
+ margin: 0;
+ padding: 0;
+ list-style-type: none;
+ }
+
+ li {
+ display: inline-block;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ font-family: $sans-serif-narrow;
+ font-size: $type-size-6;
+ text-transform: uppercase;
+ }
+
+ li + li:before {
+ content: "";
+ padding-right: 5px;
+ }
+
+ a {
+ padding-right: 10px;
+ font-weight: bold;
+ }
+}
\ No newline at end of file
diff --git a/_sass/_forms.scss b/_sass/_forms.scss
new file mode 100644
index 00000000..a1f0f146
--- /dev/null
+++ b/_sass/_forms.scss
@@ -0,0 +1,391 @@
+/* ==========================================================================
+ Forms
+ ========================================================================== */
+
+form {
+ margin: 0 0 5px 0;
+
+ fieldset {
+ margin-bottom: 5px;
+ padding: 0;
+ border-width: 0;
+ }
+
+ legend {
+ display: block;
+ width: 100%;
+ margin-bottom: 5px * 2;
+ *margin-left: -7px;
+ padding: 0;
+ color: $text-color;
+ border: 0;
+ border-bottom: 1px solid mix(#fff, #000, 80%);
+ white-space: normal;
+ }
+
+ p {
+ margin-bottom: 5px / 2;
+ }
+
+ ul {
+ list-style-type: none;
+ margin: 0 0 5px 0;
+ padding: 0;
+ }
+
+ br {
+ display: none;
+ }
+}
+
+label,
+input,
+button,
+select,
+textarea {
+ vertical-align: baseline;
+ *vertical-align: middle;
+}
+
+input,
+button,
+select,
+textarea {
+ box-sizing: border-box;
+ font-family: $sans-serif;
+}
+
+label {
+ display: block;
+ margin-bottom: 0.25em;
+ color: $text-color;
+ cursor: pointer;
+
+ small {
+ font-size: $type-size-6;
+ }
+
+ input,
+ textarea,
+ select {
+ display: block;
+ }
+}
+
+input,
+textarea,
+select {
+ display: inline-block;
+ width: 100%;
+ padding: 0.25em;
+ margin-bottom: 0.5em;
+ color: $text-color;
+ background-color: #fff;
+ border: 1px solid mix(#fff, #000, 80%);
+ border-radius: $border-radius;
+ box-shadow: $box-shadow;
+
+ &:hover {
+ border-color: mix(#fff, $primary-color, 50%);
+ }
+}
+
+.input-mini {
+ width: 60px;
+}
+
+.input-small {
+ width: 90px;
+}
+
+input[type="image"],
+input[type="checkbox"],
+input[type="radio"] {
+ width: auto;
+ height: auto;
+ padding: 0;
+ margin: 3px 0;
+ *margin-top: 0;
+ line-height: normal;
+ cursor: pointer;
+ border-radius: 0;
+ border: 0 \9;
+}
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box;
+ padding: 0;
+ *width: 13px;
+ *height: 13px;
+}
+
+input[type="image"] {
+ border: 0;
+ box-shadow: none;
+}
+
+input[type="file"] {
+ width: auto;
+ padding: initial;
+ line-height: initial;
+ border: initial;
+ background-color: transparent;
+ background-color: initial;
+ box-shadow: none;
+}
+
+input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ width: auto;
+ height: auto;
+ cursor: pointer;
+ *overflow: visible;
+}
+
+select,
+input[type="file"] {
+ *margin-top: 4px;
+}
+
+select {
+ width: auto;
+ background-color: #fff;
+}
+
+select[multiple],
+select[size] {
+ height: auto;
+}
+
+textarea {
+ resize: vertical;
+ height: auto;
+ overflow: auto;
+ vertical-align: top;
+}
+
+input[type="hidden"] {
+ display: none;
+}
+
+.form {
+ position: relative;
+}
+
+.radio,
+.checkbox {
+ padding-left: 18px;
+ font-weight: normal;
+}
+
+.radio input[type="radio"],
+.checkbox input[type="checkbox"] {
+ float: left;
+ margin-left: -18px;
+}
+
+.radio.inline,
+.checkbox.inline {
+ display: inline-block;
+ padding-top: 5px;
+ margin-bottom: 0;
+ vertical-align: middle;
+}
+
+.radio.inline + .radio.inline,
+.checkbox.inline + .checkbox.inline {
+ margin-left: 10px;
+}
+
+
+/*
+ Disabled state
+ ========================================================================== */
+
+input[disabled],
+select[disabled],
+textarea[disabled],
+input[readonly],
+select[readonly],
+textarea[readonly] {
+ opacity: 0.5;
+ cursor: not-allowed;
+}
+
+
+/*
+ Focus & active state
+ ========================================================================== */
+
+input:focus,
+textarea:focus {
+ border-color: $primary-color;
+ outline: 0;
+ outline: thin dotted \9;
+}
+
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus,
+select:focus {
+ box-shadow: none;
+}
+
+
+/*
+ Help text
+ ========================================================================== */
+
+.help-block,
+.help-inline {
+ color: $info-color;
+}
+
+.help-block {
+ display: block;
+ margin-bottom: 1em;
+ line-height: 1em;
+}
+
+.help-inline {
+ display: inline-block;
+ vertical-align: middle;
+ padding-left: 5px;
+}
+
+
+/*
+ .form-inline
+ ========================================================================== */
+
+.form-inline input,
+.form-inline textarea,
+.form-inline select {
+ display: inline-block;
+ margin-bottom: 0;
+}
+
+.form-inline label {
+ display: inline-block;
+}
+
+.form-inline .radio,
+.form-inline .checkbox,
+.form-inline .radio {
+ padding-left: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+}
+
+.form-inline .radio input[type="radio"],
+.form-inline .checkbox input[type="checkbox"] {
+ float: left;
+ margin-left: 0;
+ margin-right: 3px; }
+
+
+/*
+ .form-search
+ ========================================================================== */
+
+.form-search input,
+.form-search textarea,
+.form-search select {
+ display: inline-block;
+ margin-bottom: 0;
+}
+
+.form-search .search-query {
+ padding-left: 14px;
+ padding-right: 14px;
+ margin-bottom: 0;
+ border-radius: 14px;
+}
+
+.form-search label {
+ display: inline-block;
+}
+
+.form-search .radio,
+.form-search .checkbox,
+.form-inline .radio {
+ padding-left: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+}
+
+.form-search .radio input[type="radio"],
+.form-search .checkbox input[type="checkbox"] {
+ float: left;
+ margin-left: 0;
+ margin-right: 3px;
+}
+
+
+/*
+ .form--loading
+ ========================================================================== */
+
+.form--loading:before {
+ content: '';
+}
+
+.form--loading .form__spinner {
+ display: block;
+}
+
+.form:before {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(255, 255, 255, 0.7);
+ z-index: 10;
+}
+
+.form__spinner {
+ display: none;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ z-index: 11;
+}
+
+
+
+/*
+ Google search form
+ ========================================================================== */
+
+#goog-fixurl {
+ ul {
+ list-style: none;
+ margin-left: 0;
+ padding-left: 0;
+ li {
+ list-style-type: none;
+ }
+ }
+}
+
+#goog-wm-qt {
+ width: auto;
+ margin-right: 10px;
+ margin-bottom: 20px;
+ padding: 8px 20px;
+ display: inline-block;
+ font-size: $type-size-6;
+ background-color: #fff;
+ color: #000;
+ border-width: 2px !important;
+ border-style: solid !important;
+ border-color: lighten(#000,50);
+ border-radius: $border-radius;
+}
+
+#goog-wm-sb {
+ @extend .btn;
+}
\ No newline at end of file
diff --git a/_sass/_masthead.scss b/_sass/_masthead.scss
new file mode 100644
index 00000000..dec55cd1
--- /dev/null
+++ b/_sass/_masthead.scss
@@ -0,0 +1,53 @@
+/* ==========================================================================
+ MASTHEAD
+ ========================================================================== */
+
+.masthead {
+ position: relative;
+ border-bottom: 1px solid $border-color;
+ -webkit-animation: intro 0.3s both;
+ animation: intro 0.3s both;
+ -webkit-animation-delay: 0.15s;
+ animation-delay: 0.15s;
+ z-index: 20;
+
+ &__inner-wrap {
+ @include container;
+ @include clearfix;
+ padding: 1em 1em 1em;
+ font-family: $sans-serif-narrow;
+
+ @include breakpoint($x-large) {
+ max-width: $x-large;
+ }
+
+ nav {
+ z-index: 10;
+ }
+
+ a {
+ text-decoration: none;
+ }
+ }
+}
+
+.masthead__menu {
+
+ ul {
+ margin: 0;
+ padding: 0;
+ clear: both;
+ list-style-type: none;
+ }
+}
+
+.masthead__menu-item {
+ display: block;
+ list-style-type: none;
+ white-space: nowrap;
+
+ &--lg {
+ padding-right: 2em;
+ font-weight: 700;
+ }
+}
\ No newline at end of file
diff --git a/_sass/_mixins.scss b/_sass/_mixins.scss
new file mode 100644
index 00000000..14782b19
--- /dev/null
+++ b/_sass/_mixins.scss
@@ -0,0 +1,53 @@
+/* ==========================================================================
+ MIXINS
+ ========================================================================== */
+
+%tab-focus {
+ /* Default*/
+ outline: thin dotted $warning-color;
+ /* Webkit*/
+ outline: 5px auto $warning-color;
+ outline-offset: -2px;
+}
+
+/*
+ em function
+ ========================================================================== */
+
+@function em($target, $context: $doc-font-size) {
+ @return ($target / $context) * 1em;
+}
+
+
+/*
+ Bourbon clearfix
+ ========================================================================== */
+
+/*
+ * Provides an easy way to include a clearfix for containing floats.
+ * link http://cssmojo.com/latest_new_clearfix_so_far/
+ *
+ * example scss - Usage
+ *
+ * .element {
+ * @include clearfix;
+ * }
+ *
+ * example css - CSS Output
+ *
+ * .element::after {
+ * clear: both;
+ * content: "";
+ * display: table;
+ * }
+*/
+
+@mixin clearfix {
+ clear: both;
+
+ &::after {
+ clear: both;
+ content: "";
+ display: table;
+ }
+}
\ No newline at end of file
diff --git a/_sass/_navigation.scss b/_sass/_navigation.scss
new file mode 100644
index 00000000..d96735b8
--- /dev/null
+++ b/_sass/_navigation.scss
@@ -0,0 +1,432 @@
+/* ==========================================================================
+ NAVIGATION
+ ========================================================================== */
+
+/*
+ Breadcrumb navigation links
+ ========================================================================== */
+
+.breadcrumbs {
+ @include container;
+ @include clearfix;
+ margin-top: 0;
+ margin-bottom: 0;
+ padding-left: 2em;
+ padding-right: 2em;
+ font-family: $sans-serif;
+ -webkit-animation: intro 0.3s both;
+ animation: intro 0.3s both;
+ -webkit-animation-delay: 0.30s;
+ animation-delay: 0.30s;
+
+ @include breakpoint($large) {
+ padding-left: 1em;
+ padding-right: 1em;
+ }
+
+ @include breakpoint($x-large) {
+ max-width: $x-large;
+ }
+
+ ol {
+ padding: 0;
+ list-style: none;
+ font-size: $type-size-6;
+
+ @include breakpoint($large) {
+ @include span(10 of 12 last);
+ }
+
+ @include breakpoint($x-large) {
+ @include prefix(0.5 of 12);
+ }
+ }
+
+ li {
+ display: inline;
+ }
+
+ .current {
+ font-weight: bold;
+ }
+}
+
+
+/*
+ Post pagination navigation links
+ ========================================================================== */
+
+.pagination {
+ @include full();
+ @include clearfix();
+ margin-top: 1em;
+ padding-top: 1em;
+
+ ul {
+ margin: 0;
+ padding: 0;
+ list-style-type: none;
+ font-family: $sans-serif;
+ }
+
+ li {
+ display: block;
+ float: left;
+ margin-left: -1px;
+
+ a {
+ margin-bottom: 0.25em;
+ padding: 0.5em 1em;
+ font-family: $sans-serif;
+ font-size: 14px;
+ font-weight: bold;
+ line-height: 1.5;
+ text-align: center;
+ text-decoration: none;
+ color: mix(#fff, $gray, 25%);
+ border: 1px solid $light-gray;
+ border-radius: 0;
+
+ &:hover {
+ color: $link-color-hover;
+ }
+
+ &.current {
+ color: #fff;
+ background: $primary-color;
+ }
+
+ &.disabled {
+ color: mix(#fff, $gray, 75%);
+ pointer-events: none;
+ cursor: not-allowed;
+ }
+ }
+
+ &:first-child {
+ margin-left: 0;
+
+ a {
+ border-top-left-radius: $border-radius;
+ border-bottom-left-radius: $border-radius;
+ }
+ }
+
+ &:last-child {
+ a {
+ border-top-right-radius: $border-radius;
+ border-bottom-right-radius: $border-radius;
+ }
+ }
+ }
+
+ /* next/previous buttons */
+ &--pager {
+ display: block;
+ padding: 1em 2em;
+ float: left;
+ width: 50%;
+ font-family: $sans-serif;
+ font-size: $type-size-5;
+ font-weight: bold;
+ text-align: center;
+ text-decoration: none;
+ color: mix(#fff, $gray, 50%);
+ border: 1px solid $light-gray;
+ border-radius: $border-radius;
+
+ &:hover {
+ color: $link-color-hover;
+ }
+
+ &:first-child {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ }
+
+ &:last-child {
+ margin-left: -1px;
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ }
+
+ &.disabled {
+ color: mix(#fff, $gray, 75%);
+ pointer-events: none;
+ cursor: not-allowed;
+ }
+ }
+}
+
+.page__content + .pagination,
+.page__meta + .pagination,
+.page__share + .pagination,
+.page__comments + .pagination {
+ margin-top: 2em;
+ padding-top: 2em;
+ border-top: 1px solid $border-color;
+}
+
+
+/*
+ Priority plus navigation
+ ========================================================================== */
+
+.greedy-nav {
+ position: relative;
+ min-width: 250px;
+ background: $background-color;
+
+ a {
+ display: block;
+ margin: 0 1rem;
+ padding: 0.5rem 0;
+ color: $masthead-link-color;
+ text-decoration: none;
+
+ &:hover {
+ color: $masthead-link-color-hover;
+ }
+ }
+
+ button {
+ position: absolute;
+ height: 100%;
+ right: 0;
+ padding: 0 0.5rem;
+ border: 0;
+ outline: none;
+ background-color: $primary-color;
+ color: #fff;
+ cursor: pointer;
+ }
+
+ .visible-links {
+ display: table;
+
+ li {
+ display: table-cell;
+ vertical-align: middle;
+
+ &:first-child {
+ font-weight: bold;
+
+ a {
+ margin-left: 0;
+ }
+ }
+
+ &:last-child {
+ a {
+ margin-right: 0;
+ }
+ }
+ }
+
+ a {
+ position: relative;
+
+ &:before {
+ content: "";
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ height: 4px;
+ background: mix(#fff, $primary-color, 50%);
+ width: 100%;
+ -webkit-transition: $global-transition;
+ transition: $global-transition;
+ -webkit-transform: scaleX(0);
+ -ms-transform: scaleX(0);
+ transform: scaleX(0); /* hide*/
+ }
+
+ &:hover:before {
+ -webkit-transform: scaleX(1);
+ -ms-transform: scaleX(1);
+ transform: scaleX(1); /* reveal*/
+ }
+ }
+ }
+
+ .hidden-links {
+ position: absolute;
+ top: 100%;
+ right: 0;
+ margin-top: 15px;
+ padding: 5px;
+ border: 1px solid $border-color;
+ border-radius: $border-radius;
+ background: #fff;
+ box-shadow: 0 0 10px rgba(#000, 0.25);
+
+ a {
+ margin: 0;
+ padding: 10px 20px;
+ font-size: $type-size-5;
+
+ &:hover {
+ color: $masthead-link-color-hover;
+ background: mix(#fff, $primary-color, 75%);
+ }
+ }
+
+ &:before {
+ content: "";
+ position: absolute;
+ top: -11px;
+ right: 10px;
+ width: 0;
+ border-style: solid;
+ border-width: 0 10px 10px;
+ border-color: $border-color transparent;
+ display: block;
+ z-index: 0;
+ }
+
+ &:after {
+ content: "";
+ position: absolute;
+ top: -10px;
+ right: 10px;
+ width: 0;
+ border-style: solid;
+ border-width: 0 10px 10px;
+ border-color: #fff transparent;
+ display: block;
+ z-index: 1;
+ }
+
+ li {
+ display: block;
+ border-bottom: 1px solid $border-color;
+
+ &:last-child {
+ border-bottom: none;
+ }
+ }
+ }
+}
+
+
+/*
+ Navigation list
+ ========================================================================== */
+
+.nav__list {
+ font-size: 1.25rem;
+
+ ul {
+ margin-bottom: 1em;
+ }
+
+ a {
+ display: block;
+ padding: 0.125em 0;
+ color: inherit;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+
+ .active {
+ margin-left: -0.5em;
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+ color: #fff;
+ font-weight: bold;
+ background: $primary-color;
+ border-radius: $border-radius;
+
+ &:hover {
+ color: #fff;
+ }
+ }
+}
+
+.nav__title {
+ margin: 0;
+ padding: 0.5rem 1rem;
+ font-family: $sans-serif-narrow;
+ font-size: $type-size-5;
+ font-weight: bold;
+}
+
+.nav__sub-title {
+ display: block;
+ margin: 0.5rem 0;
+ padding: 0.5rem 0;
+ font-family: $sans-serif-narrow;
+ font-size: $type-size-6;
+ font-weight: bold;
+ text-transform: uppercase;
+ border-bottom: 1px solid $border-color;
+}
+
+
+/*
+ Table of contents navigation
+ ========================================================================== */
+
+.toc {
+ font-family: $sans-serif-narrow;
+ color: $gray;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+ background-color: #fff;
+ border: 1px solid $border-color;
+ border-radius: $border-radius;
+ box-shadow: $box-shadow;
+
+ .nav__title {
+ color: #fff;
+ font-size: $type-size-6;
+ background: $primary-color;
+ border-top-left-radius: $border-radius;
+ border-top-right-radius: $border-radius;
+ }
+}
+
+.toc__menu {
+ margin: 0;
+ padding: 0;
+ width: 100%;
+ list-style: none;
+ font-size: 0.8rem;
+
+ a {
+ display: block;
+ padding: 0.5rem 1rem;
+ color: $gray;
+ font-size: $type-size-7;
+ font-weight: bold;
+ line-height: 1.5;
+ border-bottom: 1px solid $border-color;
+
+ &:hover {
+ color: #000;
+ background: $lighter-gray;
+ }
+ }
+
+ > li:last-child {
+ a {
+ border-bottom: none;
+ }
+ }
+
+ li ul > li a {
+ padding-left: 2rem;
+ font-weight: normal;
+ }
+
+ /* hide sub sub links on small screens*/
+ li > ul li {
+ display: none;
+
+ @include breakpoint($medium) {
+ display: block;
+ }
+ }
+}
\ No newline at end of file
diff --git a/_sass/_notices.scss b/_sass/_notices.scss
new file mode 100644
index 00000000..26afa319
--- /dev/null
+++ b/_sass/_notices.scss
@@ -0,0 +1,99 @@
+/* ==========================================================================
+ NOTICE TEXT BLOCKS
+ ========================================================================== */
+
+/**
+ * Default Kramdown usage (no indents!):
+ *
+ * #### Headline for the Notice
+ * Text for the notice
+ *
+ */
+
+@mixin notice($notice-color) {
+ margin: 2em 0 !important; /* override*/
+ padding: 1em;
+ font-family: $global-font-family;
+ font-size: $type-size-6 !important;
+ text-indent: initial; /* override*/
+ background-color: mix(#fff, $notice-color, 90%);
+ border-radius: $border-radius;
+ box-shadow: 0 1px 1px rgba($notice-color, 0.25);
+
+ h4 {
+ margin-top: 0 !important; /* override*/
+ margin-bottom: 0.75em;
+ }
+
+ @at-root .page__content #{&} h4 {
+ /* using at-root to override .page-content h4 font size*/
+ margin-bottom: 0;
+ font-size: 1em;
+ }
+
+ p {
+ &:last-child {
+ margin-bottom: 0 !important; /* override*/
+ }
+ }
+
+ h4 + p {
+ /* remove space above paragraphs that appear directly after notice headline*/
+ margin-top: 0;
+ padding-top: 0;
+ }
+
+ a {
+ color: $notice-color;
+
+ &:hover {
+ color: mix(#000, $notice-color, 40%);
+ }
+ }
+
+ code {
+ background-color: mix(#fff, $notice-color, 95%)
+ }
+
+ ul {
+ &:last-child {
+ margin-bottom: 0; /* override*/
+ }
+ }
+}
+
+/* Default notice */
+
+.notice {
+ @include notice($light-gray);
+}
+
+/* Primary notice */
+
+.notice--primary {
+ @include notice($primary-color);
+}
+
+/* Info notice */
+
+.notice--info {
+ @include notice($info-color);
+}
+
+/* Warning notice */
+
+.notice--warning {
+ @include notice($warning-color);
+}
+
+/* Success notice */
+
+.notice--success {
+ @include notice($success-color);
+}
+
+/* Danger notice */
+
+.notice--danger {
+ @include notice($danger-color);
+}
\ No newline at end of file
diff --git a/_sass/_page.scss b/_sass/_page.scss
new file mode 100644
index 00000000..1c822397
--- /dev/null
+++ b/_sass/_page.scss
@@ -0,0 +1,401 @@
+/* ==========================================================================
+ SINGLE PAGE/POST
+ ========================================================================== */
+
+#main {
+ @include container;
+ @include clearfix;
+ margin-top: 2em;
+ padding-left: 1em;
+ padding-right: 1em;
+ animation: intro 0.3s both;
+ animation-delay: 0.35s;
+
+ @include breakpoint($x-large) {
+ max-width: $x-large;
+ }
+}
+
+.page {
+ @include breakpoint($large) {
+ @include span(10 of 12 last);
+ @include prefix(0.5 of 12);
+ @include suffix(2 of 12);
+ }
+
+ .page__inner-wrap {
+ @include full();
+
+ .page__content,
+ .page__meta,
+ .page__share {
+ @include full();
+ }
+ }
+}
+
+.page__title {
+ margin-top: 0;
+ line-height: 1;
+
+ & + .page__meta {
+ margin-top: -0.5em;
+ }
+}
+
+.page__lead {
+ font-family: $global-font-family;
+ font-size: $type-size-4;
+}
+
+.page__content {
+
+ h2 {
+ padding-bottom: 0.5em;
+ border-bottom: 1px solid $border-color;
+ }
+
+ p, li, dl {
+ font-size: 1em;
+ }
+
+ /* paragraph indents */
+ p {
+ margin: 0 0 $indent-var;
+
+ /* sibling indentation*/
+ @if $paragraph-indent == true {
+ & + p {
+ text-indent: $indent-var;
+ margin-top: -($indent-var);
+ }
+ }
+ }
+
+ a {
+ text-decoration: none;
+
+ &:hover {
+ text-decoration: underline;
+
+ img {
+ box-shadow: 0 0 10px rgba(#000, 0.25);
+ }
+ }
+ }
+
+ dt {
+ margin-top: 1em;
+ font-family: $sans-serif;
+ font-weight: bold;
+ }
+
+ dd {
+ margin-left: 1em;
+ font-family: $sans-serif;
+ font-size: $type-size-6;
+ }
+
+ .small {
+ font-size: $type-size-6;
+ }
+
+ /* blockquote citations */
+ blockquote + .small {
+ margin-top: -1.5em;
+ padding-left: 1.25rem;
+ }
+}
+
+.page__hero {
+ position: relative;
+ margin-bottom: 2em;
+ @include clearfix;
+ animation: intro 0.3s both;
+ animation-delay: 0.25s;
+
+ &--overlay {
+ position: relative;
+ margin-bottom: 2em;
+ padding: 3em 0;
+ @include clearfix;
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-position: center;
+ animation: intro 0.3s both;
+ animation-delay: 0.25s;
+
+ a {
+ color: #fff;
+ }
+
+ .wrapper {
+ padding-left: 1em;
+ padding-right: 1em;
+
+ @include breakpoint($x-large) {
+ max-width: $x-large;
+ }
+ }
+
+ .page__title,
+ .page__meta,
+ .page__lead,
+ .btn {
+ color: #fff;
+ text-shadow: 1px 1px 4px rgba(#000, 0.5);
+ }
+
+ .page__lead {
+ max-width: $medium;
+ }
+
+ .page__title {
+ font-size: $type-size-2;
+
+ @include breakpoint($small) {
+ font-size: $type-size-1;
+ }
+ }
+ }
+}
+
+.page__hero-image {
+ width: 100%;
+ height: auto;
+ -ms-interpolation-mode: bicubic;
+}
+
+.page__hero-caption {
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ margin: 0 auto;
+ padding: 2px 5px;
+ color: #fff;
+ font-family: $caption-font-family;
+ font-size: $type-size-7;
+ background: #000;
+ text-align: right;
+ z-index: 5;
+ opacity: 0.5;
+ border-radius: $border-radius 0 $border-radius 0;
+
+ @include breakpoint($large) {
+ padding: 5px 10px;
+ }
+
+ a {
+ color: #fff;
+ text-decoration: none;
+ }
+}
+
+/*
+ Social sharing
+ ========================================================================== */
+
+.page__share {
+ margin-top: 2em;
+ padding-top: 1em;
+ border-top: 1px solid $border-color;
+
+ @include breakpoint(max-width $small) {
+ .btn span {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+ }
+ }
+}
+
+.page__share-title {
+ margin-bottom: 10px;
+ font-size: $type-size-6;
+ text-transform: uppercase;
+}
+
+
+/*
+ Page meta
+ ========================================================================== */
+
+.page__meta {
+ margin-top: 2em;
+ color: mix(#fff, $gray, 25%);
+ font-family: $sans-serif;
+ font-size: $type-size-6;
+
+ p {
+ margin: 0;
+ }
+
+ a {
+ color: inherit;
+ }
+}
+
+.page__meta-title {
+ margin-bottom: 10px;
+ font-size: $type-size-6;
+ text-transform: uppercase;
+}
+
+
+/*
+ Page taxonomy
+ ========================================================================== */
+
+.page__taxonomy {
+ .sep {
+ display: none;
+ }
+
+ strong {
+ margin-right: 10px;
+ }
+}
+
+.page__taxonomy-item {
+ display: inline-block;
+ margin-right: 5px;
+ margin-bottom: 8px;
+ padding: 5px 10px;
+ text-decoration: none;
+ border: 1px solid $light-gray;
+ border-radius: $border-radius;
+
+ &:hover {
+ text-decoration: none;
+ color: $link-color-hover;
+ }
+}
+
+
+/*
+ Comments
+ ========================================================================== */
+
+.page__comments {
+ @include full();
+}
+
+.page__comments-title {
+ margin-top: 2rem;
+ margin-bottom: 10px;
+ padding-top: 2rem;
+ font-size: $type-size-6;
+ border-top: 1px solid $border-color;
+ text-transform: uppercase;
+}
+
+.page__comments-form {
+ padding: 1em;
+ background: $lighter-gray;
+ transition: $global-transition;
+
+ &.disabled {
+ input,
+ button,
+ textarea,
+ label {
+ pointer-events: none;
+ cursor: not-allowed;
+ filter: alpha(opacity=65);
+ box-shadow: none;
+ opacity: 0.65;
+ }
+ }
+}
+
+.comment {
+ @include clearfix();
+ margin: 1em 0;
+
+ &:not(:last-child) {
+ border-bottom: 1px solid $border-color;
+ }
+}
+
+.comment__avatar-wrapper {
+ float: left;
+ width: 60px;
+ height: 60px;
+
+ @include breakpoint($large) {
+ width: 100px;
+ height: 100px;
+ }
+}
+
+.comment__avatar {
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+
+ @include breakpoint($large) {
+ width: 80px;
+ height: 80px;
+ padding: 5px;
+ border: 1px solid $border-color;
+ }
+}
+
+.comment__content-wrapper {
+ float: right;
+ width: calc(100% - 60px);
+
+ @include breakpoint($large) {
+ width: calc(100% - 100px);
+ }
+}
+
+.comment__author {
+ margin: 0;
+
+ a {
+ text-decoration: none;
+ }
+}
+
+.comment__date {
+ @extend .page__meta;
+ margin: 0;
+
+ a {
+ text-decoration: none;
+ }
+}
+
+
+/*
+ Related
+ ========================================================================== */
+
+.page__related {
+ margin-top: 2em;
+ padding-top: 1em;
+ border-top: 1px solid $border-color;
+ @include clearfix();
+ float: left;
+
+ @include breakpoint($large) {
+ @include pre(2.5 of 12);
+ }
+
+ a {
+ color: inherit;
+ text-decoration: none;
+ }
+}
+
+.page__related-title {
+ margin-bottom: 10px;
+ font-size: $type-size-6;
+ text-transform: uppercase;
+}
\ No newline at end of file
diff --git a/_sass/_print.scss b/_sass/_print.scss
new file mode 100644
index 00000000..09bdb1d8
--- /dev/null
+++ b/_sass/_print.scss
@@ -0,0 +1,18 @@
+/* ==========================================================================
+ PRINT STYLES
+ ========================================================================== */
+
+/*
+ Hide the following elements on print
+ ========================================================================== */
+
+@media print {
+ .masthead,
+ .toc,
+ .page__share,
+ .page__related,
+ .ads,
+ .page__footer {
+ display: none;
+ }
+}
diff --git a/_sass/_reset.scss b/_sass/_reset.scss
new file mode 100644
index 00000000..d9ae7875
--- /dev/null
+++ b/_sass/_reset.scss
@@ -0,0 +1,187 @@
+/* ==========================================================================
+ STYLE RESETS
+ ========================================================================== */
+
+@include border-box-sizing;
+
+html {
+ /* apply a natural box layout model to all elements */
+ box-sizing: border-box;
+ background-color: $background-color;
+ font-size: 16px;
+
+ @include breakpoint($medium) {
+ font-size: 18px;
+ }
+
+ @include breakpoint($large) {
+ font-size: 20px;
+ }
+
+ @include breakpoint($x-large) {
+ font-size: 22px;
+ }
+
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+
+/* Remove margin */
+
+body { margin: 0; }
+
+/* Selected elements */
+
+::-moz-selection {
+ color: #fff;
+ background: #000;
+}
+
+::selection {
+ color: #fff;
+ background: #000;
+}
+
+/* Display HTML5 elements in IE6-9 and FF3 */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section {
+ display: block;
+}
+
+/* Display block in IE6-9 and FF3 */
+
+audio,
+canvas,
+video {
+ display: inline-block;
+ *display: inline;
+ *zoom: 1;
+}
+
+/* Prevents modern browsers from displaying 'audio' without controls */
+
+audio:not([controls]) {
+ display: none;
+}
+
+a {
+ color: $link-color;
+}
+
+/* Apply focus state */
+
+a:focus {
+ @extend %tab-focus;
+}
+
+/* Remove outline from links */
+
+a:hover,
+a:active {
+ outline: 0;
+}
+
+/* Prevent sub and sup affecting line-height in all browsers */
+
+sub,
+sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+/* img border in anchor's and image quality */
+
+img {
+ /* Responsive images (ensure images don't scale beyond their parents) */
+ max-width: 100%; /* part 1: Set a maximum relative to the parent*/
+ width: auto\9; /* IE7-8 need help adjusting responsive images*/
+ height: auto; /* part 2: Scale the height according to the width, otherwise you get stretching*/
+
+ vertical-align: middle;
+ border: 0;
+ -ms-interpolation-mode: bicubic;
+}
+
+/* Prevent max-width from affecting Google Maps */
+
+#map_canvas img,
+.google-maps img {
+ max-width: none;
+}
+
+/* Consistent form font size in all browsers, margin changes, misc */
+
+button,
+input,
+select,
+textarea {
+ margin: 0;
+ font-size: 100%;
+ vertical-align: middle;
+}
+
+button,
+input {
+ *overflow: visible; /* inner spacing ie IE6/7*/
+ line-height: normal; /* FF3/4 have !important on line-height in UA stylesheet*/
+}
+
+button::-moz-focus-inner,
+input::-moz-focus-inner { /* inner padding and border oddities in FF3/4*/
+ padding: 0;
+ border: 0;
+}
+
+button,
+html input[type="button"], // avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button; /* corrects inability to style clickable `input` types in iOS*/
+ cursor: pointer; /* improves usability and consistency of cursor style between image-type `input` and others*/
+}
+
+label,
+select,
+button,
+input[type="button"],
+input[type="reset"],
+input[type="submit"],
+input[type="radio"],
+input[type="checkbox"] {
+ cursor: pointer; /* improves usability and consistency of cursor style between image-type `input` and others*/
+}
+
+input[type="search"] { /* Appearance in Safari/Chrome*/
+ box-sizing: content-box;
+ -webkit-appearance: textfield;
+}
+
+input[type="search"]::-webkit-search-decoration,
+input[type="search"]::-webkit-search-cancel-button {
+ -webkit-appearance: none; /* inner-padding issues in Chrome OSX, Safari 5*/
+}
+
+textarea {
+ overflow: auto; /* remove vertical scrollbar in IE6-9*/
+ vertical-align: top; /* readability and alignment cross-browser*/
+}
diff --git a/_sass/_sidebar.scss b/_sass/_sidebar.scss
new file mode 100644
index 00000000..377c6237
--- /dev/null
+++ b/_sass/_sidebar.scss
@@ -0,0 +1,232 @@
+/* ==========================================================================
+ SIDEBAR
+ ========================================================================== */
+
+/*
+ Default
+ ========================================================================== */
+
+.sidebar {
+ @include clearfix();
+ margin-bottom: 1em;
+
+ @include breakpoint($large) {
+ @include span(2 of 12);
+ opacity: 0.75;
+ -webkit-transition: opacity 0.2s ease-in-out;
+ transition: opacity 0.2s ease-in-out;
+
+ &:hover {
+ opacity: 1;
+ }
+ }
+
+ @include breakpoint($x-large) {
+ padding-right: 0;
+ }
+
+ h2, h3, h4, h5, h6 {
+ margin-bottom: 0;
+ font-family: $sans-serif-narrow;
+ }
+
+ h3, h4 {
+ font-size: $type-size-5;
+ }
+
+ p, li {
+ font-family: $sans-serif;
+ font-size: $type-size-6;
+ line-height: 1.5;
+ }
+
+ img {
+ width: 100%;
+ }
+}
+
+.sidebar__right {
+ margin-bottom: 1em;
+
+ @include breakpoint($large) {
+ position: relative;
+ float: right;
+ width: $right-sidebar-width-narrow;
+ margin-left: span(0.5 of 12);
+ z-index: 10;
+ }
+
+ @include breakpoint($x-large) {
+ width: $right-sidebar-width;
+ }
+}
+
+/*
+ Author profile and links
+ ========================================================================== */
+
+.author__avatar {
+ display: table-cell;
+ vertical-align: top;
+ width: 36px;
+ height: 36px;
+
+ @include breakpoint($large) {
+ display: block;
+ width: auto;
+ height: auto;
+ }
+
+ img {
+ max-width: 110px;
+ border-radius: 50%;
+
+ @include breakpoint($large) {
+ padding: 5px;
+ border: 1px solid $border-color;
+ }
+ }
+}
+
+.author__content {
+ display: table-cell;
+ vertical-align: top;
+ padding-left: 15px;
+ padding-right: 25px;
+ line-height: 1;
+
+ @include breakpoint($large) {
+ display: block;
+ width: 100%;
+ padding-left: 0;
+ padding-right: 0;
+ }
+}
+
+.author__name {
+ margin: 0;
+
+ @include breakpoint($large) {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ }
+}
+.sidebar .author__name {
+ font-family: $sans-serif;
+ font-size: $type-size-5;
+}
+
+.author__bio {
+ margin: 0;
+
+ @include breakpoint($large) {
+ margin-top: 10px;
+ margin-bottom: 20px;
+ }
+}
+
+.author__urls-wrapper {
+ position: relative;
+ display: table-cell;
+ vertical-align: middle;
+ font-family: $sans-serif;
+ z-index: 10;
+ position: relative;
+ cursor: pointer;
+
+ li:last-child {
+ a {
+ margin-bottom: 0;
+ }
+ }
+
+ @include breakpoint($large) {
+ display: block;
+ }
+
+ button {
+ margin-bottom: 0;
+
+ @include breakpoint($large) {
+ display: none;
+ }
+ }
+}
+
+.author__urls {
+ display: none;
+ position: absolute;
+ right: 0;
+ margin-top: 15px;
+ padding: 10px;
+ list-style-type: none;
+ border: 1px solid $border-color;
+ border-radius: $border-radius;
+ background: #fff;
+ z-index: -1;
+ box-shadow: 0 0 10px rgba(#000, 0.25);
+ cursor: default;
+
+ @include breakpoint($large) {
+ display: block;
+ position: relative;
+ margin: 0;
+ padding: 0;
+ border: 0;
+ background: transparent;
+ box-shadow: none;
+ }
+
+ &:before {
+ display: block;
+ content: "";
+ position: absolute;
+ top: -11px;
+ left: calc(50% - 10px);
+ width: 0;
+ border-style: solid;
+ border-width: 0 10px 10px;
+ border-color: $border-color transparent;
+ z-index: 0;
+
+ @include breakpoint($large) {
+ display: none;
+ }
+ }
+
+ &:after {
+ display: block;
+ content: "";
+ position: absolute;
+ top: -10px;
+ left: calc(50% - 10px);
+ width: 0;
+ border-style: solid;
+ border-width: 0 10px 10px;
+ border-color: #fff transparent;
+ z-index: 1;
+
+ @include breakpoint($large) {
+ display: none;
+ }
+ }
+
+ li {
+ white-space: nowrap;
+ }
+
+ a {
+ display: block;
+ margin-bottom: 5px;
+ padding-right: 5px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+ color: inherit;
+ font-size: $type-size-5;
+ text-decoration: none;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+}
\ No newline at end of file
diff --git a/_sass/_syntax.scss b/_sass/_syntax.scss
new file mode 100644
index 00000000..fb13b73a
--- /dev/null
+++ b/_sass/_syntax.scss
@@ -0,0 +1,146 @@
+/* ==========================================================================
+ Syntax highlighting
+ ========================================================================== */
+
+div.highlighter-rouge,
+figure.highlight {
+ position: relative;
+ margin-bottom: 1em;
+ font-family: $monospace;
+ font-size: $type-size-7;
+ line-height: 1.8;
+ border: 1px solid $border-color;
+ border-radius: $border-radius;
+ background-color: $code-background-color;
+ box-shadow: $box-shadow;
+
+ &:before {
+ position: absolute;
+ top: 0;
+ right: 0;
+ padding: 0.5em;
+ background-color: $lighter-gray;
+ content: "\f121";
+ font-family: "fontawesome" !important;
+ line-height: 1;
+ text-transform: none;
+ speak: none;
+ }
+
+ .highlight {
+ margin: 0;
+ padding: 1em;
+ }
+}
+
+figure.highlight {
+ padding-left: 1em;
+ padding-right: 1em;
+}
+
+.highlight table {
+ font-size: 1em;
+ border: 0;
+
+ td {
+ padding: 5px;
+ border: 0;
+
+ // line numbers
+ &.gutter {
+ padding-right: 1em;
+ color: $light-gray;
+ }
+ }
+
+ pre {
+ margin: 0;
+ }
+}
+
+.highlight pre { width: 100%; }
+
+/*
+ Solarized Light
+ http://ethanschoonover.com/solarized
+
+ SOLARIZED HEX ROLE
+ --------- -------- ------------------------------------------
+ base01 #586e75 body text / default code / primary content
+ base1 #93a1a1 comments / secondary content
+ base3 #fdf6e3 background
+ orange #cb4b16 constants
+ red #dc322f regex, special keywords
+ blue #22b3eb reserved keywords
+ cyan #2aa198 strings, numbers
+ green #859900 operators, other keywords
+ ========================================================================== */
+
+.highlight .c { color: #93a1a1 } /* Comment */
+.highlight .err { color: #586e75 } /* Error */
+.highlight .g { color: #586e75 } /* Generic */
+.highlight .k { color: #859900 } /* Keyword */
+.highlight .l { color: #586e75 } /* Literal */
+.highlight .n { color: #586e75 } /* Name */
+.highlight .o { color: #859900 } /* Operator */
+.highlight .x { color: #cb4b16 } /* Other */
+.highlight .p { color: #586e75 } /* Punctuation */
+.highlight .cm { color: #93a1a1 } /* Comment.Multiline */
+.highlight .cp { color: #859900 } /* Comment.Preproc */
+.highlight .c1 { color: #93a1a1 } /* Comment.Single */
+.highlight .cs { color: #859900 } /* Comment.Special */
+.highlight .gd { color: #2aa198 } /* Generic.Deleted */
+.highlight .ge { color: #586e75; font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #dc322f } /* Generic.Error */
+.highlight .gh { color: #cb4b16 } /* Generic.Heading */
+.highlight .gi { color: #859900 } /* Generic.Inserted */
+.highlight .go { color: #586e75 } /* Generic.Output */
+.highlight .gp { color: #586e75 } /* Generic.Prompt */
+.highlight .gs { color: #586e75; font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #cb4b16 } /* Generic.Subheading */
+.highlight .gt { color: #586e75 } /* Generic.Traceback */
+.highlight .kc { color: #cb4b16 } /* Keyword.Constant */
+.highlight .kd { color: #22b3eb } /* Keyword.Declaration */
+.highlight .kn { color: #859900 } /* Keyword.Namespace */
+.highlight .kp { color: #859900 } /* Keyword.Pseudo */
+.highlight .kr { color: #22b3eb } /* Keyword.Reserved */
+.highlight .kt { color: #dc322f } /* Keyword.Type */
+.highlight .ld { color: #586e75 } /* Literal.Date */
+.highlight .m { color: #2aa198 } /* Literal.Number */
+.highlight .s { color: #2aa198 } /* Literal.String */
+.highlight .na { color: #586e75 } /* Name.Attribute */
+.highlight .nb { color: #B58900 } /* Name.Builtin */
+.highlight .nc { color: #22b3eb } /* Name.Class */
+.highlight .no { color: #cb4b16 } /* Name.Constant */
+.highlight .nd { color: #22b3eb } /* Name.Decorator */
+.highlight .ni { color: #cb4b16 } /* Name.Entity */
+.highlight .ne { color: #cb4b16 } /* Name.Exception */
+.highlight .nf { color: #22b3eb } /* Name.Function */
+.highlight .nl { color: #586e75 } /* Name.Label */
+.highlight .nn { color: #586e75 } /* Name.Namespace */
+.highlight .nx { color: #586e75 } /* Name.Other */
+.highlight .py { color: #586e75 } /* Name.Property */
+.highlight .nt { color: #22b3eb } /* Name.Tag */
+.highlight .nv { color: #22b3eb } /* Name.Variable */
+.highlight .ow { color: #859900 } /* Operator.Word */
+.highlight .w { color: #586e75 } /* Text.Whitespace */
+.highlight .mf { color: #2aa198 } /* Literal.Number.Float */
+.highlight .mh { color: #2aa198 } /* Literal.Number.Hex */
+.highlight .mi { color: #2aa198 } /* Literal.Number.Integer */
+.highlight .mo { color: #2aa198 } /* Literal.Number.Oct */
+.highlight .sb { color: #93a1a1 } /* Literal.String.Backtick */
+.highlight .sc { color: #2aa198 } /* Literal.String.Char */
+.highlight .sd { color: #586e75 } /* Literal.String.Doc */
+.highlight .s2 { color: #2aa198 } /* Literal.String.Double */
+.highlight .se { color: #cb4b16 } /* Literal.String.Escape */
+.highlight .sh { color: #586e75 } /* Literal.String.Heredoc */
+.highlight .si { color: #2aa198 } /* Literal.String.Interpol */
+.highlight .sx { color: #2aa198 } /* Literal.String.Other */
+.highlight .sr { color: #dc322f } /* Literal.String.Regex */
+.highlight .s1 { color: #2aa198 } /* Literal.String.Single */
+.highlight .ss { color: #2aa198 } /* Literal.String.Symbol */
+.highlight .bp { color: #22b3eb } /* Name.Builtin.Pseudo */
+.highlight .vc { color: #22b3eb } /* Name.Variable.Class */
+.highlight .vg { color: #22b3eb } /* Name.Variable.Global */
+.highlight .vi { color: #22b3eb } /* Name.Variable.Instance */
+.highlight .il { color: #2aa198 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/_sass/_tables.scss b/_sass/_tables.scss
new file mode 100644
index 00000000..d31dc24a
--- /dev/null
+++ b/_sass/_tables.scss
@@ -0,0 +1,38 @@
+/* ==========================================================================
+ TABLES
+ ========================================================================== */
+
+table {
+ margin-bottom: 1em;
+ width: 100%;
+ font-family: $global-font-family;
+ font-size: $type-size-6;
+ border-collapse: collapse;
+ border: 1px solid $light-gray;
+
+ & + table {
+ margin-top: 1em;
+ }
+}
+
+thead {
+ background-color: $lighter-gray;
+ border-bottom: 1px solid $light-gray;
+}
+
+th {
+ padding: 0.5em;
+ font-weight: bold;
+ text-align: left;
+ border-right: 1px solid $light-gray;
+}
+
+td {
+ padding: 0.5em;
+ border-bottom: 1px solid $light-gray;
+ border-right: 1px solid $light-gray;
+}
+
+tr, td, th {
+ vertical-align: middle;
+}
\ No newline at end of file
diff --git a/_sass/_utilities.scss b/_sass/_utilities.scss
new file mode 100644
index 00000000..87536a45
--- /dev/null
+++ b/_sass/_utilities.scss
@@ -0,0 +1,470 @@
+/* ==========================================================================
+ UTILITY CLASSES
+ ========================================================================== */
+
+/*
+ Visibility
+ ========================================================================== */
+
+/* http://www.456bereastreet.com/archive/200711/screen_readers_sometimes_ignore_displaynone/ */
+
+.hidden {
+ display: none;
+ visibility: hidden;
+}
+
+/* for preloading images */
+
+.load {
+ display: none;
+}
+
+.transparent {
+ opacity: 0;
+}
+
+/* https://developer.yahoo.com/blogs/ydn/clip-hidden-content-better-accessibility-53456.html */
+
+.visually-hidden,
+.screen-reader-text,
+.screen-reader-text span,
+.screen-reader-shortcut {
+ position: absolute !important;
+ clip: rect(1px, 1px, 1px, 1px);
+ height: 1px !important;
+ width: 1px !important;
+ border: 0 !important;
+ overflow: hidden;
+}
+
+body:hover .visually-hidden a,
+body:hover .visually-hidden input,
+body:hover .visually-hidden button {
+ display: none !important;
+}
+
+/* screen readers */
+
+.screen-reader-text:focus,
+.screen-reader-shortcut:focus {
+ clip: auto !important;
+ height: auto !important;
+ width: auto !important;
+ display: block;
+ font-size: 1em;
+ font-weight: bold;
+ padding: 15px 23px 14px;
+ background: #fff;
+ z-index: 100000;
+ text-decoration: none;
+ box-shadow: 0 0 2px 2px rgba(0,0,0,.6);
+}
+
+
+/*
+ Skip links
+ ========================================================================== */
+
+.skip-link {
+ position: fixed;
+ z-index: 20;
+ margin: 0;
+ font-family: $sans-serif;
+ white-space: nowrap;
+}
+
+.skip-link li {
+ height: 0;
+ width: 0;
+ list-style: none;
+}
+
+
+/*
+ Type
+ ========================================================================== */
+
+.text-left {
+ text-align: left;
+}
+
+.text-center {
+ text-align: center;
+}
+
+.text-right {
+ text-align: right;
+}
+
+.text-justify {
+ text-align: justify;
+}
+
+.text-nowrap {
+ white-space: nowrap;
+}
+
+
+/*
+ Alignment
+ ========================================================================== */
+
+/* clearfix */
+
+.cf { clear: both; }
+
+.wrapper {
+ @include container();
+}
+
+
+/*
+ Images
+ ========================================================================== */
+
+/* image align left */
+
+.align-left {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+
+ @include breakpoint($small) {
+ float: left;
+ margin-right: 1em;
+ }
+}
+
+/* image align right */
+
+.align-right {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+
+ @include breakpoint($small) {
+ float: right;
+ margin-left: 1em;
+ }
+}
+
+/* image align center */
+
+.align-center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+/* file page content container */
+
+.full {
+ @include breakpoint($large){
+ margin-right: -1 * span(2.5 of 12) !important;
+ }
+}
+
+/*
+ Icons
+ ========================================================================== */
+
+.icon {
+ display: inline-block;
+ fill: currentColor;
+ width: 1em;
+ height: 1.1em;
+ line-height: 1;
+ position: relative;
+ top: -0.1em;
+ vertical-align: middle;
+}
+
+/* social icons*/
+
+.social-icons {
+ .fa {
+ color: #000;
+ }
+
+ .fa-behance,
+ .fa-behance-square {
+ color: $behance-color;
+ }
+
+ .fa-dribbble {
+ color: $dribbble-color;
+ }
+
+ .fa-facebook,
+ .fa-facebook-square {
+ color: $facebook-color;
+ }
+
+ .fa-flickr {
+ color: $flickr-color;
+ }
+
+ .fa-foursquare {
+ color: $foursquare-color;
+ }
+
+ .fa-github,
+ .fa-github-alt,
+ .fa-github-square {
+ color: $github-color;
+ }
+
+ .fa-google-plus,
+ .fa-google-plus-square {
+ color: $google-plus-color;
+ }
+
+ .fa-instagram {
+ color: $instagram-color;
+ }
+
+ .fa-lastfm,
+ .fa-lastfm-square {
+ color: $lastfm-color;
+ }
+
+ .fa-linkedin,
+ .fa-linkedin-square {
+ color: $linkedin-color;
+ }
+
+ .fa-pinterest,
+ .fa-pinterest-p,
+ .fa-pinterest-square {
+ color: $pinterest-color;
+ }
+
+ .fa-rss,
+ .fa-rss-square {
+ color: $rss-color;
+ }
+
+ .fa-soundcloud {
+ color: $soundcloud-color;
+ }
+
+ .fa-stack-exchange,
+ .fa-stack-overflow {
+ color: $stackoverflow-color;
+ }
+
+ .fa-tumblr,
+ .fa-tumblr-square {
+ color: $tumblr-color;
+ }
+
+ .fa-twitter,
+ .fa-twitter-square {
+ color: $twitter-color;
+ }
+
+ .fa-vimeo,
+ .fa-vimeo-square {
+ color: $vimeo-color;
+ }
+
+ .fa-vine {
+ color: $vine-color;
+ }
+
+ .fa-youtube,
+ .fa-youtube-square,
+ .fa-youtube-play {
+ color: $youtube-color;
+ }
+
+ .fa-xing,
+ .fa-xing-square {
+ color: $xing-color;
+ }
+}
+
+
+/*
+ Navicons
+ ========================================================================== */
+
+.navicon {
+ position: relative;
+ width: $navicon-width;
+ height: $navicon-height;
+ background: #fff;
+ margin: auto;
+ -webkit-transition: 0.3s;
+ transition: 0.3s;
+
+ &:before,
+ &:after {
+ content: "";
+ position: absolute;
+ left: 0;
+ width: $navicon-width;
+ height: $navicon-height;
+ background: #fff;
+ -webkit-transition: 0.3s;
+ transition: 0.3s;
+ }
+
+ &:before {
+ top: (-2 * $navicon-height);
+ }
+
+ &:after {
+ bottom: (-2 * $navicon-height);
+ }
+}
+
+.close .navicon {
+ /* hide the middle line*/
+ background: transparent;
+
+ /* overlay the lines by setting both their top values to 0*/
+ &:before, &:after{
+ -webkit-transform-origin: 50% 50%;
+ -ms-transform-origin: 50% 50%;
+ transform-origin: 50% 50%;
+ top: 0;
+ width: $navicon-width;
+ }
+
+ /* rotate the lines to form the x shape*/
+ &:before{
+ -webkit-transform: rotate3d(0,0,1,45deg);
+ transform: rotate3d(0,0,1,45deg);
+ }
+ &:after{
+ -webkit-transform: rotate3d(0,0,1,-45deg);
+ transform: rotate3d(0,0,1,-45deg);
+ }
+}
+
+
+/*
+ Sticky, fixed to top content
+ ========================================================================== */
+
+.sticky {
+ @include breakpoint($large) {
+ @include clearfix();
+ position: -webkit-sticky;
+ position: sticky;
+ top: 2em;
+
+ > * {
+ display: block;
+ }
+ }
+}
+
+
+/*
+ Wells
+ ========================================================================== */
+
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #e3e3e3;
+ border-radius: $border-radius;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+}
+
+
+/*
+ Modals
+ ========================================================================== */
+
+.show-modal {
+ overflow: hidden;
+ position: relative;
+
+ &:before {
+ position: absolute;
+ content: "";
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 999;
+ background-color: rgba(255, 255, 255, 0.85);
+ }
+
+ .modal {
+ display: block;
+ }
+}
+
+.modal {
+ display: none;
+ position: fixed;
+ width: 300px;
+ top: 50%;
+ left: 50%;
+ margin-left: -150px;
+ margin-top: -150px;
+ min-height: 0;
+ z-index: 9999;
+ background: #fff;
+ border: 1px solid $border-color;
+ border-radius: $border-radius;
+ box-shadow: $box-shadow;
+
+ &__title {
+ margin: 0;
+ padding: 0.5em 1em;
+ }
+
+ &__supporting-text {
+ padding: 0 1em 0.5em 1em;
+ }
+
+ &__actions {
+ padding: 0.5em 1em;
+ border-top: 1px solid $border-color;
+ }
+}
+
+
+/*
+ Footnotes
+ ========================================================================== */
+
+.footnote {
+ color: mix(#fff, $gray, 25%);
+ text-decoration: none;
+}
+
+.footnotes {
+ color: mix(#fff, $gray, 25%);
+
+ ol, li, p {
+ margin-bottom: 0;
+ font-size: $type-size-6;
+ }
+}
+
+a.reversefootnote {
+ color: $gray;
+ text-decoration: none;
+
+ &:hover {
+ text-decoration: underline;
+ }
+}
+
+
+/*
+ Required
+ ========================================================================== */
+
+.required {
+ color: $danger-color;
+ font-weight: bold;
+}
diff --git a/_sass/_variables.scss b/_sass/_variables.scss
new file mode 100644
index 00000000..a9b09121
--- /dev/null
+++ b/_sass/_variables.scss
@@ -0,0 +1,147 @@
+/* ==========================================================================
+ Variables
+ ========================================================================== */
+
+/*
+ Typography
+ ========================================================================== */
+
+$doc-font-size : 16;
+
+/* paragraph indention */
+$paragraph-indent : false; // true, false (default)
+$indent-var : 1.3em;
+
+/* system typefaces */
+$serif : Georgia, Times, serif;
+$sans-serif : -apple-system, ".SFNSText-Regular", "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", Arial, sans-serif;
+$monospace : Monaco, Consolas, "Lucida Console", monospace;
+
+/* sans serif typefaces */
+$sans-serif-narrow : $sans-serif;
+$helvetica : Helvetica, "Helvetica Neue", Arial, sans-serif;
+
+/* serif typefaces */
+$georgia : Georgia, serif;
+$times : Times, serif;
+$bodoni : "Bodoni MT", serif;
+$calisto : "Calisto MT", serif;
+$garamond : Garamond, serif;
+
+$global-font-family : $sans-serif;
+$header-font-family : $sans-serif;
+$caption-font-family : $serif;
+
+/* type scale */
+$type-size-1 : 2.441em; // ~39.056px
+$type-size-2 : 1.953em; // ~31.248px
+$type-size-3 : 1.563em; // ~25.008px
+$type-size-4 : 1.25em; // ~20px
+$type-size-5 : 1em; // ~16px
+$type-size-6 : 0.75em; // ~12px
+$type-size-7 : 0.6875em; // ~11px
+$type-size-8 : 0.625em; // ~10px
+
+
+/*
+ Colors
+ ========================================================================== */
+
+$gray : #7a8288;
+$dark-gray : mix(#000, $gray, 40%);
+$darker-gray : mix(#000, $gray, 60%);
+$light-gray : mix(#fff, $gray, 50%);
+$lighter-gray : mix(#fff, $gray, 90%);
+
+$body-color : #fff;
+$background-color : #fff;
+$code-background-color : #fafafa;
+$code-background-color-dark : $light-gray;
+$text-color : $dark-gray;
+$border-color : $lighter-gray;
+
+$primary-color : #7a8288;
+$success-color : #62c462;
+$warning-color : #f89406;
+$danger-color : #ee5f5b;
+$info-color : #52adc8;
+
+/* brands */
+$behance-color : #1769FF;
+$dribbble-color : #ea4c89;
+$facebook-color : #3b5998;
+$flickr-color : #ff0084;
+$foursquare-color : #0072b1;
+$github-color : #171516;
+$google-plus-color : #dd4b39;
+$instagram-color : #517fa4;
+$lastfm-color : #d51007;
+$linkedin-color : #007bb6;
+$pinterest-color : #cb2027;
+$rss-color : #fa9b39;
+$soundcloud-color : #ff3300;
+$stackoverflow-color : #fe7a15;
+$tumblr-color : #32506d;
+$twitter-color : #55acee;
+$vimeo-color : #1ab7ea;
+$vine-color : #00bf8f;
+$youtube-color : #bb0000;
+$xing-color : #006567;
+
+
+/* links */
+$link-color : $info-color;
+$link-color-hover : mix(#000, $link-color, 25%);
+$link-color-visited : mix(#fff, $link-color, 25%);
+$masthead-link-color : $primary-color;
+$masthead-link-color-hover : mix(#000, $primary-color, 25%);
+
+
+/*
+ Breakpoints
+ ========================================================================== */
+
+@include breakpoint-set("to ems", true);
+
+$small : 600px;
+$medium : 768px;
+$medium-wide : 900px;
+$large : 1024px;
+$x-large : 1280px;
+
+
+/*
+ Grid
+ ========================================================================== */
+
+$right-sidebar-width-narrow : 200px;
+$right-sidebar-width : 300px;
+$right-sidebar-width-wide : 400px;
+
+$susy: (
+ columns: 12,
+ // column-width: 90px,
+ gutters: 1/4,
+ math: fluid,
+ output: float,
+ gutter-position: after,
+ container: $large,
+ global-box-sizing: border-box,
+ // debug: (
+ // image: show,
+ // color: blue,
+ // output: overlay,
+ // toggle: top right,
+ // ),
+);
+
+
+/*
+ Other
+ ========================================================================== */
+
+$border-radius : 4px;
+$box-shadow : 0 1px 1px rgba(0, 0, 0, 0.125);
+$navicon-width : 28px;
+$navicon-height : 4px;
+$global-transition : all 0.2s ease-in-out;
diff --git a/_sass/vendor/breakpoint/_breakpoint.scss b/_sass/vendor/breakpoint/_breakpoint.scss
new file mode 100644
index 00000000..a0528eb8
--- /dev/null
+++ b/_sass/vendor/breakpoint/_breakpoint.scss
@@ -0,0 +1,114 @@
+//////////////////////////////
+// Default Variables
+//////////////////////////////
+$Breakpoint-Settings: (
+ 'default media': all,
+ 'default feature': min-width,
+ 'default pair': width,
+
+ 'force all media type': false,
+ 'to ems': false,
+ 'transform resolutions': true,
+
+ 'no queries': false,
+ 'no query fallbacks': false,
+
+ 'base font size': 16px,
+
+ 'legacy syntax': false
+);
+
+$breakpoint: () !default;
+
+//////////////////////////////
+// Imports
+//////////////////////////////
+@import "settings";
+@import "context";
+@import "helpers";
+@import "parsers";
+@import "no-query";
+
+@import "respond-to";
+
+@import "legacy-settings";
+
+//////////////////////////////
+// Breakpoint Mixin
+//////////////////////////////
+
+@mixin breakpoint($query, $no-query: false) {
+ @include legacy-settings-warning;
+
+ // Reset contexts
+ @include private-breakpoint-reset-contexts();
+
+ $breakpoint: breakpoint($query, false);
+
+ $query-string: map-get($breakpoint, 'query');
+ $query-fallback: map-get($breakpoint, 'fallback');
+
+ $private-breakpoint-context-holder: map-get($breakpoint, 'context holder') !global;
+ $private-breakpoint-query-count: map-get($breakpoint, 'query count') !global;
+
+ // Allow for an as-needed override or usage of no query fallback.
+ @if $no-query != false {
+ $query-fallback: $no-query;
+ }
+
+ @if $query-fallback != false {
+ $context-setter: private-breakpoint-set-context('no-query', $query-fallback);
+ }
+
+ // Print Out Query String
+ @if not breakpoint-get('no queries') {
+ @media #{$query-string} {
+ @content;
+ }
+ }
+
+ @if breakpoint-get('no query fallbacks') != false or breakpoint-get('no queries') == true {
+
+ $type: type-of(breakpoint-get('no query fallbacks'));
+ $print: false;
+
+ @if ($type == 'bool') {
+ $print: true;
+ }
+ @else if ($type == 'string') {
+ @if $query-fallback == breakpoint-get('no query fallbacks') {
+ $print: true;
+ }
+ }
+ @else if ($type == 'list') {
+ @each $wrapper in breakpoint-get('no query fallbacks') {
+ @if $query-fallback == $wrapper {
+ $print: true;
+ }
+ }
+ }
+
+ // Write Fallback
+ @if ($query-fallback != false) and ($print == true) {
+ $type-fallback: type-of($query-fallback);
+
+ @if ($type-fallback != 'bool') {
+ #{$query-fallback} & {
+ @content;
+ }
+ }
+ @else {
+ @content;
+ }
+ }
+ }
+
+ @include private-breakpoint-reset-contexts();
+}
+
+
+@mixin mq($query, $no-query: false) {
+ @include breakpoint($query, $no-query) {
+ @content;
+ }
+}
diff --git a/_sass/vendor/breakpoint/_context.scss b/_sass/vendor/breakpoint/_context.scss
new file mode 100644
index 00000000..57947f5c
--- /dev/null
+++ b/_sass/vendor/breakpoint/_context.scss
@@ -0,0 +1,95 @@
+//////////////////////////////
+// Private Breakpoint Variables
+//////////////////////////////
+$private-breakpoint-context-holder: ();
+$private-breakpoint-query-count: 0 !default;
+
+//////////////////////////////
+// Breakpoint Has Context
+// Returns whether or not you are inside a Breakpoint query
+//////////////////////////////
+@function breakpoint-has-context() {
+ @if length($private-breakpoint-query-count) {
+ @return true;
+ }
+ @else {
+ @return false;
+ }
+}
+
+//////////////////////////////
+// Breakpoint Get Context
+// $feature: Input feature to get it's current MQ context. Returns false if no context
+//////////////////////////////
+@function breakpoint-get-context($feature) {
+ @if map-has-key($private-breakpoint-context-holder, $feature) {
+ $get: map-get($private-breakpoint-context-holder, $feature);
+ // Special handling of no-query from get side so /false/ prepends aren't returned
+ @if $feature == 'no-query' {
+ @if type-of($get) == 'list' and length($get) > 1 and nth($get, 1) == false {
+ $get: nth($get, length($get));
+ }
+ }
+ @return $get;
+ }
+ @else {
+ @if breakpoint-has-context() and $feature == 'media' {
+ @return breakpoint-get('default media');
+ }
+ @else {
+ @return false;
+ }
+ }
+}
+
+//////////////////////////////
+// Private function to set context
+//////////////////////////////
+@function private-breakpoint-set-context($feature, $value) {
+ @if $value == 'monochrome' {
+ $feature: 'monochrome';
+ }
+
+ $current: map-get($private-breakpoint-context-holder, $feature);
+ @if $current and length($current) == $private-breakpoint-query-count {
+ @warn "You have already queried against `#{$feature}`. Unexpected things may happen if you query against the same feature more than once in the same `and` query. Breakpoint is overwriting the current context with `#{$value}`";
+ }
+
+ @if not map-has-key($private-breakpoint-context-holder, $feature) {
+ $v-holder: ();
+ @for $i from 1 to $private-breakpoint-query-count {
+ @if $feature == 'media' {
+ $v-holder: append($v-holder, breakpoint-get('default media'));
+ }
+ @else {
+ $v-holder: append($v-holder, false);
+ }
+ }
+ $v-holder: append($v-holder, $value);
+ $private-breakpoint-context-holder: map-merge($private-breakpoint-context-holder, ($feature: $v-holder)) !global;
+ }
+ @else {
+ $v-holder: map-get($private-breakpoint-context-holder, $feature);
+ $length: length($v-holder);
+ @for $i from $length to $private-breakpoint-query-count - 1 {
+ @if $feature == 'media' {
+ $v-holder: append($v-holder, breakpoint-get('default media'));
+ }
+ @else {
+ $v-holder: append($v-holder, false);
+ }
+ }
+ $v-holder: append($v-holder, $value);
+ $private-breakpoint-context-holder: map-merge($private-breakpoint-context-holder, ($feature: $v-holder)) !global;
+ }
+
+ @return true;
+}
+
+//////////////////////////////
+// Private function to reset context
+//////////////////////////////
+@mixin private-breakpoint-reset-contexts {
+ $private-breakpoint-context-holder: () !global;
+ $private-breakpoint-query-count: 0 !global;
+}
\ No newline at end of file
diff --git a/_sass/vendor/breakpoint/_helpers.scss b/_sass/vendor/breakpoint/_helpers.scss
new file mode 100644
index 00000000..97e522d1
--- /dev/null
+++ b/_sass/vendor/breakpoint/_helpers.scss
@@ -0,0 +1,151 @@
+//////////////////////////////
+// Converts the input value to Base EMs
+//////////////////////////////
+@function breakpoint-to-base-em($value) {
+ $value-unit: unit($value);
+
+ // Will convert relative EMs into root EMs.
+ @if breakpoint-get('base font size') and type-of(breakpoint-get('base font size')) == 'number' and $value-unit == 'em' {
+ $base-unit: unit(breakpoint-get('base font size'));
+
+ @if $base-unit == 'px' or $base-unit == '%' or $base-unit == 'em' or $base-unit == 'pt' {
+ @return base-conversion($value) / base-conversion(breakpoint-get('base font size')) * 1em;
+ }
+ @else {
+ @warn '#{breakpoint-get(\'base font size\')} is not set in valid units for font size!';
+ @return false;
+ }
+ }
+ @else {
+ @return base-conversion($value);
+ }
+}
+
+@function base-conversion($value) {
+ $unit: unit($value);
+
+ @if $unit == 'px' {
+ @return $value / 16px * 1em;
+ }
+ @else if $unit == '%' {
+ @return $value / 100% * 1em;
+ }
+ @else if $unit == 'em' {
+ @return $value;
+ }
+ @else if $unit == 'pt' {
+ @return $value / 12pt * 1em;
+ }
+ @else {
+ @return $value;
+// @warn 'Everything is terrible! What have you done?!';
+ }
+}
+
+//////////////////////////////
+// Returns whether the feature can have a min/max pair
+//////////////////////////////
+$breakpoint-min-max-features: 'color',
+ 'color-index',
+ 'aspect-ratio',
+ 'device-aspect-ratio',
+ 'device-height',
+ 'device-width',
+ 'height',
+ 'monochrome',
+ 'resolution',
+ 'width';
+
+@function breakpoint-min-max($feature) {
+ @each $item in $breakpoint-min-max-features {
+ @if $feature == $item {
+ @return true;
+ }
+ }
+ @return false;
+}
+
+//////////////////////////////
+// Returns whether the feature can have a string value
+//////////////////////////////
+$breakpoint-string-features: 'orientation',
+ 'scan',
+ 'color',
+ 'aspect-ratio',
+ 'device-aspect-ratio',
+ 'pointer',
+ 'luminosity';
+
+@function breakpoint-string-value($feature) {
+ @each $item in $breakpoint-string-features {
+ @if breakpoint-min-max($item) {
+ @if $feature == 'min-#{$item}' or $feature == 'max-#{$item}' {
+ @return true;
+ }
+ }
+ @else if $feature == $item {
+ @return true;
+ }
+ }
+ @return false;
+}
+
+//////////////////////////////
+// Returns whether the feature is a media type
+//////////////////////////////
+$breakpoint-media-types: 'all',
+ 'braille',
+ 'embossed',
+ 'handheld',
+ 'print',
+ 'projection',
+ 'screen',
+ 'speech',
+ 'tty',
+ 'tv';
+
+@function breakpoint-is-media($feature) {
+ @each $media in $breakpoint-media-types {
+ @if ($feature == $media) or ($feature == 'not #{$media}') or ($feature == 'only #{$media}') {
+ @return true;
+ }
+ }
+
+ @return false;
+}
+
+//////////////////////////////
+// Returns whether the feature can stand alone
+//////////////////////////////
+$breakpoint-single-string-features: 'color',
+ 'color-index',
+ 'grid',
+ 'monochrome';
+
+@function breakpoint-single-string($feature) {
+ @each $item in $breakpoint-single-string-features {
+ @if $feature == $item {
+ @return true;
+ }
+ }
+ @return false;
+}
+
+//////////////////////////////
+// Returns whether the feature
+//////////////////////////////
+@function breakpoint-is-resolution($feature) {
+ $resolutions: 'device-pixel-ratio', 'dpr';
+
+ @if breakpoint-get('transform resolutions') {
+ $resolutions: append($resolutions, 'resolution');
+ }
+
+ @each $reso in $resolutions {
+ @if index($feature, $reso) or index($feature, 'min-#{$reso}') or index($feature, 'max-#{$reso}') {
+ @return true;
+ }
+ }
+
+ @return false;
+}
diff --git a/_sass/vendor/breakpoint/_legacy-settings.scss b/_sass/vendor/breakpoint/_legacy-settings.scss
new file mode 100644
index 00000000..e060ebe3
--- /dev/null
+++ b/_sass/vendor/breakpoint/_legacy-settings.scss
@@ -0,0 +1,50 @@
+@mixin legacy-settings-warning {
+ $legacyVars: (
+ 'default-media': 'default media',
+ 'default-feature': 'default feature',
+ 'force-media-all': 'force all media type',
+ 'to-ems': 'to ems',
+ 'resolutions': 'transform resolutions',
+ 'no-queries': 'no queries',
+ 'no-query-fallbacks': 'no query fallbacks',
+ 'base-font-size': 'base font size',
+ 'legacy-syntax': 'legacy syntax'
+ );
+
+ @each $legacy, $new in $legacyVars {
+ @if global-variable-exists('breakpoint-' + $legacy) {
+ @warn "In order to avoid variable namspace collisions, we have updated the way to change settings for Breakpoint. Please change all instances of `$breakpoint-#{$legacy}: {{setting}}` to `@include breakpoint-set('#{$new}', {{setting}})`. Variable settings, as well as this warning will be deprecated in a future release."
+ }
+ };
+
+ //////////////////////////////
+ // Hand correct each setting
+ //////////////////////////////
+ @if global-variable-exists('breakpoint-default-media') and $breakpoint-default-media != breakpoint-get('default media') {
+ @include breakpoint-set('default media', $breakpoint-default-media);
+ }
+ @if global-variable-exists('breakpoint-default-feature') and $breakpoint-default-feature != breakpoint-get('default feature') {
+ @include breakpoint-set('default feature', $breakpoint-default-feature);
+ }
+ @if global-variable-exists('breakpoint-force-media-all') and $breakpoint-force-media-all != breakpoint-get('force all media type') {
+ @include breakpoint-set('force all media type', $breakpoint-force-media-all);
+ }
+ @if global-variable-exists('breakpoint-to-ems') and $breakpoint-to-ems != breakpoint-get('to ems') {
+ @include breakpoint-set('to ems', $breakpoint-to-ems);
+ }
+ @if global-variable-exists('breakpoint-resolutions') and $breakpoint-resolutions != breakpoint-get('transform resolutions') {
+ @include breakpoint-set('transform resolutions', $breakpoint-resolutions);
+ }
+ @if global-variable-exists('breakpoint-no-queries') and $breakpoint-no-queries != breakpoint-get('no queries') {
+ @include breakpoint-set('no queries', $breakpoint-no-queries);
+ }
+ @if global-variable-exists('breakpoint-no-query-fallbacks') and $breakpoint-no-query-fallbacks != breakpoint-get('no query fallbacks') {
+ @include breakpoint-set('no query fallbacks', $breakpoint-no-query-fallbacks);
+ }
+ @if global-variable-exists('breakpoint-base-font-size') and $breakpoint-base-font-size != breakpoint-get('base font size') {
+ @include breakpoint-set('base font size', $breakpoint-base-font-size);
+ }
+ @if global-variable-exists('breakpoint-legacy-syntax') and $breakpoint-legacy-syntax != breakpoint-get('legacy syntax') {
+ @include breakpoint-set('legacy syntax', $breakpoint-legacy-syntax);
+ }
+}
\ No newline at end of file
diff --git a/_sass/vendor/breakpoint/_no-query.scss b/_sass/vendor/breakpoint/_no-query.scss
new file mode 100644
index 00000000..0b5a81f6
--- /dev/null
+++ b/_sass/vendor/breakpoint/_no-query.scss
@@ -0,0 +1,15 @@
+@function breakpoint-no-query($query) {
+ @if type-of($query) == 'list' {
+ $keyword: nth($query, 1);
+
+ @if type-of($keyword) == 'string' and ($keyword == 'no-query' or $keyword == 'no query' or $keyword == 'fallback') {
+ @return nth($query, 2);
+ }
+ @else {
+ @return false;
+ }
+ }
+ @else {
+ @return false;
+ }
+}
diff --git a/_sass/vendor/breakpoint/_parsers.scss b/_sass/vendor/breakpoint/_parsers.scss
new file mode 100644
index 00000000..f0b053fe
--- /dev/null
+++ b/_sass/vendor/breakpoint/_parsers.scss
@@ -0,0 +1,215 @@
+//////////////////////////////
+// Import Parser Pieces
+//////////////////////////////
+@import "parsers/query";
+@import "parsers/single";
+@import "parsers/double";
+@import "parsers/triple";
+@import "parsers/resolution";
+
+$Memo-Exists: function-exists(memo-get) and function-exists(memo-set);
+
+//////////////////////////////
+// Breakpoint Function
+//////////////////////////////
+@function breakpoint($query, $contexts...) {
+ $run: true;
+ $return: ();
+
+ // Grab the Memo Output if Memoization can be a thing
+ @if $Memo-Exists {
+ $return: memo-get(breakpoint, breakpoint $query $contexts);
+
+ @if $return != null {
+ $run: false;
+ }
+ }
+
+ @if not $Memo-Exists or $run {
+ // Internal Variables
+ $query-string: '';
+ $query-fallback: false;
+ $return: ();
+
+ // Reserve Global Private Breakpoint Context
+ $holder-context: $private-breakpoint-context-holder;
+ $holder-query-count: $private-breakpoint-query-count;
+
+ // Reset Global Private Breakpoint Context
+ $private-breakpoint-context-holder: () !global;
+ $private-breakpoint-query-count: 0 !global;
+
+
+ // Test to see if it's a comma-separated list
+ $or-list: if(list-separator($query) == 'comma', true, false);
+
+
+ @if ($or-list == false and breakpoint-get('legacy syntax') == false) {
+ $query-string: breakpoint-parse($query);
+ }
+ @else {
+ $length: length($query);
+
+ $last: nth($query, $length);
+ $query-fallback: breakpoint-no-query($last);
+
+ @if ($query-fallback != false) {
+ $length: $length - 1;
+ }
+
+ @if (breakpoint-get('legacy syntax') == true) {
+ $mq: ();
+
+ @for $i from 1 through $length {
+ $mq: append($mq, nth($query, $i), comma);
+ }
+
+ $query-string: breakpoint-parse($mq);
+ }
+ @else {
+ $query-string: '';
+ @for $i from 1 through $length {
+ $query-string: $query-string + if($i == 1, '', ', ') + breakpoint-parse(nth($query, $i));
+ }
+ }
+ }
+
+ $return: ('query': $query-string,
+ 'fallback': $query-fallback,
+ 'context holder': $private-breakpoint-context-holder,
+ 'query count': $private-breakpoint-query-count
+ );
+ @if length($contexts) > 0 and nth($contexts, 1) != false {
+ @if $query-fallback != false {
+ $context-setter: private-breakpoint-set-context('no-query', $query-fallback);
+ }
+ $context-map: ();
+ @each $context in $contexts {
+ $context-map: map-merge($context-map, ($context: breakpoint-get-context($context)));
+ }
+ $return: map-merge($return, (context: $context-map));
+ }
+
+ // Reset Global Private Breakpoint Context
+ $private-breakpoint-context-holder: () !global;
+ $private-breakpoint-query-count: 0 !global;
+
+ @if $Memo-Exists {
+ $holder: memo-set(breakpoint, breakpoint $query $contexts, $return);
+ }
+ }
+
+ @return $return;
+}
+
+//////////////////////////////
+// General Breakpoint Parser
+//////////////////////////////
+@function breakpoint-parse($query) {
+ // Increase number of 'and' queries
+ $private-breakpoint-query-count: $private-breakpoint-query-count + 1 !global;
+
+ // Set up Media Type
+ $query-print: '';
+
+ $force-all: ((breakpoint-get('force all media type') == true) and (breakpoint-get('default media') == 'all'));
+ $empty-media: true;
+ @if ($force-all == true) or (breakpoint-get('default media') != 'all') {
+ // Force the print of the default media type if (force all is true and default media type is all) or (default media type is not all)
+ $query-print: breakpoint-get('default media');
+ $empty-media: false;
+ }
+
+
+ $query-resolution: false;
+
+ $query-holder: breakpoint-parse-query($query);
+
+
+
+ // Loop over each parsed out query and write it to $query-print
+ $first: true;
+
+ @each $feature in $query-holder {
+ $length: length($feature);
+
+ // Parse a single feature
+ @if ($length == 1) {
+ // Feature is currently a list, grab the actual value
+ $feature: nth($feature, 1);
+
+ // Media Type must by convention be the first item, so it's safe to flat override $query-print, which right now should only be the default media type
+ @if (breakpoint-is-media($feature)) {
+ @if ($force-all == true) or ($feature != 'all') {
+ // Force the print of the default media type if (force all is true and default media type is all) or (default media type is not all)
+ $query-print: $feature;
+ $empty-media: false;
+
+ // Set Context
+ $context-setter: private-breakpoint-set-context(media, $query-print);
+ }
+ }
+ @else {
+ $parsed: breakpoint-parse-single($feature, $empty-media, $first);
+ $query-print: '#{$query-print} #{$parsed}';
+ $first: false;
+ }
+ }
+ // Parse a double feature
+ @else if ($length == 2) {
+ @if (breakpoint-is-resolution($feature) != false) {
+ $query-resolution: $feature;
+ }
+ @else {
+ $parsed: null;
+ // If it's a string/number pair,
+ // we check to see if one is a single-string value,
+ // then we parse it as a normal double
+ $alpha: nth($feature, 1);
+ $beta: nth($feature, 2);
+ @if breakpoint-single-string($alpha) or breakpoint-single-string($beta) {
+ $parsed: breakpoint-parse-single($alpha, $empty-media, $first);
+ $query-print: '#{$query-print} #{$parsed}';
+ $first: false;
+ $parsed: breakpoint-parse-single($beta, $empty-media, $first);
+ $query-print: '#{$query-print} #{$parsed}';
+ }
+ @else {
+ $parsed: breakpoint-parse-double($feature, $empty-media, $first);
+ $query-print: '#{$query-print} #{$parsed}';
+ $first: false;
+ }
+ }
+ }
+ // Parse a triple feature
+ @else if ($length == 3) {
+ $parsed: breakpoint-parse-triple($feature, $empty-media, $first);
+ $query-print: '#{$query-print} #{$parsed}';
+ $first: false;
+ }
+
+ }
+
+ @if ($query-resolution != false) {
+ $query-print: breakpoint-build-resolution($query-print, $query-resolution, $empty-media, $first);
+ }
+
+ // Loop through each feature that's been detected so far and append 'false' to the the value list to increment their counters
+ @each $f, $v in $private-breakpoint-context-holder {
+ $v-holder: $v;
+ $length: length($v-holder);
+ @if length($v-holder) < $private-breakpoint-query-count {
+ @for $i from $length to $private-breakpoint-query-count {
+ @if $f == 'media' {
+ $v-holder: append($v-holder, breakpoint-get('default media'));
+ }
+ @else {
+ $v-holder: append($v-holder, false);
+ }
+ }
+ }
+ $private-breakpoint-context-holder: map-merge($private-breakpoint-context-holder, ($f: $v-holder)) !global;
+ }
+
+ @return $query-print;
+}
diff --git a/_sass/vendor/breakpoint/_respond-to.scss b/_sass/vendor/breakpoint/_respond-to.scss
new file mode 100644
index 00000000..e2462c5f
--- /dev/null
+++ b/_sass/vendor/breakpoint/_respond-to.scss
@@ -0,0 +1,82 @@
+////////////////////////
+// Default the Breakpoints variable
+////////////////////////
+$breakpoints: () !default;
+$BREAKPOINTS: () !default;
+
+////////////////////////
+// Respond-to API Mixin
+////////////////////////
+@mixin respond-to($context, $no-query: false) {
+ @if length($breakpoints) > 0 and length($BREAKPOINTS) == 0 {
+ @warn "In order to avoid variable namespace collisions, we have updated the way to add breakpoints for respond-to. Please change all instances of `$breakpoints: add-breakpoint()` to `@include add-breakpoint()`. The `add-breakpoint()` function will be deprecated in a future release.";
+ $BREAKPOINTS: $breakpoints !global;
+ $breakpoints: () !global;
+ }
+
+ @if type-of($BREAKPOINTS) != 'map' {
+ // Just in case someone writes gibberish to the $breakpoints variable.
+ @warn "Your breakpoints aren't a map! `respond-to` expects a map. Please check the value of $BREAKPOINTS variable.";
+ @content;
+ }
+ @else if map-has-key($BREAKPOINTS, $context) {
+ @include breakpoint(map-get($BREAKPOINTS, $context), $no-query) {
+ @content;
+ }
+ }
+ @else if not map-has-key($BREAKPOINTS, $context) {
+ @warn "`#{$context}` isn't a defined breakpoint! Please add it using `$breakpoints: add-breakpoint(`#{$context}`, $value);`";
+ @content;
+ }
+ @else {
+ @warn "You haven't created any breakpoints yet! Make some already! `@include add-breakpoint($name, $bkpt)`";
+ @content;
+ }
+}
+
+//////////////////////////////
+// Add Breakpoint to Breakpoints
+// TODO: Remove function in next release
+//////////////////////////////
+@function add-breakpoint($name, $bkpt, $overwrite: false) {
+ $output: ($name: $bkpt);
+
+ @if length($breakpoints) == 0 {
+ @return $output;
+ }
+ @else {
+ @if map-has-key($breakpoints, $name) and $overwrite != true {
+ @warn "You already have a breakpoint named `#{$name}`, please choose another breakpoint name, or pass in `$overwrite: true` to overwrite the previous breakpoint.";
+ @return $breakpoints;
+ }
+ @else if not map-has-key($breakpoints, $name) or $overwrite == true {
+ @return map-merge($breakpoints, $output);
+ }
+ }
+}
+
+@mixin add-breakpoint($name, $bkpt, $overwrite: false) {
+ $output: ($name: $bkpt);
+
+ @if length($BREAKPOINTS) == 0 {
+ $BREAKPOINTS: $output !global;
+ }
+ @else {
+ @if map-has-key($BREAKPOINTS, $name) and $overwrite != true {
+ @warn "You already have a breakpoint named `#{$name}`, please choose another breakpoint name, or pass in `$overwrite: true` to overwrite the previous breakpoint.";
+ $BREAKPOINTS: $BREAKPOINTS !global;
+ }
+ @else if not map-has-key($BREAKPOINTS, $name) or $overwrite == true {
+ $BREAKPOINTS: map-merge($BREAKPOINTS, $output) !global;
+ }
+ }
+}
+
+@function get-breakpoint($name: false) {
+ @if $name == false {
+ @return $BREAKPOINTS;
+ }
+ @else {
+ @return map-get($BREAKPOINTS, $name);
+ }
+}
diff --git a/_sass/vendor/breakpoint/_settings.scss b/_sass/vendor/breakpoint/_settings.scss
new file mode 100644
index 00000000..05ee6894
--- /dev/null
+++ b/_sass/vendor/breakpoint/_settings.scss
@@ -0,0 +1,71 @@
+//////////////////////////////
+// Has Setting
+//////////////////////////////
+@function breakpoint-has($setting) {
+ @if map-has-key($breakpoint, $setting) {
+ @return true;
+ }
+ @else {
+ @return false;
+ }
+}
+
+//////////////////////////////
+// Get Settings
+//////////////////////////////
+@function breakpoint-get($setting) {
+ @if breakpoint-has($setting) {
+ @return map-get($breakpoint, $setting);
+ }
+ @else {
+ @return map-get($Breakpoint-Settings, $setting);
+ }
+}
+
+//////////////////////////////
+// Set Settings
+//////////////////////////////
+@function breakpoint-set($setting, $value) {
+ @if (str-index($setting, '-') or str-index($setting, '_')) and str-index($setting, ' ') == null {
+ @warn "Words in Breakpoint settings should be separated by spaces, not dashes or underscores. Please replace dashes and underscores between words with spaces. Settings will not work as expected until changed.";
+ }
+ $breakpoint: map-merge($breakpoint, ($setting: $value)) !global;
+ @return true;
+}
+
+@mixin breakpoint-change($setting, $value) {
+ $breakpoint-change: breakpoint-set($setting, $value);
+}
+
+@mixin breakpoint-set($setting, $value) {
+ @include breakpoint-change($setting, $value);
+}
+
+@mixin bkpt-change($setting, $value) {
+ @include breakpoint-change($setting, $value);
+}
+@mixin bkpt-set($setting, $value) {
+ @include breakpoint-change($setting, $value);
+}
+
+//////////////////////////////
+// Remove Setting
+//////////////////////////////
+@function breakpoint-reset($settings...) {
+ @if length($settings) == 1 {
+ $settings: nth($settings, 1);
+ }
+
+ @each $setting in $settings {
+ $breakpoint: map-remove($breakpoint, $setting) !global;
+ }
+ @return true;
+}
+
+@mixin breakpoint-reset($settings...) {
+ $breakpoint-reset: breakpoint-reset($settings);
+}
+
+@mixin bkpt-reset($settings...) {
+ $breakpoint-reset: breakpoint-reset($settings);
+}
\ No newline at end of file
diff --git a/_sass/vendor/breakpoint/parsers/_double.scss b/_sass/vendor/breakpoint/parsers/_double.scss
new file mode 100644
index 00000000..24580c15
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/_double.scss
@@ -0,0 +1,33 @@
+//////////////////////////////
+// Import Pieces
+//////////////////////////////
+@import "double/default-pair";
+@import "double/double-string";
+@import "double/default";
+
+@function breakpoint-parse-double($feature, $empty-media, $first) {
+ $parsed: '';
+ $leader: '';
+ // If we're forcing
+ @if not ($empty-media) or not ($first) {
+ $leader: 'and ';
+ }
+
+ $first: nth($feature, 1);
+ $second: nth($feature, 2);
+
+ // If we've got two numbers, we know we need to use the default pair because there are no media queries that has a media feature that is a number
+ @if type-of($first) == 'number' and type-of($second) == 'number' {
+ $parsed: breakpoint-parse-default-pair($first, $second);
+ }
+ // If they are both strings, we send it through the string parser
+ @else if type-of($first) == 'string' and type-of($second) == 'string' {
+ $parsed: breakpoint-parse-double-string($first, $second);
+ }
+ // If it's a string/number pair, we parse it as a normal double
+ @else {
+ $parsed: breakpoint-parse-double-default($first, $second);
+ }
+
+ @return $leader + $parsed;
+}
diff --git a/_sass/vendor/breakpoint/parsers/_query.scss b/_sass/vendor/breakpoint/parsers/_query.scss
new file mode 100644
index 00000000..b138b393
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/_query.scss
@@ -0,0 +1,82 @@
+@function breakpoint-parse-query($query) {
+ // Parse features out of an individual query
+ $feature-holder: ();
+ $query-holder: ();
+ $length: length($query);
+
+ @if $length == 2 {
+ // If we've got a string/number, number/string, check to see if it's a valid string/number pair or two singles
+ @if (type-of(nth($query, 1)) == 'string' and type-of(nth($query, 2)) == 'number') or (type-of(nth($query, 1)) == 'number' and type-of(nth($query, 2)) == 'string') {
+
+ $number: '';
+ $value: '';
+
+ @if type-of(nth($query, 1)) == 'string' {
+ $number: nth($query, 2);
+ $value: nth($query, 1);
+ }
+ @else {
+ $number: nth($query, 1);
+ $value: nth($query, 2);
+ }
+
+ // If the string value can be a single value, check to see if the number passed in is a valid input for said single value. Fortunately, all current single-value options only accept unitless numbers, so this check is easy.
+ @if breakpoint-single-string($value) {
+ @if unitless($number) {
+ $feature-holder: append($value, $number, space);
+ $query-holder: append($query-holder, $feature-holder, comma);
+ @return $query-holder;
+ }
+ }
+ // If the string is a media type, split the query
+ @if breakpoint-is-media($value) {
+ $query-holder: append($query-holder, nth($query, 1));
+ $query-holder: append($query-holder, nth($query, 2));
+ @return $query-holder;
+ }
+ // If it's not a single feature, we're just going to assume it's a proper string/value pair, and roll with it.
+ @else {
+ $feature-holder: append($value, $number, space);
+ $query-holder: append($query-holder, $feature-holder, comma);
+ @return $query-holder;
+ }
+
+ }
+ // If they're both numbers, we assume it's a double and roll with that
+ @else if (type-of(nth($query, 1)) == 'number' and type-of(nth($query, 2)) == 'number') {
+ $feature-holder: append(nth($query, 1), nth($query, 2), space);
+ $query-holder: append($query-holder, $feature-holder, comma);
+ @return $query-holder;
+ }
+ // If they're both strings and neither are singles, we roll with that.
+ @else if (type-of(nth($query, 1)) == 'string' and type-of(nth($query, 2)) == 'string') {
+ @if not breakpoint-single-string(nth($query, 1)) and not breakpoint-single-string(nth($query, 2)) {
+ $feature-holder: append(nth($query, 1), nth($query, 2), space);
+ $query-holder: append($query-holder, $feature-holder, comma);
+ @return $query-holder;
+ }
+ }
+ }
+ @else if $length == 3 {
+ // If we've got three items and none is a list, we check to see
+ @if type-of(nth($query, 1)) != 'list' and type-of(nth($query, 2)) != 'list' and type-of(nth($query, 3)) != 'list' {
+ // If none of the items are single string values and none of the values are media values, we're good.
+ @if (not breakpoint-single-string(nth($query, 1)) and not breakpoint-single-string(nth($query, 2)) and not breakpoint-single-string(nth($query, 3))) and ((not breakpoint-is-media(nth($query, 1)) and not breakpoint-is-media(nth($query, 2)) and not breakpoint-is-media(nth($query, 3)))) {
+ $feature-holder: append(nth($query, 1), nth($query, 2), space);
+ $feature-holder: append($feature-holder, nth($query, 3), space);
+ $query-holder: append($query-holder, $feature-holder, comma);
+ @return $query-holder;
+ }
+ // let's check to see if the first item is a media type
+ @else if breakpoint-is-media(nth($query, 1)) {
+ $query-holder: append($query-holder, nth($query, 1));
+ $feature-holder: append(nth($query, 2), nth($query, 3), space);
+ $query-holder: append($query-holder, $feature-holder);
+ @return $query-holder;
+ }
+ }
+ }
+
+ // If it's a single item, or if it's not a special case double or triple, we can simply return the query.
+ @return $query;
+}
diff --git a/_sass/vendor/breakpoint/parsers/_resolution.scss b/_sass/vendor/breakpoint/parsers/_resolution.scss
new file mode 100644
index 00000000..19769adf
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/_resolution.scss
@@ -0,0 +1,31 @@
+@import "resolution/resolution";
+
+@function breakpoint-build-resolution($query-print, $query-resolution, $empty-media, $first) {
+ $leader: '';
+ // If we're forcing
+ @if not ($empty-media) or not ($first) {
+ $leader: 'and ';
+ }
+
+ @if breakpoint-get('transform resolutions') and $query-resolution {
+ $resolutions: breakpoint-make-resolutions($query-resolution);
+ $length: length($resolutions);
+ $query-holder: '';
+
+ @for $i from 1 through $length {
+ $query: '#{$query-print} #{$leader}#{nth($resolutions, $i)}';
+ @if $i == 1 {
+ $query-holder: $query;
+ }
+ @else {
+ $query-holder: '#{$query-holder}, #{$query}';
+ }
+ }
+
+ @return $query-holder;
+ }
+ @else {
+ // Return with attached resolution
+ @return $query-print;
+ }
+}
diff --git a/_sass/vendor/breakpoint/parsers/_single.scss b/_sass/vendor/breakpoint/parsers/_single.scss
new file mode 100644
index 00000000..d9fd764a
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/_single.scss
@@ -0,0 +1,26 @@
+//////////////////////////////
+// Import Pieces
+//////////////////////////////
+@import "single/default";
+
+@function breakpoint-parse-single($feature, $empty-media, $first) {
+ $parsed: '';
+ $leader: '';
+ // If we're forcing
+ @if not ($empty-media) or not ($first) {
+ $leader: 'and ';
+ }
+
+ // If it's a single feature that can stand alone, we let it
+ @if (breakpoint-single-string($feature)) {
+ $parsed: $feature;
+ // Set Context
+ $context-setter: private-breakpoint-set-context($feature, $feature);
+ }
+ // If it's not a stand alone feature, we pass it off to the default handler.
+ @else {
+ $parsed: breakpoint-parse-default($feature);
+ }
+
+ @return $leader + '(' + $parsed + ')';
+}
diff --git a/_sass/vendor/breakpoint/parsers/_triple.scss b/_sass/vendor/breakpoint/parsers/_triple.scss
new file mode 100644
index 00000000..e2732067
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/_triple.scss
@@ -0,0 +1,36 @@
+//////////////////////////////
+// Import Pieces
+//////////////////////////////
+@import "triple/default";
+
+@function breakpoint-parse-triple($feature, $empty-media, $first) {
+ $parsed: '';
+ $leader: '';
+
+ // If we're forcing
+ @if not ($empty-media) or not ($first) {
+ $leader: 'and ';
+ }
+
+ // separate the string features from the value numbers
+ $string: null;
+ $numbers: null;
+ @each $val in $feature {
+ @if type-of($val) == string {
+ $string: $val;
+ }
+ @else {
+ @if type-of($numbers) == 'null' {
+ $numbers: $val;
+ }
+ @else {
+ $numbers: append($numbers, $val);
+ }
+ }
+ }
+
+ $parsed: breakpoint-parse-triple-default($string, nth($numbers, 1), nth($numbers, 2));
+
+ @return $leader + $parsed;
+
+}
diff --git a/_sass/vendor/breakpoint/parsers/double/_default-pair.scss b/_sass/vendor/breakpoint/parsers/double/_default-pair.scss
new file mode 100644
index 00000000..f88432cc
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/double/_default-pair.scss
@@ -0,0 +1,21 @@
+@function breakpoint-parse-default-pair($first, $second) {
+ $default: breakpoint-get('default pair');
+ $min: '';
+ $max: '';
+
+ // Sort into min and max
+ $min: min($first, $second);
+ $max: max($first, $second);
+
+ // Set Context
+ $context-setter: private-breakpoint-set-context(min-#{$default}, $min);
+ $context-setter: private-breakpoint-set-context(max-#{$default}, $max);
+
+ // Make them EMs if need be
+ @if (breakpoint-get('to ems') == true) {
+ $min: breakpoint-to-base-em($min);
+ $max: breakpoint-to-base-em($max);
+ }
+
+ @return '(min-#{$default}: #{$min}) and (max-#{$default}: #{$max})';
+}
diff --git a/_sass/vendor/breakpoint/parsers/double/_default.scss b/_sass/vendor/breakpoint/parsers/double/_default.scss
new file mode 100644
index 00000000..73190ed5
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/double/_default.scss
@@ -0,0 +1,22 @@
+@function breakpoint-parse-double-default($first, $second) {
+ $feature: '';
+ $value: '';
+
+ @if type-of($first) == 'string' {
+ $feature: $first;
+ $value: $second;
+ }
+ @else {
+ $feature: $second;
+ $value: $first;
+ }
+
+ // Set Context
+ $context-setter: private-breakpoint-set-context($feature, $value);
+
+ @if (breakpoint-get('to ems') == true) {
+ $value: breakpoint-to-base-em($value);
+ }
+
+ @return '(#{$feature}: #{$value})'
+}
diff --git a/_sass/vendor/breakpoint/parsers/double/_double-string.scss b/_sass/vendor/breakpoint/parsers/double/_double-string.scss
new file mode 100644
index 00000000..c6fd0cb0
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/double/_double-string.scss
@@ -0,0 +1,22 @@
+@function breakpoint-parse-double-string($first, $second) {
+ $feature: '';
+ $value: '';
+
+ // Test to see which is the feature and which is the value
+ @if (breakpoint-string-value($first) == true) {
+ $feature: $first;
+ $value: $second;
+ }
+ @else if (breakpoint-string-value($second) == true) {
+ $feature: $second;
+ $value: $first;
+ }
+ @else {
+ @warn "Neither #{$first} nor #{$second} is a valid media query name.";
+ }
+
+ // Set Context
+ $context-setter: private-breakpoint-set-context($feature, $value);
+
+ @return '(#{$feature}: #{$value})';
+}
\ No newline at end of file
diff --git a/_sass/vendor/breakpoint/parsers/resolution/_resolution.scss b/_sass/vendor/breakpoint/parsers/resolution/_resolution.scss
new file mode 100644
index 00000000..36804212
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/resolution/_resolution.scss
@@ -0,0 +1,60 @@
+@function breakpoint-make-resolutions($resolution) {
+ $length: length($resolution);
+
+ $output: ();
+
+ @if $length == 2 {
+ $feature: '';
+ $value: '';
+
+ // Find which is number
+ @if type-of(nth($resolution, 1)) == 'number' {
+ $value: nth($resolution, 1);
+ }
+ @else {
+ $value: nth($resolution, 2);
+ }
+
+ // Determine min/max/standard
+ @if index($resolution, 'min-resolution') {
+ $feature: 'min-';
+ }
+ @else if index($resolution, 'max-resolution') {
+ $feature: 'max-';
+ }
+
+ $standard: '(#{$feature}resolution: #{$value})';
+
+ // If we're not dealing with dppx,
+ @if unit($value) != 'dppx' {
+ $base: 96dpi;
+ @if unit($value) == 'dpcm' {
+ $base: 243.84dpcm;
+ }
+ // Write out feature tests
+ $webkit: '';
+ $moz: '';
+ $webkit: '(-webkit-#{$feature}device-pixel-ratio: #{$value / $base})';
+ $moz: '(#{$feature}-moz-device-pixel-ratio: #{$value / $base})';
+ // Append to output
+ $output: append($output, $standard, space);
+ $output: append($output, $webkit, space);
+ $output: append($output, $moz, space);
+ }
+ @else {
+ $webkit: '';
+ $moz: '';
+ $webkit: '(-webkit-#{$feature}device-pixel-ratio: #{$value / 1dppx})';
+ $moz: '(#{$feature}-moz-device-pixel-ratio: #{$value / 1dppx})';
+ $fallback: '(#{$feature}resolution: #{$value / 1dppx * 96dpi})';
+ // Append to output
+ $output: append($output, $standard, space);
+ $output: append($output, $webkit, space);
+ $output: append($output, $moz, space);
+ $output: append($output, $fallback, space);
+ }
+
+ }
+
+ @return $output;
+}
diff --git a/_sass/vendor/breakpoint/parsers/single/_default.scss b/_sass/vendor/breakpoint/parsers/single/_default.scss
new file mode 100644
index 00000000..503ef427
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/single/_default.scss
@@ -0,0 +1,13 @@
+@function breakpoint-parse-default($feature) {
+ $default: breakpoint-get('default feature');
+
+ // Set Context
+ $context-setter: private-breakpoint-set-context($default, $feature);
+
+ @if (breakpoint-get('to ems') == true) and (type-of($feature) == 'number') {
+ @return '#{$default}: #{breakpoint-to-base-em($feature)}';
+ }
+ @else {
+ @return '#{$default}: #{$feature}';
+ }
+}
diff --git a/_sass/vendor/breakpoint/parsers/triple/_default.scss b/_sass/vendor/breakpoint/parsers/triple/_default.scss
new file mode 100644
index 00000000..7fa418dd
--- /dev/null
+++ b/_sass/vendor/breakpoint/parsers/triple/_default.scss
@@ -0,0 +1,18 @@
+@function breakpoint-parse-triple-default($feature, $first, $second) {
+
+ // Sort into min and max
+ $min: min($first, $second);
+ $max: max($first, $second);
+
+ // Set Context
+ $context-setter: private-breakpoint-set-context(min-#{$feature}, $min);
+ $context-setter: private-breakpoint-set-context(max-#{$feature}, $max);
+
+ // Make them EMs if need be
+ @if (breakpoint-get('to ems') == true) {
+ $min: breakpoint-to-base-em($min);
+ $max: breakpoint-to-base-em($max);
+ }
+
+ @return '(min-#{$feature}: #{$min}) and (max-#{$feature}: #{$max})';
+}
diff --git a/_sass/vendor/font-awesome/_animated.scss b/_sass/vendor/font-awesome/_animated.scss
new file mode 100644
index 00000000..8a020dbf
--- /dev/null
+++ b/_sass/vendor/font-awesome/_animated.scss
@@ -0,0 +1,34 @@
+// Spinning Icons
+// --------------------------
+
+.#{$fa-css-prefix}-spin {
+ -webkit-animation: fa-spin 2s infinite linear;
+ animation: fa-spin 2s infinite linear;
+}
+
+.#{$fa-css-prefix}-pulse {
+ -webkit-animation: fa-spin 1s infinite steps(8);
+ animation: fa-spin 1s infinite steps(8);
+}
+
+@-webkit-keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+
+@keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
diff --git a/_sass/vendor/font-awesome/_bordered-pulled.scss b/_sass/vendor/font-awesome/_bordered-pulled.scss
new file mode 100644
index 00000000..d4b85a02
--- /dev/null
+++ b/_sass/vendor/font-awesome/_bordered-pulled.scss
@@ -0,0 +1,25 @@
+// Bordered & Pulled
+// -------------------------
+
+.#{$fa-css-prefix}-border {
+ padding: .2em .25em .15em;
+ border: solid .08em $fa-border-color;
+ border-radius: .1em;
+}
+
+.#{$fa-css-prefix}-pull-left { float: left; }
+.#{$fa-css-prefix}-pull-right { float: right; }
+
+.#{$fa-css-prefix} {
+ &.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
+ &.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
+}
+
+/* Deprecated as of 4.4.0 */
+.pull-right { float: right; }
+.pull-left { float: left; }
+
+.#{$fa-css-prefix} {
+ &.pull-left { margin-right: .3em; }
+ &.pull-right { margin-left: .3em; }
+}
diff --git a/_sass/vendor/font-awesome/_core.scss b/_sass/vendor/font-awesome/_core.scss
new file mode 100644
index 00000000..7425ef85
--- /dev/null
+++ b/_sass/vendor/font-awesome/_core.scss
@@ -0,0 +1,12 @@
+// Base Class Definition
+// -------------------------
+
+.#{$fa-css-prefix} {
+ display: inline-block;
+ font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
+ font-size: inherit; // can't have font-size inherit on line above, so need to override
+ text-rendering: auto; // optimizelegibility throws things off #1094
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+
+}
diff --git a/_sass/vendor/font-awesome/_fixed-width.scss b/_sass/vendor/font-awesome/_fixed-width.scss
new file mode 100644
index 00000000..b221c981
--- /dev/null
+++ b/_sass/vendor/font-awesome/_fixed-width.scss
@@ -0,0 +1,6 @@
+// Fixed Width Icons
+// -------------------------
+.#{$fa-css-prefix}-fw {
+ width: (18em / 14);
+ text-align: center;
+}
diff --git a/_sass/vendor/font-awesome/_font-awesome.scss b/_sass/vendor/font-awesome/_font-awesome.scss
new file mode 100644
index 00000000..2308b14c
--- /dev/null
+++ b/_sass/vendor/font-awesome/_font-awesome.scss
@@ -0,0 +1,18 @@
+/*!
+ * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+
+@import "variables";
+@import "mixins";
+@import "path";
+@import "core";
+@import "larger";
+@import "fixed-width";
+@import "list";
+@import "bordered-pulled";
+@import "animated";
+@import "rotated-flipped";
+@import "stacked";
+@import "icons";
+@import "screen-reader";
diff --git a/_sass/vendor/font-awesome/_icons.scss b/_sass/vendor/font-awesome/_icons.scss
new file mode 100644
index 00000000..29443443
--- /dev/null
+++ b/_sass/vendor/font-awesome/_icons.scss
@@ -0,0 +1,733 @@
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+ readers do not read off random characters that represent icons */
+
+.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; }
+.#{$fa-css-prefix}-music:before { content: $fa-var-music; }
+.#{$fa-css-prefix}-search:before { content: $fa-var-search; }
+.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; }
+.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; }
+.#{$fa-css-prefix}-star:before { content: $fa-var-star; }
+.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; }
+.#{$fa-css-prefix}-user:before { content: $fa-var-user; }
+.#{$fa-css-prefix}-film:before { content: $fa-var-film; }
+.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; }
+.#{$fa-css-prefix}-th:before { content: $fa-var-th; }
+.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; }
+.#{$fa-css-prefix}-check:before { content: $fa-var-check; }
+.#{$fa-css-prefix}-remove:before,
+.#{$fa-css-prefix}-close:before,
+.#{$fa-css-prefix}-times:before { content: $fa-var-times; }
+.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; }
+.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; }
+.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; }
+.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; }
+.#{$fa-css-prefix}-gear:before,
+.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; }
+.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; }
+.#{$fa-css-prefix}-home:before { content: $fa-var-home; }
+.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; }
+.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; }
+.#{$fa-css-prefix}-road:before { content: $fa-var-road; }
+.#{$fa-css-prefix}-download:before { content: $fa-var-download; }
+.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; }
+.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; }
+.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; }
+.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; }
+.#{$fa-css-prefix}-rotate-right:before,
+.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; }
+.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; }
+.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; }
+.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; }
+.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; }
+.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; }
+.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; }
+.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; }
+.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; }
+.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; }
+.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; }
+.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; }
+.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; }
+.#{$fa-css-prefix}-book:before { content: $fa-var-book; }
+.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; }
+.#{$fa-css-prefix}-print:before { content: $fa-var-print; }
+.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; }
+.#{$fa-css-prefix}-font:before { content: $fa-var-font; }
+.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; }
+.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; }
+.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; }
+.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; }
+.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; }
+.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; }
+.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; }
+.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; }
+.#{$fa-css-prefix}-list:before { content: $fa-var-list; }
+.#{$fa-css-prefix}-dedent:before,
+.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; }
+.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; }
+.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; }
+.#{$fa-css-prefix}-photo:before,
+.#{$fa-css-prefix}-image:before,
+.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; }
+.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; }
+.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; }
+.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; }
+.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; }
+.#{$fa-css-prefix}-edit:before,
+.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; }
+.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; }
+.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; }
+.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; }
+.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; }
+.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; }
+.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; }
+.#{$fa-css-prefix}-play:before { content: $fa-var-play; }
+.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; }
+.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; }
+.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; }
+.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; }
+.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; }
+.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; }
+.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; }
+.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; }
+.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; }
+.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; }
+.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; }
+.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; }
+.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; }
+.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; }
+.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; }
+.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; }
+.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; }
+.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; }
+.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; }
+.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; }
+.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; }
+.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; }
+.#{$fa-css-prefix}-mail-forward:before,
+.#{$fa-css-prefix}-share:before { content: $fa-var-share; }
+.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; }
+.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; }
+.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; }
+.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; }
+.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; }
+.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; }
+.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; }
+.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; }
+.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; }
+.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; }
+.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; }
+.#{$fa-css-prefix}-warning:before,
+.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; }
+.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; }
+.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; }
+.#{$fa-css-prefix}-random:before { content: $fa-var-random; }
+.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; }
+.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; }
+.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; }
+.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; }
+.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; }
+.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; }
+.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; }
+.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; }
+.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; }
+.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; }
+.#{$fa-css-prefix}-bar-chart-o:before,
+.#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; }
+.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; }
+.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; }
+.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; }
+.#{$fa-css-prefix}-key:before { content: $fa-var-key; }
+.#{$fa-css-prefix}-gears:before,
+.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; }
+.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; }
+.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; }
+.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; }
+.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; }
+.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; }
+.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; }
+.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; }
+.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; }
+.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; }
+.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; }
+.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; }
+.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; }
+.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; }
+.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; }
+.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; }
+.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; }
+.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; }
+.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; }
+.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; }
+.#{$fa-css-prefix}-facebook-f:before,
+.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; }
+.#{$fa-css-prefix}-github:before { content: $fa-var-github; }
+.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; }
+.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; }
+.#{$fa-css-prefix}-feed:before,
+.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; }
+.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; }
+.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; }
+.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; }
+.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; }
+.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; }
+.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; }
+.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; }
+.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; }
+.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; }
+.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; }
+.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; }
+.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; }
+.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; }
+.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; }
+.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; }
+.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; }
+.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; }
+.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; }
+.#{$fa-css-prefix}-group:before,
+.#{$fa-css-prefix}-users:before { content: $fa-var-users; }
+.#{$fa-css-prefix}-chain:before,
+.#{$fa-css-prefix}-link:before { content: $fa-var-link; }
+.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; }
+.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; }
+.#{$fa-css-prefix}-cut:before,
+.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; }
+.#{$fa-css-prefix}-copy:before,
+.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; }
+.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; }
+.#{$fa-css-prefix}-save:before,
+.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; }
+.#{$fa-css-prefix}-square:before { content: $fa-var-square; }
+.#{$fa-css-prefix}-navicon:before,
+.#{$fa-css-prefix}-reorder:before,
+.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; }
+.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; }
+.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; }
+.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; }
+.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; }
+.#{$fa-css-prefix}-table:before { content: $fa-var-table; }
+.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; }
+.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; }
+.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; }
+.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; }
+.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; }
+.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; }
+.#{$fa-css-prefix}-money:before { content: $fa-var-money; }
+.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; }
+.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; }
+.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; }
+.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; }
+.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; }
+.#{$fa-css-prefix}-unsorted:before,
+.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; }
+.#{$fa-css-prefix}-sort-down:before,
+.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; }
+.#{$fa-css-prefix}-sort-up:before,
+.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; }
+.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; }
+.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; }
+.#{$fa-css-prefix}-rotate-left:before,
+.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; }
+.#{$fa-css-prefix}-legal:before,
+.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; }
+.#{$fa-css-prefix}-dashboard:before,
+.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; }
+.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; }
+.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; }
+.#{$fa-css-prefix}-flash:before,
+.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; }
+.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; }
+.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; }
+.#{$fa-css-prefix}-paste:before,
+.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; }
+.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; }
+.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; }
+.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; }
+.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; }
+.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; }
+.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; }
+.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; }
+.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; }
+.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; }
+.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; }
+.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; }
+.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; }
+.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; }
+.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; }
+.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; }
+.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; }
+.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; }
+.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; }
+.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; }
+.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; }
+.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; }
+.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; }
+.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; }
+.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; }
+.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; }
+.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; }
+.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; }
+.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; }
+.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; }
+.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; }
+.#{$fa-css-prefix}-mobile-phone:before,
+.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; }
+.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; }
+.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; }
+.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; }
+.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; }
+.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; }
+.#{$fa-css-prefix}-mail-reply:before,
+.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; }
+.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; }
+.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; }
+.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; }
+.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; }
+.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; }
+.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; }
+.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; }
+.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; }
+.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; }
+.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; }
+.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; }
+.#{$fa-css-prefix}-code:before { content: $fa-var-code; }
+.#{$fa-css-prefix}-mail-reply-all:before,
+.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; }
+.#{$fa-css-prefix}-star-half-empty:before,
+.#{$fa-css-prefix}-star-half-full:before,
+.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; }
+.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; }
+.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; }
+.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; }
+.#{$fa-css-prefix}-unlink:before,
+.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; }
+.#{$fa-css-prefix}-question:before { content: $fa-var-question; }
+.#{$fa-css-prefix}-info:before { content: $fa-var-info; }
+.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; }
+.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; }
+.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; }
+.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; }
+.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; }
+.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; }
+.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; }
+.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; }
+.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; }
+.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; }
+.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; }
+.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; }
+.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; }
+.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; }
+.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; }
+.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; }
+.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; }
+.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; }
+.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; }
+.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; }
+.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; }
+.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; }
+.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; }
+.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; }
+.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; }
+.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; }
+.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; }
+.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; }
+.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; }
+.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; }
+.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; }
+.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; }
+.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; }
+.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; }
+.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; }
+.#{$fa-css-prefix}-toggle-down:before,
+.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; }
+.#{$fa-css-prefix}-toggle-up:before,
+.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; }
+.#{$fa-css-prefix}-toggle-right:before,
+.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; }
+.#{$fa-css-prefix}-euro:before,
+.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; }
+.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; }
+.#{$fa-css-prefix}-dollar:before,
+.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; }
+.#{$fa-css-prefix}-rupee:before,
+.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; }
+.#{$fa-css-prefix}-cny:before,
+.#{$fa-css-prefix}-rmb:before,
+.#{$fa-css-prefix}-yen:before,
+.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; }
+.#{$fa-css-prefix}-ruble:before,
+.#{$fa-css-prefix}-rouble:before,
+.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; }
+.#{$fa-css-prefix}-won:before,
+.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; }
+.#{$fa-css-prefix}-bitcoin:before,
+.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; }
+.#{$fa-css-prefix}-file:before { content: $fa-var-file; }
+.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; }
+.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; }
+.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; }
+.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; }
+.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; }
+.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; }
+.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; }
+.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; }
+.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; }
+.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; }
+.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; }
+.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; }
+.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; }
+.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; }
+.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; }
+.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; }
+.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; }
+.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; }
+.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; }
+.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; }
+.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; }
+.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; }
+.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; }
+.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; }
+.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; }
+.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; }
+.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; }
+.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; }
+.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; }
+.#{$fa-css-prefix}-android:before { content: $fa-var-android; }
+.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; }
+.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; }
+.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; }
+.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; }
+.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; }
+.#{$fa-css-prefix}-female:before { content: $fa-var-female; }
+.#{$fa-css-prefix}-male:before { content: $fa-var-male; }
+.#{$fa-css-prefix}-gittip:before,
+.#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; }
+.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; }
+.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; }
+.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; }
+.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; }
+.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; }
+.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; }
+.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; }
+.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; }
+.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; }
+.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; }
+.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; }
+.#{$fa-css-prefix}-toggle-left:before,
+.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; }
+.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; }
+.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; }
+.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; }
+.#{$fa-css-prefix}-turkish-lira:before,
+.#{$fa-css-prefix}-try:before { content: $fa-var-try; }
+.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; }
+.#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; }
+.#{$fa-css-prefix}-slack:before { content: $fa-var-slack; }
+.#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; }
+.#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; }
+.#{$fa-css-prefix}-openid:before { content: $fa-var-openid; }
+.#{$fa-css-prefix}-institution:before,
+.#{$fa-css-prefix}-bank:before,
+.#{$fa-css-prefix}-university:before { content: $fa-var-university; }
+.#{$fa-css-prefix}-mortar-board:before,
+.#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; }
+.#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; }
+.#{$fa-css-prefix}-google:before { content: $fa-var-google; }
+.#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; }
+.#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; }
+.#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; }
+.#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; }
+.#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; }
+.#{$fa-css-prefix}-digg:before { content: $fa-var-digg; }
+.#{$fa-css-prefix}-pied-piper-pp:before { content: $fa-var-pied-piper-pp; }
+.#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; }
+.#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; }
+.#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; }
+.#{$fa-css-prefix}-language:before { content: $fa-var-language; }
+.#{$fa-css-prefix}-fax:before { content: $fa-var-fax; }
+.#{$fa-css-prefix}-building:before { content: $fa-var-building; }
+.#{$fa-css-prefix}-child:before { content: $fa-var-child; }
+.#{$fa-css-prefix}-paw:before { content: $fa-var-paw; }
+.#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; }
+.#{$fa-css-prefix}-cube:before { content: $fa-var-cube; }
+.#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; }
+.#{$fa-css-prefix}-behance:before { content: $fa-var-behance; }
+.#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; }
+.#{$fa-css-prefix}-steam:before { content: $fa-var-steam; }
+.#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; }
+.#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; }
+.#{$fa-css-prefix}-automobile:before,
+.#{$fa-css-prefix}-car:before { content: $fa-var-car; }
+.#{$fa-css-prefix}-cab:before,
+.#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; }
+.#{$fa-css-prefix}-tree:before { content: $fa-var-tree; }
+.#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; }
+.#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; }
+.#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; }
+.#{$fa-css-prefix}-database:before { content: $fa-var-database; }
+.#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; }
+.#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; }
+.#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; }
+.#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; }
+.#{$fa-css-prefix}-file-photo-o:before,
+.#{$fa-css-prefix}-file-picture-o:before,
+.#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; }
+.#{$fa-css-prefix}-file-zip-o:before,
+.#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; }
+.#{$fa-css-prefix}-file-sound-o:before,
+.#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; }
+.#{$fa-css-prefix}-file-movie-o:before,
+.#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; }
+.#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; }
+.#{$fa-css-prefix}-vine:before { content: $fa-var-vine; }
+.#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; }
+.#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; }
+.#{$fa-css-prefix}-life-bouy:before,
+.#{$fa-css-prefix}-life-buoy:before,
+.#{$fa-css-prefix}-life-saver:before,
+.#{$fa-css-prefix}-support:before,
+.#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; }
+.#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; }
+.#{$fa-css-prefix}-ra:before,
+.#{$fa-css-prefix}-resistance:before,
+.#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; }
+.#{$fa-css-prefix}-ge:before,
+.#{$fa-css-prefix}-empire:before { content: $fa-var-empire; }
+.#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; }
+.#{$fa-css-prefix}-git:before { content: $fa-var-git; }
+.#{$fa-css-prefix}-y-combinator-square:before,
+.#{$fa-css-prefix}-yc-square:before,
+.#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; }
+.#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; }
+.#{$fa-css-prefix}-qq:before { content: $fa-var-qq; }
+.#{$fa-css-prefix}-wechat:before,
+.#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; }
+.#{$fa-css-prefix}-send:before,
+.#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; }
+.#{$fa-css-prefix}-send-o:before,
+.#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; }
+.#{$fa-css-prefix}-history:before { content: $fa-var-history; }
+.#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; }
+.#{$fa-css-prefix}-header:before { content: $fa-var-header; }
+.#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; }
+.#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; }
+.#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; }
+.#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; }
+.#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; }
+.#{$fa-css-prefix}-soccer-ball-o:before,
+.#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; }
+.#{$fa-css-prefix}-tty:before { content: $fa-var-tty; }
+.#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; }
+.#{$fa-css-prefix}-plug:before { content: $fa-var-plug; }
+.#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; }
+.#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; }
+.#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; }
+.#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; }
+.#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; }
+.#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; }
+.#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; }
+.#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; }
+.#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; }
+.#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; }
+.#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; }
+.#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; }
+.#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; }
+.#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; }
+.#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; }
+.#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; }
+.#{$fa-css-prefix}-trash:before { content: $fa-var-trash; }
+.#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; }
+.#{$fa-css-prefix}-at:before { content: $fa-var-at; }
+.#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; }
+.#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; }
+.#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; }
+.#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; }
+.#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; }
+.#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; }
+.#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; }
+.#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; }
+.#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; }
+.#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; }
+.#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; }
+.#{$fa-css-prefix}-bus:before { content: $fa-var-bus; }
+.#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; }
+.#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; }
+.#{$fa-css-prefix}-cc:before { content: $fa-var-cc; }
+.#{$fa-css-prefix}-shekel:before,
+.#{$fa-css-prefix}-sheqel:before,
+.#{$fa-css-prefix}-ils:before { content: $fa-var-ils; }
+.#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; }
+.#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; }
+.#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; }
+.#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; }
+.#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; }
+.#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; }
+.#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; }
+.#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; }
+.#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; }
+.#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; }
+.#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; }
+.#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; }
+.#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; }
+.#{$fa-css-prefix}-ship:before { content: $fa-var-ship; }
+.#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; }
+.#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; }
+.#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; }
+.#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; }
+.#{$fa-css-prefix}-venus:before { content: $fa-var-venus; }
+.#{$fa-css-prefix}-mars:before { content: $fa-var-mars; }
+.#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; }
+.#{$fa-css-prefix}-intersex:before,
+.#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; }
+.#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; }
+.#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; }
+.#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; }
+.#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; }
+.#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; }
+.#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; }
+.#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; }
+.#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; }
+.#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; }
+.#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; }
+.#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; }
+.#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; }
+.#{$fa-css-prefix}-server:before { content: $fa-var-server; }
+.#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; }
+.#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; }
+.#{$fa-css-prefix}-hotel:before,
+.#{$fa-css-prefix}-bed:before { content: $fa-var-bed; }
+.#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; }
+.#{$fa-css-prefix}-train:before { content: $fa-var-train; }
+.#{$fa-css-prefix}-subway:before { content: $fa-var-subway; }
+.#{$fa-css-prefix}-medium:before { content: $fa-var-medium; }
+.#{$fa-css-prefix}-yc:before,
+.#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; }
+.#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; }
+.#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; }
+.#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; }
+.#{$fa-css-prefix}-battery-4:before,
+.#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; }
+.#{$fa-css-prefix}-battery-3:before,
+.#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; }
+.#{$fa-css-prefix}-battery-2:before,
+.#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; }
+.#{$fa-css-prefix}-battery-1:before,
+.#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; }
+.#{$fa-css-prefix}-battery-0:before,
+.#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; }
+.#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; }
+.#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; }
+.#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; }
+.#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; }
+.#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; }
+.#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; }
+.#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; }
+.#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; }
+.#{$fa-css-prefix}-clone:before { content: $fa-var-clone; }
+.#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; }
+.#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; }
+.#{$fa-css-prefix}-hourglass-1:before,
+.#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; }
+.#{$fa-css-prefix}-hourglass-2:before,
+.#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; }
+.#{$fa-css-prefix}-hourglass-3:before,
+.#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; }
+.#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; }
+.#{$fa-css-prefix}-hand-grab-o:before,
+.#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; }
+.#{$fa-css-prefix}-hand-stop-o:before,
+.#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; }
+.#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; }
+.#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; }
+.#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; }
+.#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; }
+.#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; }
+.#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; }
+.#{$fa-css-prefix}-registered:before { content: $fa-var-registered; }
+.#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; }
+.#{$fa-css-prefix}-gg:before { content: $fa-var-gg; }
+.#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; }
+.#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; }
+.#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; }
+.#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; }
+.#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; }
+.#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; }
+.#{$fa-css-prefix}-safari:before { content: $fa-var-safari; }
+.#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; }
+.#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; }
+.#{$fa-css-prefix}-opera:before { content: $fa-var-opera; }
+.#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; }
+.#{$fa-css-prefix}-tv:before,
+.#{$fa-css-prefix}-television:before { content: $fa-var-television; }
+.#{$fa-css-prefix}-contao:before { content: $fa-var-contao; }
+.#{$fa-css-prefix}-500px:before { content: $fa-var-500px; }
+.#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; }
+.#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; }
+.#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; }
+.#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; }
+.#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; }
+.#{$fa-css-prefix}-industry:before { content: $fa-var-industry; }
+.#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; }
+.#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; }
+.#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; }
+.#{$fa-css-prefix}-map:before { content: $fa-var-map; }
+.#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; }
+.#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; }
+.#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; }
+.#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; }
+.#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; }
+.#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; }
+.#{$fa-css-prefix}-reddit-alien:before { content: $fa-var-reddit-alien; }
+.#{$fa-css-prefix}-edge:before { content: $fa-var-edge; }
+.#{$fa-css-prefix}-credit-card-alt:before { content: $fa-var-credit-card-alt; }
+.#{$fa-css-prefix}-codiepie:before { content: $fa-var-codiepie; }
+.#{$fa-css-prefix}-modx:before { content: $fa-var-modx; }
+.#{$fa-css-prefix}-fort-awesome:before { content: $fa-var-fort-awesome; }
+.#{$fa-css-prefix}-usb:before { content: $fa-var-usb; }
+.#{$fa-css-prefix}-product-hunt:before { content: $fa-var-product-hunt; }
+.#{$fa-css-prefix}-mixcloud:before { content: $fa-var-mixcloud; }
+.#{$fa-css-prefix}-scribd:before { content: $fa-var-scribd; }
+.#{$fa-css-prefix}-pause-circle:before { content: $fa-var-pause-circle; }
+.#{$fa-css-prefix}-pause-circle-o:before { content: $fa-var-pause-circle-o; }
+.#{$fa-css-prefix}-stop-circle:before { content: $fa-var-stop-circle; }
+.#{$fa-css-prefix}-stop-circle-o:before { content: $fa-var-stop-circle-o; }
+.#{$fa-css-prefix}-shopping-bag:before { content: $fa-var-shopping-bag; }
+.#{$fa-css-prefix}-shopping-basket:before { content: $fa-var-shopping-basket; }
+.#{$fa-css-prefix}-hashtag:before { content: $fa-var-hashtag; }
+.#{$fa-css-prefix}-bluetooth:before { content: $fa-var-bluetooth; }
+.#{$fa-css-prefix}-bluetooth-b:before { content: $fa-var-bluetooth-b; }
+.#{$fa-css-prefix}-percent:before { content: $fa-var-percent; }
+.#{$fa-css-prefix}-gitlab:before { content: $fa-var-gitlab; }
+.#{$fa-css-prefix}-wpbeginner:before { content: $fa-var-wpbeginner; }
+.#{$fa-css-prefix}-wpforms:before { content: $fa-var-wpforms; }
+.#{$fa-css-prefix}-envira:before { content: $fa-var-envira; }
+.#{$fa-css-prefix}-universal-access:before { content: $fa-var-universal-access; }
+.#{$fa-css-prefix}-wheelchair-alt:before { content: $fa-var-wheelchair-alt; }
+.#{$fa-css-prefix}-question-circle-o:before { content: $fa-var-question-circle-o; }
+.#{$fa-css-prefix}-blind:before { content: $fa-var-blind; }
+.#{$fa-css-prefix}-audio-description:before { content: $fa-var-audio-description; }
+.#{$fa-css-prefix}-volume-control-phone:before { content: $fa-var-volume-control-phone; }
+.#{$fa-css-prefix}-braille:before { content: $fa-var-braille; }
+.#{$fa-css-prefix}-assistive-listening-systems:before { content: $fa-var-assistive-listening-systems; }
+.#{$fa-css-prefix}-asl-interpreting:before,
+.#{$fa-css-prefix}-american-sign-language-interpreting:before { content: $fa-var-american-sign-language-interpreting; }
+.#{$fa-css-prefix}-deafness:before,
+.#{$fa-css-prefix}-hard-of-hearing:before,
+.#{$fa-css-prefix}-deaf:before { content: $fa-var-deaf; }
+.#{$fa-css-prefix}-glide:before { content: $fa-var-glide; }
+.#{$fa-css-prefix}-glide-g:before { content: $fa-var-glide-g; }
+.#{$fa-css-prefix}-signing:before,
+.#{$fa-css-prefix}-sign-language:before { content: $fa-var-sign-language; }
+.#{$fa-css-prefix}-low-vision:before { content: $fa-var-low-vision; }
+.#{$fa-css-prefix}-viadeo:before { content: $fa-var-viadeo; }
+.#{$fa-css-prefix}-viadeo-square:before { content: $fa-var-viadeo-square; }
+.#{$fa-css-prefix}-snapchat:before { content: $fa-var-snapchat; }
+.#{$fa-css-prefix}-snapchat-ghost:before { content: $fa-var-snapchat-ghost; }
+.#{$fa-css-prefix}-snapchat-square:before { content: $fa-var-snapchat-square; }
+.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; }
+.#{$fa-css-prefix}-first-order:before { content: $fa-var-first-order; }
+.#{$fa-css-prefix}-yoast:before { content: $fa-var-yoast; }
+.#{$fa-css-prefix}-themeisle:before { content: $fa-var-themeisle; }
+.#{$fa-css-prefix}-google-plus-circle:before,
+.#{$fa-css-prefix}-google-plus-official:before { content: $fa-var-google-plus-official; }
+.#{$fa-css-prefix}-fa:before,
+.#{$fa-css-prefix}-font-awesome:before { content: $fa-var-font-awesome; }
diff --git a/_sass/vendor/font-awesome/_larger.scss b/_sass/vendor/font-awesome/_larger.scss
new file mode 100644
index 00000000..41e9a818
--- /dev/null
+++ b/_sass/vendor/font-awesome/_larger.scss
@@ -0,0 +1,13 @@
+// Icon Sizes
+// -------------------------
+
+/* makes the font 33% larger relative to the icon container */
+.#{$fa-css-prefix}-lg {
+ font-size: (4em / 3);
+ line-height: (3em / 4);
+ vertical-align: -15%;
+}
+.#{$fa-css-prefix}-2x { font-size: 2em; }
+.#{$fa-css-prefix}-3x { font-size: 3em; }
+.#{$fa-css-prefix}-4x { font-size: 4em; }
+.#{$fa-css-prefix}-5x { font-size: 5em; }
diff --git a/_sass/vendor/font-awesome/_list.scss b/_sass/vendor/font-awesome/_list.scss
new file mode 100644
index 00000000..7d1e4d54
--- /dev/null
+++ b/_sass/vendor/font-awesome/_list.scss
@@ -0,0 +1,19 @@
+// List Icons
+// -------------------------
+
+.#{$fa-css-prefix}-ul {
+ padding-left: 0;
+ margin-left: $fa-li-width;
+ list-style-type: none;
+ > li { position: relative; }
+}
+.#{$fa-css-prefix}-li {
+ position: absolute;
+ left: -$fa-li-width;
+ width: $fa-li-width;
+ top: (2em / 14);
+ text-align: center;
+ &.#{$fa-css-prefix}-lg {
+ left: -$fa-li-width + (4em / 14);
+ }
+}
diff --git a/_sass/vendor/font-awesome/_mixins.scss b/_sass/vendor/font-awesome/_mixins.scss
new file mode 100644
index 00000000..c3bbd574
--- /dev/null
+++ b/_sass/vendor/font-awesome/_mixins.scss
@@ -0,0 +1,60 @@
+// Mixins
+// --------------------------
+
+@mixin fa-icon() {
+ display: inline-block;
+ font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
+ font-size: inherit; // can't have font-size inherit on line above, so need to override
+ text-rendering: auto; // optimizelegibility throws things off #1094
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+
+}
+
+@mixin fa-icon-rotate($degrees, $rotation) {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})";
+ -webkit-transform: rotate($degrees);
+ -ms-transform: rotate($degrees);
+ transform: rotate($degrees);
+}
+
+@mixin fa-icon-flip($horiz, $vert, $rotation) {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)";
+ -webkit-transform: scale($horiz, $vert);
+ -ms-transform: scale($horiz, $vert);
+ transform: scale($horiz, $vert);
+}
+
+
+// Only display content to screen readers. A la Bootstrap 4.
+//
+// See: http://a11yproject.com/posts/how-to-hide-content/
+
+@mixin sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0,0,0,0);
+ border: 0;
+}
+
+// Use in conjunction with .sr-only to only display content when it's focused.
+//
+// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
+//
+// Credit: HTML5 Boilerplate
+
+@mixin sr-only-focusable {
+ &:active,
+ &:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ clip: auto;
+ }
+}
diff --git a/_sass/vendor/font-awesome/_path.scss b/_sass/vendor/font-awesome/_path.scss
new file mode 100644
index 00000000..bb457c23
--- /dev/null
+++ b/_sass/vendor/font-awesome/_path.scss
@@ -0,0 +1,15 @@
+/* FONT PATH
+ * -------------------------- */
+
+@font-face {
+ font-family: 'FontAwesome';
+ src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');
+ src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),
+ url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),
+ url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),
+ url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),
+ url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');
+// src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
+ font-weight: normal;
+ font-style: normal;
+}
diff --git a/_sass/vendor/font-awesome/_rotated-flipped.scss b/_sass/vendor/font-awesome/_rotated-flipped.scss
new file mode 100644
index 00000000..a3558fd0
--- /dev/null
+++ b/_sass/vendor/font-awesome/_rotated-flipped.scss
@@ -0,0 +1,20 @@
+// Rotated & Flipped Icons
+// -------------------------
+
+.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); }
+.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
+.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
+
+.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
+.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); }
+
+// Hook for IE8-9
+// -------------------------
+
+:root .#{$fa-css-prefix}-rotate-90,
+:root .#{$fa-css-prefix}-rotate-180,
+:root .#{$fa-css-prefix}-rotate-270,
+:root .#{$fa-css-prefix}-flip-horizontal,
+:root .#{$fa-css-prefix}-flip-vertical {
+ filter: none;
+}
diff --git a/_sass/vendor/font-awesome/_screen-reader.scss b/_sass/vendor/font-awesome/_screen-reader.scss
new file mode 100644
index 00000000..637426f0
--- /dev/null
+++ b/_sass/vendor/font-awesome/_screen-reader.scss
@@ -0,0 +1,5 @@
+// Screen Readers
+// -------------------------
+
+.sr-only { @include sr-only(); }
+.sr-only-focusable { @include sr-only-focusable(); }
diff --git a/_sass/vendor/font-awesome/_stacked.scss b/_sass/vendor/font-awesome/_stacked.scss
new file mode 100644
index 00000000..aef74036
--- /dev/null
+++ b/_sass/vendor/font-awesome/_stacked.scss
@@ -0,0 +1,20 @@
+// Stacked Icons
+// -------------------------
+
+.#{$fa-css-prefix}-stack {
+ position: relative;
+ display: inline-block;
+ width: 2em;
+ height: 2em;
+ line-height: 2em;
+ vertical-align: middle;
+}
+.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {
+ position: absolute;
+ left: 0;
+ width: 100%;
+ text-align: center;
+}
+.#{$fa-css-prefix}-stack-1x { line-height: inherit; }
+.#{$fa-css-prefix}-stack-2x { font-size: 2em; }
+.#{$fa-css-prefix}-inverse { color: $fa-inverse; }
diff --git a/_sass/vendor/font-awesome/_variables.scss b/_sass/vendor/font-awesome/_variables.scss
new file mode 100644
index 00000000..a5a89ef9
--- /dev/null
+++ b/_sass/vendor/font-awesome/_variables.scss
@@ -0,0 +1,744 @@
+// Variables
+// --------------------------
+
+$fa-font-path: "../fonts" !default;
+$fa-font-size-base: 14px !default;
+$fa-line-height-base: 1 !default;
+//$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.6.3/fonts" !default; // for referencing Bootstrap CDN font files directly
+$fa-css-prefix: fa !default;
+$fa-version: "4.6.3" !default;
+$fa-border-color: #eee !default;
+$fa-inverse: #fff !default;
+$fa-li-width: (30em / 14) !default;
+
+$fa-var-500px: "\f26e";
+$fa-var-adjust: "\f042";
+$fa-var-adn: "\f170";
+$fa-var-align-center: "\f037";
+$fa-var-align-justify: "\f039";
+$fa-var-align-left: "\f036";
+$fa-var-align-right: "\f038";
+$fa-var-amazon: "\f270";
+$fa-var-ambulance: "\f0f9";
+$fa-var-american-sign-language-interpreting: "\f2a3";
+$fa-var-anchor: "\f13d";
+$fa-var-android: "\f17b";
+$fa-var-angellist: "\f209";
+$fa-var-angle-double-down: "\f103";
+$fa-var-angle-double-left: "\f100";
+$fa-var-angle-double-right: "\f101";
+$fa-var-angle-double-up: "\f102";
+$fa-var-angle-down: "\f107";
+$fa-var-angle-left: "\f104";
+$fa-var-angle-right: "\f105";
+$fa-var-angle-up: "\f106";
+$fa-var-apple: "\f179";
+$fa-var-archive: "\f187";
+$fa-var-area-chart: "\f1fe";
+$fa-var-arrow-circle-down: "\f0ab";
+$fa-var-arrow-circle-left: "\f0a8";
+$fa-var-arrow-circle-o-down: "\f01a";
+$fa-var-arrow-circle-o-left: "\f190";
+$fa-var-arrow-circle-o-right: "\f18e";
+$fa-var-arrow-circle-o-up: "\f01b";
+$fa-var-arrow-circle-right: "\f0a9";
+$fa-var-arrow-circle-up: "\f0aa";
+$fa-var-arrow-down: "\f063";
+$fa-var-arrow-left: "\f060";
+$fa-var-arrow-right: "\f061";
+$fa-var-arrow-up: "\f062";
+$fa-var-arrows: "\f047";
+$fa-var-arrows-alt: "\f0b2";
+$fa-var-arrows-h: "\f07e";
+$fa-var-arrows-v: "\f07d";
+$fa-var-asl-interpreting: "\f2a3";
+$fa-var-assistive-listening-systems: "\f2a2";
+$fa-var-asterisk: "\f069";
+$fa-var-at: "\f1fa";
+$fa-var-audio-description: "\f29e";
+$fa-var-automobile: "\f1b9";
+$fa-var-backward: "\f04a";
+$fa-var-balance-scale: "\f24e";
+$fa-var-ban: "\f05e";
+$fa-var-bank: "\f19c";
+$fa-var-bar-chart: "\f080";
+$fa-var-bar-chart-o: "\f080";
+$fa-var-barcode: "\f02a";
+$fa-var-bars: "\f0c9";
+$fa-var-battery-0: "\f244";
+$fa-var-battery-1: "\f243";
+$fa-var-battery-2: "\f242";
+$fa-var-battery-3: "\f241";
+$fa-var-battery-4: "\f240";
+$fa-var-battery-empty: "\f244";
+$fa-var-battery-full: "\f240";
+$fa-var-battery-half: "\f242";
+$fa-var-battery-quarter: "\f243";
+$fa-var-battery-three-quarters: "\f241";
+$fa-var-bed: "\f236";
+$fa-var-beer: "\f0fc";
+$fa-var-behance: "\f1b4";
+$fa-var-behance-square: "\f1b5";
+$fa-var-bell: "\f0f3";
+$fa-var-bell-o: "\f0a2";
+$fa-var-bell-slash: "\f1f6";
+$fa-var-bell-slash-o: "\f1f7";
+$fa-var-bicycle: "\f206";
+$fa-var-binoculars: "\f1e5";
+$fa-var-birthday-cake: "\f1fd";
+$fa-var-bitbucket: "\f171";
+$fa-var-bitbucket-square: "\f172";
+$fa-var-bitcoin: "\f15a";
+$fa-var-black-tie: "\f27e";
+$fa-var-blind: "\f29d";
+$fa-var-bluetooth: "\f293";
+$fa-var-bluetooth-b: "\f294";
+$fa-var-bold: "\f032";
+$fa-var-bolt: "\f0e7";
+$fa-var-bomb: "\f1e2";
+$fa-var-book: "\f02d";
+$fa-var-bookmark: "\f02e";
+$fa-var-bookmark-o: "\f097";
+$fa-var-braille: "\f2a1";
+$fa-var-briefcase: "\f0b1";
+$fa-var-btc: "\f15a";
+$fa-var-bug: "\f188";
+$fa-var-building: "\f1ad";
+$fa-var-building-o: "\f0f7";
+$fa-var-bullhorn: "\f0a1";
+$fa-var-bullseye: "\f140";
+$fa-var-bus: "\f207";
+$fa-var-buysellads: "\f20d";
+$fa-var-cab: "\f1ba";
+$fa-var-calculator: "\f1ec";
+$fa-var-calendar: "\f073";
+$fa-var-calendar-check-o: "\f274";
+$fa-var-calendar-minus-o: "\f272";
+$fa-var-calendar-o: "\f133";
+$fa-var-calendar-plus-o: "\f271";
+$fa-var-calendar-times-o: "\f273";
+$fa-var-camera: "\f030";
+$fa-var-camera-retro: "\f083";
+$fa-var-car: "\f1b9";
+$fa-var-caret-down: "\f0d7";
+$fa-var-caret-left: "\f0d9";
+$fa-var-caret-right: "\f0da";
+$fa-var-caret-square-o-down: "\f150";
+$fa-var-caret-square-o-left: "\f191";
+$fa-var-caret-square-o-right: "\f152";
+$fa-var-caret-square-o-up: "\f151";
+$fa-var-caret-up: "\f0d8";
+$fa-var-cart-arrow-down: "\f218";
+$fa-var-cart-plus: "\f217";
+$fa-var-cc: "\f20a";
+$fa-var-cc-amex: "\f1f3";
+$fa-var-cc-diners-club: "\f24c";
+$fa-var-cc-discover: "\f1f2";
+$fa-var-cc-jcb: "\f24b";
+$fa-var-cc-mastercard: "\f1f1";
+$fa-var-cc-paypal: "\f1f4";
+$fa-var-cc-stripe: "\f1f5";
+$fa-var-cc-visa: "\f1f0";
+$fa-var-certificate: "\f0a3";
+$fa-var-chain: "\f0c1";
+$fa-var-chain-broken: "\f127";
+$fa-var-check: "\f00c";
+$fa-var-check-circle: "\f058";
+$fa-var-check-circle-o: "\f05d";
+$fa-var-check-square: "\f14a";
+$fa-var-check-square-o: "\f046";
+$fa-var-chevron-circle-down: "\f13a";
+$fa-var-chevron-circle-left: "\f137";
+$fa-var-chevron-circle-right: "\f138";
+$fa-var-chevron-circle-up: "\f139";
+$fa-var-chevron-down: "\f078";
+$fa-var-chevron-left: "\f053";
+$fa-var-chevron-right: "\f054";
+$fa-var-chevron-up: "\f077";
+$fa-var-child: "\f1ae";
+$fa-var-chrome: "\f268";
+$fa-var-circle: "\f111";
+$fa-var-circle-o: "\f10c";
+$fa-var-circle-o-notch: "\f1ce";
+$fa-var-circle-thin: "\f1db";
+$fa-var-clipboard: "\f0ea";
+$fa-var-clock-o: "\f017";
+$fa-var-clone: "\f24d";
+$fa-var-close: "\f00d";
+$fa-var-cloud: "\f0c2";
+$fa-var-cloud-download: "\f0ed";
+$fa-var-cloud-upload: "\f0ee";
+$fa-var-cny: "\f157";
+$fa-var-code: "\f121";
+$fa-var-code-fork: "\f126";
+$fa-var-codepen: "\f1cb";
+$fa-var-codiepie: "\f284";
+$fa-var-coffee: "\f0f4";
+$fa-var-cog: "\f013";
+$fa-var-cogs: "\f085";
+$fa-var-columns: "\f0db";
+$fa-var-comment: "\f075";
+$fa-var-comment-o: "\f0e5";
+$fa-var-commenting: "\f27a";
+$fa-var-commenting-o: "\f27b";
+$fa-var-comments: "\f086";
+$fa-var-comments-o: "\f0e6";
+$fa-var-compass: "\f14e";
+$fa-var-compress: "\f066";
+$fa-var-connectdevelop: "\f20e";
+$fa-var-contao: "\f26d";
+$fa-var-copy: "\f0c5";
+$fa-var-copyright: "\f1f9";
+$fa-var-creative-commons: "\f25e";
+$fa-var-credit-card: "\f09d";
+$fa-var-credit-card-alt: "\f283";
+$fa-var-crop: "\f125";
+$fa-var-crosshairs: "\f05b";
+$fa-var-css3: "\f13c";
+$fa-var-cube: "\f1b2";
+$fa-var-cubes: "\f1b3";
+$fa-var-cut: "\f0c4";
+$fa-var-cutlery: "\f0f5";
+$fa-var-dashboard: "\f0e4";
+$fa-var-dashcube: "\f210";
+$fa-var-database: "\f1c0";
+$fa-var-deaf: "\f2a4";
+$fa-var-deafness: "\f2a4";
+$fa-var-dedent: "\f03b";
+$fa-var-delicious: "\f1a5";
+$fa-var-desktop: "\f108";
+$fa-var-deviantart: "\f1bd";
+$fa-var-diamond: "\f219";
+$fa-var-digg: "\f1a6";
+$fa-var-dollar: "\f155";
+$fa-var-dot-circle-o: "\f192";
+$fa-var-download: "\f019";
+$fa-var-dribbble: "\f17d";
+$fa-var-dropbox: "\f16b";
+$fa-var-drupal: "\f1a9";
+$fa-var-edge: "\f282";
+$fa-var-edit: "\f044";
+$fa-var-eject: "\f052";
+$fa-var-ellipsis-h: "\f141";
+$fa-var-ellipsis-v: "\f142";
+$fa-var-empire: "\f1d1";
+$fa-var-envelope: "\f0e0";
+$fa-var-envelope-o: "\f003";
+$fa-var-envelope-square: "\f199";
+$fa-var-envira: "\f299";
+$fa-var-eraser: "\f12d";
+$fa-var-eur: "\f153";
+$fa-var-euro: "\f153";
+$fa-var-exchange: "\f0ec";
+$fa-var-exclamation: "\f12a";
+$fa-var-exclamation-circle: "\f06a";
+$fa-var-exclamation-triangle: "\f071";
+$fa-var-expand: "\f065";
+$fa-var-expeditedssl: "\f23e";
+$fa-var-external-link: "\f08e";
+$fa-var-external-link-square: "\f14c";
+$fa-var-eye: "\f06e";
+$fa-var-eye-slash: "\f070";
+$fa-var-eyedropper: "\f1fb";
+$fa-var-fa: "\f2b4";
+$fa-var-facebook: "\f09a";
+$fa-var-facebook-f: "\f09a";
+$fa-var-facebook-official: "\f230";
+$fa-var-facebook-square: "\f082";
+$fa-var-fast-backward: "\f049";
+$fa-var-fast-forward: "\f050";
+$fa-var-fax: "\f1ac";
+$fa-var-feed: "\f09e";
+$fa-var-female: "\f182";
+$fa-var-fighter-jet: "\f0fb";
+$fa-var-file: "\f15b";
+$fa-var-file-archive-o: "\f1c6";
+$fa-var-file-audio-o: "\f1c7";
+$fa-var-file-code-o: "\f1c9";
+$fa-var-file-excel-o: "\f1c3";
+$fa-var-file-image-o: "\f1c5";
+$fa-var-file-movie-o: "\f1c8";
+$fa-var-file-o: "\f016";
+$fa-var-file-pdf-o: "\f1c1";
+$fa-var-file-photo-o: "\f1c5";
+$fa-var-file-picture-o: "\f1c5";
+$fa-var-file-powerpoint-o: "\f1c4";
+$fa-var-file-sound-o: "\f1c7";
+$fa-var-file-text: "\f15c";
+$fa-var-file-text-o: "\f0f6";
+$fa-var-file-video-o: "\f1c8";
+$fa-var-file-word-o: "\f1c2";
+$fa-var-file-zip-o: "\f1c6";
+$fa-var-files-o: "\f0c5";
+$fa-var-film: "\f008";
+$fa-var-filter: "\f0b0";
+$fa-var-fire: "\f06d";
+$fa-var-fire-extinguisher: "\f134";
+$fa-var-firefox: "\f269";
+$fa-var-first-order: "\f2b0";
+$fa-var-flag: "\f024";
+$fa-var-flag-checkered: "\f11e";
+$fa-var-flag-o: "\f11d";
+$fa-var-flash: "\f0e7";
+$fa-var-flask: "\f0c3";
+$fa-var-flickr: "\f16e";
+$fa-var-floppy-o: "\f0c7";
+$fa-var-folder: "\f07b";
+$fa-var-folder-o: "\f114";
+$fa-var-folder-open: "\f07c";
+$fa-var-folder-open-o: "\f115";
+$fa-var-font: "\f031";
+$fa-var-font-awesome: "\f2b4";
+$fa-var-fonticons: "\f280";
+$fa-var-fort-awesome: "\f286";
+$fa-var-forumbee: "\f211";
+$fa-var-forward: "\f04e";
+$fa-var-foursquare: "\f180";
+$fa-var-frown-o: "\f119";
+$fa-var-futbol-o: "\f1e3";
+$fa-var-gamepad: "\f11b";
+$fa-var-gavel: "\f0e3";
+$fa-var-gbp: "\f154";
+$fa-var-ge: "\f1d1";
+$fa-var-gear: "\f013";
+$fa-var-gears: "\f085";
+$fa-var-genderless: "\f22d";
+$fa-var-get-pocket: "\f265";
+$fa-var-gg: "\f260";
+$fa-var-gg-circle: "\f261";
+$fa-var-gift: "\f06b";
+$fa-var-git: "\f1d3";
+$fa-var-git-square: "\f1d2";
+$fa-var-github: "\f09b";
+$fa-var-github-alt: "\f113";
+$fa-var-github-square: "\f092";
+$fa-var-gitlab: "\f296";
+$fa-var-gittip: "\f184";
+$fa-var-glass: "\f000";
+$fa-var-glide: "\f2a5";
+$fa-var-glide-g: "\f2a6";
+$fa-var-globe: "\f0ac";
+$fa-var-google: "\f1a0";
+$fa-var-google-plus: "\f0d5";
+$fa-var-google-plus-circle: "\f2b3";
+$fa-var-google-plus-official: "\f2b3";
+$fa-var-google-plus-square: "\f0d4";
+$fa-var-google-wallet: "\f1ee";
+$fa-var-graduation-cap: "\f19d";
+$fa-var-gratipay: "\f184";
+$fa-var-group: "\f0c0";
+$fa-var-h-square: "\f0fd";
+$fa-var-hacker-news: "\f1d4";
+$fa-var-hand-grab-o: "\f255";
+$fa-var-hand-lizard-o: "\f258";
+$fa-var-hand-o-down: "\f0a7";
+$fa-var-hand-o-left: "\f0a5";
+$fa-var-hand-o-right: "\f0a4";
+$fa-var-hand-o-up: "\f0a6";
+$fa-var-hand-paper-o: "\f256";
+$fa-var-hand-peace-o: "\f25b";
+$fa-var-hand-pointer-o: "\f25a";
+$fa-var-hand-rock-o: "\f255";
+$fa-var-hand-scissors-o: "\f257";
+$fa-var-hand-spock-o: "\f259";
+$fa-var-hand-stop-o: "\f256";
+$fa-var-hard-of-hearing: "\f2a4";
+$fa-var-hashtag: "\f292";
+$fa-var-hdd-o: "\f0a0";
+$fa-var-header: "\f1dc";
+$fa-var-headphones: "\f025";
+$fa-var-heart: "\f004";
+$fa-var-heart-o: "\f08a";
+$fa-var-heartbeat: "\f21e";
+$fa-var-history: "\f1da";
+$fa-var-home: "\f015";
+$fa-var-hospital-o: "\f0f8";
+$fa-var-hotel: "\f236";
+$fa-var-hourglass: "\f254";
+$fa-var-hourglass-1: "\f251";
+$fa-var-hourglass-2: "\f252";
+$fa-var-hourglass-3: "\f253";
+$fa-var-hourglass-end: "\f253";
+$fa-var-hourglass-half: "\f252";
+$fa-var-hourglass-o: "\f250";
+$fa-var-hourglass-start: "\f251";
+$fa-var-houzz: "\f27c";
+$fa-var-html5: "\f13b";
+$fa-var-i-cursor: "\f246";
+$fa-var-ils: "\f20b";
+$fa-var-image: "\f03e";
+$fa-var-inbox: "\f01c";
+$fa-var-indent: "\f03c";
+$fa-var-industry: "\f275";
+$fa-var-info: "\f129";
+$fa-var-info-circle: "\f05a";
+$fa-var-inr: "\f156";
+$fa-var-instagram: "\f16d";
+$fa-var-institution: "\f19c";
+$fa-var-internet-explorer: "\f26b";
+$fa-var-intersex: "\f224";
+$fa-var-ioxhost: "\f208";
+$fa-var-italic: "\f033";
+$fa-var-joomla: "\f1aa";
+$fa-var-jpy: "\f157";
+$fa-var-jsfiddle: "\f1cc";
+$fa-var-key: "\f084";
+$fa-var-keyboard-o: "\f11c";
+$fa-var-krw: "\f159";
+$fa-var-language: "\f1ab";
+$fa-var-laptop: "\f109";
+$fa-var-lastfm: "\f202";
+$fa-var-lastfm-square: "\f203";
+$fa-var-leaf: "\f06c";
+$fa-var-leanpub: "\f212";
+$fa-var-legal: "\f0e3";
+$fa-var-lemon-o: "\f094";
+$fa-var-level-down: "\f149";
+$fa-var-level-up: "\f148";
+$fa-var-life-bouy: "\f1cd";
+$fa-var-life-buoy: "\f1cd";
+$fa-var-life-ring: "\f1cd";
+$fa-var-life-saver: "\f1cd";
+$fa-var-lightbulb-o: "\f0eb";
+$fa-var-line-chart: "\f201";
+$fa-var-link: "\f0c1";
+$fa-var-linkedin: "\f0e1";
+$fa-var-linkedin-square: "\f08c";
+$fa-var-linux: "\f17c";
+$fa-var-list: "\f03a";
+$fa-var-list-alt: "\f022";
+$fa-var-list-ol: "\f0cb";
+$fa-var-list-ul: "\f0ca";
+$fa-var-location-arrow: "\f124";
+$fa-var-lock: "\f023";
+$fa-var-long-arrow-down: "\f175";
+$fa-var-long-arrow-left: "\f177";
+$fa-var-long-arrow-right: "\f178";
+$fa-var-long-arrow-up: "\f176";
+$fa-var-low-vision: "\f2a8";
+$fa-var-magic: "\f0d0";
+$fa-var-magnet: "\f076";
+$fa-var-mail-forward: "\f064";
+$fa-var-mail-reply: "\f112";
+$fa-var-mail-reply-all: "\f122";
+$fa-var-male: "\f183";
+$fa-var-map: "\f279";
+$fa-var-map-marker: "\f041";
+$fa-var-map-o: "\f278";
+$fa-var-map-pin: "\f276";
+$fa-var-map-signs: "\f277";
+$fa-var-mars: "\f222";
+$fa-var-mars-double: "\f227";
+$fa-var-mars-stroke: "\f229";
+$fa-var-mars-stroke-h: "\f22b";
+$fa-var-mars-stroke-v: "\f22a";
+$fa-var-maxcdn: "\f136";
+$fa-var-meanpath: "\f20c";
+$fa-var-medium: "\f23a";
+$fa-var-medkit: "\f0fa";
+$fa-var-meh-o: "\f11a";
+$fa-var-mercury: "\f223";
+$fa-var-microphone: "\f130";
+$fa-var-microphone-slash: "\f131";
+$fa-var-minus: "\f068";
+$fa-var-minus-circle: "\f056";
+$fa-var-minus-square: "\f146";
+$fa-var-minus-square-o: "\f147";
+$fa-var-mixcloud: "\f289";
+$fa-var-mobile: "\f10b";
+$fa-var-mobile-phone: "\f10b";
+$fa-var-modx: "\f285";
+$fa-var-money: "\f0d6";
+$fa-var-moon-o: "\f186";
+$fa-var-mortar-board: "\f19d";
+$fa-var-motorcycle: "\f21c";
+$fa-var-mouse-pointer: "\f245";
+$fa-var-music: "\f001";
+$fa-var-navicon: "\f0c9";
+$fa-var-neuter: "\f22c";
+$fa-var-newspaper-o: "\f1ea";
+$fa-var-object-group: "\f247";
+$fa-var-object-ungroup: "\f248";
+$fa-var-odnoklassniki: "\f263";
+$fa-var-odnoklassniki-square: "\f264";
+$fa-var-opencart: "\f23d";
+$fa-var-openid: "\f19b";
+$fa-var-opera: "\f26a";
+$fa-var-optin-monster: "\f23c";
+$fa-var-outdent: "\f03b";
+$fa-var-pagelines: "\f18c";
+$fa-var-paint-brush: "\f1fc";
+$fa-var-paper-plane: "\f1d8";
+$fa-var-paper-plane-o: "\f1d9";
+$fa-var-paperclip: "\f0c6";
+$fa-var-paragraph: "\f1dd";
+$fa-var-paste: "\f0ea";
+$fa-var-pause: "\f04c";
+$fa-var-pause-circle: "\f28b";
+$fa-var-pause-circle-o: "\f28c";
+$fa-var-paw: "\f1b0";
+$fa-var-paypal: "\f1ed";
+$fa-var-pencil: "\f040";
+$fa-var-pencil-square: "\f14b";
+$fa-var-pencil-square-o: "\f044";
+$fa-var-percent: "\f295";
+$fa-var-phone: "\f095";
+$fa-var-phone-square: "\f098";
+$fa-var-photo: "\f03e";
+$fa-var-picture-o: "\f03e";
+$fa-var-pie-chart: "\f200";
+$fa-var-pied-piper: "\f2ae";
+$fa-var-pied-piper-alt: "\f1a8";
+$fa-var-pied-piper-pp: "\f1a7";
+$fa-var-pinterest: "\f0d2";
+$fa-var-pinterest-p: "\f231";
+$fa-var-pinterest-square: "\f0d3";
+$fa-var-plane: "\f072";
+$fa-var-play: "\f04b";
+$fa-var-play-circle: "\f144";
+$fa-var-play-circle-o: "\f01d";
+$fa-var-plug: "\f1e6";
+$fa-var-plus: "\f067";
+$fa-var-plus-circle: "\f055";
+$fa-var-plus-square: "\f0fe";
+$fa-var-plus-square-o: "\f196";
+$fa-var-power-off: "\f011";
+$fa-var-print: "\f02f";
+$fa-var-product-hunt: "\f288";
+$fa-var-puzzle-piece: "\f12e";
+$fa-var-qq: "\f1d6";
+$fa-var-qrcode: "\f029";
+$fa-var-question: "\f128";
+$fa-var-question-circle: "\f059";
+$fa-var-question-circle-o: "\f29c";
+$fa-var-quote-left: "\f10d";
+$fa-var-quote-right: "\f10e";
+$fa-var-ra: "\f1d0";
+$fa-var-random: "\f074";
+$fa-var-rebel: "\f1d0";
+$fa-var-recycle: "\f1b8";
+$fa-var-reddit: "\f1a1";
+$fa-var-reddit-alien: "\f281";
+$fa-var-reddit-square: "\f1a2";
+$fa-var-refresh: "\f021";
+$fa-var-registered: "\f25d";
+$fa-var-remove: "\f00d";
+$fa-var-renren: "\f18b";
+$fa-var-reorder: "\f0c9";
+$fa-var-repeat: "\f01e";
+$fa-var-reply: "\f112";
+$fa-var-reply-all: "\f122";
+$fa-var-resistance: "\f1d0";
+$fa-var-retweet: "\f079";
+$fa-var-rmb: "\f157";
+$fa-var-road: "\f018";
+$fa-var-rocket: "\f135";
+$fa-var-rotate-left: "\f0e2";
+$fa-var-rotate-right: "\f01e";
+$fa-var-rouble: "\f158";
+$fa-var-rss: "\f09e";
+$fa-var-rss-square: "\f143";
+$fa-var-rub: "\f158";
+$fa-var-ruble: "\f158";
+$fa-var-rupee: "\f156";
+$fa-var-safari: "\f267";
+$fa-var-save: "\f0c7";
+$fa-var-scissors: "\f0c4";
+$fa-var-scribd: "\f28a";
+$fa-var-search: "\f002";
+$fa-var-search-minus: "\f010";
+$fa-var-search-plus: "\f00e";
+$fa-var-sellsy: "\f213";
+$fa-var-send: "\f1d8";
+$fa-var-send-o: "\f1d9";
+$fa-var-server: "\f233";
+$fa-var-share: "\f064";
+$fa-var-share-alt: "\f1e0";
+$fa-var-share-alt-square: "\f1e1";
+$fa-var-share-square: "\f14d";
+$fa-var-share-square-o: "\f045";
+$fa-var-shekel: "\f20b";
+$fa-var-sheqel: "\f20b";
+$fa-var-shield: "\f132";
+$fa-var-ship: "\f21a";
+$fa-var-shirtsinbulk: "\f214";
+$fa-var-shopping-bag: "\f290";
+$fa-var-shopping-basket: "\f291";
+$fa-var-shopping-cart: "\f07a";
+$fa-var-sign-in: "\f090";
+$fa-var-sign-language: "\f2a7";
+$fa-var-sign-out: "\f08b";
+$fa-var-signal: "\f012";
+$fa-var-signing: "\f2a7";
+$fa-var-simplybuilt: "\f215";
+$fa-var-sitemap: "\f0e8";
+$fa-var-skyatlas: "\f216";
+$fa-var-skype: "\f17e";
+$fa-var-slack: "\f198";
+$fa-var-sliders: "\f1de";
+$fa-var-slideshare: "\f1e7";
+$fa-var-smile-o: "\f118";
+$fa-var-snapchat: "\f2ab";
+$fa-var-snapchat-ghost: "\f2ac";
+$fa-var-snapchat-square: "\f2ad";
+$fa-var-soccer-ball-o: "\f1e3";
+$fa-var-sort: "\f0dc";
+$fa-var-sort-alpha-asc: "\f15d";
+$fa-var-sort-alpha-desc: "\f15e";
+$fa-var-sort-amount-asc: "\f160";
+$fa-var-sort-amount-desc: "\f161";
+$fa-var-sort-asc: "\f0de";
+$fa-var-sort-desc: "\f0dd";
+$fa-var-sort-down: "\f0dd";
+$fa-var-sort-numeric-asc: "\f162";
+$fa-var-sort-numeric-desc: "\f163";
+$fa-var-sort-up: "\f0de";
+$fa-var-soundcloud: "\f1be";
+$fa-var-space-shuttle: "\f197";
+$fa-var-spinner: "\f110";
+$fa-var-spoon: "\f1b1";
+$fa-var-spotify: "\f1bc";
+$fa-var-square: "\f0c8";
+$fa-var-square-o: "\f096";
+$fa-var-stack-exchange: "\f18d";
+$fa-var-stack-overflow: "\f16c";
+$fa-var-star: "\f005";
+$fa-var-star-half: "\f089";
+$fa-var-star-half-empty: "\f123";
+$fa-var-star-half-full: "\f123";
+$fa-var-star-half-o: "\f123";
+$fa-var-star-o: "\f006";
+$fa-var-steam: "\f1b6";
+$fa-var-steam-square: "\f1b7";
+$fa-var-step-backward: "\f048";
+$fa-var-step-forward: "\f051";
+$fa-var-stethoscope: "\f0f1";
+$fa-var-sticky-note: "\f249";
+$fa-var-sticky-note-o: "\f24a";
+$fa-var-stop: "\f04d";
+$fa-var-stop-circle: "\f28d";
+$fa-var-stop-circle-o: "\f28e";
+$fa-var-street-view: "\f21d";
+$fa-var-strikethrough: "\f0cc";
+$fa-var-stumbleupon: "\f1a4";
+$fa-var-stumbleupon-circle: "\f1a3";
+$fa-var-subscript: "\f12c";
+$fa-var-subway: "\f239";
+$fa-var-suitcase: "\f0f2";
+$fa-var-sun-o: "\f185";
+$fa-var-superscript: "\f12b";
+$fa-var-support: "\f1cd";
+$fa-var-table: "\f0ce";
+$fa-var-tablet: "\f10a";
+$fa-var-tachometer: "\f0e4";
+$fa-var-tag: "\f02b";
+$fa-var-tags: "\f02c";
+$fa-var-tasks: "\f0ae";
+$fa-var-taxi: "\f1ba";
+$fa-var-television: "\f26c";
+$fa-var-tencent-weibo: "\f1d5";
+$fa-var-terminal: "\f120";
+$fa-var-text-height: "\f034";
+$fa-var-text-width: "\f035";
+$fa-var-th: "\f00a";
+$fa-var-th-large: "\f009";
+$fa-var-th-list: "\f00b";
+$fa-var-themeisle: "\f2b2";
+$fa-var-thumb-tack: "\f08d";
+$fa-var-thumbs-down: "\f165";
+$fa-var-thumbs-o-down: "\f088";
+$fa-var-thumbs-o-up: "\f087";
+$fa-var-thumbs-up: "\f164";
+$fa-var-ticket: "\f145";
+$fa-var-times: "\f00d";
+$fa-var-times-circle: "\f057";
+$fa-var-times-circle-o: "\f05c";
+$fa-var-tint: "\f043";
+$fa-var-toggle-down: "\f150";
+$fa-var-toggle-left: "\f191";
+$fa-var-toggle-off: "\f204";
+$fa-var-toggle-on: "\f205";
+$fa-var-toggle-right: "\f152";
+$fa-var-toggle-up: "\f151";
+$fa-var-trademark: "\f25c";
+$fa-var-train: "\f238";
+$fa-var-transgender: "\f224";
+$fa-var-transgender-alt: "\f225";
+$fa-var-trash: "\f1f8";
+$fa-var-trash-o: "\f014";
+$fa-var-tree: "\f1bb";
+$fa-var-trello: "\f181";
+$fa-var-tripadvisor: "\f262";
+$fa-var-trophy: "\f091";
+$fa-var-truck: "\f0d1";
+$fa-var-try: "\f195";
+$fa-var-tty: "\f1e4";
+$fa-var-tumblr: "\f173";
+$fa-var-tumblr-square: "\f174";
+$fa-var-turkish-lira: "\f195";
+$fa-var-tv: "\f26c";
+$fa-var-twitch: "\f1e8";
+$fa-var-twitter: "\f099";
+$fa-var-twitter-square: "\f081";
+$fa-var-umbrella: "\f0e9";
+$fa-var-underline: "\f0cd";
+$fa-var-undo: "\f0e2";
+$fa-var-universal-access: "\f29a";
+$fa-var-university: "\f19c";
+$fa-var-unlink: "\f127";
+$fa-var-unlock: "\f09c";
+$fa-var-unlock-alt: "\f13e";
+$fa-var-unsorted: "\f0dc";
+$fa-var-upload: "\f093";
+$fa-var-usb: "\f287";
+$fa-var-usd: "\f155";
+$fa-var-user: "\f007";
+$fa-var-user-md: "\f0f0";
+$fa-var-user-plus: "\f234";
+$fa-var-user-secret: "\f21b";
+$fa-var-user-times: "\f235";
+$fa-var-users: "\f0c0";
+$fa-var-venus: "\f221";
+$fa-var-venus-double: "\f226";
+$fa-var-venus-mars: "\f228";
+$fa-var-viacoin: "\f237";
+$fa-var-viadeo: "\f2a9";
+$fa-var-viadeo-square: "\f2aa";
+$fa-var-video-camera: "\f03d";
+$fa-var-vimeo: "\f27d";
+$fa-var-vimeo-square: "\f194";
+$fa-var-vine: "\f1ca";
+$fa-var-vk: "\f189";
+$fa-var-volume-control-phone: "\f2a0";
+$fa-var-volume-down: "\f027";
+$fa-var-volume-off: "\f026";
+$fa-var-volume-up: "\f028";
+$fa-var-warning: "\f071";
+$fa-var-wechat: "\f1d7";
+$fa-var-weibo: "\f18a";
+$fa-var-weixin: "\f1d7";
+$fa-var-whatsapp: "\f232";
+$fa-var-wheelchair: "\f193";
+$fa-var-wheelchair-alt: "\f29b";
+$fa-var-wifi: "\f1eb";
+$fa-var-wikipedia-w: "\f266";
+$fa-var-windows: "\f17a";
+$fa-var-won: "\f159";
+$fa-var-wordpress: "\f19a";
+$fa-var-wpbeginner: "\f297";
+$fa-var-wpforms: "\f298";
+$fa-var-wrench: "\f0ad";
+$fa-var-xing: "\f168";
+$fa-var-xing-square: "\f169";
+$fa-var-y-combinator: "\f23b";
+$fa-var-y-combinator-square: "\f1d4";
+$fa-var-yahoo: "\f19e";
+$fa-var-yc: "\f23b";
+$fa-var-yc-square: "\f1d4";
+$fa-var-yelp: "\f1e9";
+$fa-var-yen: "\f157";
+$fa-var-yoast: "\f2b1";
+$fa-var-youtube: "\f167";
+$fa-var-youtube-play: "\f16a";
+$fa-var-youtube-square: "\f166";
+
diff --git a/_sass/vendor/magnific-popup/_magnific-popup.scss b/_sass/vendor/magnific-popup/_magnific-popup.scss
new file mode 100644
index 00000000..27b27bcc
--- /dev/null
+++ b/_sass/vendor/magnific-popup/_magnific-popup.scss
@@ -0,0 +1,649 @@
+/* Magnific Popup CSS */
+
+@import "settings";
+
+////////////////////////
+//
+// Contents:
+//
+// 1. Default Settings
+// 2. General styles
+// - Transluscent overlay
+// - Containers, wrappers
+// - Cursors
+// - Helper classes
+// 3. Appearance
+// - Preloader & text that displays error messages
+// - CSS reset for buttons
+// - Close icon
+// - "1 of X" counter
+// - Navigation (left/right) arrows
+// - Iframe content type styles
+// - Image content type styles
+// - Media query where size of arrows is reduced
+// - IE7 support
+//
+////////////////////////
+
+
+
+////////////////////////
+// 1. Default Settings
+////////////////////////
+
+$mfp-overlay-color: #0b0b0b !default;
+$mfp-overlay-opacity: 0.8 !default;
+$mfp-shadow: 0 0 8px rgba(0, 0, 0, 0.6) !default; // shadow on image or iframe
+$mfp-popup-padding-left: 8px !default; // Padding from left and from right side
+$mfp-popup-padding-left-mobile: 6px !default; // Same as above, but is applied when width of window is less than 800px
+
+$mfp-z-index-base: 1040 !default; // Base z-index of popup
+$mfp-include-arrows: true !default; // include styles for nav arrows
+$mfp-controls-opacity: 0.65 !default;
+$mfp-controls-color: #FFF !default;
+$mfp-controls-border-color: #3F3F3F !default;
+$mfp-inner-close-icon-color: #333 !default;
+$mfp-controls-text-color: #CCC !default; // Color of preloader and "1 of X" indicator
+$mfp-controls-text-color-hover: #FFF !default;
+$mfp-IE7support: true !default; // Very basic IE7 support
+
+// Iframe-type options
+$mfp-include-iframe-type: true !default;
+$mfp-iframe-padding-top: 40px !default;
+$mfp-iframe-background: #000 !default;
+$mfp-iframe-max-width: 900px !default;
+$mfp-iframe-ratio: 9/16 !default;
+
+// Image-type options
+$mfp-include-image-type: true !default;
+$mfp-image-background: #444 !default;
+$mfp-image-padding-top: 40px !default;
+$mfp-image-padding-bottom: 40px !default;
+$mfp-include-mobile-layout-for-image: true !default; // Removes paddings from top and bottom
+
+// Image caption options
+$mfp-caption-title-color: #F3F3F3 !default;
+$mfp-caption-subtitle-color: #BDBDBD !default;
+
+// A11y
+$mfp-use-visuallyhidden: false !default; // Hide content from browsers, but make it available for screen readers
+
+
+
+////////////////////////
+// 2. General styles
+////////////////////////
+
+// Transluscent overlay
+.mfp-bg {
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: $mfp-z-index-base + 2;
+ overflow: hidden;
+ position: fixed;
+
+ background: $mfp-overlay-color;
+ opacity: $mfp-overlay-opacity;
+ @if $mfp-IE7support {
+ filter: unquote("alpha(opacity=#{$mfp-overlay-opacity*100})");
+ }
+}
+
+// Wrapper for popup
+.mfp-wrap {
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: $mfp-z-index-base + 3;
+ position: fixed;
+ outline: none !important;
+ -webkit-backface-visibility: hidden; // fixes webkit bug that can cause "false" scrollbar
+}
+
+// Root container
+.mfp-container {
+ text-align: center;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+ padding: 0 $mfp-popup-padding-left;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+// Vertical centerer helper
+.mfp-container {
+ &:before {
+ content: '';
+ display: inline-block;
+ height: 100%;
+ vertical-align: middle;
+ }
+}
+
+// Remove vertical centering when popup has class `mfp-align-top`
+.mfp-align-top {
+ .mfp-container {
+ &:before {
+ display: none;
+ }
+ }
+}
+
+// Popup content holder
+.mfp-content {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ margin: 0 auto;
+ text-align: left;
+ z-index: $mfp-z-index-base + 5;
+}
+.mfp-inline-holder,
+.mfp-ajax-holder {
+ .mfp-content {
+ width: 100%;
+ cursor: auto;
+ }
+}
+
+// Cursors
+.mfp-ajax-cur {
+ cursor: progress;
+}
+.mfp-zoom-out-cur {
+ &, .mfp-image-holder .mfp-close {
+ cursor: -moz-zoom-out;
+ cursor: -webkit-zoom-out;
+ cursor: zoom-out;
+ }
+}
+.mfp-zoom {
+ cursor: pointer;
+ cursor: -webkit-zoom-in;
+ cursor: -moz-zoom-in;
+ cursor: zoom-in;
+}
+.mfp-auto-cursor {
+ .mfp-content {
+ cursor: auto;
+ }
+}
+
+.mfp-close,
+.mfp-arrow,
+.mfp-preloader,
+.mfp-counter {
+ -webkit-user-select:none;
+ -moz-user-select: none;
+ user-select: none;
+}
+
+// Hide the image during the loading
+.mfp-loading {
+ &.mfp-figure {
+ display: none;
+ }
+}
+
+// Helper class that hides stuff
+@if $mfp-use-visuallyhidden {
+ // From HTML5 Boilerplate https://github.com/h5bp/html5-boilerplate/blob/v4.2.0/doc/css.md#visuallyhidden
+ .mfp-hide {
+ border: 0 !important;
+ clip: rect(0 0 0 0) !important;
+ height: 1px !important;
+ margin: -1px !important;
+ overflow: hidden !important;
+ padding: 0 !important;
+ position: absolute !important;
+ width: 1px !important;
+ }
+} @else {
+ .mfp-hide {
+ display: none !important;
+ }
+}
+
+
+////////////////////////
+// 3. Appearance
+////////////////////////
+
+// Preloader and text that displays error messages
+.mfp-preloader {
+ color: $mfp-controls-text-color;
+ position: absolute;
+ top: 50%;
+ width: auto;
+ text-align: center;
+ margin-top: -0.8em;
+ left: 8px;
+ right: 8px;
+ z-index: $mfp-z-index-base + 4;
+ a {
+ color: $mfp-controls-text-color;
+ &:hover {
+ color: $mfp-controls-text-color-hover;
+ }
+ }
+}
+
+// Hide preloader when content successfully loaded
+.mfp-s-ready {
+ .mfp-preloader {
+ display: none;
+ }
+}
+
+// Hide content when it was not loaded
+.mfp-s-error {
+ .mfp-content {
+ display: none;
+ }
+}
+
+// CSS-reset for buttons
+button {
+ &.mfp-close,
+ &.mfp-arrow {
+ overflow: visible;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+ -webkit-appearance: none;
+ display: block;
+ outline: none;
+ padding: 0;
+ z-index: $mfp-z-index-base + 6;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+ &::-moz-focus-inner {
+ padding: 0;
+ border: 0
+ }
+}
+
+
+// Close icon
+.mfp-close {
+ width: 44px;
+ height: 44px;
+ line-height: 44px;
+
+ position: absolute;
+ right: 0;
+ top: 0;
+ text-decoration: none;
+ text-align: center;
+ opacity: $mfp-controls-opacity;
+ @if $mfp-IE7support {
+ filter: unquote("alpha(opacity=#{$mfp-controls-opacity*100})");
+ }
+ padding: 0 0 18px 10px;
+ color: $mfp-controls-color;
+
+ font-style: normal;
+ font-size: 28px;
+ font-family: $serif;
+
+ &:hover,
+ &:focus {
+ opacity: 1;
+ @if $mfp-IE7support {
+ filter: unquote("alpha(opacity=#{1*100})");
+ }
+ }
+
+ &:active {
+ top: 1px;
+ }
+}
+.mfp-close-btn-in {
+ .mfp-close {
+ color: $mfp-inner-close-icon-color;
+ }
+}
+.mfp-image-holder,
+.mfp-iframe-holder {
+ .mfp-close {
+ color: $mfp-controls-color;
+ right: -6px;
+ text-align: right;
+ padding-right: 6px;
+ width: 100%;
+ }
+}
+
+// "1 of X" counter
+.mfp-counter {
+ position: absolute;
+ top: 0;
+ right: 0;
+ color: $mfp-controls-text-color;
+ font-size: 12px;
+ line-height: 18px;
+}
+
+// Navigation arrows
+@if $mfp-include-arrows {
+ .mfp-arrow {
+ position: absolute;
+ opacity: $mfp-controls-opacity;
+ @if $mfp-IE7support {
+ filter: unquote("alpha(opacity=#{$mfp-controls-opacity*100})");
+ }
+ margin: 0;
+ top: 50%;
+ margin-top: -55px;
+ padding: 0;
+ width: 90px;
+ height: 110px;
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+ &:active {
+ margin-top: -54px;
+ }
+ &:hover,
+ &:focus {
+ opacity: 1;
+ @if $mfp-IE7support {
+ filter: unquote("alpha(opacity=#{1*100})");
+ }
+ }
+ &:before,
+ &:after,
+ .mfp-b,
+ .mfp-a {
+ content: '';
+ display: block;
+ width: 0;
+ height: 0;
+ position: absolute;
+ left: 0;
+ top: 0;
+ margin-top: 35px;
+ margin-left: 35px;
+ border: medium inset transparent;
+ }
+
+ &:after,
+ .mfp-a {
+
+ border-top-width: 13px;
+ border-bottom-width: 13px;
+ top:8px;
+ }
+
+ &:before,
+ .mfp-b {
+ border-top-width: 21px;
+ border-bottom-width: 21px;
+ opacity: 0.7;
+ }
+
+ }
+
+ .mfp-arrow-left {
+ left: 0;
+
+ &:after,
+ .mfp-a {
+ border-right: 17px solid $mfp-controls-color;
+ margin-left: 31px;
+ }
+ &:before,
+ .mfp-b {
+ margin-left: 25px;
+ border-right: 27px solid $mfp-controls-border-color;
+ }
+ }
+
+ .mfp-arrow-right {
+ right: 0;
+ &:after,
+ .mfp-a {
+ border-left: 17px solid $mfp-controls-color;
+ margin-left: 39px
+ }
+ &:before,
+ .mfp-b {
+ border-left: 27px solid $mfp-controls-border-color;
+ }
+ }
+}
+
+
+
+// Iframe content type
+@if $mfp-include-iframe-type {
+ .mfp-iframe-holder {
+ padding-top: $mfp-iframe-padding-top;
+ padding-bottom: $mfp-iframe-padding-top;
+ .mfp-content {
+ line-height: 0;
+ width: 100%;
+ max-width: $mfp-iframe-max-width;
+ }
+ .mfp-close {
+ top: -40px;
+ }
+ }
+ .mfp-iframe-scaler {
+ width: 100%;
+ height: 0;
+ overflow: hidden;
+ padding-top: $mfp-iframe-ratio * 100%;
+ iframe {
+ position: absolute;
+ display: block;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ box-shadow: $mfp-shadow;
+ background: $mfp-iframe-background;
+ }
+ }
+}
+
+
+
+// Image content type
+@if $mfp-include-image-type {
+
+ /* Main image in popup */
+ img {
+ &.mfp-img {
+ width: auto;
+ max-width: 100%;
+ height: auto;
+ display: block;
+ line-height: 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: $mfp-image-padding-top 0 $mfp-image-padding-bottom;
+ margin: 0 auto;
+ }
+ }
+
+ /* The shadow behind the image */
+ .mfp-figure {
+ line-height: 0;
+ &:after {
+ content: '';
+ position: absolute;
+ left: 0;
+ top: $mfp-image-padding-top;
+ bottom: $mfp-image-padding-bottom;
+ display: block;
+ right: 0;
+ width: auto;
+ height: auto;
+ z-index: -1;
+ box-shadow: $mfp-shadow;
+ background: $mfp-image-background;
+ }
+ small {
+ color: $mfp-caption-subtitle-color;
+ display: block;
+ font-size: 12px;
+ line-height: 14px;
+ }
+ figure {
+ margin: 0;
+ }
+ figcaption {
+ margin-top: 0;
+ margin-bottom: 0; // reset for bottom spacing
+ }
+ }
+ .mfp-bottom-bar {
+ margin-top: -$mfp-image-padding-bottom + 4;
+ position: absolute;
+ top: 100%;
+ left: 0;
+ width: 100%;
+ cursor: auto;
+ }
+ .mfp-title {
+ text-align: left;
+ line-height: 18px;
+ color: $mfp-caption-title-color;
+ word-wrap: break-word;
+ padding-right: 36px; // leave some space for counter at right side
+ }
+
+ .mfp-image-holder {
+ .mfp-content {
+ max-width: 100%;
+ }
+ }
+
+ .mfp-gallery {
+ .mfp-image-holder {
+ .mfp-figure {
+ cursor: pointer;
+ }
+ }
+ }
+
+
+ @if $mfp-include-mobile-layout-for-image {
+ @media screen and (max-width: 800px) and (orientation:landscape), screen and (max-height: 300px) {
+ /**
+ * Remove all paddings around the image on small screen
+ */
+ .mfp-img-mobile {
+ .mfp-image-holder {
+ padding-left: 0;
+ padding-right: 0;
+ }
+ img {
+ &.mfp-img {
+ padding: 0;
+ }
+ }
+ .mfp-figure {
+ // The shadow behind the image
+ &:after {
+ top: 0;
+ bottom: 0;
+ }
+ small {
+ display: inline;
+ margin-left: 5px;
+ }
+ }
+ .mfp-bottom-bar {
+ background: rgba(0,0,0,0.6);
+ bottom: 0;
+ margin: 0;
+ top: auto;
+ padding: 3px 5px;
+ position: fixed;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ &:empty {
+ padding: 0;
+ }
+ }
+ .mfp-counter {
+ right: 5px;
+ top: 3px;
+ }
+ .mfp-close {
+ top: 0;
+ right: 0;
+ width: 35px;
+ height: 35px;
+ line-height: 35px;
+ background: rgba(0, 0, 0, 0.6);
+ position: fixed;
+ text-align: center;
+ padding: 0;
+ }
+ }
+ }
+ }
+}
+
+
+
+// Scale navigation arrows and reduce padding from sides
+@media all and (max-width: 900px) {
+ .mfp-arrow {
+ -webkit-transform: scale(0.75);
+ transform: scale(0.75);
+ }
+ .mfp-arrow-left {
+ -webkit-transform-origin: 0;
+ transform-origin: 0;
+ }
+ .mfp-arrow-right {
+ -webkit-transform-origin: 100%;
+ transform-origin: 100%;
+ }
+ .mfp-container {
+ padding-left: $mfp-popup-padding-left-mobile;
+ padding-right: $mfp-popup-padding-left-mobile;
+ }
+}
+
+
+
+// IE7 support
+// Styles that make popup look nicier in old IE
+@if $mfp-IE7support {
+ .mfp-ie7 {
+ .mfp-img {
+ padding: 0;
+ }
+ .mfp-bottom-bar {
+ width: 600px;
+ left: 50%;
+ margin-left: -300px;
+ margin-top: 5px;
+ padding-bottom: 5px;
+ }
+ .mfp-container {
+ padding: 0;
+ }
+ .mfp-content {
+ padding-top: 44px;
+ }
+ .mfp-close {
+ top: 0;
+ right: 0;
+ padding-top: 0;
+ }
+ }
+}
diff --git a/_sass/vendor/magnific-popup/_settings.scss b/_sass/vendor/magnific-popup/_settings.scss
new file mode 100644
index 00000000..caaca026
--- /dev/null
+++ b/_sass/vendor/magnific-popup/_settings.scss
@@ -0,0 +1,46 @@
+////////////////////////
+// Settings //
+////////////////////////
+
+// overlay
+$mfp-overlay-color: #000; // Color of overlay screen
+$mfp-overlay-opacity: 0.8; // Opacity of overlay screen
+$mfp-shadow: 0 0 8px rgba(0, 0, 0, 0.6); // Shadow on image or iframe
+
+// spacing
+$mfp-popup-padding-left: 8px; // Padding from left and from right side
+$mfp-popup-padding-left-mobile: 6px; // Same as above, but is applied when width of window is less than 800px
+
+$mfp-z-index-base: 1040; // Base z-index of popup
+
+// controls
+$mfp-include-arrows: true; // Include styles for nav arrows
+$mfp-controls-opacity: 1; // Opacity of controls
+$mfp-controls-color: #fff; // Color of controls
+$mfp-controls-border-color: #fff; // Border color of controls
+$mfp-inner-close-icon-color: #fff; // Color of close button when inside
+$mfp-controls-text-color: #ccc; // Color of preloader and "1 of X" indicator
+$mfp-controls-text-color-hover: #fff; // Hover color of preloader and "1 of X" indicator
+$mfp-IE7support: true; // Very basic IE7 support
+
+// Iframe-type options
+$mfp-include-iframe-type: true; // Enable Iframe-type popups
+$mfp-iframe-padding-top: 40px; // Iframe padding top
+$mfp-iframe-background: #000; // Background color of iframes
+$mfp-iframe-max-width: 900px; // Maximum width of iframes
+$mfp-iframe-ratio: 9/16; // Ratio of iframe (9/16 = widescreen, 3/4 = standard, etc.)
+
+// Image-type options
+$mfp-include-image-type: true; // Enable Image-type popups
+$mfp-image-background: #444 !default;
+$mfp-image-padding-top: 40px; // Image padding top
+$mfp-image-padding-bottom: 40px; // Image padding bottom
+$mfp-include-mobile-layout-for-image: true; // Removes paddings from top and bottom
+
+// Image caption options
+$mfp-caption-title-color: #f3f3f3; // Caption title color
+$mfp-caption-subtitle-color: #bdbdbd; // Caption subtitle color
+.mfp-counter { font-family: $serif; } // Caption font family
+
+// A11y
+$mfp-use-visuallyhidden: false;
diff --git a/_sass/vendor/susy/_su.scss b/_sass/vendor/susy/_su.scss
new file mode 100644
index 00000000..83386adb
--- /dev/null
+++ b/_sass/vendor/susy/_su.scss
@@ -0,0 +1,4 @@
+// Su
+// ==
+
+@import 'susy/su';
diff --git a/_sass/vendor/susy/_susy.scss b/_sass/vendor/susy/_susy.scss
new file mode 100644
index 00000000..224e98ad
--- /dev/null
+++ b/_sass/vendor/susy/_susy.scss
@@ -0,0 +1,4 @@
+// Susy
+// ====
+
+@import 'susy/language/susy';
diff --git a/_sass/vendor/susy/_susyone.scss b/_sass/vendor/susy/_susyone.scss
new file mode 100644
index 00000000..5b934c68
--- /dev/null
+++ b/_sass/vendor/susy/_susyone.scss
@@ -0,0 +1,4 @@
+// Susy
+// ====
+
+@import 'susy/language/susyone';
diff --git a/_sass/vendor/susy/susy/_su.scss b/_sass/vendor/susy/susy/_su.scss
new file mode 100644
index 00000000..a1454157
--- /dev/null
+++ b/_sass/vendor/susy/susy/_su.scss
@@ -0,0 +1,7 @@
+// Su
+// ==
+
+@import "su/utilities";
+@import "su/settings";
+@import "su/validation";
+@import "su/grid";
diff --git a/_sass/vendor/susy/susy/language/_susy.scss b/_sass/vendor/susy/susy/language/_susy.scss
new file mode 100644
index 00000000..0ee9cae2
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/_susy.scss
@@ -0,0 +1,24 @@
+// Susy Next Syntax
+// ================
+
+$susy-version: 2.1;
+
+@import "../su";
+@import "../output/float";
+
+@import "susy/settings";
+@import "susy/validation";
+@import "susy/grids";
+@import "susy/box-sizing";
+@import "susy/context";
+@import "susy/background";
+@import "susy/container";
+@import "susy/span";
+@import "susy/gutters";
+@import "susy/isolate";
+@import "susy/gallery";
+@import "susy/rows";
+@import "susy/margins";
+@import "susy/padding";
+@import "susy/bleed";
+@import "susy/breakpoint-plugin";
diff --git a/_sass/vendor/susy/susy/language/_susyone.scss b/_sass/vendor/susy/susy/language/_susyone.scss
new file mode 100644
index 00000000..a783d3a8
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/_susyone.scss
@@ -0,0 +1,13 @@
+// ---------------------------------------------------------------------------
+// Partials
+
+$susy-version: 1.5;
+
+@import "susyone/settings";
+@import "susyone/functions";
+@import "susyone/grid";
+@import "susyone/isolation";
+@import "susyone/padding";
+@import "susyone/margin";
+@import "susyone/media";
+@import "susyone/background";
diff --git a/_sass/vendor/susy/susy/language/susy/_background.scss b/_sass/vendor/susy/susy/language/susy/_background.scss
new file mode 100644
index 00000000..d39dc721
--- /dev/null
+++ b/_sass/vendor/susy/susy/language/susy/_background.scss
@@ -0,0 +1,385 @@
+// Background Grid Syntax
+// ======================
+
+$susy-overlay-grid-head-exists: false;
+
+
+// Show Grid/s
+// -----------
+// Show grid on any element using either background or overlay.
+// - [$grid] :
+@mixin show-grid(
+ $grid: $susy
+) {
+ $inspect: $grid;
+ $_output: debug-get(output, $grid);
+
+ @include susy-inspect(show-grid, $inspect);
+ @if $_output == overlay and susy-get(debug image, $grid) != hide {
+ @include overlay-grid($grid);
+ } @else {
+ @include background-grid($grid);
+ }
+}
+
+@mixin show-grids(
+ $grid: $susy
+) {
+ @include show-grid($grid);
+}
+
+// Background Grid
+// ---------------
+// Show a grid background on any element.
+// - [$grid] :
+@mixin background-grid(
+ $grid: $susy
+) {
+ $inspect : $grid;
+ $_output : get-background($grid);
+
+ @if length($_output) > 0 {
+ $_flow: susy-get(flow, $grid);
+
+ $_image: ();
+ @each $name, $layer in map-get($_output, image) {
+ $_direction: if($name == baseline, to bottom, to to($_flow));
+ $_image: append($_image, linear-gradient($_direction, $layer), comma);
+ }
+ $_output: map-merge($_output, (image: $_image));
+
+ @include background-grid-output($_output...);
+ @include susy-inspect(background-grid, $inspect);
+ }
+}
+
+
+// Overlay Grid
+// ------------
+// Generate an icon to trigger grid-overlays on any given elements.
+// $grids... : [] [, ]*
+@mixin overlay-grid (
+ $grid: $susy
+) {
+ @if not($susy-overlay-grid-head-exists) {
+ @at-root head { @include overlay-head($grid); }
+ @at-root head:before { @include overlay-trigger; }
+ @at-root head:hover { @include overlay-trigger-hover; }
+ $susy-overlay-grid-head-exists: true !global;
+ }
+
+ head:hover ~ &,
+ head:hover ~ body & {
+ position: relative;
+ &:before {
+ @include grid-overlay-base;
+ @include background-grid($grid);
+ }
+ }
+}
+
+
+// [Private] Overlay Trigger
+// -------------------------
+@mixin overlay-trigger {
+ content: "|||";
+ display: block;
+ padding: 5px 10px;
+ font: {
+ family: sans-serif;
+ size: 16px;
+ weight: bold;
+ }
+}
+
+
+// [Private] Overlay Trigger Hover
+// -------------------------------
+@mixin overlay-trigger-hover {
+ background: rgba(white, .5);
+ color: red;
+}
+
+
+// [Private] Overlay Head
+// ----------------------
+// styles to create grid overlay toggle
+@mixin overlay-head (
+ $grid: $susy
+) {
+ $_toggle: debug-get(toggle, $grid);
+ $_horz: null;
+ $_vert: null;
+
+ @each $side in $_toggle {
+ $_horz: if($side == left or $side == right, $side, $_horz);
+ $_vert: if($side == top or $side == bottom, $side, $_vert);
+ }
+
+ display: block;
+ position: fixed;
+ #{$_horz}: 10px;
+ #{$_vert}: 10px;
+ z-index: 999;
+ color: #333;
+ background: rgba(white, .25);
+}
+
+
+// [Private] Grid Overlay Base
+// ---------------------------
+// Base styles for generating a grid overlay
+@mixin grid-overlay-base() {
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ content: " ";
+ z-index: 998;
+}
+
+
+// Get Symmetrical Background
+// --------------------------
+// - $grid:
-var tree1 = new DialogTree({ - templatePath : 'productTemplate.html', - ajaxPath : 'data.html', - selectType : '0', - onselected : function(treeObj) {} -}); - -$('#showTree1').click(function(){ - tree1.registeTree({ - title : '选择[产品1]', - id : '#demo1 #productId', - name : '#demo1 #productName' - }); -}); --
-var tree2 = new DialogTree({ - templatePath : 'productTemplate.html', - ajaxPath : 'data.html', - selectType : '0', - weebox : {width: 700}, - simpletree : {autoclose: true}, - onselected : function(treeObj) {} -}); - -$('#showTree2').click(function(){ - tree2.registeTree({ - title : '选择[产品2]', - id : '#demo2 #productId', - name : '#demo2 #productName' - }); -}); --
templatePath:模版路径
-ajaxPath:数据源路径
-selectType:哪个节点类型才是返回值
-weebox:自定义weebox插件属性
-simpletree:自定义simpletree插件属性
-title:打开对话框的名称
-id:显示树中节点的ID属性
-name:显示树中节点的NAME属性
--var tree1 = new DialogTree({ - templatePath : 'productTemplate.html', - ajaxPath : 'data.html', - selectType : '0', - onselected : function(treeObj) {} -}); - -$('#showTree1').click(function(){ - tree1.registeTree({ - title : '选择[产品1]', - id : '#demo1 #productId', - name : '#demo1 #productName' - }); -}); --
-var tree2 = new DialogTree({ - templatePath : 'productTemplate.html', - ajaxPath : 'data.html', - selectType : '0', - weebox : {width: 700}, - simpletree : {autoclose: true}, - onselected : function(treeObj) {} -}); - -$('#showTree2').click(function(){ - tree2.registeTree({ - title : '选择[产品2]', - id : '#demo2 #productId', - name : '#demo2 #productName' - }); -}); --
templatePath:模版路径
-ajaxPath:数据源路径
-selectType:哪个节点类型才是返回值
-weebox:自定义weebox插件属性
-simpletree:自定义simpletree插件属性
-title:打开对话框的名称
-id:显示树中节点的ID属性
-name:显示树中节点的NAME属性
-- | th one | -th tow | -th three | -th four |
- | 内容test | -内容test | -内容test | -内容test | -
- | 内容test | -内容test | -内容test | -内容test | -
- | 内容test | -内容test | -内容test | -内容test | -
- | 内容test | -内容test | -内容test | -内容test | -
t |
\
- \
- \
- \
- " + opts.windowTitle + "\
- | \
- ||||
\ - | \ - | \ - | ||
\ - " + opts.resetText + "\ - " + opts.searchText + "\ - " + opts.matchText + " \ - " + gOps_html + " \ - " + opts.rulesText + "\ - | \ -\ - |
" + opts.windowTitle + " | ||||
" + opts.resetText + "" + opts.searchText + "" + opts.matchText + " " + gOps_html + " " + opts.rulesText + " |
{{ site.data.ui-text[site.locale].comments_title | default: "Comments" }}
+ {% assign comments = site.data.comments[page.slug] | sort %} + + {% for comment in comments %} + {% assign email = comment[1].email %} + {% assign name = comment[1].name %} + {% assign url = comment[1].url %} + {% assign date = comment[1].date %} + {% assign message = comment[1].message %} + {% include comment.html index=forloop.index email=email name=name url=url date=date message=message %} + {% endfor %} + {% endif %} +{{ site.data.ui-text[site.locale].comments_label | default: "Leave a Comment" }}
+{{ site.data.ui-text[site.locale].comment_form_info | default: "Your email address will not be published. Required fields are marked" }} *
+ + + {% endif %} +