From eb81782cdbdc68aaebe4fa561b5fbb73ef866611 Mon Sep 17 00:00:00 2001 From: Mark Otto Date: Wed, 27 Apr 2011 13:53:51 -0700 Subject: Porting over all Blueprint styles to new Baseline repo --- js/global.js | 75 ++++ js/jquery/chili/css.js | 85 +++++ js/jquery/chili/html.js | 80 ++++ js/jquery/chili/jquery.chili-2.2.js | 704 ++++++++++++++++++++++++++++++++++++ js/jquery/chili/js.js | 75 ++++ js/jquery/chili/php-f.js | 142 ++++++++ js/jquery/chili/php.js | 138 +++++++ js/jquery/chili/recipes.js | 364 +++++++++++++++++++ js/jquery/jquery.tipsy.js | 104 ++++++ js/less-1.0.41.min.js | 69 ++++ 10 files changed, 1836 insertions(+) create mode 100644 js/global.js create mode 100755 js/jquery/chili/css.js create mode 100755 js/jquery/chili/html.js create mode 100755 js/jquery/chili/jquery.chili-2.2.js create mode 100755 js/jquery/chili/js.js create mode 100755 js/jquery/chili/php-f.js create mode 100755 js/jquery/chili/php.js create mode 100755 js/jquery/chili/recipes.js create mode 100644 js/jquery/jquery.tipsy.js create mode 100644 js/less-1.0.41.min.js (limited to 'js') diff --git a/js/global.js b/js/global.js new file mode 100644 index 000000000..a934a3360 --- /dev/null +++ b/js/global.js @@ -0,0 +1,75 @@ +$(document).ready(function(){ + // Get Heights + windowHeight = $(window).height(); + documentHeight = $(document).height(); + sidebarHeight = windowHeight - 40; + containerHeight = windowHeight - 40; + + // Get Widths + windowWidth = $(window).width(); + containerWidth = windowWidth - 200; + + if (windowHeight < containerHeight) { + + // Set Dimensions for default state (before resize) + $('div#sidebar').css({ + height: sidebarHeight + }); + $('div#container').css({ + width: containerWidth, + height: containerHeight + }); + + } else { + + // During resize, set widths + $(window).resize(function() { + console.log('Window Height: ' + $(window).height() + ', Sidebar Height:' + ($(window).height() - 40)); + + // Get Heights + windowHeight = $(window).height(); + sidebarHeight = windowHeight - 40; + containerHeight = windowHeight - 40; + + // Get Widths + windowWidth = $(window).width(); + containerWidth = windowWidth - 200; + + // Set Dimensions for default state (before resize) + $('div#sidebar').css({ + height: sidebarHeight + }); + $('div#container').css({ + width: containerWidth, + height: containerHeight + }); + }); + // console.log('omgz window is less than container so... fuck.'); + $('div#sidebar').css({ + height: documentHeight - 40 + }); + + } + + + +/* + // Toggle Calendars + $('div#sidebar ul li a').click(function() { + if ($(this).is('#toggleMonthView')) { + console.log('toggle month'); + $(this).addClass('active'); + $('#toggleListView').removeClass('active'); + $('table#monthView').show(); + $('table#listView').hide(); + } else { + console.log('toggle list'); + $(this).addClass('active'); + $('#toggleMonthView').removeClass('active'); + $('table#listView').show(); + $('table#monthView').hide(); + } + return false; + }); +*/ +}); diff --git a/js/jquery/chili/css.js b/js/jquery/chili/css.js new file mode 100755 index 000000000..e86e88224 --- /dev/null +++ b/js/jquery/chili/css.js @@ -0,0 +1,85 @@ +/* +=============================================================================== +Chili is the jQuery code highlighter plugin +............................................................................... +LICENSE: http://www.opensource.org/licenses/mit-license.php +WEBSITE: http://noteslog.com/chili/ + + Copyright 2008 / Andrea Ercolino +=============================================================================== +*/ + +{ + _name: 'css' + , _case: true + , _main: { + comment: { + _match: /\/\*[^*]*\*+(?:[^\/][^*]*\*+)*\// + , _style: "color: olive;" + } + , directive: { + _match: /@\w+/ + , _style: "color: fuchsia;" + } + , url: { + _match: /\b(url\s*\()([^)]+)(\))/ + , _replace: "$1$2$3" + , _style: "color: fuchsia;" + } + , block: { + _match: /\{([\w\W]*?)\}/ + , _replace: function( all, pairs ) { + return '{' + this.x( pairs, '/definition' ) + '}'; + } + } + , 'class': { + _match: /\.\w+/ + , _style: "color: #CC0066;" + } + , id: { + _match: /#\w+/ + , _style: "color: IndianRed;" + } + , pseudo: { + _match: /:\w+/ + , _style: "color: #CC9900;" + } + , element: { + _match: /\w+/ + , _style: "color: Purple;" + } + } + , definition: { + comment: { + _match: /\/\*[^*]*\*+(?:[^\/][^*]*\*+)*\// + } + , property: { + _match: /\b(?:zoom|z-index|writing-mode|word-wrap|word-spacing|word-break|width|widows|white-space|volume|voice-family|visibility|vertical-align|unicode-bidi|top|text-underline-position|text-transform|text-shadow|text-overflow|text-kashida-space|text-justify|text-indent|text-decoration|text-autospace|text-align-last|text-align|table-layout|stress|speech-rate|speak-punctuation|speak-numeral|speak-header|speak|size|scrollbar-track-color|scrollbar-shadow-color|scrollbar-highlight-color|scrollbar-face-color|scrollbar-dark-shadow-color|scrollbar-base-color|scrollbar-arrow-color|scrollbar-3d-light-color|ruby-position|ruby-overhang|ruby-align|right|richness|quotes|position|play-during|pitch-range|pitch|pause-before|pause-after|pause|page-break-inside|page-break-before|page-break-after|page|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-Y|overflow-X|overflow|outline-width|outline-style|outline-color|outline|orphans|min-width|min-height|max-width|max-height|marks|marker-offset|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|line-break|letter-spacing|left|layout-grid-type|layout-grid-mode|layout-grid-line|layout-grid-char-spacing|layout-grid-char|layout-grid|layout-flow|layer-background-image|layer-background-color|include-source|ime-mode|height|font-weight|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-family|font|float|filter|empty-cells|elevation|display|direction|cursor|cue-before|cue-after|cue|counter-reset|counter-increment|content|color|clip|clear|caption-side|bottom|border-width|border-top-width|border-top-style|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-left-width|border-left-style|border-left-color|border-left|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-color|border-bottom|border|behavior|background-repeat|background-position-y|background-position-x|background-position|background-image|background-color|background-attachment|background|azimuth|accelerator)\s*:/ + , _style: "color: #330066;" + } + , special: { + _match: /\b(?:-use-link-source|-set-link-source|-replace|-moz-user-select|-moz-user-modify|-moz-user-input|-moz-user-focus|-moz-outline-width|-moz-outline-style|-moz-outline-color|-moz-outline|-moz-opacity|-moz-border-top-colors|-moz-border-right-colors|-moz-border-radius-topright|-moz-border-radius-topleft|-moz-border-radius-bottomright|-moz-border-radius-bottomleft|-moz-border-radius|-moz-border-left-colors|-moz-border-bottom-colors|-moz-binding)\s*:/ + , _style: "color: #330066; text-decoration: underline;" + } + , url: { + _match: /\b(url\s*\()([^)]+)(\))/ + , _replace: "$1$2$3" + } + , value: { + _match: /\b(?:xx-small|xx-large|x-soft|x-small|x-slow|x-low|x-loud|x-large|x-high|x-fast|wider|wait|w-resize|visible|url|uppercase|upper-roman|upper-latin|upper-alpha|underline|ultra-expanded|ultra-condensed|tv|tty|transparent|top|thin|thick|text-top|text-bottom|table-row-group|table-row|table-header-group|table-footer-group|table-column-group|table-column|table-cell|table-caption|sw-resize|super|sub|status-bar|static|square|spell-out|speech|solid|soft|smaller|small-caption|small-caps|small|slower|slow|silent|show|separate|semi-expanded|semi-condensed|se-resize|scroll|screen|s-resize|run-in|rtl|rightwards|right-side|right|ridge|rgb|repeat-y|repeat-x|repeat|relative|projection|print|pre|portrait|pointer|overline|outside|outset|open-quote|once|oblique|nw-resize|nowrap|normal|none|no-repeat|no-open-quote|no-close-quote|ne-resize|narrower|n-resize|move|mix|middle|message-box|medium|marker|ltr|lowercase|lower-roman|lower-latin|lower-greek|lower-alpha|lower|low|loud|local|list-item|line-through|lighter|level|leftwards|left-side|left|larger|large|landscape|justify|italic|invert|inside|inset|inline-table|inline|icon|higher|high|hide|hidden|help|hebrew|handheld|groove|format|fixed|faster|fast|far-right|far-left|fantasy|extra-expanded|extra-condensed|expanded|embossed|embed|e-resize|double|dotted|disc|digits|default|decimal-leading-zero|decimal|dashed|cursive|crosshair|cross|crop|counters|counter|continuous|condensed|compact|collapse|code|close-quote|circle|center-right|center-left|center|caption|capitalize|braille|bottom|both|bolder|bold|block|blink|bidi-override|below|behind|baseline|avoid|auto|aural|attr|armenian|always|all|absolute|above)\b/ + , _style: "color: #3366FF;" + } + , string: { + _match: /(?:\'[^\'\\\n]*(?:\\.[^\'\\\n]*)*\')|(?:\"[^\"\\\n]*(?:\\.[^\"\\\n]*)*\")/ + , _style: "color: teal;" + } + , number: { + _match: /(?:\b[+-]?(?:\d*\.?\d+|\d+\.?\d*))(?:%|(?:(?:px|pt|em|)\b))/ + , _style: "color: red;" + } + , color : { + _match: /(?:\#[a-fA-F0-9]{3,6})|\b(?:yellow|white|teal|silver|red|purple|olive|navy|maroon|lime|green|gray|fuchsia|blue|black|aqua|YellowGreen|Yellow|WhiteSmoke|White|Wheat|Violet|Turquoise|Tomato|Thistle|Teal|Tan|SteelBlue|SpringGreen|Snow|SlateGrey|SlateGray|SlateBlue|SkyBlue|Silver|Sienna|SeaShell|SeaGreen|SandyBrown|Salmon|SaddleBrown|RoyalBlue|RosyBrown|Red|Purple|PowderBlue|Plum|Pink|Peru|PeachPuff|PapayaWhip|PaleVioletRed|PaleTurquoise|PaleGreen|PaleGoldenRod|Orchid|OrangeRed|Orange|OliveDrab|Olive|OldLace|Navy|NavajoWhite|Moccasin|MistyRose|MintCream|MidnightBlue|MediumVioletRed|MediumTurquoise|MediumSpringGreen|MediumSlateBlue|MediumSeaGreen|MediumPurple|MediumOrchid|MediumBlue|MediumAquaMarine|Maroon|Magenta|Linen|LimeGreen|Lime|LightYellow|LightSteelBlue|LightSlateGrey|LightSlateGray|LightSkyBlue|LightSeaGreen|LightSalmon|LightPink|LightGrey|LightGreen|LightGray|LightGoldenRodYellow|LightCyan|LightCoral|LightBlue|LemonChiffon|LawnGreen|LavenderBlush|Lavender|Khaki|Ivory|Indigo|IndianRed|HotPink|HoneyDew|Grey|GreenYellow|Green|Gray|GoldenRod|Gold|GhostWhite|Gainsboro|Fuchsia|ForestGreen|FloralWhite|FireBrick|DodgerBlue|DimGrey|DimGray|DeepSkyBlue|DeepPink|Darkorange|DarkViolet|DarkTurquoise|DarkSlateGrey|DarkSlateGray|DarkSlateBlue|DarkSeaGreen|DarkSalmon|DarkRed|DarkOrchid|DarkOliveGreen|DarkMagenta|DarkKhaki|DarkGrey|DarkGreen|DarkGray|DarkGoldenRod|DarkCyan|DarkBlue|Cyan|Crimson|Cornsilk|CornflowerBlue|Coral|Chocolate|Chartreuse|CadetBlue|BurlyWood|Brown|BlueViolet|Blue|BlanchedAlmond|Black|Bisque|Beige|Azure|Aquamarine|Aqua|AntiqueWhite|AliceBlue)\b/ + , _style: "color: green;" + } + } +} diff --git a/js/jquery/chili/html.js b/js/jquery/chili/html.js new file mode 100755 index 000000000..69f43a86d --- /dev/null +++ b/js/jquery/chili/html.js @@ -0,0 +1,80 @@ +/* +=============================================================================== +Chili is the jQuery code highlighter plugin +............................................................................... +LICENSE: http://www.opensource.org/licenses/mit-license.php +WEBSITE: http://noteslog.com/chili/ + + Copyright 2008 / Andrea Ercolino +=============================================================================== +*/ + +{ + _name: 'html' + , _case: false + , _main: { + doctype: { + _match: // + , _style: "color: #CC6600;" + } + , ie_style: { + _match: /()/ + , _replace: function( all, open, content, close ) { + return "" + this.x( open ) + "" + + this.x( content, '//style' ) + + "" + this.x( close ) + ""; + } + , _style: "color: DarkSlateGray; font-weight: bold;" + } + , comment: { + _match: // + , _style: "color: #4040c2;" + } + , script: { + _match: /(]*>)([\w\W]*?)(<\/script\s*>)/ + , _replace: function( all, open, content, close ) { + return this.x( open, '//tag_start' ) + + this.x( content, 'js' ) + + this.x( close, '//tag_end' ); + } + } + , style: { + _match: /(]*>)([\w\W]*?)(<\/style\s*>)/ + , _replace: function( all, open, content, close ) { + return this.x( open, '//tag_start' ) + + this.x( content, 'css' ) + + this.x( close, '//tag_end' ); + } + } + // matches a starting tag of an element (with attrs) + // like "
" or "" + , tag_start: { + _match: /(<\w+)((?:[?%]>|[\w\W])*?)(\/>|>)/ + , _replace: function( all, open, content, close ) { + return "" + this.x( open ) + "" + + this.x( content, '/tag_attrs' ) + + "" + this.x( close ) + ""; + } + , _style: "color: navy; font-weight: bold;" + } + // matches an ending tag + // like "
" + , tag_end: { + _match: /<\/\w+\s*>|\/>/ + , _style: "color: navy;" + } + , entity: { + _match: /&\w+?;/ + , _style: "color: blue;" + } + } + , tag_attrs: { + // matches a name/value pair + attr: { + // before in $1, name in $2, between in $3, value in $4 + _match: /(\W*?)([\w-]+)(\s*=\s*)((?:\'[^\']*(?:\\.[^\']*)*\')|(?:\"[^\"]*(?:\\.[^\"]*)*\"))/ + , _replace: "$1$2$3$4" + , _style: { attr_name: "color: green;", attr_value: "color: maroon;" } + } + } +} diff --git a/js/jquery/chili/jquery.chili-2.2.js b/js/jquery/chili/jquery.chili-2.2.js new file mode 100755 index 000000000..bb0e4abae --- /dev/null +++ b/js/jquery/chili/jquery.chili-2.2.js @@ -0,0 +1,704 @@ +/* +=============================================================================== +Chili is the jQuery code highlighter plugin +............................................................................... +LICENSE: http://www.opensource.org/licenses/mit-license.php +WEBSITE: http://noteslog.com/chili/ + + Copyright 2008 / Andrea Ercolino +=============================================================================== +*/ + + +( function($) { + +ChiliBook = { //implied global + + version: "2.2" // 2008-07-06 + +// options -------------------------------------------------------------------- + + , automatic: true + , automaticSelector: "pre" + + , lineNumbers: !true + + , codeLanguage: function( el ) { + var recipeName = $( el ).attr( "class" ); + return recipeName ? recipeName : ''; + } + + , recipeLoading: true + , recipeFolder: "" // used like: recipeFolder + recipeName + '.js' + + // IE and FF convert   to " ", Safari and Opera do not + , replaceSpace: " " + , replaceTab: "    " + , replaceNewLine: " 
" + + , selectionStyle: [ "position:absolute; z-index:3000; overflow:scroll;" + , "width:16em;" + , "height:9em;" + , "border:1px solid gray;" + , "padding:15px;" + , "background-color:yellow;" + ].join( ' ' ) + +// ------------------------------------------------------------- end of options + + , defaultReplacement: '$$' // TODO: make this an option again + , recipes: {} //repository + , queue: {} //registry + + , unique: function() { + return (new Date()).valueOf(); + } +}; + + + +$.fn.chili = function( options ) { + var book = $.extend( {}, ChiliBook, options || {} ); + + function cook( ingredients, recipe, blockName ) { + + function prepareBlock( recipe, blockName ) { + var steps = []; + for( var stepName in recipe[ blockName ] ) { + steps.push( prepareStep( recipe, blockName, stepName ) ); + } + return steps; + } // prepareBlock + + function prepareStep( recipe, blockName, stepName ) { + var step = recipe[ blockName ][ stepName ]; + var exp = ( typeof step._match == "string" ) ? step._match : step._match.source; + return { + recipe: recipe + , blockName: blockName + , stepName: stepName + , exp: "(" + exp + ")" + , length: 1 // add 1 to account for the newly added parentheses + + (exp // count number of submatches in here + .replace( /\\./g, "%" ) // disable any escaped character + .replace( /\[.*?\]/g, "%" ) // disable any character class + .match( /\((?!\?)/g ) // match any open parenthesis, not followed by a ? + || [] // make sure it is an empty array if there are no matches + ).length // get the number of matches + , replacement: step._replace ? step._replace : book.defaultReplacement + }; + } // prepareStep + + function knowHow( steps ) { + var prevLength = 1; + var exps = []; + for (var i = 0; i < steps.length; i++) { + var exp = steps[ i ].exp; + // adjust backreferences + exp = exp.replace( /\\\\|\\(\d+)/g, function( m, aNum ) { + return !aNum ? m : "\\" + ( prevLength + 1 + parseInt( aNum, 10 ) ); + } ); + exps.push( exp ); + prevLength += steps[ i ].length; + } + var prolog = '((?:\\s|\\S)*?)'; + var epilog = '((?:\\s|\\S)+)'; + var source = '(?:' + exps.join( "|" ) + ')'; + source = prolog + source + '|' + epilog; + return new RegExp( source, recipe._case ? "g" : "gi" ); + } // knowHow + + function escapeHTML( str ) { + return str.replace( /&/g, "&" ).replace( /' + filter( subject ) + ''; + } + return filter( subject ); + } + else { + return filter( subject ); + } + } + } // applyModule + + function addPrefix( prefix, replacement ) { + var aux = replacement.replace( /()/ig, "$1" + prefix + "__$3" ); + return aux; + } // addPrefix + + function chef() { + if (! arguments[ 0 ]) { + return ''; + } + var steps = this.steps; + var i = 0; // iterate steps + var j = 2; // iterate chef's arguments + var prolog = arguments[ 1 ]; + var epilog = arguments[ arguments.length - 3 ]; + if (! epilog) { + var step; + while( step = steps[ i++ ] ) { + var aux = arguments; // this unmasks chef's arguments inside the next function + if( aux[ j ] ) { + var replacement = ''; + if( $.isFunction( step.replacement ) ) { + var matches = []; //Array.slice.call( aux, j, step.length ); + for (var k = 0, kTop = step.length; k < kTop; k++) { + matches.push( aux[ j + k ] ); + } + matches.push( aux[ aux.length - 2 ] ); + matches.push( aux[ aux.length - 1 ] ); + replacement = step.replacement + .apply( { + x: function() { + var subject = arguments[0]; + var module = arguments[1]; + var context = { + recipe: step.recipe + , blockName: step.blockName + }; + return applyModule( subject, module, context ); + } + }, matches ); + } + else { //we expect step.replacement to be a string + replacement = step.replacement + .replace( /(\\\$)|(?:\$\$)|(?:\$(\d+))/g, function( m, escaped, K ) { + if( escaped ) { /* \$ */ + return "$"; + } + else if( !K ) { /* $$ */ + return filter( aux[ j ] ); + } + else if( K == "0" ) { /* $0 */ + return step.stepName; + } + else { /* $K */ + return filter( aux[ j + parseInt( K, 10 ) ] ); + } + } ); + } + replacement = addPrefix( step.recipe._name, replacement ); + return filter( prolog ) + replacement; + } + else { + j+= step.length; + } + } + } + else { + return filter( epilog ); + } + } // chef + + if( ! blockName ) { + blockName = '_main'; + checkSpices( recipe ); + } + if( ! (blockName in recipe) ) { + return filter( ingredients ); + } + var replaceSpace = book.replaceSpace; + var steps = prepareBlock( recipe, blockName ); + var kh = knowHow( steps ); + var perfect = ingredients.replace( kh, function() { + return chef.apply( { steps: steps }, arguments ); + } ); + return perfect; + + } // cook + + function loadStylesheetInline( sourceCode ) { + if( document.createElement ) { + var e = document.createElement( "style" ); + e.type = "text/css"; + if( e.styleSheet ) { // IE + e.styleSheet.cssText = sourceCode; + } + else { + var t = document.createTextNode( sourceCode ); + e.appendChild( t ); + } + document.getElementsByTagName( "head" )[0].appendChild( e ); + } + } // loadStylesheetInline + + function checkSpices( recipe ) { + var name = recipe._name; + if( ! book.queue[ name ] ) { + + var content = ['/* Chili -- ' + name + ' */']; + for (var blockName in recipe) { + if( blockName.search( /^_(?!main\b)/ ) < 0 ) { + for (var stepName in recipe[ blockName ]) { + var step = recipe[ blockName ][ stepName ]; + if( '_style' in step ) { + if( step[ '_style' ].constructor == String ) { + content.push( '.' + name + '__' + stepName + ' { ' + step[ '_style' ] + ' }' ); + } + else { + for (var className in step[ '_style' ]) { + content.push( '.' + name + '__' + className + ' { ' + step[ '_style' ][ className ] + ' }' ); + } + } + } + } + } + } + content = content.join('\n'); + + loadStylesheetInline( content ); + + book.queue[ name ] = true; + } + } // checkSpices + + function askDish( el ) { + var recipeName = book.codeLanguage( el ); + if( '' != recipeName ) { + var path = getPath( recipeName ); + if( book.recipeLoading ) { + /* dynamic setups come here */ + if( ! book.queue[ path ] ) { + /* this is a new recipe to download */ + try { + book.queue[ path ] = [ el ]; + $.getJSON( path, function( recipeLoaded ) { + book.recipes[ path ] = recipeLoaded; + var q = book.queue[ path ]; + for( var i = 0, iTop = q.length; i < iTop; i++ ) { + makeDish( q[ i ], path ); + } + } ); + } + catch( recipeNotAvailable ) { + alert( "the recipe for '" + recipeName + "' was not found in '" + path + "'" ); + } + } + else { + /* not a new recipe, so just enqueue this element */ + book.queue[ path ].push( el ); + } + /* a recipe could have been already downloaded */ + makeDish( el, path ); + } + else { + /* static setups come here */ + makeDish( el, path ); + } + } + } // askDish + + function makeDish( el, recipePath ) { + var recipe = book.recipes[ recipePath ]; + if( ! recipe ) { + return; + } + var $el = $( el ); + var ingredients = $el.text(); + if( ! ingredients ) { + return; + } + + //fix for msie: \r (13) is used instead of \n (10) + //fix for opera: \r\n is used instead of \n + ingredients = ingredients.replace(/\r\n?/g, "\n"); + + //reverse fix for safari: msie, mozilla and opera render the initial \n + if( $el.parent().is('pre') ) { + if( ! $.browser.safari ) { + ingredients = ingredients.replace(/^\n/g, ""); + } + } + + var dish = cook( ingredients, recipe ); // all happens here + + if( book.replaceTab ) { + dish = dish.replace( /\t/g, book.replaceTab ); + } + if( book.replaceNewLine ) { + dish = dish.replace( /\n/g, book.replaceNewLine ); + } + + el.innerHTML = dish; //much faster than $el.html( dish ); + //tried also the function replaceHtml from http://blog.stevenlevithan.com/archives/faster-than-innerhtml + //but it was not faster nor without sideffects (it was not possible to count spans into el) + + //opera and safari select PRE text correctly + if( $.browser.msie || $.browser.mozilla ) { + enableSelectionHelper( el ); + } + + var $that = $el.parent(); + var classes = $that.attr( 'class' ); + var ln = /ln-(\d+)-([\w][\w\-]*)|ln-(\d+)|ln-/.exec( classes ); + if( ln ) { + addLineNumbers( el ); + var start = 0; + if( ln[1] ) { + start = parseInt( ln[1], 10 ); + var $pieces = $( '.ln-' + ln[1] + '-' + ln[2] ); + var pos = $pieces.index( $that[0] ); + $pieces.slice( 0, pos ).each( function() { + start += $( this ).find( 'li' ).length; + } ); + } + else if( ln[3] ) { + start = parseInt( ln[3], 10 ); + } + else { + start = 1; + } + $el.find( 'ol' )[0].start = start; + $('body').width( $('body').width() - 1 ).width( $('body').width() + 1 ); + } + else if( book.lineNumbers ) { + addLineNumbers( el ); + } + + } // makeDish + + function enableSelectionHelper( el ) { + var element = null; + $( el ) + .parents() + .filter( "pre" ) + .bind( "mousedown", function() { + element = this; + if( $.browser.msie ) { + document.selection.empty(); + } + else { + window.getSelection().removeAllRanges(); + } + } ) + .bind( "mouseup", function( event ) { + if( element && (element == this) ) { + element = null; + var selected = ''; + if( $.browser.msie ) { + selected = document.selection.createRange().htmlText; + if( '' == selected ) { + return; + } + selected = preserveNewLines( selected ); + var container_tag = '