User:Seb35/ScreenViewer/Code
Appearance
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<!-- License WTFPL Seb35 - version 5.0 (November 7, 2011)-->
<!-- To test, read (in French) http://fr.wikipedia.org/wiki/Utilisateur:Seb35/Diaporama -->
<head>
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.8/themes/base/jquery-ui.css" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.8/jquery-ui.min.js"></script>
<!--<link rel="stylesheet" type="text/css" href="jquery-ui.css" />
<script type="text/javascript" src="jquery-1.4.4.js"></script>
<script type="text/javascript" src="jquery-ui.min.js"></script>-->
<style type="text/css">
body { background-color:black; padding:0; margin:0; overflow:hidden; overflow-y:hidden; overflow-x:hidden; }
.screen { position:absolute; }
.status-screen { position:absolute; top:0px; width:3px; height:3px; border: 1px solid; }
#fadeouttime-plus, #fadeouttime-minus, #fadeintime-plus, #fadeintime-minus, #displaytime-plus, #displaytime-minus {
padding-bottom: 0.2em;
padding-left: 0.6em;
padding-right: 0.6em;
padding-top: 0.2em;
}
#nbajax {
font-size:5px;
color:white;
position:absolute;
top: -2px;
left: 0px;
}
</style>
<script type="text/javascript">
//////////////////////////////////////////////////// DEFINITION OF CONSTANTS ///////////////////////////////////////////////////////////////////
const wikilink = '\\[\\[(.*)\\]\\]';
const regex_wikilink = new RegExp( '^' + wikilink + '$' );
const dbwikisites = { 'wikimediafoundation': { sites: {
// Per-language projects
'w': { sublanguage:true, name: 'wikipedia' },
'wikt': { sublanguage:true, name: 'wiktionary' },
's': { sublanguage:true, name: 'wikisource' },
'q': { sublanguage:true, name: 'wikiquote' },
'n': { sublanguage:true, name: 'wikinews' },
'b': { sublanguage:true, name: 'wikibooks' },
'v': { sublanguage:true, name: 'wikiversity' },
// Multilingual projects
'species': { language: 'en', name: 'species.wikimedia', https:'species' },
'commons': { language: 'en', name: 'commons.wikimedia', https:'commons' },
'oldwikisource': { language: 'en', name: 'wikisource' },
'betawikiversity': { language: 'en', name: 'beta.wikiversity', https:'betawikiversity' },
'incubator': { language: 'en', name: 'incubator.wikimedia', https:'incubator' },
// Redirects of per-language projects
'wiktionary': 'wikt:en',
'wikinews': 'n:en',
'wikiquote': 'q:en',
'wikisource': 's:en',
'wikipedia': 'w:en',
'wikibooks': 'b:en',
'wikiversity': 'b:en',
// Unique sites
'meta': { language: 'en', name: 'meta.wikimedia' },
'outreach': { language: 'en', name: 'outreach.wikimedia' },
'nost': { language: 'en', name: 'nostalgia.wikimedia' },
'tenwiki': { language: 'en', name: 'ten.wikipedia' },
'testwiki': { language: 'en', name: 'test.wikipedia' },
'wn2005': { language: 'en', name: 'wikimania2005.wikimedia' },
'wm2006': { language: 'en', name: 'wikimania2006.wikimedia' },
'wm2007': { language: 'en', name: 'wikimania2007.wikimedia' },
'wm2008': { language: 'en', name: 'wikimania2008.wikimedia' },
'wm2009': { language: 'en', name: 'wikimania2009.wikimedia' },
'wm2010': { language: 'en', name: 'wikimania2010.wikimedia' },
'wm2011': { language: 'en', name: 'wikimania2011.wikimedia' },
'wm2012': { language: 'en', name: 'wikimania2012.wikimedia' },
'wmania': 'wm2011'
}, rules: { 'name': { unique: '${name}.org', family: '${sublanguage}.${name}.org' },
'page_http': { unique: 'http://${name}.org/wiki/$1', family: 'http://${sublanguage}.${name}.org/wiki/$1' },
'page_https': { unique: 'https://secure.wikimedia.org/wikipedia/${https|name}/wiki/$1', family: 'https://secure.wikimedia.org/${name}/${sublanguage}/wiki/$1' },
'action_http': { unique: 'http://${name}.org/w/index.php?title=$1', family: 'http://${sublanguage}.${name}.org/w/index.php?title=$1' },
'action_https': { unique: 'https://secure.wikimedia.org/wikipedia/${https|name}/w/index.php?title=$1', family: 'https://secure.wikimedia.org/${name}/${sublanguage}/w/index.php?title=$1' },
'api_http': { unique: 'http://${name}.org/w/api.php?callback=?', family: 'http://${sublanguage}.${name}.org/w/api.php?callback=?' },
'api_https': { unique: 'https://secure.wikimedia.org/wikipedia/${https|name}/w/api.php?callback=?', family: 'https://secure.wikimedia.org/${name}/${sublanguage}/w/api.php?callback=?' },
'content_language': { unique: '${language}', family: '${sublanguage}' } } }
};
const wikisyntax_params = {
'^\\[\\[(.*)\\]\\]$': { 'get': '$1', 'set': { 'wikilink': { 'type': 'string' } } },
'^image$': { 'set': { 'options.image': { 'type': 'number', 'value': true } } },
'^random$': { 'set': { 'optionslist.random': { 'type': 'number', 'value': 1000 } } },
'^random=(\d*)$': { 'get': '$1', 'set': { 'optionslist.random': { 'type': 'number' } } },
'^anon$': { 'set': { 'options.people': { 'type': 'number', 'value': 0 } } },
'^anon$': { 'set': { 'options.people': { 'type': 'number', 'value': 1 } } },
'^bot$': { 'set': { 'options.bot': { 'type': 'boolean', 'value': false } } },
'^!bot$': { 'set': { 'options.bot': { 'type': 'boolean', 'value': true } } },
'^(\d*) *pages?$': { 'get': '$1', 'set': { 'options.nbdisplay': { 'type': 'number' }, 'options.nbtitles': { 'type': 'number' } } },
'^(\d*) *pages? *in *(\d*)?$': { 'set': { 'options.nbdisplay': { 'type': 'number', 'get': '$1' }, 'options.nbtitles': { 'type': 'number', 'get': '$2' } } },
'^diff$': { 'set': { 'options.diff': { 'type': 'number', 'value': 1 } } },
'^since *(\d*) *(seconds?|minutes?|hours?|days?)$': { 'get': '$1 $2', 'set': { 'options.since': { 'type': 'number' } } },
'^from *\\[\\[(.*)\\]\\]$': { 'get': '$1', 'set': { 'options.firstpage': { 'type': 'string' } } },
'^static$': { 'set': { 'type': { 'type': 'number', 'value': 4 } } },
'^live$': { 'set': { 'type': { 'type': 'number', 'value': 5 } } }
};
const global_options = {
'display_time': { 'type': 'number', 'range': { 'min': 1, 'max': 1000 }, 'default': 50 },
'fadein_time': { 'type': 'number', 'range': { 'min': 1, 'max': 1000 }, 'default': 20 },
'fadeout_time': { 'type': 'number', 'range': { 'min': 1, 'max': 1000 }, 'default': 20 },
'random_display': { 'type': 'boolean', 'default': false },
'fullscreen_images': { 'type': 'number', 'range': { 'min': 0, 'max': 2 }, 'default': 2 },
'border_size': { 'type': 'number', 'range': { 'min': 0, 'max': 99 }, 'default': 5 },
'internet_available': { 'type': 'number', 'range': { 'min': 0, 'max': 2 }, 'default': 2 },
'background_color': { 'type': 'string', 'default': 'black' },
'number_frames': { 'type': 'number', 'range': { 'min': 3, 'max': 20 }, 'default': 3 },
'show_commands': { 'type': 'number', 'range': { 'min': 0, 'max': 2 }, 'default': 1 },
'show_loading': { 'type': 'number', 'range': { 'min': 0, 'max': 3 }, 'default': 3 },
'use_https': { 'type': 'boolean', 'default': false },
'language': { 'type': 'string', 'default': 'fr' }
};
const environment_variables_def = {
'ajax_available': { 'type': 'boolean', 'default': true },
'repeattimebuttons': { 'type': 'number', 'default': 50 },
'repeattimebuttons_initial': { 'type': 'number', 'default': 500 }
};
const l10n_all = {
'en': {
'screenviewer': 'ScreenViewer',
'addressdiapo': 'Address of diaporama:',
'demo': '(demo)',
'diaporama': 'Diaporama:',
'scenario': 'Scenario',
'technique': 'Technique',
'theming': 'Theming',
'randomdiapo': 'Randomized diaporama:',
'fullscreenimages': 'Fullscreen images:',
'always': 'Always',
'depending': 'Depending',
'never': 'Never',
'fadeouttime': 'Fadeout time:',
'fadeintime': 'Fadein time:',
'displaytime': 'Display time:',
'internetavail': 'Internet is available:',
'onlybeginning': 'Only at the beginning',
'duringalldiapo': 'During all the diaporama',
'numberofframes': 'Number of frames:',
'increaseslow': '(increase if slow connection)',
'sizeborder': 'Size of the border',
'background': 'Background',
'black': 'Black',
'white': 'White',
'ok': 'Ok'
},
'fr': {
'screenviewer': 'ScreenViewer',
'addressdiapo': 'Adresse du diaporama :',
'demo': '(démo)',
'diaporama': 'Diaporama :',
'scenario': 'Scénario',
'technique': 'Technique',
'theming': 'Thème',
'randomdiapo': 'Diaporama aléatoire :',
'fullscreenimages': 'Images plein écran :',
'always': 'Toujours',
'depending': 'Selon',
'never': 'Jamais',
'fadeouttime': 'Temps d\'effacement :',
'fadeintime': 'Temps d\'apparition :',
'displaytime': 'Temps d\'affichage :',
'internetavail': 'Internet est disponible :',
'onlybeginning': 'Seulement au début',
'duringalldiapo': 'Pendant tout le diaporama',
'numberofframes': 'Nombre de cadres :',
'increaseslow': '(augmenter pour les connexions lentes)',
'sizeborder': 'Taille de la bordure :',
'background': 'Fond :',
'black': 'Noir',
'white': 'Blanc',
'ok': 'Ok'
}};
var deci_var = ['fadeouttime','fadeintime','displaytime'];
var maxsize_var = {'fadeouttime':4,'fadeintime':4,'displaytime':4,'nbmainscreens':2,'bordersize':2};
/////////////////////////////////////////////////////////// GLOBAL VARIABLES //////////////////////////////////////////////////////////////
var environment = {};
var l10n = {};
var wikisites_diapo = [];
//alert('*');
var global_index = 0;
var pages_text = '';
var page = 0;
var page2 = 0;
var pages = Array();
var current_screen = 0;
var number_screens = 3;
var loaded_screens = Array();
var history_addresses = Array();
//var history = Array();
//var option = '(?: *, *([ 0-9a-z=-]*(?:\\[\\[[^\\]]*]\\]\\][ 0-9a-z=-]*)?))?'; // note: should add '[' ']' and escape ',' in '[[]]'
//var wikilink_with_options = wikilink + option;// + option + option + option + option;
//var regex_wikilink_with_options = new RegExp( '^' + wikilink_with_options + ' *$' );
var changing_screen = false;
var c = 0;
var getnumberpx = new RegExp( '^(\d*)px$' );
//var repeattimebuttons = 50;
//var repeattimebuttons_initial = 500;
var interv;
var interv2;
var noclick = false;
var ajax_current = false;
var ajax_next = Array();
var currenttext = '';
var reserved_slots = 0;
var reserved_slots_from = number_screens;
var preloadajaxqueue = [];
var ajax_requestid = 0;
var ajax_parameters = {};
var nb_current_active_ajax = 0;
//var diapo_text = '* [[w:fr:G]]\n* [[w:fr:Catégorie:Lumière sur/Îles]], content, live, random, 3 pages\n* [[w:fr:Catégorie:AJAX]], content, static, random, 2 pages, from [[B]]\n';
//var diapo_text = '* [[w:fr:Catégorie:AJAX]], from [[B, h, g]], from [[ug,go]]\n';
//var diapo_text = '* [[w:fr:Special:RecentChanges]],content,live,2 pages\n';
var diapo_text = '* [[w:fr:Catégorie:Rennes]], content, live, random, 3 pages\n';
//var diapo_text = '=== Rennes ===\n* [[w:fr:Rennes]]\n* [[w:fr:Hôtel de Blossac]]\n* [[w:fr:Patrimoine architectural de Rennes]]\n* [[commons:File:Celina-ohio-grand-lake.jpg]]\n* [[w:fr:Parcs et jardins de Rennes]]\n* [[w:fr:Rennes Métropole]]\n* [[commons:File:Georges de La Tour 020.jpg]]\n* [[commons:File:La Tour.jpg]]\n* [[w:fr:Monuments historiques à Rennes]]\n* [[w:fr:Fichier:Champs Libres entrée.jpg]]\n* [[w:fr:Rock\'n Solex]]\n* [[w:fr:Les Champs Libres]]\n* [[w:fr:Ouest-France]]\n* [[w:fr:Fichier:TGV train in Rennes station DSC08944.jpg]]\n* [[w:fr:Catégorie:Rennes]]\n* [[w:fr:Catégorie:Rennes]], content, random, 6 pages\n* [[w:en:Museum of Fine Arts of Rennes]]\n* [[commons:File:Rennes - rempart romain - rue de Juillet.jpg]]\n* [[commons:File:Rennes Hôtel de Blossac (Mascaron).jpg]]';
//var diapo_text = '=== Rennes ===\n* [[w:fr:Rennes]]\n* [[w:fr:Hôtel de Blossac]]\n* [[w:fr:Patrimoine architectural de Rennes]]\n* [[commons:File:Celina-ohio-grand-lake.jpg]]\n* [[w:fr:Parcs et jardins de Rennes]]\n* [[w:fr:Rennes Métropole]]\n* [[commons:File:Georges de La Tour 020.jpg]]\n* [[commons:File:La Tour.jpg]]\n* [[w:fr:Monuments historiques à Rennes]]\n* [[w:fr:Fichier:Champs Libres entrée.jpg]]\n* [[w:fr:Rock\'n Solex]]\n* [[w:fr:Les Champs Libres]]\n* [[w:fr:Ouest-France]]\n* [[w:fr:Fichier:TGV train in Rennes station DSC08944.jpg]]\n* [[w:fr:Catégorie:Rennes]]\n* [[w:en:Museum of Fine Arts of Rennes]]\n* [[commons:File:Rennes - rempart romain - rue de Juillet.jpg]]\n* [[commons:File:Rennes Hôtel de Blossac (Mascaron).jpg]]';
//////////////////////////////////////////////////////////////// DEFINITION OF OBJECTS //////////////////////////////////////////////////////////
function Diaporama() {
//*
this.diaporama = [];
this.history = null;
//*/
}
Diaporama.prototype.analysis_wikitext = function( wikitext, diaporama_id ) {
//*
if( typeof wikitext !== 'string' ) return;
// Get the special diporama if a diaporama name is specified
if( typeof diaporama_id === 'number' ) {
var i_title = diaporama_id;
var re_titles = wikitext.match(/^=== *(.*) *===$/gm);
if( re_titles && re_titles.length > 1 ) {
if( i_title == re_titles.length-1 ) {
var re1_title = new RegExp( re_titles[i_title]+'(?:\n.*)*' );
var re_text = re1_title.exec(wikitext);
wikitext = re_text[0].split('\n').slice(1).join('\n');
}
else {
var re1_title = new RegExp( re_titles[i_title]+'(?:\n.*)*\n'+re_titles[i_title+1], '' );
var re_text = re1_title.exec(wikitext);
var array_text = re_text[0].split('\n');
wikitext = array_text.slice(1,array_text.length-1).join('\n');
}
}
}
// Split into single lines
var pages = wikitext.match( /^\* *(?:\[\[(.*)\]\](, *[ 0-9a-z=-]* *)*|file:\/\/(.*))$/gm );
//alert(wikitext);
//alert(pages);
// Analyse each line
for( var index=0; index<pages.length; index++ ) {
this.diaporama[index] = new Diapo();
// Separate different options by taking care about commas in wikilinks
pages[index] = pages[index].replace( /^\* *(.*)$/, '$1' );
var options = pages[index].split(',');
for( var i=0; i<options.length; i++ ) {
if( /\[\[/.test( options[i] ) && !/\]\]/.test( options[i] ) ) {
for( var j=i+1; j<options.length; j++ ) {
if( /\]\]/.test( options[j] ) ) {
options[i] = options.slice( i, j+1 ).join(',');
options.splice( i+1, j-i );
break;
}
}
}
}
for( var i=0; i<options.length; i++ ) options[i] = options[i].trim();
//alert(options);
// Populate the object
for( var i=0; i<options.length; i++ ) {
//alert( 'in analysis_wikitext1' );
var value = undefined;
for( param in wikisyntax_params )
if( RegExp(param).test( options[i] ) )
break;
settings = wikisyntax_params[param];
if( settings['get'] != undefined ) value = options[i].replace( RegExp(param), settings['get'] );
for( key in settings['set'] ) {
var s = key.split( '.' );
if( this.diaporama[index][s[0]] === undefined ) this.diaporama[index][s[0]] = {};
if( settings['set'][key]['get'] != undefined ) value = options[i].replace( param, settings['set'][key]['get'] );
if( settings['set'][key]['hook'] != undefined ) value = settings['set'][key]['hook']( value );
if( settings['set'][key]['value'] != undefined ) value = settings['set'][key]['value'];
if( settings['set'][key]['type'] == 'number' ) value = Number(value);
if( s.length == 1 ) this.diaporama[index][s[0]] = value;
else if( s.length == 2 ) this.diaporama[index][s[0]][s[1]] = value;
else alert('error line 370' );
}
}
// Verify the consistency -> don’t verify ;)
//display_object(this.diaporama[index]);
// Set the title
this.diaporama[index].set_diapo( this.diaporama[index].wikilink );
//delete this.diaporama[index].wikilink;
}
$.each( this.diaporama, function(k1,v1) {
//display_object(v1.page);
});
alert( 'end analysis_wikitext' );
//*/
}
function Diapo( wikilink, type ) {
//*
this.page = wikilink !== undefined ? new Page( wikilink ) : null;
this.type = type !== undefined ? type : null;
this.url = null;
this.legend = null;
this.parent = null;
this.display = true;
this.list = null;
this.options = { 'people': 2, 'bots': true, 'since': '7 days', 'diff': true, 'namespaces': false, 'firstpage': '', 'image': true, 'width': 0, 'height': 0 };
this.optionslist = { 'nbchilds': 0, 'indexes': [], 'random': 0, 'typelive': null, 'nbdisplay': 10, 'nbtitles': 10, 'indexe': 0 };
//*/
}
Diapo.prototype.set_diapo = function( wikilink, type ) {
//*
if( typeof wikilink === 'string' ) this.page = new Page( wikilink );
else if( typeof wikilink === 'number' ) this.type = type;
if( type !== undefined && typeof type === 'number' ) this.type = type;
//display_object(this.page);
//display_object(this.optionslist);
//this.determine_type();
//*/
}
Diapo.prototype.determine_type = function() {
//*
// Check and modify type
this.url = this.page.get_page_url();
if( this.page.namespacenumber == 6 && this.options.image ) {
if( global_options.fullscreen_images != 0 ) {
this.type = 1;
this.load_image_size();
}
else {
this.type = 0;
this.options.image = false;
}
}
else if( this.type == 4 || this.type == 5 ) {
if( environment_variables.internet_available == 0 ) this.type = 0;
if( environment_variables.internet_available == 1 ) this.type = 4;
if( this.page.namespacenumber != 14 && !( this.page.namespacenumber == -1 && ['Recentchanges','Newpages','Log'].indexOf(this.page.pagename) >= 0 ) ) this.type = 0;
}
else alert( 'error line 174' );
// Download static lists
if( this.type == 4 ) {
this.load_static_list();
}
//*/
}
Diapo.prototype.load_image_size = function() {
//*
var self = this;
if( self.type != 1 ) return;
AjAX.niew();
$.getJSON( self.page.project.api_url, {
action: 'query',
prop: 'imageinfo',
iiprop: 'url|size|user',
format: 'json'
}, function(data) {
$.each( data.query.pages, function( k1, v1 ) {
if( !v1.imagerepository ) return;
self.url = v1.imageinfo[0].url;
self.width = Number(v1.imageinfo[0].width);
self.height = Number(v1.imageinfo[0].height);
});
AjAX.done();
});
//*/
}
Diapo.prototype.load_category = function() {
//*
var api_parameters = {
action: 'query',
list: 'categorymembers',
cmlimit: this.options.nbtitles,
cmtitle: this.page.fullpagename
};
if( this.options.firstpage ) api_parameters.cmstartsortkey = this.options.firstpage;
//AjAX.niew();
$.getJSON( this.page.project.api_url, api_parameters, function(data) {
/*
var index = data.data.index;
var project = diaporama[index].project;
var isimage = diaporama[index].isimage;
var pages_list = data.query.categorymembers;
diaporama[index].nbtitles = pages_list.length;
if( diaporama[index].nbdisplay > diaporama[index].nbtitles ) diaporama[index].nbdisplay = diaporama[index].nbtitles;
diaporama[index].nbloaded = 0;
$.each( data.query.categorymembers, function( k1, v1 ) {
new Diapo
for( var j=0; j<pages_list.length; j++ ) {
var page = getNamespaceNumber( project, pages_list[j].title );
var newpage = { type:-1, project:project, title:page[3], url:getURL(project,page[3],1) };
if( page[0] == 6 && ( isimage || fullscreenimages == 'always' ) && fullscreenimages != 'never' ) {
newpage.type = 1;
diaporama[index].list[diaporama[index].index] = newpage;
getImageSize( true, index, diaporama[index].index );
}
else {
newpage.type = 0;
diaporama[index].list[diaporama[index].index] = newpage;
diaporama[index].nbloaded++;
}
diaporama[index].index++;
}
//s='';for(var j=0;j<diaporama[index].nbtitles;j++)s+=diaporama[index].list[j].url+'\n';alert(s);
diaporama[index].index = 0;
if( diaporama[index].nbloaded == diaporama[index].nbtitles ) nbtreatedpages++;*/
});
//*/
}
function Page( wikilink ) {
//*
this.interwiki = null; // unique identifier
this.project = null; // of type Wikisite
this.fullpagename = null; // namespace and pagename
this.namespace = null; // namespace name
this.namespacenumber = null; // of type Number
this.pagename = null; // without namespace
this.categories = null;
this.interwikis = null;
this.update_page( wikilink );
//*/
}
Page.prototype.update_page = function( wikilink ) {
//*
this.project = Wikisite.get_from_wikilink( wikilink );
this.interwiki = this.project.interwiki;
if( this.project === null ) return;
if( this.namespace+':'+this.pagename === this.fullpagename || (this.namespace == '' && this.pagename == this.fullpagename) || (this.project.namespaces === null && this.namespace !== null) ) return;
this.fullpagename = this.project.get_page_from_wikilink( wikilink ).replace(/_/g,' ');
if( this.project.namespaces !== null ) {
re_wikititle = this.fullpagename.match(/^([^:]*):(.*)$/);
if( re_wikititle !== null && re_wikititle.length == 3 ) {
this.namespacenumber = this.project.namespaces[re_wikititle[1]];
if( this.namespacenumber !== undefined ) {
this.namespace = this.project.namespaces[this.namespacenumber];
this.pagename = re_wikititle[2];
this.namespacenumber = Number( this.namespacenumber );
if( this.namespacenumber == -1 ) this.pagename = this.project.specialpages[this.pagename.replace(/ /g,'_')].replace(/_/g,' ');
this.fullpagename = this.namespace + ':' + this.pagename;
}
else {
this.namespace = '';
this.namespacenumber = Number(this.project.namespaces['']);
this.pagename = this.fullpagename;
}
}
else {
this.namespace = '';
this.namespacenumber = Number(this.project.namespaces['']);
this.pagename = this.fullpagename;
}
}
else {
var self = this;
if( !/:/.test(self.fullpagename) ) {
self.namespace = '';
self.pagename = self.fullpagename;
}
AjAX.niew();
$.getJSON( self.project.api_url, {
action: 'query',
prop: 'info',
titles: self.fullpagename,
format: 'json'
}, function( data ) {
$.each( data.query.pages, function( k1, v1 ) {
self.fullpagename = v1.title;
self.namespacenumber = v1.ns;
if( self.namespace == '' ) self.pagename = self.fullpagename;
//alert( 'after ' + self.namespacenumber + ' <' + self.namespace + '> ' + self.fullpagename + ' ' + self.pagename );
});
AjAX.done();
});
}
//alert(this.namespacenumber);
//alert(this.namespace);
//alert(this.fullpagename);
//alert(this.pagename);
//if( this.categories === null ) this.load_categories();
//alert( 'end update_page' );
//*/
}
Page.prototype.load_categories = function() {
//*
// /!\ if problem with this, use:
// var self = this; // and then self in the following in place of this
AjAX.niew();
$.getJSON( this.api_url, {
action: 'parse',
page: this.fullpagename,
prop: 'categories|langlinks',
format: 'json'
}, function(data) {
this.categories = [];
this.interwikis = [];
$.each( data.query.pages, function( k1, v1 ) {
if( v1.langlinks !== undefined ) this.interwikis = v1.langlinks;
$.each( v1.categories , function( k2, v2 ) {
this.categories[this.categories.length] = v2.title;
});
});
AjAX.done();
});
//*/
}
Page.prototype.get_page_url = function( action ) {
//*
return this.project.get_page_url( this.fullpagename, action );
//*/
}
function Wikisite( wikilink ) {
//*
this.interwiki = null; // unique identifier
this.name = null;
this.use_https = false;
this.page_url = null;
this.action_url = null;
this.api_url = null;
this.page_http = null;
this.page_https = null;
this.action_http = null;
this.action_https = null;
this.api_http = null;
this.api_https = null;
this.content_language = null;
this.namespaces = null;
this.specialpages = null;
this.difftime = 0;
if( wikilink !== undefined ) { // From a full-qualified wikilink
this.set_from_wikilink( wikilink );
}
//*/
}
Wikisite.get_from_wikilink = function( wikilink ) {
//*
// Get the supposed prefix et sublanguage
var prefix = Wikisite.get_prefix_from_wikilink( wikilink );
if( Wikisite.wikisites[prefix[2]] === undefined ) Wikisite.wikisites[prefix[2]] = new Wikisite( prefix );
$.each(Wikisite.wikisites,function(k1,v1) {
//display_object(v1);
});
return Wikisite.wikisites[prefix[2]];
//*/
}
Wikisite.get_prefix_from_wikilink = Wikisite.prototype.get_prefix_from_wikilink = function( wikilink ) {
//*
// Variables used in this function
var prefix, sublanguage, r;
// Some constants
const regex_wikilink = new RegExp( '^\\[\\[(.*)\\]\\]$' );
const r_prefix = '[a-z0-9-]*';
const r_sublanguage = '[a-z0-9-]{2,7}';
// Sanitize for wikilinks in double bracket
if( r = regex_wikilink.exec( wikilink ) ) wikilink = r[1];
// Get the sublanguage if present
if( r = new RegExp( '^(' + r_prefix + '):(' + r_sublanguage + '):(.*)$' ).exec( wikilink ) ) {
prefix = r[1];
sublanguage = r[2];
}
else if( r = new RegExp( '^(' + r_prefix + '):(.*)$' ).exec( wikilink ) ) {
prefix = r[1];
sublanguage = '';
}
else alert( 'error line 141' );
return [ prefix, sublanguage, prefix+':'+sublanguage ];
//*/
}
Wikisite.wikisites = {};
Wikisite.prototype.set_from_wikilink = function( wikilink ) {
//*
// Variables used in this function
var prefix, organization, sublanguage, key, value, data, r, sites, s, var_def;
// Get the prefix et sublanguage
if( typeof wikilink === 'string' ) {
r = this.get_prefix_from_wikilink( wikilink );
prefix = r[0];
sublanguage = r[1];
}
else if( typeof wikilink == 'object' && wikilink.length >= 2 ) {
prefix = wikilink[0];
sublanguage = wikilink[1];
}
// Get the informations related to the prefix
for( organization in dbwikisites ) {
sites = dbwikisites[organization].sites || organization;
if( sites[prefix] === undefined ) continue;
// Set the interwiki after some checks
if( this.interwiki == null ) {
this.interwiki = prefix;
if( sites[prefix].sublanguage == true ) {
this.interwiki += ':' + sublanguage;
if( sublanguage == '' ) alert( 'error line 153' );
}
}
// If this prefix is an alias
if( typeof sites[prefix] == 'string' ) {
alert( 'is_redirect' );
this.get_from_wikilink( sites[prefix]+':' );
break;
}
else {
rules = dbwikisites[organization].rules || sites[prefix];
for( key in rules ) {
value = ( sublanguage ? rules[key].family : rules[key].unique ) || rules[key];
// Replace the placeholders
while( r = value.match( RegExp( '\\$\\{([a-z\|]*)\\}' ) ) ) {
s = r[1].split( '|' );
for( var i=0; i<s.length; i++ ) {
var_def = s[i] == 'sublanguage' ? sublanguage : sites[prefix][s[i]];
if( var_def !== undefined ) {
value = value.replace( new RegExp( '\\$\\{'+r[1]+'\\}', 'g' ), var_def );
break;
}
}
}
this[key] = value;
}
break;
}
}
if( !this.name || !this.page_http || !this.action_http || !this.api_http ) alert( 'error line 184' );
this.set_https_status( false );
this.download_siteinfo();
//*/
}
Wikisite.prototype.set_https_status = function( toggle ) {
//*
if( environment.use_https.value && this.page_https && this.action_https && this.api_https ) this.use_https = !!toggle;
else this.use_https = false;
if( this.use_https ) {
this.page_url = this.page_https;
this.action_url = this.action_https;
this.api_url = this.api_https;
}
else {
this.page_url = this.page_http;
this.action_url = this.action_http;
this.api_url = this.api_http;
}
//*/
}
Wikisite.prototype.get_page_from_wikilink = function( wikilink ) {
//*
return new RegExp( '^' + this.interwiki + ':(.*)$' ).exec( wikilink )[1];
//*/
}
Wikisite.prototype.get_page_url = function( title, action ) {
//*
title = title.replace( / /g, '_' );
if( action === undefined ) return this.page_url.replace( /$1/, title );
else return this.action_url.replace( /$1/, title ) + action;
//*/
}
Wikisite.prototype.download_siteinfo = function() {
//*
var self = this;
this.info_retrieved = false;
AjAX.niew();
$.getJSON( this.api_url, {
action: 'query',
meta: 'siteinfo',
siprop: 'general|namespaces|namespacealiases|specialpagealiases',
format: 'json'
}, function(data) {
self.siteinfo = {};
self.namespaces = {};
self.specialpages = {};
var re_date = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$/.exec(data.query.general.time);
var their_date = Date.UTC(Number(re_date[1]),Number(re_date[2])-1,Number(re_date[3]),Number(re_date[4]),Number(re_date[5]),Number(re_date[6]),0);
var diff_date = Date.now()-their_date;
self.siteinfo.difftime = diff_date;
for( var nsnb in data.query.namespaces ) {
star = data.query.namespaces[nsnb]['*'];
canonical = data.query.namespaces[nsnb]['canonical'];
self.namespaces[nsnb] = star;
self.namespaces[star] = nsnb;
self.namespaces[canonical] = nsnb;
}
for( var nsnb=0; nsnb<data.query.namespacealiases.length; nsnb++ )
self.namespaces[data.query.namespacealiases[nsnb]['*']] = String(data.query.namespacealiases[nsnb].id);
for( var nsnb=0; nsnb<data.query.specialpagealiases.length; nsnb++ ) {
self.specialpages[data.query.specialpagealiases[nsnb].realname] = data.query.specialpagealiases[nsnb].realname;
for( var alias=0; alias<data.query.specialpagealiases[nsnb].aliases.length; alias++ )
self.specialpages[data.query.specialpagealiases[nsnb].aliases[alias]] = data.query.specialpagealiases[nsnb].realname;
}
AjAX.done();
});
//*/
}
function AjaX() {
var self = this;
this.current_ajax = 0;
this.nextstep = null;
this.niew = function() { self.current_ajax++; }
this.done = function() {
self.current_ajax--;
if( self.current_ajax == 0 ) {
//alert('launch event end ajax');
this.nextstep();
}
}
}
var AjAX = new AjaX();
/*
var check_parameters = {
'title': { 'type': 'string', 'mandatory': true }, // standalone
'project': { 'type': 'string', 'mandatory': true }, // standalone
'type': { 'type': 'number', 'mandatory': true, 'range': [0,1,2,3,4,5] }, // standalone
'legend': { 'type': 'string', 'mandatory': false }, // standalone
'categories': { 'type': 'array string', 'mandatory': false }, // standalone
'parent': { 'type': 'array string', 'mandatory': false }, // if is in a list, so not checkable in wikisyntax
'url': { 'type': 'string', 'mandatory': true, 'range': /^https?:\/\/.*$/ }, // LAST parameter, depends from all others
'display': { 'type': 'boolean', 'mandatory': false }, // standalone
'options': { 'type': 'object', 'mandatory': false }, //
'list': { 'type': 'array recursive', 'mandatory': false }, // if type ∈ {4,5}
'optionslist': { 'type': 'object', 'mandatory': false }, //
'options.firstpage': { 'type': 'string', 'mandatory': false }, //
'options.people': { 'type': 'number', 'mandatory': false, 'range': [0,1,2] }, //
'options.bots': { 'type': 'boolean', 'mandatory': false }, //
'options.since': { 'type': 'string', 'mandatory': false, 'range': /^(\d*) (seconds?|minutes?|hours?|days?)$/ }, // standa
'options.diff': { 'type': 'boolean', 'mandatory': false }, // standalone, used if type==5 & typelivelist==1
'options.namespace': { 'type': 'array string', 'mandatory': false }, //
'optionslist.typelivelist': { 'type': 'string', 'mandatory': false }, //
'optionslist.random': { 'type': 'number', 'mandatory': false, 'range': { 'min': 0, 'max': 1000 } }, //
'optionslist.nbchilds': { 'type': 'string', 'mandatory': false, 'range': { 'min': 0 } }, //
'optionslist.indexes': { 'type': 'array number', 'mandatory': false, }, //
'optionslist.size': { 'type': 'number', 'mandatory': false, 'range': { 'min': 0 } }, //
'optionslist.index': { 'type': 'number', 'mandatory': false, 'range': { 'min': 0 } } //
};
var deci_var = ['fadeouttime','fadeintime','displaytime'];
var maxsize_var = {'fadeouttime':4,'fadeintime':4,'displaytime':4,'nbmainscreens':2,'bordersize':2};
*/
/*
Loadflow:
* initScreenViewer
* displayDialog
* selectList
* downloadNamespaces
* readList
* initScreens
*/
//
// Initialize once
//
function initScreenViewer() {
//*
//netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead UniversalBrowserWrite");
// Add environment variables
for( var va in global_options ) {
environment[va] = global_options[va]['default'];
}
for( var va in environment_variables_def ) {
environment[va] = environment_variables_def[va]['default'];
}
AjAX.nextstep = disp;
// Check the support of Ajax and availability of Internet
if( !environment.internet_available ) environment_variables.ajax_available = false;
if( !environment.ajax_available || !$.support.ajax ) {
environment.ajax_available = false;
}
//alert('ajax='+environment.ajax_available+' '+$.support.ajax);
$('body').append('<div id="nbajax">0</div>');
//$('body').append('<div id="stopdiv" style="position:absolute; top:0px; left:0px; width:5px; height:100%;"></div>');
//$('#stopdiv').mouseleave(function(){ var s='History:\n'; for( i=0; i<history_addresses.length; i++ ) s += history_addresses[i]+'\n'; alert(s); });
// Launch the dialog
//displayDialog();
diap = new standalone_diaporama( window );
diap.expert_dialog();
//*/
}
function disp() {
/*
if( diap !== undefined && diap !== null && diap.diaporama !== undefined && diap.diaporama !== null && diap.diaporama.diaporama !== undefined && diap.diaporama.diaporama !== null ) {
display_object( Wikisite.get_from_wikilink( 'w:fr:' ).namespaces );
$.each( diap.diaporama.diaporama, function(k1,v1) {
display_object(v1.page);
});
}
alert('end disp');
//*/
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////// DIALOG BOX //////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function standalone_diaporama( window ) {
//this.self = this;
this.window = window;
this.wikitext = '';
this.diaporama = null;
//this.$ = $
l10n = l10n_all[environment.language];
}
standalone_diaporama.prototype = {
// Display the expert dialog box
expert_dialog: function() {
//*
var self = this;
// If dialog is already open
if( $('#parametersdialog' ).length ) return;
// Open the dialog
$('body').append( '<div id="parametersdialog" /'+'>' );
// If Ajax, ajax-load a distant page
if( environment.ajax_available ) {
$('#parametersdialog').append( l10n.addressdiapo+' <input type="text" id="addressdiapo" value="" /'+'> <a id="demo-ajax" style="cursor:pointer;color:#0645ad;">'+l10n.demo+'</a><br /'+'><br /'+'>');
$('#addressdiapo').change(function() {
var project = Wikisite.get_from_wikilink( $(this).val() );
if( !project ) return;
var page = project.get_page_from_wikilink( $(this).val() );
$('#textdiapo').attr( 'disabled', 'disabled' );
AjAX.niew();
$.getJSON( project.api_url, {
action: 'query',
prop: 'revisions',
titles: page,
rvprop: 'content',
format: 'json'
}, function(data) {
$.each( data.query.pages, function( k1, v1 ) {
if( k1 == '-1' ) return;
$('#textdiapo').val( v1.revisions[0]['*'] );
self.setDialogText( v1.revisions[0]['*'] );
});
$('#textdiapo').removeAttr( 'disabled' );
AjAX.done();
});
});
$('#demo-ajax').click(function() {
$('#addressdiapo').val('w:fr:Utilisateur:Seb35/Diaporama').trigger('change');
//$('#choicesinput-UmVubmVz').delay(1000).val(['v3']);
//$('#choices').trigger('change').trigger('click');
//$('#choices label').delay(1010).attr('aria-pressed','false').removeClass('ui-state-active');
//$('#choices label[for="choicesinput-UmVubmVz"]').delay(1020).attr('aria-pressed','true').addClass('ui-state-active');
});
}
// Main textarea
$('#parametersdialog').append(l10n.diaporama+' <textarea id="textdiapo" rows="5" style="width:100%;">'+diapo_text+'</textarea><br /'+'>');
$('#textdiapo').keyup(function() {
setDialogText( $(this).val() );
});
// When there is many diaporamas in one page
$('#parametersdialog').append('<div id="choices" /'+'><br /'+'>');
// Options
var tabscenario = '';
var tabtechnical = '';
var tabtheming = '';
var summary = '<ul><li><a href="#tabscenario">'+l10n.scenario+'</a></li><li><a href="#tabtechnical">'+l10n.technique+'</a></li><li><a href="#tabtheming">'+l10n.theming+'</a></li></ul>';
// Checkbox israndom
tabscenario += '<label>'+l10n.randomdiapo+' <input type="checkbox" id="israndom" /'+'></label><br /'+'>';
// fullscreen
tabscenario += l10n.fullscreenimages+' <input type="radio" id="fullscreenimages-2" name="fullscreenimages" value="2" /'+'><label for="fullscreenimages-always">'+l10n.always+' </label><input type="radio" id="fullscreenimages-1" name="fullscreenimages" value="1" /'+'><label for="fullscreenimages-depending">'+l10n.depending+' </label><input type="radio" id="fullscreenimages-0" name="fullscreenimages" value="0" /'+'><label for="fullscreenimages-never">'+l10n.never+'</label><br /'+'>';
// Text fadeouttime
tabscenario += l10n.fadeouttime+' <span id="fadeouttime" style="font-family:monospace;">'+(environment.fadeout_time<100?' ':'')+(environment.fadeout_time%10==0?(environment.fadeout_time/10)+'.0':(environment.fadeout_time/10))+'</span><span style="font-family:monospace;">s</span> <input type="button" id="fadeouttime-minus" style="font-size:50%; vertical-align:middle;" value="−" /'+'><input type="button" id="fadeouttime-plus" style="font-size:50%; vertical-align:middle;" value="+" /'+'><br /'+'>';
// Text fadeintime
tabscenario += l10n.fadeintime+' <span id="fadeintime" style="font-family:monospace;">'+(environment.fadein_time<100?' ':'')+(environment.fadein_time%10==0?(environment.fadein_time/10)+'.0':(environment.fadein_time/10))+'</span><span style="font-family:monospace;">s</span> <input type="button" id="fadeintime-minus" style="font-size:50%; vertical-align:middle;" value="−" /'+'><input type="button" id="fadeintime-plus" style="font-size:50%; vertical-align:middle;" value="+" /'+'><br /'+'>';
// Text displaytime
tabscenario += l10n.displaytime+' <span id="displaytime" style="font-family:monospace;">'+(environment.display_time<100?' ':'')+(environment.display_time%10==0?(environment.display_time/10)+'.0':(environment.display_time/10))+'</span><span style="font-family:monospace;">s</span> <input type="button" id="displaytime-minus" style="font-size:50%; vertical-align:middle;" value="−" /'+'><input type="button" id="displaytime-plus" style="font-size:50%; vertical-align:middle;" value="+" /'+'><br /'+'>';
// Checkbox isinternet
tabtechnical += '<label><input type="checkbox" id="isinternet" checked="checked" /'+'> '+l10n.internetavail+'</label><br /'+'>';
$('#isinternet').change(function() {
if( !$('#isinternet:checkbox:checked').val() ) { $('#lisinternetlive1,#lisinternetlive2').css( 'color', 'gray' ); $('#isinternetlive1,#isinternetlive2').attr('disabled','disabled'); }
else { $('#lisinternetlive1,#lisinternetlive2').css( 'color', 'black' ); $('#isinternetlive1,#isinternetlive2').removeAttr('disabled'); }
});
// Checkbox isajax
tabtechnical += ' <label id="lisinternetlive1"><input type="radio" id="isinternetlive1" name="isinternetlive" value="false" /'+'> '+l10n.onlybeginning+'</label><br /'+'>';
tabtechnical += ' <label id="lisinternetlive2"><input type="radio" id="isinternetlive2" name="isinternetlive" value="true" checked="checked" /'+'> '+l10n.duringalldiapo+'</label><br /'+'>';
// Text nbmainscreens
tabtechnical += l10n.numberofframes+' <span id="nbmainscreens" style="font-family:monospace;">'+(environment.number_frames<10?' ':'')+environment.number_frames+'</span> <input type="button" id="nbmainscreens-minus" style="font-size:50%; vertical-align:middle;" value="−" /'+'><input type="button" id="nbmainscreens-plus" style="font-size:50%; vertical-align:middle;" value="+" /'+'> <small>'+l10n.increaseslow+'</small><br /'+'>';
// Text bordersize
tabtheming += l10n.sizeborder+' <span id="bordersize" style="font-family:monospace;">'+(environment.border_size<10?' ':'')+environment.border_size+'</span> px <input type="button" id="bordersize-minus" style="font-size:50%; vertical-align:middle;" value="−" /'+'><input type="button" id="bordersize-plus" style="font-size:50%; vertical-align:middle;" value="+" /'+'><br /'+'>';
//tabtheming += l10n.sizeborder+' <input type="text" id="bordersize" value="5" maxlength="2" size="2" /'+'> px<br /'+'>';
// Text backgroundtype
tabtheming += l10n.background+'<br /'+'>';
tabtheming += ' <input type="radio" name="backgroundtype" id="backgroundtype-black" value="black" checked="checked" /'+'><label for="backgroundtype-black"> '+l10n.black+'</label><br /'+'>';
tabtheming += ' <input type="radio" name="backgroundtype" id="backgroundtype-white" value="white" /'+'><label for="backgroundtype-white"> '+l10n.white+'</label><br /'+'>';
//tabtheming += ' <input type="radio" name="backgroundtype" id="backgroundtype-color" value="color" /'+'><label for="backgroundtype-color"> Color: </label><input type="text" name="backgroundcolor" id="backgroundcolor" value="" disabled="disabled" /'+'><br /'+'>';
$('#parametersdialog').append('<div id="tabs">'+summary+'<div id="tabscenario">'+tabscenario+'</div><div id="tabtechnical">'+tabtechnical+'</div><div id="tabtheming">'+tabtheming+'</div></div>');//alert('*');
$('#tabs').tabs();
$('input:radio[name=fullscreenimages]').val( [ environment.fullscreen_images ] );
//alert((0.2+0.1));
//alert((2.0-0.1));
//alert((2.0-0.1-0.1));
//alert((2.0-0.1-0.1-0.1));
//note this isn't 1.7 so I cannot use directly floating numbers even for a simple operation like that.
//$('#fadeouttime-minus,#fadeouttime-plus').button().bind( 'mousedown mouseup mouseleave click', function(e) { display_object(this); display_object(e);} );
$('#fadeouttime-minus,#fadeouttime-plus').button().bind( 'mousedown mouseup mouseleave click', function(e) { self.setter_timing(e); } );
$('#fadeintime-minus,#fadeintime-plus').button().bind( 'mousedown mouseup mouseleave click', function(e) { self.setter_timing(e); } );
$('#displaytime-minus,#displaytime-plus').button().bind( 'mousedown mouseup mouseleave click', function(e) { self.setter_timing(e); } );
$('#nbmainscreens-minus,#nbmainscreens-plus').button().bind( 'mousedown mouseup mouseleave click', function(e) { self.setter_timing(e); } );
$('#bordersize-minus,#bordersize-plus').button().bind( 'mousedown mouseup mouseleave click', function(e) { self.setter_timing(e); } );
$('#fadeouttime').click( function(e) { self.direct_setter_timing(e); } );
$('#fadeintime').click( function(e) { self.direct_setter_timing(e); } );
$('#displaytime').click( function(e) { self.direct_setter_timing(e); } );
$('#nbmainscreens').click( function(e) { self.direct_setter_timing(e); } );
$('#bordersize').click( function(e) { self.direct_setter_timing(e); } );
$('#isinternet').change(function() {
if( !$('#isinternet:checkbox:checked').val() ) { $('#lisinternetlive1,#lisinternetlive2').css( 'color', 'gray' ); $('#isinternetlive1,#isinternetlive2').attr('disabled','disabled'); }
else { $('#lisinternetlive1,#lisinternetlive2').css( 'color', 'black' ); $('#isinternetlive1,#isinternetlive2').removeAttr('disabled'); }
});
//$('input[name=backgroundtype]').change(function() {
//
// if( $('input:radio[name=backgroundtype]:checked').val() != 'color' ) $('#backgroundcolor').attr('disabled','disabled');
// else $('#backgroundcolor').removeAttr('disabled').focus();
//});
$('#parametersdialog').dialog( { buttons: [ { text: l10n.ok, click: function() { self.create_diaporama_from_expert_dialog(); } } ], title: l10n.screenviewer, minWidth: 600, closeOnEscape: false } );
//*/
},
//
// Timers for parameters, mouse-related
//
setter_timing: function( event, down ) {
//*
var self = this;
var variab;
var id = event.target.id.replace( /^(.*)-.*$/, '$1' );
var plus = true;
if( event.target.id.indexOf('minus') >= 0 ) plus = false;
if( down == undefined ) {
if( event.type == 'mousedown' ) down = environment.repeattimebuttons_initial;
else if( event.type == 'mouseup' ) { down = 0; noclick = true; }
else if( event.type == 'mouseleave' ) down = 0;
else if( event.type == 'click' ) {
if( noclick ) { noclick = false; return; }
noclick = false;
down = -1;
}
}
else if( down != 0 ) down = environment.repeattimebuttons;
if( down == 0 ) {
clearTimeout( interv );
return;
}
if( id == 'fadeouttime' ) {
if( !plus && environment.fadeout_time <= 1 ) { self.setter_timing(event,0); return; }
if( plus ) environment.fadeout_time += 1;
else environment.fadeout_time -= 1;
variab = environment.fadeout_time;
}
else if( id == 'fadeintime' ) {
if( !plus && environment.fadein_time <= 1 ) { self.setter_timing(event,0); return; }
if( plus ) environment.fadein_time += 1;
else environment.fadein_time -= 1;
variab = environment.fadein_time;
}
else if( id == 'displaytime' ) {
if( !plus && environment.display_time <= 1 ) { self.setter_timing(event,0); return; }
if( plus ) environment.display_time += 1;
else environment.display_time -= 1;
variab = environment.display_time;
}
else if( id == 'nbmainscreens' ) {
if( !plus && environment.number_frames <= 3 ) { self.setter_timing(event,0); return; }
if( plus && environment.number_frames >= 20 ) { self.setter_timing(event,0); return; }
if( plus ) environment.number_frames += 1;
else environment.number_frames -= 1;
variab = environment.number_frames;
}
else if( id == 'bordersize' ) {
if( !plus && environment.border_size <= 0 ) { self.setter_timing(event,0); return; }
if( plus && environment.border_size >= 99 ) { self.setter_timing(event,0); return; }
if( plus ) environment.border_size += 1;
else environment.border_size -= 1;
variab = environment.border_size;
}
if( deci_var.indexOf(id) >= 0 ) $('#'+id).empty().text((variab<100?' ':'')+(variab%10==0?(variab/10)+'.0':(variab/10)));
else $('#'+id).empty().text((variab<10?' ':'')+variab);
if( down > 0 ) interv = setTimeout( self.setter_timing, down, event, down );
//*/
},
// Timers for parameters, direct-editing-related
direct_setter_timing: function( event ) {
//*
var self = this;
var caller = event.target;
var caller_id = caller.id;
var var_var = {'fadeouttime':environment.fadeout_time,'fadeintime':environment.fadein_time,'displaytime':environment.display_time,'nbmainscreens':environment.number_frames,'bordersize':environment.border_size};
var old_text = $(caller).text();
$(caller).empty().append('<input type="text" id="'+caller_id+'-text" size="'+maxsize_var[caller_id]+'" maxlength="'+maxsize_var[caller_id]+'" style="font-size:70%; vertical-align:middle;" value="'+var_var[caller_id]+'" /'+'>').unbind();
if( deci_var.indexOf(caller_id) >= 0 ) $(caller).append(' d');
$('#'+caller_id+'-minus,#'+caller_id+'-plus').css('visibility','hidden');
$('#'+caller_id+'-text').focus().keydown(function(e) {
if( e.which == 27 ) {
$(caller).empty().text(old_text);
$('#'+caller_id+'-minus,#'+caller_id+'-plus').css('visibility','visible');
$(caller).click(self.direct_setter_timing);
}
if( e.which != 13 ) return;
$(this).trigger('change');
}).focusout(function(){
$(this).trigger('change');
}).change(function() {
var variab;
var newval = Number($(this).val());
if( $(this).val() && ( (newval>=3&&caller_id=='nbmainscreens') || (newval>=1&&(caller_id=='fadeouttime'||caller_id=='fadeinttime'||caller_id=='displaytime')) || (newval>=0&&caller_id=='bordersize') ) && ( (newval<=20&&caller_id=='nbmainscreens') || (newval<=99&&caller_id=='bordersize') || (caller_id=='fadeouttime'||caller_id=='fadeintime'||caller_id=='displaytime') ) && Math.floor(newval) == newval ) {
if( caller_id == 'fadeouttime' ) variab = environment.fadeout_time = newval;
else if( caller_id == 'fadeintime' ) variab = environment.fadein_time = newval;
else if( caller_id == 'displaytime' ) variab = environment.display_time = newval;
else if( caller_id == 'nbmainscreens' ) variab = environment.number_frames = newval;
else if( caller_id == 'bordersize' ) variab = environment.border_size = newval;
if( deci_var.indexOf(caller_id) >= 0 ) $(caller).empty().text((variab<100?' ':'')+(variab%10==0?(variab/10)+'.0':(variab/10)));
else $(caller).empty().text((variab<10?' ':'')+variab);
}
else $(caller).empty().text(old_text);
$('#'+caller_id+'-minus,#'+caller_id+'-plus').css('visibility','visible');
$(caller).click(self.direct_setter_timing);
});
//*/
},
//
// Set the text in the dialog box
//
setDialogText: function( text ) {
//*
var self = this;
//alert('beg setdialogtex');
if( text == self.wikitext ) return;
else self.wikitext = text;
re_titles = text.match(/^===(.*)===$/gm);
for( var i=0; re_titles && i<re_titles.length; i++ ) {
re_titles[i] = re_titles[i].replace( /^===(.*)===$/, '$1' ).trim();
if( /=/.exec( re_titles[i] ) || !re_titles[i] ) re_titles.splice( i, 1 );
}
if( re_titles && re_titles.length > 1 ) {
// Get old value to replace this value after treatment
var oldvalue = $('input:radio[name=choicesinput]:checked').attr('id');
if( oldvalue != undefined ) oldvalue = oldvalue.replace( /^choicesinput-(.*)-\d*$/, '$1' );
// First: with radio buttons
$('#choices').empty();
var choices = '<br /'+'>';
var nbchecked = 0;
var doubles = Array();
for( var i=0; i<re_titles.length; i++ ) {
choices += '<input type="radio" name="choicesinput" id="choicesinput-'+btoa(re_titles[i])+'-'+i+'" value="'+i+'"';
if( btoa(re_titles[i]) == oldvalue ) { choices += ' checked="checked"'; nbchecked++; }
choices += '/'+'><label for="choicesinput-'+btoa(re_titles[i])+'-'+i+'"> '+re_titles[i]+'</label>';
if( re_titles.indexOf( re_titles[i] ) < i && doubles.indexOf( re_titles[i] ) == -1 ) doubles.push( re_titles[i] );
}
if( nbchecked >= 2 ) choices = choices.replace( / checked="checked"/g, '' );
$('#choices').append(choices);
$('#choices').buttonset();
$( "#parametersdialog" ).dialog( 'option', 'position', 'center' );
if( doubles.length > 0 ) {
var labs = $('#choices label');
for( var i=0; i<doubles.length; i++ ) {
for( var j=0; j<labs.length; j++ ) {
if( labs.eq(j).text() == ' '+doubles[i] ) labs.eq(j).css( 'color', 'red' );
}
}
}
// Second: with menu (jQueryUI 1.9)
// var choices = '<ul id="choicesinput">';
// for( i=0; i<re_titles.length; i++ ) {
//
// re2_title = re_titles[i].match(/^===(.*)===$/);
// choices += '<li id="choicesinput'+i+'"><a href="#">'+re2_title[1].trim()+'</a></li>';
// }
// choices += '</ul>';
// $('#choices').append(choices);
// $('#choicesinput').menu({
// select: function(event, ui) { alert('o'); }
// });
// $('#displayChoices').dialog();
}
else {
$('#choices').empty();
$('#parametersdialog' ).dialog( 'option', 'position', 'center' );
}
//alert('end setdialogtex');
//*/
},
create_diaporama_from_expert_dialog: function() {
//*
var self = this;
self.wikitext = $('#textdiapo').val();
self.diaporama_id = Number($('input:radio[name=choicesinput]:checked').val());
// Scenario
environment.fullscreen_images = Number($('input:radio[name=fullscreenimages]:checked').val());
//environment.fadeout_time = Number($('#fadeouttime').val());
//environment.fadein_time = Number($('#fadeintime').val());
//environment.display_time = Number($('#displaytime').val());
// Technique
if( !$('#isinternet:checkbox:checked').val() ) environment.internet_available = false;
if( !environment.internet_available ) environment.ajax_available = false;
else environment.ajax_available = true;
//setFrames(number_screens);
// Theming
//bordersize = Number( $('#bordersize').val() );
environment.background_color = $('input:radio[name=backgroundtype]:checked').val();
//if( environment.color == 'black' ) environment.background_color = 'black';
//else if( color == 'white' ) environment.background_color = 'white';
//else if( color == 'color' ) background_color= $('#backgroundcolor').val();
$('body').css( 'background-color', environment.background_color );
self.diaporama = new Diaporama();
self.diaporama.analysis_wikitext( self.wikitext, self.diaporama_id );
//display_object(self.diaporama);
//alert( 'end create_diaporama_from_expert_dialog' );
}
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////// READ DIAPORAMA ////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* Read the list to download appropriate namespaces
*/
function analyze_syntax( pages ) {
//*
for( var index=0; index<pages.length; index++ ) {
diaporama[index] = clone( default_page );
// Separate different options by taking care about commas in wikilinks
pages[index] = pages[index].replace( /^\* *(.*)$/, '$1' );
var options = pages[index].split(',');
for( var i=0; i<options.length; i++ ) {
if( /\[\[/.test( options[i] ) && !/\]\]/.test( options[i] ) ) {
for( var j=i+1; j<options.length; j++ ) {
if( /\]\]/.test( options[j] ) ) {
options[i] = options.slice( i, j+1 ).join(',');
options.splice( i+1, j-i );
break;
}
}
}
}
for( var i=0; i<options.length; i++ ) options[i] = options[i].trim();
// Populate the object
for( var i=0; i<options.length; i++ ) {
var value = undefined;
for( param in wikisyntax_params )
if( param.test( options[i] ) )
break;
setting = wikisyntax_params[param];
if( settings['get'] != undefined ) value = options[i].replace( param, settings['get'] );
for( key in settings['set'] ) {
var s = key.split( '.' );
var k = diaporama[s[0]];
for( var j=0; j<s.length-1; j++ ) {
if( k == undefined ) k = {};
k = k[s[0]];
}
if( settings['set'][key]['get'] != undefined ) value = options[i].replace( param, settings['set'][key]['get'] );
if( settings['set'][key]['hook'] != undefined ) value = settings['set'][key]['hook']( value );
if( settings['set'][key]['value'] != undefined ) value = settings['set'][key]['value'];
if( settings['set'][key]['type'] == 'number' ) value = Number(value);
}
}
// Verify the consistency -> don’t verify ;)
var wikisyntax = clone( wikisyntax_parameters );
var check_params = [];
var my_params = {};
for( param in wikisyntax_parameters ) {
my_params[param] = { treated:false, chainload:[] };
}
// Construct the resulting array
for( var i=0; i<options.length; i++ ) {
for( var param in my_params ) {
alert( options[i] + ' ' + param );
// Only treat untreated parameters
if( my_params[param].treated ) continue;
// Load the chain
parameter = wikisyntax_parameters;
for( var i=0; i<my_params[param].chainload.length; i++ ) {
parameter = parameter[my_params[param].chainload[i].p]['result'][my_params[param].chainload[i].v];
}
// Only treat wikitext parameters
if( parameter[param].load != 'wikitext' ) continue;
// Check mandatory syntax parameters
if( parameter[param].type == undefined ) alert( 'error line 83' );
//alert( (parameter[param].type) + ' && ' + (parameter[param].regex instanceof Array) + ' && ' + (parameter[param].regex.length) + ' && ' + (parameter[param].regex[0] instanceof String) + ' && ' + (parameter[param].regex[0] instanceof RegExp) + ' && ' + (parameter[param].regex[1] instanceof String) + ' && ' + (parameter[param].regex) );
alert('type='+parameter[param].type);
//console.log( "param = %s, parameter = %o", param, parameter );
alert(parameter.toString());
// First case: boolean
if( parameter[param].type == 'boolean' ) {
alert('here');
var r;
//console.log(parameter[param].regex);
alert(parameter[param].regex);
if( parameter[param].regex != undefined ) {
if( parameter[param].regex instanceof RegExp ) r = parameter[param].regex;
else r = new RegExp( parameter[param].regex );
}
alert(r);
if( r != undefined && r.test( options[i] ) ) diaporama[index][param] = true;
else diaporama[index][param] = false;
}
// Second case: string
else if( (parameter[param].type == 'string' || parameter[param].type == 'number') && (parameter[param].regex instanceof Array) && (parameter[param].regex.length == 2) ) {
var r;
alert(typeof(parameter[param].regex[0]));
if( typeof(parameter[param].regex[0]) == "string" ) r = new RegExp( parameter[param].regex[0] );
else r = parameter[param].regex[0];
if( r.test( options[i] ) ) diaporama[index][param] = options[i].replace( r, parameter[param].regex[1] );
else if( parameter[param]['default'] != undefined ) diaporama[index][param] = parameter[param]['default'];
if( parameter[param].type == 'number' ) diaporama[index][param] = new Number(diaporama[index][param]);
}
// Third case: perhaps there is a hook
else if( parameter[param].hook != undefined );
// Fourth case: error
else alert( 'error line 108' );
// If there is a hook
if( parameter[param].hook != undefined ) diaporama[index][param] = parameter[param].hook( index, param, options, diaporama[index][param] );
// Check limits
if( parameter[param].type == 'number' ) check_params[check_params.length] = param;
// If there is result and this result add new syntax parameters
if( parameter[param].result != undefined ) {
if( parameter[param].result[diaporama[index][param]] != undefined ) {
var new_chainload = [];
for( var i=0; i<my_params[param].chainload.length; i++ ) new_chainload[i] = clone(my_params[param].chainload[i]);
my_params[param].chainload[my_params[param].chainload.length] = { p:param, v:diaporama[index][param] };
for( var new_param in parameter[param].result[diaporama[index][param]] ) my_params[new_param] = { treated:false, chainload:new_chainload };
}
}
my_params[param].treated = true;
}
}
alert( '6 instanceof Number' );
alert( new Number(5) instanceof Number );
// Check limits
for( i=0; i<check_params.length; i++ ) {
if( parameter[check_params[i]].type == 'number' ) {
var mini = parameter[check_params[i]].min;
var maxi = parameter[check_params[i]].max;
if( /*typeof(mini) == 'String' &&*/ diaporama[index][check_params[i]][mini] != undefined && (diaporama[index][check_params[i]][mini] instanceof Number) ) mini = diaporama[index][check_params[i]][mini];
else /*if( typeof(mini) == 'String' )*/ alert( 'error line 137' );
if( /*typeof(maxi) == 'String' &&*/ diaporama[index][check_params[i]][maxi] != undefined && (diaporama[index][check_params[i]][maxi] instanceof Number) ) maxi = diaporama[index][check_params[i]][maxi];
else /*if( typeof(maxi) == 'String' )*/ alert( 'error line 140' );
if( mini != undefined && diaporama[index][check_params[i]] < mini ) alert( 'error line 142' );
if( maxi != undefined && diaporama[index][check_params[i]] > maxi ) alert( 'error line 143' );
}
}
// Add default and check missing parameters
for( param in wikisyntax ) {
if( parameter[param].load != 'wikitext' ) continue;
if( parameter[param].treated == false ) {
if( parameter[param]['default'] != undefined ) {
diaporama[index][param] = parameter[param]['default'];
parameter[param].treated = true;
}
else alert( 'error line 155' );
}
}
switch( diaporama[index].type ) {
case 0: get_wikisyntax_main( index, param, options ); break;
case 1: get_wikisyntax_image( index, param, options ); break;
case 2: get_wikisyntax_category( index, param, options ); break;
case 3: get_wikisyntax_rc( index, param, options ); break;
}
}
//*/
}
function post_analysis_syntax() {
//*
//*/
}
function get_wikisyntax_title( value ) {
//*
var link = getProject( value, 0 );
value = getNamespaceNumber( link[0], link[1] )[3];
return value;
//*/
}
function get_wikisyntax_project( value ) {
//*
var link = getProject( value, 0 );
value = link[0];
return value;
//*/
}
function get_wikisyntax_type( index, param, options, value ) {
//*
var namespace = getNamespaceNumber( diaporama[index].project, diaporama[index].title )[0];
var partialtitle = getNamespaceNumber( diaporama[index].project, diaporama[index].title )[3];
if( namespace == 6 && ( options.indexOf('image') >= 0 || fullscreenimages == 'always' ) && fullscreenimages != 'never' ) value = 1;
else if( namespace == 14 && options.indexOf('content') >= 0 && ( ajax_initial || (ajax_live && options.indexOf('live') >= 0) ) ) value = 2;
else if( namespace == -1 && (['Recentchanges','Newpages','Log'].indexOf(partialtitle) >= 0) && options.indexOf('content') >= 0 && ( ajax_initial || (ajax_live && options.indexOf('live') >= 0) ) ) value = 3;
else alert( 'error line 174' );
return value;
//*/
}
function get_wikisyntax_image( index, options ) {
//*
if( !ajax ) return;
diaporama[index].api = '&action=query&prop=imageinfo&iiprop=url|size|user';
initial_ajax_queries++;
load_ajax_image( index, diaporama[index] );
//*/
}
function load_ajax_image( index, page ) {
//*
var api_url = getURL( diaporama[index].project, getNamespaceNumber( diaporama[index].project, page.title )[3], 2, {index:index,page:page} ) + page.api;
$.getJSON( api_url, function(data) {
getAfterAjax(data);
var index = data.data.index;
var page = data.data.page;
var pages_list = data.query.pages;
for( var t in pages_list ) {
if( !pages_list[t].imagerepository ) break;
page.url = pages_list[t].imageinfo[0].url;
page.url2 = pages_list[t].imageinfo[0].url.replace( /^.*\/[0-9a-f]\/[0-9a-f]{2}\/(.*)$/, '$1' );
page.width = Number(pages_list[t].imageinfo[0].width);
page.height = Number(pages_list[t].imageinfo[0].height);
break;
}
if( initial_ajax_queries > 0 ) initial_ajax_queries--;
if( initial_ajax_queries == 0 ) post_analysis_syntax();
});
//*/
}
function get_wikisyntax_category( index, param, options ) {
//*
if( !ajax ) return;
diaporama[index].api =
'&action=query'
+ '&list=categorymembers'
+ '&cmlimit='+diaporama[index].nbtitles
+ '&cmtitle='+encodeURIComponent(diaporama[index].title.replace(/ /g,'_'))
+ (diaporama[index].from?'&cmstartsortkey='+encodeURIComponent(diaporama[index].from.replace(/ /g,'_')):'');
if( diaporama[index].live == true ) return;
initial_ajax_queries++;
load_ajax_category( index, diaporama[index] );
//*/
}
function load_ajax_category( index, page ) {
//*
$.getJSON( getURL(diaporama[index].project,'',4,{index:index,page:page}) + page.api, function(data) {
getAfterAjax(data);
var index = data.data.index;
var project = diaporama[index].project;
var isimage = diaporama[index].isimage;
var pages_list = data.query.categorymembers;
diaporama[index].nbtitles = pages_list.length;
if( diaporama[index].nbdisplay > diaporama[index].nbtitles ) diaporama[index].nbdisplay = diaporama[index].nbtitles;
diaporama[index].nbloaded = 0;
for( var j=0; j<pages_list.length; j++ ) {
var page = getNamespaceNumber( project, pages_list[j].title );
var newpage = { type:-1, project:project, title:page[3], url:getURL(project,page[3],1) };
if( page[0] == 6 && ( isimage || fullscreenimages == 'always' ) && fullscreenimages != 'never' ) {
newpage.type = 1;
diaporama[index].list[diaporama[index].index] = newpage;
getImageSize( true, index, diaporama[index].index );
}
else {
newpage.type = 0;
diaporama[index].list[diaporama[index].index] = newpage;
diaporama[index].nbloaded++;
}
diaporama[index].index++;
}
//s='';for(var j=0;j<diaporama[index].nbtitles;j++)s+=diaporama[index].list[j].url+'\n';alert(s);
diaporama[index].index = 0;
if( diaporama[index].nbloaded == diaporama[index].nbtitles ) nbtreatedpages++;
initial_ajax_queries--;
if( initial_ajax_queries == 0 ) post_analysis_syntax();
});
//*/
}
/**
* Pre-read the list to download appropriate namespaces
*/
function pre_analyze_syntax( wikitext ) {
//*
var pages = wikitext.match(/^\* *(?:\[\[(.*)\]\](, *[ 0-9a-z=-]* *)*|file:\/\/(.*))$/gm);
//alert( 'display_time = '+display_time+'\n'+
// 'fadeout_time = '+fadeout_time+'\n'+
// 'fadein_time = '+fadein_time+'\n'+
// 'random_display = '+random_display+'\n'+
// 'number_of_pages = '+(pages?pages.length:0)+'\n'+'\n'+
// 'pages = '+'\n'+pages.join('\n')
// );
if( pages && pages.length > 0 ) {
for( var i=0; i<pages.length; i++ )
if( /^\* *\[\[.*\]\].*$/.test( pages[i] ) ) getProject( pages[i].replace(/^\* *\[\[(.*)\]\].*$/,'$1') );
downloadNamespaces();
}
//*/
}
/**
* Select the list of slides between all lists of the page
*/
function selectList() {
//*
var text = $('#textdiapo').val();
var i_title = 0;
var re_titles = text.match(/^=== *(.*) *===$/gm);
if( re_titles && re_titles.length > 1 ) {
i_title = Number($('input:radio[name=choicesinput]:checked').val());
if( i_title == NaN ) return;
if( i_title == re_titles.length-1 ) {
var re1_title = new RegExp( re_titles[i_title]+'(?:\n.*)*' );
var re_text = re1_title.exec(text);
text = re_text[0].split('\n').slice(1).join('\n');
}
else {
var re1_title = new RegExp( re_titles[i_title]+'(?:\n.*)*\n'+re_titles[i_title+1], '' );
var re_text = re1_title.exec(text);
var array_text = re_text[0].split('\n');
text = array_text.slice(1,array_text.length-1).join('\n');
}
}
re_display_time = /^display_time *= *(\d*)$/m.exec(text);
if( re_display_time ) display_time = re_display_time[1];
re_fadeout_time = /^fadeout_time *= *(\d*)$/m.exec(text);
if( re_fadeout_time ) fadeout_time = re_fadeout_time[1];
re_fadein_time = /^fadein_time *= *(\d*)$/m.exec(text);
if( re_fadein_time ) fadein_time = re_fadein_time[1];
re_random_display = /^random_display *= *(\d*)$/m.exec(text);
if( re_random_display ) {
if( re_random_display[1] == 'true' ) random_display = true;
if( re_random_display[1] == 'false' ) random_display = false;
}
// Scenario
fullscreenimages = $('input:radio[name=fullscreenimages]:checked').val();
/*
fadeout_time = Number($('#fadeouttime').val());
fadein_time = Number($('#fadeintime').val());
display_time = Number($('#displaytime').val());*/
// Technique
if( !$('#isinternet:checkbox:checked').val() ) internet = false;
if( !internet ) ajax_initial = ajax_live = false;
else {
ajax_initial = true;
if( $('input:radio[name=isinternetlive]:checked').val() == 'false' ) ajax_live = false;
else ajax_live = true;
}
setFrames(number_screens);
// Theming
//bordersize = Number( $('#bordersize').val() );
var color = $('input:radio[name=backgroundtype]:checked').val();
if( color == 'black' ) background_color = 'black';
else if( color == 'white' ) background_color = 'white';
//else if( color == 'color' ) background_color= $('#backgroundcolor').val();
$('body').css( 'background-color', background_color );
pages = text.match(/^\* *(?:\[\[(.*)\]\](, *[ 0-9a-z=-]* *)*|file:\/\/(.*))$/gm);
//alert( 'display_time = '+display_time+'\n'+
// 'fadeout_time = '+fadeout_time+'\n'+
// 'fadein_time = '+fadein_time+'\n'+
// 'random_display = '+random_display+'\n'+
// 'number_of_pages = '+(pages?pages.length:0)+'\n'+'\n'+
// 'pages = '+'\n'+pages.join('\n')
// );
if( pages && pages.length > 0 ) {
for( var i=0; i<pages.length; i++ )
if( /^\* *\[\[.*\]\].*$/.test( pages[i] ) ) getProject( pages[i].replace(/^\* *\[\[(.*)\]\].*$/,'$1') );
downloadNamespaces();
}
//*/
}
/*
Format:
Array( type, options... )
- type = 0 : normal static page
ex: * [[w:fr:A (lettre)]]
- page: page name with namespace
- type = 1 : image
ex: * [[w:fr:Fichier:Latin A.svg]], image
* [[w:fr:Fichier:EgyptianA-01.svg]], image, max
- page: name of the image, with the local namespace
- size: if = false original size, with the maximum of the display resolution
if = true force to the display resolution
- type = 2 : content of a category
ex: * [[w:fr:Catégorie:A]], content, static, random, 5 pages in 15
* [[w:fr:Category:A]], content, live, random, 10 pages, from [[Ā]]
* [[w:fr:Catégorie:A]], content, static, 5 pages
* [[w:fr:Catégorie:A]], content, live, 5 pages, from [[Æ]]
- page: category name with the local namespace
- project: url-identifier of the project
- isstatic: true if static, false if live (default: true)
- nbpages: number of pages to download (<= 500) (default: 0)
- israndom: true if random, false if linear (default)
- nbdisplay: number of pages to display
- from: first page in the list
- list: array of the downloaded pages
- index: index used in the live diaporama
- type = 3 : recentchanges
ex: * [[w:fr:Special:Recentchanges]]
- page: 'Special:Recentchanges' in the local name
- project: url-identifier of the project
- isstatic: true if static, false if live (default: true)
- nbpages: number of pages to download (<= 500) (default: 0)
- israndom: true if random, false if linear (default)
- nbdisplay: number of pages to display
-
- list: array of the downloaded pages
- index: index used in the live diaporama
*/
function readList() {
//*
nbtreatedpages = 0;
for( var index=0; index<pages.length; index++ ) {
// Separate different options
pages[index] = pages[index].replace( /^\* *(.*)$/, '$1' );
var options = pages[index].split(',');
for( var i=0; i<options.length; i++ ) {
if( /\[\[/.test( options[i] ) && !/\]\]/.test( options[i] ) ) {
for( var j=i+1; j<options.length; j++ ) {
if( /\]\]/.test( options[j] ) ) {
options[i] = options.slice( i, j+1 ).join(',');
options.splice( i+1, j-i );
break;
}
}
}
}
for( var i=0; i<options.length; i++ ) options[i] = options[i].trim();
options[0] = options[0].replace(regex_wikilink,'$1');
// Get link
var link = getProject( options.shift(), 0 );
var project = link[0];
var page = getNamespaceNumber( project, link[1] );
//alert(''+index+': '+pages[index]+'\n'+link+'\n'+page+'\n'+options);
///////////
// Image //
///////////
if( page[0] == 6 && ( options.indexOf('image') >= 0 || fullscreenimages == 'always' ) && fullscreenimages != 'never' ) {
pages[index] = {};
pages[index].type = 1;
pages[index].project = project;
pages[index].page = page[3];
var api_url =
getURL( project, page[3], 2, {index:index} )
+ '&action=query'
+ '&prop=imageinfo'
+ '&iiprop=url|size|user';
if( ajax_initial )
$.getJSON( api_url, function(data) {
getAfterAjax(data);
var index = data.data.index;
var pages_list = data.query.pages;
for( var t in pages_list ) {
if( !pages_list[t].imagerepository ) break;
pages[index].url = pages_list[t].imageinfo[0].url;
pages[index].url2 = pages_list[t].imageinfo[0].url.replace( /^.*\/[0-9a-f]\/[0-9a-f]{2}\/(.*)$/, '$1' );
pages[index].width = Number(pages_list[t].imageinfo[0].width);
pages[index].height = Number(pages_list[t].imageinfo[0].height);
break;
}
nbtreatedpages++;
if( nbtreatedpages == pages.length ) initScreens();
});
else nbtreatedpages++;
}
///////////////////////////
// Content of a category //
///////////////////////////
else if( page[0] == 14 && options.indexOf('content') >= 0 && ( ajax_initial || (ajax_live && options.indexOf('live') >= 0) ) ) {
pages[index] = {};
pages[index].type = 2;
pages[index].project = project;
pages[index].page = page[3];
pages[index].url = getURL( project, page[3], 1 );
pages[index].list = Array();
pages[index].index = 0;
pages[index].wait = {};
var nbpage1 = -1;
var nbpage2 = -1;
var nbpages = 500;
var nbdisplay = 500;
var from = '';
var isstatic = true;
var israndom = false;
var isimage = false;
if( options.indexOf('image') >= 0 ) isimage = true;
if( options.indexOf('live') >= 0 ) isstatic = false;
if( options.indexOf('random') >= 0 ) israndom = true;
for( var i=0; i<options.length; i++ ) {
if( /^(\d*) *pages? *(?:in *(\d*))?$/.test(options[i]) ) {
var res_nbpage = options[i].match(/^(\d*) *pages? *(?:in *(\d*))?$/);
nbpage1 = Number(res_nbpage[1]);
if( res_nbpage[2] ) nbpage2 = Number(res_nbpage[2]);
}
else if( /^from *\[\[(.*)\]\]$/.test(options[i]) ) {
var res_from = options[i].match( /^from *\[\[(.*)\]\]$/ );
from = res_from[1];
}
}
if( !israndom ) {
if( nbpage1 != -1 ) nbpages = nbpage1;
else nbpages = 10;
nbdisplay = nbpages;
}
else {
if( nbpage2 != -1 ) nbpages = nbpage2;
if( nbpage1 != -1 ) nbdisplay = nbpage1;
else nbdisplay = 6;
}
if( nbpages > 500 ) nbpages = 500;
if( nbdisplay > nbpages ) nbdisplay = nbpages;
pages[index].isstatic = isstatic;
pages[index].isimage = isimage;
pages[index].nbpages = nbpages;
pages[index].israndom = israndom;
pages[index].nbdisplay = nbdisplay;
pages[index].from = from;
pages[index].api =
'&action=query'
+ '&list=categorymembers'
+ '&cmlimit='+pages[index].nbpages
+ '&cmtitle='+encodeURIComponent(pages[index].page.replace(/ /g,'_'))
+ (pages[index].from?'&cmstartsortkey='+encodeURIComponent(pages[index].from.replace(/ /g,'_')):'');
if( isstatic )
$.getJSON( getURL(project,'',4,{index:index})+pages[index].api, function(data) {
getAfterAjax(data);
var index = data.data.index;
var project = pages[index].project;
var isimage = pages[index].isimage;
var pages_list = data.query.categorymembers;
pages[index].nbpages = pages_list.length;
if( pages[index].nbdisplay > pages[index].nbpages ) pages[index].nbdisplay = pages[index].nbpages;
pages[index].nbloaded = 0;
for( var j=0; j<pages_list.length; j++ ) {
var page = getNamespaceNumber( project, pages_list[j].title );
var newpage = { type:-1, project:project, page:page[3], url:getURL(project,page[3],1) };
if( page[0] == 6 && ( isimage || fullscreenimages == 'always' ) && fullscreenimages != 'never' ) {
newpage.type = 1;
pages[index].list[pages[index].index] = newpage;
getImageSize( true, index, pages[index].index );
}
else {
newpage.type = 0;
pages[index].list[pages[index].index] = newpage;
pages[index].nbloaded++;
}
pages[index].index++;
}
//s='';for(var j=0;j<pages[index].nbpages;j++)s+=pages[index].list[j].url+'\n';alert(s);
pages[index].index = 0;
if( pages[index].nbloaded == pages[index].nbpages ) nbtreatedpages++;
if( nbtreatedpages == pages.length ) {
pages[index].nbloaded = undefined;
initScreens();
}
});
else nbtreatedpages++;
}
///////////////////////////
// Display RecentChanges //
///////////////////////////
else if( page[0] == -1 && (['Recentchanges','Newpages','Log'].indexOf(page[2]) >= 0) && options.indexOf('content') >= 0 && ( ajax_initial || (ajax_live && options.indexOf('live') >= 0) ) ) {
pages[index] = {};
pages[index].type = 3;
pages[index].project = project;
pages[index].page = page[3];
pages[index].url = getURL( project, page[3], 1 );
pages[index].list = Array();
pages[index].index = 0;
pages[index].wait = {};
var nbpage1 = -1;
var nbpage2 = -1;
var nbpages = 500;
var nbdisplay = 500;
var israndom = false;
var since = false;
var isstatic = true;
var anon = '';
var bot = '';
var user = '';
var rctype = '';
if( options.indexOf('nobot') >= 0 ) bot = '!bot';
if( options.indexOf('live') >= 0 ) isstatic = false;
if( options.indexOf('random') >= 0 ) israndom = true;
for( var i=0; i<options.length; i++ ) {
if( /^bots? *(?:= *\[\[(.*)\]\])?$/.test(options[i]) ) {
var re_res = options[i].match(/^bots? *(?: *=\[\[(.*)\]\])?$/);
if( re_res[1] ) user = re_res[1];
else bot = 'bot';
}
else if( /^anons? *(?:= *\[\[(.*)\]\])?$/.test(options[i]) ) {
var re_res = options[i].match(/^anons? *(?:= *\[\[(.*)\]\])?$/);
if( re_res[1] ) user = re_res[1];
else anon = 'anon';
}
else if( /^users? *(= *\[\[.*\]\])?$/.test(options[i]) ) {
var re_res = options[i].match(/^users? *(?: *=\[\[(.*)\]\])?$/);
if( re_res[1] ) user = re_res[1];
else anon = '!anon';
}
else if( /^(\d*) *pages? *(?:in *(\d*))?$/.test(options[i]) ) {
var res_nbpage = options[i].match(/^(\d*) *pages? *(?:in *(\d*))?$/);
nbpage1 = Number(res_nbpage[1]);
if( res_nbpage[2] ) nbpage2 = Number(res_nbpage[2]);
}
else if( /^since (\d*)/.test(options[i]) ) {
var re_res;
since = Date.now()-siteinfo[project].difftime
if( (re_res = /(\d*) *seconds?/.exec(options[i])) != null ) since -= Number(re_res[1])* 1000;
if( (re_res = /(\d*) *minutes?/.exec(options[i])) != null ) since -= Number(re_res[1])* 60000;
if( (re_res = /(\d*) *hours?/.exec(options[i])) != null ) since -= Number(re_res[1])* 3600000;
if( (re_res = /(\d*) *days?/.exec(options[i])) != null ) since -= Number(re_res[1])*86400000;
}
}
if( !israndom ) {
if( nbpage1 != -1 ) nbpages = nbpage1;
else nbpages = 10;
nbdisplay = nbpages;
}
else {
if( nbpage2 != -1 ) nbpages = nbpage2;
if( nbpage1 != -1 ) nbdisplay = nbpage1;
else nbdisplay = 6;
}
if( user ) bot = anon = '';
if( page[2] == 'Recentchanges' ) rctype = '';
else if( page[2] == 'Newpages' ) rctype = 'new';
if( page[2] == 'Log' ) rctype = 'log';
if( nbpages > 500 ) nbpages = 500;
if( nbdisplay > nbpages ) nbdisplay = nbpages;
pages[index].isstatic = isstatic;
pages[index].nbpages = nbpages;
pages[index].israndom = israndom;
pages[index].nbdisplay = nbdisplay;
pages[index].anon = anon;
pages[index].bot = bot;
pages[index].user = user;
pages[index].rctype = rctype;
pages[index].since = (since!==false?ISODateString(new Date(since)):'');
pages[index].api =
'&action=query'
+ '&list=recentchanges'
+ ( pages[index].type ? '&rctype='+pages[index].rctype : '' )
+ '&rclimit='+pages[index].nbpages
+ ( pages[index].since ? '&rcend='+pages[index].since : '' )
+ ( anon || bot ? '&rcshow=' + anon + (anon&&bot?'|':'') + bot : '' )
+ ( pages[index].user ? '&rcuser='+encodeURIComponent(pages[index].user.replace(/ /g,'_')) : '' );
if( isstatic )
$.getJSON( getURL(project,'',4,{index:index})+pages[index].api, function(data) {
getAfterAjax(data);
var index = data.data.index;
var project = pages[index].project;
var pages_list = data.query.recentchanges;
pages[index].nbpages = pages_list.length;
if( pages[index].nbdisplay > pages[index].nbpages ) pages[index].nbdisplay = pages[index].nbpages;
for( var j=0; j<pages_list.length; j++ ) {
var page = getNamespaceNumber( project, pages_list[j].title );
var newpage = { type:0, project:project, page:page[3], url:getURL(project,page[3],1) };
pages[index].list[pages[index].index] = newpage;
pages[index].index++;
}
//s='';for(var j=0;j<pages[index].nbpages;j++)s+=pages[index].list[j].url+'\n';alert(s);
pages[index].index = 0;
nbtreatepages++;
if( nbtreatedpages == pages.length ) initScreens();
});
else nbtreatedpages++;
}
//else if( /^http:\/\/(.*)\/wiki\/(.*)\*(?:\[(\d*)\])?$/.test(pages[index]) ) {
//
// if( ajax_allpages ) {
//
// var api = pages[index].match(/^http:\/\/(.*)\/wiki\/(.*)\*(?:\[(\d*)\])?$/);
// var url_project = api[1];
// wikititle = getNamespaceNumber(url_project,api[2]);
// if( wikititle.length > 0 ) {
//
// alert(wikititle);
// var limit = 10;
// if( api[3] ) limit = api[3];
// var api_url = getURL( url_project, 4 )+'&action=query&list=allpages&aplimit='+limit+'&apnamespace='+wikititle[0]+'&apprefix='+wikititle[1];
// $.getJSON( api_url, function(data) { pages_list = data.query.allpages; endarray = pages.slice(index+1); pages = pages.slice(0,index); for( j=0; j<pages_list.length; j++ ) pages.push(getURL(url_project,pages_list[j].title,1)); pages = pages.concat( endarray ); index+= pages_list.length; readList(); } );
// break;
// }
// }
// else pages = pages.slice(0,index).concat(pages.slice(index+1));
//}
else {
pages[index] = {};
pages[index].type = 0;
pages[index].project = project;
pages[index].page = page[3];
pages[index].url = getURL( project, page[3], 1 );
nbtreatedpages++;
}
}
if( nbtreatedpages == pages.length ) {
//s = ''; for( var i=0; i<pages.length; i++ ) s += pages[i]['type']+':'+pages[i]['url']+'\n';
//alert('Result:\n'+s);
//setFrames(number_screens);
initScreens();
}
//*/
}
function getImageSize( initial, index, index2, nr ) {
//*
var page = pages[index];
if( initial && ( page.type == 2 || page.type == 3 ) ) page = pages[index].list[index2];
if( !initial && ( page.type == 2 || page.type == 3 ) ) page = pages[index].wait[String(nr)][index2];
var api_url =
getURL( page.project, page.page, 2, {initial:initial,index:index,index2:index2} )
+ '&action=query'
+ '&prop=imageinfo'
+ '&iiprop=url|size|user';
$.getJSON( api_url, function(data) {
getAfterAjax(data);
var initial = data.data.initial;
var index = data.data.index;
var index2 = data.data.index2;
var pages_list = data.query.pages;
var page = pages[index];
if( initial && ( page.type == 2 || page.type == 3 ) ) page = pages[index].list[index2];
if( !initial && ( page.type == 2 || page.type == 3 ) ) page = pages[index].wait[String(nr)][index2];
for( var t in pages_list ) {
if( !pages_list[t].imagerepository ) break;
page.type = 1;
page.project = page.project;
page.page = page.page;
page.url = pages_list[t].imageinfo[0].url;
page.url2 = pages_list[t].imageinfo[0].url.replace( /^.*\/[0-9a-f]\/[0-9a-f]{2}\/(.*)$/, '$1' );
page.width = Number(pages_list[t].imageinfo[0].width);
page.height = Number(pages_list[t].imageinfo[0].height);
break;
}
if( initial ) {
if( pages[index].type == 2 || pages[index].type == 3 ) {
pages[index].nbloaded++;
if( pages[index].nbloaded == pages[index].nbpages ) nbtreatedpages++;
}
else nbtreatedpages++;
if( nbtreatedpages == pages.length ) {
pages[index].nbloaded = undefined;
initScreens();
}
}
else {
pages[index].nbloaded++;
if( pages[index].nbloaded == pages[index].nbpages ) {
pages[index].nbloaded = undefined;
for( var j=0; j<pages[index].nbdisplay && j<number_screens && !loaded_screens[(j+nr)%number_screens] && ((j+nr)%number_screens != current_screen || init); j++ )
preloadScreen( (nr+j)%number_screens, index );
if( preloadajaxqueue.length > 0 ) {
var newelem = preloadajaxqueue.shift();
preloadAjax( newelem.nr, newelem.index );
}
}
}
});
//*/
}
//
// Set the frames
//
// @param[in] nb_new_frames Number of frames to set
//
function setFrames( nb_new_frames ) {
//*
$('#parametersdialog').dialog('destroy').remove();
// Verify parameters
var nb_frames = $('iframe').length;
if( nb_new_frames < 2 ) nb_new_frames = 2;
if( nb_new_frames <= nb_frames ) return;
// Add frames
for( ; nb_frames<nb_new_frames; nb_frames++ ) {
$('body').append( '<iframe name="screen'+nb_frames+'" id="screen'+nb_frames+'" class="screen screen'+nb_frames+'" frameborder="0" scrolling="no" src="" /'+'>' );
if( nb_frames != 0 ) $('#screen'+nb_frames).css( 'display', 'none' );
else $('#screen'+nb_frames).css( 'display', 'block' );
$('body').append( '<div id="status-screen'+nb_frames+'" class="status-screen" style="left:'+(5+10*nb_frames)+'px; background-color:red; border-color:red;" /'+'>' );
}
// Set width and height
$('iframe').width(window.innerWidth-2*bordersize).height(window.innerHeight-2*bordersize).css( { 'top':bordersize+'px', 'left':bordersize+'px' } );
// Reset all frames
number_screens = nb_new_frames;
for( var i=0; i<number_screens; i++ ) {
loaded_screens[i] = false;
$('#screen'+i).attr( 'src', '' );
$('#status-screen'+i).css( { 'background-color':'red', 'border-color':'red' } );
}
//*/
}
function initScreens() {
//*
current_screen = 0;
page = 0;
page2 = 0;
history_addresses = Array();
//history = Array();
history_index = 0;
s = '';
for( var i=0; i<pages.length; i++ ) {
s += 'type:' + pages[i].type + '\n';
s += 'project:' + pages[i].project + '\n';
s += 'page:' + pages[i].page + '\n';
s += 'url:' + pages[i].url + '\n';
if( pages[i].type == 1 ) {
s += 'url2:' + pages[i].url2 + '\n';
s += 'width:' + pages[i].width + '\n';
s += 'height:' + pages[i].height + '\n';
}
else if( pages[i].type == 2 || pages[i].type == 3 ) {
s += 'list:\n';
for( var l in pages[i].list ) {
s += ' ( ';
s += 'type:' + pages[i].list[l].type + ', ';
s += 'project:' + pages[i].list[l].project + ', ';
s += 'page:' + pages[i].list[l].page;
if( pages[i].list[l].type == 1 ) {
s += ', ';
s += 'url:' + pages[i].list[l].url + ', ';
s += 'url2:' + pages[i].list[l].url2 + ', ';
s += 'width:' + pages[i].list[l].width + ', ';
s += 'height:' + pages[i].list[l].height;
}
s += ' )\n';
}
s += 'index:' + pages[i].index + '\n';
//s += 'wait:' + pages[i].wait + '\n';
s += 'isstatic:' + pages[i].isstatic + '\n';
s += 'nbpages:' + pages[i].nbpages + '\n';
s += 'israndom:' + pages[i].israndom + '\n';
s += 'nbdisplay:' + pages[i].nbdisplay + '\n';
if( pages[i].type == 2 ) {
s += 'isimage:' + pages[i].isimage + '\n';
s += 'from:' + pages[i].from + '\n';
s += 'api:' + pages[i].api + '\n';
}
else {
s += 'anon:' + pages[i].anon + '\n';
s += 'bot:' + pages[i].bot + '\n';
s += 'user:' + pages[i].user + '\n';
s += 'rctype:' + pages[i].rctype + '\n';
s += 'since:' + pages[i].since + '\n';
s += 'api:' + pages[i].api + '\n';
}
}
if( i < pages.length-1 ) s += '\n';
}
//alert( s );
for( var i=0; i<number_screens; i++ ) loaded_screens[i] = false;
//reserved_slots_from = number_screens;
for( var i=0; i<number_screens; i++ ) {
//alert('*0');
preloadScreen(i);//alert('*1');
changePage();//alert('*2');
// Very very very important: wait before add this hook to the screens, do not add immediatly after appending of the iframe, else the first trivial (empty) load breaks everything after in the synchronisation
$('#screen'+i).load(onloadscreen);
}
// Set the event attached to resize of the screen
$(window).resize(function() {
$('iframe').width(window.innerWidth-2*bordersize).height(window.innerHeight-2*bordersize).css( { 'top':bordersize+'px', 'left':bordersize+'px' } );
});
//alert('fin init');
//*/
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////// DIAPORAMA ///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//* * *
// +
//
//* *
// +
//
// * *
//+
//
//si reserved_slots >= number_screens
// false
//sinon
// reserved_slots_from > nr >= (reserved_slots+reserved_slots_from)%number_screens
//
//
function preloadScreen( nr, index ) {
//*
//alert('nr='+nr+' '+index);
// Invalid loading state
loaded_screens[nr] = false;
$('#status-screen'+nr).css( { 'background-color':'red', 'border-color':'red' } );
var differed = true;
// Get parameters
if( index == undefined ) {
if( true ) index = page;
differed = false;
//if( page2 == 0 || pages[page].list.length > 0 ) index = page;
//if( page2 == 0 || pages[page].index < pages[page].nbpages ) index = page;
//if( reserved_slots < number_screens && nr < reserved_slots_from && nr >= (reserved_slots+reserved_slots_from)%number_screens ) index = page;
//else {
//alert('exit');
// return;
//}
}
// Get current page
var cur_page = pages[index];
//alert(cur_page.index+' '+cur_page.type+' '+cur_page.isstatic);
if( ( cur_page.type == 2 || cur_page.type == 3 ) && cur_page.index == 0 && !cur_page.isstatic ) {
//alert(cur_page.index);
//else if( page2 != 0 ) {alert('exit');return;}
if( cur_page.wait[String(nr)] != undefined ) {/*alert('load wait');*/cur_page.list = clone(cur_page.wait[String(nr)]); cur_page.wait[String(nr)] = undefined; }
else if( page2 != 0 ) {/*alert('exit');*/return;}
else {/*alert('loadajax');*/preloadAjax( nr, index ); return; }
}
//alert('index='+cur_page.index+' nr='+nr+' page='+page+' page2='+page2);
if( ( cur_page.type == 2 || cur_page.type == 3 ) && cur_page.index >= 0 && cur_page.index < cur_page.nbdisplay ) {
//reserved_slots = cur_page.nbpages-cur_page.index-1;
//if( reserved_slots > number_screens ) reserved_slots = number_screens;
//reserved_slots_from = nr;
//s='';
//for( var j=0; j<pages[index].list.length; j++ ) s+=pages[index].list[j].page+'\n';
var r = Math.floor((pages[index].nbpages+1)*Math.random());
//alert('random '+cur_page.israndom+' '+r+' '+s);
if( cur_page.israndom ) cur_page = pages[index].list[r];
else cur_page = pages[index].list[pages[index].index];
}
//alert('index(2)='+pages[index].index);
//var src_page = '';
// Restore big dimensions
$('#screen'+nr).width( window.innerWidth-2*bordersize ).height( window.innerHeight-2*bordersize ).css( {'top':bordersize+'px', 'left':bordersize+'px'} );
//alert('*');
//alert('index(2)='+cur_page.index);
// Normal page
if( cur_page.type == 0 ) {
//alert(nr,index);
preloadPage( nr, cur_page );
//save_history( pages[index], nr );
// Image
} else if( cur_page.type == 1 ) {
preloadImage( nr, cur_page );
//save_history( pages[index], nr );
}
//alert( 'next');
// Category or Recentchanges/Newpages/Log
if( pages[index].type == 2 || pages[index].type == 3 ) {
//alert(pages[index].index);
pages[index].index = ( pages[index].index + 1 ) % pages[index].nbdisplay;
//alert('next 2-3 page '+pages[index].list+' '+pages[index].nbpages);
//alert(pages[index].index);
//if( !pages[index].isstatic ) {
//if( pages[index].index == 0 ) {
//pages[index].list = [];
//reserved_slots += pages[index].nbdisplay;
//preloadAjax( nr, index );
//}
//else if( pages[index].list.length > 0 ) preloadScreen( (nr+1)%number_screens, index );
//}
}
//alert('*+'+nr);
// Category or Recentchanges/Newpages/Log (further loading)
//else if( ( cur_page.type == 2 || cur_page.type == 3 ) && ( cur_page.isstatic || ( page2 != 0 && ( cur_page.list.length > 0 ) ) ) ) {
//
// var src_page = '';
//
// if( cur_page.index == 0 ) {
//
// var inr = (nr+1)%number_screens;
// while( cur_page.wait[String(inr)] != undefined ) {
//
// if( cur_page.wait[inr].index != 0 ) {
//
// cur_page.index = cur_page.wait[inr].index
// cur_page.list = cur_page.wait[inr].list;
// break;
// }
// cur_page.wait[inr] = undefined;
// }
// }
//
// if( cur_page.israndom ) src_page = cur_page.list[Math.floor((cur_page.nbpages+1)*Math.random())].url;
// else src_page = cur_page.list[cur_page.index].url;
// cur_page.index = (cur_page.index+1) % cur_page.nbdisplay;
//
// $('#screen'+nr).attr( 'src', src_page );
//}
//
//
//// Category or Recentchanges/Newpages/Log (medium loading)
//else if( cur_page.type == 2 || cur_page.type == 3 )
//
// return;
//*/
}
function preloadPage( nr, cur_page ) {
//*
// Invalid loading state
loaded_screens[nr] = false;
$('#status-screen'+nr).css( { 'background-color':'red', 'border-color':'red' } );
$('#screen'+nr).attr( 'src', cur_page.url );
//*/
}
//
// Preload an image
//
// @param[in] nr ID of the frame
// @param[in] index Number of the page
// @param[in] index2 Second index, in case of sub-list
//
function preloadImage( nr, cur_page ) {
//*
// Invalid loading state
loaded_screens[nr] = false;
$('#status-screen'+nr).css( { 'background-color':'red', 'border-color':'red' } );
// Get properties
var src_page = cur_page.url;
var width = cur_page.width;
var height = cur_page.height;
// Get screen dimensions
var screen_width = window.innerWidth-2*bordersize;
var screen_height = window.innerHeight-2*bordersize;
var ratio_width = width/screen_width;
var ratio_height = height/screen_height;
// Adapt the image to the screen dimensions:
// 1) image smaller than the screen;
if( width <= screen_width && height <= screen_height )
$('#screen'+nr).width( width ).height( height ).css( { 'top':Math.floor((screen_height-height)/2+bordersize)+'px', 'left':Math.floor((screen_width-width)/2+bordersize)+'px' } );
// 2) landscape format (relatively to the screen);
else if( ratio_width < ratio_height ) {
src_page = src_page.replace( /^(.*)\/([0-9a-f])\/([0-9a-f]{2})\/(.*)$/, '$1/thumb/$2/$3/$4/' )+Math.ceil(width/ratio_height)+'px-'+cur_page['url2'];
$('#screen'+nr).width( Math.ceil(width/ratio_height) ).height( screen_height ).css( 'left', Math.floor((screen_width-width/ratio_height)/2+bordersize)+'px' );
// 3) portrait format (relatively to the screen)
} else {
src_page = src_page.replace( /^(.*)\/([0-9a-f])\/([0-9a-f]{2})\/(.*)$/, '$1/thumb/$2/$3/$4/' )+screen_width+'px-'+cur_page['url2'];
$('#screen'+nr).width( screen_width ).height( Math.ceil(height/ratio_width) ).css( 'top', Math.floor((screen_height-height/ratio_width)/2+bordersize)+'px' );
}
// Load the page
$('#screen'+nr).attr( 'src', src_page );
//*/
}
//
// Preload a category/Recentchanges/Newpages/Log using Ajax
//
// @param[in] nr ID of the frame
// @param[in] index Number of the page
//
function preloadAjax( nr, index ) {
//*
if( pages[index].nbloaded != undefined ) {
preloadajaxqueue.push( {nr:nr,index:index} );
return;
}
//pages[index].list = [];
pages[index].nbloaded = 0;
AjAX.niew();
$.getJSON( getURL(pages[index].project,'', 4,{nr:nr,index:index})+pages[index].api, function(data) {
//alert('preloadajax');
getAfterAjax(data);
var nr = data.data.nr;
var index = data.data.index;
var cur_page = pages[index];
var project = cur_page.project;
var isimage = cur_page.isimage;
if( cur_page.type == 2 ) pages_list = data.query.categorymembers;
else if( cur_page.type == 3 ) pages_list = data.query.recentchanges;
if( cur_page.israndom ) cur_page.nbpages = pages_list.length;
cur_page.wait[String(nr)] = [];
var list = cur_page.wait[String(nr)];
for( var j=0; j<cur_page.nbpages; j++ ) {
var page = getNamespaceNumber( project, pages_list[j%pages_list.length].title );
var newpage = { type:-1, project:project, page:page[3], url:getURL(project,page[3],1) };
if( cur_page.type == 2 && ( page[0] == 6 && ( isimage || fullscreenimages == 'always' ) && fullscreenimages != 'never' ) ) {
newpage.type = 1;
list[j] = newpage;
getImageSize( false, index, j, nr );
}
else {
newpage.type = 0;
list[j] = newpage;
cur_page.nbloaded++;
}
}
//alert('*');
//alert(cur_page.nbloaded+ ' '+cur_page.nbpages);
if( cur_page.nbloaded == cur_page.nbpages ) {
//alert('fin load ajax list='+cur_page.wait[String(nr)]);
cur_page.nbloaded = undefined;
///alert(loaded_screens);
//j=0;
//alert( ''+nr+' '+cur_page.nbdisplay +' '+ number_screens + !loaded_screens[(j+nr)%number_screens] + ((j+nr)%number_screens != current_screen) + init );
for( var j=0; j<cur_page.nbdisplay && j<number_screens && !loaded_screens[(j+nr)%number_screens] && ((j+nr)%number_screens != current_screen || init); j++ ){
//alert('j='+j);
preloadScreen( (nr+j)%number_screens, index );}
if( preloadajaxqueue.length > 0 ) {
var newelem = preloadajaxqueue.shift();
preloadAjax( newelem.nr, newelem.index );
}
}
//s='';for(var j=0;j<pages[index].nbpages;j++)s+=pages[index].list[j].url+'\n';alert(s);
//pages[index].index = 0;
//if( pages[index].nbloaded == pages[index].nbpages ) nbtreatedpages++;
//
//if( nbtreatedpages == pages.length ) {
//
// pages[index].nbloaded = undefined;
// initScreens();
//}
//var newlist = Array();
//for( var j=0; j < cur_page.nbdisplay || (cur_page.nbrandom && j < cur_page.nbpages); j++ )
//
// newlist.push( { type:0, project:cur_page.project, page:pages_list[j%pages_list.length].title, url:getURL(cur_page.project,pages_list[j%pages_list.length].title,1) } );
//
//cur_page.wait[snr] = {}
//cur_page.wait[snr].index = 0;
//cur_page.wait[snr].list = newlist;
//for( var j=0; j<cur_page.nbdisplay && j<number_screens && !loaded_screens[(j+nr)%number_screens] && ((j+nr)%number_screens != current_screen || init); j++ ) {
//
// if( cur_page.nbrandom ) src_page = cur_page.wait[snr].list[Math.floor((cur_page.nbpages+1)*Math.random())].url;
// else src_page = cur_page.wait[snr].list[cur_page.wait[snr].index].url;
// cur_page.wait[snr].index = (cur_page.wait[snr].index+1) % cur_page.nbdisplay;
//
// $('#screen'+((j+nr)%number_screens)).attr( 'src', src_page );
//}
//s='';for(var j=0;j<cur_page.nbpages;j++)s+=cur_page.wait[snr].list[j].url+'\n';alert(s);
//
//if( cur_page.wait[snr].index == 0 ) {
//
// //cur_page.index = cur_page.wait[snr].index
// //cur_page.list = cur_page.wait[snr].list;
// cur_page.wait[snr] = undefined;
//}
});
//*/
}
//
//
//
function save_history( cur_page, nr, index, index2 ) {
//*
history_addresses[history_index] = {};
if( cur_page.type == 0 || cur_page.type == 1 ) history_addresses[history_index].node = clone( cur_page );
else if( cur_page.type == 2 || cur_page.type == 3 ) history_addresses[history_index].node = clone( cur_page.list[index2] );
history_addresses[history_index].nr = nr;
history_addresses[history_index].index = index;
history_addresses[history_index].index2 = index2;
if( cur_page.type == 2 || cur_page.type == 3 ) {
history_addresses[history_index].parent = {};
history_addresses[history_index].parent.type = cur_page.type;
history_addresses[history_index].parent.project = cur_page.project;
history_addresses[history_index].parent.page = cur_page.page;
history_addresses[history_index].parent.url = cur_page.url;
history_addresses[history_index].parent.isstatic = cur_page.isstatic;
history_addresses[history_index].parent.nbpages = cur_page.nbpages;
history_addresses[history_index].parent.nbrandom = cur_page.nbrandom;
history_addresses[history_index].parent.nbdisplay = cur_page.nbdisplay;
history_addresses[history_index].parent.type = cur_page.type;
history_addresses[history_index].parent.api = cur_page.api;
if( cur_page.type == 2 ) {
history_addresses[history_index].parent.isimage = cur_page.isimage;
history_addresses[history_index].parent.from = cur_page.from;
}
else if( cur_page.type == 3 ) {
history_addresses[history_index].parent.anon = cur_page.anon;
history_addresses[history_index].parent.bot = cur_page.bot;
history_addresses[history_index].parent.user = cur_page.user;
history_addresses[history_index].parent.rctype = cur_page.rctype;
history_addresses[history_index].parent.since = cur_page.since;
}
}
history_index++;
//*/
}
//
// Advance the indexes of the current (loading) page
//
function changePage() {
//*
var cur_page = pages[page];
if( ( cur_page.type == 2 || cur_page.type == 3 ) && page2 < cur_page.nbdisplay-1 )
page2++;
else {
if( !random_display ) page = (page+1)%(pages.length);
else page = Math.floor(Math.random()*(pages.length));
page2 = 0;
}
//*/
}
//
// Main event when a frame is loaded
//
function onloadscreen() {
//*
var next_screen = (current_screen+1) % number_screens;
var nr = Number(/^screen(\d*)$/.exec($(this).attr('id'))[1]);
//alert('loaded'+nr);
loaded_screens[nr] = true;
$('#status-screen'+nr).css( { 'background-color':'green', 'border-color':'green' } );
if( nr == 0 && init ) $('#status-screen'+nr).css( 'border-color', background_color );
if( false && changing_screen ); // very useful protection, which was (is) really useful to avoid synchro problems during the initialization - this is really a test to know if there is no synchro problem, particularly with special scenarios (content of category (particularly live), RC...)
else if( nr == current_screen && loaded_screens[next_screen] ) changescreen();
//else if( init && nr == next_screen && loaded_screens[current_screen] ) changescreen();
else if( nr == next_screen && loaded_screens[current_screen] ) changescreen();
//*/
}
//
// Go to the next screen
//
function changescreen() {
//*
//changing_screen = true;
var next_screen = (current_screen+1) % number_screens;
//history_addresses.push( $('#screen'+current_screen).attr( 'src' ) );
if( current_screen == 0 && init ) {
setTimeout( changescreen, display_time*100 );
init = false;
return;
}
$('#screen'+current_screen).fadeOut( fadeout_time*100, function() {
$('#status-screen'+current_screen).css( 'border-color', 'green' );
$('#status-screen'+((current_screen+1)%number_screens)).css( 'border-color', background_color );
//loaded_screens[current_screen] = false;
$('#screen'+next_screen).fadeIn( fadein_time*100, function() {
current_screen = (current_screen+1)%number_screens;
next_screen = (current_screen+1)%number_screens;
//changing_screen = false;
//alert('*1');
//alert((-1+3)%3);
preloadScreen((current_screen-1+number_screens)%number_screens);//alert('*2');
changePage();//alert('*3'+next_screen+loaded_screens[next_screen]);
if( loaded_screens[next_screen] ) { /*alert('loadnext');*/setTimeout( changescreen, display_time*100 );}
});
});
//*/
}
////////////////////////////////////////////////////////////////////////////////
// AUXILIARY SCRIPTS //
////////////////////////////////////////////////////////////////////////////////
function getAfterAjax( data ) {
//*
//*/
}
//
// Get a date with the ISO 8601 format
//
// MIT license
// © 2011 Inimino
// from Mozilla Developer Center, page en/JavaScript/Reference/Global_Objects/Date
//
function ISODateString(d) {
//*
function pad(n) { return n<10 ? '0'+n : n }
return d.getUTCFullYear()+'-'
+ pad(d.getUTCMonth()+1)+'-'
+ pad(d.getUTCDate())+'T'
+ pad(d.getUTCHours())+':'
+ pad(d.getUTCMinutes())+':'
+ pad(d.getUTCSeconds())+'Z'
//*/
}
//
// Fonction de clonage
//
// CC-BY-SA license
// @author Keith Devens
// @see http://keithdevens.com/weblog/archive/2007/Jun/07/javascript.clone
//
function clone(srcInstance) {
//*
// Si l'instance source n'est pas un objet ou qu'elle ne vaut rien c'est une feuille donc on la retourne
if( typeof(srcInstance) != 'object' || srcInstance == null )
return srcInstance;
// On appel le constructeur de l'instance source pour crée une nouvelle instance de la même classe
var newInstance = srcInstance.constructor();
// On parcourt les propriétés de l'objet et on les recopies dans la nouvelle instance
for( var i in srcInstance )
newInstance[i] = clone(srcInstance[i]);
// On retourne la nouvelle instance
return newInstance;
//*/
}
function display_object( o ) {
//*
var s = '';
for( var t in o ) s += t + ':' + o[t] + '\n';
alert( s );
//*/
}
$(initScreenViewer);
</script>
</head>
</html>