]> source.dussan.org Git - jquery-ui.git/commitdiff
Widget demo: Replace inline editor with colorize. This can stick around forever,...
authorJörn Zaefferer <joern.zaefferer@gmail.com>
Thu, 2 Jun 2011 11:22:33 +0000 (13:22 +0200)
committerJörn Zaefferer <joern.zaefferer@gmail.com>
Thu, 2 Jun 2011 11:22:33 +0000 (13:22 +0200)
demos/widget/default.html

index 0629d862a25e1c7b7cde9c44569b6e4b029f0d57..a9284a423421048ee6769d32229aa9df5c01503f 100644 (file)
        <script src="../../ui/jquery.ui.position.js"></script>
        <link rel="stylesheet" href="../demos.css">
        <style>
-       /* this could go into custom.inlineedit.css */
-       /* make it display:block to replace the block element that's being edited */
-       .inlineedit-input { display: block; }
-       /* this would need a few more styles to make it look decent */
+       .colorize {
+               font-size: 25px;
+               width: 75px;
+               height: 75px;
+       }
        </style>
        <script>
        $(function() {
-               // this defines a new widget, in the "custom" namespace
-               $.widget( "custom.inlineedit", {
+               // the widget definition, where 'custom' is the namespace,
+               // 'colorize' the widget name
+               $.widget( 'custom.colorize', {
                        // default options
                        options: {
-                               submitOnBlur: true
+                               red: 255,
+                               green: 0,
+                               blue: 0
                        },
-                       // this is the constructor
+
+                       // the constructor
                        _create: function() {
-                               // basic event binding to this.element
+                               this.element
+                                       // add a class for themeing
+                                       .addClass("colorize")
+                                       // prevent double click to select text
+                                       .disableSelection();
+                               // bind click events to random method
                                this._bind({
-                                       // string as value is mapped to instance method
-                                       click: "start"
-                               });
-
-                               // creating a new element to show later
-                               this.input = $( "<input>" ).addClass("inlineedit-input").hide().insertAfter( this.element );
-                               // with events on input, here functions that to do event-specific checks
-                               this._bind( this.input, {
-                                       blur: function( event ) {
-                                               // ignore blur event if already hidden
-                                               if (!this.input.is(":visible")) {
-                                                       return;
-                                               }
-                                               if ( this.options.submitOnBlur ) {
-                                                       this.submit( event )
-                                               } else {
-                                                       this.cancel( event );
-                                               }
-                                       },
-                                       keyup: function( event ) {
-                                               // using $.ui.keyCode to map keyboard input to the right action 
-                                               if ( event.keyCode === $.ui.keyCode.ENTER || event.keyCode === $.ui.keyCode.NUMPAD_ENTER ) {
-                                                       this.submit( event );
-                                               } else if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
-                                                       this.cancel( event );
-                                               }
-                                       }
+                                       // _bind won't call random when widget is disabled
+                                       click: "random"
                                });
+                               this._refresh();
                        },
-                       // a public method
-                       start: function( event ) {
-                               this.element.hide();
-                               this.input.val( this.element.text() ).show().focus();
-                               // trigger a custom event when something changes
-                               this._trigger("start", event );
-                       },
-                       // another custom method
-                       _hide: function( event ) {
-                               this.input.hide();
-                               this.element.show();
+
+                       // called when created, and later when changing options
+                       _refresh: function() {
+                               this.element.css( 'background-color', 'rgb(' +
+                                       this.options.red +',' +
+                                       this.options.green + ',' +
+                                       this.options.blue + ')'
+                               );
+
+                               // trigger a callback/event
+                               this._trigger( 'change' );
                        },
-                       submit: function( event ) {
-                               var newValue = this.input.val(),
-                                       ui = {
-                                               value: newValue
-                                       };
-                               // trigger an event, cancel the default action when event handler returns false
-                               if ( this._trigger( "submit", event, ui ) !== false ) {
-                                       this.element.text( newValue );
+
+                       // a public method to change the color to a random value
+                       // can be called directly via .colorize( 'random' )
+                       random: function( event ) {
+                               var colors = {
+                                       red: Math.floor( Math.random() * 256 ),
+                                       green: Math.floor( Math.random() * 256 ),
+                                       blue: Math.floor( Math.random() * 256 )
+                               };
+
+                               // trigger an event, check if it's canceled
+                               if ( this._trigger( 'random', event, colors ) !== false ) {
+                                       $.extend( this.options, colors );
+                                       this._refresh();
                                }
-                               this._hide();
                        },
-                       cancel: function( event ) {
-                               this._hide();
-                               // trigger an event when something changes
-                               this._trigger( "cancel", event );
+
+                       // events bound via _bind are removed automatically
+                       // revert other modifications here
+                       _destroy: function() {
+                               this.element
+                                       .removeClass( 'colorize' )
+                                       .enableSelection()
+                                       .css( 'background-color', 'transparent' );
+                       },
+
+                       // always refresh when changing an option
+                       _setOption: function( key, value ) {
+                               // _super handles keeping the right this-context
+                               this._super( "_setOption", key, value );
+                               this._refresh();
                        }
                });
-               // this is how we can use our custom widget, just like any jQuery plugin
-               $( ".demo h1" ).inlineedit();
-               $( ".demo p" ).inlineedit({
-                       // configure an option
-                       submitOnBlur: false
+
+               $( '#my-widget1' ).colorize();
+               $( '#my-widget2' ).colorize({
+                       red: 60,
+                       blue: 60
+               });
+               $( '#my-widget3' ).colorize( {
+                       green: 128,
+                       random: function( event, ui ) {
+                               return ui.green > 128;
+                       }
                });
-               $( ".demo button" ).click( function() {
-                       // call a public method
-                       $( ".demo :custom-inlineedit" ).inlineedit( "start" );
+
+               $( '#disable' ).toggle(function() {
+                       $( ':custom-colorize' ).colorize( 'disable' );
+               }, function() {
+                       $( ':custom-colorize' ).colorize( 'enable' );
                });
-               // widget's create a custom selector
-               // triggered events can be used with regular bind, just prepend name
-               $( ".demo :custom-inlineedit" ).bind( "inlineeditstart inlineeditsubmit inlineeditcancel" , function( event, ui ) {
-                       $( "<div></div>" ).text( "edit event " + event.type ).appendTo(".demo");
+
+               $( '#black' ).click( function() {
+                       $( ':custom-colorize' ).colorize( 'option', {
+                               red: 0,
+                               green: 0,
+                               blue: 0
+                       } );
                });
        });
        </script>
 <div class="demo">
 
 <div>
-       <h1>This is an editable header</h1>
-       <p>And an editable paragraph</p>
-       <button>Start editing</button>
+       <div id="my-widget1">color me</div>
+       <div id="my-widget2">color me</div>
+       <div id="my-widget3">color me</div>
+       <button id="disable">Toglge disabled option</button>
+       <button id="black">Go black</button>
 </div>
 
 </div><!-- End demo -->
 
 <div class="demo-description">
 <p>This demo shows a simple custom widget built using the widget factory (jquery.ui.widget.js).</p>
-<p>The header is set to change the element on blur, the paragraph only changes when you submit with Enter.</p>
+<p>The three boxes are initialized in different ways. Clicking them changes their background color. View source to see how it works.</p>
 <p><a href="http://wiki.jqueryui.com/w/page/12138135/Widget-factory">For more details on the widget factory, visit the jQuery UI planning wiki.</a></p>
 </div><!-- End demo-description -->