diff options
author | Bernhard Posselt <nukeawhale@gmail.com> | 2013-09-09 15:57:10 +0200 |
---|---|---|
committer | Bernhard Posselt <nukeawhale@gmail.com> | 2013-09-09 15:57:18 +0200 |
commit | 2824b43b7332e847810f042c4183ce95ee90e852 (patch) | |
tree | 9a10f31c8acbf01d72336d3d065f8c8fda4b83c5 /js/vendor/angular-ui/modules/directives/jq/jq.js | |
parent | f0abeddd07fcf21e30c95d58885416ef40d65391 (diff) |
use bower for managing deps
Diffstat (limited to 'js/vendor/angular-ui/modules/directives/jq/jq.js')
-rw-r--r-- | js/vendor/angular-ui/modules/directives/jq/jq.js | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/js/vendor/angular-ui/modules/directives/jq/jq.js b/js/vendor/angular-ui/modules/directives/jq/jq.js new file mode 100644 index 000000000..278d91a50 --- /dev/null +++ b/js/vendor/angular-ui/modules/directives/jq/jq.js @@ -0,0 +1,64 @@ +/** + * General-purpose jQuery wrapper. Simply pass the plugin name as the expression. + * + * It is possible to specify a default set of parameters for each jQuery plugin. + * Under the jq key, namespace each plugin by that which will be passed to ui-jq. + * Unfortunately, at this time you can only pre-define the first parameter. + * @example { jq : { datepicker : { showOn:'click' } } } + * + * @param ui-jq {string} The $elm.[pluginName]() to call. + * @param [ui-options] {mixed} Expression to be evaluated and passed as options to the function + * Multiple parameters can be separated by commas + * @param [ui-refresh] {expression} Watch expression and refire plugin on changes + * + * @example <input ui-jq="datepicker" ui-options="{showOn:'click'},secondParameter,thirdParameter" ui-refresh="iChange"> + */ +angular.module('ui.directives').directive('uiJq', ['ui.config', '$timeout', function uiJqInjectingFunction(uiConfig, $timeout) { + + return { + restrict: 'A', + compile: function uiJqCompilingFunction(tElm, tAttrs) { + + if (!angular.isFunction(tElm[tAttrs.uiJq])) { + throw new Error('ui-jq: The "' + tAttrs.uiJq + '" function does not exist'); + } + var options = uiConfig.jq && uiConfig.jq[tAttrs.uiJq]; + + return function uiJqLinkingFunction(scope, elm, attrs) { + + var linkOptions = []; + + // If ui-options are passed, merge (or override) them onto global defaults and pass to the jQuery method + if (attrs.uiOptions) { + linkOptions = scope.$eval('[' + attrs.uiOptions + ']'); + if (angular.isObject(options) && angular.isObject(linkOptions[0])) { + linkOptions[0] = angular.extend({}, options, linkOptions[0]); + } + } else if (options) { + linkOptions = [options]; + } + // If change compatibility is enabled, the form input's "change" event will trigger an "input" event + if (attrs.ngModel && elm.is('select,input,textarea')) { + elm.on('change', function() { + elm.trigger('input'); + }); + } + + // Call jQuery method and pass relevant options + function callPlugin() { + $timeout(function() { + elm[attrs.uiJq].apply(elm, linkOptions); + }, 0, false); + } + + // If ui-refresh is used, re-fire the the method upon every change + if (attrs.uiRefresh) { + scope.$watch(attrs.uiRefresh, function(newVal) { + callPlugin(); + }); + } + callPlugin(); + }; + } + }; +}]); |