summaryrefslogtreecommitdiffstats
path: root/js/vendor/angular-ui/modules/directives/jq/jq.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/vendor/angular-ui/modules/directives/jq/jq.js')
-rw-r--r--js/vendor/angular-ui/modules/directives/jq/jq.js64
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();
+ };
+ }
+ };
+}]);