searchjoy 1.1.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d828271eb123a378fe3491da733c10c097f083dcdc9b6586fd3947c032f064b7
4
- data.tar.gz: e907e0cd11b7c68e9431184add27fe79d3f35f573d221318e25e34a33a99847e
3
+ metadata.gz: 57f6279802863f6f7c864a8aab34a758607dee4fab88674d54ac0453d1dcd666
4
+ data.tar.gz: f7294740266f88e864b5e15311448e212a7886022a461b6f0fec5499b6d0325d
5
5
  SHA512:
6
- metadata.gz: fdfc1fd30d7e31156d6891eee806933cead952c6bb0cca8eb1c9579b279b8629809ca08eaa7e01b8035b728ffc3f7c32a769822106c01422577a1c4830d1ab73
7
- data.tar.gz: c04d0eb16545d44431e962d7bb1e2fb177bd717a53049f0924c565eccc7fe53966c58e8a1eb10cf7656813c6ca9d265825d010a1a1cad15365acdcd8d1c9f69a
6
+ metadata.gz: 110342d38c82b809447b33b7a104a9ef1c5c2b7e466df526fb8c0422279d2ff688f09d528f1de753b408b9b26a1c5aa79654c5f0c4af692ce81d1e1ee3551913
7
+ data.tar.gz: 9f57e5cece3ef7843a6c36028618ffbe5072dc2a0328691712b52606ff59f3e3b959f88bd1c6f12c65a23deec59d23f29b76559847d4e5f81f147dea5d458597
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 1.3.0 (2024-07-10)
2
+
3
+ - Improved CSP support
4
+
5
+ ## 1.2.0 (2024-06-24)
6
+
7
+ - Dropped support for Ruby < 3.1 and Rails < 6.1
8
+
1
9
  ## 1.1.0 (2023-02-07)
2
10
 
3
11
  - Improved dashboard labels
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013-2023 Andrew Kane
1
+ Copyright (c) 2013-2024 Andrew Kane
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -14,7 +14,7 @@ Works with any search platform, including Elasticsearch, OpenSearch, Sphinx, and
14
14
 
