squab 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/LICENSE.md +13 -0
  2. data/README.md +4 -0
  3. data/bin/squab +4 -0
  4. data/defaults.yaml +5 -0
  5. data/lib/squab.rb +2 -0
  6. data/lib/squab/db.rb +37 -0
  7. data/lib/squab/events.rb +301 -0
  8. data/lib/squab/web.rb +231 -0
  9. data/public/api.html +66 -0
  10. data/public/css/anytime.css +777 -0
  11. data/public/css/bootstrap-responsive.css +1058 -0
  12. data/public/css/bootstrap-responsive.min.css +9 -0
  13. data/public/css/bootstrap.css +5774 -0
  14. data/public/css/bootstrap.min.css +9 -0
  15. data/public/css/docs.css +1001 -0
  16. data/public/css/normalize.css +406 -0
  17. data/public/css/pickadate/default.css +240 -0
  18. data/public/css/pickadate/default.date.css +332 -0
  19. data/public/css/prettify.css +30 -0
  20. data/public/css/squab.css +307 -0
  21. data/public/events.html +85 -0
  22. data/public/img/glyphicons-halflings-white.png +0 -0
  23. data/public/img/glyphicons-halflings.png +0 -0
  24. data/public/js/collection/events.js +74 -0
  25. data/public/js/lib/backbone-min.js +4 -0
  26. data/public/js/lib/datejs/core.js +48 -0
  27. data/public/js/lib/datejs/date-en-US.js +145 -0
  28. data/public/js/lib/jquery-latest.js +9440 -0
  29. data/public/js/lib/lodash.min.js +48 -0
  30. data/public/js/lib/pickadate/legacy.js +140 -0
  31. data/public/js/lib/pickadate/picker.date.js +957 -0
  32. data/public/js/lib/pickadate/picker.js +791 -0
  33. data/public/js/lib/typeahead.min.js +7 -0
  34. data/public/js/model/event.js +38 -0
  35. data/public/js/router.js +38 -0
  36. data/public/js/squab.js +6 -0
  37. data/public/js/view/day_view.js +22 -0
  38. data/public/js/view/event_view.js +14 -0
  39. data/public/js/view/events_view.js +46 -0
  40. data/public/js/view/search_view.js +130 -0
  41. metadata +220 -0
