DeDoDrop 1.0.0
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.
- checksums.yaml +7 -0
 - data/lib/generators/de_do_drop/USAGE +8 -0
 - data/lib/generators/de_do_drop/de_do_drop_generator.rb +53 -0
 - data/lib/generators/de_do_drop/templates/_dedodrop.html.erb +4 -0
 - data/lib/generators/de_do_drop/templates/de_do_drop.rb +46 -0
 - data/lib/generators/de_do_drop/templates/dedodrop.css +7 -0
 - data/lib/generators/de_do_drop/templates/dedodrop.js +58 -0
 - metadata +50 -0
 
    
        checksums.yaml
    ADDED
    
    | 
         @@ -0,0 +1,7 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ---
         
     | 
| 
      
 2 
     | 
    
         
            +
            SHA1:
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 5a3e5831be21c6b2baedd036eed6f6484ecc1bed
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: ecac2400377534ef29b280f9672293ff1d31705c
         
     | 
| 
      
 5 
     | 
    
         
            +
            SHA512:
         
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 271bb2c6fd37d4573ef277537e298b9c6d2adf0582bc490cc6ff97081933b6b2f02b8f47b5760a2f4d5c15b7b4774bdb494d7bcd91529dce257a21546999a740
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 227765bf5fd0b303327c442de41db5f27dfec160cf19728baf8f074dfd01a54aa5e69b4f1cc8b15133fbb1192efd66852064784d097c05268fd54b19447ff3d0
         
     | 
| 
         @@ -0,0 +1,53 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'rails/generators/base'
         
     | 
| 
      
 2 
     | 
    
         
            +
            class DeDoDropGenerator < Rails::Generators::Base
         
     | 
| 
      
 3 
     | 
    
         
            +
              source_root File.expand_path('../templates', __FILE__)
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              def execute
         
     | 
| 
      
 6 
     | 
    
         
            +
                copy_partial
         
     | 
| 
      
 7 
     | 
    
         
            +
                copy_css
         
     | 
| 
      
 8 
     | 
    
         
            +
                copy_js
         
     | 
| 
      
 9 
     | 
    
         
            +
                copy_rb
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              private
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              def copy_partial
         
     | 
| 
      
 15 
     | 
    
         
            +
                p "Creating 'shared' folder in views..."
         
     | 
| 
      
 16 
     | 
    
         
            +
                if system "mkdir app/views/shared"  
         
     | 
| 
      
 17 
     | 
    
         
            +
                  "Folder created." 
         
     | 
| 
      
 18 
     | 
    
         
            +
                else
         
     | 
| 
      
 19 
     | 
    
         
            +
                  "Folder already existed."
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
                copy_file "_dedodrop.html.erb", "app/views/shared/_dedodrop.html.erb"
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              def copy_css
         
     | 
| 
      
 25 
     | 
    
         
            +
                p "Creating 'dedodrop.css' folder in assets/stylesheets..."
         
     | 
| 
      
 26 
     | 
    
         
            +
                if system "mkdir app/assets/stylesheets"  
         
     | 
| 
      
 27 
     | 
    
         
            +
                  "Folder created." 
         
     | 
| 
      
 28 
     | 
    
         
            +
                else
         
     | 
| 
      
 29 
     | 
    
         
            +
                  "Folder already existed."
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
                copy_file "dedodrop.css", "app/assets/stylesheets/dedodrop.css"
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              def copy_js
         
     | 
| 
      
 35 
     | 
    
         
            +
                p "Creating 'dedodrop.js' folder in assets/javascripts..."
         
     | 
| 
      
 36 
     | 
    
         
            +
                if system "mkdir app/assets/javascripts"  
         
     | 
| 
      
 37 
     | 
    
         
            +
                  "Folder created." 
         
     | 
| 
      
 38 
     | 
    
         
            +
                else
         
     | 
| 
      
 39 
     | 
    
         
            +
                  "Folder already existed."
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
                copy_file "dedodrop.js", "app/assets/javascripts/dedodrop.js"
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
              def copy_rb
         
     | 
