Skip to content
This repository has been archived by the owner on Aug 15, 2018. It is now read-only.

Commit

Permalink
added multiple content type page addition to interface...meh, bad mes…
Browse files Browse the repository at this point in the history
…sage
  • Loading branch information
Josh Adams committed Oct 27, 2008
1 parent 01904ab commit d91a4e8
Show file tree
Hide file tree
Showing 15 changed files with 210 additions and 20 deletions.
4 changes: 3 additions & 1 deletion README.plugins
Expand Up @@ -4,4 +4,6 @@ The API is currently a mess, full of poorly named things. This will change, and

1) register_plugin(klass) will register a page plugin by its main container class. This will enable a user to add your page plugin to a page.
2) register_plugin_nav( title, link ) will register a link for the user-facing nav menu
3) register_admin_plugin_nav( title, link ) will register a link for the admin-facing nav menu. This is how you add bits to the admin interface for managing your plugin.
3) register_admin_menu_entry( section, title, link ) will register a link for the admin-facing nav menu in a given section. This is how you add bits to the admin interface for managing your plugin.
3) add_top_level_menu_entry( name ) will register a link for the admin-facing nav menu in a given section. This is how you add bits to the admin interface for managing your plugin.
4) add_page_type(name, array_of_plugin_names_as_strings) will register a new page type for the add page button in manage pages.
12 changes: 11 additions & 1 deletion app/controllers/admin/pages_controller.rb
Expand Up @@ -44,13 +44,14 @@ def new
def create
@page.name = @page.name.gsub(' ', '_')
if @page.save
attach_page_plugins
message = 'Page Added Successfully'
@preview_url = @page.ancestor_path + @page.name
@page_id = @page.id
respond_to do |format|
format.html{
flash[:notice] = message
redirect_to admin_pages_path
redirect_to admin_page_path(@page)
}
format.js{
flash.now[:message] = message
Expand Down Expand Up @@ -114,4 +115,13 @@ def manage_tree
:initialize => false )
end
end

protected
def attach_page_plugins
@page.reload
params[:page_plugins].each do |page_plugin|
plug = @page.page_plugins.build(:module_type => page_plugin)
end
@page.save
end
end
19 changes: 18 additions & 1 deletion app/views/admin/pages/_page_controls.html.erb
@@ -1,9 +1,26 @@
<% id = rand(Time.now.to_i) -%>
<div class='page_controls'>
<ul>
<li class="direction up"><%= link_to '&uarr;', shift_order_admin_page_path(:id => page.id, :shift => -1), {:style => "text-decoration:none"} -%></li>
<li class="direction down"><%= link_to '&darr;', shift_order_admin_page_path(:id => page.id, :shift => 1), {:style => "text-decoration:none"} -%></li>
<li><%= link_to("X", admin_page_path(page), :method => :delete, :confirm => 'Are you sure? This will delete this page permanently and all sub-pages will be orphaned!') -%></li>
<li><%= link_to("Add", new_admin_page_path(:parent_id => page.id)) -%></li>
<li>
<ul id='dropdown-<%= id -%>' class='dropdown'>
<li>
Add
<ul>
<% Ansuz::PluginManagerInstance.page_types.each do |name, modules| -%>
<li><%= link_to("Add #{name}", new_admin_page_path(:parent_id => page.id, :page_plugins => modules)) -%></li>
<% end -%>
</ul>
</li>
</ul>
</li>
</ul>
<div class='clear'></div>
</div>
<script type='text/javascript'>
jQuery(document).ready(function(){
jQuery("ul#dropdown-<%= id -%>").clickMenu();
})
</script>
3 changes: 3 additions & 0 deletions app/views/admin/pages/new.html.erb
Expand Up @@ -3,5 +3,8 @@
<%= hidden_field 'page', 'parent_id' %>
<%= hidden_field 'page', 'page_order' %>
<%= render :partial => 'form' %>
<% params[:page_plugins].each do |page_plugin| -%>
<%= hidden_field_tag "page_plugins[]", page_plugin -%>
<% end -%>
<%= submit_tag 'Create', :class => 'submit' %>
<% end -%>
2 changes: 1 addition & 1 deletion app/views/admin/shared/_admin_menu.html.erb
@@ -1,5 +1,5 @@
<ul id='admin-menu'>
<% Ansuz::PluginManager::ADMIN_MENU_TOP_LEVEL_ENTRIES.each do |top_level_menu_entry| -%>
<% Ansuz::PluginManagerInstance.admin_menu_top_level_entries.each do |top_level_menu_entry| -%>
<li><span><%= top_level_menu_entry -%></span>
<ul>
<% Ansuz::PluginManagerInstance.admin_menu[top_level_menu_entry].each do |text, url, options| -%>
Expand Down
2 changes: 2 additions & 0 deletions app/views/layouts/admin.html.erb
Expand Up @@ -15,13 +15,15 @@
<%= stylesheet_link_tag 'tree' %>
<%= stylesheet_link_tag 'flashes' %>
<%= stylesheet_link_tag 'acts_as_taggable_stylesheet' %>
<%= stylesheet_link_tag 'clickmenu' %>
<%= javascript_include_tag :defaults -%>
<%= javascript_include_tag 'jquery' -%>
<%= javascript_tag "jQuery.noConflict();" -%>
<%= javascript_include_tag 'jquery.growl.js', 'ansuz/growls' %>
<%= javascript_include_tag 'show_and_hide' %>
<%= javascript_include_tag 'fckeditor/fckeditor' %>
<%= javascript_include_tag 'ansuz/tree' %>
<%= javascript_include_tag 'jquery.clickmenu.pack.js' %>
<!--[if lt IE 7.]><%= javascript_include_tag 'pngfix.js' %><![endif]-->
</head>
<body>
Expand Down
4 changes: 3 additions & 1 deletion config/initializers/setup_admin_menu_entries.rb
@@ -1,6 +1,8 @@
Ansuz::PluginManagerInstance.register_admin_menu_entry "Ansuz", 'Choose a Theme', '/admin/site_settings/edit'
Ansuz::PluginManagerInstance.register_admin_menu_entry "Pages", 'Manage Pages', '/admin/pages'
Ansuz::PluginManagerInstance.register_admin_menu_entry "Content", 'Manage Pages', '/admin/pages'
Ansuz::PluginManagerInstance.register_admin_menu_entry "Ansuz", 'Site Settings', '/admin/site_settings'
Ansuz::PluginManagerInstance.register_admin_menu_entry "Ansuz", 'List Plugins', '/admin/plugins'
Ansuz::PluginManagerInstance.register_admin_menu_entry "Ansuz", 'Logout', '/admin/account/logout'
Ansuz::PluginManagerInstance.register_admin_menu_entry "Ansuz", 'Visit Site', '/'

