Initial commit: проект документации YARU

This commit is contained in:
2026-03-01 17:32:45 +03:00
commit 243b5caf7e
860 changed files with 13239 additions and 0 deletions
@@ -0,0 +1,121 @@
Friends.CloneEmail = new function(){
this.createFromTag = function(element, params){
new Friends.CloneEmail.Constructor(element, params);
}
}
Friends.CloneEmail.Constructor = function(element, params){
this.element = element;
this.invitesCount = params.invitesCount;
this.num = params.num || null;
this.validEmailField = params.validEmailField || null;
this.button = y5.cssQuery('input[type=button]', this.element)[0];
if (typeof(this.button) == y5.Vars.UNDEF){
return;
}
this.input = y5.cssQuery('input[type=text]', this.element)[0];
var notes = y5.Dom.getDescendants(this.input.form, 'b', 'b-note-attention');
this.note = notes[notes.length - 1]; // элемент с сообщением о некорректности заполнения формы
this.init();
}
Friends.CloneEmail.Constructor.prototype = new function(){
this.init = function(){
if(this.button.value == '+'){
this.doAction = this.clone;
}else{
this.doAction = this.remove;
}
var _this = this;
function click(){
_this.doAction(); // clone or remove, deoends on button
}
y5.Events.create('click', click, this.button, true);
var num = parseInt(this.input.name.substr(this.input.name.indexOf('_') + 1));
this.num = this.num ? this.num + 1 : num ;
this.input.name = this.input.name.replace(new RegExp('_' + num, ''), '_' + this.num);
this.input.focus();
// при попытке отправить форму, проверяем ее на заполненность корректными данными,
// если форма не заполнена, то ее отправку отменяем
if (this.num == 1){
new y5.AEventListener('submit',
function(e){
if (!_this.isFormFilled()){
_this.preventSubmit(e);
}
},
this.input.form, true
);
}
};
this.clone = function(){
var newElement = this.element.cloneNode(true);
newElement.innerHTML = newElement.innerHTML; // for IE it doesn't clear events after clone.
var input = y5.cssQuery('input[type=text]', newElement)[0];
input.value = ''; // в IE7 при клонировании значение input'а сохраняется
var button = y5.cssQuery('input[type=button]', newElement)[0];
this.button.parentNode.removeChild(this.button);
this.button = button;
if (this.isLastInvite()) {
this.button.parentNode.removeChild(this.button);
}
var _this = this;
newElement.onclick = function(){
return {
type: 'Email',
invitesCount: _this.invitesCount,
num: _this.num,
validEmailField: _this.validEmailField}
};
y5.Classes.add(newElement, 'Friends-c-FieldValidator');
y5.Classes.add(newElement, 'Friends-c-CloneEmail');
this.element.parentNode.appendChild(newElement);
y5.Components.init(this.element.parentNode);
};
this.isLastInvite = function(){
var emailFields = y5.Dom.getDescendants(this.element.parentNode, 'div', 'address');
if (emailFields.length + 1 == parseInt(this.invitesCount)) {
return true;
}
return false;
}
this.remove = function(){
y5.Dom.removeNode(this.element);
};
this.isFormFilled = function() {
// скрываем сообщение о некорректности заполнения формы
this.note.style.visibility = 'hidden';
var emailFields = y5.Dom.getDescendants(this.input.form, 'input', 'FieldValidator-field');
var regExp = /[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-z]{2,7}/i;
// проверяем форму на наличие хотя бы одного введенного валидного email'а
for (var i = 0, l = emailFields.length; i < l; i++) {
if (regExp.test(emailFields[i].value)) {
return true;
}
}
return false;
};
this.preventSubmit = function(e, msg) {
if (msg) {
this.note.innerHTML = msg;
}
// показываем сообщение о некорректности заполнения формы
this.note.style.visibility = 'visible';
// отменяем отправку формы
e.preventDefault();
};
}
y5.require(['cssQuery', 'Events', 'Classes', 'Dom'], function(){y5.loaded('{Friends}.CloneEmail')});