| 
      
 45 
     | 
    
         
            +
                p "Creating 'de_do_drop.rb' folder in lib/assets/de_do_drop..."
         
     | 
| 
      
 46 
     | 
    
         
            +
                if system "mkdir lib/assets/de_do_drop"  
         
     | 
| 
      
 47 
     | 
    
         
            +
                  "Folder created." 
         
     | 
| 
      
 48 
     | 
    
         
            +
                else
         
     | 
| 
      
 49 
     | 
    
         
            +
                  "Folder already existed."
         
     | 
| 
      
 50 
     | 
    
         
            +
                end
         
     | 
| 
      
 51 
     | 
    
         
            +
                copy_file "de_do_drop.rb", "lib/assets/de_do_drop/de_do_drop.rb"
         
     | 
| 
      
 52 
     | 
    
         
            +
              end
         
     | 
| 
      
 53 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,4 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <%=content_tag(:span, "#{@menu[:name]}",style: "display:none", id:"dedodrop-primary")%>
         
     | 
| 
      
 2 
     | 
    
         
            +
            <%=content_tag(:span, "#{@menu[:has_many]}",style: "display:none", id:"dedodrop-secondary")%>
         
     | 
| 
      
 3 
     | 
    
         
            +
            <%= select_tag @menu[:name], options_for_select(@menu[:parents]) %><br>
         
     | 
| 
      
 4 
     | 
    
         
            +
            <%= select_tag @menu[:has_many], options_for_select(@menu[:children]), disabled: true %><br>
         
     | 
| 
         @@ -0,0 +1,46 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class DeDoDrop
         
     | 
| 
      
 2 
     | 
    
         
            +
              def initialize(params)
         
     | 
| 
      
 3 
     | 
    
         
            +
                name = params.fetch(:name,params.fetch(:model)).downcase
         
     | 
| 
      
 4 
     | 
    
         
            +
                child = params.fetch(:has_many).downcase.chop
         
     | 
| 
      
 5 
     | 
    
         
            +
                @all_models = eval params.fetch(:model)+".all"
         
     | 
| 
      
 6 
     | 
    
         
            +
                @menu = {name: name, 
         
     | 
| 
      
 7 
     | 
    
         
            +
                         has_many: params.fetch(:has_many).downcase,
         
     | 
| 
      
 8 
     | 
    
         
            +
                         parents: [["Select #{name}", nil]],
         
     | 
| 
      
 9 
     | 
    
         
            +
                         children: [["Select #{name} first", nil, {id:"dedodrop-kill"}],["Select option","-"]]}
         
     | 
| 
      
 10 
     | 
    
         
            +
                @menu[:parents] += get_parents(params)
         
     | 
| 
      
 11 
     | 
    
         
            +
                @menu[:children] += get_children(params)
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              def menu
         
     | 
| 
      
 15 
     | 
    
         
            +
                @menu
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              private
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              def get_parents(params)
         
     | 
| 
      
 21 
     | 
    
         
            +
                model_attr_st = "model.#{params.fetch(:model_attr)}"
         
     | 
| 
      
 22 
     | 
    
         
            +
                @all_models.map do |model|
         
     | 
| 
      
 23 
     | 
    
         
            +
                  model_attr = eval model_attr_st
         
     | 
| 
      
 24 
     | 
    
         
            +
                  [model_attr, model.id, {class: "hi"}]
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              def get_children(params)
         
     | 
| 
      
 29 
     | 
    
         
            +
                has_many = params.fetch(:has_many)
         
     | 
| 
      
 30 
     | 
    
         
            +
                children_st = "model.#{has_many}"
         
     | 
| 
      
 31 
     | 
    
         
            +
                child_attr_st ="child.#{params.fetch(:child_attr)}"
         
     | 
| 
      
 32 
     | 
    
         
            +
                children = []
         
     | 
| 
      
 33 
     | 
    
         
            +
                @all_models.map do |model|
         
     | 
| 
      
 34 
     | 
    
         
            +
                  model_children = eval children_st
         
     | 
| 
      
 35 
     | 
    
         
            +
                  children += model_children.map do |child|
         
     | 
