File: components/webfan/workspace/js/desktop.js

Recommend this page to a friend!
  Classes of Till Wehowski   µ.Flow   components/webfan/workspace/js/desktop.js   Download  
File: components/webfan/workspace/js/desktop.js
Role: Class source
Content type: text/plain
Description: Class source
Class: µ.Flow
General purpose library of objects
Author: By
Last change: Update desktop.js
Date: 7 years ago
Size: 114,461 bytes
 

Contents

Class file image Download
/** !desktop - * Webfan Desktop * (c) Till Wehowski, Webfan.de - All rights reserved * http://look-up.webfan.de/webdof-license * * Desktop based on: https://github.com/nathansmith/jQuery-Desktop * by Nathan Smith http://sonspring.com/ * nathansmith/jQuery-Desktop is dual licensed under MIT and GPL. * - MIT: * http://opensource.org/licenses/MIT * - GPL: * http://gnu.org/licenses/gpl */ 'use strict'; (function(){ function WebfanCreateCookie(name,value,days) { if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; var u = new frdl.Url(''); var url = u.getLocation(); var host = u.getHost(); var h = host.split("."); document.cookie = name+"="+value+expires+";domain=."+h[h.length-2]+"."+h[h.length-1]+";path=/"; document.cookie = name+"="+value+expires+";domain=.webfan.de;path=/"; } function WebfanReadCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } var $wd_opt_destination_locale = 'ul.localizationTool'; /* Dom.addStylesheetRules([ ['h2', // Also accepts a second argument as an array of arrays instead ['color', 'red'], ['background-color', 'green', true] // 'true' for !important rules ], ['.myClass', ['background-color', 'yellow'] ] ]); */ $.fn['wd_setThemeOption'] = function(opt, val) { var meta, fav, favs, found = false,css = [ ], i= 0, j = 0, def = 0, DEFTheme = $.WebfanDesktop.getDefaultTheme(), f = false; if('wallpaper' === opt && null !== frdl.$q('*[data-frdl-mod="workspace"]', false)) { $(frdl.$q('*[data-frdl-mod="workspace"]', false)).css('background', 'url(' + val + ') repeat'); } if('apple-mobile-web-app-status-bar-style' === opt) { var Tags = document.querySelectorAll('meta[name="apple-mobile-web-app-status-bar-style"]'); if(0 === Tags.length){ meta = frdl.Dom.create('meta'); meta.setAttribute('name', 'apple-mobile-web-app-status-bar-style'); meta.setAttribute('content', val); Dom.add(meta, Dom.getTagNames('head')[0], true); }else { if(1 < Tags.length){ console.warn('More than ONE Tag of meta[name="apple-mobile-web-app-status-bar-style"] defined in DOM!'); } for(i = 0; i< Tags.length;i++){ Tags[i].setAttribute('content', val); if(i>0){ frdl.Dom.remove(Tags[i]); } } } } if('favicon' === opt) { found = false; favs = frdl.Dom.getTagNames('link'); for(i = 0; i< favs.length;i++){ if(favs[i].getAttribute('rel')==='shortcut icon'){ found=true; fav = favs[i]; } } if(true!==found){ fav = Dom.create('link'); fav.setAttribute('rel', 'shortcut icon'); fav.setAttribute('type', 'image/x-icon'); Dom.add(fav, Dom.getTagNames('head')[0]); } fav.setAttribute('href', val); } if('css' === opt){ if('undefined' !== typeof val ){ for(var i = 0; i < val.length; i++){ try{ f = false; if(val[i].selector.match(/^#desktop\s(.*)/))f=true; for(j = 0; j < DEFTheme.css.length; j++){ if( ( val[i].selector === DEFTheme.css[j].selector && ( val[i].attr === DEFTheme.css[j].attr || true === DEFTheme.css[j].allAttributes ) ) ){ f=true; break; } } for(j = 0; j < DEFTheme.css.length; j++){ if( ( val[i].selector === DEFTheme.css[j].selector && val[i].attr === DEFTheme.css[j].attr && true === DEFTheme.css[j].disallowed ) ){ f=false; break; } } if(true === f){ css.push([ val[i].selector, [val[i].attr, val[i].value, ((true === val[i].important) ? true : null)] ]); }else{ console.log("The css selector " + val[i].selector + " is not editable."); } }catch(err){ console.error(err); } } Dom.addStylesheetRules(css, true); } } }; $.fn['WebfanDesktopThemeOption'] =$.fn['wd_setThemeOption']; $.fn['WebfanDesktopTheme'] = function(Theme) { if('undefined' === typeof Theme)return $.WebfanDesktop.Registry.System.Theme; var def = 0, k, i =0; var DEFTheme = $.WebfanDesktop.getDefaultTheme(); for( k in DEFTheme){ $.WebfanDesktop.setThemeOption(k, DEFTheme[k]); } for( k in Theme){ if('undefined' === typeof DEFTheme[k])continue; $.WebfanDesktop.setThemeOption(k, Theme[k]); } $.WebfanDesktop.Registry.System.Theme = Theme; return this; }; /* JQD HERE !!! */ var $ModulProgramm_Locale = { mid : 'locale', title : 'Locale', author : 'Till Wehowski, Webfan.de', description : 'Localization and Translation Tool.', ico : 'http://static.webfan.de/icons/icons-3/icon_get_world.gif', init : function(Desktop, modul){ frdl.wd().bootReady = false; frdl.wd().resetReady('Loading locale..........',66, function(){ if('function' !== typeof frdl.lang)return false; frdl.lang({ 'Hello' : { 'en_GB' : 'Hello', 'de_DE' : 'Hallo', 'fr_FR' : 'Bonjour' } , 'class:data-langstr-of' : { 'en_GB' : 'of', 'de_DE' : 'von', 'fr_FR' : 'de' }, 'New' : { 'en_GB' : 'New', 'de_DE' : 'Neu', 'fr_FR' : 'Nouveau' }, 'Modus' : { 'en_GB' : 'Mode', 'de_DE' : 'Modus', 'fr_FR' : 'Mode' }, 'Help' : { 'en_GB' : 'Help', 'de_DE' : 'Hilfe', 'fr_FR' : 'Aide' }, 'Documentation' : { 'en_GB' : 'Documentation', 'de_DE' : 'Dokumentation', 'fr_FR' : 'Documentation' }, 'Language' : { 'en_GB' : 'Language', 'de_DE' : 'Sprache', 'fr_FR' : 'Langue' }, 'About' : { 'en_GB' : 'About', 'de_DE' : '&Uuml;ber', 'fr_FR' : 'A propos' }, 'imprint' : { 'en_GB' : 'imprint', 'de_DE' : 'Impressum', 'fr_FR' : 'Copyrights' }, 'Close' : { 'en_GB' : 'Close', 'de_DE' : 'Schliessen', 'fr_FR' : 'Fermer' }, 'Add' : { 'en_GB' : 'Add', 'de_DE' : 'Hinzuf&uuml;gen', 'fr_FR' : 'Ajouter' }, 'Wallpaper' : { 'en_GB' : 'Wallpaper', 'de_DE' : 'Hintergrundbild', 'fr_FR' : 'Fond d\'écran' }, 'Search' : { 'en_GB' : 'Search', 'de_DE' : 'Suchen', 'fr_FR' : 'recherche' }, 'Developers' : { 'en_GB' : 'Developers', 'de_DE' : 'Entwickler', 'fr_FR' : 'Developpeurs' }, 'Installing' : { 'en_GB' : 'Install', 'de_DE' : 'Installieren', 'fr_FR' : 'Installer' }, 'Uninstall' : { 'en_GB' : 'Uninstall', 'de_DE' : 'Deinstallieren', 'fr_FR' : 'Desinstaller' }, 'My Apps' : { 'en_GB' : 'My Apps', 'de_DE' : 'Meine Apps', 'fr_FR' : 'Mes Applications' }, 'Settings' : { 'en_GB' : 'Settings', 'de_DE' : 'Einstellungen', 'fr_FR' : 'Paramètres' }, 'Monday' : { 'en_GB' : 'Monday', 'de_DE' : 'Montag', 'fr_FR' : 'Lundi' }, 'Tuesday' : { 'en_GB' : 'Tuesday', 'de_DE' : 'Dienstag', 'fr_FR' : 'Mardi' }, 'Wednesday' : { 'en_GB' : 'Wednesday', 'de_DE' : 'Mittwoch', 'fr_FR' : 'Mercredi' }, 'Thursday' : { 'en_GB' : 'Thursday', 'de_DE' : 'Donnerstag', 'fr_FR' : 'Jeudi' }, 'Friday' : { 'en_GB' : 'Friday', 'de_DE' : 'Freitag', 'fr_FR' : 'Vendredi' }, 'Saturday' : { 'en_GB' : 'Saturday', 'de_DE' : 'Samstag', 'fr_FR' : 'Samedi' }, 'Sunday' : { 'en_GB' : 'Sunday', 'de_DE' : 'Sonntag', 'fr_FR' : 'Dimanche' }, 'Change Theme' : { 'en_GB' : 'Change Theme', 'de_DE' : 'Theme wechseln', 'fr_FR' : 'Change Theme' }, 'System Control' : { 'en_GB' : 'System Control', 'de_DE' : 'Systemsteuerung', 'fr_FR' : 'Contrôle du système' }, 'Messenger' : { 'de_DE' : 'Nachrichtendienst', 'en_GB' : 'Messenger', 'fr_FR' : 'Messagerie' }, 'class:maintenance-hint-webfan-desktop' : { 'de_DE' : 'Der Desktop wird derzeit &uuml;berarbeitet! Fehler m&ouml;glich.', 'en_GB' : 'The desktop is currently in maintenance mode! Possbible errors.', 'fr_FR' : 'Le bureau est actuellement en mode maintenance, des erreurs sont possibles.' }, 'class:data-langstr-No-new-notifications' : { 'en_GB' : 'No new notifications', 'de_DE' : 'Keine neuen Benachrichtigungen', 'fr_FR' : 'Aucune notification' } , 'Available' : { 'en_GB' : 'Available', 'de_DE' : 'Verf&uuml;gbare', 'fr_FR' : 'Disponible' }, 'Default settings' : { 'en_GB' : 'Default settings', 'de_DE' : 'Standardeinstellungen', 'fr_FR' : 'Les paramètres par défaut' }, /** * @ToDo french * */ 'No profile selected. You may select an Desktop User or create one...': { 'en_GB' : 'No profile selected. You may select an Desktop User or create one...', 'de_DE' : 'Kein Profil ausgew&auml;hlt. Sie k&ouml;nnen einen Benutzer w&auml;hlen oder erstellen...', 'fr_FR' : 'No profile selected. You may select an Desktop User or create one...' }, 'Soundsettings' : { 'en_GB' : 'Soundsettings', 'de_DE' : 'Soundeinstellungen', 'fr_FR' : 'Soundsettings' }, 'Play sound if you get a new message' : { 'en_GB' : 'Play sound if you get a new message', 'de_DE' : 'Sound abspielen bei einer neuen Nachricht', 'fr_FR' : 'Play sound if you get a new message' } , 'class:wd-lang-user' : { 'en_GB' : 'User', 'de_DE' : 'Benutzer', 'fr_FR' : 'Utilisateur' }, 'Password' : { 'en_GB' : 'Password', 'de_DE' : 'Passwort', 'fr_FR' : 'Mot de passe' }, 'Confirm' : { 'en_GB' : 'Confirm', 'de_DE' : 'Best&auml;tigen', 'fr_FR' : 'Confirmer' } , 'Loading, please wait' : { 'en_GB' : 'Loading, please wait', 'de_DE' : 'Lade, bitte warten Sie', 'fr_FR' : 'Loading, please wait' }, 'Postbox' : { 'en_GB' : 'Postbox', 'de_DE' : 'Postfach', 'fr_FR' : 'Postbox' }, 'All Messages' : { 'en_GB' : 'All Messages', 'de_DE' : 'Alle Nachrichten', 'fr_FR' : 'All Messages' }, 'Filemanager' : { 'en_GB' : 'Filemanager', 'de_DE' : 'Dateimanager', 'fr_FR' : 'Filemanager' } }); return true; }); }, cb_open : null, icons : [ ], windows : [ ], menulinks : [ ], canvas : [ { type : 'html', device : '#bar_top', prepend : true, html : '<span style="display:inline;float:right;"><div style="display:inline;" data-frdl-component="flow://components/locale"></div></span>' } ], shema : null }; var $ModulProgramm_Terminal = { mid : 'terminal', title : 'Terminal', author : 'Till Wehowski, Webfan.de', description : 'Provides a small command line console.', ico : 'http://static.webfan.de/icons/terminal.png', started : false, init : function(Desktop, modul){ $('#window_main_' + this.mid).css('background' ,'black'); $('#window_main_' + this.mid).css('color', 'white'); $('#window_main_' + this.mid).css('height', '100%'); $('#' + this.mid).css('position', 'relative'); $('#' + this.mid).css('height', '650px'); $('#' + this.mid).css('width', '99%'); $('#' + this.mid).css('background' ,'black'); $('#' + this.mid).css('color', 'white'); }, cb_open : function(){ console.log('Terminal restart...'); frdl.wd().resetReady('Start terminal..........',66, function(){ var T =frdl.wd().Registry.Programs['terminal']; var r = ('undefined' !== typeof T && 'object' === typeof Dom.g('wd-link-terminal-start')) ? true : false; if(true !== r)return r; if(true === T.started)return true; T.started = true; Dom.g('wd-link-terminal-start').onclick(); return true; } ); }, start : function(){ frdl.wd().resetReady('Start terminal...',50, function(){ var T = frdl.wd().Registry.Programs['terminal']; var r = ('undefined' !== typeof T && 'function' === typeof T.cb_open) ? true : false; if(true !== r)return r; T.cb_open(); return true; } ); }, icons : [ { img : 'http://static.webfan.de/icons/terminal.png' } ], windows : [ { img : 'http://static.webfan.de/icons/terminal.png', title : 'CLI Terminal', html_aside : '<p>frdl://</p>' + '<p><a href="javascript:;" id="wd-link-terminal-start" onclick="console.log(\'Terminal restart...\');try{$(\'#\' + this.mid).find(\'section\').PttyLoad();}catch(err){console.error(err);}">Start...</a></p>' + '<p><a href="javascript:;" onclick="$.cliExec(\'#!js\');">#!js - Javascript Shell</a></p>' + '<p class="mess-wd-d-ebug"><a href="javascript:;" onclick=" var µ = (function(){alert(\'µ\');})(); /* var WIN = $($.WebfanDesktop).frdlWin(\'create\', {openByDefault : true, title:\'Testfenster...\', main:\'test..\', aside:\'...\', bottom:\'...\'});$(\'#window_main_\' + WIN.id).socialshare(); */">Testmock</a></p>' , html_main : '<section style="width:99%;background:black;"> <div data-frdl-component="widget://example.com/webfan/cli" data-frdl-opt-menu="true"></div></section>', html_bottom : 'http://interface.api.webfan.de/v1/public/frdl/bounce/cli.jsonp', exec : function(ev){ try{ $('#' + frdl.wd().Registry.Programs['terminal'].mid).PttyLoad();}catch(err){console.error(err);} } } ], menulinks : [ ], canvas : [ ], shema : null }; /* $ModulProgramm_Terminal.mid = 'terminal'; */ var $ModulProgramm_SystemControl = { mid : 'system', title : 'Settings', author : 'Till Wehowski, Webfan.de', description : 'System Control', ico : 'http://static.webfan.de/icons/icons-3/list_settings.gif', init : function(Desktop, modul){ var mid = modul.mid; Desktop.addBottomBarIcon(modul.mid, modul.title, "http://static.webfan.de/icons/icons-3/list_settings.gif" , 'left', '#', function(){ $('#window_' + mid).show(); Dom.bringToFront($('#window_' + mid)); } ); frdl.wd().translate(); }, cb_open : function(){ var THIS = this; $('#window_' + THIS.mid).show(); Dom.bringToFront('#window_' + THIS.mid); $.WebfanDesktop.translate(); }, defaultSettings : function(){ var k, i = 0; if(true !== confirm('Sure you want to reset to default settings?'))return; $.WebfanDesktop.Registry.System.Theme = frdl.wd().getDefaultTheme(); $.WebfanDesktop.Registry.User = wUser; $.WebfanDesktop.Registry.icon_pos = {}; for ( i = 0; i < localStorage.length; i++) { k = localStorage.key(i); if(frdl.wd().o.ids.DB === k.substr(0, frdl.wd().o.ids.DB.length)){ wjslWebStorage.del(k); localStorage.removeItem(k); i=0; pausecomp(5); } } if(true !== confirm('Settings reseted. Reload page?'))return; var u = explode('#',new frdl.Url())[0]; window.location = u; }, useraccount : function(){ $.WebfanDesktop.Registry.Programs['user'].cb_open(); }, soundsettings : function(){ var THIS = this, html = '', div = $('#window_main_' + THIS.mid); $(div).html(''); html += '<h1>Soundsettings</h1>'; html += '<input type="checkbox" '+ ((true === frdl.wd().Registry.Programs['nachrichtendienst'].config.always_sound) ? ' checked ' : ' ') + ' onclick="$.WebfanDesktop.Registry.Programs[\'nachrichtendienst\'].config.always_sound=this.checked;$.WebfanDesktop.save(\'SOUND_IF_MESSAGE\');" ' + ' /> <span>Play sound if you get a new message</span>'; $(div).append(html); $.WebfanDesktop.translate(); }, themesettings : function(){ try{$('#window_main_system').wd_ThemesList({},'list');}catch(err){console.error(err);} }, languagesettings : function(){ $('#window_main_system').html('<span>Current</span> <span>Language</span>: ' + frdl.wd().getLang() + ' <div data-frdl-component="flow://components/locale"></div>'); var html = '<p> <strong>Contribute as translator/Custom translate</strong></p>'; html+='<ul> <li>'; html+='<a href="https://github.com/frdl/-Flow/blob/master/example/language.js" target="_blank">'; html+='<u>Apply custom language/translation...</u>'; html+='</a>'; html+='</li>'; html+='<li>'; html+='<a href="https://github.com/frdl/translations" target="_blank">'; html+='<u>Translationteam/-sources...</u>'; html+='</a>'; html+='</li>'; html+='</ul>'; html+='<div class="wrapper_download_info">'; html+='<span style="font-size:7px;">- Anzeige -</span><br />'; html+='<a href="http://www.tradezone.fr" target="_blank" title="tradezone.fr - french translator" style="text-decoration:underline;">'; html+='<img src="http://www.tradezone.fr/modules/Sitebanner/images/minilogo.gif" border="0" width="120" height="60" alt="tradezone.fr - french translator" style="border:none;" />'; html+='</a>'; html+='</div>'; $('#window_main_system').append(html); frdl.wd().translate(); }, programssettings : function(){ try{$('#window_main_system').FlowRegister($.WebfanDesktop.Registry.Programs);}catch(err){console.error(err);} }, icons : [ { img : 'http://static.webfan.de/icons/icons-3/list_settings.gif' } ], windows : [ { img : 'http://static.webfan.de/icons/icons-3/list_settings.gif', title : 'System Control', html_aside : '<strong>System Control</strong>' + '<ul>' + '<li onclick="frdl.wd().toggleDesktop();"><u>Toggle Desktop</u></li>' + (( /* true === navigator['-webkit-webfan'] */ 'function' === typeof (window.top || window).Tabs ) ? ( '<li onclick="window.top.Tabs().addTab(\'Settings\', webfan[\'$browser-scheme\']() + \'settings\', \'\', \'html\', true, {name:\'settings\', params:{}}, true);"><u>Settings</u></li>' ) : '' ) +'</ul>' + '<ul>' + '<li><strong>Software</strong><ul>' + '<li onclick="frdl.wd().Registry.Programs[\'system\'].programssettings();"><img src="http://static.webfan.de/icons/icons-3/page_new.gif" /><u>Add</u>...</li>' /* + '<li onclick="try{$(\'#window_main_system\').wd_ModulesListInstalled();}catch(err){console.error(err);}"><img src="http://static.webfan.de/icons/icons-3/list_extensions.gif" /><u>My Apps</u></li>' */ + '</ul></li>' + '<li><strong>Settings</strong><ul>' /* + '<li onclick="frdl.wd().go(\'system\', \'useraccount\');"><img src="http://static.webfan.de/icons/icons-3/icon_user.gif" /><u class="wd-lang-user">User</u></li>'*/ + '<li onclick="frdl.wd().Registry.Programs[\'system\'].languagesettings();"><img src="http://static.webfan.de/icons/icons-3/flag_white.gif" /><u>Language</u></li>' + '<li onclick="frdl.wd().Registry.Programs[\'system\'].soundsettings();"><img src="http://static.webfan.de/icons/icons-3/page_sound.gif" /><u>Sound</u></li>' + '<li class="hint-ondebug" onclick="frdl.wd().debugMode(\'t\');alert(\'Debugmode is now: \' + ((true===frdl.wd().o.debug)?\'ON\':\'OFF\'));"><img src="http://static.webfan.de/icons/icons-3/flag_red.gif" /><u>Debug</u></li>' + '<li onclick="frdl.wd().Registry.Programs[\'system\'].defaultSettings();"><img src="http://static.webfan.de/icons/icons-3/icon_wand.gif" /><u>Default settings</u></li>' + '</ul></li>' + '<li><strong>Theme</strong><ul>' + '<li onclick="$.WebfanDesktop.Registry.Programs[\'system\'].themesettings();"><img src="http://static.webfan.de/icons/icons-3/image_new.gif" style="border:none;" /><u><span>Change Theme</span>...</u></li>' + '<li onclick="frdl.wd().dialogWallpaper();"><img src="http://static.webfan.de/icons/icons-3/image.gif" style="border:none;" /><u>Wallpaper</u></li>' + '</ul></li>' + '</ul>' , html_main : '<a href="javascript:;" onclick="$(\'#window_aside_system\').toggle();"><span>System Control</span>...</a>', html_bottom : 'System Control', exec : function(ev){ } } ], menulinks : [ ], canvas : [ ], config : { location : { url : window.location.href, api_url : 'http://interface.api.webfan.de/v1/public/' } }, shema : null }; (function($) { $.WebfanDesktopWriteHtml = function(Desktop, c) { function render(Desktop, c){ if(true === c.prepend){ $(c.device).prepend(c.html); }else{ $(c.device).append(c.html); } } Desktop.Registry.HTM.push(c); render(Desktop, c); $.WebfanDesktop.desktop_html = $(frdl.$q('*[data-frdl-mod="workspace"]', false)).html(); return this; }; })(jQuery ); (function($) { $.WebfanDesktopIcon = function(Desktop, ico) { var rowLength = 6; if(true === frdl.Device().isTablet){ rowLength = 3; } if(true === frdl.Device().isMobile ){ rowLength = 2; } function render(Desktop, ico){ var l,left,top, a = Dom.create("a"), href = (typeof ico.href === 'undefined') ? "#icon_dock_" + ico.mid : ico.href, img = Dom.create("img"); if('function' === typeof ico.cb_open)a.onclick =ico.cb_open; a.setAttribute("class", "abs icon"); a.setAttribute("id", "icon_module_" + ico.mid); a.setAttribute("href", href); a.setAttribute("data-mid", ico.mid); img.setAttribute("src", ico.img); img.style.border ="none"; img.onclick=function(ev){ return this.parentNode.onclick(ev); }; Dom.add(img,a); $(a).append('<span>' + ico.title + '</span>'); $(a).css('position', 'absolute'); $(a).css('text-align', 'center'); if('undefined' !== typeof ico.top){ $(a).css('top', ico.top); }else{ top = ( Math.floor(Desktop.Registry.Icons.length / (rowLength + 1)) ) * 128 + 32; $(a).css('top', (top ).toString() + 'px' ); } if('undefined' !== typeof ico.left){ $(a).css('left', ico.left); }else{ left =( (Desktop.Registry.Icons.length % (rowLength + 1)) ) * 128 + 32; if(Desktop.Registry.Icons.length <= rowLength)left = left - 128; $(a).css('left', (left ).toString() + 'px' ); } Dom.add(a, frdl.$q('*[data-frdl-mod="workspace"]', false)); } Desktop.Registry.Icons.push(ico); render(Desktop, ico); $(document).ready(frdl.wd().restore_icons); /* $(document).ready(function(){ frdl.wd().restore_icons(); }); */ $.WebfanDesktop.desktop_html = $(frdl.$q('*[data-frdl-mod="workspace"]', false)).html(); return this; }; })(jQuery ); (function($) { $.WebfanDesktopWindow = function(Desktop, win) { $(Desktop).frdlWin('create', win); return win; }; })(jQuery); (function($) { function loadModul(Desktop, modul ) { var i, win; $.WebfanDesktop.bootReady = false; if('object' === typeof Desktop.Registry.Programs[modul.mid]){ console.warn("Modul " + modul.mid + " is already loaded"); return; } Desktop.Registry.Programs[modul.mid] = modul; if('undefined'===typeof modul.title_short)modul.title_short=modul.title; if(typeof modul.canvas !== "undefined"){ for(i = 0; i < modul.canvas.length; i++){ var canv = modul.canvas[i]; if('html' === canv.type){ $.WebfanDesktopWriteHtml(Desktop, canv); } } } if(typeof modul.windows !== "undefined"){ for(i = 0; i < modul.windows.length; i++){ win = modul.windows[i]; if('undefined' === typeof win.title){ win.title = modul.title; } if('undefined' === typeof win.cb_open){ win.cb_open = modul.cb_open; } if('undefined' === typeof win.mid){ win.mid = modul.mid; } if('undefined' === typeof win.mutex){ win.mutex = true; } $.WebfanDesktopWindow(Desktop, win); } } if(typeof modul.icons !== "undefined"){ for(i = 0; i < modul.icons.length; i++){ var ico = modul.icons[i]; if('undefined' === typeof ico.title){ ico.title = modul.title; } if('undefined' === typeof ico.cb_open){ ico.cb_open = modul.cb_open; } if('undefined' === typeof ico.mid){ ico.mid = modul.mid; } $.WebfanDesktopIcon(Desktop, ico); } } if( 'undefined' !== typeof modul.languageStrings){ try{ frdl.lang(modul.languageStrings); }catch(err){ console.error(err); } } if('function' === typeof modul.init){ try{ modul.init(Desktop, modul); }catch(err){ console.warn(err); } } $.WebfanDesktop.render(); Desktop.desktop_html = $(frdl.$q('*[data-frdl-mod="workspace"]', false)).html(); } $.WebfanDesktop = function(options) { $.WebfanDesktop.o = $.extend({ $ : null, maintenance : true, debug : false, loadDefaultModules : true, browseContentOnInit : false, loadUser : true, bootCallback : null, URL_RPC : 'http://shell.frdl.de/jsonrpc/remote.json', URL_JSONP : frdl.route('API_JSONP'), URL_CLIENT : frdl.route('API_CLIENT_URL') /* */, doms : { locale : $wd_opt_destination_locale, messenger : '#wrapper', progress : '#wd-progress', progress_label : '.wd-progress-label', DialogBoxModal : '#wd-dialogs-box', clock : '.frdl-wd-clock' }, ids : { TIMER_READY : 'Timer.wd-checkReady-desktop-loaded.CHECK', DBPFX : 'frdl/WebfanDesktop/', DB : 'frdl/WebfanDesktop/', USERNAME_UNKNOWN : 'Anonymous'.toLowerCase() }, txt : { all_messages : 'all messages' }, progress : 0, processFactor : 1, readyStack : [], renderStack : [], desktopCSS : [] },(typeof options === 'object' && null !== options /* && typeof $.WebfanDesktop.o === 'undefined' */) ? options : $.WebfanDesktop.o || {} ); $.WebfanDesktop.original_html = (typeof $.WebfanDesktop.original_html !== 'undefined') ? $.WebfanDesktop.original_html : $.WebfanDesktop.original_html, $.WebfanDesktop.Registry = ('undefined' === typeof $.WebfanDesktop.Registry) ? { LOCAL_MACHINE_CURRENT_USER : null, User : null, Notifs : {}, System : { Theme : null }, Tasks : [], Locale : { }, Programs : {}, Windows : [], Icons : [], icon_pos : {}, Menus : [], HTM : [], UsersReferences : { }, Config : { }, DBS : [], peers : [] } : $.WebfanDesktop.Registry; $.WebfanDesktop.setThemeOption = function(opt, val){ return $($.WebfanDesktop.Registry.System.Theme).WebfanDesktopThemeOption(opt, val); }; $.WebfanDesktop.getDefaultTheme = function(){ return { 'frdl.type' : 'frdl.wd.Theme', name : 'Default', version : '2.0', author : 'Till Wehowski, Webfan.de', homepage : 'http://webfan.de', description : 'Webfan Desktop Standard Theme. You can take this theme as default template for creating your own theme.', wallpaper : 'http://static.webfan.de/logos/bg-light-1.png', favicon : /* 'http://static.webfan.de/webfan.favicon.ico', */ frdl.$q('link[rel*=icon]', false).getAttribute('href'), 'apple-mobile-web-app-status-bar-style' : 'lightblue', css : [ { selector : '.ui-resizable-se', attr : 'background', value : 'url(http://www.webfan.de/images/desktop/images/desktop/gui/window_corner.gif) no-repeat right bottom' /* , important : true */ }, { selector : $.WebfanDesktop.o.doms.progress, attr : 'color', value : 'black' }, { selector : $.WebfanDesktop.o.doms.progress, attr : 'background-color', value : 'lightblue' }, { selector : '.ui-widget-header', attr : 'background-color', value : 'blue' }, { selector : '.icon', attr : 'background', value : 'url(http://www.webfan.de/images/desktop/images/desktop/gui/trans_white.png) no-repeat -99999px -99999px' }, { selector : '.icon', attr : 'text-shadow', value : '#6495ED 0 1px 2px' }, { selector : '.icon.active', attr : 'background', value : 'url(http://www.webfan.de/images/desktop/images/desktop/gui/trans_black.png)' }, { selector : '.window', attr : 'background', value : '#fff' }, { selector : '.window', attr : 'color', value : '#000' }, { selector : '.window', attr : 'border', value : '1px solid #000' }, { selector : '.window_top', attr : 'background', value : '#333 url(http://www.webfan.de/images/desktop/images/desktop/gui/bar_bottom.png) repeat-x left top' }, { selector : '.window_top', attr : 'color', value : '#fff' }, { selector : '.window_bottom', attr : 'background', value : '#fff url(http://www.webfan.de/images/desktop/images/desktop/gui/bar_top.png) repeat-x left bottom' }, { selector : '.window_bottom', attr : 'text-shadow', value : '#fff 0 1px 1px' }, { selector : '.window_close', attr : 'background', value : 'url(http://www.webfan.de/images/desktop/images/desktop/gui/window_buttons.gif) no-repeat' }, { selector : '.window_content', attr : 'background', value : 'url(http://www.webfan.de/images/desktop/images/desktop/gui/window_content.gif) repeat-y' }, { selector : '.maintenance-hint-webfan-desktop', attr : 'color', value : 'red' }, { selector : '.wd-btn-no', attr : 'color', value : 'red' }, { selector : '.wd-tabs-linklist-style', attr : 'padding', value : '3px', allAttributes : true }, { selector : '.wd-tabs-link-style', attr : 'margin', value : '3px', allAttributes : true }, { selector : '.wd-tab-link', attr : 'margin', value : '3px', allAttributes : true }, { selector : '.wd-tab-link', attr : 'padding', value : '2px', allAttributes : true }, { selector : '.wd-tab-link a:hover', attr : 'text-decoration', value : 'underline', allAttributes : true }, { selector : '.wd-tab-link a:hover', attr : 'backgound-color', value : 'blue', allAttributes : true }, { selector : '.wd-tab-link', attr : 'border', value : '0.1px solid lightblue', allAttributes : true }, { selector : '.wd-tab', attr : 'border', value : '0.1px solid lightblue', allAttributes : true }, { selector : '.webfan-blue', attr : 'color', value : '#6495ED', hint : 'Corporate Webfan Color', disallowed : true }, { selector : '.wd-box', attr : '-moz-border-radius', value : '5px', allAttributes : true }, { selector : '.wd-box', attr : '-webkit-border-radius', value : '5px', allAttributes : true }, { selector : '.wd-box', attr : 'border', value : '0.1px dotted lightred', allAttributes : true }, { selector : '.wd-box', attr : 'padding', value : '5px', allAttributes : true }, { selector : '.wd-box', attr : 'margin', value : '2px', allAttributes : true } ] }; }; $.WebfanDesktop.dialogWallpaper = function(){ var wp = prompt("Set your new wallpaper (image url):\nExamples:\nhttp://static.webfan.de/logos/bg-light-1.png\nhttp://static.webfan.de/icons/pinnwand/kork.jpg", $.WebfanDesktop.Registry.System.Theme.wallpaper); if(null === wp)return; $.WebfanDesktop.setThemeOption('wallpaper', wp); return this; }; $.WebfanDesktop.support = function(){ $('#wd-dialogs-box').wd_dialogs({loadUrl : 'http://www.webfan.de/TicketSystem.html?context=popup', title : 'Support kontaktieren'}); return this; }; $.WebfanDesktop.render = function(tplN, func){ if('function' === typeof func){ $.WebfanDesktop.o.renderStack.push(func); $.WebfanDesktop.o.renderStack = frdl.array_unique($.WebfanDesktop.o.renderStack); } $.each(frdl.wd().o.renderStack, function( i, _ ) { if(false === _()){ try{ $.WebfanDesktop.o.renderStack.splice(i,1); --i; $.WebfanDesktop.o.renderStack = frdl.filterArray($.WebfanDesktop.o.renderStack, function(el){ return (null !== el && 'function' === typeof el); }); } catch(err){ console.warn(err); } } }); if('undefined' === typeof tplN || 'debug' === tplN){ if(true === $.WebfanDesktop.o.debug){ if(null === Dom.g('hint-debug-webfan-desktop')){ $($.WebfanDesktop.desktop).prepend('<p class="hint-ondebug" id="hint-debug-webfan-desktop"><span style="top:-5px;color:red;z-index:1000;">DEBUGMODE</span></p>'); } $('#hint-debug-webfan-desktop').show(); $(".mess-wd-d-ebug").show(); }else{ $('#hint-debug-webfan-desktop').hide(); $('#hint-debug-webfan-desktop').remove(); Dom.remove('hint-debug-webfan-desktop'); $('.mess-wd-d-ebug').hide(); } $( ".hint-ondebug" ).toggleClass( 'ondebug', frdl.wd().o.debug ); } /* if('undefined' === typeof tplN || 'restore_icons' === tplN){ frdl.wd().restore_icons(); } */ $($.WebfanDesktop.wrapper).css('width', '100%'); $($.WebfanDesktop.wrapper).css('height', '100%'); $.WebfanDesktop.translate(); return false; }; $.WebfanDesktop.debugMode = function(s){ if('undefined' === typeof s)return $.WebfanDesktop.o.debug; if(true === s || 1 === s)s = 'on'; if(false === s || 0 === s)s = 'off'; if('toggle' === s || 't' === s){ s = (true === $.WebfanDesktop.o.debug) ? 'off' : 'on'; } $.WebfanDesktop.o.debug = ('on' === s) ? true : false; $.WebfanDesktop.save('debug'); $.WebfanDesktop.render('debug'); return $.WebfanDesktop.o.debug; }; $.WebfanDesktop.browseNew = function(URL, TITLE){ var url = URL, title=TITLE; frdl.ready(function(){ setTimeout(function(){ if(true === frdl.Dom.isVisible('desktop') ){ $.WebfanDesktop.Registry.Programs['browser'].cb_open({url:url,title:title}); return; } $.WebfanDesktop.resetReady('Browse to ' + url +'...',76, function(){ if('object' !== typeof frdl.Dom.g('desktop') )return false; try{ $.WebfanDesktop.Registry.Programs['browser'].cb_open({url:url,title:title}); return true; }catch(err){ console.warn(err); return false; } } ); },2000); }); }; $.WebfanDesktop.browse = function(url, title){ $.WebfanDesktop.browseNew(url, title); }; $.WebfanDesktop.goTo = function(c, hash, widget, reloaded){ if('string'===typeof hash){ window.location.href='#'+hash; } var m = null; frdl.each($.WebfanDesktop.Registry.Programs, function(i,p){ if(c===p.title_short){ m = p; return false; } }); if(null === m && ('undefined'===typeof reloaded || false === reloaded)){ if(!!widget){ c = widget; } if(''===new frdl.Url(c).getScheme()){ c = 'http://webfan.de/cdn/frdl/flow/components/' +c; } frdl.UI.widget('<div></div>', c, document.querySelector('*[data-frdl-mod="workspace"]'), true); return this.goTo(c, hash, widget, true) } if(null!==m){ $('#icon_module_'+m.mid).trigger('click'); frdl.Dom.bringToFront($('#window_'+m.mid)); } else{ console.warn('cannot open '+c); } return this; }; $.WebfanDesktop.go = function(app, modul){ $.WebfanDesktop.resetReady('Load ' + app +'...',50, function(){ if(!frdl.Dom.isVisible('desktop'))return false; try{ var u = new frdl.Url(); var hash = '/app=' + app; if('string' === typeof modul)hash += '&modul=' + modul; hash += '&token=' +Sha1.hash( new Date() + mt_rand(10000000, 99999999) + Guid.newGuid() ); u.setHash(hash); window.location.href = u.urlMakeNew(); }catch(err){ console.warn(err); } return true; }); return this; }; $.WebfanDesktop.getWindow= function(id){ var w = false; return ('undefined' === typeof (w =$.WebfanDesktop.getP(id, true).WIN) ) ? false : w; }; $.WebfanDesktop.getP = function(id, fallbackOnWindows){ if(!isNaN(id)){ var ID = parseInt(id), r = false; $.each($.WebfanDesktop.Registry.Programs, function(i, p){ if(i === ID){ r = p; return false; } }); if( false !== r || true !== fallbackOnWindows)return r; }else{ var p,k; for(k in $.WebfanDesktop.Registry.Programs){ p=$.WebfanDesktop.Registry.Programs[k]; if(id===p.mid || id===p.id)return p; } if(true !== fallbackOnWindows)return false; } return $.WebfanDesktop.getWin(id, true); }; $.WebfanDesktop.getWin = function(id, fallbackOnTasks){ if(!isNaN(id)){ var ID = parseInt(id), r = false; $.each($.WebfanDesktop.Registry.Windows, function(i, w){ if(i === ID){ r = w; return false; } }); if( false !== r || true !== fallbackOnTasks)return r; }else{ var w,i=0; for(i=0;i<$.WebfanDesktop.Registry.Windows.length;i++){ w=$.WebfanDesktop.Registry.Windows[i]; if(id===w.id)return w; } if(true !== fallbackOnTasks)return false; } return $.WebfanDesktop.getTask(id, false); }; $.WebfanDesktop.getTask = function(id, fallbackOnWindows){ if(!isNaN(id)){ var ID = parseInt(id), r = false; $.each($.WebfanDesktop.Registry.Tasks, function(i, t){ if(i === ID){ r = t; return false; } }); if(false !== r || true !== fallbackOnWindows)return r; }else{ var t,i=0; for(i=0;i<$.WebfanDesktop.Registry.Tasks.length;i++){ t=$.WebfanDesktop.Registry.Tasks[i]; if(id===t.id)return t; } if(true !== fallbackOnWindows)return false; } return $.WebfanDesktop.getWin(id, false); }; $.WebfanDesktop.kill = function(id){ var t,i=0; for(i=0;i<$.WebfanDesktop.Registry.Tasks.length;i++){ if(id===$.WebfanDesktop.Registry.Tasks[i].id){ $.WebfanDesktop.Registry.Tasks[i] = undefined; $.WebfanDesktop.Registry.Tasks = frdl.filter($.WebfanDesktop.Registry.Tasks, function(v, k){ if(undefined === v || null === v || 'undefined' === typeof v)return false; return true; }); break; }; } return this; }; $.WebfanDesktop.getLang = function(){ if('function'===typeof frdl.getLang)return frdl.getLang(); if(true !== $.WebfanDesktop.bootReady)return; try{ /* return $($.WebfanDesktop.o.doms.locale).locale('getSelectedLanguageCode'); */ var l = $.WebfanDesktop.Registry.User.lang; }catch(err){ console.warn(err); var l = wUser.lang; } if('default' === l || 'DEnglish' === l){ if( frdl.Device().language === 'de'){ return 'de_DE'; }else if( frdl.Device().language === 'en'){ return 'en_EN'; }else if( frdl.Device().language === 'fr'){ return 'fr_FR'; } } return l; }; $.WebfanDesktop.translate = function(lang){ if($.WebfanDesktop.getLang() === lang)return; if('undefined' === typeof lang)var lang = $.WebfanDesktop.getLang(); if('string'!==typeof lang)return; /* $($wd_opt_destination_locale).locale('_buildStringReferenceMapping', $($wd_opt_destination_locale).locale); */ try{ frdl.translate(lang, false, true); }catch(err){ console.warn(err); } $.WebfanDesktop.save('user'); /* frdl.translate(lang, false, true); return $.WebfanDesktop; */ return $.WebfanDesktop; }; $.WebfanDesktop.loadModul = function(m){ loadModul($.WebfanDesktop, m); return $.WebfanDesktop; }; $.WebfanDesktop.toggleDesktop = function(){ $(frdl.$q('*[data-frdl-mod="workspace"]', false)) .toggle() ; $('*[data-frdl-mod="nodesktop"]') .toggle() ; return $.WebfanDesktop; }; $.WebfanDesktop.executeHash = function(hash){ var _lHash = ('string'===typeof hash) ? hash : new frdl.Url().getHash(); if('/'===_lHash.substr(0,1)){ _lHash=_lHash.substr(1); } /* if(_lHash===new frdl.Url().getHash()){ return; } */ var u = new frdl.Url('frdl://desktop.js/?' + _lHash ), app, modul, isSET = false, n = new Date() / 1000; if(true === u.hasParam('click') ){ try{ if(typeof Dom.get( u.getParam('click')).onclick === 'function'){ Dom.get(u.getParam('click')).onclick(); } }catch(err){ console.warn(err); } } if(true === u.hasParam('app') && '' !== u.getParam('app') ){ app = u.getParam('app'); $.WebfanDesktop.resetReady('Load ' + app +'...',50, function(){ var App = app; if((new Date() / 1000) - n > 60000){ var err = 'Timeout loading ' + App; frdl.alert.error(err); console.warn(err); return true; } if(true !== isSET){ isSET = true; if('undefined' === typeof $.WebfanDesktop.Registry.Programs[App]){ try{ var f = $('<div></div>').FlowRegister([],true, App); return; }catch(err){ console.error(err); } } } var U = u, r = ( 'undefined' !== typeof $.WebfanDesktop.Registry.Programs[App]); if(true !== r )return; ++$.WebfanDesktop.o.progress; $.WebfanDesktop.resetReady('Load ' + app +'...',70, function(){ if( 'undefined' === typeof $.WebfanDesktop.Registry.Programs[app])return ; try{ if( 'function' === typeof $.WebfanDesktop.Registry.Programs[app].cb_open){ webfan.$Async(function(){ $.WebfanDesktop.Registry.Programs[app].cb_open(U.getParams()); },1); } window.history.pushState({ name : app + ' - ' +u.urlMakeNew(), sha1 : Sha1.hash(u.urlMakeNew()), l : html.toString().length }, app, new frdl.Url().urlMakeNew()); }catch(err){ console.warn(err); } return true; }); return true; } ); if(true === u.hasParam('modul') && '' !== u.getParam('modul')){ modul = u.getParam('modul'); setTimeout(function(){ $.WebfanDesktop.resetReady('Load ' + modul +'...',95, function(){ var App = app, U = u; if(''===modul)return true; if( 'undefined' === typeof frdl.wd().Registry.Programs[App])return ; if('function' !== typeof frdl.wd().Registry.Programs[App][modul])return ; if('object' !== typeof frdl.$q('window_main_'+App, false))return; try{ webfan.$Async(function(){ frdl.wd().Registry.Programs[App][modul](U.getParams()); },1); window.history.pushState({ name : app + ' - ' +u.urlMakeNew(), sha1 : Sha1.hash(u.urlMakeNew()), l : html.toString().length }, app, new frdl.Url().urlMakeNew()); webfan.$Async(function(){ window.location.href = '#'; },1); return true; }catch(err){ console.warn(err); } return true; } ); },1000); } } }; $.WebfanDesktop.hashChange = function(ev){ $.WebfanDesktop.oldonhashchange(); return $.WebfanDesktop.executeHash(); }; $.WebfanDesktop.resetReady = function(labelText, pro, func){ $.WebfanDesktop.bootReady = false; if('undefined' === typeof $.WebfanDesktop.o.processFactor){ $.WebfanDesktop.o.processFactor = 1; } if('function' === typeof func && null !== func){ $.WebfanDesktop.o.readyStack.push(func); } try{ $('.img-ajax-loader').show(); var labelText=('undefined' === typeof labelText) ? '' : labelText, progressbar = $( $.WebfanDesktop.o.doms.progress ), progressLabel = $( $.WebfanDesktop.o.doms.progress_label ); if('string' === typeof labelText)$(progressLabel).text( labelText ); $(progressLabel).prepend('<img src="http://images.webfan.de/ajax-loader_2.gif" alt="lade..." style="border:none;" class="img-ajax-loader" /> '); $(progressbar).show(); $(progressLabel).show(); if('undefined' !== typeof pro && pro > $.WebfanDesktop.o.progress){ $.WebfanDesktop.o.progress = pro; } if($.WebfanDesktop.o.progress >= 100){ $.WebfanDesktop.o.progress = 99; if($.WebfanDesktop.o.readyStack.length > 0)$.WebfanDesktop.o.progress -= $.WebfanDesktop.o.readyStack.length; } if($.WebfanDesktop.o.progress < 0)$.WebfanDesktop.o.progress = 1; $(progressbar).progressbar({ value : $.WebfanDesktop.o.progress, create: function(event, ui) { for(var j = 0; j < $(this).WebfanDesktopTheme().css.length; j++){ if($(this).WebfanDesktopTheme().css[j].selector === '.ui-widget-header'){ $(this).find('.ui-widget-header').css('background-color', $(this).WebfanDesktopTheme().css[j].value ); break; } } } }); if(false === uhrTimer.is($.WebfanDesktop.o.ids.TIMER_READY) && 'function'===typeof $.WebfanDesktop.checkReady){ uhrTimer.add($.WebfanDesktop.o.ids.TIMER_READY, function(){ if('function'===typeof $.WebfanDesktop.checkReady)$.WebfanDesktop.checkReady(); }); } /* frdl.wd().checkReady(); */ } catch(err){ console.error(err); } return $.WebfanDesktop.bootReady; }; $.WebfanDesktop.show = function(){ if(true !== frdl.Dom.isVisible(frdl.$q('*[data-frdl-mod="workspace"]', false))){ this.toggleDesktop(); } }; $.WebfanDesktop.hide = function(){ if(true === frdl.Dom.isVisible(frdl.$q('*[data-frdl-mod="workspace"]', false))){ this.toggleDesktop(); } }; $.WebfanDesktop.hideProgress = function(){ $('.img-ajax-loader').hide(); $( $.WebfanDesktop.o.doms.progress_label ).hide(); $( $.WebfanDesktop.o.doms.progress ).hide(); }; $.WebfanDesktop.showProgress = function(){ $('.img-ajax-loader').show(); $( $.WebfanDesktop.o.doms.progress_label ).show(); $( $.WebfanDesktop.o.doms.progress ).show(); }; $.WebfanDesktop.checkReady = function(){ var i = 0, WD = frdl.wd(); if('undefined' === typeof WD.bootReady)WD.bootReady=false; if('undefined' === typeof WD.o)return WD.bootReady; $(WD.o.doms.progress ).progressbar({value : WD.o.progress }); for(i=0;i<WD.o.readyStack.length;i++){ if(null === WD.o.readyStack[i] || true===WD.o.readyStack[i]()){ WD.o.readyStack.splice(i,1); i--; WD.o.readyStack = frdl.filterArray(WD.o.readyStack, function(el){ return (null !== el && 'function' === typeof el); }); WD.o.progress += (WD.o.processFactor * 1); } else{ WD.bootReady = false; } } $(WD.o.doms.progress ).progressbar({value : WD.o.progress }); if(WD.o.readyStack.length > 0)return false; var handleState = function(state){ switch (state) { case "loading": $.WebfanDesktop.showProgress(); $.WebfanDesktop.bootReady = false; break; case "interactive": $.WebfanDesktop.showProgress(); $.WebfanDesktop.bootReady = false; break; case "complete": try{ if(true===frdl.Dom.isVisible($.WebfanDesktop.o.doms.progress.replace(/#/, '')))$.WebfanDesktop.hideProgress(); uhrTimer.remove($.WebfanDesktop.o.ids.TIMER_READY); $.WebfanDesktop.bootReady = true; $.WebfanDesktop.o.progress = 100; $($.WebfanDesktop.o.doms.progress ).progressbar({value : $.WebfanDesktop.o.progress }); /* THIS KILLS CPU: $.WebfanDesktop.translate(); */ $.WebfanDesktop.o.progress = 0; }catch(err){ console.warn( 'Error: ' + err); } break; } }; /* $(document).on('readystatechange', function () { handleState(document.readyState); }) ; $(document).ready(function(){ handleState(document.readyState); }); */ handleState(document.readyState); return WD.bootReady; }; $.WebfanDesktop.browseAway = function(e){ frdl.wd().save(); }; $.WebfanDesktop.load = function(k){ try{ var v = localStorage.getItem(frdl.wd().o.ids.DB + k + '/'); return (null !== v) ? JSON.parse( base64_decode(v) ) : v; }catch(err){ console.warn(err); } return undefined; }; $.WebfanDesktop.save = function(k, v){ if('undefined' !== typeof v && 'string' === typeof k){ try{ localStorage.setItem(frdl.wd().o.ids.DB + k + '/', base64_encode( JSON.stringify(v))); }catch(err){ console.warn(err); } return; } if('undefined' === typeof k || k === 'LOCAL_MACHINE_CURRENT_USER'){ localStorage.setItem(frdl.wd().o.ids.DBPFX + 'LOCAL_MACHINE_CURRENT_USER/', base64_encode( JSON.stringify(frdl.wd().Registry.LOCAL_MACHINE_CURRENT_USER))); } if('undefined' === typeof k || k === 'notifs'){ localStorage.setItem(frdl.wd().o.ids.DB + 'notifs/', base64_encode(JSON.stringify( frdl.wd().Registry.Notifs ))); } if('undefined' === typeof k || k === 'user'){ localStorage.setItem(frdl.wd().o.ids.DB + 'user/', base64_encode(JSON.stringify( frdl.wd().Registry.User ))); } if('undefined' === typeof k || k === 'theme'){ localStorage.setItem($.WebfanDesktop.o.ids.DB + 'theme/', base64_encode( JSON.stringify($.WebfanDesktop.Registry.System.Theme))); } if('undefined' === typeof k || k === 'icon_pos'){ localStorage.setItem(frdl.wd().o.ids.DB + 'icon_pos/', base64_encode( JSON.stringify(frdl.wd().Registry.icon_pos))); } try{ if('undefined' === typeof k || k === 'SOUND_IF_MESSAGE' && 'undefined' !== frdl.wd().Registry.Programs['nachrichtendienst'] && 'undefined' !== frdl.wd().Registry.Programs['nachrichtendienst'].config && 'undefined' !== frdl.wd().Registry.Programs['nachrichtendienst'].config.always_sound){ localStorage.setItem(frdl.wd().o.ids.DB + 'SOUND_IF_MESSAGE/', frdl.wd().Registry.Programs['nachrichtendienst'].config.always_sound); } }catch(err){ console.warn(err); } if('undefined' === typeof k || k === 'debug' ){ localStorage.setItem(frdl.wd().o.ids.DB + 'debug/', base64_encode( JSON.stringify(frdl.wd().o.debug))); } }; $.WebfanDesktop.localStoragekey = function(cu, _set){ cu = str_replace('"', '', cu); cu = str_replace("'", '', cu); cu = cu.toLowerCase(); if('' === cu || 'LOCAL_MACHINE_CURRENT_USER'.toLowerCase() === cu || 'SOUND_IF_MESSAGE'.toLowerCase() === cu || 'icon_pos'.toLowerCase() === cu || 'theme'.toLowerCase() === cu || 'user'.toLowerCase() === cu || 'debug'.toLowerCase() === cu || 'data'.toLowerCase() === cu ){ if(true === _set) alert('This name is reserved: ' + cu); return false; } var nk = $.WebfanDesktop.o.ids.DBPFX + cu + '/'; if('undefined' !== typeof _set && true === _set){ $.WebfanDesktop.Registry.LOCAL_MACHINE_CURRENT_USER = cu; $.WebfanDesktop.o.ids.DB = nk; $.WebfanDesktop.save('LOCAL_MACHINE_CURRENT_USER'); $.WebfanDesktop.loadSavedSystem(); } return nk; }; $.WebfanDesktop.change_user = function(uname){ return $.WebfanDesktop.localStoragekey(uname, true); }; var bootUser = function(){ try{ var user = JSON.parse( base64_decode(localStorage.getItem($.WebfanDesktop.o.ids.DB + 'user/')) ); $.WebfanDesktop.Registry.User = ('undefined' !== typeof user && 'object' === typeof user && null !== user) ? user : new wUserData(); wUser = $.WebfanDesktop.Registry.User; }catch(err){ console.error(err); } }; $.WebfanDesktop.loadSavedSystem = function(){ try{ $.WebfanDesktop.Registry.System.Theme = JSON.parse( base64_decode( localStorage.getItem($.WebfanDesktop.o.ids.DB + 'theme/') )); if($.WebfanDesktop.getDefaultTheme().name === $.WebfanDesktop.Registry.System.Theme.name && true !== version_compare($.WebfanDesktop.Registry.System.Theme.version, $.WebfanDesktop.getDefaultTheme().version, '>=' ) ){ $.WebfanDesktop.Registry.System.Theme = $.WebfanDesktop.getDefaultTheme(); } }catch(err){ $.WebfanDesktop.Registry.System.Theme = $.WebfanDesktop.getDefaultTheme(); } if(null === $.WebfanDesktop.Registry.System.Theme){ $.WebfanDesktop.Registry.System.Theme = $.WebfanDesktop.getDefaultTheme(); } try{ $('<div></div>').WebfanDesktopTheme($.WebfanDesktop.Registry.System.Theme); }catch(err){ console.warn(err); } try{ $.WebfanDesktop.Registry.icon_pos = JSON.parse( base64_decode( localStorage.getItem($.WebfanDesktop.o.ids.DB + 'icon_pos/') )); $.WebfanDesktop.restore_icons(); }catch(err){ $.WebfanDesktop.Registry.icon_pos = {}; } try{ $.WebfanDesktop.Registry.Notifs = JSON.parse( base64_decode( localStorage.getItem($.WebfanDesktop.o.ids.DB + 'notifs/') )); if(null=== $.WebfanDesktop.Registry.Notifs) $.WebfanDesktop.Registry.Notifs = { } ; }catch(err){ $.WebfanDesktop.Registry.Notifs = { } ; } try{ $.WebfanDesktop.o.debug = JSON.parse( base64_decode( localStorage.getItem($.WebfanDesktop.o.ids.DB + 'debug/') )); if(null === $.WebfanDesktop.o.debug)$.WebfanDesktop.o.debug=false; }catch(err){ $.WebfanDesktop.o.debug = false; } bootUser(); }; var bootSystem = function(){ /* OH NO document.addEventListener("readystatechange", function () { handleState(document.readyState); }, false, true); */ try{ $.WebfanDesktop.Registry.LOCAL_MACHINE_CURRENT_USER = JSON.parse( base64_decode( localStorage.getItem($.WebfanDesktop.o.ids.DBPFX + 'LOCAL_MACHINE_CURRENT_USER/') )); }catch(err){ $.WebfanDesktop.Registry.LOCAL_MACHINE_CURRENT_USER = $.WebfanDesktop.o.ids.USERNAME_UNKNOWN; } var cu = $.WebfanDesktop.Registry.LOCAL_MACHINE_CURRENT_USER; if(null===cu)cu = wUser.uname; if('undefined' === typeof cu || null===cu || $.WebfanDesktop.o.ids.USERNAME_UNKNOWN === cu){ cu = $.WebfanDesktop.o.ids.USERNAME_UNKNOWN; $.WebfanDesktop.Registry.LOCAL_MACHINE_CURRENT_USER = cu; } $.WebfanDesktop.o.ids.DB = $.WebfanDesktop.change_user(cu); }; $.WebfanDesktop.restore_icons = function(){ frdl.ready(function(){ if('undefined' === typeof $.WebfanDesktop.Registry.icon_pos)$.WebfanDesktop.Registry.icon_pos={}; for(var selector in $.WebfanDesktop.Registry.icon_pos){ $(selector).css('top', $.WebfanDesktop.Registry.icon_pos[selector].top); $(selector).css('left', $.WebfanDesktop.Registry.icon_pos[selector].left); } $.WebfanDesktop.restore_icons_done = true; }); }; var bootInit = function(options){ $.WebfanDesktop = ('function' === typeof $.WebfanDesktop.toggleDesktop) ? $.WebfanDesktop : this; if(typeof $.WebfanDesktop.desktop_html !== 'undefined')return $.WebfanDesktop; $.WebfanDesktop.o = options; $.WebfanDesktop.original_html = $('body').html(); $.WebfanDesktop.original_document_html = $('html').html(); $.WebfanDesktop.o.progress = 0; bootSystem(); $.WebfanDesktop.resetReady('Booting...',5, function(){ return ($.WebfanDesktop.o.readyStack.length <= 1); } ); if(true === options.loadUser){ $.WebfanDesktop.resetReady('Load user...', 10, function(){ return ( null !== typeof $.WebfanDesktop.Registry.User && 'undefined' !== typeof $.WebfanDesktop.Registry.User ); }); } $.WebfanDesktop.resetReady('Render Theme Template...', 20, function(){ return ( 'undefined' !== typeof Dom.g('bar_bottom') && undefined !== Dom.g('bar_bottom') ); }); bootTemplate(); $.WebfanDesktop.resetReady('Load desktop...',30, function(){ return Dom.isVisible('desktop'); } ); /* $.JQD.go(this); */ var JQD = $.JQD; frdl.addReadyCheck(function(){ if ( 'function' !== typeof JQD.go )return false; if('function'!== typeof $.WebfanDesktop.checkReady)return false; return true; }); frdl.ready(function(){ if ( 'function' === typeof JQD.go )JQD.go($.WebfanDesktop); }); if('undefined' === typeof $.WebfanDesktop.o.loadDefaultModules || true === $.WebfanDesktop.o.loadDefaultModules){ $.WebfanDesktop.resetReady('Load default modules...', 80, function(){ return ( 'undefined' !== typeof $.WebfanDesktop.Registry.Programs['terminal'] && 'undefined' !== typeof $.WebfanDesktop.Registry.Programs['system'] ); }); try{ bootDefaultModules(); }catch(err){ console.error(err); } } if(null !== options.bootCallback && 'function' === options.bootCallback){ options.bootCallback.call(); } $.WebfanDesktop.oldonhashchange = window.onhashchange || function(){}; /* window.addEventListener("hashchange", $.WebfanDesktop.hashChange, false); */ $(window).on('hashchange', $.WebfanDesktop.executeHash); window.addEventListener("beforeunload", $.WebfanDesktop.browseAway); $.WebfanDesktop.restore_icons_done = false; $.WebfanDesktop.resetReady('Restore icons...', 89, function(){ return $.WebfanDesktop.restore_icons_done; }); $.WebfanDesktop.restore_icons(); $.WebfanDesktop.resetReady('Loading Clock...',50, function(){ return ('object' === typeof frdl.$q($.WebfanDesktop.o.doms.clock, false)) ? true : false; } ); $($.WebfanDesktop.wrapper).show(); $($.WebfanDesktop.desktop).show(); $.WebfanDesktop.render(); $($.WebfanDesktop.o.doms.clock).css('display', 'inline'); $('#menu_top').css('display', 'inline'); $.WebfanDesktop.desktop_html = $(frdl.$q('*[data-frdl-mod="workspace"]', false)).html(); var __loaded = false; $.WebfanDesktop.resetReady('Loading Initial html...', 75, function(){ var r = (typeof $.WebfanDesktop.desktop_html !== 'undefined' && true===Dom.isVisible($.WebfanDesktop.bar_bottom) && 'undefined' !== typeof $.WebfanDesktop.Registry.Programs['browser'] && 'undefined' !== typeof $.WebfanDesktop.original_html ) ? true : false; if(true !== r)return false; if(__loaded === false && true === $.WebfanDesktop.o.browseContentOnInit && !frdl.Dom.isFramed()){ __loaded=true; try { var blob = new Blob([utf8_encode('<!DOCTYPE html>' + $.WebfanDesktop.original_document_html)], {encoding:"UTF-8", type: 'text/html'}); } catch (e) { var bb = new (window.WebKitBlobBuilder || window.MozBlobBuilder); bb.append(utf8_encode(content)); var blob = bb.getBlob(type); } try { var url = (window.webkitURL || window.URL).createObjectURL(blob); $.WebfanDesktop.browse(url, document.title); } catch (err) { console.error(err); } } __loaded=true; return true; }); $.WebfanDesktop.executeHash(); $.WebfanDesktop.resetReady('Finish loading...', 90, function(){ return ( typeof $.WebfanDesktop.desktop_html !== 'undefined' && 'undefined'!==typeof $.WebfanDesktop.bar_bottom ) ? true : false; }); $(document).on('readystatechange', $.WebfanDesktop.loadDesktopWidgets) ; $(document).on('readystatechange', $.WebfanDesktop.checkReady) ; $(document).ready($.WebfanDesktop.checkReady); $(document).trigger('readystatechange'); /* if($.WebfanDesktop.o.debug===true){ frdl.$i(function($q){ alert('test: hello'); }); } */ return $.WebfanDesktop; }; var bootTemplate = function(){ var _html = '', el, i = 0; frdl.each(frdl.$q('*[data-wd-handle="desktop-content"]:not([data-flow-prepared-wd-handle="desktop-content"])'), function(ix, htmlCont){ htmlCont.setAttribute('data-flow-prepared-wd-handle', 'desktop-content'); _html += htmlCont.innerHTML; }); var loadHint = '<div id="' + $.WebfanDesktop.o.doms.progress.substr(1,$.WebfanDesktop.o.doms.progress.length) + '" style="height:32px;">'; loadHint+='<span class="' + $.WebfanDesktop.o.doms.progress_label.substr(1,$.WebfanDesktop.o.doms.progress_label.length) + '"' loadHint+=' style="height:16px;">'; loadHint+=' <img src="http://images.webfan.de/ajax-loader_2.gif" alt="lade..." style="border:none;" class="img-ajax-loader" />'; loadHint+=' <span>Loading, please wait</span>...'; loadHint+='</span></div>'; var initialPageWrap = document.querySelectorAll('body *[data-role="page"]'); if(0 === initialPageWrap.length){ $('body' ).wrapInner( '<div role="document" data-dom-cache="false" data-role="page" data-frdl-mod="nodesktop" id="nodesktop-'+ str_replace('.', '-', new frdl.Url().getHost()) + '-' + Sha1.hash(new frdl.Url().urlMakeNew()) + '-' + Sha1.hash(document.title) +'" style="top:35px;bottom:35px;left:0;right:0;position:fixed;right:0px;width:100%;display:none;overflow:auto;"></div>' ); }else{ for (i = 0; i < initialPageWrap.length; i++) { el = $(initialPageWrap[i]); el.attr('data-dom-cache', 'false') .attr('data-role', 'page') .attr('role', 'document') .attr('data-frdl-mod', 'nodesktop') .attr('id', 'nodesktop-'+ str_replace('.', '-', new frdl.Url().getHost()) + '-' + Sha1.hash(new frdl.Url().urlMakeNew()) + '-' + Sha1.hash(document.title) + '-' + i + el.attr('id') ) .css('display', 'none') .css('cssText', 'top:35px;bottom:35px;left:0;right:0;position:fixed;right:0px;width:100%;display:none;overflow:auto;') ; } } $('body' ).wrapInner( '<div data-flow-mod="desktop-wrapper" data-wrapper="true" data-dom-cache="false" style="top:0;bottom:0;left:0;right:0;position:fixed;overflow:hidden;"></div>' ); var wrapper = frdl.$q('*[data-flow-mod="desktop-wrapper"]', false); var desktop = Dom.create("div"); desktop.setAttribute("id", "desktop"); desktop.setAttribute("class", "abs"); desktop.setAttribute("role", "application"); desktop.setAttribute("data-frdl-mod", "workspace"); $(desktop).css('width', '100%'); $(desktop).css('top', '35px'); $(desktop).css('bottom', '35px'); $(desktop).css('overflow', 'auto'); desktop.setAttribute("data-dom-cache", "false"); var bar_top = Dom.create("div"); bar_top.setAttribute("id", "bar_top"); bar_top.setAttribute("class", "abs"); bar_top.setAttribute("data-role", "header"); bar_top.style.zIndex=1001; bar_top.style.top = "0px"; bar_top.style.position = "fixed"; Dom.add(bar_top, wrapper,true); Dom.add(desktop, wrapper); $(desktop).append(loadHint); if($.WebfanDesktop.o.maintenance === true){ $(desktop).append('<p><span class="maintenance-hint-webfan-desktop" style="color:red;z-index:1000;">Der Desktop wird derzeit &uuml;berarbeitet!</span></p/>'); }else{ $(desktop).append('<p><span class="maintenance-hint-webfan-desktop" style="display:none;">Der Desktop wird derzeit &uuml;berarbeitet!</span></p/>'); } $(desktop).append('<p><span class="hint-ondebug" id="hint-debug-webfan-desktop" style="color:red;z-index:1000;">DEBUGMODE</span></p/>'); if(true === $.WebfanDesktop.o.debug){ $('#hint-debug-webfan-desktop').show(); }else{ $('#hint-debug-webfan-desktop').hide(); $('#hint-debug-webfan-desktop').remove(); Dom.remove('hint-debug-webfan-desktop'); } $(wrapper).append('<div style="position:fixed;" id="' + $.WebfanDesktop.o.doms.DialogBoxModal.substr(1,$.WebfanDesktop.o.doms.DialogBoxModal.length) + '"></div>'); $(bar_top).append('<span class="float_right" class="' + $.WebfanDesktop.o.doms.clock.substr(1,$.WebfanDesktop.o.doms.clock.length) + '"></span>'); var _Menu_Webfan = ''; _Menu_Webfan+='<ul ng-flows="webfan.gui" ng-controller="MenuCtrl" id="{{main.id}}" role="menu" style="display: inline;">'; _Menu_Webfan+=' <li ng-repeat="(id, Menu) in main.menu" id="{{id}}"> '; _Menu_Webfan+=' <a class="menu_trigger" href="javascript:;" ng-bind-html="Menu.title"></a> '; _Menu_Webfan+=' <ul class="menu" flow-menu-id="{{id}}-{{Menu.title}}" style="display: none; z-index: 1007;"> '; _Menu_Webfan+=' <li ng-repeat="item in Menu.items">'; _Menu_Webfan+=' <a href="javascript:;" ng-click="item.on(item.url)" ng-bind-html="item.title"></a> '; _Menu_Webfan+=' </li> '; _Menu_Webfan+=' </ul>'; _Menu_Webfan+=' </li>'; _Menu_Webfan+='</ul> '; $(bar_top).append(_Menu_Webfan); /*' <li id="menu_top_webfan"> <a class="menu_trigger" href="#">Webfan</a> <ul class="menu"> <li> <a id="wd-link-potal" href="http://www.webfan.de">Portal</a> </li> <li> <a href="http://www.webfan.de/Web_News.html">Nachrichten</a> </li> <li> <a href="http://www.webfan.de/Kleinanzeigen.html">Kleinanzeigen</a> </li> <li> <a href="http://www.webfan.de/Dating.html">Dating</a> </li> </ul> </li> '; */ /* var _LI_SOFTWARE = ' '; _LI_SOFTWARE+=' <li>'; _LI_SOFTWARE+=' <a href="javascript:;" onclick="$.WebfanDesktop.Registry.Programs[\'browser\'].cb_open({url:new frdl.Url().getScheme() + \'://frdl.webfan.de\'});"><span>Developers</span> Resources</a>'; _LI_SOFTWARE+=' </li> '; _LI_SOFTWARE+='<li>'; _LI_SOFTWARE+=' <a href="javascript:;" onclick="$.WebfanDesktop.Registry.Programs[\'browser\'].cb_open({url:new frdl.Url().getScheme() + \'://www.webfan.de/Userblog.html\'});">Homepagesystem</a>'; _LI_SOFTWARE+=' </li>'; _LI_SOFTWARE+='<li>'; _LI_SOFTWARE+=' <a href="javascript:;" onclick="frdl.wd(true).go(\'system\', \'programssettings\', false);">Software</a>'; _LI_SOFTWARE+='</li>'; _LI_SOFTWARE+=' <li> <a id="wd-link-install" onclick="$(\'#' +$.WebfanDesktop.o.doms.DialogBoxModal.substr(1,$.WebfanDesktop.o.doms.DialogBoxModal.length) +'\').wd_dialogs({loadUrl : \'http://www.webfan.de/install/?context=popup\', title : \'frdl Installieren...\'});" href="javascript:;"><span>Install</span></a>'; _LI_SOFTWARE+=' </li>'; _LI_SOFTWARE+=' <li> <a onclick="$.WebfanDesktop.Registry.Programs[\'browser\'].cb_open({url:new frdl.Url().getScheme() + \'://www.webfan.de/Downloads.html\'});" href="javascript:;">Downloads</a> </li> '; _LI_SOFTWARE+='<li> <a id="wd-link-entwickler" onclick="frdl.wd(true).goTo(\'frdl/webfan\', undefined, true);"><span>Developers</span> API SDK</a> </li>'; var _LI_UL_ABOUT_HELP = ' <li id="menu_top_about">'; _LI_UL_ABOUT_HELP+='<a class="menu_trigger" href="#">Help</a>'; _LI_UL_ABOUT_HELP+='<ul class="menu">'; _LI_UL_ABOUT_HELP+='<li>'; _LI_UL_ABOUT_HELP+='<a href="javascript:;" onclick="$.WebfanDesktop.go(\'search\');"><span>Search</span>...</a>'; _LI_UL_ABOUT_HELP+=' </li> '; _LI_UL_ABOUT_HELP+=' <li>'; _LI_UL_ABOUT_HELP+='<a href="#" onclick="$(\'#' +$.WebfanDesktop.o.doms.DialogBoxModal.substr(1,$.WebfanDesktop.o.doms.DialogBoxModal.length) +'\').wd_dialogs({loadUrl : \'http://www.webfan.de/TicketSystem.html\', title : \'Support\'});"><span>Support</span></a>'; _LI_UL_ABOUT_HELP+='</li> '; _LI_UL_ABOUT_HELP+='<li>'; _LI_UL_ABOUT_HELP+='<a id="wd-link-about" href="#" onclick="if(\'undefined\'!==typeof (window.top || window).Tabs){ ' _LI_UL_ABOUT_HELP+='if(true===navigator[\'-webkit-webfan\']){'; _LI_UL_ABOUT_HELP+='(window.top || window).Tabs().addTab(\'About...\', \'./about.html\', null, \'frame.trusted\', true, undefined, true); '; _LI_UL_ABOUT_HELP+=' }else{ '; _LI_UL_ABOUT_HELP+='(window.top || window).Tabs().addTab(\'About...\', \'http://app.domainundhomepagespeicher.webfan.de/cdn/application/webfan/about.html\', null, \'frame.trusted\', true, undefined, true); '; _LI_UL_ABOUT_HELP+=' }'; _LI_UL_ABOUT_HELP+='return;'; _LI_UL_ABOUT_HELP+=' }$(\'#' +$.WebfanDesktop.o.doms.DialogBoxModal.substr(1,$.WebfanDesktop.o.doms.DialogBoxModal.length) +'\').wd_dialogs({loadUrl : \'http://app.domainundhomepagespeicher.webfan.de/cdn/application/webfan/about.html\', title : \'&Uuml;ber Webfan !desktop\'});"><span>About</span>...</a>'; _LI_UL_ABOUT_HELP+='</li>'; _LI_UL_ABOUT_HELP+='<li>'; _LI_UL_ABOUT_HELP+='<a onclick="$(\'#' +$.WebfanDesktop.o.doms.DialogBoxModal.substr(1,$.WebfanDesktop.o.doms.DialogBoxModal.length) +'\').wd_dialogs({loadUrl : \'http://www.webfan.de/Impressum.html?context=popup\', title : \'Impressum\', html : \'Dies ist das Impressum von dem Hersteller der Software, dies ist NICHT zwangsl&auml;ufig das Impressum der vorliegenden Seite!\'});" href="javascript:;" title="Imprint of software NOT site"><span>imprint</span> (software NOT site)</a>'; _LI_UL_ABOUT_HELP+='</li>'; _LI_UL_ABOUT_HELP+='</ul>'; _LI_UL_ABOUT_HELP+='</li>'; if(true === frdl.Device().isMobile) { $(bar_top).append(' <ul id="menu_top" role="menu"> <li id="menu_top_desktop"> <a class="menu_trigger" href="#">File</a> <ul class="menu" data-flow-menu-id="File"> <li> <a href="javascript:;" onclick="try{ $.WebfanDesktop.toggleDesktop();this.innerHTML = \'workspace\'; return false;}catch(err){console.error(err);}">workspace</a> </li> ' +_LI_SOFTWARE + ' </ul> </li>' +_Menu_Webfan +' ' +_LI_UL_ABOUT_HELP+' </ul>'); }else{ $(bar_top).append('<ul id="menu_top" role="menu"> <li id="menu_top_desktop"> <a class="menu_trigger" href="#">File</a> <ul class="menu" data-flow-menu-id="File"> <li> <a href="javascript:;" onclick="try{ $.WebfanDesktop.toggleDesktop(); this.innerHTML = \'workspace\'; return false;}catch(err){console.error(err);}">workspace</a> </li> </ul> </li>' +'<li id="menu_top_software"> <a class="menu_trigger" href="#">My Homepage</a> <ul class="menu"> ' +_LI_SOFTWARE + ' </ul> </li> ' +_Menu_Webfan+' ' +_LI_UL_ABOUT_HELP +'</ul> '); } webfan.$Async(function(){ if(true === navigator['-webkit-webfan']){ $('ul[flow-menu-item-id="File"]').append('<li><a href="javascript:;" onclick="navigator.webfan.quit();">close</a></li>'); }else{ $('ul[flow-menu-item-id="File"]').append('<li><a href="javascript:;" onclick="try{window.close();}catch(err){frdl.alert.error(\'Cannot close this window by script!\');}">close</a></li>'); } },1500); */ var bar_bottom = Dom.create("div"); bar_bottom.setAttribute("id", "bar_bottom"); bar_bottom.setAttribute("class", "abs"); bar_bottom.style.display = "inline"; bar_top.style.bottom = "0px"; bar_top.style.position = "fixed"; bar_bottom.setAttribute("data-role", "footer"); Dom.add(bar_bottom, wrapper); var dock = Dom.create("ul"); dock.setAttribute("id", "dock"); Dom.add(dock, bar_bottom); if('' !== _html){ frdl.ready(function(){ $(desktop).append('<div data-wd-handle="nodesktop-content" data-role="content" role="section">' + _html + '</div>'); }); } try{ Dom.createCSSClass('.hint-ondebug ondebug','color: red;'); Dom.createCSSClass('.ondebug','color: red;'); }catch(err){ console.error(err); } webfan.$Async(function(){ $.WebfanDesktop.addBottomBarIcon('desktop', 'Show desktop', "http://static.webfan.de/icons/icons-3/icon_home.gif" , 'left', '#' ); },1); try{ var widgets = JSON.parse( base64_decode(localStorage.getItem($.WebfanDesktop.o.ids.DB + 'widgets/user/'))); if(null!==widgets && 'undefined'!==typeof widgets){ frdl.each(widgets, function(i,widget){ if('undefined'===typeof widget)return true; $(desktop).append('<frdl><div data-frdl-desktop-widget="widget://components/'+widget.name+'"></div></frdl>'); }); } }catch(err){ console.error(err); } $.WebfanDesktop.wrapper = wrapper; $.WebfanDesktop.desktop = desktop; $.WebfanDesktop.bar_top = bar_top; $.WebfanDesktop.bar_bottom = bar_bottom; $.WebfanDesktop.dock = dock; $($.WebfanDesktop.bar_top).append('<div data-frdl-component="widget://example.com/webfan/progressbar"></div>'); /* try{ $('*[data-role="page"]').trigger('update'); }catch(err){ console.error(err); } */ }; /* data-frdl-desktop-widget="widget://components/components/webfan/marketplace" */ var loadDesktopWidgets = function(){ var widgetElements = document.querySelectorAll('*[data-frdl-desktop-widget]'); if(true!==frdl.isTraversable(widgetElements))return; frdl.each(widgetElements, function(i,el){ if('true'===el.getAttribute('data-frdl-desktop-widget-initiated') ){ return; } el.setAttribute('data-frdl-desktop-widget-initiated', 'true'); var u = new frdl.Url(el.getAttribute('data-frdl-desktop-widget')); var tok = u.getScheme() + '://components/', widgetLoaded = false, eLoaded = false; var url = u.urlMakeNew(); var component = str_replace(tok,'',url); component = str_replace( u.getScheme() + '://example.com/','',component); component = str_replace( 'widget://','',component); if('components'===u.getHost() || 'example.com'===u.getHost()){ url = frdl.route('API_COMPONENT_MAIN', null, null, component); url = str_replace('/app.js', '', url); }else{ u.setScheme('http'); url = u.urlMakeNew(); } url = str_replace( 'widget://','http://',url); if('/' !== url.substr(-1)){ url += '/'; } var Url = new frdl.Url(url); var __DIR__ = Url.getScheme() + '://' + Url.getHost() + '/' + Url.getDirectory(); $.ajax( { url: /*url*/__DIR__ + 'config.xml', crossDomain: true, headers: {'X-Requested-With': 'XMLHttpRequest'/*, 'Origin' : new frdl.Url().getScheme() + '://' + new frdl.Url().getHost() */ }, type: 'GET', dataType: 'XML', data: {} , cache:true } ) .done(function(response) { var _MID = 'widget-'+Sha1.hash(component)+'-'+Sha1.hash(url)+'-'+component.length+'-'+url.length; var config = wjslX2JS.xml2json(response); if('undefined'===typeof config.widget){ console.error('Cannot get config file of '+component); return false; } var src = null; if(true===frdl.isTraversable(config.widget.icon_asArray)){ frdl.each(config.widget.icon_asArray, function(i, icon){ if(null===src)src = icon._src; if('16' === icon._width && '16' === icon._height){ src = icon._src; return false; } }); } if(null===src)src='http://static.webfan.de/icons/icons-3/list_components.gif'; if(''===new frdl.Url(src).getScheme()){ src = url + src; } var authors = ''; if(true===frdl.isTraversable(config.widget.author_asArray)){ frdl.each(config.widget.author_asArray,function(i,author){ authors += ' <a href="'+author._href+'">' + author.__text + '</a>'; }); } setTimeout(function(){ frdl.wd().loadModul({ mid : _MID, title : config.widget.name.__text, title_short : config.widget.name._short, author : config.widget.author_asArray[0].__text, description : config.widget.description, ico : src, cb_open : function(){ var THIS = $.WebfanDesktop.Registry.Programs[_MID] ; $('#window_'+THIS.mid).find('.window_aside').hide(); var MUTEX_ID = _MID; THIS.WIN = $($.WebfanDesktop).frdlWin('create', {persistent:false,mid:_MID, mutex:true, openByDefault : true, title:config.widget.name.__text, main:'<img src="http://images.webfan.de/ajax-loader_2.gif" alt="lade..." style="border:none;" class="img-ajax-loader" />', aside:'', bottom:'',img:src}, { browser_showurlinput : false, browser_savehistory : false }); THIS.WIN.set('title', config.widget.name.__text); if('undefined'===typeof config.widget.preference_asArray || 0===config.widget.preference_asArray.length){ THIS.WIN.set('html_aside', 'Widget: ' +config.widget.name.__text + ' by <a href="'+config.widget.author_asArray[0]._href+'" target="_blank">' + config.widget.author_asArray[0].__text +'</a><br />'+config.widget.description+'<br /><span style="font-size:0.7em;">Tip: WidgetAuthors can set a sidebar template.html to config.xml preferences named &quot;plugin:frdl:wd:window_sidebar_left&quot;.</span>'); }else{ /* todo: "standard"-plugin-method? alert(JSON.stringify(config.widget.preference_asArray)); [{"__cnt":3,"_name":"plugin:{hook:[{name:'sidebar', tag:'UI'}, {name:'anotherTestHook', tag:'anotherTestTag'}]}", "_value":"{templateUrl:'templates/plugin.webfan-desktop/wd_sidebar_left.html'}","_readonly":"true"},{"__cnt":3,"_name":"config.initial","_value":"{local:false, forked:false, apiUrl:null}","_readonly":"false"}] alert(JSON.stringify(config.widget.preference_asArray)); */ frdl.each(config.widget.preference_asArray,function(k,preference){ if('plugin:WebfanDesktop:sidebar:UI'===preference._name){ $('#window_'+THIS.mid).find('.window_aside').html(''); $.ajax({ url: __DIR__ + preference._value, crossDomain:true, cache:true, headers: {'X-Requested-With': 'XMLHttpRequest'/*, 'Origin' : new frdl.Url().getScheme() + '://' + new frdl.Url().getHost() */ }, type: 'GET', dataType:'html' }) .done(function( html ) { $('#window_'+THIS.mid).find('.window_aside').append(html); }).fail(function(jqXHR, textStatus) { console.error(textStatus); }).always(function() { }); } }); /*eo each preferences */ }/*eo process widget preferences */ THIS.WIN.set('html_bottom', config.widget.name.__text); /* Dom.bringToFront($('#window_'+THIS.WIN.id)); */ $.WebfanDesktop.resetReady('Loading '+config.widget.name.__text+'...', 40, function(){ $.WebfanDesktop.o.progress++; if($.WebfanDesktop.o.progress>=95)$.WebfanDesktop.o.progress=85; if(0===document.querySelectorAll('*[data-frdl-component="'+el.getAttribute('data-frdl-desktop-widget')+'"]').length)return false; if(!document.querySelector('*[data-frdl-component="'+el.getAttribute('data-frdl-desktop-widget')+'"]').hasAttribute('data-flow-widget'))return false; return true; }); frdl.UI.load(); THIS.WIN.set('html_main', '<frdl><div data-frdl-component="'+el.getAttribute('data-frdl-desktop-widget')+'" data-flow-context="desktop"></div></frdl>'); $(document).trigger('readystatechange'); return THIS; }, /* windows : [ { img : src, title : config.widget.name.__text, html_aside : 'Widget: ' +config.widget.name.__text + ' by' + authors , html_main : '<div data-frdl-component="'+el.getAttribute('data-frdl-desktop-widget')+'"></div>', html_bottom : config.widget.name.__text, exec : function(ev){ } } ], */ icons : [ { mid : _MID, title: config.widget.name.__text, img : src } ] }); /*eo loadModul*/ config.mid=_MID; config.wdModul = frdl.wd().Registry.Programs[_MID]; },1); /*eo timeout*/ }) .fail(function(jqXHR, textStatus) { console.error('Error: ' + url + 'config.xml ' + jqXHR.status); }) .always(function() { console.log('Loading desktop-widget "' + component+'"...'); }); }); }; var bootDefaultModules = function(){ var _loadedDEFM = false; $.WebfanDesktop.resetReady('Load default terminal...', 7, function(){ return ( 'undefined' !== typeof $.WebfanDesktop.Registry.Programs['terminal'] ); }); $.WebfanDesktop.resetReady('Load default system...', 6, function(){ return ( 'undefined' !== typeof $.WebfanDesktop.Registry.Programs['system'] ); }); $.WebfanDesktop.resetReady('Load default modules...', 60, function(){ return ( true === _loadedDEFM ) ? true :false; }); var i = 0; $.WebfanDesktop.loadModul( $ModulProgramm_Locale ); $.WebfanDesktop.loadModul( $ModulProgramm_Terminal ); $.WebfanDesktop.loadModul( $ModulProgramm_SystemControl ); $.WebfanDesktop.loadModul({ mid : 'search', title : '<span class="wd-lang-user">Search</span>', author : 'Till Wehowski, Webfan.de', description : 'Search.', ico : 'http://images.webfan.de/search.png', cb_open : function(o){ $($.WebfanDesktop.o.doms.locale).locale('loadLangs', { 'Search' : { 'en_GB' : 'Search', 'de_DE' : 'Suche', 'fr_FR' : 'Recherche' } }); if('undefined' === typeof o)var o = {}; var THIS = $.WebfanDesktop.Registry.Programs['search']; THIS.o = o; THIS.id = THIS.mid; if(!$.WebfanDesktop.getTask(THIS.id))$.WebfanDesktop.Registry.Tasks.push(THIS); var MUTEX_ID = 'search' + (('string' === typeof THIS.o.query) ? ('-' + Sha1.hash(THIS.o.query)) : ''); var Title = function(set_title){ var title = '<span>Search</span> ' + (('string' === typeof THIS.o.query) ? (' ' + THIS.o.query) : '') + ''; if(true===set_title){ $('#window_main_' + MUTEX_ID).find('.window_top').find('.window-top-title-span').html(title); } return title; }; var url = 'http://suche.webfan.de' + (('string' ===typeof THIS.o.query) ? '/?q=' + THIS.o.query : ''), title = Title(true); if('undefined' === typeof THIS.o.mid)THIS.o.mid = MUTEX_ID; THIS.WIN = $($.WebfanDesktop).frdlWin('create', {persistent:false,mid:MUTEX_ID, mutex:true, openByDefault : true, title:title, main:'<img src="http://images.webfan.de/ajax-loader_2.gif" alt="lade..." style="border:none;" class="img-ajax-loader" />', aside:'', bottom:'',img:'http://images.webfan.de/search.png'}, { browser_showurlinput : false, browser_savehistory : false }); THIS.WIN.set('title', title); THIS.WIN.set('html_aside', '<ul style="padding-bottom:6px;">' + '<li onclick="$.WebfanDesktop.getTask(\'' +THIS.id+'\').WIN.browser(\''+url+'\');"><img src="http://images.webfan.de/search.png" style="border:none;width:16px;height:16px;" /><u>Search</u></li>' + '</ul>' ); THIS.WIN.set('html_bottom', title); Dom.bringToFront($('#window_'+THIS.WIN.id)); $.WebfanDesktop.getTask(THIS.id).WIN.browser(url); $.WebfanDesktop.translate(); }, icons : [ { mid : 'search', title: '<span>Search</span>', img : 'http://images.webfan.de/search.png' } ] }); $.WebfanDesktop.loadModul({ mid : 'browser', title : '<span>Browser</span>', author : 'Till Wehowski, Webfan.de', description : 'Browser.', ico : 'http://static.webfan.de/icons/icons-3/icon_world.gif', cb_open : function(o){ $($.WebfanDesktop.o.doms.locale).locale('loadLangs', { 'Browser' : { 'en_GB' : 'Browser', 'de_DE' : 'Browser', 'fr_FR' : 'Browser' }, 'New window' : { 'en_GB' : 'New window', 'de_DE' : 'Neues Fenster', 'fr_FR' : 'New window' } }); if('undefined' === typeof o)var o = {}; var THIS = $.WebfanDesktop.Registry.Programs['browser']; THIS.o = o; THIS.id = THIS.mid; if(!$.WebfanDesktop.getTask(THIS.id))$.WebfanDesktop.Registry.Tasks.push(THIS); var MUTEX_ID = 'browser' + (('string' === typeof THIS.o.url) ? ('-' + Sha1.hash(THIS.o.url)) : ''); var Title = function(set_title){ var title = '<span>Browser</span> ' + (('string' === typeof THIS.o.url) ? (' ' + THIS.o.url) : '') + ''; if(true===set_title){ $('#window_main_' + MUTEX_ID).find('.window_top').find('.window-top-title-span').html(title); } return title; }; var url = (('string' ===typeof THIS.o.url) ? THIS.o.url : 'about:blank'), title = ('string' === typeof THIS.o.title) ? THIS.o.title : Title(true); if('undefined' === typeof THIS.o.mid)THIS.o.mid = MUTEX_ID; THIS.WIN = $($.WebfanDesktop).frdlWin('create', {persistent:false,mid:MUTEX_ID, mutex:true, openByDefault : true, title:title, main:'<img src="http://images.webfan.de/ajax-loader_2.gif" alt="lade..." style="border:none;" class="img-ajax-loader" />', aside:'', bottom:'',img:'http://static.webfan.de/icons/icons-3/icon_world.gif'}, { browser_showurlinput : true, browser_savehistory : true }); THIS.WIN.set('title', title); THIS.WIN.set('html_aside', '<ul style="padding-bottom:6px;">' + '<li title="Visit: '+url+'" onclick="$.WebfanDesktop.getTask(\'' +THIS.id+'\').WIN.browser(\''+url+'\');"><img src="http://static.webfan.de/icons/icons-3/icon_world.gif" style="border:none;width:16px;height:16px;" /><u>'+ new frdl.Url(url).getHost() + '/' + str_replace('/', '\/', new frdl.Url(url).getPath()).trim('/') + '</u></li>' + '<li title="New window: '+url+'" onclick="window.open(\''+url+'\', \''+title+'\');"><img src="http://static.webfan.de/icons/icons-3/url.png" style="border:none;width:16px;height:16px;" /><u><span>New window</span>: '+ (new frdl.Url(url).getHost() + '/' + str_replace('/', '\/', new frdl.Url(url).getPath()).trim('/')).substr(0,16) + ' ... ...' + url.substr(-16) +'</u></li>' + '</ul>' ); $('#window_'+THIS.WIN.id).find('.window_aside').hide(); THIS.WIN.set('html_bottom', title); Dom.bringToFront($('#window_'+THIS.WIN.id)); console.log('Browse to '+url); $.WebfanDesktop.getTask(THIS.id).WIN.browser(url,{ browser_showurlinput : true, browser_savehistory : true }); $.WebfanDesktop.translate(); return THIS; }, icons : [ { mid : 'browser', title: '<span>Browser</span>', img : 'http://static.webfan.de/icons/icons-3/icon_world.gif' } ] }); if('undefined' !== typeof $.WebfanDesktop.o.modules) { for(i = 0; i < $.WebfanDesktop.o.modules.length; i++){ if('object' === typeof $.WebfanDesktop.o.modules[i]){ $.WebfanDesktop.loadModul( $.WebfanDesktop.o.modules[i] ); }else if('function' === typeof $.WebfanDesktop.o.modules[i]){ $.WebfanDesktop.o.modules[i]($.WebfanDesktop); } else if('string' === typeof $.WebfanDesktop.o.modules[i]){ document[$.WebfanDesktop.o.modules[i]]($.WebfanDesktop); } } } loadDesktopWidgets(); _loadedDEFM=true; }; $.WebfanDesktop.loadDesktopWidgets = function(){ loadDesktopWidgets(); }; $.WebfanDesktop.addBottomBarIcon = function(mid, title, img, dir, href, func){ var a = Dom.create("a"); a.setAttribute("id", "show_" + mid); a.setAttribute("title", htmlentities(title)); var image = Dom.create("img"); image.setAttribute("src", img); Dom.add(image, a); if("string" === typeof href ){ a.setAttribute("href", href); }else{ a.setAttribute("href", '#'); } if('string' !== typeof dir || ('right' !== dir && 'left' !== dir)){ dir = left; } a.setAttribute("class", 'float_' + dir); if('function' === typeof func){ $(a).on('click', func); } $(this.bar_bottom).prepend(a); }; /* function boot(){ if(typeof $.WebfanDesktop.desktop_html !== 'undefined')return $.WebfanDesktop; var fN = bootInit; var JQD = $.JQD; frdl.addReadyCheck(function(){ if ( 'function' !== typeof $.JQD.go )return false; return true; }); frdl.ready(function(){ $.JQD.go($.WebfanDesktop); fN(); }); } setTimeout(function(){ boot(); }); if('undefined' !== typeof options && false !== options){ bootInit(); } */ var hideAfter = false, desktop = $.WebfanDesktop; var doClose = function(c){ if(false === hideAfter)return; if(isNaN(c))c=0; c++; if(c > 50)return; if(null!==frdl.$q('*[data-frdl-mod="workspace"]', false) /* && frdl.Dom.isVisible(frdl.$q('*[data-frdl-mod="workspace"]', false)) */ ){ frdl.wd().hide(); return; }else{ return webfan.$Async(function(){ doClose(c); },30 + c); } }; webfan.$Async(function(){ if(null === frdl.$q('*[data-frdl-mod="workspace"]', false) && 'undefined' === typeof $.WebfanDesktop.desktop_html){ require('5:http://'+frdl.route('HOST_CDN_PUBLIC_FRDL')+'/cdn/frdl/flow/components/webfan/workspace/js/webfan.gui.MenuCtrl.js', function(mod) { desktop.Menu = mod; webfan.$Async(function(){ bootInit( desktop.o ); /* && null === frdl.$q('*[data-frdl-mod="workspace"]', false) */ },1); }); if( ( /* ('undefined' === typeof options && null === frdl.$q('*[data-frdl-mod="workspace"]', false) ) ||*/ (false === options /* && null === frdl.$q('*[data-frdl-mod="workspace"]', false) */ ) ) ){ hideAfter = true; } if(true === hideAfter ){ webfan.$Async(function(){ doClose(1); },1000); } } },1); return $.WebfanDesktop; }; exports = module.exports = $.WebfanDesktop; })(jQuery); }());