pushpop-rails 1.0.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.
Files changed (31) hide show
  1. data/README.md +42 -0
  2. data/Rakefile +29 -0
  3. data/lib/generators/pushpop/install/install_generator.rb +17 -0
  4. data/lib/pushpop-rails.rb +4 -0
  5. data/lib/pushpop/rails.rb +8 -0
  6. data/lib/pushpop/rails/engine.rb +7 -0
  7. data/lib/pushpop/rails/version.rb +5 -0
  8. data/vendor/assets/Pushpop/background.png +0 -0
  9. data/vendor/assets/Pushpop/background@2x.png +0 -0
  10. data/vendor/assets/Pushpop/externals/scrollkit/background.png +0 -0
  11. data/vendor/assets/Pushpop/externals/scrollkit/scrollkit.css +202 -0
  12. data/vendor/assets/Pushpop/externals/scrollkit/scrollkit.js +924 -0
  13. data/vendor/assets/Pushpop/font/pushpop-glyphs-webfont.eot +0 -0
  14. data/vendor/assets/Pushpop/font/pushpop-glyphs-webfont.svg +57 -0
  15. data/vendor/assets/Pushpop/font/pushpop-glyphs-webfont.ttf +0 -0
  16. data/vendor/assets/Pushpop/font/pushpop-glyphs-webfont.woff +0 -0
  17. data/vendor/assets/Pushpop/pushpop-modal-view-stack/pushpop-modal-view-stack.css +148 -0
  18. data/vendor/assets/Pushpop/pushpop-modal-view-stack/pushpop-modal-view-stack.js +306 -0
  19. data/vendor/assets/Pushpop/pushpop-popover-view-stack/pushpop-popover-view-stack.css +170 -0
  20. data/vendor/assets/Pushpop/pushpop-popover-view-stack/pushpop-popover-view-stack.js +278 -0
  21. data/vendor/assets/Pushpop/pushpop-split-view/pushpop-split-view.css +38 -0
  22. data/vendor/assets/Pushpop/pushpop-split-view/pushpop-split-view.js +33 -0
  23. data/vendor/assets/Pushpop/pushpop-tab-view/pushpop-tab-view.css +130 -0
  24. data/vendor/assets/Pushpop/pushpop-tab-view/pushpop-tab-view.js +298 -0
  25. data/vendor/assets/Pushpop/pushpop-table-view/pushpop-table-view.css +1273 -0
  26. data/vendor/assets/Pushpop/pushpop-table-view/pushpop-table-view.js +2275 -0
  27. data/vendor/assets/Pushpop/pushpop.css +2243 -0
  28. data/vendor/assets/Pushpop/pushpop.js +1554 -0
  29. data/vendor/assets/javascripts/pushpop_rails.js +7 -0
  30. data/vendor/assets/stylesheets/pushpop_rails.css +9 -0
  31. metadata +92 -0
