From 836a9ea8bfb7a2f6846503e654ba3620581738f0 Mon Sep 17 00:00:00 2001 From: Thibaut Date: Fri, 13 Dec 2013 19:27:25 +0000 Subject: [PATCH] Add Redis documentation --- assets/images/icons.png | Bin 11940 -> 12712 bytes assets/images/icons@2x.png | Bin 31316 -> 32897 bytes .../templates/pages/about_tmpl.coffee | 5 ++ .../templates/pages/news_tmpl.coffee | 2 +- assets/stylesheets/application.css.scss | 1 + assets/stylesheets/global/_base.scss | 4 +- assets/stylesheets/global/_icons.scss | 1 + assets/stylesheets/pages/_redis.scss | 44 ++++++++++++++++++ lib/docs/filters/redis/clean_html.rb | 21 +++++++++ lib/docs/filters/redis/entries.rb | 26 +++++++++++ lib/docs/scrapers/redis.rb | 19 ++++++++ public/icons/docs/redis/16.png | Bin 0 -> 865 bytes public/icons/docs/redis/16@2x.png | Bin 0 -> 1609 bytes public/icons/docs/redis/SOURCE | 1 + 14 files changed, 121 insertions(+), 3 deletions(-) create mode 100644 assets/stylesheets/pages/_redis.scss create mode 100644 lib/docs/filters/redis/clean_html.rb create mode 100644 lib/docs/filters/redis/entries.rb create mode 100644 lib/docs/scrapers/redis.rb create mode 100644 public/icons/docs/redis/16.png create mode 100644 public/icons/docs/redis/16@2x.png create mode 100644 public/icons/docs/redis/SOURCE diff --git a/assets/images/icons.png b/assets/images/icons.png index bde868069206d04a07d7eaaa0214f9ca900fb4e6..20187782fcf3e3f1fe75ed6d35aca794827371d7 100644 GIT binary patch delta 2964 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 delta 10042 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 is a trademark of the Python Software Foundation.', 'PSFL', 'http://docs.python.org/3/license.html' + ], [ + 'Redis', + '2006-2013 Salvatore Sanfilippo and others', + 'BSD', + 'https://raw.github.com/antirez/redis/unstable/COPYING' ], [ 'Ruby', '1993-2013 Yukihiro Matsumoto', diff --git a/assets/javascripts/templates/pages/news_tmpl.coffee b/assets/javascripts/templates/pages/news_tmpl.coffee index e6d2bafb..2a47db95 100644 --- a/assets/javascripts/templates/pages/news_tmpl.coffee +++ b/assets/javascripts/templates/pages/news_tmpl.coffee @@ -25,7 +25,7 @@ newsItem = (date, news) -> app.news = [ [ 1386892800000, # December 13, 2013 - """ New Git documentation """ + """ New Git and Redis documentations """ ], [ 1385424000000, # November 26, 2013 """ New Python documentation """ diff --git a/assets/stylesheets/application.css.scss b/assets/stylesheets/application.css.scss index 9e3d3c43..4a9ed2ee 100644 --- a/assets/stylesheets/application.css.scss +++ b/assets/stylesheets/application.css.scss @@ -38,6 +38,7 @@ 'pages/node', 'pages/php', 'pages/rdoc', + 'pages/redis', 'pages/rfc', 'pages/sphinx', 'pages/underscore', diff --git a/assets/stylesheets/global/_base.scss b/assets/stylesheets/global/_base.scss index 7d36d8a3..c14d26b0 100644 --- a/assets/stylesheets/global/_base.scss +++ b/assets/stylesheets/global/_base.scss @@ -87,7 +87,7 @@ abbr, acronym, dfn { border-bottom: 1px dotted $textColor; } -pre, code, samp { +pre, code, samp, %pre { font-family: $monoFont; font-weight: normal; font-style: normal; @@ -98,7 +98,7 @@ pre, code, samp { tab-size: 2; } -pre { +pre, %pre { margin: 1.5em 0; padding: .375rem .75rem; line-height: 1.5; diff --git a/assets/stylesheets/global/_icons.scss b/assets/stylesheets/global/_icons.scss index c7a56322..3c8f7bb1 100644 --- a/assets/stylesheets/global/_icons.scss +++ b/assets/stylesheets/global/_icons.scss @@ -43,3 +43,4 @@ ._icon-rails:before { background-position: -4rem -5rem; } ._icon-python:before { background-position: 0 -6rem; } ._icon-git:before { background-position: -1rem -6rem; } +._icon-redis:before { background-position: -2rem -6rem; } diff --git a/assets/stylesheets/pages/_redis.scss b/assets/stylesheets/pages/_redis.scss new file mode 100644 index 00000000..229a458a --- /dev/null +++ b/assets/stylesheets/pages/_redis.scss @@ -0,0 +1,44 @@ +._redis { + // Index + + > .commands { + padding-left: 0; + list-style: none; + + > li { margin-bottom: 1em; } + } + + .command, .summary { display: block; } + + .args { + font-size: .75rem; + color: $textColorLight; + } + + // Others + + > h2 { @extend %block-heading; } + p > code { @extend %label; } + + > .metadata { @extend %note, %note-green; } + > .metadata > p { margin: 0; } + + > .example { + white-space: normal; + @extend %pre; + + > .prompt { + float: left; + margin-right: .5em; + color: $textColorLight; + } + + > code { + display: block; + clear: left; + margin-bottom: .5em; + + &:last-child { margin-bottom: 0; } + } + } +} diff --git a/lib/docs/filters/redis/clean_html.rb b/lib/docs/filters/redis/clean_html.rb new file mode 100644 index 00000000..2a3f5059 --- /dev/null +++ b/lib/docs/filters/redis/clean_html.rb @@ -0,0 +1,21 @@ +module Docs + class Redis + class CleanHtmlFilter < Filter + def call + at_css('ul')['class'] = 'commands' if root_page? + + css('nav', 'aside', 'form').remove + + css('> article', 'pre > code').each do |node| + node.before(node.children).remove + end + + css('.example > pre').each do |node| + node.name = 'code' + end + + doc + end + end + end +end diff --git a/lib/docs/filters/redis/entries.rb b/lib/docs/filters/redis/entries.rb new file mode 100644 index 00000000..3caae5c8 --- /dev/null +++ b/lib/docs/filters/redis/entries.rb @@ -0,0 +1,26 @@ +module Docs + class Redis + class EntriesFilter < Docs::EntriesFilter + def get_name + slug.gsub('-', ' ') + end + + def get_type + case at_css('aside > ul:last-child a').content.strip + when 'DEL' then 'Keys' + when 'APPEND' then 'Strings' + when 'HDEL' then 'Hashes' + when 'BLPOP' then 'Lists' + when 'SADD' then 'Sets' + when 'ZADD' then 'Sorted Sets' + when 'PSUBSCRIBE' then 'Pub/Sub' + when 'DISCARD' then 'Transactions' + when 'EVAL' then 'Scripting' + when 'AUTH' then 'Connection' + when 'BGREWRITEAOF' then 'Server' + else 'Miscellaneous' + end + end + end + end +end diff --git a/lib/docs/scrapers/redis.rb b/lib/docs/scrapers/redis.rb new file mode 100644 index 00000000..ca90d425 --- /dev/null +++ b/lib/docs/scrapers/redis.rb @@ -0,0 +1,19 @@ +module Docs + class Redis < UrlScraper + self.type = 'redis' + self.version = 'up to 2.8.3' + self.base_url = 'http://redis.io/commands' + + html_filters.push 'redis/entries', 'redis/clean_html', 'title' + + options[:container] = ->(filter) { filter.root_page? ? '#commands' : '.text' } + options[:title] = false + options[:root_title] = 'Redis' + options[:follow_links] = ->(filter) { filter.root_page? } + + options[:attribution] = <<-HTML + © 2006–2013 Salvatore Sanfilippo and others
+ Licensed under the three clause BSD license. + HTML + end +end diff --git a/public/icons/docs/redis/16.png b/public/icons/docs/redis/16.png new file mode 100644 index 0000000000000000000000000000000000000000..6d1f2b7f536a3b12ffd821755d142315b6b569c3 GIT binary patch literal 865 zcmV-n1D^beP)Xkf>$qd- z7@!EPTt-9C#8g%}AGU__VEV|dZ1NN7?$ zxDpOvJVt`#WT+&#%E-o28<%NNgbUuL%PXYbOd_sWgDN4R$rvnEa5o;pSj@mB)9)k* zZ&9TC zyIC|rLiRvd5eafrA1p!#IT$8^3^ftl+~_1M8|BV;%&>0|-XHRTwW`wfb|U>A^3&H; zjK>W-8{tm3?iDVnk(ykIQA=|uo|7q2*8WM0D!pk{q@P)D$g8Az@mDllPILLCdzqoU zw=K;cC0DL9B8vfv*-6$@-18`*dd_znQsp(%+{)H#w1VYR#;T+$T}bkx2OVVlD#hy$ z`;k&5hx$gFCe?LDib~fAxv#J$_fb%_n>*r3E`QywNxeksO7Y^O*HqP;%SpK$I@$lh rv-CRGvEMA!+i7|{IXjzj@7;O_4*r#eok#Qh00000NkvXXu0mjfVFsef literal 0 HcmV?d00001 diff --git a/public/icons/docs/redis/16@2x.png b/public/icons/docs/redis/16@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9db97221c44d70dd93f1030ce2a9f9c870773f94 GIT binary patch literal 1609 zcmV-P2DbT$P)Q4-<7fK3Py#X!^$#UNmmC^3cy zmlqxiGsDo0rLriS$ReAvl+MhZ=}ajtn;4)_(6sRT{fE1Byh0SwCr)y5&pmU_|9{K> z-;wT&TOIA?epfoAOw5Lrg=$!yk|>kq|2%0w;Y?Ve+z2;yzB-9czV{Yoo_d_R-keSy6US37 z=q3I=9g?5ZP(w=hu?mIS5Ih-@DKq9#`en&t;&JuTMe*#K z{Te0p-|^)00NjmPkGZh zkr;}I383C>(t3X(wIGnn$st>k*N;_D_l9P=+S8Ml_*!2dT{(LAx(cZLM9|A>2==XD zeEpU86rIX2;5oyShnGPjMQSgell2o)A2 zS&3)I(DCV0!1xX7oH>nhFOCyI5|C7VBt&i1W2j^5Bs#V5ed>I@26w#dzhT2p28s79 zq-W+oBj&e?lU5*Kt!pSnkz0!6C4vQSEXQ-TZ#eBL^-wE<#zY7Jmn%Dsanqb8;GciAf0&%aS z>5GB_n?$24ZIC9uHQ>aiT|a0XW_#A5;`iwuA}|y|trXL-$uH39MGGhiiS@*X0eB03 zU+HyNV#N?^1FSv>WpfouYa*;nleU+*+fk7$m+%hn)L3jqjVH5VR)U?%Y~gbf-GDXx z_0dKIM-nq}zM2eZ54su zR+AwRTKz;}iUMsh{S@9N`T^Ug*G;}f{A8d|!)4ybd2~ddROhvu49q}WSeA;`dl>Av z>Nz=sV1?LU3vj&iJ{PK?AOqM2AZ)WJ!f1Yva+MmsGpMbQ3sN%^o_WPqU+myOc}%Ub z%wjfe5#V@@B6QhKuDsFbxL+0TGOO5B#ag`FF$~;lOTWa(#~sj%^(RuqHPj#T*lMG0 z`(^%j5{hWEPV0AkH1hfw?3ks&8t2$wy?tSeOgoK^F%{F|_aa|&t*2nD)PF4Z+A0zB zGkj3GfDm5)_2(F@413Vq+!2OSN6P%VWrj*IEivMr2g#*~HA=eKh!z$W;nEBo-p6VP zdv5Y|OEVbF-xX%jVr|^bBG&w6-up|Xe=@$Vk_JRv_G%!H1IR^Y5zGI+v$vuyV)_2+ zU%A~8x4kCf!$01?9Z|QV3_w0)Hh;E<>mZ^f#+lz@ZhIpG|3H%Nl5Y24Hc|J`sbIG= zD%!|ke2M*yxC*MI|6?$_n8)!n3aUQhu`gWiw1=cS;}*vsuJ@MeiGnHe00000NkvXX Hu0mjf%cTmg literal 0 HcmV?d00001 diff --git a/public/icons/docs/redis/SOURCE b/public/icons/docs/redis/SOURCE new file mode 100644 index 00000000..8eb6dbb1 --- /dev/null +++ b/public/icons/docs/redis/SOURCE @@ -0,0 +1 @@ +http://redis.io/documentation