fixed as per review [#158 state:peer-review-requested]

This commit is contained in:
Anna Sobiepanek 2010-12-22 20:49:34 -05:00
Родитель be01c4db82
Коммит f657510891
2 изменённых файлов: 90 добавлений и 106 удалений

Просмотреть файл

@ -1,7 +1,7 @@
<!DOCTYPE html>
<html>
<head>
<title>Popcorn WebPage Plug-in Demo</title>
<title>Popcorn Wikipedia Plug-in Demo</title>
<script src="../../popcorn.js"></script>
<script src="popcorn.wikipedia.js"></script>
@ -28,7 +28,7 @@
</script>
</head>
<body>
<h1 id="qunit-header">Popcorn WebPage Plug-in Demo</h1>
<h1 id="qunit-header">Popcorn Wikipedia Plug-in Demo</h1>
<p> A Wiki article about Cape Town will appear at 0 seconds and disappear at 10 seconds.</p>
<p> A Wiki article about Sao Paolo will appear at 7 seconds and disappear at 20 seconds.</p>
<div>

Просмотреть файл

@ -9,11 +9,11 @@ var wikiCallback;
* Wikipedia popcorn plug-in
* Displays a wikipedia aricle in the target specified by the user by using
* new DOM element instead overwriting them
* Options parameter will need a start, end, target, lang, src, and numOfWords.
* Options parameter will need a start, end, target, lang, src, title and numOfWords.
* -Start is the time that you want this plug-in to execute
* -End is the time that you want this plug-in to stop executing
* -Target is the id of the document element that the iframe needs to be attached to,
* this target element must exist on the DOM
* -Target is the id of the document element that the text from the article needs to be
* attached to, this target element must exist on the DOM
* -Lang (optional, defaults to english) is the language in which the article is in.
* -Src is the url of the article
* -Title (optional) is the title of the article
@ -27,114 +27,98 @@ var wikiCallback;
start: 5, // seconds
end: 15, // seconds
src: 'http://en.wikipedia.org/wiki/Cape_Town',
target: 'webpagediv'
target: 'wikidiv'
} )
*
*/
Popcorn.plugin( "wikipedia" , (function(){
Popcorn.plugin( "wikipedia" , {
return {
/**
* @member wikipedia
* The setup function will get all of the needed
* items in place before the start function is called.
* This includes getting data from wikipedia, if the data
* is not received and processed before start is called start
* will not do anything
*/
_setup : function( options ) {
// declare needed variables
// get a guid to use for the global wikicallback function
var _text, _guid = Popcorn.guid();
/**
* @member wikipedia
* The setup function will get all of the needed
* items in place before the start function is called.
* This includes getting data from wikipedia, if the data
* is not received and processed before start is called start
* will not do anything
*/
_setup : function( options ) {
// declare needed variables
// get a guid to use for the global wikicallback function
var _text, _guid = Popcorn.guid();
// if the user didn't specify a language default to english
if (typeof options.lang === 'undefined') { options.lang ="en"; }
// if the user didn't specify number of words to use default to 200
options.numOfWords = options.numOfWords || 200;
// replace the user specified target with the actual DOM element
options.target = document.getElementById( options.target );
// wiki global callback function with a unique id
// function gets the needed information from wikipedia
// and stores it by appending values to the options object
window["wikiCallback"+ _guid] = function (data) {
options._link = document.createElement('a');
options._link.setAttribute('href', options.src);
options._link.setAttribute('target', '_blank');
// add the title of the article to the link
options._link.innerHTML = data.parse.displaytitle;
// get the content of the wiki article
options._desc = document.createElement('p');
// get the article text and remove any special characters
_text = data.parse.text["*"].substr(data.parse.text["*"].indexOf('<p>'));
_text = _text.replace(/((<(.|\n)+?>)|(\((.*?)\) )|(\[(.*?)\]))/g, "");
options._desc.innerHTML = _text.substr(0, options.numOfWords ) + " ...";
// if the user didn't specify a language default to english
if (typeof options.lang === 'undefined') { options.lang ="en"; }
// if the user didn't specify number of words to use default to 200
options.numOfWords = options.numOfWords || 200;
// replace the user specified target with the actual DOM element
options.target = document.getElementById( options.target );
// wiki global callback function with a unique id
// function gets the needed information from wikipedia
// and stores it by appending values to the options object
window["wikiCallback"+ _guid] = function (data) {
options._link = document.createElement('a');
options._link.setAttribute('href', options.src);
options._link.setAttribute('target', '_blank');
// add the title of the article to the link
options._link.innerHTML = data.parse.displaytitle;
// get the content of the wiki article
options._desc = document.createElement('p');
// get the article text and remove any special characters
_text = data.parse.text["*"].substr(data.parse.text["*"].indexOf('<p>'));
_text = _text.replace(/((<(.|\n)+?>)|(\((.*?)\) )|(\[(.*?)\]))/g, "");
options._desc.innerHTML = _text.substr(0, options.numOfWords ) + " ...";
options._fired = true;
};
// get the wiki article on a separate thread
// call the wikiCallback function above once the script is loaded
//setTimeout(function() {
// getJson("http://"+options.lang+".wikipedia.org/w/api.php?action=parse&props=text&page=" + ( options.title || options.src.slice(options.src.lastIndexOf("/")+1)) + "&format=json&callback=wikiCallback"+ _guid);
//}, 500);
// add the script to the DOM
/*var getJson = function(url) {
var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.src = url;
head.insertBefore( script, head.firstChild );
}; */
var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.src = "http://"+options.lang+".wikipedia.org/w/api.php?action=parse&props=text&page=" + ( options.title || options.src.slice(options.src.lastIndexOf("/")+1)) + "&format=json&callback=wikiCallback"+ _guid;
options._fired = true;
};
var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.src = "http://"+options.lang+".wikipedia.org/w/api.php?action=parse&props=text&page=" + ( options.title || options.src.slice(options.src.lastIndexOf("/")+1)) + "&format=json&callback=wikiCallback"+ _guid;
head.insertBefore( script, head.firstChild );
},
/**
* @member wikipedia
* The start function will be executed when the currentTime
* of the video reaches the start time provided by the
* options variable
*/
start: function(event, options){
// dont do anything if the information didn't come back from wiki
var isReady = function () {
if ( !options._fired ) {
setTimeout(function () {
isReady();
}, 13);
} else {
head.insertBefore( script, head.firstChild );
},
/**
* @member wikipedia
* The start function will be executed when the currentTime
* of the video reaches the start time provided by the
* options variable
*/
start: function(event, options){
// dont do anything if the information didn't come back from wiki
var isReady = function () {
if (options._link && options._desc) {
options.target.appendChild(options._link);
options.target.appendChild(options._desc);
options._added = true;
}
}
};
isReady();
},
/**
* @member wikipedia
* The end function will be executed when the currentTime
* of the video reaches the end time provided by the
* options variable
*/
end: function(event, options){
// ensure that the data was actually added to the
// DOM before removal
if (options._added) {
options.target.removeChild(options._link);
options.target.removeChild(options._desc);
}
}
if ( !options._fired ) {
setTimeout(function () {
isReady();
}, 13);
} else {
};
})());
if (options._link && options._desc) {
options.target.appendChild(options._link);
options.target.appendChild(options._desc);
options._added = true;
}
}
};
isReady();
},
/**
* @member wikipedia
* The end function will be executed when the currentTime
* of the video reaches the end time provided by the
* options variable
*/
end: function(event, options){
// ensure that the data was actually added to the
// DOM before removal
if (options._added) {
options.target.removeChild(options._link);
options.target.removeChild(options._desc);
}
}
});
})( Popcorn );