sweetalert-rails 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 29099706ea483f328ad89906fac7364d09b576d5
4
- data.tar.gz: 06964be4dc925c33d905ad55fedc0513570dc60e
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NjAyNTkyZDI4MDNiYmI5NzcyMDVhYjBhNzJjNzVkYmFkMWQxNzU5MA==
5
+ data.tar.gz: !binary |-
6
+ YmUyZWQ5YmIyYjljOTk0OWMyMDAxZTEyOWZkNTU2ZDE0Mjk1M2JiMw==
5
7
  SHA512:
6
- metadata.gz: 3cf2ca6f2f03560e287cc3ac4b089935e66f7565e7a2d86f0a64c274ec9747f7ddbaf42ef2024275e8ab336d102e13425989b947236f8794da70bf82821f1b79
7
- data.tar.gz: c94b3d12fdc866823566a6f4fb11637b7f97850036b23bfe68463164cf5398f1ad11782af9a4b2d6f08b8db813e5255a575108e7c30416f3a42354668a4ae3e1
8
+ metadata.gz: !binary |-
9
+ NDNiMTRjNGU2YTlmOTBmZTdiNjFlMzdhNWMzZmExNmUyNzgxZGZiOWY2MmI1
10
+ MDUwNjFkYWZkMTNhM2RiZmJiNjg0M2FlMWQ3MmQ1NTFkYWMxMTEwZmRiZTM0
11
+ ZmM5NjUwNzY1Zjk1YzdhYzYyM2I4MTRmYjlkZTQ1MmJhNWMxNjQ=
12
+ data.tar.gz: !binary |-
13
+ MTc1ZTIxMDdjNjM5NDdiOGNmOWQwNmYxYmMxOWE0YzAzN2FkM2IxZmUxZTVj
14
+ YzM5MjY2MGE0NWRhMjBhYzRkZjI3NjUwN2E4YjI1YWY2NzE2NjU5ZTE1ZGFi
15
+ ZjUzZTZlZDZiMGNjYTliYTkxZTcyYzc0NTA3MjI0ZDgwOWI3NjA=
@@ -1,3 +1,3 @@
1
1
  module SweetAlert
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -5,7 +5,22 @@
5
5
 
6
6
  var modalClass = '.sweet-alert',
7
7
  overlayClass = '.sweet-overlay',
8
- alertTypes = ['error', 'warning', 'info', 'success'];
8
+ alertTypes = ['error', 'warning', 'info', 'success'],
9
+ defaultParams = {
10
+ title: '',
11
+ text: '',
12
+ type: null,
13
+ allowOutsideClick: false,
14
+ showCancelButton: false,
15
+ closeOnConfirm: true,
16
+ closeOnCancel: true,
17
+ confirmButtonText: 'OK',
18
+ confirmButtonColor: '#AEDEF4',
19
+ cancelButtonText: 'Cancel',
20
+ imageUrl: null,
21
+ imageSize: null,
22
+ timer: null
23
+ };
9
24
 
10
25
 
11
26
  /*
@@ -86,19 +101,21 @@
86
101
  return ('-' + parseInt(height / 2 + padding) + 'px');
87
102
  },
88
103
  fadeIn = function(elem, interval) {
89
- interval = interval || 16;
90
- elem.style.opacity = 0;
91
- elem.style.display = 'block';
92
- var last = +new Date();
93
- var tick = function() {
94
- elem.style.opacity = +elem.style.opacity + (new Date() - last) / 100;
95
- last = +new Date();
96
-
97
- if (+elem.style.opacity < 1) {
98
- setTimeout(tick, interval);
99
- }
100
- };
101
- tick();
104
+ if(+elem.style.opacity < 1) {
105
+ interval = interval || 16;
106
+ elem.style.opacity = 0;
107
+ elem.style.display = 'block';
108
+ var last = +new Date();
109
+ var tick = function() {
110
+ elem.style.opacity = +elem.style.opacity + (new Date() - last) / 100;
111
+ last = +new Date();
112
+
113
+ if (+elem.style.opacity < 1) {
114
+ setTimeout(tick, interval);
115
+ }
116
+ };
117
+ tick();
118
+ }
102
119
  },
103
120
  fadeOut = function(elem, interval) {
104
121
  interval = interval || 16;
@@ -131,11 +148,11 @@
131
148
  // Fallback
132
149
  var evt = document.createEvent('MouseEvents');
133
150
  evt.initEvent('click', false, false);
134
- node.dispatchEvent(evt);
151
+ node.dispatchEvent(evt);
135
152
  } else if( document.createEventObject ) {
136
- node.fireEvent('onclick') ;
153
+ node.fireEvent('onclick') ;
137
154
  } else if (typeof node.onclick === 'function' ) {
138
- node.onclick();
155
+ node.onclick();
139
156
  }
140
157
  },
141
158
  stopEventPropagation = function(e) {
@@ -158,7 +175,7 @@
158
175
  * Add modal + overlay to DOM
159
176
  */
