oxymoron 1.2.7 → 1.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7516416ecbec32dd521e4ea183e028b55544cb18
4
- data.tar.gz: f5fc33876301d61801a17c5466651dbe2e26751d
3
+ metadata.gz: 62a6b77289f2f0d7c32ff182428d0311520a0e34
4
+ data.tar.gz: 0e3754d7993ceb1e3f3995eef4e06bce151b4cce
5
5
  SHA512:
6
- metadata.gz: 52cc93d4d787b71a54af4f3f8294845e2b6baf50410b7bfa308c9f2da254649df7132da229218a109dd6cae8d8bba5a9e6d19b69888c3e2e051a664d78fc6180
7
- data.tar.gz: 7e5b37ef7896751a00478b12e2b3b21ba20088bc9cc8c202be0285d3b89450fde351086f7171fb09e17a1eb2b82002eac28ed4102ef8c6b18cdefa5715f12ac2
6
+ metadata.gz: 24d7cd163a28db571bd2f83ccb11e3197d6ffe693d4c3b033c3731ef0bff04681cb7ae0a997ee80907f35f19178761b593dba6373749e4fa62546d6162cb555e
7
+ data.tar.gz: 913e8c771cdf6c5e3566159065176d3f551529218fcb7bd5ae23f97453b460cb1ea80349d4e38dc4bc62c552766c80d0bc4f49527dd67ad3d4a0684e975100ec
@@ -1,3 +1,3 @@
1
1
  module Oxymoron
2
- VERSION = "1.2.7"
2
+ VERSION = "1.2.8"
3
3
  end
