@@ -6,107 +6,137 @@ module.exports = {
6
6
Promo : Promo
7
7
} ;
8
8
9
- function Promo ( id , text , link , image , theme ) {
9
+ function Promo ( id , text , link , image , theme , display_type ) {
10
10
this . id = id ;
11
11
this . text = text ;
12
12
this . link = link ;
13
13
this . image = image ;
14
14
this . theme = theme || constants . THEME_RTD ;
15
+ this . display_type = display_type || constants . PROMO_TYPES . LEFTNAV ;
15
16
this . promo = null ;
17
+
18
+ // Handler when a promo receives a click
19
+ this . click_handler = function ( ) {
20
+ if ( _gaq ) {
21
+ _gaq . push (
22
+ [ 'rtfd._setAccount' , 'UA-17997319-1' ] ,
23
+ [ 'rtfd._trackEvent' , 'Promo' , 'Click' , self . id ]
24
+ ) ;
25
+ }
26
+ } ;
16
27
}
17
28
18
29
Promo . prototype . create = function ( ) {
19
30
var self = this ,
20
31
menu ,
21
32
promo_class ;
22
33
if ( this . theme == constants . THEME_RTD ) {
23
- menu = this . get_sphinx_rtd_theme_menu ( ) ;
24
- promo_class = 'wy-menu' ;
34
+ menu = this . get_sphinx_rtd_theme_promo_selector ( ) ;
35
+ promo_class = this . display_type === constants . PROMO_TYPES . FOOTER ? 'rtd-pro-footer' : 'wy-menu' ;
25
36
}
26
37
else if ( this . theme == constants . THEME_ALABASTER ) {
27
- menu = this . get_alabaster_menu ( ) ;
28
- promo_class = 'alabaster' ;
38
+ menu = this . get_alabaster_promo_selector ( ) ;
39
+ promo_class = this . display_type === constants . PROMO_TYPES . FOOTER ? 'rtd-pro-footer' : 'alabaster' ;
29
40
}
30
- if ( typeof ( menu ) != 'undefined' ) {
31
- // Add elements
32
- promo = $ ( '<div />' )
33
- . attr ( 'class' , 'rtd-pro ' + promo_class ) ;
34
-
35
- // Promo info
36
- var promo_about = $ ( '<div />' )
37
- . attr ( 'class' , 'rtd-pro-about' ) ;
38
- var promo_about_link = $ ( '<a />' )
39
- . attr ( 'href' , 'https://readthedocs.org/sustainability/advertising/' )
40
- . appendTo ( promo_about ) ;
41
- var promo_about_icon = $ ( '<i />' )
42
- . attr ( 'class' , 'fa fa-info-circle' )
43
- . appendTo ( promo_about_link ) ;
44
- promo_about . appendTo ( promo ) ;
45
-
46
- // On Click handler
47
- function promo_click ( ) {
48
- if ( _gaq ) {
49
- _gaq . push (
50
- [ 'rtfd._setAccount' , 'UA-17997319-1' ] ,
51
- [ 'rtfd._trackEvent' , 'Promo' , 'Click' , self . id ]
52
- ) ;
53
- }
54
- }
55
-
56
- // Promo image
57
- if ( self . image ) {
58
- var promo_image_link = $ ( '<a />' )
59
- . attr ( 'class' , 'rtd-pro-image-wrapper' )
60
- . attr ( 'href' , self . link )
61
- . attr ( 'target' , '_blank' )
62
- . on ( 'click' , promo_click ) ;
63
- var promo_image = $ ( '<img />' )
64
- . attr ( 'class' , 'rtd-pro-image' )
65
- . attr ( 'src' , self . image )
66
- . appendTo ( promo_image_link ) ;
67
- promo . append ( promo_image_link ) ;
68
- }
69
41
70
- // Create link with callback
71
- var promo_text = $ ( '<span />' )
72
- . html ( self . text ) ;
73
- $ ( promo_text ) . find ( 'a' ) . each ( function ( ) {
74
- $ ( this )
75
- . attr ( 'class' , 'rtd-pro-link' )
76
- . attr ( 'href' , self . link )
77
- . attr ( 'target' , '_blank' )
78
- . on ( 'click' , promo_click ) ;
79
- } ) ;
80
- promo . append ( promo_text ) ;
81
-
82
- promo . appendTo ( menu ) ;
83
-
84
- promo . wrapper = $ ( '<div />' )
85
- . attr ( 'class' , 'rtd-pro-wrapper' )
86
- . appendTo ( menu ) ;
87
-
88
- return promo ;
42
+ if ( typeof ( menu ) != 'undefined' ) {
43
+ this . place_promo ( menu , promo_class ) ;
89
44
}
90
45
}
91
46
92
- Promo . prototype . get_alabaster_menu = function ( ) {
47
+ Promo . prototype . place_promo = function ( selector , promo_class ) {
48
+ var self = this ;
49
+
50
+ // Add elements
51
+ var promo = $ ( '<div />' )
52
+ . attr ( 'class' , 'rtd-pro ' + promo_class ) ;
53
+
54
+ // Promo info
55
+ var promo_about = $ ( '<div />' )
56
+ . attr ( 'class' , 'rtd-pro-about' ) ;
57
+ var promo_about_link = $ ( '<a />' )
58
+ . attr ( 'href' , 'https://readthedocs.org/sustainability/advertising/' )
59
+ . appendTo ( promo_about ) ;
60
+ $ ( '<span />' ) . text ( 'Sponsored ' ) . appendTo ( promo_about_link ) ;
61
+ var promo_about_icon = $ ( '<i />' )
62
+ . attr ( 'class' , 'fa fa-info-circle' )
63
+ . appendTo ( promo_about_link ) ;
64
+ promo_about . appendTo ( promo ) ;
65
+
66
+ // Promo image
67
+ if ( self . image ) {
68
+ var promo_image_link = $ ( '<a />' )
69
+ . attr ( 'class' , 'rtd-pro-image-wrapper' )
70
+ . attr ( 'href' , self . link )
71
+ . attr ( 'target' , '_blank' )
72
+ . on ( 'click' , this . click_handler ) ;
73
+ var promo_image = $ ( '<img />' )
74
+ . attr ( 'class' , 'rtd-pro-image' )
75
+ . attr ( 'src' , self . image )
76
+ . appendTo ( promo_image_link ) ;
77
+ promo . append ( promo_image_link ) ;
78
+ }
79
+
80
+ // Create link with callback
81
+ var promo_text = $ ( '<span />' )
82
+ . html ( self . text ) ;
83
+ $ ( promo_text ) . find ( 'a' ) . each ( function ( ) {
84
+ $ ( this )
85
+ . attr ( 'class' , 'rtd-pro-link' )
86
+ . attr ( 'href' , self . link )
87
+ . attr ( 'target' , '_blank' )
88
+ . on ( 'click' , this . click_handler ) ;
89
+ } ) ;
90
+ promo . append ( promo_text ) ;
91
+
92
+ promo . appendTo ( selector ) ;
93
+
94
+ promo . wrapper = $ ( '<div />' )
95
+ . attr ( 'class' , 'rtd-pro-wrapper' )
96
+ . appendTo ( selector ) ;
97
+
98
+ return promo ;
99
+ } ;
100
+
101
+ Promo . prototype . get_alabaster_promo_selector = function ( ) {
102
+ // Return a jQuery selector where the promo goes on the Alabaster theme
93
103
var self = this ,
94
- nav_side = $ ( 'div.sphinxsidebar > div.sphinxsidebarwrapper' ) ;
104
+ selector ;
105
+
106
+ if ( self . display_type === constants . PROMO_TYPES . FOOTER ) {
107
+ selector = $ ( '<div />' )
108
+ . attr ( 'class' , 'rtd-pro-footer-wrapper body' )
109
+ . appendTo ( 'div.bodywrapper' ) ;
110
+ $ ( '<hr />' ) . insertBefore ( selector ) ;
111
+ $ ( '<hr />' ) . insertAfter ( selector ) ;
112
+ } else {
113
+ selector = $ ( 'div.sphinxsidebar > div.sphinxsidebarwrapper' ) ;
114
+ }
95
115
96
- if ( nav_side . length ) {
97
- return nav_side ;
116
+ if ( selector . length ) {
117
+ return selector ;
98
118
}
99
- }
119
+ } ;
100
120
101
121
102
- Promo . prototype . get_sphinx_rtd_theme_menu = function ( ) {
122
+ Promo . prototype . get_sphinx_rtd_theme_promo_selector = function ( ) {
123
+ // Return a jQuery selector where the promo goes on the RTD theme
103
124
var self = this ,
104
- nav_side = $ ( 'nav.wy-nav-side > div.wy-side-scroll' ) ;
125
+ selector ;
126
+
127
+ if ( self . display_type === constants . PROMO_TYPES . FOOTER ) {
128
+ selector = $ ( '<div />' )
129
+ . attr ( 'class' , 'rtd-pro-footer-wrapper' )
130
+ . insertBefore ( 'footer hr' ) ;
131
+ $ ( '<hr />' ) . insertBefore ( selector ) ;
132
+ } else {
133
+ selector = $ ( 'nav.wy-nav-side > div.wy-side-scroll' ) ;
134
+ }
105
135
106
- if ( nav_side . length ) {
107
- return nav_side ;
136
+ if ( selector . length ) {
137
+ return selector ;
108
138
}
109
- }
139
+ } ;
110
140
111
141
// Position promo
112
142
Promo . prototype . display = function ( ) {
@@ -121,10 +151,10 @@ Promo.prototype.display = function () {
121
151
if ( promo ) {
122
152
promo . show ( ) ;
123
153
}
124
- }
154
+ } ;
125
155
126
156
Promo . prototype . disable = function ( ) {
127
- }
157
+ } ;
128
158
129
159
// Variant factory method
130
160
Promo . from_variants = function ( variants ) {
0 commit comments