160
177
 
161
- function initialize() {
178
+ window.sweetAlertInitialize = function() {
162
179
  var sweetHTML = '<div class="sweet-overlay" tabIndex="-1"></div><div class="sweet-alert" tabIndex="-1"><div class="icon error"><span class="x-mark"><span class="line left"></span><span class="line right"></span></span></div><div class="icon warning"> <span class="body"></span> <span class="dot"></span> </div> <div class="icon info"></div> <div class="icon success"> <span class="line tip"></span> <span class="line long"></span> <div class="placeholder"></div> <div class="fix"></div> </div> <div class="icon custom"></div> <h2>Title</h2><p>Text</p><button class="cancel" tabIndex="2">Cancel</button><button class="confirm" tabIndex="1">OK</button></div>',
163
180
  sweetWrap = document.createElement('div');
164
181
 
@@ -169,41 +186,25 @@
169
186
 
170
187
  // For development use only!
171
188
  /*jQuery.ajax({
172
- url: '../lib/sweet-alert.html', // Change path depending on file location
173
- dataType: 'html'
174
- })
175
- .done(function(html) {
176
- jQuery('body').append(html);
177
- });*/
189
+ url: '../lib/sweet-alert.html', // Change path depending on file location
190
+ dataType: 'html'
191
+ })
192
+ .done(function(html) {
193
+ jQuery('body').append(html);
194
+ });*/
178
195
  }
179
196
 
180
-
181
-
182
197
  /*
183
198
  * Global sweetAlert function
184
199
  */
185
200
 
186
201
  window.sweetAlert = window.swal = function() {
187
-
188
- // Default parameters
189
- var params = {
190
- title: '',
191
- text: '',
192
- type: null,
193
- allowOutsideClick: false,
194
- showCancelButton: false,
195
- confirmButtonText: 'OK',
196
- confirmButtonColor: '#AEDEF4',
197
- cancelButtonText: 'Cancel',
198
- imageUrl: null,
199
- imageSize: null
200
- };
201
-
202
202
  if (arguments[0] === undefined) {
203
203
  window.console.error('sweetAlert expects at least 1 attribute!');
204
204
  return false;
205
205
  }
206
206
 
207
+ var params = extend({}, defaultParams);
207
208
 
208
209
  switch (typeof arguments[0]) {
209
210
 
@@ -221,19 +222,21 @@
221
222
  }
222
223
 
223
224
  params.title = arguments[0].title;
224
- params.text = arguments[0].text || params.text;
225
- params.type = arguments[0].type || params.type;
226
- params.allowOutsideClick = arguments[0].allowOutsideClick || params.allowOutsideClick;
227
- params.showCancelButton = arguments[0].showCancelButton || params.showCancelButton;
225
+ params.text = arguments[0].text || defaultParams.text;
226
+ params.type = arguments[0].type || defaultParams.type;
227
+ params.allowOutsideClick = arguments[0].allowOutsideClick || defaultParams.allowOutsideClick;
228
+ params.showCancelButton = arguments[0].showCancelButton !== undefined ? arguments[0].showCancelButton : defaultParams.showCancelButton;
229
+ params.closeOnConfirm = arguments[0].closeOnConfirm !== undefined ? arguments[0].closeOnConfirm : defaultParams.closeOnConfirm;
230
+ params.closeOnCancel = arguments[0].closeOnCancel !== undefined ? arguments[0].closeOnCancel : defaultParams.closeOnCancel;
231
+ params.timer = arguments[0].timer || defaultParams.timer;
228
232
 
229
233
  // Show "Confirm" instead of "OK" if cancel button is visible
230
- params.confirmButtonText = (params.showCancelButton) ? 'Confirm' : params.confirmButtonText;
231
-
232
- params.confirmButtonText = arguments[0].confirmButtonText || params.confirmButtonText;
233
- params.confirmButtonColor = arguments[0].confirmButtonColor || params.confirmButtonColor;
234
- params.cancelButtonText = arguments[0].cancelButtonText || params.cancelButtonText;
235
- params.imageUrl = arguments[0].imageUrl || params.imageUrl;
236
- params.imageSize = arguments[0].imageSize || params.imageSize;
234
+ params.confirmButtonText = (defaultParams.showCancelButton) ? 'Confirm' : defaultParams.confirmButtonText;
235
+ params.confirmButtonText = arguments[0].confirmButtonText || defaultParams.confirmButtonText;
236
+ params.confirmButtonColor = arguments[0].confirmButtonColor || defaultParams.confirmButtonColor;
237
+ params.cancelButtonText = arguments[0].cancelButtonText || defaultParams.cancelButtonText;
238
+ params.imageUrl = arguments[0].imageUrl || defaultParams.imageUrl;
239
+ params.imageSize = arguments[0].imageSize || defaultParams.imageSize;
237
240
  params.doneFunction = arguments[1] || null;
238
241
 
239
242
  break;
@@ -244,8 +247,6 @@
244
247
 
245
248
  }
