Skip to content
This repository was archived by the owner on Dec 27, 2021. It is now read-only.

Commit 7f653be

Browse files
committed
1.6.1
1 parent c98a977 commit 7f653be

File tree

6 files changed

+96
-55
lines changed

6 files changed

+96
-55
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# История изменений
22

3+
## 1.6.1 <sup>23.11.2014</sup>
4+
- Добавлено: поддержка AMD и CommonJS.
5+
- Исправлено: если в теге `<label>`, который обрамляет `<input type="checkbox">` или `<input type="radio">`, находилась ссылка, то по ней нельзя было перейти.
6+
- Исправлено: в IE9, если у псевдоселекта не была задана ширина, то она "скакала" при наведении.
7+
- Исправлено: если плейсхолдер селекта был длиннее, чем `<option>`, то он обрезался.
8+
- Исправлено: в псевдоселектах к тегам `<li>` теперь не добавляется атрибут `class`, если он пустой.
9+
- Изменено: CSS-свойства, прописанные в плагине тегам `<li>` в псевдоселектах, перенесены в CSS-файл.
10+
311
## 1.6 <sup>04.10.2014</sup>
412
- Добавлено: возможность указать опции плагина конкретным тегам через data-атрибуты.
513
- Добавлены новые классы: при открытии выпадающего селекта вверх (`.dropup`) и вниз (`.dropdown`).

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# jQuery Form Styler <sup>[1.6](https://github.com/Dimox/jQueryFormStyler/blob/master/CHANGELOG.md)</sup>
1+
# jQuery Form Styler <sup>[1.6.1](https://github.com/Dimox/jQueryFormStyler/blob/master/CHANGELOG.md)</sup>
22

33
jQuery-плагин для стилизации элементов html-форм:
44

bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "Dimox/jQueryFormStyler",
3-
"version": "1.6",
3+
"version": "1.6.1",
44
"main": "jquery.formstyler.css",
55
"description": "jQuery-плагин для стилизации элементов html-форм",
66
"license": "MIT",

