From f7a381c53486b52265dff341ce28b1f2a054b20e Mon Sep 17 00:00:00 2001 From: Thibaut Courouble Date: Sat, 9 Apr 2016 17:57:48 -0400 Subject: [PATCH] Add caniuse.com support tables --- assets/images/icons.png | Bin 42479 -> 43299 bytes assets/images/icons@2x.png | Bin 109986 -> 111974 bytes assets/javascripts/news.json | 3 + .../views/pages/support_tables.coffee | 14 ++ assets/stylesheets/application-dark.css.scss | 1 + assets/stylesheets/application.css.scss | 1 + assets/stylesheets/global/_icons.scss | 3 +- assets/stylesheets/pages/_support_tables.scss | 64 ++++++ lib/docs/scrapers/support_tables.rb | 182 ++++++++++++++++++ public/icons/docs/support_tables/16.png | Bin 0 -> 747 bytes public/icons/docs/support_tables/16@2x.png | Bin 0 -> 1826 bytes public/icons/docs/support_tables/SOURCE | 1 + 12 files changed, 268 insertions(+), 1 deletion(-) create mode 100644 assets/javascripts/views/pages/support_tables.coffee create mode 100644 assets/stylesheets/pages/_support_tables.scss create mode 100644 lib/docs/scrapers/support_tables.rb create mode 100644 public/icons/docs/support_tables/16.png create mode 100644 public/icons/docs/support_tables/16@2x.png create mode 100644 public/icons/docs/support_tables/SOURCE diff --git a/assets/images/icons.png b/assets/images/icons.png index b0458a27cd3af48a037fb42d33c12b323f0fa910..7a40ea86f88b874bb9f5c864dd186b3fb7c2f606 100644 GIT binary patch delta 4140 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 diff --git a/assets/images/icons@2x.png b/assets/images/icons@2x.png index 1fd38ec6835103c651e4228c2ebe08dafd84c694..36d0fbc8c09a52d8112f57607209704822a43afb 100644 GIT binary patch delta 2778 zcmV<03MKWT+Xm+929OsHfCvTv007*0yB+`mwJm`qwIuYoaDn_|cS#r3>OmTO|>$u;bW{9oz95FLAuY zP6Vi`s7f0(DF_OPEw$ zVi)Jm0q@>(>!RVci=WIO!1qVCF6d5i+shd;(!1cmJAY%svv+E%(|2y~LVm~B+_3G~ znrkzNFM|lHu4^3KjPHOexlm$Pi>(k(tjFKLqcZa*A;IZf7ztK~gU!;E+gO}Jj51gc z+9#a&%(0s|*MzyxNPsi&DcocG-{SFDHh%oegMk2TT#EDmR`$MZkG%Rb9&`V3WW>Jj zdl82vJbw=H-S^l5o)36d=K%)HN4$o(;CZXuxdyUp34YvY5<&5uwyu6QYiOJ2G)%1m&nU6Y?fOmqFA6JHlR?NBIe*gO!yi|}o zlezrljX$9|w0!P7=iG4-4>Op*=;lp)H<(d?Jbx|v97CxO|KR48N7pVsG%mpU1<$|J zF#k5^!sF79K1lF$xnQ&OB!Z8-Z*UC9PMq^B1c+#Sz9?kaYf!;2q)7DkseEcM(rxuiy|jN>g@xXNWt&7brd4H75Dn zB7e>qFem4VI6r&4;_~T#y7IE=f0;FX#?PE{z*Uz|KMa}T6S+(NiSqS1GiEJ6o!Amkp3#4IX*FL1{RjBU~lMW9|cZ6yAp|E~j|N>4NJQ z-{pLc9KL%=&e3}pKXjsg!Cm(MyKuR9!ha5r`HFoCiKo;+@_-&p9#;d!Bd8zNgNbL& zuHr`269wDxd6*yw!i9p{U%W^S7C#E9YB0HVX@6gG zz9R^NaNbc`dXer+e1BYa&i>4C(ndMCw~u)@=fek(@QlOI5Y&!Mlv^e1n3 z1VIqaC-Qrf*Fa$VR9b4IsPA%n6XP#53wD>x%o|9qbo(Q-8LBV2O7|t7g&fyGgx5KO zAPDCpsyBM0>5ILg`V%SB2LblQQ-7-0-r^viq{$?`XR&QlTHSfwB3EF>4}9Q z%x;VyRve2l+Kx}49zUdZc-K0DAP7@WfbmBVDTbo#cElO!YlPX6K*Td1Q-7qo<6AU^ zm(C5w1#@sL>-+6pq#y{wRKn~?-mbeLE67W+q_9wDo8fhL>;t_cc5h|@CjO|pV=1#e z&hd;7CCadEoG)4F2!bF?1xj|8TpZLPxpv(}iN#VZ^>!;RmM8N%<99lrg6fLjZ@Q4n zz<7gDK^>){7`v=UPpXdSjem|H2tu}TJL9E!+v5eS7c`a3R9%S|bth!i8HKo_6yY!) zTW=p1U1w|!gtptX$HJ;3QKUPf%N&9qgNE#WYXyq28eZT)hY+1X% zFx?;hqU!M9Mq5g?Q=$}KocYW{q)W^{QrJ^C!x02Q$QG)@TW%;cglUiejzY|oYuck* z(z(&J(6*tz4Rw^LKOHG7Hv$+C@nO% zE&AXmi_eCl;5fc5x*^C%{}bA_AzG2!#vGs542-dNh~17L2tu~V zYxRF^S|O$uACh8t4`s^Lt^Oee0U8E!DKZVY8Agk}KBd}Xw=x%V73vl%J3Fu9-w1N; z-(fxWlp_d&kS$D0Y(M3s5vDnsa$BMgX3q5wQfkbl_?XXYw11|jQWLE*H4P)$>$UI7p zVdrq0{hwN4)_;~vN81qua}ewg!Me!isb!ynY<=WLMK0}$R{Io94q+OYN4_z29rWlga!>8<_`F~{raK992H-$`N4 zBaR>lLbfnl{THmbASAcZAIWbB<+9yvjNNC&X2Y|BbAOxsm)$1M59Ai$Hb)kzM*k;} zOh$Hq6QV;|o zo4B=+ZEmf%C%D#IynpE}k(A4z=unz19s<|3tbd2uMhV(>UF*GxwzZ%38J(^Q-C$}X zBQAw%$3~hQK@fy&!^c;%Is5?Y%c}i_x(0%(!J-ICQyWH|;zOWrD8QPaZrdMsDas)vTrUC_}1(&dd*j7P?DP4`&OxYn= zvVV>8s)6{>2RV+an#hJ=MVMP;AiZ_SKSptC`DV z{6aQN8G?02nJtGQz;Z_r1mQx$Ejugvk$JdiPkz~omr)*b%Ne1+p?xpp*OmWpC?0AE gUFHaaAWU)o2l~rEz>%07*qoM6N<$g0>TGc>n+a delta 774 zcmV+h1Nr>s>IS0Q29OsHU);3KA}$gwP5l%-XND=`V3=ek-Q>U}!{p6`Y!3Ind+vECksl!LW6j+E+@dL`!FL7j z`PFWCpd9hc{C|!~2qY7UHTx_Gs&A-~$Wwlb4`^QnL)0fW32L_>a<0ov)$G^LvVnqq zz=sR{$paD)%-+}`W_gP!lGthqPKnsfx$syyzPr1W%{;0?fWIr3joW`HdkKijlrg_- z6P}%^4cnR93dryK$j+PJMmja|gPRER+pnx%=%O188-FG27F&e4l*4bJR2IUY1Qj+$ zobIqoEdA4UVEQV9*Uo*9<1?R~aAsY z^%7<7`>z#izwb5767GTc#-``#4;ac1&_NpU0nzj*o|kPPyX(&3Mm0rVeo*IE%E=C? z1BW5Xrhg^AJNwghJtiU0nM&<h zdE*h9W^XbjjYA8~4AR{_liVAuN`Q2WZZJsdrDHuqMkTW zF6W4)YY3LRU-%54^}aI<0k(|WWiD;981dY!cYh5D(K0nmr>d=j9ORcM*@F6*MW7CfRY%5Sid}k{+_gL7pul0idbv0~~v6Z&O}u-lV*W zE73F30BmVf7D1*Mk=ytgpP#g7ytkgSfYHntpnS#b>&WtixavNF9lIcXnE?4+M9I6C zq-P=P2zH54=AK3=JOhc#FPfYhU71l?M=T!Qqn1x(&Mg&;QS1LTFE)4-9%+!;Fya~- z8#8o~!F7p&>vz1z@3@9*Ju(}Support tables (caniuse.com)" + ], [ "2016-03-27", "New documentation: TypeScript" ], [ diff --git a/assets/javascripts/views/pages/support_tables.coffee b/assets/javascripts/views/pages/support_tables.coffee new file mode 100644 index 00000000..217e2df3 --- /dev/null +++ b/assets/javascripts/views/pages/support_tables.coffee @@ -0,0 +1,14 @@ +#= require views/pages/base + +class app.views.SupportTablesPage extends app.views.BasePage + @events: + click: 'onClick' + + onClick: (event) -> + return unless event.target.classList.contains 'show-all' + $.stopEvent(event) + + el = event.target + el = el.parentNode until el.tagName is 'TABLE' + el.classList.add 'show-all' + return diff --git a/assets/stylesheets/application-dark.css.scss b/assets/stylesheets/application-dark.css.scss index 48314be5..3ebd1d94 100644 --- a/assets/stylesheets/application-dark.css.scss +++ b/assets/stylesheets/application-dark.css.scss @@ -76,6 +76,7 @@ 'pages/sphinx', 'pages/sphinx_simple', 'pages/tcl_tk', + 'pages/support_tables', 'pages/tensorflow', 'pages/underscore', 'pages/vagrant', diff --git a/assets/stylesheets/application.css.scss b/assets/stylesheets/application.css.scss index 8ed497ce..550ec013 100644 --- a/assets/stylesheets/application.css.scss +++ b/assets/stylesheets/application.css.scss @@ -75,6 +75,7 @@ 'pages/socketio', 'pages/sphinx', 'pages/sphinx_simple', + 'pages/support_tables', 'pages/tcl_tk', 'pages/tensorflow', 'pages/underscore', diff --git a/assets/stylesheets/global/_icons.scss b/assets/stylesheets/global/_icons.scss index 26f44b8c..584c260a 100644 --- a/assets/stylesheets/global/_icons.scss +++ b/assets/stylesheets/global/_icons.scss @@ -4,7 +4,7 @@ width: 1rem; height: 1rem; background-image: image-url('icons.png'); - background-size: 10rem 11rem; + background-size: 10rem 12rem; } @media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { @@ -133,3 +133,4 @@ ._icon-haxe:before { background-position: -7rem -10rem; } ._icon-ansible:before { background-position: -8rem -10rem; @extend %darkIconFix !optional; } ._icon-typescript:before { background-position: -9rem -10rem; } +._icon-browser_support_tables:before { background-position: 0rem -11rem; } diff --git a/assets/stylesheets/pages/_support_tables.scss b/assets/stylesheets/pages/_support_tables.scss new file mode 100644 index 00000000..076683c1 --- /dev/null +++ b/assets/stylesheets/pages/_support_tables.scss @@ -0,0 +1,64 @@ +._support_tables { + h2 { @extend %block-heading; } + code { @extend %label; } + + > .stats { + tr.show-all ~ tr { display: none; } + + &.show-all { + tr.show-all { display: none; } + tr.show-all ~ tr { display: table-row; } + } + + td, th { + position: relative; + text-align: center; + min-width: 5rem; + } + + sup { + position: absolute; + top: 0; + right: 2px; + font-size: .625rem; + } + + tr.current { + font-weight: bold; + font-size: 1rem; + } + + td { + padding: .125rem .25rem; + white-space: nowrap; + cursor: default; + } + + td.y { + color: white; + background: #39b54a; + } + + td.n, td.p { + color: white; + background: #c44230; + } + + td.a { + color: white; + background: #a8bd04; + } + + td.u { + color: white; + background: #838383; + } + + th.show-all { + background: none; + border-bottom: 0; + } + + a.show-all { display: block; } + } +} diff --git a/lib/docs/scrapers/support_tables.rb b/lib/docs/scrapers/support_tables.rb new file mode 100644 index 00000000..1751dd01 --- /dev/null +++ b/lib/docs/scrapers/support_tables.rb @@ -0,0 +1,182 @@ +require 'yajl/json_gem' + +module Docs + class SupportTables < Doc + include Instrumentable + + self.name = 'Support Tables' + self.slug = 'browser_support_tables' + self.type = 'support_tables' + + def build_pages + url = 'https://github.com/Fyrd/caniuse/raw/master/data.json' + instrument 'running.scraper', urls: [url] + + response = Request.run(url) + instrument 'process_response.scraper', response: response + + data = JSON.parse(response.body) + instrument 'queued.scraper', urls: data['data'].keys + + data['agents']['and_chr']['browser'] = 'Android Chrome' + data['agents']['and_ff']['browser'] = 'Android Firefox' + data['agents']['and_uc']['browser'] = 'Android UC Browser' + data['desktop_agents'] = data['agents'].select { |_, agent| agent['type'] == 'desktop' } + data['mobile_agents'] = data['agents'].select { |–, agent| agent['type'] == 'mobile' } + data['total_versions'] = data['agents']['firefox']['versions'].length + + index_page = { + path: 'index', + store_path: 'index.html', + output: ERB.new(INDEX_PAGE_ERB).result(binding), + entries: [Entry.new(nil, 'index', nil)] + } + + yield index_page + + data['data'].each do |feature_id, feature| + url = "https://github.com/Fyrd/caniuse/raw/master/features-json/#{feature_id}.json" + + response = Request.run(url) + instrument 'process_response.scraper', response: response + + feature = JSON.parse(response.body) + + name = feature['title'] + type = feature['categories'].find { |category| name.include?(category) } || feature['categories'].first + + page = { + path: feature_id, + store_path: "#{feature_id}.html", + output: ERB.new(PAGE_ERB).result(binding), + entries: [Entry.new(name, feature_id, type)] + } + + yield page + end + end + + def md_to_html(str) + str = str.strip + str.gsub! %r{`(.*?)`}, '\1' + str.gsub! %r{\n\s*\n}, '

