diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..29bfbdc --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "role"] + path = role + url = git://github.com/kossnocorp/role.git diff --git a/Rakefile b/Rakefile index 3bdd0f9..dfb60ba 100644 --- a/Rakefile +++ b/Rakefile @@ -1,7 +1,9 @@ #!/usr/bin/env rake -require "bundler/gem_tasks" - +require 'bundler/gem_tasks' require 'rake/testtask' +require 'rdoc/task' +require 'fileutils' + Rake::TestTask.new(:test) do |test| test.libs << 'lib' << 'test' test.pattern = 'test/**/*_test.rb' @@ -9,8 +11,6 @@ Rake::TestTask.new(:test) do |test| end task :default => :test - -require 'rdoc/task' Rake::RDocTask.new do |rdoc| version = RoleRails::VERSION @@ -22,17 +22,13 @@ end namespace :role do - desc "Pull role/master subtree." + desc 'Pull role/master subtree.' task :pull do - if !system "git pull -s subtree role master" - abort("Have to add role remote `git remote add -f role git@github.com:kossnocorp/role.git`") - end + system "cd role ; git checkout v#{RoleRails::VERSION}" end - desc "Update role assets." - task :update => "role:pull" do - Dir["vendor/role/lib/*role.js"].each do |f| - cp f, "vendor/assets/javascripts/" - end + desc 'Update role assets.' + task :update => 'role:pull' do + FileUtils.cp_r('role/lib/.', 'vendor/assets/javascripts') end end diff --git a/lib/role-rails/version.rb b/lib/role-rails/version.rb index 0ad7ee7..2b7dce5 100644 --- a/lib/role-rails/version.rb +++ b/lib/role-rails/version.rb @@ -1,3 +1,3 @@ module RoleRails - VERSION = '1.1.0' + VERSION = '1.2.0' end diff --git a/role b/role new file mode 160000 index 0000000..1f2ecf7 --- /dev/null +++ b/role @@ -0,0 +1 @@ +Subproject commit 1f2ecf7dec97f56dc86f021f7c47671bd64ebed0 diff --git a/vendor/assets/javascripts/jquery.role.js b/vendor/assets/javascripts/jquery.role.js index 62e18c7..140135c 100644 --- a/vendor/assets/javascripts/jquery.role.js +++ b/vendor/assets/javascripts/jquery.role.js @@ -1,29 +1,19 @@ -// Role.js, jQuery adapter v1.0.2 ~ https://github.com/kossnocorp/role - -(function($) { - var matchesSelectorOrigin, type; - if ($ == null) $ = jQuery; - $.expr.match['ROLE'] = /@((?:[\w\u00c0-\uFFFF\-]|\\.)+)/; - $.expr.preFilter['ROLE'] = function(match) { - return ' ' + match[1] + ' '; - }; - $.expr.filter['ROLE'] = function(el, match) { - return (el.getAttribute != null) && (" " + (el.getAttribute('role')) + " ").indexOf(match) !== -1; - }; - for (type in $.expr.match) { - $.expr.match[type] = new RegExp($.expr.match[type].source + /(?![^\[]*\])(?![^\(]*\))/.source); - $.expr.leftMatch[type] = new RegExp(/(^(?:.|\r|\n)*?)/.source + $.expr.match[type].source.replace(/\\(\d+)/g, function(all, num) { - return "\\" + (num - 0 + 1); - })); - } - if (!(document.documentElement.matchesSelector != null) && (document.documentElement.mozMatchesSelector != null)) { - matchesSelectorOrigin = $.find.matchesSelector; - return $.find.matchesSelector = function(node, expr) { - return matchesSelectorOrigin(node, expr.replace(/(@[\w\-]+)/g, function($0) { - return $0.replace(/^@([\w\-]+)$/, function(__, $1) { - return "[role~=\"" + $1 + "\"]"; - }); - })); +!function($){ + function rewriteSelector(context, name, argPos){ + var original = context[name]; + + if (!original) return; + + context[name] = function(){ + arguments[argPos] = arguments[argPos].replace(/@([\w\u00c0-\uFFFF\-]+)/g, '[role~="$1"]') + return original.apply(context, arguments); }; + + $.extend(context[name], original); } -})($); + + rewriteSelector($, 'find', 0); + rewriteSelector($, 'multiFilter', 0); + rewriteSelector($.find, 'matchesSelector', 1); + rewriteSelector($.find, 'matches', 0); +}(jQuery) \ No newline at end of file diff --git a/vendor/assets/javascripts/jquery.role.min.js b/vendor/assets/javascripts/jquery.role.min.js new file mode 100644 index 0000000..85c20fb --- /dev/null +++ b/vendor/assets/javascripts/jquery.role.min.js @@ -0,0 +1 @@ +!function(a){function b(b,c,d){var e=b[c];if(!e)return;b[c]=function(){return arguments[d]=arguments[d].replace(/@([\w\u00c0-\uFFFF\-]+)/g,'[role~="$1"]'),e.apply(b,arguments)},a.extend(b[c],e)}b(a,"find",0),b(a,"multiFilter",0),b(a.find,"matchesSelector",1),b(a.find,"matches",0)}(jQuery); \ No newline at end of file diff --git a/vendor/assets/javascripts/role.js b/vendor/assets/javascripts/role.js index a458f33..d0997ad 100644 --- a/vendor/assets/javascripts/role.js +++ b/vendor/assets/javascripts/role.js @@ -1,24 +1,18 @@ -// Role.js, extension for querySelectorAll function v1.0.2 ~ https://github.com/kossnocorp/role - -(function() { - var elements, elm, _fn, _i, _len; - - elements = []; - - if (typeof Document !== "undefined" && Document !== null) elements << Document; - - if (typeof Element !== "undefined" && Element !== null) elements << Element; - - _fn = function(elm) { - var nativeQuery; - nativeQuery = elm.prototype.querySelectorAll; - return elm.prototype.querySelectorAll = function(selector) { - return nativeQuery.call(this, selector.replace(/@(\w+)/g, "[role~=\"$1\"]")); - }; - }; - for (_i = 0, _len = elements.length; _i < _len; _i++) { - elm = elements[_i]; - _fn(elm); +!function(window, methods){ + function overrideMethod(klass, methodName){ + var original; + if (klass && (original = klass.prototype[methodName])) { + klass.prototype[methodName] = function(){ + arguments[0] = arguments[0].replace(/@([\w\u00c0-\uFFFF\-]+)/g, '[role~="$1"]'); + return original.apply(this, arguments); + }; + } } - -}).call(this); + + function overridePrototype(klass){ + for(var i=0; i