jquery.formstyler.css

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,12 @@
234234
.jq-selectbox li {
235235
min-height: 18px;
236236
padding: 5px 10px 6px;
237+
-webkit-user-select: none;
238+
-moz-user-select: none;
239+
-ms-user-select: none;
240+
user-select: none;
241+
-o-user-select: none;
242+
white-space: nowrap;
237243
color: #231F20;
238244
}
239245
.jq-selectbox li.selected {
@@ -292,6 +298,12 @@
292298
.jq-select-multiple li {
293299
padding: 3px 9px 4px;
294300
list-style: none;
301+
-webkit-user-select: none;
302+
-moz-user-select: none;
303+
-ms-user-select: none;
304+
-o-user-select: none;
305+
user-select: none;
306+
white-space: nowrap;
295307
}
296308
.jq-select-multiple li:first-child {
297309
border-radius: 3px 3px 0 0;

jquery.formstyler.js

Lines changed: 43 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,25 @@
11
/*
2-
* jQuery Form Styler v1.6
2+
* jQuery Form Styler v1.6.1
33
* https://github.com/Dimox/jQueryFormStyler
44
*
55
* Copyright 2012-2014 Dimox (http://dimox.name/)
66
* Released under the MIT license.
77
*
8-
* Date: 2014.10.04
8+
* Date: 2014.11.23
99
*
1010
*/
1111

12-
(function($) {
12+
(function(factory) {
13+
if (typeof define === 'function' && define.amd) {
14+
// AMD
15+
define(['jquery'], factory);
16+
} else if (typeof exports === 'object') {
17+
// CommonJS
18+
module.exports = factory(require('jquery'));
19+
} else {
20+
factory(jQuery);
21+
}
22+
}(function($) {
1323

1424
$.fn.styler = function(options) {
1525

@@ -103,8 +113,10 @@
103113
});
104114
// клик на label
105115
el.closest('label').add('label[for="' + el.attr('id') + '"]').click(function(e) {
106-
checkbox.click();
107-
e.preventDefault();
116+
if (!$(e.target).is('a')) {
117+
checkbox.click();
118+
e.preventDefault();
119+
}
108120
});
109121
// переключение по Space или Enter
110122
el.on('change.styler', function() {
@@ -181,8 +193,10 @@
181193
});
182194
// клик на label
183195
el.closest('label').add('label[for="' + el.attr('id') + '"]').click(function(e) {
184-
radio.click();
185-
e.preventDefault();
196+
if (!$(e.target).is('a')) {
197+
radio.click();
198+
e.preventDefault();
199+
}
186200
});
187201
// переключение стрелками
188202
el.on('change.styler', function() {
@@ -306,6 +320,7 @@
306320
for (var i = 0, len = option.length; i < len; i++) {
307321
var li = '',
308322
liClass = '',
323+
liClasses = '',
309324
dataList = '',
310325
optionClass = '',
311326
optgroupClass = '',
@@ -325,7 +340,8 @@
325340
if (data[k] !== '') dataList += ' data-' + k + '="' + data[k] + '"';
326341
}
327342

328-
li = '<li' + dataJqfsClass + dataList + ' class="' + liClass + optionClass + '">'+ option.eq(i).html() +'</li>';
343+
if ( (liClass + optionClass) !== '' ) liClasses = ' class="' + liClass + optionClass + '"';
344+
li = '<li' + dataJqfsClass + dataList + liClasses + '>'+ option.eq(i).html() +'</li>';
329345

330346
// если есть optgroup
331347
if (option.eq(i).parent().is('optgroup')) {
@@ -392,38 +408,44 @@
392408
var notFound = $('div.jq-selectbox__not-found', dropdown).hide();
393409
if (li.length < selectSearchLimit) search.parent().hide();
394410

411+
// показываем опцию по умолчанию
412+
// если 1-я опция пустая и выбрана по умолчанию, то показываем плейсхолдер
413+
if (el.val() === '') {
414+
divText.text(selectPlaceholder).addClass('placeholder');
415+
} else {
416+
divText.text(optionSelected.text());
417+
}
418+
395419
// определяем самый широкий пункт селекта
396420
var liWidth1 = 0,
397421
liWidth2 = 0;
398422
li.each(function() {
399423
var l = $(this);
400-
l.css({'display': 'inline-block', 'white-space': 'nowrap'});
424+
l.css({'display': 'inline-block'});
401425
if (l.innerWidth() > liWidth1) {
402426
liWidth1 = l.innerWidth();
403427
liWidth2 = l.width();
404428
}
405-
l.css({'display': 'block'});
429+
l.css({'display': ''});
406430
});
407431

408432
// подстраиваем ширину псевдоселекта и выпадающего списка
409433
// в зависимости от самого широкого пункта
410434
var selClone = selectbox.clone().appendTo('body').width('auto');
411-
var selCloneWidth = selClone.width();
435+
var selCloneWidth = selClone.find('select').outerWidth();
412436
selClone.remove();
413437
if (selCloneWidth == selectbox.width()) {
414438
divText.width(liWidth2);
415439
}
416-
if ( liWidth1 > selectbox.width() ) {
440+
if (liWidth1 > selectbox.width()) {
417441
dropdown.width(liWidth1);
418442
}
419-
420-
// показываем опцию по умолчанию
421-
// если 1-я опция пустая и выбрана по умолчанию, то показываем плейсхолдер
422-
if (el.val() === '') {
423-
divText.text(selectPlaceholder).addClass('placeholder');
424-
} else {
425-
divText.text(optionSelected.text());
443+
// на случай, когда ширина плейсхолдера больше ширины пункта селекта
444+
// чтобы плейсхолдер не обрезался
445+
if (divText.is('.placeholder') && (divText.width() > liWidth1)) {
446+
divText.width(divText.width());
426447
}
448+
427449
// прячем 1-ю пустую опцию, если она есть и если атрибут data-placeholder не пустой
428450
// если все же нужно, чтобы первая пустая опция отображалась, то указываем у селекта: data-placeholder=""
429451
if (option.first().text() === '' && el.data('placeholder') !== '') {
@@ -717,7 +739,7 @@
717739
'overflow-x': 'hidden',
718740
'-webkit-overflow-scrolling': 'touch'
719741
});
720-
var li = $('li', selectbox).attr('unselectable', 'on').css({'-webkit-user-select': 'none', '-moz-user-select': 'none', '-ms-user-select': 'none', '-o-user-select': 'none', 'user-select': 'none', 'white-space': 'nowrap'});
742+
var li = $('li', selectbox).attr('unselectable', 'on');
721743
var size = el.attr('size');
722744
var ulHeight = ul.outerHeight();
723745
var liHeight = li.outerHeight();
@@ -893,4 +915,4 @@
893915
});
894916

895917
};
896-
})(jQuery);
918+
}));

0 commit comments

Comments
 (0)