refinerycms-project_portfolios 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/controllers/admin/project_portfolios_controller.rb +8 -0
- data/app/controllers/project_portfolios_controller.rb +33 -0
- data/app/helpers/project_portfolio_helper.rb +17 -0
- data/app/models/project_portfolio.rb +12 -0
- data/app/views/admin/project_portfolios/_actions.html.erb +28 -0
- data/app/views/admin/project_portfolios/_form.html.erb +86 -0
- data/app/views/admin/project_portfolios/_project_portfolio.html.erb +18 -0
- data/app/views/admin/project_portfolios/_project_portfolios.html.erb +2 -0
- data/app/views/admin/project_portfolios/_records.html.erb +18 -0
- data/app/views/admin/project_portfolios/_sortable_list.html.erb +7 -0
- data/app/views/admin/project_portfolios/edit.html.erb +1 -0
- data/app/views/admin/project_portfolios/index.html.erb +10 -0
- data/app/views/admin/project_portfolios/new.html.erb +1 -0
- data/app/views/project_portfolios/_popup_portfolio.html.erb +14 -0
- data/app/views/project_portfolios/index.html.erb +68 -0
- data/app/views/project_portfolios/show.html.erb +51 -0
- data/config/locales/en.yml +25 -0
- data/config/locales/fr.yml +25 -0
- data/config/locales/lolcat.yml +25 -0
- data/config/locales/nb.yml +21 -0
- data/config/locales/nl.yml +21 -0
- data/config/routes.rb +11 -0
- data/db/migrate/create_project_portfolios.rb +34 -0
- data/db/seeds/project_portfolios.rb +21 -0
- data/lib/generators/refinerycms_project_portfolios_generator.rb +6 -0
- data/lib/refinerycms-project_portfolios.rb +30 -0
- data/lib/tasks/project_portfolios.rake +13 -0
- data/public/images/close_yellow_icon.png +0 -0
- data/public/javascripts/jquery.bpopup.js +10 -0
- data/public/javascripts/jquery.easing.js +205 -0
- data/public/javascripts/jquery.quicksand.js +307 -0
- data/public/stylesheets/portfolio.css +130 -0
- metadata +125 -0
@@ -0,0 +1,33 @@
|
|
1
|
+
class ProjectPortfoliosController < ApplicationController
|
2
|
+
|
3
|
+
before_filter :find_all_project_portfolios
|
4
|
+
before_filter :find_page
|
5
|
+
helper :project_portfolio
|
6
|
+
|
7
|
+
def index
|
8
|
+
# you can use meta fields from your model instead (e.g. browser_title)
|
9
|
+
# by swapping @page for @project_portfolio in the line below:
|
10
|
+
#present(@page)
|
11
|
+
@portfolios = ProjectPortfolio.all
|
12
|
+
@tags = ProjectPortfolio.tag_counts_on(:tags)
|
13
|
+
end
|
14
|
+
|
15
|
+
def show
|
16
|
+
@project_portfolio = ProjectPortfolio.find(params[:id])
|
17
|
+
|
18
|
+
# you can use meta fields from your model instead (e.g. browser_title)
|
19
|
+
# by swapping @page for @project_portfolio in the line below:
|
20
|
+
present(@page)
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
|
25
|
+
def find_all_project_portfolios
|
26
|
+
@project_portfolios = ProjectPortfolio.order('position ASC')
|
27
|
+
end
|
28
|
+
|
29
|
+
def find_page
|
30
|
+
@page = Page.where(:link_url => "/project_portfolios").first
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module ProjectPortfolioHelper
|
2
|
+
def render_thumbnail(portfolio)
|
3
|
+
if portfolio.thumbnail_url.blank?
|
4
|
+
image_fu portfolio.thumbnail, nil
|
5
|
+
else
|
6
|
+
image_tag(portfolio.thumbnail_url)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def render_image(portfolio)
|
11
|
+
if portfolio.image_url.blank?
|
12
|
+
image_fu portfolio.image, :width => '400'
|
13
|
+
elsif portfolio.image_url.present?
|
14
|
+
image_tag(portfolio.image_url, :width => '400')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class ProjectPortfolio < ActiveRecord::Base
|
2
|
+
|
3
|
+
acts_as_indexed :fields => [:project_name, :title]
|
4
|
+
|
5
|
+
validates :project_name, :presence => true, :uniqueness => true
|
6
|
+
|
7
|
+
belongs_to :thumbnail, :class_name => 'Image'
|
8
|
+
belongs_to :image, :class_name => 'Image'
|
9
|
+
|
10
|
+
acts_as_taggable
|
11
|
+
|
12
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<ul>
|
2
|
+
<% if Admin::ProjectPortfoliosController.searchable? %>
|
3
|
+
<li>
|
4
|
+
<%= render :partial => "/shared/admin/search",
|
5
|
+
:locals => {
|
6
|
+
:url => admin_project_portfolios_path
|
7
|
+
} %>
|
8
|
+
</li>
|
9
|
+
<% end %>
|
10
|
+
<li>
|
11
|
+
<%= link_to t('.create_new'), new_admin_project_portfolio_path,
|
12
|
+
:class => "add_icon" %>
|
13
|
+
</li>
|
14
|
+
<% if !searching? and Admin::ProjectPortfoliosController.sortable? and ProjectPortfolio.count > 1 %>
|
15
|
+
<li>
|
16
|
+
<%= link_to t('.reorder', :what => "Project Portfolios"),
|
17
|
+
admin_project_portfolios_path,
|
18
|
+
:id => "reorder_action",
|
19
|
+
:class => "reorder_icon" %>
|
20
|
+
|
21
|
+
<%= link_to t('.reorder_done', :what => "Project Portfolios"),
|
22
|
+
admin_project_portfolios_path,
|
23
|
+
:id => "reorder_action_done",
|
24
|
+
:style => "display: none;",
|
25
|
+
:class => "reorder_icon" %>
|
26
|
+
</li>
|
27
|
+
<% end %>
|
28
|
+
</ul>
|
@@ -0,0 +1,86 @@
|
|
1
|
+
<%= form_for [:admin, @project_portfolio] do |f| -%>
|
2
|
+
<%= render :partial => "/shared/admin/error_messages", :locals => {
|
3
|
+
:object => @project_portfolio,
|
4
|
+
:include_object_name => true
|
5
|
+
} %>
|
6
|
+
|
7
|
+
<div class='field'>
|
8
|
+
<%= f.label :project_name -%>
|
9
|
+
<%= f.text_field :project_name, :class => 'larger widest' -%>
|
10
|
+
</div>
|
11
|
+
|
12
|
+
<div class='field'>
|
13
|
+
<%= f.label :title -%>
|
14
|
+
<%= f.text_field :title -%>
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<div class='field'>
|
18
|
+
<%= f.label :thumbnail -%>
|
19
|
+
<%= render :partial => "/shared/admin/image_picker", :locals => {
|
20
|
+
:f => f,
|
21
|
+
:field => :thumbnail_id,
|
22
|
+
:image => @project_portfolio.thumbnail,
|
23
|
+
:toggle_image_display => false
|
24
|
+
} %>
|
25
|
+
</div>
|
26
|
+
OR
|
27
|
+
<div class='field'>
|
28
|
+
<%= f.label :thumbnail_url -%>
|
29
|
+
<%= f.text_field :thumbnail_url -%>
|
30
|
+
</div>
|
31
|
+
|
32
|
+
<div class='field'>
|
33
|
+
<%= f.label :image -%>
|
34
|
+
<%= render :partial => "/shared/admin/image_picker", :locals => {
|
35
|
+
:f => f,
|
36
|
+
:field => :image_id,
|
37
|
+
:image => @project_portfolio.image,
|
38
|
+
:toggle_image_display => false
|
39
|
+
} %>
|
40
|
+
</div>
|
41
|
+
OR
|
42
|
+
<div class='field'>
|
43
|
+
<%= f.label :image_url -%>
|
44
|
+
<%= f.text_field :image_url -%>
|
45
|
+
</div>
|
46
|
+
|
47
|
+
<div class='field'>
|
48
|
+
<%= f.label :tag_list -%>
|
49
|
+
<%= f.text_field :tag_list -%>
|
50
|
+
</div>
|
51
|
+
|
52
|
+
<div class='field'>
|
53
|
+
<div id='page-tabs' class='clearfix ui-tabs ui-widget ui-widget-content ui-corner-all'>
|
54
|
+
<ul id='page_parts'>
|
55
|
+
<% [:description].each_with_index do |part, part_index| %>
|
56
|
+
<li class='ui-state-default<%= ' ui-state-active' if part_index == 0 %>'>
|
57
|
+
<%= link_to part.to_s.titleize, "##{part}" %>
|
58
|
+
</li>
|
59
|
+
<% end %>
|
60
|
+
</ul>
|
61
|
+
|
62
|
+
<div id='page_part_editors'>
|
63
|
+
<% [:description].each do |part| %>
|
64
|
+
<div class='page_part' id='<%= part %>'>
|
65
|
+
<%= f.text_area part, :rows => 20, :class => 'wymeditor widest' -%>
|
66
|
+
</div>
|
67
|
+
<% end %>
|
68
|
+
</div>
|
69
|
+
</div>
|
70
|
+
</div>
|
71
|
+
|
72
|
+
<%= render :partial => "/shared/admin/form_actions",
|
73
|
+
:locals => {
|
74
|
+
:f => f,
|
75
|
+
:continue_editing => false,
|
76
|
+
:delete_title => t('delete', :scope => 'admin.project_portfolios.project_portfolio'),
|
77
|
+
:delete_confirmation => t('message', :scope => 'shared.admin.delete', :title => @project_portfolio.project_name)
|
78
|
+
} %>
|
79
|
+
<% end -%>
|
80
|
+
<% content_for :javascripts do %>
|
81
|
+
<script>
|
82
|
+
$(document).ready(function(){
|
83
|
+
page_options.init(false, '', '');
|
84
|
+
});
|
85
|
+
</script>
|
86
|
+
<% end %>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<li class='clearfix record <%= cycle("on", "on-hover") %>' id="<%= dom_id(project_portfolio) -%>">
|
2
|
+
<span class='title'>
|
3
|
+
<%= project_portfolio.project_name %>
|
4
|
+
<span class="preview"> </span>
|
5
|
+
</span>
|
6
|
+
<span class='actions'>
|
7
|
+
<%= link_to refinery_icon_tag("application_go.png"), project_portfolio_path(project_portfolio),
|
8
|
+
:title => t('.view_live_html'),
|
9
|
+
:target => "_blank" %>
|
10
|
+
<%= link_to refinery_icon_tag("application_edit.png"), edit_admin_project_portfolio_path(project_portfolio),
|
11
|
+
:title => t('.edit') %>
|
12
|
+
<%= link_to refinery_icon_tag("delete.png"), admin_project_portfolio_path(project_portfolio),
|
13
|
+
:class => "cancel confirm-delete",
|
14
|
+
:title => t('.delete'),
|
15
|
+
:confirm => t('message', :scope => 'shared.admin.delete', :title => project_portfolio.project_name),
|
16
|
+
:method => :delete %>
|
17
|
+
</span>
|
18
|
+
</li>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<% if searching? %>
|
2
|
+
<h2><%= t('results_for', :scope => 'shared.admin.search', :query => params[:search]) %></h2>
|
3
|
+
<% end %>
|
4
|
+
<% if @project_portfolios.any? %>
|
5
|
+
<div class='pagination_container'>
|
6
|
+
<%= render :partial => 'project_portfolios' %>
|
7
|
+
</div>
|
8
|
+
<% else %>
|
9
|
+
<p>
|
10
|
+
<% unless searching? %>
|
11
|
+
<strong>
|
12
|
+
<%= t('.no_items_yet') %>
|
13
|
+
</strong>
|
14
|
+
<% else %>
|
15
|
+
<%= t('no_results', :scope => 'shared.admin.search') %>
|
16
|
+
<% end %>
|
17
|
+
</p>
|
18
|
+
<% end %>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<ul id='sortable_list'>
|
2
|
+
<%= render :partial => 'project_portfolio', :collection => @project_portfolios %>
|
3
|
+
</ul>
|
4
|
+
<%= render :partial => "/shared/admin/sortable_list",
|
5
|
+
:locals => {
|
6
|
+
:continue_reordering => (local_assigns.keys.include?(:continue_reordering)) ? continue_reordering : true
|
7
|
+
} %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render :partial => "form" %>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<section id='records'>
|
2
|
+
<%= render :partial => 'records' %>
|
3
|
+
</section>
|
4
|
+
<aside id='actions'>
|
5
|
+
<%= render :partial => 'actions' %>
|
6
|
+
</aside>
|
7
|
+
<%= render :partial => '/shared/admin/make_sortable',
|
8
|
+
:locals => {
|
9
|
+
:tree => false
|
10
|
+
} if !searching? and Admin::ProjectPortfoliosController.sortable? and ProjectPortfolio.count > 1 %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render :partial => "form" %>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<div class="popup" style="display: none;" id="popup_content<%= portfolio.id %>">
|
2
|
+
<div class="title">
|
3
|
+
<h2><%= portfolio.project_name %><span style="float: right;" class="bClose close_icon"></span></h2>
|
4
|
+
</div>
|
5
|
+
<div class="content" style="clear: both;">
|
6
|
+
<h3><%= portfolio.title %></h3>
|
7
|
+
<div style="float: left;" width="400">
|
8
|
+
<%= render_image portfolio %>
|
9
|
+
</div>
|
10
|
+
<div>
|
11
|
+
<%= portfolio.description.html_safe %>
|
12
|
+
</div>
|
13
|
+
</div>
|
14
|
+
</div>
|
@@ -0,0 +1,68 @@
|
|
1
|
+
<% content_for :head do %>
|
2
|
+
<%= javascript_include_tag 'jquery.quicksand.js' %>
|
3
|
+
<%= javascript_include_tag 'jquery.easing.js' %>
|
4
|
+
<%= javascript_include_tag 'jquery.bpopup.js' %>
|
5
|
+
<link href="stylesheets/portfolio.css" media="screen" rel="stylesheet" type="text/css" />
|
6
|
+
<script type="text/javascript">
|
7
|
+
function attatch_all_popup() {
|
8
|
+
$('#portfolios a').click(function() {
|
9
|
+
var element_id = $(this).attr("popup-id");
|
10
|
+
$('#popup_content'+ element_id).openPopup({amsl:50, fadeSpeed:500, opacity:0.8});
|
11
|
+
return false;
|
12
|
+
});
|
13
|
+
}
|
14
|
+
|
15
|
+
$(document).ready(function(){
|
16
|
+
attatch_all_popup();
|
17
|
+
});
|
18
|
+
|
19
|
+
$(function() {
|
20
|
+
var projects = $('#portfolios');
|
21
|
+
var projectsClone = projects.clone();
|
22
|
+
$('#tags a').click(function() {
|
23
|
+
$('#tags label').removeClass("active");
|
24
|
+
var tag = $(this).html();
|
25
|
+
$(this).parent().addClass("active");
|
26
|
+
if(tag == 'all') {
|
27
|
+
var filteredProjects = projectsClone.find('li');
|
28
|
+
} else {
|
29
|
+
var filteredProjects = projectsClone.find('li[data-type*=' + tag + ']');
|
30
|
+
}
|
31
|
+
projects.quicksand(filteredProjects, {
|
32
|
+
duration : 800,
|
33
|
+
easing : 'easeInOutQuad'
|
34
|
+
}, function() { // when done shuffling
|
35
|
+
attatch_all_popup();
|
36
|
+
});
|
37
|
+
});
|
38
|
+
});
|
39
|
+
|
40
|
+
</script>
|
41
|
+
<% end %>
|
42
|
+
|
43
|
+
<% content_for :body_content_left do %>
|
44
|
+
<div>
|
45
|
+
<div id="tags">
|
46
|
+
<label class="button active"><a href="#">all</a></label>
|
47
|
+
<% @tags.each do |tag| %>
|
48
|
+
<label class="button"><a href="#"><%= tag.name %> </a></label>
|
49
|
+
<% end %>
|
50
|
+
</div>
|
51
|
+
</div>
|
52
|
+
<ul id="portfolios" class="image-grid">
|
53
|
+
<% @portfolios.each do |portfolio| %>
|
54
|
+
<li class="box" data-id="id-<%= portfolio.id %>" data-type="<%= portfolio.tag_list %>">
|
55
|
+
<a popup-id="<%= portfolio.id %>" href="#">
|
56
|
+
<%= render_thumbnail portfolio %>
|
57
|
+
<strong><%= portfolio.project_name %></strong>
|
58
|
+
</a>
|
59
|
+
</li>
|
60
|
+
<% end %>
|
61
|
+
</ul>
|
62
|
+
<% end %>
|
63
|
+
|
64
|
+
<%= render :partial => "/shared/content_page" %>
|
65
|
+
|
66
|
+
<% @portfolios.each do |portfolio| %>
|
67
|
+
<%= render :partial => 'popup_portfolio', :locals => {:portfolio => portfolio} %>
|
68
|
+
<% end %>
|
@@ -0,0 +1,51 @@
|
|
1
|
+
<% content_for :body_content_title do %>
|
2
|
+
<%= @project_portfolio.project_name %>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<% content_for :body_content_left do %>
|
6
|
+
<section>
|
7
|
+
<h1>Project Name</h1>
|
8
|
+
<p>
|
9
|
+
<%=raw @project_portfolio.project_name %>
|
10
|
+
</p>
|
11
|
+
</section>
|
12
|
+
<section>
|
13
|
+
<h1>Title</h1>
|
14
|
+
<p>
|
15
|
+
<%=raw @project_portfolio.title %>
|
16
|
+
</p>
|
17
|
+
</section>
|
18
|
+
<section>
|
19
|
+
<h1>Thumbnail</h1>
|
20
|
+
<p>
|
21
|
+
<%= render_thumbnail @project_portfolio %>
|
22
|
+
</p>
|
23
|
+
</section>
|
24
|
+
<section>
|
25
|
+
<h1>Tags</h1>
|
26
|
+
<p>
|
27
|
+
<%= @project_portfolio.tag_list %>
|
28
|
+
</p>
|
29
|
+
</section>
|
30
|
+
<section>
|
31
|
+
<h1>Description</h1>
|
32
|
+
<p>
|
33
|
+
<%=raw @project_portfolio.description %>
|
34
|
+
</p>
|
35
|
+
</section>
|
36
|
+
<% end %>
|
37
|
+
|
38
|
+
<% content_for :body_content_right do %>
|
39
|
+
<aside>
|
40
|
+
<h2><%= t('.other') %></h2>
|
41
|
+
<ul id="project_portfolios">
|
42
|
+
<% @project_portfolios.each do |project_portfolio| %>
|
43
|
+
<li>
|
44
|
+
<%= link_to project_portfolio.project_name, project_portfolio_path(project_portfolio) %>
|
45
|
+
</li>
|
46
|
+
<% end %>
|
47
|
+
</ul>
|
48
|
+
</aside>
|
49
|
+
<% end %>
|
50
|
+
|
51
|
+
<%= render :partial => "/shared/content_page" %>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
en:
|
2
|
+
shared:
|
3
|
+
admin:
|
4
|
+
image_picker:
|
5
|
+
image: image
|
6
|
+
plugins:
|
7
|
+
project_portfolios:
|
8
|
+
title: Project Portfolios
|
9
|
+
admin:
|
10
|
+
project_portfolios:
|
11
|
+
actions:
|
12
|
+
create_new: Add New Project Portfolio
|
13
|
+
reorder: Reorder Project Portfolios
|
14
|
+
reorder_done: Done Reordering Project Portfolios
|
15
|
+
records:
|
16
|
+
title: Project Portfolios
|
17
|
+
sorry_no_results: Sorry! There are no results found.
|
18
|
+
no_items_yet: There are no Project Portfolios yet. Click "Add New Project Portfolio" to add your first project portfolio.
|
19
|
+
project_portfolio:
|
20
|
+
view_live_html: View this project portfolio live <br/><em>(opens in a new window)</em>
|
21
|
+
edit: Edit this project portfolio
|
22
|
+
delete: Remove this project portfolio forever
|
23
|
+
project_portfolios:
|
24
|
+
show:
|
25
|
+
other: Other Project Portfolios
|
@@ -0,0 +1,25 @@
|
|
1
|
+
fr:
|
2
|
+
shared:
|
3
|
+
admin:
|
4
|
+
image_picker:
|
5
|
+
image: image
|
6
|
+
plugins:
|
7
|
+
project_portfolios:
|
8
|
+
title: Project Portfolios
|
9
|
+
admin:
|
10
|
+
project_portfolios:
|
11
|
+
actions:
|
12
|
+
create_new: Créer un(e) nouve(au/l/lle) Project Portfolio
|
13
|
+
reorder: Réordonner les Project Portfolios
|
14
|
+
reorder_done: Fin de réordonnancement des Project Portfolios
|
15
|
+
records:
|
16
|
+
title: Project Portfolios
|
17
|
+
sorry_no_results: "Désolé ! Aucun résultat."
|
18
|
+
no_items_yet: 'Il n''y a actuellement aucun(e) Project Portfolio. Cliquer sur "Créer un(e) nouve(au/l/lle) Project Portfolio" pour créer votre premi(er/ère) project portfolio.'
|
19
|
+
project_portfolio:
|
20
|
+
view_live_html: Voir ce(t/tte) project portfolio <br/><em>(Ouvre une nouvelle fenêtre)</em>
|
21
|
+
edit: Modifier ce(t/tte) project portfolio
|
22
|
+
delete: Supprimer définitivement ce(t/tte) project portfolio
|
23
|
+
project_portfolios:
|
24
|
+
show:
|
25
|
+
other: Autres Project Portfolios
|