pageflow-outline-navigation-bar 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +23 -0
- data/.jshintrc +13 -0
- data/.rubocop.yml +24 -0
- data/.rubocop_hound.yml +1065 -0
- data/.scss-lint.yml +145 -0
- data/CHANGELOG.md +7 -0
- data/Gemfile +4 -0
- data/README.md +42 -0
- data/Rakefile +10 -0
- data/app/assets/images/pageflow/outline_navigation_bar/indicator.png +0 -0
- data/app/assets/images/pageflow/outline_navigation_bar/volume_control_sprite.png +0 -0
- data/app/assets/javascript/pageflow/outline_navigation_bar.js +26 -0
- data/app/assets/javascript/pageflow/outline_navigation_bar/events.js +30 -0
- data/app/assets/javascript/pageflow/outline_navigation_bar/expander.js +34 -0
- data/app/assets/javascript/pageflow/outline_navigation_bar/fullscreen_button.js +24 -0
- data/app/assets/javascript/pageflow/outline_navigation_bar/hide_text_button.js +17 -0
- data/app/assets/javascript/pageflow/outline_navigation_bar/menu_item.js +41 -0
- data/app/assets/javascript/pageflow/outline_navigation_bar/navigator.js +35 -0
- data/app/assets/javascript/pageflow/outline_navigation_bar/panels.js +54 -0
- data/app/assets/javascript/pageflow/outline_navigation_bar/resizer.js +32 -0
- data/app/assets/javascript/pageflow/outline_navigation_bar/scroller.js +144 -0
- data/app/assets/javascript/pageflow/outline_navigation_bar/widget.js +227 -0
- data/app/assets/stylesheets/pageflow/outline_navigation_bar/themes/default.scss +87 -0
- data/app/assets/stylesheets/pageflow/outline_navigation_bar/themes/default/credits_box.scss +28 -0
- data/app/assets/stylesheets/pageflow/outline_navigation_bar/themes/default/cross_dependant_styles.css.scss +6 -0
- data/app/assets/stylesheets/pageflow/outline_navigation_bar/themes/default/icons/icon_font.scss +177 -0
- data/app/assets/stylesheets/pageflow/outline_navigation_bar/themes/default/icons/sprite.scss +140 -0
- data/app/assets/stylesheets/pageflow/outline_navigation_bar/themes/default/menu_item.scss +107 -0
- data/app/assets/stylesheets/pageflow/outline_navigation_bar/themes/default/menu_items.scss +33 -0
- data/app/assets/stylesheets/pageflow/outline_navigation_bar/themes/default/mixins.scss +5 -0
- data/app/assets/stylesheets/pageflow/outline_navigation_bar/themes/default/mobile_images.scss +54 -0
- data/app/assets/stylesheets/pageflow/outline_navigation_bar/themes/default/mobile_panel.scss +61 -0
- data/app/assets/stylesheets/pageflow/outline_navigation_bar/themes/default/mobile_sharing.scss +57 -0
- data/app/assets/stylesheets/pageflow/outline_navigation_bar/themes/default/panel.scss +19 -0
- data/app/assets/stylesheets/pageflow/outline_navigation_bar/themes/default/parent_page_button.scss +46 -0
- data/app/assets/stylesheets/pageflow/outline_navigation_bar/themes/default/prevent_focus_rect_on_pointer_down.scss +4 -0
- data/app/assets/stylesheets/pageflow/outline_navigation_bar/themes/default/scroller.scss +93 -0
- data/app/assets/stylesheets/pageflow/outline_navigation_bar/themes/default/share_box.scss +20 -0
- data/app/assets/stylesheets/pageflow/outline_navigation_bar/themes/default/toggle.scss +73 -0
- data/app/assets/stylesheets/pageflow/outline_navigation_bar/themes/default/volume_box.scss +48 -0
- data/app/assets/stylesheets/pageflow/outline_navigation_bar/themes/default/widget_margin.scss +27 -0
- data/app/views/pageflow/outline_navigation_bar/_widget.html.erb +12 -0
- data/app/views/pageflow/outline_navigation_bar/widget/_buttons.html.erb +71 -0
- data/app/views/pageflow/outline_navigation_bar/widget/_chapter.html.erb +5 -0
- data/app/views/pageflow/outline_navigation_bar/widget/_home_button.html.erb +8 -0
- data/app/views/pageflow/outline_navigation_bar/widget/_link.html.erb +3 -0
- data/app/views/pageflow/outline_navigation_bar/widget/_mobile_panels.html.erb +28 -0
- data/app/views/pageflow/outline_navigation_bar/widget/_overview_button.html.erb +8 -0
- data/app/views/pageflow/outline_navigation_bar/widget/_scroller.html.erb +13 -0
- data/app/views/pageflow/outline_navigation_bar/widget/_toggles.html.erb +32 -0
- data/config/locales/de.yml +8 -0
- data/config/locales/en.yml +8 -0
- data/lib/pageflow-outline-navigation-bar.rb +17 -0
- data/lib/pageflow/outline_navigation_bar/engine.rb +9 -0
- data/lib/pageflow/outline_navigation_bar/expandable_widget_type.rb +17 -0
- data/lib/pageflow/outline_navigation_bar/fixed_widget_type.rb +17 -0
- data/lib/pageflow/outline_navigation_bar/plugin.rb +12 -0
- data/lib/pageflow/outline_navigation_bar/version.rb +5 -0
- data/lib/pageflow/outline_navigation_bar/widget_type.rb +14 -0
- data/pageflow-outline-navigation-bar.gemspec +26 -0
- metadata +160 -0
data/.scss-lint.yml
ADDED
@@ -0,0 +1,145 @@
|
|
1
|
+
scss_files: "**/*.scss"
|
2
|
+
linters:
|
3
|
+
BangFormat:
|
4
|
+
enabled: true
|
5
|
+
space_before_bang: true
|
6
|
+
space_after_bang: false
|
7
|
+
BorderZero:
|
8
|
+
enabled: false
|
9
|
+
convention: zero
|
10
|
+
ColorKeyword:
|
11
|
+
enabled: true
|
12
|
+
severity: warning
|
13
|
+
ColorVariable:
|
14
|
+
enabled: true
|
15
|
+
Comment:
|
16
|
+
enabled: true
|
17
|
+
DebugStatement:
|
18
|
+
enabled: true
|
19
|
+
DeclarationOrder:
|
20
|
+
enabled: false
|
21
|
+
DuplicateProperty:
|
22
|
+
enabled: true
|
23
|
+
ElsePlacement:
|
24
|
+
enabled: true
|
25
|
+
style: same_line
|
26
|
+
EmptyLineBetweenBlocks:
|
27
|
+
enabled: true
|
28
|
+
ignore_single_line_blocks: true
|
29
|
+
EmptyRule:
|
30
|
+
enabled: true
|
31
|
+
FinalNewline:
|
32
|
+
enabled: true
|
33
|
+
present: true
|
34
|
+
HexLength:
|
35
|
+
enabled: false
|
36
|
+
style: short
|
37
|
+
HexNotation:
|
38
|
+
enabled: true
|
39
|
+
style: lowercase
|
40
|
+
HexValidation:
|
41
|
+
enabled: true
|
42
|
+
IdSelector:
|
43
|
+
enabled: true
|
44
|
+
ImportantRule:
|
45
|
+
enabled: true
|
46
|
+
ImportPath:
|
47
|
+
enabled: true
|
48
|
+
leading_underscore: false
|
49
|
+
filename_extension: false
|
50
|
+
Indentation:
|
51
|
+
enabled: true
|
52
|
+
allow_non_nested_indentation: false
|
53
|
+
character: space
|
54
|
+
width: 2
|
55
|
+
LeadingZero:
|
56
|
+
enabled: true
|
57
|
+
style: include_zero
|
58
|
+
MergeableSelector:
|
59
|
+
enabled: true
|
60
|
+
force_nesting: true
|
61
|
+
NameFormat:
|
62
|
+
enabled: true
|
63
|
+
allow_leading_underscore: true
|
64
|
+
convention: hyphenated_lowercase
|
65
|
+
NestingDepth:
|
66
|
+
enabled: true
|
67
|
+
max_depth: 4
|
68
|
+
severity: warning
|
69
|
+
PlaceholderInExtend:
|
70
|
+
enabled: false
|
71
|
+
PropertyCount:
|
72
|
+
enabled: true
|
73
|
+
include_nested: false
|
74
|
+
max_properties: 10
|
75
|
+
PropertySortOrder:
|
76
|
+
enabled: false
|
77
|
+
ignore_unspecified: false
|
78
|
+
severity: warning
|
79
|
+
separate_groups: false
|
80
|
+
PropertySpelling:
|
81
|
+
enabled: true
|
82
|
+
extra_properties: []
|
83
|
+
QualifyingElement:
|
84
|
+
enabled: false
|
85
|
+
allow_element_with_attribute: false
|
86
|
+
allow_element_with_class: false
|
87
|
+
allow_element_with_id: false
|
88
|
+
severity: warning
|
89
|
+
SelectorDepth:
|
90
|
+
enabled: true
|
91
|
+
max_depth: 3
|
92
|
+
severity: warning
|
93
|
+
SelectorFormat:
|
94
|
+
enabled: true
|
95
|
+
convention: snake_case
|
96
|
+
Shorthand:
|
97
|
+
enabled: false
|
98
|
+
severity: warning
|
99
|
+
SingleLinePerProperty:
|
100
|
+
enabled: true
|
101
|
+
allow_single_line_rule_sets: true
|
102
|
+
SingleLinePerSelector:
|
103
|
+
enabled: true
|
104
|
+
SpaceAfterComma:
|
105
|
+
enabled: true
|
106
|
+
SpaceAfterPropertyColon:
|
107
|
+
enabled: true
|
108
|
+
style: one_space
|
109
|
+
SpaceAfterPropertyName:
|
110
|
+
enabled: true
|
111
|
+
SpaceBeforeBrace:
|
112
|
+
enabled: true
|
113
|
+
style: space
|
114
|
+
allow_single_line_padding: false
|
115
|
+
SpaceBetweenParens:
|
116
|
+
enabled: true
|
117
|
+
spaces: 0
|
118
|
+
StringQuotes:
|
119
|
+
enabled: true
|
120
|
+
style: double_quotes
|
121
|
+
TrailingSemicolon:
|
122
|
+
enabled: true
|
123
|
+
TrailingZero:
|
124
|
+
enabled: false
|
125
|
+
UnnecessaryMantissa:
|
126
|
+
enabled: true
|
127
|
+
UnnecessaryParentReference:
|
128
|
+
enabled: true
|
129
|
+
UrlFormat:
|
130
|
+
enabled: true
|
131
|
+
UrlQuotes:
|
132
|
+
enabled: true
|
133
|
+
VariableForProperty:
|
134
|
+
enabled: false
|
135
|
+
properties: []
|
136
|
+
VendorPrefixes:
|
137
|
+
enabled: true
|
138
|
+
identifier_list: bourbon
|
139
|
+
include: []
|
140
|
+
exclude: []
|
141
|
+
ZeroUnit:
|
142
|
+
enabled: true
|
143
|
+
severity: warning
|
144
|
+
Compass::PropertyWithMixin:
|
145
|
+
enabled: false
|
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# Pageflow Outline Navigation Bar
|
2
|
+
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/pageflow-outline-navigation-bar.svg)](http://badge.fury.io/rb/pageflow-outline-navigation-bar)
|
4
|
+
|
5
|
+
A navigation bar displaying chapter titles.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's `Gemfile`:
|
10
|
+
|
11
|
+
gem 'pageflow-outline-navigation-bar'
|
12
|
+
|
13
|
+
Register the plugin inside the configure block in `config/initializers/pageflow.rb`
|
14
|
+
|
15
|
+
Pageflow.configure do |config|
|
16
|
+
config.plugin(Pageflow::OutlineNavigationBar.plugin)
|
17
|
+
end
|
18
|
+
|
19
|
+
Include javascripts and stylesheets:
|
20
|
+
|
21
|
+
# app/assets/javascripts/pageflow/application.js
|
22
|
+
//= require pageflow/outline_navigation_bar
|
23
|
+
|
24
|
+
# app/assets/stylesheets/pageflow/themes/default.css.scss
|
25
|
+
@import "pageflow/outline_navigation_bar/themes/default";
|
26
|
+
|
27
|
+
Execute `bundle install` and restart the application server. Now the
|
28
|
+
widget type can be enabled in your feature settings.
|
29
|
+
|
30
|
+
## Troubleshooting
|
31
|
+
|
32
|
+
If you run into problems while installing the page type, please also refer to the
|
33
|
+
[Troubleshooting](https://github.com/codevise/pageflow/wiki/Troubleshooting) wiki
|
34
|
+
page in the [Pageflow repository](https://github.com/codevise/pageflow). If that
|
35
|
+
doesn't help, consider
|
36
|
+
[filing an issue](https://github.com/codevise/pageflow-outline-navigation-bar/issues).
|
37
|
+
|
38
|
+
## Contributing Locales
|
39
|
+
|
40
|
+
Edit the translations directly on the
|
41
|
+
[pageflow-outline-navigation-bar](http://www.localeapp.com/projects/public?search=tf/pageflow-outline-navigation-bar)
|
42
|
+
locale project.
|
data/Rakefile
ADDED
Binary file
|
@@ -0,0 +1,26 @@
|
|
1
|
+
//= require_self
|
2
|
+
|
3
|
+
//= require ./outline_navigation_bar/events
|
4
|
+
//= require ./outline_navigation_bar/expander
|
5
|
+
//= require ./outline_navigation_bar/hide_text_button
|
6
|
+
//= require ./outline_navigation_bar/resizer
|
7
|
+
//= require ./outline_navigation_bar/navigator
|
8
|
+
//= require ./outline_navigation_bar/scroller
|
9
|
+
//= require ./outline_navigation_bar/panels
|
10
|
+
//= require ./outline_navigation_bar/menu_item
|
11
|
+
|
12
|
+
//= require ./outline_navigation_bar/widget
|
13
|
+
|
14
|
+
pageflow.outlineNavigationBar = pageflow.outlineNavigationBar || {};
|
15
|
+
|
16
|
+
pageflow.widgetTypes.register('outline_navigation_bar_expandable', {
|
17
|
+
enhance: function(element) {
|
18
|
+
element.outlineNavigationBar();
|
19
|
+
}
|
20
|
+
});
|
21
|
+
|
22
|
+
pageflow.widgetTypes.register('outline_navigation_bar_fixed', {
|
23
|
+
enhance: function(element) {
|
24
|
+
element.outlineNavigationBar();
|
25
|
+
}
|
26
|
+
});
|
@@ -0,0 +1,30 @@
|
|
1
|
+
pageflow.outlineNavigationBar.events = {
|
2
|
+
pointerUp: 'touchend mouseup MSPointerUp pointerup',
|
3
|
+
pointerDown: 'touchstart mousedown MSPointerDown pointerdown',
|
4
|
+
|
5
|
+
onPointerDown: function(element, selectorOrHandler, handler) {
|
6
|
+
var selector = handler ? selectorOrHandler : null;
|
7
|
+
handler = handler || selectorOrHandler;
|
8
|
+
|
9
|
+
this._onPointerDown(handler, function(event, fn) {
|
10
|
+
element.on(event, selector, fn);
|
11
|
+
});
|
12
|
+
},
|
13
|
+
|
14
|
+
_onPointerDown: function(handler, on) {
|
15
|
+
on(this.pointerDown, function(event) {
|
16
|
+
event.preventDefault();
|
17
|
+
handler.call(this);
|
18
|
+
});
|
19
|
+
|
20
|
+
on('click', function(event) {
|
21
|
+
event.preventDefault();
|
22
|
+
});
|
23
|
+
|
24
|
+
on('keypress', function(event) {
|
25
|
+
if (event.which == 13) {
|
26
|
+
handler.call(this);
|
27
|
+
}
|
28
|
+
});
|
29
|
+
},
|
30
|
+
};
|
@@ -0,0 +1,34 @@
|
|
1
|
+
pageflow.outlineNavigationBar.Expander = pageflow.Object.extend({
|
2
|
+
initialize: function(options) {
|
3
|
+
this.options = options;
|
4
|
+
this.expandedBy = {};
|
5
|
+
},
|
6
|
+
|
7
|
+
expand: function(options) {
|
8
|
+
this.expandedBy[(options && options.by) || 'button'] = true;
|
9
|
+
clearTimeout(this.collapseTimeout);
|
10
|
+
|
11
|
+
if (!this.expanded && this.options.enabled()) {
|
12
|
+
this.expanded = true;
|
13
|
+
this.options.expand();
|
14
|
+
}
|
15
|
+
},
|
16
|
+
|
17
|
+
collapse: function(options) {
|
18
|
+
delete this.expandedBy[(options && options.by) || 'button'];
|
19
|
+
clearTimeout(this.collapseTimeout);
|
20
|
+
|
21
|
+
if (this.expanded && _.keys(this.expandedBy).length === 0) {
|
22
|
+
this.expanded = false;
|
23
|
+
this.options.collapse();
|
24
|
+
}
|
25
|
+
},
|
26
|
+
|
27
|
+
scheduleCollapse: function(options) {
|
28
|
+
var that = this;
|
29
|
+
|
30
|
+
this.collapseTimeout = setTimeout(function() {
|
31
|
+
that.collapse(options);
|
32
|
+
}, 200);
|
33
|
+
}
|
34
|
+
});
|
@@ -0,0 +1,24 @@
|
|
1
|
+
(function($) {
|
2
|
+
$.widget('pageflow.outlineNavigationBarFullscreenButton', {
|
3
|
+
_create: function() {
|
4
|
+
var element = this.element;
|
5
|
+
|
6
|
+
if ($.support.fullscreen) {
|
7
|
+
element.click(function() {
|
8
|
+
element.toggleClass('fs').updateTitle();
|
9
|
+
|
10
|
+
$('#outer_wrapper').fullScreen({
|
11
|
+
callback: function(isFullScreen) {
|
12
|
+
element
|
13
|
+
.toggleClass('active', !!isFullScreen)
|
14
|
+
.updateTitle();
|
15
|
+
}
|
16
|
+
});
|
17
|
+
});
|
18
|
+
}
|
19
|
+
else {
|
20
|
+
element.parent().hide();
|
21
|
+
}
|
22
|
+
}
|
23
|
+
});
|
24
|
+
}(jQuery));
|
@@ -0,0 +1,17 @@
|
|
1
|
+
(function($) {
|
2
|
+
var events = pageflow.outlineNavigationBar.events;
|
3
|
+
|
4
|
+
$.widget('pageflow.outlineNavigationBarHideTextButton', {
|
5
|
+
_create: function() {
|
6
|
+
var element = this.element;
|
7
|
+
|
8
|
+
element.click(function() {
|
9
|
+
pageflow.hideText.toggle();
|
10
|
+
});
|
11
|
+
|
12
|
+
pageflow.hideText.on('activate deactivate', function() {
|
13
|
+
element.toggleClass('active', pageflow.hideText.isActive()).updateTitle();
|
14
|
+
});
|
15
|
+
}
|
16
|
+
});
|
17
|
+
}(jQuery));
|
@@ -0,0 +1,41 @@
|
|
1
|
+
(function($) {
|
2
|
+
var events = pageflow.outlineNavigationBar.events;
|
3
|
+
|
4
|
+
$.widget('pageflow.outlineNavigationBarMenuItem', {
|
5
|
+
_create: function() {
|
6
|
+
this._setupPressedClass();
|
7
|
+
this._ensureOpenWhileFocusInMenuBox();
|
8
|
+
},
|
9
|
+
|
10
|
+
_setupPressedClass: function() {
|
11
|
+
var element = this.element;
|
12
|
+
|
13
|
+
element.on(events.pointerDown, '> a', function() {
|
14
|
+
var link = $(this);
|
15
|
+
link.addClass('pressed');
|
16
|
+
|
17
|
+
$('body').one(events.pointerUp, function() {
|
18
|
+
link.removeClass('pressed');
|
19
|
+
});
|
20
|
+
});
|
21
|
+
},
|
22
|
+
|
23
|
+
_ensureOpenWhileFocusInMenuBox: function() {
|
24
|
+
var element = this.element;
|
25
|
+
|
26
|
+
element.find('.menu_box a').on({
|
27
|
+
focus: function() {
|
28
|
+
element.addClass('focused');
|
29
|
+
},
|
30
|
+
|
31
|
+
blur: function() {
|
32
|
+
element.removeClass('focused');
|
33
|
+
}
|
34
|
+
});
|
35
|
+
|
36
|
+
element.on('mouseleave', function() {
|
37
|
+
element.blur();
|
38
|
+
});
|
39
|
+
}
|
40
|
+
});
|
41
|
+
}(jQuery));
|
@@ -0,0 +1,35 @@
|
|
1
|
+
(function($) {
|
2
|
+
var events = pageflow.outlineNavigationBar.events;
|
3
|
+
|
4
|
+
$.widget('pageflow.outlineNavigationBarNavigator', {
|
5
|
+
_create: function() {
|
6
|
+
var element = this.element;
|
7
|
+
var scroller = this.options.scroller;
|
8
|
+
var links = element.find('a');
|
9
|
+
|
10
|
+
element.on(events.pointerDown, 'a', function(event) {
|
11
|
+
event.preventDefault();
|
12
|
+
$(this).one(events.pointerUp, goToPage);
|
13
|
+
});
|
14
|
+
|
15
|
+
element.on('click', 'a', function(event) {
|
16
|
+
event.preventDefault();
|
17
|
+
});
|
18
|
+
|
19
|
+
element.on('keydown', 'a', function(event) {
|
20
|
+
if (event.which == 13) {
|
21
|
+
goToPage.call(this);
|
22
|
+
}
|
23
|
+
});
|
24
|
+
|
25
|
+
scroller.on('scroll', function() {
|
26
|
+
links.off(events.pointerUp, goToPage);
|
27
|
+
});
|
28
|
+
|
29
|
+
function goToPage() {
|
30
|
+
var id = $(this).data('link');
|
31
|
+
pageflow.slides.goToById(id);
|
32
|
+
}
|
33
|
+
}
|
34
|
+
});
|
35
|
+
}(jQuery));
|
@@ -0,0 +1,54 @@
|
|
1
|
+
(function($) {
|
2
|
+
var events = pageflow.outlineNavigationBar.events;
|
3
|
+
|
4
|
+
$.widget('pageflow.outlineNavigationBarPanels', {
|
5
|
+
_create: function() {
|
6
|
+
var links = this.options.toggles.find('a');
|
7
|
+
var expander = this.options.expander;
|
8
|
+
var widget = this;
|
9
|
+
|
10
|
+
events.onPointerDown(links, function() {
|
11
|
+
var link = $(this);
|
12
|
+
var panelName = link.data('panel');
|
13
|
+
var collapsed = false;
|
14
|
+
|
15
|
+
if (link.data('toggle') === 'expandable') {
|
16
|
+
if (link.hasClass('active')) {
|
17
|
+
expander.collapse();
|
18
|
+
collapsed = true;
|
19
|
+
}
|
20
|
+
else {
|
21
|
+
expander.expand();
|
22
|
+
}
|
23
|
+
}
|
24
|
+
else if (link.data('toggle')) {
|
25
|
+
if (link.hasClass('active')) {
|
26
|
+
panelName = link.data('toggle');
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
widget.update(panelName, collapsed);
|
31
|
+
});
|
32
|
+
},
|
33
|
+
|
34
|
+
reset: function() {
|
35
|
+
var defaultLink = this.options.toggles.find('a[data-toggle="expandable"]');
|
36
|
+
this.update(defaultLink.data('panel'), true);
|
37
|
+
},
|
38
|
+
|
39
|
+
update: function(panelName, collapsed) {
|
40
|
+
var links = this.options.toggles.find('a');
|
41
|
+
var panels = this.options.panels;
|
42
|
+
|
43
|
+
links.each(function() {
|
44
|
+
var link = $(this);
|
45
|
+
link.toggleClass('active', link.data('panel') === panelName && !collapsed);
|
46
|
+
});
|
47
|
+
|
48
|
+
panels.each(function() {
|
49
|
+
var panel = $(this);
|
50
|
+
panel.toggleClass('active', panel.hasClass(panelName));
|
51
|
+
});
|
52
|
+
}
|
53
|
+
});
|
54
|
+
}(jQuery));
|