Use npm modules for the build chain so we can concat multiple files for dependencies. Break SelectParser into it's own file. Commit updates to the actual Javascripts to reflect the new builds.

This commit is contained in:
Matthew Beale 2011-07-29 10:42:34 +02:00
parent f444fb9e38
commit 6f0f0bd4c3
8 changed files with 255 additions and 297 deletions

View file

@ -1,38 +1,62 @@
# Building Chosen requires coffee-script and uglify-js. For
# help installing, try:
#
# `npm -g install coffee-script uglify-js`
#
fs = require 'fs' fs = require 'fs'
path = require 'path' path = require 'path'
{spawn, exec} = require 'child_process' {spawn, exec} = require 'child_process'
CoffeeScript = require 'coffee-script'
{parser, uglify} = require 'uglify-js'
javascripts = [ javascripts = {
'chosen/chosen.jquery.js', 'chosen/chosen.proto.js' 'chosen/chosen.jquery.js': [
] 'coffee/chosen/select-parser.coffee'
'coffee/chosen.jquery.coffee'
]
'chosen/chosen.proto.js': [
'coffee/chosen/select-parser.coffee'
'coffee/chosen.proto.coffee'
]
}
# Run a command Array::unique = ->
output = {}
output[@[key]] = @[key] for key in [0...@length]
value for key, value of output
# Gather a list of unique source files.
# #
run = (cmd, args, cb) -> source_files = ->
proc = spawn cmd, args all_sources = []
proc.stderr.on 'data', (buffer) -> console.log buffer.toString() for javascript, sources of javascripts
proc.on 'exit', (status) -> for source in sources
process.exit(1) if status != 0 all_sources.push source
cb() if typeof cb is 'function' all_sources.unique()
coffescript_files = -> # Build Chosen.
'coffee/' + file for file in (fs.readdirSync 'coffee') when file.match(/\.coffee$/)
# Build Chosen. Requires `coffee` and `uglifyjs`.
# #
task 'build', 'build Chosen from source', build = (cb) -> task 'build', 'build Chosen from source', build = (cb) ->
run 'coffee', ['-c', '-o', 'chosen'].concat(coffescript_files()), -> for javascript, sources of javascripts
cb() if typeof cb is 'function' code = ''
for source in sources
code += CoffeeScript.compile "\n#{fs.readFileSync source}"
fs.writeFileSync javascript, code
unless process.env.MINIFY is 'false' unless process.env.MINIFY is 'false'
for javascript in javascripts fs.writeFileSync javascript.replace(/\.js$/,'.min.js'), (
uglified = javascript.replace /\.js$/, '.min.js' uglify.gen_code uglify.ast_squeeze uglify.ast_mangle parser.parse code
run 'uglifyjs', ['-o', uglified, javascript], cb )
cb() if typeof cb is 'function'
task 'watch', 'watch coffee/ for changes and build Chosen', -> task 'watch', 'watch coffee/ for changes and build Chosen', ->
console.log "Watching for changes in coffee/" console.log "Watching for changes in coffee/"
for file in coffescript_files() for file in source_files()
# Coffeescript wasn't scoping file correctly-
# without this closure the file name displayed
# is incorrect.
((file) ->
fs.watchFile file, (curr, prev) -> fs.watchFile file, (curr, prev) ->
if +curr.mtime isnt +prev.mtime if +curr.mtime isnt +prev.mtime
console.log "Saw change in #{file}" console.log "Saw change in #{file}"
invoke 'build' invoke 'build'
)(file)

View file