' + str.gsub! "\n", '
' + str.gsub! %r{\[(.+?)\]\((.+?)\)}, '\1' + str + end + + def support_to_css_class(support) + support.select { |s| s.length == 1 }.join(' ') + end + + def support_to_note_indicators(support) + notes = support.select { |s| s.start_with?('#') }.map { |s| s[1..-1] } + notes << '*' if support.include?('x') + "(#{notes.join(',')})" if notes.present? + end + + INDEX_PAGE_ERB = <<-HTML.strip_heredoc +

Browser support tables

+ HTML + + PAGE_ERB = <<-HTML.strip_heredoc +

<%= feature['title'] %>

+ +

<%= md_to_html feature['description'] %>

+ + + <% if feature['spec'].present? %> + + + + + <% end %> + + <% if feature['status'].present? %> + + + + + <% end %> +
Spec<%= feature['spec'] %>
Status<%= data['statuses'][feature['status']] %>
+ + <% ['desktop', 'mobile'].each do |type| %> + + + <% data["\#{type}_agents"].each do |agent_id, agent| %> + + <% end %> + + <% (0...(data['total_versions'])).reverse_each do |i| %> + <% next if data["\#{type}_agents"].none? { |_, agent| agent['versions'][i] } %> + <% if i == (data['total_versions'] - 8) %> + + + + <% end %> + > + <% data["\#{type}_agents"].each do |agent_id, agent| %> + <% version = agent['versions'][i] %> + <% if version %> + <% support = feature['stats'][agent_id][version].split(' ') %> + <% feature['prefix'] = true if support.include?('x') %> + + <% else %> + + <% end %> + <% end %> + + <% end %> +
<%= agent['browser'] %>
"> + Show all +
<%= version %> <%= support_to_note_indicators(support) %> 
+ <% end %> + +

