block_js 0.0.1

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.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in block_js.gemspec
4
+ gemspec
data/README.markdown ADDED
@@ -0,0 +1,79 @@
1
+ Intro
2
+ -------
3
+
4
+ An unobtrusive way to write and organize your javascript. Logic for each block goes to separate js/coffeescript file.
5
+
6
+
7
+ Examples
8
+ -------
9
+
10
+ ### HTML
11
+ ```html
12
+ <div class="b-js" onclick="return {name: 'header_navigation'}">
13
+ <a href="#" class="language_selector__change">Change Language</a>
14
+ <div class="language_selector__wrapper" style="display:none;">
15
+ <!-- some content here -->
16
+ </div>
17
+
18
+ <a href="#" class="login__link">Login</a>
19
+ <div class="login__dropdown" style="display:none;">
20
+ <!-- some content here -->
21
+ </div>
22
+ </div>
23
+ ```
24
+
25
+ ### JavaScript
26
+ ```javascript
27
+ APP.block["header_navigation"] = function(el, params) {
28
+ this.element = el;
29
+ this.params = params || {};
30
+ }
31
+
32
+ APP.block["header_navigation"].prototype = {
33
+ init: function(){
34
+ this.initLanguageSelector();
35
+ this.initLoginWindow();
36
+ },
37
+
38
+ initLanguageSelector: function(){
39
+ $(".language_selector__change", this.element).live("click", function(){
40
+ $('.language_selector__wrapper', this.element).toggle();
41
+ return false;
42
+ });
43
+ },
44
+
45
+ initLoginWindow: function(){
46
+ $(".login__link", this.element).live("click", function(){
47
+ $('.login__dropdown', this.element).toggle();
48
+ return false;
49
+ });
50
+ }
51
+ }
52
+ ```
53
+ ### CoffeeScript
54
+ ```coffeescript
55
+ class APP.block["header_navigation"]
56
+ constructor: (el, params) ->
57
+ @element = el
58
+ @params = params || {}
59
+
60
+ init: ->
61
+ @initLanguageSelector()
62
+ @initLoginWindow()
63
+
64
+ initLanguageSelector: ->
65
+ $(".language_selector__change", @element).live "click", ->
66
+ $('.language_selector__wrapper', @element).toggle()
67
+ false
68
+
69
+ initLoginWindow: ->
70
+ $(".login__link", @element).live "click", ->
71
+ $('.login__dropdown', @element).toggle()
72
+ false
73
+ ```
74
+
75
+ Credits
76
+ -------
77
+
78
+ Suggested by:
79
+ [Leonya](https://github.com/Leonya), [Egze](https://github.com/egze)
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/block_js.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "block_js/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "block_js"
7
+ s.version = BlockJs::VERSION
8
+ s.authors = ["Jaroslav Kalistsuk"]
9
+ s.email = ["jaroslav.kalistsuk@gmail.com"]
10
+ s.homepage = "https://github.com/jarosan/block_js"
11
+ s.summary = %q{An unobtrusive way to write and organize your javascript.}
12
+ s.description = %q{An unobtrusive way to write and organize your javascript. Logic for each block goes to separate js/coffeescript file.}
13
+
14
+ s.rubyforge_project = "block_js"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+ # s.add_runtime_dependency "rest-client"
24
+ end
@@ -0,0 +1,3 @@
1
+ module BlockJs
2
+ VERSION = "0.0.1"
3
+ end
data/lib/block_js.rb ADDED
@@ -0,0 +1,7 @@
1
+ require "block_js/version"
2
+
3
+ module BlockJs
4
+
5
+ class Engine < ::Rails::Engine
6
+ end
7
+ end
@@ -0,0 +1,31 @@
1
+ var APP = {};
2
+ APP.block || (APP.block = {});
3
+
4
+ (function($){
5
+ APP.initBlock || (APP.initBlock = function(context, blockSelector) {
6
+ context = context || document;
7
+ blockSelector = blockSelector || '.b-js';
8
+ $(blockSelector, context).each(function() {
9
+ var block = $(this),
10
+ params = this.onclick ? this.onclick() : {},
11
+ name = params.name || '',
12
+ init = APP.block[name];
13
+
14
+ if (init && !block.data(name)) {
15
+ var instance = new init(block, params);
16
+
17
+ if (typeof instance.init == 'function') {
18
+ instance.init();
19
+ block.data(name, true).addClass(name + '_js_inited');
20
+ } else {
21
+ console.log('Component', name, 'does not have an init() method');
22
+ block.data(name, true).addClass(name + '_js_failed');
23
+ }
24
+ }
25
+ });
26
+ });
27
+
28
+ APP.initBlockBound || (APP.initBlockBound = !!$(document).ready(function() {
29
+ APP.initBlock();
30
+ }));
31
+ })(jQuery);
metadata ADDED
@@ -0,0 +1,54 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: block_js
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jaroslav Kalistsuk
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-11-22 00:00:00.000000000Z
13
+ dependencies: []
14
+ description: An unobtrusive way to write and organize your javascript. Logic for each
15
+ block goes to separate js/coffeescript file.
16
+ email:
17
+ - jaroslav.kalistsuk@gmail.com
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - .gitignore
23
+ - Gemfile
24
+ - README.markdown
25
+ - Rakefile
26
+ - block_js.gemspec
27
+ - lib/block_js.rb
28
+ - lib/block_js/version.rb
29
+ - vendor/assets/javascripts/block.js
30
+ homepage: https://github.com/jarosan/block_js
31
+ licenses: []
32
+ post_install_message:
33
+ rdoc_options: []
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ requirements: []
49
+ rubyforge_project: block_js
50
+ rubygems_version: 1.8.11
51
+ signing_key:
52
+ specification_version: 3
53
+ summary: An unobtrusive way to write and organize your javascript.
54
+ test_files: []