From 0e6b0d7e432744091ad37ed14da6932656aac9b7 Mon Sep 17 00:00:00 2001 From: Stefan Schlott Date: Fri, 23 Aug 2013 19:45:19 +0200 Subject: [PATCH] Project overview page --- Gemfile | 1 + Gemfile.lock | 4 ++++ content/projects/index.html | 25 +++++++++++++++++++++++++ layouts/default.html | 2 +- layouts/project_intro.erb | 21 +++++++++++++++++++++ layouts/project_list.erb | 3 +++ lib/articlesummary.rb | 16 ++++++++++++++++ lib/projectpages.rb | 9 +++++++++ 8 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 content/projects/index.html create mode 100644 layouts/project_intro.erb create mode 100644 layouts/project_list.erb create mode 100644 lib/articlesummary.rb create mode 100644 lib/projectpages.rb diff --git a/Gemfile b/Gemfile index 5690efad..56e67122 100644 --- a/Gemfile +++ b/Gemfile @@ -8,4 +8,5 @@ gem 'adsf' gem 'sass' gem 'rdiscount' gem 't' +gem 'nokogiri' diff --git a/Gemfile.lock b/Gemfile.lock index 8958abe3..3a2b0ec2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -50,12 +50,15 @@ GEM rb-kqueue (>= 0.2) lumberjack (1.0.4) method_source (0.8.2) + mini_portile (0.5.1) multi_json (1.6.1) multipart-post (1.1.5) nanoc (3.6.4) cri (~> 2.3) nanoc3 (3.3.0) nanoc (>= 3.3.0) + nokogiri (1.6.0) + mini_portile (~> 0.5.0) oauth (0.4.7) oj (2.0.7) pry (0.9.12.2) @@ -105,6 +108,7 @@ DEPENDENCIES adsf guard-nanoc nanoc3 + nokogiri rdiscount sass systemu diff --git a/content/projects/index.html b/content/projects/index.html new file mode 100644 index 00000000..f00deee9 --- /dev/null +++ b/content/projects/index.html @@ -0,0 +1,25 @@ +----- +title: Projekte +kind: page +----- +<% + prj = projects_by_state +%> +<% if prj.has_key?('active') %> +

Aktive Projekte

+
+ <%= render 'project_list', :projects => prj['active'], :extended => true %> +
+<% end %> +<% if prj.has_key?('completed') %> +

Abgeschlossene Projekte

+
+ <%= render 'project_list', :projects => prj['completed'], :extended => true %> +
+<% end %> +<% if prj.has_key?('stalled') %> +

Ruhende Projekte

+
+ <%= render 'project_list', :projects => prj['stalled'], :extended => true %> +
+<% end %> diff --git a/layouts/default.html b/layouts/default.html index 2deb3971..31496a33 100644 --- a/layouts/default.html +++ b/layouts/default.html @@ -24,7 +24,7 @@
  • Wir über uns
  • Veranstaltungen
  • Aktivitäten -
  • Projekte +
  • Projekte
  • Members
  • Planet CCCS
  • Archiv diff --git a/layouts/project_intro.erb b/layouts/project_intro.erb new file mode 100644 index 00000000..12cb0de0 --- /dev/null +++ b/layouts/project_intro.erb @@ -0,0 +1,21 @@ +----- +filter: erb +----- +<% + prjname = @project.identifier.split('/')[2] +%> +
    +
    +

    <%= @project[:title]%>

    + <% if @project.attributes.has_key?(:subtitle) then %> +

    <%= @project[:subtitle] %>

    + <% end %> +
    +
    +
    + <% if @extended then %> + <%= article_summary(@project) %> + <% end %> +
    +
    + diff --git a/layouts/project_list.erb b/layouts/project_list.erb new file mode 100644 index 00000000..1922ff04 --- /dev/null +++ b/layouts/project_list.erb @@ -0,0 +1,3 @@ +<% @projects.each do |prj| %> + <%= render 'project_intro', :project => prj, :classes => "hyphenate", :extended => @extended %> +<% end %> diff --git a/lib/articlesummary.rb b/lib/articlesummary.rb new file mode 100644 index 00000000..0fd993b2 --- /dev/null +++ b/lib/articlesummary.rb @@ -0,0 +1,16 @@ +require 'nokogiri' + +def article_summary(item, separator=//) + # Has intro attribute? Use this + if (item[:intro] && item[:intro].length>0) + return parse_markdown(item[:intro]) + end + # Try to extract marked teaser from article + summary,body = item.compiled_content.split(separator) + if (body) + return summary + end + # Else: Extract first top level html element + doc = Nokogiri::Slop(item.compiled_content) + return doc.children[0].to_html +end diff --git a/lib/projectpages.rb b/lib/projectpages.rb new file mode 100644 index 00000000..5e237adc --- /dev/null +++ b/lib/projectpages.rb @@ -0,0 +1,9 @@ +def projects_by_state() + @cache_projects ||= items.select { |i| i[:kind] == 'project' }.sort_by { |i| i[:title] } + @cache_projects_by_state ||= @cache_projects.group_by { |item| item[:status] } + @cache_projects_by_state +end + +def project_id(project) + project.identifier.split('/')[2] +end