Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Comparing changes

Choose two branches to see what's changed or to start a new pull request. If you need to, you can also compare across forks.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also compare across forks.
base fork: chrisperelstein/chrisperelstein.github.com
base: d1a70180e2
...
head fork: chrisperelstein/chrisperelstein.github.com
compare: 9e83150850
  • 18 commits
  • 149 files changed
  • 0 commit comments
  • 6 contributors
Commits on Dec 29, 2012
@supermarin supermarin added ssh keys support (e.g. for Amazon ec2) 7c9c4ba
Commits on Jan 09, 2013
@zellux zellux Hide Google Plus link if google_plus_hidden is true c4ed411
Commits on Jan 12, 2013
@imathis imathis Improved error message for category_generator plugin. Addresses #116 1d5b9f8
@seankerr seankerr Fixed blockquote plugin (author alone would not show up without title)
Conflicts:
	plugins/blockquote.rb
cfcbd72
@imathis imathis Merge pull request #932 from zellux/2.1
Hide Google Plus link if google_plus_hidden is true
ab2776b
Commits on Jan 13, 2013
@imathis imathis Video tag plugin now supports mp4,ogv,webm formats, closes #931 ef91190
@vaz vaz setup_github_pages: allow for clones missing .git extension
Conflicts:
	Rakefile
ec07a5d
@imathis imathis Improved draft management options
- rake list_drafts shows current drafts. Closes #645
- Rake generate, watch, and preview can compile future dated posts (defaults to false). Closes #837
38353f2
@imathis imathis Improvements to the regexes in setup_github_pages task 5ba5b47
Commits on Jan 14, 2013
@chrisperelstein Modified rake tasks to use iso8601 format dates and added configurati…
…on option to force a specfic timezone to be used
4c0cf14
@imathis imathis Improved timezone support
- Rake task list_drafts fixes
- Added link to timezone documentation
5251313
@imathis imathis Made it easy to optionally use RubyPython for pygments, closes #923 9994770
@imathis imathis Merge pull request #903 from mneorr/ssh_key
added ssh keys support (e.g. for Amazon ec2)
9659a45
Commits on Jan 17, 2013
@chrisperelstein initial set up of 2.1 version of blog b3a213d
@chrisperelstein test post and nice boring colors d7b7182
@chrisperelstein pulling in various files from posts branch 4346cd5
@chrisperelstein reconfig for nfs hosting 66ae93b
@chrisperelstein adding to test post to test autobuild 9e83150
Showing with 3,169 additions and 51 deletions.
  1. +3 −2 .themes/classic/source/_includes/sidebars/sections/google_plus.html
  2. +1 −0  Gemfile
  3. +2 −0  Gemfile.lock
  4. +86 −28 Rakefile
  5. +5 −5 _config.yml
  6. +6 −7 plugins/blockquote.rb
  7. +11 −1 plugins/category_generator.rb
  8. +4 −0 plugins/pygments_code.rb
  9. +17 −8 plugins/video_tag.rb
  10. +5 −0 sass/_base.scss
  11. +8 −0 sass/_partials.scss
  12. +192 −0 sass/base/_layout.scss
  13. +75 −0 sass/base/_solarized.scss
  14. +93 −0 sass/base/_theme.scss
  15. +168 −0 sass/base/_typography.scss
  16. +27 −0 sass/base/_utilities.scss
  17. +62 −0 sass/custom/_colors.scss
  18. +10 −0 sass/custom/_fonts.scss
  19. +20 −0 sass/custom/_layout.scss
  20. +11 −0 sass/custom/_styles.scss
  21. +77 −0 sass/partials/_archive.scss
  22. +166 −0 sass/partials/_blog.scss
  23. +19 −0 sass/partials/_footer.scss
  24. +18 −0 sass/partials/_header.scss
  25. +137 −0 sass/partials/_navigation.scss
  26. +73 −0 sass/partials/_sharing.scss
  27. +5 −0 sass/partials/_sidebar.scss
  28. +235 −0 sass/partials/_syntax.scss
  29. +106 −0 sass/partials/sidebar/_base.scss
  30. +4 −0 sass/partials/sidebar/_delicious.scss
  31. +26 −0 sass/partials/sidebar/_googleplus.scss
  32. +12 −0 sass/partials/sidebar/_pinboard.scss
  33. +42 −0 sass/partials/sidebar/_twitter.scss
  34. +10 −0 sass/screen.scss
  35. +9 −0 source/404.markdown
  36. +1 −0  source/CNAME
  37. +1 −0  source/README.markdown
  38. +7 −0 source/_includes/after_footer.html
  39. +12 −0 source/_includes/archive_post.html
  40. +23 −0 source/_includes/article.html
  41. +7 −0 source/_includes/comments.html
  42. +3 −0  source/_includes/custom/after_footer.html
  43. +1 −0  source/_includes/custom/after_page.html
  44. 0  source/_includes/custom/after_post.html
  45. +3 −0  source/_includes/custom/comments.html
  46. +4 −0 source/_includes/custom/footer.html
  47. +7 −0 source/_includes/custom/head.html
  48. +6 −0 source/_includes/custom/header.html
  49. +4 −0 source/_includes/custom/navigation.html
  50. +1 −0  source/_includes/custom/page_meta.html
  51. +1 −0  source/_includes/custom/post_meta.html
  52. +3 −0  source/_includes/custom/sharing.html
  53. +22 −0 source/_includes/disqus.html
  54. +10 −0 source/_includes/facebook_like.html
  55. +10 −0 source/_includes/feed_entry.xml
  56. +1 −0  source/_includes/footer.html
  57. +15 −0 source/_includes/gauges_analytics.html
  58. +13 −0 source/_includes/google_analytics.html
  59. +9 −0 source/_includes/google_plus_one.html
  60. +30 −0 source/_includes/head.html
  61. +1 −0  source/_includes/header.html
  62. +15 −0 source/_includes/navigation.html
  63. +8 −0 source/_includes/post/author.html
  64. +10 −0 source/_includes/post/categories.html
  65. +15 −0 source/_includes/post/date.html
  66. +1 −0  source/_includes/post/disqus_thread.html
  67. +3 −0  source/_includes/post/meta.html
  68. +36 −0 source/_includes/post/sharing.html
  69. +5 −0 source/_includes/post/title.html
  70. +14 −0 source/_includes/post/variables.html
  71. +4 −0 source/_includes/sidebars/blog_index_default.html
  72. +5 −0 source/_includes/sidebars/page_default.html
  73. +5 −0 source/_includes/sidebars/post_default.html
  74. +8 −0 source/_includes/sidebars/sections/delicious.html
  75. +11 −0 source/_includes/sidebars/sections/github.html
  76. +4 −0 source/_includes/sidebars/sections/google_plus.html
  77. +17 −0 source/_includes/sidebars/sections/pinboard.html
  78. +10 −0 source/_includes/sidebars/sections/recent_posts.html
  79. +13 −0 source/_includes/sidebars/sections/twitter.html
  80. +11 −0 source/_includes/twitter_sharing.html
  81. +25 −0 source/_layouts/category_feed.xml
  82. +19 −0 source/_layouts/category_index.html
  83. +14 −0 source/_layouts/default.html
  84. +34 −0 source/_layouts/page.html
  85. +39 −0 source/_layouts/post.html
  86. +14 −0 source/_posts/2013-01-07-test.markdown
  87. +20 −0 source/archives/index.html
  88. BIN  source/assets/jwplayer/glow/controlbar/background.png
  89. BIN  source/assets/jwplayer/glow/controlbar/blankButton.png
  90. BIN  source/assets/jwplayer/glow/controlbar/divider.png
  91. BIN  source/assets/jwplayer/glow/controlbar/fullscreenButton.png
  92. BIN  source/assets/jwplayer/glow/controlbar/fullscreenButtonOver.png
  93. BIN  source/assets/jwplayer/glow/controlbar/muteButton.png
  94. BIN  source/assets/jwplayer/glow/controlbar/muteButtonOver.png
  95. BIN  source/assets/jwplayer/glow/controlbar/normalscreenButton.png
  96. BIN  source/assets/jwplayer/glow/controlbar/normalscreenButtonOver.png
  97. BIN  source/assets/jwplayer/glow/controlbar/pauseButton.png
  98. BIN  source/assets/jwplayer/glow/controlbar/pauseButtonOver.png
  99. BIN  source/assets/jwplayer/glow/controlbar/playButton.png
  100. BIN  source/assets/jwplayer/glow/controlbar/playButtonOver.png
  101. BIN  source/assets/jwplayer/glow/controlbar/timeSliderBuffer.png
  102. BIN  source/assets/jwplayer/glow/controlbar/timeSliderCapLeft.png
  103. BIN  source/assets/jwplayer/glow/controlbar/timeSliderCapRight.png
  104. BIN  source/assets/jwplayer/glow/controlbar/timeSliderProgress.png
  105. BIN  source/assets/jwplayer/glow/controlbar/timeSliderRail.png
  106. BIN  source/assets/jwplayer/glow/controlbar/unmuteButton.png
  107. BIN  source/assets/jwplayer/glow/controlbar/unmuteButtonOver.png
  108. BIN  source/assets/jwplayer/glow/display/background.png
  109. BIN  source/assets/jwplayer/glow/display/bufferIcon.png
  110. BIN  source/assets/jwplayer/glow/display/muteIcon.png
  111. BIN  source/assets/jwplayer/glow/display/playIcon.png
  112. BIN  source/assets/jwplayer/glow/dock/button.png
  113. +115 −0 source/assets/jwplayer/glow/glow.xml
  114. BIN  source/assets/jwplayer/glow/playlist/item.png
  115. BIN  source/assets/jwplayer/glow/playlist/itemOver.png
  116. BIN  source/assets/jwplayer/glow/playlist/sliderCapBottom.png
  117. BIN  source/assets/jwplayer/glow/playlist/sliderCapTop.png
  118. BIN  source/assets/jwplayer/glow/playlist/sliderRail.png
  119. BIN  source/assets/jwplayer/glow/playlist/sliderThumb.png
  120. BIN  source/assets/jwplayer/glow/sharing/embedIcon.png
  121. BIN  source/assets/jwplayer/glow/sharing/embedScreen.png
  122. BIN  source/assets/jwplayer/glow/sharing/shareIcon.png
  123. BIN  source/assets/jwplayer/glow/sharing/shareScreen.png
  124. BIN  source/assets/jwplayer/player.swf
  125. +23 −0 source/atom.xml
  126. +1 −0  source/googlee0a59b20c8f2eb27.html
  127. BIN  source/images/bird_32_gray.png
  128. BIN  source/images/bird_32_gray_fail.png
  129. BIN  source/images/code_bg.png
  130. BIN  source/images/dotted-border.png
  131. BIN  source/images/email.png
  132. BIN  source/images/icon/facebook.png
  133. BIN  source/images/icon/github.png
  134. BIN  source/images/icon/googleplus.png
  135. BIN  source/images/icon/twitter-bird.png
  136. BIN  source/images/icon/twitter.png
  137. BIN  source/images/line-tile.png
  138. BIN  source/images/noise.png
  139. BIN  source/images/rss.png
  140. BIN  source/images/search.png
  141. +30 −0 source/index.html
  142. +4 −0 source/javascripts/group/jquery.min.js
  143. +4 −0 source/javascripts/group/modernizr-2.0.min.js
  144. +311 −0 source/javascripts/group/octopress.js
  145. +62 −0 source/javascripts/group/pinboard.js
  146. +12 −0 source/javascripts/group/swfobject-dynamic.min.js
  147. +300 −0 source/javascripts/lib/swfobject-dynamic.js
  148. BIN  source/octopress-favicon.png
  149. +7 −0 source/robots.txt