15
15
  :cupid: An amazing companion to [Searchkick](https://github.com/ankane/searchkick)
16
16
 
17
- [![Build Status](https://github.com/ankane/searchjoy/workflows/build/badge.svg?branch=master)](https://github.com/ankane/searchjoy/actions)
17
+ [![Build Status](https://github.com/ankane/searchjoy/actions/workflows/build.yml/badge.svg)](https://github.com/ankane/searchjoy/actions)
18
18
 
19
19
  ## Installation
20
20
 
@@ -1,3 +1,6 @@
1
1
  //= require chartkick
2
2
  //= require Chart.bundle
3
+ //= require_self
3
4
  //= require ./litepicker
5
+
6
+ window.disableLitepickerStyles = true;
@@ -0,0 +1,322 @@
1
+ /*
2
+ *= require_self
3
+ *= require ./litepicker
4
+ */
5
+
6
+ body {
7
+ font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
8
+ margin: 0;
9
+ padding: 20px;
10
+ font-size: 14px;
11
+ line-height: 1.4;
12
+ color: #333;
13
+ }
14
+
15
+ a, a:visited, a:active {
16
+ color: #428bca;
17
+ text-decoration: none;
18
+ }
19
+
20
+ a:hover {
21
+ text-decoration: underline;
22
+ }
23
+
24
+ table {
25
+ width: 100%;
26
+ border-collapse: collapse;
27
+ border-spacing: 0;
28
+ margin-bottom: 20px;
29
+ }
30
+
31
+ th {
32
+ text-align: left;
33
+ border-bottom: solid 2px #ddd;
34
+ }
35
+
36
+ h1 {
37
+ font-size: 20px;
38
+ }
39
+
40
+ h1 small {
41
+ color: #999;
42
+ font-weight: normal;
43
+ }
44
+
45
+ h2 {
46
+ font-size: 16px;
47
+ }
48
+
49
+ ul {
50
+ list-style-type: none;
51
+ padding: 0;
52
+ }
53
+
54
+ table td, table th {
55
+ padding: 8px;
56
+ }
57
+
58
+ td {
59
+ border-top: solid 1px #ddd;
60
+ word-break: break-word;
61
+ }
62
+
63
+ .text-muted {
64
+ color: #999;
65
+ }
66
+
67
+ #brand {
68
+ font-size: 18px;
69
+ line-height: 20px;
70
+ font-weight: bold;
71
+ color: #999;
72
+ }
73
+
74
+ a.active {
75
+ color: #5cb85c;
76
+ }
77
+
78
+ a.type-link {
79
+ background-color: #f0ad4e;
80
+ color: #fff;
81
+ padding: 8px;
82
+ border-radius: 4px;
83
+ text-wrap: nowrap;
84
+ }
85
+
86
+ a.type-link:hover {
87
+ text-decoration: none;
88
+ }
89
+
90
+ /* suspiciously similar to bootstrap 3 */
91
+ a.type-link-0 {
92
+ background-color: #5bc0de;
93
+ }
94
+
95
+ a.type-link-1 {
96
+ background-color: #d9534f;
97
+ }
98
+
99
+ a.type-link-2 {
100
+ background-color: #5cb85c;
101
+ }
102
+
103
+ #header {
104
+ border-bottom: solid 1px #ddd;
105
+ padding-bottom: 10px;
106
+ }
107
+
108
+ .nav, .nav li {
109
+ display: inline;
110
+ }
111
+
112
+ .nav li {
113
+ margin-right: 20px;
114
+ }
115
+
116
+ #stream {
117
+ border-bottom: solid 1px #ddd;
118
+ }
119
+
120
+ .num {
121
+ text-align: right;
122
+ }
123
+
124
+ .container {
125
+ max-width: 800px;
126
+ margin-left: auto;
127
+ margin-right: auto;
128
+ }
129
+
130
+ /*
131
+ Simple Grid
132
+ Learn More - http://dallasbass.com/simple-grid-a-lightweight-responsive-css-grid/
133
+ Project Page - http://thisisdallas.github.com/Simple-Grid/
134
+ Author - Dallas Bass
135
+ Site - dallasbass.com
136
+ */
137
+
138
+ *, *:after, *:before {
139
+ -webkit-box-sizing: border-box;
140
+ -moz-box-sizing: border-box;
141
+ box-sizing: border-box;
142
+ }
143
+
144
+ body {
145
+ margin: 0px;
146
+ }
147
+
148
+ [class*='col-'] {
149
+ float: left;
150
+ padding-right: 20px;
151
+ }
152
+
153
+ [class*='col-']:last-of-type {
154
+ padding-right: 0px;
155
+ }
156
+
157
+ .grid {
158
+ width: 100%;
159
+
160
+ margin: 0 auto;
161
+ overflow: hidden;
162
+ }
163
+
164
+ .grid:after {
165
+ content: "";
166
+ display: table;
167
+ clear: both;
168
+ }
169
+
170
+ .grid-pad {
171
+ padding: 20px 0 0px 20px;
172
+ }
173
+
174
+ .grid-pad > [class*='col-']:last-of-type {
175
+ padding-right: 20px;
176
+ }
177
+
178
+ .push-right {
179
+ float: right;
180
+ }
181
+
182
+ /* Content Columns */
183
+
184
+ .col-1-1 {
185
+ width: 100%;
186
+ }
187
+ .col-2-3, .col-8-12 {
188
+ width: 66.66%;
189
+ }
190
+
191
+ .col-1-2, .col-6-12 {
192
+ width: 50%;
193
+ }
194
+
195
+ .col-1-3, .col-4-12 {
196
+ width: 33.33%;
197
+ }
198
+
199
+ .col-1-4, .col-3-12 {
200
+ width: 25%;
201
+ }
202
+
203
+ .col-1-5 {
204
+ width: 20%;
205
+ }
206
+
207
+ .col-1-6, .col-2-12 {
208
+ width: 16.667%;
209
+ }
210
+
211
+ .col-1-7 {
212
+ width: 14.28%;
213
+ }
214
+
215
+ .col-1-8 {
216
+ width: 12.5%;
217
+ }
218
+
219
+ .col-1-9 {
220
+ width: 11.1%;
221
+ }
222
+
223
+ .col-1-10 {
224
+ width: 10%;
225
+ }
226
+
227
+ .col-1-11 {
228
+ width: 9.09%;
229
+ }
230
+
231
+ .col-1-12 {
232
+ width: 8.33%
233
+ }
234
+
235
+ /* Layout Columns */
236
+
237
+ .col-11-12 {
238
+ width: 91.66%
239
+ }
240
+
241
+ .col-10-12 {
242
+ width: 83.333%;
243
+ }
244
+
245
+ .col-9-12 {
246
+ width: 75%;
247
+ }
248
+
249
+ .col-5-12 {
250
+ width: 41.66%;
251
+ }
252
+
253
+ .col-7-12 {
254
+ width: 58.33%
255
+ }
256
+
257
+ @media handheld, only screen and (max-width: 767px) {
258
+ .grid {
259
+ width: 100%;
260
+ min-width: 0;
261
+ margin-left: 0px;
262
+ margin-right: 0px;
263
+ padding-left: 0px;
264
+ padding-right: 0px;
265
+ }
266
+
267
+ [class*='col-'] {
268
+ width: auto;
269
+ float: none;
270
+ margin-left: 0px;
271
+ margin-right: 0px;
272
+ margin-top: 10px;
273
+ margin-bottom: 10px;
274
+ padding-right: 0px;
275
+ padding-left: 0px;
276
+ }
277
+ }
278
+
279
+ div.litepicker {
280
+ font-size: 0.8rem;
281
+ }
282
+
283
+ :root {
284
+ --litepickerDayIsTodayColor: #5cb85c !important;
285
+ }
286
+
287
+ .width-20 {
288
+ width: 20%;
289
+ }
290
+
291
+ #time-range {
292
+ cursor: pointer;
293
+ line-height: 26px;
294
+ padding-bottom: 10px;
295
+ }
296
+
297
+ .nav-col {
298
+ padding-bottom: 10px;
299
+ }
300
+
301
+ .time-range-col {
302
+ text-align: right;
303
+ }
304
+
305
+ .type-col {
306
+ width: 15%;
307
+ }
308
+
309
+ .conversion-col {
310
+ width: 30%;
311
+ color: #5cb85c;
312
+ }
313
+
314
+ .chart {
315
+ height: 300px;
316
+ width: 100%;
317
+ text-align: center;
318
+ color: #999;
319
+ line-height: 300px;
320
+ font-size: 14px;
321
+ font-family: 'Lucida Grande', 'Lucida Sans Unicode', Verdana, Arial, Helvetica, sans-serif;
322
+ }
@@ -0,0 +1,13 @@
1
+ /*!
2
+ *
3
+ * Litepicker v1.5.7 (https://github.com/wakirin/Litepicker)
4
+ * Package: litepicker (https://www.npmjs.com/package/litepicker)
5
+ * License: MIT (https://github.com/wakirin/Litepicker/blob/master/LICENCE.md)
6
+ * Copyright 2019-2020 Rinat G.
7
+ *
8
+ * Hash: 6c5abdc252d9f485c1dc
9
+ * Generated on: 1592979309772
10
+ *
11
+ */
12
+ :root{--litepickerBgColor: #fff;--litepickerMonthHeaderTextColor: #333;--litepickerMonthButton: #9e9e9e;--litepickerMonthButtonHover: #2196f3;--litepickerMonthWidth: calc(var(--litepickerDayWidth) * 7);--litepickerMonthWeekdayColor: #9e9e9e;--litepickerDayColor: #333;--litepickerDayColorHover: #2196f3;--litepickerDayIsTodayColor: #f44336;--litepickerDayIsInRange: #bbdefb;--litepickerDayIsLockedColor: #9e9e9e;--litepickerDayIsBookedColor: #9e9e9e;--litepickerDayIsStartColor: #fff;--litepickerDayIsStartBg: #2196f3;--litepickerDayIsEndColor: #fff;--litepickerDayIsEndBg: #2196f3;--litepickerDayWidth: 38px;--litepickerButtonCancelColor: #fff;--litepickerButtonCancelBg: #9e9e9e;--litepickerButtonApplyColor: #fff;--litepickerButtonApplyBg: #2196f3;--litepickerButtonResetBtn: #909090;--litepickerButtonResetBtnHover: #2196f3;--litepickerHighlightedDayColor: #333;--litepickerHighlightedDayBg: #ffeb3b}.show-week-numbers{--litepickerMonthWidth: calc(var(--litepickerDayWidth) * 8)}.litepicker{font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;font-size:0.8em;display:none}.litepicker .container__main{display:-webkit-box;display:-ms-flexbox;display:flex}.litepicker .container__months{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;background-color:var(--litepickerBgColor);border-radius:5px;-webkit-box-shadow:0 0 5px #ddd;box-shadow:0 0 5px #ddd;width:calc(var(--litepickerMonthWidth) + 10px);-webkit-box-sizing:content-box;box-sizing:content-box}.litepicker .container__months.columns-2{width:calc((var(--litepickerMonthWidth) * 2) + 20px)}.litepicker .container__months.columns-3{width:calc((var(--litepickerMonthWidth) * 3) + 30px)}.litepicker .container__months.columns-4{width:calc((var(--litepickerMonthWidth) * 4) + 40px)}.litepicker .container__months.split-view .month-item-header .button-previous-month,.litepicker .container__months.split-view .month-item-header .button-next-month{visibility:visible}.litepicker .container__months .month-item{padding:5px;width:var(--litepickerMonthWidth);-webkit-box-sizing:content-box;box-sizing:content-box}.litepicker .container__months .month-item-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-weight:500;padding:10px 5px;text-align:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:var(--litepickerMonthHeaderTextColor)}.litepicker .container__months .month-item-header div{-webkit-box-flex:1;-ms-flex:1;flex:1}.litepicker .container__months .month-item-header div>.month-item-name{margin-right:5px}.litepicker .container__months .month-item-header div>.month-item-year{padding:0}.litepicker .container__months .month-item-header .reset-button{color:var(--litepickerButtonResetBtn)}.litepicker .container__months .month-item-header .reset-button>svg,.litepicker .container__months .month-item-header .reset-button>img{fill:var(--litepickerButtonResetBtn);pointer-events:none}.litepicker .container__months .month-item-header .reset-button:hover{color:var(--litepickerButtonResetBtnHover)}.litepicker .container__months .month-item-header .reset-button:hover>svg{fill:var(--litepickerButtonResetBtnHover)}.litepicker .container__months .month-item-header .button-previous-month,.litepicker .container__months .month-item-header .button-next-month{visibility:hidden;text-decoration:none;color:var(--litepickerMonthButton);padding:3px 5px;border-radius:3px;-webkit-transition:color 0.3s, border 0.3s;transition:color 0.3s, border 0.3s;cursor:default}.litepicker .container__months .month-item-header .button-previous-month>svg,.litepicker .container__months .month-item-header .button-previous-month>img,.litepicker .container__months .month-item-header .button-next-month>svg,.litepicker .container__months .month-item-header .button-next-month>img{fill:var(--litepickerMonthButton);pointer-events:none}.litepicker .container__months .month-item-header .button-previous-month:hover,.litepicker .container__months .month-item-header .button-next-month:hover{color:var(--litepickerMonthButtonHover)}.litepicker .container__months .month-item-header .button-previous-month:hover>svg,.litepicker .container__months .month-item-header .button-next-month:hover>svg{fill:var(--litepickerMonthButtonHover)}.litepicker .container__months .month-item-weekdays-row{display:-webkit-box;display:-ms-flexbox;display:flex;justify-self:center;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;color:var(--litepickerMonthWeekdayColor)}.litepicker .container__months .month-item-weekdays-row>div{padding:5px 0;font-size:85%;-webkit-box-flex:1;-ms-flex:1;flex:1;width:var(--litepickerDayWidth);text-align:center}.litepicker .container__months .month-item:first-child .button-previous-month{visibility:visible}.litepicker .container__months .month-item:last-child .button-next-month{visibility:visible}.litepicker .container__months .month-item.no-previous-month .button-previous-month{visibility:hidden}.litepicker .container__months .month-item.no-next-month .button-next-month{visibility:hidden}.litepicker .container__days{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;justify-self:center;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;text-align:center;-webkit-box-sizing:content-box;box-sizing:content-box}.litepicker .container__days>div,.litepicker .container__days>a{padding:5px 0;width:var(--litepickerDayWidth)}.litepicker .container__days .day-item{color:var(--litepickerDayColor);text-align:center;text-decoration:none;border-radius:3px;-webkit-transition:color 0.3s, border 0.3s;transition:color 0.3s, border 0.3s;cursor:default}.litepicker .container__days .day-item:hover{color:var(--litepickerDayColorHover);-webkit-box-shadow:inset 0 0 0 1px var(--litepickerDayColorHover);box-shadow:inset 0 0 0 1px var(--litepickerDayColorHover)}.litepicker .container__days .day-item.is-today{color:var(--litepickerDayIsTodayColor)}.litepicker .container__days .day-item.is-locked{color:var(--litepickerDayIsLockedColor)}.litepicker .container__days .day-item.is-locked:hover{color:var(--litepickerDayIsLockedColor);-webkit-box-shadow:none;box-shadow:none;cursor:default}.litepicker .container__days .day-item.is-booked{color:var(--litepickerDayIsBookedColor)}.litepicker .container__days .day-item.is-booked:hover{color:var(--litepickerDayIsBookedColor);-webkit-box-shadow:none;box-shadow:none;cursor:default}.litepicker .container__days .day-item.is-in-range{background-color:var(--litepickerDayIsInRange);border-radius:0}.litepicker .container__days .day-item.is-start-date{color:var(--litepickerDayIsStartColor);background-color:var(--litepickerDayIsStartBg);border-top-left-radius:5px;border-bottom-left-radius:5px;border-top-right-radius:0;border-bottom-right-radius:0}.litepicker .container__days .day-item.is-start-date.is-flipped{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:5px;border-bottom-right-radius:5px}.litepicker .container__days .day-item.is-end-date{color:var(--litepickerDayIsEndColor);background-color:var(--litepickerDayIsEndBg);border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:5px;border-bottom-right-radius:5px}.litepicker .container__days .day-item.is-end-date.is-flipped{border-top-left-radius:5px;border-bottom-left-radius:5px;border-top-right-radius:0;border-bottom-right-radius:0}.litepicker .container__days .day-item.is-start-date.is-end-date{border-top-left-radius:5px;border-bottom-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px}.litepicker .container__days .day-item.is-highlighted{color:var(--litepickerHighlightedDayColor);background-color:var(--litepickerHighlightedDayBg)}.litepicker .container__days .week-number{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#9e9e9e;font-size:85%}.litepicker .container__footer{text-align:right;padding:10px 5px;margin:0 5px;background-color:#fafafa;-webkit-box-shadow:inset 0px 3px 3px 0px #ddd;box-shadow:inset 0px 3px 3px 0px #ddd;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.litepicker .container__footer .preview-date-range{margin-right:10px;font-size:90%}.litepicker .container__footer .button-cancel{background-color:var(--litepickerButtonCancelBg);color:var(--litepickerButtonCancelColor);border:0;padding:3px 7px 4px;border-radius:3px}.litepicker .container__footer .button-cancel>svg,.litepicker .container__footer .button-cancel>img{pointer-events:none}.litepicker .container__footer .button-apply{background-color:var(--litepickerButtonApplyBg);color:var(--litepickerButtonApplyColor);border:0;padding:3px 7px 4px;border-radius:3px;margin-left:10px;margin-right:10px}.litepicker .container__footer .button-apply:disabled{opacity:0.7}.litepicker .container__footer .button-apply>svg,.litepicker .container__footer .button-apply>img{pointer-events:none}.litepicker .container__tooltip{position:absolute;margin-top:-4px;padding:4px 8px;border-radius:4px;background-color:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.25);box-shadow:0 1px 3px rgba(0,0,0,0.25);white-space:nowrap;font-size:11px;pointer-events:none;visibility:hidden}.litepicker .container__tooltip:before{position:absolute;bottom:-5px;left:calc(50% - 5px);border-top:5px solid rgba(0,0,0,0.12);border-right:5px solid transparent;border-left:5px solid transparent;content:""}.litepicker .container__tooltip:after{position:absolute;bottom:-4px;left:calc(50% - 4px);border-top:4px solid #fff;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.litepicker-open{overflow:hidden}.litepicker-backdrop{display:none;background-color:#000;opacity:0.3;position:fixed;top:0;right:0;bottom:0;left:0}
13
+
@@ -6,300 +6,19 @@
6
6
  <meta charset="utf-8" />
7
7
  <%= csp_meta_tag %>
8
8
 
9
- <style>
10
- body {
11
- font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
12
- margin: 0;
13
- padding: 20px;
14
- font-size: 14px;
15
- line-height: 1.4;
16
- color: #333;
17
- }
18
-
19
- a, a:visited, a:active {
20
- color: #428bca;
21
- text-decoration: none;
22
- }
23
-
24
- a:hover {
25
- text-decoration: underline;
26
- }
27
-
28
- table {
29
- width: 100%;
30
- border-collapse: collapse;
31
- border-spacing: 0;
32
- margin-bottom: 20px;
33
- }
34
-
35
- th {
36
- text-align: left;
37
- border-bottom: solid 2px #ddd;
38
- }
39
-
40
- h1 {
41
- font-size: 20px;
42
- }
43
-
44
- h1 small {
45
- color: #999;
46
- font-weight: normal;
47
- }
48
-
49
- h2 {
50
- font-size: 16px;
51
- }
52
-
53
- ul {
54
- list-style-type: none;
55
- padding: 0;
56
- }
57
-
58
- table td, table th {
59
- padding: 8px;
60
- }
61
-
62
- td {
63
- border-top: solid 1px #ddd;
64
- }
65
-
66
- .text-muted {
67
- color: #999;
68
- }
69
-
70
- #brand {
71
- font-size: 18px;
72
- line-height: 20px;
73
- font-weight: bold;
74
- color: #999;
75
- }
76
-
77
- a.active {
78
- color: #5cb85c;
79
- }
80
-
81
- a.type-link {
82
- background-color: #f0ad4e;
83
- color: #fff;
84
- padding: 8px;
85
- border-radius: 4px;
86
- }
87
-
88
- a.type-link:hover {
89
- text-decoration: none;
90
- }
91
-
92
- /* suspiciously similar to bootstrap 3 */
93
- a.type-link-0 {
94
- background-color: #5bc0de;
95
- }
96
-
97
- a.type-link-1 {
98
- background-color: #d9534f;
99
- }
100
-
101
- a.type-link-2 {
102
- background-color: #5cb85c;
103
- }
104
-
105
- #header {
106
- border-bottom: solid 1px #ddd;
107
- padding-bottom: 20px;
108
- }
109
-
110
- .nav, .nav li {
111
- display: inline;
112
- }
113
-
114
- .nav li {
115
- margin-right: 20px;
116
- }
117
-
118
- #stream {
119
- border-bottom: solid 1px #ddd;
120
- }
121
-
122
- .num {
123
- text-align: right;
124
- }
125
-
126
- .container {
127
- max-width: 800px;
128
- margin-left: auto;
129
- margin-right: auto;
130
- }
131
-
132
- /*
133
- Simple Grid
134
- Learn More - http://dallasbass.com/simple-grid-a-lightweight-responsive-css-grid/
135
- Project Page - http://thisisdallas.github.com/Simple-Grid/
136
- Author - Dallas Bass
137
- Site - dallasbass.com
138
- */
139
-
140
- *, *:after, *:before {
141
- -webkit-box-sizing: border-box;
142
- -moz-box-sizing: border-box;
143
- box-sizing: border-box;
144
- }
145
-
146
- body {
147
- margin: 0px;
148
- }
149
-
150
- [class*='col-'] {
151
- float: left;
152
- padding-right: 20px;
153
- }
154
-
155
- [class*='col-']:last-of-type {
156
- padding-right: 0px;
157
- }
158
-
159
- .grid {
160
- width: 100%;
161
-
162
- margin: 0 auto;
163
- overflow: hidden;
164
- }
165
-
166
- .grid:after {
167
- content: "";
168
- display: table;
169
- clear: both;
170
- }
171
-
172
- .grid-pad {
173
- padding: 20px 0 0px 20px;
174
- }
175
-
176
- .grid-pad > [class*='col-']:last-of-type {
177
- padding-right: 20px;
178
- }
179
-
180
- .push-right {
181
- float: right;
182
- }
183
-
184
- /* Content Columns */
185
-
186
- .col-1-1 {
187
- width: 100%;
188
- }
189
- .col-2-3, .col-8-12 {
190
- width: 66.66%;
191
- }
192
-
193
- .col-1-2, .col-6-12 {
194
- width: 50%;
195
- }
196
-
197
- .col-1-3, .col-4-12 {
198
- width: 33.33%;
199
- }
200
-
201
- .col-1-4, .col-3-12 {
202
- width: 25%;
203
- }
204
-
205
- .col-1-5 {
206
- width: 20%;
207
- }
208
-
209
- .col-1-6, .col-2-12 {
210
- width: 16.667%;
211
- }
212
-
213
- .col-1-7 {
214
- width: 14.28%;
215
- }
216
-
217
- .col-1-8 {
218
- width: 12.5%;
219
- }
220
-
221
- .col-1-9 {
222
- width: 11.1%;
223
- }
224
-
225
- .col-1-10 {
226
- width: 10%;
227
- }
228
-
229
- .col-1-11 {
230
- width: 9.09%;
231
- }
232
-
233
- .col-1-12 {
234
- width: 8.33%
235
- }
236
-
237
- /* Layout Columns */
238
-
239
- .col-11-12 {
240
- width: 91.66%
241
- }
242
-
243
- .col-10-12 {
244
- width: 83.333%;
245
- }
246
-
247
- .col-9-12 {
248
- width: 75%;
249
- }
250
-
251
- .col-5-12 {
252
- width: 41.66%;
253
- }
254
-
255
- .col-7-12 {
256
- width: 58.33%
257
- }
258
-
259
- @media handheld, only screen and (max-width: 767px) {
260
-
261
-
262
- .grid {
263
- width: 100%;
264
- min-width: 0;
265
- margin-left: 0px;
266
- margin-right: 0px;
267
- padding-left: 0px;
268
- padding-right: 0px;
269
- }
270
-
271
- [class*='col-'] {
272
- width: auto;
273
- float: none;
274
- margin-left: 0px;
275
- margin-right: 0px;
276
- margin-top: 10px;
277
- margin-bottom: 10px;
278
- padding-right: 0px;
279
- padding-left: 0px;
280
- }
281
- }
282
-
283
- div.litepicker {
284
- font-size: 0.8rem;
285
- }
286
-
287
- :root {
288
- --litepickerDayIsTodayColor: #5cb85c !important;
289
- }
290
- </style>
291
-
292
9
  <% if defined?(Propshaft::Railtie) %>