Ansuz::PluginManagerInstance.register_page_type("Custom Page")
25 changes: 17 additions & 8 deletions lib/ansuz/plugin_manager.rb
@@ -1,13 +1,16 @@
class Ansuz
class PluginManager
attr_accessor :plugins, :plugin_nav, :admin_plugin_nav, :admin_menu
ADMIN_MENU_TOP_LEVEL_ENTRIES = ["Pages", "Add-ons", "Ansuz"]
attr_accessor :plugins, :plugin_nav, :admin_plugin_nav, :admin_menu, :admin_menu_top_level_entries, :page_types
ADMIN_MENU_TOP_LEVEL_ENTRIES = ["Content", "Add-ons", "Ansuz"]

def initialize
@plugins = []
@plugin_nav = []
@admin_plugin_nav = []
@admin_menu = setup_admin_menu
@admin_menu = {}
@admin_menu_top_level_entries = ADMIN_MENU_TOP_LEVEL_ENTRIES.clone
@page_types = []
setup_admin_menu
end

# A plugin can call register_plugin(ClassName) to add itself to the plugins array
Expand All @@ -31,18 +34,24 @@ def register_admin_plugin_nav title, link
end

def register_admin_menu_entry top_level_menu_name, text, link, options={}
raise "There was an attempt to add a link to the admin menu with a non-existent top level menu entry as parent." unless ADMIN_MENU_TOP_LEVEL_ENTRIES.include?(top_level_menu_name)
raise "There was an attempt to add a link to the admin menu with a non-existent top level menu entry as parent." unless admin_menu_top_level_entries.include?(top_level_menu_name)
self.admin_menu[top_level_menu_name] << [text, link, options]
end

private
def add_top_level_menu_entry name
@admin_menu_top_level_entries << name unless @admin_menu_top_level_entries.include?(name)
@admin_menu[name] = []
end

# The admin menu is just a hash with an array for sub menus for now.
def setup_admin_menu
hsh = {}
ADMIN_MENU_TOP_LEVEL_ENTRIES.each do |menu_entry|
hsh[menu_entry] = []
add_top_level_menu_entry menu_entry
end
hsh
end

def register_page_type name, modules=[]
@page_types << [name, modules]
end
end
end
1 change: 1 addition & 0 deletions public/javascripts/jquery.clickmenu.pack.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 26 additions & 0 deletions public/stylesheets/admin.css
Expand Up @@ -222,3 +222,29 @@ a.button.icon.edit{
a.button.icon.rss{
background-image: url(/images/famfamfam_icons/rss.png)
}
#tree ul li .page_controls ul.dropdown li{
float: none;
}

.clickMenu div.outerbox{
font-size: 100%;
}

.clickMenu li.main{
font-size: 85%;
}

.clickMenu li.main:hover {
background-color: #ddd !important;
}

.clickMenu li.main li{
min-width: 120px !important;
}

