rails-alertify 0.2.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,9 @@
1
+ .bundle/
2
+ .DS_Store
3
+ *.gem
4
+ log/*.log
5
+ pkg/
6
+ test/dummy/db/*.sqlite3
7
+ test/dummy/log/*.log
8
+ test/dummy/tmp/
9
+ test/dummy/.sass-cache
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Declare your gem's dependencies in alertify-rails.gemspec.
4
+ # Bundler will treat runtime dependencies like base dependencies, and
5
+ # development dependencies will be added by default to the :development group.
6
+ gemspec
@@ -0,0 +1,20 @@
1
+ Copyright 2012 Daniel Schmidt
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,49 @@
1
+ # Alertify.js for Rails
2
+
3
+ Rails asset-pipeline gem to provide alertify.js out of the box.
4
+
5
+ ### Install
6
+
7
+ Add to your Gemfile:
8
+
9
+ ```ruby
10
+ gem "rails-alertify"
11
+ ```
12
+
13
+ ### Usage
14
+
15
+ In your application.js manifest include the javascript files:
16
+
17
+ ```js
18
+ //= require alertify
19
+ ```
20
+
21
+ If your manifest is written in CoffeeScript:
22
+
23
+ ```coffeescript
24
+ #= require alertify
25
+ ```
26
+
27
+ Last step is to add the <code>core</code> and <code>default</code> stylesheets tou your application if you want to use the default ones.
28
+
29
+ ```css
30
+ /*
31
+ *= require alertify/core
32
+ *= require alertify/default
33
+ *
34
+ */
35
+ ```
36
+
37
+ ### About me
38
+
39
+ Senior Developer @ Datenspiel GmbH (Leipzig/Germany)
40
+
41
+ ### Thanks
42
+
43
+ Thanks to Fabien Doiron for [Alertify.js](https://github.com/fabien-d/alertify.js)
44
+
45
+ ### License
46
+
47
+ Copyright (c) 2012 Daniel Schmidt
48
+
49
+ Licensed under MIT-License.
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'AlertifyRails'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+
24
+
25
+
26
+ Bundler::GemHelper.install_tasks
27
+
28
+ require 'rake/testtask'
29
+
30
+ Rake::TestTask.new(:test) do |t|
31
+ t.libs << 'lib'
32
+ t.libs << 'test'
33
+ t.pattern = 'test/**/*_test.rb'
34
+ t.verbose = false
35
+ end
36
+
37
+
38
+ task :default => :test
@@ -0,0 +1,11 @@
1
+ require 'alertify-rails/version'
2
+ module Alertify
3
+ module Rails
4
+ if defined?(::Rails) and ::Rails.version >= "3.1"
5
+ class Rails::Engine < ::Rails::Engine
6
+ # enables the asset pipeline
7
+ end
8
+ end
9
+ end
10
+
11
+ end
@@ -0,0 +1,3 @@
1
+ module AlertifyRails
2
+ VERSION = "0.2.12"
3
+ end
@@ -0,0 +1,19 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+
3
+ # Maintain your gem's version:
4
+ require "alertify-rails/version"
5
+
6
+ # Describe your gem and declare its dependencies:
7
+ Gem::Specification.new do |s|
8
+ s.name = "rails-alertify"
9
+ s.version = AlertifyRails::VERSION
10
+ s.authors = ["Daniel Schmidt"]
11
+ s.email = ["dsci@code79.net"]
12
+ s.homepage = "https://github.com/dsci/rails-alertify"
13
+ s.summary = %q{alertify.js asset pipeline integration}
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+
19
+ end
@@ -0,0 +1,467 @@
1
+ /**
2
+ * alertify
3
+ * An unobtrusive customizable JavaScript notification system
4
+ *
5
+ * @author Fabien Doiron <fabien.doiron@gmail.com>
6
+ * @copyright Fabien Doiron 2012
7
+ * @license MIT <http://opensource.org/licenses/mit-license.php>
8
+ * @link http://www.github.com/fabien-d
9
+ * @module alertify
10
+ * @version 0.2.12
11
+ */
12
+
13
+ /*global define*/
14
+ (function (global, undefined) {
15
+ "use strict";
16
+
17
+ var document = global.document,
18
+ Alertify;
19
+
20
+ Alertify = function () {
21
+
22
+ var _alertify = {},
23
+ dialogs = {},
24
+ isopen = false,
25
+ keys = { ENTER: 13, ESC: 27, SPACE: 32 },
26
+ queue = [],
27
+ $, elCallee, elCover, elDialog, elLog;
28
+
29
+ /**
30
+ * Markup pieces
31
+ * @type {Object}
32
+ */
33
+ dialogs = {
34
+ buttons : {
35
+ holder : "<nav class=\"alertify-buttons\">{{buttons}}</nav>",
36
+ submit : "<button type=\"submit\" class=\"alertify-button alertify-button-ok\" id=\"alertify-ok\" />{{ok}}</button>",
37
+ ok : "<a href=\"#\" class=\"alertify-button alertify-button-ok\" id=\"alertify-ok\">{{ok}}</a>",
38
+ cancel : "<a href=\"#\" class=\"alertify-button alertify-button-cancel\" id=\"alertify-cancel\">{{cancel}}</a>"
39
+ },
40
+ input : "<input type=\"text\" class=\"alertify-text\" id=\"alertify-text\">",
41
+ message : "<p class=\"alertify-message\">{{message}}</p>",
42
+ log : "<article class=\"alertify-log{{class}}\">{{message}}</article>"
43
+ };
44
+
45
+ /**
46
+ * Shorthand for document.getElementById()
47
+ *
48
+ * @param {String} id A specific element ID
49
+ * @return {Object} HTML element
50
+ */
51
+ $ = function (id) {
52
+ return document.getElementById(id);
53
+ };
54
+
55
+ /**
56
+ * Alertify private object
57
+ * @type {Object}
58
+ */
59
+ _alertify = {
60
+
61
+ /**
62
+ * Labels object
63
+ * @type {Object}
64
+ */
65
+ labels : {
66
+ ok : "OK",
67
+ cancel : "Cancel"
68
+ },
69
+
70
+ /**
71
+ * Delay number
72
+ * @type {Number}
73
+ */
74
+ delay : 5000,
75
+
76
+ /**
77
+ * Set the proper button click events
78
+ *
79
+ * @param {Function} fn [Optional] Callback function
80
+ *
81
+ * @return {undefined}
82
+ */
83
+ addListeners : function (fn) {
84
+ var btnReset = $("alertify-resetFocus"),
85
+ btnOK = $("alertify-ok") || undefined,
86
+ btnCancel = $("alertify-cancel") || undefined,
87
+ input = $("alertify-text") || undefined,
88
+ form = $("alertify-form") || undefined,
89
+ hasOK = (typeof btnOK !== "undefined"),
90
+ hasCancel = (typeof btnCancel !== "undefined"),
91
+ hasInput = (typeof input !== "undefined"),
92
+ val = "",
93
+ self = this,
94
+ ok, cancel, common, key, reset;
95
+
96
+ // ok event handler
97
+ ok = function (event) {
98
+ if (typeof event.preventDefault !== "undefined") event.preventDefault();
99
+ common(event);
100
+ if (typeof input !== "undefined") val = input.value;
101
+ if (typeof fn === "function") fn(true, val);
102
+ };
103
+
104
+ // cancel event handler
105
+ cancel = function (event) {
106
+ if (typeof event.preventDefault !== "undefined") event.preventDefault();
107
+ common(event);
108
+ if (typeof fn === "function") fn(false);
109
+ };
110
+
111
+ // common event handler (keyup, ok and cancel)
112
+ common = function (event) {
113
+ self.hide();
114
+ self.unbind(document.body, "keyup", key);
115
+ self.unbind(btnReset, "focus", reset);
116
+ if (hasInput) self.unbind(form, "submit", ok);
117
+ if (hasOK) self.unbind(btnOK, "click", ok);
118
+ if (hasCancel) self.unbind(btnCancel, "click", cancel);
119
+ };
120
+
121
+ // keyup handler
122
+ key = function (event) {
123
+ var keyCode = event.keyCode;
124
+ if (keyCode === keys.SPACE && !hasInput) ok(event);
125
+ if (keyCode === keys.ESC && hasCancel) cancel(event);
126
+ };
127
+
128
+ // reset focus to first item in the dialog
129
+ reset = function (event) {
130
+ if (hasInput) input.focus();
131
+ else if (hasCancel) btnCancel.focus();
132
+ else btnOK.focus();
133
+ };
134
+
135
+ // handle reset focus link
136
+ // this ensures that the keyboard focus does not
137
+ // ever leave the dialog box until an action has
138
+ // been taken
139
+ this.bind(btnReset, "focus", reset);
140
+ // handle OK click
141
+ if (hasOK) this.bind(btnOK, "click", ok);
142
+ // handle Cancel click
143
+ if (hasCancel) this.bind(btnCancel, "click", cancel);
144
+ // listen for keys, Cancel => ESC
145
+ this.bind(document.body, "keyup", key);
146
+ // bind form submit
147
+ if (hasInput) this.bind(form, "submit", ok);
148
+ // set focus on OK button or the input text
149
+ global.setTimeout(function () {
150
+ if (input) {
151
+ input.focus();
152
+ input.select();
153
+ }
154
+ else btnOK.focus();
155
+ }, 50);
156
+ },
157
+
158
+ /**
159
+ * Bind events to elements
160
+ *
161
+ * @param {Object} el HTML Object
162
+ * @param {Event} event Event to attach to element
163
+ * @param {Function} fn Callback function
164
+ *
165
+ * @return {undefined}
166
+ */
167
+ bind : function (el, event, fn) {
168
+ if (typeof el.addEventListener === "function") {
169
+ el.addEventListener(event, fn, false);
170
+ } else if (el.attachEvent) {
171
+ el.attachEvent("on" + event, fn);
172
+ }
173
+ },
174
+
175
+ /**
176
+ * Build the proper message box
177
+ *
178
+ * @param {Object} item Current object in the queue
179
+ *
180
+ * @return {String} An HTML string of the message box
181
+ */
182
+ build : function (item) {
183
+ var html = "",
184
+ type = item.type,
185
+ message = item.message;
186
+
187
+ html += "<div class=\"alertify-dialog\">";
188
+
189
+ if (type === "prompt") html += "<form id=\"alertify-form\">";
190
+
191
+ html += "<article class=\"alertify-inner\">";
192
+ html += dialogs.message.replace("{{message}}", message);
193
+
194
+ if (type === "prompt") html += dialogs.input;
195
+
196
+ html += dialogs.buttons.holder;
197
+ html += "</article>";
198
+
199
+ if (type === "prompt") html += "</form>";
200
+
201
+ html += "<a id=\"alertify-resetFocus\" class=\"alertify-resetFocus\" href=\"#\">Reset Focus</a>";
202
+ html += "</div>";
203
+
204
+ switch (type) {
205
+ case "confirm":
206
+ html = html.replace("{{buttons}}", dialogs.buttons.cancel + dialogs.buttons.ok);
207
+ html = html.replace("{{ok}}", this.labels.ok).replace("{{cancel}}", this.labels.cancel);
208
+ break;
209
+ case "prompt":
210
+ html = html.replace("{{buttons}}", dialogs.buttons.cancel + dialogs.buttons.submit);
211
+ html = html.replace("{{ok}}", this.labels.ok).replace("{{cancel}}", this.labels.cancel);
212
+ break;
213
+ case "alert":
214
+ html = html.replace("{{buttons}}", dialogs.buttons.ok);
215
+ html = html.replace("{{ok}}", this.labels.ok);
216
+ break;
217
+ default:
218
+ break;
219
+ }
220
+
221
+ elDialog.className = "alertify alertify-show alertify-" + type;
222
+ elCover.className = "alertify-cover";
223
+ return html;
224
+ },
225
+
226
+ /**
227
+ * Close the log messages
228
+ *
229
+ * @param {Object} elem HTML Element of log message to close
230
+ * @param {Number} wait [optional] Time (in ms) to wait before automatically hiding the message
231
+ *
232
+ * @return {undefined}
233
+ */
234
+ close : function (elem, wait) {
235
+ var timer = (wait && !isNaN(wait)) ? +wait : this.delay; // Unary Plus: +"2" === 2
236
+ this.bind(elem, "click", function () {
237
+ elLog.removeChild(elem);
238
+ });
239
+ setTimeout(function () {
240
+ if (typeof elem !== "undefined" && elem.parentNode === elLog) elLog.removeChild(elem);
241
+ }, timer);
242
+ },
243
+
244
+ /**
245
+ * Create a dialog box
246
+ *
247
+ * @param {String} message The message passed from the callee
248
+ * @param {String} type Type of dialog to create
249
+ * @param {Function} fn [Optional] Callback function
250
+ * @param {String} placeholder [Optional] Default value for prompt input field
251
+ *
252
+ * @return {Object}
253
+ */
254
+ dialog : function (message, type, fn, placeholder) {
255
+ // set the current active element
256
+ // this allows the keyboard focus to be resetted
257
+ // after the dialog box is closed
258
+ elCallee = document.activeElement;
259
+ // check to ensure the alertify dialog element
260
+ // has been successfully created
261
+ var check = function () {
262
+ if (elDialog && elDialog.scrollTop !== null) return;
263
+ else check();
264
+ };
265
+ // error catching
266
+ if (typeof message !== "string") throw new Error("message must be a string");
267
+ if (typeof type !== "string") throw new Error("type must be a string");
268
+ if (typeof fn !== "undefined" && typeof fn !== "function") throw new Error("fn must be a function");
269
+ // initialize alertify if it hasn't already been done
270
+ if (typeof this.init === "function") {
271
+ this.init();
272
+ check();
273
+ }
274
+
275
+ queue.push({ type: type, message: message, callback: fn, placeholder: placeholder });
276
+ if (!isopen) this.setup();
277
+
278
+ return this;
279
+ },
280
+
281
+ /**
282
+ * Extend the log method to create custom methods
283
+ *
284
+ * @param {String} type Custom method name
285
+ *
286
+ * @return {Function}
287
+ */
288
+ extend : function (type) {
289
+ return function (message, wait) { this.log(message, type, wait); };
290
+ },
291
+
292
+ /**
293
+ * Hide the dialog and rest to defaults
294
+ *
295
+ * @return {undefined}
296
+ */
297
+ hide : function () {
298
+ // remove reference from queue
299
+ queue.splice(0,1);
300
+ // if items remaining in the queue
301
+ if (queue.length > 0) this.setup();
302
+ else {
303
+ isopen = false;
304
+ elDialog.className = "alertify alertify-hide alertify-hidden";
305
+ elCover.className = "alertify-cover alertify-hidden";
306
+ // set focus to the last element or body
307
+ // after the dialog is closed
308
+ elCallee.focus();
309
+ }
310
+ },
311
+
312
+ /**
313
+ * Initialize Alertify
314
+ * Create the 2 main elements
315
+ *
316
+ * @return {undefined}
317
+ */
318
+ init : function () {
319
+ // ensure legacy browsers support html5 tags
320
+ document.createElement("nav");
321
+ document.createElement("article");
322
+ document.createElement("section");
323
+ // cover
324
+ elCover = document.createElement("div");
325
+ elCover.setAttribute("id", "alertify-cover");
326
+ elCover.className = "alertify-cover alertify-hidden";
327
+ document.body.appendChild(elCover);
328
+ // main element
329
+ elDialog = document.createElement("section");
330
+ elDialog.setAttribute("id", "alertify");
331
+ elDialog.className = "alertify alertify-hidden";
332
+ document.body.appendChild(elDialog);
333
+ // log element
334
+ elLog = document.createElement("section");
335
+ elLog.setAttribute("id", "alertify-logs");
336
+ elLog.className = "alertify-logs";
337
+ document.body.appendChild(elLog);
338
+ // set tabindex attribute on body element
339
+ // this allows script to give it focus
340
+ // after the dialog is closed
341
+ document.body.setAttribute("tabindex", "0");
342
+ // clean up init method
343
+ delete this.init;
344
+ },
345
+
346
+ /**
347
+ * Show a new log message box
348
+ *
349
+ * @param {String} message The message passed from the callee
350
+ * @param {String} type [Optional] Optional type of log message
351
+ * @param {Number} wait [Optional] Time (in ms) to wait before auto-hiding the log
352
+ *
353
+ * @return {Object}
354
+ */
355
+ log : function (message, type, wait) {
356
+ // check to ensure the alertify dialog element
357
+ // has been successfully created
358
+ var check = function () {
359
+ if (elLog && elLog.scrollTop !== null) return;
360
+ else check();
361
+ };
362
+ // initialize alertify if it hasn't already been done
363
+ if (typeof this.init === "function") {
364
+ this.init();
365
+ check();
366
+ }
367
+ this.notify(message, type, wait);
368
+ return this;
369
+ },
370
+
371
+ /**
372
+ * Add new log message
373
+ * If a type is passed, a class name "alertify-log-{type}" will get added.
374
+ * This allows for custom look and feel for various types of notifications.
375
+ *
376
+ * @param {String} message The message passed from the callee
377
+ * @param {String} type [Optional] Type of log message
378
+ * @param {Number} wait [Optional] Time (in ms) to wait before auto-hiding
379
+ *
380
+ * @return {undefined}
381
+ */
382
+ notify : function (message, type, wait) {
383
+ var log = document.createElement("article");
384
+ log.className = "alertify-log" + ((typeof type === "string" && type !== "") ? " alertify-log-" + type : "");
385
+ log.innerHTML = message;
386
+ // prepend child
387
+ elLog.insertBefore(log, elLog.firstChild);
388
+ // triggers the CSS animation
389
+ setTimeout(function() { log.className = log.className + " alertify-log-show"; }, 50);
390
+ this.close(log, wait);
391
+ },
392
+
393
+ /**
394
+ * Set properties
395
+ *
396
+ * @param {Object} args Passing parameters
397
+ *
398
+ * @return {undefined}
399
+ */
400
+ set : function (args) {
401
+ var k;
402
+ // error catching
403
+ if (typeof args !== "object" && args instanceof Array) throw new Error("args must be an object");
404
+ // set parameters
405
+ for (k in args) {
406
+ if (args.hasOwnProperty(k)) {
407
+ this[k] = args[k];
408
+ }
409
+ }
410
+ },
411
+
412
+ /**
413
+ * Initiate all the required pieces for the dialog box
414
+ *
415
+ * @return {undefined}
416
+ */
417
+ setup : function () {
418
+ var item = queue[0];
419
+
420
+ isopen = true;
421
+ elDialog.innerHTML = this.build(item);
422
+ if (typeof item.placeholder === "string") $("alertify-text").value = item.placeholder;
423
+ this.addListeners(item.callback);
424
+ },
425
+
426
+ /**
427
+ * Unbind events to elements
428
+ *
429
+ * @param {Object} el HTML Object
430
+ * @param {Event} event Event to detach to element
431
+ * @param {Function} fn Callback function
432
+ *
433
+ * @return {undefined}
434
+ */
435
+ unbind : function (el, event, fn) {
436
+ if (typeof el.removeEventListener === "function") {
437
+ el.removeEventListener(event, fn, false);
438
+ } else if (el.detachEvent) {
439
+ el.detachEvent("on" + event, fn);
440
+ }
441
+ }
442
+ };
443
+
444
+ return {
445
+ alert : function (message, fn) { _alertify.dialog(message, "alert", fn); return this; },
446
+ confirm : function (message, fn) { _alertify.dialog(message, "confirm", fn); return this; },
447
+ extend : _alertify.extend,
448
+ init : _alertify.init,
449
+ log : function (message, type, wait) { _alertify.log(message, type, wait); return this; },
450
+ prompt : function (message, fn, placeholder) { _alertify.dialog(message, "prompt", fn, placeholder); return this; },
451
+ success : function (message, wait) { _alertify.log(message, "success", wait); return this; },
452
+ error : function (message, wait) { _alertify.log(message, "error", wait); return this; },
453
+ set : function (args) { _alertify.set(args); },
454
+ labels : _alertify.labels
455
+ };
456
+ };
457
+
458
+ // AMD and window support
459
+ if (typeof define === "function") {
460
+ define([], function () { return new Alertify(); });
461
+ } else {
462
+ if (typeof global.alertify === "undefined") {
463
+ global.alertify = new Alertify();
464
+ }
465
+ }
466
+
467
+ }(this));
@@ -0,0 +1,95 @@
1
+ .alertify-show,
2
+ .alertify-log {
3
+ -webkit-transition: all 500ms cubic-bezier(0.175, 0.885, 0.320, 1); /* older webkit */
4
+ -webkit-transition: all 500ms cubic-bezier(0.175, 0.885, 0.320, 1.275);
5
+ -moz-transition: all 500ms cubic-bezier(0.175, 0.885, 0.320, 1.275);
6
+ -ms-transition: all 500ms cubic-bezier(0.175, 0.885, 0.320, 1.275);
7
+ -o-transition: all 500ms cubic-bezier(0.175, 0.885, 0.320, 1.275);
8
+ transition: all 500ms cubic-bezier(0.175, 0.885, 0.320, 1.275); /* easeOutBack */
9
+ }
10
+ .alertify-hide {
11
+ -webkit-transition: all 250ms cubic-bezier(0.600, 0, 0.735, 0.045); /* older webkit */
12
+ -webkit-transition: all 250ms cubic-bezier(0.600, -0.280, 0.735, 0.045);
13
+ -moz-transition: all 250ms cubic-bezier(0.600, -0.280, 0.735, 0.045);
14
+ -ms-transition: all 250ms cubic-bezier(0.600, -0.280, 0.735, 0.045);
15
+ -o-transition: all 250ms cubic-bezier(0.600, -0.280, 0.735, 0.045);
16
+ transition: all 250ms cubic-bezier(0.600, -0.280, 0.735, 0.045); /* easeInBack */
17
+ }
18
+ .alertify-cover {
19
+ position: fixed; z-index: 99999;
20
+ top: 0; right: 0; bottom: 0; left: 0;
21
+ }
22
+ .alertify {
23
+ position: fixed; z-index: 99999;
24
+ top: 50px; left: 50%;
25
+ width: 550px;
26
+ margin-left: -275px;
27
+ }
28
+ .alertify-hidden {
29
+ top: -50px;
30
+ visibility: hidden;
31
+ }
32
+ .alertify-logs {
33
+ position: fixed;
34
+ z-index: 5000;
35
+ bottom: 10px;
36
+ right: 10px;
37
+ width: 300px;
38
+ }
39
+ .alertify-log {
40
+ display: block;
41
+ margin-top: 10px;
42
+ position: relative;
43
+ right: -300px;
44
+ }
45
+ .alertify-log-show {
46
+ right: 0;
47
+ }
48
+ .alertify-dialog {
49
+ padding: 25px;
50
+ }
51
+ .alertify-resetFocus {
52
+ border: 0;
53
+ clip: rect(0 0 0 0);
54
+ height: 1px;
55
+ margin: -1px;
56
+ overflow: hidden;
57
+ padding: 0;
58
+ position: absolute;
59
+ width: 1px;
60
+ }
61
+ .alertify-inner {
62
+ text-align: center;
63
+ }
64
+ .alertify-text {
65
+ margin-bottom: 15px;
66
+ width: 100%;
67
+ -webkit-box-sizing: border-box;
68
+ -moz-box-sizing: border-box;
69
+ box-sizing: border-box;
70
+ font-size: 100%;
71
+ }
72
+ .alertify-buttons {
73
+ }
74
+ .alertify-button {
75
+ /* line-height and font-size for input button */
76
+ line-height: 1.5;
77
+ font-size: 100%;
78
+ display: inline-block;
79
+ cursor: pointer;
80
+ margin-left: 5px;
81
+ }
82
+
83
+ @media only screen and (max-width: 680px) {
84
+ .alertify,
85
+ .alertify-logs {
86
+ width: 90%;
87
+ -webkit-box-sizing: border-box;
88
+ -moz-box-sizing: border-box;
89
+ box-sizing: border-box;
90
+ }
91
+ .alertify {
92
+ left: 5%;
93
+ margin: 0;
94
+ }
95
+ }
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Default Look and Feel
3
+ */
4
+ .alertify,
5
+ .alertify-log {
6
+ font-family: sans-serif;
7
+ }
8
+ .alertify {
9
+ background: #FFF;
10
+ border: 10px solid #333; /* browsers that don't support rgba */
11
+ border: 10px solid rgba(0,0,0,.7);
12
+ border-radius: 8px;
13
+ box-shadow: 0 3px 3px rgba(0,0,0,.3);
14
+ -webkit-background-clip: padding; /* Safari 4? Chrome 6? */
15
+ -moz-background-clip: padding; /* Firefox 3.6 */
16
+ background-clip: padding-box; /* Firefox 4, Safari 5, Opera 10, IE 9 */
17
+ }
18
+ .alertify-text {
19
+ border: 1px solid #CCC;
20
+ padding: 10px;
21
+ border-radius: 4px;
22
+ }
23
+ .alertify-button {
24
+ border-radius: 4px;
25
+ color: #FFF;
26
+ font-weight: bold;
27
+ padding: 6px 15px;
28
+ text-decoration: none;
29
+ text-shadow: 1px 1px 0 rgba(0,0,0,.5);
30
+ box-shadow: inset 0 1px 0 0 rgba(255,255,255,.5);
31
+ background-image: -webkit-linear-gradient(top, rgba(255,255,255,.3), rgba(255,255,255,0));
32
+ background-image: -moz-linear-gradient(top, rgba(255,255,255,.3), rgba(255,255,255,0));
33
+ background-image: -ms-linear-gradient(top, rgba(255,255,255,.3), rgba(255,255,255,0));
34
+ background-image: -o-linear-gradient(top, rgba(255,255,255,.3), rgba(255,255,255,0));
35
+ background-image: linear-gradient(top, rgba(255,255,255,.3), rgba(255,255,255,0));
36
+ }
37
+ .alertify-button:hover,
38
+ .alertify-button:focus {
39
+ outline: none;
40
+ box-shadow: 0 0 15px #2B72D5;
41
+ background-image: -webkit-linear-gradient(top, rgba(0,0,0,.1), rgba(0,0,0,0));
42
+ background-image: -moz-linear-gradient(top, rgba(0,0,0,.1), rgba(0,0,0,0));
43
+ background-image: -ms-linear-gradient(top, rgba(0,0,0,.1), rgba(0,0,0,0));
44
+ background-image: -o-linear-gradient(top, rgba(0,0,0,.1), rgba(0,0,0,0));
45
+ background-image: linear-gradient(top, rgba(0,0,0,.1), rgba(0,0,0,0));
46
+ }
47
+ .alertify-button:active {
48
+ position: relative;
49
+ top: 1px;
50
+ }
51
+ .alertify-button-cancel {
52
+ background-color: #FE1A00;
53
+ border: 1px solid #D83526;
54
+ }
55
+ .alertify-button-ok {
56
+ background-color: #5CB811;
57
+ border: 1px solid #3B7808;
58
+ }
59
+ .alertify-log {
60
+ background: #1F1F1F;
61
+ background: rgba(0,0,0,.9);
62
+ padding: 15px;
63
+ border-radius: 4px;
64
+ color: #FFF;
65
+ text-shadow: -1px -1px 0 rgba(0,0,0,.5);
66
+ }
67
+ .alertify-log-error {
68
+ background: #FE1A00;
69
+ background: rgba(254,26,0,.9);
70
+ }
71
+ .alertify-log-success {
72
+ background: #5CB811;
73
+ background: rgba(92,184,17,.9);
74
+ }
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rails-alertify
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.12
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Daniel Schmidt
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-12-12 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description:
15
+ email:
16
+ - dsci@code79.net
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - Gemfile
23
+ - MIT-LICENSE
24
+ - README.md
25
+ - Rakefile
26
+ - lib/alertify-rails.rb
27
+ - lib/alertify-rails/version.rb
28
+ - rails-alertify.gemspec
29
+ - vendor/assets/javascripts/alertify.js
30
+ - vendor/assets/stylesheets/alertify/core.css
31
+ - vendor/assets/stylesheets/alertify/default.css
32
+ homepage: https://github.com/dsci/rails-alertify
33
+ licenses: []
34
+ post_install_message:
35
+ rdoc_options: []
36
+ require_paths:
37
+ - lib
38
+ required_ruby_version: !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ required_rubygems_version: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ! '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ requirements: []
51
+ rubyforge_project:
52
+ rubygems_version: 1.8.24
53
+ signing_key:
54
+ specification_version: 3
55
+ summary: alertify.js asset pipeline integration
56
+ test_files: []