View
5 .themes/classic/source/_includes/sidebars/sections/google_plus.html
@@ -1,4 +1,5 @@
{% if site.google_plus_user %}
-<a href="https://plus.google.com/{{ site.google_plus_user }}?rel=author"><img src="https://ssl.gstatic.com/images/icons/gplus-{{ site.google_plus_image_size}}.png" alt="Google Plus icon"></a>
+ <a href="https://plus.google.com/{{ site.google_plus_user }}?rel=author"{% if site.google_plus_hidden %} class="googleplus-hidden"{% endif %}>
+ <img src="https://ssl.gstatic.com/images/icons/gplus-{{ site.google_plus_image_size}}.png" alt="Google Plus icon">
+ </a>
{% endif %}
-
View
1  Gemfile
@@ -13,6 +13,7 @@ group :development do
gem 'rb-fsevent', '~> 0.9.3'
gem 'stringex', '~> 1.4.0'
gem 'liquid', '~> 2.3.0'
+ gem 'tzinfo', '~> 0.3.35'
gem 'rake-minify'
end
View
2  Gemfile.lock
@@ -47,6 +47,7 @@ GEM
stringex (1.4.0)
syntax (1.0.0)
tilt (1.3.3)
+ tzinfo (0.3.35)
yajl-ruby (1.1.0)
PLATFORMS
@@ -67,3 +68,4 @@ DEPENDENCIES
rubypants (~> 0.2.0)
sinatra (~> 1.3.3)
stringex (~> 1.4.0)
+ tzinfo (~> 0.3.35)
View
114 Rakefile
@@ -1,33 +1,38 @@
-require "rubygems"
-require "bundler/setup"
-require "stringex"
+require 'rubygems'
+require 'bundler/setup'
+require 'stringex'
+require 'time'
+require 'tzinfo'
require 'rake/minify'
+require 'time'
## -- Rsync Deploy config -- ##
# Be sure your public key is listed in your server's ~/.ssh/authorized_keys file
-ssh_user = "user@domain.com"
+ssh_user = "chrisperelstein_chrisperelstein@ssh.phx.nearlyfreespeech.net"
ssh_port = "22"
-document_root = "~/website.com/"
+ssh_key = ""
+document_root = "/home/public"
rsync_delete = false
rsync_args = "" # Any extra arguments to pass to rsync
-deploy_default = "rsync"
+deploy_default = "push"
# This will be configured for you when you run config_deploy
-deploy_branch = "gh-pages"
+deploy_branch = "master"
## -- Misc Configs -- ##
public_dir = "public" # compiled site directory
source_dir = "source" # source file directory
-blog_index_dir = 'source' # directory for your blog's index page (if you put your index in source/blog/index.html, set this to 'source/blog')
+blog_index_dir = "source" # directory for your blog's index page (if you put your index in source/blog/index.html, set this to 'source/blog')
deploy_dir = "_deploy" # deploy directory (for GitHub pages deployment)
stash_dir = "_stash" # directory to stash posts for speedy generation
posts_dir = "_posts" # directory for blog files
themes_dir = ".themes" # directory for blog files
new_post_ext = "markdown" # default new post file extension when using the new_post task
new_page_ext = "markdown" # default new page file extension when using the new_page task
+timezone = "local" # default time and date used to local timezone. Timezones (under TZ column): http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
server_host = ENV['OCTOPRESS_IP'] || '0.0.0.0' # host ip address for preview server
-server_port = ENV['OCTOPRESS_PORT'] || "4000" # port for preview server eg. localhost:4000
+server_port = ENV['OCTOPRESS_PORT'] || '4000' # port for preview server eg. localhost:4000
desc "Initial setup for Octopress: copies the default theme into the path of Jekyll's generator. Rake install defaults to rake install[classic] to install a different theme run rake install[some_theme_name]"
task :install, :theme do |t, args|
@@ -50,12 +55,15 @@ end
#######################
desc "Generate jekyll site"
-task :generate do
+task :generate, :no_future do |t, args|
+ future = args.no_future
raise "### You haven't set anything up yet. First run `rake install` to set up an Octopress theme." unless File.directory?(source_dir)
puts "## Generating Site with Jekyll"
system "compass compile --css-dir #{source_dir}/stylesheets"
Rake::Task['minify_and_combine'].execute
- system "jekyll --no-server --no-auto"
+ system "jekyll --no-server --no-auto #{'--no-future' if future.nil?}"
+ unpublished = get_unpublished(Dir.glob("#{source_dir}/#{posts_dir}/*.*"), {no_future: future.nil?, message: "\nThese posts were not generated:"})
+ puts unpublished unless unpublished.empty?
end
Rake::Minify.new(:minify_and_combine) do
@@ -93,12 +101,13 @@ task :generate_only, :filename do |t, args|
end
desc "Watch the site and regenerate when it changes"
-task :watch do
+task :watch, :show_future do |t, args|
+ future = args.show_future
raise "### You haven't set anything up yet. First run `rake install` to set up an Octopress theme." unless File.directory?(source_dir)
puts "Starting to watch source with Jekyll and Compass."
system "compass compile --css-dir #{source_dir}/stylesheets"
Rake::Task['minify_and_combine'].execute
- jekyllPid = Process.spawn("jekyll --auto")
+ jekyllPid = Process.spawn("jekyll --auto #{'--no-future' if future.nil?}")
compassPid = Process.spawn("compass watch")
trap("INT") {
[jekyllPid, compassPid].each { |pid| Process.kill(9, pid) rescue Errno::ESRCH }
@@ -107,12 +116,13 @@ task :watch do
[jekyllPid, compassPid].each { |pid| Process.wait(pid) }
end
-desc "preview the site in a web browser"
-task :preview do
+desc "preview the site in a web browser."
+task :preview, :show_future do |t, args|
+ future = args.show_future
raise "### You haven't set anything up yet. First run `rake install` to set up an Octopress theme." unless File.directory?(source_dir)
puts "Starting to watch source with Jekyll and Compass. Starting Rack, serving to http://#{server_host}:#{server_port}"
system "compass compile --css-dir #{source_dir}/stylesheets"
- jekyllPid = Process.spawn("jekyll --auto")
+ jekyllPid = Process.spawn("jekyll --auto #{'--no-future' if future.nil?}")
compassPid = Process.spawn("compass watch")
rackupPid = Process.spawn("rackup --host #{server_host} --port #{server_port}")
@@ -133,8 +143,9 @@ task :new_post, :title do |t, args|
title = get_stdin("Enter a title for your post: ")
end
raise "### You haven't set anything up yet. First run `rake install` to set up an Octopress theme." unless File.directory?(source_dir)
+ time = now_in_timezone(timezone)
mkdir_p "#{source_dir}/#{posts_dir}"
- filename = "#{source_dir}/#{posts_dir}/#{Time.now.strftime('%Y-%m-%d')}-#{title.to_url}.#{new_post_ext}"
+ filename = "#{source_dir}/#{posts_dir}/#{time.strftime('%Y-%m-%d')}-#{title.to_url}.#{new_post_ext}"
if File.exist?(filename)
abort("rake aborted!") if ask("#{filename} already exists. Do you want to overwrite?", ['y', 'n']) == 'n'
end
@@ -143,7 +154,7 @@ task :new_post, :title do |t, args|
post.puts "---"
post.puts "layout: post"
post.puts "title: \"#{title.gsub(/&/,'&amp;')}\""
- post.puts "date: #{Time.now.strftime('%Y-%m-%d %H:%M')}"
+ post.puts "date: #{time.iso8601}"
post.puts "comments: true"
post.puts "external-url: "
post.puts "categories: "
@@ -175,11 +186,12 @@ task :new_page, :filename do |t, args|
abort("rake aborted!") if ask("#{file} already exists. Do you want to overwrite?", ['y', 'n']) == 'n'
end
puts "Creating new page: #{file}"
+ time = now_in_timezone(timezone)
open(file, 'w') do |page|
page.puts "---"
page.puts "layout: page"
page.puts "title: \"#{title}\""
- page.puts "date: #{Time.now.strftime('%Y-%m-%d %H:%M')}"
+ page.puts "date: #{time.iso8601}"
page.puts "comments: true"
page.puts "sharing: true"
page.puts "footer: true"
@@ -268,7 +280,6 @@ task :update_source, :theme do |t, args|
puts "## Updated #{source_dir} ##"
end
-
##############
# Deploying #
##############
@@ -289,7 +300,7 @@ task :rsync do
exclude = "--exclude-from '#{File.expand_path('./rsync-exclude')}'"
end
puts "## Deploying website via Rsync"
- ok_failed system("rsync -avze 'ssh -p #{ssh_port}' #{exclude} #{rsync_args} #{"--delete" unless rsync_delete == false} #{public_dir}/ #{ssh_user}:#{document_root}")
+ ok_failed system("rsync -avze 'ssh -p #{ssh_port} #{'-i' + ssh_key unless ssh_key.empty?}' #{exclude} #{rsync_args} #{"--delete" unless rsync_delete == false} #{public_dir}/ #{ssh_user}:#{document_root}")
end
desc "deploy public directory to github pages"
@@ -327,7 +338,7 @@ multitask :push do
end
end
else
- puts "This project isn't configured for deploying to GitHub Pages\nPlease run `rake setup_github_pages[your-deployment-repo-url]`."
+ puts "This project isn't configured for deploying to GitHub Pages\nPlease run `rake setup_github_pages[your-deployment-repo-url]`."
end
end
@@ -383,14 +394,14 @@ task :setup_github_pages, :repo do |t, args|
unless repo_url[-4..-1] == ".git"
repo_url << ".git"
end
- raise "!! The repo URL that was input was malformed." unless repo_url.match(/https:\/\/github.com\/[^\/]+\/[^\/]+/) or repo_url.match(/git@github.com:[^\/]+\/[^\/]+/)
- user_match = repo_url.match(/(:([^\/]+)|(github.com\/([^\/]+)))/)
+ raise "!! The repo URL that was input was malformed." unless (repo_url =~ /https:\/\/github\.com\/[^\/]+\/[^\/]+/).nil? or (repo_url =~ /git@github\.com:[^\/]+\/[^\/]+/).nil?
+ user_match = repo_url.match(/(:([^\/]+)|(github\.com\/([^\/]+)))/)
user = user_match[2] || user_match[4]
- branch = (repo_url.match(/\/[\w-]+.github.com/).nil?) ? 'gh-pages' : 'master'
+ branch = (repo_url =~ /\/[\w-]+\.github\.com/).nil? ? 'gh-pages' : 'master'
project = (branch == 'gh-pages') ? repo_url.match(/\/(.+)(\.git)/)[1] : ''
url = "http://#{user}.github.com"
url += "/#{project}" unless project == ''
- unless `git remote -v`.match(/origin.+?octopress.git/).nil?
+ unless (`git remote -v` =~ /origin.+?octopress(?:\.git)?/).nil?
# If octopress is still the origin remote (from cloning) rename it to octopress
system "git remote rename origin octopress"
if branch == 'master'
@@ -433,12 +444,12 @@ task :setup_github_pages, :repo do |t, args|
f.write rakefile
end
- # Configure published url
+ # Configure published url
jekyll_config = IO.read('_config.yml')
current_url = /^url:\s?(.*$)/.match(jekyll_config)[1]
has_cname = File.exists?("#{source_dir}/CNAME")
if current_url == 'http://yoursite.com'
- jekyll_config.sub!(/^url:.*$/, "url: #{url}")
+ jekyll_config.sub!(/^url:.*$/, "url: #{url}")
File.open('_config.yml', 'w') do |f|
f.write jekyll_config
end
@@ -467,6 +478,31 @@ task :setup_github_pages, :repo do |t, args|
puts "========================================================"
end
+# usage rake list_posts or rake list_posts[pub|unpub]
+desc "List all unpublished/draft posts"
+task :list_drafts do
+ posts = Dir.glob("#{source_dir}/#{posts_dir}/*.*")
+ unpublished = get_unpublished(posts)
+ puts unpublished.empty? ? "There are no posts currently in draft" : unpublished
+end
+
+def get_unpublished(posts, options={})
+ result = ""
+ message = options[:message] || "These Posts will not be published:"
+ posts.sort.each do |post|
+ file = File.read(post)
+ data = YAML.load file.match(/(^-{3}\n)(.+?)(\n-{3})/m)[2]
+
+ if options[:no_future]
+ future = Time.now < Time.parse(data['date'].to_s) ? "future date: #{data['date']}" : false
+ end
+ draft = data['published'] == false ? 'published: false' : false
+ result << "- #{data['title']} (#{draft or future})\n" if draft or future
+ end
+ result = "#{message}\n" + result unless result.empty?
+ result
+end
+
def ok_failed(condition)
if (condition)
puts "OK"
@@ -489,6 +525,28 @@ def ask(message, valid_options)
answer
end
+def now_in_timezone(timezone)
+ time = Time.now
+ unless timezone.nil? || timezone.empty? || timezone == 'local'
+ tz = TZInfo::Timezone.get(timezone) #setup Timezone object
+ adjusted_time = tz.utc_to_local(time.utc) #time object without correct offset
+ #time object with correct offset
+ time = Time.new(
+ adjusted_time.year,
+ adjusted_time.month,
+ adjusted_time.day,
+ adjusted_time.hour,
+ adjusted_time.min,
+ adjusted_time.sec,
+ tz.period_for_utc(time.utc).utc_total_offset())
+ #convert offset to utc instead of just ±0 if that was specified
+ if ['utc','zulu','universal','uct','gmt','gmt0','gmt+0','gmt-0'].include? timezone.downcase
+ time = time.utc
+ end
+ end
+ time
+end
+
desc "list tasks"
task :list do
puts "Tasks: #{(Rake::Task.tasks - [Rake::Task[:list]]).join(', ')}"
View
10 _config.yml
@@ -2,10 +2,10 @@
# Main Configs #
# ----------------------- #
-url: http://yoursite.com
-title: My Octopress Blog
-subtitle: A blogging framework for hackers.
-author: Your Name
+url: http://www.chrisperelstein.com
+title: chrisPerelstein.com
+subtitle: space for my endless projects
+author: Chris Perelstein
simple_search: http://google.com/search
description:
@@ -113,7 +113,7 @@ disqus_show_comment_count: false
disqus_developer: 0
# Google Analytics
-google_analytics_tracking_id:
+google_analytics_tracking_id: UA-37371186-1
# Gaug.es Analytics
gauges_analytics_tracking_id:
View
13 plugins/blockquote.rb
@@ -21,6 +21,7 @@ module Jekyll
class Blockquote < Liquid::Block
FullCiteWithTitle = /(\S.*)\s+(https?:\/\/)(\S+)\s+(.+)/i
FullCite = /(\S.*)\s+(https?:\/\/)(\S+)/i
+ AuthorTitle = /([^,]+),([^,]+)/
Author = /(.+)/
def initialize(tag_name, markup, tokens)
@@ -30,17 +31,15 @@ def initialize(tag_name, markup, tokens)
if markup.strip =~ FullCiteWithTitle
@by = $1
@source = $2 + $3
- @title = $4.titlecase
+ @title = $4.titlecase.strip
elsif markup.strip =~ FullCite
@by = $1
@source = $2 + $3
+ elsif markup.strip =~ AuthorTitle
+ @by = $1
+ @title = $2.titlecase.strip
elsif markup.strip =~ Author
- if $1 =~ /([^,]+),([^,]+)/
- @by = $1
- @title = $2.titlecase
- else
- @by = markup
- end
+ @by = $1
end
super
end
View
12 plugins/category_generator.rb
@@ -122,7 +122,17 @@ def write_category_indexes
# Throw an exception if the layout couldn't be found.
else
- throw "No 'category_index' layout found."
+ raise <<-ERR
+
+
+===============================================
+ Error for category_generator.rb plugin
+-----------------------------------------------
+ No 'category_index.hmtl' in source/_layouts/
+ Perhaps you haven't installed a theme yet.
+===============================================
+
+ERR
end
end
end
View
4 plugins/pygments_code.rb
@@ -3,6 +3,10 @@
require 'pygments'
require 'fileutils'
require 'digest/md5'
+begin # Make it easy for folks to use rubypython if they like
+ require 'rubypython'
+rescue LoadError # rubypython is not installed
+end
PYGMENTS_CACHE_DIR = File.expand_path('../../.pygments-cache', __FILE__)
FileUtils.mkdir_p(PYGMENTS_CACHE_DIR)
View
25 plugins/video_tag.rb
@@ -22,22 +22,31 @@ class VideoTag < Liquid::Tag
@width = ''
def initialize(tag_name, markup, tokens)
- if markup =~ /((https?:\/\/|\/)(\S+))(\s+(\d+)\s(\d+))?(\s+(https?:\/\/|\/)(\S+))?/i
- @video = $1
- @width = $5
- @height = $6
- @poster = $7
+ if markup =~ /(https?:\S+)(\s+(https?:\S+))?(\s+(https?:\S+))?(\s+(\d+)\s(\d+))?(\s+(https?:\S+))?/i
+ @video = [$1, $3, $5].compact
+ @width = $7
+ @height = $8
+ @poster = $10
end
super
end
def render(context)
output = super
- if @video
+ type = {
+ 'mp4' => "type='video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"'",
+ 'ogv' => "type='video/ogg; codecs=theora, vorbis'",
+ 'webm' => "type='video/webm; codecs=vp8, vorbis'"
+ }
+ if @video.size > 0
video = "<video width='#{@width}' height='#{@height}' preload='none' controls poster='#{@poster}'>"
- video += "<source src='#{@video}' type='video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"'/></video>"
+ @video.each do |v|
+ t = v.match(/([^\.]+)$/)[1]
+ video += "<source src='#{v}' #{type[t]}>"
+ end
+ video += "</video>"
else
- "Error processing input, expected syntax: {% video url/to/video [width height] [url/to/poster] %}"
+ "Error processing input, expected syntax: {% video url/to/video [url/to/video] [url/to/video] [width height] [url/to/poster] %}"
end
end
end
View
5 sass/_base.scss
@@ -0,0 +1,5 @@
+@import "base/utilities";
+@import "base/solarized";
+@import "base/theme";
+@import "base/typography";
+@import "base/layout";
View
8 sass/_partials.scss
@@ -0,0 +1,8 @@
+@import "partials/header";
+@import "partials/navigation";
+@import "partials/blog";
+@import "partials/sharing";
+@import "partials/syntax";
+@import "partials/archive";
+@import "partials/sidebar";
+@import "partials/footer";
View
192 sass/base/_layout.scss
@@ -0,0 +1,192 @@
+$max-width: 1200px !default;
+
+// Padding used for layout margins
+$pad-min: 18px !default;
+$pad-narrow: 25px !default;
+$pad-medium: 35px !default;
+$pad-wide: 55px !default;
+
+// Sidebar widths used in media queries
+$sidebar-width-medium: 240px !default;
+$sidebar-pad-medium: 15px !default;
+$sidebar-pad-wide: 20px !default;
+$sidebar-width-wide: 300px !default;
+
+$indented-lists: false !default;
+
+$header-font-size: 1em !default;
+$header-padding-top: 1.5em !default;
+$header-padding-bottom: 1.5em !default;
+
+.group { @include pie-clearfix; }
+
+@mixin collapse-sidebar {
+ float: none;
+ width: auto;
+ clear: left;
+ margin: 0;
+ padding: 0 $pad-medium 1px;
+ background-color: lighten($sidebar-bg, 2);
+ border-top: 1px solid lighten($sidebar-border, 4);
+ section {
+ &.odd, &.even { float: left; width: 48%; }
+ &.odd { margin-left: 0; }
+ &.even { margin-left: 4%; }
+ }
+ &.thirds section {
+ width: 30%;
+ margin-left: 5%;
+ &.first {
+ margin-left: 0;
+ clear: both;
+ }
+ }
+}
+
+body {
+ -webkit-text-size-adjust: none;
+ max-width: $max-width;
+ position: relative;
+ margin: 0 auto;
+ > header, > nav, > footer, #content > article, #content > div > article, #content > div > section {
+ @extend .group;
+ padding-left: $pad-min;
+ padding-right: $pad-min;
+ @media only screen and (min-width: 480px) {
+ padding-left: $pad-narrow;
+ padding-right: $pad-narrow;
+ }
+ @media only screen and (min-width: 768px) {
+ padding-left: $pad-medium;
+ padding-right: $pad-medium;
+ }
+ @media only screen and (min-width: 992px) {
+ padding-left: $pad-wide;
+ padding-right: $pad-wide;
+ }
+ }
+ div.pagination {
+ @extend .group;
+ margin-left: $pad-min;
+ margin-right: $pad-min;
+ @media only screen and (min-width: 480px) {
+ margin-left: $pad-narrow;
+ margin-right: $pad-narrow;
+ }
+ @media only screen and (min-width: 768px) {
+ margin-left: $pad-medium;
+ margin-right: $pad-medium;
+ }
+ @media only screen and (min-width: 992px) {
+ margin-left: $pad-wide;
+ margin-right: $pad-wide;
+ }
+ }
+ > header {
+ font-size: $header-font-size;
+ padding-top: $header-padding-top;
+ padding-bottom: $header-padding-bottom;
+ }
+}
+
+#content {
+ overflow: hidden;
+ > div, > article { width: 100%; }
+}
+
+aside.sidebar {
+ float: none;
+ padding: 0 $pad-min 1px;
+ background-color: lighten($sidebar-bg, 2);
+ border-top: 1px solid $sidebar-border;
+ @extend .group;
+}
+
+.flex-content { max-width: 100%; height: auto; }
+
+.basic-alignment {
+ &.left { float: left; margin-right: 1.5em; }
+ &.right { float: right; margin-left: 1.5em; }
+ &.center { display:block; margin: 0 auto 1.5em; }
+ &.left, &.right { margin-bottom: .8em; }
+}
+
+.toggle-sidebar { &, .no-sidebar & { display: none; }}
+
+body.sidebar-footer {
+ @media only screen and (min-width: 750px) {
+ aside.sidebar{ @include collapse-sidebar; }
+ }
+ #content { margin-right: 0px; }
+ .toggle-sidebar { display: none; }
+}
+
+@media only screen and (min-width: 550px) {
+ body > header { font-size: $header-font-size; }
+}
+@media only screen and (min-width: 750px) {
+ aside.sidebar { @include collapse-sidebar; }
+}
+#main, #content, .sidebar {
+ @extend .group;
+}
+@media only screen and (min-width: 768px) {
+ body { -webkit-text-size-adjust: auto; }
+ body > header { font-size: $header-font-size * 1.2; }
+ #main {
+ padding: 0;
+ margin: 0 auto;
+ }
+ #content {
+ overflow: visible;
+ margin-right: $sidebar-width-medium;
+ position: relative;
+ .no-sidebar & { margin-right: 0; border-right: 0; }
+ .collapse-sidebar & { margin-right: 20px; }
+ > div, > article {
+ padding-top: $pad-medium/2;
+ padding-bottom: $pad-medium/2;
+ float: left;
+ }
+ }
+ aside.sidebar {
+ width: $sidebar-width-medium - $sidebar-pad-medium*2;
+ padding: 0 $sidebar-pad-medium $sidebar-pad-medium;
+ background: none;
+ clear: none;
+ float: left;
+ margin: 0 -100% 0 0;
+ section {
+ width: auto; margin-left: 0;
+ &.odd, &.even { float: none; width: auto; margin-left: 0; }
+ }
+ .collapse-sidebar & {
+ @include collapse-sidebar;
+ }
+ }
+}
+
+@media only screen and (min-width: 992px) {
+ body > header { font-size: $header-font-size * 1.3; }
+ #content { margin-right: $sidebar-width-wide; }
+ #content {
+ > div, > article {
+ padding-top: $pad-wide/2;
+ padding-bottom: $pad-wide/2;
+ }
+ }
+ aside.sidebar {
+ width: $sidebar-width-wide - $sidebar-pad-wide*2;
+ padding: 1.2em $sidebar-pad-wide $sidebar-pad-wide;
+ .collapse-sidebar & {
+ padding: { left: $pad-wide; right: $pad-wide; }
+ }
+ }
+}
+
+@if $indented-lists == false {
+ @media only screen and (min-width: 768px) {
+ ul, ol { margin-left: 0; }
+ }
+}
+
View
75 sass/base/_solarized.scss
@@ -0,0 +1,75 @@
+$solarized: light !default;
+$pre-bg: default !default;
+
+$base03: #002b36 !default; //darkest blue
+$base02: #073642 !default; //dark blue
+$base01: #586e75 !default; //darkest gray
+$base00: #657b83 !default; //dark gray
+$base0: #839496 !default; //medium gray
+$base1: #93a1a1 !default; //medium light gray
+// Test defaults for cream colors
+$base2: default !default;
+$base3: default !default;
+@if $solarized == dark {
+ @if $base2 == default { $base2: #eee8d5; } // cream
+ @if $base3 == default { $base3: #fdf6e3; } // cream white
+}
+@if $solarized == light {
+ // I prefer white and gray for the light theme
+ @if $base2 == default { $base2: #e5e5e5; } // light gray
+ @if $base3 == default { $base3: #fbfbfb; } // white
+}
+$solar-yellow: #b58900 !default;
+$solar-orange: #cb4b16 !default;
+$solar-red: #dc322f !default;
+$solar-magenta: #d33682 !default;
+$solar-violet: #6c71c4 !default;
+$solar-blue: #268bd2 !default;
+$solar-cyan: #2aa198 !default;
+$solar-green: #859900 !default;
+
+@if $solarized == light {
+ // Flipping the colors, This is the magic of Solarized.
+ $_base03: $base03;
+ $_base02: $base02;
+ $_base01: $base01;
+ $_base00: $base00;
+ $_base0: $base0;
+ $_base1: $base1;
+ $_base2: $base2;
+ $_base3: $base3;
+
+ $base03: $_base3;
+ $base02: $_base2;
+ $base01: $_base1;
+ $base00: $_base0;
+ $base0: $_base00;
+ $base1: $_base01;
+ $base2: $_base02;
+ $base3: $_base03;
+}
+
+/* non highlighted code colors */
+@if $pre-bg == default {
+ $pre-bg: $base03;
+} @else if $pre-bg != $base03 {
+ $base03: $pre-bg;
+ $base02: lighten($base03, 5);
+}
+
+$pre-border: darken($base02, 5) !default;
+$pre-color: $base1 !default;
+
+@if $pre-border != darken($base02, 5) {
+ $base02: lighten($pre-border, 5);
+}
+@if $pre-color != $base1 {
+ $base1: $pre-color;
+}
+
+$marker: rgba(#00baff, .5) !default;
+$marker-bg: rgba($marker, .03) !default;
+$marker-border: rgba($marker, .13) !default;
+$marker-border-left: $marker !default;
+
+$code-selection-color: false !default;
View
93 sass/base/_theme.scss
@@ -0,0 +1,93 @@
+// Main Link Colors
+$link-color: lighten(#165b94, 3) !default;
+$link-color-hover: adjust-color($link-color, $lightness: 10, $saturation: 25) !default;
+$link-color-visited: adjust-color($link-color, $hue: 80, $lightness: -4) !default;
+$link-color-active: adjust-color($link-color-hover, $lightness: -15) !default;
+
+// Main Section Colors
+$main-bg: #f8f8f8 !default;
+$page-bg: #252525 !default;
+$article-border: #eeeeee !default;
+
+$header-bg: #333 !default;
+$header-border: lighten($header-bg, 15) !default;
+$title-color: #f2f2f2 !default;
+$subtitle-color: #aaa !default;
+
+$text-color: #222 !default;
+$text-color-light: #aaa !default;
+$type-border: #ddd !default;
+
+/* Navigation */
+$nav-bg: #ccc !default;
+$nav-bg-front: image-url('noise.png') !default;
+$nav-bg-back: linear-gradient(lighten($nav-bg, 8), $nav-bg, darken($nav-bg, 11)) !default;
+$nav-color: darken($nav-bg, 38) !default;
+$nav-color-hover: darken($nav-color, 25) !default;
+$nav-placeholder: desaturate(darken($nav-bg, 10), 15) !default;
+$nav-border: darken($nav-bg, 10) !default;
+$nav-border-top: lighten($nav-bg, 15) !default;
+$nav-border-bottom: darken($nav-bg, 25) !default;
+$nav-border-left: darken($nav-bg, 11) !default;
+$nav-border-right: lighten($nav-bg, 7) !default;
+
+/* Sidebar colors */
+$sidebar-bg: #f2f2f2 !default;
+$sidebar-link-color: $link-color !default;
+$sidebar-link-color-hover: $link-color-hover !default;
+$sidebar-link-color-active: $link-color-active !default;
+$sidebar-color: change-color(mix($text-color, $sidebar-bg, 80), $hue: hue($sidebar-bg), $saturation: saturation($sidebar-bg)/2) !default;
+$sidebar-border: desaturate(darken($sidebar-bg, 7), 10) !default;
+$sidebar-border-hover: darken($sidebar-bg, 7) !default;
+$sidebar-link-color-subdued: lighten($sidebar-color, 20) !default;
+$sidebar-link-color-subdued-hover: $sidebar-link-color-hover !default;
+$twitter-status-link: lighten($sidebar-link-color-subdued, 15) !default;
+
+$footer-color: #888 !default;
+$footer-bg: #ccc !default;
+$footer-bg-front: image-url('noise.png') !default;
+$footer-bg-back: linear-gradient(lighten($footer-bg, 8), $footer-bg, darken($footer-bg, 11)) !default;
+$footer-color: darken($footer-bg, 38) !default;
+$footer-color-hover: darken($footer-color, 10) !default;
+$footer-border-top: lighten($footer-bg, 15) !default;
+$footer-border-bottom: darken($footer-bg, 15) !default;
+$footer-link-color: darken($footer-bg, 38) !default;
+$footer-link-color-hover: darken($footer-color, 25) !default;
+$page-border-bottom: darken($footer-bg, 5) !default;
+
+
+// Sprites and images
+
+@import "icon/*.png";/**/
+@include all-icon-sprites($dimensions: true);
+
+$noise-bg: image-url('noise.png') top left !default;
+$img-border: inline-image('dotted-border.png') !default;
+
+
+// Core theme application
+
+a {
+ color: $link-color;
+ @include link-colors($link-color, $hover: $link-color-hover, $focus: $link-color-hover, $visited: $link-color-visited, $active: $link-color-active);
+}
+.sidebar a {
+ @include link-colors($sidebar-link-color, $hover: $sidebar-link-color-hover, $focus: $sidebar-link-color-hover, $active: $sidebar-link-color-active);
+}
+a {
+ @include transition(color .3s);
+}
+
+html {
+ background: $page-bg image-url('line-tile.png') top left;
+}
+body {
+ > div {
+ background: $sidebar-bg $noise-bg;
+ border-bottom: 1px solid $page-border-bottom;
+ > div {
+ background: $main-bg $noise-bg;
+ border-right: 1px solid $sidebar-border;
+ }
+ }
+}
View
168 sass/base/_typography.scss
@@ -0,0 +1,168 @@
+$blockquote: $type-border !default;
+$sans: "PT Sans", "Helvetica Neue", Arial, sans-serif !default;
+$serif: "PT Serif", Georgia, Times, "Times New Roman", serif !default;
+$mono: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace !default;
+$heading-font-family: "PT Serif", "Georgia", "Helvetica Neue", Arial, sans-serif !default;
+$header-title-font-family: $heading-font-family !default;
+$header-subtitle-font-family: $heading-font-family !default;
+
+$h1: 2.2em !default;
+$h2: 1.5em !default;
+$h3: 1.3em !default;
+$h4: 1em !default;
+$h5: .9em !default;
+$h6: .8em !default;
+
+// Fonts
+.heading {
+ font-family: $heading-font-family;
+}
+.sans { font-family: $sans; }
+.serif { font-family: $serif; }
+.mono { font-family: $mono; }
+
+body > header h1 {
+ font-size: $h1;
+ @extend .heading;
+ font-family: $header-title-font-family;
+ font-weight: normal;
+ line-height: 1.2em;
+ margin-bottom: 0.6667em;
+}
+body > header h2 {
+ font-family: $header-subtitle-font-family;
+}
+
+body {
+ line-height: 1.5em;
+ color: $text-color;
+ @extend .serif;
+}
+
+#{headings()}{
+ @extend .heading;
+ text-rendering: optimizelegibility;
+ margin-bottom: 1em;
+ font-weight: bold;
+}
+h1 {
+ font-size: $h1;
+ line-height: 1.2em;
+}
+h2, section h1 {
+ font-size: $h2;
+}
+h3, section h2, section section h1 {
+ font-size: $h3;
+}
+h4, section h3, section section h2, section section section h1 {
+ font-size: $h4;
+}
+h5, section h4, section section h3 {
+ font-size: $h5;
+}
+h6, section h5, section section h4, section section section h3 {
+ font-size: $h6;
+}
+
+@media only screen and (min-width: 992px) {
+ body { font-size: 1.15em; }
+}
+
+p, blockquote, ul, ol { margin-bottom: 1.5em; }
+
+ul { list-style-type: disc;
+ ul { list-style-type: circle; margin-bottom: 0px;
+ ul { list-style-type: square; margin-bottom: 0px; }}}
+
+ol { list-style-type: decimal;
+ ol { list-style-type: lower-alpha; margin-bottom: 0px;
+ ol { list-style-type: lower-roman; margin-bottom: 0px; }}}
+
+ul, ol { &, ul, ol { margin-left: 1.3em; }}
+
+strong { font-weight: bold; }
+
+em { font-style: italic; }
+
+sup, sub { vertical-align: baseline; font-size: 0.8em; position: relative; }
+sup { top: -.5em; }
+sub { bottom: -.5em; }
+
+q { font-style: italic;
+ &:before { content: "\201C"; }
+ &:after { content: "\201D"; }
+}
+
+em, dfn { font-style: italic; }
+
+strong, dfn { font-weight: bold; }
+
+del, s { text-decoration: line-through; }
+
+abbr, acronym { border-bottom: 1px dotted; cursor: help; }
+
+pre, code, tt { @extend .mono; }
+
+sub, sup { line-height: 0; }
+
+hr { margin-bottom: 0.2em; }
+
+small { font-size: .8em; }
+
+big { font-size: 1.2em; }
+
+blockquote {
+ $bq-margin: 1.2em;
+ font-style: italic;
+ position: relative;
+ font-size: 1.2em;
+ line-height: 1.5em;
+ padding-left: 1em;
+ border-left: 4px solid rgba($text-color-light, .5);
+ cite {
+ font-style: italic;
+ a { color: $text-color-light !important; word-wrap: break-word; }
+ &:before { content: '\2014'; padding:{right: .3em; left: .3em;} color: $text-color-light; }
+ }
+ @media only screen and (min-width: 992px) {
+ padding-left: 1.5em;
+ border-left-width: 4px;
+ }
+}
+
+.pullquote-right:before,
+.pullquote-left:before {
+ /* Reset metrics. */
+ padding: 0;
+ border: none;
+
+ /* Content */
+ content: attr(data-pullquote);
+
+ /* Pull out to the right, modular scale based margins. */
+ float: right;
+ width: 45%;
+ margin: .5em 0 1em 1.5em;
+
+ /* Baseline correction */
+ position: relative;
+ top: 7px;
+ font-size: 1.4em;
+ line-height: 1.45em;
+}
+
+.pullquote-left:before {
+ /* Make left pullquotes align properly. */
+ float: left;
+ margin: .5em 1.5em 1em 0;
+}
+
+/* @extend this to force long lines of continuous text to wrap */
+.force-wrap {
+ white-space: -moz-pre-wrap;
+ white-space: -pre-wrap;
+ white-space: -o-pre-wrap;
+ white-space: pre-wrap;
+ word-wrap: break-word;
+}
View
27 sass/base/_utilities.scss
@@ -0,0 +1,27 @@
+@mixin mask-image($img, $repeat: no-repeat){
+ @include experimental(mask-image, image-url($img), -webkit, -moz, -o, -ms);
+ @include experimental(mask-repeat, $repeat, -webkit, -moz, -o, -ms);
+ width: image-width($img);
+ height: image-height($img);
+}
+
+@mixin shadow-box($border: #fff .5em solid, $shadow: rgba(#000, .15) 0 1px 4px, $border-radius: .3em) {
+ @include border-radius($border-radius);
+ @include box-shadow($shadow);
+ @include box-sizing(border-box);
+ border: $border;
+}
+
+@mixin selection($bg, $color: inherit, $text-shadow: none){
+ * {
+ &::-moz-selection { background: $bg; color: $color; text-shadow: $text-shadow; }
+ &::-webkit-selection { background: $bg; color: $color; text-shadow: $text-shadow; }
+ &::selection { background: $bg; color: $color; text-shadow: $text-shadow; }
+ }
+}
+
+@function text-color($color, $dark: dark, $light: light){
+ $text-color: ( (red($color)*299) + (green($color)*587) + (blue($color)*114) ) / 1000;
+ $text-color: if($text-color >= 150, $dark, $light);
+ @return $text-color;
+}
View
62 sass/custom/_colors.scss
@@ -0,0 +1,62 @@
+/*
+ Here you can easily change your site's color scheme.
+ To give it a try, uncomment some of the lines below rebuild your blog, and see how it works.
+ Look at sass/base/_theme.scss for more colors you tweak (override them in this file)
+
+ For a handy color picker try http://hslpicker.com */
+
+$main-bg: #fff;
+$main-bg-front: none;
+$main-bg-back: none;
+
+$page-bg: #fff;
+$header-bg: #fff;
+$title-color: #222;
+//$subtitle-color: lighten($header-bg, 58);
+
+$nav-bg: #fff;
+$nav-bg-front: none;
+$nav-bg-back: none;
+$nav-border-top: darken($nav-bg, 25) !default;
+
+$sidebar-bg: #fff;
+//$sidebar-link-color: saturate(#526f9a, 10);
+//$sidebar-link-color-hover: darken(#7ab662, 9);
+$footer-bg: #fff;
+$footer-bg-front: none;
+$footer-bg-back: none;
+
+/* To use the dark code highlighting theme uncomment the following line */
+
+//$solarized: dark;
+
+/* To adjust the background color uncomment and edit the following line */
+/* If you intend to use a dark background, uncomment $solarized: dark; above*/
+
+//$pre-bg: #252525;
+
+/* To change the color of the code markers, uncomment and change the following lines */
+
+//$marker: rgba(#00baff, .5);
+//$marker-bg: rgba($marker, .03);
+//$marker-border: rgba($marker, .13);
+//$marker-border-left: $marker;
+
+/* For fine control over the syntax highlighting colors edit here */
+
+//$base03: #002b36; //darkest blue
+//$base02: #073642; //dark blue
+//$base01: #586e75; //darkest gray
+//$base00: #657b83; //dark gray
+//$base0: #839496; //medium gray
+//$base1: #93a1a1; //medium light gray
+//$base2: #eee8d5; //cream
+//$base3: #fdf6e3; //white
+//$solar-yellow: #b58900;
+//$solar-orange: #cb4b16;
+//$solar-red: #dc322f;
+//$solar-magenta: #d33682;
+//$solar-violet: #6c71c4;
+//$solar-blue: #268bd2;
+//$solar-cyan: #2aa198;
+//$solar-green: #859900;
View
10 sass/custom/_fonts.scss
@@ -0,0 +1,10 @@
+// Here you can easily change font faces which are used in your site.
+// To give it a try, uncomment some of the lines below rebuild your blog, and see how it works. your sites's.
+// If you love to use Web Fonts, you also need to add some lines to source/_includes/custom/head.html
+
+//$sans: "Optima", sans-serif;
+//$serif: "Baskerville", serif;
+//$mono: "Courier", monospace;
+//$heading-font-family: "Verdana", sans-serif;
+//$header-title-font-family: "Futura", sans-serif;
+//$header-subtitle-font-family: "Futura", sans-serif;
View
20 sass/custom/_layout.scss
@@ -0,0 +1,20 @@
+// Here you can easily change your sites's layout.
+// To give it a try, uncomment some of the lines below, make changes, rebuild your blog, and see how it works.
+
+$max-width: 1069px;
+//$indented-lists: true;
+
+// Padding used for layout margins
+//$pad-min: 18px;
+//$pad-narrow: 25px;
+//$pad-medium: 35px;
+//$pad-wide: 55px;
+
+// Sidebar widths used in media queries
+//$sidebar-width-medium: 240px;
+//$sidebar-pad-medium: 15px;
+//$sidebar-pad-wide: 20px;
+//$sidebar-width-wide: 300px;
+
+$header-padding-top: 0.5em;
+$header-padding-bottom: 0.5em;
View
11 sass/custom/_styles.scss
@@ -0,0 +1,11 @@
+// This File is imported last, and will override other styles in the cascade
+// Add styles here to make changes without digging in too much
+html,body>div,body>div>div{
+ background-image: none;
+}
+header h2{
+ display: inline-block;
+}
+a:visited{
+ color: #aaa;
+}
View
77 sass/partials/_archive.scss
@@ -0,0 +1,77 @@
+#archive {
+ #content > div { &, > article { padding-top: 0; } }
+}
+#blog-archives {
+ color: $text-color-light;
+ article {
+ padding: 1em 0 1em;
+ position: relative;
+ background: $img-border bottom left repeat-x;
+ &:last-child {
+ background: none;
+ }
+ footer {
+ padding: 0; margin: 0;
+ font-size: .85em;
+ line-height: 1em;
+ }
+ }
+ h2 { display: none; }
+ .entry-title {
+ color: $text-color; margin-bottom: .3em;
+ font-size: $h3;
+ a {
+ @include hover-link;
+ &:hover { color: $link-color-hover; }
+ font-weight: normal;
+ display: inline-block;
+ }
+ }
+ article[data-linklog] .entry-title {
+ font-size: $h4;
+ a { text-decoration: underline; }
+ }
+ a.category, time {
+ @extend .sans;
+ color: $text-color-light;
+ }
+ .entry-content { display: none; }
+ time {
+ font-size: .9em;
+ line-height: 1.2em;
+ .month, .day { display: inline-block; }
+ .month { text-transform: uppercase; }
+ }
+ p { margin-bottom: 1em; }
+ a:hover { color: $link-color-hover; }
+
+ @media only screen and (min-width: 550px) {
+ article {
+ padding: { left: 4.5em; bottom: .7em;}
+ margin-left: 5em;
+ }
+ h2 {
+ margin-bottom: .3em;
+ font-weight: normal;
+ display: inline-block;
+ position: relative; top: -1px;
+ float: left;
+ &:first-child { padding-top: .75em; }
+ }
+ time {
+ position: absolute;
+ text-align: right;
+ left: 0em;
+ top: 1.8em;
+ }
+ .year { display: none; }
+ a.category { line-height: 1.1em; }
+ }
+}
+#content > .category {
+ article {
+ margin-left: 0;
+ padding-left: 6.8em;
+ }
+ .year { display: inline; }
+}
View
166 sass/partials/_blog.scss
@@ -0,0 +1,166 @@
+#content .blog-index {
+ padding: { top: 0; bottom: 0; }
+ article { padding-top: 2em; }
+}
+
+article {
+ padding-top: 1em;
+ a { @extend .force-wrap; }
+ header {
+ position: relative;
+ padding-top: 2em;
+ padding-bottom: 1em;
+ margin-bottom: 1em;
+ background: $img-border bottom left repeat-x;
+ @media only screen and (min-width: 768px) {
+ margin-bottom: 1.5em;
+ padding-bottom: 1em;
+ background: $img-border bottom left repeat-x;
+ }
+ .blog-index & { background: none; padding-bottom: 0; }
+ p {
+ font-size: .8em;
+ margin: 0;
+ color: $text-color-light;
+ &.meta { @extend .sans; position: absolute; top: 0; }
+ }
+ time { text-transform: uppercase; }
+ }
+ .entry-title {
+ margin: 0;
+ a { text-decoration: none;
+ &:hover { text-decoration: underline; }
+ }
+ .blog-index & {
+ font-size: $h1;
+ a { color: inherit; &:hover { color: $link-color-hover; } }
+ }
+ }
+
+ a[rel=bookmark] { text-decoration: none; }
+
+ h2 {
+ padding-top: 0.8em;
+ background: $img-border top left repeat-x;
+ }
+ h2:first-child, header + h2 { background: none; }
+
+ .entry-content & h2:first-child, header + h2 { padding-top: 0; }
+
+ &.linklog {
+ .entry-title {
+ font-size: $h1;
+ a { text-decoration: underline; }
+ }
+ .blog-index & .entry-title { font-size: $h2; }
+ }
+
+ .linklog-marker {
+ color: $text-color-light;
+ font-size: .8em;
+ line-height: 1em;
+ position: relative; top: -.15em;
+ }
+
+ > footer {
+ @extend .sans;
+ padding-bottom: 2.5em;
+ margin-top: 2em;
+ .blog-index & { margin-top: 1em; }
+ }
+ footer {
+ .meta {
+ margin-bottom: .8em;
+ font-size: .85em;
+ clear: both;
+ overflow: hidden;
+ }
+ .byline + time:before, time +time:before, .comments:before, .byline ~ .categories:before {
+ @extend .separator;
+ }
+ p:last-child { margin-bottom: 0; }
+ .comments-link {
+ font-size: .8em;
+ color: inherit;
+ &:hover, &:focus { color: $link-color-hover; }
+ }
+ }
+
+ a[rel=full-article] {
+ background: darken($main-bg, 5);
+ display: inline-block;
+ padding: .4em .8em;
+ margin-right: .5em;
+ text-decoration: none;
+ color: mix($text-color, $text-color-light);
+ @extend .serif;
+ @include transition(background-color .5s);
+ &:hover {
+ background: $link-color-hover;
+ text-shadow: none;
+ color: $main-bg;
+ }
+ }
+
+ .blog-index & + article {
+ background: $img-border top left repeat-x;
+ }
+
+ .feature {
+ padding-top: .5em;
+ margin-bottom: 1em;
+ padding-bottom: 1em;
+ background: $img-border bottom left repeat-x;
+ font-size: 2.0em; font-style: italic;
+ line-height: 1.3em;
+ }
+
+ img, video, .flash-video {
+ @extend .flex-content;
+ @extend .basic-alignment;
+ @include shadow-box;
+ }
+ video, .flash-video { margin: 0 auto 1.5em; }
+ video { display: block; width: 100%; }
+ .flash-video {
+ > div {
+ position: relative;
+ display: block;
+ padding-bottom: 56.25%;
+ padding-top: 1px;
+ height: 0;
+ overflow: hidden;
+ iframe, object, embed {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ }
+ }
+ }
+}
+
+.separator {
+ content: "\2022 ";
+ padding: 0 .4em 0 .2em;
+ display: inline-block;
+}
+
+#content div.pagination {
+ text-align: center;
+ font-size: .95em;
+ position: relative;
+ background: $img-border top left repeat-x;
+ padding: {top: 1.5em; bottom: 1.5em;}
+ a {
+ text-decoration: none;
+ color: $text-color-light;
+ &.prev { position: absolute; left: 0; }
+ &.next { position: absolute; right: 0; }
+ &:hover { color: $link-color-hover; }
+ &[href*=archive] {
+ &:before, &:after { content: '\2014'; padding: 0 .3em; }
+ }
+ }
+}
View
19 sass/partials/_footer.scss
@@ -0,0 +1,19 @@
+body > footer {
+ @extend .sans;
+ font-size: .8em;
+ color: $footer-color;
+ text-shadow: lighten($footer-bg, 5) 0 1px;
+ background-color: $footer-bg;
+ @include background($footer-bg-front, $footer-bg-back);
+ border-top: 1px solid $footer-border-top;
+ position: relative;
+ padding-top: 1em;
+ padding-bottom: 1em;
+ margin-bottom: 3em;
+ @include border-bottom-radius(.4em);
+ z-index: 1;
+ a {
+ @include link-colors($footer-link-color, $footer-link-color-hover, $visited: $footer-link-color);
+ }
+ p:last-child { margin-bottom: 0; }
+}
View
18 sass/partials/_header.scss
@@ -0,0 +1,18 @@
+body > header {
+ background: $header-bg;
+ h1 {
+ display: inline-block;
+ margin: 0;
+ a, a:visited, a:hover {
+ color: $title_color;
+ text-decoration: none;
+ }
+ }
+ h2 {
+ margin: .2em 0 0;
+ @extend .sans;
+ font-size: 1em;
+ color: $subtitle-color;
+ font-weight: normal;
+ }
+}
View
137 sass/partials/_navigation.scss
@@ -0,0 +1,137 @@
+body > nav {
+ position: relative;
+ background-color: $nav-bg;
+ @include background($nav-bg-front, $nav-bg-back);
+ border: {
+ top: 1px solid $nav-border-top;
+ bottom: 1px solid $nav-border-bottom; }
+ padding-top: .35em;
+ padding-bottom: .35em;
+ form {
+ @include background-clip(padding-box);
+ margin: 0; padding: 0;
+ .search {
+ padding: .3em .5em 0;
+ font-size: .85em;
+ font-family: $sans;
+ line-height: 1.1em;
+ width: 95%;
+ @include border-radius(.5em);
+ @include background-clip(padding-box);
+ @include box-shadow(lighten($nav-bg, 2) 0 1px);
+ background-color: lighten($nav-bg, 15);
+ border: 1px solid $nav-border;
+ color: #888;
+ &:focus {
+ color: #444;
+ border-color: #80b1df;
+ @include box-shadow(#80b1df 0 0 4px, #80b1df 0 0 3px inset);
+ background-color: #fff;
+ outline: none;
+ }
+ }
+ }
+ fieldset[role=search]{ float: right; width: 48%; }
+ fieldset.mobile-nav{ float: left; width: 48%;
+ select{ width: 100%; font-size: .8em; border: 1px solid #888;}
+ }
+ ul { display: none; }
+ @media only screen and (min-width: 550px) {
+ font-size: .9em;
+ ul {
+ @include horizontal-list(0);
+ float: left;
+ display: block;
+ padding-top: .15em;
+ }
+ ul.subscription {
+ margin-left: .8em;
+ float: right;
+ li:last-child a { padding-right: 0; }
+ }
+ ul li {
+ margin: 0;
+ }
+ a {
+ @include link-colors($nav-color, $nav-color-hover, $visited: $nav-color);
+ font-family: $sans;
+ text-shadow: lighten($nav-bg, 12) 0 1px;
+ float: left;
+ text-decoration: none;
+ font-size: 1.1em;
+ padding: .1em 0;
+ line-height: 1.5em;
+ }
+ li + li {
+ border-left: 1px solid $nav-border-left;
+ margin-left: .8em;
+ a {
+ padding-left: .8em;
+ border-left: 1px solid $nav-border-right;
+ }
+ }
+ form {
+ float: right;
+ text-align: left;
+ padding-left: .8em;
+ width: $sidebar-width-medium - $pad-medium*2 - $sidebar-pad-medium + 20px;
+ .search {
+ width: 93%;
+ font-size: .95em;
+ line-height: 1.2em;
+ }
+ }
+ ul[data-subscription$=email] + form {
+ width: $sidebar-width-medium - $pad-medium*2 - $sidebar-pad-medium - 58px;
+ .search { width: 91%; }
+ }
+ fieldset.mobile-nav { display: none; }
+ fieldset[role=search]{ width: 99%; }
+ }
+ @media only screen and (min-width: 992px) {
+ form {
+ width: $sidebar-width-wide - $pad-wide - $sidebar-pad-wide*2 + 10px;
+ }
+ ul[data-subscription$=email] + form {
+ width: $sidebar-width-wide - $pad-wide - $sidebar-pad-wide*2 - 58px;
+ }
+ }
+}
+.no-placeholder {
+ body > nav .search {
+ background: lighten($nav-bg, 15) image-url('search.png') .3em .25em no-repeat;
+ text-indent: 1.3em;
+ }
+}
+@mixin mask-subscription-nav($feed: 'rss.png'){
+ position: relative; top: 0px;
+ text-indent: -999999em;
+ background-color: $nav-border-right;
+ border: 0;
+ padding: 0;
+ &,&:after { @include mask-image($feed); }
+ &:after {
+ content: "";
+ position: absolute; top: -1px; left: 0;
+ background-color: lighten($nav-color, 25);
+ }
+ &:hover:after { background-color: lighten($nav-color, 20); }
+}
+.maskimage {
+ body > nav {
+ @media only screen and (min-width: 550px) {
+ ul[data-subscription$=email] + form {
+ width: $sidebar-width-medium - $pad-medium*2 - $sidebar-pad-medium - 32px;
+ }
+ }
+ @media only screen and (min-width: 992px) {
+ ul[data-subscription$=email] + form {
+ width: $sidebar-width-wide - $pad-wide - $sidebar-pad-wide*2 - 32px;
+ }
+ }
+ }
+ ul.subscription { position: relative; top: .2em; li, a { border: 0; padding: 0; }}
+ a[rel=subscribe-rss]{ @include mask-subscription-nav('rss.png'); }
+ a[rel=subscribe-email]{ @include mask-subscription-nav('email.png'); }
+}
+
View
73 sass/partials/_sharing.scss
@@ -0,0 +1,73 @@
+@mixin social-button-bg($icon: false, $color: #333, $img: false) {
+ color: $color;
+ &:visited, &:hover, &:visited:hover { color: $color; }
+ @if $img {
+ padding-left: image-width($img) + 6px;
+ &:before {
+ background: image-url($img) no-repeat center center;
+ width: image-width($img);
+ height: image-height($img);
+ position: absolute; left: 3px;
+ }
+ } @else if $icon {
+ padding-left: icon-sprite-width($icon) + 6px;
+ &:before {
+ vertical-align: middle;
+ @extend .icon-#{$icon};
+ position: absolute; left: 3px;
+ }
+ }
+}
+
+.simple-social-button {
+ position: relative;
+ overflow: hidden;
+ font-family: "Lucida Grande", Helvetica, Arial, sans;
+ display: inline-block;
+ border: 1px solid #ccc;
+ padding: .2em .5em; line-height: 1.45em;
+ font-size: 11px;
+ font-weight: bold;
+ text-decoration: none;
+ text-shadow: #fff 0 1px;
+ @include border-radius(.3em);
+ background-color: #e5e5e5;
+ @include background-image(linear-gradient(#fff, #ddd));
+ &:hover {
+ @include background-image(linear-gradient(#f5f5f5, #ccc));
+ border-color: #b5b5b5;
+ background-color: #ddd;
+ }
+ &:before {
+ content: "";
+ display: inline-block;
+ }
+}
+
+.sharing {
+ p.meta + & {
+ padding: { top: 1em; left: 0; }
+ background: $img-border top left repeat-x;
+ }
+}
+
+#fb-root { display: none; }
+
+.googleplus-share {
+ @extend .simple-social-button;
+ @include social-button-bg('googleplus', #db583b);
+ &:before { top: 5px; }
+}
+.facebook-share {
+ @extend .simple-social-button;
+ @include social-button-bg('facebook', #4e5a9b);
+ &:before { top: 3px; }
+}
+.twitter-share, .sidebar a.twitter-follow-button {
+ @extend .simple-social-button;
+ @include social-button-bg('twitter');
+}
+.sidebar .github-follow {
+ @extend .simple-social-button;
+ @include social-button-bg('github');
+}
View
5 sass/partials/_sidebar.scss
@@ -0,0 +1,5 @@
+@import "sidebar/base";
+@import "sidebar/twitter";
+@import "sidebar/googleplus";
+@import "sidebar/pinboard";
+@import "sidebar/delicious";
View
235 sass/partials/_syntax.scss
@@ -0,0 +1,235 @@
+p, li {
+ code {
+ @extend .mono;
+ display: inline-block;
+ white-space: no-wrap;
+ background: #fff;
+ font-size: .8em;
+ line-height: 1.5em;
+ color: #555;
+ border: 1px solid #ddd;
+ @include border-radius(.4em);
+ padding: 0 .3em;
+ margin: -1px 0;
+ }
+ pre code { font-size: 1em; background: none; border: none; }
+}
+
+pre, figure.code table {
+ @if $code-selection-color != false {
+ @include selection($code-selection);
+ }
+}
+
+pre {
+ background: $pre-bg $noise-bg;
+ @include border-radius(.4em);
+ @extend .mono;
+ color: $pre-color;
+ overflow: scroll;
+ overflow-y: hidden;
+ overflow-x: auto;
+ border: 1px solid $pre-border;
+ margin-bottom: 2.1em;
+ padding: 1em .8em;
+ font-size: 13px;
+ line-height: 1.45em;
+}
+
+figure.code {
+ @include box-shadow(rgba(#000, .06) 0 0 10px);
+ background: none;
+ padding: 0;
+ border: 0;
+ margin-bottom: 1.5em;
+ pre {
+ @include border-radius(0px);
+ @include box-shadow(none);
+ background: none;
+ color: $base1;
+ border: none;
+ padding: 0;
+ margin-bottom: 0;
+ overflow: visible;
+ font-style: normal;
+ font-weight: normal;
+ }
+ figcaption {
+ position: relative;
+ text-align: center;
+ font-size: 13px;
+ line-height: 2em;
+ font-weight: normal;
+ margin-bottom: 0;
+ @include border-top-radius(5px);
+ font-family: "Helvetica Neue", Arial, "Lucida Grande", "Lucida Sans Unicode", Lucida, sans-serif;
+ background-color: #aaaaaa;
+ @if lightness($base03) <= lightness(#555) {
+ text-shadow: #cbcccc 0 1px 0;
+ color: #555;
+ @include background-image(linear-gradient(
+ #e0e0e0, #cfcfcf 6%, #b1b1b1 90%, #aaaaaa
+ ));
+ border: 1px solid #a5a5a5 {
+ top-color: #cbcbcb;
+ bottom: 0;
+ }
+ }
+ @else if lightness($base03) > lightness(#555) {
+ text-shadow: #fff 0 1px 0;
+ color: #777;
+ @include background-image(linear-gradient(
+ #fff, #f0f0f0 6%, #e5e5e5 90%, #ddd
+ ));
+ border: 1px solid #c5c5c5 {
+ top-color: #d5d5d5;
+ bottom: 0;
+ }
+ }
+ a {
+ position: absolute; right: .8em;
+ @include hover-link;
+ color: inherit;
+ z-index: 1;
+ padding-left: 3em;
+ }
+ }
+ .marked {
+ position: relative;
+ display: block;
+ &:after {
+ content: "";
+ position: absolute;
+ background: $marker-bg;
+ left: -.8em; top: 0; bottom: 0; right: -.8em;
+ border: 0px solid $marker-border {
+ left-color: $marker-border-left;
+ }
+ }
+ &.start:after {
+ border-top-width: 1px;
+ }
+ &.end:after {
+ border-bottom-width: 1px;
+ }
+ }
+ .unnumbered, .line-numbers {
+ .marked:after { border-left-width: 2px; }
+ }
+}
+
+figure .highlight {
+ border: 1px solid $pre-border;
+ background: $base03;
+ overflow-y: hidden;
+ overflow-x: auto;
+
+ // allows line number to be read by screen readers but won't be selected when copying code
+ [data-line]:before { content: attr(data-line); }
+
+ td {
+ line-height: 1.45em;
+ font-size: 13px;
+ pre { padding: .8em; }
+ }
+
+ .main {
+ width: 100%;
+ background: $base03 $noise-bg;
+ }
+
+ .line-numbers {
+ text-align: right;
+ pre { color: $base01; }
+
+ @if lightness($base03) > lightness(#555) {
+ background: lighten($base03, 1) $noise-bg;
+ border-right: 1px solid darken($base02, 2);
+ @include box-shadow(lighten($base03, 2) -1px 0 inset);
+ text-shadow: lighten($base02, 2) 0 -1px;
+ } @else {
+ background: $base02 $noise-bg;
+ border-right: 1px solid darken($base03, 2);
+ @include box-shadow(lighten($base02, 2) -1px 0 inset);
+ text-shadow: darken($base02, 10) 0 -1px;
+ }
+ }
+
+ .c { color: $base01; font-style: italic; } /* Comment */
+ .cm { color: $base01; font-style: italic; } /* Comment.Multiline */
+ .cp { color: $base01; font-style: italic; } /* Comment.Preproc */
+ .c1 { color: $base01; font-style: italic; } /* Comment.Single */
+ .cs { color: $base01; font-weight: bold; font-style: italic; } /* Comment.Special */
+ .err { color: $solar-red; background: none; } /* Error */
+ .k { color: $solar-orange; } /* Keyword */
+ .o { color: $base1; font-weight: bold; } /* Operator */
+ .p { color: $base1; } /* Operator */
+ .ow { color: $solar-cyan; font-weight: bold; } /* Operator.Word */
+ .gd { color: $base1; background-color: mix($solar-red, $base03, 25%); display: inline-block; } /* Generic.Deleted */
+ .gd .x { color: $base1; background-color: mix($solar-red, $base03, 35%); display: inline-block; } /* Generic.Deleted.Specific */
+ .ge { color: $base1; font-style: italic; } /* Generic.Emph */
+ //.gr { color: #aa0000 } /* Generic.Error */
+ .gh { color: $base01; } /* Generic.Heading */
+ .gi { color: $base1; background-color: mix($solar-green, $base03, 20%); display: inline-block; } /* Generic.Inserted */
+ .gi .x { color: $base1; background-color: mix($solar-green, $base03, 40%); display: inline-block; } /* Generic.Inserted.Specific */
+ //.go { color: #888888 } /* Generic.Output */
+ //.gp { color: #555555 } /* Generic.Prompt */
+ .gs { color: $base1; font-weight: bold; } /* Generic.Strong */
+ .gu { color: $solar-violet; } /* Generic.Subheading */
+ //.gt { color: #aa0000 } /* Generic.Traceback */
+ .kc { color: $solar-green; font-weight: bold; } /* Keyword.Constant */
+ .kd { color: $solar-blue; } /* Keyword.Declaration */
+ .kp { color: $solar-orange; font-weight: bold; } /* Keyword.Pseudo */
+ .kr { color: $solar-magenta; font-weight: bold; } /* Keyword.Reserved */
+ .kt { color: $solar-cyan; } /* Keyword.Type */
+ .n { color: $solar-blue; }
+ .na { color: $solar-blue; } /* Name.Attribute */
+ .nb { color: $solar-green; } /* Name.Builtin */
+ .nc { color: $solar-magenta;} /* Name.Class */
+ .no { color: $solar-yellow; } /* Name.Constant */
+ //.ni { color: #800080 } /* Name.Entity */
+ .nl { color: $solar-green; }
+ .ne { color: $solar-blue; font-weight: bold; } /* Name.Exception */
+ .nf { color: $solar-blue; font-weight: bold; } /* Name.Function */
+ .nn { color: $solar-yellow; } /* Name.Namespace */
+ .nt { color: $solar-blue; font-weight: bold; } /* Name.Tag */
+ .nx { color: $solar-yellow !Important; }
+ //.bp { color: #999999 } /* Name.Builtin.Pseudo */
+ //.vc { color: #008080 } /* Name.Variable.Class */