293
- <%= javascript_include_tag "chartkick", "Chart.bundle", "searchjoy/litepicker", "searchjoy/application", nonce: true %>
10
+ <%= stylesheet_link_tag "searchjoy/application", "searchjoy/litepicker" %>
11
+ <%= javascript_include_tag "chartkick", "Chart.bundle", "searchjoy/application", "searchjoy/litepicker", nonce: true %>
294
12
  <% else %>
13
+ <%= stylesheet_link_tag "searchjoy/application" %>
295
14
  <%= javascript_include_tag "searchjoy/application", nonce: true %>
296
15
  <% end %>
297
16
  </head>
298
17
  <body>
299
18
  <div class="container">
300
- <div id="header" style="padding-bottom: 10px;">
19
+ <div id="header">
301
20
  <div class="grid">
302
- <div class="col-1-2" style="padding-bottom: 10px;">
21
+ <div class="col-1-2 nav-col">
303
22
  <ul class="nav">
304
23
  <li id="brand">Searchjoy</li>
305
24
  <li><%= link_to "Live Stream", root_path, class: ("active" if !@search_type) %></li>
@@ -309,9 +28,9 @@
309
28
  </ul>
310
29
  </div>
311
30
 
312
- <div class="col-1-2" style="text-align: right;">
31
+ <div class="col-1-2 time-range-col">
313
32
  <% if @time_range %>
