joyride-rails 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +40 -0
- data/app/assets/javascripts/joyride/joyride.js +15 -0
- data/app/assets/javascripts/joyride/jquery.joyride-1.0.3.js +329 -0
- data/app/assets/stylesheets/joyride/joyride-1.0.3.css.sass +132 -0
- data/app/assets/stylesheets/joyride/joyride.css +14 -0
- data/app/assets/stylesheets/joyride/variables.sass +14 -0
- data/app/controllers/joyride/application_controller.rb +4 -0
- data/app/helpers/joyride/application_helper.rb +4 -0
- data/app/views/layouts/joyride/application.html.erb +14 -0
- data/config/routes.rb +2 -0
- data/lib/joyride.rb +4 -0
- data/lib/joyride/engine.rb +5 -0
- data/lib/joyride/version.rb +3 -0
- data/lib/tasks/joyride_tasks.rake +4 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/javascripts/pages.js +2 -0
- data/test/dummy/app/assets/stylesheets/application.css.sass +3 -0
- data/test/dummy/app/assets/stylesheets/pages.css +4 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/controllers/pages_controller.rb +7 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/helpers/pages_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/app/views/pages/index.html.haml +7 -0
- data/test/dummy/app/views/pages/simple_test.html.haml +21 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +64 -0
- data/test/dummy/config/boot.rb +12 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +8 -0
- data/test/dummy/log/development.log +3940 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/dummy/test/functional/pages_controller_test.rb +14 -0
- data/test/dummy/test/unit/helpers/pages_helper_test.rb +4 -0
- data/test/dummy/tmp/cache/assets/C4A/570/sprockets%2F15a04a49f19710781329a870b8d1f352 +0 -0
- data/test/dummy/tmp/cache/assets/C5A/BD0/sprockets%2F6e8287461f7b19335a41a29ed9195620 +0 -0
- data/test/dummy/tmp/cache/assets/C77/D30/sprockets%2Fca3a855423436369a12f4245be3c5545 +0 -0
- data/test/dummy/tmp/cache/assets/C91/E40/sprockets%2F880d46ff1082976e0eb68c528641b089 +0 -0
- data/test/dummy/tmp/cache/assets/CAC/040/sprockets%2F0b7d050189881e4fd2073328d92e1b2f +0 -0
- data/test/dummy/tmp/cache/assets/CCA/0C0/sprockets%2F6c3e053393afe303432ca73f1b41490b +0 -0
- data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/CDE/440/sprockets%2Fb555f0d8c0d1671bc81430837d84dc92 +0 -0
- data/test/dummy/tmp/cache/assets/CE1/1C0/sprockets%2Fe704f02989daa684b32c3f72a4513f83 +0 -0
- data/test/dummy/tmp/cache/assets/D18/840/sprockets%2F50c1885539f61359c48af74fcae1df31 +0 -0
- data/test/dummy/tmp/cache/assets/D1E/2A0/sprockets%2F8d5d60255600aa010a32e1d1a9bc6db6 +0 -0
- data/test/dummy/tmp/cache/assets/D2A/450/sprockets%2F58e369b37e5157ea746a485eea17e9f7 +0 -0
- data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/D3F/A90/sprockets%2Ff6e315f67f26b1665d870ba3fb8050db +0 -0
- data/test/dummy/tmp/cache/assets/D4B/720/sprockets%2Fe16c199f91934eaff7bf97321504da2f +0 -0
- data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/D57/E70/sprockets%2Ff3d85fee7084763c5a76a1ea676f962f +0 -0
- data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/D65/BA0/sprockets%2F2713bd3b713d71801af63fadc3b6dc89 +0 -0
- data/test/dummy/tmp/cache/assets/D6E/BC0/sprockets%2Fad954413ca960fe041e137d4cd7afd69 +0 -0
- data/test/dummy/tmp/cache/assets/D79/8D0/sprockets%2F9a557ef8b2aceee46711709937c44acc +0 -0
- data/test/dummy/tmp/cache/assets/D9D/5B0/sprockets%2Ff66dd1c082fb7b7730090dbfbff961b2 +0 -0
- data/test/dummy/tmp/cache/assets/DA1/950/sprockets%2F9eba13b549b22c3d8ea4aad8489ba893 +0 -0
- data/test/dummy/tmp/cache/assets/DA6/120/sprockets%2Fc5880aca76ccbb51f9388362e8afc1e6 +0 -0
- data/test/dummy/tmp/cache/assets/DA7/230/sprockets%2F7ae10239eda2588a95fdcc7d871bef52 +0 -0
- data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/DE0/690/sprockets%2F2827893fa90fd9a8521fdddcef63a8be +0 -0
- data/test/dummy/tmp/cache/assets/E00/660/sprockets%2F6dfe5f0c215cba9cb22b3e08dc7f5f88 +0 -0
- data/test/dummy/tmp/cache/assets/E02/6C0/sprockets%2Ff206e49edc9afcd023989d53a4dafbe1 +0 -0
- data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/E05/F10/sprockets%2Fb3d9b0e88cdded276ebdce333e338a85 +0 -0
- data/test/dummy/tmp/cache/sass/b6a29b56c31fc2a931d217c92dbad0128a12584a/application.css.sassc +0 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/joyride_test.rb +7 -0
- data/test/test_helper.rb +10 -0
- metadata +307 -0
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2012 YOURNAME
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
begin
|
3
|
+
require 'bundler/setup'
|
4
|
+
rescue LoadError
|
5
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
|
+
end
|
7
|
+
begin
|
8
|
+
require 'rdoc/task'
|
9
|
+
rescue LoadError
|
10
|
+
require 'rdoc/rdoc'
|
11
|
+
require 'rake/rdoctask'
|
12
|
+
RDoc::Task = Rake::RDocTask
|
13
|
+
end
|
14
|
+
|
15
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
16
|
+
rdoc.rdoc_dir = 'rdoc'
|
17
|
+
rdoc.title = 'Joyride'
|
18
|
+
rdoc.options << '--line-numbers'
|
19
|
+
rdoc.rdoc_files.include('README.rdoc')
|
20
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
|
+
end
|
22
|
+
|
23
|
+
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
24
|
+
load 'rails/tasks/engine.rake'
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
Bundler::GemHelper.install_tasks
|
29
|
+
|
30
|
+
require 'rake/testtask'
|
31
|
+
|
32
|
+
Rake::TestTask.new(:test) do |t|
|
33
|
+
t.libs << 'lib'
|
34
|
+
t.libs << 'test'
|
35
|
+
t.pattern = 'test/**/*_test.rb'
|
36
|
+
t.verbose = false
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
task :default => :test
|
@@ -0,0 +1,15 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
+
// listed below.
|
3
|
+
//
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
+
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
|
6
|
+
//
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
+
// the compiled file.
|
9
|
+
//
|
10
|
+
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
|
11
|
+
// GO AFTER THE REQUIRES BELOW.
|
12
|
+
//
|
13
|
+
//= require jquery
|
14
|
+
//= require jquery_ujs
|
15
|
+
//= require ./jquery.joyride-1.0.3
|
@@ -0,0 +1,329 @@
|
|
1
|
+
/*
|
2
|
+
* jQuery Joyride Plugin 1.0.3
|
3
|
+
* www.ZURB.com/playground
|
4
|
+
* Copyright 2011, ZURB
|
5
|
+
* Free to use under the MIT license.
|
6
|
+
* http://www.opensource.org/licenses/mit-license.php
|
7
|
+
*/
|
8
|
+
|
9
|
+
(function($) {
|
10
|
+
$.fn.joyride = function(options) {
|
11
|
+
|
12
|
+
// +++++++++++++++++++
|
13
|
+
// Defaults
|
14
|
+
// +++++++++++++++++++
|
15
|
+
var settings = {
|
16
|
+
'tipLocation': 'bottom', // 'top' or 'bottom' in relation to parent
|
17
|
+
'scrollSpeed': 300, // Page scrolling speed in milliseconds
|
18
|
+
'timer': 0, // 0 = no timer, all other numbers = timer in milliseconds
|
19
|
+
'startTimerOnClick': false, // true or false - true requires clicking the first button start the timer
|
20
|
+
'nextButton': true, // true or false to control whether a next button is used
|
21
|
+
'tipAnimation': 'pop', // 'pop' or 'fade' in each tip
|
22
|
+
'tipAnimationFadeSpeed': 300, // when tipAnimation = 'fade' this is speed in milliseconds for the transition
|
23
|
+
'cookieMonster': false, // true or false to control whether cookies are used
|
24
|
+
'cookieName': 'JoyRide', // Name the cookie you'll use
|
25
|
+
'cookieDomain': false, // Will this cookie be attached to a domain, ie. '.notableapp.com'
|
26
|
+
'tipContainer': 'body', // Where will the tip be attached if not inline
|
27
|
+
'inline': false, // true or false, if true the tip will be attached after the element
|
28
|
+
'tipContent': '#joyRideTipContent', // What is the ID of the <ol> you put the content in
|
29
|
+
'postRideCallback': $.noop, // A method to call once the tour closes (canceled or complete)
|
30
|
+
'postStepCallback': $.noop // A method to call after each step
|
31
|
+
};
|
32
|
+
|
33
|
+
var options = $.extend(settings, options);
|
34
|
+
|
35
|
+
return this.each(function() {
|
36
|
+
|
37
|
+
if ($(options.tipContent).length === 0) return;
|
38
|
+
|
39
|
+
$(options.tipContent).hide();
|
40
|
+
|
41
|
+
var bodyOffset = $(options.tipContainer).children('*').first().position(),
|
42
|
+
tipContent = $(options.tipContent + ' li'),
|
43
|
+
count = skipCount = 0,
|
44
|
+
prevCount = -1,
|
45
|
+
timerIndicatorInstance,
|
46
|
+
timerIndicatorTemplate = '<div class="joyride-timer-indicator-wrap"><span class="joyride-timer-indicator"></span></div>',
|
47
|
+
tipTemplate = function(tipClass, index, buttonText, self) { return '<div class="joyride-tip-guide ' +
|
48
|
+
tipClass + '" id="joyRidePopup' + index + '"><span class="joyride-nub"></span>' +
|
49
|
+
$(self).html() + buttonText + '<a href="#close" class="joyride-close-tip">X</a>' +
|
50
|
+
timerIndicatorInstance + '</div>'; },
|
51
|
+
tipLayout = function(tipClass, index, buttonText, self) {
|
52
|
+
if (index == 0 && settings.startTimerOnClick && settings.timer > 0 || settings.timer == 0) {
|
53
|
+
timerIndicatorInstance = '';
|
54
|
+
} else {
|
55
|
+
timerIndicatorInstance = timerIndicatorTemplate;
|
56
|
+
}
|
57
|
+
if (!tipClass) tipClass = '';
|
58
|
+
(buttonText != '') ? buttonText = '<a href="#" class="joyride-next-tip small nice radius yellow button">' + buttonText + '</a>': buttonText = '';
|
59
|
+
if (settings.inline) {
|
60
|
+
$(tipTemplate(tipClass, index, buttonText, self)).insertAfter('#' + $(self).data('id'));
|
61
|
+
} else {
|
62
|
+
$(options.tipContainer).append(tipTemplate(tipClass, index, buttonText, self));
|
63
|
+
}
|
64
|
+
};
|
65
|
+
|
66
|
+
if(!settings.cookieMonster || !$.cookie(settings.cookieName)) {
|
67
|
+
|
68
|
+
tipContent.each(function(index) {
|
69
|
+
var buttonText = $(this).data('text'),
|
70
|
+
tipClass = $(this).attr('class'),
|
71
|
+
self = this;
|
72
|
+
|
73
|
+
if (settings.nextButton && buttonText == undefined) {
|
74
|
+
buttonText = 'Next';
|
75
|
+
}
|
76
|
+
if (settings.nextButton || !settings.nextButton && settings.startTimerOnClick) {
|
77
|
+
if ($(this).attr('class')) {
|
78
|
+
tipLayout(tipClass, index, buttonText, self);
|
79
|
+
} else {
|
80
|
+
tipLayout(false, index, buttonText, self);
|
81
|
+
}
|
82
|
+
} else if (!settings.nextButton) {
|
83
|
+
if ($(this).attr('class')) {
|
84
|
+
tipLayout(tipClass, index, '', self);
|
85
|
+
} else {
|
86
|
+
tipLayout(false, index, '', self);
|
87
|
+
}
|
88
|
+
}
|
89
|
+
$('#joyRidePopup' + index).hide();
|
90
|
+
});
|
91
|
+
}
|
92
|
+
|
93
|
+
showNextTip = function() {
|
94
|
+
var parentElementID = $(tipContent[count]).data('id'),
|
95
|
+
parentElement = $('#' + parentElementID),
|
96
|
+
opt = {};
|
97
|
+
// Parse the options string
|
98
|
+
($(tipContent[count]).data('options') || ':').split(';')
|
99
|
+
.map(function (s) {
|
100
|
+
var p = s.split(':');
|
101
|
+
if (p.length == 2) opt[p[0].trim()] = p[1].trim();
|
102
|
+
});
|
103
|
+
options = $.extend(options, opt); // Update options and settings
|
104
|
+
settings = $.extend(settings, opt);
|
105
|
+
|
106
|
+
while (parentElement.offset() === null) {
|
107
|
+
count++;
|
108
|
+
skipCount++;
|
109
|
+
((tipContent.length - 1) > prevCount) ? prevCount++ : prevCount;
|
110
|
+
parentElementID = $(tipContent[count]).data('id'),
|
111
|
+
parentElement = $('#' + parentElementID);
|
112
|
+
|
113
|
+
if ($(tipContent).length < count)
|
114
|
+
break;
|
115
|
+
}
|
116
|
+
var windowHalf = Math.ceil($(window).height() / 2),
|
117
|
+
currentTip = $('#joyRidePopup' + count),
|
118
|
+
currentTipPosition = parentElement.offset(),
|
119
|
+
currentParentHeight = parentElement.outerHeight(),
|
120
|
+
currentTipHeight = currentTip.outerHeight(),
|
121
|
+
nubHeight = Math.ceil($('.joyride-nub').outerHeight() / 2),
|
122
|
+
tipOffset = 0;
|
123
|
+
|
124
|
+
if (currentTip.length === 0) return;
|
125
|
+
|
126
|
+
if (count < tipContent.length) {
|
127
|
+
if (settings.tipAnimation == "pop") {
|
128
|
+
$('.joyride-timer-indicator').width(0);
|
129
|
+
if (settings.timer > 0) {
|
130
|
+
currentTip.show().children('.joyride-timer-indicator-wrap')
|
131
|
+
.children('.joyride-timer-indicator')
|
132
|
+
.animate({width: $('.joyride-timer-indicator-wrap')
|
133
|
+
.width()}, settings.timer);
|
134
|
+
} else {
|
135
|
+
currentTip.show();
|
136
|
+
}
|
137
|
+
} else if (settings.tipAnimation == "fade") {
|
138
|
+
$('.joyride-timer-indicator').width(0);
|
139
|
+
if (settings.timer > 0) {
|
140
|
+
currentTip.fadeIn(settings.tipAnimationFadeSpeed)
|
141
|
+
.children('.joyride-timer-indicator-wrap')
|
142
|
+
.children('.joyride-timer-indicator')
|
143
|
+
.animate({width: $('.joyride-timer-indicator-wrap')
|
144
|
+
.width()}, settings.timer);
|
145
|
+
} else {
|
146
|
+
currentTip.fadeIn(settings.tipAnimationFadeSpeed);
|
147
|
+
}
|
148
|
+
}
|
149
|
+
|
150
|
+
// ++++++++++++++++++
|
151
|
+
// Tip Location
|
152
|
+
// ++++++++++++++++++
|
153
|
+
|
154
|
+
if (settings.tipLocation == "bottom") {
|
155
|
+
currentTip.offset({top: (currentTipPosition.top + currentParentHeight + nubHeight),
|
156
|
+
left: (currentTipPosition.left - bodyOffset.left)});
|
157
|
+
currentTip.children('.joyride-nub').addClass('top').removeClass('bottom');
|
158
|
+
} else if (settings.tipLocation == "top") {
|
159
|
+
if (currentTipHeight >= currentTipPosition.top) {
|
160
|
+
currentTip.offset({top: ((currentTipPosition.top + currentParentHeight + nubHeight) - bodyOffset.top),
|
161
|
+
left: (currentTipPosition.left - bodyOffset.left)});
|
162
|
+
currentTip.children('.joyride-nub').addClass('top').removeClass('bottom');
|
163
|
+
} else {
|
164
|
+
currentTip.offset({top: ((currentTipPosition.top) - (currentTipHeight + bodyOffset.top + nubHeight)),
|
165
|
+
left: (currentTipPosition.left - bodyOffset.left)});
|
166
|
+
currentTip.children('.joyride-nub').addClass('bottom').removeClass('top');
|
167
|
+
}
|
168
|
+
}
|
169
|
+
|
170
|
+
// Animate Scrolling when tip is off screen
|
171
|
+
tipOffset = Math.ceil(currentTip.offset().top - windowHalf);
|
172
|
+
$("html, body").animate({
|
173
|
+
scrollTop: tipOffset
|
174
|
+
}, settings.scrollSpeed);
|
175
|
+
|
176
|
+
if (count > 0) {
|
177
|
+
if (skipCount > 0) {
|
178
|
+
var hideCount = prevCount - skipCount;
|
179
|
+
skipCount = 0;
|
180
|
+
} else {
|
181
|
+
var hideCount = prevCount;
|
182
|
+
}
|
183
|
+
if (settings.tipAnimation == "pop") {
|
184
|
+
$('#joyRidePopup' + hideCount).hide();
|
185
|
+
} else if (settings.tipAnimation == "fade") {
|
186
|
+
$('#joyRidePopup' + hideCount).fadeOut(settings.tipAnimationFadeSpeed);
|
187
|
+
}
|
188
|
+
}
|
189
|
+
|
190
|
+
// Hide the last tip when clicked
|
191
|
+
} else if ((tipContent.length - 1) < count) {
|
192
|
+
if (skipCount > 0) {
|
193
|
+
var hideCount = prevCount - skipCount;
|
194
|
+
skipCount = 0;
|
195
|
+
} else {
|
196
|
+
var hideCount = prevCount;
|
197
|
+
}
|
198
|
+
if (settings.cookieMonster == true) {
|
199
|
+
$.cookie(settings.cookieName, 'ridden', { expires: 365, domain: settings.cookieDomain });
|
200
|
+
}
|
201
|
+
if (settings.tipAnimation == "pop") {
|
202
|
+
$('#joyRidePopup' + hideCount).fadeTo(0, 0);
|
203
|
+
} else if (settings.tipAnimation == "fade") {
|
204
|
+
$('#joyRidePopup' + hideCount).fadeTo(settings.tipAnimationFadeSpeed, 0);
|
205
|
+
}
|
206
|
+
}
|
207
|
+
count++;
|
208
|
+
if (prevCount < 0) {
|
209
|
+
prevCount = 0;
|
210
|
+
} else if ((tipContent.length - 1) > prevCount) {
|
211
|
+
prevCount++;
|
212
|
+
}
|
213
|
+
if (settings.postStepCallback != $.noop) {
|
214
|
+
settings.postStepCallback(prevCount);
|
215
|
+
}
|
216
|
+
}
|
217
|
+
|
218
|
+
if (!settings.inline || !settings.cookieMonster || !$.cookie(settings.cookieName)) {
|
219
|
+
$(window).resize(function() {
|
220
|
+
var parentElementID = $(tipContent[prevCount]).data('id'),
|
221
|
+
currentTipPosition = $('#' + parentElementID).offset(),
|
222
|
+
currentParentHeight = $('#' + parentElementID).outerHeight(),
|
223
|
+
currentTipHeight = $('#joyRidePopup' + prevCount).outerHeight(),
|
224
|
+
nubHeight = Math.ceil($('.joyride-nub').outerHeight() / 2);
|
225
|
+
if (settings.tipLocation == "bottom") {
|
226
|
+
$('#joyRidePopup' + prevCount).offset({top: (currentTipPosition.top + currentParentHeight + nubHeight),
|
227
|
+
left: currentTipPosition.left});
|
228
|
+
} else if (settings.tipLocation == "top") {
|
229
|
+
if (currentTipPosition.top <= currentTipHeight) {
|
230
|
+
$('#joyRidePopup' + prevCount).offset({top: (currentTipPosition.top + nubHeight + currentParentHeight),
|
231
|
+
left: currentTipPosition.left});
|
232
|
+
} else {
|
233
|
+
$('#joyRidePopup' + prevCount).offset({top: ((currentTipPosition.top) - (currentTipHeight + nubHeight)),
|
234
|
+
left: currentTipPosition.left});
|
235
|
+
}
|
236
|
+
}
|
237
|
+
});
|
238
|
+
}
|
239
|
+
|
240
|
+
// +++++++++++++++
|
241
|
+
// Timer
|
242
|
+
// +++++++++++++++
|
243
|
+
|
244
|
+
var interval_id = null,
|
245
|
+
showTimerState = false;
|
246
|
+
|
247
|
+
if (!settings.startTimerOnClick && settings.timer > 0){
|
248
|
+
showNextTip();
|
249
|
+
interval_id = setInterval(function() {showNextTip()}, settings.timer);
|
250
|
+
} else {
|
251
|
+
showNextTip();
|
252
|
+
}
|
253
|
+
var endTip = function(e, interval_id, cookie, self) {
|
254
|
+
e.preventDefault();
|
255
|
+
clearInterval(interval_id);
|
256
|
+
if (cookie) {
|
257
|
+
$.cookie(settings.cookieName, 'ridden', { expires: 365, domain: settings.cookieDomain });
|
258
|
+
}
|
259
|
+
$(self).parent().hide();
|
260
|
+
if (settings.postRideCallback != $.noop) {
|
261
|
+
settings.postRideCallback();
|
262
|
+
}
|
263
|
+
}
|
264
|
+
$('.joyride-close-tip').click(function(e) {
|
265
|
+
endTip(e, interval_id, settings.cookieMonster, this);
|
266
|
+
});
|
267
|
+
|
268
|
+
// When the next button is clicked, show the next tip, only when cookie isn't present
|
269
|
+
$('.joyride-next-tip').click(function(e) {
|
270
|
+
e.preventDefault();
|
271
|
+
if (count >= tipContent.length) {
|
272
|
+
endTip(e, interval_id, settings.cookieMonster, this);
|
273
|
+
}
|
274
|
+
if (settings.timer > 0 && settings.startTimerOnClick) {
|
275
|
+
showNextTip();
|
276
|
+
clearInterval(interval_id);
|
277
|
+
interval_id = setInterval(function() {showNextTip()}, settings.timer);
|
278
|
+
} else if (settings.timer > 0 && !settings.startTimerOnClick){
|
279
|
+
clearInterval(interval_id);
|
280
|
+
interval_id = setInterval(function() {showNextTip()}, settings.timer);
|
281
|
+
} else {
|
282
|
+
showNextTip();
|
283
|
+
}
|
284
|
+
});
|
285
|
+
});
|
286
|
+
};
|
287
|
+
|
288
|
+
|
289
|
+
// +++++++++++++++++++++++++++++
|
290
|
+
// jQuery Cookie plugin
|
291
|
+
// +++++++++++++++++++++++++++++
|
292
|
+
|
293
|
+
// Copyright (c) 2010 Klaus Hartl (stilbuero.de)
|
294
|
+
// Dual licensed under the MIT and GPL licenses:
|
295
|
+
// http://www.opensource.org/licenses/mit-license.php
|
296
|
+
// http://www.gnu.org/licenses/gpl.html
|
297
|
+
jQuery.cookie = function (key, value, options) {
|
298
|
+
|
299
|
+
// key and at least value given, set cookie...
|
300
|
+
if (arguments.length > 1 && String(value) !== "[object Object]") {
|
301
|
+
options = jQuery.extend({}, options);
|
302
|
+
|
303
|
+
if (value === null || value === undefined) {
|
304
|
+
options.expires = -1;
|
305
|
+
}
|
306
|
+
|
307
|
+
if (typeof options.expires === 'number') {
|
308
|
+
var days = options.expires, t = options.expires = new Date();
|
309
|
+
t.setDate(t.getDate() + days);
|
310
|
+
}
|
311
|
+
|
312
|
+
value = String(value);
|
313
|
+
|
314
|
+
return (document.cookie = [
|
315
|
+
encodeURIComponent(key), '=',
|
316
|
+
options.raw ? value : encodeURIComponent(value),
|
317
|
+
options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
|
318
|
+
options.path ? '; path=' + options.path : '',
|
319
|
+
options.domain ? '; domain=' + options.domain : '',
|
320
|
+
options.secure ? '; secure' : ''
|
321
|
+
].join(''));
|
322
|
+
}
|
323
|
+
|
324
|
+
// key and possibly options given, get cookie...
|
325
|
+
options = value || {};
|
326
|
+
var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent;
|
327
|
+
return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null;
|
328
|
+
};
|
329
|
+
})(jQuery);
|
@@ -0,0 +1,132 @@
|
|
1
|
+
/* Artfully masterminded by ZURB*/
|
2
|
+
@import "variables.sass"
|
3
|
+
|
4
|
+
body
|
5
|
+
position: relative
|
6
|
+
|
7
|
+
.joyride-tip-guide
|
8
|
+
position: absolute
|
9
|
+
background: $joyride_tip_background
|
10
|
+
padding: 10px 10px 10px 15px
|
11
|
+
color: $joyride_tip_text_color
|
12
|
+
width: $joyride_tip_width
|
13
|
+
z-index: 10
|
14
|
+
font-family: "HelveticaNeue", "Helvetica Neue", "Helvetica", Helvetica, Arial, Lucida, sans-serif
|
15
|
+
font-weight: normal
|
16
|
+
-moz-border-radius: $joyride_tip_border_radius
|
17
|
+
-webkit-border-radius: $joyride_tip_border_radius
|
18
|
+
border-radius: $joyride_tip_border_radius
|
19
|
+
span.joyride-nub
|
20
|
+
display: block
|
21
|
+
position: absolute
|
22
|
+
left: $joyride_tip_nub_offset_left
|
23
|
+
width: 0
|
24
|
+
height: 0
|
25
|
+
border: solid $joyride_tip_nub_height
|
26
|
+
&.top
|
27
|
+
border-top-color: transparent !important
|
28
|
+
border-left-color: transparent !important
|
29
|
+
border-right-color: transparent !important
|
30
|
+
border-bottom-color: $joyride_tip_background
|
31
|
+
top: $joyride_tip_nub_height*-2
|
32
|
+
bottom: none
|
33
|
+
&.bottom
|
34
|
+
border-bottom-color: transparent !important
|
35
|
+
border-left-color: transparent !important
|
36
|
+
border-right-color: transparent !important
|
37
|
+
border-top-color: $joyride_tip_background !important
|
38
|
+
bottom: $joyride_tip_nub_height*-2
|
39
|
+
bottom: none
|
40
|
+
h1, h2, h3, h4, h5, h6
|
41
|
+
line-height: 1.25
|
42
|
+
margin: 0
|
43
|
+
font-weight: bold
|
44
|
+
color: #fff
|
45
|
+
h1
|
46
|
+
font-size: 30px
|
47
|
+
h2
|
48
|
+
font-size: 26px
|
49
|
+
h3
|
50
|
+
font-size: 22px
|
51
|
+
h4
|
52
|
+
font-size: 18px
|
53
|
+
h5
|
54
|
+
font-size: 16px
|
55
|
+
h6
|
56
|
+
font-size: 14px
|
57
|
+
p
|
58
|
+
margin: 0 0 18px 0
|
59
|
+
font-size: $joyride_tip_text_size
|
60
|
+
line-height: 18px
|
61
|
+
a
|
62
|
+
color: rgb(255, 255, 255)
|
63
|
+
text-decoration: none
|
64
|
+
border-bottom: dotted 1px rgba(255, 255, 255, 0.6)
|
65
|
+
&:hover
|
66
|
+
color: rgba(255, 255, 255, 0.8)
|
67
|
+
border-bottom: none
|
68
|
+
.joyride-next-tip
|
69
|
+
&:after
|
70
|
+
clear: both
|
71
|
+
width: auto
|
72
|
+
padding: 6px 18px 4px
|
73
|
+
font-size: 13px
|
74
|
+
text-decoration: none
|
75
|
+
color: rgb(255, 255, 255)
|
76
|
+
float: left
|
77
|
+
margin: 0 6px 8px 0px
|
78
|
+
border: solid 1px darken(desaturate($joyride_tip_button_color,50%),15%)
|
79
|
+
background: $joyride_tip_button_color
|
80
|
+
background: -moz-linear-gradient(top, $joyride_tip_button_color 0%, $joyride_tip_button_color_2 100%)
|
81
|
+
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, $joyride_tip_button_color), color-stop(100%, $joyride_tip_button_color_2))
|
82
|
+
background: -webkit-linear-gradient(top, $joyride_tip_button_color 0%, $joyride_tip_button_color_2 100%)
|
83
|
+
background: -o-linear-gradient(top, $joyride_tip_button_color 0%, $joyride_tip_button_color_2 100%)
|
84
|
+
background: -ms-linear-gradient(top, $joyride_tip_button_color 0%, $joyride_tip_button_color_2 100%)
|
85
|
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0063ff', endColorstr='#0055d6',GradientType=0 )
|
86
|
+
background: linear-gradient(top, $joyride_tip_button_color 0%, $joyride_tip_button_color_2 100%)
|
87
|
+
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.5)
|
88
|
+
-webkit-border-radius: 2px
|
89
|
+
-moz-border-radius: 2px
|
90
|
+
border-radius: 2px
|
91
|
+
-webkit-box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.3) inset
|
92
|
+
-moz-box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.3) inset
|
93
|
+
box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.3) inset
|
94
|
+
|
95
|
+
.joyride-next-tip:hover
|
96
|
+
color: rgb(255, 255, 255) !important
|
97
|
+
border: solid 1px darken(desaturate($joyride_tip_button_color,50%),15%) !important
|
98
|
+
background: $joyride_tip_button_hover_color
|
99
|
+
background: -moz-linear-gradient(top, $joyride_tip_button_hover_color 0%, $joyride_tip_button_hover_color_2 100%)
|
100
|
+
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, $joyride_tip_button_hover_color), color-stop(100%, $joyride_tip_button_hover_color_2))
|
101
|
+
background: -webkit-linear-gradient(top, $joyride_tip_button_hover_color 0%, $joyride_tip_button_hover_color_2 100%)
|
102
|
+
background: -o-linear-gradient(top, $joyride_tip_button_hover_color 0%, $joyride_tip_button_hover_color_2 100%)
|
103
|
+
background: -ms-linear-gradient(top, $joyride_tip_button_hover_color 0%, $joyride_tip_button_hover_color_2 100%)
|
104
|
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b80ff', endColorstr='#1d66d3',GradientType=0 )
|
105
|
+
background: linear-gradient(top, $joyride_tip_button_hover_color 0%, $joyride_tip_button_hover_color_2 100%)
|
106
|
+
|
107
|
+
.joyride-timer-indicator-wrap
|
108
|
+
width: 50px
|
109
|
+
height: 3px
|
110
|
+
border: solid 1px rgba(255, 255, 255, 0.1)
|
111
|
+
position: absolute
|
112
|
+
right: 17px
|
113
|
+
bottom: 16px
|
114
|
+
|
115
|
+
.joyride-timer-indicator
|
116
|
+
display: block
|
117
|
+
width: 0
|
118
|
+
height: inherit
|
119
|
+
background: rgba(255, 255, 255, 0.25)
|
120
|
+
|
121
|
+
.joyride-close-tip
|
122
|
+
position: absolute
|
123
|
+
right: 10px
|
124
|
+
top: 10px
|
125
|
+
color: rgba(255, 255, 255, 0.6) !important
|
126
|
+
text-decoration: none
|
127
|
+
font-family: Verdana, sans-serif
|
128
|
+
font-size: 10px
|
129
|
+
font-weight: bold
|
130
|
+
border-bottom: none !important
|
131
|
+
&:hover
|
132
|
+
color: rgba(255, 255, 255, 0.9) !important
|