radiant-help-extension 1.1.0
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/HELP_developer.rdoc +92 -0
- data/README.md +35 -0
- data/Rakefile +109 -0
- data/TODO +6 -0
- data/app/controllers/admin/help_controller.rb +59 -0
- data/app/helpers/admin/help_helper.rb +36 -0
- data/app/models/help_doc.rb +42 -0
- data/app/views/admin/help/_admin_index.html.haml +11 -0
- data/app/views/admin/help/_designer_index.html.haml +20 -0
- data/app/views/admin/help/_docs_introduction.html.haml +2 -0
- data/app/views/admin/help/_editing.html.haml +64 -0
- data/app/views/admin/help/_extension_docs_list.html.haml +9 -0
- data/app/views/admin/help/_organizing.html.haml +7 -0
- data/app/views/admin/help/_other_index.html.haml +2 -0
- data/app/views/admin/help/_regions.html.haml +34 -0
- data/app/views/admin/help/_scripts.js.erb +14 -0
- data/app/views/admin/help/_styles.html.haml +128 -0
- data/app/views/admin/help/_tag_reference.html.haml +6 -0
- data/app/views/admin/help/developing.html.haml +19 -0
- data/app/views/admin/help/extension_doc.html.haml +16 -0
- data/app/views/admin/help/index.html.haml +16 -0
- data/app/views/admin/help/role.html.haml +12 -0
- data/config/initializers/radiant_config.rb +3 -0
- data/config/locales/en.yml +3 -0
- data/config/routes.rb +8 -0
- data/cucumber.yml +1 -0
- data/features/support/env.rb +11 -0
- data/features/support/paths.rb +22 -0
- data/help_extension.rb +86 -0
- data/lib/radiant-help-extension.rb +8 -0
- data/lib/tasks/help_extension_tasks.rake +29 -0
- data/radiant-help-extension.gemspec +29 -0
- data/spec/controllers/admin/help_controller_spec.rb +110 -0
- data/spec/models/help_doc_spec.rb +111 -0
- data/spec/spec.opts +6 -0
- data/spec/spec_helper.rb +36 -0
- metadata +87 -0
@@ -0,0 +1,9 @@
|
|
1
|
+
- unless @docs.blank?
|
2
|
+
.Docs
|
3
|
+
%h2= "#{(@role.titleize + ' ') unless @role == 'all'}Help Documents"
|
4
|
+
= render :partial => 'docs_introduction'
|
5
|
+
%ul
|
6
|
+
- @docs.each do |doc|
|
7
|
+
%li
|
8
|
+
- doc_name = doc_extension_dir(doc)
|
9
|
+
= link_to doc_name.titleize, help_extension_doc_url(doc_name, @role)
|
@@ -0,0 +1,7 @@
|
|
1
|
+
%h2 Organizing and Creating Pages
|
2
|
+
%p Pages are organized in a parent/child relationship.
|
3
|
+
%p That means that if you want an "About Us" section on your website and you want to have a page for each member of your staff, each staff page would be a 'child' of the "About Us" page.
|
4
|
+
%h3 Creating
|
5
|
+
%p To create a page, you add a child to another page. Your home page, for example, is the root of your website: all pages stem from your home page and it lives at yoursite.com/
|
6
|
+
%p A child of the home page lives at yoursite.com/about and a child of that child lives at yoursite.com/about/management-team.
|
7
|
+
%p If you think of your pages in terms of a family, you'll see that yoursite.com/about and yoursite.com/services are siblings. That is, they are both children of the home page.
|
@@ -0,0 +1,34 @@
|
|
1
|
+
.Regions
|
2
|
+
%h2 Current Regions
|
3
|
+
%p Below is a list of editable regions from your installation of the application interface
|
4
|
+
- admin.instance_variables.sort.each do |reg|
|
5
|
+
.ui_region
|
6
|
+
%h3{:class => 'region_header'}= reg.to_s.gsub(/^@/,'').camelize
|
7
|
+
- region_instance = admin.send(:instance_variable_get, reg)
|
8
|
+
- if region_instance.respond_to?(:marshal_dump)
|
9
|
+
- unless region_instance.marshal_dump.blank?
|
10
|
+
%ul
|
11
|
+
- region_instance.marshal_dump.each do |key, value|
|
12
|
+
%li
|
13
|
+
%h4= key
|
14
|
+
- value_regions = value.send(:instance_variable_get, "@regions")
|
15
|
+
- unless value_regions.blank?
|
16
|
+
%ul
|
17
|
+
- value_regions.each do |vr_key, vr_value|
|
18
|
+
%li
|
19
|
+
= vr_key
|
20
|
+
- unless vr_value.blank?
|
21
|
+
%ul
|
22
|
+
- vr_value.each do |endpoint|
|
23
|
+
%li= endpoint
|
24
|
+
- else
|
25
|
+
- unless region_instance.blank?
|
26
|
+
%ul
|
27
|
+
- region_instance.each do |reg|
|
28
|
+
%li
|
29
|
+
%h4
|
30
|
+
= reg.name
|
31
|
+
- reg.each do |r|
|
32
|
+
%p
|
33
|
+
= link_to r.name, r.url
|
34
|
+
= "(#{r.url})"
|
@@ -0,0 +1,14 @@
|
|
1
|
+
document.observe('dom:loaded', function(){
|
2
|
+
$$('div.ui_region').each(function(element){
|
3
|
+
element.down('ul').hide();
|
4
|
+
element.observe('click',function(e){
|
5
|
+
this.down('ul').toggle();
|
6
|
+
});
|
7
|
+
element.observe('mouseover',function(e){
|
8
|
+
e.target.up('div.ui_region').addClassName('over');
|
9
|
+
});
|
10
|
+
element.observe('mouseout',function(e){
|
11
|
+
e.target.up('div.ui_region').removeClassName('over');
|
12
|
+
});
|
13
|
+
});
|
14
|
+
})
|
@@ -0,0 +1,128 @@
|
|
1
|
+
:sass
|
2
|
+
.region_header
|
3
|
+
padding: 3px
|
4
|
+
.ui_region
|
5
|
+
background: rgb(245, 241, 226)
|
6
|
+
padding: 0 0 10px
|
7
|
+
margin: 0 10px
|
8
|
+
.over
|
9
|
+
background: rgb(234, 227, 197)
|
10
|
+
cursor: hand
|
11
|
+
cursor: pointer
|
12
|
+
.Help
|
13
|
+
color: #222
|
14
|
+
font-size: 16px
|
15
|
+
overflow: hidden
|
16
|
+
min-width: 900px
|
17
|
+
.HelpNav
|
18
|
+
background: rgb(245, 241, 226)
|
19
|
+
border: 1px solid rgb(234, 227, 197)
|
20
|
+
margin: 0 0 12px 0
|
21
|
+
padding: 5px 0
|
22
|
+
p
|
23
|
+
margin: 0
|
24
|
+
padding: 0
|
25
|
+
a
|
26
|
+
color: #000
|
27
|
+
line-height: 1.8
|
28
|
+
margin: 0 -4px 0 1px
|
29
|
+
padding: 9px 10px
|
30
|
+
text-decoration: none
|
31
|
+
a:hover
|
32
|
+
color: #000
|
33
|
+
background: #fff
|
34
|
+
.Extras
|
35
|
+
float: right
|
36
|
+
margin-top: 40px
|
37
|
+
padding-bottom: 10px
|
38
|
+
width: 38%
|
39
|
+
.Docs, .Regions
|
40
|
+
background: rgb(245, 241, 226)
|
41
|
+
border-bottom: 2px solid rgb(234, 227, 197)
|
42
|
+
margin: 0
|
43
|
+
*
|
44
|
+
margin: 0 10px 4px 10px
|
45
|
+
* *
|
46
|
+
margin: 0
|
47
|
+
h2
|
48
|
+
background: rgb(234, 227, 197)
|
49
|
+
color: #000
|
50
|
+
font-weight: normal
|
51
|
+
margin: 0 0 5px 0
|
52
|
+
padding: 2px 5px
|
53
|
+
.over
|
54
|
+
background: rgb(234, 227, 197)
|
55
|
+
p, li
|
56
|
+
color: #333
|
57
|
+
line-height: 1.3
|
58
|
+
margin: 0 10px 10px 0
|
59
|
+
.MainTopics
|
60
|
+
float: left
|
61
|
+
margin: 0 0 0 8px
|
62
|
+
width: 60%
|
63
|
+
min-height: 300px
|
64
|
+
h1
|
65
|
+
margin-bottom: 12px
|
66
|
+
h2
|
67
|
+
border-bottom: 4px solid #444
|
68
|
+
font-weight: normal
|
69
|
+
font-size: 1.4em
|
70
|
+
margin: 24px 0 6px 0
|
71
|
+
padding: 2px 2px 6px 0
|
72
|
+
h3
|
73
|
+
color: #222
|
74
|
+
font-size: 1.1em
|
75
|
+
margin: 6px 0 6px 0
|
76
|
+
h4
|
77
|
+
color: #222
|
78
|
+
font-size: 0.95em
|
79
|
+
margin: 3px 0 3px 0
|
80
|
+
padding: 3px 0
|
81
|
+
p, li
|
82
|
+
color: #444
|
83
|
+
line-height: 1.4
|
84
|
+
margin: 0 0 6px 10px
|
85
|
+
ul, ol
|
86
|
+
margin: 0 0 0 20px
|
87
|
+
ul
|
88
|
+
margin: 0 0 0 20px
|
89
|
+
list-style: square
|
90
|
+
ol
|
91
|
+
margin: 0 0 0 28px
|
92
|
+
list-style-type: decimal
|
93
|
+
code
|
94
|
+
background: #eee
|
95
|
+
color: #222
|
96
|
+
line-height: inherit
|
97
|
+
padding: 4px 2px
|
98
|
+
pre
|
99
|
+
background: #eee
|
100
|
+
color: #222
|
101
|
+
line-height: 1.4
|
102
|
+
margin: 16px 0 16px 0
|
103
|
+
padding: 12px 0 12px 12px
|
104
|
+
width: 99%
|
105
|
+
white-space: pre-wrap
|
106
|
+
word-wrap: break-word
|
107
|
+
@media print
|
108
|
+
#header, #footer, .HelpNav, .Extras, hr
|
109
|
+
display: none
|
110
|
+
#footer
|
111
|
+
display: none
|
112
|
+
.MainTopics
|
113
|
+
min-width: 90%
|
114
|
+
body
|
115
|
+
background:-color white
|
116
|
+
font-family: "Cambria", "Hoefler Text", "Georgia", "Times New Roman", times, serif
|
117
|
+
font-size: 12pt
|
118
|
+
a:link:after, a:visited:after
|
119
|
+
color: #222
|
120
|
+
content: " : " attr(href) ""
|
121
|
+
font-size: 9pt
|
122
|
+
font-weight: normal
|
123
|
+
div.popup
|
124
|
+
border: none
|
125
|
+
.reference
|
126
|
+
border: none
|
127
|
+
width: 50em
|
128
|
+
height: 100%
|
@@ -0,0 +1,19 @@
|
|
1
|
+
- content_for :page_css do
|
2
|
+
= render :partial => 'styles.html.haml'
|
3
|
+
- content_for :page_scripts do
|
4
|
+
= render :partial => 'scripts.js.erb'
|
5
|
+
|
6
|
+
.Help
|
7
|
+
.MainTopics
|
8
|
+
- render_region :regions do |shard|
|
9
|
+
- shard.regions_introduction do
|
10
|
+
%h2 Altering Regions
|
11
|
+
%p Listed below are the main regions that may be altered with 'partial' injection. You may inject partials into the interface by adding code such this into your extension's activate method:
|
12
|
+
%pre admin.help.index.add :main, "client_welcome", :before => "introduction"
|
13
|
+
%ul
|
14
|
+
%li "admin.help.index" refers to the main help page (the help index) and ".add" is called to add information to the section provided in the next argument.
|
15
|
+
%li ":main" is the argument that specifies which section will receive your partial.
|
16
|
+
%li "client_welcome" is the partial that you want to add and should be located in your extension directory app/views/admin/help/_client_welcome.html.haml
|
17
|
+
%li :before => "introduction" will place your partial before the introduction region (or you could do :after). This is optional, and if left out, your partial will be appended to the ":main" section.
|
18
|
+
- shard.regions_map do
|
19
|
+
= render 'regions'
|
@@ -0,0 +1,16 @@
|
|
1
|
+
- content_for :page_css do
|
2
|
+
= render :partial => 'styles.html.haml'
|
3
|
+
- content_for :page_scripts do
|
4
|
+
= render :partial => 'scripts.js.erb'
|
5
|
+
|
6
|
+
.Help
|
7
|
+
.MainTopics
|
8
|
+
- unless @doc.blank?
|
9
|
+
%h1= "#{@doc_name} Extension"
|
10
|
+
- if @doc_path
|
11
|
+
= @doc
|
12
|
+
- else
|
13
|
+
%p= "Sorry. We couldn't find information about the #{@doc_name} Extension#{' for the role: ' + @role unless @role.to_s == 'all'}."
|
14
|
+
.Extras
|
15
|
+
- render_region :extras do |extras|
|
16
|
+
- extras.render_region :extension_docs_list
|
@@ -0,0 +1,16 @@
|
|
1
|
+
- content_for :page_css do
|
2
|
+
= render :partial => 'styles.html.haml'
|
3
|
+
- content_for :page_scripts do
|
4
|
+
= render :partial => 'scripts.js.erb'
|
5
|
+
|
6
|
+
.Help
|
7
|
+
.MainTopics
|
8
|
+
%h1= @cms_name + " Help"
|
9
|
+
- render_region :main do |main|
|
10
|
+
- main.introduction do
|
11
|
+
%p Use this reference to help guide your way through editing your website.
|
12
|
+
- main.render_region :organizing
|
13
|
+
- main.render_region :editing
|
14
|
+
.Extras
|
15
|
+
- render_region :extras do |extras|
|
16
|
+
- extras.render_region :extension_docs_list
|
@@ -0,0 +1,12 @@
|
|
1
|
+
- content_for :page_css do
|
2
|
+
= render :partial => 'styles.html.haml'
|
3
|
+
- content_for :page_scripts do
|
4
|
+
= render :partial => 'scripts.js.erb'
|
5
|
+
|
6
|
+
.Help
|
7
|
+
.MainTopics
|
8
|
+
%h1= "#{(@custom_role || @role).titleize} Help"
|
9
|
+
= render :partial => "#{@role}_index"
|
10
|
+
.Extras
|
11
|
+
- render_region :extras do |extras|
|
12
|
+
- extras.render_region :extension_docs_list
|
data/config/routes.rb
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
ActionController::Routing::Routes.draw do |map|
|
2
|
+
map.with_options :controller => 'admin/help', :conditions => {:method => :get} do |help|
|
3
|
+
help.developing 'admin/help/developing', :action => 'developing'
|
4
|
+
help.help_role 'admin/help/role/:role', :action => 'role', :role => nil
|
5
|
+
help.help_extension_doc 'admin/help/extension/:extension_name/:role', :action => 'extension_doc', :extension_name => 'all', :role => 'all'
|
6
|
+
help.help 'admin/help', :action => 'index'
|
7
|
+
end
|
8
|
+
end
|
data/cucumber.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
default: --format progress features --tags ~@proposed,~@in_progress
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# Sets up the Rails environment for Cucumber
|
2
|
+
ENV["RAILS_ENV"] = "test"
|
3
|
+
# Extension root
|
4
|
+
extension_env = File.expand_path(File.dirname(__FILE__) + '/../../../../../config/environment')
|
5
|
+
require extension_env+'.rb'
|
6
|
+
|
7
|
+
Dir.glob(File.join(RADIANT_ROOT, "features", "**", "*.rb")).each {|step| require step unless step =~ /datasets_loader\.rb$/}
|
8
|
+
|
9
|
+
Cucumber::Rails::World.class_eval do
|
10
|
+
dataset :help
|
11
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module NavigationHelpers
|
2
|
+
|
3
|
+
# Extend the standard PathMatchers with your own paths
|
4
|
+
# to be used in your features.
|
5
|
+
#
|
6
|
+
# The keys and values here may be used in your standard web steps
|
7
|
+
# Using:
|
8
|
+
#
|
9
|
+
# When I go to the "help" admin page
|
10
|
+
#
|
11
|
+
# would direct the request to the path you provide in the value:
|
12
|
+
#
|
13
|
+
# admin_help_path
|
14
|
+
#
|
15
|
+
PathMatchers = {} unless defined?(PathMatchers)
|
16
|
+
PathMatchers.merge!({
|
17
|
+
# /help/i => 'admin_help_path'
|
18
|
+
})
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
World(NavigationHelpers)
|
data/help_extension.rb
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
# Uncomment this if you reference any of your controllers in activate
|
2
|
+
require_dependency 'application_controller'
|
3
|
+
# You'll need this if you are going to add regions into your extension interface.
|
4
|
+
require 'ostruct'
|
5
|
+
# These are needed for parsing the HELP.rdoc files
|
6
|
+
require 'rdoc/markup/simple_markup'
|
7
|
+
require 'rdoc/markup/simple_markup/to_html'
|
8
|
+
|
9
|
+
class HelpExtension < Radiant::Extension
|
10
|
+
version RadiantHelpExtension::VERSION
|
11
|
+
description RadiantHelpExtension::DESCRIPTION
|
12
|
+
url RadiantHelpExtension::URL
|
13
|
+
|
14
|
+
def activate
|
15
|
+
# This adds a tab to the interface after the Layouts tab, and allows all users to access it.
|
16
|
+
tab 'Help' do
|
17
|
+
add_item('Editing', '/admin/help')
|
18
|
+
add_item('Designing', '/admin/help/role/designer')
|
19
|
+
add_item('Administering', '/admin/help/role/admin')
|
20
|
+
if Rails.env.development?
|
21
|
+
add_item('Developing', '/admin/help/developing')
|
22
|
+
end
|
23
|
+
add_item('Extensions', '/admin/help/extension')
|
24
|
+
end
|
25
|
+
# The old way of doing it prior to Radiant 0.9: it now adds a NavSubItem to the "Content" NavTab (e.g. in line with "Pages")
|
26
|
+
# admin.tabs.add "Help", "/admin/help", :after => "Layouts", :visibility => [:all]
|
27
|
+
|
28
|
+
# This adds information to the Radiant interface. In this extension, we're dealing with "help" views
|
29
|
+
# so :help is an attr_accessor. If you're creating an extension for tracking moons and stars, you might
|
30
|
+
# put attr_accessor :moon, :star
|
31
|
+
Radiant::AdminUI.class_eval do
|
32
|
+
attr_accessor :help
|
33
|
+
end
|
34
|
+
|
35
|
+
# initialize regions for help (which we created above)
|
36
|
+
admin.help = load_default_help_regions
|
37
|
+
|
38
|
+
# Provide the ability to replace regions...
|
39
|
+
# Don't like how the regions are setup? Hack it without changing this extension's code
|
40
|
+
# Be forewarned, this allows you to completely change the UI
|
41
|
+
Radiant::AdminUI::RegionSet.class_eval do
|
42
|
+
def replace(region=nil, partial=nil)
|
43
|
+
raise ArgumentError, "You must specify a region and a partial" unless region and partial
|
44
|
+
self[region].replace([partial])
|
45
|
+
end
|
46
|
+
end
|
47
|
+
# You could, for example create your own role based interface with this
|
48
|
+
# admin.help.main.replace('main','main_for_admins_only')
|
49
|
+
# But I only threw this in here to allow you to change the help docs easily if you want.
|
50
|
+
# I am merely providing the rope...
|
51
|
+
|
52
|
+
# Finally, allow all the helpers to be used anywhere
|
53
|
+
ApplicationController.class_eval {
|
54
|
+
helper Admin::HelpHelper
|
55
|
+
}
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
# This is where we define all of the regions to be used in the views and partials
|
61
|
+
def load_default_help_regions
|
62
|
+
OpenStruct.new.tap do |help|
|
63
|
+
help.index = Radiant::AdminUI::RegionSet.new do |index|
|
64
|
+
index.main.concat %w{introduction organizing editing}
|
65
|
+
index.page_details.concat %w{page_details_introduction slug breadcrumb}
|
66
|
+
index.filter.concat %w{filter_basics}
|
67
|
+
index.available_tags.concat %w{available_tags_basics}
|
68
|
+
index.layout.concat %w{layout_basics}
|
69
|
+
index.page_type.concat %w{page_type_basics}
|
70
|
+
index.saving.concat %w{saving_basics}
|
71
|
+
index.extras.concat %w{extension_docs_list}
|
72
|
+
end
|
73
|
+
help.role = Radiant::AdminUI::RegionSet.new do |role|
|
74
|
+
role.extras.concat %w{extension_docs_list}
|
75
|
+
role.regions.concat %w{regions_introduction}
|
76
|
+
end
|
77
|
+
help.extension_doc = Radiant::AdminUI::RegionSet.new do |extension_doc|
|
78
|
+
extension_doc.extras.concat %w{extension_docs_list}
|
79
|
+
end
|
80
|
+
help.developing = Radiant::AdminUI::RegionSet.new do |developing|
|
81
|
+
developing.regions.concat %w{regions_introduction regions_map}
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
namespace :radiant do
|
2
|
+
desc "Shows some help information"
|
3
|
+
task :help do
|
4
|
+
puts %{
|
5
|
+
Finding help for Radiant
|
6
|
+
========================
|
7
|
+
The Help extension that you have installed in vendor/extensions
|
8
|
+
provides information about using Radiant.
|
9
|
+
|
10
|
+
If you need some help with your installation, try joining the
|
11
|
+
Radiant email lists and ask your questions there. For information
|
12
|
+
visit http://radiantcms.org/mailing-list/
|
13
|
+
|
14
|
+
You may also find help from the Radiant community in the
|
15
|
+
#radiantcms IRC channel on irc.freenode.net
|
16
|
+
|
17
|
+
Lastly, checkout the companies listed at
|
18
|
+
http://wiki.radiantcms.org/Radiant_Pros
|
19
|
+
|
20
|
+
Extensions
|
21
|
+
==========
|
22
|
+
You may find other extensions at http://ext.radiantcms.org
|
23
|
+
|
24
|
+
To install them (with Radiant version 0.6.9 or later) you may
|
25
|
+
run 'script/extension install the_extension_name'. And if you'd
|
26
|
+
like more information, try 'script/extension help'
|
27
|
+
}
|
28
|
+
end
|
29
|
+
end
|