@@ -0,0 +1,170 @@
1
+ .pp-popover-view-stack-container {
2
+ background: rgb(12,25,52);
3
+ background: -moz-linear-gradient(top, rgba(93,101,120,1) 0%, rgba(31,43,67,0.9) 22px, rgba(9,22,49,0.9) 23px, rgba(12,25,52,0.9) 100%);
4
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(93,101,120,1)), color-stop(23px,rgba(31,43,67,0.9)), color-stop(51%,rgba(9,22,49,0.9)), color-stop(100%,rgba(12,25,52,0.9)));
5
+ background: -webkit-linear-gradient(top, rgba(93,101,120,1) 0%,rgba(31,43,67,0.9) 22px,rgba(9,22,49,0.9) 23px,rgba(12,25,52,0.9) 100%);
6
+ background: -o-linear-gradient(top, rgba(93,101,120,1) 0%,rgba(31,43,67,0.9) 22px,rgba(9,22,49,0.9) 23px,rgba(12,25,52,0.9) 100%);
7
+ background: -ms-linear-gradient(top, rgba(93,101,120,1) 0%,rgba(31,43,67,0.9) 22px,rgba(9,22,49,0.9) 23px,rgba(12,25,52,0.9) 100%);
8
+ background: linear-gradient(to bottom, rgba(93,101,120,1) 0%,rgba(31,43,67,0.9) 22px,rgba(9,22,49,0.9) 23px,rgba(12,25,52,0.9) 100%);
9
+ border: 1px solid rgba(0, 0, 0, 0.5);
10
+ position: absolute;
11
+ margin: 20px 10px 10px;
12
+ padding: 0 6px 6px;
13
+ visibility: hidden;
14
+ opacity: 0;
15
+ pointer-events: none;
16
+ z-index: 99999;
17
+ -webkit-border-radius: 6px;
18
+ -moz-border-radius: 6px;
19
+ border-radius: 6px;
20
+ -webkit-box-shadow: 0 4px 20px 2px rgba(0, 0, 0, 0.6), 0 0 0 1px rgba(224, 224, 224, 0.1), inset 0 1px 0 0 rgba(255, 255, 255, 0.6);
21
+ -moz-box-shadow: 0 4px 20px 2px rgba(0, 0, 0, 0.6), 0 0 0 1px rgba(224, 224, 224, 0.1), inset 0 1px 0 0 rgba(255, 255, 255, 0.6);
22
+ box-shadow: 0 4px 20px 2px rgba(0, 0, 0, 0.6), 0 0 0 1px rgba(224, 224, 224, 0.1), inset 0 1px 0 0 rgba(255, 255, 255, 0.6);
23
+ -webkit-backface-visibility: hidden;
24
+ -moz-backface-visibility: hidden;
25
+ -ms-backface-visibility: hidden;
26
+ -o-backface-visibility: hidden;
27
+ backface-visibility: hidden;
28
+ -webkit-transform: translate3d(0, 0, 0);
29
+ -moz-transform: translate(0, 0);
30
+ -ms-transform: translate(0, 0);
31
+ -o-transform: translate(0, 0);
32
+ transform: translate(0, 0);
33
+ -webkit-transition: visibility 0s linear 0.4s, opacity 0.3s ease 0s;
34
+ -moz-transition: visibility 0s linear 0.4s, opacity 0.3s ease 0s;
35
+ -ms-transition: visibility 0s linear 0.4s, opacity 0.3s ease 0s;
36
+ -o-transition: visibility 0s linear 0.4s, opacity 0.3s ease 0s;
37
+ transition: visibility 0s linear 0.4s, opacity 0.3s ease 0s;
38
+ }
39
+
40
+ .pp-popover-view-stack-container.pp-popover-view-stack-container-style-black {
41
+ background: rgb(24,24,24);
42
+ background: -moz-linear-gradient(top, rgba(101,101,101,1) 0%, rgba(42,42,42,0.9) 22px, rgba(21,21,21,0.9) 23px, rgba(24,24,24,0.9) 100%);
43
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(101,101,101,1)), color-stop(23px,rgba(42,42,42,0.9)), color-stop(51%,rgba(21,21,21,0.9)), color-stop(100%,rgba(24,24,24,0.9)));
44
+ background: -webkit-linear-gradient(top, rgba(101,101,101,1) 0%,rgba(42,42,42,0.9) 22px,rgba(21,21,21,0.9) 23px,rgba(24,24,24,0.9) 100%);
45
+ background: -o-linear-gradient(top, rgba(101,101,101,1) 0%,rgba(42,42,42,0.9) 22px,rgba(21,21,21,0.9) 23px,rgba(24,24,24,0.9) 100%);
46
+ background: -ms-linear-gradient(top, rgba(101,101,101,1) 0%,rgba(42,42,42,0.9) 22px,rgba(21,21,21,0.9) 23px,rgba(24,24,24,0.9) 100%);
47
+ background: linear-gradient(to bottom, rgba(101,101,101,1) 0%,rgba(42,42,42,0.9) 22px,rgba(21,21,21,0.9) 23px,rgba(24,24,24,0.9) 100%);
48
+ }
49
+
50
+ .pp-popover-view-stack-arrow {
51
+ background-repeat: none;
52
+ display: block;
53
+ position: absolute;
54
+ z-index: -1;
55
+ }
56
+
57
+ .pp-popover-view-stack-arrow-top {
58
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAATCAYAAAAao7T0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAr1JREFUeNrE1NtOE0EYwPGZ7fZASylGaSsg6oXxAYyGLkYUQ6GlLQ0iIiCixFfQ+BomJiZiUNMICSgppRUWS61S8ELjhV6ZGEIUak9b0cphe/icbVyNUQP0gP/LTebbX2YmgwEA5VNra+uUTCYz8jzPOp3OpnxmUfksttvt8/v3HzBevXYdampqjAQ2+18w5Mdz1dX7ai9e6odkCqC3rx+qqqrryPfnuc7EuRzTD4hBAKyvbUCGzKAoCsnlNB68cxsHg8vPxsfH64uOIZAA2QGmu7cPVld5yGQyv7ZZAMlofP/uAA6HQz4CaigaxmazZSGdXb2QWF3/DSImkVBIIaWxwzGII+HwjMvlOl1wjNVqDVRWVjFnO3sgkViD9F8gYrREghQKGg857uFoNMJOTEw0FQxDIHN6/V5De0c3rHz9Bul0ZtM1NE1A5A6NDDtwLBZ97Ha7zXljLBZLFtLWfh64zwkCSW/5WKVSGikJaHT0AeZiMbfH47HkjBEgOp3eYLOfgyj3ZVsQMZlUipQlNHaODeN4PO4kIPu2MS0tLQGtTs+YLW0Qia1AKpXO+TGTy2VIRUBu10Mc57hHk5OTZ7aMMZvNAbIjTKPJDqFwPC+ImEIhRyoljVnPGOY4boRl2Y5NMQJEq9Uxpxqt8CnMQTKZQoVKWaJAapUUP5lyEVBsaHp6uuufGJPJlIWcaDDDUjBaUIiYSlmSBT31egSQw+v1XvgD09zcTCB6pq6+CT4sRQgkiYpVaakSlRHQrJ8V3qFBn893+SdGgFRUaJna40ZY/BgCni8eRKxMrUIaFY3nAzM4EgkP+P3+K9hoNBKIjjlqaICFxSBs7ABETKNRo3I1Tb184UehUOgm7urugSPHTsL7hWUC4dFOt6u8DGlKaer1qwDCN245Mm/evoP1jZ2HiO3ZXY4OHzqIvwswAE7BY9veYNe4AAAAAElFTkSuQmCC);
59
+ margin: 0 6px;
60
+ top: -18px;
61
+ left: 0;
62
+ width: 35px;
63
+ height: 19px;
64
+ }
65
+
66
+ .pp-popover-view-stack-container.pp-popover-view-stack-container-style-black .pp-popover-view-stack-arrow-top {
67
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAATCAYAAAAao7T0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmZJREFUeNrE1klrWlEUB/CjcdZXS4xD1WrponTTlSAIEUEwOMYIIkEQ9FP4aQIuFAIuJA7BRCQIWWTjqm5KCaWitc5JDMYp2nsvfYFOJHHqf/NW974f55x732PMZjNYJG63u8XhcCSj0ah9dHS0tchezEUW7+3t9bRarSQcDoNGo5Eg2PV/waAX36jValEoFILJZALBYBBUKtWLRUCMedr0E0JhwGAwgOl0CkwmE7hcLhwcHECtVrtOJpMvV47BEFQBKhAIwN3dHYE8lBmB0PxAJBKBRqPRRaDNlWF2d3cJxO/3Q7/f/wXyOygajRJQKpXaXDrG5XLdKJVKan9/H25vb/8KobOxsUFaFovFoNVqtdPp9NbSMBiiUCgon88HvV4P7u/vH13DYrEI6PDwENrtdjOTycgWxjidTgLxer1wdXX1JAgdNpsNPB4P4vE4BjWOj4/lc2MwRC6XUx6PB2/2LAgdPD8YlEgkoNvtfkegV8/GOBwOAkEgAsF3ybzB7eLz+YCGGTqdzrdsNqt6MsZutxOIzWbDJ2IhCB1cHYFAAKgyGFQ5PT19/SgGQ2QyGWWxWAhkPB7DsoKrIxQK4eTkBIO+5nK5N//EoEoQiNlsxrfoUiF0cHUwKJ/PY9AX9Hz7B8ZqtRKIyWSCarW6EggdkUhEQIVCAd9Dn8/Ozt49YDBEKpVS29vbUKlUAP0OwKpDURRBnZ+fQ7PZ/IRg7xk7OzsEYjAYoFwuw3A4hHVFLBYT1MXFBdTr9Y8sDNHr9XB5eblWCA5qETmpOp0OisXiB5bRaIRSqbR2CB3UIvKdQ6cYfggwABzaSUlhnklfAAAAAElFTkSuQmCC);
68
+ }
69
+
70
+ .pp-popover-view-stack-container.pp-active {
71
+ visibility: visible;
72
+ opacity: 1;
73
+ pointer-events: auto;
74
+ -webkit-transition-delay: 0s;
75
+ -moz-transition-delay: 0s;
76
+ -ms-transition-delay: 0s;
77
+ -o-transition-delay: 0s;
78
+ transition-delay: 0s;
79
+ }
80
+
81
+ .pp-popover-view-stack {
82
+ background: none;
83
+ position: relative;
84
+ overflow: hidden;
85
+ margin: 0;
86
+ padding: 0;
87
+ font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
88
+ font-size: 13px;
89
+ line-height: 1.25em;
90
+ width: 320px;
91
+ min-height: 440px;
92
+ -webkit-text-size-adjust: 100%;
93
+ -moz-text-size-adjust: 100%;
94
+ -ms-text-size-adjust: 100%;
95
+ -o-text-size-adjust: 100%;
96
+ text-size-adjust: 100%;
97
+ }
98
+
99
+ .pp-popover-view-stack::before {
100
+ background: #333 url('../background.png');
101
+ background-size: 320px 460px;
102
+ content: '';
103
+ display: block;
104
+ position: absolute;
105
+ top: 44px;
106
+ right: 0;
107
+ bottom: 0;
108
+ left: 0;
109
+ width: auto;
110
+ height: auto;
111
+ }
112
+
113
+ @media only screen and (-webkit-min-device-pixel-ratio: 2) {
114
+ .pp-popover-view-stack::before {
115
+ background: #333 url('../background@2x.png');
116
+ }
117
+ }
118
+
119
+ .pp-popover-view-stack::after {
120
+ content: '';
121
+ display: block;
122
+ position: absolute;
123
+ top: 44px;
124
+ right: 0;
125
+ bottom: 0;
126
+ left: 0;
127
+ width: auto;
128
+ height: auto;
129
+ pointer-events: none;
130
+ -webkit-box-shadow: inset 0 1px 3px 0 rgba(0, 0, 0, 0.8);
131
+ -moz-box-shadow: inset 0 1px 3px 0 rgba(0, 0, 0, 0.8);
132
+ box-shadow: inset 0 1px 3px 0 rgba(0, 0, 0, 0.8);
133
+ -webkit-backface-visibility: hidden;
134
+ -moz-backface-visibility: hidden;
135
+ -ms-backface-visibility: hidden;
136
+ -o-backface-visibility: hidden;
137
+ backface-visibility: hidden;
138
+ -webkit-transform: translate3d(0, 0, 0);
139
+ -moz-transform: translate(0, 0);
140
+ -ms-transform: translate(0, 0);
141
+ -o-transform: translate(0, 0);
142
+ transform: translate(0, 0);
143
+ }
144
+
145
+ .pp-popover-view-stack > .pp-navigation-bar {
146
+ background: none;
147
+ border-top: none;
148
+ margin-top: 1px;
149
+ left: -6px;
150
+ right: -6px;
151
+ }
152
+
153
+ .pp-popover-view-stack-backdrop {
154
+ position: absolute;
155
+ top: 0;
156
+ right: 0;
157
+ bottom: 0;
158
+ left: 0;
159
+ margin: 0;
160
+ width: auto;
161
+ height: auto;
162
+ z-index: 99998;
163
+ visibility: hidden;
164
+ pointer-events: none;
165
+ }
166
+
167
+ .pp-popover-view-stack-container.pp-active + .pp-popover-view-stack-backdrop {
168
+ visibility: visible;
169
+ pointer-events: auto;
170
+ }
@@ -0,0 +1,278 @@
1
+ ;'use strict';
2
+
3
+ // The base Pushpop object.
4
+ var Pushpop = window.Pushpop || {};
5
+
6
+ /**
7
+ Creates a new PopoverViewStack.
8
+ @param {HTMLDivElement} element The DIV element to initialize as a new PopoverViewStack.
9
+ @constructor
10
+ @extends Pushpop.ViewStack
11
+ */
12
+ Pushpop.PopoverViewStack = function PopoverViewStack(element) {
13
+
14
+ // Call the "super" constructor.
15
+ Pushpop.ViewStack.prototype.constructor.apply(this, arguments);
16
+
17
+ var self = this;
18
+
19
+ var $element = this.$element;
20
+
21
+ // Insert the backdrop element after the popover view stack element.
22
+ var $backdrop = $('<div class="pp-popover-view-stack-backdrop"/>').insertAfter($element);
23
+
24
+ // Wrap the popover view stack element in a container.
25
+ var popoverStyle = $element.data('popoverStyle');
26
+ var $container = this.$container = $('<div class="pp-popover-view-stack-container' + (popoverStyle ? ' pp-popover-view-stack-container-style-' + popoverStyle : '') + '"/>').insertAfter($element).append($element);
27
+
28
+ // Insert an arrow element in the container.
29
+ var $arrow = this.$arrow = $('<div class="pp-popover-view-stack-arrow pp-popover-view-stack-arrow-top"/>').appendTo($container);
30
+
31
+ // Make the popover view stack visible if it is initialized with the .pp-active CSS class.
32
+ this.setHidden(!$element.hasClass('pp-active'));
33
+ $element.removeClass('pp-active');
34
+
35
+ // Dismiss the popover view stack if the backdrop element is tapped/clicked.
36
+ $backdrop.bind(!!('ontouchstart' in window) ? 'touchstart' : 'mousedown', function(evt) {
37
+ self.dismiss();
38
+ });
39
+ };
40
+
41
+ Pushpop.PopoverViewStack.POPOVER_CONTAINER_MARGIN = 10;
42
+
43
+ // Create the prototype for the Pushpop.PopoverViewStack as a "sub-class" of Pushpop.ViewStack.
44
+ Pushpop.PopoverViewStack.prototype = new Pushpop.ViewStack();
45
+ Pushpop.PopoverViewStack.prototype.constructor = Pushpop.PopoverViewStack;
46
+
47
+ Pushpop.PopoverViewStack.prototype.$container = null;
48
+ Pushpop.PopoverViewStack.prototype.$arrow = null;
49
+
50
+ Pushpop.PopoverViewStack.prototype._hidden = true;
51
+
52
+ /**
53
+ Returns a flag indicating if this popover view stack is hidden.
54
+ @type Boolean
55
+ */
56
+ Pushpop.PopoverViewStack.prototype.getHidden = function() { return this._hidden; };
57
+
58
+ /**
59
+ Sets a flag indicating if this popover view stack should be hidden.
60
+ @param {Boolean} hidden A flag indicating if this popover view stack should be hidden.
61
+ */
62
+ Pushpop.PopoverViewStack.prototype.setHidden = function(hidden) { if (hidden) this.dismiss(); else this.present(); };
63
+
64
+ Pushpop.PopoverViewStack.prototype._targetElement = null;
65
+
66
+ /**
67
+ Returns the current target element for this popover view stack.
68
+ @type HTMLElement
69
+ */
70
+ Pushpop.PopoverViewStack.prototype.getTargetElement = function() { return this._targetElement; };
71
+
72
+ /**
73
+ Sets the current target element for this popover view stack.
74
+ @param {HTMLElement} targetElement The target element this popover view stack should point to.
75
+ */
76
+ Pushpop.PopoverViewStack.prototype.setTargetElement = function(targetElement) {
77
+ this._targetElement = targetElement;
78
+
79
+ var $targetElement = $(targetElement);
80
+ var $window = $(window);
81
+ var $container = this.$container;
82
+ var $arrow = this.$arrow;
83
+
84
+ var targetSize = {
85
+ width: $targetElement.outerWidth(),
86
+ height: $targetElement.outerHeight()
87
+ };
88
+ var windowSize = {
89
+ width: $window.width(),
90
+ height: $window.height()
91
+ };
92
+ var containerOuterSize = {
93
+ width: $container.outerWidth(),
94
+ height: $container.outerHeight()
95
+ };
96
+ var containerInnerSize = {
97
+ width: $container.width(),
98
+ height: $container.height()
99
+ };
100
+ var arrowSize = {
101
+ width: $arrow.width(),
102
+ height: $arrow.height()
103
+ };
104
+
105
+ var targetPosition = $targetElement.offset();
106
+ targetPosition = {
107
+ x: targetPosition.left + (targetSize.width / 2),
108
+ y: targetPosition.top + targetSize.height
109
+ };
110
+
111
+ var containerPosition = {
112
+ x: targetPosition.x - (containerOuterSize.width / 2) - Pushpop.PopoverViewStack.POPOVER_CONTAINER_MARGIN,
113
+ y: targetPosition.y
114
+ };
115
+
116
+ var minimumContainerPosition = {
117
+ x: -Pushpop.PopoverViewStack.POPOVER_CONTAINER_MARGIN,
118
+ y: -Pushpop.PopoverViewStack.POPOVER_CONTAINER_MARGIN
119
+ };
120
+
121
+ var maximumContainerPosition = {
122
+ x: windowSize.width - containerOuterSize.width - Pushpop.PopoverViewStack.POPOVER_CONTAINER_MARGIN,
123
+ y: windowSize.height - containerOuterSize.height - Pushpop.PopoverViewStack.POPOVER_CONTAINER_MARGIN
124
+ };
125
+
126
+ var adjustedContainerPosition = {
127
+ x: Math.min(Math.max(containerPosition.x, minimumContainerPosition.x), maximumContainerPosition.x),
128
+ y: containerPosition.y
129
+ };
130
+
131
+ var adjustmentOffset = {
132
+ x: containerPosition.x - adjustedContainerPosition.x,
133
+ y: containerPosition.y - adjustedContainerPosition.y
134
+ };
135
+
136
+ var arrowPosition = {
137
+ x: (containerInnerSize.width / 2) - (arrowSize.width / 2) + adjustmentOffset.x,
138
+ y: 1 - arrowSize.height
139
+ };
140
+
141
+ this.$container.css({ left: adjustedContainerPosition.x + 'px', top: adjustedContainerPosition.y + 'px' });
142
+ this.$arrow.css({ left: arrowPosition.x + 'px', top: arrowPosition.y + 'px' });
143
+ };
144
+
145
+ /**
146
+ Presents this popover view stack and transitions it to a visible state.
147
+ @param {Pushpop.View} [view] Optional view to set as the active view before presenting.
148
+ */
149
+ Pushpop.PopoverViewStack.prototype.present = function(view, targetElement) {
150
+ if (!this.getHidden()) return;
151
+
152
+ this._hidden = false;
153
+
154
+ var oldActiveView = this.getActiveView();
155
+ if (view && oldActiveView !== view) {
156
+ oldActiveView.$element.removeClass('pp-active');
157
+ view.$element.addClass('pp-active');
158
+
159
+ this.views.length = 0;
160
+ this.views.push(view);
161
+ } else {
162
+ this.views.length = 0;
163
+ this.views.push(oldActiveView);
164
+ }
165
+
166
+ var activeView = this.getActiveView();
167
+ activeView.$trigger($.Event(Pushpop.EventType.WillPresentView, {
168
+ view: activeView,
169
+ action: 'popover-present'
170
+ }));
171
+
172
+ if (targetElement) this.setTargetElement(targetElement);
173
+
174
+ this.$container.addClass('pp-active');
175
+
176
+ activeView.$trigger($.Event(Pushpop.EventType.DidPresentView, {
177
+ view: activeView,
178
+ action: 'popover-present'
179
+ }));
180
+ };
181
+
182
+ /**
183
+ Dismisses this popover view stack and transitions it to a hidden state.
184
+ */
185
+ Pushpop.PopoverViewStack.prototype.dismiss = function() {
186
+ if (this.getHidden()) return;
187
+
188
+ this._hidden = true;
189
+
190
+ var activeView = this.getActiveView();
191
+ activeView.$trigger($.Event(Pushpop.EventType.WillDismissView, {
192
+ view: activeView,
193
+ action: 'popover-dismiss'
194
+ }));
195
+
196
+ var self = this;
197
+ window.setTimeout(function() {
198
+ self.$container.removeClass('pp-active');
199
+
200
+ activeView.$trigger($.Event(Pushpop.EventType.DidDismissView, {
201
+ view: activeView,
202
+ action: 'popover-dismiss'
203
+ }));
204
+ }, 50);
205
+ };
206
+
207
+ $(function() {
208
+ var $window = $(window['addEventListener'] ? window : document.body);
209
+
210
+ // Handle actions for buttons set up to automatically present/dismiss popovers.
211
+ $window.delegate('.pp-button.pp-present-popover, .pp-button.pp-dismiss-popover', Pushpop.Button.EventType.DidTriggerAction, function(evt) {
212
+ var button = evt.button;
213
+ var $element = button.$element;
214
+ var href = $element.attr('href');
215
+ var $viewElement, view, viewStack;
216
+
217
+ if ($element.hasClass('pp-present-popover')) {
218
+ $viewElement = $(href);
219
+ if ($viewElement.length === 0) return;
220
+
221
+ view = $viewElement[0].view || new Pushpop.View($viewElement);
222
+
223
+ viewStack = view.getViewStack();
224
+ if (viewStack) viewStack.present(view, button.element);
225
+ }
226
+
227
+ else if ($element.hasClass('pp-dismiss-popover')) {
228
+ if (href === '#') {
229
+ viewStack = button.getViewStack();
230
+ if (viewStack) viewStack.dismiss();
231
+ } else {
232
+ $viewElement = $(href);
233
+ if ($viewElement.length === 0) return;
234
+
235
+ view = $viewElement[0].view || new Pushpop.View($viewElement);
236
+
237
+ viewStack = view.getViewStack();
238
+ if (viewStack) viewStack.dismiss();
239
+ }
240
+ }
241
+ });
242
+
243
+ // Handle clicks for anchor links set up to automatically present/dismiss popovers.
244
+ $window.delegate('a.pp-present-popover, a.pp-dismiss-popover', 'click', function(evt) {
245
+ var $element = $(this);
246
+ if ($element.hasClass('pp-button')) return;
247
+
248
+ evt.preventDefault();
249
+
250
+ var href = $element.attr('href');
251
+ var $viewElement, view, viewStack;
252
+
253
+ if ($element.hasClass('pp-present-popover')) {
254
+ $viewElement = $(href);
255
+ if ($viewElement.length === 0) return;
256
+
257
+ view = $viewElement[0].view || new Pushpop.View($viewElement);
258
+
259
+ viewStack = view.getViewStack();
260
+ if (viewStack) viewStack.present(view, this);
261
+ }
262
+
263
+ else if ($element.hasClass('pp-dismiss-popover')) {
264
+ if (href === '#') {
265
+ viewStack = Pushpop.getViewStackForElement($element);
266
+ if (viewStack) viewStack.dismiss();
267
+ } else {
268
+ $viewElement = $(href);
269
+ if ($viewElement.length === 0) return;
270
+
271
+ view = $viewElement[0].view || new Pushpop.View($viewElement);
272
+
273
+ viewStack = view.getViewStack();
274
+ if (viewStack) viewStack.dismiss();
275
+ }
276
+ }
277
+ });
278
+ });
@@ -0,0 +1,38 @@
1
+ .pp-split-view {
2
+ display: none;
3
+ position: absolute;
4
+ width: auto;
5
+ height: auto;
6
+ top: 0;
7
+ right: 0;
8
+ bottom: 0;
9
+ left: 0;
10
+ }
11
+
12
+ .pp-split-view > .pp-split-view-stack-master {
13
+ border-right: 1px solid #000;
14
+ position: absolute;
15
+ top: 0;
16
+ left: 0;
17
+ width: 320px;
18
+ height: 100%;
19
+ -webkit-perspective: none;
20
+ -moz-perspective: none;
21
+ -ms-perspective: none;
22
+ -o-perspective: none;
23
+ perspective: none;
24
+ }
25
+
26
+ .pp-split-view > .pp-split-view-stack-detail {
27
+ position: absolute;
28
+ top: 0;
29
+ right: 0;
30
+ left: 321px;
31
+ width: auto;
32
+ height: 100%;
33
+ -webkit-perspective: none;
34
+ -moz-perspective: none;
35
+ -ms-perspective: none;
36
+ -o-perspective: none;
37
+ perspective: none;
38
+ }