Skip to content

Commit 63a14c6

Browse files
committed
Merge remote-tracking branch 'origin/feature/calendar'
2 parents 3bd9d25 + 601f3b0 commit 63a14c6

File tree

7 files changed

+298
-1
lines changed

7 files changed

+298
-1
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*~

content.html

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ <h2>Calendar</h2>
1515

1616
<p><a href="http://sheffieldgeeks.org.uk">http://sheffieldgeeks.org.uk</a></p>
1717

18+
<div id="calendar"></div>
19+
1820
<h2>Meatspace Meetups</h2>
1921

2022
<ul>

css/listevents.css

+163
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
div.OpenACalendarWidgetListEventsData {
2+
border: 1px solid black;
3+
padding: 0;
4+
margin: 0;
5+
background: white;
6+
font-family: arial, sans;
7+
-webkit-border-radius: 2px;
8+
border-radius: 2px;
9+
-moz-background-clip: padding;
10+
-webkit-background-clip: padding-box;
11+
background-clip: padding-box;
12+
}
13+
div.OpenACalendarWidgetListEventsData div,
14+
div.OpenACalendarWidgetListEventsData span,
15+
div.OpenACalendarWidgetListEventsData p,
16+
div.OpenACalendarWidgetListEventsData a,
17+
div.OpenACalendarWidgetListEventsData ol,
18+
div.OpenACalendarWidgetListEventsData ul,
19+
div.OpenACalendarWidgetListEventsData li {
20+
margin: 0;
21+
padding: 0;
22+
border: 0;
23+
font-size: 100%;
24+
font: inherit;
25+
vertical-align: baseline;
26+
line-height: 1;
27+
}
28+
div.OpenACalendarWidgetListEventsData ol,
29+
div.OpenACalendarWidgetListEventsData ul {
30+
list-style: none;
31+
}
32+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsHeader {
33+
color: white;
34+
font-size: 14pt;
35+
background: #2f569b;
36+
text-align: center;
37+
padding: 5px;
38+
margin: 0;
39+
}
40+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsHeader a:link {
41+
color: white;
42+
text-decoration: none;
43+
}
44+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsHeader a:visited {
45+
color: white;
46+
text-decoration: none;
47+
}
48+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsHeader a:active {
49+
color: white;
50+
text-decoration: underline;
51+
}
52+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsHeader a:hover {
53+
color: white;
54+
text-decoration: underline;
55+
}
56+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsEventNone {
57+
color: black;
58+
font-size: 12pt;
59+
font-style: italic;
60+
padding: 5px;
61+
margin: 0;
62+
background: white;
63+
}
64+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsEvent {
65+
padding: 5px;
66+
margin: 0 0 10px 0;
67+
background: white;
68+
color: black;
69+
}
70+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsEvent a:link {
71+
color: blue;
72+
text-decoration: underline;
73+
}
74+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsEvent a:visited {
75+
color: blue;
76+
text-decoration: underline;
77+
}
78+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsEvent a:active {
79+
color: red;
80+
text-decoration: underline;
81+
}
82+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsEvent a:hover {
83+
color: red;
84+
text-decoration: underline;
85+
}
86+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsEvent div.OpenACalendarWidgetListEventsDate {
87+
color: white;
88+
font-size: 14pt;
89+
float: left;
90+
width: 100px;
91+
height: 100px;
92+
text-align: center;
93+
background: #231f20;
94+
padding: 4px;
95+
margin: 4px 10px 4px 4px;
96+
-webkit-border-radius: 5px;
97+
-moz-border-radius: 5px;
98+
-ms-border-radius: 5px;
99+
-o-border-radius: 5px;
100+
border-radius: 5px;
101+
}
102+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsEvent div.OpenACalendarWidgetListEventsSummary {
103+
color: black;
104+
font-size: 14pt;
105+
padding: 0 0 4px 0;
106+
margin: 0;
107+
}
108+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsEvent div.OpenACalendarWidgetListEventsDescription {
109+
color: black;
110+
font-size: 12pt;
111+
padding: 0;
112+
margin: 0;
113+
}
114+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsEvent div.OpenACalendarWidgetListEventsAddress {
115+
color: black;
116+
font-size: 12pt;
117+
font-style: italic;
118+
padding: 0;
119+
margin: 0;
120+
}
121+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsEvent div.OpenACalendarWidgetListEventsMoreLink {
122+
color: black;
123+
font-size: 12pt;
124+
padding: 0;
125+
margin: 0;
126+
}
127+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsEvent div.OpenACalendarWidgetListEventsClear {
128+
padding: 0;
129+
margin: 0;
130+
clear: both;
131+
}
132+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsFooter {
133+
color: white;
134+
font-size: 10pt;
135+
font-style: italic;
136+
background: #2f569b;
137+
text-align: center;
138+
padding: 5px;
139+
margin: 0;
140+
}
141+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsFooter a:link {
142+
color: white;
143+
text-decoration: underline;
144+
}
145+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsFooter a:visited {
146+
color: white;
147+
text-decoration: underline;
148+
}
149+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsFooter a:active {
150+
color: white;
151+
text-decoration: underline;
152+
}
153+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsFooter a:hover {
154+
color: white;
155+
text-decoration: underline;
156+
}
157+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsFooter div.OpenACalendarWidgetFooterMore {
158+
background: #2f569b;
159+
}
160+
div.OpenACalendarWidgetListEventsData div.OpenACalendarWidgetListEventsFooter div.OpenACalendarWidgetFooterCredit {
161+
background: #2f569b;
162+
}
163+

