home *** CD-ROM | disk | FTP | other *** search
/ PC go! 2013 July / PCgo_CD_v2_13_07.iso / interface / lib / ContentLoader.js < prev    next >
Encoding:
Text File  |  2013-04-12  |  7.2 KB  |  181 lines

  1. /**
  2.  * Dieser Konstruktor k├╝mmert sich um das Austauschen der Inhalte. 
  3.  * 
  4.  * @namespace IM
  5.  * @class ContentLoader
  6.  * @constructor 
  7.  */
  8. IM.ContentLoader = function () {
  9.     
  10.     /**
  11.      * NodeJS: Setzt die fs-Lib aus der globalen Konfiguration
  12.      * @property fs
  13.      * @type Object
  14.      * @private 
  15.      */
  16.     var fs = IM.Config.fs,
  17.     
  18.     /**
  19.      * NodeJS-Module: L├ñdt das erforderliche Objekt zum Laden von XML-Dokumenten.
  20.      * @property xml2js
  21.      * @type Object 
  22.      * @private
  23.      */
  24.     xml2js = IM.Config.xml;
  25.     
  26.     /**
  27.      * Holt sich das angegebene XML-Dokument und gibt den Inhalt zur├╝ck.
  28.      * @method getXML
  29.      * @param {String} xml Der Pfad des zu ladenden XML-Dokuments
  30.      */
  31.     this.getXML = function ( xml ) {
  32.         var parser = new xml2js.Parser({async: true}),
  33.         sitemap = '';
  34.         
  35.         fs.readFile( xml, function( err, data ) {
  36.             parser.parseString( data, function ( err, result ) {
  37.                 var smc = result['sitemapdata']['smc'];
  38.                 sitemap += '<div id="sitemap">';
  39.                 
  40.                 for( var i = 0, smcLength = smc.length; i < smcLength; i++ ) {
  41.                     
  42.                     if( result['sitemapdata']['smc'][i]['sms'] != undefined || result['sitemapdata']['smc'][i]['st'] != undefined ) {
  43.                         /* Hauptmen├╝ / Kategorien*/
  44.                         sitemap += '<h2>' + smc[i]['$'].title + '</h2>';
  45.                     }
  46.                     
  47.                     if( smc[i]['sms'] != undefined ) {
  48.                         for( var j = 0, smsLength = result['sitemapdata']['smc'][i]['sms'].length; j < smsLength; j++ ) {
  49.                             
  50.                             /* Untermen├╝ */
  51.                             sitemap += '<h3>' + smc[i]['sms'][j]['$'].title + '</h3>';
  52.                             
  53.                             if( result['sitemapdata']['smc'][i]['sms'][j]['st'] != undefined ) {
  54.                                 for( var m = 0, smsStLength = result['sitemapdata']['smc'][i]['sms'][j]['st'].length; m < smsStLength; m++ ) {
  55.                                     /* Software-Titel verlinken */
  56.                                     sitemap += '<p><a href="' + smc[i]['sms'][j]['st'][m]['$'].href + '" class="menu-subitem">' + smc[i]['sms'][j]['st'][m]['t'][0] + '</a></p>';
  57.                                 }
  58.                             } else if( result['sitemapdata']['smc'][i]['sms'][j]['sms'] ) {
  59.                                 for( var n = 0, smcSmsLength = result['sitemapdata']['smc'][i]['sms'][j]['sms'].length; n < smcSmsLength; n++ ) {
  60.                                     
  61.                                     /* Tool-Pakete */
  62.                                     sitemap += '<h4 class="package">' + smc[i]['sms'][j]['sms'][n]['$'].title + '</h4>';
  63.                                     
  64.                                     if( result['sitemapdata']['smc'][i]['sms'][j]['sms'][n]['st'] != undefined ) {
  65.                                         for( var o = 0, toolStlength = result['sitemapdata']['smc'][i]['sms'][j]['sms'][n]['st'].length; o < toolStlength; o++ ) {
  66.                                             /* Tool-Paket Software */
  67.                                             sitemap += '<p><a href="' + smc[i]['sms'][j]['sms'][n]['st'][o]['$'].href + '" class="menu-subitem">' + smc[i]['sms'][j]['sms'][n]['st'][o]['t'][0] + '</a></p>';
  68.                                         }
  69.                                     }
  70.                                 }
  71.                             }
  72.                         }
  73.                     } else {
  74.                         if( result['sitemapdata']['smc'][i]['st'] != undefined ) {
  75.                             for( var k = 0, stLength = result['sitemapdata']['smc'][i]['st'].length; k < stLength; k++ ) {
  76.                                 /* Untermen├╝ / Wenn es sich um statische Seiten handelt ( z.B. Service ) */
  77.                                 sitemap += '<p><a href="' + smc[i]['st'][k]['$'].href + '" class="menu-subitem">' + smc[i]['st'][k]['t'][0] + '</a></p>';
  78.                             }
  79.                         }
  80.                     }
  81.                     
  82.                 }
  83.                 
  84.                 sitemap += '</div>';
  85.                 
  86.                 var targetEl = document.getElementById( IM.Config.APP_BASE_SITEMAP_MENU );
  87.                 var currentContent = targetEl.innerHTML;
  88.                 targetEl.innerHTML = sitemap + currentContent;
  89.                 
  90.             });
  91.         });
  92.         
  93.     };
  94.     
  95.     /**
  96.      * Holt sich das angegebene iframe(elId) und gibt den Inhalt zur├╝ck.
  97.      * @method getIframe
  98.      * @param {String} elId Die ID des iFrame
  99.      */
  100.     this.getIframe = function ( elId ) {
  101.         var elId = elId || false;
  102.         if( elId ) {
  103.             return frames[ elId ].document;
  104.         } else {
  105.             IM.ErrorHandler.errorMsg( 'iFrame-ID is missing', 'ref' );
  106.         }
  107.     };
  108.     
  109.     /**
  110.      * Diese Funktion gibt an ob es sich bei dem aufgerufenen Men├╝ um eine Unterseite handelt.
  111.      * @method isSubPage
  112.      * @param {String} elSel Die Klasse des Elements
  113.      * @return {Boolean} true || false
  114.      */
  115.     this.isSubPage = function ( elSel ) {
  116.         var elSel = document.getElementsByClassName( elSel ) || null,
  117.         elStatus = '';
  118.                 
  119.         if( elSel != null ) {
  120.             for( var i = 0, elLength = elSel.length; i < elLength; i++ ) {
  121.                 elStatus = elSel[i].style.display;
  122.             }
  123.  
  124.             switch( elStatus ) {
  125.                 case 'none':
  126.                     elStatus = true;
  127.                     break;
  128.                 case 'block':
  129.                     elStatus = false;
  130.                     break;
  131.                 default:
  132.                     elStatus = false;
  133.                     break;
  134.             }
  135.             
  136.             return elStatus;
  137.             
  138.         } else {
  139.             IM.ErrorHandler.errorMsg( 'isSubPage: Es wurde kein Element angegeben oder es existiert nicht', 'ref' );
  140.         }
  141.     };
  142.     
  143.     /**
  144.      * L├ñdt den erforderlichen Inhalt einer Datei in das jeweilige iFrame
  145.      * @method loadFrameContent
  146.      * @param {String} elId Die ID des iFrames
  147.      * @param {String} newPage Der zu ladende Inhalt
  148.      * @param {String} cssPath Der Pfad zu dem jeweiligen Stylesheet
  149.      */
  150.     this.loadFrameContent = function ( elId, newPage, cssPath ) {
  151.         var sFrame,
  152.         sCssLink,
  153.         ajaxLoader = document.getElementById('ajaxLoader');
  154.         
  155.         sFrame = document.getElementById( elId );
  156.         
  157.         ajaxLoader.style.display = 'block';
  158.         sFrame.style.display = 'none';
  159.         
  160.         sFrame.src = newPage;
  161.         
  162.         sCssLink = document.createElement("link");
  163.         sCssLink.href    = cssPath;
  164.         sCssLink.rel     = 'stylesheet';
  165.         sCssLink.type    = 'text/css';
  166.         
  167.         sFrame.addEventListener('load', frameStyles, false);
  168.         
  169.         function frameStyles() {
  170.             if( !sFrame.contentDocument.head.hasChildNodes() ) {
  171.                 sFrame.contentDocument.head.appendChild( sCssLink );
  172.             }
  173.             
  174.             ajaxLoader.style.display = 'none';
  175.             sFrame.style.display = 'block';
  176.             
  177.             sFrame.removeEventListener('load', frameStyles, false);
  178.         }
  179.     };
  180.     
  181. };