├── img ├── basic.png ├── hero.png ├── sidebar.png ├── variables.png ├── sidebar-hero.png ├── global-variables.png ├── mobile-basic-hero.png └── mobile-sidebar-sidebar-hero.png ├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── rwd_email.pks └── rwd_email.pkb /img/basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincentmorneau/oracle-rwd-email-template-api/HEAD/img/basic.png -------------------------------------------------------------------------------- /img/hero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincentmorneau/oracle-rwd-email-template-api/HEAD/img/hero.png -------------------------------------------------------------------------------- /img/sidebar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincentmorneau/oracle-rwd-email-template-api/HEAD/img/sidebar.png -------------------------------------------------------------------------------- /img/variables.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincentmorneau/oracle-rwd-email-template-api/HEAD/img/variables.png -------------------------------------------------------------------------------- /img/sidebar-hero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincentmorneau/oracle-rwd-email-template-api/HEAD/img/sidebar-hero.png -------------------------------------------------------------------------------- /img/global-variables.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincentmorneau/oracle-rwd-email-template-api/HEAD/img/global-variables.png -------------------------------------------------------------------------------- /img/mobile-basic-hero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincentmorneau/oracle-rwd-email-template-api/HEAD/img/mobile-basic-hero.png -------------------------------------------------------------------------------- /img/mobile-sidebar-sidebar-hero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vincentmorneau/oracle-rwd-email-template-api/HEAD/img/mobile-sidebar-sidebar-hero.png -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Windows image file caches 2 | Thumbs.db 3 | ehthumbs.db 4 | 5 | # Folder config file 6 | Desktop.ini 7 | 8 | # Recycle Bin used on file shares 9 | $RECYCLE.BIN/ 10 | 11 | # Windows Installer files 12 | *.cab 13 | *.msi 14 | *.msm 15 | *.msp 16 | 17 | # Windows shortcuts 18 | *.lnk 19 | 20 | # ========================= 21 | # Operating System Files 22 | # ========================= 23 | 24 | # OSX 25 | # ========================= 26 | 27 | .DS_Store 28 | .AppleDouble 29 | .LSOverride 30 | 31 | # Thumbnails 32 | ._* 33 | 34 | # Files that might appear on external disk 35 | .Spotlight-V100 36 | .Trashes 37 | 38 | # Directories potentially created on remote AFP share 39 | .AppleDB 40 | .AppleDesktop 41 | Network Trash Folder 42 | Temporary Items 43 | .apdisk 44 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Oracle Responsive Email Templates 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #Oracle Responsive Email Templates 2 | Here is an API for building Responsive Web Design Email Templates. Written in PL/SQL for Oracle development. 3 | 4 | ##Changelog 5 | ####1.1.0 6 | - Templates are now parameterized 7 | - More code refactoring 8 | 9 | ####1.0.0 10 | - **Decoupled the API from the send mail feature. Now it returns a CLOB value. Use your own email sending package.** 11 | - Added new global variables 12 | - New comments / documentation all over the API 13 | - Huge refactoring 14 | - Added support for columns and sub columns from 1 to 12 15 | - Added more options to panels 16 | - Added more options to typography 17 | - Added more options to buttons 18 | 19 | ####0.1.0 - Initial Release 20 | 21 | ##Install 22 | - Run script `rwd_email.pks` and `rwd_email.pkb` in your schema 23 | 24 | ##Run (example with apex_mail) 25 | ```language-sql 26 | DECLARE 27 | l_body clob; 28 | l_content rwd_email.t_content; 29 | BEGIN 30 | /****************************** 31 | Initialize your content in here 32 | ******************************/ 33 | l_content.logo_url := 'http://insum.ca/ia/swinsum/build/assets/img/logo-insum.png'; 34 | l_content.title := 'SIDEBAR HERO'; 35 | l_content.welcome_title := 'Vincent,'; 36 | l_content.sub_welcome_title := 'Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts.'; 37 | l_content.big_picture_url := 'http://insum.ca/ia/swinsum/build/assets/img/bg1.jpg'; 38 | l_content.top_paragraph := 'Separated they live in Bookmarksgrove right at the coast of the Semantics, a large language ocean.'; 39 | l_content.bottom_paragraph := 'A small river named Duden flows by their place and supplies it with the necessary regelialia. This link! »'; 40 | l_content.bottom_paragraph_subtitle := ' This is a note.'; 41 | l_content.bottom_paragraph := 'A small river named Duden flows by their place and supplies it with the necessary regelialia. This link! »'; 42 | l_content.left_paragraph := 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et. Lorem ipsum dolor sit amet.'; 43 | l_content.right_header := 'Header Thing'; 44 | l_content.right_sub_header := 'Sub-head or something'; 45 | l_content.social_title := 'Connect With Us:'; 46 | l_content.contact_info := 'Contact Info:'; 47 | l_content.contact_phone := 'Phone: 514.387.1670'; 48 | l_content.contact_email := 'Email: vmorneau@insum.ca'; 49 | l_content.footer_links := 'Terms | Privacy | Unsubscribe'; 50 | 51 | /*l_body := rwd_email.basic(l_content); 52 | l_body := rwd_email.hero(l_content); 53 | l_body := rwd_email.sidebar(l_content);*/ 54 | l_body := rwd_email.sidebar_hero(l_content); 55 | 56 | apex_mail.send ( 57 | p_to => 'to@email.com', 58 | p_from => 'from@email.com', 59 | p_body => l_body, 60 | p_body_html => l_body, 61 | p_subj => 'This is a responsive email'); 62 | 63 | apex_mail.push_queue; 64 | END; 65 | ``` 66 | 67 | --- 68 | 69 | Inspired by Zurb at http://zurb.com/ink/, wrapped in PL/SQL. 70 | 71 | You can help by filling issues through Github. -------------------------------------------------------------------------------- /rwd_email.pks: -------------------------------------------------------------------------------- 1 | create or replace PACKAGE rwd_email IS 2 | 3 | /********************************************** 4 | *********************************************** 5 | *********************************************** 6 | CONSTANTS 7 | *********************************************** 8 | *********************************************** 9 | **********************************************/ 10 | g_header_background_color constant varchar2(25) := '#4A96C9'; 11 | g_primary_button_bgcolor constant varchar2(25) := '#4A96C9'; 12 | g_primary_button_text_color constant varchar2(25) := '#FFFFFF'; 13 | g_text_color constant varchar2(25) := '#222222'; 14 | g_body_background constant varchar2(25) := 'transparent'; 15 | g_font_family constant varchar2(100) := '''Helvetica'', ''Arial'', sans-serif'; 16 | g_line_height constant varchar2(25) := '19px'; 17 | g_font_size constant varchar2(25) := '14px'; 18 | 19 | /********************************************** 20 | *********************************************** 21 | *********************************************** 22 | TYPES 23 | *********************************************** 24 | *********************************************** 25 | **********************************************/ 26 | type t_content is record ( 27 | logo_url varchar2(4000) 28 | , title varchar2(4000) 29 | , welcome_title varchar2(4000) 30 | , sub_welcome_title varchar2(4000) 31 | , big_picture_url varchar2(4000) 32 | , top_paragraph varchar2(4000) 33 | , bottom_paragraph varchar2(4000) 34 | , bottom_paragraph_title varchar2(4000) 35 | , bottom_paragraph_subtitle varchar2(4000) 36 | , left_paragraph varchar2(4000) 37 | , right_header varchar2(4000) 38 | , right_sub_header varchar2(4000) 39 | , social_title varchar2(4000) 40 | , contact_info varchar2(4000) 41 | , contact_phone varchar2(4000) 42 | , contact_email varchar2(4000) 43 | , footer_links varchar2(4000) 44 | ); 45 | 46 | /********************************************** 47 | *********************************************** 48 | *********************************************** 49 | GLOBAL STUFF 50 | *********************************************** 51 | *********************************************** 52 | **********************************************/ 53 | 54 | /* 55 | Global Header 56 | */ 57 | FUNCTION print_global_header return clob; 58 | 59 | /* 60 | Global CSS 61 | */ 62 | FUNCTION print_global_css return clob; 63 | 64 | /* 65 | Global Body HTML tag 66 | */ 67 | FUNCTION outer_body( 68 | p_content in clob) 69 | return clob; 70 | 71 | /* 72 | Global Mandatory Table to wrap the body content 73 | */ 74 | FUNCTION inner_body( 75 | p_content in clob) 76 | return clob; 77 | 78 | /* Email Footer */ 79 | FUNCTION print_global_end return clob; 80 | 81 | /********************************************** 82 | *********************************************** 83 | *********************************************** 84 | GRID 85 | *********************************************** 86 | *********************************************** 87 | **********************************************/ 88 | 89 | /* 90 | Constrains the content to a 580px wrapper on large screens (95% on small screens) and centers it within the body. 91 | */ 92 | FUNCTION print_container ( 93 | p_content in clob) 94 | return clob; 95 | 96 | /* 97 | Separates each row of content. 98 | */ 99 | FUNCTION print_row ( 100 | p_content in clob 101 | , p_classes in varchar2 default null 102 | , p_display in varchar2 default 'block' 103 | , p_header_background_color in varchar2 default 'transparent') 104 | return clob; 105 | 106 | /* 107 | Grid Standard TD 108 | */ 109 | FUNCTION print_standard_td ( 110 | p_content in clob 111 | , p_align in varchar2 default 'left' 112 | , p_padding in varchar2 default '0 0 10px' 113 | , p_background_color in varchar2 default 'transparent' 114 | , p_border in varchar2 default 'none' 115 | , p_extra_attributes in varchar2 default null) 116 | return clob; 117 | 118 | /* 119 | Grid Standard TD Centered 120 | */ 121 | FUNCTION print_standard_td_center ( 122 | p_content in clob) return clob; 123 | 124 | /* 125 | Wraps each .columns table, in order to create a gutter between columns 126 | and force them to expand to full width on small screens. 127 | */ 128 | FUNCTION print_column_wrapper ( 129 | p_content in clob) return clob; 130 | 131 | /* 132 | Can be any number between one and twelve (spelled out). 133 | Used to determine how wide your .columns tables are. 134 | The number of columns in each row should add up to 12, including offset columns . 135 | */ 136 | FUNCTION print_col ( 137 | p_content in clob 138 | , p_number in varchar2 139 | , p_width in varchar2) return clob; 140 | 141 | /* 142 | 1 Columns 143 | */ 144 | FUNCTION print_col_1 ( 145 | p_content in clob) return clob; 146 | 147 | /* 148 | 2 Columns 149 | */ 150 | FUNCTION print_col_2 ( 151 | p_content in clob) return clob; 152 | 153 | /* 154 | 3 Columns 155 | */ 156 | FUNCTION print_col_3 ( 157 | p_content in clob) return clob; 158 | 159 | /* 160 | 4 Columns 161 | */ 162 | FUNCTION print_col_4 ( 163 | p_content in clob) return clob; 164 | 165 | /* 166 | 5 Columns 167 | */ 168 | FUNCTION print_col_5 ( 169 | p_content in clob) return clob; 170 | 171 | /* 172 | 6 Columns 173 | */ 174 | FUNCTION print_col_6 ( 175 | p_content in clob) return clob; 176 | 177 | /* 178 | 7 Columns 179 | */ 180 | FUNCTION print_col_7 ( 181 | p_content in clob) return clob; 182 | 183 | /* 184 | 8 Columns 185 | */ 186 | FUNCTION print_col_8 ( 187 | p_content in clob) return clob; 188 | 189 | /* 190 | 9 Columns 191 | */ 192 | FUNCTION print_col_9 ( 193 | p_content in clob) return clob; 194 | 195 | /* 196 | 10 Columns 197 | */ 198 | FUNCTION print_col_10 ( 199 | p_content in clob) return clob; 200 | 201 | /* 202 | 11 Columns 203 | */ 204 | FUNCTION print_col_11 ( 205 | p_content in clob) return clob; 206 | 207 | /* 208 | 12 Columns 209 | */ 210 | FUNCTION print_col_12 ( 211 | p_content in clob) return clob; 212 | 213 | /* 214 | An empty (and invisible) element added after the content element in a .columns table. 215 | It forces the content td to expand to the full width of the screen on small devices, 216 | instead of just the width of the content within the td. 217 | */ 218 | FUNCTION print_expander return clob; 219 | 220 | /********************************************** 221 | *********************************************** 222 | *********************************************** 223 | SUB GRID 224 | *********************************************** 225 | *********************************************** 226 | **********************************************/ 227 | 228 | /* 229 | Can be any number between one and twelve (spelled out). 230 | Used to determine how wide your .columns tables are. 231 | The number of sub columns in each row should add up to 12, including offset sub columns . 232 | */ 233 | FUNCTION print_sub_col (p_content in clob 234 | , p_classes in varchar2 235 | , p_width in varchar2 236 | , p_align in varchar2 default 'left') return clob; 237 | 238 | /* 239 | 1 Sub Columns 240 | */ 241 | FUNCTION print_sub_col_1 ( 242 | p_content in clob 243 | , p_align in varchar2 default 'left') return clob; 244 | 245 | /* 246 | 2 Sub Columns 247 | */ 248 | FUNCTION print_sub_col_2 ( 249 | p_content in clob 250 | , p_align in varchar2 default 'left') return clob; 251 | 252 | /* 253 | 3 Sub Columns 254 | */ 255 | FUNCTION print_sub_col_3 ( 256 | p_content in clob 257 | , p_align in varchar2 default 'left') return clob; 258 | 259 | /* 260 | 4 Sub Columns 261 | */ 262 | FUNCTION print_sub_col_4 ( 263 | p_content in clob 264 | , p_align in varchar2 default 'left') return clob; 265 | 266 | /* 267 | 5 Sub Columns 268 | */ 269 | FUNCTION print_sub_col_5 ( 270 | p_content in clob 271 | , p_align in varchar2 default 'left') return clob; 272 | 273 | /* 274 | 6 Sub Columns 275 | */ 276 | FUNCTION print_sub_col_6 ( 277 | p_content in clob 278 | , p_align in varchar2 default 'left') return clob; 279 | 280 | /* 281 | 7 Sub Columns 282 | */ 283 | FUNCTION print_sub_col_7 ( 284 | p_content in clob 285 | , p_align in varchar2 default 'left') return clob; 286 | 287 | /* 288 | 8 Sub Columns 289 | */ 290 | FUNCTION print_sub_col_8 ( 291 | p_content in clob 292 | , p_align in varchar2 default 'left') return clob; 293 | 294 | /* 295 | 9 Sub Columns 296 | */ 297 | FUNCTION print_sub_col_9 ( 298 | p_content in clob 299 | , p_align in varchar2 default 'left') return clob; 300 | 301 | /* 302 | 10 Sub Columns 303 | */ 304 | FUNCTION print_sub_col_10 ( 305 | p_content in clob 306 | , p_align in varchar2 default 'left') return clob; 307 | 308 | /* 309 | 11 Sub Columns 310 | */ 311 | FUNCTION print_sub_col_11 ( 312 | p_content in clob 313 | , p_align in varchar2 default 'left') return clob; 314 | /* 315 | 316 | 12 Sub Columns 317 | */ 318 | FUNCTION print_sub_col_12 ( 319 | p_content in clob 320 | , p_align in varchar2 default 'left') return clob; 321 | 322 | /********************************************** 323 | *********************************************** 324 | *********************************************** 325 | PANELS 326 | *********************************************** 327 | *********************************************** 328 | **********************************************/ 329 | 330 | FUNCTION print_panel ( 331 | p_content in clob 332 | , p_background_color in varchar2 default '#f2f2f2' 333 | , p_text_color in varchar2 default g_text_color) return clob; 334 | 335 | /********************************************** 336 | *********************************************** 337 | *********************************************** 338 | TYPOGRAPHY 339 | *********************************************** 340 | *********************************************** 341 | **********************************************/ 342 | 343 | /* 344 | Prints a standard paragraph 345 | */ 346 | FUNCTION print_paragraph ( 347 | p_text in varchar2 348 | , p_classes in varchar2 default null 349 | , p_font_size in varchar2 default '14px' 350 | , p_align in varchar2 default 'left' 351 | , p_text_color in varchar2 default g_text_color) return clob; 352 | 353 | /* 354 | Prints a bigger paragraph 355 | */ 356 | FUNCTION print_paragraph_lead ( 357 | p_text in varchar2 358 | , p_align in varchar2 default 'left' 359 | , p_text_color in varchar2 default g_text_color) return clob; 360 | 361 | /* 362 | Prints an H tag 363 | */ 364 | FUNCTION print_h ( 365 | p_text in varchar2 366 | , p_h_size in varchar2 367 | , p_font_size in varchar2 368 | , p_align in varchar2 default 'left' 369 | , p_text_color in varchar2 default g_text_color) return clob; 370 | 371 | /* 372 | Prints an H1 tag 373 | */ 374 | FUNCTION print_h1 ( 375 | p_text in varchar2 376 | , p_align in varchar2 default 'left' 377 | , p_text_color in varchar2 default g_text_color) return clob; 378 | 379 | /* 380 | Prints an H2 tag 381 | */ 382 | FUNCTION print_h2 ( 383 | p_text in varchar2 384 | , p_align in varchar2 default 'left' 385 | , p_text_color in varchar2 default g_text_color) return clob; 386 | 387 | /* 388 | Prints an H3 tag 389 | */ 390 | FUNCTION print_h3 ( 391 | p_text in varchar2 392 | , p_align in varchar2 default 'left' 393 | , p_text_color in varchar2 default g_text_color) return clob; 394 | 395 | /* 396 | Prints an H4 tag 397 | */ 398 | FUNCTION print_h4 ( 399 | p_text in varchar2 400 | , p_align in varchar2 default 'left' 401 | , p_text_color in varchar2 default g_text_color) return clob; 402 | 403 | /* 404 | Prints an H5 tag 405 | */ 406 | FUNCTION print_h5 ( 407 | p_text in varchar2 408 | , p_align in varchar2 default 'left' 409 | , p_text_color in varchar2 default g_text_color) return clob; 410 | 411 | /* 412 | Prints an H6 tag 413 | */ 414 | FUNCTION print_h6( 415 | p_text in varchar2 416 | , p_align in varchar2 default 'left' 417 | , p_text_color in varchar2 default g_text_color) return clob; 418 | 419 | /* 420 | Prints a small text 421 | */ 422 | FUNCTION print_small_text( 423 | p_text in varchar2 424 | , p_text_color in varchar2 default g_text_color) return clob; 425 | 426 | /* 427 | Prints a label for the title bar 428 | */ 429 | FUNCTION print_title( 430 | p_text in varchar2 431 | , p_text_color in varchar2 default '#ffffff') return clob; 432 | 433 | /********************************************** 434 | *********************************************** 435 | *********************************************** 436 | BUTTONS 437 | *********************************************** 438 | *********************************************** 439 | **********************************************/ 440 | 441 | FUNCTION print_button ( 442 | p_content in clob 443 | , p_button_classes in varchar2 default 'button' 444 | , p_align in varchar2 default 'left' 445 | , p_padding in varchar2 default '0 0 10px' 446 | , p_background_color in varchar2 default 'transparent' 447 | , p_border in varchar2 default 'none' 448 | , p_extra_style in varchar2 default null) return clob; 449 | 450 | FUNCTION print_plain_link ( 451 | p_url in clob 452 | , p_label in clob) return clob; 453 | 454 | FUNCTION print_primary_button ( 455 | p_url in clob 456 | , p_label in clob) return clob; 457 | 458 | FUNCTION print_button_facebook ( 459 | p_url in clob 460 | , p_label in clob) return clob; 461 | 462 | FUNCTION print_button_twitter ( 463 | p_url in clob 464 | , p_label in clob) return clob; 465 | 466 | FUNCTION print_button_google_plus ( 467 | p_url in clob 468 | , p_label in clob) return clob; 469 | 470 | /********************************************** 471 | *********************************************** 472 | *********************************************** 473 | OTHER FEATURES 474 | *********************************************** 475 | *********************************************** 476 | **********************************************/ 477 | 478 | /* 479 | Print an image through a URL 480 | Can be aligned left, center or right 481 | */ 482 | FUNCTION print_image( 483 | p_img_url in varchar2 484 | , p_align in varchar2 default 'left') return clob; 485 | 486 | /* 487 | Simple line to separate content 488 | */ 489 | FUNCTION print_hr return clob; 490 | 491 | /********************************************** 492 | *********************************************** 493 | *********************************************** 494 | COMMON PATTERNS 495 | *********************************************** 496 | *********************************************** 497 | **********************************************/ 498 | 499 | FUNCTION print_default_body_header( 500 | p_logo_url in varchar2 501 | , p_title in varchar2) return clob; 502 | 503 | FUNCTION print_default_body_footer( 504 | p_footer_links in varchar2) return clob; 505 | 506 | FUNCTION print_global_body( 507 | p_content in clob) return clob; 508 | 509 | /********************************************** 510 | *********************************************** 511 | *********************************************** 512 | PRESET TEMPLATES 513 | *********************************************** 514 | *********************************************** 515 | **********************************************/ 516 | FUNCTION basic (p_content in t_content) return clob; 517 | FUNCTION hero (p_content in t_content) return clob; 518 | FUNCTION sidebar (p_content in t_content) return clob; 519 | FUNCTION sidebar_hero (p_content in t_content) return clob; 520 | 521 | end rwd_email; -------------------------------------------------------------------------------- /rwd_email.pkb: -------------------------------------------------------------------------------- 1 | create or replace PACKAGE BODY rwd_email IS 2 | 3 | /********************************************** 4 | *********************************************** 5 | *********************************************** 6 | GLOBAL STUFF 7 | *********************************************** 8 | *********************************************** 9 | **********************************************/ 10 | 11 | /* 12 | Global Header 13 | */ 14 | FUNCTION print_global_header return clob IS 15 | BEGIN 16 | return '' || 17 | '' || 18 | '' || 19 | '' || 20 | '' || 21 | ''; 22 | END print_global_header; 23 | 24 | /* 25 | Global CSS 26 | */ 27 | FUNCTION print_global_css return clob IS 28 | BEGIN 29 | return ''; 30 | END print_global_css; 31 | 32 | /* 33 | Global Body HTML tag 34 | */ 35 | FUNCTION outer_body( 36 | p_content in clob) return clob IS 37 | BEGIN 38 | return '' 39 | || p_content 40 | || ''; 41 | END outer_body; 42 | 43 | /* 44 | Global Mandatory Table to wrap the body content 45 | */ 46 | FUNCTION inner_body( 47 | p_content in clob) return clob IS 48 | BEGIN 49 | return '' 50 | || '' 51 | || p_content 52 | || '' 53 | || '
'; 54 | END inner_body; 55 | 56 | /* Email Footer */ 57 | FUNCTION print_global_end return clob IS 58 | BEGIN 59 | return ''; 60 | END print_global_end; 61 | 62 | /********************************************** 63 | *********************************************** 64 | *********************************************** 65 | GRID 66 | *********************************************** 67 | *********************************************** 68 | **********************************************/ 69 | 70 | /* 71 | Constrains the content to a 580px wrapper on large screens (95% on small screens) and centers it within the body. 72 | */ 73 | FUNCTION print_container ( 74 | p_content in clob) return clob IS 75 | BEGIN 76 | return '' 77 | || '' 78 | || print_standard_td(p_content) 79 | || '' 80 | || '
'; 81 | END print_container; 82 | 83 | /* 84 | Separates each row of content. 85 | */ 86 | FUNCTION print_row ( 87 | p_content in clob 88 | , p_classes in varchar2 default null 89 | , p_display in varchar2 default 'block' 90 | , p_header_background_color in varchar2 default 'transparent') return clob IS 91 | BEGIN 92 | return '' 93 | || '' 94 | || p_content 95 | || '' 96 | || '
'; 97 | END print_row; 98 | 99 | /* 100 | Grid Standard TD 101 | */ 102 | FUNCTION print_standard_td ( 103 | p_content in clob 104 | , p_align in varchar2 default 'left' 105 | , p_padding in varchar2 default '0 0 10px' 106 | , p_background_color in varchar2 default 'transparent' 107 | , p_border in varchar2 default 'none' 108 | , p_extra_attributes in varchar2 default null) 109 | return clob IS 110 | BEGIN 111 | return '' 112 | || p_content 113 | || ''; 114 | END print_standard_td; 115 | 116 | /* 117 | Grid Standard TD Centered 118 | */ 119 | FUNCTION print_standard_td_center ( 120 | p_content in clob) return clob IS 121 | BEGIN 122 | return print_standard_td( 123 | p_content => '
' 124 | || p_content 125 | || '
' 126 | ,p_align => 'center' 127 | ); 128 | END print_standard_td_center; 129 | 130 | /* 131 | Wraps each .columns table, in order to create a gutter between columns 132 | and force them to expand to full width on small screens. 133 | */ 134 | FUNCTION print_column_wrapper ( 135 | p_content in clob) return clob IS 136 | BEGIN 137 | return '' 138 | || p_content 139 | || ''; 140 | END print_column_wrapper; 141 | 142 | /* 143 | Can be any number between one and twelve (spelled out). 144 | Used to determine how wide your .columns tables are. 145 | The number of columns in each row should add up to 12, including offset columns . 146 | */ 147 | FUNCTION print_col ( 148 | p_content in clob 149 | , p_number in varchar2 150 | , p_width in varchar2) return clob IS 151 | BEGIN 152 | return '' 153 | || '' 154 | || p_content 155 | || print_expander 156 | || '' 157 | || '
'; 158 | END print_col; 159 | 160 | /* 161 | 1 Columns 162 | */ 163 | FUNCTION print_col_1 (p_content in clob) return clob IS 164 | BEGIN 165 | return print_col(p_content, 'one', '30px'); 166 | END print_col_1; 167 | 168 | /* 169 | 2 Columns 170 | */ 171 | FUNCTION print_col_2 (p_content in clob) return clob IS 172 | BEGIN 173 | return print_col(p_content, 'two', '80px'); 174 | END print_col_2; 175 | 176 | /* 177 | 3 Columns 178 | */ 179 | FUNCTION print_col_3 (p_content in clob) return clob IS 180 | BEGIN 181 | return print_col(p_content, 'three', '130px'); 182 | END print_col_3; 183 | 184 | /* 185 | 4 Columns 186 | */ 187 | FUNCTION print_col_4 (p_content in clob) return clob IS 188 | BEGIN 189 | return print_col(p_content, 'four', '180px'); 190 | END print_col_4; 191 | 192 | /* 193 | 5 Columns 194 | */ 195 | FUNCTION print_col_5 (p_content in clob) return clob IS 196 | BEGIN 197 | return print_col(p_content, 'five', '230px'); 198 | END print_col_5; 199 | 200 | /* 201 | 6 Columns 202 | */ 203 | FUNCTION print_col_6 (p_content in clob) return clob IS 204 | BEGIN 205 | return print_col(p_content, 'six', '280px'); 206 | END print_col_6; 207 | 208 | /* 209 | 7 Columns 210 | */ 211 | FUNCTION print_col_7 (p_content in clob) return clob IS 212 | BEGIN 213 | return print_col(p_content, 'seven', '330px'); 214 | END print_col_7; 215 | 216 | /* 217 | 8 Columns 218 | */ 219 | FUNCTION print_col_8 (p_content in clob) return clob IS 220 | BEGIN 221 | return print_col(p_content, 'eight', '380px'); 222 | END print_col_8; 223 | 224 | /* 225 | 9 Columns 226 | */ 227 | FUNCTION print_col_9 (p_content in clob) return clob IS 228 | BEGIN 229 | return print_col(p_content, 'nine', '430px'); 230 | END print_col_9; 231 | 232 | /* 233 | 10 Columns 234 | */ 235 | FUNCTION print_col_10 (p_content in clob) return clob IS 236 | BEGIN 237 | return print_col(p_content, 'ten', '480px'); 238 | END print_col_10; 239 | 240 | /* 241 | 11 Columns 242 | */ 243 | FUNCTION print_col_11 (p_content in clob) return clob IS 244 | BEGIN 245 | return print_col(p_content, 'eleven', '530px'); 246 | END print_col_11; 247 | 248 | /* 249 | 12 Columns 250 | */ 251 | FUNCTION print_col_12 (p_content in clob) return clob IS 252 | BEGIN 253 | return print_col(p_content, 'twelve', '580px'); 254 | END print_col_12; 255 | 256 | /* 257 | An empty (and invisible) element added after the content element in a .columns table. 258 | It forces the content td to expand to the full width of the screen on small devices, 259 | instead of just the width of the content within the td. 260 | */ 261 | FUNCTION print_expander return clob IS 262 | BEGIN 263 | return ''; 264 | END print_expander; 265 | 266 | /********************************************** 267 | *********************************************** 268 | *********************************************** 269 | SUB GRID 270 | *********************************************** 271 | *********************************************** 272 | **********************************************/ 273 | 274 | /* 275 | Can be any number between one and twelve (spelled out). 276 | Used to determine how wide your .columns tables are. 277 | The number of sub columns in each row should add up to 12, including offset sub columns . 278 | */ 279 | FUNCTION print_sub_col (p_content in clob 280 | , p_classes in varchar2 281 | , p_width in varchar2 282 | , p_align in varchar2 default 'left') return clob IS 283 | BEGIN 284 | return '' 285 | || p_content 286 | || ''; 287 | END print_sub_col; 288 | 289 | /* 290 | 1 Sub Columns 291 | */ 292 | FUNCTION print_sub_col_1 (p_content in clob, p_align in varchar2 default 'left') return clob IS 293 | BEGIN 294 | return print_sub_col(p_content, 'one', round(100*1/12, 4) || '%', p_align); 295 | END print_sub_col_1; 296 | 297 | /* 298 | 2 Sub Columns 299 | */ 300 | FUNCTION print_sub_col_2 (p_content in clob, p_align in varchar2 default 'left') return clob IS 301 | BEGIN 302 | return print_sub_col(p_content, 'two', round(100*2/12, 4) || '%', p_align); 303 | END print_sub_col_2; 304 | 305 | /* 306 | 3 Sub Columns 307 | */ 308 | FUNCTION print_sub_col_3 (p_content in clob, p_align in varchar2 default 'left') return clob IS 309 | BEGIN 310 | return print_sub_col(p_content, 'three', round(100*3/12, 4) || '%', p_align); 311 | END print_sub_col_3; 312 | 313 | /* 314 | 4 Sub Columns 315 | */ 316 | FUNCTION print_sub_col_4 (p_content in clob, p_align in varchar2 default 'left') return clob IS 317 | BEGIN 318 | return print_sub_col(p_content, 'four', round(100*4/12, 4) || '%', p_align); 319 | END print_sub_col_4; 320 | 321 | /* 322 | 5 Sub Columns 323 | */ 324 | FUNCTION print_sub_col_5 (p_content in clob, p_align in varchar2 default 'left') return clob IS 325 | BEGIN 326 | return print_sub_col(p_content, 'five', round(100*5/12, 4) || '%', p_align); 327 | END print_sub_col_5; 328 | 329 | /* 330 | 6 Sub Columns 331 | */ 332 | FUNCTION print_sub_col_6 (p_content in clob, p_align in varchar2 default 'left') return clob IS 333 | BEGIN 334 | return print_sub_col(p_content, 'six', round(100*6/12, 4) || '%', p_align); 335 | END print_sub_col_6; 336 | 337 | /* 338 | 7 Sub Columns 339 | */ 340 | FUNCTION print_sub_col_7 (p_content in clob, p_align in varchar2 default 'left') return clob IS 341 | BEGIN 342 | return print_sub_col(p_content, 'seven', round(100*7/12, 4) || '%', p_align); 343 | END print_sub_col_7; 344 | 345 | /* 346 | 8 Sub Columns 347 | */ 348 | FUNCTION print_sub_col_8 (p_content in clob, p_align in varchar2 default 'left') return clob IS 349 | BEGIN 350 | return print_sub_col(p_content, 'eight', round(100*8/12, 4) || '%', p_align); 351 | END print_sub_col_8; 352 | 353 | /* 354 | 9 Sub Columns 355 | */ 356 | FUNCTION print_sub_col_9 (p_content in clob, p_align in varchar2 default 'left') return clob IS 357 | BEGIN 358 | return print_sub_col(p_content, 'nine', round(100*9/12, 4) || '%', p_align); 359 | END print_sub_col_9; 360 | 361 | /* 362 | 10 Sub Columns 363 | */ 364 | FUNCTION print_sub_col_10 (p_content in clob, p_align in varchar2 default 'left') return clob IS 365 | BEGIN 366 | return print_sub_col(p_content, 'ten', round(100*10/12, 4) || '%', p_align); 367 | END print_sub_col_10; 368 | 369 | /* 370 | 11 Sub Columns 371 | */ 372 | FUNCTION print_sub_col_11 (p_content in clob, p_align in varchar2 default 'left') return clob IS 373 | BEGIN 374 | return print_sub_col(p_content, 'eleven', round(100*11/12, 4) || '%', p_align); 375 | END print_sub_col_11; 376 | 377 | /* 378 | 12 Sub Columns 379 | */ 380 | FUNCTION print_sub_col_12 (p_content in clob, p_align in varchar2 default 'left') return clob IS 381 | BEGIN 382 | return print_sub_col(p_content, 'twelve', round(100*12/12, 4) || '%', p_align); 383 | END print_sub_col_12; 384 | 385 | /********************************************** 386 | *********************************************** 387 | *********************************************** 388 | PANELS 389 | *********************************************** 390 | *********************************************** 391 | **********************************************/ 392 | 393 | FUNCTION print_panel ( 394 | p_content in clob 395 | , p_background_color in varchar2 default '#f2f2f2' 396 | , p_text_color in varchar2 default g_text_color) return clob IS 397 | BEGIN 398 | return '' || p_content || ''; 399 | END print_panel; 400 | 401 | /********************************************** 402 | *********************************************** 403 | *********************************************** 404 | TYPOGRAPHY 405 | *********************************************** 406 | *********************************************** 407 | **********************************************/ 408 | 409 | /* 410 | Prints a standard paragraph 411 | */ 412 | FUNCTION print_paragraph ( 413 | p_text in varchar2 414 | , p_classes in varchar2 default null 415 | , p_font_size in varchar2 default '14px' 416 | , p_align in varchar2 default 'left' 417 | , p_text_color in varchar2 default g_text_color) return clob IS 418 | BEGIN 419 | return '

