mirror of
				https://github.com/Mibew/design.git
				synced 2025-10-31 10:31:05 +03:00 
			
		
		
		
	Add several Handlebars helpers
Add 'apply', 'formatTime' and 'nl2br' Handlebars helpers. Also add QUnit tests for 'apply' helper.
This commit is contained in:
		
							parent
							
								
									36c8e6c042
								
							
						
					
					
						commit
						83636a02ef
					
				| @ -20,5 +20,11 @@ | ||||
|         <script type="text/javascript" src="/webim/js/164/pluginmanager.js"></script> | ||||
|         <script type="text/javascript" src="test_cases/pluginmanager_tests.js"></script> | ||||
|         <!-- End of the mibew_api.js class tests --> | ||||
| 
 | ||||
|         <!-- Start of Handlebars' helpers tests --> | ||||
|         <script type="text/javascript" src="/webim/js/164/handlebars.js"></script> | ||||
|         <script type="text/javascript" src="/webim/js/164/handlebars_helpers.js"></script> | ||||
|         <script type="text/javascript" src="test_cases/handlebars_helpers_tests.js"></script> | ||||
|         <!-- Start of Handlebars' helpers tests --> | ||||
|     </body> | ||||
| </html> | ||||
|  | ||||
| @ -0,0 +1,73 @@ | ||||
| // Testing Handlebars helpers
 | ||||
| module('Handlebars helpers'); | ||||
| 
 | ||||
| // Register test emphasis helper
 | ||||
| Handlebars.registerHelper('emTestHelper', function(text) { | ||||
|     return new Handlebars.SafeString('<em>' + text + '</em>'); | ||||
| }); | ||||
| 
 | ||||
| // Register test strong helper
 | ||||
| Handlebars.registerHelper('strongTestHelper', function(text) { | ||||
|     return new Handlebars.SafeString('<strong>' + text + '</strong>'); | ||||
| }); | ||||
| 
 | ||||
| // Test 'apply' Handlebars helper
 | ||||
| test('apply', function() { | ||||
|     // Test application of two valid helpers to text.
 | ||||
|     // There are no spaces before or after comma.
 | ||||
|     var template = '{{apply text "emTestHelper,strongTestHelper"}}'; | ||||
|     var compiledTemplate = Handlebars.compile(template); | ||||
|     var output = compiledTemplate({text: "some_text"}); | ||||
|     equal( | ||||
|         output, | ||||
|         '<strong><em>some_text</em></strong>', | ||||
|         'Test two valid helpers' | ||||
|     ); | ||||
| 
 | ||||
|     // Test application of two valid helpers in reverse order to text.
 | ||||
|     // There are no spaces before or after comma.
 | ||||
|     template = '{{apply text "strongTestHelper,emTestHelper"}}'; | ||||
|     compiledTemplate = Handlebars.compile(template); | ||||
|     output = compiledTemplate({text: "some_text"}); | ||||
|     equal( | ||||
|         output, | ||||
|         '<em><strong>some_text</strong></em>', | ||||
|         'Test two valid helpers in reverse order' | ||||
|     ); | ||||
| 
 | ||||
|     // Test application of two valid helpers to text.
 | ||||
|     // There are some spaces before and after comma.
 | ||||
|     template = '{{apply text "emTestHelper ,   strongTestHelper"}}'; | ||||
|     compiledTemplate = Handlebars.compile(template); | ||||
|     output = compiledTemplate({text: "some_text"}); | ||||
|     equal( | ||||
|         output, | ||||
|         '<strong><em>some_text</em></strong>', | ||||
|         'Test two valid helpers with some spaces before and after comma' | ||||
|     ); | ||||
| 
 | ||||
|     // Test application of one valid helper and one with wrong name to text.
 | ||||
|     // There are no spaces before or after comma.
 | ||||
|     template = '{{apply text "emTestHelper,$strongTestHelper"}}'; | ||||
|     compiledTemplate = Handlebars.compile(template); | ||||
|     output = compiledTemplate({text: "some_text"}); | ||||
|     equal( | ||||
|         output, | ||||
|         '<em>some_text</em>', | ||||
|         'Test one valid helper and one with wrong name' | ||||
|     ); | ||||
| 
 | ||||
|     // Test application of one valid helper and one unregistered helper to text.
 | ||||
|     // There are no spaces before or after comma.
 | ||||
|     template = '{{apply text "emTestHelper,unregisteredTestHelper"}}'; | ||||
|     compiledTemplate = Handlebars.compile(template); | ||||
|     try { | ||||
|         output = compiledTemplate({text: "some_text"}); | ||||
|     } catch(e) { | ||||
|         equal( | ||||
|             e.message, | ||||
|             "Unregistered helper 'unregisteredTestHelper'!", | ||||
|             'Test one valid helper and one unregistered helper' | ||||
|         ); | ||||
|     } | ||||
| }); | ||||
							
								
								
									
										9
									
								
								src/messenger/webim/js/164/handlebars_helpers.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								src/messenger/webim/js/164/handlebars_helpers.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| /* | ||||
|  This file is part of Mibew Messenger project. | ||||
|  http://mibew.org
 | ||||
| 
 | ||||
|  Copyright (c) 2005-2011 Mibew Messenger Community | ||||
|  License: http://mibew.org/license.php
 | ||||
| */ | ||||
| Handlebars.registerHelper("apply",function(b,a){var c=b,e=/^[0-9A-z_]+$/,a=a.split(/\s*,\s*/),d;for(d in a)if(a.hasOwnProperty(d)&&e.test(a[d])){if("function"!=typeof Handlebars.helpers[a[d]])throw Error("Unregistered helper '"+a[d]+"'!");c=Handlebars.helpers[a[d]](c)}return new Handlebars.SafeString(c)}); | ||||
| Handlebars.registerHelper("formatTime",function(b){var a=new Date(1E3*b),b=a.getHours().toString(),c=a.getMinutes().toString(),a=a.getSeconds().toString();return(10<b?b:"0"+b)+":"+(10<c?c:"0"+c)+":"+(10<a?a:"0"+a)});Handlebars.registerHelper("urlReplace",function(b){return new Handlebars.SafeString(b.replace(/((?:https?|ftp):\/\/\S*)/g,'<a href="$1" target="_blank">$1</a>'))});Handlebars.registerHelper("nl2br",function(b){return new Handlebars.SafeString(b.replace(/\n/g,"<br/>"))}); | ||||
							
								
								
									
										75
									
								
								src/messenger/webim/js/source/handlebars_helpers.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								src/messenger/webim/js/source/handlebars_helpers.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,75 @@ | ||||