314
- <span id="time-range" style="cursor: pointer; line-height: 26px; padding-bottom: 10px;">
33
+ <span id="time-range">
315
34
  <%= @time_range.first.strftime("%b %-e, %Y") %> to <%= @time_range.last.strftime("%b %-e, %Y") %>
316
35
  </span>
317
36
  <span class="text-muted"><%= @time_zone.name.sub(" (US & Canada)", "") %></span>
@@ -7,10 +7,10 @@
7
7
  <thead>
8
8
  <tr>
9
9
  <th>Query</th>
10
- <th class="num" style="width: 20%;"><%= link_to "Searches", searches_path(search_type: params[:search_type], **@time_params), class: ("active" if params[:sort] != "conversion_rate") %></th>
11
- <th class="num" style="width: 20%;">Converted</th>
12
- <th class="num" style="width: 20%;"><%= link_to "%", searches_path(search_type: params[:search_type], sort: "conversion_rate", **@time_params), class: ("active" if params[:sort] == "conversion_rate") %></th>
13
- <th class="num" style="width: 20%;">Avg Results</th>
10
+ <th class="num width-20"><%= link_to "Searches", searches_path(search_type: params[:search_type], **@time_params), class: ("active" if params[:sort] != "conversion_rate") %></th>
11
+ <th class="num width-20">Converted</th>
12
+ <th class="num width-20"><%= link_to "%", searches_path(search_type: params[:search_type], sort: "conversion_rate", **@time_params), class: ("active" if params[:sort] == "conversion_rate") %></th>
13
+ <th class="num width-20">Avg Results</th>
14
14
  </tr>
