Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

#!/usr/bin/env python 

# -*- coding: utf-8 -*- 

 

############################################################################### 

#  Copyright Kitware Inc. 

# 

#  Licensed under the Apache License, Version 2.0 ( the "License" ); 

#  you may not use this file except in compliance with the License. 

#  You may obtain a copy of the License at 

# 

#    http://www.apache.org/licenses/LICENSE-2.0 

# 

#  Unless required by applicable law or agreed to in writing, software 

#  distributed under the License is distributed on an "AS IS" BASIS, 

#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 

#  See the License for the specific language governing permissions and 

#  limitations under the License. 

############################################################################### 

 

import mako 

import os 

 

from girder import constants 

 

 

class Webroot(object): 

    """ 

    The webroot endpoint simply serves the main index HTML file. 

    """ 

    exposed = True 

 

    indexHtml = None 

 

    vars = { 

        'plugins': [], 

        'apiRoot': '', 

        'staticRoot': '', 

        'title': 'Girder' 

    } 

 

    template = r""" 

    <!DOCTYPE html> 

    <html lang="en"> 

      <head> 

        <title>${title}</title> 

        <link rel="stylesheet" 

              href="//fonts.googleapis.com/css?family=Droid+Sans:400,700"> 

        <link rel="stylesheet" 

              href="${staticRoot}/lib/bootstrap/css/bootstrap.min.css"> 

        <link rel="stylesheet" 

              href="${staticRoot}/lib/bootstrap/css/bootstrap-switch.min.css"> 

        <link rel="stylesheet" 

              href="${staticRoot}/lib/fontello/css/fontello.css"> 

        <link rel="stylesheet" 

              href="${staticRoot}/lib/fontello/css/animation.css"> 

        <link rel="stylesheet" 

              href="${staticRoot}/lib/jqplot/css/jquery.jqplot.min.css"> 

        <link rel="stylesheet" 

              href="${staticRoot}/built/app.min.css"> 

        <link rel="icon" 

              type="image/png" 

              href="${staticRoot}/img/Girder_Favicon.png"> 

 

        % for plugin in pluginCss: 

            <link rel="stylesheet" 

                  href="${staticRoot}/built/plugins/${plugin}/plugin.min.css"> 

        % endfor 

      </head> 

      <body> 

        <div id="g-global-info-apiroot" class="hide">${apiRoot}</div> 

        <div id="g-global-info-staticroot" class="hide">${staticRoot}</div> 

        <script src="${staticRoot}/built/libs.min.js"></script> 

        <script src="${staticRoot}/built/app.min.js"></script> 

        <script src="${staticRoot}/built/main.min.js"></script> 

 

        % for plugin in pluginJs: 

          <script src="${staticRoot}/built/plugins/${plugin}/plugin.min.js"> 

          </script> 

        % endfor 

      </body> 

    </html> 

    """ 

 

    def GET(self): 

        if self.indexHtml is None: 

            self.vars['pluginCss'] = [] 

            self.vars['pluginJs'] = [] 

            builtDir = os.path.join(constants.ROOT_DIR, 'clients', 'web', 

                                    'static', 'built', 'plugins') 

            for plugin in self.vars['plugins']: 

                if os.path.exists(os.path.join(builtDir, plugin, 

                                               'plugin.min.css')): 

                    self.vars['pluginCss'].append(plugin) 

                if os.path.exists(os.path.join(builtDir, plugin, 

                                               'plugin.min.js')): 

                    self.vars['pluginJs'].append(plugin) 

 

            self.indexHtml = mako.template.Template(self.template).render( 

                **self.vars) 

 

        return self.indexHtml 

 

    def updateHtmlVars(self, vars): 

        """ 

        If any of the variables in the index html need to change, call this 

        with the updated set of variables to render the template with. 

        """ 

        self.vars.update(vars) 

        self.indexHtml = None