vendor/assets/javascripts/webshims/shims/form-shim-extend2.js in webshims-rails-1.13.0 vs vendor/assets/javascripts/webshims/shims/form-shim-extend2.js in webshims-rails-1.14.1
- old
+ new
@@ -194,11 +194,11 @@
webshims.defineNodeNamesBooleanProperty(['fieldset'], 'disabled', {
set: function(value){
value = !!value;
if(value){
- $(disableElementsSel, this).each(groupControl.disable);
+ $(this.querySelectorAll(disableElementsSel)).each(groupControl.disable);
} else if(!$(this).is('fieldset[disabled] *')){
var elements = $(this.querySelectorAll(disableElementsSel));
if( this.querySelector('fieldset[disabled]') ){
elements = elements.not('fieldset[disabled] *');
@@ -253,10 +253,11 @@
if(!Modernizr.formattribute){
(function(prop, undefined){
var isForm = {form: 1, FORM: 1};
$.prop = function(elem, name, value){
var ret;
+ //TODO: cache + perftest
if(elem && elem.nodeType == 1 && value === undefined && isForm[elem.nodeName] && elem.id){
ret = document.getElementsByName(name);
if(!ret || !ret.length){
ret = document.getElementById(name);
}
@@ -279,37 +280,54 @@
elements.remove();
$.removeData(form, 'webshimsAddedElements');
}
};
+ var getAssociatedForm = function () {
+ var form = webshims.contentAttr(this, 'form');
+ if(form){
+ form = document.getElementById(form);
+ if(form && !$.nodeName(form, 'form')){
+ form = null;
+ }
+ }
+ return form || this.form;
+ };
webshims.defineNodeNamesProperty(['input', 'textarea', 'select', 'button', 'fieldset'], 'form', {
prop: {
- get: function(){
- var form = webshims.contentAttr(this, 'form');
- if(form){
- form = document.getElementById(form);
- if(form && !$.nodeName(form, 'form')){
- form = null;
- }
- }
- return form || this.form;
- },
+ get: getAssociatedForm,
writeable: false
}
});
webshims.defineNodeNamesProperty(['form'], 'elements', {
prop: {
get: function(){
- var sel, addElements, detachElements;
+ //TODO: cache + perftest
+ var sel, addElements, detachElements, formElements, i, len;
var id = this.id;
- var elements = $.makeArray(this.elements);
+ var elements = [];
if(id){
detachElements = $.data(this, 'webshimsAddedElements');
if(detachElements){
detachElements.detach();
}
+ }
+
+ formElements = this.elements;
+
+ if(this.querySelector('input[form], select[form], textarea[form]')){
+ for(i = 0, len = formElements.length; i < len; i++){
+ if(getAssociatedForm.call(formElements[i]) == this){
+ elements.push(formElements[i]);
+ }
+ }
+ } else {
+ elements = $.makeArray(formElements);
+ }
+
+ if(id){
sel = 'input[form="'+ id +'"], select[form="'+ id +'"], textarea[form="'+ id +'"], button[form="'+ id +'"], fieldset[form="'+ id +'"]';
addElements = document.querySelectorAll(sel) || [];
if(addElements.length){
elements = $(elements).add(addElements).get();
@@ -1034,11 +1052,24 @@
changePlaceholderVisibility(elem, val, placeholder);
}
return ret;
},
get: function(){
+ var placeholder;
var elem = this;
- return $(elem).hasClass('placeholder-visible') ? '' : desc[propType]._supget.call(elem);
+ var curValue;
+
+ if($(elem).hasClass('placeholder-visible')){
+ if(webshims.cfg.debug && (curValue = desc[propType]._supget.call(elem)) && (placeholder = $.attr(elem, 'placeholder')) && placeholder != curValue){
+ webshims.error('value input[placeholder] was changed by input.value instead using $.val or $.prop.');
+ changePlaceholderVisibility(elem, curValue, placeholder);
+ } else {
+ curValue = '';
+ }
+ } else {
+ curValue = desc[propType]._supget.call(elem);
+ }
+ return curValue;
}
};
});
desc = webshims.defineNodeNameProperty(name, 'value', placeholderValueDesc);
});