├── composer.json ├── config ├── routing.yml └── services.yml ├── controller └── help │ └── markdown.php ├── event └── listener.php ├── ext.php ├── includes └── helper.php ├── language ├── en │ ├── acp │ │ ├── info_acp_markdown.php │ │ └── permissions_markdown.php │ ├── help │ │ └── markdown.php │ ├── posting.php │ └── ucp │ │ └── markdown.php ├── es │ ├── acp │ │ ├── info_acp_markdown.php │ │ └── permissions_markdown.php │ ├── help │ │ └── markdown.php │ ├── posting.php │ └── ucp │ │ └── markdown.php ├── es_x_tu │ ├── acp │ │ ├── info_acp_markdown.php │ │ └── permissions_markdown.php │ ├── help │ │ └── markdown.php │ ├── posting.php │ └── ucp │ │ └── markdown.php └── fr │ ├── acp │ ├── info_acp_markdown.php │ └── permissions_markdown.php │ ├── help │ └── markdown.php │ ├── posting.php │ └── ucp │ └── markdown.php ├── license.txt ├── migrations ├── v10x │ ├── m00_board_configuration.php │ ├── m01_permissions.php │ └── m02_user_configuration.php └── v13x │ └── m00_post_configuration.php └── styles ├── all ├── template │ └── event │ │ ├── overall_footer_body_after.html │ │ ├── overall_header_head_append.html │ │ ├── posting_editor_options_prepend.html │ │ ├── posting_editor_smilies_after.html │ │ ├── ucp_prefs_post_prepend.html │ │ └── ucp_profile_signature_posting_editor_options_prepend.html └── theme │ ├── css │ └── common.css │ └── js │ └── editor.js └── prosilver ├── template ├── markdown_status.html ├── posting_editor_option.html └── ucp_markdown.html └── theme └── css ├── colors.css └── style.css /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "alfredoramos/markdown", 3 | "type": "phpbb-extension", 4 | "description": "Markdown extension for phpBB", 5 | "homepage": "https://github.com/AlfredoRamos/phpbb-ext-markdown", 6 | "version": "1.4.1", 7 | "time": "2022-03-20", 8 | "keywords": [ 9 | "phpbb", 10 | "extension", 11 | "markdown", 12 | "litedown", 13 | "pipetables", 14 | "tasklists" 15 | ], 16 | "license": "GPL-2.0-only", 17 | "authors": [ 18 | { 19 | "name": "Alfredo Ramos", 20 | "email": "alfredo.ramos@proton.me", 21 | "homepage": "https://alfredoramos.mx", 22 | "role": "Lead Developer" 23 | } 24 | ], 25 | "require": { 26 | "php": "^7.1.3 || ^8.0.0", 27 | "composer/installers": "^2.2.0" 28 | }, 29 | "require-dev": { 30 | "phing/phing": "^2.16.0", 31 | "pear/archive_tar": "^1.4.0" 32 | }, 33 | "suggest": { 34 | "s9e/highlighter": "To add code syntax highlighting" 35 | }, 36 | "extra": { 37 | "display-name": "Markdown", 38 | "soft-require": { 39 | "phpbb/phpbb": "~3.3.2" 40 | }, 41 | "version-check": { 42 | "host": "alfredoramos.mx", 43 | "directory": "/phpbb-extensions/versions", 44 | "filename": "markdown.json", 45 | "ssl": true 46 | } 47 | }, 48 | "config": { 49 | "allow-plugins": { 50 | "composer/installers": true 51 | } 52 | } 53 | } -------------------------------------------------------------------------------- /config/routing.yml: -------------------------------------------------------------------------------- 1 | alfredoramos_markdown_help: 2 | path: /help/markdown 3 | defaults: { _controller: alfredoramos.markdown.controller.help.markdown:handle } 4 | -------------------------------------------------------------------------------- /config/services.yml: -------------------------------------------------------------------------------- 1 | services: 2 | alfredoramos.markdown.listener: 3 | class: alfredoramos\markdown\event\listener 4 | arguments: 5 | - '@auth' 6 | - '@config' 7 | - '@user' 8 | - '@request' 9 | - '@template' 10 | - '@routing.helper' 11 | - '@language' 12 | - '@alfredoramos.markdown.helper' 13 | tags: 14 | - { name: event.listener } 15 | 16 | alfredoramos.markdown.controller.help.markdown: 17 | class: alfredoramos\markdown\controller\help\markdown 18 | arguments: 19 | - '@controller.helper' 20 | - '@phpbb.help.manager' 21 | - '@template' 22 | - '@language' 23 | - '%core.root_path%' 24 | - '%core.php_ext%' 25 | 26 | alfredoramos.markdown.helper: 27 | class: alfredoramos\markdown\includes\helper 28 | arguments: 29 | - '%core.root_path%' 30 | - '%core.php_ext%' 31 | -------------------------------------------------------------------------------- /controller/help/markdown.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | namespace alfredoramos\markdown\controller\help; 11 | 12 | use phpbb\help\controller\controller; 13 | 14 | class markdown extends controller 15 | { 16 | /** 17 | * Show markdown help. 18 | * 19 | * @return string 20 | */ 21 | public function display() 22 | { 23 | $this->language->add_lang('help/markdown', 'alfredoramos/markdown'); 24 | 25 | $this->manager->add_block( 26 | 'HELP_MARKDOWN_BLOCK_INTRO', 27 | false, 28 | [ 29 | 'HELP_MARKDOWN_INTRO_MARKDOWN_QUESTION' => 'HELP_MARKDOWN_INTRO_MARKDOWN_ANSWER' 30 | ] 31 | ); 32 | 33 | $this->manager->add_block( 34 | 'HELP_MARKDOWN_BLOCK_TEXT', 35 | false, 36 | [ 37 | 'HELP_MARKDOWN_TEXT_BOLD_QUESTION' => 'HELP_MARKDOWN_TEXT_BOLD_ANSWER', 38 | 'HELP_MARKDOWN_TEXT_ITALIC_QUESTION' => 'HELP_MARKDOWN_TEXT_ITALIC_ANSWER', 39 | 'HELP_MARKDOWN_TEXT_STRIKETHROUGH_QUESTION' => 'HELP_MARKDOWN_TEXT_STRIKETHROUGH_ANSWER', 40 | 'HELP_MARKDOWN_TEXT_SUBSCRIPT_QUESTION' => 'HELP_MARKDOWN_TEXT_SUBSCRIPT_ANSWER', 41 | 'HELP_MARKDOWN_TEXT_SUPERSCRIPT_QUESTION' => 'HELP_MARKDOWN_TEXT_SUPERSCRIPT_ANSWER', 42 | 'HELP_MARKDOWN_TEXT_HEADER_QUESTION' => 'HELP_MARKDOWN_TEXT_HEADER_ANSWER' 43 | ] 44 | ); 45 | 46 | $this->manager->add_block( 47 | 'HELP_MARKDOWN_BLOCK_CODE', 48 | false, 49 | [ 50 | 'HELP_MARKDOWN_QUOTE_QUESTION' => 'HELP_MARKDOWN_QUOTE_ANSWER', 51 | 'HELP_MARKDOWN_CODE_QUESTION' => 'HELP_MARKDOWN_CODE_ANSWER', 52 | 'HELP_MARKDOWN_CODE_INLINE_QUESTION' => 'HELP_MARKDOWN_CODE_INLINE_ANSWER' 53 | ] 54 | ); 55 | 56 | $this->manager->add_block( 57 | 'HELP_MARKDOWN_BLOCK_TABLE', 58 | false, 59 | [ 60 | 'HELP_MARKDOWN_TABLE_QUESTION' => 'HELP_MARKDOWN_TABLE_ANSWER' 61 | ] 62 | ); 63 | 64 | $this->manager->add_block( 65 | 'HELP_MARKDOWN_BLOCK_SPOILER', 66 | true, 67 | [ 68 | 'HELP_MARKDOWN_BLOCK_SPOILER_QUESTION' => 'HELP_MARKDOWN_BLOCK_SPOILER_ANSWER', 69 | 'HELP_MARKDOWN_INLINE_SPOILER_QUESTION' => 'HELP_MARKDOWN_INLINE_SPOILER_ANSWER' 70 | ] 71 | ); 72 | 73 | $this->manager->add_block( 74 | 'HELP_MARKDOWN_BLOCK_LIST', 75 | true, 76 | [ 77 | 'HELP_MARKDOWN_UNORDERED_LIST_QUESTION' => 'HELP_MARKDOWN_UNORDERED_LIST_ANSWER', 78 | 'HELP_MARKDOWN_ORDERED_LIST_QUESTION' => 'HELP_MARKDOWN_ORDERED_LIST_ANSWER', 79 | 'HELP_MARKDOWN_TASK_LIST_QUESTION' => 'HELP_MARKDOWN_TASK_LIST_ANSWER' 80 | ] 81 | ); 82 | 83 | $this->manager->add_block( 84 | 'HELP_MARKDOWN_BLOCK_LINK', 85 | true, 86 | [ 87 | 'HELP_MARKDOWN_LINK_QUESTION' => 'HELP_MARKDOWN_LINK_ANSWER' 88 | ] 89 | ); 90 | 91 | $this->manager->add_block( 92 | 'HELP_MARKDOWN_BLOCK_IMAGE', 93 | true, 94 | [ 95 | 'HELP_MARKDOWN_IMAGE_QUESTION' => 'HELP_MARKDOWN_IMAGE_ANSWER' 96 | ] 97 | ); 98 | 99 | $this->manager->add_block( 100 | 'HELP_MARKDOWN_BLOCK_EXTRA', 101 | true, 102 | [ 103 | 'HELP_MARKDOWN_HORIZONTAL_RULE_QUESTION' => 'HELP_MARKDOWN_HORIZONTAL_RULE_ANSWER' 104 | ] 105 | ); 106 | 107 | return $this->language->lang('MARKDOWN_GUIDE'); 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /event/listener.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | namespace alfredoramos\markdown\event; 11 | 12 | use Symfony\Component\EventDispatcher\EventSubscriberInterface; 13 | use phpbb\auth\auth; 14 | use phpbb\config\config; 15 | use phpbb\user; 16 | use phpbb\request\request; 17 | use phpbb\template\template; 18 | use phpbb\routing\helper as routing_helper; 19 | use phpbb\language\language; 20 | use alfredoramos\markdown\includes\helper; 21 | 22 | class listener implements EventSubscriberInterface 23 | { 24 | /** @var auth */ 25 | protected $auth; 26 | 27 | /** @var config */ 28 | protected $config; 29 | 30 | /** @var user */ 31 | protected $user; 32 | 33 | /** @var request */ 34 | protected $request; 35 | 36 | /** @var template */ 37 | protected $template; 38 | 39 | /** @var routing_helper */ 40 | protected $routing_helper; 41 | 42 | /** @var language */ 43 | protected $language; 44 | 45 | /** @var helper */ 46 | protected $helper; 47 | 48 | /** @var bool */ 49 | private $markdown_enabled; 50 | 51 | /** 52 | * Listener constructor. 53 | * 54 | * @param auth $auth 55 | * @param config $config 56 | * @param user $user 57 | * @param request $request 58 | * @param template $template 59 | * @param routing_helper $routing_helper 60 | * @param language $language 61 | * @param helper $helper 62 | * 63 | * @return void 64 | */ 65 | public function __construct(auth $auth, config $config, user $user, request $request, template $template, routing_helper $routing_helper, language $language, helper $helper) 66 | { 67 | $this->auth = $auth; 68 | $this->config = $config; 69 | $this->user = $user; 70 | $this->request = $request; 71 | $this->template = $template; 72 | $this->routing_helper = $routing_helper; 73 | $this->language = $language; 74 | $this->helper = $helper; 75 | $this->markdown_enabled = !empty($this->config['allow_markdown']) && 76 | !empty($this->user->data['user_allow_markdown']); 77 | } 78 | 79 | /** 80 | * Assign functions defined in this class to event listeners in the core. 81 | * 82 | * @return array 83 | */ 84 | static public function getSubscribedEvents() 85 | { 86 | return [ 87 | 'core.user_setup' => 'load_language', 88 | 'core.acp_board_config_edit_add' => 'acp_markdown_configuration', 89 | 'core.permissions' => 'acp_markdown_permissions', 90 | 'core.text_formatter_s9e_configure_after' => 'configure_markdown', 91 | 'core.text_formatter_s9e_parser_setup' => 'enable_markdown', 92 | 'core.ucp_display_module_before' => 'ucp_markdown_status', 93 | 'core.ucp_prefs_post_data' => 'ucp_markdown_configuration', 94 | 'core.ucp_prefs_post_update_data' => 'ucp_markdown_configuration_data', 95 | 'core.posting_modify_default_variables' => 'default_post_data', 96 | 'core.posting_modify_message_text' => 'check_forum_permissions', 97 | 'core.posting_modify_submit_post_before' => 'add_post_data', 98 | 'core.submit_post_modify_sql_data' => 'save_post_data', 99 | 'core.posting_modify_template_vars' => 'posting_template_variables', 100 | 'core.ucp_pm_compose_modify_parse_before' => 'check_pm_permissions', 101 | 'core.message_parser_check_message' => 'check_signature_permissions' 102 | ]; 103 | } 104 | 105 | /** 106 | * Load language files. 107 | * 108 | * @param object $event 109 | * 110 | * @return void 111 | */ 112 | public function load_language($event) 113 | { 114 | $lang_set_ext = $event['lang_set_ext']; 115 | $lang_set_ext[] = [ 116 | 'ext_name' => 'alfredoramos/markdown', 117 | 'lang_set' => 'posting' 118 | ]; 119 | $event['lang_set_ext'] = $lang_set_ext; 120 | } 121 | 122 | /** 123 | * Add markdown configuration in ACP. 124 | * 125 | * @param object $event 126 | * 127 | * @return void 128 | */ 129 | public function acp_markdown_configuration($event) 130 | { 131 | // Allowed modes 132 | $modes = [ 133 | 'features', 134 | 'post', 135 | 'message', 136 | 'signature' 137 | ]; 138 | 139 | if (!in_array($event['mode'], $modes, true)) { 140 | return; 141 | } 142 | 143 | $event['display_vars'] = $this->helper->acp_configuration( 144 | $event['display_vars'], 145 | $event['mode'] 146 | ); 147 | } 148 | 149 | /** 150 | * Add Markdown permissions. 151 | * 152 | * @param object $event 153 | * 154 | * @return void 155 | */ 156 | public function acp_markdown_permissions($event) 157 | { 158 | $event->update_subarray( 159 | 'permissions', 160 | 'f_markdown', 161 | [ 162 | 'lang' => 'ACL_F_MARKDOWN', 163 | 'cat' => 'content' 164 | ] 165 | ); 166 | 167 | $event->update_subarray( 168 | 'permissions', 169 | 'u_post_markdown', 170 | [ 171 | 'lang' => 'ACL_U_POST_MARKDOWN', 172 | 'cat' => 'post' 173 | ] 174 | ); 175 | 176 | $event->update_subarray( 177 | 'permissions', 178 | 'u_pm_markdown', 179 | [ 180 | 'lang' => 'ACL_U_PM_MARKDOWN', 181 | 'cat' => 'pm' 182 | ] 183 | ); 184 | 185 | $event->update_subarray( 186 | 'permissions', 187 | 'u_sig_markdown', 188 | [ 189 | 'lang' => 'ACL_U_SIG_MARKDOWN', 190 | 'cat' => 'profile' 191 | ] 192 | ); 193 | } 194 | 195 | /** 196 | * Configure markdown. 197 | * 198 | * @param object $event 199 | * 200 | * @return void 201 | */ 202 | public function configure_markdown($event) 203 | { 204 | $configurator = $event['configurator']; 205 | 206 | // Check if plugins should be disabled 207 | if (!$this->markdown_enabled) { 208 | unset( 209 | $configurator->Litedown, 210 | $configurator->PipeTables, 211 | $configurator->TaskLists 212 | ); 213 | return; 214 | } 215 | 216 | // Enable plugins 217 | $configurator->Litedown->addHeadersId(); 218 | $configurator->PipeTables; 219 | $configurator->TaskLists; 220 | 221 | // List of tag that will get a CSS class 222 | $tags = [ 223 | // Litedown 224 | 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 225 | 'LIST', 'SPOILER', 'ISPOILER', 226 | 227 | // PipeTables 228 | 'TABLE' 229 | ]; 230 | 231 | // Add CSS class 232 | foreach ($tags as $tag) { 233 | $tag = trim($tag); 234 | 235 | // Tag must exist 236 | if (!isset($configurator->tags[$tag])) { 237 | continue; 238 | } 239 | 240 | // Setup DOM 241 | $object = $configurator->tags[$tag]; 242 | $dom = $object->template->asDom(); 243 | $xpath = new \DOMXPath($dom); 244 | 245 | // XPath expression 246 | switch ($tag) { 247 | case 'LIST': 248 | $exp = '//ul | //ol'; 249 | break; 250 | 251 | case 'SPOILER': 252 | $exp = '//details'; 253 | break; 254 | 255 | case 'ISPOILER': 256 | $exp = '//span[contains(@class, "spoiler")]'; 257 | break; 258 | 259 | default: 260 | $exp = '//' . strtolower($tag); 261 | break; 262 | } 263 | 264 | foreach ($xpath->query($exp) as $node) { 265 | $node->setAttribute('class', trim(sprintf( 266 | '%s markdown', 267 | trim($node->getattribute('class')) 268 | ))); 269 | } 270 | 271 | $dom->saveChanges(); 272 | } 273 | } 274 | 275 | /** 276 | * Enable markdown. 277 | * 278 | * @param object $event 279 | * 280 | * @return void 281 | */ 282 | public function enable_markdown($event) 283 | { 284 | if ($this->markdown_enabled) { 285 | return; 286 | } 287 | 288 | $parser = $event['parser']->get_parser(); 289 | $parser->disablePlugin('Litedown'); 290 | $parser->disablePlugin('PipeTables'); 291 | $parser->disablePlugin('TaskLists'); 292 | } 293 | 294 | /** 295 | * Check Markdown status in the UCP. 296 | * 297 | * @param object $event 298 | * 299 | * @return void 300 | */ 301 | public function ucp_markdown_status($event) 302 | { 303 | if (($event['id'] !== 'ucp_prefs' && $event['mode'] !== 'post') && 304 | ($event['id'] !== 'pm' && $event['mode'] !== 'compose') && 305 | ($event['id'] !== 'ucp_profile' && $event['mode'] !== 'signature') 306 | ) { 307 | return; 308 | } 309 | 310 | // Globally enabled 311 | $enabled = !empty($this->config['allow_markdown']); 312 | 313 | // Post, private messages or signature 314 | $enabled = $enabled && 315 | ( 316 | !empty($this->config['allow_post_markdown']) || 317 | !empty($this->config['allow_pm_markdown']) || 318 | !empty($this->config['allow_sig_markdown']) 319 | ); 320 | 321 | // User permissions for post, private messages or signature 322 | $enabled = $enabled && 323 | ( 324 | !empty($this->auth->acl_get('u_post_markdown')) || 325 | !empty($this->auth->acl_get('u_pm_markdown')) || 326 | !empty($this->auth->acl_get('u_sig_markdown')) 327 | ); 328 | 329 | $allowed = !empty($this->config['allow_markdown']) && 330 | !empty($this->user->data['user_allow_markdown']); 331 | 332 | if ($event['id'] === 'pm' && $event['mode'] === 'compose') { 333 | $allowed = $allowed && 334 | !empty($this->config['allow_pm_markdown']) && 335 | !empty($this->auth->acl_get('u_pm_markdown')); 336 | } else if ($event['id'] === 'ucp_profile' && $event['mode'] === 'signature') { 337 | $allowed = $allowed && 338 | !empty($this->config['allow_sig_markdown']) && 339 | !empty($this->auth->acl_get('u_sig_markdown')); 340 | } 341 | 342 | $this->template->assign_vars([ 343 | 'S_MARKDOWN_ENABLED' => $enabled, 344 | 'S_MARKDOWN_ALLOWED' => $allowed, 345 | 'MARKDOWN_STATUS' => $this->language->lang( 346 | 'MARKDOWN_STATUS_FORMAT', 347 | $this->routing_helper->route('alfredoramos_markdown_help'), 348 | $allowed ? $this->language->lang('MARKDOWN_IS_ON') : $this->language->lang('MARKDOWN_IS_OFF') 349 | ) 350 | ]); 351 | } 352 | 353 | /** 354 | * Markdown configuration. 355 | * 356 | * @param object $event 357 | * 358 | * @return void 359 | */ 360 | public function ucp_markdown_configuration($event) 361 | { 362 | $this->language->add_lang('ucp/markdown', 'alfredoramos/markdown'); 363 | 364 | $event['data'] = array_merge($event['data'], [ 365 | 'markdown' => $this->request->variable( 366 | 'markdown', 367 | (bool) $this->user->data['user_allow_markdown'] 368 | ) 369 | ]); 370 | 371 | $this->template->assign_var('S_MARKDOWN', $event['data']['markdown']); 372 | } 373 | 374 | /** 375 | * Markdown configuration data. 376 | * 377 | * @param object $event 378 | * 379 | * @return void 380 | */ 381 | public function ucp_markdown_configuration_data($event) 382 | { 383 | $event['sql_ary'] = array_merge($event['sql_ary'], [ 384 | 'user_allow_markdown' => !empty($event['data']['markdown']) 385 | ]); 386 | } 387 | 388 | /** 389 | * Add default post data. 390 | * 391 | * @param object $event 392 | * 393 | * @return void 394 | */ 395 | public function default_post_data($event) 396 | { 397 | if (isset($event['post_data']['enable_markdown'])) { 398 | return; 399 | } 400 | 401 | // Markdown enabled by default for new topics, 402 | // it is read from database when user edits a post 403 | $event['post_data'] = array_merge($event['post_data'], [ 404 | 'enable_markdown' => !empty($this->config['allow_post_markdown']) && 405 | !empty($this->auth->acl_get('f_markdown', $event['post_data']['forum_id'])) && 406 | !empty($this->auth->acl_get('u_post_markdown')) 407 | ]); 408 | } 409 | 410 | /** 411 | * Check Markdown forum permissions. 412 | * 413 | * @param object $event 414 | * 415 | * @return void 416 | */ 417 | public function check_forum_permissions($event) 418 | { 419 | $event['post_data'] = array_merge($event['post_data'], [ 420 | 'enable_markdown' => empty($this->request->variable('disable_markdown', false)) 421 | ]); 422 | 423 | $this->markdown_enabled = $this->markdown_enabled && 424 | !empty($this->config['allow_post_markdown']) && 425 | !empty($this->auth->acl_get('f_markdown', $event['forum_id'])) && 426 | !empty($this->auth->acl_get('u_post_markdown')) && 427 | !empty($event['post_data']['enable_markdown']); 428 | } 429 | 430 | /** 431 | * Add Markdown status to post data. 432 | * 433 | * @param object $event 434 | * 435 | * @return void 436 | */ 437 | public function add_post_data($event) 438 | { 439 | $event['data'] = array_merge($event['data'], [ 440 | 'enable_markdown' => (bool) $event['post_data']['enable_markdown'] 441 | ]); 442 | } 443 | 444 | /** 445 | * Add Markdown status to SQL query of posts table. 446 | * 447 | * @param object $event 448 | * 449 | * @return void 450 | */ 451 | public function save_post_data($event) 452 | { 453 | $sql_data = $event['sql_data']; 454 | $sql_data[POSTS_TABLE]['sql'] = array_merge($sql_data[POSTS_TABLE]['sql'], [ 455 | 'enable_markdown' => (bool) $event['data']['enable_markdown'] 456 | ]); 457 | $event['sql_data'] = $sql_data; 458 | } 459 | 460 | /** 461 | * Set template variables in posting editor. 462 | * 463 | * @param object $event 464 | * 465 | * @return void 466 | */ 467 | public function posting_template_variables($event) 468 | { 469 | $allowed = !empty($this->config['allow_markdown']) && 470 | !empty($this->config['allow_post_markdown']) && 471 | !empty($this->auth->acl_get('f_markdown', $event['forum_id'])) && 472 | !empty($this->auth->acl_get('u_post_markdown')) && 473 | !empty($this->user->data['user_allow_markdown']); 474 | 475 | $event['page_data'] = array_merge($event['page_data'], [ 476 | 'S_MARKDOWN_ALLOWED' => $allowed, 477 | 'MARKDOWN_STATUS' => $this->language->lang( 478 | 'MARKDOWN_STATUS_FORMAT', 479 | $this->routing_helper->route('alfredoramos_markdown_help'), 480 | $allowed ? $this->language->lang('MARKDOWN_IS_ON') : $this->language->lang('MARKDOWN_IS_OFF') 481 | ), 482 | 'S_MARKDOWN_CHECKED' => (empty($event['post_data']['enable_markdown']) ? ' checked="checked"' : '') 483 | ]); 484 | } 485 | 486 | /** 487 | * Check Markdown private messages permissions. 488 | * 489 | * @param object $event 490 | * 491 | * @return void 492 | */ 493 | public function check_pm_permissions($event) 494 | { 495 | $event['enable_markdown'] = empty($this->request->variable('disable_markdown', false)); 496 | 497 | $this->markdown_enabled = $this->markdown_enabled && 498 | !empty($this->config['allow_pm_markdown']) && 499 | !empty($this->auth->acl_get('u_pm_markdown')) && 500 | !empty($event['enable_markdown']); 501 | 502 | $this->template->assign_var( 503 | 'S_MARKDOWN_CHECKED', 504 | empty($event['enable_markdown']) ? ' checked="checked"' : '' 505 | ); 506 | } 507 | 508 | /** 509 | * Check Markdown signature permissions. 510 | * 511 | * @param object $event 512 | * 513 | * @return void 514 | */ 515 | public function check_signature_permissions($event) 516 | { 517 | if (!in_array($event['mode'], ['sig', 'text_reparser.user_signature'], true)) { 518 | return; 519 | } 520 | 521 | $event['allow_markdown'] = empty($this->request->variable('disable_markdown', false)); 522 | 523 | $this->markdown_enabled = $this->markdown_enabled && 524 | !empty($this->config['allow_sig_markdown']) && 525 | !empty($this->auth->acl_get('u_sig_markdown')) && 526 | !empty($event['allow_markdown']); 527 | 528 | $this->template->assign_var( 529 | 'S_MARKDOWN_CHECKED', 530 | empty($event['allow_markdown']) ? ' checked="checked"' : '' 531 | ); 532 | } 533 | } 534 | -------------------------------------------------------------------------------- /ext.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | namespace alfredoramos\markdown; 11 | 12 | use phpbb\extension\base; 13 | 14 | class ext extends base 15 | { 16 | /** 17 | * Check whether or not the extension can be enabled. 18 | * 19 | * @return bool 20 | */ 21 | public function is_enableable() 22 | { 23 | return phpbb_version_compare(PHPBB_VERSION, '3.3.2', '>='); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /includes/helper.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | namespace alfredoramos\markdown\includes; 11 | 12 | class helper 13 | { 14 | /** @var string */ 15 | protected $root_path; 16 | 17 | /** @var string */ 18 | protected $php_ext; 19 | 20 | /** 21 | * Helper constructor. 22 | * 23 | * @param string $root_path 24 | * @param string $php_ext 25 | * 26 | * @return void 27 | */ 28 | public function __construct($root_path, $php_ext) 29 | { 30 | $this->root_path = $root_path; 31 | $this->php_ext = $php_ext; 32 | } 33 | 34 | /** 35 | * Insert template variables in ACP. 36 | * 37 | * @param array $display_vars 38 | * @param string $mode 39 | * 40 | * @return array 41 | */ 42 | public function acp_configuration($display_vars = [], $mode = '') 43 | { 44 | if (empty($display_vars) || empty($display_vars['vars']) || empty($mode)) { 45 | return []; 46 | } 47 | 48 | // Common field options 49 | $options = [ 50 | 'validate' => 'bool', 51 | 'type' => 'radio:yes_no', 52 | 'explain' => false 53 | ]; 54 | 55 | if (!function_exists('phpbb_insert_config_array')) { 56 | include($this->root_path . 'includes/functions_acp.' . $this->php_ext); 57 | } 58 | 59 | switch ($mode) { 60 | case 'features': 61 | $display_vars['vars'] = phpbb_insert_config_array( 62 | $display_vars['vars'], 63 | [ 64 | 'allow_markdown' => array_merge( 65 | $options, 66 | ['lang' => 'ALLOW_MARKDOWN'] 67 | ) 68 | ], 69 | ['before' => 'allow_bbcode'] 70 | ); 71 | break; 72 | 73 | case 'post': 74 | $display_vars['vars'] = phpbb_insert_config_array( 75 | $display_vars['vars'], 76 | [ 77 | 'allow_post_markdown' => array_merge( 78 | $options, 79 | ['lang' => 'ALLOW_POST_MARKDOWN'] 80 | ) 81 | ], 82 | ['before' => 'allow_bbcode'] 83 | ); 84 | break; 85 | 86 | case 'message': 87 | $display_vars['vars'] = phpbb_insert_config_array( 88 | $display_vars['vars'], 89 | [ 90 | 'allow_pm_markdown' => array_merge( 91 | $options, 92 | ['lang' => 'ALLOW_PM_MARKDOWN'] 93 | ) 94 | ], 95 | ['before' => 'auth_bbcode_pm'] 96 | ); 97 | break; 98 | 99 | case 'signature': 100 | $display_vars['vars'] = phpbb_insert_config_array( 101 | $display_vars['vars'], 102 | [ 103 | 'allow_sig_markdown' => array_merge( 104 | $options, 105 | ['lang' => 'ALLOW_SIG_MARKDOWN'] 106 | ) 107 | ], 108 | ['before' => 'allow_sig_bbcode'] 109 | ); 110 | break; 111 | } 112 | 113 | return $display_vars; 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /language/en/acp/info_acp_markdown.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | /** 11 | * @ignore 12 | */ 13 | if (!defined('IN_PHPBB')) { 14 | exit; 15 | } 16 | 17 | /** 18 | * @ignore 19 | */ 20 | if (empty($lang) || !is_array($lang)) { 21 | $lang = []; 22 | } 23 | 24 | $lang = array_merge($lang, [ 25 | 'ALLOW_MARKDOWN' => 'Allow Markdown', 26 | 'ALLOW_POST_MARKDOWN' => 'Allow Markdown in posts', 27 | 'ALLOW_PM_MARKDOWN' => 'Allow Markdown in private messages', 28 | 'ALLOW_SIG_MARKDOWN' => 'Allow Markdown in user signatures' 29 | ]); 30 | -------------------------------------------------------------------------------- /language/en/acp/permissions_markdown.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | /** 11 | * @ignore 12 | */ 13 | if (!defined('IN_PHPBB')) { 14 | exit; 15 | } 16 | 17 | /** 18 | * @ignore 19 | */ 20 | if (empty($lang) || !is_array($lang)) { 21 | $lang = []; 22 | } 23 | 24 | $lang = array_merge($lang, [ 25 | 'ACL_F_MARKDOWN' => 'Can use Markdown', 26 | 'ACL_U_POST_MARKDOWN' => 'Can use Markdown', 27 | 'ACL_U_PM_MARKDOWN' => 'Can use Markdown in private messages', 28 | 'ACL_U_SIG_MARKDOWN' => 'Can use Markdown in signature' 29 | ]); 30 | -------------------------------------------------------------------------------- /language/en/help/markdown.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | /** 11 | * @ignore 12 | */ 13 | if (!defined('IN_PHPBB')) { 14 | exit; 15 | } 16 | 17 | /** 18 | * @ignore 19 | */ 20 | if (empty($lang) || !is_array($lang)) { 21 | $lang = []; 22 | } 23 | 24 | $lang = array_merge($lang, [ 25 | 'MARKDOWN_GUIDE' => 'Markdown guide', 26 | 27 | 'HELP_MARKDOWN_BLOCK_INTRO' => 'Introduction', 28 | 'HELP_MARKDOWN_INTRO_MARKDOWN_QUESTION' => 'What is Markdown?', 29 | 'HELP_MARKDOWN_INTRO_MARKDOWN_ANSWER' => 'Markdown is a lightweight markup language with plain text formatting syntax aimed for web writers. It allows you to easily write text, without the need or help of external tools or a user interface, that later will be formatted as HTML while maintaining readability. Markdown can be used instead of or in conjunction of text formatted with BBCode.', 30 | 31 | 'HELP_MARKDOWN_BLOCK_TEXT' => 'Text formatting', 32 | 'HELP_MARKDOWN_TEXT_BOLD_QUESTION' => 'Creating bold text', 33 | 'HELP_MARKDOWN_TEXT_BOLD_ANSWER' => 'To make a piece of text bold, enclose it in a pair of ** or __, e.g.
**Hello**
or
__Hello__
will become

Hello', 34 | 'HELP_MARKDOWN_TEXT_ITALIC_QUESTION' => 'Creating italic text', 35 | 'HELP_MARKDOWN_TEXT_ITALIC_ANSWER' => 'To italicise text, enclose it in a pair of * or _, e.g.
*Great!*
or
_Great!_
will become

Great!', 36 | 'HELP_MARKDOWN_TEXT_STRIKETHROUGH_QUESTION' => 'Creating strikethrough text', 37 | 'HELP_MARKDOWN_TEXT_STRIKETHROUGH_ANSWER' => 'To strikethrough text, enclose it in a pair of ~~, e.g.
~~Good morning~~
will become

Good morning', 38 | 'HELP_MARKDOWN_TEXT_SUBSCRIPT_QUESTION' => 'Creating subscript text', 39 | 'HELP_MARKDOWN_TEXT_SUBSCRIPT_ANSWER' => 'To create subscript text, enclose it in a pair of ~, e.g.
H~2~O
will become

H2O', 40 | 'HELP_MARKDOWN_TEXT_SUPERSCRIPT_QUESTION' => 'Creating superscript text', 41 | 'HELP_MARKDOWN_TEXT_SUPERSCRIPT_ANSWER' => 'To create a superscript text, add ^ before the text, e.g.
2^n
will become

2n', 42 | 'HELP_MARKDOWN_TEXT_HEADER_QUESTION' => 'Creating headers', 43 | 'HELP_MARKDOWN_TEXT_HEADER_ANSWER' => 'To create headers, add from 1 up to 6 # followed by a space before the text. The higher the number, the smaller the text would be, e.g.
# H1
## H2
### H3
#### H4
##### H5
###### H6
will become

H1

H2

H3

H4

H5
H6
', 44 | 45 | 'HELP_MARKDOWN_BLOCK_CODE' => 'Quoting and outputting fixed-width text', 46 | 'HELP_MARKDOWN_QUOTE_QUESTION' => 'Quoting text in replies', 47 | 'HELP_MARKDOWN_QUOTE_ANSWER' => 'To quote text, add > and optionally an space before the text line, e.g.
> Quoted text
will become

Quoted text

', 48 | 'HELP_MARKDOWN_CODE_QUESTION' => 'Outputting code', 49 | 'HELP_MARKDOWN_CODE_ANSWER' => 'To output code, enclose it in a pair of ``` or ~~~, or alternatively add 4 empty spaces before each line. You can also specify the language in the first marker, e.g.
```ruby
puts "Hello #{user}!"
```
will become

Code: Select all

puts "Hello #{user}!"
', 50 | 'HELP_MARKDOWN_CODE_INLINE_QUESTION' => 'Outputting inline code', 51 | 'HELP_MARKDOWN_CODE_INLINE_ANSWER' => 'To output inline code, enclose it in pair of ` or ``, e.g.
`<div>` tag
or
``<div>`` tag
will become

<div> tag', 52 | 53 | 'HELP_MARKDOWN_BLOCK_TABLE' => 'Generating tables', 54 | 'HELP_MARKDOWN_TABLE_QUESTION' => 'Creating tables', 55 | 'HELP_MARKDOWN_TABLE_ANSWER' => 'To create tables, add a line of text divided with | which will be the table headers, after that a new line with - and optionally : to the left, on both sides or to the right to align the text of that column, again divided with |. All successive lines divided with | will be rendered as table rows, e.g.
| Left | Center | Right |
|:-----|:------:|------:|
| x | x | x |
or
Left|Center|Right
:-|:-:|-:
x|x|x
will become

LeftCenterRight
xxx
', 56 | 57 | 'HELP_MARKDOWN_BLOCK_SPOILER' => 'Generating spoilers', 58 | 'HELP_MARKDOWN_BLOCK_SPOILER_QUESTION' => 'Creating block spoilers', 59 | 'HELP_MARKDOWN_BLOCK_SPOILER_ANSWER' => 'To create a block spoiler, add >! and optionally an space before the text line. Subsequent lines can be started with >, e.g.
>! Spoiler text
> Another line
will become

Spoiler text
Another line

', 60 | 'HELP_MARKDOWN_INLINE_SPOILER_QUESTION' => 'Creating inline spoilers', 61 | 'HELP_MARKDOWN_INLINE_SPOILER_ANSWER' => 'To create an inline spoiler, enclose the text inside >! and !< or inside a pair of ||, e.g.
This is a Reddit-style >!spoiler!<.
This is a Discord-style ||spoiler||.
will become

This is a Reddit-style spoiler.
This is a Discord-style spoiler.

', 62 | 63 | 'HELP_MARKDOWN_BLOCK_LIST' => 'Generating lists', 64 | 'HELP_MARKDOWN_UNORDERED_LIST_QUESTION' => 'Creating unordered list', 65 | 'HELP_MARKDOWN_UNORDERED_LIST_ANSWER' => 'To create an unordered list, add *, - or + followed by an space before each list item. Lists can be nested by adding 4 additional spaces or a tab to create a sublevel, e.g.
- Element
- Subelement
- Element
will become

', 66 | 'HELP_MARKDOWN_ORDERED_LIST_QUESTION' => 'Creating ordered list', 67 | 'HELP_MARKDOWN_ORDERED_LIST_ANSWER' => 'To create an ordered list, add a digit followed by a dot and a space, e.g.
1. Element
1. Subelement
2. Element
will become

  1. Element
    1. Subelement
  2. Element
', 68 | 'HELP_MARKDOWN_TASK_LIST_QUESTION' => 'Creating task list', 69 | 'HELP_MARKDOWN_TASK_LIST_ANSWER' => 'To create a task list, add *, - or + followed by an space, either [x] or [ ], and another space before each list item. The [x] and [ ] characters would display a checked box and an uncheked box, respectively, e.g.
- [x] Element
- [x] Subelement
- [ ] Element
will become

', 70 | 71 | 'HELP_MARKDOWN_BLOCK_LINK' => 'Creating links', 72 | 'HELP_MARKDOWN_LINK_QUESTION' => 'Linking to another site', 73 | 'HELP_MARKDOWN_LINK_ANSWER' => 'To create links, add the link text inside square brackets followed by the link URL inside parentheses, e.g.
[Link text](http://example.org)
will become

Link text', 74 | 75 | 'HELP_MARKDOWN_BLOCK_IMAGE' => 'Showing images', 76 | 'HELP_MARKDOWN_IMAGE_QUESTION' => 'Adding images', 77 | 'HELP_MARKDOWN_IMAGE_ANSWER' => 'To show an image, add an exclamation mark followed by the image alternate text inside square brackets and then the image URL inside parenthesis, e.g.
![phpBB](https://www.phpbb.com/assets/images/images/logos/blue/160x52.png)
will become

phpBB', 78 | 79 | 'HELP_MARKDOWN_BLOCK_EXTRA' => 'Extras', 80 | 'HELP_MARKDOWN_HORIZONTAL_RULE_QUESTION' => 'Creating horizontal rules', 81 | 'HELP_MARKDOWN_HORIZONTAL_RULE_ANSWER' => 'To create a horizontal rule, add at least 3 *, - or _ optionally separated with a space, e.g.
***
* * *
---
- - -
___
_ _ _
will become


' 82 | ]); 83 | -------------------------------------------------------------------------------- /language/en/posting.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | /** 11 | * @ignore 12 | */ 13 | if (!defined('IN_PHPBB')) { 14 | exit; 15 | } 16 | 17 | /** 18 | * @ignore 19 | */ 20 | if (empty($lang) || !is_array($lang)) { 21 | $lang = []; 22 | } 23 | 24 | $lang = array_merge($lang, [ 25 | 'MARKDOWN_STATUS_FORMAT' => 'Markdown is %2$s', 26 | 'MARKDOWN_IS_ON' => 'ON', 27 | 'MARKDOWN_IS_OFF' => 'OFF', 28 | 'DISABLE_MARKDOWN' => 'Disable Markdown' 29 | ]); 30 | -------------------------------------------------------------------------------- /language/en/ucp/markdown.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | /** 11 | * @ignore 12 | */ 13 | if (!defined('IN_PHPBB')) { 14 | exit; 15 | } 16 | 17 | /** 18 | * @ignore 19 | */ 20 | if (empty($lang) || !is_array($lang)) { 21 | $lang = []; 22 | } 23 | 24 | $lang = array_merge($lang, [ 25 | 'DEFAULT_MARKDOWN' => 'Enable Markdown by default' 26 | ]); 27 | -------------------------------------------------------------------------------- /language/es/acp/info_acp_markdown.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | /** 11 | * @ignore 12 | */ 13 | if (!defined('IN_PHPBB')) { 14 | exit; 15 | } 16 | 17 | /** 18 | * @ignore 19 | */ 20 | if (empty($lang) || !is_array($lang)) { 21 | $lang = []; 22 | } 23 | 24 | $lang = array_merge($lang, [ 25 | 'ALLOW_MARKDOWN' => 'Permitir Markdown', 26 | 'ALLOW_POST_MARKDOWN' => 'Permitir Markdown en mensajes', 27 | 'ALLOW_PM_MARKDOWN' => 'Permitir Markdown en mensajes privados', 28 | 'ALLOW_SIG_MARKDOWN' => 'Permitir Markdown en la firma del usuario' 29 | ]); 30 | -------------------------------------------------------------------------------- /language/es/acp/permissions_markdown.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | /** 11 | * @ignore 12 | */ 13 | if (!defined('IN_PHPBB')) { 14 | exit; 15 | } 16 | 17 | /** 18 | * @ignore 19 | */ 20 | if (empty($lang) || !is_array($lang)) { 21 | $lang = []; 22 | } 23 | 24 | $lang = array_merge($lang, [ 25 | 'ACL_F_MARKDOWN' => 'Puede usar Markdown', 26 | 'ACL_U_POST_MARKDOWN' => 'Puede usar Markdown', 27 | 'ACL_U_PM_MARKDOWN' => 'Puede usar Markdown en mensajes privados', 28 | 'ACL_U_SIG_MARKDOWN' => 'Puede usar Markdown en la firma del usuario' 29 | ]); 30 | -------------------------------------------------------------------------------- /language/es/help/markdown.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | /** 11 | * @ignore 12 | */ 13 | if (!defined('IN_PHPBB')) { 14 | exit; 15 | } 16 | 17 | /** 18 | * @ignore 19 | */ 20 | if (empty($lang) || !is_array($lang)) { 21 | $lang = []; 22 | } 23 | 24 | $lang = array_merge($lang, [ 25 | 'MARKDOWN_GUIDE' => 'Guía Markdown', 26 | 27 | 'HELP_MARKDOWN_BLOCK_INTRO' => 'Introducción', 28 | 'HELP_MARKDOWN_INTRO_MARKDOWN_QUESTION' => '¿Qué es Markdown?', 29 | 'HELP_MARKDOWN_INTRO_MARKDOWN_ANSWER' => 'Markdown es un lenguaje de marcado ligero con sintaxis de formato en texto plano dirigido a escritores web. Le permite escribir fácilmente texto, sin necesidad o ayuda de herramientas externas o interfaz de usuario, que será convertido a HTML sin perder legibilidad. Markdown puede usar en lugar de o junto a texto formateado con BBCode.', 30 | 31 | 'HELP_MARKDOWN_BLOCK_TEXT' => 'Formato de texto', 32 | 'HELP_MARKDOWN_TEXT_BOLD_QUESTION' => 'Creando texto en negritas', 33 | 'HELP_MARKDOWN_TEXT_BOLD_ANSWER' => 'Para crear texto en negritas, enciérrelo entre un par de ** o __, ej.
**Hola**
o
__Hola__
se convertirá

Hola', 34 | 'HELP_MARKDOWN_TEXT_ITALIC_QUESTION' => 'Creando texto en cursiva', 35 | 'HELP_MARKDOWN_TEXT_ITALIC_ANSWER' => 'Para crear texto en cursiva, enciérrelo entre un par de * o _, ej.
*Genial!*
o
_Genial!_
se convertirá

Genial!', 36 | 'HELP_MARKDOWN_TEXT_STRIKETHROUGH_QUESTION' => 'Creando texto tachado', 37 | 'HELP_MARKDOWN_TEXT_STRIKETHROUGH_ANSWER' => 'Para tachar texto, enciérrelo entre un par de ~~, ej.
~~Buenos días~~
se convertirá

Buenos días', 38 | 'HELP_MARKDOWN_TEXT_SUBSCRIPT_QUESTION' => 'Creando subíndices', 39 | 'HELP_MARKDOWN_TEXT_SUBSCRIPT_ANSWER' => 'Para crear subíndices, enciérrelo entre un par de ~, ej.
H~2~O
se convertirá

H2O', 40 | 'HELP_MARKDOWN_TEXT_SUPERSCRIPT_QUESTION' => 'Creando superíndices', 41 | 'HELP_MARKDOWN_TEXT_SUPERSCRIPT_ANSWER' => 'Para crear superíndices, agregue ^ antes del texto, ej.
2^n
se convertirá

2n', 42 | 'HELP_MARKDOWN_TEXT_HEADER_QUESTION' => 'Creando encabezados', 43 | 'HELP_MARKDOWN_TEXT_HEADER_ANSWER' => 'Para crear encabezados, agregue de 1 a 6 # seguidos por un espacio antes del texto. Cuanto mayor sea el número, más pequeño será el texto, ej.
# H1
## H2
### H3
#### H4
##### H5
###### H6
se convertirá

H1

H2

H3

H4

H5
H6
', 44 | 45 | 'HELP_MARKDOWN_BLOCK_CODE' => 'Citando texto y mostrando texto de ancho fijo', 46 | 'HELP_MARKDOWN_QUOTE_QUESTION' => 'Citando texto en respuestas', 47 | 'HELP_MARKDOWN_QUOTE_ANSWER' => 'Para citar texto, agregue > y opcionalmente un espacio antes de la línea de texto, ej.
> Texto citado
se convertirá

Texto citado

', 48 | 'HELP_MARKDOWN_CODE_QUESTION' => 'Mostrando código', 49 | 'HELP_MARKDOWN_CODE_ANSWER' => 'Para mostrar código, enciérrelo entre un par de ``` o ~~~, o alternativamente agregue 4 espacios en blanco antes de cada línea. También puede especificar el lenguaje en el primer marcador, ej.
```ruby
puts "Hola #{usuario}!"
```
se convertirá

Código: Seleccionar todo

puts "Hello #{user}!"
', 50 | 'HELP_MARKDOWN_CODE_INLINE_QUESTION' => 'Mostrando código en línea', 51 | 'HELP_MARKDOWN_CODE_INLINE_ANSWER' => 'Para mostrar código en línea, enciérrelo entre un par de ` o ``, ej.
tag `<div>`
o
tag ``<div>``
se convertirá

tag <div>', 52 | 53 | 'HELP_MARKDOWN_BLOCK_TABLE' => 'Generando tablas', 54 | 'HELP_MARKDOWN_TABLE_QUESTION' => 'Creando tablas', 55 | 'HELP_MARKDOWN_TABLE_ANSWER' => 'Para crear tablas, agregue una línea de texto dividido con | que serán los encabezados de la tabla, luego en una nueva línea con - y opcionalmente : a la izquierda, en ambos lados o a la derecha para alinear el texto de esa columna, nuevamente dividido con |. Todas las líneas sucesivas divididas con | serán mostradas como filas de la tabla, e.g.
| Izquierda | Centro | Derecha |
|:----------|:------:|--------:|
| x | x | x |
o
Izquierda|Centro|Derecha
:-|:-:|-:
x|x|x
se convertirá

IzquierdaCentroDerecha
xxx
', 56 | 57 | 'HELP_MARKDOWN_BLOCK_SPOILER' => 'Generando spoilers', 58 | 'HELP_MARKDOWN_BLOCK_SPOILER_QUESTION' => 'Creando spoilers de bloque', 59 | 'HELP_MARKDOWN_BLOCK_SPOILER_ANSWER' => 'Para crear un spoiler de bloque, agregue >! y opcionalmente un espacio antes de la línea de texto. Líneas subsecuentes pueden iniciar con >, ej.
>! Texto de spoiler
> Otra línea
se convertirá

Texto de spoiler
Otra línea

', 60 | 'HELP_MARKDOWN_INLINE_SPOILER_QUESTION' => 'Creando spoilers en línea', 61 | 'HELP_MARKDOWN_INLINE_SPOILER_ANSWER' => 'Para crear un spoiler en línea, encierre el texto dentro de >! y !< o entre un par de ||, ej.
Este es un >!spoiler!< al estilo de Reddit.
Este es un ||spoiler|| al estilo de Discord.
se convertirá

Este es un spoiler al estilo de Reddit.
Este es un spoiler al estilo de Discord.

', 62 | 63 | 'HELP_MARKDOWN_BLOCK_LIST' => 'Generando listas', 64 | 'HELP_MARKDOWN_UNORDERED_LIST_QUESTION' => 'Creando lista desordenada', 65 | 'HELP_MARKDOWN_UNORDERED_LIST_ANSWER' => 'Para crear una lista desordenada, agregue *, - o + seguido por un espacio antes de cada elemento de la lista. Las listas pueden ser anidadas añadiendo 4 espacios adicionales o un tabulador para crear un subnivel, ej.
- Elemento
- Subelemento
- Elemento
se convertirá

', 66 | 'HELP_MARKDOWN_ORDERED_LIST_QUESTION' => 'Creando lista ordenada', 67 | 'HELP_MARKDOWN_ORDERED_LIST_ANSWER' => 'Para crear una lista ordenada, agregue un dígito seguido por un punto y un espacio, ej.
1. Elemento
1. Subelemento
2. Elemento
se convertirá

  1. Elemento
    1. Subelemento
  2. Elemento
', 68 | 'HELP_MARKDOWN_TASK_LIST_QUESTION' => 'Creando una lista de tareas', 69 | 'HELP_MARKDOWN_TASK_LIST_ANSWER' => 'Para crear una lista de tareas, agregue *, - o + seguido por un espacio, ya sea [x] o [ ], y otro espacio antes de cada elemento de la lista. Los caracteres [x] y [ ] mostrarán una casilla marcada y desmarcada, respectivamente, ej.
- [x] Elemento
- [x] Subelemento
- [ ] Elemento
se convertirá

', 70 | 71 | 'HELP_MARKDOWN_BLOCK_LINK' => 'Creando enlaces', 72 | 'HELP_MARKDOWN_LINK_QUESTION' => 'Creando un enlace a otro sitio', 73 | 'HELP_MARKDOWN_LINK_ANSWER' => 'Para crear enlaces, agregue el texto del enlace entre corchetes seguido por la URL del enlace entre paréntesis, ej.
[Texto del enlace](http://example.org)
se convertirá

Texto del enlace', 74 | 75 | 'HELP_MARKDOWN_BLOCK_IMAGE' => 'Mostrando imágenes', 76 | 'HELP_MARKDOWN_IMAGE_QUESTION' => 'Agregando imágenes', 77 | 'HELP_MARKDOWN_IMAGE_ANSWER' => 'Para mostrar una imagen, agregue un signo de exclamación seguido por el texto alternativo de la imagen entre corchetes y luego la URL de la imagen entre paréntesis, ej.
![phpBB](https://www.phpbb.com/assets/images/images/logos/blue/160x52.png)
se convertirá

phpBB', 78 | 79 | 'HELP_MARKDOWN_BLOCK_EXTRA' => 'Extras', 80 | 'HELP_MARKDOWN_HORIZONTAL_RULE_QUESTION' => 'Creando reglas horizontales', 81 | 'HELP_MARKDOWN_HORIZONTAL_RULE_ANSWER' => 'Para crear una regla horizontal, agregue al menos 3 *, - o _ opcionalmente separados con un espacio, ej.
***
* * *
---
- - -
___
_ _ _
se convertirá


' 82 | ]); 83 | -------------------------------------------------------------------------------- /language/es/posting.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | /** 11 | * @ignore 12 | */ 13 | if (!defined('IN_PHPBB')) { 14 | exit; 15 | } 16 | 17 | /** 18 | * @ignore 19 | */ 20 | if (empty($lang) || !is_array($lang)) { 21 | $lang = []; 22 | } 23 | 24 | $lang = array_merge($lang, [ 25 | 'MARKDOWN_STATUS_FORMAT' => 'Markdown está %2$s', 26 | 'MARKDOWN_IS_ON' => 'habilitado', 27 | 'MARKDOWN_IS_OFF' => 'deshabilitado', 28 | 'DISABLE_MARKDOWN' => 'Deshabilitar Markdown' 29 | ]); 30 | -------------------------------------------------------------------------------- /language/es/ucp/markdown.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | /** 11 | * @ignore 12 | */ 13 | if (!defined('IN_PHPBB')) { 14 | exit; 15 | } 16 | 17 | /** 18 | * @ignore 19 | */ 20 | if (empty($lang) || !is_array($lang)) { 21 | $lang = []; 22 | } 23 | 24 | $lang = array_merge($lang, [ 25 | 'DEFAULT_MARKDOWN' => 'Habilitar Markdown por defecto' 26 | ]); 27 | -------------------------------------------------------------------------------- /language/es_x_tu/acp/info_acp_markdown.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | /** 11 | * @ignore 12 | */ 13 | if (!defined('IN_PHPBB')) { 14 | exit; 15 | } 16 | 17 | /** 18 | * @ignore 19 | */ 20 | if (empty($lang) || !is_array($lang)) { 21 | $lang = []; 22 | } 23 | 24 | $lang = array_merge($lang, [ 25 | 'ALLOW_MARKDOWN' => 'Permitir Markdown', 26 | 'ALLOW_POST_MARKDOWN' => 'Permitir Markdown en mensajes', 27 | 'ALLOW_PM_MARKDOWN' => 'Permitir Markdown en mensajes privados', 28 | 'ALLOW_SIG_MARKDOWN' => 'Permitir Markdown en la firma del usuario' 29 | ]); 30 | -------------------------------------------------------------------------------- /language/es_x_tu/acp/permissions_markdown.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | /** 11 | * @ignore 12 | */ 13 | if (!defined('IN_PHPBB')) { 14 | exit; 15 | } 16 | 17 | /** 18 | * @ignore 19 | */ 20 | if (empty($lang) || !is_array($lang)) { 21 | $lang = []; 22 | } 23 | 24 | $lang = array_merge($lang, [ 25 | 'ACL_F_MARKDOWN' => 'Puede usar Markdown', 26 | 'ACL_U_POST_MARKDOWN' => 'Puede usar Markdown', 27 | 'ACL_U_PM_MARKDOWN' => 'Puede usar Markdown en mensajes privados', 28 | 'ACL_U_SIG_MARKDOWN' => 'Puede usar Markdown en la firma del usuario' 29 | ]); 30 | -------------------------------------------------------------------------------- /language/es_x_tu/help/markdown.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | /** 11 | * @ignore 12 | */ 13 | if (!defined('IN_PHPBB')) { 14 | exit; 15 | } 16 | 17 | /** 18 | * @ignore 19 | */ 20 | if (empty($lang) || !is_array($lang)) { 21 | $lang = []; 22 | } 23 | 24 | $lang = array_merge($lang, [ 25 | 'MARKDOWN_GUIDE' => 'Guía Markdown', 26 | 27 | 'HELP_MARKDOWN_BLOCK_INTRO' => 'Introducción', 28 | 'HELP_MARKDOWN_INTRO_MARKDOWN_QUESTION' => '¿Qué es Markdown?', 29 | 'HELP_MARKDOWN_INTRO_MARKDOWN_ANSWER' => 'Markdown es un lenguaje de marcado ligero con sintaxis de formato en texto plano dirigido a escritores web. Te permite escribir fácilmente texto, sin necesidad o ayuda de herramientas externas o interfaz de usuario, que será convertido a HTML sin perder legibilidad. Markdown puede usar en lugar de o junto a texto formateado con BBCode.', 30 | 31 | 'HELP_MARKDOWN_BLOCK_TEXT' => 'Formato de texto', 32 | 'HELP_MARKDOWN_TEXT_BOLD_QUESTION' => 'Creando texto en negritas', 33 | 'HELP_MARKDOWN_TEXT_BOLD_ANSWER' => 'Para crear texto en negritas, enciérralo entre un par de ** o __, ej.
**Hola**
o
__Hola__
se convertirá

Hola', 34 | 'HELP_MARKDOWN_TEXT_ITALIC_QUESTION' => 'Creando texto en cursiva', 35 | 'HELP_MARKDOWN_TEXT_ITALIC_ANSWER' => 'Para crear texto en cursiva, enciérralo entre un par de * o _, ej.
*Genial!*
o
_Genial!_
se convertirá

Genial!', 36 | 'HELP_MARKDOWN_TEXT_STRIKETHROUGH_QUESTION' => 'Creando texto tachado', 37 | 'HELP_MARKDOWN_TEXT_STRIKETHROUGH_ANSWER' => 'Para tachar texto, enciérralo entre un par de ~~, ej.
~~Buenos días~~
se convertirá

Buenos días', 38 | 'HELP_MARKDOWN_TEXT_SUBSCRIPT_QUESTION' => 'Creando subíndices', 39 | 'HELP_MARKDOWN_TEXT_SUBSCRIPT_ANSWER' => 'Para crear subíndices, enciérralo entre un par de ~, ej.
H~2~O
se convertirá

H2O', 40 | 'HELP_MARKDOWN_TEXT_SUPERSCRIPT_QUESTION' => 'Creando superíndices', 41 | 'HELP_MARKDOWN_TEXT_SUPERSCRIPT_ANSWER' => 'Para crear superíndices, agrega ^ antes del texto, ej.
2^n
se convertirá

2n', 42 | 'HELP_MARKDOWN_TEXT_HEADER_QUESTION' => 'Creando encabezados', 43 | 'HELP_MARKDOWN_TEXT_HEADER_ANSWER' => 'Para crear encabezados, agrega de 1 a 6 # seguidos por un espacio antes del texto. Cuanto mayor sea el número, más pequeño será el texto, ej.
# H1
## H2
### H3
#### H4
##### H5
###### H6
se convertirá

H1

H2

H3

H4

H5
H6
', 44 | 45 | 'HELP_MARKDOWN_BLOCK_CODE' => 'Citando texto y mostrando texto de ancho fijo', 46 | 'HELP_MARKDOWN_QUOTE_QUESTION' => 'Citando texto en respuestas', 47 | 'HELP_MARKDOWN_QUOTE_ANSWER' => 'Para citar texto, agrega > y opcionalmente un espacio antes de la línea de texto, ej.
> Texto citado
se convertirá

Texto citado

', 48 | 'HELP_MARKDOWN_CODE_QUESTION' => 'Mostrando código', 49 | 'HELP_MARKDOWN_CODE_ANSWER' => 'Para mostrar código, enciérralo entre un par de ``` o ~~~, o alternativamente agrega 4 espacios en blanco antes de cada línea. También puedes especificar el lenguaje en el primer marcador, ej.
```ruby
puts "Hola #{usuario}!"
```
se convertirá

Code: Seleccionar todo

puts "Hello #{user}!"
', 50 | 'HELP_MARKDOWN_CODE_INLINE_QUESTION' => 'Mostrando código en línea', 51 | 'HELP_MARKDOWN_CODE_INLINE_ANSWER' => 'Para mostrar código en línea, enciérralo entre un par de ` o ``, ej.
tag `<div>`
o
tag ``<div>``
se convertirá

tag <div>', 52 | 53 | 'HELP_MARKDOWN_BLOCK_TABLE' => 'Generando tablas', 54 | 'HELP_MARKDOWN_TABLE_QUESTION' => 'Creando tablas', 55 | 'HELP_MARKDOWN_TABLE_ANSWER' => 'Para crear tablas, agrega una línea de texto dividido con | que serán los encabezados de la tabla, luego en una nueva línea con - y opcionalmente : a la izquierda, en ambos lados o a la derecha para alinear el texto de esa columna, nuevamente dividido con |. Todas las líneas sucesivas divididas con | serán mostradas como filas de la tabla, e.g.
| Izquierda | Centro | Derecha |
|:----------|:------:|--------:|
| x | x | x |
o
Izquierda|Centro|Derecha
:-|:-:|-:
x|x|x
se convertirá

IzquierdaCentroDerecha
xxx
', 56 | 57 | 'HELP_MARKDOWN_BLOCK_SPOILER' => 'Generando spoilers', 58 | 'HELP_MARKDOWN_BLOCK_SPOILER_QUESTION' => 'Creando spoilers de bloque', 59 | 'HELP_MARKDOWN_BLOCK_SPOILER_ANSWER' => 'Para crear un spoiler de bloque, agrega >! y opcionalmente un espacio antes de la línea de texto. Líneas subsecuentes pueden iniciar con >, ej.
>! Texto de spoiler
> Otra línea
se convertirá

Texto de spoiler
Otra línea

', 60 | 'HELP_MARKDOWN_INLINE_SPOILER_QUESTION' => 'Creando spoilers en línea', 61 | 'HELP_MARKDOWN_INLINE_SPOILER_ANSWER' => 'Para crear un spoiler en línea, encierra el texto dentro de >! y !< o entre un par de ||, ej.
Este es un >!spoiler!< al estilo de Reddit.
Este es un ||spoiler|| al estilo de Discord.
se convertirá

Este es un spoiler al estilo de Reddit.
Este es un spoiler al estilo de Discord.

', 62 | 63 | 'HELP_MARKDOWN_BLOCK_LIST' => 'Generando listas', 64 | 'HELP_MARKDOWN_UNORDERED_LIST_QUESTION' => 'Creando lista desordenada', 65 | 'HELP_MARKDOWN_UNORDERED_LIST_ANSWER' => 'Para crear una lista desordenada, agrega *, - o + seguido por un espacio antes de cada elemento de la lista. Las listas pueden ser anidadas añadiendo 4 espacios adicionales o un tabulador para crear un subnivel, ej.
- Elemento
- Subelemento
- Elemento
se convertirá

', 66 | 'HELP_MARKDOWN_ORDERED_LIST_QUESTION' => 'Creando lista ordenada', 67 | 'HELP_MARKDOWN_ORDERED_LIST_ANSWER' => 'Para crear una lista ordenada, agrega un dígito seguido por un punto y un espacio, ej.
1. Elemento
1. Subelemento
2. Elemento
se convertirá

  1. Elemento
    1. Subelemento
  2. Elemento
', 68 | 'HELP_MARKDOWN_TASK_LIST_QUESTION' => 'Creando una lista de tareas', 69 | 'HELP_MARKDOWN_TASK_LIST_ANSWER' => 'Para crear una lista de tareas, agrega *, - o + seguido por un espacio, ya sea [x] o [ ], y otro espacio antes de cada elemento de la lista. Los caracteres [x] y [ ] mostrarán una casilla marcada y desmarcada, respectivamente, ej.
- [x] Elemento
- [x] Subelemento
- [ ] Elemento
se convertirá

', 70 | 71 | 'HELP_MARKDOWN_BLOCK_LINK' => 'Creando enlaces', 72 | 'HELP_MARKDOWN_LINK_QUESTION' => 'Creando un enlace a otro sitio', 73 | 'HELP_MARKDOWN_LINK_ANSWER' => 'Para crear enlaces, agrega el texto del enlace entre corchetes seguido por la URL del enlace entre paréntesis, ej.
[Texto del enlace](http://example.org)
se convertirá

Texto del enlace', 74 | 75 | 'HELP_MARKDOWN_BLOCK_IMAGE' => 'Mostrando imágenes', 76 | 'HELP_MARKDOWN_IMAGE_QUESTION' => 'Agregando imágenes', 77 | 'HELP_MARKDOWN_IMAGE_ANSWER' => 'Para mostrar una imagen, agrega un signo de exclamación seguido por el texto alternativo de la imagen entre corchetes y luego la URL de la imagen entre paréntesis, ej.
![phpBB](https://www.phpbb.com/assets/images/images/logos/blue/160x52.png)
se convertirá

phpBB', 78 | 79 | 'HELP_MARKDOWN_BLOCK_EXTRA' => 'Extras', 80 | 'HELP_MARKDOWN_HORIZONTAL_RULE_QUESTION' => 'Creando reglas horizontales', 81 | 'HELP_MARKDOWN_HORIZONTAL_RULE_ANSWER' => 'Para crear una regla horizontal, agrega al menos 3 *, - o _ opcionalmente separados con un espacio, ej.
***
* * *
---
- - -
___
_ _ _
se convertirá


' 82 | ]); 83 | -------------------------------------------------------------------------------- /language/es_x_tu/posting.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | /** 11 | * @ignore 12 | */ 13 | if (!defined('IN_PHPBB')) { 14 | exit; 15 | } 16 | 17 | /** 18 | * @ignore 19 | */ 20 | if (empty($lang) || !is_array($lang)) { 21 | $lang = []; 22 | } 23 | 24 | $lang = array_merge($lang, [ 25 | 'MARKDOWN_STATUS_FORMAT' => 'Markdown está %2$s', 26 | 'MARKDOWN_IS_ON' => 'habilitado', 27 | 'MARKDOWN_IS_OFF' => 'deshabilitado', 28 | 'DISABLE_MARKDOWN' => 'Deshabilitar Markdown' 29 | ]); 30 | -------------------------------------------------------------------------------- /language/es_x_tu/ucp/markdown.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | /** 11 | * @ignore 12 | */ 13 | if (!defined('IN_PHPBB')) { 14 | exit; 15 | } 16 | 17 | /** 18 | * @ignore 19 | */ 20 | if (empty($lang) || !is_array($lang)) { 21 | $lang = []; 22 | } 23 | 24 | $lang = array_merge($lang, [ 25 | 'DEFAULT_MARKDOWN' => 'Habilitar Markdown por defecto' 26 | ]); 27 | -------------------------------------------------------------------------------- /language/fr/acp/info_acp_markdown.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | /** 11 | * @ignore 12 | */ 13 | if (!defined('IN_PHPBB')) { 14 | exit; 15 | } 16 | 17 | /** 18 | * @ignore 19 | */ 20 | if (empty($lang) || !is_array($lang)) { 21 | $lang = []; 22 | } 23 | 24 | $lang = array_merge($lang, [ 25 | 'ALLOW_MARKDOWN' => 'Autoriser le Markdown', 26 | 'ALLOW_POST_MARKDOWN' => 'Autoriser le Markdown dans les messages', 27 | 'ALLOW_PM_MARKDOWN' => 'Autoriser le Markdown dans les messages privés', 28 | 'ALLOW_SIG_MARKDOWN' => 'Autoriser le Markdown dans les signatures' 29 | ]); 30 | -------------------------------------------------------------------------------- /language/fr/acp/permissions_markdown.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | /** 11 | * @ignore 12 | */ 13 | if (!defined('IN_PHPBB')) { 14 | exit; 15 | } 16 | 17 | /** 18 | * @ignore 19 | */ 20 | if (empty($lang) || !is_array($lang)) { 21 | $lang = []; 22 | } 23 | 24 | $lang = array_merge($lang, [ 25 | 'ACL_F_MARKDOWN' => 'Peut-utiliser Markdown', 26 | 'ACL_U_POST_MARKDOWN' => 'Peut-utiliser Markdown', 27 | 'ACL_U_PM_MARKDOWN' => 'Peut-utiliser Markdown dans les messages privés', 28 | 'ACL_U_SIG_MARKDOWN' => 'Peut-utiliser Markdown dans la signature' 29 | ]); 30 | -------------------------------------------------------------------------------- /language/fr/help/markdown.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | /** 11 | * @ignore 12 | */ 13 | if (!defined('IN_PHPBB')) { 14 | exit; 15 | } 16 | 17 | /** 18 | * @ignore 19 | */ 20 | if (empty($lang) || !is_array($lang)) { 21 | $lang = []; 22 | } 23 | 24 | $lang = array_merge($lang, [ 25 | 'MARKDOWN_GUIDE' => 'Guide Markdown', 26 | 27 | 'HELP_MARKDOWN_BLOCK_INTRO' => 'Introduction', 28 | 'HELP_MARKDOWN_INTRO_MARKDOWN_QUESTION' => 'Le Markdown c\'est quoi?', 29 | 'HELP_MARKDOWN_INTRO_MARKDOWN_ANSWER' => 'Markdown est un langage de balisage léger avec une syntaxe de formatage de texte brut destiné aux rédacteurs web. Il vous permet d\'écrire facilement du texte, sans besoin ou aide d\'outils externes ou d\'une interface utilisateur, qui sera ensuite formaté en HTML tout en conservant sa lisibilité. Markdown peut être utilisé à la place ou en conjonction avec un texte formaté avec BBCode.', 30 | 31 | 'HELP_MARKDOWN_BLOCK_TEXT' => 'Mise en forme du texte', 32 | 'HELP_MARKDOWN_TEXT_BOLD_QUESTION' => 'Création d\'un texte en gras', 33 | 'HELP_MARKDOWN_TEXT_BOLD_ANSWER' => 'Pour mettre un texte en gras, il suffit de l\'entourer d\'une paire d\'éléments de type ** ou __, exemple:
**Bonjour**
ou
__Bonjour__
vont devenir

Bonjour', 34 | 'HELP_MARKDOWN_TEXT_ITALIC_QUESTION' => 'Création d\'un texte en italique', 35 | 'HELP_MARKDOWN_TEXT_ITALIC_ANSWER' => 'Pour mettre un texte en italique, il suffit de l\'entourer d\'une paire de symboles * ou _, exemple:
*Super!*
ou
_Super!_
vont devenir

Super!', 36 | 'HELP_MARKDOWN_TEXT_STRIKETHROUGH_QUESTION' => 'Création d\'un texte barré', 37 | 'HELP_MARKDOWN_TEXT_STRIKETHROUGH_ANSWER' => 'Pour barrer un texte, il suffit de l\'entourer d\'une paire de symboles ~~, exemple:
~~Bonne matinée~~
va devenir

Bonne matinée', 38 | 'HELP_MARKDOWN_TEXT_SUBSCRIPT_QUESTION' => 'Création d\'un texte en indice', 39 | 'HELP_MARKDOWN_TEXT_SUBSCRIPT_ANSWER' => 'Pour créer un texte en indice, il suffit de l\'entourer d\'une paire de symboles ~, exemple:
H~2~O
va devenir

H2O', 40 | 'HELP_MARKDOWN_TEXT_SUPERSCRIPT_QUESTION' => 'Création d\'un texte en exposant', 41 | 'HELP_MARKDOWN_TEXT_SUPERSCRIPT_ANSWER' => 'Pour créer un texte en exposant, ajoutez ^ avant le texte, exemple:
2^n
va devenir

2n', 42 | 'HELP_MARKDOWN_TEXT_HEADER_QUESTION' => 'Création d\'en-têtes', 43 | 'HELP_MARKDOWN_TEXT_HEADER_ANSWER' => 'Pour créer des en-têtes, ajoutez de 1 à 6 # suivi d\'un espace avant le texte. Plus le nombre est élevé, plus le texte est petit, exemple:
# H1
## H2
### H3
#### H4
##### H5
###### H6
vont devenir

H1

H2

H3

H4

H5
H6
', 44 | 45 | 'HELP_MARKDOWN_BLOCK_CODE' => 'Citation et édition d\'un texte à largeur fixe', 46 | 'HELP_MARKDOWN_QUOTE_QUESTION' => 'Citation de texte dans les réponses', 47 | 'HELP_MARKDOWN_QUOTE_ANSWER' => 'Pour citer du texte ajoutez > et éventuellement un espace avant la ligne de texte, exemple:
> Texte cité
va devenir

Texte cité

', 48 | 'HELP_MARKDOWN_CODE_QUESTION' => 'Affichage de code', 49 | 'HELP_MARKDOWN_CODE_ANSWER' => 'Pour afficher du code, il suffit de l\'entourer d\'une paire de symbole ``` ou ~~~, ou ajouter 4 espaces vides avant chaque ligne. Vous pouvez également spécifier la langue dans le premier marqueur, exemple:
```ruby
puts "Bonjour #{user}!"
```
va devenir

Code: Tout sélectionner

puts "Bonjour #{user}!"
', 50 | 'HELP_MARKDOWN_CODE_INLINE_QUESTION' => 'Affichage de code en ligne', 51 | 'HELP_MARKDOWN_CODE_INLINE_ANSWER' => 'Pour produire du code en ligne, il faut l\'entourer d\'une paire d\'éléments ` ou ``, exemple:
`<div>` tag
ou
``<div>`` tag
vont devenir

<div> tag', 52 | 53 | 'HELP_MARKDOWN_BLOCK_TABLE' => 'Générer des tableaux', 54 | 'HELP_MARKDOWN_TABLE_QUESTION' => 'Création de tableaux', 55 | 'HELP_MARKDOWN_TABLE_ANSWER' => 'Pour créer des tableaux, ajoutez une ligne de texte divisée par | qui sera l\'en-tête du tableau, puis une nouvelle ligne avec - et éventuellement : à gauche, sur les deux côtés ou à droite pour aligner le texte de cette colonne, à nouveau divisée par des |. Toutes les lignes successives divisées par | seront affichées sous forme de lignes de tableau, exemple:
| Gauche | Centre | Droite |
|:-----|:------:|------:|
| x | x | x |
ou
Gauche|Centre|Droite
:-|:-:|-:
x|x|x
vont devenir

GaucheCentreDroite
xxx
', 56 | 57 | 'HELP_MARKDOWN_BLOCK_SPOILER' => 'Générer des spoilers', 58 | 'HELP_MARKDOWN_BLOCK_SPOILER_QUESTION' => 'Créer des blocs de spoilers', 59 | 'HELP_MARKDOWN_BLOCK_SPOILER_ANSWER' => 'Pour créer un bloc de spoilers, ajoutez >! et éventuellement un espace avant la ligne de texte. Les lignes suivantes peuvent être démarrées avec >, exemple:
>! Texte caché
> Une autre ligne
va devenir

Texte caché
Une autre ligne

', 60 | 'HELP_MARKDOWN_INLINE_SPOILER_QUESTION' => 'Création de spoilers en ligne', 61 | 'HELP_MARKDOWN_INLINE_SPOILER_ANSWER' => 'Pour créer un spoiler en ligne, placez le texte à l\'intérieur de >! et !< ou à l\'intérieur d\'une paire de ||, exemple:
Ceci est un spoiler (Reddit-style) >!spoiler!<.
Ceci est un spoiler (Discord-style)||spoiler||.
va devenir

Ceci est un (Reddit-style) spoiler.
Ceci est un (Discord-style) spoiler.

', 62 | 63 | 'HELP_MARKDOWN_BLOCK_LIST' => 'Générer des listes', 64 | 'HELP_MARKDOWN_UNORDERED_LIST_QUESTION' => 'Création d\'une liste non ordonnée', 65 | 'HELP_MARKDOWN_UNORDERED_LIST_ANSWER' => 'Pour créer une liste non ordonnée, ajoutez *, - ou + suivi d\'un espace avant chaque élément de la liste. Les listes peuvent être imbriquées en ajoutant 4 espaces supplémentaires ou une tabulation pour créer un sous-niveau., exemple:
- Element
- Subelement
- Element
va devenir

', 66 | 'HELP_MARKDOWN_ORDERED_LIST_QUESTION' => 'Création d\'une liste ordonnée', 67 | 'HELP_MARKDOWN_ORDERED_LIST_ANSWER' => 'Pour créer une liste ordonnée, ajoutez un chiffre suivi d\'un point et d\'un espace, exemple:
1. Element
1. Subelement
2. Element
va devenir

  1. Element
    1. Subelement
  2. Element
', 68 | 'HELP_MARKDOWN_TASK_LIST_QUESTION' => 'Création d\'une liste de tâches', 69 | 'HELP_MARKDOWN_TASK_LIST_ANSWER' => 'Pour créer une liste de tâches, ajoutez *, - ou + suivi d\'un espace, soit [x] ou [ ], et un autre espace avant chaque élément de la liste. Les [x] et [ ] affichent respectivement une case cochée et une case non cochée, exemple:
- [x] Element
- [x] Subelement
- [ ] Element
vont devenir

', 70 | 71 | 'HELP_MARKDOWN_BLOCK_LINK' => 'Créer des liens', 72 | 'HELP_MARKDOWN_LINK_QUESTION' => 'Lien vers un autre site', 73 | 'HELP_MARKDOWN_LINK_ANSWER' => 'Pour créer des liens, ajoutez le texte du lien entre crochets, suivi de l\'URL du lien entre parenthèses., exemple:
[Google](http://google.fr)
va devenir

Google', 74 | 75 | 'HELP_MARKDOWN_BLOCK_IMAGE' => 'Afficher des images', 76 | 'HELP_MARKDOWN_IMAGE_QUESTION' => 'Ajouter des images', 77 | 'HELP_MARKDOWN_IMAGE_ANSWER' => 'Pour afficher une image, ajoutez un point d\'exclamation suivi du texte alternatif de l\'image entre crochets et de l\'URL de l\'image entre parenthèses, exemple:
![Image](https://picsum.photos/160/52)
va devenir

Image', 78 | 79 | 'HELP_MARKDOWN_BLOCK_EXTRA' => 'Extras', 80 | 'HELP_MARKDOWN_HORIZONTAL_RULE_QUESTION' => 'Création de règles horizontales', 81 | 'HELP_MARKDOWN_HORIZONTAL_RULE_ANSWER' => 'Pour créer une règle horizontale, ajoutez au moins 3 *, - ou _ éventuellement séparés par un espace, exemple:
***
* * *
---
- - -
___
_ _ _
va devenir


' 82 | ]); 83 | -------------------------------------------------------------------------------- /language/fr/posting.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | /** 11 | * @ignore 12 | */ 13 | if (!defined('IN_PHPBB')) { 14 | exit; 15 | } 16 | 17 | /** 18 | * @ignore 19 | */ 20 | if (empty($lang) || !is_array($lang)) { 21 | $lang = []; 22 | } 23 | 24 | $lang = array_merge($lang, [ 25 | 'MARKDOWN_STATUS_FORMAT' => 'Markdown est %2$s', 26 | 'MARKDOWN_IS_ON' => 'Activé', 27 | 'MARKDOWN_IS_OFF' => 'Désactivé', 28 | 'DISABLE_MARKDOWN' => 'Désactiver le Markdown' 29 | ]); 30 | -------------------------------------------------------------------------------- /language/fr/ucp/markdown.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | /** 11 | * @ignore 12 | */ 13 | if (!defined('IN_PHPBB')) { 14 | exit; 15 | } 16 | 17 | /** 18 | * @ignore 19 | */ 20 | if (empty($lang) || !is_array($lang)) { 21 | $lang = []; 22 | } 23 | 24 | $lang = array_merge($lang, [ 25 | 'DEFAULT_MARKDOWN' => 'Activer le Markdown par défaut' 26 | ]); 27 | -------------------------------------------------------------------------------- /license.txt: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | 294 | Copyright (C) 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | , 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. 340 | -------------------------------------------------------------------------------- /migrations/v10x/m00_board_configuration.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | namespace alfredoramos\markdown\migrations\v10x; 11 | 12 | use phpbb\db\migration\migration; 13 | 14 | class m00_board_configuration extends migration 15 | { 16 | /** 17 | * Add Markdown configuration. 18 | * 19 | * @return array 20 | */ 21 | public function update_data() 22 | { 23 | return [ 24 | [ 25 | 'config.add', 26 | ['allow_markdown', 1] 27 | ], 28 | [ 29 | 'config.add', 30 | ['allow_post_markdown', 1] 31 | ], 32 | [ 33 | 'config.add', 34 | ['allow_pm_markdown', 1] 35 | ], 36 | [ 37 | 'config.add', 38 | ['allow_sig_markdown', 1] 39 | ] 40 | ]; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /migrations/v10x/m01_permissions.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | namespace alfredoramos\markdown\migrations\v10x; 11 | 12 | use phpbb\db\migration\migration; 13 | 14 | class m01_permissions extends migration 15 | { 16 | /** 17 | * Add Markdown permissions. 18 | * 19 | * @return array 20 | */ 21 | public function update_data() 22 | { 23 | return [ 24 | ['permission.add', ['f_markdown', false]], 25 | ['permission.permission_set', ['ROLE_FORUM_STANDARD', 'f_markdown']], 26 | ['permission.permission_set', ['ROLE_FORUM_ONQUEUE', 'f_markdown']], 27 | ['permission.permission_set', ['ROLE_FORUM_POLLS', 'f_markdown']], 28 | ['permission.permission_set', ['ROLE_FORUM_FULL', 'f_markdown']], 29 | 30 | ['permission.add', ['u_post_markdown']], 31 | ['permission.permission_set', ['ROLE_USER_STANDARD', 'u_post_markdown']], 32 | ['permission.permission_set', ['ROLE_USER_FULL', 'u_post_markdown']], 33 | ['permission.permission_set', ['ROLE_MOD_STANDARD', 'u_post_markdown']], 34 | ['permission.permission_set', ['ROLE_MOD_FULL', 'u_post_markdown']], 35 | ['permission.permission_set', ['ROLE_ADMIN_STANDARD', 'u_post_markdown']], 36 | ['permission.permission_set', ['ROLE_ADMIN_FULL', 'u_post_markdown']], 37 | ['permission.permission_set', ['REGISTERED_COPPA', 'u_post_markdown', 'group']], 38 | ['permission.permission_set', ['REGISTERED', 'u_post_markdown', 'group']], 39 | 40 | ['permission.add', ['u_pm_markdown']], 41 | ['permission.permission_set', ['ROLE_USER_STANDARD', 'u_pm_markdown']], 42 | ['permission.permission_set', ['ROLE_USER_FULL', 'u_pm_markdown']], 43 | ['permission.permission_set', ['ROLE_MOD_STANDARD', 'u_pm_markdown']], 44 | ['permission.permission_set', ['ROLE_MOD_FULL', 'u_pm_markdown']], 45 | ['permission.permission_set', ['ROLE_ADMIN_STANDARD', 'u_pm_markdown']], 46 | ['permission.permission_set', ['ROLE_ADMIN_FULL', 'u_pm_markdown']], 47 | ['permission.permission_set', ['REGISTERED_COPPA', 'u_pm_markdown', 'group']], 48 | ['permission.permission_set', ['REGISTERED', 'u_pm_markdown', 'group']], 49 | 50 | ['permission.add', ['u_sig_markdown']], 51 | ['permission.permission_set', ['ROLE_USER_STANDARD', 'u_sig_markdown']], 52 | ['permission.permission_set', ['ROLE_USER_FULL', 'u_sig_markdown']], 53 | ['permission.permission_set', ['ROLE_MOD_STANDARD', 'u_sig_markdown']], 54 | ['permission.permission_set', ['ROLE_MOD_FULL', 'u_sig_markdown']], 55 | ['permission.permission_set', ['ROLE_ADMIN_STANDARD', 'u_sig_markdown']], 56 | ['permission.permission_set', ['ROLE_ADMIN_FULL', 'u_sig_markdown']], 57 | ['permission.permission_set', ['REGISTERED_COPPA', 'u_sig_markdown', 'group']], 58 | ['permission.permission_set', ['REGISTERED', 'u_sig_markdown', 'group']] 59 | ]; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /migrations/v10x/m02_user_configuration.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | namespace alfredoramos\markdown\migrations\v10x; 11 | 12 | use phpbb\db\migration\migration; 13 | 14 | class m02_user_configuration extends migration 15 | { 16 | /** 17 | * Check configuration data exist. 18 | * 19 | * @return bool 20 | */ 21 | public function effectively_installed() 22 | { 23 | return $this->db_tools->sql_column_exists(USERS_TABLE, 'user_allow_markdown'); 24 | } 25 | 26 | /** 27 | * Add user configuration. 28 | * 29 | * @return array 30 | */ 31 | public function update_schema() 32 | { 33 | return [ 34 | 'add_columns' => [ 35 | USERS_TABLE => [ 36 | 'user_allow_markdown' => ['BOOL', 1] 37 | ] 38 | ] 39 | ]; 40 | } 41 | 42 | /** 43 | * Revert user configuration. 44 | * 45 | * @return array 46 | */ 47 | public function revert_schema() 48 | { 49 | return [ 50 | 'drop_columns' => [ 51 | USERS_TABLE => [ 52 | 'user_allow_markdown' 53 | ] 54 | ] 55 | ]; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /migrations/v13x/m00_post_configuration.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright 2019 Alfredo Ramos 7 | * @license GPL-2.0-only 8 | */ 9 | 10 | namespace alfredoramos\markdown\migrations\v13x; 11 | 12 | use phpbb\db\migration\migration; 13 | 14 | class m00_post_configuration extends migration 15 | { 16 | /** 17 | * Check if configuration data exists. 18 | * 19 | * @return bool 20 | */ 21 | public function effectively_installed() 22 | { 23 | return $this->db_tools->sql_column_exists(POSTS_TABLE, 'enable_markdown'); 24 | } 25 | 26 | /** 27 | * Add post configuration. 28 | * 29 | * @return array 30 | */ 31 | public function update_schema() 32 | { 33 | return [ 34 | 'add_columns' => [ 35 | POSTS_TABLE => [ 36 | 'enable_markdown' => ['BOOL', 1] 37 | ] 38 | ] 39 | ]; 40 | } 41 | 42 | /** 43 | * Revert post configuration. 44 | * 45 | * @return array 46 | */ 47 | public function revert_schema() 48 | { 49 | return [ 50 | 'drop_columns' => [ 51 | POSTS_TABLE => [ 52 | 'enable_markdown' 53 | ] 54 | ] 55 | ]; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /styles/all/template/event/overall_footer_body_after.html: -------------------------------------------------------------------------------- 1 | {% if S_MARKDOWN_ALLOWED and S_USER_LOGGED_IN and not S_IS_BOT and not INCLUDED_MARKDOWN_JS %} 2 | {% INCLUDEJS '@alfredoramos_markdown/js/editor.js' %} 3 | {%- set INCLUDED_MARKDOWN_JS = true -%} 4 | {% endif %} 5 | -------------------------------------------------------------------------------- /styles/all/template/event/overall_header_head_append.html: -------------------------------------------------------------------------------- 1 | {% if not INCLUDED_MARKDOWN_CSS %} 2 | {% INCLUDECSS '@alfredoramos_markdown/css/common.css' %} 3 | {% INCLUDECSS '@alfredoramos_markdown/css/style.css' %} 4 | {% INCLUDECSS '@alfredoramos_markdown/css/colors.css' %} 5 | {%- set INCLUDED_MARKDOWN_CSS = true -%} 6 | {% endif %} 7 | -------------------------------------------------------------------------------- /styles/all/template/event/posting_editor_options_prepend.html: -------------------------------------------------------------------------------- 1 | {% if S_MARKDOWN_ALLOWED %} 2 | {% include '@alfredoramos_markdown/posting_editor_option.html' ignore missing %} 3 | {% endif %} 4 | -------------------------------------------------------------------------------- /styles/all/template/event/posting_editor_smilies_after.html: -------------------------------------------------------------------------------- 1 | {% if MARKDOWN_STATUS %} 2 | {% include '@alfredoramos_markdown/markdown_status.html' ignore missing %} 3 | {% endif %} 4 | -------------------------------------------------------------------------------- /styles/all/template/event/ucp_prefs_post_prepend.html: -------------------------------------------------------------------------------- 1 | {% if S_MARKDOWN_ENABLED %} 2 | {% include '@alfredoramos_markdown/ucp_markdown.html' ignore missing %} 3 | {% endif %} 4 | -------------------------------------------------------------------------------- /styles/all/template/event/ucp_profile_signature_posting_editor_options_prepend.html: -------------------------------------------------------------------------------- 1 | {% if S_MARKDOWN_ALLOWED %} 2 | {% include '@alfredoramos_markdown/posting_editor_option.html' ignore missing %} 3 | {% endif %} 4 | -------------------------------------------------------------------------------- /styles/all/theme/css/common.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Markdown extension for phpBB. 3 | * @author Alfredo Ramos 4 | * @copyright 2019 Alfredo Ramos 5 | * @license GPL-2.0-only 6 | */ 7 | .markdown > li[data-task-id] { 8 | list-style-type: none; 9 | } 10 | .faq dd .markdown-code { 11 | margin: 1em 0; 12 | } 13 | @media (width <= 700px) { 14 | .markdown-status { 15 | display: none; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /styles/all/theme/js/editor.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Markdown extension for phpBB. 3 | * @author Alfredo Ramos 4 | * @copyright 2019 Alfredo Ramos 5 | * @license GPL-2.0-only 6 | */ 7 | 8 | (() => { 9 | 'use strict'; 10 | 11 | /** 12 | * Check if cursor is inside a Markdown code block. 13 | * 14 | * Modified version of Ben Nadel's code 15 | * https://github.com/bennadel/JavaScript-Demos/tree/master/demos/fenced-code-block-tabbing 16 | * 17 | * @param {HTMLElement} textarea Textarea DOM object to check. 18 | * 19 | * @return {bool} 20 | */ 21 | const inCodeBlock = (textarea) => { 22 | const start = textarea.selectionStart; 23 | const end = textarea.selectionEnd; 24 | const value = textarea.value.slice(start, end); 25 | 26 | if (value.indexOf('```') >= 0 || value.indexOf('~~~') >= 0) { 27 | return false; 28 | } 29 | 30 | const selectedValue = textarea.value.slice(0, start); 31 | const codeBlocksRegexp = /`{3}|~{3}/g; 32 | const codeBlocks = selectedValue.match(codeBlocksRegexp); 33 | 34 | if (codeBlocks === null) { 35 | return false; 36 | } 37 | 38 | return codeBlocks.length % 2 === 1; 39 | }; 40 | 41 | // Enable tabulations in Markdown code 42 | document.body.addEventListener('keydown', (e) => { 43 | // Event already handled 44 | if (e.defaultPrevented) { 45 | return; 46 | } 47 | 48 | // Helpers 49 | const field = e.target; 50 | const selector = 'textarea[name="message"], textarea[name="signature"]'; 51 | 52 | // Match post, private message and signature 53 | // Triggered only on Tab key press 54 | // Cursor must be inside a Markdown code block 55 | if ( 56 | !field.matches(selector) || 57 | e.key !== 'Tab' || 58 | !inCodeBlock(field) 59 | ) { 60 | return; 61 | } 62 | 63 | // Avoid lossing focus 64 | e.preventDefault(); 65 | 66 | // Get caret position 67 | const start = field.selectionStart; 68 | const end = field.selectionEnd; 69 | 70 | // Get previous value 71 | const value = field.value; 72 | 73 | // Add Tab character at caret position 74 | field.value = value.substring(0, start) + '\t' + value.substring(end); 75 | 76 | // Update caret position 77 | field.selectionStart = field.selectionEnd = start + 1; 78 | }); 79 | })(); 80 | -------------------------------------------------------------------------------- /styles/prosilver/template/markdown_status.html: -------------------------------------------------------------------------------- 1 |
2 | {% if smiley|length > 0 %}
{% endif %} 3 | {{ MARKDOWN_STATUS }} 4 |
5 | -------------------------------------------------------------------------------- /styles/prosilver/template/posting_editor_option.html: -------------------------------------------------------------------------------- 1 |
2 | 6 |
7 | -------------------------------------------------------------------------------- /styles/prosilver/template/ucp_markdown.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 |
6 | 10 | 14 |
15 |
16 | -------------------------------------------------------------------------------- /styles/prosilver/theme/css/colors.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Markdown extension for phpBB. 3 | * @author Alfredo Ramos 4 | * @copyright 2019 Alfredo Ramos 5 | * @license GPL-2.0-only 6 | */ 7 | h6.markdown, 8 | h5.markdown, 9 | h4.markdown, 10 | h3.markdown, 11 | h2.markdown, 12 | h1.markdown { 13 | color: currentcolor; 14 | } 15 | 16 | table.markdown, 17 | table.markdown th, 18 | table.markdown td { 19 | border-color: #105289; 20 | } 21 | table.markdown tr:nth-child(2n) { 22 | background-color: #eef8fb; 23 | } 24 | table.markdown thead { 25 | background-color: #105289; 26 | color: #fff; 27 | } 28 | -------------------------------------------------------------------------------- /styles/prosilver/theme/css/style.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Markdown extension for phpBB. 3 | * @author Alfredo Ramos 4 | * @copyright 2019 Alfredo Ramos 5 | * @license GPL-2.0-only 6 | */ 7 | .markdown:last-child { 8 | margin-bottom: 0; 9 | } 10 | .markdown li .markdown { 11 | margin-top: 0; 12 | } 13 | 14 | h6.markdown, 15 | h5.markdown, 16 | h4.markdown, 17 | h3.markdown, 18 | h2.markdown, 19 | h1.markdown { 20 | font-weight: bold; 21 | line-height: 1; 22 | text-transform: none; 23 | border: none; 24 | float: none !important; 25 | margin: 1em 0 !important; 26 | padding: 0; 27 | } 28 | h6.markdown:first-child, 29 | h5.markdown:first-child, 30 | h4.markdown:first-child, 31 | h3.markdown:first-child, 32 | h2.markdown:first-child, 33 | h1.markdown:first-child { 34 | margin-top: 0 !important; 35 | } 36 | h6.markdown:last-child, 37 | h5.markdown:last-child, 38 | h4.markdown:last-child, 39 | h3.markdown:last-child, 40 | h2.markdown:last-child, 41 | h1.markdown:last-child { 42 | margin-bottom: 0 !important; 43 | } 44 | 45 | h1.markdown { 46 | font-size: 2em; 47 | } 48 | 49 | h2.markdown { 50 | font-size: 1.5em; 51 | } 52 | 53 | h3.markdown { 54 | font-size: 1.17em; 55 | } 56 | 57 | h4.markdown { 58 | font-size: 1em; 59 | } 60 | 61 | h5.markdown { 62 | font-size: 0.83em; 63 | } 64 | 65 | h6.markdown { 66 | font-size: 0.67em; 67 | } 68 | 69 | table.markdown { 70 | margin-top: 1em; 71 | margin-bottom: 1em; 72 | } 73 | table.markdown, 74 | table.markdown th, 75 | table.markdown td { 76 | border-width: 1px; 77 | border-style: solid; 78 | } 79 | table.markdown th, 80 | table.markdown td { 81 | padding: 5px 10px; 82 | } 83 | 84 | .content p, 85 | .polls p, 86 | .poll-title p, 87 | .forums .list-inner p, 88 | .markdown p { 89 | font-size: 1em; 90 | } 91 | 92 | .polls p, 93 | .forums .list-inner p { 94 | display: inline-block; 95 | } 96 | 97 | .polls p, 98 | .poll-title p, 99 | .forums .list-inner p, 100 | .markdown li p { 101 | margin-bottom: 0; 102 | } 103 | 104 | .content p:last-child, 105 | .signature p:last-child, 106 | .markdown p:last-child { 107 | margin-bottom: 0; 108 | } 109 | --------------------------------------------------------------------------------