| 
      
 36 
     | 
    
         
            +
                    child_attr = eval child_attr_st
         
     | 
| 
      
 37 
     | 
    
         
            +
                    [child_attr, child.id, {class: ["dedodrop-hidden", "dedodrop-id#{model.id}"]}]
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
                children
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
              def self.procfy(string)
         
     | 
| 
      
 44 
     | 
    
         
            +
                string = "proc{#{string}}"
         
     | 
| 
      
 45 
     | 
    
         
            +
              end
         
     | 
| 
      
 46 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,58 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            // You might have to remove this code if you have other JS initializers.
         
     | 
| 
      
 2 
     | 
    
         
            +
            // Copy the initialize function in your JS initializer
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            window.addEventListener( 'load', initialize)
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            function initialize(){
         
     | 
| 
      
 7 
     | 
    
         
            +
            	deDoDrop = new DeDropDo()
         
     | 
| 
      
 8 
     | 
    
         
            +
              	deDoDrop.bindEventListeners()
         
     | 
| 
      
 9 
     | 
    
         
            +
            }
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            // END
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            function DeDropDo() {
         
     | 
| 
      
 16 
     | 
    
         
            +
            	this.primary = document.getElementById("dedodrop-primary").innerHTML
         
     | 
| 
      
 17 
     | 
    
         
            +
            	this.secondary = document.getElementById("dedodrop-secondary").innerHTML
         
     | 
| 
      
 18 
     | 
    
         
            +
            	this.old = ""
         
     | 
| 
      
 19 
     | 
    
         
            +
            }
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            DeDropDo.prototype = {
         
     | 
| 
      
 22 
     | 
    
         
            +
            	bindEventListeners: function(){
         
     | 
| 
      
 23 
     | 
    
         
            +
            		var primaryList = document.getElementById(deDoDrop.primary)
         
     | 
| 
      
 24 
     | 
    
         
            +
            		primaryList.addEventListener("change", this.actions, false);
         
     | 
| 
      
 25 
     | 
    
         
            +
            	},
         
     | 
| 
      
 26 
     | 
    
         
            +
            	actions: function(){
         
     | 
| 
      
 27 
     | 
    
         
            +
            		deDoDrop.hideOld(deDoDrop.old)
         
     | 
| 
      
 28 
     | 
    
         
            +
            		var id = "dedodrop-id"+this.value;
         
     | 
| 
      
 29 
     | 
    
         
            +
            		deDoDrop.showOptions(id)
         
     | 
| 
      
 30 
     | 
    
         
            +
            		deDoDrop.killFirst()
         
     | 
| 
      
 31 
     | 
    
         
            +
            		deDoDrop.enableSecondary()
         
     | 
| 
      
 32 
     | 
    
         
            +
            	},
         
     | 
| 
      
 33 
     | 
    
         
            +
            	enableSecondary: function(){
         
     | 
| 
      
 34 
     | 
    
         
            +
            		var childrenList = document.getElementById(deDoDrop.secondary);
         
     | 
| 
      
 35 
     | 
    
         
            +
            		childrenList.disabled = false;
         
     | 
| 
      
 36 
     | 
    
         
            +
            	},
         
     | 
| 
      
 37 
     | 
    
         
            +
            	hideOld: function(id){
         
     | 
| 
      
 38 
     | 
    
         
            +
            		var options = document.getElementsByClassName(id);
         
     | 
| 
      
 39 
     | 
    
         
            +
            		var l = options.length;
         
     | 
| 
      
 40 
     | 
    
         
            +
            		for (var i = 0; i<l; i++){
         
     | 
| 
      
 41 
     | 
    
         
            +
            			options[i].className = id + " dedodrop-hidden"
         
     | 
| 
      
 42 
     | 
    
         
            +
            		}
         
     | 
| 
      
 43 
     | 
    
         
            +
            	},
         
     | 
| 
      
 44 
     | 
    
         
            +
            	showOptions: function(id){
         
     | 
| 
      
 45 
     | 
    
         
            +
            		deDoDrop.old = id
         
     | 
| 
      
 46 
     | 
    
         
            +
            		var options = document.getElementsByClassName(id);
         
     | 
| 
      
 47 
     | 
    
         
            +
            		var l = options.length;
         
     | 
| 
      
 48 
     | 
    
         
            +
            		for (var i = 0; i<l; i++){
         
     | 
| 
      
 49 
     | 
    
         
            +
            			options[i].className = id + " dedodrop-visible"
         
     | 
| 
      
 50 
     | 
    
         
            +
            		}
         
     | 
| 
      
 51 
     | 
    
         
            +
            	},
         
     | 
| 
      
 52 
     | 
    
         
            +
            	killFirst: function(){
         
     | 
| 
      
 53 
     | 
    
         
            +
            		victim = document.getElementById("dedodrop-kill")
         
     | 
| 
      
 54 
     | 
    
         
            +
            		if (victim !== null)
         
     | 
| 
      
 55 
     | 
    
         
            +
            			victim.remove()
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
            	}
         
     | 
| 
      
 58 
     | 
    
         
            +
            }
         
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,50 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: DeDoDrop
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.0.0
         
     | 
