|
1 | 1 | /*
|
2 |
| - * jQuery Form Styler v1.5.6 |
| 2 | + * jQuery Form Styler v1.6 |
3 | 3 | * https://github.com/Dimox/jQueryFormStyler
|
4 | 4 | *
|
5 | 5 | * Copyright 2012-2014 Dimox (http://dimox.name/)
|
6 | 6 | * Released under the MIT license.
|
7 | 7 | *
|
8 |
| - * Date: 2014.09.08 |
| 8 | + * Date: 2014.10.04 |
9 | 9 | *
|
10 | 10 | */
|
11 | 11 |
|
|
43 | 43 | if (el.attr('title') !== undefined && el.attr('title') !== '') title = ' title="' + el.attr('title') + '"';
|
44 | 44 | if (el.attr('class') !== undefined && el.attr('class') !== '') classes = ' ' + el.attr('class');
|
45 | 45 | var data = el.data();
|
46 |
| - for (var i = 0; i < data.length; i++) { |
| 46 | + for (var i in data) { |
47 | 47 | if (data[i] !== '') dataList += ' data-' + i + '="' + data[i] + '"';
|
48 | 48 | }
|
49 | 49 | id += dataList;
|
|
227 | 227 | var fileOutput = function() {
|
228 | 228 |
|
229 | 229 | var att = new Attributes();
|
| 230 | + var placeholder = el.data('placeholder'); |
| 231 | + if (placeholder === undefined) placeholder = opt.filePlaceholder; |
| 232 | + var browse = el.data('browse'); |
| 233 | + if (browse === undefined || browse === '') browse = opt.fileBrowse; |
230 | 234 | var file = $('<div' + att.id + ' class="jq-file' + att.classes + '"' + att.title + ' style="display: inline-block; position: relative; overflow: hidden"></div>');
|
231 |
| - var name = $('<div class="jq-file__name">' + opt.filePlaceholder + '</div>').appendTo(file); |
232 |
| - var browse = $('<div class="jq-file__browse">' + opt.fileBrowse + '</div>').appendTo(file); |
| 235 | + var name = $('<div class="jq-file__name">' + placeholder + '</div>').appendTo(file); |
| 236 | + $('<div class="jq-file__browse">' + browse + '</div>').appendTo(file); |
233 | 237 | el.after(file);
|
234 | 238 | file.append(el);
|
235 | 239 | if (el.is(':disabled')) file.addClass('disabled');
|
|
244 | 248 | }
|
245 | 249 | name.text(value.replace(/.+[\\\/]/, ''));
|
246 | 250 | if (value === '') {
|
247 |
| - name.text(opt.filePlaceholder); |
| 251 | + name.text(placeholder); |
248 | 252 | file.removeClass('changed');
|
249 | 253 | } else {
|
250 | 254 | file.addClass('changed');
|
|
339 | 343 | // одиночный селект
|
340 | 344 | function doSelect() {
|
341 | 345 | var att = new Attributes();
|
| 346 | + |
| 347 | + var searchHTML = ''; |
| 348 | + var selectPlaceholder = el.data('placeholder'); |
| 349 | + var selectSearch = el.data('search'); |
| 350 | + var selectSearchLimit = el.data('search-limit'); |
| 351 | + var selectSearchNotFound = el.data('search-not-found'); |
| 352 | + var selectSearchPlaceholder = el.data('search-placeholder'); |
| 353 | + var singleSelectzIndex = el.data('z-index'); |
| 354 | + var selectSmartPositioning = el.data('smart-positioning'); |
| 355 | + |
| 356 | + if (selectPlaceholder === undefined) selectPlaceholder = opt.selectPlaceholder; |
| 357 | + if (selectSearch === undefined || selectSearch === '') selectSearch = opt.selectSearch; |
| 358 | + if (selectSearchLimit === undefined || selectSearchLimit === '') selectSearchLimit = opt.selectSearchLimit; |
| 359 | + if (selectSearchNotFound === undefined || selectSearchNotFound === '') selectSearchNotFound = opt.selectSearchNotFound; |
| 360 | + if (selectSearchPlaceholder === undefined) selectSearchPlaceholder = opt.selectSearchPlaceholder; |
| 361 | + if (singleSelectzIndex === undefined || singleSelectzIndex === '') singleSelectzIndex = opt.singleSelectzIndex; |
| 362 | + if (selectSmartPositioning === undefined || selectSmartPositioning === '') selectSmartPositioning = opt.selectSmartPositioning; |
| 363 | + |
342 | 364 | var selectbox =
|
343 |
| - $('<div' + att.id + ' class="jq-selectbox jqselect' + att.classes + '" style="display: inline-block; position: relative; z-index:' + opt.singleSelectzIndex + '">' + |
| 365 | + $('<div' + att.id + ' class="jq-selectbox jqselect' + att.classes + '" style="display: inline-block; position: relative; z-index:' + singleSelectzIndex + '">' + |
344 | 366 | '<div class="jq-selectbox__select"' + att.title + ' style="position: relative">' +
|
345 | 367 | '<div class="jq-selectbox__select-text"></div>' +
|
346 | 368 | '<div class="jq-selectbox__trigger"><div class="jq-selectbox__trigger-arrow"></div></div>' +
|
|
354 | 376 | var optionSelected = option.filter(':selected');
|
355 | 377 |
|
356 | 378 | makeList();
|
357 |
| - var searchHTML = ''; |
358 |
| - if (opt.selectSearch) searchHTML = |
359 |
| - '<div class="jq-selectbox__search"><input type="search" autocomplete="off" placeholder="' + opt.selectSearchPlaceholder + '"></div>' + |
360 |
| - '<div class="jq-selectbox__not-found">' + opt.selectSearchNotFound + '</div>'; |
| 379 | + |
| 380 | + if (selectSearch) searchHTML = |
| 381 | + '<div class="jq-selectbox__search"><input type="search" autocomplete="off" placeholder="' + selectSearchPlaceholder + '"></div>' + |
| 382 | + '<div class="jq-selectbox__not-found">' + selectSearchNotFound + '</div>'; |
361 | 383 | var dropdown =
|
362 | 384 | $('<div class="jq-selectbox__dropdown" style="position: absolute">' +
|
363 | 385 | searchHTML +
|
|
368 | 390 | var li = $('li', dropdown);
|
369 | 391 | var search = $('input', dropdown);
|
370 | 392 | var notFound = $('div.jq-selectbox__not-found', dropdown).hide();
|
371 |
| - if (li.length < opt.selectSearchLimit) search.parent().hide(); |
| 393 | + if (li.length < selectSearchLimit) search.parent().hide(); |
372 | 394 |
|
373 | 395 | // определяем самый широкий пункт селекта
|
374 | 396 | var liWidth1 = 0,
|
|
390 | 412 | selClone.remove();
|
391 | 413 | if (selCloneWidth == selectbox.width()) {
|
392 | 414 | divText.width(liWidth2);
|
393 |
| - liWidth1 += selectbox.find('div.jq-selectbox__trigger').width(); |
394 | 415 | }
|
395 | 416 | if ( liWidth1 > selectbox.width() ) {
|
396 | 417 | dropdown.width(liWidth1);
|
|
399 | 420 | // показываем опцию по умолчанию
|
400 | 421 | // если 1-я опция пустая и выбрана по умолчанию, то показываем плейсхолдер
|
401 | 422 | if (el.val() === '') {
|
402 |
| - var placeholder = el.data('placeholder'); |
403 |
| - if (placeholder === undefined) placeholder = opt.selectPlaceholder; |
404 |
| - divText.text(placeholder).addClass('placeholder'); |
| 423 | + divText.text(selectPlaceholder).addClass('placeholder'); |
405 | 424 | } else {
|
406 | 425 | divText.text(optionSelected.text());
|
407 | 426 | }
|
|
469 | 488 | var liHeight = li.data('li-height');
|
470 | 489 | var topOffset = selectbox.offset().top;
|
471 | 490 | var bottomOffset = win.height() - selectHeight - (topOffset - win.scrollTop());
|
472 |
| - var visible = opt.selectVisibleOptions; |
| 491 | + var visible = el.data('visible-options'); |
| 492 | + if (visible === undefined || visible === '') visible = opt.selectVisibleOptions; |
473 | 493 | var minHeight = liHeight * 5;
|
474 | 494 | var newHeight = liHeight * visible;
|
475 | 495 | if (visible > 0 && visible < 6) minHeight = newHeight;
|
|
505 | 525 | }
|
506 | 526 | };
|
507 | 527 |
|
508 |
| - if (opt.selectSmartPositioning === true) { |
| 528 | + if (selectSmartPositioning === true || selectSmartPositioning === 1) { |
509 | 529 | // раскрытие вниз
|
510 | 530 | if (bottomOffset > (minHeight + searchHeight + 20)) {
|
511 | 531 | dropDown();
|
| 532 | + selectbox.removeClass('dropup').addClass('dropdown'); |
512 | 533 | // раскрытие вверх
|
513 | 534 | } else {
|
514 | 535 | dropUp();
|
| 536 | + selectbox.removeClass('dropdown').addClass('dropup'); |
515 | 537 | }
|
516 |
| - } else if (opt.selectSmartPositioning === false) { |
| 538 | + } else if (selectSmartPositioning === false || selectSmartPositioning === 0) { |
517 | 539 | // раскрытие вниз
|
518 | 540 | if (bottomOffset > (minHeight + searchHeight + 20)) {
|
519 | 541 | dropDown();
|
| 542 | + selectbox.removeClass('dropup').addClass('dropdown'); |
520 | 543 | }
|
521 | 544 | }
|
522 | 545 | // конец умного позиционирования
|
523 | 546 |
|
524 |
| - $('div.jqselect').css({zIndex: (opt.singleSelectzIndex - 1)}).removeClass('opened'); |
525 |
| - selectbox.css({zIndex: opt.singleSelectzIndex}); |
| 547 | + $('div.jqselect').css({zIndex: (singleSelectzIndex - 1)}).removeClass('opened'); |
| 548 | + selectbox.css({zIndex: singleSelectzIndex}); |
526 | 549 | if (dropdown.is(':hidden')) {
|
527 | 550 | $('div.jq-selectbox__dropdown:visible').hide();
|
528 | 551 | dropdown.show();
|
|
531 | 554 | opt.onSelectOpened.call(selectbox);
|
532 | 555 | } else {
|
533 | 556 | dropdown.hide();
|
534 |
| - selectbox.removeClass('opened'); |
| 557 | + selectbox.removeClass('opened dropup dropdown'); |
535 | 558 | // колбек при закрытии селекта
|
536 | 559 | if ($('div.jq-selectbox').filter('.opened').length) {
|
537 | 560 | opt.onSelectClosed.call(selectbox);
|
|
604 | 627 | el.change();
|
605 | 628 | }
|
606 | 629 | dropdown.hide();
|
607 |
| - selectbox.removeClass('opened'); |
| 630 | + selectbox.removeClass('opened dropup dropdown'); |
608 | 631 | // колбек при закрытии селекта
|
609 | 632 | opt.onSelectClosed.call(selectbox);
|
610 | 633 |
|
|
626 | 649 | })
|
627 | 650 | .on('focus.styler', function() {
|
628 | 651 | selectbox.addClass('focused');
|
629 |
| - $('div.jqselect').not('.focused').removeClass('opened').find('div.jq-selectbox__dropdown').hide(); |
| 652 | + $('div.jqselect').not('.focused').removeClass('opened dropup dropdown').find('div.jq-selectbox__dropdown').hide(); |
630 | 653 | })
|
631 | 654 | .on('blur.styler', function() {
|
632 | 655 | selectbox.removeClass('focused');
|
|
648 | 671 | if (e.which == 13) {
|
649 | 672 | e.preventDefault();
|
650 | 673 | dropdown.hide();
|
651 |
| - selectbox.removeClass('opened'); |
| 674 | + selectbox.removeClass('opened dropup dropdown'); |
652 | 675 | // колбек при закрытии селекта
|
653 | 676 | opt.onSelectClosed.call(selectbox);
|
654 | 677 | }
|
|
673 | 696 |
|
674 | 697 | if (search.length) search.val('').keyup();
|
675 | 698 | dropdown.hide().find('li.sel').addClass('selected');
|
676 |
| - selectbox.removeClass('focused opened'); |
| 699 | + selectbox.removeClass('focused opened dropup dropdown'); |
677 | 700 |
|
678 | 701 | }
|
679 | 702 | });
|
|
0 commit comments