mirror of
https://github.com/discourse/discourse.git
synced 2024-12-12 03:56:18 +08:00
130 lines
4.1 KiB
JavaScript
130 lines
4.1 KiB
JavaScript
/*!
|
|
* jQuery replaceText - v1.1 - 11/21/2009
|
|
* http://benalman.com/projects/jquery-replacetext-plugin/
|
|
*
|
|
* Copyright (c) 2009 "Cowboy" Ben Alman
|
|
* Dual licensed under the MIT and GPL licenses.
|
|
* http://benalman.com/about/license/
|
|
*/
|
|
|
|
// Script: jQuery replaceText: String replace for your jQueries!
|
|
//
|
|
// *Version: 1.1, Last updated: 11/21/2009*
|
|
//
|
|
// Project Home - http://benalman.com/projects/jquery-replacetext-plugin/
|
|
// GitHub - http://github.com/cowboy/jquery-replacetext/
|
|
// Source - http://github.com/cowboy/jquery-replacetext/raw/master/jquery.ba-replacetext.js
|
|
// (Minified) - http://github.com/cowboy/jquery-replacetext/raw/master/jquery.ba-replacetext.min.js (0.5kb)
|
|
//
|
|
// About: License
|
|
//
|
|
// Copyright (c) 2009 "Cowboy" Ben Alman,
|
|
// Dual licensed under the MIT and GPL licenses.
|
|
// http://benalman.com/about/license/
|
|
//
|
|
// About: Examples
|
|
//
|
|
// This working example, complete with fully commented code, illustrates one way
|
|
// in which this plugin can be used.
|
|
//
|
|
// replaceText - http://benalman.com/code/projects/jquery-replacetext/examples/replacetext/
|
|
//
|
|
// About: Support and Testing
|
|
//
|
|
// Information about what version or versions of jQuery this plugin has been
|
|
// tested with, and what browsers it has been tested in.
|
|
//
|
|
// jQuery Versions - 1.3.2, 1.4.1
|
|
// Browsers Tested - Internet Explorer 6-8, Firefox 2-3.6, Safari 3-4, Chrome, Opera 9.6-10.1.
|
|
//
|
|
// About: Release History
|
|
//
|
|
// 1.1 - (11/21/2009) Simplified the code and API substantially.
|
|
// 1.0 - (11/21/2009) Initial release
|
|
|
|
(function($){
|
|
'$:nomunge'; // Used by YUI compressor.
|
|
|
|
// Method: jQuery.fn.replaceText
|
|
//
|
|
// Replace text in specified elements. Note that only text content will be
|
|
// modified, leaving all tags and attributes untouched. The new text can be
|
|
// either text or HTML.
|
|
//
|
|
// Uses the String prototype replace method, full documentation on that method
|
|
// can be found here:
|
|
//
|
|
// https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/String/Replace
|
|
//
|
|
// Usage:
|
|
//
|
|
// > jQuery('selector').replaceText( search, replace [, text_only ] );
|
|
//
|
|
// Arguments:
|
|
//
|
|
// search - (RegExp|String) A RegExp object or substring to be replaced.
|
|
// Because the String prototype replace method is used internally, this
|
|
// argument should be specified accordingly.
|
|
// replace - (String|Function) The String that replaces the substring received
|
|
// from the search argument, or a function to be invoked to create the new
|
|
// substring. Because the String prototype replace method is used internally,
|
|
// this argument should be specified accordingly.
|
|
// text_only - (Boolean) If true, any HTML will be rendered as text. Defaults
|
|
// to false.
|
|
//
|
|
// Returns:
|
|
//
|
|
// (jQuery) The initial jQuery collection of elements.
|
|
|
|
$.fn.replaceText = function( search, replace, text_only ) {
|
|
return this.each(function(){
|
|
var node = this.firstChild,
|
|
val,
|
|
new_val,
|
|
|
|
// Elements to be removed at the end.
|
|
remove = [];
|
|
|
|
// Only continue if firstChild exists.
|
|
if ( node ) {
|
|
|
|
// Loop over all childNodes.
|
|
do {
|
|
|
|
// Only process text nodes.
|
|
if ( node.nodeType === 3 ) {
|
|
|
|
// The original node value.
|
|
val = node.nodeValue;
|
|
|
|
// The new value.
|
|
new_val = val.replace( search, replace );
|
|
|
|
// Only replace text if the new value is actually different!
|
|
if ( new_val !== val ) {
|
|
|
|
if ( !text_only && /</.test( new_val ) ) {
|
|
// The new value contains HTML, set it in a slower but far more
|
|
// robust way.
|
|
$(node).before( new_val );
|
|
|
|
// Don't remove the node yet, or the loop will lose its place.
|
|
remove.push( node );
|
|
} else {
|
|
// The new value contains no HTML, so it can be set in this
|
|
// very fast, simple way.
|
|
node.nodeValue = new_val;
|
|
}
|
|
}
|
|
}
|
|
|
|
} while ( node = node.nextSibling );
|
|
}
|
|
|
|
// Time to remove those elements!
|
|
remove.length && $(remove).remove();
|
|
});
|
|
};
|
|
|
|
})(jQuery);
|