Code Block Toolbar 1.0

Created Sunday 31st of August 2008 by Andreas Lagerkvist
Copyright © 2008 Andreas Lagerkvist (andreaslagerkvist.com)

What it Does

If you post code-examples on your site you can use this plug-in to add some nifty buttons below each code-example that allows the user to, for example, switch to plain text or increase the font-size.

How to Use

jQuery('p.code-block').codeBlockToolbar(); Would add the toolbar to every paragraph with a class of 'code-block'.

Example

I'm a piece of example-code
I should have some buttons beneath me if JS is enabled.

Example Code

HTML

<div id="jquery-code-block-toolbar-example">
<
class="code">
    <
code>
        
I'm a piece of example-code<br />
        I should have some buttons beneath me if JS is enabled.
    </code>
</p>
</div>

JS

jQuery('#jquery-code-block-toolbar-example p.code').codeBlockToolbar();

Source Code

jQuery.fn.codeBlockToolbar = function (conf) {
    var 
config jQuery.extend({
        
className:        'jquery-code-block-toolbar'
        
increaseText:    'Increase code font-size'
        
decreaseText:    'Decrease code font-size'
        
expandText:        'Expand code-block'
        
textareaText:    'Switch to textarea'
        
textareaText2:    'Switch back'
        
    
}, conf);

    return 
this.each(function () {
        var 
codeBlock        jQuery(this);
        var 
cbMaxHeight        parseInt(codeBlock.css('max-height'), 10);
        var 
cbHeight        codeBlock.outerHeight();
        var 
cbHTML            codeBlock.html();
        var 
cbText            codeBlock.html().replace(/\n/ig'').replace(/<br.*/ig, '\n').replace(/<.*/ig, '');
        var ul                = jQuery('<ul class="' + config.className + '"></ul>').insertAfter(codeBlock);
        var textarea        = jQuery('<p><textarea rows="4" cols="60" class="' 
                                + config.className 
                                + '" style="height: ' 
                                + (cbHeight - 10) 
                                + 'px;">' 
                                + cbText 
                                + '</textarea></p>').insertAfter(codeBlock).hide();

        jQuery('<li class="increase"><a href="#">' + config.increaseText + '</a></li>').appendTo(ul).find('a').click(function () {
            codeBlock.css('font-size', parseFloat(codeBlock.css('font-size'), 10) * 1.2);

            return false;
        });

        jQuery('<li class="decrease"><a href="#">' + config.decreaseText + '</a></li>').appendTo(ul).find('a').click(function () {
            codeBlock.css('font-size', parseFloat(codeBlock.css('font-size'), 10) * .8);

            return false;
        });

        jQuery('<li class="textarea"><a href="#">' + config.textareaText + '</a></li>').appendTo(ul).find('a').toggle(function () {
            jQuery(this).text(config.textareaText2);
            codeBlock.hide();
            textarea.show();
            textarea.find('textarea')[0].focus();
            textarea.find('textarea')[0].select();

            return false;
        }, function () {
            jQuery(this).text(config.textareaText);
            textarea.hide();
            codeBlock.show();

            return false;
        });

        if (cbHeight > cbMaxHeight) {
            jQuery('<li class="expand"><a href="#">' + config.expandText + '</a></li>').appendTo(ul).find('a').click(function () {
                codeBlock.css('max-height', 'none');
                jQuery(this).parent().remove();

                return false;
            });
        }
    });
};

Download

Plug-in

Requires

blog comments powered by Disqus

Random jQuery Plug-ins

  • Numeric DL

    This tiny plug-in numbers definitions in a definition-list if there are more than one definition for a term. Can be useful for FAQs, actual lists of d...

    Details

  • Captcha Refresh

    If you use a so called CAPTCHA-image on your site then you can use this plug-in to allow users to click your CAPTCHA in order to generate a new random...

    Details

  • Image Zoom

    This plug-in makes links pointing to images open in the "Image Zoom". Clicking a link will zoom out the clicked image to its target-image. Click anywh...

    Details

More Plug-ins

Recent Comments

Powered by Disqus
Page cached. Loaded in: 0.0508 second(s).
Last DB change: 2012-04-02 11:06:05
Last file change: 2012-04-25 20:30:39
Cache created: 2012-05-18 07:43:36