' || p_text || '

'; 420 | END print_paragraph; 421 | 422 | /* 423 | Prints a bigger paragraph 424 | */ 425 | FUNCTION print_paragraph_lead ( 426 | p_text in varchar2 427 | , p_align in varchar2 default 'left' 428 | , p_text_color in varchar2 default g_text_color) return clob IS 429 | BEGIN 430 | return print_paragraph ( 431 | p_text => p_text 432 | , p_classes => 'lead' 433 | , p_font_size => '18px' 434 | , p_align => p_align 435 | , p_text_color => p_text_color); 436 | END print_paragraph_lead; 437 | 438 | /* 439 | Prints an H tag 440 | */ 441 | FUNCTION print_h ( 442 | p_text in varchar2 443 | , p_h_size in varchar2 444 | , p_font_size in varchar2 445 | , p_align in varchar2 default 'left' 446 | , p_text_color in varchar2 default g_text_color) return clob IS 447 | BEGIN 448 | return '' 449 | || p_text 450 | || ''; 451 | END print_h; 452 | 453 | /* 454 | Prints an H1 tag 455 | */ 456 | FUNCTION print_h1 ( 457 | p_text in varchar2 458 | , p_align in varchar2 default 'left' 459 | , p_text_color in varchar2 default g_text_color) return clob IS 460 | BEGIN 461 | return print_h ( 462 | p_text => p_text 463 | , p_h_size => '1' 464 | , p_font_size => '40px' 465 | , p_align => p_align 466 | , p_text_color => p_text_color); 467 | END print_h1; 468 | 469 | /* 470 | Prints an H2 tag 471 | */ 472 | FUNCTION print_h2 ( 473 | p_text in varchar2 474 | , p_align in varchar2 default 'left' 475 | , p_text_color in varchar2 default g_text_color) return clob IS 476 | BEGIN 477 | return print_h ( 478 | p_text => p_text 479 | , p_h_size => '2' 480 | , p_font_size => '36px' 481 | , p_align => p_align 482 | , p_text_color => p_text_color); 483 | END print_h2; 484 | 485 | /* 486 | Prints an H3 tag 487 | */ 488 | FUNCTION print_h3 ( 489 | p_text in varchar2 490 | , p_align in varchar2 default 'left' 491 | , p_text_color in varchar2 default g_text_color) return clob IS 492 | BEGIN 493 | return print_h ( 494 | p_text => p_text 495 | , p_h_size => '3' 496 | , p_font_size => '32px' 497 | , p_align => p_align 498 | , p_text_color => p_text_color); 499 | END print_h3; 500 | 501 | /* 502 | Prints an H4 tag 503 | */ 504 | FUNCTION print_h4 ( 505 | p_text in varchar2 506 | , p_align in varchar2 default 'left' 507 | , p_text_color in varchar2 default g_text_color) return clob IS 508 | BEGIN 509 | return print_h ( 510 | p_text => p_text 511 | , p_h_size => '4' 512 | , p_font_size => '28px' 513 | , p_align => p_align 514 | , p_text_color => p_text_color); 515 | END print_h4; 516 | 517 | /* 518 | Prints an H5 tag 519 | */ 520 | FUNCTION print_h5 ( 521 | p_text in varchar2 522 | , p_align in varchar2 default 'left' 523 | , p_text_color in varchar2 default g_text_color) return clob IS 524 | BEGIN 525 | return print_h ( 526 | p_text => p_text 527 | , p_h_size => '5' 528 | , p_font_size => '24px' 529 | , p_align => p_align 530 | , p_text_color => p_text_color); 531 | END print_h5; 532 | 533 | /* 534 | Prints an H6 tag 535 | */ 536 | FUNCTION print_h6( 537 | p_text in varchar2 538 | , p_align in varchar2 default 'left' 539 | , p_text_color in varchar2 default g_text_color) return clob IS 540 | BEGIN 541 | return print_h ( 542 | p_text => p_text 543 | , p_h_size => '6' 544 | , p_font_size => '20px' 545 | , p_align => p_align 546 | , p_text_color => p_text_color); 547 | END print_h6; 548 | 549 | /* 550 | Prints a small text 551 | */ 552 | FUNCTION print_small_text( 553 | p_text in varchar2 554 | , p_text_color in varchar2 default g_text_color) return clob IS 555 | BEGIN 556 | return '' || p_text || ''; 557 | END print_small_text; 558 | 559 | /* 560 | Prints a label for the title bar 561 | */ 562 | FUNCTION print_title( 563 | p_text in varchar2 564 | , p_text_color in varchar2 default '#ffffff') return clob IS 565 | BEGIN 566 | return '' || p_text || ''; 567 | END print_title; 568 | 569 | /********************************************** 570 | *********************************************** 571 | *********************************************** 572 | BUTTONS 573 | *********************************************** 574 | *********************************************** 575 | **********************************************/ 576 | 577 | FUNCTION print_button ( 578 | p_content in clob 579 | , p_button_classes in varchar2 default 'button' 580 | , p_align in varchar2 default 'left' 581 | , p_padding in varchar2 default '0 0 10px' 582 | , p_background_color in varchar2 default 'transparent' 583 | , p_border in varchar2 default 'none' 584 | , p_extra_style in varchar2 default null) return clob IS 585 | BEGIN 586 | return '' 587 | || '' 588 | || '' 591 | || '' 592 | || '
' 589 | || p_content 590 | || '
'; 593 | END print_button; 594 | 595 | FUNCTION print_plain_link ( 596 | p_url in clob 597 | , p_label in clob) return clob IS 598 | BEGIN 599 | return print_button( 600 | p_content => '' || p_label || '' 601 | ); 602 | END print_plain_link; 603 | 604 | FUNCTION print_primary_button ( 605 | p_url in clob 606 | , p_label in clob) return clob IS 607 | BEGIN 608 | return print_button( 609 | p_content => '' || p_label || '' 610 | ,p_align => 'center' 611 | ,p_padding => '8px 0' 612 | ,p_background_color => g_primary_button_bgcolor 613 | ,p_border => '1px solid #2284a1' 614 | ,p_extra_style => 'display: block; width: auto !important;' 615 | ); 616 | END print_primary_button; 617 | 618 | FUNCTION print_button_facebook ( 619 | p_url in clob 620 | , p_label in clob) return clob IS 621 | BEGIN 622 | return print_button( 623 | p_content => '' || p_label || '' 624 | ,p_button_classes => 'tiny-button facebook' 625 | ,p_align => 'center' 626 | ,p_padding => '5px 0 4px' 627 | ,p_background_color => '#3b5998' 628 | ,p_border => '1px solid #2d4473' 629 | ,p_extra_style => 'display: block; width: auto !important;' 630 | ); 631 | END print_button_facebook; 632 | 633 | FUNCTION print_button_twitter ( 634 | p_url in clob 635 | , p_label in clob) return clob IS 636 | BEGIN 637 | return print_button( 638 | p_content => '' || p_label || '' 639 | ,p_button_classes => 'tiny-button twitter' 640 | ,p_align => 'center' 641 | ,p_padding => '5px 0 4px' 642 | ,p_background_color => '#00acee' 643 | ,p_border => '1px solid #0087bb' 644 | ,p_extra_style => 'display: block; width: auto !important;' 645 | ); 646 | END print_button_twitter; 647 | 648 | FUNCTION print_button_google_plus ( 649 | p_url in clob 650 | , p_label in clob) return clob IS 651 | BEGIN 652 | return print_button( 653 | p_content => '' || p_label || '' 654 | ,p_button_classes => 'tiny-button google-plus' 655 | ,p_align => 'center' 656 | ,p_padding => '5px 0 4px' 657 | ,p_background_color => '#DB4A39' 658 | ,p_border => '1px solid #cc0000' 659 | ,p_extra_style => 'display: block; width: auto !important;' 660 | ); 661 | END print_button_google_plus; 662 | 663 | /********************************************** 664 | *********************************************** 665 | *********************************************** 666 | OTHER FEATURES 667 | *********************************************** 668 | *********************************************** 669 | **********************************************/ 670 | 671 | /* 672 | Print an image through a URL 673 | Can be aligned left, center or right 674 | */ 675 | FUNCTION print_image( 676 | p_img_url in varchar2 677 | , p_align in varchar2 default 'left') return clob IS 678 | BEGIN 679 | return ''; 680 | END print_image; 681 | 682 | /* 683 | Simple line to separate content 684 | */ 685 | FUNCTION print_hr return clob IS 686 | BEGIN 687 | return '
'; 688 | END print_hr; 689 | 690 | /********************************************** 691 | *********************************************** 692 | *********************************************** 693 | COMMON PATTERNS 694 | *********************************************** 695 | *********************************************** 696 | **********************************************/ 697 | 698 | FUNCTION print_default_body_header( 699 | p_logo_url in varchar2 700 | , p_title in varchar2) return clob IS 701 | BEGIN 702 | return print_row( 703 | p_content => print_standard_td_center( 704 | print_container( 705 | print_column_wrapper ( 706 | print_col_12( 707 | print_sub_col_6(print_image(p_logo_url), 'left') 708 | || print_sub_col_6(print_title(p_title), 'right') 709 | ) 710 | ) 711 | ) 712 | ) 713 | , p_classes => 'header' 714 | , p_display => 'table' 715 | , p_header_background_color => g_header_background_color 716 | ) 717 | || '
'; 718 | END print_default_body_header; 719 | 720 | FUNCTION print_default_body_footer( 721 | p_footer_links in varchar2) return clob IS 722 | BEGIN 723 | return '

