// PLUGIN: tagthisperson
(function ( Popcorn ) {
var peopleArray = [];
// one People object per options.target
var People = function() {
this.name = "";
this.contains = { };
this.toString = function() {
var r = [];
for ( var j in this.contains ) {
if ( this.contains.hasOwnProperty( j ) ) {
r.push( " " + this.contains[ j ] );
}
}
return r.toString();
};
};
/**
* tagthisperson popcorn plug-in
* Adds people's names to an element on the page.
* Options parameter will need a start, end, target, image and person.
* 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
* Person is the name of the person who you want to tag
* Image is the url to the image of the person - optional
* href is the url to the webpage of the person - optional
* Target is the id of the document element that the text needs to be
* attached to, this target element must exist on the DOM
*
* @param {Object} options
*
* Example:
var p = Popcorn('#video')
.tagthisperson({
start: 5, // seconds
end: 15, // seconds
person: '@annasob',
image: 'http://newshour.s3.amazonaws.com/photos%2Fspeeches%2Fguests%2FRichardNSmith_thumbnail.jpg',
href: 'http://annasob.wordpress.com',
target: 'tagdiv'
} )
*
*/
Popcorn.plugin( "tagthisperson" , ( function() {
return {
_setup: function( options ) {
var exists = false,
target = document.getElementById( options.target );
if ( target ) {
// loop through the existing objects to ensure no duplicates
// the idea here is to have one object per unique options.target
for ( var i = 0; i < peopleArray.length; i++ ) {
if ( peopleArray[ i ].name === options.target ) {
options._p = peopleArray[ i ];
exists = true;
break;
}
}
if ( !exists ) {
options._p = new People();
options._p.name = options.target;
peopleArray.push( options._p );
}
}
},
/**
* @member tagthisperson
* 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 ){
options._p.contains[ options.person ] = ( options.image ) ? " " : "" ;
options._p.contains[ options.person ] += ( options.href ) ? " " + options.person + "" : options.person ;
if ( document.getElementById( options.target ) ) {
document.getElementById( options.target ).innerHTML = options._p.toString();
}
},
/**
* @member tagthisperson
* 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 ){
delete options._p.contains[ options.person ];
if ( document.getElementById( options.target ) ) {
document.getElementById( options.target ).innerHTML = options._p.toString();
}
}
};
})(),
{
about:{
name: "Popcorn tagthisperson Plugin",
version: "0.1",
author: "@annasob",
website: "annasob.wordpress.com"
},
options:{
start: {
elem: "input",
type: "number",
label: "Start"
},
end: {
elem: "input",
type: "number",
label: "End"
},
target : "tagthisperson-container",
person: {
elem: "input",
type: "text",
label: "Person's Name",
"default": "Popcorn.js"
},
image: {
elem: "input",
type: "url",
label: "Image URL",
optional: true
},
href: {
elem: "input",
type: "url",
label: "Link",
optional: true
}
}
});
})( Popcorn );