| 
      
 5 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 6 
     | 
    
         
            +
            authors:
         
     | 
| 
      
 7 
     | 
    
         
            +
            - Alejandro E. Losada
         
     | 
| 
      
 8 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 9 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 10 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2015-09-10 00:00:00.000000000 Z
         
     | 
| 
      
 12 
     | 
    
         
            +
            dependencies: []
         
     | 
| 
      
 13 
     | 
    
         
            +
            description: DeDoDrop is a gem to hande dependent drop downs. It can only handle one
         
     | 
| 
      
 14 
     | 
    
         
            +
              dependency at the moment.
         
     | 
| 
      
 15 
     | 
    
         
            +
            email: alejandrolosada@alejandrolosada.net
         
     | 
| 
      
 16 
     | 
    
         
            +
            executables: []
         
     | 
| 
      
 17 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 18 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 19 
     | 
    
         
            +
            files:
         
     | 
| 
      
 20 
     | 
    
         
            +
            - lib/generators/de_do_drop/de_do_drop_generator.rb
         
     | 
| 
      
 21 
     | 
    
         
            +
            - lib/generators/de_do_drop/templates/_dedodrop.html.erb
         
     | 
| 
      
 22 
     | 
    
         
            +
            - lib/generators/de_do_drop/templates/de_do_drop.rb
         
     | 
| 
      
 23 
     | 
    
         
            +
            - lib/generators/de_do_drop/templates/dedodrop.css
         
     | 
| 
      
 24 
     | 
    
         
            +
            - lib/generators/de_do_drop/templates/dedodrop.js
         
     | 
| 
      
 25 
     | 
    
         
            +
            - lib/generators/de_do_drop/USAGE
         
     | 
| 
      
 26 
     | 
    
         
            +
            homepage: http://rubygems.org/gems/de_do_drop
         
     | 
| 
      
 27 
     | 
    
         
            +
            licenses:
         
     | 
| 
      
 28 
     | 
    
         
            +
            - MIT
         
     | 
| 
      
 29 
     | 
    
         
            +
            metadata: {}
         
     | 
| 
      
 30 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 31 
     | 
    
         
            +
            rdoc_options: []
         
     | 
| 
      
 32 
     | 
    
         
            +
            require_paths:
         
     | 
| 
      
 33 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 34 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 35 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 36 
     | 
    
         
            +
              - - '>='
         
     | 
| 
      
 37 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 38 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 39 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 40 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 41 
     | 
    
         
            +
              - - '>='
         
     | 
| 
      
 42 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 43 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 44 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 45 
     | 
    
         
            +
            rubyforge_project: 
         
     | 
| 
      
 46 
     | 
    
         
            +
            rubygems_version: 2.0.14
         
     | 
| 
      
 47 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 48 
     | 
    
         
            +
            specification_version: 4
         
     | 
| 
      
 49 
     | 
    
         
            +
            summary: DeDoDrop is a gem to hande dependent drop downs.
         
     | 
| 
      
 50 
     | 
    
         
            +
            test_files: []
         
     |