pushpop-rails 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +42 -0
- data/Rakefile +29 -0
- data/lib/generators/pushpop/install/install_generator.rb +17 -0
- data/lib/pushpop-rails.rb +4 -0
- data/lib/pushpop/rails.rb +8 -0
- data/lib/pushpop/rails/engine.rb +7 -0
- data/lib/pushpop/rails/version.rb +5 -0
- data/vendor/assets/Pushpop/background.png +0 -0
- data/vendor/assets/Pushpop/background@2x.png +0 -0
- data/vendor/assets/Pushpop/externals/scrollkit/background.png +0 -0
- data/vendor/assets/Pushpop/externals/scrollkit/scrollkit.css +202 -0
- data/vendor/assets/Pushpop/externals/scrollkit/scrollkit.js +924 -0
- data/vendor/assets/Pushpop/font/pushpop-glyphs-webfont.eot +0 -0
- data/vendor/assets/Pushpop/font/pushpop-glyphs-webfont.svg +57 -0
- data/vendor/assets/Pushpop/font/pushpop-glyphs-webfont.ttf +0 -0
- data/vendor/assets/Pushpop/font/pushpop-glyphs-webfont.woff +0 -0
- data/vendor/assets/Pushpop/pushpop-modal-view-stack/pushpop-modal-view-stack.css +148 -0
- data/vendor/assets/Pushpop/pushpop-modal-view-stack/pushpop-modal-view-stack.js +306 -0
- data/vendor/assets/Pushpop/pushpop-popover-view-stack/pushpop-popover-view-stack.css +170 -0
- data/vendor/assets/Pushpop/pushpop-popover-view-stack/pushpop-popover-view-stack.js +278 -0
- data/vendor/assets/Pushpop/pushpop-split-view/pushpop-split-view.css +38 -0
- data/vendor/assets/Pushpop/pushpop-split-view/pushpop-split-view.js +33 -0
- data/vendor/assets/Pushpop/pushpop-tab-view/pushpop-tab-view.css +130 -0
- data/vendor/assets/Pushpop/pushpop-tab-view/pushpop-tab-view.js +298 -0
- data/vendor/assets/Pushpop/pushpop-table-view/pushpop-table-view.css +1273 -0
- data/vendor/assets/Pushpop/pushpop-table-view/pushpop-table-view.js +2275 -0
- data/vendor/assets/Pushpop/pushpop.css +2243 -0
- data/vendor/assets/Pushpop/pushpop.js +1554 -0
- data/vendor/assets/javascripts/pushpop_rails.js +7 -0
- data/vendor/assets/stylesheets/pushpop_rails.css +9 -0
- metadata +92 -0
Binary file
|
@@ -0,0 +1,57 @@
|
|
1
|
+
<?xml version="1.0" standalone="no"?>
|
2
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg">
|
4
|
+
<metadata></metadata>
|
5
|
+
<defs>
|
6
|
+
<font id="pushpopglyphsregular" horiz-adv-x="1624" >
|
7
|
+
<font-face units-per-em="2048" ascent="1536" descent="-512" />
|
8
|
+
<missing-glyph horiz-adv-x="500" />
|
9
|
+
<glyph horiz-adv-x="2048" />
|
10
|
+
<glyph horiz-adv-x="2048" />
|
11
|
+
<glyph unicode="
" horiz-adv-x="2048" />
|
12
|
+
<glyph unicode=" " d="M0 0v1536h1624v-1536h-1624z" />
|
13
|
+
<glyph unicode=" " d="M0 0v1536h1624v-1536h-1624z" />
|
14
|
+
<glyph unicode=" " horiz-adv-x="812" />
|
15
|
+
<glyph unicode=" " />
|
16
|
+
<glyph unicode=" " horiz-adv-x="812" />
|
17
|
+
<glyph unicode=" " />
|
18
|
+
<glyph unicode=" " horiz-adv-x="541" />
|
19
|
+
<glyph unicode=" " horiz-adv-x="406" />
|
20
|
+
<glyph unicode=" " horiz-adv-x="270" />
|
21
|
+
<glyph unicode=" " horiz-adv-x="270" />
|
22
|
+
<glyph unicode=" " horiz-adv-x="203" />
|
23
|
+
<glyph unicode=" " horiz-adv-x="324" />
|
24
|
+
<glyph unicode=" " horiz-adv-x="90" />
|
25
|
+
<glyph unicode=" " horiz-adv-x="324" />
|
26
|
+
<glyph unicode=" " horiz-adv-x="406" />
|
27
|
+
<glyph unicode="" horiz-adv-x="1024" d="M0 0z" />
|
28
|
+
<glyph unicode="" horiz-adv-x="960" d="M0 193l578 575l-578 575l193 193l768 -768l-768 -768z" />
|
29
|
+
<glyph unicode="" d="M0 633v366h1624v-366h-1624z" />
|
30
|
+
<glyph unicode="" d="M0 612v400h612v612h400v-612h612v-400h-612v-612h-400v612h-612z" />
|
31
|
+
<glyph unicode="" horiz-adv-x="1454" d="M59.5 643q-0.5 39 15 70.5t41 53t56.5 26t63.5 -10t59.5 -55.5l215 -299q10 -8 19.5 -9t17.5 1t16 8l567 946q20 41 51 59.5t65 19.5t63.5 -14.5t47 -44t17.5 -68.5t-26 -87l-676 -1133q-20 -31 -49 -49t-63 -21t-67.5 13.5t-64.5 56.5l-348 459q-20 39 -20.5 78z" />
|
32
|
+
<glyph unicode="" horiz-adv-x="1931" d="M0 0v1202h602l-186 -184h-250v-852h1288v188l166 166v-520h-1620zM416 436q0 141 36.5 248t96 187.5t136.5 136t157 92.5q186 86 424 102v334l665 -541v-20l-665 -539v332q-125 0 -227.5 -14.5t-185.5 -37t-148.5 -52t-112.5 -62.5q-115 -72 -176 -166z" />
|
33
|
+
<glyph unicode="" horiz-adv-x="1703" d="M0 561v768q0 39 18.5 76t47 66.5t66.5 47t77 17.5h852q45 0 84 -17.5t65.5 -47t42 -66.5t15.5 -76v-43h-168q0 16 -7.5 31.5t-18.5 27t-25.5 18.5t-30.5 7h-768q-16 0 -30.5 -7t-27 -18.5t-18.5 -26.5t-6 -32v-684q0 -14 6 -29.5t18.5 -28t26.5 -19.5t31 -7h82v-166h-123 q-39 0 -77 15.5t-66.5 42t-47 65.5t-18.5 86zM416 227v750q0 45 17.5 87t49 72.5t72.5 49t88 18.5h850q41 0 78 -18.5t66.5 -49t48 -72.5t18.5 -87v-750q0 -47 -18.5 -88t-48 -71.5t-66.5 -49t-78 -18.5h-850q-47 0 -88 18.5t-72.5 49t-49 71.5t-17.5 88zM602 268 q0 -23 7 -41t18.5 -31.5t27 -20.5t29.5 -7h770q14 0 28.5 7t27 20.5t19.5 32t7 40.5v668q0 23 -7 38t-19.5 25.5t-27 14.5t-28.5 4h-770q-31 0 -56.5 -18.5t-25.5 -63.5v-668z" />
|
34
|
+
<glyph unicode="" horiz-adv-x="1703" d="M0 561v768q0 39 18.5 76t47 66.5t66.5 47t77 17.5h852q45 0 84 -17.5t65.5 -47t42 -66.5t15.5 -76v-43h-168q0 16 -7.5 31.5t-18.5 27t-25.5 18.5t-30.5 7h-768q-16 0 -30.5 -7t-27 -18.5t-18.5 -26.5t-6 -32v-684q0 -14 6 -29.5t18.5 -28t26.5 -19.5t31 -7h82v-166h-123 q-39 0 -77 15.5t-66.5 42t-47 65.5t-18.5 86zM416 227v750q0 45 17.5 87t49 72.5t72.5 49t88 18.5h850q41 0 78 -18.5t66.5 -49t48 -72.5t18.5 -87v-750q0 -47 -18.5 -88t-48 -71.5t-66.5 -49t-78 -18.5h-850q-47 0 -88 18.5t-72.5 49t-49 71.5t-17.5 88z" />
|
35
|
+
<glyph unicode="" horiz-adv-x="1536" d="M2 768q0 109 26.5 207t76 184t119 154.5t154.5 119t183 77t207 26.5q102 0 199.5 -26.5t183.5 -77t155.5 -119t121 -154.5t80 -184t28.5 -207q0 -102 -28.5 -199.5t-80 -182.5t-121 -155.5t-155.5 -122t-183.5 -79t-199.5 -27.5q-109 0 -207 27.5t-183 79t-154.5 122 t-119 155.5t-76 182.5t-26.5 199.5zM386 491.5q-1 -14.5 3 -28.5t11.5 -27.5t15.5 -19.5q6 -8 19.5 -15.5t27.5 -11.5t28.5 -3t20.5 9l256 256l256 -256q6 -8 20.5 -9t28.5 3t27.5 11.5t21.5 15.5q6 6 13.5 19.5t11.5 27.5t3 28.5t-7 20.5l-256 256l256 256q6 6 7 20.5 t-3 28.5t-11.5 27.5t-13.5 21.5q-8 6 -21.5 13.5t-27.5 11.5t-28.5 3t-20.5 -7l-256 -256l-256 256q-6 6 -20.5 7t-28.5 -3t-27.5 -11.5t-19.5 -13.5q-8 -8 -15.5 -21.5t-11.5 -27.5t-3 -28.5t9 -20.5l256 -256l-256 -256q-8 -6 -9 -20.5z" />
|
36
|
+
<glyph unicode="" horiz-adv-x="1433" d="M2 920q0 135 46 247.5t127 193.5t193.5 127t247.5 46q133 0 245 -46t194 -127t127 -193.5t45 -247.5q0 -115 -38 -221.5t-116 -184.5l359 -358l-154 -154l-358 358q-78 -39 -152 -45t-152 -6q-135 0 -247.5 45t-193.5 127t-127 193.5t-46 245.5zM207 920q0 -76 34.5 -149 t93 -130t131.5 -92t150 -35q76 0 149 35t130 92t92 130t35 149t-35 149.5t-92 132t-130 93t-149 34.5q-78 0 -150.5 -34.5t-131 -93t-93 -132.5t-34.5 -149z" />
|
37
|
+
<glyph unicode="" horiz-adv-x="1331" d="M0 666q0 135 53 255.5t144.5 212t212 144.5t256.5 53h51v205l461 -307l-461 -307v204h-51q-96 0 -180.5 -35.5t-147 -98t-98 -146.5t-35.5 -180t35.5 -180.5t98 -147t146.5 -98t181 -35.5q96 0 180 35.5t146.5 98t98 146.5t35.5 181v51h205v-51q0 -135 -53 -256 t-144.5 -212.5t-212 -144.5t-255.5 -53t-256 53t-212.5 144.5t-144.5 212t-53 256.5z" />
|
38
|
+
<glyph unicode="" horiz-adv-x="1171" d="M0 1098v37q0 111 111 110h108v72q0 41 19.5 81t50 70.5t69.5 49t80 18.5h293q41 0 81 -18.5t70.5 -49t50 -70.5t19.5 -81v-72h109q111 0 110 -110v-37h-73v-916q0 -82 -49.5 -132t-133.5 -50h-659q-84 0 -133 50t-49 132v916h-74zM219 219q0 -29 22.5 -51.5t51.5 -22.5 h586q29 0 51 22.5t22 51.5v879h-733v-879zM293 330l37 -37h35q14 0 27.5 5t23.5 13q12 8 22 19v549q0 29 -22.5 51t-50.5 22h-35q-10 -10 -19 -22q-8 -10 -13 -23.5t-5 -27.5v-549zM365 1245h442v72q0 29 -23.5 51.5t-52.5 22.5h-293q-29 0 -51 -22.5t-22 -51.5v-72z M512 330l37 -37h35q14 0 27.5 5t23.5 13q12 8 22 19v549q0 29 -22.5 51t-50.5 22h-35q-10 -10 -19 -22q-8 -10 -13 -23.5t-5 -27.5v-549zM731 330l39 -37h37q12 0 25.5 5t23.5 13q12 8 23 19v549q0 29 -22.5 51t-49.5 22h-37q-12 -10 -20 -22q-8 -10 -13.5 -23.5t-5.5 -27.5 v-549z" />
|
39
|
+
<glyph unicode="" horiz-adv-x="1482" d="M0 848l1483 688l-688 -1536v848h-795z" />
|
40
|
+
<glyph unicode="" horiz-adv-x="0" d="M0 0v1126q96 76 186 119t173 61.5t158 15.5t136 -17q145 -35 269 -127q123 92 268 127q61 14 135 17t157 -15.5t174 -61.5t187 -119v-1126q-115 86 -216 132t-187 61.5t-159 7.5t-130 -29q-135 -51 -229 -172h-52q-80 121 -204 172q-53 20 -121 28.5t-151 -7t-181 -61.5 t-213 -132zM205 307q133 76 246.5 85t195.5 -9q96 -23 172 -76v717q-63 53 -153 76q-39 8 -87.5 12t-105.5 -3t-124.5 -26.5t-143.5 -58.5v-717zM1024 307q76 53 172 76q82 18 194.5 9t247.5 -85v717q-78 39 -144.5 58.5t-123.5 26.5t-105 3t-87 -12q-90 -23 -154 -76v-717z " />
|
41
|
+
<glyph unicode="" horiz-adv-x="1716" d="M0 0h1716v543h-180v-363h-1356v363h-180v-543zM362 1083h361v453h270v-453h363l-498 -540h-43z" />
|
42
|
+
<glyph unicode="" horiz-adv-x="1716" d="M0 362v812q0 68 30.5 133t82 116.5t117 82t132.5 30.5h994q68 0 132 -30.5t115.5 -82t82 -117t30.5 -132.5v-812q0 -68 -30.5 -133t-82 -116.5t-116 -82t-131.5 -30.5h-994q-68 0 -133 30.5t-116.5 82t-82 117t-30.5 132.5z" />
|
43
|
+
<glyph unicode="" horiz-adv-x="2166" d="M0 272v1264h2167v-1264h-361l-180 179h361v903h-1807v-903h361l-181 -179h-360zM360 0l678 858h45l723 -858h-1446z" />
|
44
|
+
<glyph unicode="" horiz-adv-x="1280" d="M0 0v1536l1280 -768v-43z" />
|
45
|
+
<glyph unicode="" d="M0 0v1536h1624v-1536h-1624z" />
|
46
|
+
<glyph unicode="" horiz-adv-x="1003" d="M0 0v1536h354v-1536h-354zM649 0v1536h355v-1536h-355z" />
|
47
|
+
<glyph unicode="" horiz-adv-x="2164" d="M0 0v1536h281v-1536h-281zM453 733v35l802 768v-1536zM1362 733v35l803 768v-1536z" />
|
48
|
+
<glyph unicode="" horiz-adv-x="2164" d="M0 0v1536l803 -768v-35zM909 0v1536l803 -768v-35zM1884 0v1536h281v-1536h-281z" />
|
49
|
+
<glyph unicode="" horiz-adv-x="1710" d="M0 733v35l803 768v-1536zM907 733v35l803 768v-1536z" />
|
50
|
+
<glyph unicode="" horiz-adv-x="1710" d="M0 0v1536l803 -768v-35zM907 0v1536l803 -768v-35z" />
|
51
|
+
<glyph unicode="" horiz-adv-x="1792" d="M0 213v1110q0 96 58.5 154.5t154.5 58.5h1110q33 0 58.5 -5t25.5 -38l-127 -127h-1024q-33 0 -59.5 -26.5t-26.5 -59.5v-1024q0 -33 26.5 -59.5t59.5 -26.5h1024q33 0 59.5 26.5t26.5 59.5v428l170 170v-641q0 -96 -58.5 -154.5t-154.5 -58.5h-1110q-96 0 -154.5 58.5 t-58.5 154.5zM598 299l129 299l168 -170zM768 641l682 682l172 -172l-684 -682zM1493 1366l86 84q66 66 127 0l43 -43q66 -61 0 -127l-84 -86z" />
|
52
|
+
<glyph unicode="" horiz-adv-x="710" d="M0 436h162v129h387v-129h162l-357 -436h-14zM162 629v131h387v-131h-387zM162 825v129h387v-129h-387zM162 1020v129h387v-129h-387zM162 1212v129h387v-129h-387zM162 1407v129h387v-129h-387z" />
|
53
|
+
<glyph unicode="" d="M0 0v221h49v-172h162v-49h-211zM0 381v291h49v-291h-49zM0 844v293h49v-293h-49zM0 1296v224h211v-52h-162v-172h-49zM268 1008v288h979v-288h-30q-12 31 -21.5 50t-17 33.5t-10.5 24.5t-3 21q-20 23 -42.5 45t-45.5 37q-8 0 -22.5 5t-29.5 11t-28.5 11t-19.5 5h-82v-848 v-100l20 -31q23 -23 44.5 -25.5t35.5 -2.5h31v-23h-547v23h29q27 0 43 3t39 25l33 31v100v848h-80q-47 0 -87 -18.5t-85 -32.5q-16 -47 -38 -90t-44 -102h-21zM371 0v49h301v-49h-301zM371 1468v52h301v-52h-301zM834 0v49h305v-49h-305zM834 1468v52h305v-52h-305zM1298 0 v49h158v172h62v-221h-220zM1298 1468v52h220v-224h-62v172h-158zM1456 381v291h62v-291h-62zM1456 844v293h62v-293h-62z" />
|
54
|
+
<glyph unicode="" d="M0 766q0 160 60.5 299t164 243.5t242.5 165t299 60.5t299 -60.5t243.5 -165t165 -243.5t60.5 -299t-60.5 -299t-165 -242.5t-243.5 -164t-299 -60.5t-299 60.5t-242.5 164t-164 242.5t-60.5 299z" />
|
55
|
+
<glyph unicode="" d="M0 0v1536h1624v-1536h-1624z" />
|
56
|
+
</font>
|
57
|
+
</defs></svg>
|
Binary file
|
Binary file
|
@@ -0,0 +1,148 @@
|
|
1
|
+
.pp-modal-view-stack {
|
2
|
+
background: #333 url('../background.png');
|
3
|
+
background-size: 320px 460px;
|
4
|
+
position: absolute;
|
5
|
+
overflow: hidden;
|
6
|
+
padding: 0;
|
7
|
+
z-index: 99999;
|
8
|
+
visibility: hidden;
|
9
|
+
opacity: 0;
|
10
|
+
pointer-events: none;
|
11
|
+
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
12
|
+
font-size: 13px;
|
13
|
+
line-height: 1.25em;
|
14
|
+
-webkit-border-radius: 6px;
|
15
|
+
-moz-border-radius: 6px;
|
16
|
+
border-radius: 6px;
|
17
|
+
-webkit-box-shadow: 0 4px 20px 2px rgba(0, 0, 0, 0.6);
|
18
|
+
-moz-box-shadow: 0 4px 20px 2px rgba(0, 0, 0, 0.6);
|
19
|
+
box-shadow: 0 4px 20px 2px rgba(0, 0, 0, 0.6);
|
20
|
+
-webkit-backface-visibility: hidden;
|
21
|
+
-moz-backface-visibility: hidden;
|
22
|
+
-ms-backface-visibility: hidden;
|
23
|
+
-o-backface-visibility: hidden;
|
24
|
+
backface-visibility: hidden;
|
25
|
+
-webkit-text-size-adjust: 100%;
|
26
|
+
-moz-text-size-adjust: 100%;
|
27
|
+
-ms-text-size-adjust: 100%;
|
28
|
+
-o-text-size-adjust: 100%;
|
29
|
+
text-size-adjust: 100%;
|
30
|
+
-webkit-transform: translate3d(0, 0, 0);
|
31
|
+
-moz-transform: translate(0, 0);
|
32
|
+
-ms-transform: translate(0, 0);
|
33
|
+
-o-transform: translate(0, 0);
|
34
|
+
transform: translate(0, 0);
|
35
|
+
}
|
36
|
+
|
37
|
+
@media only screen and (-webkit-min-device-pixel-ratio: 2) {
|
38
|
+
.pp-modal-view-stack {
|
39
|
+
background: #333 url('../background@2x.png');
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
.pp-modal-view-stack.pp-active {
|
44
|
+
pointer-events: auto;
|
45
|
+
}
|
46
|
+
|
47
|
+
.pp-modal-presentation-style-full-screen {
|
48
|
+
top: 0;
|
49
|
+
right: 0;
|
50
|
+
bottom: 0;
|
51
|
+
left: 0;
|
52
|
+
margin: 0;
|
53
|
+
width: auto;
|
54
|
+
height: auto;
|
55
|
+
}
|
56
|
+
|
57
|
+
.pp-modal-presentation-style-page-sheet {
|
58
|
+
top: 0;
|
59
|
+
bottom: 0;
|
60
|
+
left: 50%;
|
61
|
+
margin: 0 0 0 -384px;
|
62
|
+
width: 768px;
|
63
|
+
height: auto;
|
64
|
+
}
|
65
|
+
|
66
|
+
.pp-modal-presentation-style-form-sheet {
|
67
|
+
top: 64px;
|
68
|
+
bottom: auto;
|
69
|
+
left: 50%;
|
70
|
+
margin: 0 0 0 -270px;
|
71
|
+
width: 540px;
|
72
|
+
height: 620px;
|
73
|
+
}
|
74
|
+
|
75
|
+
/* On screens smaller than 768px (e.g.: phones) all presentation styles should be full screen. */
|
76
|
+
@media (max-width: 768px) {
|
77
|
+
.pp-modal-presentation-style-full-screen,
|
78
|
+
.pp-modal-presentation-style-page-sheet,
|
79
|
+
.pp-modal-presentation-style-form-sheet {
|
80
|
+
top: 0;
|
81
|
+
right: 0;
|
82
|
+
bottom: 0;
|
83
|
+
left: 0;
|
84
|
+
margin: 0;
|
85
|
+
width: auto;
|
86
|
+
height: auto;
|
87
|
+
}
|
88
|
+
}
|
89
|
+
|
90
|
+
.pp-modal-transition-style-cover-vertical {
|
91
|
+
visibility: hidden;
|
92
|
+
opacity: 0;
|
93
|
+
-webkit-transform: translate3d(0, 100%, 0);
|
94
|
+
-moz-transform: translate(0, 100%);
|
95
|
+
-ms-transform: translate(0, 100%);
|
96
|
+
-o-transform: translate(0, 100%);
|
97
|
+
transform: translate(0, 100%);
|
98
|
+
-webkit-transition: visibility 0s linear 0.4s, opacity 0.15s ease 0.15s, -webkit-transform 0.3s ease 0s;
|
99
|
+
-moz-transition: visibility 0s linear 0.4s, opacity 0.15s ease 0.15s, -moz-transform 0.3s ease 0s;
|
100
|
+
-ms-transition: visibility 0s linear 0.4s, opacity 0.15s ease 0.15s, -ms-transform 0.3s ease 0s;
|
101
|
+
-o-transition: visibility 0s linear 0.4s, opacity 0.15s ease 0.15s, -o-transform 0.3s ease 0s;
|
102
|
+
transition: visibility 0s linear 0.4s, opacity 0.15s ease 0.15s, transform 0.3s ease 0s;
|
103
|
+
}
|
104
|
+
|
105
|
+
.pp-modal-transition-style-cover-vertical.pp-active {
|
106
|
+
visibility: visible;
|
107
|
+
opacity: 1;
|
108
|
+
-webkit-transform: translate3d(0, 0, 0);
|
109
|
+
-moz-transform: translate(0, 0);
|
110
|
+
-ms-transform: translate(0, 0);
|
111
|
+
-o-transform: translate(0, 0);
|
112
|
+
transform: translate(0, 0);
|
113
|
+
-webkit-transition-delay: 0s;
|
114
|
+
-moz-transition-delay: 0s;
|
115
|
+
-ms-transition-delay: 0s;
|
116
|
+
-o-transition-delay: 0s;
|
117
|
+
transition-delay: 0s;
|
118
|
+
}
|
119
|
+
|
120
|
+
.pp-modal-view-stack-backdrop {
|
121
|
+
background: #000;
|
122
|
+
position: absolute;
|
123
|
+
top: 0;
|
124
|
+
right: 0;
|
125
|
+
bottom: 0;
|
126
|
+
left: 0;
|
127
|
+
margin: 0;
|
128
|
+
width: auto;
|
129
|
+
height: auto;
|
130
|
+
z-index: 99998;
|
131
|
+
visibility: hidden;
|
132
|
+
opacity: 0;
|
133
|
+
-webkit-transition: visibility 0s linear 0.3s, opacity 0.3s linear 0s;
|
134
|
+
-moz-transition: visibility 0s linear 0.3s, opacity 0.3s linear 0s;
|
135
|
+
-ms-transition: visibility 0s linear 0.3s, opacity 0.3s linear 0s;
|
136
|
+
-o-transition: visibility 0s linear 0.3s, opacity 0.3s linear 0s;
|
137
|
+
transition: visibility 0s linear 0.3s, opacity 0.3s linear 0s;
|
138
|
+
}
|
139
|
+
|
140
|
+
.pp-modal-view-stack.pp-active + .pp-modal-view-stack-backdrop {
|
141
|
+
visibility: visible;
|
142
|
+
opacity: 0.5;
|
143
|
+
-webkit-transition-delay: 0s;
|
144
|
+
-moz-transition-delay: 0s;
|
145
|
+
-ms-transition-delay: 0s;
|
146
|
+
-o-transition-delay: 0s;
|
147
|
+
transition-delay: 0s;
|
148
|
+
}
|
@@ -0,0 +1,306 @@
|
|
1
|
+
;'use strict';
|
2
|
+
|
3
|
+
// The base Pushpop object.
|
4
|
+
var Pushpop = window['Pushpop'] || {};
|
5
|
+
|
6
|
+
/**
|
7
|
+
Creates a new ModalViewStack.
|
8
|
+
@param {HTMLDivElement} element The DIV element to initialize as a new ModalViewStack.
|
9
|
+
@constructor
|
10
|
+
@extends Pushpop.ViewStack
|
11
|
+
*/
|
12
|
+
Pushpop.ModalViewStack = function ModalViewStack(element) {
|
13
|
+
|
14
|
+
// Call the "super" constructor.
|
15
|
+
Pushpop.ViewStack.prototype.constructor.apply(this, arguments);
|
16
|
+
|
17
|
+
var $element = this.$element;
|
18
|
+
|
19
|
+
// Insert the backdrop element after the modal view stack element.
|
20
|
+
var $backdrop = $('<div class="pp-modal-view-stack-backdrop"/>').insertAfter($element);
|
21
|
+
|
22
|
+
// Initialize the modal view stack's presentation style based on the element's CSS classes.
|
23
|
+
var presentationStyles = Pushpop.ModalViewStack.PresentationStyleType, didInitPresentationStyle = false;
|
24
|
+
for (var presentationStyle in presentationStyles) {
|
25
|
+
if ($element.hasClass('pp-modal-presentation-style-' + presentationStyles[presentationStyle])) {
|
26
|
+
this.setPresentationStyle(presentationStyles[presentationStyle]);
|
27
|
+
didInitPresentationStyle = true;
|
28
|
+
break;
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
// Set the modal view stack's presentation style to the default if one was not specified.
|
33
|
+
if (!didInitPresentationStyle) this.setPresentationStyle(this.constructor.prototype._presentationStyle);
|
34
|
+
|
35
|
+
// Initialize the modal view stack's transition style based on the element's CSS classes.
|
36
|
+
var transitionStyles = Pushpop.ModalViewStack.TransitionStyleType, didInitTransitionStyle = false;
|
37
|
+
for (var transitionStyle in transitionStyles) {
|
38
|
+
if ($element.hasClass('pp-modal-transition-style-' + transitionStyles[transitionStyle])) {
|
39
|
+
this.setTransitionStyle(transitionStyles[transitionStyle]);
|
40
|
+
didInitTransitionStyle = true;
|
41
|
+
break;
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
// Set the modal view stack's transition style to the default if one was not specified.
|
46
|
+
if (!didInitTransitionStyle) this.setTransitionStyle(this.constructor.prototype._transitionStyle);
|
47
|
+
|
48
|
+
// Make the modal view stack visible if it is initialized with the .pp-active CSS class.
|
49
|
+
this.setHidden(!$element.hasClass('pp-active'));
|
50
|
+
};
|
51
|
+
|
52
|
+
/**
|
53
|
+
Presentation styles available when presenting a Pushpop.ModalViewStack.
|
54
|
+
*/
|
55
|
+
Pushpop.ModalViewStack.PresentationStyleType = {
|
56
|
+
FullScreen: 'full-screen', // 100% x 100%
|
57
|
+
PageSheet: 'page-sheet', // 768px x 100%
|
58
|
+
FormSheet: 'form-sheet' // 540px x 620px
|
59
|
+
};
|
60
|
+
|
61
|
+
/**
|
62
|
+
Transition styles available when presenting a Pushpop.ModalViewStack.
|
63
|
+
*/
|
64
|
+
Pushpop.ModalViewStack.TransitionStyleType = {
|
65
|
+
CoverVertical: 'cover-vertical'
|
66
|
+
};
|
67
|
+
|
68
|
+
// Create the prototype for the Pushpop.ModalViewStack as a "sub-class" of Pushpop.ViewStack.
|
69
|
+
Pushpop.ModalViewStack.prototype = new Pushpop.ViewStack();
|
70
|
+
Pushpop.ModalViewStack.prototype.constructor = Pushpop.ModalViewStack;
|
71
|
+
|
72
|
+
/**
|
73
|
+
Pushes the specified view to the view stack using the optionally specified transition. If a
|
74
|
+
transition is not specified, the default will be used. A callback may optionally be provided
|
75
|
+
to be called after the transition completes. In the case of a Pushpop.ModalViewStack, the
|
76
|
+
modal view stack will first be presented if it is currently hidden.
|
77
|
+
@description This method overrides the default implementation of Pushpop.ViewStack to present
|
78
|
+
the modal view stack if it is hidden. After presenting the modal view stack (if needed), the
|
79
|
+
"super" implementation of this method is then executed.
|
80
|
+
@param {Pushpop.View} view The view to be pushed to the view stack.
|
81
|
+
@param {String|Function} [transitionOrCallback] Either the name of the transition to use when
|
82
|
+
pushing the view or a callback function to be executed upon completion of the default transition.
|
83
|
+
If this parameter is omitted, the default transition is used.
|
84
|
+
@param {Function} [callback] A callback function to be executed upon completion of the specified
|
85
|
+
transition.
|
86
|
+
*/
|
87
|
+
Pushpop.ModalViewStack.prototype.push = function(view, transitionOrCallback, callback) {
|
88
|
+
if (this.getHidden()) this.present();
|
89
|
+
|
90
|
+
// Call the "super" method.
|
91
|
+
Pushpop.ViewStack.prototype.push.apply(this, arguments);
|
92
|
+
};
|
93
|
+
|
94
|
+
/**
|
95
|
+
Pops the current or specified view off the view stack using the optionally specified transition.
|
96
|
+
If a view is not specified, the current view will be popped (unless it is the root view). If a
|
97
|
+
transition is not specified, the default will be used. A callback may optionally be provided to
|
98
|
+
be called after the transition completes. In the case of a Pushpop.ModalViewStack, the modal
|
99
|
+
view stack will be dismissed if this method is called when there is only one remaining view on
|
100
|
+
the view stack (e.g.: the "root" view) and no view is specified.
|
101
|
+
@description This method overrides the default implementation of Pushpop.ViewStack to dismiss
|
102
|
+
the modal view stack if there is only one remaining view on the view stack and no view is
|
103
|
+
specified. After dismissing the modal view stack (if needed), the "super" implementation of this
|
104
|
+
method is then executed.
|
105
|
+
@param {Pushpop.View|String} viewOrTransition Either the view to be popped to on the view stack
|
106
|
+
or the name of the transition to use when popping the view. If this parameter is omitted or if
|
107
|
+
it specifies a transition name, the current view will be assumed to be popped.
|
108
|
+
@param {String|Function} [transitionOrCallback] Either the name of the transition to use when
|
109
|
+
popping the view or a callback function to be executed upon completion of the default transition.
|
110
|
+
If this parameter is omitted, the default transition is used.
|
111
|
+
@param {Function} [callback] A callback function to be executed upon completion of the specified
|
112
|
+
transition.
|
113
|
+
*/
|
114
|
+
Pushpop.ModalViewStack.prototype.pop = function(viewOrTransition, transitionOrCallback, callback) {
|
115
|
+
if (this.views.length <= 1) this.dismiss();
|
116
|
+
|
117
|
+
// Call the "super" method.
|
118
|
+
Pushpop.ViewStack.prototype.pop.apply(this, arguments);
|
119
|
+
};
|
120
|
+
|
121
|
+
Pushpop.ModalViewStack.prototype._hidden = true;
|
122
|
+
|
123
|
+
/**
|
124
|
+
Returns a flag indicating if this modal view stack is hidden.
|
125
|
+
@type Boolean
|
126
|
+
*/
|
127
|
+
Pushpop.ModalViewStack.prototype.getHidden = function() { return this._hidden; };
|
128
|
+
|
129
|
+
/**
|
130
|
+
Sets a flag indicating if this modal view stack should be hidden.
|
131
|
+
@param {Boolean} hidden A flag indicating if this modal view stack should be hidden.
|
132
|
+
*/
|
133
|
+
Pushpop.ModalViewStack.prototype.setHidden = function(hidden) { if (hidden) this.dismiss(); else this.present(); };
|
134
|
+
|
135
|
+
/**
|
136
|
+
Presents this modal view stack and transitions it to a visible state.
|
137
|
+
@param {Pushpop.View} [view] Optional view to set as the active view before presenting.
|
138
|
+
*/
|
139
|
+
Pushpop.ModalViewStack.prototype.present = function(view) {
|
140
|
+
if (!this.getHidden()) return;
|
141
|
+
|
142
|
+
this._hidden = false;
|
143
|
+
|
144
|
+
var oldActiveView = this.getActiveView();
|
145
|
+
if (view && oldActiveView !== view) {
|
146
|
+
oldActiveView.$element.removeClass('pp-active');
|
147
|
+
view.$element.addClass('pp-active');
|
148
|
+
|
149
|
+
this.views.length = 0;
|
150
|
+
this.views.push(view);
|
151
|
+
} else {
|
152
|
+
this.views.length = 0;
|
153
|
+
this.views.push(oldActiveView);
|
154
|
+
}
|
155
|
+
|
156
|
+
var activeView = this.getActiveView();
|
157
|
+
activeView.$trigger($.Event(Pushpop.EventType.WillPresentView, {
|
158
|
+
view: activeView,
|
159
|
+
action: 'modal-present'
|
160
|
+
}));
|
161
|
+
|
162
|
+
this.$element.addClass('pp-active');
|
163
|
+
|
164
|
+
activeView.$trigger($.Event(Pushpop.EventType.DidPresentView, {
|
165
|
+
view: activeView,
|
166
|
+
action: 'modal-present'
|
167
|
+
}));
|
168
|
+
};
|
169
|
+
|
170
|
+
/**
|
171
|
+
Dismisses this modal view stack and transitions it to a hidden state.
|
172
|
+
*/
|
173
|
+
Pushpop.ModalViewStack.prototype.dismiss = function() {
|
174
|
+
if (this.getHidden()) return;
|
175
|
+
|
176
|
+
this._hidden = true;
|
177
|
+
|
178
|
+
var activeView = this.getActiveView();
|
179
|
+
activeView.$trigger($.Event(Pushpop.EventType.WillDismissView, {
|
180
|
+
view: activeView,
|
181
|
+
action: 'modal-dismiss'
|
182
|
+
}));
|
183
|
+
|
184
|
+
var self = this;
|
185
|
+
window.setTimeout(function() {
|
186
|
+
self.$element.removeClass('pp-active');
|
187
|
+
|
188
|
+
activeView.$trigger($.Event(Pushpop.EventType.DidDismissView, {
|
189
|
+
view: activeView,
|
190
|
+
action: 'modal-dismiss'
|
191
|
+
}));
|
192
|
+
}, 50);
|
193
|
+
};
|
194
|
+
|
195
|
+
Pushpop.ModalViewStack.prototype._presentationStyle = Pushpop.ModalViewStack.PresentationStyleType.FormSheet;
|
196
|
+
|
197
|
+
/**
|
198
|
+
Returns the presentation style of this modal view stack.
|
199
|
+
@type String
|
200
|
+
*/
|
201
|
+
Pushpop.ModalViewStack.prototype.getPresentationStyle = function() { return this._presentationStyle; };
|
202
|
+
|
203
|
+
/**
|
204
|
+
Sets the presentation style to use when presenting this modal view stack.
|
205
|
+
@param {String} presentationStyle The presentation style for this modal view stack.
|
206
|
+
*/
|
207
|
+
Pushpop.ModalViewStack.prototype.setPresentationStyle = function(presentationStyle) {
|
208
|
+
this._presentationStyle = presentationStyle;
|
209
|
+
|
210
|
+
var $element = this.$element, presentationStyles = Pushpop.ModalViewStack.PresentationStyleType;
|
211
|
+
for (var p in presentationStyles) $element.removeClass('pp-modal-presentation-style-' + presentationStyles[p]);
|
212
|
+
$element.addClass('pp-modal-presentation-style-' + presentationStyle);
|
213
|
+
};
|
214
|
+
|
215
|
+
Pushpop.ModalViewStack.prototype._transitionStyle = Pushpop.ModalViewStack.TransitionStyleType.CoverVertical;
|
216
|
+
|
217
|
+
/**
|
218
|
+
Returns the transition style of this modal view stack.
|
219
|
+
@type String
|
220
|
+
*/
|
221
|
+
Pushpop.ModalViewStack.prototype.getTransitionStyle = function() { return this._transitionStyle; };
|
222
|
+
|
223
|
+
/**
|
224
|
+
Sets the transition style to use when presenting this modal view stack.
|
225
|
+
@param {String} transitionStyle The transition style for this modal view stack.
|
226
|
+
*/
|
227
|
+
Pushpop.ModalViewStack.prototype.setTransitionStyle = function(transitionStyle) {
|
228
|
+
this._transitionStyle = transitionStyle;
|
229
|
+
|
230
|
+
var $element = this.$element, transitionStyles = Pushpop.ModalViewStack.TransitionStyleType;
|
231
|
+
for (var t in transitionStyles) $element.removeClass('pp-modal-transition-style-' + transitionStyles[t]);
|
232
|
+
$element.addClass('pp-modal-transition-style-' + transitionStyle);
|
233
|
+
};
|
234
|
+
|
235
|
+
$(function() {
|
236
|
+
var $window = $(window['addEventListener'] ? window : document.body);
|
237
|
+
|
238
|
+
// Handle actions for buttons set up to automatically present/dismiss modals.
|
239
|
+
$window.delegate('.pp-button.pp-present-modal, .pp-button.pp-dismiss-modal', Pushpop.Button.EventType.DidTriggerAction, function(evt) {
|
240
|
+
var button = evt.button;
|
241
|
+
var $element = button.$element;
|
242
|
+
var href = $element.attr('href');
|
243
|
+
var $viewElement, view, viewStack;
|
244
|
+
|
245
|
+
if ($element.hasClass('pp-present-modal')) {
|
246
|
+
$viewElement = $(href);
|
247
|
+
if ($viewElement.length === 0) return;
|
248
|
+
|
249
|
+
view = $viewElement[0].view || new Pushpop.View($viewElement);
|
250
|
+
|
251
|
+
viewStack = view.getViewStack();
|
252
|
+
if (viewStack) viewStack.present(view);
|
253
|
+
}
|
254
|
+
|
255
|
+
else if ($element.hasClass('pp-dismiss-modal')) {
|
256
|
+
if (href === '#') {
|
257
|
+
viewStack = button.getViewStack();
|
258
|
+
if (viewStack) viewStack.dismiss();
|
259
|
+
} else {
|
260
|
+
$viewElement = $(href);
|
261
|
+
if ($viewElement.length === 0) return;
|
262
|
+
|
263
|
+
view = $viewElement[0].view || new Pushpop.View($viewElement);
|
264
|
+
|
265
|
+
viewStack = view.getViewStack();
|
266
|
+
if (viewStack) viewStack.dismiss();
|
267
|
+
}
|
268
|
+
}
|
269
|
+
});
|
270
|
+
|
271
|
+
// Handle clicks for anchor links set up to automatically present/dismiss modals.
|
272
|
+
$window.delegate('a.pp-present-modal, a.pp-dismiss-modal', 'click', function(evt) {
|
273
|
+
var $element = $(this);
|
274
|
+
if ($element.hasClass('pp-button')) return;
|
275
|
+
|
276
|
+
evt.preventDefault();
|
277
|
+
|
278
|
+
var href = $element.attr('href');
|
279
|
+
var $viewElement, view, viewStack;
|
280
|
+
|
281
|
+
if ($element.hasClass('pp-present-modal')) {
|
282
|
+
$viewElement = $(href);
|
283
|
+
if ($viewElement.length === 0) return;
|
284
|
+
|
285
|
+
view = $viewElement[0].view || new Pushpop.View($viewElement);
|
286
|
+
|
287
|
+
viewStack = view.getViewStack();
|
288
|
+
if (viewStack) viewStack.present(view);
|
289
|
+
}
|
290
|
+
|
291
|
+
else if ($element.hasClass('pp-dismiss-modal')) {
|
292
|
+
if (href === '#') {
|
293
|
+
viewStack = Pushpop.getViewStackForElement($element);
|
294
|
+
if (viewStack) viewStack.dismiss();
|
295
|
+
} else {
|
296
|
+
$viewElement = $(href);
|
297
|
+
if ($viewElement.length === 0) return;
|
298
|
+
|
299
|
+
view = $viewElement[0].view || new Pushpop.View($viewElement);
|
300
|
+
|
301
|
+
viewStack = view.getViewStack();
|
302
|
+
if (viewStack) viewStack.dismiss();
|
303
|
+
}
|
304
|
+
}
|
305
|
+
});
|
306
|
+
});
|