| /** | ||||
|  * @preserve This file is part of Mibew Messenger project. | ||||
|  * http://mibew.org
 | ||||
|  * | ||||
|  * Copyright (c) 2005-2011 Mibew Messenger Community | ||||
|  * License: http://mibew.org/license.php
 | ||||
|  */ | ||||
| 
 | ||||
| /** | ||||
|  * Register 'apply' Handlebars helper. | ||||
|  * | ||||
|  * This helper provide an ability to apply several helpers to single Handlebars | ||||
|  * expression | ||||
|  */ | ||||
| Handlebars.registerHelper('apply', function(text, helpers) { | ||||
|     var result = text; | ||||
|     var validHelperName = /^[0-9A-z_]+$/; | ||||
|     helpers = helpers.split(/\s*,\s*/); | ||||
|     for (var prop in helpers) { | ||||
|         if (! helpers.hasOwnProperty(prop) || | ||||
|             ! validHelperName.test(helpers[prop])) { | ||||
|             continue; | ||||
|         } | ||||
|         if (typeof Handlebars.helpers[helpers[prop]] != 'function') { | ||||
|             throw new Error( | ||||
|                 "Unregistered helper '" + helpers[prop] + "'!" | ||||
|             ); | ||||
|         } | ||||
|         result = Handlebars.helpers[helpers[prop]](result); | ||||
|     } | ||||
|     return new Handlebars.SafeString(result); | ||||
| }); | ||||
| 
 | ||||
| /** | ||||
|  * Register 'formatTime' Handlebars helper. | ||||
|  * | ||||
|  * This helper takes unix timestamp as argument and return time in "HH:MM:SS" | ||||
|  * format | ||||
|  */ | ||||
| Handlebars.registerHelper('formatTime', function(unixTimestamp){ | ||||
|     var d = new Date(unixTimestamp * 1000); | ||||
|     // Get time parts
 | ||||
|     var hours = d.getHours().toString(); | ||||
|     var minutes = d.getMinutes().toString(); | ||||
|     var seconds = d.getSeconds().toString(); | ||||
|     // Add leading zero if needed
 | ||||
|     hours = hours > 10 ? hours : '0' + hours; | ||||
|     minutes = minutes > 10 ? minutes : '0' + minutes; | ||||
|     seconds = seconds > 10 ? seconds : '0' + seconds; | ||||
|     // Build result string
 | ||||
|     return hours + ':' + minutes + ':' + seconds; | ||||
| }); | ||||
| 
 | ||||
| /** | ||||
|  * Register 'urlReplace' Handlebars helper. | ||||
|  * | ||||
|  * This helper serch URLs and replace them by 'a' tag | ||||
|  */ | ||||
| Handlebars.registerHelper('urlReplace', function(text) { | ||||
|     return new Handlebars.SafeString( | ||||
|         text.replace( | ||||
|             /((?:https?|ftp):\/\/\S*)/g, | ||||
|             '<a href="$1" target="_blank">$1</a>' | ||||
|         ) | ||||
|     ); | ||||
| }); | ||||
| 
 | ||||
| /** | ||||
|  * Register 'nl2br' Handlebars helper. | ||||
|  * | ||||
|  * This helper replace all new line characters (\n) by 'br' tags | ||||
|  */ | ||||
| Handlebars.registerHelper('nl2br', function(text) { | ||||
|     return new Handlebars.SafeString(text.replace(/\n/g, "<br/>")); | ||||
| }); | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user