15
15
  </thead>
16
16
  <tbody>
@@ -6,7 +6,7 @@
6
6
  <thead>
7
7
  <tr>
8
8
  <th>Top Searches</th>
9
- <th class="num"><%= link_to "View all", searches_path(search_type: @search_type, **@time_params) %></th>
9
+ <th class="num width-20"><%= link_to "View all", searches_path(search_type: @search_type, **@time_params) %></th>
10
10
  </tr>
11
11
  </thead>
12
12
  <tbody>
@@ -24,7 +24,7 @@
24
24
  <thead>
25
25
  <tr>
26
26
  <th>Low Conversion Rate</th>
27
- <th class="num"><%= link_to "View all", searches_path(search_type: @search_type, sort: "conversion_rate", **@time_params) %></th>
27
+ <th class="num width-20"><%= link_to "View all", searches_path(search_type: @search_type, sort: "conversion_rate", **@time_params) %></th>
28
28
  </tr>
29
29
  </thead>
30
30
  <tbody>
@@ -39,10 +39,12 @@
39
39
  </div>
40
40
  </div>
41
41
 
42
+ <% chart_html = '<div id="%{id}" class="chart">%{loading}</div>' %>
43
+
42
44
  <h2>Conversion Rate</h2>
43
45
 
44
- <%= line_chart @conversion_rate_by_week, suffix: "%" %>
46
+ <%= line_chart @conversion_rate_by_week, suffix: "%", html: chart_html %>
45
47
 