' 724 | || print_row( 725 | print_column_wrapper ( 726 | print_col_12( 727 | print_standard_td_center( 728 | print_paragraph ( 729 | p_text => p_footer_links 730 | , p_align => 'center') 731 | ) 732 | ) 733 | ) 734 | ); 735 | END print_default_body_footer; 736 | 737 | FUNCTION print_global_body( 738 | p_content in clob) return clob IS 739 | BEGIN 740 | return print_global_header 741 | || outer_body( 742 | print_global_css 743 | || inner_body( 744 | print_standard_td_center(p_content) 745 | ) 746 | ) 747 | || print_global_end; 748 | END print_global_body; 749 | 750 | /********************************************** 751 | *********************************************** 752 | *********************************************** 753 | PRESET TEMPLATES 754 | *********************************************** 755 | *********************************************** 756 | **********************************************/ 757 | 758 | /* Basic Template */ 759 | FUNCTION basic (p_content in t_content) return clob IS 760 | l_body clob; 761 | BEGIN 762 | /* Build the email body */ 763 | l_body := print_global_body( 764 | print_default_body_header(p_content.logo_url, p_content.title) 765 | || print_container( 766 | print_row( 767 | print_column_wrapper( 768 | print_col_12( 769 | print_standard_td( 770 | print_h1(p_content.welcome_title) 771 | || print_paragraph_lead(p_content.sub_welcome_title) 772 | || print_paragraph(p_content.top_paragraph) 773 | ) 774 | ) 775 | ) 776 | ) 777 | || print_row( 778 | print_column_wrapper( 779 | print_col_12( 780 | print_panel( 781 | p_content => print_paragraph( 782 | p_text => p_content.bottom_paragraph) 783 | , p_background_color => '#ECF8FF') 784 | ) 785 | ) 786 | ) 787 | || '
' 788 | || print_row( 789 | print_column_wrapper( 790 | print_col_6( 791 | print_panel( 792 | print_h6(p_content.social_title) 793 | || print_button_facebook( 794 | p_url => '#' 795 | ,p_label => 'Facebook') 796 | || print_hr 797 | || print_button_twitter( 798 | p_url => '#' 799 | ,p_label => 'Twitter') 800 | || print_hr 801 | || print_button_google_plus( 802 | p_url => '#' 803 | ,p_label => 'Google+') 804 | ) 805 | ) 806 | ) 807 | || print_column_wrapper( 808 | print_col_6( 809 | print_panel( 810 | print_h6(p_content.contact_info) 811 | || print_paragraph(p_content.contact_phone) 812 | || print_paragraph(p_content.contact_email) 813 | ) 814 | ) 815 | ) 816 | ) 817 | || print_default_body_footer(p_content.footer_links) 818 | ) 819 | ); 820 | 821 | /* Returns email body */ 822 | return l_body; 823 | END basic; 824 | 825 | /* Hero Template */ 826 | FUNCTION hero (p_content in t_content) RETURN clob IS 827 | l_body clob; 828 | BEGIN 829 | /* Build the email body */ 830 | l_body := print_global_body( 831 | print_default_body_header(p_content.logo_url, p_content.title) 832 | || print_container( 833 | print_row( 834 | print_column_wrapper( 835 | print_col_12( 836 | print_standard_td( 837 | print_h1(p_content.welcome_title) 838 | || print_paragraph_lead(p_content.sub_welcome_title) 839 | || print_image(p_content.big_picture_url) 840 | ) 841 | ) 842 | ) 843 | ) 844 | || print_row( 845 | print_column_wrapper( 846 | print_col_12( 847 | print_panel( 848 | p_content => print_paragraph( 849 | p_text => p_content.top_paragraph) 850 | ,p_background_color => '#ECF8FF') 851 | ) 852 | || '
' 853 | || print_col_12( 854 | print_h3(p_content.bottom_paragraph_title 855 | || print_small_text(p_content.bottom_paragraph_subtitle)) 856 | || print_paragraph( 857 | p_text => p_content.bottom_paragraph) 858 | ) 859 | ) 860 | ) 861 | || '
' 862 | || print_row( 863 | print_column_wrapper( 864 | print_col_6( 865 | print_panel( 866 | print_h6(p_content.social_title) 867 | || print_button_facebook( 868 | p_url => '#' 869 | ,p_label => 'Facebook') 870 | || print_hr 871 | || print_button_twitter( 872 | p_url => '#' 873 | ,p_label => 'Twitter') 874 | || print_hr 875 | || print_button_google_plus( 876 | p_url => '#' 877 | ,p_label => 'Google+') 878 | ) 879 | ) 880 | ) 881 | || print_column_wrapper( 882 | print_col_6( 883 | print_panel( 884 | print_h6(p_content.contact_info) 885 | || print_paragraph(p_content.contact_phone) 886 | || print_paragraph(p_content.contact_email) 887 | ) 888 | ) 889 | ) 890 | ) 891 | || print_default_body_footer(p_content.footer_links) 892 | ) 893 | ); 894 | 895 | /* Returns email body */ 896 | return l_body; 897 | END hero; 898 | 899 | /* Sidebar Template */ 900 | FUNCTION sidebar (p_content in t_content) return clob IS 901 | l_body clob; 902 | BEGIN 903 | /* Build the email body */ 904 | l_body := print_global_body( 905 | print_default_body_header(p_content.logo_url, p_content.title) 906 | || print_container( 907 | print_row( 908 | print_column_wrapper( 909 | print_col_6( 910 | print_standard_td( 911 | print_h1(p_content.welcome_title) 912 | || print_paragraph(p_content.sub_welcome_title) 913 | || print_paragraph(p_content.left_paragraph) 914 | ) 915 | ) 916 | || '
' 917 | || print_col_6( 918 | print_panel(print_paragraph(p_content.top_paragraph)) 919 | ) 920 | || '
' 921 | || print_col_6( 922 | print_standard_td( 923 | print_paragraph(p_content.left_paragraph) 924 | || print_primary_button ( 925 | p_url => '#' 926 | , p_label => 'Click Me!') 927 | ) 928 | ) 929 | ) 930 | || print_column_wrapper( 931 | print_col_6( 932 | print_panel( 933 | print_h6(p_content.right_header) 934 | || print_paragraph(p_content.right_sub_header) 935 | || print_plain_link('#', 'Just a Plain Link »') 936 | || print_hr 937 | || print_plain_link('#', 'Just a Plain Link »') 938 | || print_hr 939 | || print_plain_link('#', 'Just a Plain Link »') 940 | || print_hr 941 | || print_plain_link('#', 'Just a Plain Link »') 942 | || print_hr 943 | || print_plain_link('#', 'Just a Plain Link »') 944 | ) 945 | ) 946 | || '
' 947 | || print_col_6( 948 | print_panel( 949 | print_h6(p_content.social_title) 950 | || print_button_facebook( 951 | p_url => '#' 952 | ,p_label => 'Facebook') 953 | || print_hr 954 | || print_button_twitter( 955 | p_url => '#' 956 | ,p_label => 'Twitter') 957 | || print_hr 958 | || print_button_google_plus( 959 | p_url => '#' 960 | ,p_label => 'Google+') 961 | || '
' 962 | || print_h6(p_content.contact_info) 963 | || print_paragraph(p_content.contact_phone) 964 | || print_paragraph(p_content.contact_email) 965 | ) 966 | ) 967 | ) 968 | ) 969 | || print_default_body_footer(p_content.footer_links) 970 | ) 971 | ); 972 | 973 | /* Returns email body */ 974 | return l_body; 975 | END sidebar; 976 | 977 | /* Sidebar Hero Template */ 978 | FUNCTION sidebar_hero (p_content in t_content) return clob IS 979 | l_body clob; 980 | BEGIN 981 | /* Build the email body */ 982 | l_body := print_global_body( 983 | print_default_body_header(p_content.logo_url, p_content.title) 984 | || print_container( 985 | print_row( 986 | print_column_wrapper( 987 | print_col_12( 988 | print_standard_td( 989 | print_h1(p_content.welcome_title) 990 | || print_paragraph(p_content.sub_welcome_title) 991 | || print_image(p_content.big_picture_url) 992 | ) 993 | ) 994 | || print_col_12( 995 | print_panel(print_paragraph(p_content.top_paragraph)) 996 | ) 997 | ) 998 | ) 999 | || '
' 1000 | || print_row( 1001 | print_column_wrapper( 1002 | print_col_6( 1003 | print_standard_td( 1004 | print_paragraph(p_content.left_paragraph) 1005 | || print_primary_button ( 1006 | p_url => '#' 1007 | , p_label => 'Click Me!') 1008 | ) 1009 | ) 1010 | ) 1011 | || print_column_wrapper( 1012 | print_col_6( 1013 | print_panel( 1014 | print_h6(p_content.right_header) 1015 | || print_paragraph(p_content.right_sub_header) 1016 | || print_plain_link('#', 'Just a Plain Link »') 1017 | || print_hr 1018 | || print_plain_link('#', 'Just a Plain Link »') 1019 | || print_hr 1020 | || print_plain_link('#', 'Just a Plain Link »') 1021 | ) 1022 | ) 1023 | || '
' 1024 | || print_col_6( 1025 | print_panel( 1026 | print_h6(p_content.social_title) 1027 | || print_button_facebook( 1028 | p_url => '#' 1029 | ,p_label => 'Facebook') 1030 | || print_hr 1031 | || print_button_twitter( 1032 | p_url => '#' 1033 | ,p_label => 'Twitter') 1034 | || print_hr 1035 | || print_button_google_plus( 1036 | p_url => '#' 1037 | ,p_label => 'Google+') 1038 | || '
' 1039 | || print_h6(p_content.contact_info) 1040 | || print_paragraph(p_content.contact_phone) 1041 | || print_paragraph(p_content.contact_email) 1042 | ) 1043 | ) 1044 | ) 1045 | ) 1046 | || print_default_body_footer(p_content.footer_links) 1047 | ) 1048 | ); 1049 | 1050 | /* Returns email body */ 1051 | return l_body; 1052 | END sidebar_hero; 1053 | 1054 | END rwd_email; --------------------------------------------------------------------------------