South African General Elections 2014 - Foundation Office South Africa
The following has evaluated to null or missing: ==> data.meta [in template "252001#252047#252845" at line 459, column 10] ---- Tip: It's the step after the last dot that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #if data.meta.laufendenummer?has_cont... [in template "252001#252047#252845" at line 459, column 5] ----
1<#-- used @ Veranstaltung-Detailseite Intro
2 used @ Publikation-Detailseite Intro
3-->
4
5<#--
6Web content templates to display teaser on thema detail page
7
8Generic template for detail pages Intro / Teaser element
9-->
10<#--
11Display the current page title
12-->
13<#include "${fullTemplatesPath}/functions/relatedContentUtil.ftl" />
14<#include "${fullTemplatesPath}/macros/debugging.ftl" />
15
16<#include "${fullTemplatesPath}/macros/page-modules/PMIntro.ftl" />
17<#include "${fullTemplatesPath}/macros/atomic-modules/AMPublicationCarousel.ftl" />
18<#include "${fullTemplatesPath}/macros/atomic-modules/AMMetadata.ftl" />
19<#include "${fullTemplatesPath}/macros/atomic-modules/AMDatetime.ftl" />
20
21
22<#--
23 renders the Intro for nearly all Pages
24 TODO: remove Share? (was in the designs, but not anymore?)
25 TODO: check if languageSelect/filter are working (js)
26
27 - portletId
28 - data = {
29 "media": string (src from image),
30 "category": string,
31 "title": string,
32 "author": string,
33 "subheadline": string,
34 "copy": string,
35 "filter": {
36 "id": string,
37 "name": string,
38 "entries": Array<Object> ({key:value}),
39 },
40 "languageSelect": {
41 "id": string,
42 "name": string,
43 "entries": Array<Object> ({key:value}),
44 },
45 "meta": {
46 "pos"; string (top/bottom)
47 "date": string,
48 "hash": string,
49 "info": string, (url)
50 },
51 "share" : {
52 "login": string,
53 "print": string,
54 "mail": string,
55 "multishare": string?? (tbd)
56 }
57 - AMMetadata: macro
58 - position: String ("top") -> defines wether the meta-data should be rendered above or below the intro-content
59 }
60-->
61
62<#assign
63 JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")
64
65 ServiceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()
66 DLAPP = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppLocalService")
67
68 themeDisplay = ServiceContext.getThemeDisplay()
69 editmode = FrontendService.user.isPrivilegedUser(themeDisplay)
70
71 languageId = themeDisplay.getLocale()
72 groupId = themeDisplay.getScopeGroupId()
73 currentUrl = themeDisplay.getURLCurrent()
74
75 layout = themeDisplay.getLayout()
76 layouttpl = layout.getTypeSettingsProperties().getProperty("layout-template-id")
77/>
78
79<#setting locale="${languageId}">
80
81<#-- get article from url -->
82
83<#assign entry = FrontendService.article.getArticleToUrl(currentUrl, groupId?number)! >
84
85
86<#if entry?has_content>
87
88 <#if entry.resourcePrimKey??>
89 <#assign primaryKey = entry.resourcePrimKey?number >
90 <#elseif entry.classPK??>
91 <#assign primaryKey = entry.classPK?number >
92 </#if>
93
94 <#assign
95 jsonString = FrontendService.article.getWebcontent(primaryKey)
96 json = FrontendService.json.parseAsJson(jsonString)
97
98 title = entry.getTitle(languageId)
99 data = {
100 "title": title
101 }
102 />
103 <@debugJsonString jsonString "ADT_KASDE_DYNAMIC_INTRO" />
104
105 <#if hasContent('untertitel', languageId, json)>
106 <#assign data = data + { "subheadline": getValueForLanguage('untertitel', languageId, json, "first") } >
107 </#if>
108
109 <#if hasContent('beschreibung', languageId, json)>
110 <#assign data = data + { "copy": getValueForLanguage('beschreibung', languageId, json, "first") } >
111 </#if>
112
113 <#-- fill meta data -->
114 <#assign meta = {} />
115
116 <#-- PUBLIKATIONEN DETAIL -->
117 <#if layouttpl?contains("LAYOUT_KASDE_PUBLIKATIONEN_DETAIL")>
118
119 <#if hasContent('coverDMTKASDEMEDIUM', languageId, json)>
120 <#assign
121 coverBildString = getValueForLanguage('coverDMTKASDEMEDIUM', languageId, json, "first")
122 />
123
124 <#if coverBildString?has_content>
125 <#assign
126 coverBild = FrontendService.json.parseAsJson(coverBildString)
127 dMTJsonObject = FrontendService.media.getDMTJsonObject( coverBild.groupId?number, coverBild.uuid, locale )
128 linkToDMT = FrontendService.media.getImageURLForAMConfiguration('hd-resolution',coverBild.groupId?number, coverBild.uuid )
129 data = data + { "media": linkToDMT, "meta" : dMTJsonObject }
130 />
131 <#if dMTJsonObject.altText?? >
132 <#assign data = data + {"alt" : dMTJsonObject.altText} />
133 </#if>
134 <#if dMTJsonObject.quelle??>
135 <#assign meta = meta + { "quelle": dMTJsonObject.quelle } />
136 </#if>
137 </#if>
138 <#-- uncomment to display pdf cover as Intro Image
139 <#elseif hasContent('document_pdfDMTBASICDOCUMENT', languageId, json)>
140 <#assign
141 pdfDocument = getValueForLanguage('document_pdfDMTBASICDOCUMENT', languageId, json, "first")
142 fileEntry = FrontendService.media.getFileEntry(pdfDocument.uuid, groupId?number)!/>
143 <#if fileEntry?has_content>
144 <#assign
145 linkToThumbnail = FrontendService.link.getThumbnailSrc(fileEntry , themeDisplay)
146 data = data + { "media": linkToThumbnail }
147 />
148 </#if>
149 -->
150 </#if>
151
152 <#assign
153 meta = meta + { "orderInfo": "true" }
154 verbundJournalArticle = FrontendService.publication.getVerbundToPublikation( entry )!""
155 />
156
157
158
159 <#if hasContent('erscheinungsdatum', languageId, json)>
160 <#assign
161 erscheinungsdatum = getValueForLanguage('erscheinungsdatum', languageId, json, "first")
162 />
163 <#if erscheinungsdatum?has_content >
164 <#assign
165 erscheinungsdatumFormatted = FrontendService.date.getDateFormatLong( erscheinungsdatum, languageId )
166 meta = meta + { "date": erscheinungsdatumFormatted }
167 />
168 </#if>
169 </#if>
170
171 <#if verbundJournalArticle?has_content>
172 <#assign
173 verbundJsonString = FrontendService.article.getWebcontent(verbundJournalArticle.resourcePrimKey)
174 verbundJson = FrontendService.json.parseAsJson(verbundJsonString)
175 laufendenummer = getValueForLanguage('laufendenummer', languageId, verbundJson, "first")
176 coverImg = getValueForLanguage('mediumDMTKASDEMEDIUM', languageId, verbundJson, "first")
177 />
178 <@debugJsonString verbundJsonString "ADT_KASDE_DYNAMIC_INTRO-verbundJournalArticle" />
179 <#assign meta = meta + { "laufendenummer": laufendenummer } >
180
181 <#if coverImg?has_content && coverImg.url?has_content >
182 <#assign meta = meta + { "coverImg": coverImg.url } >
183 </#if>
184 </#if>
185
186
187 <#if meta?has_content>
188 <#assign data = data + {"meta": meta } >
189 </#if>
190
191 </#if>
192 <#-- PUBLIKATIONEN DETAIL END -->
193
194
195 <#-- VERANSTALTUNGEN DETAIL -->
196 <#if layouttpl?contains("LAYOUT_KASDE_VERANSTALTUNGEN_DETAIL")>
197 <#assign
198 friendlyUrl = FrontendService.article.getFriendlyUrl(primaryKey, languageId, groupId)!""
199 languages = entry.getAvailableLanguageIds()
200 links = []
201 />
202 <#if languages?has_content && friendlyUrl?has_content>
203 <#if (languages?size > 1) >
204 <#list languages as language>
205 <#assign
206 defaultLanguage = "de_DE"
207 defaultLocale = FrontendService.language.getLocaleByKey(defaultLanguage)
208 linkLocale = (FrontendService.language.getLocaleByKey(language))!defaultLocale
209 langFriendlyUrl = FrontendService.article.getFriendlyUrl(primaryKey, linkLocale, groupId)
210
211 link = {
212 "key": language!defaultLanguage,
213 "value": linkLocale.getDisplayLanguage(languageId),
214 "url": "/c/portal/update_language?p_l_id=" +
215 layout.plid + "&redirect=" + langFriendlyUrl +
216 "&languageId=" + language
217 }
218 />
219 <#if language == languageId>
220 <#assign link = link + { "selected": "true" } >
221 </#if>
222 <#assign links = links + [link]>
223 </#list>
224 <#assign
225 data = data + {
226 "languageSelect": {
227 "id": "languageSelectRedirect",
228 "name": "languageselectRedirect",
229 "entries": links,
230 "label": languageUtil.get(languageId, "diese.veranstaltung.ist.in.weiteren.sprachen.verfuegbar")
231 }
232 }
233 />
234 </#if>
235 </#if>
236 </#if>
237
238 <#if hasContent('erscheinungsdatum', languageId, json)>
239 <#assign
240 startdate = getValueForLanguage('erscheinungsdatum', languageId, json, "first")
241 meta = meta + { "start": startdate?date.iso, "end": "" }
242 />
243 </#if>
244
245 <#if hasContent('startdatum', languageId, json)>
246 <#assign
247 startdate = getValueForLanguage('startdatum', languageId, json, "first")
248 meta = meta + { "start": startdate?date.iso, "end": "" }
249 />
250 </#if>
251
252 <#if hasValue('einfuehrungText', locale, json)>
253 <#assign data = data + { "einfuehrungText" : getValueForLanguage('einfuehrungText', locale, json, "first") } >
254 <#elseif hasValue(FrontendService.article.getFieldNameByReferenceName(primaryKey, 'einfuehrungText'), locale, json, "first")>
255 <#assign data = data + { "einfuehrungText" : getValueForLanguage(FrontendService.article.getFieldNameByReferenceName(primaryKey, 'einfuehrungText'), locale, json, "first") } >
256 </#if>
257
258 <#if hasContent('endedatum', languageId, json)>
259 <#assign
260 enddate = getValueForLanguage('endedatum', languageId, json, "first")
261 meta = meta + { "end": enddate?date.iso }
262 />
263 </#if>
264
265 <#if hasContent('startzeit', languageId, json)>
266 <#assign
267 startzeit = getValueForLanguage('startzeit', languageId, json, "first")
268 />
269 <#if startzeit?has_content >
270 <#assign meta = meta + { "startzeit": startzeit } />
271 </#if>
272 </#if>
273
274 <#if hasContent('endezeit', languageId, json)>
275 <#assign
276 endezeit = getValueForLanguage('endezeit', languageId, json, "first")
277 meta = meta + { "endezeit": endezeit }
278 />
279 </#if>
280
281 <#if hasContent('ortWCSKASDEORT', languageId, json)>
282 <#assign
283 ortWCSKASDEORT = FrontendService.json.parseAsJson(getValueForLanguage('ortWCSKASDEORT', languageId, json, "first"))
284 ortWCSKASDEORTPrimaryKey = ortWCSKASDEORT.classPK?number
285 ortWCSKASDEORTWebContent = FrontendService.article.getWebcontentByPk(ortWCSKASDEORTPrimaryKey)!""
286 />
287 <#if ortWCSKASDEORTWebContent?has_content >
288 <#assign
289 ortWCSKASDEORTTitle = ortWCSKASDEORTWebContent.getTitle(languageId)!""
290 />
291 <#if ortWCSKASDEORTTitle?has_content >
292 <#assign
293 meta = meta + { "ortWCSKASDEORT": ortWCSKASDEORTTitle }
294 />
295 </#if>
296 </#if>
297 </#if>
298
299
300 <#if hasContent('veranstaltungsnummer', languageId, json)>
301 <#assign
302 verauuid = getValueForLanguage('veranstaltungsnummer', languageId, json, "first")
303 meta = meta + { "verauuid": verauuid }
304 />
305 </#if>
306
307
308 <#if (data.meta)?has_content >
309 <#assign meta = data.meta />
310 </#if>
311
312 <#if !(data.media)?has_content && hasContent('mediumDMTKASDEMEDIUM', languageId, json)>
313 <#assign
314 medium = getValueForLanguage('mediumDMTKASDEMEDIUM', languageId, json, "first")
315 mediaData = getRelatedMediaObject(medium, themeDisplay, languageId, FrontendService, "hd-resolution")
316 />
317 <#assign data = data + { "media": mediaData.url , "meta" : mediaData.meta} >
318
319
320 <#if mediaData.meta?? && mediaData.meta.quelle??>
321 <#assign meta = meta + data.meta + { "quelle": mediaData.meta.quelle } />
322 </#if>
323 </#if>
324
325
326 <#if meta?has_content>
327 <#assign data = data + {"meta": meta } >
328 </#if>
329
330 <#-- END fill meta data -->
331
332 <#if hasContentForSequence('autorenWCSKASDEPERSON', languageId, json)>
333 <#assign
334 journalArticles = getValueForLanguageAnsprechpartner('autorenWCSKASDEPERSON', languageId, json)
335 authors = []
336 />
337 <#list journalArticles as articleString>
338 <#assign article = FrontendService.json.parseAsJson(articleString) />
339 <#if article?has_content && article?is_hash && article.classPK??>
340 <#assign articleDereferenced = FrontendService.person.resolveContactInstanceToPerson(article, languageId)!"" />
341 <#if articleDereferenced?has_content >
342 <#assign
343 author = ""
344 articlePrimaryKey = articleDereferenced.classPK?number
345 articleJsonString = FrontendService.article.getWebcontent(articlePrimaryKey)
346 articleJson = FrontendService.json.parseAsJson(articleJsonString)
347 />
348 <@debugJsonString articleJsonString "ADT_KASDE_DYNAMIC_INTRO-autorenWCSKASDEPERSON" />
349 <#if hasValue('anredetitel', languageId, articleJson)>
350 <#assign author = author + getValueForLanguage('anredetitel', languageId, articleJson, " ") + " ">
351 </#if>
352 <#if hasValue('vorname', languageId, articleJson)>
353 <#assign author = author + getValueForLanguage('vorname', languageId, articleJson, " ") + " ">
354 </#if>
355 <#if hasValue('nachname', languageId, articleJson)>
356 <#assign author = author + getValueForLanguage('nachname', languageId, articleJson, " ") + " ">
357 </#if>
358
359 <#attempt>
360 <#assign href = FrontendService.article.getFriendlyUrl(articlePrimaryKey, languageId, groupId)!"#" >
361 <#recover>
362 <#assign href = "#" >
363 </#attempt>
364 <#if href?has_content && href != "#" && href != "/_404">
365 <#assign author = '<a href="' + href + '">' + author?trim + '</a>'>
366 </#if>
367
368 <#assign authors = authors + [author?trim]>
369 </#if>
370 </#if>
371 </#list>
372 <#if authors?has_content>
373 <#assign data = data + { "author": authors?join(", ") } >
374 </#if>
375 </#if>
376
377 <#if layouttpl?contains("LAYOUT_KASDE_VERANSTALTUNGEN_DETAIL") >
378 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "VERANSTALTUNGSTYP")! >
379 <#if categories?has_content && categories[0]?has_content >
380 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } >
381 </#if>
382
383 <#if hasContent('ausgebucht', languageId, json)>
384 <#assign data = data + { "ausgebucht" : getValueForLanguage('ausgebucht', languageId, json, "first") }>
385 </#if>
386
387 <#if hasContent('storniert', languageId, json)>
388 <#assign data = data + { "storniert" : getValueForLanguage('storniert', languageId, json, "first") }>
389 </#if>
390
391 <#elseif layouttpl?contains("LAYOUT_KASDE_PUBLIKATIONEN_DETAIL") >
392 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "PUBLIKATIONSREIHE")! >
393 <#if categories?has_content && categories[0]?has_content >
394 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } >
395 </#if>
396 <#else>
397 <#assign categories = FrontendService.category.getCategoriesToArticle(primaryKey, "THEMA")! >
398 <#if categories?has_content && categories[0]?has_content >
399 <#assign data = data + { "category": categories[0].getTitle(languageId,true)! } >
400 </#if>
401 </#if>
402
403
404 <#assign
405 languages = []
406 />
407
408 <#attempt>
409 <#if json["document_pdfDMTBASICDOCUMENT"]?? >
410 <#list json["document_pdfDMTBASICDOCUMENT"]?keys as pdf_language>
411 <#if pdf_language?has_content >
412 <#assign
413 docRefJson = getValueForLanguage('document_pdfDMTBASICDOCUMENT', pdf_language, json, "first")
414 docRef = FrontendService.json.parseAsJson(docRefJson)
415 />
416 <#if docRef?is_hash && pdf_language != languageId >
417 <#assign
418 lang = FrontendService.language.getLocaleByKey(pdf_language)!""
419 docGroupId = docRef["groupId"]?number
420 docUuid = docRef["uuid"]
421 dMTJsonObject = FrontendService.media.getDMTJsonObject( docGroupId, docUuid, locale )
422 dMTLink = FrontendService.media.getLinkToDMT( dMTJsonObject )
423 />
424 <#if lang?has_content>
425 <#assign
426 languages = languages + [
427 {
428 "key": pdf_language,
429 "value": FrontendService.language.getLocaleByKey(pdf_language).getDisplayLanguage(),
430 "url": dMTLink
431 }]
432 />
433 </#if>
434 </#if>
435 </#if>
436 </#list>
437 </#if>
438 <#recover>
439 </#attempt>
440
441 <#if (languages?size > 0)>
442 <#attempt>
443 <#assign
444 data = data + { "languageSelect": {
445 "id": "languageSelect",
446 "name": "languageselect",
447 "entries": languages,
448 "documents": "",
449 "button": "true"
450 }}
451 />
452 <#recover>
453 </#attempt>
454 </#if>
455
456 <@PMIntro "ADT_KASDE_DYNAMIC_INTRO" data AMMetadata AMDatetime "bottom" />
457 ${FrontendService.article.getEditArticleHtml(primaryKey, themeDisplay)}
458
459 <#if data.meta.laufendenummer?has_content !isACColorScheme() && !isVLCColorScheme() && !isDPMColorScheme()>
460 <div>
461 <div id="publicationVerbundPagination">
462 <@AMPublicationCarousel data.meta.laufendenummer data.meta.date data.meta.coverImg />
463 </div>
464 </div>
465 </#if>
466
467<#elseif (editmode?? && editmode)>
468 <@errorMessage languageUtil.get(locale, "kein.journalArticle.gefunden") "ADT_KASDE_DYNAMIC_INTRO" layouttpl currentUrl />
469</#if>
On the following page the Konrad-Adenauer-Stiftung's (KAS) office in Johannesburg compiled its own reports and analysis as well as further information on the 2014 South African General Elections, which took place on 7 May.
On the occasion of the fifth free and democratic elections since the end of apartheid, 31.4 million South Africans were entitled to vote for a new national parliament as well as nine provincial legislatures. The South African Independent Electoral Commission (IEC) counted 25.4 million registered voters, who accounted for 80% of South Africans entitled to vote. Eventually, 18.7 million (almost 60% of the voting age population) made use of their right to vote. For the first time, even South African expats abroad were allowed to register for voting at the country’s foreign missions.
On election day the KAS office in Johannesburg sent its own observer mission to a couple of voting stations in and around Johannesburg. You will find all relevant information of KAS and further reading to the General Election from 7 May 2014 on this page.
KAS Reports on 20 Years of Democracy and the 2014 South African General Elections (German)
Parlamentswahl in Südafrika. ANC siegt deutlich, aber mit Stimmverlusten
Interview: "Südafrika ist zurzeit politisch sehr aktiv"
FAQ – Allgemeine Wahlen 2014 in Südafrika
SUMMARY OF THE PARTIES’ ELECTION MANIFESTOS
Das Wahlprogramm des African National Congress (ANC)
Das Wahlprogramm des Congress of the People (COPE)
Das Wahlprogramm der Democratic Alliance (DA)
Das Wahlprogramm der Economic Freedom Fighters (EFF)
Das Wahlprogramm der Inkatha Freedom Party (IFP)
Research done by KAS partner Democracy Development Programme (DDP) on the 2014 General Elections
DDP Election Observation Report
DDP Report on political dialogues
DDP Radio Reports on the 2014 General Elections
Media reporting:
Opposition parties form coalition in bid to oust ANC (Mail & Guardian, 17/12/2013)
Expats can now vote in SA elections abroad (Mail & Guardian, 07/01/2014)
Zuma: The ANC will rule till Jesus comes back (Mail & Guardian, 08/01/2014)
EFF to court Numsa over united workers’ front (BDlive, 10/01/2014)
ANC's support down to 53% among eligible voters - Ipsos (Politicsweb, 11/01/2014)
Zuma launches new ANC manifesto (Mail & Guardian, 11/01/2014)
Elections 2014: Will it be ANC vs EFF? (City Press, 12/01/2014)
ANC takes a step back to appease labour allies (BDlive, 13/01/2014)
Party’s election manifesto highlights (Daily News, 13/01/2014)
The Big Read: ANC is incapable of giving itself the makeover it needs (The Times, 14/01/2014)
Zuma will cost ANC dearly (Cape Times, 15/01/2014)
Agang denies allegations of internal crisis (BDlive, 16/01/2014)
Independent Democrats to cease to exist this year (BDlive, 16/01/2014)
Struggle will not be forgotten come the election (BDlive, 22/01/2014)
Wither Ramphele's dream (The Times, 22/01/2014)
Hani resignation raises doubts about Agang SA (BDlive, 23/01/2014)
Zuma learns that friendship is fleeting (The Times, 23/01/2014)
DA keeps secret spot open for Agang’s Ramphele (BDlive, 27/01/2014)
ANC graft dilemma (The Citizen, 28/01/2014)
Mamphela Ramphele joins DA as presidential candidate (BDlive, 28/01/2014)
Agang will be integrated into the DA, says Zille (Mail & Guardian, 28/01/2014)
Ramphele changes the face of SA’s elections (BDlive, 29/01/2014)
Agang anger over Ramphele ‘betrayal’ (The Star, The Mercury, Sapa, 29/01/2014)
Malema’s future in doubt as SARS wins order (BDlive, 11/02/2014)
Vanessa Hani joins COPE after leaving Agang (BDlive, 11/02/2014)
Outcome of final registration weekend (Independent Electoral Commission, 11/02/2014)
Bricks fly as ANC, police clash during DA protest (Mail and Guardian, 12/02/2014)
'ANC fears NFP' (SABC, 16/02/2014)
Modest Zille puts ANC share of votes at 60% (BDlive, 17/02/2014)
DA battles an old stereotype (BDlive, 17/02/2014)
Prosperity is within our grasp (iolnews, 17/02/2014)
Traditional leaders an important base for ANC (BDlive, 18/02/2014)
Zuma comes in for stick from opposition on protests quote (BDlive, 19/02/2014)
Zuma promises 'socioeconomic' changes after election (Mail and Guardian, 20/02/2014)
‘Bring it on’ says Shilowa to Lekota (The Cizizen, 25/02/2014)
EFF frenzy a case of media hype over substance (BDlive, 05/03/2014)
Malema tackles IEC over poll fees (Pretoria News, 05/03/2014)
Decline of a weakened ANC is not inevitable (BDlive, 07/03/2014)
Leaks, lovers and in-laws: The ANC gets personal with its MPs (Mail & Guardian, 07/03/2014)
Tembisa: Mirror of a nation's bias (Mail & Guardian, 07/03/2014)
ANC no longer the party of change (Mail & Guardian, 07/03/2014)
Agang SA launches ‘citizens’ manifesto’ (BDlive, 09/03/2014)
Manifestos: Power must be devolved to citizens (Mail & Guardian, 09/03/2014)
COPE election manifesto calls for ‘inclusive approach’ (BDlive, 09/03/2014)
POLITICAL WEEK AHEAD: Wednesday deadline for candidate lists to IEC (BDlive, 10/03/2014)
Zuma packs electoral list with loyalists (BDlive, 12/03/2014)
‘Reluctant politician’, stalwart minister bow out (BDlive, 12/03/2014)
Agang's long-term plan to build a winning country (Mail & Guardian, 14/03/2014)
Secret party funding fuels electorate’s suspicion (BDlive, 18/03/2014)
Yet again ANC has splinters under its nails (BDlive, 19/03/2014)
Story of the past 20 years is the story of all of us (BDlive, 19/03/2014)
'Beware of backlash over Nkandla’ (The Star, 24/03/2014)
SABC chair openly shows her political colours (The Citizen, 24/03/2014)
ANC woes will benefit us – NFP (The Citizen, 24/03/2014)
Mbeki says Nkandla findings ‘worrying’ (The Citizen, 26/03/2014)
Opposition parties say IEC chief must resign within seven days (BDlive, 02/04/2014)
Give us enough votes to change Constitution – Zuma (The Citizen, 10/04/2014)
UDM’s Holomisa makes most of Amcu’s rise (BDlive, 17/04/2014)
Million born-frees won’t vote on May 7 (Cape Times, 22/04/2014)
Nkandla probe stalls with ANC bid to kick it into the next parliament (BDlive, 29/04/2014)
Expats to start voting (Cape Times, 29/04/2014)
Holomisa looking to double UDM seats (BDlive, 29/04/2014)
IEC’s head might roll soon (The Citizen, 30/04/2014)
Promises, threats and posturing in poll climax (BDlive, 05/05/2014)
POLITICAL WEEK AHEAD: South Africans get their moment to decide (BDlive, 05/05/14)
What will be wages of sins of incumbency? (BDlive, 05/05/14)
Identity politics still likely to dominate poll (The Citizen, 05/05/14)
Zuma discloses shocker (The Citizen, 06/05/14)
Practical, fun apps to help you v
ote (The Citizen, 06/05/14)
Why do you deserve my vote? (BDlive, 02/05/14)
Voter turnout win for South Africa (BDlive, 08/05/14)
Diplomats restricted from observing elections (BDlive, 08/05/14)
Murder at the polling station (Daily News, 08/05/2014)
Dumped ballot papers in Lynnwood to be investigated (Mail & Guardian, 08/05/2014)
Election 2014 losses could signal death knell for smaller parties (BDlive, 09/05/2014)
Economy ‘back on centre stage’ (BDlive, 09/05/2014)
ANC vows to quickly restore investor confidence (BDlive, 12/05/2014)
Mazibuko exit may see Zille back in Parliament (BDlive, 12/05/2014)
ANC has work to do in metros for 2016 local polls (BDlive, 12/05/2014)
Elections 2014 ‘was efficient’ (The Citizen, 13/05/2014)
Differences among ruling party’s allies re-emerge after big victory (BDlive, 13/05/2014)
Mazibuko shunned DA ‘death match’ (BDlive, 13/05/2014)
Zille absence diminishes Parliament, says Leon (BDlive, 14/05/2014)
ANC does not need EFF as partner (The Citizen, 14/05/2014)
Long memories of apartheid help to forget ANC sins (BDlive, 15/05/2014)
Numsa ‘not turning back’ on new party (BDlive, 15/05/2014)
Move over Maimane, Gana's here (Mail & Guardian, 16/05/2014)
Is the EFF the calm before a real leftist storm? (Mail & Guardian, 16/05/2014)
Agang to implode (Times Live, 19/05/2014)
Election fears guide ANC pick of premiers (Times Live, 21/05/2014)
ANC elects woman to lead council of provinces (BDlive, 23/05/2014)
NEWS ANALYSIS: Will Economic Freedom Fighters MPs stand up to enemy fire (BDlive, 23/05/2014)
Poor believe grants tied to party not state (BDlive, 23/05/2014)
Executive decision: Zuma's new cabinet (Mail & Guardian, 25/05/2014)
Zuma reshuffles economics cluster, to mixed reaction (Mail & Guaradian, 26/05/2014)
Opposition worries about bloated Cabinet (BDlive, 26/05/2014)
Tough months ahead for SA’s phalanx of rookie MPs (BDlive, 28/05/2014)
Zuma appoints Ramaphosa to planning role (BDlive, 03/06/2014)
NFP head ‘co-opted by ANC to defeat IFP’ (BDlive, 06/06/2014)
Agang SA leader Mamphela Ramphele leaves party politics (BDlive, 08/07/2014)
Links to the Election Manifestos of the South African political parties:
Parties represented in the 25th national parliament since 2009.
African National Congress (ANC)
The ruling ANC forms the so called Tripartite Alliance in government with the South African Communist Party (SACP) and the Congress of South African Trade Unions (COSATU)
Election Manifesto 2014 (short version)
Democratic Alliance (DA)
Lists of candidates of the DA (Democratic Alliance, 25.01.2014)
DA provincial premiers candidates:
Western Cape: Helen Zille
Gauteng: Mmusi Maimane
Northern Cape: Andrew Louw
Free State: Patricia Kopane
North West: Chris Hattingh
KwaZulu-Natal: Sizwe Mchunu
Eastern Cape: Athol Trollip
Limpopo: Langa Bodlani
Mpumalanga: Anthony Benadie
Congress of the People (COPE)
Inkatha Freedom Party (IFP)
United Democratic Movement (UDM)
African Christian Democratic Party (ACDP)
United Christian Democratic Party (UCDP)
Freedom Front Plus (FF+)
Minority Front (MF)
Pan Africanist Congress of Azania (PAC)
Azanian People's Organisation (AZAPO)
African People's Convention (APC)
Party newcomers
Agang SA
Economic Freedom Fighters (EFF)
Links to further information:
Preliminary report on the SADCLA Elections Observation Mission in the South African province of KwaZulu-Natal (08/05/2014)
Preliminary statement of the African Union Election Observer Mission (13/05/2014)
news24 reports and data on the 2014 General Elections
Website of the Independent Electoral Commission (IEC) of South Africa
IEC advert call for participation in the 2014 General Elections
The South African Parliamentary Institute (PISA)
Results of the 2014 General Elections in South Africa
(© electionresources.org)
- National Assembly
- Provincial legislatures: Eastern Cape, Free State, Gauteng, KwaZulu-Natal, Limpopo, Mpumalanga, North West, Northern Cape, Western Cape
Results of the 2009 General Elections in South Africa
(© electionresources.org)
- National Assembly
- Provincial legislatures: Eastern Cape, Free State, Gauteng, KwaZulu-Natal, Limpopo, Mpumalanga, North West, Northern Cape, Western Cape