jreject-rails 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9961e100cd7a0b3ce15c9c09464e64b58dadf849
4
+ data.tar.gz: ffd9f1ef0cf7d23287a9377705e09f5f0c3096b8
5
+ SHA512:
6
+ metadata.gz: 48644f7acf24d23d7721ce19d77a360701147bb3e87274100de8141df30fdf2d48f895f9a9b931fd02f219d63b6dca2263d68a9adc1f5dd93001c8a2f4319d42
7
+ data.tar.gz: b2c0c695f7b18222e252bf4f48dcc277e146d13c347dd03da450f0a28edea939b110fe44fe12fb633c2ae5118992d14a435e91690053a36526a99239f6838a64
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in jreject-rails.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Rustam Sharshenov
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,48 @@
1
+ # JReject RubyOnRails integration gem
2
+
3
+ Use [JReject](http://jreject.turnwheel.com/) with Rails 3.1+
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'jreject-rails'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install jreject-rails
18
+
19
+ Now you need to edit your app/assets/javascripts/application.js file and add the following line:
20
+ ``` javascript
21
+ //= require jquery
22
+ //= require jquery.reject
23
+ ```
24
+
25
+ And then edit your `app/assets/stylesheets/application.css` file to look something like:
26
+ ``` css
27
+ /*
28
+ *= require_self
29
+ *= require jquery.reject
30
+ *= require_tree .
31
+ */
32
+ ```
33
+
34
+ ## Usage
35
+
36
+ With the gem installed and included in your asset manifests, you can now use JReject as you normally would.
37
+
38
+ ``` javascript
39
+ $.reject();
40
+ ```
41
+
42
+ ## Contributing
43
+
44
+ 1. Fork it ( https://github.com/[my-github-username]/JReject-rails/fork )
45
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
46
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
47
+ 4. Push to the branch (`git push origin my-new-feature`)
48
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,19 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'jreject-rails/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "jreject-rails"
8
+ spec.version = JReject::VERSION
9
+ spec.authors = ["Rustam Sharshenov"]
10
+ spec.email = ["rustam@sharshenov.com"]
11
+ spec.summary = "Use JReject with Rails"
12
+ spec.description = "This gem provides JReject for your Rails application."
13
+ spec.homepage = "https://github.com/sharshenov/jreject-rails"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+
18
+ spec.add_dependency "railties", ">= 3.1.0"
19
+ end
@@ -0,0 +1,5 @@
1
+ module JReject
2
+ module Rails
3
+ class Engine < ::Rails::Engine; end
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ module JReject
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,2 @@
1
+ require 'jreject-rails/version'
2
+ require 'jreject-rails/engine' if defined? Rails
@@ -0,0 +1,595 @@
1
+ /*!
2
+ * jReject (jQuery Browser Rejection Plugin)
3
+ * Version 1.1.x
4
+ * URL: http://jreject.turnwheel.com/
5
+ * Description: jReject is a easy method of rejecting specific browsers on your site
6
+ * Author: Steven Bower (TurnWheel Designs) http://turnwheel.com/
7
+ * Copyright: Copyright (c) 2009-2014 Steven Bower under dual MIT/GPLv2 license.
8
+ */
9
+
10
+ (function($) {
11
+ $.reject = function(options) {
12
+ var opts = $.extend(true, {
13
+ // Specifies which browsers/versions will be blocked
14
+ reject : {
15
+ all: false, // Covers Everything (Nothing blocked)
16
+ msie: 6 // Covers MSIE <= 6 (Blocked by default)
17
+ /*
18
+ * Many possible combinations.
19
+ * You can specify browser (msie, chrome, firefox)
20
+ * You can specify rendering engine (geko, trident)
21
+ * You can specify OS (Win, Mac, Linux, Solaris, iPhone, iPad)
22
+ *
23
+ * You can specify versions of each.
24
+ * Examples: msie9: true, firefox8: true,
25
+ *
26
+ * You can specify the highest number to reject.
27
+ * Example: msie: 9 (9 and lower are rejected.
28
+ *
29
+ * There is also "unknown" that covers what isn't detected
30
+ * Example: unknown: true
31
+ */
32
+ },
33
+ display: [], // What browsers to display and their order (default set below)
34
+ browserShow: true, // Should the browser options be shown?
35
+ browserInfo: { // Settings for which browsers to display
36
+ chrome: {
37
+ // Text below the icon
38
+ text: 'Google Chrome',
39
+ // URL For icon/text link
40
+ url: 'http://www.google.com/chrome/'
41
+ // (Optional) Use "allow" to customized when to show this option
42
+ // Example: to show chrome only for IE users
43
+ // allow: { all: false, msie: true }
44
+ },
45
+ firefox: {
46
+ text: 'Mozilla Firefox',
47
+ url: 'http://www.mozilla.com/firefox/'
48
+ },
49
+ safari: {
50
+ text: 'Safari',
51
+ url: 'http://www.apple.com/safari/download/'
52
+ },
53
+ opera: {
54
+ text: 'Opera',
55
+ url: 'http://www.opera.com/download/'
56
+ },
57
+ msie: {
58
+ text: 'Internet Explorer',
59
+ url: 'http://www.microsoft.com/windows/Internet-explorer/'
60
+ }
61
+ },
62
+
63
+ // Pop-up Window Text
64
+ header: 'Did you know that your Internet Browser is out of date?',
65
+
66
+ paragraph1: 'Your browser is out of date, and may not be compatible with '+
67
+ 'our website. A list of the most popular web browsers can be '+
68
+ 'found below.',
69
+
70
+ paragraph2: 'Just click on the icons to get to the download page',
71
+
72
+ // Allow closing of window
73
+ close: true,
74
+
75
+ // Message displayed below closing link
76
+ closeMessage: 'By closing this window you acknowledge that your experience '+
77
+ 'on this website may be degraded',
78
+ closeLink: 'Close This Window',
79
+ closeURL: '#',
80
+
81
+ // Allows closing of window with esc key
82
+ closeESC: true,
83
+
84
+ // Use cookies to remmember if window was closed previously?
85
+ closeCookie: false,
86
+ // Cookie settings are only used if closeCookie is true
87
+ cookieSettings: {
88
+ // Path for the cookie to be saved on
89
+ // Should be root domain in most cases
90
+ path: '/',
91
+ // Expiration Date (in seconds)
92
+ // 0 (default) means it ends with the current session
93
+ expires: 0
94
+ },
95
+
96
+ // Path where images are located
97
+ imagePath: "<%= image_path('jreject/background_browser.gif').gsub /background_browser\.gif.*/, '' %>",
98
+ // Background color for overlay
99
+ overlayBgColor: '#000',
100
+ // Background transparency (0-1)
101
+ overlayOpacity: 0.8,
102
+
103
+ // Fade in time on open ('slow','medium','fast' or integer in ms)
104
+ fadeInTime: 'fast',
105
+ // Fade out time on close ('slow','medium','fast' or integer in ms)
106
+ fadeOutTime: 'fast',
107
+
108
+ // Google Analytics Link Tracking (Optional)
109
+ // Set to true to enable
110
+ // Note: Analytics tracking code must be added separately
111
+ analytics: false
112
+ }, options);
113
+
114
+ // Set default browsers to display if not already defined
115
+ if (opts.display.length < 1) {
116
+ opts.display = [ 'chrome','firefox','safari','opera','msie' ];
117
+ }
118
+
119
+ // beforeRject: Customized Function
120
+ if ($.isFunction(opts.beforeReject)) {
121
+ opts.beforeReject();
122
+ }
123
+
124
+ // Disable 'closeESC' if closing is disabled (mutually exclusive)
125
+ if (!opts.close) {
126
+ opts.closeESC = false;
127
+ }
128
+
129
+ // This function parses the advanced browser options
130
+ var browserCheck = function(settings) {
131
+ // Check 1: Look for 'all' forced setting
132
+ // Check 2: Browser+major version (optional) (eg. 'firefox','msie','{msie: 6}')
133
+ // Check 3: Browser+major version (eg. 'firefox3','msie7','chrome4')
134
+ // Check 4: Rendering engine+version (eg. 'webkit', 'gecko', '{webkit: 537.36}')
135
+ // Check 5: Operating System (eg. 'win','mac','linux','solaris','iphone')
136
+ var layout = settings[$.layout.name],
137
+ browser = settings[$.browser.name];
138
+ return !!(settings['all']
139
+ || (browser && (browser === true || $.browser.versionNumber <= browser))
140
+ || settings[$.browser.className]
141
+ || (layout && (layout === true || $.layout.versionNumber <= layout))
142
+ || settings[$.os.name]);
143
+ };
144
+
145
+ // Determine if we need to display rejection for this browser, or exit
146
+ if (!browserCheck(opts.reject)) {
147
+ // onFail: Optional Callback
148
+ if ($.isFunction(opts.onFail)) {
149
+ opts.onFail();
150
+ }
151
+
152
+ return false;
153
+ }
154
+
155
+ // If user can close and set to remmember close, initiate cookie functions
156
+ if (opts.close && opts.closeCookie) {
157
+ // Local global setting for the name of the cookie used
158
+ var COOKIE_NAME = 'jreject-close';
159
+
160
+ // Cookies Function: Handles creating/retrieving/deleting cookies
161
+ // Cookies are only used for opts.closeCookie parameter functionality
162
+ var _cookie = function(name, value) {
163
+ // Save cookie
164
+ if (typeof value != 'undefined') {
165
+ var expires = '';
166
+
167
+ // Check if we need to set an expiration date
168
+ if (opts.cookieSettings.expires !== 0) {
169
+ var date = new Date();
170
+ date.setTime(date.getTime()+(opts.cookieSettings.expires*1000));
171
+ expires = "; expires="+date.toGMTString();
172
+ }
173
+
174
+ // Get path from settings
175
+ var path = opts.cookieSettings.path || '/';
176
+
177
+ // Set Cookie with parameters
178
+ document.cookie = name+'='+
179
+ encodeURIComponent((!value) ? '' : value)+expires+
180
+ '; path='+path;
181
+
182
+ return true;
183
+ }
184
+ // Get cookie
185
+ else {
186
+ var cookie,val = null;
187
+
188
+ if (document.cookie && document.cookie !== '') {
189
+ var cookies = document.cookie.split(';');
190
+
191
+ // Loop through all cookie values
192
+ var clen = cookies.length;
193
+ for (var i = 0; i < clen; ++i) {
194
+ cookie = $.trim(cookies[i]);
195
+
196
+ // Does this cookie string begin with the name we want?
197
+ if (cookie.substring(0,name.length+1) == (name+'=')) {
198
+ var len = name.length;
199
+ val = decodeURIComponent(cookie.substring(len+1));
200
+ break;
201
+ }
202
+ }
203
+ }
204
+
205
+ // Returns cookie value
206
+ return val;
207
+ }
208
+ };
209
+
210
+ // If cookie is set, return false and don't display rejection
211
+ if (_cookie(COOKIE_NAME)) {
212
+ return false;
213
+ }
214
+ }
215
+
216
+ // Load background overlay (jr_overlay) + Main wrapper (jr_wrap) +
217
+ // Inner Wrapper (jr_inner) w/ opts.header (jr_header) +
218
+ // opts.paragraph1/opts.paragraph2 if set
219
+ var html = '<div id="jr_overlay"></div><div id="jr_wrap"><div id="jr_inner">'+
220
+ '<h1 id="jr_header">'+opts.header+'</h1>'+
221
+ (opts.paragraph1 === '' ? '' : '<p>'+opts.paragraph1+'</p>')+
222
+ (opts.paragraph2 === '' ? '' : '<p>'+opts.paragraph2+'</p>');
223
+
224
+ var displayNum = 0;
225
+ if (opts.browserShow) {
226
+ html += '<ul>';
227
+
228
+ // Generate the browsers to display
229
+ for (var x in opts.display) {
230
+ var browser = opts.display[x]; // Current Browser
231
+ var info = opts.browserInfo[browser] || false; // Browser Information
232
+
233
+ // If no info exists for this browser
234
+ // or if this browser is not suppose to display to this user
235
+ // based on "allow" flag
236
+ if (!info || (info['allow'] != undefined && !browserCheck(info['allow']))) {
237
+ continue;
238
+ }
239
+
240
+ var url = info.url || '#'; // URL to link text/icon to
241
+
242
+ // Generate HTML for this browser option
243
+ html += '<li id="jr_'+browser+'"><div class="jr_icon"></div>'+
244
+ '<div><a href="'+url+'">'+(info.text || 'Unknown')+'</a>'+
245
+ '</div></li>';
246
+
247
+ ++displayNum;
248
+ }
249
+
250
+ html += '</ul>';
251
+ }
252
+
253
+ // Close list and #jr_list
254
+ html += '<div id="jr_close">'+
255
+ // Display close links/message if set
256
+ (opts.close ? '<a href="'+opts.closeURL+'">'+opts.closeLink+'</a>'+
257
+ '<p>'+opts.closeMessage+'</p>' : '')+'</div>'+
258
+ // Close #jr_inner and #jr_wrap
259
+ '</div></div>';
260
+
261
+ var element = $('<div>'+html+'</div>'); // Create element
262
+ var size = _pageSize(); // Get page size
263
+ var scroll = _scrollSize(); // Get page scroll
264
+
265
+ // This function handles closing this reject window
266
+ // When clicked, fadeOut and remove all elements
267
+ element.bind('closejr', function() {
268
+ // Make sure the permission to close is granted
269
+ if (!opts.close) {
270
+ return false;
271
+ }
272
+
273
+ // Customized Function
274
+ if ($.isFunction(opts.beforeClose)) {
275
+ opts.beforeClose();
276
+ }
277
+
278
+ // Remove binding function so it
279
+ // doesn't get called more than once
280
+ $(this).unbind('closejr');
281
+
282
+ // Fade out background and modal wrapper
283
+ $('#jr_overlay,#jr_wrap').fadeOut(opts.fadeOutTime,function() {
284
+ $(this).remove(); // Remove element from DOM
285
+
286
+ // afterClose: Customized Function
287
+ if ($.isFunction(opts.afterClose)) {
288
+ opts.afterClose();
289
+ }
290
+ });
291
+
292
+ // Show elements that were hidden for layering issues
293
+ var elmhide = 'embed.jr_hidden, object.jr_hidden, select.jr_hidden, applet.jr_hidden';
294
+ $(elmhide).show().removeClass('jr_hidden');
295
+
296
+ // Set close cookie for next run
297
+ if (opts.closeCookie) {
298
+ _cookie(COOKIE_NAME, 'true');
299
+ }
300
+
301
+ return true;
302
+ });
303
+
304
+ // Tracks clicks in Google Analytics (category 'External Links')
305
+ // only if opts.analytics is enabled
306
+ var analytics = function(url) {
307
+ if (!opts.analytics) {
308
+ return false;
309
+ }
310
+
311
+ // Get just the hostname
312
+ var host = url.split(/\/+/g)[1];
313
+
314
+ // Send external link event to Google Analaytics
315
+ // Attempts both versions of analytics code. (Newest first)
316
+ try {
317
+ // Newest analytics code
318
+ ga('send', 'event', 'External', 'Click', host, url);
319
+ } catch (e) {
320
+ try {
321
+ _gaq.push([ '_trackEvent', 'External Links', host, url ]);
322
+ } catch (e) { }
323
+ }
324
+ };
325
+
326
+ // Called onClick for browser links (and icons)
327
+ // Opens link in new window
328
+ var openBrowserLinks = function(url) {
329
+ // Send link to analytics if enabled
330
+ analytics(url);
331
+
332
+ // Open window, generate random id value
333
+ window.open(url, 'jr_'+ Math.round(Math.random()*11));
334
+
335
+ return false;
336
+ };
337
+
338
+ /*
339
+ * Trverse through element DOM and apply JS variables
340
+ * All CSS elements that do not require JS will be in
341
+ * css/jquery.jreject.css
342
+ */
343
+
344
+ // Creates 'background' (div)
345
+ element.find('#jr_overlay').css({
346
+ width: size[0],
347
+ height: size[1],
348
+ background: opts.overlayBgColor,
349
+ opacity: opts.overlayOpacity
350
+ });
351
+
352
+ // Wrapper for our pop-up (div)
353
+ element.find('#jr_wrap').css({
354
+ top: scroll[1]+(size[3]/4),
355
+ left: scroll[0]
356
+ });
357
+
358
+ // Wrapper for inner centered content (div)
359
+ element.find('#jr_inner').css({
360
+ minWidth: displayNum*100,
361
+ maxWidth: displayNum*140,
362
+ // min/maxWidth not supported by IE
363
+ width: $.layout.name == 'trident' ? displayNum*155 : 'auto'
364
+ });
365
+
366
+ element.find('#jr_inner li').css({ // Browser list items (li)
367
+ background: 'transparent url("'+opts.imagePath+'background_browser.gif") '+
368
+ 'no-repeat scroll left top'
369
+ });
370
+
371
+ element.find('#jr_inner li .jr_icon').each(function() {
372
+ // Dynamically sets the icon background image
373
+ var self = $(this);
374
+ self.css('background','transparent url('+opts.imagePath+'browser_'+
375
+ (self.parent('li').attr('id').replace(/jr_/,''))+'.gif)'+
376
+ ' no-repeat scroll left top');
377
+
378
+ // Send link clicks to openBrowserLinks
379
+ self.click(function () {
380
+ var url = $(this).next('div').children('a').attr('href');
381
+ openBrowserLinks(url);
382
+ });
383
+ });
384
+
385
+ element.find('#jr_inner li a').click(function() {
386
+ openBrowserLinks($(this).attr('href'));
387
+ return false;
388
+ });
389
+
390
+ // Bind closing event to trigger closejr
391
+ // to be consistant with ESC key close function
392
+ element.find('#jr_close a').click(function() {
393
+ $(this).trigger('closejr');
394
+
395
+ // If plain anchor is set, return false so there is no page jump
396
+ if (opts.closeURL === '#') {
397
+ return false;
398
+ }
399
+ });
400
+
401
+ // Set focus (fixes ESC key issues with forms and other focus bugs)
402
+ $('#jr_overlay').focus();
403
+
404
+ // Hide elements that won't display properly
405
+ $('embed, object, select, applet').each(function() {
406
+ if ($(this).is(':visible')) {
407
+ $(this).hide().addClass('jr_hidden');
408
+ }
409
+ });
410
+
411
+ // Append element to body of document to display
412
+ $('body').append(element.hide().fadeIn(opts.fadeInTime));
413
+
414
+ // Handle window resize/scroll events and update overlay dimensions
415
+ $(window).bind('resize scroll',function() {
416
+ var size = _pageSize(); // Get size
417
+
418
+ // Update overlay dimensions based on page size
419
+ $('#jr_overlay').css({
420
+ width: size[0],
421
+ height: size[1]
422
+ });
423
+
424
+ var scroll = _scrollSize(); // Get page scroll
425
+
426
+ // Update modal position based on scroll
427
+ $('#jr_wrap').css({
428
+ top: scroll[1] + (size[3]/4),
429
+ left: scroll[0]
430
+ });
431
+ });
432
+
433
+ // Add optional ESC Key functionality
434
+ if (opts.closeESC) {
435
+ $(document).bind('keydown',function(event) {
436
+ // ESC = Keycode 27
437
+ if (event.keyCode == 27) {
438
+ element.trigger('closejr');
439
+ }
440
+ });
441
+ }
442
+
443
+ // afterReject: Customized Function
444
+ if ($.isFunction(opts.afterReject)) {
445
+ opts.afterReject();
446
+ }
447
+
448
+ return true;
449
+ };
450
+
451
+ // Based on compatibility data from quirksmode.com
452
+ // This is used to help calculate exact center of the page
453
+ var _pageSize = function() {
454
+ var xScroll = window.innerWidth && window.scrollMaxX ?
455
+ window.innerWidth + window.scrollMaxX :
456
+ (document.body.scrollWidth > document.body.offsetWidth ?
457
+ document.body.scrollWidth : document.body.offsetWidth);
458
+
459
+ var yScroll = window.innerHeight && window.scrollMaxY ?
460
+ window.innerHeight + window.scrollMaxY :
461
+ (document.body.scrollHeight > document.body.offsetHeight ?
462
+ document.body.scrollHeight : document.body.offsetHeight);
463
+
464
+ var windowWidth = window.innerWidth ? window.innerWidth :
465
+ (document.documentElement && document.documentElement.clientWidth ?
466
+ document.documentElement.clientWidth : document.body.clientWidth);
467
+
468
+ var windowHeight = window.innerHeight ? window.innerHeight :
469
+ (document.documentElement && document.documentElement.clientHeight ?
470
+ document.documentElement.clientHeight : document.body.clientHeight);
471
+
472
+ return [
473
+ xScroll < windowWidth ? xScroll : windowWidth, // Page Width
474
+ yScroll < windowHeight ? windowHeight : yScroll, // Page Height
475
+ windowWidth,windowHeight
476
+ ];
477
+ };
478
+
479
+
480
+ // Based on compatibility data from quirksmode.com
481
+ var _scrollSize = function() {
482
+ return [
483
+ // scrollSize X
484
+ window.pageXOffset ? window.pageXOffset : (document.documentElement &&
485
+ document.documentElement.scrollTop ?
486
+ document.documentElement.scrollLeft : document.body.scrollLeft),
487
+
488
+ // scrollSize Y
489
+ window.pageYOffset ? window.pageYOffset : (document.documentElement &&
490
+ document.documentElement.scrollTop ?
491
+ document.documentElement.scrollTop : document.body.scrollTop)
492
+ ];
493
+ };
494
+ })(jQuery);
495
+
496
+ /*
497
+ * jQuery Browser Plugin
498
+ * Version 2.4 / jReject 1.0.x
499
+ * URL: http://jquery.thewikies.com/browser
500
+ * Description: jQuery Browser Plugin extends browser detection capabilities and
501
+ * can assign browser selectors to CSS classes.
502
+ * Author: Nate Cavanaugh, Minhchau Dang, Jonathan Neal, & Gregory Waxman
503
+ * Updated By: Steven Bower for use with jReject plugin
504
+ * Copyright: Copyright (c) 2008 Jonathan Neal under dual MIT/GPL license.
505
+ */
506
+
507
+ (function ($) {
508
+ $.browserTest = function (a, z) {
509
+ var u = 'unknown',
510
+ x = 'X',
511
+ m = function (r, h) {
512
+ for (var i = 0; i < h.length; i = i + 1) {
513
+ r = r.replace(h[i][0], h[i][1]);
514
+ }
515
+
516
+ return r;
517
+ }, c = function (i, a, b, c) {
518
+ var r = {
519
+ name: m((a.exec(i) || [u, u])[1], b)
520
+ };
521
+
522
+ r[r.name] = true;
523
+
524
+ if (!r.opera) {
525
+ r.version = (c.exec(i) || [x, x, x, x])[3];
526
+ }
527
+ else {
528
+ r.version = window.opera.version();
529
+ }
530
+
531
+ if (/safari/.test(r.name)) {
532
+ var safariversion = /(safari)(\/|\s)([a-z0-9\.\+]*?)(\;|dev|rel|\s|$)/;
533
+ var res = safariversion.exec(i);
534
+ if (res && res[3] && res[3] < 400) {
535
+ r.version = '2.0';
536
+ }
537
+ }
538
+
539
+ else if (r.name === 'presto') {
540
+ r.version = ($.browser.version > 9.27) ? 'futhark' : 'linear_b';
541
+ }
542
+
543
+ if (/msie/.test(r.name) && r.version === x) {
544
+ var ieVersion = /rv:(\d+\.\d+)/.exec(i);
545
+ r.version = ieVersion[1];
546
+ }
547
+
548
+ r.versionNumber = parseFloat(r.version, 10) || 0;
549
+ var minorStart = 1;
550
+
551
+ if (r.versionNumber < 100 && r.versionNumber > 9) {
552
+ minorStart = 2;
553
+ }
554
+
555
+ r.versionX = (r.version !== x) ? r.version.substr(0, minorStart) : x;
556
+ r.className = r.name + r.versionX;
557
+
558
+ return r;
559
+ };
560
+
561
+ a = (/Opera|Navigator|Minefield|KHTML|Chrome|CriOS/.test(a) ? m(a, [
562
+ [/(Firefox|MSIE|KHTML,\slike\sGecko|Konqueror)/, ''],
563
+ ['Chrome Safari', 'Chrome'],
564
+ ['CriOS', 'Chrome'],
565
+ ['KHTML', 'Konqueror'],
566
+ ['Minefield', 'Firefox'],
567
+ ['Navigator', 'Netscape']
568
+ ]) : a).toLowerCase();
569
+
570
+ $.browser = $.extend((!z) ? $.browser : {}, c(a,
571
+ /(camino|chrome|crios|firefox|netscape|konqueror|lynx|msie|trident|opera|safari)/,
572
+ [
573
+ ['trident', 'msie']
574
+ ],
575
+ /(camino|chrome|crios|firefox|netscape|netscape6|opera|version|konqueror|lynx|msie|rv|safari)(:|\/|\s)([a-z0-9\.\+]*?)(\;|dev|rel|\s|$)/));
576
+
577
+ $.layout = c(a, /(gecko|konqueror|msie|trident|opera|webkit)/, [
578
+ ['konqueror', 'khtml'],
579
+ ['msie', 'trident'],
580
+ ['opera', 'presto']
581
+ ], /(applewebkit|rv|konqueror|msie)(\:|\/|\s)([a-z0-9\.]*?)(\;|\)|\s)/);
582
+
583
+ $.os = {
584
+ name: (/(win|mac|linux|sunos|solaris|iphone|ipad)/.
585
+ exec(navigator.platform.toLowerCase()) || [u])[0].replace('sunos', 'solaris')
586
+ };
587
+
588
+ if (!z) {
589
+ $('html').addClass([$.os.name, $.browser.name, $.browser.className,
590
+ $.layout.name, $.layout.className].join(' '));
591
+ }
592
+ };
593
+
594
+ $.browserTest(navigator.userAgent);
595
+ }(jQuery));
@@ -0,0 +1,114 @@
1
+ /*!
2
+ * jReject (jQuery Browser Rejection Plugin)
3
+ * Version 1.1.x
4
+ * URL: http://jreject.turnwheel.com/
5
+ * Description: jReject is a easy method of rejecting specific browsers on your site
6
+ * Author: Steven Bower (TurnWheel Designs) http://turnwheel.com/
7
+ * Copyright: Copyright (c) 2009-2014 Steven Bower under dual MIT/GPL license.
8
+ */
9
+
10
+ #jr_overlay {
11
+ top: 0;
12
+ left: 0;
13
+ padding: 0;
14
+ margin: 0;
15
+ z-index: 2147483646;
16
+ position: absolute;
17
+ }
18
+
19
+ #jr_wrap {
20
+ position: absolute;
21
+ width: 100%;
22
+ z-index: 2147483647;
23
+ padding: 0;
24
+ margin: 0;
25
+ }
26
+
27
+ #jr_inner {
28
+ font-family: "Lucida Grande", "Lucida Sans Unicode", Arial, Verdana, sans-serif;
29
+ font-size: 12px;
30
+ background: #FFF;
31
+ border: 1px solid #CCC;
32
+ color: #4F4F4F;
33
+ margin: 0 auto;
34
+ height: auto;
35
+ padding: 20px;
36
+ position: relative;
37
+ box-sizing: content-box;
38
+ }
39
+
40
+ #jr_header {
41
+ display: block;
42
+ color: #333;
43
+ padding: 5px;
44
+ padding-bottom: 0;
45
+ margin: 0;
46
+ font-family: Helvetica, Arial, sans-serif;
47
+ font-weight: bold;
48
+ font-size: 1.3em;
49
+ margin-bottom: 0.5em;
50
+ }
51
+
52
+ #jr_inner p {
53
+ padding: 5px;
54
+ margin: 0;
55
+ }
56
+
57
+ #jr_inner ul {
58
+ list-style-image: none;
59
+ list-style-position: outside;
60
+ list-style-type: none;
61
+ margin: 0;
62
+ padding: 0;
63
+ }
64
+
65
+ #jr_inner ul li {
66
+ cursor: pointer;
67
+ float: left;
68
+ width: 120px;
69
+ height: 122px;
70
+ margin: 0 10px 10px 10px;
71
+ padding: 0;
72
+ text-align: center;
73
+ }
74
+
75
+ #jr_inner li a {
76
+ color: #333;
77
+ font-size: 0.8em;
78
+ text-decoration: none;
79
+ padding: 0;
80
+ margin: 0;
81
+ }
82
+
83
+ #jr_inner li a:hover {
84
+ text-decoration: underline;
85
+ }
86
+
87
+ #jr_inner .jr_icon {
88
+ width: 100px;
89
+ height: 100px;
90
+ margin: 1px auto;
91
+ padding: 0;
92
+ background: transparent no-repeat scroll left top;
93
+ cursor: pointer;
94
+ }
95
+
96
+ #jr_close {
97
+ clear: both;
98
+ padding: 0;
99
+ margin: 0;
100
+ }
101
+
102
+ #jr_close a {
103
+ color: #000;
104
+ display: block;
105
+ width: auto;
106
+ margin: 0;
107
+ padding: 0;
108
+ text-decoration: underline;
109
+ }
110
+
111
+ #jr_close p {
112
+ padding: 10px 0 0 0;
113
+ margin: 0;
114
+ }
metadata ADDED
@@ -0,0 +1,76 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jreject-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Rustam Sharshenov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: railties
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.1.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 3.1.0
27
+ description: This gem provides JReject for your Rails application.
28
+ email:
29
+ - rustam@sharshenov.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".gitignore"
35
+ - Gemfile
36
+ - LICENSE.txt
37
+ - README.md
38
+ - Rakefile
39
+ - jreject-rails.gemspec
40
+ - lib/jreject-rails.rb
41
+ - lib/jreject-rails/engine.rb
42
+ - lib/jreject-rails/version.rb
43
+ - vendor/assets/images/jreject/background_browser.gif
44
+ - vendor/assets/images/jreject/browser_chrome.gif
45
+ - vendor/assets/images/jreject/browser_firefox.gif
46
+ - vendor/assets/images/jreject/browser_konqueror.gif
47
+ - vendor/assets/images/jreject/browser_msie.gif
48
+ - vendor/assets/images/jreject/browser_opera.gif
49
+ - vendor/assets/images/jreject/browser_safari.gif
50
+ - vendor/assets/javascripts/jquery.reject.js.erb
51
+ - vendor/assets/stylesheets/jquery.reject.css
52
+ homepage: https://github.com/sharshenov/jreject-rails
53
+ licenses:
54
+ - MIT
55
+ metadata: {}
56
+ post_install_message:
57
+ rdoc_options: []
58
+ require_paths:
59
+ - lib
60
+ required_ruby_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ required_rubygems_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ requirements: []
71
+ rubyforge_project:
72
+ rubygems_version: 2.2.2
73
+ signing_key:
74
+ specification_version: 4
75
+ summary: Use JReject with Rails
76
+ test_files: []