@ -1,3 +1,75 @@
(function() {
var SelectParser;
SelectParser = (function() {
function SelectParser() {
this.options_index = 0;
this.parsed = [];
}
SelectParser.prototype.add_node = function(child) {
if (child.nodeName === "OPTGROUP") {
return this.add_group(child);
} else {
return this.add_option(child);
}
};
SelectParser.prototype.add_group = function(group) {
var group_position, option, _i, _len, _ref, _results;
group_position = this.parsed.length;
this.parsed.push({
array_index: group_position,
group: true,
label: group.label,
children: 0,
disabled: group.disabled
});
_ref = group.childNodes;
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
option = _ref[_i];
_results.push(this.add_option(option, group_position, group.disabled));
}
return _results;
};
SelectParser.prototype.add_option = function(option, group_position, group_disabled) {
if (option.nodeName === "OPTION") {
if (option.text !== "") {
if (group_position != null) {
this.parsed[group_position].children += 1;
}
this.parsed.push({
array_index: this.parsed.length,
options_index: this.options_index,
value: option.value,
text: option.text,
html: option.innerHTML,
selected: option.selected,
disabled: group_disabled === true ? group_disabled : option.disabled,
group_array_index: group_position
});
} else {
this.parsed.push({
array_index: this.parsed.length,
options_index: this.options_index,
empty: true
});
}
return this.options_index += 1;
}
};
return SelectParser;
})();
SelectParser.select_to_array = function(select) {
var child, parser, _i, _len, _ref;
parser = new SelectParser();
_ref = select.childNodes;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
child = _ref[_i];
parser.add_node(child);
}
return parser.parsed;
};
this.SelectParser = SelectParser;
}).call(this);
(function() { (function() {
/* /*
Chosen, a Select Box Enhancer for jQuery and Protoype Chosen, a Select Box Enhancer for jQuery and Protoype
@ -6,9 +78,9 @@
Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_License Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_License
Copyright (c) 2011 by Harvest Copyright (c) 2011 by Harvest
*/ var $, Chosen, SelectParser, get_side_border_padding, root; */ var $, Chosen, get_side_border_padding, root;
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
root = typeof exports !== "undefined" && exports !== null ? exports : this; root = this;
$ = jQuery; $ = jQuery;
$.fn.extend({ $.fn.extend({
chosen: function(data, options) { chosen: function(data, options) {
@ -210,7 +282,7 @@
var content, data, startTime, _i, _len, _ref; var content, data, startTime, _i, _len, _ref;
startTime = new Date(); startTime = new Date();
this.parsing = true; this.parsing = true;
this.results_data = SelectParser.select_to_array(this.form_field); this.results_data = root.SelectParser.select_to_array(this.form_field);
if (this.is_multiple && this.choices > 0) { if (this.is_multiple && this.choices > 0) {
this.search_choices.find("li.search-choice").remove(); this.search_choices.find("li.search-choice").remove();
this.choices = 0; this.choices = 0;
@ -705,73 +777,4 @@
return side_border_padding = elmt.outerWidth() - elmt.width(); return side_border_padding = elmt.outerWidth() - elmt.width();
}; };
root.get_side_border_padding = get_side_border_padding; root.get_side_border_padding = get_side_border_padding;
SelectParser = (function() {
function SelectParser() {
this.options_index = 0;
this.parsed = [];
}
SelectParser.prototype.add_node = function(child) {
if (child.nodeName === "OPTGROUP") {
return this.add_group(child);
} else {
return this.add_option(child);
}
};
SelectParser.prototype.add_group = function(group) {
var group_position, option, _i, _len, _ref, _results;
group_position = this.parsed.length;
this.parsed.push({
array_index: group_position,
group: true,
label: group.label,
children: 0,
disabled: group.disabled
});
_ref = group.childNodes;
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
option = _ref[_i];
_results.push(this.add_option(option, group_position, group.disabled));
}
return _results;
};
SelectParser.prototype.add_option = function(option, group_position, group_disabled) {
if (option.nodeName === "OPTION") {
if (option.text !== "") {
if (group_position != null) {
this.parsed[group_position].children += 1;
}
this.parsed.push({
array_index: this.parsed.length,
options_index: this.options_index,
value: option.value,
text: option.text,
html: option.innerHTML,
selected: option.selected,
disabled: group_disabled === true ? group_disabled : option.disabled,
group_array_index: group_position
});
} else {
this.parsed.push({
array_index: this.parsed.length,
options_index: this.options_index,
empty: true
});
}
return this.options_index += 1;
}
};
return SelectParser;
})();
SelectParser.select_to_array = function(select) {
var child, parser, _i, _len, _ref;
parser = new SelectParser();
_ref = select.childNodes;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
child = _ref[_i];
parser.add_node(child);
}
return parser.parsed;
};
root.SelectParser = SelectParser;
}).call(this); }).call(this);

File diff suppressed because one or more lines are too long

View file

@ -1,3 +1,75 @@
(function() {
var SelectParser;
SelectParser = (function() {
function SelectParser() {
this.options_index = 0;
this.parsed = [];
}
SelectParser.prototype.add_node = function(child) {
if (child.nodeName === "OPTGROUP") {
return this.add_group(child);
} else {
return this.add_option(child);
}
};
SelectParser.prototype.add_group = function(group) {
var group_position, option, _i, _len, _ref, _results;
group_position = this.parsed.length;
this.parsed.push({
array_index: group_position,
group: true,
label: group.label,
children: 0,
disabled: group.disabled
});
_ref = group.childNodes;
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
option = _ref[_i];
_results.push(this.add_option(option, group_position, group.disabled));
}
return _results;
};
SelectParser.prototype.add_option = function(option, group_position, group_disabled) {
if (option.nodeName === "OPTION") {
if (option.text !== "") {
if (group_position != null) {
this.parsed[group_position].children += 1;
}
this.parsed.push({
array_index: this.parsed.length,
options_index: this.options_index,
value: option.value,
text: option.text,
html: option.innerHTML,
selected: option.selected,
disabled: group_disabled === true ? group_disabled : option.disabled,
group_array_index: group_position
});
} else {
this.parsed.push({
array_index: this.parsed.length,
options_index: this.options_index,
empty: true
});
}
return this.options_index += 1;
}
};
return SelectParser;
})();
SelectParser.select_to_array = function(select) {
var child, parser, _i, _len, _ref;
parser = new SelectParser();
_ref = select.childNodes;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
child = _ref[_i];
parser.add_node(child);
}
return parser.parsed;
};
this.SelectParser = SelectParser;
}).call(this);
(function() { (function() {
/* /*
Chosen, a Select Box Enhancer for jQuery and Protoype Chosen, a Select Box Enhancer for jQuery and Protoype
@ -6,9 +78,9 @@
Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_License Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_License
Copyright (c) 2011 by Harvest Copyright (c) 2011 by Harvest
*/ var Chosen, SelectParser, get_side_border_padding, root; */ var Chosen, get_side_border_padding, root;
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
root = typeof exports !== "undefined" && exports !== null ? exports : this; root = this;
Chosen = (function() { Chosen = (function() {
function Chosen(elmn) { function Chosen(elmn) {
this.set_default_values(); this.set_default_values();
@ -198,7 +270,7 @@
var content, data, startTime, _i, _len, _ref; var content, data, startTime, _i, _len, _ref;
startTime = new Date(); startTime = new Date();
this.parsing = true; this.parsing = true;
this.results_data = SelectParser.select_to_array(this.form_field); this.results_data = root.SelectParser.select_to_array(this.form_field);
if (this.is_multiple && this.choices > 0) { if (this.is_multiple && this.choices > 0) {
this.search_choices.select("li.search-choice").invoke("remove"); this.search_choices.select("li.search-choice").invoke("remove");
this.choices = 0; this.choices = 0;
@ -676,7 +748,7 @@
}; };
return Chosen; return Chosen;
})(); })();
root.Chosen = Chosen; this.Chosen = Chosen;
document.observe('dom:loaded', function(evt) { document.observe('dom:loaded', function(evt) {
var select, selects, _i, _len, _results; var select, selects, _i, _len, _results;
selects = $$(".chzn-select"); selects = $$(".chzn-select");
@ -693,74 +765,4 @@
return side_border_padding = layout.get("border-left") + layout.get("border-right") + layout.get("padding-left") + layout.get("padding-right"); return side_border_padding = layout.get("border-left") + layout.get("border-right") + layout.get("padding-left") + layout.get("padding-right");
}; };
root.get_side_border_padding = get_side_border_padding; root.get_side_border_padding = get_side_border_padding;
root = typeof exports !== "undefined" && exports !== null ? exports : this;
SelectParser = (function() {
function SelectParser() {
this.options_index = 0;
this.parsed = [];
}
SelectParser.prototype.add_node = function(child) {
if (child.nodeName === "OPTGROUP") {
return this.add_group(child);
} else {
return this.add_option(child);
}
};
SelectParser.prototype.add_group = function(group) {
var group_position, option, _i, _len, _ref, _results;
group_position = this.parsed.length;
this.parsed.push({
array_index: group_position,
group: true,
label: group.label,
children: 0,
disabled: group.disabled
});
_ref = group.childNodes;
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
option = _ref[_i];
_results.push(this.add_option(option, group_position, group.disabled));
}
return _results;
};
SelectParser.prototype.add_option = function(option, group_position, group_disabled) {
if (option.nodeName === "OPTION") {
if (option.text !== "") {
if (group_position != null) {
this.parsed[group_position].children += 1;
}
this.parsed.push({
array_index: this.parsed.length,
options_index: this.options_index,
value: option.value,
text: option.text,
html: option.innerHTML,
selected: option.selected,
disabled: group_disabled === true ? group_disabled : option.disabled,
group_array_index: group_position
});
} else {
this.parsed.push({
array_index: this.parsed.length,
options_index: this.options_index,
empty: true
});
}
return this.options_index += 1;
}
};
return SelectParser;
})();
SelectParser.select_to_array = function(select) {
var child, parser, _i, _len, _ref;
parser = new SelectParser();
_ref = select.childNodes;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
child = _ref[_i];
parser.add_node(child);
}
return parser.parsed;
};
root.SelectParser = SelectParser;
}).call(this); }).call(this);

File diff suppressed because one or more lines are too long

View file

@ -6,8 +6,7 @@ Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_Licens
Copyright (c) 2011 by Harvest Copyright (c) 2011 by Harvest
### ###
root = this
root = exports ? this
$ = jQuery $ = jQuery
$.fn.extend({ $.fn.extend({
@ -179,7 +178,7 @@ class Chosen
results_build: -> results_build: ->
startTime = new Date() startTime = new Date()
@parsing = true @parsing = true
@results_data = SelectParser.select_to_array @form_field @results_data = root.SelectParser.select_to_array @form_field
if @is_multiple and @choices > 0 if @is_multiple and @choices > 0
@search_choices.find("li.search-choice").remove() @search_choices.find("li.search-choice").remove()
@ -599,53 +598,3 @@ get_side_border_padding = (elmt) ->
side_border_padding = elmt.outerWidth() - elmt.width() side_border_padding = elmt.outerWidth() - elmt.width()
root.get_side_border_padding = get_side_border_padding root.get_side_border_padding = get_side_border_padding
class SelectParser
constructor: ->
@options_index = 0
@parsed = []
add_node: (child) ->
if child.nodeName is "OPTGROUP"
this.add_group child
else
this.add_option child
add_group: (group) ->
group_position = @parsed.length
@parsed.push
array_index: group_position
group: true
label: group.label
children: 0
disabled: group.disabled
this.add_option( option, group_position, group.disabled ) for option in group.childNodes
add_option: (option, group_position, group_disabled) ->
if option.nodeName is "OPTION"
if option.text != ""
if group_position?
@parsed[group_position].children += 1
@parsed.push
array_index: @parsed.length
options_index: @options_index
value: option.value
text: option.text
html: option.innerHTML
selected: option.selected
disabled: if group_disabled is true then group_disabled else option.disabled
group_array_index: group_position
else
@parsed.push
array_index: @parsed.length
options_index: @options_index
empty: true
@options_index += 1
SelectParser.select_to_array = (select) ->
parser = new SelectParser()
parser.add_node( child ) for child in select.childNodes
parser.parsed
root.SelectParser = SelectParser

View file

@ -6,8 +6,7 @@ Available for use under the MIT License, http://en.wikipedia.org/wiki/MIT_Licens
Copyright (c) 2011 by Harvest Copyright (c) 2011 by Harvest
### ###
root = this
root = exports ? this
class Chosen class Chosen
@ -172,7 +171,7 @@ class Chosen
results_build: -> results_build: ->
startTime = new Date() startTime = new Date()
@parsing = true @parsing = true
@results_data = SelectParser.select_to_array @form_field @results_data = root.SelectParser.select_to_array @form_field
if @is_multiple and @choices > 0 if @is_multiple and @choices > 0
@search_choices.select("li.search-choice").invoke("remove") @search_choices.select("li.search-choice").invoke("remove")
@ -580,55 +579,3 @@ get_side_border_padding = (elmt) ->
side_border_padding = layout.get("border-left") + layout.get("border-right") + layout.get("padding-left") + layout.get("padding-right") side_border_padding = layout.get("border-left") + layout.get("border-right") + layout.get("padding-left") + layout.get("padding-right")
root.get_side_border_padding = get_side_border_padding root.get_side_border_padding = get_side_border_padding
root = exports ? this
class SelectParser
constructor: ->
@options_index = 0
@parsed = []
add_node: (child) ->
if child.nodeName is "OPTGROUP"
this.add_group child
else
this.add_option child
add_group: (group) ->
group_position = @parsed.length
@parsed.push
array_index: group_position
group: true
label: group.label
children: 0
disabled: group.disabled
this.add_option( option, group_position, group.disabled ) for option in group.childNodes
add_option: (option, group_position, group_disabled) ->
if option.nodeName is "OPTION"
if option.text != ""
if group_position?
@parsed[group_position].children += 1
@parsed.push
array_index: @parsed.length
options_index: @options_index
value: option.value
text: option.text
html: option.innerHTML
selected: option.selected
disabled: if group_disabled is true then group_disabled else option.disabled
group_array_index: group_position
else
@parsed.push
array_index: @parsed.length
options_index: @options_index
empty: true
@options_index += 1
SelectParser.select_to_array = (select) ->
parser = new SelectParser()
parser.add_node( child ) for child in select.childNodes
parser.parsed
root.SelectParser = SelectParser

View file

@ -0,0 +1,49 @@
class SelectParser
constructor: ->
@options_index = 0
@parsed = []
add_node: (child) ->
if child.nodeName is "OPTGROUP"
this.add_group child
else
this.add_option child
add_group: (group) ->
group_position = @parsed.length
@parsed.push
array_index: group_position
group: true
label: group.label
children: 0
disabled: group.disabled
this.add_option( option, group_position, group.disabled ) for option in group.childNodes
add_option: (option, group_position, group_disabled) ->
if option.nodeName is "OPTION"
if option.text != ""
if group_position?
@parsed[group_position].children += 1
@parsed.push
array_index: @parsed.length
options_index: @options_index
value: option.value
text: option.text
html: option.innerHTML
selected: option.selected
disabled: if group_disabled is true then group_disabled else option.disabled
group_array_index: group_position
else
@parsed.push
array_index: @parsed.length
options_index: @options_index
empty: true
@options_index += 1
SelectParser.select_to_array = (select) ->
parser = new SelectParser()
parser.add_node( child ) for child in select.childNodes
parser.parsed
this.SelectParser = SelectParser