Author: sebb
Date: Tue Apr 5 18:33:58 2022
New Revision: 1899589
URL: http://svn.apache.org/viewvc?rev=1899589&view=rev
Log:
Replace obsolete Whimsy json source
Update Copyright years
Modified:
comdev/helpwanted.apache.org/site/about.html
comdev/helpwanted.apache.org/site/admin/index.html
comdev/helpwanted.apache.org/site/index.html
comdev/helpwanted.apache.org/site/js/coffee/hw.coffee
comdev/helpwanted.apache.org/site/js/hw.js
comdev/helpwanted.apache.org/site/task.html
Modified: comdev/helpwanted.apache.org/site/about.html
URL:
http://svn.apache.org/viewvc/comdev/helpwanted.apache.org/site/about.html?rev=1899589&r1=1899588&r2=1899589&view=diff
==============================================================================
--- comdev/helpwanted.apache.org/site/about.html (original)
+++ comdev/helpwanted.apache.org/site/about.html Tue Apr 5 18:33:58 2022
@@ -47,7 +47,7 @@
<p style="font-size: 12px; font-family: sans-serif; text-align: center;">
Managed by the <a href="http://community.apache.org/">Apache Community
Development Project</a>.<br/>
- Copyright© 2017, the Apache Software Foundation. Licensed under the <a
rel="license" href="http://www.apache.org/licenses/LICENSE-2.0">Apache License,
Version 2.0</a>
+ Copyright© 2022, the Apache Software Foundation. Licensed under the <a
rel="license" href="http://www.apache.org/licenses/LICENSE-2.0">Apache License,
Version 2.0</a>
</p>
</body>
</html>
\ No newline at end of file
Modified: comdev/helpwanted.apache.org/site/admin/index.html
URL:
http://svn.apache.org/viewvc/comdev/helpwanted.apache.org/site/admin/index.html?rev=1899589&r1=1899588&r2=1899589&view=diff
==============================================================================
--- comdev/helpwanted.apache.org/site/admin/index.html (original)
+++ comdev/helpwanted.apache.org/site/admin/index.html Tue Apr 5 18:33:58 2022
@@ -64,7 +64,7 @@
<p style="font-size: 12px; font-style: italic; text-align: center;">
Managed by the <a href="https://community.apache.org/">Apache Community
Development Project</a>.
- Copyright 2018, the Apache Software Foundation.
+ Copyright 2022, the Apache Software Foundation.
Licensed under the <a
href="http://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>
</p>
</body>
Modified: comdev/helpwanted.apache.org/site/index.html
URL:
http://svn.apache.org/viewvc/comdev/helpwanted.apache.org/site/index.html?rev=1899589&r1=1899588&r2=1899589&view=diff
==============================================================================
--- comdev/helpwanted.apache.org/site/index.html (original)
+++ comdev/helpwanted.apache.org/site/index.html Tue Apr 5 18:33:58 2022
@@ -37,7 +37,7 @@
<p style="font-size: 12px; font-family: sans-serif; text-align: center;">
Managed by the <a href="http://community.apache.org/">Apache Community
Development Project</a>, see <a href="/about.html">About This Website</a> for
technical info.<br/>
- Copyright© 2017, the Apache Software Foundation. Licensed under the
<a rel="license" href="http://www.apache.org/licenses/LICENSE-2.0">Apache
License, Version 2.0</a>
+ Copyright© 2022, the Apache Software Foundation. Licensed under the
<a rel="license" href="http://www.apache.org/licenses/LICENSE-2.0">Apache
License, Version 2.0</a>
</p>
</body>
</html>
\ No newline at end of file
Modified: comdev/helpwanted.apache.org/site/js/coffee/hw.coffee
URL:
http://svn.apache.org/viewvc/comdev/helpwanted.apache.org/site/js/coffee/hw.coffee?rev=1899589&r1=1899588&r2=1899589&view=diff
==============================================================================
--- comdev/helpwanted.apache.org/site/js/coffee/hw.coffee (original)
+++ comdev/helpwanted.apache.org/site/js/coffee/hw.coffee Tue Apr 5 18:33:58
2022
@@ -283,7 +283,7 @@ reallyPopulate = (json, state) ->
optg = mk('optgroup', { label: (if state then 'Podlings:' else 'Top Level
Projects:')})
app(obj, optg)
- for group, data of (json.committees || json.groups || json.podling)
+ for group, data of (json.projects || json.groups || json.podling)
if state == 'podlings' and data.status != "current"
continue
pro.push(group)
@@ -316,7 +316,7 @@ reallyPopulate = (json, state) ->
fetch('https://whimsy.apache.org/public/public_podlings.json',
'podlings', reallyPopulate)
populateAdminForm = () ->
- fetch('https://whimsy.apache.org/public/public_ldap_committees.json',
false, reallyPopulate)
+ fetch('https://whimsy.apache.org/public/public_ldap_projects.json', false,
reallyPopulate)
displayItems = (json, state) ->
Modified: comdev/helpwanted.apache.org/site/js/hw.js
URL:
http://svn.apache.org/viewvc/comdev/helpwanted.apache.org/site/js/hw.js?rev=1899589&r1=1899588&r2=1899589&view=diff
==============================================================================
--- comdev/helpwanted.apache.org/site/js/hw.js (original)
+++ comdev/helpwanted.apache.org/site/js/hw.js Tue Apr 5 18:33:58 2022
@@ -1,4 +1,21 @@
-// Generated by CoffeeScript 1.12.8
+// Generated by CoffeeScript 2.6.1
+
+/*
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
var app, brights, cjson, cog, diff, diff_explanation, displayItem,
displayItems, doForm, fetch, fetchItems, fetchItemsAdmin, genColors, get,
hsl2rgb, hw_weburl, isArray, langs, max_items, mk, pastels, populateAdminForm,
populateForm, post, postJSON, projects, reallyPopulate, renderItem, set,
showSplash, splashOptions, spoken_langs, sw, swi, txt, types, website_langs,
wizard, wstate;
hsl2rgb = function(h, s, l) {
@@ -77,7 +94,7 @@ genColors = function(numColors, saturati
var baseHue, c, cls, h, i, j, ref;
cls = [];
baseHue = 1.34;
- for (i = j = 1, ref = numColors; 1 <= ref ? j <= ref : j >= ref; i = 1 <=
ref ? ++j : --j) {
+ for (i = j = 1, ref = numColors; (1 <= ref ? j <= ref : j >= ref); i = 1 <=
ref ? ++j : --j) {
c = hsl2rgb(baseHue, saturation, lightness);
if (hex) {
h = (Math.round(c.r * 255 * 255 * 255) + Math.round(c.g * 255 * 255) +
Math.round(c.b * 255)).toString(16);
@@ -101,24 +118,21 @@ genColors = function(numColors, saturati
return cls;
};
-
-/*
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
-
+// protocol identifier
+// user:pass authentication
+// IP address exclusion
+// private & local networks
+// IP address dotted notation octets
+// excludes loopback network 0.0.0.0
+// excludes reserved space >= 224.0.0.0
+// excludes network & broacast addresses
+// (first & last IP address of each class)
+// host name
+// domain name
+// TLD identifier
+// TLD may end with dot
+// port number
+// resource path
hw_weburl = new RegExp("(" + "(?:(?:https?|ftp)://)" + "(?:\\S+(?::\\S*)?@)?"
+ "(?:" + "(?!(?:10|127)(?:\\.\\d{1,3}){3})" +
"(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})" +
"(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})" +
"(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])" +
"(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}" +
"(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))" + "|" +
"(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)" +
"(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*" +
"(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))" + "\\.?" + ")" + "(?::\\d{2,5})?" +
"(?:[/?#]([^,<>()\\[\\]
\\t\\r\\n]|(<[^:\\s]*?>|\\([^:\\s]*?\\)|\\[[^:\\s]*?\\]))*)?" + ")\\.?", "mig");
pastels = genColors(16, 0.9, 0.85);
@@ -131,21 +145,22 @@ splashOptions = {
'I want to help spread the word about "Help Wanted"!':
'location.href="wtest.html";'
};
+// Difficulty levels
diff = ['Beginner', 'Journeyman', 'Intermediate', 'Advanced', 'Expert'];
diff_explanation = ['This is an easy task that anyone can get started on',
'This requires a bit of knowledge of the project, but otherwise is an easy
task', 'This requires a good knowledge of the project', 'This requires a good
knowledge of the project and good technical skills', 'This requires intimate
knowledge of the project and excellent technical skills'];
-
/*
N.B. Do NOT edit the file js/hw.js. Instead edit js/coffee/hw.coffee and
run combine.sh to regenerate hw.js
- */
-
+*/
+// Languages (programming + spoken)
langs = ['c', 'xml', 'c++', 'c-sharp', 'objective-c', 'java', 'javascript',
'css', 'html', 'perl', 'ruby', 'lua', 'python', 'go', 'rust', 'erlang',
'swift', 'groovy', 'haskell', 'scala', 'php', 'pig', 'bash', 'tcl', 'jsp',
'svg', 'maven', 'gradle'];
spoken_langs = ['english', 'french', 'german', 'spanish', 'russian',
'italian', 'japanese', 'chinese'];
website_langs = ['css', 'javascript', 'html'];
+// Task categories
types = {
programming: "Programming and Development",
'web design': "Web Design",
@@ -155,12 +170,15 @@ types = {
translation: 'Translation'
};
+// TBD
projects = ['all projects'];
cjson = {};
+// Default item limit
max_items = 10;
+// Sort some things
langs.sort();
showSplash = function(args) {
@@ -180,7 +198,7 @@ showSplash = function(args) {
p = pastels[i];
b = brights[i];
d = mk('div', {
- "class": "option",
+ class: "option",
onclick: oc,
style: "background: rgba(" + p.r + "," + p.g + "," + p.b + ", 0.85);"
});
@@ -228,7 +246,7 @@ wizard = function(step, arg) {
p = pastels[i];
b = brights[i];
d = mk('div', {
- "class": "option",
+ class: "option",
onclick: "wizard(2, '" + type + "');",
style: "background: rgba(" + p.r + "," + p.g + "," + p.b + ", 0.85);"
});
@@ -241,10 +259,12 @@ wizard = function(step, arg) {
app(wcobj, d);
i++;
}
+
+ // show me everything
p = pastels[i];
b = brights[i];
d = mk('div', {
- "class": "option",
+ class: "option",
onclick: "fetchItems();",
style: "background:rgba(" + p.r + "," + p.g + "," + p.b + ", 0.85);"
});
@@ -267,7 +287,7 @@ wizard = function(step, arg) {
style: 'font-size: 20pt; font-family: sans-serif; color: #FFF;'
}, desc));
obj = mk('div', {
- "class": "optiontwo"
+ class: "optiontwo"
});
app(wcobj, obj);
i = 0;
@@ -298,7 +318,7 @@ wizard = function(step, arg) {
id: "plang_" + lang
});
lbl = mk('label', {
- "for": "plang_" + lang
+ for: "plang_" + lang
}, lang);
app(div, cb);
app(div, lbl);
@@ -316,7 +336,7 @@ wizard = function(step, arg) {
id: "plang_" + lang
});
lbl = mk('label', {
- "for": "plang_" + lang
+ for: "plang_" + lang
}, lang);
app(div, cb);
app(div, lbl);
@@ -334,12 +354,10 @@ wizard = function(step, arg) {
id: "plang_" + lang
});
lbl = mk('label', {
- "for": "plang_" + lang
- }, lang.replace(/^([a-z])/, (function(_this) {
- return function(a) {
- return a.toUpperCase();
- };
- })(this)));
+ for: "plang_" + lang
+ }, lang.replace(/^([a-z])/, (a) => {
+ return a.toUpperCase();
+ }));
app(div, cb);
app(div, lbl);
app(obj, div);
@@ -351,7 +369,7 @@ wizard = function(step, arg) {
});
fbtn = mk('input', {
type: "button",
- "class": "finishbutton",
+ class: "finishbutton",
onclick: "doForm(this.parentNode.parentNode);",
value: "Find me something to do!"
});
@@ -370,6 +388,7 @@ wizard = function(step, arg) {
populateForm = function() {
var cb, div, f, j, lang, lbl, len, len1, m, type;
+ // languages
f = get('plang');
for (j = 0, len = langs.length; j < len; j++) {
lang = langs[j];
@@ -381,12 +400,14 @@ populateForm = function() {
id: "plang_" + lang
});
lbl = mk('label', {
- "for": "plang_" + lang
+ for: "plang_" + lang
}, lang);
app(div, [cb, lbl]);
app(f, div);
}
app(f, mk('br'));
+
+ // task types
f = get('ptypes');
for (m = 0, len1 = types.length; m < len1; m++) {
type = types[m];
@@ -398,12 +419,14 @@ populateForm = function() {
id: "ptype__" + type
});
lbl = mk('label', {
- "for": "ptype_" + type
+ for: "ptype_" + type
}, type);
app(div, [cb, lbl]);
app(f, div);
}
app(f, mk('br'));
+
+ // projects - none for now
f = get('pprojects');
return app(f, "All projects");
};
@@ -444,11 +467,13 @@ reallyPopulate = function(json, state) {
var data, group, j, lang, len, len1, m, obj, opt, optg, pro, ref;
pro = [];
obj = get('project');
+
+ // optgroup for spoken/written
optg = mk('optgroup', {
label: (state ? 'Podlings:' : 'Top Level Projects:')
});
app(obj, optg);
- ref = json.committees || json.groups || json.podling;
+ ref = json.projects || json.groups || json.podling;
for (group in ref) {
data = ref[group];
if (state === 'podlings' && data.status !== "current") {
@@ -459,6 +484,7 @@ reallyPopulate = function(json, state) {
value: group
}, group));
}
+ // Add Infra
pro.push('infrastucture');
app(obj, mk('option', {
value: 'infrastructure'
@@ -467,10 +493,13 @@ reallyPopulate = function(json, state) {
return;
}
obj = get('languages');
+ // optgroup for programming
optg = mk('optgroup', {
label: "Programming languages:"
});
app(obj, optg);
+
+ // prog languages
for (j = 0, len = langs.length; j < len; j++) {
lang = langs[j];
app(obj, mk('option', {
@@ -478,6 +507,8 @@ reallyPopulate = function(json, state) {
value: lang
}, lang));
}
+
+ // optgroup for spoken/written
optg = mk('optgroup', {
label: "Spoken languages:"
});
@@ -486,11 +517,9 @@ reallyPopulate = function(json, state) {
lang = spoken_langs[m];
app(obj, mk('option', {
value: lang
- }, lang.replace(/^([a-z])/, (function(_this) {
- return function(a) {
- return a.toUpperCase();
- };
- })(this))));
+ }, lang.replace(/^([a-z])/, (a) => {
+ return a.toUpperCase();
+ })));
opt = document.createElement('option');
}
if (!state || state === 0) {
@@ -499,7 +528,7 @@ reallyPopulate = function(json, state) {
};
populateAdminForm = function() {
- return fetch('https://whimsy.apache.org/public/public_ldap_committees.json',
false, reallyPopulate);
+ return fetch('https://whimsy.apache.org/public/public_ldap_projects.json',
false, reallyPopulate);
};
displayItems = function(json, state) {
@@ -523,15 +552,32 @@ displayItems = function(json, state) {
div = mk('div', {
style: "line-height: 12pt; text-align: center;"
}, [
- mk('h2', {}, "Dang it!"), mk('p', {}, ["Sorry, we couldn't find any open
tasks matching your criteria.", mk('br'), "You could try expanding your search
or picking a different category.", mk('br'), mk('br')]), mk('p', {}, [
- mk('span', {
+ mk('h2',
+ {},
+ "Dang it!"),
+ mk('p',
+ {},
+ ["Sorry, we couldn't find any open tasks matching your criteria.",
+ mk('br'),
+ "You could try expanding your search or picking a different category.",
+ mk('br'),
+ mk('br')]),
+ mk('p',
+ {},
+ [
+ mk('span',
+ {
style: "font-size: 14pt; color: #333;"
- }, [
- "â", mk('a', {
+ },
+ [
+ "â",
+ mk('a',
+ {
style: "color: #333;",
onclick: 'wizard(1)',
href: 'javascript:void(0);'
- }, "Back to start")
+ },
+ "Back to start")
])
])
]);
@@ -540,18 +586,14 @@ displayItems = function(json, state) {
}
if (state && typeof state === "string") {
if (hw_oldstate === state) {
- json.sort((function(_this) {
- return function(a, b) {
- return a[state] < b[state];
- };
- })(this));
+ json.sort((a, b) => {
+ return a[state] < b[state];
+ });
hw_oldstate = "";
} else {
- json.sort((function(_this) {
- return function(a, b) {
- return a[state] > b[state];
- };
- })(this));
+ json.sort((a, b) => {
+ return a[state] > b[state];
+ });
hw_oldstate = state;
}
}
@@ -580,15 +622,15 @@ displayItems = function(json, state) {
ptype = item.type.replace(/\s+/g, "");
cdate = new Date(item.created * 1000).toLocaleString();
lingos = (item.languages !== 'n/a' ? item.languages.split(",").join(", ")
: "");
+
+ // admin stuff
add = "";
if (state && state.admin) {
add = " <td><a href='/admin/close.lua?id=" + item.request_id + "'>Mark
as done</a></td>";
}
- item.description = item.description.replace(/\n/g,
"<br/>").replace(hw_weburl, (function(_this) {
- return function(a) {
- return "<a href='" + a + "'>" + a + "</a>";
- };
- })(this));
+ item.description = item.description.replace(/\n/g,
"<br/>").replace(hw_weburl, (a) => {
+ return "<a href='" + a + "'>" + a + "</a>";
+ });
tbl += "<tr style='cursor: pointer;' onclick=\"sw('details_" + i +
"');\"><td width='68'><div class='itemNumber-yellow'>" + z + "</div><img
title='" + item.type + "' style='float: left; width: 24px; height: 24px;'
src='/images/icon_" + ptype + ".png'/></td>" + "<td>" + item.project + "</td>"
+ "<td style='text-align: left;'>" + item.title + "</td>" + "<td>" + lingos +
"</td><td title='" + diff_explanation[parseInt(item.difficulty)] + "'
style='text-align: left;'><img style='width: 20px; height: 20px;
vertical-align: middle;' src='/images/level_" + (parseInt(item.difficulty) + 1)
+ ".png'/> " + diff[item.difficulty] + "</td><td>" + cdate + "</td>" + add +
"</tr>";
tbl += "<tr style='display:none;' id='details_" + i + "'><td
colspan='6'><b>Project:</b> " + item.project + "<br/><b>Requested by:</b> " +
item.author + "@apache.org<br/><b>Created:</b> " + cdate +
"<br/><b>Description:</b> <blockquote>" + item.description +
"</blockquote><b>Further information: </b> <a href='" + item.url + "'>" +
item.url + "</a><br/><input type='button' onclick='location.href=\"/task.html?"
+ item.request_id + "\";' value='I am interested in this'/></td></tr>";
}
@@ -637,11 +679,9 @@ renderItem = function(json, state) {
if (overrides[json.project]) {
json.project = overrides[json.project];
}
- json.description = json.description.replace(/\n/g,
"<br/>").replace(hw_weburl, (function(_this) {
- return function(a) {
- return "<a href='" + a + "'>" + a + "</a>";
- };
- })(this));
+ json.description = json.description.replace(/\n/g,
"<br/>").replace(hw_weburl, (a) => {
+ return "<a href='" + a + "'>" + a + "</a>";
+ });
obj.innerHTML = "<h2>Task #" + state.substring(0, 8) + ": " + json.title +
"</h2>";
mlink = "mailto:dev@" + json.project + ".apache.org?subject=" + escape("Help
with task: " + json.title) + "&body=" + escape("I would like to help out with
the task listed at /task.html?" + rid + "\n\n");
rgba = "rgba(" + p.r + "," + p.g + "," + p.b + ", 1)";
@@ -668,6 +708,8 @@ fetch = function(url, xstate, callback,
} else {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
+ //xmlHttp.withCredentials = true
+ // GET URL
xmlHttp.open("GET", url, true);
xmlHttp.send(null);
return xmlHttp.onreadystatechange = function(state) {
@@ -680,6 +722,7 @@ fetch = function(url, xstate, callback,
if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
if (callback) {
try {
+ // Try to parse as JSON and deal with cache objects, fall back to
old style parse-and-pass
response = JSON.parse(xmlHttp.responseText);
return callback(response, xstate);
} catch (error) {
@@ -700,6 +743,7 @@ post = function(url, args, xstate, callb
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlHttp.withCredentials = true;
+ // Construct form data
ar = [];
for (k in args) {
v = args[k];
@@ -708,6 +752,8 @@ post = function(url, args, xstate, callb
}
}
fdata = ar.join("&");
+
+ // POST URL
xmlHttp.open("POST", url, true);
xmlHttp.setRequestHeader("Content-type",
"application/x-www-form-urlencoded");
xmlHttp.send(fdata);
@@ -721,6 +767,7 @@ post = function(url, args, xstate, callb
if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
if (callback) {
try {
+ // Try to parse as JSON and deal with cache objects, fall back to
old style parse-and-pass
response = JSON.parse(xmlHttp.responseText);
return callback(response, xstate);
} catch (error) {
@@ -741,7 +788,10 @@ postJSON = function(url, json, xstate, c
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlHttp.withCredentials = true;
+ // Construct form data
fdata = JSON.stringify(json);
+
+ // POST URL
xmlHttp.open("POST", url, true);
xmlHttp.setRequestHeader("Content-type", "application/json");
xmlHttp.send(fdata);
@@ -755,6 +805,7 @@ postJSON = function(url, json, xstate, c
if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
if (callback) {
try {
+ // Try to parse as JSON and deal with cache objects, fall back to
old style parse-and-pass
response = JSON.parse(xmlHttp.responseText);
return callback(response, xstate);
} catch (error) {
@@ -839,11 +890,8 @@ swi = function(obj) {
});
};
-cog = function(div, size) {
+cog = function(div, size = 200) {
var i, idiv;
- if (size == null) {
- size = 200;
- }
idiv = document.createElement('div');
idiv.setAttribute("class", "icon");
idiv.setAttribute("style", "text-align: center; vertical-align: middle;
height: 500px;");
Modified: comdev/helpwanted.apache.org/site/task.html
URL:
http://svn.apache.org/viewvc/comdev/helpwanted.apache.org/site/task.html?rev=1899589&r1=1899588&r2=1899589&view=diff
==============================================================================
--- comdev/helpwanted.apache.org/site/task.html (original)
+++ comdev/helpwanted.apache.org/site/task.html Tue Apr 5 18:33:58 2022
@@ -21,7 +21,7 @@
<p style="font-size: 12px; font-style: italic; text-align: center;">
Managed by the <a href="https://community.apache.org/">Apache Community
Development Project</a>.
- Copyright 2018, the Apache Software Foundation.
+ Copyright 2022, the Apache Software Foundation.
Licensed under the <a
href="http://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>
</p>
</body>