diff --git a/README.md b/README.md index 91343c5..0761720 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ jQuery plugin for easy download of data from Wikipedia about the Wikipedia API u Demo: http://support.suabo.de/opensource/jquery-plugin-wikipedia ## Documentation -[Version 1.0](https://github.com/LauLamanApps/Wikipedia/blob/master/documentation/version%201.0.md) +[Version 1.0](documentation/version%201.0.md) -[Version 2.0](https://github.com/LauLamanApps/Wikipedia/blob/master/documentation/version%202.0.md#version-20) +[Version 2.0.1](documentation/version%202.0.1.md#version-20) diff --git a/documentation/version 2.0.md b/documentation/version 2.0.1.md similarity index 98% rename from documentation/version 2.0.md rename to documentation/version 2.0.1.md index c0e8fee..2bd4097 100644 --- a/documentation/version 2.0.md +++ b/documentation/version 2.0.1.md @@ -1,11 +1,11 @@ -## Version 2.0 +## Version 2.0.1 ## Usage 1- Include the Javascript resources into you pages - + 2- Add a placeholder for the widget to your page diff --git a/js/jquery.wikipedia.2.0.1.js b/js/jquery.wikipedia.2.0.1.js new file mode 100644 index 0000000..f5f6277 --- /dev/null +++ b/js/jquery.wikipedia.2.0.1.js @@ -0,0 +1,199 @@ +/* + * jQuery Plugin - Wikipedia V2.0.1 + * + * todo: add description here + * + * Autor: + * Version 1.0 : Marcel Grolms - www.suabo.de 2013 + * Version 2.0 : Laurens Laman - https://github.com/LauLaman + * + */ +(function($){ + //-- declare var in global scope + window.Wikipedia = {}; + var Wiki = { + settings: { + showTitle: false, + showInfo: true, + maxThumbnails: 0, + cutFirstInfoTableRows: 0, + maxInfoTableRows: 0, + thumbMaxWidth : '180px', + thumbMaxHeight: '180px', + locale: 'nl', + removeIPA: true, + descriptionLinks: true, + redirect: true, + elements: { + loader : '
Loading...
', + title : ['
', '
'], + description : ['
', '
'], + logo : [''], + gallery: { + parent: [''], + child: ['
  • ', '
  • '], + } + } + }, + article: { + logo: false, + gallery:[], + info:[] + } + }; + + Wikipedia = { + strRemove: function(theTarget, theString) { + return $("
    ").append( + $(theTarget, theString).remove().end() + ).html(); + }, + Get: function(wikipediaPage, options, callback){ + //check if pagetitle is set + if(wikipediaPage == undefined) { + console.log('Kein Wikipedia Suchtitel!Keine Abfrage gestartet!'); + return; + } + if(options != undefined) { + //we got more options + $.extend(Wiki.settings, options); + } + Wiki.article = { + gallery:[], + info:[] + }; + + $.getJSON('http://'+Wiki.settings.locale+'.wikipedia.org/w/api.php?action=parse&format=json&callback=?', {page:wikipediaPage, prop:'text|images', uselang: Wiki.settings.locale}, function(parsedata) { + //-- check if response returns error + if (typeof parsedata.error !== "undefined") { + Wiki.article.title = parsedata.error.code + Wiki.article.description = parsedata.error.info; + } else { + var data = $(parsedata.parse.text["*"]).wrap('
    ').parent(); + //-- is this a rediredct page? + if (parsedata.parse.text["*"].substring(0, 3) == '

    ' || parsedata.parse.text["*"].substring(0, 25) == '

    ') { + //-- is there only 1 redirection? + if ($(data).find('ul').first().find('li').length == 1 && Wiki.settings.redirect) { + var wikipediaPage = $(data).find('a').first().attr('href'); + //-- extract page from link + if (parsedata.parse.text["*"].substring(0, 25) == '
    ') { + wikipediaPage = wikipediaPage.split('title='); + wikipediaPage = wikipediaPage[wikipediaPage.length - 1].split('&'); + wikipediaPage = wikipediaPage[0]; + } else { + wikipediaPage = wikipediaPage.split('/'); + wikipediaPage = wikipediaPage[wikipediaPage.length - 1]; + } + Wikipedia.Get(wikipediaPage, options, callback); + callback = null; //-- prevent callback from firing twice + } + + Wiki.article.description = Wikipedia.strRemove("sup", $(data).find('p').first()) + "
    " + Wikipedia.strRemove("sup", $(data).find('ul').first()); + + } else { + Wiki.article.title = $(data).find('.infobox tr:first-child th').text(); + if (typeof $(data).find('.infobox .image img').attr('src') !== "undefined") { + Wiki.article.logo = 'http:' + $(data).find('.infobox .image img').attr('src'); + } else { + Wiki.article.logo = false; + } + Wiki.article.ipa = $(data).find('.IPA').text(); + Wiki.article.description = $(data).find('p').first(); + //-- remove superscript text + Wiki.article.description = Wikipedia.strRemove("sup", Wiki.article.description); + if (Wiki.settings.removeIPA) { + Wiki.article.description = Wikipedia.strRemove(".IPA", Wiki.article.description); + Wiki.article.description = Wiki.article.description.replace('[]', ''); + } + if (!Wiki.settings.descriptionLinks) { + Wiki.article.description = $(Wiki.article.description).text(); + } + $.each(data.find('.thumb a.image img'), function (index, image) { + Wiki.article.gallery.push('http:' + $(image).attr('src')) + }); + + $.each($(data).find('table.infobox tr'), function (index, element) { + if ($(element).has('td')) { + Wiki.article.info.push({ + name: $(element).find('th').text(), + info: $(element).find('td').text() + }); + } + }); + } + } + + if (typeof callback == 'function') { // make sure the callback is a function + callback.call(this); // brings the scope to the callback + } else { + return Wiki.article; + } + }); + } + }; + + $.fn.Wikipedia = function(wikipediaPage, options){ + var wikiContainer = this; + wikiContainer.html(''); + wikiContainer.append(Wiki.settings.elements.loader); + if (typeof options.locale !== "undefined" && options.locale.indexOf('_') > -1) { + options.locale = options.locale.substr(0, options.locale.length - (options.locale.indexOf('_')+1)); + } + Wikipedia.Get(wikipediaPage, options, function(){ + wikiContainer.html(''); + if (Wiki.settings.showTitle) { + wikiContainer.append(Wiki.settings.elements.title[0]+Wiki.article.title+Wiki.settings.elements.title[1]); + } + + wikiContainer.append(Wiki.settings.elements.description[0]+Wiki.article.description+Wiki.settings.elements.description[1]); + if (Wiki.settings.descriptionLinks) { + $.each($(wikiContainer).find('.wikipediaDescription a'), function(index, element) { + var href = $(element).attr('href'); + console.log(element); + if(href.indexOf("#") >= 0){ + //-- remove anchor + $(element).parent('li').remove(); + } else { + //-- is the link like index.php?title= + if (href.indexOf("php") >= 0){ + //-- check if page exist + if ($(element).hasClass('new')){ + $(element).replaceWith($(element).text()); + } else { + href = href.split('title='); + href = href[href.length-1].split('&'); + href = href[0]; + } + } else { + href = href.split('/'); + href = href[href.length-1]; + } + if (href) { + href = 'javascript:$(\''+wikiContainer.selector+'\').Wikipedia(\''+href+'\');'; + $(element).attr('href', href); + } + } + + }); + } + + if (Wiki.article.logo && Wiki.article.logo) { + wikiContainer.append(Wiki.settings.elements.logo[0]+''+Wiki.settings.elements.logo[1]); + } + + if (Wiki.settings.maxThumbnails > 0 && Wiki.article.gallery.length > 0) { + var data = ''; + $.each(Wiki.article.gallery, function(index, image){ + data += Wiki.settings.elements.gallery.child[0]+''+ Wiki.settings.elements.gallery.child[1]; + if ((index+1) >= Wiki.settings.maxThumbnails) { + return false; + } + }); + $(data).find('img').css({'width': 'auto', 'height': 'auto', 'max-width': Wiki.settings.thumbMaxWidth, 'max-height': Wiki.settings.thumbMaxHeight}).wrap('
  • ') + wikiContainer.append(Wiki.settings.elements.gallery.parent[0]+data+Wiki.settings.elements.gallery.parent[1]); + } + }); + } + + +})(jQuery); diff --git a/js/jquery.wikipedia.2.0.js b/js/jquery.wikipedia.2.0.js deleted file mode 100644 index 4f159e8..0000000 --- a/js/jquery.wikipedia.2.0.js +++ /dev/null @@ -1,190 +0,0 @@ -/* - * jQuery Plugin - Wikipedia V2.0 - * - * todo: add description here - * - * Autor: - * Version 1.0 : Marcel Grolms - www.suabo.de 2013 - * Version 2.0 : Laurens Laman - https://github.com/LauLaman - * - */ -(function($){ - //-- declare var in global scope - window.Wikipedia = {}; - var Wiki = { - settings: { - showTitle: false, - showInfo: true, - maxThumbnails: 0, - cutFirstInfoTableRows: 0, - maxInfoTableRows: 0, - thumbMaxWidth : '180px', - thumbMaxHeight: '180px', - locale: 'nl', - removeIPA: true, - descriptionLinks: true, - redirect: true, - elements: { - loader : '
    Loading...
    ', - title : ['
    ', '
    '], - description : ['
    ', '
    '], - logo : [''], - gallery: { - parent: ['
      ', '
    '], - child: ['
  • ', '
  • '], - } - } - }, - article: { - logo: false, - gallery:[], - info:[] - } - }; - - Wikipedia = { - strRemove: function(theTarget, theString) { - return $("
    ").append( - $(theTarget, theString).remove().end() - ).html(); - }, - Get: function(wikipediaPage, options, callback){ - //check if pagetitle is set - if(wikipediaPage == undefined) { - console.log('Kein Wikipedia Suchtitel!Keine Abfrage gestartet!'); - return; - } - if(options != undefined) { - //we got more options - $.extend(Wiki.settings, options); - } - Wiki.article = { - gallery:[], - info:[] - }; - - $.getJSON('http://'+Wiki.settings.locale+'.wikipedia.org/w/api.php?action=parse&format=json&callback=?', {page:wikipediaPage, prop:'text|images', uselang: Wiki.settings.locale}, function(parsedata) { - var data = $(parsedata.parse.text["*"]).wrap('
    ').parent(); - //-- is this a rediredct page? - if(parsedata.parse.text["*"].substring(0,3) == '

    ' || parsedata.parse.text["*"].substring(0,25) == '

    ') { - //-- is there only 1 redirection? - if ($(data).find('ul').first().find('li').length==1 && Wiki.settings.redirect) { - var wikipediaPage = $(data).find('a').first().attr('href'); - //-- extract page from link - if (parsedata.parse.text["*"].substring(0,25) == '
    ') { - wikipediaPage = wikipediaPage.split('title='); - wikipediaPage = wikipediaPage[wikipediaPage.length-1].split('&'); - wikipediaPage = wikipediaPage[0]; - } else { - wikipediaPage = wikipediaPage.split('/'); - wikipediaPage = wikipediaPage[wikipediaPage.length-1]; - } - Wikipedia.Get(wikipediaPage, options, callback); - callback = null; //-- prevent callback from firing twice - } - - Wiki.article.description = Wikipedia.strRemove("sup", $(data).find('p').first()) + "
    "+ Wikipedia.strRemove("sup", $(data).find('ul').first()); - - } else { - Wiki.article.title = $(data).find('.infobox tr:first-child th').text(); - if (typeof $(data).find('.infobox .image img').attr('src') !== "undefined") { - Wiki.article.logo = 'http:'+ $(data).find('.infobox .image img').attr('src'); - } else { - Wiki.article.logo = false; - } - Wiki.article.ipa = $(data).find('.IPA').text(); - Wiki.article.description = $(data).find('p').first(); - //-- remove superscript text - Wiki.article.description = Wikipedia.strRemove("sup", Wiki.article.description); - if (Wiki.settings.removeIPA) { - Wiki.article.description = Wikipedia.strRemove(".IPA", Wiki.article.description); - Wiki.article.description = Wiki.article.description.replace('[]', ''); - } - if (!Wiki.settings.descriptionLinks) { - Wiki.article.description = $(Wiki.article.description).text(); - } - $.each(data.find('.thumb a.image img'), function(index, image){ - Wiki.article.gallery.push('http:'+$(image).attr('src')) - }); - - $.each($(data).find('table.infobox tr'), function(index, element) { - if($(element).has('td')){ - Wiki.article.info.push({ - name: $(element).find('th').text(), - info: $(element).find('td').text() - }); - } - }); - } - - if (typeof callback == 'function') { // make sure the callback is a function - callback.call(this); // brings the scope to the callback - } else{ - return Wiki.article; - } - }); - } - }; - - $.fn.Wikipedia = function(wikipediaPage, options){ - var wikiContainer = this; - wikiContainer.html(''); - wikiContainer.append(Wiki.settings.elements.loader); - Wikipedia.Get(wikipediaPage, options, function(){ - wikiContainer.html(''); - if(Wiki.settings.showTitle) { - wikiContainer.append(Wiki.settings.elements.title[0]+Wiki.article.title+Wiki.settings.elements.title[1]); - } - - wikiContainer.append(Wiki.settings.elements.description[0]+Wiki.article.description+Wiki.settings.elements.description[1]); - if (Wiki.settings.descriptionLinks) { - $.each($(wikiContainer).find('.wikipediaDescription a'), function(index, element) { - var href = $(element).attr('href'); - console.log(element); - if(href.indexOf("#") >= 0){ - //-- remove anchor - $(element).parent('li').remove(); - } else { - //-- is the link like index.php?title= - if(href.indexOf("php") >= 0){ - //-- check if page exist - if ($(element).hasClass('new')){ - $(element).replaceWith($(element).text()); - } else { - href = href.split('title='); - href = href[href.length-1].split('&'); - href = href[0]; - } - } else { - href = href.split('/'); - href = href[href.length-1]; - } - if (href) { - href = 'javascript:$(\''+wikiContainer.selector+'\').Wikipedia(\''+href+'\');'; - $(element).attr('href', href); - } - } - - }); - } - - if (Wiki.article.logo && Wiki.article.logo) { - wikiContainer.append(Wiki.settings.elements.logo[0]+''+Wiki.settings.elements.logo[1]); - } - - if (Wiki.settings.maxThumbnails > 0 && Wiki.article.gallery.length > 0) { - var data = ''; - $.each(Wiki.article.gallery, function(index, image){ - data += Wiki.settings.elements.gallery.child[0]+''+ Wiki.settings.elements.gallery.child[1]; - if ((index+1) >= Wiki.settings.maxThumbnails) { - return false; - } - }); - $(data).find('img').css({'width': 'auto', 'height': 'auto', 'max-width': Wiki.settings.thumbMaxWidth, 'max-height': Wiki.settings.thumbMaxHeight}).wrap('
  • ') - wikiContainer.append(Wiki.settings.elements.gallery.parent[0]+data+Wiki.settings.elements.gallery.parent[1]); - } - }); - } - - -})(jQuery);