Skip to content

Commit d023297

Browse files
committed
Removed hooks reference and update plugins to use events.
1 parent bc7dc29 commit d023297

13 files changed

+407
-146
lines changed

.eslintrc

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,17 @@
224224
"space-unary-ops": "error",
225225
"spaced-comment": [
226226
"error",
227-
"always"
227+
"always", {
228+
"line": {
229+
"markers": ["/"],
230+
"exceptions": ["-", "+"]
231+
},
232+
"block": {
233+
"markers": ["!"],
234+
"exceptions": ["*"],
235+
"balanced": true
236+
}
237+
}
228238
],
229239
"strict": "off",
230240
"template-curly-spacing": "error",

README.md

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -303,18 +303,6 @@ $('select').on('eventname', function(element) {
303303
</tr>
304304
</table>
305305

306-
##Hooks:
307-
308-
Check [jquery.selectric.placeholder.js](plugins/jquery.selectric.placeholder.js) source for a usage example.
309-
310-
```js
311-
// Add a callback everytime 'callbackName' is called
312-
$.fn.selectric.hooks.add('callbackName', 'hookName', function(element, data) {});
313-
314-
// Remove a callback
315-
$.fn.selectric.hooks.remove('callbackName', 'hookName');
316-
```
317-
318306
##Public methods:
319307

320308
```js

gulpfile.js

Lines changed: 68 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,33 @@ var getPackageJson = function() {
66
return JSON.parse(fs.readFileSync('./package.json', 'utf8'));
77
};
88

9+
var banner = [
10+
'/*!',
11+
' * ,/',
12+
' * ,\'/',
13+
' * ,\' /',
14+
' * ,\' /_____,',
15+
' * .\'____ ,\'',
16+
' * / ,\'',
17+
' * / ,\'',
18+
' * /,\'',
19+
' * /\'',
20+
' *',
21+
' * Selectric \u03DF v<%= pkg.version %> (<%= new Date().toString().substr(4, 11) %>) - http://lcdsantos.github.io/jQuery-Selectric/',
22+
' *',
23+
' * Copyright (c) <%= new Date().getFullYear() %> Leonardo Santos; MIT License',
24+
' *',
25+
' */\n\n'
26+
].join('\n');
27+
28+
var bannerSmall = '/*! Selectric \u03DF v<%= pkg.version %> (<%= new Date().toJSON().slice(0,10) %>) - git.io/tjl9sQ - Copyright (c) <%= new Date().getFullYear() %> Leonardo Santos - MIT License */\n';
29+
30+
var bannerCSS = [
31+
'/*======================================',
32+
' Selectric v<%= pkg.version %>',
33+
'======================================*/\n\n'
34+
].join('\n');
35+
936

1037
/**
1138
* Bump version
@@ -23,36 +50,18 @@ gulp.task('bump', function() {
2350

2451

2552
/**
26-
* Javascript
53+
* JavaScript
2754
*/
2855
gulp.task('lint', function() {
29-
return gulp.src(['./src/*.js'])
56+
return gulp.src(['./src/**/*.js'])
3057
.pipe($.eslint('.eslintrc'))
3158
.pipe($.eslint.format());
3259
});
3360

3461
gulp.task('js', ['lint'], function() {
3562
var pkg = getPackageJson();
36-
var banner = [
37-
'/*!',
38-
' * ,/',
39-
' * ,\'/',
40-
' * ,\' /',
41-
' * ,\' /_____,',
42-
' * .\'____ ,\'',
43-
' * / ,\'',
44-
' * / ,\'',
45-
' * /,\'',
46-
' * /\'',
47-
' *',
48-
' * Selectric \u03DF v<%= pkg.version %> (<%= new Date().toString().substr(4, 11) %>) - http://lcdsantos.github.io/jQuery-Selectric/',
49-
' *',
50-
' * Copyright (c) <%= new Date().getFullYear() %> Leonardo Santos; MIT License',
51-
' *',
52-
' */\n\n'
53-
].join('\n');
54-
55-
return gulp.src('src/jquery.selectric.js')
63+
64+
return gulp.src(['src/jquery.selectric.js'])
5665
.pipe($.header(banner, { pkg: pkg }))
5766
.pipe(gulp.dest('./public'))
5867
.pipe($.connect.reload());
@@ -61,14 +70,29 @@ gulp.task('js', ['lint'], function() {
6170
gulp.task('js-min', function() {
6271
var pkg = getPackageJson();
6372

64-
return gulp.src('src/jquery.selectric.js')
73+
return gulp.src(['./src/jquery.selectric.js'])
6574
.pipe($.uglify())
66-
.pipe($.header('/*! Selectric \u03DF v<%= pkg.version %> (<%= new Date().toJSON().slice(0,10) %>) - git.io/tjl9sQ - Copyright (c) <%= new Date().getFullYear() %> Leonardo Santos - MIT License */\n', { pkg: pkg }))
75+
.pipe($.header(bannerSmall, { pkg: pkg }))
6776
.pipe($.rename({ suffix: '.min' }))
6877
.pipe(gulp.dest('./public'))
6978
.pipe($.connect.reload());
7079
});
7180

81+
gulp.task('js-plugins', ['lint'], function() {
82+
var pluginData = {
83+
date: new Date().toJSON().slice(0, 10),
84+
year: new Date().getFullYear()
85+
};
86+
87+
return gulp.src(['*.js'], { cwd: './src/plugins/' })
88+
.pipe($.template(pluginData))
89+
.pipe(gulp.dest('./public/plugins/'))
90+
.pipe($.uglify({ preserveComments: 'license' }))
91+
.pipe($.rename({ suffix: '.min' }))
92+
.pipe(gulp.dest('./public/plugins/'))
93+
.pipe($.connect.reload());
94+
});
95+
7296

7397
/**
7498
* CSS
@@ -77,32 +101,28 @@ gulp.task('css', function() {
77101
var pkg = getPackageJson();
78102

79103
return gulp.src('./src/selectric.scss')
80-
.pipe($.sass({
81-
outputStyle: 'expanded'
82-
}))
83-
.pipe($.autoprefixer({
84-
browsers: ['last 2 versions', '> 1%', 'ie 8', 'ie 7']
85-
}))
86-
.pipe($.header([
87-
'/*======================================',
88-
' Selectric v<%= pkg.version %>',
89-
'======================================*/\n\n'
90-
].join('\n'), { pkg: pkg }))
104+
.pipe($.sass({ outputStyle: 'expanded' }))
105+
.pipe($.autoprefixer({ browsers: ['last 2 versions', '> 1%', 'ie 8', 'ie 7'] }))
106+
.pipe($.header(bannerCSS, { pkg: pkg }))
91107
.pipe(gulp.dest('./public'))
92108
.pipe($.connect.reload());
93109
});
94110

95111
gulp.task('themes-css', function() {
96112
return gulp.src('**/*.scss', { cwd: './src/themes/' })
97-
.pipe($.sass({
98-
outputStyle: 'expanded'
99-
}))
100-
.pipe($.autoprefixer({
101-
browsers: ['last 2 versions', '> 1%', 'ie 8', 'ie 7']
102-
}))
113+
.pipe($.sass({ outputStyle: 'expanded' }))
114+
.pipe($.autoprefixer({ browsers: ['last 2 versions', '> 1%', 'ie 8', 'ie 7'] }))
103115
.pipe(gulp.dest('./public/themes/'));
104116
});
105117

118+
gulp.task('plugins-css', function() {
119+
return gulp.src('**/*.scss', { cwd: './src/plugins/' })
120+
.pipe($.sass({ outputStyle: 'expanded' }))
121+
.pipe($.autoprefixer({ browsers: ['last 2 versions', '> 1%', 'ie 8', 'ie 7'] }))
122+
.pipe(gulp.dest('./public/plugins/'));
123+
});
124+
125+
106126
/**
107127
* Live preview
108128
*/
@@ -123,10 +143,12 @@ gulp.task('html', function() {
123143
* Watch
124144
*/
125145
gulp.task('watch', ['serve'], function() {
126-
gulp.watch(['*.js'], { cwd: './src/' }, ['js', 'js-min']);
127-
gulp.watch(['*.scss'], { cwd: './src/' }, ['css']);
128-
gulp.watch(['**/*.scss'], { cwd: './src/themes/' }, ['themes-css']);
129-
gulp.watch(['*.html'], { cwd: './public/' }, ['html']);
146+
gulp.watch(['*.js'], { cwd: './src/' }, ['js', 'js-min']);
147+
gulp.watch(['*.js'], { cwd: './src/plugins/' }, ['js-plugins']);
148+
gulp.watch(['*.scss'], { cwd: './src/' }, ['css']);
149+
gulp.watch(['**/*.scss'], { cwd: './src/themes/' }, ['themes-css']);
150+
gulp.watch(['**/*.scss'], { cwd: './src/plugins/' }, ['plugins-css']);
151+
gulp.watch(['*.html'], { cwd: './public/' }, ['html']);
130152
});
131153

132154

@@ -154,7 +176,7 @@ gulp.task('gh-pages', function() {
154176
/**
155177
* Default tasks
156178
*/
157-
gulp.task('build', ['bump', 'js', 'js-min', 'css']);
179+
gulp.task('build', ['bump', 'js', 'js-min', 'js-plugins', 'css', 'themes-css', 'plugins-css']);
158180
gulp.task('default', ['build', 'watch']);
159181
gulp.task('release', ['bump', 'build', 'zip']);
160182
gulp.task('publish', ['gh-pages']);

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
"gulp-load-plugins": "^1.2.4",
4444
"gulp-rename": "^1.2.2",
4545
"gulp-sass": "^2.3.2",
46+
"gulp-template": "^4.0.0",
4647
"gulp-uglify": "^2.0.0",
4748
"gulp-util": "^3.0.7",
4849
"gulp-zip": "^3.2.0",

public/plugins/jquery.selectric.addNew.css

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
position: relative;
44
}
55

6-
.selectric-scroll .createNew {
6+
.selectric-scroll .create-new {
77
position: absolute;
88
top: 0;
99
width: 100%;
1010
}
1111

12-
.selectric-scroll .createNew > input[type=text],
13-
.selectric-scroll .createNew > button {
12+
.selectric-scroll .create-new > input[type=text],
13+
.selectric-scroll .create-new > button {
1414
height: 24px;
1515
margin: 3px 1%;
1616
padding: 5px;
@@ -19,7 +19,7 @@
1919
font-weight: normal;
2020
}
2121

22-
.selectric-scroll .createNew > input[type=text] {
22+
.selectric-scroll .create-new > input[type=text] {
2323
background: #fff;
2424
width: 76%;
2525
border: 1px solid #ddd;
@@ -28,7 +28,7 @@
2828
color: #444;
2929
}
3030

31-
.selectric-scroll .createNew > button {
31+
.selectric-scroll .create-new > button {
3232
width: 20%;
3333
background: #c02126;
3434
border: 1px solid #981317;
@@ -42,6 +42,6 @@
4242
text-transform: uppercase;
4343
}
4444

45-
.selectric-scroll .createNew + ul {
45+
.selectric-scroll .create-new + ul {
4646
margin-top: 30px;
4747
}
Lines changed: 49 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,84 @@
1-
/*! Selectric AddNew ϟ v0.1.0 (2014-01-14) - git.io/tjl9sQ - Copyright (c) 2015 David Shen (git.io/mhQmLQ) - Dual licensed: MIT/GPL */
2-
;(function($) {
1+
/*! Selectric AddNew ϟ v0.2.0 (2016-10-06) - git.io/tjl9sQ - Copyright (c) 2016 David Shen (git.io/mhQmLQ) - MIT License */
2+
(function(factory) {
3+
/* global define */
4+
if ( typeof define === 'function' && define.amd ) {
5+
define(['jquery'], factory);
6+
} else if ( typeof module === 'object' && module.exports ) {
7+
// Node/CommonJS
8+
module.exports = function( root, jQuery ) {
9+
if ( jQuery === undefined ) {
10+
if ( typeof window !== 'undefined' ) {
11+
jQuery = require('jquery');
12+
} else {
13+
jQuery = require('jquery')(root);
14+
}
15+
}
16+
factory(jQuery);
17+
return jQuery;
18+
};
19+
} else {
20+
// Browser globals
21+
factory(jQuery);
22+
}
23+
}(function($) {
324
'use strict';
425

5-
$(function() {
6-
if (!$.fn.selectric) {
7-
$.error('Selectric not initialized');
8-
}
9-
10-
var hooks = $.fn.selectric.hooks;
26+
if ( !$.fn.selectric ) {
27+
$.error('Selectric not initialized');
28+
}
1129

12-
hooks.add('BeforeInit', 'addNew', function(element, data) {
13-
data.options = $.extend({
30+
$.fn.selectricAddNew = function(opts) {
31+
return this.each(function() {
32+
var $this = $(this);
33+
var data = $this.data('selectric');
34+
var options = $.extend({
1435
createNewAutoSelect: true,
1536
createNewMarkup: '<input type="text" /><button>Create</button>',
16-
allowCreateNew: false,
37+
allowCreateNew: true,
1738
createNewCallback: $.noop,
18-
createNewError: function(){
19-
alert('Title required.');
39+
createNewError: function() {
40+
$.error('Title required.');
2041
}
21-
}, data.options);
22-
});
23-
24-
hooks.add('Init', 'addNew', function(element, data) {
25-
var $original = $(element),
26-
$wrapper = $original.closest('.' + data.classes.wrapper),
27-
$itemsScroll = $wrapper.find('.' + data.classes.scroll),
28-
$createNew = $('<div/>', { 'class': 'createNew', 'html': data.options.createNewMarkup });
42+
}, opts);
43+
var $original = data.$element;
44+
var $itemsScroll = data.elements.itemsScroll;
45+
var $createNew = $('<div/>', { 'class': 'create-new', 'html': options.createNewMarkup });
2946

30-
if ( data.options.allowCreateNew ){
47+
if ( options.allowCreateNew ) {
3148
$itemsScroll.prepend($createNew);
3249

33-
var createNewInput = $createNew.find('input[type=text]'),
34-
createNewButton = $createNew.find('button');
50+
var createNewInput = $createNew.find('input[type=text]');
51+
var createNewButton = $createNew.find('button');
3552

36-
createNewInput.add(createNewButton).on('click', function(e){
53+
createNewInput.add(createNewButton).on('click', function(e) {
3754
e.preventDefault();
3855
e.stopPropagation();
3956
});
4057

41-
createNewButton.on('click', function(e){
42-
if ( createNewInput.val() ){
58+
createNewButton.on('click', function() {
59+
if ( createNewInput.val() ) {
4360
var newValue = createNewInput.val();
4461

4562
$original.append($('<option>', {
4663
value: newValue,
4764
text : newValue
4865
}));
4966

50-
if ( data.options.createNewAutoSelect ){
67+
if ( options.createNewAutoSelect ) {
5168
$original.prop('selectedIndex', $original.children().length - 1);
5269
}
5370

5471
data.refresh();
5572
data.open();
5673

57-
data.options.createNewCallback.call(element, newValue);
74+
options.createNewCallback.call(data.element, newValue);
5875

5976
createNewInput.add(createNewButton).off('click');
6077
} else {
61-
data.options.createNewError.call(element);
78+
options.createNewError.call(data.element);
6279
}
6380
});
6481
}
6582
});
66-
});
67-
}(jQuery));
83+
};
84+
}));

public/plugins/jquery.selectric.addNew.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)