@@ -0,0 +1,332 @@
1
+ /* ==========================================================================
2
+ $BASE-DATE-PICKER
3
+ ========================================================================== */
4
+ /* ==========================================================================
5
+ $VARIABLES
6
+ ========================================================================== */
7
+ /**
8
+ * Base colors
9
+ */
10
+ /**
11
+ * Backgrounds
12
+ */
13
+ /**
14
+ * Borders
15
+ */
16
+ /**
17
+ * Buttons
18
+ */
19
+ /**
20
+ * Picker base
21
+ */
22
+ /**
23
+ * Date picker options
24
+ */
25
+ /**
26
+ * Theme configurations
27
+ */
28
+ /* ==========================================================================
29
+ $MIXINS
30
+ ========================================================================== */
31
+ /**
32
+ * Common picker item states
33
+ */
34
+ /**
35
+ * Opacity
36
+ */
37
+ /**
38
+ * Vendor prefixes
39
+ */
40
+ /**
41
+ * The picker box.
42
+ */
43
+ .picker__box {
44
+ padding: 0 1em;
45
+ }
46
+ /**
47
+ * The header containing the month and year stuff.
48
+ */
49
+ .picker__header {
50
+ text-align: center;
51
+ position: relative;
52
+ margin-top: .75em;
53
+ }
54
+ /**
55
+ * The month and year labels.
56
+ */
57
+ .picker__month,
58
+ .picker__year {
59
+ font-weight: 500;
60
+ display: inline-block;
61
+ margin-left: .25em;
62
+ margin-right: .25em;
63
+ }
64
+ .picker__year {
65
+ color: #999999;
66
+ font-size: .8em;
67
+ font-style: italic;
68
+ }
69
+ /**
70
+ * The month and year selectors.
71
+ */
72
+ .picker__select--month,
73
+ .picker__select--year {
74
+ font-size: .8em;
75
+ border: 1px solid #b7b7b7;
76
+ height: 2.5em;
77
+ padding: .66em .25em;
78
+ margin-left: .25em;
79
+ margin-right: .25em;
80
+ margin-top: -0.5em;
81
+ }
82
+ .picker__select--month {
83
+ width: 35%;
84
+ }
85
+ .picker__select--year {
86
+ width: 22.5%;
87
+ }
88
+ .picker__select--month:focus,
89
+ .picker__select--year:focus {
90
+ border-color: #0089ec;
91
+ }
92
+ /**
93
+ * The month navigation buttons.
94
+ */
95
+ .picker__nav--prev,
96
+ .picker__nav--next {
97
+ position: absolute;
98
+ top: -0.33em;
99
+ padding: .5em 1.33em;
100
+ width: 1em;
101
+ height: 1em;
102
+ }
103
+ .picker__nav--prev {
104
+ left: -1em;
105
+ padding-right: 1.5em;
106
+ }
107
+ .picker__nav--next {
108
+ right: -1em;
109
+ padding-left: 1.5em;
110
+ }
111
+ .picker__nav--prev:before,
112
+ .picker__nav--next:before {
113
+ content: " ";
114
+ border-top: .5em solid transparent;
115
+ border-bottom: .5em solid transparent;
116
+ border-right: 0.75em solid #000000;
117
+ width: 0;
118
+ height: 0;
119
+ display: block;
120
+ margin: 0 auto;
121
+ }
122
+ .picker__nav--next:before {
123
+ border-right: 0;
124
+ border-left: 0.75em solid #000000;
125
+ }
126
+ .picker__nav--prev:hover,
127
+ .picker__nav--next:hover {
128
+ cursor: pointer;
129
+ color: #000000;
130
+ background: #b1dcfb;
131
+ }
132
+ .picker__nav--disabled,
133
+ .picker__nav--disabled:hover,
134
+ .picker__nav--disabled:before,
135
+ .picker__nav--disabled:before:hover {
136
+ cursor: default;
137
+ background: none;
138
+ border-right-color: #f5f5f5;
139
+ border-left-color: #f5f5f5;
140
+ }
141
+ /**
142
+ * The calendar table of dates
143
+ */
144
+ .picker__table {
145
+ text-align: center;
146
+ border-collapse: collapse;
147
+ border-spacing: 0;
148
+ table-layout: fixed;
149
+ font-size: inherit;
150
+ width: 100%;
151
+ margin-top: .75em;
152
+ margin-bottom: .5em;
153
+ }
154
+ @media (min-height: 33.875em) {
155
+ .picker__table {
156
+ margin-bottom: .75em;
157
+ }
158
+ }
159
+ .picker__table td {
160
+ margin: 0;
161
+ padding: 0;
162
+ }
163
+ /**
164
+ * The weekday labels
165
+ */
166
+ .picker__weekday {
167
+ width: 14.285714286%;
168
+ font-size: .75em;
169
+ padding-bottom: .25em;
170
+ color: #999999;
171
+ font-weight: 500;
172
+ /* Increase the spacing a tad */
173
+
174
+ }
175
+ @media (min-height: 33.875em) {
176
+ .picker__weekday {
177
+ padding-bottom: .5em;
178
+ }
179
+ }
180
+ /**
181
+ * The days on the calendar
182
+ */
183
+ .picker__day {
184
+ padding: .3125em 0;
185
+ font-weight: 200;
186
+ border: 1px solid transparent;
187
+ }
188
+ .picker__day--today {
189
+ color: #0089ec;
190
+ position: relative;
191
+ }
192
+ .picker__day--today:before {
193
+ content: " ";
194
+ position: absolute;
195
+ top: 2px;
196
+ right: 2px;
197
+ width: 0;
198
+ height: 0;
199
+ border-top: 0.5em solid #0059bc;
200
+ border-left: .5em solid transparent;
201
+ }
202
+ .picker__day--selected,
203
+ .picker__day--selected:hover {
204
+ border-color: #0089ec;
205
+ }
206
+ .picker__day--highlighted {
207
+ background: #b1dcfb;
208
+ }
209
+ .picker__day--disabled:before {
210
+ border-top-color: #aaaaaa;
211
+ }
212
+ .picker__day--outfocus {
213
+ color: #dddddd;
214
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=66)";
215
+ filter: alpha(opacity=66);
216
+ -moz-opacity: 0.66;
217
+ opacity: 0.66;
218
+ }
219
+ .picker__day--infocus:hover,
220
+ .picker__day--outfocus:hover {
221
+ cursor: pointer;
222
+ color: #000000;
223
+ background: #b1dcfb;
224
+ }
225
+ .picker__day--highlighted:hover,
226
+ .picker--focused .picker__day--highlighted {
227
+ background: #0089ec;
228
+ color: #ffffff;
229
+ }
230
+ .picker__day--disabled,
231
+ .picker__day--disabled:hover {
232
+ background: #f5f5f5;
233
+ border-color: #f5f5f5;
234
+ color: #dddddd;
235
+ cursor: default;
236
+ }
237
+ .picker__day--highlighted.picker__day--disabled,
238
+ .picker__day--highlighted.picker__day--disabled:hover {
239
+ background: #bbbbbb;
240
+ }
241
+ /**
242
+ * The footer containing the "today" and "clear" buttons.
243
+ */
244
+ .picker__footer {
245
+ text-align: center;
246
+ }
247
+ .picker__button--today,
248
+ .picker__button--clear {
249
+ border: 1px solid #ffffff;
250
+ background: #ffffff;
251
+ font-size: .8em;
252
+ padding: .66em 0;
253
+ font-weight: bold;
254
+ width: 50%;
255
+ display: inline-block;
256
+ vertical-align: bottom;
257
+ }
258
+ .picker__button--today:hover,
259
+ .picker__button--clear:hover {
260
+ cursor: pointer;
261
+ color: #000000;
262
+ background: #b1dcfb;
263
+ border-bottom-color: #b1dcfb;
264
+ }
265
+ .picker__button--today:focus,
266
+ .picker__button--clear:focus {
267
+ background: #b1dcfb;
268
+ border-color: #0089ec;
269
+ outline: none;
270
+ }
271
+ .picker__button--today:before,
272
+ .picker__button--clear:before {
273
+ position: relative;
274
+ display: inline-block;
275
+ height: 0;
276
+ }
277
+ .picker__button--today:before {
278
+ content: " ";
279
+ margin-right: .45em;
280
+ top: -0.05em;
281
+ width: 0;
282
+ border-top: 0.66em solid #0059bc;
283
+ border-left: .66em solid transparent;
284
+ }
285
+ .picker__button--clear:before {
286
+ content: "\D7";
287
+ margin-right: .35em;
288
+ top: -0.1em;
289
+ color: #ee2200;
290
+ vertical-align: top;
291
+ font-size: 1.1em;
292
+ }
293
+
294
+ /* ==========================================================================
295
+ $DEFAULT-DATE-PICKER
296
+ ========================================================================== */
297
+ /* ==========================================================================
298
+ $VARIABLES
299
+ ========================================================================== */
300
+ /**
301
+ * Base colors
302
+ */
303
+ /**
304
+ * Backgrounds
305
+ */
306
+ /**
307
+ * Borders
308
+ */
309
+ /**
310
+ * Buttons
311
+ */
312
+ /**
313
+ * Picker base
314
+ */
315
+ /**
316
+ * Date picker options
317
+ */
318
+ /**
319
+ * Theme configurations
320
+ */
321
+ /* ==========================================================================
322
+ $MIXINS
323
+ ========================================================================== */
324
+ /**
325
+ * Common picker item states
326
+ */
327
+ /**
328
+ * Opacity
329
+ */
330
+ /**
331
+ * Vendor prefixes
332
+ */
@@ -0,0 +1,30 @@
1
+ .com { color: #93a1a1; }
2
+ .lit { color: #195f91; }
3
+ .pun, .opn, .clo { color: #93a1a1; }
4
+ .fun { color: #dc322f; }
5
+ .str, .atv { color: #D14; }
6
+ .kwd, .prettyprint .tag { color: #1e347b; }
7
+ .typ, .atn, .dec, .var { color: teal; }
8
+ .pln { color: #48484c; }
9
+
10
+ .prettyprint {
11
+ padding: 8px;
12
+ background-color: #f7f7f9;
13
+ border: 1px solid #e1e1e8;
14
+ }
15
+ .prettyprint.linenums {
16
+ -webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
17
+ -moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
18
+ box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
19
+ }
20
+
21
+ /* Specify class=linenums on a pre to get line numbering */
22
+ ol.linenums {
23
+ margin: 0 0 0 33px; /* IE indents via margin-left */
24
+ }
25
+ ol.linenums li {
26
+ padding-left: 12px;
27
+ color: #bebec5;
28
+ line-height: 20px;
29
+ text-shadow: 0 1px 0 #fff;
30
+ }
@@ -0,0 +1,307 @@
1
+ /* NOTE: These are the same font assets used by the Franklin project */
2
+
3
+ @font-face {
4
+ font-family: "SQMarket";
5
+ src: url(https://squareup.com/fonts/sqmarket/sqmarket-light.eot);
6
+ src: url(https://squareup.com/fonts/sqmarket/sqmarket-light.eot?#iefix) format('eot'), url(https://squareup.com/fonts/sqmarket/sqmarket-light.woff) format('woff'), url(https://squareup.com/fonts/sqmarket/sqmarket-light.ttf) format('truetype'), url(https://squareup.com/fonts/sqmarket/sqmarket-light.svg) format('svg');
7
+ font-weight: 100;
8
+ }
9
+
10
+ @font-face {
11
+ font-family: "SQMarket";
12
+ src: url(https://squareup.com/fonts/sqmarket/sqmarket-regular.eot);
13
+ src: url(https://squareup.com/fonts/sqmarket/sqmarket-regular.eot?#iefix) format('eot'), url(https://squareup.com/fonts/sqmarket/sqmarket-regular.woff) format('woff'), url(https://squareup.com/fonts/sqmarket/sqmarket-regular.ttf) format('truetype'), url(https://squareup.com/fonts/sqmarket/sqmarket-regular.svg) format('svg');
14
+ font-weight: 400;
15
+ }
16
+
17
+ @font-face {
18
+ font-family: "SQMarket";
19
+ src: url(https://squareup.com/fonts/sqmarket/sqmarket-medium.eot);
20
+ src: url(https://squareup.com/fonts/sqmarket/sqmarket-medium.eot?#iefix) format('eot'), url(https://squareup.com/fonts/sqmarket/sqmarket-medium.woff) format('woff'), url(https://squareup.com/fonts/sqmarket/sqmarket-medium.ttf) format('truetype'), url(https://squareup.com/fonts/sqmarket/sqmarket-medium.svg) format('svg');
21
+ font-weight: 500;
22
+ }
23
+
24
+ @font-face {
25
+ font-family: "SQMarket";
26
+ src: url(https://squareup.com/fonts/sqmarket/sqmarket-medium.eot);
27
+ src: url(https://squareup.com/fonts/sqmarket/sqmarket-medium.eot?#iefix) format('eot'), url(https://squareup.com/fonts/sqmarket/sqmarket-medium.woff) format('woff'), url(https://squareup.com/fonts/sqmarket/sqmarket-medium.ttf) format('truetype'), url(https://squareup.com/fonts/sqmarket/sqmarket-medium.svg) format('svg');
28
+ font-weight: bold;
29
+ }
30
+
31
+ @-webkit-keyframes pulse {
32
+ 0% { background-color: #27a6e1; }
33
+ 50% { background-color: #32beff; }
34
+ }
35
+
36
+ body {
37
+ font-family: 'SQMarket', 'Helvetica Neue', Helvetica, sans-serif;
38
+ max-width: 620px;
39
+ margin: 60px auto;
40
+ padding: 0 20px;
41
+ color: #162633;
42
+ }
43
+
44
+ h1 {
45
+ margin-top: 0;
46
+ }
47
+
48
+ h2 {
49
+ color: #808487;
50
+ font-size: 20px;
51
+ font-weight: 100;
52
+ margin-bottom: 24px;
53
+ }
54
+
55
+ a {
56
+ color: #49b1e4;
57
+ text-decoration: none;
58
+ }
59
+
60
+ a:hover {
61
+ text-decoration: underline;
62
+ }
63
+
64
+ form {
65
+ margin-bottom: 25px;
66
+ }
67
+
68
+ fieldset {
69
+ padding: 0;
70
+ border: 0;
71
+ margin: 0;
72
+ display: inline-block;
73
+ position: relative;
74
+ }
75
+
76
+ input[type="date"],
77
+ input[type="search"],
78
+ input[type="submit"],
79
+ input[type="text"],
80
+ .tt-query {
81
+ -moz-box-sizing: border-box;
82
+ box-sizing: border-box;
83
+ padding: 0 5px;
84
+ }
85
+
86
+ input[type="date"],
87
+ input[type="search"],
88
+ input[type="submit"],
89
+ input[type="text"] {
90
+ margin-bottom: 8px;
91
+ border: solid 1px #AAA;
92
+ display: inline-block;
93
+ }
94
+
95
+ input[type="date"],
96
+ input[type="search"],
97
+ input[type="text"] {
98
+ height: 26px;
99
+ margin-right: 8px;
100
+ }
101
+
102
+ input[type="date"]:focus,
103
+ input[type="search"]:focus,
104
+ input[type="submit"]:focus,
105
+ input[type="text"]:focus {
106
+ outline: none;
107
+ border-color: #27a6e1;
108
+ }
109
+
110
+ input[type="date"],
111
+ input[type="text"] {
112
+ width: calc(50% - 4px);
113
+ }
114
+
115
+ input[type="search"] {
116
+ padding-left: 0;
117
+ }
118
+
119
+ .twitter-typeahead,
120
+ input[name="value"],
121
+ input[name="url"] {
122
+ width: calc(25% - 6px);
123
+ }
124
+
125
+ input[name="to"],
126
+ input[name="url"] {
127
+ margin-right: 0;
128
+ }
129
+
130
+ input[type="submit"] {
131
+ display: block;
132
+ width: 100%;
133
+ padding: 10px;
134
+ border-radius: 23px;
135
+ background-color: #27a6e1;
136
+ color: white;
137
+ border: none;
138
+ }
139
+
140
+ input[type="submit"]:hover {
141
+ background-color: #32beff;
142
+ }
143
+
144
+ input[type="submit"].searching {
145
+ -webkit-animation: 1s pulse infinite;
146
+ animation: 1s pulse infinite;
147
+ }
148
+
149
+ input[type="checkbox"] {
150
+ vertical-align: top;
151
+ }
152
+
153
+ #js-datepickers fieldset {
154
+ width: calc(50% - 4px);
155
+ }
156
+
157
+ #js-datepickers fieldset:first-child {
158
+ margin-right: 8px;
159
+ }
160
+
161
+ #from-text,
162
+ #to-text {
163
+ width: 100%;
164
+ }
165
+
166
+ #from-date,
167
+ #to-date {
168
+ position: absolute;
169
+ right: .9em;
170
+ top: .4em;
171
+ padding: 0;
172
+ margin: 0;
173
+ width: 0;
174
+ height: 0;
175
+ background: transparent;
176
+ color: #333;
177
+ border: 0;
178
+ border-left: .5em solid transparent;
179
+ border-right: .5em solid transparent;
180
+ border-top: 0.7em solid #333;
181
+ cursor: pointer;
182
+ }
183
+
184
+ .search-tip,
185
+ .search-info {
186
+ color: #808487;
187
+ font-weight: 100;
188
+ font-size: smaller;
189
+ }
190
+
191
+ .search-tip {
192
+ margin-bottom: 8px;
193
+ }
194
+
195
+ #update-notice {
196
+ opacity: 0;
197
+ transition: opacity .2s;
198
+ }
199
+
200
+ #update-notice.visible {
201
+ opacity: 1;
202
+ }
203
+
204
+ ul {
205
+ padding: 0;
206
+ margin: 0;
207
+ }
208
+
209
+ li {
210
+ list-style-type: none;
211
+ position: relative;
212
+ margin: 1em 0;
213
+ padding-left: 150px;
214
+ line-height: 1.4;
215
+ }
216
+
217
+ .day {
218
+ margin: 50px 0;
219
+ }
220
+
221
+ .source {
222
+ position: absolute;
223
+ width: 120px;
224
+ font-weight: bold;
225
+ left: 0;
226
+ top: 0;
227
+ margin-bottom: 4px;
228
+ }
229
+
230
+ .meta {
231
+ color: #A8A9AB;
232
+ font-size: smaller;
233
+ margin-top: 4px;
234
+ }
235
+
236
+ .source:hover,
237
+ .user:hover {
238
+ cursor: pointer;
239
+ text-decoration: underline;
240
+ }
241
+
242
+ /* Typeahead */
243
+
244
+ .twitter-typeahead {
245
+ vertical-align: top;
246
+ margin-right: 8px;
247
+ margin-bottom: 8px
248
+ }
249
+
250
+ .twitter-typeahead input {
251
+ margin: 0;
252
+ }
253
+
254
+ .tt-query {
255
+ width: 100%;
256
+ }
257
+
258
+ .tt-hint {
259
+ display: none !important;
260
+ }
261
+
262
+ .tt-dropdown-menu {
263
+ background-color: white;
264
+ border: solid 1px #A8A9AB;
265
+ width: 160px;
266
+ padding: 0 5px 0 9px;
267
+ box-shadow: 0 2px 8px rgba(0,0,0,.4)
268
+ }
269
+
270
+ .tt-dropdown-menu p {
271
+ margin: 5px 0;
272
+ }
273
+
274
+ .tt-is-under-cursor {
275
+ color: #27a6e1;
276
+ }
277
+
278
+ @media screen and (max-width: 500px) {
279
+ body {
280
+ margin: 0;
281
+ padding: 20px;
282
+ }
283
+ .day-events li {
284
+ padding-left: 0;
285
+ }
286
+ .source {
287
+ position: static;
288
+ display: block;
289
+ width: 100%;
290
+ }
291
+ input[type="date"],
292
+ input[type="search"],
293
+ input[type="text"],
294
+ .twitter-typeahead,
295
+ #js-datepickers fieldset {
296
+ width: 100%;
297
+ margin-right: 0;
298
+ }
299
+ .twitter-typeahead {
300
+ display: block !important;
301
+ }
302
+ .tt-dropdown-menu {
303
+ width: 100%;
304
+ -moz-box-sizing: border-box;
305
+ box-sizing: border-box;
306
+ }
307
+ }