Beispiel #1
0
    def renderHeader(self, title, docType, for_print=0):
        """
        Returns an XHTML string for the header of this page.
        """

        # Check what iDevices and special features the node has
        hasGallery = helper.hasGalleryIdevice(self.node)
        hasEffects = helper.hasFX(self.node)
        hasHighlighter = helper.hasSH(self.node)
        hasJSGames = helper.hasGames(self.node)
        hasWikipedia = helper.hasWikipediaIdevice(self.node)
        hasMediaelement = helper.nodeHasMediaelement(self.node)

        # Get package language
        lang = G.application.config.locale
        if self.node.package.dublinCore.language != '':
            lang = self.node.package.dublinCore.language

        # Write page DocType and HTML start tag
        if docType == 'HTML5':
            html = u'<!DOCTYPE html>' + lineBreak
            html += u'<html lang="%s">%s' % (lang, lineBreak)
        else:
            html = u'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' + lineBreak
            html += u'<html lang="%s" xml:lang="%s" xmlns="http://www.w3.org/1999/xhtml">%s' % (
                lang, lang, lineBreak)

        # HTML head start tag
        html += u'<head>' + lineBreak

        # Page charset
        html += u'<meta http-equiv="content-type" content="text/html; charset=utf-8" />' + lineBreak

        # Page title
        html += u'<title>%s</title>%s' % (title, lineBreak)

        # Favicon
        html += u'<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />' + lineBreak

        # If the page is not in HTML5, we need to specify the language here
        if docType != 'HTML5' and self.node.package.dublinCore.language != '':
            html += u'<meta http-equiv="content-language" content="%s" />%s' % (
                lang, lineBreak)

        # Render the author META tag
        if self.node.package.author != "":
            html += u'<meta name="author" content="%s" />%s' % (
                self.node.package.author, lineBreak)

        # Render the license META tag(s)
        html += common.getLicenseMetadata(self.node.package.license)

        # Render the generator META tag
        html += u'<meta name="generator" content="eXeLearning %s - exelearning.net" />%s' % (
            release, lineBreak)

        # Render the description META tag
        if self.node.package.description != "":
            desc = self.node.package.description
            # If the description has any double quotes, we have to escape them
            desc = desc.replace('"', '&quot;')
            html += u'<meta name="description" content="%s" />%s' % (desc,
                                                                     lineBreak)

        # Add CSS files
        html += u'<link rel="stylesheet" type="text/css" href="base.css" />' + lineBreak
        if hasWikipedia:
            html += u'<link rel="stylesheet" type="text/css" href="exe_wikipedia.css" />' + lineBreak
        if hasGallery:
            html += u'<link rel="stylesheet" type="text/css" href="exe_lightbox.css" />' + lineBreak
        if hasEffects:
            html += u'<link rel="stylesheet" type="text/css" href="exe_effects.css" />' + lineBreak
        if hasHighlighter:
            html += u'<link rel="stylesheet" type="text/css" href="exe_highlighter.css" />' + lineBreak
        if hasJSGames:
            html += u'<link rel="stylesheet" type="text/css" href="exe_games.css" />' + lineBreak
        html += u'<link rel="stylesheet" type="text/css" href="content.css" />' + lineBreak

        # Add HTML compatibility script to IE 9
        if docType == "HTML5" or hasMediaelement:
            html += u'<!--[if lt IE 9]><script type="text/javascript" src="exe_html5.js"></script><![endif]-->' + lineBreak

        # Get the style
        style = G.application.config.styleStore.getStyle(
            self.node.package.style)

        # Add JS files
        if style.hasValidConfig:
            if style.get_jquery() == True:
                html += u'<script type="text/javascript" src="exe_jquery.js"></script>' + lineBreak
            else:
                html += u'<script type="text/javascript" src="%s"></script>%s' % (
                    style.get_jquery(), lineBreak)
        else:
            html += u'<script type="text/javascript" src="exe_jquery.js"></script>' + lineBreak
        if hasGallery:
            html += u'<script type="text/javascript" src="exe_lightbox.js"></script>' + lineBreak
        if hasEffects:
            html += u'<script type="text/javascript" src="exe_effects.js"></script>' + lineBreak
        if hasHighlighter:
            html += u'<script type="text/javascript" src="exe_highlighter.js"></script>' + lineBreak
        html += common.getJavaScriptStrings() + lineBreak
        if hasJSGames:
            # The games require additional strings
            html += common.getGamesJavaScriptStrings() + lineBreak
            html += u'<script type="text/javascript" src="exe_games.js"></script>' + lineBreak
        html += u'<script type="text/javascript" src="common.js"></script>' + lineBreak
        if common.hasMagnifier(self.node):
            html += u'<script type="text/javascript" src="mojomagnify.js"></script>' + lineBreak

        # include extra print-script for onload bit
        if for_print:
            html += u'<script type="text/javascript">' + lineBreak
            html += u'var interval;' + lineBreak
            html += u'function checkClose() {' + lineBreak
            html += u'    if (document.hasFocus()) {' + lineBreak
            html += u'        alert("' + _(
                "You can close this window") + u'");' + lineBreak
            html += u'        clearInterval(interval);' + lineBreak
            #html += u'        window.close();' + lineBreak
            html += u'    }' + lineBreak
            html += u'}' + lineBreak
            html += u'function print_page() {' + lineBreak
            html += u'     if(typeof document.hasFocus === "undefined") {' + lineBreak
            html += u'         document.hasFocus = function () {' + lineBreak
            html += u'             return document.visibilityState == "visible";' + lineBreak
            html += u'         }' + lineBreak
            html += u'     }' + lineBreak
            html += u'     window.print();' + lineBreak
            html += u'     interval = setInterval(checkClose, 300);' + lineBreak
            html += u'}' + lineBreak
            html += u'</script>' + lineBreak

        if style.hasValidConfig:
            html += style.get_extra_head()

        # Close head tag
        html += u'</head>' + lineBreak

        return html