46
48
  <h2>Volume</h2>
47
49
 
48
- <%= line_chart [{name: "Searches", data: @searches_by_week}, {name: "Converted", data: @converted_by_week}] %>
50
+ <%= line_chart [{name: "Searches", data: @searches_by_week}, {name: "Converted", data: @converted_by_week}], html: chart_html %>
@@ -1,6 +1,6 @@
1
1
  <% @searches.each do |search| %>
2
2
  <tr>
3
- <td style="width: 15%;">
3
+ <td class="type-col">
4
4
  <%= link_to search.search_type, overview_searches_path(search_type: search.search_type), class: "type-link type-link-#{@search_types.index(search.search_type)}" %>
5
5
  </td>
6
6
  <td>
@@ -12,14 +12,14 @@
12
12
  <% end %>
13
13
  </td>
14
14
 
15
- <td style="width: 35%; color: #5cb85c;">
15
+ <td class="conversion-col">
16
16
  <% if search.converted_at %>
17
17
  <strong>✓</strong>
18
18
  <% convertable = Searchjoy.multiple_conversions ? search.conversions.min_by(&:created_at)&.convertable : search.convertable %>
19
19
  <%= convertable ? (Searchjoy.conversion_name ? Searchjoy.conversion_name.call(convertable) : "#{convertable.model_name.name} #{convertable.id}") : "Converted" %>
