User:Seb35/ScreenViewer/Code
From MediaWiki.org
< User:Seb35 | ScreenViewer
<?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>