-
-
Notifications
You must be signed in to change notification settings - Fork 209
Expand file tree
/
Copy pathgradient.sql
More file actions
128 lines (112 loc) · 6.62 KB
/
gradient.sql
File metadata and controls
128 lines (112 loc) · 6.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#standardSQL
WITH raw_data AS (
SELECT
date,
page,
-- 1. TECHNOLOGY FLAGS
-- CSS Variables: Exclude NULL, {}, '{"summary":{}}', and 'null' string
(
custom_metrics.css_variables IS NOT NULL AND
TO_JSON_STRING(custom_metrics.css_variables) NOT IN ('{}', '{"summary":{}}', 'null')
) AS uses_css_vars,
-- Tailwind: Check the array for the technology
'Tailwind CSS' IN UNNEST(technologies.technology) AS uses_tailwind,
-- Content String for Regex
LOWER(TO_JSON_STRING(custom_metrics.css_variables)) AS vars_str
FROM
`httparchive.crawl.pages`
WHERE
client = 'mobile' AND
is_root_page AND
-- NO RANK FILTER (Analyze the entire long-tail of the web)
-- Quarterly Dates
date IN UNNEST([
DATE '2020-10-01',
DATE '2021-01-01', DATE '2021-04-01', DATE '2021-07-01', DATE '2021-10-01',
DATE '2022-01-01', DATE '2022-04-01', DATE '2022-07-01', DATE '2022-10-01',
DATE '2023-01-01', DATE '2023-04-01', DATE '2023-07-01', DATE '2023-10-01',
DATE '2024-01-01', DATE '2024-04-01', DATE '2024-07-01', DATE '2024-10-01',
DATE '2025-01-01', DATE '2025-04-01', DATE '2025-07-01', DATE '2025-10-01'
])
),
-- Pre-calculate heuristics
flags AS (
SELECT
date,
page,
uses_css_vars,
uses_tailwind,
-- HEURISTIC BOOLEANS (Only true if uses_css_vars is also true)
(uses_css_vars AND REGEXP_CONTAINS(vars_str, r'"#6366f1"')) AS has_indigo_500,
(uses_css_vars AND REGEXP_CONTAINS(vars_str, r'"(#6366f1|#8b5cf6|#a855f7)"')) AS has_ai_purples,
(uses_css_vars AND REGEXP_CONTAINS(vars_str, r'inter')) AS has_inter,
(uses_css_vars AND REGEXP_CONTAINS(vars_str, r'roboto')) AS has_roboto,
(uses_css_vars AND REGEXP_CONTAINS(vars_str, r'system-ui')) AS has_system_ui,
(uses_css_vars AND REGEXP_CONTAINS(vars_str, r'linear-gradient\(|radial-gradient\(')) AS has_gradient,
(uses_css_vars AND REGEXP_CONTAINS(vars_str, r'"(2px|4px|6px|8px|12px|16px|0\.25rem|0\.5rem|0\.75rem|1rem|9999px)"')) AS has_radius,
(uses_css_vars AND REGEXP_CONTAINS(vars_str, r'rgba\(|box-shadow')) AS has_shadow
FROM
raw_data
)
SELECT
FORMAT_DATE('%Y-Q%Q', date) AS year_quarter,
-- 1. CONTEXT (Denominators)
COUNT(DISTINCT page) AS total_sites,
COUNT(DISTINCT IF(uses_css_vars, page, NULL)) AS sites_using_vars,
COUNT(DISTINCT IF(uses_tailwind, page, NULL)) AS sites_using_tailwind,
-------------------------------------------------------------------------
-- 2. "AI PURPLE" SPECTRUM (Indigo/Violet/Purple 500)
-------------------------------------------------------------------------
COUNT(DISTINCT IF(has_ai_purples, page, NULL)) AS cnt_ai_purples,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_ai_purples, page, NULL)), COUNT(DISTINCT page)) AS pct_all_ai_purples,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_ai_purples, page, NULL)), COUNT(DISTINCT IF(uses_css_vars, page, NULL))) AS pct_vars_ai_purples,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_ai_purples AND uses_tailwind, page, NULL)), COUNT(DISTINCT IF(uses_tailwind, page, NULL))) AS pct_tw_ai_purples,
-------------------------------------------------------------------------
-- 3. SPECIFIC INDIGO 500 (#6366f1 Only)
-------------------------------------------------------------------------
COUNT(DISTINCT IF(has_indigo_500, page, NULL)) AS cnt_indigo,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_indigo_500, page, NULL)), COUNT(DISTINCT page)) AS pct_all_indigo,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_indigo_500, page, NULL)), COUNT(DISTINCT IF(uses_css_vars, page, NULL))) AS pct_vars_indigo,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_indigo_500 AND uses_tailwind, page, NULL)), COUNT(DISTINCT IF(uses_tailwind, page, NULL))) AS pct_tw_indigo,
-------------------------------------------------------------------------
-- 4. FONTS
-------------------------------------------------------------------------
-- Inter
COUNT(DISTINCT IF(has_inter, page, NULL)) AS cnt_inter,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_inter, page, NULL)), COUNT(DISTINCT page)) AS pct_all_inter,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_inter, page, NULL)), COUNT(DISTINCT IF(uses_css_vars, page, NULL))) AS pct_vars_inter,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_inter AND uses_tailwind, page, NULL)), COUNT(DISTINCT IF(uses_tailwind, page, NULL))) AS pct_tw_inter,
-- Roboto
COUNT(DISTINCT IF(has_roboto, page, NULL)) AS cnt_roboto,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_roboto, page, NULL)), COUNT(DISTINCT page)) AS pct_all_roboto,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_roboto, page, NULL)), COUNT(DISTINCT IF(uses_css_vars, page, NULL))) AS pct_vars_roboto,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_roboto AND uses_tailwind, page, NULL)), COUNT(DISTINCT IF(uses_tailwind, page, NULL))) AS pct_tw_roboto,
-- System UI
COUNT(DISTINCT IF(has_system_ui, page, NULL)) AS cnt_system,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_system_ui, page, NULL)), COUNT(DISTINCT page)) AS pct_all_system,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_system_ui, page, NULL)), COUNT(DISTINCT IF(uses_css_vars, page, NULL))) AS pct_vars_system,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_system_ui AND uses_tailwind, page, NULL)), COUNT(DISTINCT IF(uses_tailwind, page, NULL))) AS pct_tw_system,
-------------------------------------------------------------------------
-- 5. UI ELEMENTS
-------------------------------------------------------------------------
-- Gradients
COUNT(DISTINCT IF(has_gradient, page, NULL)) AS cnt_gradient,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_gradient, page, NULL)), COUNT(DISTINCT page)) AS pct_all_gradient,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_gradient, page, NULL)), COUNT(DISTINCT IF(uses_css_vars, page, NULL))) AS pct_vars_gradient,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_gradient AND uses_tailwind, page, NULL)), COUNT(DISTINCT IF(uses_tailwind, page, NULL))) AS pct_tw_gradient,
-- Radius
COUNT(DISTINCT IF(has_radius, page, NULL)) AS cnt_radius,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_radius, page, NULL)), COUNT(DISTINCT page)) AS pct_all_radius,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_radius, page, NULL)), COUNT(DISTINCT IF(uses_css_vars, page, NULL))) AS pct_vars_radius,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_radius AND uses_tailwind, page, NULL)), COUNT(DISTINCT IF(uses_tailwind, page, NULL))) AS pct_tw_radius,
-- Shadows
COUNT(DISTINCT IF(has_shadow, page, NULL)) AS cnt_shadow,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_shadow, page, NULL)), COUNT(DISTINCT page)) AS pct_all_shadow,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_shadow, page, NULL)), COUNT(DISTINCT IF(uses_css_vars, page, NULL))) AS pct_vars_shadow,
IEEE_DIVIDE(COUNT(DISTINCT IF(has_shadow AND uses_tailwind, page, NULL)), COUNT(DISTINCT IF(uses_tailwind, page, NULL))) AS pct_tw_shadow
FROM
flags
GROUP BY
year_quarter
ORDER BY
year_quarter;