atreides 2.0.3 → 2.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +1 -1
- data/app/assets/javascripts/atreides/admin_base.js.erb +11 -16
- data/app/assets/stylesheets/atreides/admin_base.css.erb +2 -3
- data/app/controllers/atreides/admin_controller.rb +14 -0
- data/app/models/atreides/{preferences.rb → preference.rb} +1 -1
- data/app/views/admin/atreides/common/_sidebar_publish.html.haml +16 -0
- data/app/views/admin/atreides/features/_form.html.haml +11 -18
- data/app/views/admin/atreides/pages/_form.html.haml +1 -4
- data/app/views/admin/atreides/posts/_form_sidebar.html.haml +1 -8
- data/app/views/admin/common/_list_table.html.haml +30 -0
- data/app/views/admin/common/_list_table_row.html.haml +11 -0
- data/app/views/admin/common/_pagination.html.haml +1 -0
- data/app/views/admin/common/_search_form.html.haml +4 -0
- data/lib/assets/flash/atreides/player.swf +0 -0
- data/lib/assets/flash/atreides/slideshowpro.swf +0 -0
- data/lib/assets/flash/atreides/swfupload.swf +0 -0
- data/lib/assets/images/atreides/share/aim_16.png +0 -0
- data/lib/assets/images/atreides/share/apple_16.png +0 -0
- data/lib/assets/images/atreides/share/bebo_16.png +0 -0
- data/lib/assets/images/atreides/share/blogger_16.png +0 -0
- data/lib/assets/images/atreides/share/brightkite_16.png +0 -0
- data/lib/assets/images/atreides/share/cargo_16.png +0 -0
- data/lib/assets/images/atreides/share/delicious_16.png +0 -0
- data/lib/assets/images/atreides/share/designfloat_16.png +0 -0
- data/lib/assets/images/atreides/share/designmoo_16.png +0 -0
- data/lib/assets/images/atreides/share/deviantart_16.png +0 -0
- data/lib/assets/images/atreides/share/digg_16.png +0 -0
- data/lib/assets/images/atreides/share/digg_alt_16.png +0 -0
- data/lib/assets/images/atreides/share/dopplr_16.png +0 -0
- data/lib/assets/images/atreides/share/dribbble_16.png +0 -0
- data/lib/assets/images/atreides/share/email_16.png +0 -0
- data/lib/assets/images/atreides/share/ember_16.png +0 -0
- data/lib/assets/images/atreides/share/evernote_16.png +0 -0
- data/lib/assets/images/atreides/share/facebook_16.png +0 -0
- data/lib/assets/images/atreides/share/flickr_16.png +0 -0
- data/lib/assets/images/atreides/share/friendfeed_16.png +0 -0
- data/lib/assets/images/atreides/share/gamespot_16.png +0 -0
- data/lib/assets/images/atreides/share/google_16.png +0 -0
- data/lib/assets/images/atreides/share/google_voice_16.png +0 -0
- data/lib/assets/images/atreides/share/google_wave_16.png +0 -0
- data/lib/assets/images/atreides/share/googletalk_16.png +0 -0
- data/lib/assets/images/atreides/share/gowalla_16.png +0 -0
- data/lib/assets/images/atreides/share/grooveshark_16.png +0 -0
- data/lib/assets/images/atreides/share/ilike_16.png +0 -0
- data/lib/assets/images/atreides/share/komodomedia_azure_16.png +0 -0
- data/lib/assets/images/atreides/share/komodomedia_wood_16.png +0 -0
- data/lib/assets/images/atreides/share/lastfm_16.png +0 -0
- data/lib/assets/images/atreides/share/license.txt +9 -0
- data/lib/assets/images/atreides/share/linkedin_16.png +0 -0
- data/lib/assets/images/atreides/share/mixx_16.png +0 -0
- data/lib/assets/images/atreides/share/mobileme_16.png +0 -0
- data/lib/assets/images/atreides/share/mynameise_16.png +0 -0
- data/lib/assets/images/atreides/share/myspace_16.png +0 -0
- data/lib/assets/images/atreides/share/netvibes_16.png +0 -0
- data/lib/assets/images/atreides/share/newsvine_16.png +0 -0
- data/lib/assets/images/atreides/share/openid_16.png +0 -0
- data/lib/assets/images/atreides/share/orkut_16.png +0 -0
- data/lib/assets/images/atreides/share/pandora_16.png +0 -0
- data/lib/assets/images/atreides/share/paypal_16.png +0 -0
- data/lib/assets/images/atreides/share/picasa_16.png +0 -0
- data/lib/assets/images/atreides/share/plurk_16.png +0 -0
- data/lib/assets/images/atreides/share/posterous_16.png +0 -0
- data/lib/assets/images/atreides/share/qik_16.png +0 -0
- data/lib/assets/images/atreides/share/readernaut_16.png +0 -0
- data/lib/assets/images/atreides/share/reddit_16.png +0 -0
- data/lib/assets/images/atreides/share/roboto_16.png +0 -0
- data/lib/assets/images/atreides/share/rss_16.png +0 -0
- data/lib/assets/images/atreides/share/sharethis_16.png +0 -0
- data/lib/assets/images/atreides/share/skype_16.png +0 -0
- data/lib/assets/images/atreides/share/stumbleupon_16.png +0 -0
- data/lib/assets/images/atreides/share/technorati_16.png +0 -0
- data/lib/assets/images/atreides/share/tumblr_16.png +0 -0
- data/lib/assets/images/atreides/share/twitter_16.png +0 -0
- data/lib/assets/images/atreides/share/viddler_16.png +0 -0
- data/lib/assets/images/atreides/share/vimeo_16.png +0 -0
- data/lib/assets/images/atreides/share/virb_16.png +0 -0
- data/lib/assets/images/atreides/share/windows_16.png +0 -0
- data/lib/assets/images/atreides/share/wordpress_16.png +0 -0
- data/lib/assets/images/atreides/share/xing_16.png +0 -0
- data/lib/assets/images/atreides/share/yahoo_16.png +0 -0
- data/lib/assets/images/atreides/share/yahoobuzz_16.png +0 -0
- data/lib/assets/images/atreides/share/yelp_16.png +0 -0
- data/lib/assets/images/atreides/share/youtube_16.png +0 -0
- data/lib/assets/javascripts/atreides/facebox.js +309 -0
- data/lib/assets/javascripts/atreides/fileuploader.js +1250 -0
- data/lib/assets/javascripts/atreides/galleria.js +2 -0
- data/lib/assets/javascripts/atreides/galleria/src/galleria.js +3816 -0
- data/lib/assets/javascripts/atreides/galleria/src/plugins/galleria.flickr.js +221 -0
- data/lib/assets/javascripts/atreides/galleria/src/plugins/galleria.history.js +602 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/classic/classic-loader.gif +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/classic/classic-map.png +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/classic/galleria.classic.css +202 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/classic/galleria.classic.js +92 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/b.png +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/down.gif +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/fix.gif +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/fullscreen-demo.html +34 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/galleria.fullscreen.css +46 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/galleria.fullscreen.js +193 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/i.png +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/l.gif +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/l2.png +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/loader.gif +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/n.gif +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/p.gif +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/r.gif +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/r2.png +0 -0
- data/lib/assets/javascripts/atreides/galleria/src/themes/fullscreen/up.gif +0 -0
- data/lib/assets/javascripts/atreides/jquery.autogrow.js +132 -0
- data/lib/assets/javascripts/atreides/jquery.cookie.js +96 -0
- data/lib/assets/javascripts/atreides/jquery.countdown.js +759 -0
- data/lib/assets/javascripts/atreides/jquery.cycle.js +918 -0
- data/lib/assets/javascripts/atreides/jquery.easing.1.3.js +205 -0
- data/lib/assets/javascripts/atreides/jquery.flash.js +288 -0
- data/lib/assets/javascripts/atreides/jquery.iphone-checkboxes.js +214 -0
- data/lib/assets/javascripts/atreides/jquery.jBreadCrumb.1.1.js +240 -0
- data/lib/assets/javascripts/atreides/jquery.multipleselectbox-min.js +15 -0
- data/lib/assets/javascripts/atreides/jquery.multipleselectbox.js +446 -0
- data/lib/assets/javascripts/atreides/jquery.swfupload.js +64 -0
- data/lib/assets/javascripts/atreides/jquery.tipsy.js +104 -0
- data/lib/assets/javascripts/atreides/jquery.uniform.js +461 -0
- data/lib/assets/javascripts/atreides/jtags.js +125 -0
- data/lib/assets/javascripts/atreides/raphael-min.js +7 -0
- data/lib/assets/javascripts/atreides/raphael.analytics.js +205 -0
- data/lib/assets/javascripts/atreides/raphael.path.methods.js +53 -0
- data/lib/assets/javascripts/atreides/raphael.pie.js +44 -0
- data/lib/assets/javascripts/atreides/sifr.js +18 -0
- data/lib/assets/javascripts/atreides/swfobject.js +4 -0
- data/lib/assets/javascripts/atreides/swfupload/handlers.js +290 -0
- data/lib/assets/javascripts/atreides/swfupload/swfupload.cookies.js +53 -0
- data/lib/assets/javascripts/atreides/swfupload/swfupload.js +980 -0
- data/lib/assets/javascripts/atreides/swfupload/swfupload.queue.js +98 -0
- data/lib/assets/javascripts/atreides/swfupload/swfupload.speed.js +342 -0
- data/lib/assets/javascripts/atreides/swfupload/swfupload.swfobject.js +111 -0
- data/lib/assets/javascripts/atreides/underscore-1.1.6.js +807 -0
- data/lib/assets/stylesheets/atreides/admin_grid.css +258 -0
- data/lib/assets/stylesheets/atreides/facebox.css +80 -0
- data/lib/assets/stylesheets/atreides/formtastic.css +144 -0
- data/lib/assets/stylesheets/atreides/galleria.css +24 -0
- data/lib/assets/stylesheets/atreides/ie.css +35 -0
- data/lib/assets/stylesheets/atreides/images/bg_fallback.png +0 -0
- data/lib/assets/stylesheets/atreides/images/icon_sprite.png +0 -0
- data/lib/assets/stylesheets/atreides/images/progress_bar.gif +0 -0
- data/lib/assets/stylesheets/atreides/images/slider_handles.png +0 -0
- data/lib/assets/stylesheets/atreides/images/ui-icons_222222_256x240.png +0 -0
- data/lib/assets/stylesheets/atreides/images/ui-icons_454545_256x240.png +0 -0
- data/lib/assets/stylesheets/atreides/jquery-ui.css +738 -0
- data/lib/assets/stylesheets/atreides/multipleselectbox.css +33 -0
- data/lib/assets/stylesheets/atreides/print.css +29 -0
- data/lib/assets/stylesheets/atreides/public_grid.css +258 -0
- data/lib/assets/stylesheets/atreides/tipsy.css +7 -0
- data/lib/assets/stylesheets/atreides/uniform.default.css +476 -0
- data/lib/atreides.rb +4 -0
- data/lib/atreides/schema.rb +53 -0
- data/lib/atreides/time_zone.rb +6 -0
- data/lib/atreides/version.rb +1 -1
- data/lib/generators/templates/create_pages.rb +1 -2
- data/lib/generators/templates/create_posts.rb +1 -2
- metadata +155 -13
- data/app/views/admin/common/_list_table.html.erb +0 -37
- data/app/views/admin/common/_list_table_row.html.erb +0 -18
- data/app/views/admin/common/_pagination.html.erb +0 -1
- data/app/views/admin/common/_search_form.html.erb +0 -6
data/LICENSE
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c) 2012 Lachlan Laycock, Chad Jackson, Harry Bernstein, Mathieu Ravaux, Jérémy Van de Wyngaert, William Alton, Adam Copeland, Benjamin Manns
|
1
|
+
Copyright (c) Love the 88 LLC, 2012 Lachlan Laycock, Chad Jackson, Harry Bernstein, Mathieu Ravaux, Jérémy Van de Wyngaert, William Alton, Adam Copeland, Benjamin Manns
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
4
4
|
|
@@ -26,12 +26,6 @@ $.removeDiacriticalMarks = function(string) {
|
|
26
26
|
}
|
27
27
|
}
|
28
28
|
pattern = new RegExp( "[" + pattern + "]", 'gi');
|
29
|
-
// return function(string) {
|
30
|
-
// return string ? string.replace(pattern, function(char){
|
31
|
-
// return char in map ? map[char] : char;
|
32
|
-
// }) : string;
|
33
|
-
// };
|
34
|
-
|
35
29
|
return string ? string.replace(pattern, function(char){
|
36
30
|
return char in map ? map[char] : char;
|
37
31
|
}) : string;
|
@@ -127,26 +121,27 @@ $(document).ready(function() {
|
|
127
121
|
}
|
128
122
|
|
129
123
|
// Post state drop-down
|
130
|
-
var
|
131
|
-
|
132
|
-
|
124
|
+
var stateSelect = 'select.publish-input',
|
125
|
+
stateInput = 'input.state-input',
|
126
|
+
dateInput = '.date-input'
|
133
127
|
function update_state_select() {
|
134
|
-
|
128
|
+
|
129
|
+
$(dateInput).hide()
|
135
130
|
switch(this.value) {
|
136
131
|
case 'publish_now':
|
137
|
-
$(
|
132
|
+
$(stateInput).val("published");
|
138
133
|
break;
|
139
134
|
case 'published_at':
|
140
|
-
$(
|
141
|
-
$(
|
135
|
+
$(stateInput).val("published");
|
136
|
+
$(dateInput).show();
|
142
137
|
break;
|
143
138
|
default:
|
144
|
-
$(
|
139
|
+
$(stateInput).val(this.value);
|
145
140
|
break;
|
146
141
|
}
|
147
142
|
}
|
148
|
-
$(
|
149
|
-
$(
|
143
|
+
$(stateSelect).on("change", update_state_select);
|
144
|
+
$(stateSelect).trigger('change'); // Make sure it shows correctly on load
|
150
145
|
|
151
146
|
// Photo display types
|
152
147
|
var photo_types = $(".photos-display-type input")
|
@@ -1550,9 +1550,8 @@ fieldset.actions a {
|
|
1550
1550
|
box-shadow:none;
|
1551
1551
|
}
|
1552
1552
|
|
1553
|
-
|
1554
|
-
fieldset.actions
|
1555
|
-
fieldset.actions input:not([type="checkbox"]):not([type="radio"]):not([type="file"]).update {
|
1553
|
+
|
1554
|
+
fieldset.actions button[type="submit"] {
|
1556
1555
|
color:#5D9A25;
|
1557
1556
|
}
|
1558
1557
|
|
@@ -26,15 +26,29 @@ class Atreides::AdminController < Atreides::ApplicationController
|
|
26
26
|
|
27
27
|
before_filter :set_date, :only => [:index, :filter]
|
28
28
|
before_filter :set_expires, :only => [:analytics]
|
29
|
+
|
29
30
|
around_filter :cache, :only => [:analytics]
|
30
31
|
skip_before_filter :verify_authenticity_token, :only => [:analytics]
|
31
32
|
after_filter :set_last_modified
|
32
33
|
before_filter :set_resource_request_name
|
33
34
|
|
35
|
+
before_filter :determine_timezone, :only => [:update, :create]
|
36
|
+
after_filter :reset_timezone, :only => [:update, :create]
|
37
|
+
|
34
38
|
layout 'admin'
|
35
39
|
|
36
40
|
private
|
37
41
|
|
42
|
+
def determine_timezone
|
43
|
+
if params[@resource_request_name.to_sym].key?(:time_zone)
|
44
|
+
Time.zone = params[@resource_request_name.to_sym][:time_zone] || Atreides::TimeZone::DEFAULT
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def reset_timezone
|
49
|
+
Time.zone = Atreides::TimeZone::DEFAULT
|
50
|
+
end
|
51
|
+
|
38
52
|
def set_resource_request_name
|
39
53
|
@resource_request_name = self.resources_configuration[:self][:request_name]
|
40
54
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
- selected = (resource.pending? || resource.published?) ? (resource.published_at? ? :published_at : :published_now) : resource.state.to_sym
|
2
|
+
- timezone = resource.time_zone || Atreides::TimeZone::DEFAULT
|
3
|
+
- resource.published_at = (resource.published_at || Time.now).in_time_zone(timezone)
|
4
|
+
- label = resource.published_at.past? ? "Published on: " : "Will be published on:"
|
5
|
+
= f.input :state, :as => "select", :collection => resource.states_for_select, :selected => selected, :include_blank => false, :wrapper_html => { :class => "post-states" }, :input_html => {:class => "publish-input"}
|
6
|
+
= f.input :state, :as => "hidden", :wrapper_html => { :class => "post-hidden" }, :input_html => {:class => "state-input"}
|
7
|
+
.date-input{:style => "padding-bottom: 15px"}
|
8
|
+
= f.input :published_at, :label => label, :as => "string", :wrapper_html => { :class => "date-input date-picker", :style => "display:#{selected==:published_at ? 'block' : 'none'}"}
|
9
|
+
- unless defined?(no_timezone) && no_timezone == true
|
10
|
+
- resource_name = resource.class.name.split("::").last.underscore
|
11
|
+
- selected_timezone = resource.time_zone || "newyork"
|
12
|
+
%label Select Time Zone:
|
13
|
+
- Atreides::TimeZone::ZONES.each do |zone|
|
14
|
+
.input.radio
|
15
|
+
%input{:type => "radio", :name => "#{resource_name}[time_zone]", :value => zone, :id => "#{resource_name}_time_zone_#{zone.parameterize}", :checked => zone == selected_timezone}
|
16
|
+
%label{:for => "#{resource_name}_time_zone_#{zone.parameterize}"}= zone
|
@@ -1,15 +1,15 @@
|
|
1
1
|
= render :partial => 'admin/edit_head_content'
|
2
|
-
= semantic_form_for
|
2
|
+
= semantic_form_for resource, :url => (resource.new_record? ? admin_features_path : admin_feature_path(resource)), :as => "feature" do |f|
|
3
3
|
|
4
4
|
#form_content{:class => "span-17"}
|
5
5
|
%h2= ttt("#{params[:action].to_s}_feature").html_safe
|
6
|
-
= error_messages_for :resource, :header_message => ttt(:validation_error_header, :model =>
|
6
|
+
= error_messages_for :resource, :header_message => ttt(:validation_error_header, :model => resource.class.to_s.demodulize), :message => ttt(:validation_error_message)
|
7
7
|
= f.semantic_errors
|
8
8
|
= f.inputs do
|
9
9
|
= f.input :title, :input_html => { :class => "title" }
|
10
10
|
%li.photos-upload
|
11
11
|
%label #{ttt :'.photo'}
|
12
|
-
= multi_file_uploader(:url => admin_feature_photo_path((
|
12
|
+
= multi_file_uploader(:url => admin_feature_photo_path((resource.new_record? ? '-' : resource), :format => :js), :css_parent_class => "photos-upload", :resource_type => "feature")
|
13
13
|
.clear
|
14
14
|
%li.photos-choose
|
15
15
|
%label #{ttt :'.existing_post'}
|
@@ -19,10 +19,10 @@
|
|
19
19
|
%li.photo
|
20
20
|
#feature_photo.media-list
|
21
21
|
%ul#feature_photo_ul
|
22
|
-
- if
|
23
|
-
= photo_for_assoc(
|
24
|
-
- elsif
|
25
|
-
= image_tag
|
22
|
+
- if resource.photo
|
23
|
+
= photo_for_assoc(resource.photo, resource, "photos_list")
|
24
|
+
- elsif resource.post && resource.video
|
25
|
+
= image_tag resource.video.thumb_url
|
26
26
|
|
27
27
|
#feature_post_browser{:style => 'display:none;'}
|
28
28
|
.close= link_to_function 'close', "$('#feature_post_browser').hide();$(this).find('.archives').remove()"
|
@@ -37,24 +37,17 @@
|
|
37
37
|
%li.cancel
|
38
38
|
= link_to ttt(:back), admin_features_path, :class => "cancel"
|
39
39
|
%li.delete
|
40
|
-
= link_to ttt(:delete), admin_feature_path(
|
40
|
+
= link_to ttt(:delete), admin_feature_path(resource), :class => "cancel", :confirm => ttt(:are_you_absolutely_sure), :method => "delete" unless resource.new_record?
|
41
41
|
|
42
42
|
#form_sidebar{:class => "sidebar span-6 last"}
|
43
43
|
= f.inputs do
|
44
|
-
|
45
|
-
|
46
|
-
- @feature.published_at = (@feature.published_at || Time.now).in_time_zone # Needed to show time in user's TZ
|
47
|
-
- label = @feature.published_at.past? ? "Published on: " : "Will be published on:"
|
48
|
-
|
49
|
-
= f.input :state, :as => "select", :collection => @feature.states_for_select, :selected => selected, :include_blank => false, :wrapper_html => { :class => "post-states" }
|
50
|
-
= f.input :state, :as => "hidden", :wrapper_html => { :class => "post-hidden" }
|
51
|
-
= f.input :published_at, :label => label, :as => "string", :wrapper_html => { :class => "date-picker", :style => "display:#{selected==:published_at ? 'block' : 'none'}"}
|
44
|
+
= render(:partial => "/admin/atreides/common/sidebar_publish", :locals => {:f => f})
|
52
45
|
|
53
46
|
- if defined?(Settings.tags.posts.features)
|
54
47
|
%li{:class => "features-tag-group tag-picker"}
|
55
48
|
%label #{ttt :'.location'}
|
56
49
|
%ul
|
57
50
|
- Settings.tags.posts.features.each do |tag|
|
58
|
-
%li.machine_tag.feature_tag{:class =>
|
59
|
-
= radio_button_tag 'feature[tag_list][]', tag,
|
51
|
+
%li.machine_tag.feature_tag{:class => resource.tag_list.include?(tag) ? "selected" : "" }
|
52
|
+
= radio_button_tag 'feature[tag_list][]', tag, resource.tag_list.include?(tag)
|
60
53
|
= tag.humanize.titleize
|
@@ -20,10 +20,7 @@
|
|
20
20
|
|
21
21
|
#form_sidebar{:class => "sidebar span-6 last"}
|
22
22
|
= f.inputs do
|
23
|
-
|
24
|
-
= f.input :state, :as => "select", :collection => resource.states_for_select, :selected => selected, :include_blank => false, :wrapper_html => { :class => "post-states" }
|
25
|
-
= f.input :state, :as => "hidden", :wrapper_html => { :class => "page-hidden" }
|
26
|
-
= f.input :published_at, :label => ttt(:'.publish_on'), :as => "string", :wrapper_html => { :class => "date-picker" }
|
23
|
+
= render(:partial => "/admin/atreides/common/sidebar_publish", :locals => {:f => f})
|
27
24
|
= f.input :parent_id, :as => "select", :label => ttt(:'.parent'), :wrapper_html => { :class => "parent-picker" }, :collection => Atreides::Page.published.all.map{|p| [p.title, p.id]}
|
28
25
|
= f.input :tag_list, :label => ttt(:'.tags'), :as => "text", :wrapper_html => { :class => "tag-picker" }
|
29
26
|
= f.input :slug, :label => ttt(:'.custom_url'), :as => "underline", :prefix => "/", :hint => ttt(:".leave_blank_to_create_automatically"), :wrapper_html => { :class => "underlined-input" }
|
@@ -20,14 +20,7 @@
|
|
20
20
|
},
|
21
21
|
}); })
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
- resource.published_at = (resource.published_at || Time.now).in_time_zone # Needed to show time in user's TZ
|
26
|
-
- label = (resource.published_at.past? ? tt(:'.published_on') : tt('.will_be_published_on')) + ": "
|
27
|
-
|
28
|
-
= f.input :state, :as => "select", :collection => resource.states_for_select, :selected => selected, :include_blank => false, :wrapper_html => { :class => "post-states" }
|
29
|
-
= f.input :state, :as => "hidden", :wrapper_html => { :class => "post-hidden" }
|
30
|
-
= f.input :published_at, :label => label, :as => "string", :wrapper_html => { :class => "date-picker", :style => "display:#{selected==:published_at ? 'block' : 'none'}"}
|
23
|
+
= render(:partial => "/admin/atreides/common/sidebar_publish", :locals => {:f => f})
|
31
24
|
|
32
25
|
/ Tags
|
33
26
|
- if defined?(Settings.tags.posts.groups)
|
@@ -0,0 +1,30 @@
|
|
1
|
+
- records ||= []
|
2
|
+
- class_obj ||= records.first.class
|
3
|
+
- record_name = class_obj.to_s.underscore
|
4
|
+
- ignore_cols ||= []
|
5
|
+
- ignore_cols.uniq!
|
6
|
+
- action_cols ||= %w(show edit destroy)
|
7
|
+
- nosort_cols ||= []
|
8
|
+
- list_cols ||= class_obj.column_names
|
9
|
+
- cols_hash = class_obj.columns_hash
|
10
|
+
- record_param = record_name.pluralize.parameterize('_')
|
11
|
+
- list_id ||= "sortable_table"
|
12
|
+
|
13
|
+
%table{:id => "#{record_param}_list_#{records.object_id}", :class => "remote_sort_table sort_table #{record_param}_table", :cellspacing => 0, :cellpadding => 0}
|
14
|
+
%thead
|
15
|
+
%tr
|
16
|
+
- list_cols.each do |col|
|
17
|
+
- next if cols_hash[col] and cols_hash[col].primary
|
18
|
+
- next if ignore_cols.include?(col)
|
19
|
+
- field_func = "#{col}_column"
|
20
|
+
- label_func = "#{col}_label"
|
21
|
+
%th{:class => "#{sort_col(cols_hash[col])} #{"sort#{params[:dir]}" if params[:sort]==col} #{"sortcol" unless nosort_cols.include?(col)}"}
|
22
|
+
= self.respond_to?(label_func) ? send(label_func, col) : ttt(col.to_s)
|
23
|
+
- unless action_cols.empty?
|
24
|
+
%th.nosort.actions{:colspan => action_cols.size}
|
25
|
+
= image_tag("atreides/blank.gif")
|
26
|
+
%tbody{:id => list_id}
|
27
|
+
= render :partial => 'admin/common/list_table_row', :collection => records, :as => :record, :locals => { :list_cols => list_cols, :cols_hash => cols_hash, :ignore_cols => ignore_cols, :action_cols => action_cols, :record_name => record_name }
|
28
|
+
|
29
|
+
.pagination
|
30
|
+
= will_paginate records if records.respond_to? :total_pages
|
@@ -0,0 +1,11 @@
|
|
1
|
+
%tr{:class => cycle('even','odd'), :id => record.dom_id('tablerow')}
|
2
|
+
- list_cols.each do |col|
|
3
|
+
- next if cols_hash[col] and cols_hash[col].primary
|
4
|
+
- next if ignore_cols.include?(col)
|
5
|
+
- field_func = "#{col}_column"
|
6
|
+
%td{:class => field_func}
|
7
|
+
= content_tag(:span, (self.respond_to?(field_func) ? send(field_func, record) : record.send(col)))
|
8
|
+
- action_cols.each do |action|
|
9
|
+
- action_func = "#{action}_link"
|
10
|
+
%td.action_link
|
11
|
+
= self.respond_to?(action_func) ? send(action_func, record) : action_link(action, record, record_name)
|
@@ -0,0 +1 @@
|
|
1
|
+
= will_paginate collection, :container => false, :inner_window => 2, :outer_window => 1, :params => {:query => params[:query]}
|
@@ -0,0 +1,4 @@
|
|
1
|
+
.search-form{:style => "float:right;clear:none;margin-left:0.5em;"}
|
2
|
+
= form_tag "", :method => "get", :class => "auto-hide-text" do
|
3
|
+
= link_to ttt(:'.reset'), url_for(:controller => params[:controller], :action => controller.action_name), :class => "submit_btn", :style => "float:right;clear:none;margin-left:0.5em;"
|
4
|
+
= text_field_tag :search, (params[:search] || "Search...")
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,9 @@
|
|
1
|
+
If you use these icons, please place an attribution link to komodomedia.com. Social Network Icon Pack by Rogie King is licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License (http://creativecommons.org/licenses/by-nc-sa/3.0/).
|
2
|
+
|
3
|
+
Based on a work at www.komodomedia.com.
|
4
|
+
|
5
|
+
More rad downloads can be found at http://www.komodomedia.com/download/
|
6
|
+
|
7
|
+
Feelin' the love? Donate to Paypal: rogie@komodomedia.com
|
8
|
+
|
9
|
+
I claim no right of ownership to the respective company logos and glyphs in each one of these icons.
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,309 @@
|
|
1
|
+
/*
|
2
|
+
* Facebox (for jQuery)
|
3
|
+
* version: 1.3
|
4
|
+
* @requires jQuery v1.2 or later
|
5
|
+
* @homepage https://github.com/defunkt/facebox
|
6
|
+
*
|
7
|
+
* Licensed under the MIT:
|
8
|
+
* http://www.opensource.org/licenses/mit-license.php
|
9
|
+
*
|
10
|
+
* Copyright Forever Chris Wanstrath, Kyle Neath
|
11
|
+
*
|
12
|
+
* Usage:
|
13
|
+
*
|
14
|
+
* jQuery(document).ready(function() {
|
15
|
+
* jQuery('a[rel*=facebox]').facebox()
|
16
|
+
* })
|
17
|
+
*
|
18
|
+
* <a href="#terms" rel="facebox">Terms</a>
|
19
|
+
* Loads the #terms div in the box
|
20
|
+
*
|
21
|
+
* <a href="terms.html" rel="facebox">Terms</a>
|
22
|
+
* Loads the terms.html page in the box
|
23
|
+
*
|
24
|
+
* <a href="terms.png" rel="facebox">Terms</a>
|
25
|
+
* Loads the terms.png image in the box
|
26
|
+
*
|
27
|
+
*
|
28
|
+
* You can also use it programmatically:
|
29
|
+
*
|
30
|
+
* jQuery.facebox('some html')
|
31
|
+
* jQuery.facebox('some html', 'my-groovy-style')
|
32
|
+
*
|
33
|
+
* The above will open a facebox with "some html" as the content.
|
34
|
+
*
|
35
|
+
* jQuery.facebox(function($) {
|
36
|
+
* $.get('blah.html', function(data) { $.facebox(data) })
|
37
|
+
* })
|
38
|
+
*
|
39
|
+
* The above will show a loading screen before the passed function is called,
|
40
|
+
* allowing for a better ajaxy experience.
|
41
|
+
*
|
42
|
+
* The facebox function can also display an ajax page, an image, or the contents of a div:
|
43
|
+
*
|
44
|
+
* jQuery.facebox({ ajax: 'remote.html' })
|
45
|
+
* jQuery.facebox({ ajax: 'remote.html' }, 'my-groovy-style')
|
46
|
+
* jQuery.facebox({ image: 'stairs.jpg' })
|
47
|
+
* jQuery.facebox({ image: 'stairs.jpg' }, 'my-groovy-style')
|
48
|
+
* jQuery.facebox({ div: '#box' })
|
49
|
+
* jQuery.facebox({ div: '#box' }, 'my-groovy-style')
|
50
|
+
*
|
51
|
+
* Want to close the facebox? Trigger the 'close.facebox' document event:
|
52
|
+
*
|
53
|
+
* jQuery(document).trigger('close.facebox')
|
54
|
+
*
|
55
|
+
* Facebox also has a bunch of other hooks:
|
56
|
+
*
|
57
|
+
* loading.facebox
|
58
|
+
* beforeReveal.facebox
|
59
|
+
* reveal.facebox (aliased as 'afterReveal.facebox')
|
60
|
+
* init.facebox
|
61
|
+
* afterClose.facebox
|
62
|
+
*
|
63
|
+
* Simply bind a function to any of these hooks:
|
64
|
+
*
|
65
|
+
* $(document).bind('reveal.facebox', function() { ...stuff to do after the facebox and contents are revealed... })
|
66
|
+
*
|
67
|
+
*/
|
68
|
+
(function($) {
|
69
|
+
$.facebox = function(data, klass) {
|
70
|
+
$.facebox.loading()
|
71
|
+
|
72
|
+
if (data.ajax) fillFaceboxFromAjax(data.ajax, klass)
|
73
|
+
else if (data.image) fillFaceboxFromImage(data.image, klass)
|
74
|
+
else if (data.div) fillFaceboxFromHref(data.div, klass)
|
75
|
+
else if ($.isFunction(data)) data.call($)
|
76
|
+
else $.facebox.reveal(data, klass)
|
77
|
+
}
|
78
|
+
|
79
|
+
/*
|
80
|
+
* Public, $.facebox methods
|
81
|
+
*/
|
82
|
+
|
83
|
+
$.extend($.facebox, {
|
84
|
+
settings: {
|
85
|
+
opacity : 0.2,
|
86
|
+
overlay : true,
|
87
|
+
loadingImage : '/images/loading.gif',
|
88
|
+
closeImage : '/images/closelabel.png',
|
89
|
+
imageTypes : [ 'png', 'jpg', 'jpeg', 'gif' ],
|
90
|
+
faceboxHtml : '\
|
91
|
+
<div id="facebox" style="display:none;"> \
|
92
|
+
<div class="popup"> \
|
93
|
+
<div class="content"> \
|
94
|
+
</div> \
|
95
|
+
<a href="#" class="close"></a> \
|
96
|
+
</div> \
|
97
|
+
</div>'
|
98
|
+
},
|
99
|
+
|
100
|
+
loading: function() {
|
101
|
+
init()
|
102
|
+
if ($('#facebox .loading').length == 1) return true
|
103
|
+
showOverlay()
|
104
|
+
|
105
|
+
$('#facebox .content').empty().
|
106
|
+
append('<div class="loading"><img src="'+$.facebox.settings.loadingImage+'"/></div>')
|
107
|
+
|
108
|
+
$('#facebox').show().css({
|
109
|
+
top: getPageScroll()[1] + (getPageHeight() / 10),
|
110
|
+
left: $(window).width() / 2 - ($('#facebox .popup').outerWidth() / 2)
|
111
|
+
})
|
112
|
+
|
113
|
+
$(document).bind('keydown.facebox', function(e) {
|
114
|
+
if (e.keyCode == 27) $.facebox.close()
|
115
|
+
return true
|
116
|
+
})
|
117
|
+
$(document).trigger('loading.facebox')
|
118
|
+
},
|
119
|
+
|
120
|
+
reveal: function(data, klass) {
|
121
|
+
$(document).trigger('beforeReveal.facebox')
|
122
|
+
if (klass) $('#facebox .content').addClass(klass)
|
123
|
+
$('#facebox .content').empty().append(data)
|
124
|
+
$('#facebox .popup').children().fadeIn('normal')
|
125
|
+
$('#facebox').css('left', $(window).width() / 2 - ($('#facebox .popup').outerWidth() / 2))
|
126
|
+
$(document).trigger('reveal.facebox').trigger('afterReveal.facebox')
|
127
|
+
},
|
128
|
+
|
129
|
+
close: function() {
|
130
|
+
$(document).trigger('close.facebox')
|
131
|
+
return false
|
132
|
+
}
|
133
|
+
})
|
134
|
+
|
135
|
+
/*
|
136
|
+
* Public, $.fn methods
|
137
|
+
*/
|
138
|
+
|
139
|
+
$.fn.facebox = function(settings) {
|
140
|
+
if ($(this).length == 0) return
|
141
|
+
|
142
|
+
init(settings)
|
143
|
+
|
144
|
+
function clickHandler() {
|
145
|
+
$.facebox.loading(true)
|
146
|
+
|
147
|
+
// support for rel="facebox.inline_popup" syntax, to add a class
|
148
|
+
// also supports deprecated "facebox[.inline_popup]" syntax
|
149
|
+
var klass = this.rel.match(/facebox\[?\.(\w+)\]?/)
|
150
|
+
if (klass) klass = klass[1]
|
151
|
+
|
152
|
+
fillFaceboxFromHref(this.href, klass)
|
153
|
+
return false
|
154
|
+
}
|
155
|
+
|
156
|
+
return this.bind('click.facebox', clickHandler)
|
157
|
+
}
|
158
|
+
|
159
|
+
/*
|
160
|
+
* Private methods
|
161
|
+
*/
|
162
|
+
|
163
|
+
// called one time to setup facebox on this page
|
164
|
+
function init(settings) {
|
165
|
+
if ($.facebox.settings.inited) return true
|
166
|
+
else $.facebox.settings.inited = true
|
167
|
+
|
168
|
+
$(document).trigger('init.facebox')
|
169
|
+
makeCompatible()
|
170
|
+
|
171
|
+
var imageTypes = $.facebox.settings.imageTypes.join('|')
|
172
|
+
$.facebox.settings.imageTypesRegexp = new RegExp('\\.(' + imageTypes + ')(\\?.*)?$', 'i')
|
173
|
+
|
174
|
+
if (settings) $.extend($.facebox.settings, settings)
|
175
|
+
$('body').append($.facebox.settings.faceboxHtml)
|
176
|
+
|
177
|
+
var preload = [ new Image(), new Image() ]
|
178
|
+
preload[0].src = $.facebox.settings.closeImage
|
179
|
+
preload[1].src = $.facebox.settings.loadingImage
|
180
|
+
|
181
|
+
$('#facebox').find('.b:first, .bl').each(function() {
|
182
|
+
preload.push(new Image())
|
183
|
+
preload.slice(-1).src = $(this).css('background-image').replace(/url\((.+)\)/, '$1')
|
184
|
+
})
|
185
|
+
|
186
|
+
$('#facebox .close')
|
187
|
+
.click($.facebox.close)
|
188
|
+
.append('<img src="'
|
189
|
+
+ $.facebox.settings.closeImage
|
190
|
+
+ '" class="close_image" title="close">')
|
191
|
+
}
|
192
|
+
|
193
|
+
// getPageScroll() by quirksmode.com
|
194
|
+
function getPageScroll() {
|
195
|
+
var xScroll, yScroll;
|
196
|
+
if (self.pageYOffset) {
|
197
|
+
yScroll = self.pageYOffset;
|
198
|
+
xScroll = self.pageXOffset;
|
199
|
+
} else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
|
200
|
+
yScroll = document.documentElement.scrollTop;
|
201
|
+
xScroll = document.documentElement.scrollLeft;
|
202
|
+
} else if (document.body) {// all other Explorers
|
203
|
+
yScroll = document.body.scrollTop;
|
204
|
+
xScroll = document.body.scrollLeft;
|
205
|
+
}
|
206
|
+
return new Array(xScroll,yScroll)
|
207
|
+
}
|
208
|
+
|
209
|
+
// Adapted from getPageSize() by quirksmode.com
|
210
|
+
function getPageHeight() {
|
211
|
+
var windowHeight
|
212
|
+
if (self.innerHeight) { // all except Explorer
|
213
|
+
windowHeight = self.innerHeight;
|
214
|
+
} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
|
215
|
+
windowHeight = document.documentElement.clientHeight;
|
216
|
+
} else if (document.body) { // other Explorers
|
217
|
+
windowHeight = document.body.clientHeight;
|
218
|
+
}
|
219
|
+
return windowHeight
|
220
|
+
}
|
221
|
+
|
222
|
+
// Backwards compatibility
|
223
|
+
function makeCompatible() {
|
224
|
+
var $s = $.facebox.settings
|
225
|
+
|
226
|
+
$s.loadingImage = $s.loading_image || $s.loadingImage
|
227
|
+
$s.closeImage = $s.close_image || $s.closeImage
|
228
|
+
$s.imageTypes = $s.image_types || $s.imageTypes
|
229
|
+
$s.faceboxHtml = $s.facebox_html || $s.faceboxHtml
|
230
|
+
}
|
231
|
+
|
232
|
+
// Figures out what you want to display and displays it
|
233
|
+
// formats are:
|
234
|
+
// div: #id
|
235
|
+
// image: blah.extension
|
236
|
+
// ajax: anything else
|
237
|
+
function fillFaceboxFromHref(href, klass) {
|
238
|
+
// div
|
239
|
+
if (href.match(/#/)) {
|
240
|
+
var url = window.location.href.split('#')[0]
|
241
|
+
var target = href.replace(url,'')
|
242
|
+
if (target == '#') return
|
243
|
+
$.facebox.reveal($(target).html(), klass)
|
244
|
+
|
245
|
+
// image
|
246
|
+
} else if (href.match($.facebox.settings.imageTypesRegexp)) {
|
247
|
+
fillFaceboxFromImage(href, klass)
|
248
|
+
// ajax
|
249
|
+
} else {
|
250
|
+
fillFaceboxFromAjax(href, klass)
|
251
|
+
}
|
252
|
+
}
|
253
|
+
|
254
|
+
function fillFaceboxFromImage(href, klass) {
|
255
|
+
var image = new Image()
|
256
|
+
image.onload = function() {
|
257
|
+
$.facebox.reveal('<div class="image"><img src="' + image.src + '" /></div>', klass)
|
258
|
+
}
|
259
|
+
image.src = href
|
260
|
+
}
|
261
|
+
|
262
|
+
function fillFaceboxFromAjax(href, klass) {
|
263
|
+
$.get(href, function(data) { $.facebox.reveal(data, klass) })
|
264
|
+
}
|
265
|
+
|
266
|
+
function skipOverlay() {
|
267
|
+
return $.facebox.settings.overlay == false || $.facebox.settings.opacity === null
|
268
|
+
}
|
269
|
+
|
270
|
+
function showOverlay() {
|
271
|
+
if (skipOverlay()) return
|
272
|
+
|
273
|
+
if ($('#facebox_overlay').length == 0)
|
274
|
+
$("body").append('<div id="facebox_overlay" class="facebox_hide"></div>')
|
275
|
+
|
276
|
+
$('#facebox_overlay').hide().addClass("facebox_overlayBG")
|
277
|
+
.css('opacity', $.facebox.settings.opacity)
|
278
|
+
.click(function() { $(document).trigger('close.facebox') })
|
279
|
+
.fadeIn(200)
|
280
|
+
return false
|
281
|
+
}
|
282
|
+
|
283
|
+
function hideOverlay() {
|
284
|
+
if (skipOverlay()) return
|
285
|
+
|
286
|
+
$('#facebox_overlay').fadeOut(200, function(){
|
287
|
+
$("#facebox_overlay").removeClass("facebox_overlayBG")
|
288
|
+
$("#facebox_overlay").addClass("facebox_hide")
|
289
|
+
$("#facebox_overlay").remove()
|
290
|
+
})
|
291
|
+
|
292
|
+
return false
|
293
|
+
}
|
294
|
+
|
295
|
+
/*
|
296
|
+
* Bindings
|
297
|
+
*/
|
298
|
+
|
299
|
+
$(document).bind('close.facebox', function() {
|
300
|
+
$(document).unbind('keydown.facebox')
|
301
|
+
$('#facebox').fadeOut(function() {
|
302
|
+
$('#facebox .content').removeClass().addClass('content')
|
303
|
+
$('#facebox .loading').remove()
|
304
|
+
$(document).trigger('afterClose.facebox')
|
305
|
+
})
|
306
|
+
hideOverlay()
|
307
|
+
})
|
308
|
+
|
309
|
+
})(jQuery);
|