index.html

+7
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<meta charset="utf-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
66
<link rel="stylesheet" href="/foundation.min.css" />
7+
<link rel="stylesheet" href="css/listevents.css" />
78
<title>Sheffield Geeks</title>
89

910
</head>
@@ -27,6 +28,8 @@ <h2>Calendar</h2>
2728

2829
<p><a href="http://sheffieldgeeks.org.uk">http://sheffieldgeeks.org.uk</a></p>
2930

31+
<div id="calendar"></div>
32+
3033
<h2>Meatspace Meetups</h2>
3134

3235
<ul>
@@ -79,5 +82,9 @@ <h1>Other Geeks</h1>
7982
for this page and send a pull request.</p>
8083
</div>
8184
</div>
85+
<script src="js/listevents.js"></script>
86+
<script>
87+
OpenACalendarWidgetListEvents.place("calendar","opentechcalendar.co.uk",{areaID: 40});
88+
</script>
8289
</body>
8390
</html>

index.md

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
[http://sheffieldgeeks.org.uk](http://sheffieldgeeks.org.uk)
1515

16+
<div id="calendar"></div>
1617

1718
## Meatspace Meetups
1819

js/listevents.js

+118
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
/**
2+
* ican.openacalendar.org Event List Widget
3+
* @link http://ican.openacalendar.org/ OpenACalendar Open Source Software
4+
* @license http://ican.openacalendar.org/license.html 3-clause BSD
5+
* @copyright (c) 2013-2014, JMB Technology Limited, http://jmbtechnology.co.uk/
6+
* @author James Baster <[email protected]>
7+
*/
8+
9+
var OpenACalendarWidgetListEvents = {
10+
callBackFunctionCount: 0,
11+
place: function(divid, site, options) {
12+
var usingOptions = {
13+
eventCount: 5,
14+
title: 'Events',
15+
maxStringLength: 300,
16+
groupID: undefined,
17+
areaID: undefined,
18+
openInNewWindow: true,
19+
sslAvailable: false
20+
}
21+
for (var prop in options) {
22+
if (options.hasOwnProperty(prop)) {
23+
usingOptions[prop] = options[prop];
24+
}
25+
}
26+
var div = document.getElementById(divid);
27+
if (!div) return;
28+
var moreURL;
29+
if (usingOptions.groupID) {
30+
moreURL = "http://"+site+"/group/"+usingOptions.groupID;
31+
} else if (usingOptions.venueID) {
32+
moreURL = "http://"+site+"/venue/"+usingOptions.venueID;
33+
} else if (usingOptions.countryCode) {
34+
moreURL = "http://"+site+"/country/"+usingOptions.countryCode.toUpperCase();
35+
} else if (usingOptions.areaID) {
36+
moreURL = "http://"+site+"/area/"+usingOptions.areaID;
37+
} else {
38+
moreURL = "http://"+site+"/";
39+
}
40+
41+
var target = usingOptions['openInNewWindow'] ? ' target="_BLANK"' : '';
42+
43+
div.innerHTML = '<div class="OpenACalendarWidgetListEventsData">'+
44+
'<div class="OpenACalendarWidgetListEventsHeader"><a href="'+moreURL+'" '+target+' id="'+divid+'Title">'+OpenACalendarWidgetListEvents.escapeHTML(usingOptions.title)+'</a></div>'+
45+
'<div class="OpenACalendarWidgetListEventsEvents" id="'+divid+'Data">Loading</div>'+
46+
'<div class="OpenACalendarWidgetListEventsFooter">'+
47+
'<div class="OpenACalendarWidgetListEventsFooterMore"><a href="'+moreURL+'" '+target+'>See more ...</a></div>'+
48+
'<div class="OpenACalendarWidgetListEventsFooterCredit">Powered by <a href="http://ican.hasacalendar.co.uk" '+target+'>Has A Calendar</a></div>'+
49+
'</div>'+
50+
'</div>';
51+
var dataDiv = document.getElementById(divid+"Data");
52+
var headTag = document.getElementsByTagName('head').item(0);
53+
54+
OpenACalendarWidgetListEvents.callBackFunctionCount++;
55+
window["OpenACalendarWidgetListEventsCallBackFunction"+OpenACalendarWidgetListEvents.callBackFunctionCount] = function(data) {
56+
var html = '';
57+
var limit = Math.min(data.data.length, usingOptions.eventCount);
58+
if (limit <= 0) {
59+
html = '<div class="OpenACalendarWidgetListEventsEventNone">No events</div>';
60+
} else {
61+
for (var i=0;i<limit;i++) {
62+
html += OpenACalendarWidgetListEvents.htmlFromEvent(data.data[i], usingOptions.maxStringLength, target);
63+
}
64+
}
65+
66+
dataDiv.innerHTML=html;
67+
68+
if (!usingOptions.title) {
69+
var titleDiv = document.getElementById(divid+"Title");
70+
titleDiv.innerHTML = data.title;
71+
}
72+
}
73+
var url = "http://";
74+
if (usingOptions.sslAvailable && "https:" == document.location.protocol) {
75+
url = "https://";
76+
}
77+
if (usingOptions.groupID) {
78+
url += site+"/api1/group/"+usingOptions.groupID+"/events.jsonp";
79+
} else if (usingOptions.areaID) {
80+
url += site+"/api1/area/"+usingOptions.areaID+"/events.jsonp";
81+
} else if (usingOptions.venueID) {
82+
url += site+"/api1/venue/"+usingOptions.venueID+"/events.jsonp";
83+
} else if (usingOptions.countryCode) {
84+
url += site+"/api1/country/"+usingOptions.countryCode.toUpperCase()+"/events.jsonp";
85+
} else {
86+
url += site+"/api1/events.jsonp";
87+
}
88+
89+
var script = document.createElement("script");
90+
script.type = "text/javascript";
91+
script.src = url+"?callback=OpenACalendarWidgetListEventsCallBackFunction"+OpenACalendarWidgetListEvents.callBackFunctionCount;
92+
headTag.appendChild(script);
93+
},
94+
htmlFromEvent: function(event, maxLength, target) {
95+
var html = '<div class="OpenACalendarWidgetListEventsEvent">'
96+
html += '<div class="OpenACalendarWidgetListEventsDate">'+event.start.displaylocal+'</div>';
97+
html += '<div class="OpenACalendarWidgetListEventsSummary"><a href="'+event.siteurl+'" '+target+'>'+OpenACalendarWidgetListEvents.escapeHTML(event.summaryDisplay)+'</a></div>';
98+
html += '<div class="OpenACalendarWidgetListEventsDescription">'+OpenACalendarWidgetListEvents.escapeHTMLNewLine(event.description, maxLength)+'</div>';
99+
html += '<a class="OpenACalendarWidgetListEventsMoreLink" href="'+event.siteurl+'" '+target+'>More Info</a>';
100+
html += '<div class="OpenACalendarWidgetListEventsClear"></div>';
101+
return html+'</div>';
102+
},
103+
escapeHTML: function(str) {
104+
var div = document.createElement('div');
105+
div.appendChild(document.createTextNode(str));
106+
return div.innerHTML;
107+
},
108+
escapeHTMLNewLine: function(str, maxLength) {
109+
var div = document.createElement('div');
110+
div.appendChild(document.createTextNode(str));
111+
var out = div.innerHTML;
112+
if (out.length > maxLength) {
113+
out = out.substr(0,maxLength)+" ...";
114+
}
115+
return out.replace(/\n/g,'<br>');
116+
}
117+
};
118+

layout.html

+6-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<meta charset="utf-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
66
<link rel="stylesheet" href="/foundation.min.css" />
7+
<link rel="stylesheet" href="css/listevents.css" />
78
<title>Sheffield Geeks</title>
89

910
</head>
@@ -13,5 +14,9 @@
1314
{CONTENT}
1415
</div>
1516
</div>
17+
<script src="js/listevents.js"></script>
18+
<script>
19+
OpenACalendarWidgetListEvents.place("calendar","opentechcalendar.co.uk",{areaID: 40});
20+
</script>
1621
</body>
17-
</html>
22+
</html>

0 commit comments

Comments
 (0)