20
20
  <% end %>
21
21
  </td>
22
- <td style="width: 20%;" class="num">
22
+ <td class="num width-20">
23
23
  <%= time_ago_in_words search.created_at %> ago
24
24
  <div class="text-muted"><%= pluralize search.results_count, "result" %></div>
25
25
  </td>
@@ -6,9 +6,11 @@ module Searchjoy
6
6
  if app.config.respond_to?(:assets)
7
7
  if defined?(Sprockets) && Sprockets::VERSION.to_i >= 4
8
8
  app.config.assets.precompile << "searchjoy/application.js"
9
+ app.config.assets.precompile << "searchjoy/application.css"
9
10
  else
10
11
  # use a proc instead of a string
11
12
  app.config.assets.precompile << proc { |path| path == "searchjoy/application.js" }
13
+ app.config.assets.precompile << proc { |path| path == "searchjoy/application.css" }
12
14
  end
13
15
  end
14
16
 
@@ -1,3 +1,3 @@
1
1
  module Searchjoy
2
- VERSION = "1.1.0"
2
+ VERSION = "1.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: searchjoy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-08 00:00:00.000000000 Z
11
+ date: 2024-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chartkick
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '3.2'
19
+ version: '5'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '3.2'
26
+ version: '5'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: groupdate
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '3'
33
+ version: '6'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '3'
40
+ version: '6'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: activerecord
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '6'
47
+ version: '6.1'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '6'
54
+ version: '6.1'
55
55
  description:
56
56
  email: andrew@ankane.org
57
57
  executables: []
@@ -63,6 +63,8 @@ files:
63
63
  - README.md
64
64
  - app/assets/javascripts/searchjoy/application.js
65
65
  - app/assets/javascripts/searchjoy/litepicker.js
66
+ - app/assets/stylesheets/searchjoy/application.css
67
+ - app/assets/stylesheets/searchjoy/litepicker.css
66
68
  - app/controllers/searchjoy/searches_controller.rb
67
69
  - app/models/searchjoy/conversion.rb
68
70
  - app/models/searchjoy/search.rb
@@ -91,14 +93,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
91
93
  requirements:
92
94
  - - ">="
93
95
  - !ruby/object:Gem::Version
94
- version: '2.7'
96
+ version: '3.1'
95
97
  required_rubygems_version: !ruby/object:Gem::Requirement
96
98
  requirements:
97
99
  - - ">="
98
100
  - !ruby/object:Gem::Version
99
101
  version: '0'
100
102
  requirements: []
101
- rubygems_version: 3.4.6
103
+ rubygems_version: 3.5.11
102
104
  signing_key:
103
105
  specification_version: 4
104
106
  summary: Search analytics made easy