246
249
 
247
- //console.log(params.confirmButtonColor);
248
-
249
250
  setParameters(params);
250
251
  fixVerticalPosition();
251
252
  openModal();
@@ -294,10 +295,30 @@
294
295
  }
295
296
  break;
296
297
  case ("click"):
297
- if (targetedConfirm && doneFunctionExists && modalIsVisible) {
298
- params.doneFunction();
298
+ if (targetedConfirm && doneFunctionExists && modalIsVisible) { // Clicked "confirm"
299
+
300
+ params.doneFunction(true);
301
+
302
+ if (params.closeOnConfirm) {
303
+ closeModal();
304
+ }
305
+ } else if (doneFunctionExists && modalIsVisible) { // Clicked "cancel"
306
+
307
+ // Check if callback function expects a parameter (to track cancel actions)
308
+ var functionAsStr = String(params.doneFunction).replace(/\s/g, '');
309
+ var functionHandlesCancel = functionAsStr.substring(0, 9) === "function(" && functionAsStr.substring(9, 10) !== ")";
310
+
311
+ if (functionHandlesCancel) {
312
+ params.doneFunction(false);
313
+ }
314
+
315
+ if (params.closeOnCancel) {
316
+ closeModal();
317
+ }
318
+ } else {
319
+ closeModal();
299
320
  }
300
- closeModal();
321
+
301
322
  break;
302
323
  }
303
324
  };
@@ -435,11 +456,25 @@
435
456
  if (lastFocusedButton !== undefined) {
436
457
  lastFocusedButton.focus();
437
458
  lastFocusedButton = undefined;
438
- }
459
+ }
439
460
  }, 0);
440
461
  };
441
462
  };
442
463
 
464
+ /**
465
+ * Set default params for each popup
466
+ * @param {Object} userParams
467
+ */
468
+ window.swal.setDefaults = function(userParams) {
469
+ if (!userParams) {
470
+ throw new Error('userParams is required');
471
+ }
472
+ if (typeof userParams !== 'object') {
473
+ throw new Error('userParams has to be a object');
474
+ }
475
+
476
+ extend(defaultParams, userParams);
477
+ };
443
478
 
444
479
  /*
445
480
  * Set type, text and actions on modal
@@ -556,13 +591,16 @@
556
591
  // Done-function
557
592
  var hasDoneFunction = (params.doneFunction) ? true : false;
558
593
  modal.setAttribute('data-has-done-function', hasDoneFunction);
594
+
595
+ // Close timer
596
+ modal.setAttribute('data-timer', params.timer);
559
597
  }
560
598
 
561
599
 
562
600
  /*
563
601
  * Set hover, active and focus-states for buttons (source: http://www.sitepoint.com/javascript-generate-lighter-darker-color)
564
602
  */