.clickMenu li.main ul.innerBox li:hover, .clickMenu li.main ul.innerBox li:hover a {
background-color: #ccc !important;
}
.clickMenu li.main ul.innerBox li a:hover {
cursor: pointer;
}
115 changes: 115 additions & 0 deletions public/stylesheets/clickmenu.css
@@ -0,0 +1,115 @@
div.cmDiv
{
border: 1px solid black;
background-color: #eee;
}
.clickMenu
{
margin: 0;
padding: 0;
cursor: default;
}
.clickMenu, .clickMenu ul
{
list-style: none;
}
.clickMenu ul
{
margin: 0;
padding: 2px;
border: 1px solid black;
background-color: #eee;
min-width: 100px; /* ie doesnt know this :/ */
//float: left;/*ie again*/
//width: 100%;/*and again*/
}
.clickMenu div.outerbox
{
display: none;
min-width: 106px; /* firefox produces animation-flickering when the box is bigger than this :/ */
}
.clickMenu div.inner
{
//top: 20px; /* for ie */
left: 0;
margin: 0;
}
.clickMenu div.inner div.outerbox
{
margin: 0;
left: 98px;
//left: 90px; /* for ie */
top: -3px;
}
.clickMenu li
{
position: relative;
padding: 0 20px 0 2px;
/*white-space: nowrap; does not really work in ie */
}
.clickMenu li.main
{
float: left;
padding: 0 10px;
background-color: #eee;
//height: 20px; /* for ie */
}
.clickMenu li.main li
{
z-index: 2;
min-width: 78px;
}
.clickMenu li.hover
{
z-index: 1 !important; /* the hover z-index has to be below the normal one the hovering items may be drawn over a submenu */
background-color: #aaa;
}
.clickMenu img.liArrow
{
position: absolute;
right: 5px;
top: 0.41em;
}
.clickMenu a
{
text-decoration: none;
color: black;
cursor: default;
}
/* thats for the shadowbox */
html>body div.outerbox
{
padding: 0 5px 5px 0;
}
html>body div.shadowbox1
{
position: absolute;
right: 0;
bottom: 5px;
width: 5px;
height: 100%;
background: url(myshadow.png) no-repeat right top;
}
html>body div.shadowbox2
{
position: absolute;
bottom: 0;
right: 5px;
height: 5px;
width: 100%;
background: url(myshadow.png) left bottom;
}
html>body div.shadowbox3
{
position: absolute;
bottom: 0;
right: 0;
height: 5px;
width: 5px;
background: url(myshadow.png) no-repeat right bottom;
}
html>body .innerbox
{
margin: 0;
display: inherit;
}
12 changes: 6 additions & 6 deletions public/stylesheets/tree.css
@@ -1,20 +1,20 @@
/* Index tree */
#tree ul {
#tree ul.main_tree {
padding-left:20px;
}
#tree ul li .page_controls{
#tree ul.main_tree li .page_controls{
display: block;
float: right;
}
#tree ul li .page_controls{
#tree ul.main_tree li .page_controls{
}
#tree ul li .page_controls li{
#tree ul.main_tree li .page_controls li{
list-style-type: none;
float: left;
}
#tree ul li .page_controls a{
#tree ul.main_tree li .page_controls a{
margin-right: 10px;
}
#tree ul li .page_controls a:hover {
#tree ul.main_tree li .page_controls a:hover {
background-color: #eee;
}
3 changes: 2 additions & 1 deletion vendor/plugins/ansuz_blog/init.rb
Expand Up @@ -2,4 +2,5 @@
require 'blog_post'
require 'blog_comment'
Ansuz::PluginManagerInstance.register_plugin_nav('Blog', '/articles')
Ansuz::PluginManagerInstance.register_admin_plugin_nav('Blog Posts', '/admin/blog_posts')
Ansuz::PluginManagerInstance.register_admin_menu_entry('Content', 'Blog > All Posts', '/admin/blog_posts')
Ansuz::PluginManagerInstance.register_admin_menu_entry('Content', 'Blog > New Post', '/admin/blog_posts/new')
1 change: 1 addition & 0 deletions vendor/plugins/ansuz_content_section/init.rb
@@ -1,3 +1,4 @@
# Include hook code here
require 'content_section'
Ansuz::PluginManagerInstance.register_plugin(Ansuz::JAdams::ContentSection)
Ansuz::PluginManagerInstance.register_page_type("Content Page", ["Ansuz::JAdams::ContentSection"])
1 change: 1 addition & 0 deletions vendor/plugins/ansuz_photo_album/init.rb
Expand Up @@ -2,3 +2,4 @@
require 'photo_album'
require 'photo_album_photo'
Ansuz::PluginManagerInstance.register_plugin(Ansuz::JAdams::PhotoAlbum)
Ansuz::PluginManagerInstance.register_page_type("Photo Album Page", ["Ansuz::JAdams::PhotoAlbum"])

0 comments on commit d91a4e8

Please sign in to comment.