var PlayerApp = (function() {
// В замыкании храним очень много элементов интерфейса и модулей
var audio = null;
var startButton = $('button.start');
var audioAnalyser = new AudioAnalyser(audio);
var cvsVisualizator = new CanvasVisualizator($('#audio-visualization'));
function bindEvents() {
startButton.addEventListener('click', startPlayHandler);
// Куча других привязок к событиям
function startPlayHandler() {
}
}
//Ниже конструкторы для канваса и web audio API, с помощью которого мы делаем спектр-визулизатор на канвасе
function AudioAnalyser(audio) {
//что-то делаем
}
function CanvasVisualizator(container) {
//что-то делаем
}
return {
init : function() {
bindEvents();
//...
},
play : function() {
}
// остальные публичные методы
}
})();
(function() {
var PlayerApp, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments) } }
PlayerApp = (function() {
function PlayerApp(url) {
this.play = __bind(this.play, this)
// другие __bind здесь, stop, resume, etc...
this.audio = new Audio()
this.audio.volume = 1
this.audio.src = url
this.audio.addEventListener("canplaythrough", this.canplay, false)
// другие addEventListener здесь: loadedmetadata, timeupdate, etc...
}
Track.prototype.play = function() {
this.audio.play()
if (typeof this.onplay_callback == "function") { this.onplay_callback() }
}
// другие функции здесь ....
return PlayerApp
})()
window.PlayerApp = PlayerApp
}).call(this)
player = new PlayerApp()
player.onplay_callback = function() {
$("#main-play-btn").toggleClass('play')
$(".playlist-play-btn").toggleClass('play')
}
var Valid = (function () {
//import dom
var Rule = {
required: function (string) {
if (string.length > 0) {
return true;
}
return false;
},
min: function (string, count) {
if (string.length > count) {
return true;
}
return false;
},
max: function (string, count) {
console.info(count);
console.info(string.length);
if (string.length <= count) {
return true;
}
return false;
},
email: function (string){
var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(string);
}
};
var cc = function (string, rule, id, message, template) {
var rules = rule.split("|");
for (var i = 0; i < rules.length; i++) {
if (Rule[rules[i]] === undefined) {
var rulesP = rules[i].split(":");
if (Rule[rulesP[0]] === undefined) {
console.warn("У валидатора нету правила " + rulesP[0]);
} else {
if (!Rule[rulesP[0]](string, rulesP[1])) {
dom.UpID(id, template[0]+message[rulesP[0]]+template[1]);
return false;
}
}
} else {
if (!Rule[rules[i]](string)) {
dom.UpID(id, template[0]+message[rules[i]]+template[1]);
return false;
}
}
}
return true;
};
return {
Make: function (rule, message, template) {
var key;
for (key in rule) {
var id = key + "_error";
dom.ClearID(id);
//ошибка. Завершаем валидацию.
if (!cc(dom.form.GetInputID(key), rule[key], id, message[key], template)) {
return false;
}
}
return true;
}
};
}());