-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcla.html
More file actions
174 lines (159 loc) · 10.1 KB
/
cla.html
File metadata and controls
174 lines (159 loc) · 10.1 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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RudderStack Contributor License Agreement (CLA)</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/water.css@2/out/light.css">
<style>
/* @import url('https://fonts.googleapis.com/css2?family=Gloria+Hallelujah&display=swap');
.gloria-hallelujah-regular {
font-family: "Gloria Hallelujah", cursive;
font-weight: 400;
font-style: normal;
} */
body {
font-family: "Gloria Hallelujah", Arial, sans-serif;
background-color: #F6F5F3;
}
.terms {
font-size: 90%;
opacity: 80%;
}
</style>
</head>
<body>
<div class="container">
<h2>RudderStack Contributor License Agreement (CLA)</h2>
<p class="terms">
<strong>Terms of Agreement</strong>
<br/>
This Contributor License Agreement (“Agreement”) is entered into between RudderStack Inc., a Delaware corporation (“RudderStack,” “we” or “us” etc.) and you (as defined and further identified below). Accordingly, you hereby agree to the following terms for your present and future contributions submitted to RudderStack:
<br/><br/>
1. Definitions:
<br/>(a) “You” (or “your”) shall mean the contribution copyright owner (whether an individual or organization) or legal entity authorized by the copyright owner that is making this Agreement with RudderStack.
<br/>(b) “Contribution(s)” shall mean the code, documentation or other original works of authorship, including any modifications or additions to an existing work, submitted by you to RudderStack for inclusion in, or documentation of, any of the products or projects owned or managed by RudderStack (the “work(s)”). For the purposes of this definition, “submitted” means any form of electronic, verbal, or written communication sent to RudderStack or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, RudderStack for the purpose of discussing and/or improving the work, but excluding communication that is conspicuously marked or otherwise designated in writing by you as “Not a Contribution.”
<br/><br/>
2. Grant of Copyright License:<br/>
You hereby grant to RudderStack and to recipients of software distributed by RudderStack a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute your contributions and such derivative works.
<br/><br/>
3. Grant of Patent License:<br/><br/>
With respect to any patents you own, or that you can license without payment to any third party, you hereby grant RudderStack a perpetual, irrevocable, non-exclusive, worldwide, no-charge, royalty-free license to: (i) make, have made, use, sell, offer to sell, import, and otherwise distribute and exploit your contributions in whole or in part, alone or in combination with or included in any product, work or materials arising out of or relating to the Works to which your contributions were submitted; and (ii) sublicense these same rights to third parties through multiple levels of sublicensees or other licensing arrangements.
<br/><br/>
4. Except as set out above, you keep all right, title, and interest in your contribution. The rights that you grant to us under this agreement are effective on the date you first submitted a contribution to us, even if your submission took place before the date you entered this agreement.
<br/><br/>
5. You represent and warrant that:<br/>
<br/>(i) the contributions are an original work and that you can legally grant the rights set out in this agreement;
<br/>(ii) the contributions and RudderStack's exercise of any license rights granted hereunder, does not and will not, infringe the rights of any third party;
<br/>(iii) you are not aware of any pending or threatened claims, suits, actions, or charges pertaining to the contributions, including without limitation any claims or allegations that any or all of the contributions infringes, violates, or misappropriate the intellectual property rights of any third party (you further agree that you will notify RudderStack immediately if you become aware of any such actual or potential claims, suits, actions, allegations or charges).
<br/><br/>
6. If your employer(s) has rights to intellectual property that you create that includes your contributions, you represent and warrant that your employer has waived such rights for your contributions to RudderStack, or that you have received permission to make contributions on behalf of that employer and that you are authorized to execute this agreement on behalf of your employer.
<br/><br/>
7. You are not expected to provide support for your contributions, except to the extent you desire to provide support. You may provide support for free, for a fee, or not at all. Except as set forth herein, and unless required by applicable law or agreed to in writing, you provide your contributions on an “as is” basis, without warranties or conditions of any kind.
<br/><br/>
8. The failure of either party to enforce its rights under this agreement for any period shall not be construed as a waiver of such rights. No changes or modifications or waivers to this Agreement will be effective unless in writing and signed by both parties. In the event that any provision of this agreement shall be determined to be illegal or unenforceable, that provision will be limited or eliminated to the minimum extent necessary so that this agreement shall otherwise remain in full force and effect and enforceable. This agreement shall be governed by and construed in accordance with the laws of the State of California in the United States without regard to the conflicts of laws provisions thereof. In any action or proceeding to enforce rights under this agreement, the prevailing party will be entitled to recover costs and attorneys’ fees.
<br/><br/><br/>To agree to the above terms, please enter your information here:
</p>
<form action="/cla" method="POST">
<label for="terms">
<input type="checkbox" id="terms" name="terms" required>
<span id="terms-label" data-annotate="true">I agree to the terms & conditions</span>
</label>
<br/><br/>
<label for="github-username">GitHub Username</label>
<input type="text" id="github-username" name="username" required>
<label for="email">Email</label>
<input type="email" id="email" name="email" required>
<button type="submit">Submit</button>
<p style="opacity: 60%;">If you have any questions, email us at <a href="mailto:cla@rudderstack.com">cla@rudderstack.com</a></p>
</form>
<br/><br/><br/>
</div>
</body>
<script>
document.addEventListener('DOMContentLoaded', (event) => {
let form = document.querySelector('form');
addCurrentPageUrlAsFormInput(form);
updateFormInputsWithQueryParamValues(form);
});
function addCurrentPageUrlAsFormInput(form){
// Usage Example : addCurrentPageUrlAsFormInput(document.querySelector('form'))
const currentUrl = window.location.href;
var input = document.createElement('input');
input.type = 'hidden';
input.name = 'referrer';
input.value = currentUrl;
// append the input to the form
form.appendChild(input);
}
function updateFormInputsWithQueryParamValues(form){
// Usage Example : updateFormInputsWithQueryParamValues(document.querySelector('form'))
const urlParams = new URLSearchParams(window.location.search);
for (const [key, value] of urlParams.entries()) {
const input = form.elements[key];
if (input) {
input.value = value;
}
}
}
function appendUrlQueryParamsToFormAction(form){
// Usage Example: appendUrlQueryParamsToFormAction(document.querySelector('form'))
let newActionUrl = new URL(form.action);
let params = new URLSearchParams(newActionUrl.search);
newActionUrl.search = params.toString();
form.action = newActionUrl.toString();
}
function addQueryParamsAsFormInput(){
const urlParams = new URLSearchParams(window.location.search);
// select the form
const form = document.querySelector('form');
// iterate over all keys from the search parameters
for (let key of urlParams.keys()) {
// create a new hidden input element
var input = document.createElement('input');
input.type = 'hidden';
input.name = key;
input.value = urlParams.get(key);
// append the input to the form
form.appendChild(input);
}
}
</script>
<script type="module">
import { annotate } from 'https://unpkg.com/rough-notation?module';
// const n1 = document.querySelector('#terms-label');
// const n2 = document.querySelector('.terms');
// const a1 = annotate(n1, { type: 'underline', color: '#C3E4CE' });
// const a2 = annotate(n1, { type: 'brackets', color: '#C3E4CE' });
// setTimeout(() => {
// a2.show();
// a1.show();
// }, 3000);
const observer = new IntersectionObserver(handleIntersection, { threshold: [1] });
let annotations;
document.addEventListener('DOMContentLoaded', function () {
annotations = Array.from(document.querySelectorAll('*[data-annotate]'))
.map((element, i) => {
const id = i.toString();
const annotation = annotate(element, {
type: 'underline',
color: '#C3E4CE',
animationDuration: 2000,
});
element.dataset.annotateId = id;
observer.observe(element);
return { id, annotation };
});
});
function handleIntersection(entries, observer) {
entries
.filter((entry) => entry.isIntersecting)
.forEach((entry) => {
const element = entry.target;
const annotation = annotations
.filter(({ id }) => id === element.dataset.annotateId)[0].annotation;
annotation.show();
});
}
</script>
</html>