@@ -0,0 +1,953 @@
1
+ /*
2
+ * ngDialog - easy modals and popup windows
3
+ * http://github.com/likeastore/ngDialog
4
+ * (c) 2013-2015 MIT License, https://likeastore.com
5
+ */
6
+
7
+ (function (root, factory) {
8
+ if (typeof module !== 'undefined' && module.exports) {
9
+ // CommonJS
10
+ if (typeof angular === 'undefined') {
11
+ factory(require('angular'));
12
+ } else {
13
+ factory(angular);
14
+ }
15
+ module.exports = 'ngDialog';
16
+ } else if (typeof define === 'function' && define.amd) {
17
+ // AMD
18
+ define(['angular'], factory);
19
+ } else {
20
+ // Global Variables
21
+ factory(root.angular);
22
+ }
23
+ }(this, function (angular) {
24
+ 'use strict';
25
+
26
+ var m = angular.module('ngDialog', []);
27
+
28
+ var $el = angular.element;
29
+ var isDef = angular.isDefined;
30
+ var style = (document.body || document.documentElement).style;
31
+ var animationEndSupport = isDef(style.animation) || isDef(style.WebkitAnimation) || isDef(style.MozAnimation) || isDef(style.MsAnimation) || isDef(style.OAnimation);
32
+ var animationEndEvent = 'animationend webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend';
33
+ var focusableElementSelector = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]';
34
+ var disabledAnimationClass = 'ngdialog-disabled-animation';
35
+ var forceElementsReload = { html: false, body: false };
36
+ var scopes = {};
37
+ var openIdStack = [];
38
+ var activeBodyClasses = [];
39
+ var keydownIsBound = false;
40
+ var openOnePerName = false;
41
+ var closeByNavigationDialogStack = [];
42
+
43
+ var UI_ROUTER_VERSION_LEGACY = 'legacy';
44
+ var UI_ROUTER_VERSION_ONE_PLUS = '1.0.0+';
45
+
46
+ m.provider('ngDialog', function () {
47
+ var defaults = this.defaults = {
48
+ className: 'ngdialog-theme-default',
49
+ appendClassName: '',
50
+ disableAnimation: false,
51
+ plain: false,
52
+ showClose: true,
53
+ closeByDocument: true,
54
+ closeByEscape: true,
55
+ closeByNavigation: false,
56
+ appendTo: false,
57
+ preCloseCallback: false,
58
+ onOpenCallback: false,
59
+ overlay: true,
60
+ cache: true,
61
+ trapFocus: true,
62
+ preserveFocus: true,
63
+ ariaAuto: true,
64
+ ariaRole: null,
65
+ ariaLabelledById: null,
66
+ ariaLabelledBySelector: null,
67
+ ariaDescribedById: null,
68
+ ariaDescribedBySelector: null,
69
+ bodyClassName: 'ngdialog-open',
70
+ width: null,
71
+ height: null
72
+ };
73
+
74
+ this.setForceHtmlReload = function (_useIt) {
75
+ forceElementsReload.html = _useIt || false;
76
+ };
77
+
78
+ this.setForceBodyReload = function (_useIt) {
79
+ forceElementsReload.body = _useIt || false;
80
+ };
81
+
82
+ this.setDefaults = function (newDefaults) {
83
+ angular.extend(defaults, newDefaults);
84
+ };
85
+
86
+ this.setOpenOnePerName = function (isOpenOne) {
87
+ openOnePerName = isOpenOne || false;
88
+ };
89
+
90
+ var globalID = 0, dialogsCount = 0, closeByDocumentHandler, defers = {};
91
+
92
+ this.$get = ['$document', '$templateCache', '$compile', '$q', '$http', '$rootScope', '$timeout', '$window', '$controller', '$injector',
93
+ function ($document, $templateCache, $compile, $q, $http, $rootScope, $timeout, $window, $controller, $injector) {
94
+ var $elements = [];
95
+
96
+ var privateMethods = {
97
+ onDocumentKeydown: function (event) {
98
+ if (event.keyCode === 27) {
99
+ publicMethods.close('$escape');
100
+ }
101
+ },
102
+
103
+ activate: function($dialog) {
104
+ var options = $dialog.data('$ngDialogOptions');
105
+
106
+ if (options.trapFocus) {
107
+ $dialog.on('keydown', privateMethods.onTrapFocusKeydown);
108
+
109
+ // Catch rogue changes (eg. after unfocusing everything by clicking a non-focusable element)
110
+ $elements.body.on('keydown', privateMethods.onTrapFocusKeydown);
111
+ }
112
+ },
113
+
114
+ deactivate: function ($dialog) {
115
+ $dialog.off('keydown', privateMethods.onTrapFocusKeydown);
116
+ $elements.body.off('keydown', privateMethods.onTrapFocusKeydown);
117
+ },
118
+
119
+ deactivateAll: function (els) {
120
+ angular.forEach(els,function(el) {
121
+ var $dialog = angular.element(el);
122
+ privateMethods.deactivate($dialog);
123
+ });
124
+ },
125
+
126
+ setBodyPadding: function (width) {
127
+ var originalBodyPadding = parseInt(($elements.body.css('padding-right') || 0), 10);
128
+ $elements.body.css('padding-right', (originalBodyPadding + width) + 'px');
129
+ $elements.body.data('ng-dialog-original-padding', originalBodyPadding);
130
+ $rootScope.$broadcast('ngDialog.setPadding', width);
131
+ },
132
+
133
+ resetBodyPadding: function () {
134
+ var originalBodyPadding = $elements.body.data('ng-dialog-original-padding');
135
+ if (originalBodyPadding) {
136
+ $elements.body.css('padding-right', originalBodyPadding + 'px');
137
+ } else {
138
+ $elements.body.css('padding-right', '');
139
+ }
140
+ $rootScope.$broadcast('ngDialog.setPadding', 0);
141
+ },
142
+
143
+ performCloseDialog: function ($dialog, value) {
144
+ var options = $dialog.data('$ngDialogOptions');
145
+ var id = $dialog.attr('id');
146
+ var scope = scopes[id];
147
+ privateMethods.deactivate($dialog);
148
+
149
+ if (!scope) {
150
+ // Already closed
151
+ return;
152
+ }
153
+
154
+ if (typeof $window.Hammer !== 'undefined') {
155
+ var hammerTime = scope.hammerTime;
156
+ hammerTime.off('tap', closeByDocumentHandler);
157
+ hammerTime.destroy && hammerTime.destroy();
158
+ delete scope.hammerTime;
159
+ } else {
160
+ $dialog.unbind('click');
161
+ }
162
+
163
+ if (dialogsCount === 1) {
164
+ $elements.body.unbind('keydown', privateMethods.onDocumentKeydown);
165
+ }
166
+
167
+ if (!$dialog.hasClass('ngdialog-closing')){
168
+ dialogsCount -= 1;
169
+ }
170
+
171
+ var previousFocus = $dialog.data('$ngDialogPreviousFocus');
172
+ if (previousFocus && previousFocus.focus) {
173
+ previousFocus.focus();
174
+ }
175
+
176
+ $rootScope.$broadcast('ngDialog.closing', $dialog, value);
177
+ dialogsCount = dialogsCount < 0 ? 0 : dialogsCount;
178
+ if (animationEndSupport && !options.disableAnimation) {
179
+ scope.$destroy();
180
+ $dialog.unbind(animationEndEvent).bind(animationEndEvent, function () {
181
+ privateMethods.closeDialogElement($dialog, value);
182
+ }).addClass('ngdialog-closing');
183
+ } else {
184
+ scope.$destroy();
185
+ privateMethods.closeDialogElement($dialog, value);
186
+ }
187
+ if (defers[id]) {
188
+ defers[id].resolve({
189
+ id: id,
190
+ value: value,
191
+ $dialog: $dialog,
192
+ remainingDialogs: dialogsCount
193
+ });
194
+ delete defers[id];
195
+ }
196
+ if (scopes[id]) {
197
+ delete scopes[id];
198
+ }
199
+ openIdStack.splice(openIdStack.indexOf(id), 1);
200
+ if (!openIdStack.length) {
201
+ $elements.body.unbind('keydown', privateMethods.onDocumentKeydown);
202
+ keydownIsBound = false;
203
+ }
204
+
205
+ if (dialogsCount == 0)
206
+ {
207
+ closeByDocumentHandler = undefined;
208
+ }
209
+ },
210
+
211
+ closeDialogElement: function($dialog, value) {
212
+ var options = $dialog.data('$ngDialogOptions');
213
+ $dialog.remove();
214
+
215
+ activeBodyClasses.splice(activeBodyClasses.indexOf(options.bodyClassName), 1);
216
+ if (activeBodyClasses.indexOf(options.bodyClassName) === -1) {
217
+ $elements.html.removeClass(options.bodyClassName);
218
+ $elements.body.removeClass(options.bodyClassName);
219
+ }
220
+
221
+ if (dialogsCount === 0) {
222
+ privateMethods.resetBodyPadding();
223
+ }
224
+
225
+ $rootScope.$broadcast('ngDialog.closed', $dialog, value);
226
+ },
227
+
228
+ closeDialog: function ($dialog, value) {
229
+ var preCloseCallback = $dialog.data('$ngDialogPreCloseCallback');
230
+
231
+ if (preCloseCallback && angular.isFunction(preCloseCallback)) {
232
+
233
+ var preCloseCallbackResult = preCloseCallback.call($dialog, value);
234
+
235
+ if (angular.isObject(preCloseCallbackResult)) {
236
+ if (preCloseCallbackResult.closePromise) {
237
+ preCloseCallbackResult.closePromise.then(function () {
238
+ privateMethods.performCloseDialog($dialog, value);
239
+ }, function () {
240
+ return false;
241
+ });
242
+ } else {
243
+ preCloseCallbackResult.then(function () {
244
+ privateMethods.performCloseDialog($dialog, value);
245
+ }, function () {
246
+ return false;
247
+ });
248
+ }
249
+ } else if (preCloseCallbackResult !== false) {
250
+ privateMethods.performCloseDialog($dialog, value);
251
+ } else {
252
+ return false;
253
+ }
254
+ } else {
255
+ privateMethods.performCloseDialog($dialog, value);
256
+ }
257
+ },
258
+
259
+ onTrapFocusKeydown: function(ev) {
260
+ var el = angular.element(ev.currentTarget);
261
+ var $dialog;
262
+
263
+ if (el.hasClass('ngdialog')) {
264
+ $dialog = el;
265
+ } else {
266
+ $dialog = privateMethods.getActiveDialog();
267
+
268
+ if ($dialog === null) {
269
+ return;
270
+ }
271
+ }
272
+
273
+ var isTab = (ev.keyCode === 9);
274
+ var backward = (ev.shiftKey === true);
275
+
276
+ if (isTab) {
277
+ privateMethods.handleTab($dialog, ev, backward);
278
+ }
279
+ },
280
+
281
+ handleTab: function($dialog, ev, backward) {
282
+ var focusableElements = privateMethods.getFocusableElements($dialog);
283
+
284
+ if (focusableElements.length === 0) {
285
+ if (document.activeElement && document.activeElement.blur) {
286
+ document.activeElement.blur();
287
+ }
288
+ return;
289
+ }
290
+
291
+ var currentFocus = document.activeElement;
292
+ var focusIndex = Array.prototype.indexOf.call(focusableElements, currentFocus);
293
+
294
+ var isFocusIndexUnknown = (focusIndex === -1);
295
+ var isFirstElementFocused = (focusIndex === 0);
296
+ var isLastElementFocused = (focusIndex === focusableElements.length - 1);
297
+
298
+ var cancelEvent = false;
299
+
300
+ if (backward) {
301
+ if (isFocusIndexUnknown || isFirstElementFocused) {
302
+ focusableElements[focusableElements.length - 1].focus();
303
+ cancelEvent = true;
304
+ }
305
+ } else {
306
+ if (isFocusIndexUnknown || isLastElementFocused) {
307
+ focusableElements[0].focus();
308
+ cancelEvent = true;
309
+ }
310
+ }
311
+
312
+ if (cancelEvent) {
313
+ ev.preventDefault();
314
+ ev.stopPropagation();
315
+ }
316
+ },
317
+
318
+ autoFocus: function($dialog) {
319
+ var dialogEl = $dialog[0];
320
+
321
+ // Browser's (Chrome 40, Forefix 37, IE 11) don't appear to honor autofocus on the dialog, but we should
322
+ var autoFocusEl = dialogEl.querySelector('*[autofocus]');
323
+ if (autoFocusEl !== null) {
324
+ autoFocusEl.focus();
325
+
326
+ if (document.activeElement === autoFocusEl) {
327
+ return;
328
+ }
329
+
330
+ // Autofocus element might was display: none, so let's continue
331
+ }
332
+
333
+ var focusableElements = privateMethods.getFocusableElements($dialog);
334
+
335
+ if (focusableElements.length > 0) {
336
+ focusableElements[0].focus();
337
+ return;
338
+ }
339
+
340
+ // We need to focus something for the screen readers to notice the dialog
341
+ var contentElements = privateMethods.filterVisibleElements(dialogEl.querySelectorAll('h1,h2,h3,h4,h5,h6,p,span'));
342
+
343
+ if (contentElements.length > 0) {
344
+ var contentElement = contentElements[0];
345
+ $el(contentElement).attr('tabindex', '-1').css('outline', '0');
346
+ contentElement.focus();
347
+ }
348
+ },
349
+
350
+ getFocusableElements: function ($dialog) {
351
+ var dialogEl = $dialog[0];
352
+
353
+ var rawElements = dialogEl.querySelectorAll(focusableElementSelector);
354
+
355
+ // Ignore untabbable elements, ie. those with tabindex = -1
356
+ var tabbableElements = privateMethods.filterTabbableElements(rawElements);
357
+
358
+ return privateMethods.filterVisibleElements(tabbableElements);
359
+ },
360
+
361
+ filterTabbableElements: function (els) {
362
+ var tabbableFocusableElements = [];
363
+
364
+ for (var i = 0; i < els.length; i++) {
365
+ var el = els[i];
366
+
367
+ if ($el(el).attr('tabindex') !== '-1') {
368
+ tabbableFocusableElements.push(el);
369
+ }
370
+ }
371
+
372
+ return tabbableFocusableElements;
373
+ },
374
+
375
+ filterVisibleElements: function (els) {
376
+ var visibleFocusableElements = [];
377
+
378
+ for (var i = 0; i < els.length; i++) {
379
+ var el = els[i];
380
+
381
+ if (el.offsetWidth > 0 || el.offsetHeight > 0) {
382
+ visibleFocusableElements.push(el);
383
+ }
384
+ }
385
+
386
+ return visibleFocusableElements;
387
+ },
388
+
389
+ getActiveDialog: function () {
390
+ var dialogs = document.querySelectorAll('.ngdialog');
391
+
392
+ if (dialogs.length === 0) {
393
+ return null;
394
+ }
395
+
396
+ // TODO: This might be incorrect if there are a mix of open dialogs with different 'appendTo' values
397
+ return $el(dialogs[dialogs.length - 1]);
398
+ },
399
+
400
+ applyAriaAttributes: function ($dialog, options) {
401
+ if (options.ariaAuto) {
402
+ if (!options.ariaRole) {
403
+ var detectedRole = (privateMethods.getFocusableElements($dialog).length > 0) ?
404
+ 'dialog' :
405
+ 'alertdialog';
406
+
407
+ options.ariaRole = detectedRole;
408
+ }
409
+
410
+ if (!options.ariaLabelledBySelector) {
411
+ options.ariaLabelledBySelector = 'h1,h2,h3,h4,h5,h6';
412
+ }
413
+
414
+ if (!options.ariaDescribedBySelector) {
415
+ options.ariaDescribedBySelector = 'article,section,p';
416
+ }
417
+ }
418
+
419
+ if (options.ariaRole) {
420
+ $dialog.attr('role', options.ariaRole);
421
+ }
422
+
423
+ privateMethods.applyAriaAttribute(
424
+ $dialog, 'aria-labelledby', options.ariaLabelledById, options.ariaLabelledBySelector);
425
+
426
+ privateMethods.applyAriaAttribute(
427
+ $dialog, 'aria-describedby', options.ariaDescribedById, options.ariaDescribedBySelector);
428
+ },
429
+
430
+ applyAriaAttribute: function($dialog, attr, id, selector) {
431
+ if (id) {
432
+ $dialog.attr(attr, id);
433
+ return;
434
+ }
435
+
436
+ if (selector) {
437
+ var dialogId = $dialog.attr('id');
438
+
439
+ var firstMatch = $dialog[0].querySelector(selector);
440
+
441
+ if (!firstMatch) {
442
+ return;
443
+ }
444
+
445
+ var generatedId = dialogId + '-' + attr;
446
+
447
+ $el(firstMatch).attr('id', generatedId);
448
+
449
+ $dialog.attr(attr, generatedId);
450
+
451
+ return generatedId;
452
+ }
453
+ },
454
+
455
+ detectUIRouter: function() {
456
+ // Detect if ui-router module is installed
457
+ // Returns ui-router version string if installed
458
+ // Otherwise false
459
+
460
+ if ($injector.has('$transitions')) {
461
+ // Only 1.0.0+ ui.router allows us to inject $transitions
462
+ return UI_ROUTER_VERSION_ONE_PLUS;
463
+ }
464
+ else if ($injector.has('$state')) {
465
+ // The legacy ui.router allows us to inject $state
466
+ return UI_ROUTER_VERSION_LEGACY;
467
+ }
468
+ return false;
469
+ },
470
+
471
+ getRouterLocationEventName: function() {
472
+ if (privateMethods.detectUIRouter()) {
473
+ return '$stateChangeStart';
474
+ }
475
+ return '$locationChangeStart';
476
+ }
477
+ };
478
+
479
+ var publicMethods = {
480
+ __PRIVATE__: privateMethods,
481
+
482
+ /*
483
+ * @param {Object} options:
484
+ * - template {String} - id of ng-template, url for partial, plain string (if enabled)
485
+ * - plain {Boolean} - enable plain string templates, default false
486
+ * - scope {Object}
487
+ * - controller {String}
488
+ * - controllerAs {String}
489
+ * - className {String} - dialog theme class
490
+ * - appendClassName {String} - dialog theme class to be appended to defaults
491
+ * - disableAnimation {Boolean} - set to true to disable animation
492
+ * - showClose {Boolean} - show close button, default true
493
+ * - closeByEscape {Boolean} - default true
494
+ * - closeByDocument {Boolean} - default true
495
+ * - preCloseCallback {String|Function} - user supplied function name/function called before closing dialog (if set)
496
+ * - onOpenCallback {String|Function} - user supplied function name/function called after opening dialog (if set)
497
+ * - bodyClassName {String} - class added to body at open dialog
498
+ * @return {Object} dialog
499
+ */
500
+ open: function (opts) {
501
+ var dialogID = null;
502
+ opts = opts || {};
503
+ if (openOnePerName && opts.name) {
504
+ dialogID = opts.name.toLowerCase().replace(/\s/g, '-') + '-dialog';
505
+ if (this.isOpen(dialogID)) {
506
+ return;
507
+ }
508
+ }
509
+ var options = angular.copy(defaults);
510
+ var localID = ++globalID;
511
+ dialogID = dialogID || 'ngdialog' + localID;
512
+ openIdStack.push(dialogID);
513
+
514
+ // Merge opts.data with predefined via setDefaults
515
+ if (typeof options.data !== 'undefined') {
516
+ if (typeof opts.data === 'undefined') {
517
+ opts.data = {};
518
+ }
519
+ opts.data = angular.merge(angular.copy(options.data), opts.data);
520
+ }
521
+
522
+ angular.extend(options, opts);
523
+
524
+ var defer;
525
+ defers[dialogID] = defer = $q.defer();
526
+
527
+ var scope;
528
+ scopes[dialogID] = scope = angular.isObject(options.scope) ? options.scope.$new() : $rootScope.$new();
529
+
530
+ var $dialog, $dialogParent, $dialogContent;
531
+
532
+ var resolve = angular.extend({}, options.resolve);
533
+
534
+ angular.forEach(resolve, function (value, key) {
535
+ resolve[key] = angular.isString(value) ? $injector.get(value) : $injector.invoke(value, null, null, key);
536
+ });
537
+
538
+ $q.all({
539
+ template: loadTemplate(options.template || options.templateUrl),
540
+ locals: $q.all(resolve)
541
+ }).then(function (setup) {
542
+ var template = setup.template,
543
+ locals = setup.locals;
544
+
545
+ if (options.showClose) {
546
+ template += '<button aria-label="Dismiss" class="ngdialog-close"></button>';
547
+ }
548
+
549
+ var hasOverlayClass = options.overlay ? '' : ' ngdialog-no-overlay';
550
+ $dialog = $el('<div id="' + dialogID + '" class="ngdialog' + hasOverlayClass + '"></div>');
551
+ $dialog.html((options.overlay ?
552
+ '<div class="ngdialog-overlay"></div><div class="ngdialog-content" role="document">' + template + '</div>' :
553
+ '<div class="ngdialog-content" role="document">' + template + '</div>'));
554
+
555
+ $dialog.data('$ngDialogOptions', options);
556
+
557
+ scope.ngDialogId = dialogID;
558
+
559
+ if (options.data && angular.isString(options.data)) {
560
+ var firstLetter = options.data.replace(/^\s*/, '')[0];
561
+ scope.ngDialogData = (firstLetter === '{' || firstLetter === '[') ? angular.fromJson(options.data) : new String(options.data);
562
+ scope.ngDialogData.ngDialogId = dialogID;
563
+ } else if (options.data && angular.isObject(options.data)) {
564
+ scope.ngDialogData = options.data;
565
+ scope.ngDialogData.ngDialogId = dialogID;
566
+ }
567
+
568
+ if (options.className) {
569
+ $dialog.addClass(options.className);
570
+ }
571
+
572
+ if (options.appendClassName) {
573
+ $dialog.addClass(options.appendClassName);
574
+ }
575
+
576
+ if (options.width) {
577
+ $dialogContent = $dialog[0].querySelector('.ngdialog-content');
578
+ if (angular.isString(options.width)) {
579
+ $dialogContent.style.width = options.width;
580
+ } else {
581
+ $dialogContent.style.width = options.width + 'px';
582
+ }
583
+ }
584
+
585
+ if (options.height) {
586
+ $dialogContent = $dialog[0].querySelector('.ngdialog-content');
587
+ if (angular.isString(options.height)) {
588
+ $dialogContent.style.height = options.height;
589
+ } else {
590
+ $dialogContent.style.height = options.height + 'px';
591
+ }
592
+ }
593
+
594
+ if (options.disableAnimation) {
595
+ $dialog.addClass(disabledAnimationClass);
596
+ }
597
+
598
+ if (options.appendTo && angular.isString(options.appendTo)) {
599
+ $dialogParent = angular.element(document.querySelector(options.appendTo));
600
+ } else {
601
+ $dialogParent = $elements.body;
602
+ }
603
+
604
+ privateMethods.applyAriaAttributes($dialog, options);
605
+
606
+ [
607
+ { name: '$ngDialogPreCloseCallback', value: options.preCloseCallback },
608
+ { name: '$ngDialogOnOpenCallback', value: options.onOpenCallback }
609
+ ].forEach(function (option) {
610
+ if (option.value) {
611
+ var callback;
612
+
613
+ if (angular.isFunction(option.value)) {
614
+ callback = option.value;
615
+ } else if (angular.isString(option.value)) {
616
+ if (scope) {
617
+ if (angular.isFunction(scope[option.value])) {
618
+ callback = scope[option.value];
619
+ } else if (scope.$parent && angular.isFunction(scope.$parent[option.value])) {
620
+ callback = scope.$parent[option.value];
621
+ } else if ($rootScope && angular.isFunction($rootScope[option.value])) {
622
+ callback = $rootScope[option.value];
623
+ }
624
+ }
625
+ }
626
+
627
+ if (callback) {
628
+ $dialog.data(option.name, callback);
629
+ }
630
+ }
631
+ });
632
+
633
+ scope.closeThisDialog = function (value) {
634
+ privateMethods.closeDialog($dialog, value);
635
+ };
636
+
637
+ if (options.controller && (angular.isString(options.controller) || angular.isArray(options.controller) || angular.isFunction(options.controller))) {
638
+
639
+ var label;
640
+
641
+ if (options.controllerAs && angular.isString(options.controllerAs)) {
642
+ label = options.controllerAs;
643
+ }
644
+
645
+ var controllerInstance = $controller(options.controller, angular.extend(
646
+ locals,
647
+ {
648
+ $scope: scope,
649
+ $element: $dialog
650
+ }),
651
+ true,
652
+ label
653
+ );
654
+
655
+ if(options.bindToController) {
656
+ angular.extend(controllerInstance.instance, {ngDialogId: scope.ngDialogId, ngDialogData: scope.ngDialogData, closeThisDialog: scope.closeThisDialog, confirm: scope.confirm});
657
+ }
658
+
659
+ if(typeof controllerInstance === 'function'){
660
+ $dialog.data('$ngDialogControllerController', controllerInstance());
661
+ } else {
662
+ $dialog.data('$ngDialogControllerController', controllerInstance);
663
+ }
664
+ }
665
+
666
+ $timeout(function () {
667
+ var $activeDialogs = document.querySelectorAll('.ngdialog');
668
+ privateMethods.deactivateAll($activeDialogs);
669
+
670
+ $compile($dialog)(scope);
671
+ var widthDiffs = $window.innerWidth - $elements.body.prop('clientWidth');
672
+ $elements.html.addClass(options.bodyClassName);
673
+ $elements.body.addClass(options.bodyClassName);
674
+ activeBodyClasses.push(options.bodyClassName);
675
+ var scrollBarWidth = widthDiffs - ($window.innerWidth - $elements.body.prop('clientWidth'));
676
+ if (scrollBarWidth > 0) {
677
+ privateMethods.setBodyPadding(scrollBarWidth);
678
+ }
679
+ $dialogParent.append($dialog);
680
+
681
+ privateMethods.activate($dialog);
682
+
683
+ if (options.trapFocus) {
684
+ privateMethods.autoFocus($dialog);
685
+ }
686
+
687
+ if (options.name) {
688
+ $rootScope.$broadcast('ngDialog.opened', {dialog: $dialog, name: options.name});
689
+ } else {
690
+ $rootScope.$broadcast('ngDialog.opened', $dialog);
691
+ }
692
+ var onOpenCallback = $dialog.data('$ngDialogOnOpenCallback');
693
+ if (onOpenCallback && angular.isFunction(onOpenCallback)) {
694
+ onOpenCallback.call($dialog);
695
+ }
696
+
697
+ });
698
+
699
+ if (!keydownIsBound) {
700
+ $elements.body.bind('keydown', privateMethods.onDocumentKeydown);
701
+ keydownIsBound = true;
702
+ }
703
+
704
+ if (options.closeByNavigation) {
705
+ closeByNavigationDialogStack.push($dialog);
706
+ }
707
+
708
+ if (options.preserveFocus) {
709
+ $dialog.data('$ngDialogPreviousFocus', document.activeElement);
710
+ }
711
+
712
+ closeByDocumentHandler = function (event) {
713
+ var isOverlay = options.closeByDocument ? $el(event.target).hasClass('ngdialog-overlay') : false;
714
+ var isCloseBtn = $el(event.target).hasClass('ngdialog-close');
715
+
716
+ if (isOverlay || isCloseBtn) {
717
+ publicMethods.close($dialog.attr('id'), isCloseBtn ? '$closeButton' : '$document');
718
+ }
719
+ };
720
+
721
+ if (typeof $window.Hammer !== 'undefined') {
722
+ var hammerTime = scope.hammerTime = $window.Hammer($dialog[0]);
723
+ hammerTime.on('tap', closeByDocumentHandler);
724
+ } else {
725
+ $dialog.bind('click', closeByDocumentHandler);
726
+ }
727
+
728
+ dialogsCount += 1;
729
+
730
+ return publicMethods;
731
+ });
732
+
733
+ return {
734
+ id: dialogID,
735
+ closePromise: defer.promise,
736
+ close: function (value) {
737
+ privateMethods.closeDialog($dialog, value);
738
+ }
739
+ };
740
+
741
+ function loadTemplateUrl (tmpl, config) {
742
+ var config = config || {};
743
+ config.headers = config.headers || {};
744
+
745
+ angular.extend(config.headers, {'Accept': 'text/html'});
746
+
747
+ $rootScope.$broadcast('ngDialog.templateLoading', tmpl);
748
+ return $http.get(tmpl, config).then(function(res) {
749
+ $rootScope.$broadcast('ngDialog.templateLoaded', tmpl);
750
+ return res.data || '';
751
+ });
752
+ }
753
+
754
+ function loadTemplate (tmpl) {
755
+ if (!tmpl) {
756
+ return 'Empty template';
757
+ }
758
+
759
+ if (angular.isString(tmpl) && options.plain) {
760
+ return tmpl;
761
+ }
762
+
763
+ if (typeof options.cache === 'boolean' && !options.cache) {
764
+ return loadTemplateUrl(tmpl, {cache: false});
765
+ }
766
+
767
+ return loadTemplateUrl(tmpl, {cache: $templateCache});
768
+ }
769
+ },
770
+
771
+ /*
772
+ * @param {Object} options:
773
+ * - template {String} - id of ng-template, url for partial, plain string (if enabled)
774
+ * - plain {Boolean} - enable plain string templates, default false
775
+ * - name {String}
776
+ * - scope {Object}
777
+ * - controller {String}
778
+ * - controllerAs {String}
779
+ * - className {String} - dialog theme class
780
+ * - appendClassName {String} - dialog theme class to be appended to defaults
781
+ * - showClose {Boolean} - show close button, default true
782
+ * - closeByEscape {Boolean} - default false
783
+ * - closeByDocument {Boolean} - default false
784
+ * - preCloseCallback {String|Function} - user supplied function name/function called before closing dialog (if set); not called on confirm
785
+ * - bodyClassName {String} - class added to body at open dialog
786
+ *
787
+ * @return {Object} dialog
788
+ */
789
+ openConfirm: function (opts) {
790
+ var defer = $q.defer();
791
+ var options = angular.copy(defaults);
792
+
793
+ opts = opts || {};
794
+
795
+ // Merge opts.data with predefined via setDefaults
796
+ if (typeof options.data !== 'undefined') {
797
+ if (typeof opts.data === 'undefined') {
798
+ opts.data = {};
799
+ }
800
+ opts.data = angular.merge(angular.copy(options.data), opts.data);
801
+ }
802
+
803
+ angular.extend(options, opts);
804
+
805
+ options.scope = angular.isObject(options.scope) ? options.scope.$new() : $rootScope.$new();
806
+ options.scope.confirm = function (value) {
807
+ defer.resolve(value);
808
+ var $dialog = $el(document.getElementById(openResult.id));
809
+ privateMethods.performCloseDialog($dialog, value);
810
+ };
811
+
812
+ var openResult = publicMethods.open(options);
813
+ if (openResult) {
814
+ openResult.closePromise.then(function (data) {
815
+ if (data) {
816
+ return defer.reject(data.value);
817
+ }
818
+ return defer.reject();
819
+ });
820
+ return defer.promise;
821
+ }
822
+ },
823
+
824
+ isOpen: function(id) {
825
+ var $dialog = $el(document.getElementById(id));
826
+ return $dialog.length > 0;
827
+ },
828
+
829
+ /*
830
+ * @param {String} id
831
+ * @return {Object} dialog
832
+ */
833
+ close: function (id, value) {
834
+ var $dialog = $el(document.getElementById(id));
835
+
836
+ if ($dialog.length) {
837
+ privateMethods.closeDialog($dialog, value);
838
+ } else {
839
+ if (id === '$escape') {
840
+ var topDialogId = openIdStack[openIdStack.length - 1];
841
+ $dialog = $el(document.getElementById(topDialogId));
842
+ if ($dialog.data('$ngDialogOptions').closeByEscape) {
843
+ privateMethods.closeDialog($dialog, '$escape');
844
+ }
845
+ } else {
846
+ publicMethods.closeAll(value);
847
+ }
848
+ }
849
+
850
+ return publicMethods;
851
+ },
852
+
853
+ closeAll: function (value) {
854
+ var $all = document.querySelectorAll('.ngdialog');
855
+
856
+ // Reverse order to ensure focus restoration works as expected
857
+ for (var i = $all.length - 1; i >= 0; i--) {
858
+ var dialog = $all[i];
859
+ privateMethods.closeDialog($el(dialog), value);
860
+ }
861
+ },
862
+
863
+ getOpenDialogs: function() {
864
+ return openIdStack;
865
+ },
866
+
867
+ getDefaults: function () {
868
+ return defaults;
869
+ }
870
+ };
871
+
872
+ angular.forEach(
873
+ ['html', 'body'],
874
+ function(elementName) {
875
+ $elements[elementName] = $document.find(elementName);
876
+ if (forceElementsReload[elementName]) {
877
+ var eventName = privateMethods.getRouterLocationEventName();
878
+ $rootScope.$on(eventName, function () {
879
+ $elements[elementName] = $document.find(elementName);
880
+ });
881
+ }
882
+ }
883
+ );
884
+
885
+ // Listen to navigation events to close dialog
886
+ var uiRouterVersion = privateMethods.detectUIRouter();
887
+ if (uiRouterVersion === UI_ROUTER_VERSION_ONE_PLUS) {
888
+ var $transitions = $injector.get('$transitions');
889
+ $transitions.onStart({}, function (trans) {
890
+ while (closeByNavigationDialogStack.length > 0) {
891
+ var toCloseDialog = closeByNavigationDialogStack.pop();
892
+ if (privateMethods.closeDialog(toCloseDialog) === false) {
893
+ return false;
894
+ }
895
+ }
896
+ });
897
+ }
898
+ else {
899
+ var eventName = uiRouterVersion === UI_ROUTER_VERSION_LEGACY ? '$stateChangeStart' : '$locationChangeStart';
900
+ $rootScope.$on(eventName, function ($event) {
901
+ while (closeByNavigationDialogStack.length > 0) {
902
+ var toCloseDialog = closeByNavigationDialogStack.pop();
903
+ if (privateMethods.closeDialog(toCloseDialog) === false) {
904
+ $event.preventDefault();
905
+ }
906
+ }
907
+ });
908
+ }
909
+
910
+ return publicMethods;
911
+ }];
912
+ });
913
+
914
+ m.directive('ngDialog', ['ngDialog', function (ngDialog) {
915
+ return {
916
+ restrict: 'A',
917
+ scope: {
918
+ ngDialogScope: '='
919
+ },
920
+ link: function (scope, elem, attrs) {
921
+ elem.on('click', function (e) {
922
+ e.preventDefault();
923
+
924
+ var ngDialogScope = angular.isDefined(scope.ngDialogScope) ? scope.ngDialogScope : 'noScope';
925
+ angular.isDefined(attrs.ngDialogClosePrevious) && ngDialog.close(attrs.ngDialogClosePrevious);
926
+
927
+ var defaults = ngDialog.getDefaults();
928
+
929
+ ngDialog.open({
930
+ template: attrs.ngDialog,
931
+ className: attrs.ngDialogClass || defaults.className,
932
+ appendClassName: attrs.ngDialogAppendClass,
933
+ controller: attrs.ngDialogController,
934
+ controllerAs: attrs.ngDialogControllerAs,
935
+ bindToController: attrs.ngDialogBindToController,
936
+ disableAnimation: attrs.ngDialogDisableAnimation,
937
+ scope: ngDialogScope,
938
+ data: attrs.ngDialogData,
939
+ showClose: attrs.ngDialogShowClose === 'false' ? false : (attrs.ngDialogShowClose === 'true' ? true : defaults.showClose),
940
+ closeByDocument: attrs.ngDialogCloseByDocument === 'false' ? false : (attrs.ngDialogCloseByDocument === 'true' ? true : defaults.closeByDocument),
941
+ closeByEscape: attrs.ngDialogCloseByEscape === 'false' ? false : (attrs.ngDialogCloseByEscape === 'true' ? true : defaults.closeByEscape),
942
+ overlay: attrs.ngDialogOverlay === 'false' ? false : (attrs.ngDialogOverlay === 'true' ? true : defaults.overlay),
943
+ preCloseCallback: attrs.ngDialogPreCloseCallback || defaults.preCloseCallback,
944
+ onOpenCallback: attrs.ngDialogOnOpenCallback || defaults.onOpenCallback,
945
+ bodyClassName: attrs.ngDialogBodyClass || defaults.bodyClassName
946
+ });
947
+ });
948
+ }
949
+ };
950
+ }]);
951
+
952
+ return m;
953
+ }));
@@ -0,0 +1,188 @@
1
+ @-webkit-keyframes ngdialog-flyin {
2
+ 0% {
3
+ opacity: 0;
4
+ -webkit-transform: translateY(-40px);
5
+ transform: translateY(-40px);
6
+ }
7
+
8
+ 100% {
9
+ opacity: 1;
10
+ -webkit-transform: translateY(0);
11
+ transform: translateY(0);
12
+ }
13
+ }
14
+
15
+ @keyframes ngdialog-flyin {
16
+ 0% {
17
+ opacity: 0;
18
+ -webkit-transform: translateY(-40px);
19
+ transform: translateY(-40px);
20
+ }
21
+
22
+ 100% {
23
+ opacity: 1;
24
+ -webkit-transform: translateY(0);
25
+ transform: translateY(0);
26
+ }
27
+ }
28
+
29
+ @-webkit-keyframes ngdialog-flyout {
30
+ 0% {
31
+ opacity: 1;
32
+ -webkit-transform: translateY(0);
33
+ transform: translateY(0);
34
+ }
35
+
36
+ 100% {
37
+ opacity: 0;
38
+ -webkit-transform: translateY(-40px);
39
+ transform: translateY(-40px);
40
+ }
41
+ }
42
+
43
+ @keyframes ngdialog-flyout {
44
+ 0% {
45
+ opacity: 1;
46
+ -webkit-transform: translateY(0);
47
+ transform: translateY(0);
48
+ }
49
+
50
+ 100% {
51
+ opacity: 0;
52
+ -webkit-transform: translateY(-40px);
53
+ transform: translateY(-40px);
54
+ }
55
+ }
56
+
57
+ .ngdialog.ngdialog-theme-default {
58
+ padding-bottom: 160px;
59
+ padding-top: 160px;
60
+ }
61
+
62
+ .ngdialog.ngdialog-theme-default.ngdialog-closing .ngdialog-content {
63
+ -webkit-animation: ngdialog-flyout .5s;
64
+ animation: ngdialog-flyout .5s;
65
+ }
66
+
67
+ .ngdialog.ngdialog-theme-default .ngdialog-content {
68
+ -webkit-animation: ngdialog-flyin .5s;
69
+ animation: ngdialog-flyin .5s;
70
+ background: #f0f0f0;
71
+ border-radius: 5px;
72
+ color: #444;
73
+ font-family: 'Helvetica',sans-serif;
74
+ font-size: 1.1em;
75
+ line-height: 1.5em;
76
+ margin: 0 auto;
77
+ max-width: 100%;
78
+ padding: 1em;
79
+ position: relative;
80
+ width: 450px;
81
+ }
82
+
83
+ .ngdialog.ngdialog-theme-default .ngdialog-close {
84
+ border: none;
85
+ background: transparent;
86
+ cursor: pointer;
87
+ position: absolute;
88
+ right: 0;
89
+ top: 0;
90
+ }
91
+
92
+ .ngdialog.ngdialog-theme-default .ngdialog-close:before {
93
+ display: block;
94
+ padding: 3px;
95
+ background: transparent;
96
+ color: #bbb;
97
+ content: '\00D7';
98
+ font-size: 26px;
99
+ font-weight: 400;
100
+ line-height: 26px;
101
+ text-align: center;
102
+ }
103
+
104
+ .ngdialog.ngdialog-theme-default .ngdialog-close:hover:before,
105
+ .ngdialog.ngdialog-theme-default .ngdialog-close:active:before {
106
+ color: #777;
107
+ }
108
+
109
+ .ngdialog.ngdialog-theme-default .ngdialog-message {
110
+ margin-bottom: .5em;
111
+ }
112
+
113
+ .ngdialog.ngdialog-theme-default .ngdialog-input {
114
+ margin-bottom: 1em;
115
+ }
116
+
117
+ .ngdialog.ngdialog-theme-default .ngdialog-input textarea,
118
+ .ngdialog.ngdialog-theme-default .ngdialog-input input[type="text"],
119
+ .ngdialog.ngdialog-theme-default .ngdialog-input input[type="password"],
120
+ .ngdialog.ngdialog-theme-default .ngdialog-input input[type="email"],
121
+ .ngdialog.ngdialog-theme-default .ngdialog-input input[type="url"] {
122
+ background: #fff;
123
+ border: 0;
124
+ border-radius: 3px;
125
+ font-family: inherit;
126
+ font-size: inherit;
127
+ font-weight: inherit;
128
+ margin: 0 0 .25em;
129
+ min-height: 2.5em;
130
+ padding: .25em .67em;
131
+ width: 100%;
132
+ }
133
+
134
+ .ngdialog.ngdialog-theme-default .ngdialog-input textarea:focus,
135
+ .ngdialog.ngdialog-theme-default .ngdialog-input input[type="text"]:focus,
136
+ .ngdialog.ngdialog-theme-default .ngdialog-input input[type="password"]:focus,
137
+ .ngdialog.ngdialog-theme-default .ngdialog-input input[type="email"]:focus,
138
+ .ngdialog.ngdialog-theme-default .ngdialog-input input[type="url"]:focus {
139
+ box-shadow: inset 0 0 0 2px #8dbdf1;
140
+ outline: none;
141
+ }
142
+
143
+ .ngdialog.ngdialog-theme-default .ngdialog-buttons {
144
+ *zoom: 1;
145
+ }
146
+
147
+ .ngdialog.ngdialog-theme-default .ngdialog-buttons:after {
148
+ content: '';
149
+ display: table;
150
+ clear: both;
151
+ }
152
+
153
+ .ngdialog.ngdialog-theme-default .ngdialog-button {
154
+ border: 0;
155
+ border-radius: 3px;
156
+ cursor: pointer;
157
+ float: right;
158
+ font-family: inherit;
159
+ font-size: .8em;
160
+ letter-spacing: .1em;
161
+ line-height: 1em;
162
+ margin: 0 0 0 .5em;
163
+ padding: .75em 2em;
164
+ text-transform: uppercase;
165
+ }
166
+
167
+ .ngdialog.ngdialog-theme-default .ngdialog-button:focus {
168
+ -webkit-animation: ngdialog-pulse 1.1s infinite;
169
+ animation: ngdialog-pulse 1.1s infinite;
170
+ outline: none;
171
+ }
172
+
173
+ @media (max-width: 568px) {
174
+ .ngdialog.ngdialog-theme-default .ngdialog-button:focus {
175
+ -webkit-animation: none;
176
+ animation: none;
177
+ }
178
+ }
179
+
180
+ .ngdialog.ngdialog-theme-default .ngdialog-button.ngdialog-button-primary {
181
+ background: #3288e6;
182
+ color: #fff;
183
+ }
184
+
185
+ .ngdialog.ngdialog-theme-default .ngdialog-button.ngdialog-button-secondary {
186
+ background: #e0e0e0;
187
+ color: #777;
188
+ }
@@ -0,0 +1,121 @@
1
+ @-webkit-keyframes ngdialog-fadeout {
2
+ 0% {
3
+ opacity: 1;
4
+ }
5
+
6
+ 100% {
7
+ opacity: 0;
8
+ }
9
+ }
10
+
11
+ @keyframes ngdialog-fadeout {
12
+ 0% {
13
+ opacity: 1;
14
+ }
15
+
16
+ 100% {
17
+ opacity: 0;
18
+ }
19
+ }
20
+
21
+ @-webkit-keyframes ngdialog-fadein {
22
+ 0% {
23
+ opacity: 0;
24
+ }
25
+
26
+ 100% {
27
+ opacity: 1;
28
+ }
29
+ }
30
+
31
+ @keyframes ngdialog-fadein {
32
+ 0% {
33
+ opacity: 0;
34
+ }
35
+
36
+ 100% {
37
+ opacity: 1;
38
+ }
39
+ }
40
+
41
+ .ngdialog {
42
+ box-sizing: border-box;
43
+ }
44
+
45
+ .ngdialog *,
46
+ .ngdialog *:before,
47
+ .ngdialog *:after {
48
+ box-sizing: inherit;
49
+ }
50
+
51
+ .ngdialog {
52
+ position: fixed;
53
+ overflow: auto;
54
+ -webkit-overflow-scrolling: touch;
55
+ z-index: 10000;
56
+ top: 0;
57
+ right: 0;
58
+ bottom: 0;
59
+ left: 0;
60
+ /* fix for Scrollbars not clickable on overflow #552 */
61
+ background: rgba(0, 0, 0, 0.4);
62
+ animation: ngdialog-fadein 0.5s;
63
+ /* end fix for Scrollbars not clickable on overflow #552 */
64
+ }
65
+
66
+ .ngdialog.ngdialog-disabled-animation,
67
+ .ngdialog.ngdialog-disabled-animation .ngdialog-overlay,
68
+ .ngdialog.ngdialog-disabled-animation .ngdialog-content {
69
+ -webkit-animation: none!important;
70
+ animation: none!important;
71
+ }
72
+
73
+ .ngdialog-overlay {
74
+ position: fixed;
75
+ top: 0;
76
+ right: 0;
77
+ bottom: 0;
78
+ left: 0;
79
+ -webkit-backface-visibility: hidden;
80
+ -webkit-animation: ngdialog-fadein 0.5s;
81
+ animation: ngdialog-fadein 0.5s;
82
+ /* fix for Scrollbars not clickable on overflow #552 */
83
+ margin-right: 15px;
84
+ background: transparent;
85
+ /* end fix for Scrollbars not clickable on overflow #552 */
86
+ }
87
+
88
+ .ngdialog-no-overlay {
89
+ pointer-events: none;
90
+ }
91
+
92
+ .ngdialog.ngdialog-closing .ngdialog-overlay {
93
+ -webkit-backface-visibility: hidden;
94
+ -webkit-animation: ngdialog-fadeout 0.5s;
95
+ animation: ngdialog-fadeout 0.5s;
96
+ }
97
+
98
+ .ngdialog-content {
99
+ background: white;
100
+ -webkit-backface-visibility: hidden;
101
+ -webkit-animation: ngdialog-fadein 0.5s;
102
+ animation: ngdialog-fadein 0.5s;
103
+ pointer-events: all;
104
+ }
105
+
106
+ .ngdialog.ngdialog-closing .ngdialog-content {
107
+ -webkit-backface-visibility: hidden;
108
+ -webkit-animation: ngdialog-fadeout 0.5s;
109
+ animation: ngdialog-fadeout 0.5s;
110
+ }
111
+
112
+ .ngdialog-close:before {
113
+ font-family: 'Helvetica', Arial, sans-serif;
114
+ content: '\00D7';
115
+ cursor: pointer;
116
+ }
117
+
118
+ html.ngdialog-open,
119
+ body.ngdialog-open {
120
+ overflow: hidden;
121
+ }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oxymoron
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.7
4
+ version: 1.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kononenko Paul
@@ -930,6 +930,7 @@ files:
930
930
  - vendor/assets/javascripts/oxymoron/i18n/angular-locale_zu-za.js
931
931
  - vendor/assets/javascripts/oxymoron/i18n/angular-locale_zu.js
932
932
  - vendor/assets/javascripts/oxymoron/jquery.min.js
933
+ - vendor/assets/javascripts/oxymoron/ng-dialog.js
933
934
  - vendor/assets/javascripts/oxymoron/ng-notify.js
934
935
  - vendor/assets/javascripts/oxymoron/pace.js
935
936
  - vendor/assets/javascripts/oxymoron/perfect-scrollbar.js
@@ -937,6 +938,8 @@ files:
937
938
  - vendor/assets/javascripts/oxymoron/underscore.js
938
939
  - vendor/assets/stylesheets/.DS_Store
939
940
  - vendor/assets/stylesheets/oxymoron/md-data-table.css
941
+ - vendor/assets/stylesheets/oxymoron/ng-dialog-theme-default.css
942
+ - vendor/assets/stylesheets/oxymoron/ng-dialog.css
940
943
  - vendor/assets/stylesheets/oxymoron/ng-notify.css
941
944
  - vendor/assets/stylesheets/oxymoron/normalize.css
942
945
  - vendor/assets/stylesheets/oxymoron/pace.css