simple-tooltip 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/Gemfile +4 -0
- data/LICENSE +21 -0
- data/README.markdown +136 -0
- data/Rakefile +2 -0
- data/TODO +13 -0
- data/lib/generators/simple_tooltip/install_generator.rb +95 -0
- data/lib/generators/simple_tooltip/templates/app/controllers/tooltips_controller.rb +117 -0
- data/lib/generators/simple_tooltip/templates/app/helpers/tooltip_helper.rb +25 -0
- data/lib/generators/simple_tooltip/templates/app/models/tooltip.rb +81 -0
- data/lib/generators/simple_tooltip/templates/app/views/tooltips/_form.html.erb +41 -0
- data/lib/generators/simple_tooltip/templates/app/views/tooltips/edit.html.erb +6 -0
- data/lib/generators/simple_tooltip/templates/app/views/tooltips/index.html.erb +29 -0
- data/lib/generators/simple_tooltip/templates/app/views/tooltips/new.html.erb +5 -0
- data/lib/generators/simple_tooltip/templates/app/views/tooltips/show.html.erb +31 -0
- data/lib/generators/simple_tooltip/templates/app/views/tooltips/tooltip_content.html.erb +9 -0
- data/lib/generators/simple_tooltip/templates/db/migrate/create_tooltips.rb +15 -0
- data/lib/generators/simple_tooltip/templates/public/images/simple_tooltip_close_icon.png +0 -0
- data/lib/generators/simple_tooltip/templates/public/images/simple_tooltip_help_icon.png +0 -0
- data/lib/generators/simple_tooltip/templates/public/javascripts/simple_tooltip.js +68 -0
- data/lib/generators/simple_tooltip/templates/public/stylesheets/simple_tooltip.css +27 -0
- data/lib/generators/simple_tooltip/templates/test/fixtures/tooltips.yml +24 -0
- data/lib/generators/simple_tooltip/templates/test/functional/tooltips_controller_test.rb +59 -0
- data/lib/generators/simple_tooltip/templates/test/unit/helpers/tooltips_helper_test.rb +8 -0
- data/lib/generators/simple_tooltip/templates/test/unit/tooltip_test.rb +97 -0
- data/lib/simple_tooltip.rb +3 -0
- data/lib/simple_tooltip/version.rb +3 -0
- data/simple_tooltip.gemspec +31 -0
- metadata +177 -0
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2011 Robert Jones, Craic Computing LLC
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.markdown
ADDED
@@ -0,0 +1,136 @@
|
|
1
|
+
SimpleTooltip
|
2
|
+
=============
|
3
|
+
|
4
|
+
Simple and flexible Tooltip Help for Rails applications
|
5
|
+
|
6
|
+
There are many JavaScript plugins that provide basic tooltip (popup) help for web pages. These work by including the
|
7
|
+
text of the help message directly in the content of each page.
|
8
|
+
|
9
|
+
But this approach fails when the information requires more than one paragraph and when more than plain
|
10
|
+
text is required. For example, the help message might require a link to an external web site.
|
11
|
+
|
12
|
+
With SimpleTooltip you create tooltip help content in a web form and record it in the database via a Tooltip model.
|
13
|
+
Content can be created in plain text, HTML, Markdown and Textile, allowing tooltips to use the
|
14
|
+
full features of HTML, including links, CSS styling, etc.
|
15
|
+
|
16
|
+
Tooltip links, typically small icons, are placed in your views with calls to a simple helper method that refer
|
17
|
+
to the related content by title.
|
18
|
+
|
19
|
+
Tooltip records include a locale column that defines the language used for their content. Multiple tooltips can
|
20
|
+
be created with the same title but different locales. When a given title is requested, the code tries to find
|
21
|
+
a version that matches the user's current locale.
|
22
|
+
|
23
|
+
SimpleTooltip helps bridge the gap between short, fixed tooltips and full help pages.
|
24
|
+
|
25
|
+
Tooltips are displayed via a [jQuery](http://jquery.com "jQuery"). They can be configured to appear transiently when a user hovers over a link icon,
|
26
|
+
or to appear when the link icon is clicked, remaining until closed by a click within the tooltip.
|
27
|
+
|
28
|
+
|
29
|
+
If the client browser does not have JavaScript enabled, the tooltip links take the user to a separate help
|
30
|
+
page.
|
31
|
+
|
32
|
+
Developers can customize the styling of the tooltip content via CSS definitions and tooltip icons can be replaced with others.
|
33
|
+
|
34
|
+
|
35
|
+
Prerequisites
|
36
|
+
=============
|
37
|
+
|
38
|
+
The initial release of SimpleTooltip works [Rails](http://rubyonrails.org "Rails 3") and [jQuery](http://jquery.com "jQuery"). It is not expected to work with Rails 2.
|
39
|
+
|
40
|
+
|
41
|
+
Installation
|
42
|
+
============
|
43
|
+
|
44
|
+
SimpleTooltip is distributed as a Ruby Gem and is installed in an application via a Rails generator.
|
45
|
+
|
46
|
+
1: Install the gem on your system
|
47
|
+
|
48
|
+
$ gem install simple-tooltip
|
49
|
+
|
50
|
+
The gem is hosted at [Ruby Gems](https://rubygems.org "Ruby Gems")
|
51
|
+
|
52
|
+
2: Within your Rails application, run the generator
|
53
|
+
|
54
|
+
$ rails generate simple_tooltip:install
|
55
|
+
|
56
|
+
(note the underscore in the generator name - this seems to be a requirement of the Rails generator machinery)
|
57
|
+
|
58
|
+
The generator creates the following items
|
59
|
+
|
60
|
+
* A Tooltip model, controller and views and a database migration
|
61
|
+
* A stylesheet, javascript file and icon image files
|
62
|
+
* Tests
|
63
|
+
|
64
|
+
3: Setup your gem dependencies
|
65
|
+
|
66
|
+
Add this line to your Gemfile and run `$ bundle install`
|
67
|
+
|
68
|
+
gem 'simple-tooltip'
|
69
|
+
|
70
|
+
4: Create the tooltips table in your database
|
71
|
+
|
72
|
+
$ rake db:migrate
|
73
|
+
|
74
|
+
5: Include the JQuery file
|
75
|
+
|
76
|
+
Make sure you have the jQuery JavaScript library installed (via jquery-rails)'
|
77
|
+
$ rails generate jquery:install
|
78
|
+
|
79
|
+
Then add this line to `app/views/layouts/application.html.erb` after other JavaScript files
|
80
|
+
<%= javascript_include_tag 'simple_tooltip.js' %>
|
81
|
+
|
82
|
+
The stylesheet should be included automatically.
|
83
|
+
|
84
|
+
6: Now create some tooltips
|
85
|
+
|
86
|
+
Start your application and go to /tooltips/new
|
87
|
+
|
88
|
+
7: In the views of other models, add links to your tooltip records
|
89
|
+
|
90
|
+
For example:
|
91
|
+
|
92
|
+
<%= tooltip('email format', :hover) %>
|
93
|
+
<%= tooltip('privacy agreement', :click) %>
|
94
|
+
|
95
|
+
|
96
|
+
Usage
|
97
|
+
=====
|
98
|
+
|
99
|
+
Tooltips are defined in your views with the tooltip helper method, found in `app/helpers/tooltip_helper.rb`
|
100
|
+
|
101
|
+
Each tooltip record in the database should be given a title, preferably something informative such as 'phone number format'.
|
102
|
+
This title is supplied to the tooltip helper in order to retrieve the matching record.
|
103
|
+
|
104
|
+
Multiple calls to the helper can use the same title. They will operate independently.
|
105
|
+
|
106
|
+
The tooltip 'popup' is displayed in one of two modes.
|
107
|
+
|
108
|
+
The default `:hover` mode specifies that the tooltip will appear when the mouse is held over the help icon and will
|
109
|
+
disappear when the mouse leaves that icon.
|
110
|
+
|
111
|
+
With the `:click` mode, the tooltip appears then the icon is clicked. The tooltip remains in view until the `close` icon at the
|
112
|
+
top of the tooltip is clicked or until another tooltip help icon is clicked.
|
113
|
+
|
114
|
+
This mode is used when the tooltip contains a link to another web page or when the content is extensive.
|
115
|
+
|
116
|
+
|
117
|
+
Customizing
|
118
|
+
===========
|
119
|
+
|
120
|
+
Although the Tooltip model, etc use the word `tooltip`, the images and other asset files use the longer form `simple_tooltip`. This is
|
121
|
+
intentional as a number of the JavaScript tooltip solutions use the shorter form.
|
122
|
+
|
123
|
+
The help and close icons are found in `public/images/simple_tooltip_help_icon.png` and `public/images/simple_tooltip_close_icon.png`
|
124
|
+
respectively. The images can be replaced as long as the file names stay the same. If you want to change the filenames you will
|
125
|
+
need to modify them in the JavaScript file.
|
126
|
+
|
127
|
+
The stylesheet is found at `public/stylesheets/simple_tooltip.css` and defines two class selectors that affect how the icons are displayed and an ID selector that defines how the 'popup'
|
128
|
+
tooltip content is displayed.
|
129
|
+
|
130
|
+
The jQuery JavaScript is found at `public/javascripts/simple_tooltip.js`. You should not need to modify this file.
|
131
|
+
|
132
|
+
SimpleTooltip is written by [Rob Jones](http://github.com/craic "Rob Jones") at [Craic Computing](http://craic.com "Craic Computing") in Seattle. It is distributed freely under the MIT license.
|
133
|
+
|
134
|
+
|
135
|
+
|
136
|
+
|
data/Rakefile
ADDED
data/TODO
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
March 2011 - initial release
|
2
|
+
|
3
|
+
- add instructions to README on adding tooltip links on static pages - explicit HTML
|
4
|
+
|
5
|
+
- add an action that clones an existing tooltip with an alternate locale
|
6
|
+
|
7
|
+
- include link to Google Translate to facilitate creation of tooltips in
|
8
|
+
alternate locales
|
9
|
+
|
10
|
+
- improve the styling of the tooltip popups - either directly with 'themes' or
|
11
|
+
through incorporating jQuery tooltip/popup plugins
|
12
|
+
|
13
|
+
|
@@ -0,0 +1,95 @@
|
|
1
|
+
module SimpleTooltip
|
2
|
+
module Generators
|
3
|
+
class InstallGenerator < ::Rails::Generators::Base
|
4
|
+
source_root File.expand_path('../templates', __FILE__)
|
5
|
+
|
6
|
+
desc "This generator installs all the files necessary for the simple_tooltip gem"
|
7
|
+
|
8
|
+
|
9
|
+
def copy_stylesheet_and_images
|
10
|
+
path = "public/stylesheets/simple_tooltip.css"
|
11
|
+
copy_file "./#{path}", path
|
12
|
+
path = "public/images/simple_tooltip_help_icon.png"
|
13
|
+
copy_file "./#{path}", path
|
14
|
+
path = "public/images/simple_tooltip_close_icon.png"
|
15
|
+
copy_file "./#{path}", path
|
16
|
+
end
|
17
|
+
|
18
|
+
def copy_javascript
|
19
|
+
path = "public/javascripts/simple_tooltip.js"
|
20
|
+
copy_file "./#{path}", path
|
21
|
+
end
|
22
|
+
|
23
|
+
def copy_migration
|
24
|
+
# Migration file name is preceded by the date/time string - UTC timestamp Time.now.gmtime.strftime("%Y%m%d%H%M%S")
|
25
|
+
copy_file "./db/migrate/create_tooltips.rb",
|
26
|
+
"db/migrate/#{Time.now.gmtime.strftime("%Y%m%d%H%M%S")}_create_tooltips.rb"
|
27
|
+
end
|
28
|
+
|
29
|
+
def copy_app_files
|
30
|
+
path = "app/controllers/tooltips_controller.rb"
|
31
|
+
copy_file "./#{path}", path
|
32
|
+
path = "app/models/tooltip.rb"
|
33
|
+
copy_file "./#{path}", path
|
34
|
+
path = "app/helpers/tooltip_helper.rb"
|
35
|
+
copy_file "./#{path}", path
|
36
|
+
path = "app/views/tooltips"
|
37
|
+
directory "./#{path}", path
|
38
|
+
end
|
39
|
+
|
40
|
+
def copy_tests
|
41
|
+
path = "test/unit/tooltip_test.rb"
|
42
|
+
copy_file "./#{path}", path
|
43
|
+
path = "test/unit/helpers/tooltips_helper_test.rb"
|
44
|
+
copy_file "./#{path}", path
|
45
|
+
path = "test/fixtures/tooltips.yml"
|
46
|
+
copy_file "./#{path}", path
|
47
|
+
path = "test/functional/tooltips_controller_test.rb"
|
48
|
+
copy_file "./#{path}", path
|
49
|
+
end
|
50
|
+
|
51
|
+
# Add this multi line definition to the routes file - but only a single call to route
|
52
|
+
# otherwise they are placed in reverse line order!
|
53
|
+
def setup_route
|
54
|
+
route "resources :tooltips do\n" +
|
55
|
+
" collection do\n" +
|
56
|
+
" get 'tooltip_content'\n" +
|
57
|
+
" end\n" +
|
58
|
+
" end"
|
59
|
+
end
|
60
|
+
|
61
|
+
# Output installation instructions for the user
|
62
|
+
def instructions
|
63
|
+
puts '---------------------------------------------------------------'
|
64
|
+
puts 'To complete your installation...'
|
65
|
+
puts ''
|
66
|
+
puts "1: Add this gem to your project Gemfile and run 'bundle install'"
|
67
|
+
puts ''
|
68
|
+
puts " gem 'simple-tooltip'"
|
69
|
+
puts ''
|
70
|
+
puts '2: Run db:migrate to create the tooltips database table'
|
71
|
+
puts ''
|
72
|
+
puts " $ rake db:migrate"
|
73
|
+
puts ''
|
74
|
+
puts '3: Make sure you have the jQuery JavaScript library installed (via jquery-rails)'
|
75
|
+
puts ''
|
76
|
+
puts ' $ rails generate jquery:install'
|
77
|
+
puts ''
|
78
|
+
puts '4: Check that these first two lines are in layouts/application.html.erb and add the third'
|
79
|
+
puts ''
|
80
|
+
puts ' <%= stylesheet_link_tag :all %>'
|
81
|
+
puts ' <%= javascript_include_tag :defaults %>'
|
82
|
+
puts " <%= javascript_include_tag 'simple_tooltip.js' %>"
|
83
|
+
puts ''
|
84
|
+
puts '5: Create some tooltip entries in /tooltips and then add links'
|
85
|
+
puts ' to them in views of your other models'
|
86
|
+
puts " <%= tooltip('tooltip title', :hover) %>"
|
87
|
+
puts ''
|
88
|
+
puts 'For more information see the project page on GitHub'
|
89
|
+
puts ' https://github.com/craic/simple_tooltip'
|
90
|
+
puts '---------------------------------------------------------------'
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
class TooltipsController < ApplicationController
|
2
|
+
|
3
|
+
# Add admin before_filter here - something like this (depends on your authorization solution)
|
4
|
+
# This prevents regular users from modifying the help pages
|
5
|
+
# before_filter admin?, :except => [ :tooltip_content ]
|
6
|
+
|
7
|
+
# GET /tooltips
|
8
|
+
# GET /tooltips.xml
|
9
|
+
def index
|
10
|
+
@tooltips = Tooltip.all
|
11
|
+
|
12
|
+
respond_to do |format|
|
13
|
+
format.html # index.html.erb
|
14
|
+
format.xml { render :xml => @tooltips }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# GET /tooltips/1
|
19
|
+
# GET /tooltips/1.xml
|
20
|
+
def show
|
21
|
+
@tooltip = Tooltip.find(params[:id])
|
22
|
+
|
23
|
+
respond_to do |format|
|
24
|
+
format.html # show.html.erb
|
25
|
+
format.xml { render :xml => @tooltip }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# GET /tooltips/new
|
30
|
+
# GET /tooltips/new.xml
|
31
|
+
def new
|
32
|
+
@tooltip = Tooltip.new
|
33
|
+
|
34
|
+
respond_to do |format|
|
35
|
+
format.html # new.html.erb
|
36
|
+
format.xml { render :xml => @tooltip }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# GET /tooltips/1/edit
|
41
|
+
def edit
|
42
|
+
@tooltip = Tooltip.find(params[:id])
|
43
|
+
end
|
44
|
+
|
45
|
+
# POST /tooltips
|
46
|
+
# POST /tooltips.xml
|
47
|
+
def create
|
48
|
+
@tooltip = Tooltip.new(params[:tooltip])
|
49
|
+
|
50
|
+
respond_to do |format|
|
51
|
+
if @tooltip.save
|
52
|
+
format.html { redirect_to(@tooltip, :notice => 'Tooltip was successfully created.') }
|
53
|
+
format.xml { render :xml => @tooltip, :status => :created, :location => @tooltip }
|
54
|
+
else
|
55
|
+
format.html { render :action => "new" }
|
56
|
+
format.xml { render :xml => @tooltip.errors, :status => :unprocessable_entity }
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# PUT /tooltips/1
|
62
|
+
# PUT /tooltips/1.xml
|
63
|
+
def update
|
64
|
+
@tooltip = Tooltip.find(params[:id])
|
65
|
+
|
66
|
+
respond_to do |format|
|
67
|
+
if @tooltip.update_attributes(params[:tooltip])
|
68
|
+
format.html { redirect_to(@tooltip, :notice => 'Tooltip was successfully updated.') }
|
69
|
+
format.xml { head :ok }
|
70
|
+
else
|
71
|
+
format.html { render :action => "edit" }
|
72
|
+
format.xml { render :xml => @tooltip.errors, :status => :unprocessable_entity }
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# DELETE /tooltips/1
|
78
|
+
# DELETE /tooltips/1.xml
|
79
|
+
def destroy
|
80
|
+
@tooltip = Tooltip.find(params[:id])
|
81
|
+
@tooltip.destroy
|
82
|
+
|
83
|
+
respond_to do |format|
|
84
|
+
format.html { redirect_to(tooltips_url) }
|
85
|
+
format.xml { head :ok }
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
# fetch and return the content of the specified tooltip, taking into account user's locale where relevant
|
91
|
+
def tooltip_content
|
92
|
+
|
93
|
+
if params[:title]
|
94
|
+
|
95
|
+
# find and display a specific tooltip
|
96
|
+
@tooltip = Tooltip.from_title_and_locale(params[:title])
|
97
|
+
|
98
|
+
if params[:js]
|
99
|
+
if @tooltip.blank?
|
100
|
+
data = "Sorry... unable to find that help content"
|
101
|
+
else
|
102
|
+
data = @tooltip.content_to_html
|
103
|
+
end
|
104
|
+
send_data(data, :type => 'text/plain', :disposition => 'inline')
|
105
|
+
else
|
106
|
+
if @tooltip.blank?
|
107
|
+
flash[:notice] = "Sorry... unable to find that help content"
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
else
|
112
|
+
# should be impossible to get here
|
113
|
+
flash[:notice] = "Sorry... no tooltip Title was provided"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module TooltipHelper
|
2
|
+
|
3
|
+
# tooltip helper for inclusion in views
|
4
|
+
# TODO - allow a custom class to be passed - e.g. twitter style - look at poshy tip
|
5
|
+
def tooltip(text='', mode=:hover)
|
6
|
+
|
7
|
+
return if text == ''
|
8
|
+
|
9
|
+
tooltip_help_icon_file = "/images/simple_tooltip_help_icon.png"
|
10
|
+
|
11
|
+
class_str = "simple-tooltip-help-icon"
|
12
|
+
if mode == :click
|
13
|
+
title = 'Click for help'
|
14
|
+
class_str << " simple-tooltip-clickable"
|
15
|
+
else
|
16
|
+
title = text
|
17
|
+
end
|
18
|
+
|
19
|
+
link_to(image_tag(tooltip_help_icon_file),
|
20
|
+
tooltip_content_tooltips_path(:title => text),
|
21
|
+
:name => text, :title => title,
|
22
|
+
:class => class_str)
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require 'rdiscount'
|
4
|
+
|
5
|
+
class Tooltip < ActiveRecord::Base
|
6
|
+
|
7
|
+
attr_accessible :title, :content, :markup, :locale
|
8
|
+
|
9
|
+
validates_presence_of :title
|
10
|
+
validates_presence_of :content
|
11
|
+
validates_presence_of :markup
|
12
|
+
|
13
|
+
validates_format_of :locale,
|
14
|
+
:with => /^[a-z][a-z]$/,
|
15
|
+
:message => 'must be in ISO-639-1 two letter format (e.g. en, de, zh)',
|
16
|
+
:allow_blank => true
|
17
|
+
|
18
|
+
validates_inclusion_of :markup,
|
19
|
+
:in => %w{ html markdown textile },
|
20
|
+
:message => 'must be one of html, markdown or textile'
|
21
|
+
|
22
|
+
validate :validate_no_script_tags
|
23
|
+
|
24
|
+
validate :validate_unique_title_locale_combination, :on => :create
|
25
|
+
|
26
|
+
|
27
|
+
# find the tooltip that matches the title and locale
|
28
|
+
def self.from_title_and_locale(title, user_locale = I18n.locale.to_s)
|
29
|
+
|
30
|
+
tooltip = nil
|
31
|
+
tooltips = Tooltip.where(:title => title).all
|
32
|
+
|
33
|
+
if tooltips.count == 1
|
34
|
+
# there is only one, so use that
|
35
|
+
tooltip = tooltips.first
|
36
|
+
|
37
|
+
elsif tooltips.count > 1
|
38
|
+
|
39
|
+
# Try and match by locale
|
40
|
+
default_tooltip = nil
|
41
|
+
tooltips.each do |tooltip_i|
|
42
|
+
if tooltip_i.locale == user_locale
|
43
|
+
tooltip = tooltip_i
|
44
|
+
break
|
45
|
+
elsif tooltip_i.locale.nil? or tooltip_i.locale == I18n.default_locale.to_s
|
46
|
+
default_tooltip = tooltip_i
|
47
|
+
end
|
48
|
+
end
|
49
|
+
tooltip = default_tooltip if tooltip.blank?
|
50
|
+
end
|
51
|
+
|
52
|
+
tooltip
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
# Process content with RDiscount if needed
|
57
|
+
def content_to_html
|
58
|
+
if self.markup == 'markdown'
|
59
|
+
RDiscount.new(self.content, :autolink).to_html
|
60
|
+
elsif self.markup == 'textile'
|
61
|
+
RedCloth.new(self.content).to_html
|
62
|
+
else
|
63
|
+
self.content
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
protected
|
68
|
+
|
69
|
+
def validate_unique_title_locale_combination
|
70
|
+
if Tooltip.where(:title => self.title).where(:locale => self.locale).count > 0
|
71
|
+
errors.add(:title, 'and locale combination already exists')
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def validate_no_script_tags
|
76
|
+
if self.content =~ /\<\s*script/im
|
77
|
+
errors.add(:content, 'must not contain <script> tags')
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
<%= form_for(@tooltip) do |f| %>
|
2
|
+
<% if @tooltip.errors.any? %>
|
3
|
+
<div id="error_explanation">
|
4
|
+
<h2><%= pluralize(@tooltip.errors.count, "error") %> prohibited this Tooltip from being saved:</h2>
|
5
|
+
|
6
|
+
<ul>
|
7
|
+
<% @tooltip.errors.full_messages.each do |msg| %>
|
8
|
+
<li><%= msg %></li>
|
9
|
+
<% end %>
|
10
|
+
</ul>
|
11
|
+
</div>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<div class="field">
|
15
|
+
<%= f.label :title %><br />
|
16
|
+
<%= f.text_field :title %>
|
17
|
+
</div>
|
18
|
+
<div class="field">
|
19
|
+
<%= f.label :content %><br />
|
20
|
+
<%= f.text_area :content %>
|
21
|
+
</div>
|
22
|
+
<div class="field">
|
23
|
+
<%= f.label :locale %><br />
|
24
|
+
<%= f.text_field :locale %> Use two letter ISO-639-1 code
|
25
|
+
</div>
|
26
|
+
<div class="field">
|
27
|
+
<%= f.label :markup %><br />
|
28
|
+
<%= f.radio_button :markup, 'markdown', :selected => true %> Markdown
|
29
|
+
<%= f.radio_button :markup, 'textile' %> Textile
|
30
|
+
<%= f.radio_button :markup, 'html' %> HTML / Plain Text
|
31
|
+
<br/>
|
32
|
+
<a href="http://en.wikipedia.org/wiki/Markdown">Markdown syntax</a>
|
33
|
+
<br/>
|
34
|
+
<a href="http://redcloth.org/textile">Textile syntax</a>
|
35
|
+
|
36
|
+
</div>
|
37
|
+
|
38
|
+
<div class="actions">
|
39
|
+
<%= f.submit %>
|
40
|
+
</div>
|
41
|
+
<% end %>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<h1>Listing Tooltips</h1>
|
2
|
+
|
3
|
+
<table>
|
4
|
+
<tr>
|
5
|
+
<th>Title</th>
|
6
|
+
<th>Locale</th>
|
7
|
+
<th>Markup</th>
|
8
|
+
|
9
|
+
<th></th>
|
10
|
+
<th></th>
|
11
|
+
<th></th>
|
12
|
+
</tr>
|
13
|
+
|
14
|
+
<% @tooltips.each do |tooltip| %>
|
15
|
+
<tr>
|
16
|
+
<td><%= tooltip.title %></td>
|
17
|
+
<td><%= tooltip.locale %></td>
|
18
|
+
<td><%= tooltip.markup %></td>
|
19
|
+
|
20
|
+
<td><%= link_to 'Show', tooltip %></td>
|
21
|
+
<td><%= link_to 'Edit', edit_tooltip_path(tooltip) %></td>
|
22
|
+
<td><%= link_to 'Destroy', tooltip, :confirm => 'Are you sure?', :method => :delete %></td>
|
23
|
+
</tr>
|
24
|
+
<% end %>
|
25
|
+
</table>
|
26
|
+
|
27
|
+
<br />
|
28
|
+
|
29
|
+
<%= link_to 'New Tooltip', new_tooltip_path %>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<p id="notice"><%= notice %></p>
|
2
|
+
|
3
|
+
<% if @user_view %>
|
4
|
+
|
5
|
+
<%= raw(@tooltip.content_to_html) %>
|
6
|
+
<p><br/><%= link_to "Go Back", request.referer %></p>
|
7
|
+
|
8
|
+
<% else %>
|
9
|
+
<p>
|
10
|
+
<b>Title:</b>
|
11
|
+
<%= @tooltip.title %>
|
12
|
+
</p>
|
13
|
+
|
14
|
+
<p>
|
15
|
+
<b>Content:</b>
|
16
|
+
<%= raw(@tooltip.content_to_html) %>
|
17
|
+
</p>
|
18
|
+
|
19
|
+
<p>
|
20
|
+
<b>Markup:</b>
|
21
|
+
<%= @tooltip.markup %>
|
22
|
+
</p>
|
23
|
+
|
24
|
+
<p>
|
25
|
+
<b>Locale:</b>
|
26
|
+
<%= @tooltip.locale %>
|
27
|
+
</p>
|
28
|
+
|
29
|
+
<%= link_to 'Edit', edit_tooltip_path(@tooltip) %> |
|
30
|
+
<%= link_to 'Back', tooltips_path %>
|
31
|
+
<% end %>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class CreateTooltips < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :tooltips do |t|
|
4
|
+
t.string :title
|
5
|
+
t.text :content
|
6
|
+
t.string :markup, :default => "markdown"
|
7
|
+
t.string :locale
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.down
|
13
|
+
drop_table :tooltips
|
14
|
+
end
|
15
|
+
end
|
Binary file
|
Binary file
|
@@ -0,0 +1,68 @@
|
|
1
|
+
// jQuery code for the simple_tooltip gem
|
2
|
+
jQuery(document).ready(function() {
|
3
|
+
|
4
|
+
var close_icon_file = "/images/simple_tooltip_close_icon.png";
|
5
|
+
|
6
|
+
jQuery('.simple-tooltip-help-icon').mouseenter(function(e) {
|
7
|
+
// remove any existing tooltip - should not be necessary, just a safety clause
|
8
|
+
|
9
|
+
// this has the side efect of removing any other visible tooltip on entering any other icon
|
10
|
+
jQuery("#simple-tooltip").remove();
|
11
|
+
|
12
|
+
// setup tooltip on hover
|
13
|
+
if(!jQuery(this).hasClass('simple-tooltip-clickable')) {
|
14
|
+
// Remove the 'title' attribute to prevent it appearing on hover
|
15
|
+
this.title = null;
|
16
|
+
|
17
|
+
// get the content for this tooltip by ajax and create the popup
|
18
|
+
jQuery.get("/tooltips/tooltip_content?js=true&title=" + this.name, function(data) {
|
19
|
+
|
20
|
+
jQuery("body").append("<div id='simple-tooltip'>" + data + "</div>");
|
21
|
+
|
22
|
+
// position the tooltip at the bottom right of mouse pointer
|
23
|
+
jQuery("#simple-tooltip").css("top",(e.pageY + 5) + "px").css("left",(e.pageX + 5) + "px").show();
|
24
|
+
|
25
|
+
// with fast mouse movements the tooltip can remain visible
|
26
|
+
// setup an action that if it is clicked then it is removed
|
27
|
+
// shouldn't be necessary but it seems to be...
|
28
|
+
jQuery('#simple-tooltip').click(function() {
|
29
|
+
jQuery(this).remove();
|
30
|
+
});
|
31
|
+
});
|
32
|
+
}
|
33
|
+
|
34
|
+
}).click(function(e) {
|
35
|
+
// prevent this event bubbling up to the link
|
36
|
+
e.preventDefault();
|
37
|
+
|
38
|
+
// setup tooltip on click
|
39
|
+
if(jQuery(this).hasClass('simple-tooltip-clickable')) {
|
40
|
+
|
41
|
+
// get the content for this tooltip by ajax and create the popup
|
42
|
+
jQuery.get("/tooltips/tooltip_content?js=true&title=" + this.name, function(data) {
|
43
|
+
|
44
|
+
// setup a close button within the tooltip at top right
|
45
|
+
var close_div = "<div id=\"simple-tooltip-close\" class=\"simple-tooltip-close\">" +
|
46
|
+
"<img src=\"" + close_icon_file + "\" alt=\"Close tooltip\"/></div>";
|
47
|
+
|
48
|
+
jQuery("body").append("<div id='simple-tooltip'>" + close_div + data + "</div>");
|
49
|
+
|
50
|
+
// position the tooltip at the bottom right of mouse pointer
|
51
|
+
jQuery("#simple-tooltip").css("top",(e.pageY + 5) + "px").css("left",(e.pageX + 5) + "px").show();
|
52
|
+
|
53
|
+
// remove the tooltip when close button is clicked
|
54
|
+
jQuery('#simple-tooltip-close').click(function() {
|
55
|
+
jQuery("#simple-tooltip").remove();
|
56
|
+
});
|
57
|
+
// ?? remove tooltip if the tooltip_icon is clicked a second time ??
|
58
|
+
|
59
|
+
});
|
60
|
+
}
|
61
|
+
|
62
|
+
}).mouseleave(function(e) {
|
63
|
+
// in :hover mode, remove the tooltip when the mouse leaves the tooltip icon
|
64
|
+
if(!jQuery(this).hasClass('simple-tooltip-clickable')) {
|
65
|
+
jQuery("#simple-tooltip").remove();
|
66
|
+
}
|
67
|
+
});
|
68
|
+
});
|
@@ -0,0 +1,27 @@
|
|
1
|
+
|
2
|
+
.simple-tooltip-help-icon {
|
3
|
+
text-decoration: none;
|
4
|
+
}
|
5
|
+
|
6
|
+
.simple-tooltip-help-icon>img {
|
7
|
+
vertical-align: middle;
|
8
|
+
}
|
9
|
+
|
10
|
+
.simple-tooltip-help-icon:hover {
|
11
|
+
background: none;
|
12
|
+
}
|
13
|
+
|
14
|
+
.simple-tooltip-close {
|
15
|
+
text-align: right;
|
16
|
+
}
|
17
|
+
|
18
|
+
#simple-tooltip {
|
19
|
+
position: absolute;
|
20
|
+
border: 1px solid #333;
|
21
|
+
background: #ffffd8;
|
22
|
+
padding: 2px 5px;
|
23
|
+
color: #000;
|
24
|
+
display: none;
|
25
|
+
text-align: left;
|
26
|
+
}
|
27
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
|
2
|
+
|
3
|
+
one:
|
4
|
+
title: MyString_1
|
5
|
+
content: MyText
|
6
|
+
markup: html
|
7
|
+
locale: en
|
8
|
+
two:
|
9
|
+
title: MyString_2
|
10
|
+
content: MyText
|
11
|
+
markup: html
|
12
|
+
locale: en
|
13
|
+
|
14
|
+
en_locale:
|
15
|
+
title: locale_test
|
16
|
+
content: Hello
|
17
|
+
markup: html
|
18
|
+
locale: en
|
19
|
+
|
20
|
+
es_locale:
|
21
|
+
title: locale_test
|
22
|
+
content: Hola
|
23
|
+
markup: html
|
24
|
+
locale: es
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TooltipsControllerTest < ActionController::TestCase
|
4
|
+
setup do
|
5
|
+
@tooltip = tooltips(:one)
|
6
|
+
end
|
7
|
+
|
8
|
+
test "should get index" do
|
9
|
+
get :index
|
10
|
+
assert_response :success
|
11
|
+
assert_not_nil assigns(:tooltips)
|
12
|
+
end
|
13
|
+
|
14
|
+
test "should get new" do
|
15
|
+
get :new
|
16
|
+
assert_response :success
|
17
|
+
end
|
18
|
+
|
19
|
+
test "should create tooltip" do
|
20
|
+
assert_difference('Tooltip.count') do
|
21
|
+
tooltip = Tooltip.new({:title => 'foo', :content => 'bar'})
|
22
|
+
post :create, :tooltip => tooltip.attributes
|
23
|
+
end
|
24
|
+
|
25
|
+
assert_redirected_to tooltip_path(assigns(:tooltip))
|
26
|
+
end
|
27
|
+
|
28
|
+
test "should show tooltip" do
|
29
|
+
get :show, :id => @tooltip.to_param
|
30
|
+
assert_response :success
|
31
|
+
end
|
32
|
+
|
33
|
+
test "should get edit" do
|
34
|
+
get :edit, :id => @tooltip.to_param
|
35
|
+
assert_response :success
|
36
|
+
end
|
37
|
+
|
38
|
+
test "should update tooltip" do
|
39
|
+
put :update, :id => @tooltip.to_param, :tooltip => @tooltip.attributes
|
40
|
+
assert_redirected_to tooltip_path(assigns(:tooltip))
|
41
|
+
end
|
42
|
+
|
43
|
+
test "should destroy tooltip" do
|
44
|
+
assert_difference('Tooltip.count', -1) do
|
45
|
+
delete :destroy, :id => @tooltip.to_param
|
46
|
+
end
|
47
|
+
|
48
|
+
assert_redirected_to tooltips_path
|
49
|
+
end
|
50
|
+
|
51
|
+
# Add tests for the ajax functions....
|
52
|
+
|
53
|
+
# tooltip_content
|
54
|
+
test "should show tooltip content given a title" do
|
55
|
+
get :tooltip_content, :title => @tooltip.title
|
56
|
+
assert_response :success
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TooltipTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
|
6
|
+
# test no script validation routine
|
7
|
+
|
8
|
+
test "validate ok if content has no <script> tag" do
|
9
|
+
tooltip = Tooltip.new(:title => 'foo', :markup => 'html',
|
10
|
+
:content => "<p>all good here</p>")
|
11
|
+
assert tooltip.valid?
|
12
|
+
end
|
13
|
+
|
14
|
+
test "validate with error if content has <script> tag" do
|
15
|
+
tooltip = Tooltip.new(:title => 'foo', :markup => 'html',
|
16
|
+
:content => "foo <script> bad \n stuff </script> bar")
|
17
|
+
assert !tooltip.valid?
|
18
|
+
assert tooltip.errors[:content].any?
|
19
|
+
end
|
20
|
+
|
21
|
+
test "validate with error if format of locale is not two letter" do
|
22
|
+
tooltip = Tooltip.new(:title => 'foo', :markup => 'html', :locale => 'locale',
|
23
|
+
:content => "text")
|
24
|
+
assert !tooltip.valid?
|
25
|
+
assert tooltip.errors[:locale].any?
|
26
|
+
end
|
27
|
+
|
28
|
+
test "validate OK if format of locale is two letter" do
|
29
|
+
tooltip = Tooltip.new(:title => 'foo', :markup => 'html', :locale => 'en',
|
30
|
+
:content => "text")
|
31
|
+
assert tooltip.valid?
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
test "validate fails unless unique title and locale" do
|
36
|
+
tooltip0 = Tooltip.new(:title => 'foo', :markup => 'html', :locale => 'en',
|
37
|
+
:content => "<p>Here to help</p>")
|
38
|
+
tooltip0.save!
|
39
|
+
|
40
|
+
tooltip1 = Tooltip.new(:title => 'foo', :markup => 'html', :locale => 'en',
|
41
|
+
:content => "<p>Here to help</p>")
|
42
|
+
|
43
|
+
|
44
|
+
assert !tooltip1.valid?
|
45
|
+
assert tooltip1.errors[:title].any?
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
test "validate passes duplicate title but unique locale" do
|
50
|
+
|
51
|
+
tooltip0 = Tooltip.new(:title => 'foo', :markup => 'html', :locale => 'en',
|
52
|
+
:content => "<p>Here to help</p>")
|
53
|
+
tooltip0.save!
|
54
|
+
|
55
|
+
tooltip1 = Tooltip.new(:title => 'foo', :markup => 'html', :locale => 'de',
|
56
|
+
:content => "<p>Here to help</p>")
|
57
|
+
|
58
|
+
assert tooltip1.valid?
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
test "content_to_html passes through html content" do
|
63
|
+
content = "<p>Here is some text in <span style=\"color: red;\">HTML</span> format.</p>"
|
64
|
+
tooltip = Tooltip.new(:title => 'foo', :markup => 'html',
|
65
|
+
:content => content)
|
66
|
+
assert_equal tooltip.content_to_html, content
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
test "content_to_html converts Markdown content to html" do
|
71
|
+
content = "<p>Here is some text in <strong>Markdown</strong> format</p>\n\n<p><a href=\"http://craic.com\">http://craic.com</a></p>\n"
|
72
|
+
markdown = "Here is some text in **Markdown** format\n\nhttp://craic.com"
|
73
|
+
tooltip = Tooltip.new(:title => 'foo', :markup => 'markdown',
|
74
|
+
:content => markdown)
|
75
|
+
assert_equal tooltip.content_to_html, content
|
76
|
+
end
|
77
|
+
|
78
|
+
test 'class method from_title_and_locale return the correct tooltip' do
|
79
|
+
|
80
|
+
tooltip0 = Tooltip.new(:title => 'foo', :markup => 'html', :locale => 'en',
|
81
|
+
:content => "<p>English text</p>")
|
82
|
+
tooltip0.save!
|
83
|
+
|
84
|
+
tooltip1 = Tooltip.new(:title => 'foo', :markup => 'html', :locale => 'de',
|
85
|
+
:content => "<p>German text</p>")
|
86
|
+
|
87
|
+
tooltip1.save!
|
88
|
+
|
89
|
+
|
90
|
+
tooltip_out = Tooltip.from_title_and_locale('foo', 'de')
|
91
|
+
|
92
|
+
assert_equal tooltip_out.content_to_html, "<p>German text</p>"
|
93
|
+
assert_equal tooltip_out.title, "foo"
|
94
|
+
assert_equal tooltip_out.locale, "de"
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "simple_tooltip/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "simple-tooltip"
|
7
|
+
s.version = SimpleTooltip::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Robert Jones"]
|
10
|
+
s.email = ["jones@craic.com"]
|
11
|
+
s.homepage = "http://rubygems.org/gems/simple-tooltip"
|
12
|
+
s.summary = %q{Create and display Tooltip Help in view pages in Rails applications}
|
13
|
+
s.description = %q{Create and display Tooltip Help in view pages in Rails applications.
|
14
|
+
Uses jQuery to display tooltips, with fallback if Javascript is not available.
|
15
|
+
Makes use of help text in the user's locale if available.'}
|
16
|
+
|
17
|
+
|
18
|
+
s.add_dependency "rails", "~> 3.0"
|
19
|
+
s.add_dependency "jquery-rails"
|
20
|
+
s.add_dependency "rdiscount"
|
21
|
+
s.add_dependency "RedCloth"
|
22
|
+
s.add_dependency "thor", "~>0.14.4"
|
23
|
+
s.add_development_dependency "bundler", "~> 1.0.0"
|
24
|
+
|
25
|
+
s.rubyforge_project = "simple-tooltip"
|
26
|
+
|
27
|
+
s.files = `git ls-files`.split("\n")
|
28
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
29
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
30
|
+
s.require_paths = ["lib"]
|
31
|
+
end
|
metadata
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: simple-tooltip
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Robert Jones
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2011-03-04 00:00:00 -08:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rails
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 3
|
30
|
+
- 0
|
31
|
+
version: "3.0"
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: jquery-rails
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
segments:
|
43
|
+
- 0
|
44
|
+
version: "0"
|
45
|
+
type: :runtime
|
46
|
+
version_requirements: *id002
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rdiscount
|
49
|
+
prerelease: false
|
50
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
segments:
|
56
|
+
- 0
|
57
|
+
version: "0"
|
58
|
+
type: :runtime
|
59
|
+
version_requirements: *id003
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: RedCloth
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
segments:
|
69
|
+
- 0
|
70
|
+
version: "0"
|
71
|
+
type: :runtime
|
72
|
+
version_requirements: *id004
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: thor
|
75
|
+
prerelease: false
|
76
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
77
|
+
none: false
|
78
|
+
requirements:
|
79
|
+
- - ~>
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
segments:
|
82
|
+
- 0
|
83
|
+
- 14
|
84
|
+
- 4
|
85
|
+
version: 0.14.4
|
86
|
+
type: :runtime
|
87
|
+
version_requirements: *id005
|
88
|
+
- !ruby/object:Gem::Dependency
|
89
|
+
name: bundler
|
90
|
+
prerelease: false
|
91
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
92
|
+
none: false
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
segments:
|
97
|
+
- 1
|
98
|
+
- 0
|
99
|
+
- 0
|
100
|
+
version: 1.0.0
|
101
|
+
type: :development
|
102
|
+
version_requirements: *id006
|
103
|
+
description: |-
|
104
|
+
Create and display Tooltip Help in view pages in Rails applications.
|
105
|
+
Uses jQuery to display tooltips, with fallback if Javascript is not available.
|
106
|
+
Makes use of help text in the user's locale if available.'
|
107
|
+
email:
|
108
|
+
- jones@craic.com
|
109
|
+
executables: []
|
110
|
+
|
111
|
+
extensions: []
|
112
|
+
|
113
|
+
extra_rdoc_files: []
|
114
|
+
|
115
|
+
files:
|
116
|
+
- .gitignore
|
117
|
+
- Gemfile
|
118
|
+
- LICENSE
|
119
|
+
- README.markdown
|
120
|
+
- Rakefile
|
121
|
+
- TODO
|
122
|
+
- lib/generators/simple_tooltip/install_generator.rb
|
123
|
+
- lib/generators/simple_tooltip/templates/app/controllers/tooltips_controller.rb
|
124
|
+
- lib/generators/simple_tooltip/templates/app/helpers/tooltip_helper.rb
|
125
|
+
- lib/generators/simple_tooltip/templates/app/models/tooltip.rb
|
126
|
+
- lib/generators/simple_tooltip/templates/app/views/tooltips/_form.html.erb
|
127
|
+
- lib/generators/simple_tooltip/templates/app/views/tooltips/edit.html.erb
|
128
|
+
- lib/generators/simple_tooltip/templates/app/views/tooltips/index.html.erb
|
129
|
+
- lib/generators/simple_tooltip/templates/app/views/tooltips/new.html.erb
|
130
|
+
- lib/generators/simple_tooltip/templates/app/views/tooltips/show.html.erb
|
131
|
+
- lib/generators/simple_tooltip/templates/app/views/tooltips/tooltip_content.html.erb
|
132
|
+
- lib/generators/simple_tooltip/templates/db/migrate/create_tooltips.rb
|
133
|
+
- lib/generators/simple_tooltip/templates/public/images/simple_tooltip_close_icon.png
|
134
|
+
- lib/generators/simple_tooltip/templates/public/images/simple_tooltip_help_icon.png
|
135
|
+
- lib/generators/simple_tooltip/templates/public/javascripts/simple_tooltip.js
|
136
|
+
- lib/generators/simple_tooltip/templates/public/stylesheets/simple_tooltip.css
|
137
|
+
- lib/generators/simple_tooltip/templates/test/fixtures/tooltips.yml
|
138
|
+
- lib/generators/simple_tooltip/templates/test/functional/tooltips_controller_test.rb
|
139
|
+
- lib/generators/simple_tooltip/templates/test/unit/helpers/tooltips_helper_test.rb
|
140
|
+
- lib/generators/simple_tooltip/templates/test/unit/tooltip_test.rb
|
141
|
+
- lib/simple_tooltip.rb
|
142
|
+
- lib/simple_tooltip/version.rb
|
143
|
+
- simple_tooltip.gemspec
|
144
|
+
has_rdoc: true
|
145
|
+
homepage: http://rubygems.org/gems/simple-tooltip
|
146
|
+
licenses: []
|
147
|
+
|
148
|
+
post_install_message:
|
149
|
+
rdoc_options: []
|
150
|
+
|
151
|
+
require_paths:
|
152
|
+
- lib
|
153
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
154
|
+
none: false
|
155
|
+
requirements:
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
segments:
|
159
|
+
- 0
|
160
|
+
version: "0"
|
161
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
|
+
none: false
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
segments:
|
167
|
+
- 0
|
168
|
+
version: "0"
|
169
|
+
requirements: []
|
170
|
+
|
171
|
+
rubyforge_project: simple-tooltip
|
172
|
+
rubygems_version: 1.3.7
|
173
|
+
signing_key:
|
174
|
+
specification_version: 3
|
175
|
+
summary: Create and display Tooltip Help in view pages in Rails applications
|
176
|
+
test_files: []
|
177
|
+
|