diff --git a/lib/view.rb b/lib/view.rb index 72b7275..cc854ac 100644 --- a/lib/view.rb +++ b/lib/view.rb @@ -1,329 +1,347 @@ # Copyright (C) 2011 Cornelius Schumacher # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. class View attr_accessor :enable_disqus,:enable_search,:manifest,:library,:group_name,:templates attr_reader :root def initialize handler @manifest_handler = handler end def create output_dir assert_dir output_dir system "cp #{view_dir}/favicon.ico #{output_dir}" if templates == "two-column" system "cp #{view_dir}/ios.ico #{output_dir}" end assert_dir "#{output_dir}/public" system "cp #{view_dir}/public/* #{output_dir}/public/" assert_dir "#{output_dir}/schema" system "cp #{schema_dir}/* #{output_dir}/schema" create_inqlude_all(output_dir) @root = "" Dir.glob("#{view_dir}*.html.haml") do |file| template_name = (File.basename file).split(".").first if !["layout","group","library"].include? template_name render_template template_name, output_dir end end groups_path = "#{output_dir}/groups/" assert_dir groups_path @root = "../" @group_name = "kde-frameworks" file_name = "groups/kde-frameworks" render_template "group", output_dir, file_name library_path = "#{output_dir}/libraries/" assert_dir library_path @root = "../" @manifest_handler.libraries.each do |library| @library = library @manifest = library.latest_manifest file_name = "libraries/" + library.name render_template "library", output_dir, file_name end if templates == 'two-column' topics_path = "#{output_dir}/topics/" assert_dir topics_path @root = "../" topics.each do |topic| @topic = topic file_name = "topics/" + topic render_template "topic", output_dir, file_name end end end def create_inqlude_all(output_dir) File.open(File.join(output_dir, "inqlude-all.json"), "w") do |f| f.write(@manifest_handler.generate_inqlude_all) end end def template_directory_exists? File.directory?(view_dir) ? true : false end def render_template name, output_dir, file_name = nil layout = template "layout" layout_engine = Haml::Engine.new layout page = template name @content = Haml::Engine.new( page ).render( binding ) output_path = "" if file_name output_path = "#{output_dir}/#{file_name}.html" + @file = file_name else output_path = "#{output_dir}/#{name}.html" + @file = name end File.open output_path, "w" do |file| file.puts layout_engine.render( binding ) end end def yank @content end def style_sheet "" end def m @manifest end def t @topic end def link_to_manifest name "#{name}" end def link_to_library name, display_name "#{display_name}" end def link url "#{url}" end def link_to title, url if url !~ /^mailto:/ && url !~ /^http:/ && url !~ /^https:/ && url !~ /^ftp:/ url = "#{@root}#{url}.html" end "#{title}" end def link_to_group name, display_name "#{display_name}" end def link_to_topic name "#{name}" end def list_attribute attribute attr = @manifest.send(attribute) return "" if !attr || attr.size == 0 # We assume attribute is plural formed by adding an 's' label = attribute.capitalize entries = Array.new attr.each do |a| entries.push markup_email( a ) end if attr.size > 1 return list_attribute_content label, entries.join(", ") else return list_attribute_content label[0..-2], entries.first end end def list_attribute_content label, value out = "
" out += "
" + label + ":" + "
" out += "
" + value + "
" out += "
" out end def version_content if @manifest.class == ManifestGeneric raise InqludeError.new("Can't get version for generic manifest '#{@manifest.name}'") end out = @manifest.version out += " (#{@manifest.maturity})" out += "" out += "released on #{@manifest.release_date}" out += "" if !old_versions.empty? out += "" out += "(older versions: #{old_versions.join(", ")})" out += "" end out end + + def add_footer + if @file == "index" + text = 'Last updated on ' + Date.today.to_s + else + text = "" + end + out = "Inqlude is a " + out += link_to "KDE project", "http://kde.org" + out += "|" + out += link_to "Legal", "http://www.kde.org/community/whatiskde/impressum.php" + out += "" + out += text + out += "" + out + end def markup_email email if email =~ /(.*) <(.*)>/ name = $1 email = $2 return "#{name}" else return email end end def link_item key, label if m.urls.send(key) out = "
  • #{label}
  • " return out else return "" end end def custom_urls out = "" urls = @manifest.urls.custom if urls && !urls.empty? urls.each do |text,url| out += "
  • #{text}
  • " end end out end def libraries maturity = nil @manifest_handler.libraries(maturity) end def unreleased_libraries @manifest_handler.unreleased_libraries end def commercial_libraries @manifest_handler.commercial_libraries end def latest_libraries @manifest_handler.latest_libraries end def group_title if @group_name == "kde-frameworks" return "KDE Frameworks" end "" end def group @manifest_handler.group(@group_name) end def topic name @manifest_handler.topic(name) end def no_of_libraries topic @manifest_handler.no_of_libraries(topic) end def disqus_enabled? @enable_disqus end def more_urls? @manifest.urls.class.all_keys.each do |key, type| if key != :homepage && key != :screenshots && key != :logo && key != :description_source if @manifest.urls.send(key) return true end end end return false end def editor_url url = "https://github.com/cornelius/inqlude-data/blob/master/" url += @manifest.name url += "/#{@manifest.name}.#{@manifest.release_date}.manifest" url end def old_versions versions = @library.versions.reject{ |v| v == @manifest.version } versions.reverse end def render_description doc = Kramdown::Document.new(@manifest.description) doc.to_html end def topics ['API', 'Artwork', 'Bindings', 'Communication', 'Data', 'Desktop', 'Development', 'Graphics', 'Logging', 'Mobile', 'Multimedia', 'Printing', 'QML', 'Scripting', 'Security', 'Text', 'Web', 'Widgets'] end private def assert_dir name Dir::mkdir name unless File.exists? name end def template name File.read( view_dir + "#{name}.html.haml" ) end def view_dir File.expand_path( File.dirname( __FILE__ ) + "/../view/#{templates}" ) + "/" end def schema_dir File.expand_path( File.dirname( __FILE__ ) + "/../schema/" ) + "/" end end diff --git a/spec/unit/view_spec.rb b/spec/unit/view_spec.rb index 17d8206..ef3c48a 100644 --- a/spec/unit/view_spec.rb +++ b/spec/unit/view_spec.rb @@ -1,244 +1,274 @@ require File.expand_path('../spec_helper', __FILE__) describe View do context "general libraries" do include_context "manifest_files" it "shows version content" do mh = ManifestHandler.new settings mh.read_remote v = View.new mh v.library = mh.library "awesomelib" v.manifest = v.library.latest_manifest expect(v.version_content).to include "0.2.0" end it "throws error on showing version content of generic manifest" do mh = ManifestHandler.new settings mh.read_remote v = View.new mh v.library = mh.library "newlib" v.manifest = v.library.latest_manifest expect{v.version_content}.to raise_error(InqludeError) end it "returns list of unreleased libraries" do mh = ManifestHandler.new settings mh.read_remote v = View.new mh expect(v.unreleased_libraries.count).to eq mh.unreleased_libraries.count expect(v.unreleased_libraries.first.name).to eq mh.unreleased_libraries.first.name end it "returns list of commercial libraries" do mh = ManifestHandler.new settings mh.read_remote v = View.new mh expect(v.commercial_libraries.count).to eq mh.commercial_libraries.count expect(v.commercial_libraries.first.name).to eq mh.commercial_libraries.first.name end it "returns list of latest libraries" do mh = ManifestHandler.new settings mh.read_remote v = View.new mh expect(v.latest_libraries.count).to eq mh.latest_libraries.count expect(v.latest_libraries.first.name).to eq mh.latest_libraries.first.name end it "returns group" do mh = ManifestHandler.new settings mh.read_remote v = View.new mh v.group_name = "kde-frameworks" expect(v.group.count).to eq mh.group("kde-frameworks").count expect(v.group.first.name).to eq mh.group("kde-frameworks").first.name end it "returns topic" do mh = ManifestHandler.new settings mh.read_remote v = View.new mh expect(v.topic("API").count).to eq 2 expect(v.topic("API").first.name).to eq 'awesomelib' end end context "generic manifest and one release" do include GivenFilesystemSpecHelpers use_given_filesystem before(:each) do @manifest_dir = given_directory do given_directory("karchive") do given_file("karchive.manifest", :from => "karchive-generic.manifest") given_file("karchive.2014-02-01.manifest", :from => "karchive-release-beta.manifest") end end s = Settings.new s.manifest_path = @manifest_dir s.offline = true @manifest_handler = ManifestHandler.new s @manifest_handler.read_remote end it "shows version content" do v = View.new @manifest_handler v.library = @manifest_handler.library "karchive" v.manifest = v.library.latest_manifest expect(v.version_content).to include "4.9.90" expect(v.version_content).not_to include( "older versions" ) end end context "generic manifest and two releases" do include GivenFilesystemSpecHelpers use_given_filesystem before(:each) do @manifest_dir = given_directory do given_directory("karchive") do given_file("karchive.manifest", :from => "karchive-generic.manifest") given_file("karchive.2014-02-01.manifest", :from => "karchive-release-beta.manifest") given_file("karchive.2014-03-04.manifest", :from => "karchive-release2.manifest") end end s = Settings.new s.manifest_path = @manifest_dir s.offline = true @manifest_handler = ManifestHandler.new s @manifest_handler.read_remote end it "shows version content" do v = View.new @manifest_handler v.library = @manifest_handler.library "karchive" v.manifest = v.library.latest_manifest expect(v.version_content).to include "4.9.90" expect(v.version_content).to include "4.97.0" expect(v.version_content).to include( "older versions" ) end it "creates inqlude-all.json" do v = View.new @manifest_handler dir = given_directory v.create_inqlude_all(dir) all_path = File.join(dir, "inqlude-all.json") expect(File.exists?(all_path)).to be true expected_all_content = File.read(test_data_path("inqlude-all-karchive.json")) expect(File.read(all_path)).to eq expected_all_content - end - + end end context "rendertest" do before(:each) do @view = View.new double @view.manifest = Manifest.parse_file(test_data_path("rendertest-generic.manifest")) end it "renders description as markdown" do rendered = @view.render_description expected = <This description tests rendering. It tests rendering markdown to HTML.

    This includes:

    EOT expect(rendered).to eq expected end it "generates link items" do expected_html = "
  • Code
  • " expect(@view.link_item("vcs", "Code")).to eq expected_html end it "generates custom URLs" do expected_html = "
  • Special
  • " expect(@view.custom_urls).to eq expected_html end it "returns if there are more URLs" do expect(@view.more_urls?).to be true - end + end end context "templates" do include_context "manifest_files" include GivenFilesystemSpecHelpers use_given_filesystem before(:each) do mh = ManifestHandler.new(settings) mh.read_remote v = View.new mh v.templates = "one-column" dir = given_directory v.create(dir) @path = File.join(dir, "index.html") end it "generates templates" do expect(File.exists?(@path)).to be true end it "checks content" do html_data = File.read(@path) nokogiri_object = Nokogiri::HTML(html_data) paragraphs_content = nokogiri_object.xpath("//p").to_s expected_content = '

    The goal of Inqlude is to provide a comprehensive listing of all existing libraries for developers of Qt applications. If you are creating applications using the Qt toolkit, and are looking for libraries, components or modules to use, Inqlude is the place where you find all information and pointers to get started.

    This is a young project, we are still collecting information, and are building up the web site and the tools around it. If you would like to get involved, read more about how to contribute, or go to the mailing list inqlude.kde.org to directly talk to us. See you there.

    ' expect(paragraphs_content).to eq(expected_content) end end + + context "footer" do + include_context "manifest_files" + + include GivenFilesystemSpecHelpers + + use_given_filesystem + + before(:each) do + mh = ManifestHandler.new(settings) + mh.read_remote + @v = View.new mh + @v.templates = "two-column" + + @dir = given_directory + end + + it "generates footer for home page" do + @v.render_template("index", @dir) + rendered = @v.add_footer + expected = 'Last updated on ' + Date.today.to_s + expect(rendered).to include expected + end + + it "generates footer for sub pages" do + @v.render_template("about", @dir) + rendered = @v.add_footer + expected = 'Last updated on ' + Date.today.to_s + expect(rendered).not_to include expected + end + end end diff --git a/view/two-column/index.html.haml b/view/two-column/index.html.haml index b7b1889..b484998 100644 --- a/view/two-column/index.html.haml +++ b/view/two-column/index.html.haml @@ -1,194 +1,191 @@ %h3 Stable libraries %table.table-hover.col-sm-12 - libraries(:stable).each do |library| %tr %td.name - if library.latest_manifest.display_name = link_to_library(library.latest_manifest.name, library.latest_manifest.display_name) - else = link_to_library(library.latest_manifest.name, library.latest_manifest.name) %td.summary = library.manifests.last.summary %td.platforms - if library.manifests.last.platforms.include? 'Linux' %i.fa.fa-linux - if library.manifests.last.platforms.include? 'OS X' %i.fa.fa-apple - if library.manifests.last.platforms.include? 'Windows' %i.fa.fa-windows - if library.manifests.last.platforms.include? 'Android' %i.fa.fa-android - if library.manifests.last.platforms.include? 'iOS' %img{:src => "ios.ico", :height => "15%;"} %td.topics - if library.manifests.last.topics - library.manifests.last.topics.each do |topic| - if (topic != library.manifests.last.topics.last) = topic + ", " - else = topic %td.licenses - library.manifests.last.licenses.each do |license| - if (license != library.manifests.last.licenses.last) = license + ", " - else = license %h3 Developer releases %table.table-hover.col-sm-12 - libraries(:beta).each do |library| %tr %td.name - if library.latest_manifest.display_name = link_to_library(library.latest_manifest.name, library.latest_manifest.display_name) - else = link_to_library(library.latest_manifest.name, library.latest_manifest.name) %td.summary = library.manifests.last.summary %td.platforms - if library.manifests.last.platforms.include? 'Linux' %i.fa.fa-linux - if library.manifests.last.platforms.include? 'OS X' %i.fa.fa-apple - if library.manifests.last.platforms.include? 'Windows' %i.fa.fa-windows - if library.manifests.last.platforms.include? 'Android' %i.fa.fa-android - if library.manifests.last.platforms.include? 'iOS' %img{:src => "ios.ico", :height => "15%;"} %td.topics - if library.manifests.last.topics - library.manifests.last.topics.each do |topic| - if (topic != library.manifests.last.topics.last) = topic + ", " - else = topic %td.licenses - library.manifests.last.licenses.each do |license| - if (license != library.manifests.last.licenses.last) = license + ", " - else = license - libraries(:alpha).each do |library| %tr %td.name - if library.latest_manifest.display_name = link_to_library(library.latest_manifest.name, library.latest_manifest.display_name) - else = link_to_library(library.latest_manifest.name, library.latest_manifest.name) %td.summary = library.manifests.last.summary %td.platforms - if library.manifests.last.platforms.include? 'Linux' %i.fa.fa-linux - if library.manifests.last.platforms.include? 'OS X' %i.fa.fa-apple - if library.manifests.last.platforms.include? 'Windows' %i.fa.fa-windows - if library.manifests.last.platforms.include? 'Android' %i.fa.fa-android - if library.manifests.last.platforms.include? 'iOS' %img{:src => "ios.ico", :height => "15%;"} %td.topics - if library.manifests.last.topics - library.manifests.last.topics.each do |topic| - if (topic != library.manifests.last.topics.last) = topic + ", " - else = topic %td.licenses - library.manifests.last.licenses.each do |license| - if (license != library.manifests.last.licenses.last) = license + ", " - else = license - libraries(:edge).each do |library| %tr %td.name - if library.latest_manifest.display_name = link_to_library(library.latest_manifest.name, library.latest_manifest.display_name) - else = link_to_library(library.latest_manifest.name, library.latest_manifest.name) %td.summary = library.manifests.last.summary %td.platforms - if library.manifests.last.platforms.include? 'Linux' %i.fa.fa-linux - if library.manifests.last.platforms.include? 'OS X' %i.fa.fa-apple - if library.manifests.last.platforms.include? 'Windows' %i.fa.fa-windows - if library.manifests.last.platforms.include? 'Android' %i.fa.fa-android - if library.manifests.last.platforms.include? 'iOS' %img{:src => "ios.ico", :height => "15%;"} %td.topics - if library.manifests.last.topics - library.manifests.last.topics.each do |topic| - if (topic != library.manifests.last.topics.last) = topic + ", " - else = topic %td.licenses - library.manifests.last.licenses.each do |license| - if (license != library.manifests.last.licenses.last) = license + ", " - else = license %h3 Unreleased libraries %table.table-hover.col-sm-12 - unreleased_libraries.each do |library| %tr %td.name - if library.latest_manifest.display_name = link_to_library(library.latest_manifest.name, library.latest_manifest.display_name) - else = link_to_library(library.latest_manifest.name, library.latest_manifest.name) %td.summary = library.manifests.last.summary %td.platforms - if library.manifests.last.platforms.include? 'Linux' %i.fa.fa-linux - if library.manifests.last.platforms.include? 'OS X' %i.fa.fa-apple - if library.manifests.last.platforms.include? 'Windows' %i.fa.fa-windows - if library.manifests.last.platforms.include? 'Android' %i.fa.fa-android - if library.manifests.last.platforms.include? 'iOS' %img{:src => "ios.ico", :height => "15%;"} %td.topics - if library.manifests.last.topics - library.manifests.last.topics.each do |topic| - if (topic != library.manifests.last.topics.last) = topic + ", " - else = topic %td.licenses - library.manifests.last.licenses.each do |license| - if (license != library.manifests.last.licenses.last) = license + ", " - else = license %hr -%span.footer - Last updated on #{Date.today} - :javascript $('table.table-hover.col-sm-12 tr').click( function() { window.location = $(this).find('a').attr('href'); }).hover( function() { $(this).toggleClass('hover'); }); \ No newline at end of file diff --git a/view/two-column/layout.html.haml b/view/two-column/layout.html.haml index 3c8b5c6..5c92c7c 100644 --- a/view/two-column/layout.html.haml +++ b/view/two-column/layout.html.haml @@ -1,102 +1,95 @@ !!! %head %meta{ :charset => 'utf-8' } = style_sheet - if enable_search %body .container-fluid.header - .col-sm-8.left .ribbon = link_to "Alpha", "about" %h1 %span.logo>< = link_to "#in", "index" %span.logo.green>< = link_to "q", "index" %span.logo>< = link_to "lude", "index" %h2 %span.subtitle>< = link_to "The Qt library archive", "index" - .col-sm-4.right - if enable_search %gcse:searchbox-only{ resultsUrl: "https://inqlude.org/search.html" } Loading... %br{ :clear => "all" } - .container-fluid.content - - .col-sm-3.side-bar - %p{:class => "description"} - Inqlude provides a comprehensive listing of all existing libraries for developers of applications using the #{link_to "Qt toolkit", "http://qt-project.org"}. Inqlude is run by the community and open for contributions. - %ul.titles-list - %li - = link_to "About", "about" - %li - = link_to "How to get libraries", "get" - %li - = link_to "How to contribute", "contribute" + .col-sm-3.side-bar + %p{:class => "description"} + Inqlude provides a comprehensive listing of all existing libraries for developers of applications using the #{link_to "Qt toolkit", "http://qt-project.org"}. Inqlude is run by the community and open for contributions. + %ul.titles-list + %li + = link_to "About", "about" + %li + = link_to "How to get libraries", "get" + %li + = link_to "How to contribute", "contribute" - %p{:class => "title"} Latest releases - %hr - %ul.side-list - %li - - latest_libraries.each do |library| - - if library.latest_manifest.group == "kde-frameworks" - = link_to_group('kde-frameworks', 'KDE Frameworks') - -else - - if library.latest_manifest.display_name - = link_to_library(library.latest_manifest.name, library.latest_manifest.display_name) - - else - = link_to_library(library.latest_manifest.name, library.latest_manifest.name) - %date - = '(' + library.latest_manifest.release_date + ')' - %br + %p{:class => "title"} Latest releases + %hr + %ul.side-list + %li + - latest_libraries.each do |library| + - if library.latest_manifest.group == "kde-frameworks" + = link_to_group('kde-frameworks', 'KDE Frameworks') + -else + - if library.latest_manifest.display_name + = link_to_library(library.latest_manifest.name, library.latest_manifest.display_name) + - else + = link_to_library(library.latest_manifest.name, library.latest_manifest.name) + %date + = '(' + library.latest_manifest.release_date + ')' + %br - %p{:class => "title"} Topics - %hr - %ul.side-list - %li - = link_to "All", "all" + %p{:class => "title"} Topics + %hr + %ul.side-list + %li + = link_to "All", "all" + %number + = ' (' + libraries.length.to_s + ')' + %li + - topics.each do |topic| + = link_to_topic(topic) %number - = ' (' + libraries.length.to_s + ')' - %li - - topics.each do |topic| - = link_to_topic(topic) - %number - = ' (' + no_of_libraries(topic).to_s + ')' - %br + = ' (' + no_of_libraries(topic).to_s + ')' + %br - .col-sm-9.main-pane - = yank + .col-sm-9.main-pane + = yank - %br{ :clear => "all" } + %br{ :clear => "all" } %hr - .col-sm-12.legal - Inqlude is a - = link_to "KDE project", "http://kde.org" - = "|" - = link_to "Legal", "http://www.kde.org/community/whatiskde/impressum.php" + .col-sm-12.footer + = add_footer - - if enable_search - :javascript - (function() { - var cx = '012526638842992167133:g7thmrlp2uw'; - var gcse = document.createElement('script'); - gcse.type = 'text/javascript'; - gcse.async = true; - gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + - '//cse.google.com/cse.js?cx=' + cx; - var s = document.getElementsByTagName('script')[0]; - s.parentNode.insertBefore(gcse, s); - })(); + - if enable_search + :javascript + (function() { + var cx = '012526638842992167133:g7thmrlp2uw'; + var gcse = document.createElement('script'); + gcse.type = 'text/javascript'; + gcse.async = true; + gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + + '//cse.google.com/cse.js?cx=' + cx; + var s = document.getElementsByTagName('script')[0]; + s.parentNode.insertBefore(gcse, s); + })(); diff --git a/view/two-column/public/inqlude.css b/view/two-column/public/inqlude.css index d15eafc..b668754 100644 --- a/view/two-column/public/inqlude.css +++ b/view/two-column/public/inqlude.css @@ -1,265 +1,262 @@ body { color: #111; margin: 0px; font-family: 'Droid Sans', arial, serif; font-size: 155%; } a:link { color: #44a51c; text-decoration: none; } a:visited { color: #2F7213; text-decoration: none; } a:hover { color: #44a51c; text-decoration: underline; } a:active { color: #2F7213; text-decoration: underline; } .ribbon { background-color: #a00; overflow: hidden; position: absolute; left: -2em; top: 1em; -moz-transform: rotate(-45deg); -webkit-transform: rotate(-45deg); -moz-box-shadow: 0 0 1em #888; -webkit-box-shadow: 0 0 1em #888; } .ribbon a { border: 1px solid #faa; color: #fff; display: block; font: bold 81.25% 'Helvetiva Neue', Helvetica, Arial, sans-serif; margin: 0.05em 0 0.075em 0; padding: 0.5em 3.5em; text-align: center; text-decoration: none; text-shadow: 0 0 0.5em #444; } h1 { font-family: monospace; font-size: 180%; margin-bottom: 0px; } h1 .logo { font-size: 180%; font-weight: bold; } h2 { margin-top: -5px; } h2 .subtitle { font-weight: bold; font-size: 78%; } .logo a { color: #111; text-decoration: none; } .logo.green a { color: #80C342; text-decoration: none; } .subtitle a { color: #111; text-decoration: none; } h3 { font-weight: bold; font-size: 140%; margin-top: 0px; padding-bottom: 15px; } h4 { font-weight: bold; font-size: 120%; } .container-fluid.header { -webkit-box-shadow: 0px 6px 0px rgba(50, 50, 50, 0.5); -moz-box-shadow: 0px 6px 0px rgba(50, 50, 50, 0.5); box-shadow: 0px 2px 4px rgba(0,0,0,.2); background-color: #eee; padding-left: 0px; padding-right: 0px; } .col-sm-8.left { margin-top: 0px; padding: 0px; padding-bottom: 5px; padding-left: 55px; } .col-sm-4.right { float: right; text-align: right; padding-top: 40px; padding-right: 30px; } .container-fluid.content { padding-right: 15px; padding-left: 15px; } .col-sm-3.side-bar { - padding: 20px; - padding-top: 30px; + padding: 30px; } .description { text-align: justify; } ul.titles-list { list-style-type: circle; padding-left: 15px; } .title { font-weight: bold; margin-top: 30px; } ul.side-list { list-style-type: none; padding-left: 0px; } date { float: right; } number { font-size: 80%; } .col-sm-9.main-pane { - padding-top: 30px; - padding-left: 15px; - padding-right: 20px; + padding: 30px; } table.table-hover.col-sm-12 { margin-bottom: 20px; } table.table-hover.col-sm-12 tr:hover td { background-color: #a4d477; cursor: pointer; } tr:nth-child(odd) { background-color: #eee; } td { vertical-align: top; padding: 5px; padding-left: 6px; } td.name { width: 15%; } td.summary { width: 32%; } td.platforms { width: 15%; } td.topics { width: 19%; } td.licenses { width: 19%; } .code { background-color: #111; color: #eee; padding: 10px; font-family: monospace; margin: 6px; } .release-date { font-size: 80%; margin-left: 5px; margin-right: 5px; } .old-versions { font-size: 80%; } home { float: right; font-style: italic; } -.footer { +.footer-text { float: right; - font-size: 80%; font-style: italic; } .edit-link { float: right; font-size: 80%; } -.col-sm-12.legal { +.col-sm-12.footer { text-align: center; font-size: 75%; - padding-bottom: 10px; + padding: 30px; + padding-top: 0px; } .attribute { margin: 8px; margin-left: 10%; } .attribute .label { display: inline; color: #555; width: 120px; text-align: right; float: left; margin-right: 8px; font-size: inherit; font-weight: normal; } .attribute .value { display: inline; } i.fa { font-size: 16px; margin-left: 2px; } hr { margin-top: 0px; }