| //>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude); |
| //>>description: Widget factory extentions for mobile. |
| //>>label: Widget Factory |
| //>>group: Core |
| //>>css.theme: ../css/themes/default/jquery.mobile.theme.css |
| |
| define( [ "jquery", "./jquery.ui.widget" ], function( jQuery ) { |
| //>>excludeEnd("jqmBuildExclude"); |
| (function( $, undefined ) { |
| |
| $.widget( "mobile.widget", { |
| // decorate the parent _createWidget to trigger `widgetinit` for users |
| // who wish to do post post `widgetcreate` alterations/additions |
| // |
| // TODO create a pull request for jquery ui to trigger this event |
| // in the original _createWidget |
| _createWidget: function() { |
| $.Widget.prototype._createWidget.apply( this, arguments ); |
| this._trigger( 'init' ); |
| }, |
| |
| _getCreateOptions: function() { |
| |
| var elem = this.element, |
| options = {}; |
| |
| $.each( this.options, function( option ) { |
| |
| var value = elem.jqmData( option.replace( /[A-Z]/g, function( c ) { |
| return "-" + c.toLowerCase(); |
| }) |
| ); |
| |
| if ( value !== undefined ) { |
| options[ option ] = value; |
| } |
| }); |
| |
| return options; |
| }, |
| |
| enhanceWithin: function( target, useKeepNative ) { |
| this.enhance( $( this.options.initSelector, $( target )), useKeepNative ); |
| }, |
| |
| enhance: function( targets, useKeepNative ) { |
| var page, keepNative, $widgetElements = $( targets ), self = this; |
| |
| // if ignoreContentEnabled is set to true the framework should |
| // only enhance the selected elements when they do NOT have a |
| // parent with the data-namespace-ignore attribute |
| $widgetElements = $.mobile.enhanceable( $widgetElements ); |
| |
| if ( useKeepNative && $widgetElements.length ) { |
| // TODO remove dependency on the page widget for the keepNative. |
| // Currently the keepNative value is defined on the page prototype so |
| // the method is as well |
| page = $.mobile.closestPageData( $widgetElements ); |
| keepNative = ( page && page.keepNativeSelector()) || ""; |
| |
| $widgetElements = $widgetElements.not( keepNative ); |
| } |
| |
| $widgetElements[ this.widgetName ](); |
| }, |
| |
| raise: function( msg ) { |
| throw "Widget [" + this.widgetName + "]: " + msg; |
| } |
| }); |
| |
| })( jQuery ); |
| //>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude); |
| }); |
| //>>excludeEnd("jqmBuildExclude"); |