Beispiel #2
0
    def renderHeader(self, title, docType, for_print = 0):
        """
        Returns an XHTML string for the header of this page.
        """
        
        # Check what iDevices and special features the node has
        hasGallery = helper.hasGalleryIdevice(self.node)
        hasEffects = helper.hasFX(self.node)
        hasHighlighter = helper.hasSH(self.node)
        hasJSGames = helper.hasGames(self.node)
        hasWikipedia = helper.hasWikipediaIdevice(self.node)
        hasMediaelement = helper.nodeHasMediaelement(self.node)
        hasABCMusic = helper.nodeHasABCMusic(self.node)
        listIdevicesFiles = helper.addListIdevicesFiles(self.node)

        # Get package language
        lang = G.application.config.locale
        if self.node.package.dublinCore.language != '':
            lang = self.node.package.dublinCore.language
        
        # Write page DocType and HTML start tag
        if docType == 'HTML5':
            html = u'<!DOCTYPE html>' + lineBreak
            html += u'<html lang="%s">%s' % (lang, lineBreak)
        else:
            html = u'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' + lineBreak
            html += u'<html lang="%s" xml:lang="%s" xmlns="http://www.w3.org/1999/xhtml">%s' % (lang, lang, lineBreak)
        
        # HTML head start tag    
        html += u'<head>' + lineBreak
        
        # Page charset
        html += u'<meta http-equiv="content-type" content="text/html; charset=utf-8" />' + lineBreak
        
        # Page title
        html += u'<title>%s</title>%s' % (title, lineBreak)
        
        # Favicon
        html += u'<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />' + lineBreak
        
        # If the page is not in HTML5, we need to specify the language here
        if docType != 'HTML5' and self.node.package.dublinCore.language != '':
            html += u'<meta http-equiv="content-language" content="%s" />%s' % (lang, lineBreak)
        
        # Render the author META tag
        if self.node.package.author != "":
            html += u'<meta name="author" content="%s" />%s' % (escape(self.node.package.author, True), lineBreak)
            
        # Render the license META tag(s)
        html += common.getLicenseMetadata(self.node.package.license)
        
        # Render the generator META tag
        html += u'<meta name="generator" content="eXeLearning %s - exelearning.net" />%s' % (release, lineBreak)
        
        # Render the description META tag
        if self.node.package.description != "":
            desc = self.node.package.description
            # If the description has any double quotes, we have to escape them
            desc = desc.replace('"', '&quot;')        
            html += u'<meta name="description" content="%s" />%s' % (desc, lineBreak)
            
        # Add CSS files
        html += u'<link rel="stylesheet" type="text/css" href="base.css" />' + lineBreak
        if hasWikipedia:
            html += u'<link rel="stylesheet" type="text/css" href="exe_wikipedia.css" />' + lineBreak
        if hasGallery:
            html += u'<link rel="stylesheet" type="text/css" href="exe_lightbox.css" />' + lineBreak
        if hasEffects:
            html += u'<link rel="stylesheet" type="text/css" href="exe_effects.css" />' + lineBreak
        if hasHighlighter:
            html += u'<link rel="stylesheet" type="text/css" href="exe_highlighter.css" />' + lineBreak
        if hasJSGames:
            html += u'<link rel="stylesheet" type="text/css" href="exe_games.css" />' + lineBreak
        if hasABCMusic:
            html += u'<link rel="stylesheet" type="text/css" href="exe_abcmusic.css" />' + lineBreak           
        html += u'<link rel="stylesheet" type="text/css" href="content.css" />' + lineBreak
        
        # Add HTML compatibility script to IE 9
        if docType == "HTML5" or hasMediaelement:
            html += u'<!--[if lt IE 9]><script type="text/javascript" src="exe_html5.js"></script><![endif]-->' + lineBreak
        
        # Get the style
        style = G.application.config.styleStore.getStyle(self.node.package.style)
        
        # Add JS files
        if style.hasValidConfig:
            if style.get_jquery() == True:
                html += u'<script type="text/javascript" src="exe_jquery.js"></script>' + lineBreak
            else:
                html += u'<script type="text/javascript" src="%s"></script>%s' % (style.get_jquery(), lineBreak)
        else:
            html += u'<script type="text/javascript" src="exe_jquery.js"></script>' + lineBreak
        if hasGallery:
            html += u'<script type="text/javascript" src="exe_lightbox.js"></script>' + lineBreak
        if hasEffects:
            html += u'<script type="text/javascript" src="exe_effects.js"></script>' + lineBreak
        if hasHighlighter:
            html += u'<script type="text/javascript" src="exe_highlighter.js"></script>' + lineBreak
        html += u'<script type="text/javascript" src="common_i18n.js"></script>' + lineBreak
        if hasJSGames:
            html += u'<script type="text/javascript" src="exe_games.js"></script>' + lineBreak
        if hasABCMusic:
            html += u'<script type="text/javascript" src="exe_abcmusic.js"></script>' + lineBreak            
        html += u'<script type="text/javascript" src="common.js"></script>' + lineBreak
        for ideviceFile in set(listIdevicesFiles):
            html += ideviceFile
        if common.hasMagnifier(self.node):
            html += u'<script type="text/javascript" src="mojomagnify.js"></script>' + lineBreak
            
        # include extra print-script for onload bit
        if for_print:
            html += u'<script type="text/javascript">' + lineBreak
            html += u'var interval;' + lineBreak
            html += u'function checkClose() {' + lineBreak
            html += u'    if (document.hasFocus()) {' + lineBreak
            html += u'        alert("' + _("You can close this window") + u'");' + lineBreak
            html += u'        clearInterval(interval);' + lineBreak
            #html += u'        window.close();' + lineBreak
            html += u'    }' + lineBreak
            html += u'}' + lineBreak
            html += u'function print_page() {' + lineBreak
            html += u'     if(typeof document.hasFocus === "undefined") {' + lineBreak
            html += u'         document.hasFocus = function () {' + lineBreak
            html += u'             return document.visibilityState == "visible";' + lineBreak
            html += u'         }' + lineBreak
            html += u'     }' + lineBreak
            html += u'     window.print();' + lineBreak
            html += u'     interval = setInterval(checkClose, 300);' + lineBreak
            html += u'}' + lineBreak
            html += u'</script>' + lineBreak
            
        if style.hasValidConfig:
            html += style.get_extra_head()
            
        html += common.getExtraHeadContent(self.node.package)
        
        # Close head tag
        html += u'</head>' + lineBreak
        
        return html