565
-
603
+
566
604
  function colorLuminance(hex, lum) {
567
605
  // Validate hex string
568
606
  hex = String(hex).replace(/[^0-9a-f]/gi, '');
@@ -582,6 +620,16 @@
582
620
  return rgb;
583
621
  }
584
622
 
623
+ function extend(a, b){
624
+ for (var key in b) {
625
+ if (b.hasOwnProperty(key)) {
626
+ a[key] = b[key];
627
+ }
628
+ }
629
+
630
+ return a;
631
+ }
632
+
585
633
  function hexToRgb(hex) {
586
634
  var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
587
635
  return result ? parseInt(result[1], 16) + ', ' + parseInt(result[2], 16) + ', ' + parseInt(result[3], 16) : null;
@@ -613,6 +661,13 @@
613
661
  setTimeout(function() {
614
662
  addClass(modal, 'visible');
615
663
  }, 500);
664
+
665
+ var timer = modal.getAttribute('data-timer');
666
+ if (timer !== "null") {
667
+ setTimeout(function() {
668
+ closeModal();
669
+ }, timer);
670
+ }
616
671
  }
617
672
 
618
673
  function closeModal() {
@@ -668,19 +723,19 @@
668
723
  */
669
724
 
670
725
  (function () {
671
- if (document.readyState === "complete" || document.readyState === "interactive") {
672
- initialize();
726
+ if (document.readyState === "complete" || document.readyState === "interactive" && document.body) {
727
+ sweetAlertInitialize();
673
728
  } else {
674
729
  if (document.addEventListener) {
675
730
  document.addEventListener('DOMContentLoaded', function factorial() {
676
731
  document.removeEventListener('DOMContentLoaded', arguments.callee, false);
677
- initialize();
732
+ sweetAlertInitialize();
678
733
  }, false);
679
734
  } else if (document.attachEvent) {
680
735
  document.attachEvent('onreadystatechange', function() {
681
736
  if (document.readyState === 'complete') {
682
737
  document.detachEvent('onreadystatechange', arguments.callee);
683
- initialize();
738
+ sweetAlertInitialize();
684
739
  }
685
740
  });
686
741
  }
@@ -72,6 +72,8 @@
72
72
  background-color: #b6b6b6; }
73
73
  .sweet-alert button.cancel:focus {
74
74
  box-shadow: rgba(197, 205, 211, 0.8) 0px 0px 2px, rgba(0, 0, 0, 0.0470588) 0px 0px 0px 1px inset !important; }
75
+ .sweet-alert button::-moz-focus-inner {
76
+ border: 0; }
75
77
  .sweet-alert[data-has-cancel-button=false] button {
76
78
  box-shadow: none !important; }
77
79
  .sweet-alert .icon {
@@ -153,6 +155,7 @@
153
155
  width: 60px;
154
156
  height: 120px;
155
157
  background: white;
158
+ -webkit-transform: rotate(45deg);
156
159
  transform: rotate(45deg); }
157
160
  .sweet-alert .icon.success::before {
158
161
  border-radius: 120px 0 0 120px;
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sweetalert-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rustam Sharshenov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-08 00:00:00.000000000 Z
11
+ date: 2014-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - ! '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: 3.1.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - ! '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: 3.1.0
27
27
  description: This gem provides SweerAlert for your Rails application.
@@ -31,7 +31,7 @@ executables: []
31
31
  extensions: []
32
32
  extra_rdoc_files: []
33
33
  files:
34
- - ".gitignore"
34
+ - .gitignore
35
35
  - Gemfile
36
36
  - LICENSE.txt
37
37
  - README.md
@@ -52,12 +52,12 @@ require_paths:
52
52
  - lib
53
53
  required_ruby_version: !ruby/object:Gem::Requirement
54
54
  requirements:
55
- - - ">="
55
+ - - ! '>='
56
56
  - !ruby/object:Gem::Version
57
57
  version: '0'
58
58
  required_rubygems_version: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - ">="
60
+ - - ! '>='
61
61
  - !ruby/object:Gem::Version
62
62
  version: '0'
63
63
  requirements: []