Notes

+ + <% if feature['notes'].present? %> +

<%= md_to_html feature['notes'] %>

+ <% end %> + + <% if feature['notes_by_num'].present? %> +
    + <% feature['notes_by_num'].each do |num, note| %> +
  1. <%= md_to_html note %>

  2. + <% end %> +
+ <% end %> + + <% if feature['prefix'] %> +
+
* Partial support with prefix.
+
+ <% end %> + + <% if feature['bugs'].present? %> +

Bugs

+
    + <% feature['bugs'].each do |bug| %> +
  • <%= md_to_html bug['description'] %>

  • + <% end %> +
+ <% end %> + + <% if feature['links'].present? %> +

Resources

+ + <% end %> + +
+

+ Data by caniuse.com
+ Licensed under the Creative Commons Attribution License v4.0.
+ http://caniuse.com/#feat=<%= feature_id %> +

+
+ HTML + end +end diff --git a/public/icons/docs/support_tables/16.png b/public/icons/docs/support_tables/16.png new file mode 100644 index 0000000000000000000000000000000000000000..dd6cf1d342a8738f20a5bc3ad6b81a7c842fa52e GIT binary patch literal 747 zcmV7_?p#MD8#YA^nw!f zj^UvqbMBKH-1H8AQQ#Eh<2!GhVYSjVo8>3;@tl4Z{z3Pe0t5$t@zI>$_QZByj!9l?8#@S}uDz)3J?toPI z^}gLx6fc4%kd2eDaUlk&b-~KVhnQ*nU;68RKUQ^PC|*is`LQdyA8R(_?9jqVOk;5^ zVl+dDv(-F*l^1Z#lVG7Ix4GjNh_h@#vwCmH^Fj zmYy{AYAb-=)WT=1G(+xr4&wz>=tu%ABZDL?o>h)bQYD!jjoh!ir&_)%U`Qn@GmGD} zPFmr5!fQDRMIec=4jiu@C;r$?yE^$$qbn?*q09?Pan@6N+`D7tFDoBmLx3%84y!e) zXZ_UaK7l<*VUqlP&TdG$r8DlAyZz&T7*K5=z1-O&p0aiHa#t;S=%S7G(aSzQ;&JPk zmNk*3C|15mO3Ue%X`f~O5QOg|JI&!%mT1PJXL;J{OUTqz~ dS$2Bg+1^nKXv0OaB?ySW3g+_d9VtA!^; zuW8ai2xb|jLCM%bUon@SfM5F$a{gCe)Bb$n$7dVcPxFmituj829|0^fFDYK4;}kUs zff<5m`J(n?qxm2{=0C`VUi1G3Fs37yi@sKK@x-jYd9m_Xd;``tuN}O5wYt*U-19+L zb@LU%U5vh4^J@IU0m}COD}c`BX-4v?nQ_Eu)YL{srsmn%v-iQ+;lKF%A)7ZHy4pBT zX3pL&&el0kpS5vEeBVBD!Pj03K$i2Q*^iA~CtlyO^$(Ys z8P}CuUFTsM87OUksmty7&AtF$ab*C>+M97LsL+ChVl?P`aV7gP>uDLeJC#OLg_4jm z`Sw`O?brdi&`YlBf2^%tqMaX=Xe*&2t)NE` z*L3u@#R4n%&903XnQooXA|a@aIo$+rw0{zJ9z3g%3T7jzG-gmTy3u9Nj34KMFTScp z#>1Dx$MNwkyVeihvvv9Tv}dkqgvvkCUIQP4DK{O-m96^nnK5Iv3!nV#t=^gKFTdLR z)n(IasDMB#hKBGaTsI#6@Ui`vum4P}+sHZaN290im>)9656yP!{qRj#8+lx(`%4L# zA$BY}&yJt1Mvj{8w}x@T*)S?XrwEFe?e0T1?>_OrD{$pYjV?Z1L_YMH-<;#}nD*mB zM}PHc_UA9aTNpe$4oh>6hiW zF_D6nA+(GdhYQjt>q-O(r6ax7N%_--XBj`?cTCATXz2nCyFBb=0UWUxzMw(^1CKSq-9j6hv3oO*t#{F zkAIvvp_xlXpS^qicTdJ%*s^x?A$IrHy+q4pL?}qmvdfS+$V8t zl?>(-{*ntl>ndL|oJT9NJ9Bv){?xJQPBouhP!fah(ffV+j_-aq3UJ})UFlS-Ij)+~ z^JnHfGTx5+u+JPlXIA}e*dhH!JHDa)+`j|3^7F*)+mOB#xBBd#&oeG`qA&lLoU$sY zfPvZhoyrq8Hs{UQ0V=XR{S6r zdiv$T`rmi2VYxhX+YLLtrbQw_p_(BklZ?z25C7af-}7kn+%G)$`sSTS+&A1W95P#r zG0u-Kwr)D-d_@vkL!ONLKrZs6E7^yYK5X!CifBn_NTV&oM%ruRU9h(7DVB@zhH^eZ zBAvz<7s6*(t9iX-yk2U~{Aklb+s=iZkc&U(I`(1D&YdqGalx|d!X?}Ut8 zMaL`Y;YC{`OptTp>&d*8ju%J%YS9bghX8BK-T$%=R%?$pmKQU7iY6p70kxWo+^D8q> z6ag(lpoo7oo`VM+U;qa$vv+M>Wu!;X=9mn~Z?(TAKTo~$;KRHRdmMoO1v<&GIb(s> Q@Bjb+07*qoM6N<$g6kB%mjD0& literal 0 HcmV?d00001 diff --git a/public/icons/docs/support_tables/SOURCE b/public/icons/docs/support_tables/SOURCE new file mode 100644 index 00000000..ffa79609 --- /dev/null +++ b/public/icons/docs/support_tables/SOURCE @@ -0,0 +1 @@ +http://www.entypo.com/