Changeset 3463466
- Timestamp:
- 02/17/2026 12:05:29 PM (6 weeks ago)
- Location:
- jvm-rich-text-icons/trunk
- Files:
-
- 7 added
- 3 deleted
- 9 edited
-
dist/blocks.asset.php (modified) (1 diff)
-
dist/css/admin-settings.css (modified) (2 diffs)
-
languages (added)
-
languages/jvm-rich-text-icons-de_DE.mo (added)
-
languages/jvm-rich-text-icons-de_DE.po (added)
-
languages/jvm-rich-text-icons-nl_NL.mo (added)
-
languages/jvm-rich-text-icons-nl_NL.po (added)
-
languages/jvm-rich-text-icons.pot (added)
-
package.json (modified) (1 diff)
-
plugin.php (modified) (2 diffs)
-
readme.txt (modified) (2 diffs)
-
src/init.php (modified) (2 diffs)
-
src/renderer.php (added)
-
src/settings.php (modified) (6 diffs)
-
views/dynamic_css.php (deleted)
-
views/dynamic_css_after.php (deleted)
-
views/dynamic_css_before.php (deleted)
-
views/icon-list.php (modified) (1 diff)
-
views/settings.php (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
jvm-rich-text-icons/trunk/dist/blocks.asset.php
r3458442 r3463466 1 <?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-dom-ready', 'wp-element', 'wp-i18n', 'wp-rich-text'), 'version' => ' 18b71cc4c254cd2560b7');1 <?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-dom-ready', 'wp-element', 'wp-i18n', 'wp-rich-text'), 'version' => '9d371a5b985f530e55d9'); -
jvm-rich-text-icons/trunk/dist/css/admin-settings.css
r3094356 r3463466 1 #jvm-rich-text-icons_custom_icon_generator h2.title{ 2 display: inline-block; 3 } 1 #jvm-rich-text-icons_custom_icon_generator { 2 background: #fff; 3 border: 1px solid #c3c4c7; 4 border-radius: 4px; 5 padding: 16px; 6 margin-top: 24px; 7 } 4 8 5 #jvm-rich-text-icons_custom_icon_uploader { 6 text-align: center; 7 } 9 #jvm-rich-text-icons_custom_icon_generator h2.title { 10 display: inline-block; 11 margin: 0 8px 0 0; 12 font-size: 1.2em; 13 } 8 14 9 /*#jvm-rich-text-icons_custom_icon_generator .uploader-inline .drop-instructions { 15 #jvm-rich-text-icons_custom_icon_uploader { 16 text-align: center; 17 } 18 19 /*#jvm-rich-text-icons_custom_icon_generator .uploader-inline .drop-instructions { 10 20 display: none; 11 21 } … … 15 25 }*/ 16 26 17 #jvm-rich-text-icons_custom_icon_generator .media-sidebar {18 position: relative;19 width: auto;20 margin-top: 12px;21 padding: 0 16px;22 border-left: 4px solid #d63638;23 box-shadow: 0 1px 1px 0 rgb(0 0 0 / 10%);24 background-color: #fff;25 overflow: auto;26 }27 #jvm-rich-text-icons_custom_icon_generator .media-sidebar { 28 position: relative; 29 width: auto; 30 margin-top: 12px; 31 padding: 0 16px; 32 border-left: 4px solid #d63638; 33 box-shadow: 0 1px 1px 0 rgb(0 0 0 / 10%); 34 background-color: #fff; 35 overflow: auto; 36 } 27 37 28 #jvm-rich-text-icons_custom_icon_generator #upload-progess {29 display: none;30 }38 #jvm-rich-text-icons_custom_icon_generator #upload-progess { 39 display: none; 40 } 31 41 32 #jvm-rich-text-icons_custom_icon_generator #media-uploader-status.uploading #upload-progess { 33 display: block; 34 } 42 #jvm-rich-text-icons_custom_icon_generator 43 #media-uploader-status.uploading 44 #upload-progess { 45 display: block; 46 } 35 47 48 #jvm-rich-text-icons_custom_icon_generator .media-progress-bar { 49 position: relative; 50 height: 10px; 51 width: 70%; 52 margin: 10px auto; 53 border-radius: 10px; 54 background: #dcdcde; 55 width: 100%; 56 } 36 57 37 #jvm-rich-text-icons_custom_icon_generator .media-progress-bar { 38 position: relative; 39 height: 10px; 40 width: 70%; 41 margin: 10px auto; 42 border-radius: 10px; 43 background: #dcdcde; 44 width: 100%; 45 } 58 #jvm-rich-text-icons_custom_icon_generator .media-progress-bar div { 59 height: 10px; 60 min-width: 20px; 61 width: 0; 62 background: #2271b1; 63 border-radius: 10px; 64 transition: width 0.3s; 65 } 46 66 47 #jvm-rich-text-icons_custom_icon_generator .media-progress-bar div { 48 height: 10px; 49 min-width: 20px;50 width: 0;51 background: #2271b1;52 border-radius: 10px;53 transition: width .3s;54 }67 #jvm-rich-text-icons_custom_icon_generator #media-uploader-status.errors::after, 68 #jvm-rich-text-icons_custom_icon_generator 69 #media-uploader-status.uploading::after { 70 content: ""; 71 display: flex; 72 clear: both; 73 height: 24px; 74 } 55 75 56 #jvm-rich-text-icons_custom_icon_generator #media-uploader-status.errors::after, 57 #jvm-rich-text-icons_custom_icon_generator #media-uploader-status.uploading::after {58 content: "";59 display: flex;60 clear: both;61 height: 24px;62 }76 #jvm-rich-text-icons_custom_icon_generator .media-sidebar .upload-error { 77 margin: 12px 0; 78 padding: 4px 0 0; 79 border: none; 80 box-shadow: none; 81 background: 0 0; 82 } 63 83 64 #jvm-rich-text-icons_custom_icon_generator .media-sidebar .upload-error { 65 margin: 12px 0; 66 padding: 4px 0 0; 67 border: none; 68 box-shadow: none; 69 background: 0 0; 70 } 84 #jvm-rich-text-icons_custom_icon_generator 85 #upload-errors 86 .upload-error-filename { 87 font-weight: 600; 88 } 71 89 72 #jvm-rich-text-icons_custom_icon_generator #upload-errors .upload-error-filename { 73 font-weight: 600; 74 } 90 #jvm-rich-text-icons_custom_icon_generator 91 #upload-errors 92 .upload-error-message { 93 display: block; 94 padding-top: 8px; 95 word-wrap: break-word; 96 } 75 97 76 #jvm-rich-text-icons_custom_icon_generator #upload-errors .upload-error-message { 77 display: block; 78 padding-top: 8px; 79 word-wrap: break-word; 80 } 98 #jvm-rich-text-icons_custom_icon_uploader 99 .uploader-inline 100 h2.drop-instructions { 101 font-size: 20px; 102 line-height: 1.4; 103 font-weight: 400; 104 margin: 0; 105 } 81 106 82 #jvm-rich-text-icons_custom_icon_uploader .uploader-inline h2.drop-instructions { 83 font-size: 20px; 84 line-height: 1.4; 85 font-weight: 400; 86 margin: 0; 87 } 107 #jvm-rich-text-icons_custom_icon_uploader .close { 108 background-color: transparent; 109 border: 0; 110 cursor: pointer; 111 height: 48px; 112 outline: 0; 113 padding: 0; 114 position: absolute; 115 right: 2px; 116 text-align: center; 117 top: 2px; 118 width: 48px; 119 z-index: 1; 120 } 88 121 89 #jvm-rich-text-icons_custom_icon_uploader .close{ 90 background-color: transparent; 91 border: 0; 92 cursor: pointer; 93 height: 48px; 94 outline: 0; 95 padding: 0; 96 position: absolute; 97 right: 2px; 98 text-align: center; 99 top: 2px; 100 width: 48px; 101 z-index: 1; 102 } 122 #jvm-rich-text-icons_custom_icon_uploader .close:before { 123 font: normal 30px/1 dashicons !important; 124 color: #50575e; 125 display: inline-block; 126 content: "\f335"; 127 font-weight: 300; 128 margin-top: 1px; 129 } 103 130 104 #jvm-rich-text-icons_custom_icon_uploader .close:before { 105 font: normal 30px/1 dashicons!important; 106 color: #50575e; 107 display: inline-block; 108 content: "\f335"; 109 font-weight: 300; 110 margin-top: 1px; 111 } 131 #jvm-rich-text-icons_custom_icon_uploader .upload-ui { 132 margin: 2em 0; 133 } 112 134 113 #jvm-rich-text-icons_custom_icon_uploader .upload-ui{114 margin: 2em 0;115 }135 #jvm-rich-text-icons_custom_icon_uploader .dz-default.dz-message { 136 display: none; 137 } 116 138 117 #jvm-rich-text-icons_custom_icon_uploader .dz-default.dz-message { 118 display: none; 119 } 139 #svg-file-list { 140 display: grid; 141 grid-template-columns: repeat(auto-fill, minmax(80px, 1fr)); 142 gap: 8px; 143 padding: 4px; 144 margin: 20px 0; 145 } 120 146 121 #svg-file-list { 122 font-size: 48px; 123 margin: 40px 0; 124 } 147 #svg-file-list .icon-dialog-link { 148 display: flex; 149 flex-direction: column; 150 align-items: center; 151 padding: 8px 4px; 152 border: 1px solid #dcdcde; 153 border-radius: 4px; 154 color: #000; 155 text-decoration: none; 156 min-height: 70px; 157 transition: 158 border-color 0.15s, 159 background-color 0.15s; 160 } 125 161 126 #svg-file-list .icon-dialog-link { 127 border: 1px solid #8c8f94; 128 border-radius: 4px; 129 display: inline-flex; 130 width: 60px; 131 height: 60px; 132 align-items: center; 133 justify-content: center; 134 margin: 0 0 10px 0; 135 color: #000; 136 text-decoration: none; 137 } 162 #svg-file-list .icon-dialog-link:hover { 163 border-color: #2271b1; 164 background-color: #f0f6fc; 165 } 138 166 139 #svg-file-list .icon-dialog-link i { 140 margin: 0 !important; 141 top: 0 !important; 142 } 167 #svg-file-list .icon-dialog-link i { 168 font-size: 24px; 169 width: 24px; 170 height: 24px; 171 display: flex; 172 align-items: center; 173 justify-content: center; 174 margin: 0 !important; 175 top: 0 !important; 176 } 177 178 #svg-file-list .icon-dialog-label { 179 font-size: 10px; 180 text-align: center; 181 word-break: break-all; 182 line-height: 1.2; 183 color: #333; 184 max-width: 100%; 185 overflow: hidden; 186 text-overflow: ellipsis; 187 display: -webkit-box; 188 -webkit-line-clamp: 2; 189 -webkit-box-orient: vertical; 190 margin-top: 4px; 191 } -
jvm-rich-text-icons/trunk/package.json
r3458442 r3463466 8 8 }, 9 9 "devDependencies": { 10 "@wordpress/scripts": "^31.4.0" 10 "@wordpress/scripts": "^31.4.0", 11 "webpack": "^5.105.1", 12 "webpack-cli": "^6.0.1" 11 13 } 12 14 } -
jvm-rich-text-icons/trunk/plugin.php
r3460659 r3463466 3 3 * Plugin Name: JVM Rich Text Icons 4 4 * Description: Insert icons anywhere in your content. Inline in text, as a block, or in ACF fields. Includes Font Awesome and supports custom SVG icons. 5 * Version: 1. 5.15 * Version: 1.6.0 6 6 * Author: Joris van Montfort 7 7 * Author URI: https://jorisvm.nl 8 * Text Domain: jvm-rich text-icons8 * Text Domain: jvm-rich-text-icons 9 9 * Domain Path: languages 10 10 * 11 11 * @category Gutenberg 12 12 * @author Joris van Montfort 13 * @version 1. 5.113 * @version 1.6.0 14 14 * @package JVM Rich Text Icons 15 15 */ … … 21 21 * Initializer. 22 22 */ 23 load_plugin_textdomain( 'jvm-rich-text-icons', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' ); 24 25 require_once plugin_dir_path( __FILE__ ) . 'src/renderer.php'; 23 26 require_once plugin_dir_path( __FILE__ ) . 'src/init.php'; 24 27 -
jvm-rich-text-icons/trunk/readme.txt
r3460659 r3463466 4 4 Tags: icon, svg, font-awesome, gutenberg, icon-block 5 5 Requires at least: 5.4 6 Tested up to: 6.9 7 Stable tag: 1.5.1 6 Tested up to: 6.9 * Stable tag: 1.6.0 8 7 License: GPLv2 or later 9 8 License URI: http://www.gnu.org/licenses/gpl-2.0.html … … 84 83 == Changelog == 85 84 85 = 1.6.0 = 86 * Renamed the "Custom SVG icon set" to "My SVG uploads" for clarity. 87 * Improved layout forSVG uploads grid on the settings page: CSS grid layout with icon class name labels. 88 * Added Dutch and German translations. 89 * Added `load_plugin_textdomain()` for translation support. 90 * Fixed Text Domain header mismatch (was `jvm-richtext-icons`, now matches code: `jvm-rich-text-icons`). 91 * Centralized CSS renderer for custom SVG icons. Replaces three separate view files with a single renderer class that supports all render technologies (inline-svg, html-css, html-css-before, html-css-after). 92 * Icons JSON parser supports a new pro/extended format alongside the existing flat array and Fontello formats. 93 * More preparation for (Pro) future features. 94 86 95 = 1.5.1 = 87 96 * Added extensibility hooks for pro plugin support: `jvm_richtext_icons_svg_directories`, `jvm_richtext_icons_use_inline_svg`, `jvm_richtext_icons_available_icon_sets`, `jvm_richtext_icons_valid_icon_sets`, `jvm_richtext_icons_load_default_css`. -
jvm-rich-text-icons/trunk/src/init.php
r3460659 r3463466 384 384 $icons[] = $data->css_prefix_text.$g->css; 385 385 } 386 }else { 386 // Pro/extended format: object with icons array of {name, tags, categories, styles} 387 } elseif (is_object($data) && isset($data->icons) && is_array($data->icons)) { 388 foreach ($data->icons as $icon) { 389 if (is_object($icon) && isset($icon->name)) { 390 $icons[] = $icon->name; 391 } elseif (is_string($icon)) { 392 $icons[] = $icon; 393 } 394 } 395 // Legacy format: flat array of class name strings 396 } else { 387 397 $icons = $data; 388 398 } … … 448 458 public static function parse_dynamic_css() { 449 459 $settings = self::get_settings(); 450 $view = 'dynamic_css.php'; 451 452 if ($settings['technology'] == 'html-css-before') { 453 $view = 'dynamic_css_before.php'; 454 }else if ($settings['technology'] == 'html-css-after') { 455 $view = 'dynamic_css_after.php'; 456 } 457 458 return JVM_Richtext_icons::render_view($view, ['files' => JVM_Richtext_icons::get_svg_file_list(), 'settings', JVM_Richtext_icons::get_settings()]); 460 $technology = isset($settings['technology']) ? $settings['technology'] : 'html-css'; 461 $files = self::get_svg_file_list(); 462 $prefix_class = self::get_class_prefix(); 463 464 $icons = []; 465 foreach ($files as $file) { 466 $pi = pathinfo($file); 467 $icon_class = sanitize_title($pi['filename']); 468 $file_content = file_get_contents($file); 469 if ($file_content === false) { continue; } 470 471 $ratio = 1; 472 $dom = new DOMDocument(); 473 @$dom->load($file); 474 $svg = $dom->getElementsByTagName('svg'); 475 if ($svg && $svg->length > 0) { 476 $viewBox = $svg[0]->getAttribute('viewBox'); 477 if ($viewBox) { 478 list($x, $y, $width, $height) = explode(' ', $viewBox); 479 } else { 480 $width = str_replace('px', '', $svg[0]->getAttribute('width')); 481 $height = str_replace('px', '', $svg[0]->getAttribute('height')); 482 } 483 if (!empty($width) && !empty($height)) { 484 $ratio = $width / $height; 485 } 486 } 487 488 $icons[] = ['class' => $icon_class, 'svg' => $file_content, 'ratio' => $ratio]; 489 } 490 491 return JVM_RTI_Renderer::generate_css($icons, $technology); 459 492 } 460 493 -
jvm-rich-text-icons/trunk/src/settings.php
r3460659 r3463466 28 28 add_action( 'admin_menu', array( $this, 'add_plugin_page' ) ); 29 29 add_action( 'admin_init', array( $this, 'page_init' ) ); 30 add_action( 'admin_init', array( $this, 'register_technology_field' ), 30 ); 30 31 add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' )); 31 32 … … 51 52 $iconFileLoaded = apply_filters('jvm_richtext_icons_iconset_file', $iconFileDefault); 52 53 53 if ($iconFileDefault != $iconFileLoaded) { 54 $show_custom_notice = apply_filters('jvm_richtext_icons_show_custom_iconset_notice', $iconFileDefault != $iconFileLoaded, $iconFileLoaded); 55 if ($show_custom_notice) { 54 56 echo '<div class="notice notice-warning">'; 55 57 echo '<p>'.sprintf(__("A custom icon set is being loaded from: %s. Keep your setting set to the default Font Awsome icon set to keep this working. The custom icon set can't be loaded if you are creating a SVG icon set from this page.", 'jvm-rich-text-icons'), $iconFileLoaded).'</p>'; … … 231 233 'fa-5' => __('Font Awesome Free 5.15.4', 'jvm-rich-text-icons'), 232 234 'fa-6' => __('Font Awesome Free 6.7.2', 'jvm-rich-text-icons'), 233 'custom-svg' => __(' Custom SVG icon set', 'jvm-rich-text-icons'),235 'custom-svg' => __('My SVG uploads', 'jvm-rich-text-icons'), 234 236 ]; 235 237 $icon_sets = apply_filters('jvm_richtext_icons_available_icon_sets', $icon_sets); … … 246 248 ); 247 249 248 if ($this->options['icon_set'] == 'custom-svg') {249 add_settings_field(250 'technology', // ID251 __('Render technology', 'jvm-rich-text-icons'), // Title252 function () {253 echo '<select name="jvm-rich-text-icons[technology]">';254 255 $checked = $this->options['technology'] == 'inline-svg' ? ' selected' : '';256 echo '<option value="inline-svg"'.$checked.'>'.__('Inline SVG', 'jvm-rich-text-icons').'</option>';257 258 $checked = $this->options['technology'] == 'html-css' ? ' selected' : '';259 echo '<option value="html-css"'.$checked.'>'.__('HTML + CSS', 'jvm-rich-text-icons').'</option>';260 $checked = $this->options['technology'] == 'html-css-before' ? ' selected' : '';261 echo '<option value="html-css-before"'.$checked.'>'.__('HTML + CSS ::before pseudo-element', 'jvm-rich-text-icons').'</option>';262 263 $checked = $this->options['technology'] == 'html-css-after' ? ' selected' : '';264 echo '<option value="html-css-after"'.$checked.'>'.__('HTML + CSS ::after pseudo-element', 'jvm-rich-text-icons').'</option>';265 266 echo '</select>';267 },268 'jvm-rich-text-icons', // Page269 'general' // Section270 );271 }272 273 250 register_setting( 274 251 'jvm-rich-text-icons', // Option group … … 278 255 } 279 256 257 /** 258 * Register the technology field at priority 30 so it appears after 259 * any pro plugin fields (style, stroke width) registered at priority 20. 260 */ 261 public function register_technology_field() { 262 $this->options = JVM_Richtext_icons::get_settings(); 263 264 add_settings_field( 265 'technology', // ID 266 __('Render technology', 'jvm-rich-text-icons'), // Title 267 function () { 268 echo '<select name="jvm-rich-text-icons[technology]">'; 269 270 $checked = $this->options['technology'] == 'inline-svg' ? ' selected' : ''; 271 echo '<option value="inline-svg"'.$checked.'>'.__('Inline SVG', 'jvm-rich-text-icons').'</option>'; 272 273 $checked = $this->options['technology'] == 'html-css' ? ' selected' : ''; 274 echo '<option value="html-css"'.$checked.'>'.__('HTML + CSS', 'jvm-rich-text-icons').'</option>'; 275 $checked = $this->options['technology'] == 'html-css-before' ? ' selected' : ''; 276 echo '<option value="html-css-before"'.$checked.'>'.__('HTML + CSS ::before pseudo-element', 'jvm-rich-text-icons').'</option>'; 277 278 $checked = $this->options['technology'] == 'html-css-after' ? ' selected' : ''; 279 echo '<option value="html-css-after"'.$checked.'>'.__('HTML + CSS ::after pseudo-element', 'jvm-rich-text-icons').'</option>'; 280 281 echo '</select>'; 282 }, 283 'jvm-rich-text-icons', // Page 284 'general', // Section 285 [ 'class' => 'jvm-rti-technology-row' ] 286 ); 287 } 288 280 289 public function validation_notice($text) { 281 290 return '<div id="setting-error-empty" class="error settings-error notice"><p><strong>'.esc_html($text).'</strong></p></div>'; … … 290 299 $sanitized = []; 291 300 292 $valid_icon_sets = ['default', 'fa-5', 'fa-6', ' custom-svg'];301 $valid_icon_sets = ['default', 'fa-5', 'fa-6', 'fa-7', 'custom-svg']; 293 302 $valid_icon_sets = apply_filters('jvm_richtext_icons_valid_icon_sets', $valid_icon_sets); 294 303 if (isset($input['icon_set']) && in_array($input['icon_set'], $valid_icon_sets, true)) { -
jvm-rich-text-icons/trunk/views/icon-list.php
r3458442 r3463466 13 13 echo '<a id="icon-dialog-link-'.$icon_class.'" href="#icon-dialog" class="icon-dialog-link icon" data-icon-class-full="'.$css_class . ' ' . $icon_class .'" data-icon-class="'. $icon_class .'" data-file="'.esc_js(basename($file)).'" data-nonce="'.$nonce.'">'; 14 14 echo '<i class="' . $css_class . ' ' . $icon_class . '" aria-hidden="true"> </i>'; 15 echo '<span class="icon-dialog-label">' . esc_html($icon_class) . '</span>'; 15 16 echo '</a>'."\n"; 16 17 } -
jvm-rich-text-icons/trunk/views/settings.php
r3460659 r3463466 1 1 <div class="wrap"> 2 2 <h1><?php _e('Rich Text Icons Settings', 'jvm-rich-text-icons');?></h1> 3 <?php $settings = JVM_Richtext_icons::get_settings(); ?> 4 <?php if ( in_array( $settings['icon_set'], array( 'default', 'fa-5', 'fa-6' ), true ) ) : ?> 5 <style>.form-table tr.jvm-rti-technology-row { display: none; }</style> 6 <?php endif; ?> 3 7 <form id="jvm-rich-text-icons-settings-form" method="post" action="options.php"> 4 8 <?php … … 7 11 do_settings_sections( 'jvm-rich-text-icons' ); 8 12 submit_button(); 9 10 $settings = JVM_Richtext_icons::get_settings();11 13 ?> 12 14 </form> 13 15 <?php do_action('jvm_richtext_icons_settings_after_form', $settings); ?> 14 16 <div id="jvm-rich-text-icons_custom_icon_generator" <?php echo $settings['icon_set'] != "custom-svg" ? ' style="display: none;"' : "";?>> 15 <h2 class="title"><?php _e(' Custom SVG icon set', 'jvm-rich-text-icons');?></h2><a id="add_icon_btn" href="#" class="page-title-action"><?php _e('Add Icon', 'jvm-rich-text-icons');?></a>17 <h2 class="title"><?php _e('My SVG uploads', 'jvm-rich-text-icons');?></h2><a id="add_icon_btn" href="#" class="page-title-action"><?php _e('Add Icon', 'jvm-rich-text-icons');?></a> 16 18 <?php 17 19 echo JVM_Richtext_icons::render_view('uploader.php'); … … 20 22 </div> 21 23 <?php do_action('jvm_richtext_icons_settings_after_icons', $settings); ?> 24 <?php if ( apply_filters('jvm_richtext_icons_show_donate', true) ) : ?> 22 25 <form action="https://www.paypal.com/donate" method="post" target="_top"> 23 26 <p style="max-width: 500px;"> … … 28 31 <img alt="" border="0" src="https://www.paypal.com/en_NL/i/scr/pixel.gif" width="1" height="1" /> 29 32 </form> 33 <?php endif; ?> 30 34 31 35 </div>
Note: See TracChangeset
for help on using the changeset viewer.