Tip: Click lines to highlight, hold ctrl/cmd to multi-select
http://codedumper.com/uxoru (15-Jun @ 17:16)
Syntax Highlighted Code
- (function() {
- if(!window.$calculator) {
- $calculator = window.$calculator;
- }
- $c = $calculator = {
- // Информация о разработчике ;)
- info : {
- name : "Калькулятор услуг",
- version : "v.4.01b (Dynamic)",
- author : "Axwell IT",
- site : "http : //axwell.ru/"
- },
- // Настройки скрипта
- settings : {
- pay : 40, // Средняя зп (*1000 рублей)
- persons : 1, // Кол-во человек в команде
- wmDays : 22, // Кол-во рабочих дней в месяц
- wDays : 5, // кол-во рабочих дней в неделю
- wHour : 8, // Кол-во рабочих часов в день
- Delay : 5, // Намеренная погрешность в сроках при расчете (изм. Дни)
- // Конвертор валют
- exchange : {
- usd : 23.3, // Курс доллара
- eur : 36.9, // Курс евро
- cur : "rub" // Текущая валюта
- },
- // Настройки оформления и селекторов
- design : {
- res : "div#result", // Блок в который будет выведен результат
- html : "sup"
- }
- },
- // Статичные массивы
- arr : {
- rub : ["рубль","рубля","рублей"],
- usd : ["доллар","доллара","долларов"],
- eur : ["евро","евро","евро"],
- days : ["день","дня","дней"],
- weeks : ["неделя","недели","недель"],
- months : ["месяц","месяца","месяцев"],
- },
- //
- tObj : function() {return {months : 0,weeks : 0,days : 0};},
- // Общие функции
- fn : {
- // Сброс всех чекбоксов и суммы
- reset : function() {
- $("input").each(function() {
- this.checked = false;
- this.value = "";
- }); $($c.settings.design.res).html(""); $m = 0;
- },
- // Спойлер
- spoiler : function() {
- var s = $c.settings.design.html
- for(var i=1;i<= $c.app.set.length;i++) {
- $("span#spoiler"+i).hide();
- $('<b><a class="reveal" id='+i+'><'+s+'>?<'+s+'></a></b>').insertAfter('#el_'+i);
- }
- $("a.reveal").click(function() {
- if(this.innerHTML == " ? ") {
- $(this).html(" скрыть ")
- } else {
- $(this).html(" ? ")
- }
- $("span#spoiler"+this.id).toggle(1000);
- });
- },
- // Смена валюты в блоках
- exchange : function(curr) {
- var k;
- $("span.tosumm").each(function() {
- k = $c.math.doconvert(
- parseInt($c.math.doconvert(
- parseInt(this.innerHTML),
- $cur,"rub")),"rub",curr,1);
- $(this).html(k);
- }); $cur = curr;
- },
- // Расчет общей стоимости по выбранным чекбоксам
- getMoneySumm : function() {
- var stat=0,num; $m = 0;
- $("span.tosumm").each(function() {
- num = this.id.substr(3);
- // Проверяем статус чекбокса
- switch( $('#ch_' + num).attr('checked') ? 1 : 0 ) {
- // выбран
- case 1 : $("#th_" + num).addClass("odd");
- $m += parseInt(this.innerHTML); break;
- // не выбран
- case 0 : $("#th_"+num).removeClass("odd");
- }
- }); //return $m;
- },
- // Вывод инфы об общей стоимости и времени на работу
- docalc : function() {
- // Считаем сумму по чекбоксам
- $c.fn.getMoneySumm();
- if($m >0) {
- var $mtxt; // Превращаем ее в текст
- if($cur=="rub") $mtxt = $a.str.num2word($m,$c.arr.rub,0);
- else if($cur=="eur") $mtxt = $a.str.num2word($m,$c.arr.eur);
- else if($cur=="usd") $mtxt = $a.str.num2word($m,$c.arr.usd);
- // Обновляем время разработки
- var t = $c.fn.parsedtime();
- // Вывод на экран цены и времени
- $($c.settings.design.res).html(
- "<p>"+
- "<b>"+
- "Стоимость проекта : "+$m+" ( "+$mtxt+" )"+
- "</b>"+
- "</p>"+
- "<p>"+
- "<b>"+
- "Время разработки проекта : "+t.months+" "+t.weeks+" "+t.days+
- "</b>"+
- "</p>"
- );
- } else $calculator.fn.reset(); // Сброс
- },
- // {дни, недели, месяцы}
- parsedtime : function() {
- var a = $c.math.payperhour(); // Зп в час
- var t = $c.math.totaltime(a); // общее время
- // Переводим в текст дни, недели, месяцы
- t.days =(t.days >0)?$a.str.num2word(t.days,$c.arr.days,0) : "";
- t.weeks =(t.weeks >0)?$a.str.num2word(t.weeks,$c.arr.weeks,1) : "";
- t.months=(t.months >0)?$a.str.num2word(t.months,$c.arr.months,0) : "";
- return t;
- }
- },
- // Немного математики..
- math : {
- // Расчет зп в час
- payperhour : function() {
- return parseInt(($z*1000*$p)/($nm*$h));
- },
- // Расчет общего времени на работу
- totaltime : function(a) {
- var t = new $c.tObj();
- // Переводим текущую валюту в рубли
- var m = parseInt($c.math.doconvert($m,$cur,"rub"));
- // по ним считаем общее кол-во дней
- t.days = Math.ceil((m/a)/$h);
- // Добавляемне добавлем погрешность
- if(m >=20000) t.days+=$del;
- // Считаем недели и месяцы
- while(t.days >=$nm) {t.days-=$nm;t.months++;}
- while(t.days >=$wd) {t.days-=$wd;t.weeks++;}
- return t;
- },
- // Конвертор валют.(val,in,to) Рубли = Доллары / Евро и наоборот
- doconvert : function(v,i,t,s) {
- i=i.toUpperCase(); t=t.toUpperCase();
- if(i==t)return v+" "+t;
- if(i=="USD"||t=="USD") k=$usd;
- if(i=="EUR"||t=="EUR") k=$eur;
- if(i=="RUB") r = Math.round(v/k);
- else if(t=="RUB") r = Math.round(v*k);
- if(s) r+=" "+t;
- return r;
- }
- },
- // Головная часть скрипта
- app : {
- /* Описание услуг
- * Описание : ...,
- * Подсказка : ...,
- * Цена : ...
- */
- set : [
- {d : "Система управления контентом",
- s : "Но про упорядоченные списки, это уже боян, скажем пару слов о неупорядоченных списках, о неиспользовании полезных html-тэгов и микроформатах. Их глубокое рассмотрение выходит за рамки этой статьи, я лишь приведу примеры «хорошо» и «плохо»."+
- "<strong class='black'>Предметом бухгалтерского учета</strong> в обобщенном виде выступает хозяйственная деятельность предприятия с точки зрения системы учета ресурсов и результатов финансовой и хозяйственной деятельности предприятия…",
- p : 15000
- },
- {d : "Система управления контентом",
- s : "",
- p : 10000
- },
- {d : "Система управления контентом",
- s : "* Я мабилко и гружу непонятную картинку ужатую до нечитаемого размера;"+
- "* Я принтер и зря засоряю лист бумаги картинками;"+
- "* Это лишний презентационный мусор в коде для поисковиков, для тех кто будет поддерживать ваш код (вы не поменяете картинку только из css, придется лезть в шаблоны, доступ к которым может быть например только у программеров)",
- p : 5000
- },
- {d : "Система управления контентом",
- s : "",
- p : 9000
- }
- ],
- // Статичная часть страницы
- static : ""+
- "<div id='container' class='loading'>"+
- "<div id='header'></div>"+
- "<div id='mainContent'>"+
- "<table width=100% cellpadding='5' cellspacing='1' id=options>"+
- "<tr class=opt>"+
- "<td>"+
- "<p id='Reset'>Сброс</p>"+
- "<p id='e2usd'>Цена в долларах</p>"+
- "<p id='e2eur'>Цена в евро</p>"+
- "<p id='e2rub' class='cur'>Цена в рублях</p>"+
- "</td>"+
- "</tr>"+
- "</table>"+
- "</div>"+
- "<div id='result'></div>"+
- "</div>"
- +"",
- // Запуск скрипта
- run : function() {
- // Генерим тело страничк
- $("body").html($calculator.app.static);
- // Заголовок
- document.title = $c.info.name;
- var info = $c.info.name+" "+$c.info.version+" © "
- info += "<a href='"+$c.info.site+"'>"+$c.info.author;+"</a>"
- $("div#header").html("<h3>"+info+"</h3> ");
- // Проверка на существование описания услуг
- if(!$calculator.app.set) {
- $("#options").html("<h2>Описания услуг отсутвуют!</h2>")
- return;
- }
- // Поехал вывод
- var price,n,spoiler;
- for(var i=0;i< $c.app.set.length;i++) {
- n = i + 1;
- // Прайс
- switch(($c.app.set[i].p)?1 : 0) {
- case 1 : price = $c.math.doconvert($calculator.app.set[i].p,$cur,"rub",1); break;
- case 0 : price = ""
- }
- // Спойлер
- switch(($c.app.set[i].s!="" && $c.app.set[i].s)?1 : 0) {
- case 1 : spoiler = "<span id='spoiler"+n+"'><br>"+$c.app.set[i].s+"</span>"; break;
- case 0 : spoiler = "";
- }
- // Добавляем блоки
- $(""+
- "<tr class='opt' id='th_"+n+"'>"+
- // Описание
- "<td>"+
- $calculator.app.set[i].d +
- // Прайс
- " <span class='tosumm' id='el_"+n+"'>"+
- price +
- "</span>" + spoiler +
- "</td>"+
- // Чекбокс
- "<td class='ch'>"+
- "<input type='checkbox' id='ch_"+n+"'>"+
- "</td>"+
- "</tr>"
- +""
- ).appendTo("#options");
- } $calculator.fn.spoiler();
- // Раскрашиваем их
- //$("div : nth-child(odd)").addClass("odd");
- }
- }
- };
- // Пачка глобальных ременных
- if($calculator.settings) {
- $z = $calculator.settings.pay;
- $p = $calculator.settings.persons;
- $h = $calculator.settings.wHour;
- $m = $calculator.settings.money;
- $nm = $calculator.settings.wmDays;
- $wd = $calculator.settings.wDays;
- $del = $calculator.settings.Delay;
- $usd = $calculator.settings.exchange.usd;
- $eur = $calculator.settings.exchange.eur;
- $cur = $calculator.settings.exchange.cur;
- } else alert("Отсутствуют настройки скрипта!!");
- })();
Plain Code
(function() {
if(!window.$calculator) {
$calculator = window.$calculator;
}
$c = $calculator = {
// Информация о разработчике ;)
info : {
name : "Калькулятор услуг",
version : "v.4.01b (Dynamic)",
author : "Axwell IT",
site : "http : //axwell.ru/"
},
// Настройки скрипта
settings : {
pay : 40, // Средняя зп (*1000 рублей)
persons : 1, // Кол-во человек в команде
wmDays : 22, // Кол-во рабочих дней в месяц
wDays : 5, // кол-во рабочих дней в неделю
wHour : 8, // Кол-во рабочих часов в день
Delay : 5, // Намеренная погрешность в сроках при расчете (изм. Дни)
// Конвертор валют
exchange : {
usd : 23.3, // Курс доллара
eur : 36.9, // Курс евро
cur : "rub" // Текущая валюта
},
// Настройки оформления и селекторов
design : {
res : "div#result", // Блок в который будет выведен результат
html : "sup"
}
},
// Статичные массивы
arr : {
rub : ["рубль","рубля","рублей"],
usd : ["доллар","доллара","долларов"],
eur : ["евро","евро","евро"],
days : ["день","дня","дней"],
weeks : ["неделя","недели","недель"],
months : ["месяц","месяца","месяцев"],
},
//
tObj : function() {return {months : 0,weeks : 0,days : 0};},
// Общие функции
fn : {
// Сброс всех чекбоксов и суммы
reset : function() {
$("input").each(function() {
this.checked = false;
this.value = "";
}); $($c.settings.design.res).html(""); $m = 0;
},
// Спойлер
spoiler : function() {
var s = $c.settings.design.html
for(var i=1;i<= $c.app.set.length;i++) {
$("span#spoiler"+i).hide();
$('<b><a class="reveal" id='+i+'><'+s+'>?<'+s+'></a></b>').insertAfter('#el_'+i);
}
$("a.reveal").click(function() {
if(this.innerHTML == " ? ") {
$(this).html(" скрыть ")
} else {
$(this).html(" ? ")
}
$("span#spoiler"+this.id).toggle(1000);
});
},
// Смена валюты в блоках
exchange : function(curr) {
var k;
$("span.tosumm").each(function() {
k = $c.math.doconvert(
parseInt($c.math.doconvert(
parseInt(this.innerHTML),
$cur,"rub")),"rub",curr,1);
$(this).html(k);
}); $cur = curr;
},
// Расчет общей стоимости по выбранным чекбоксам
getMoneySumm : function() {
var stat=0,num; $m = 0;
$("span.tosumm").each(function() {
num = this.id.substr(3);
// Проверяем статус чекбокса
switch( $('#ch_' + num).attr('checked') ? 1 : 0 ) {
// выбран
case 1 : $("#th_" + num).addClass("odd");
$m += parseInt(this.innerHTML); break;
// не выбран
case 0 : $("#th_"+num).removeClass("odd");
}
}); //return $m;
},
// Вывод инфы об общей стоимости и времени на работу
docalc : function() {
// Считаем сумму по чекбоксам
$c.fn.getMoneySumm();
if($m >0) {
var $mtxt; // Превращаем ее в текст
if($cur=="rub") $mtxt = $a.str.num2word($m,$c.arr.rub,0);
else if($cur=="eur") $mtxt = $a.str.num2word($m,$c.arr.eur);
else if($cur=="usd") $mtxt = $a.str.num2word($m,$c.arr.usd);
// Обновляем время разработки
var t = $c.fn.parsedtime();
// Вывод на экран цены и времени
$($c.settings.design.res).html(
"<p>"+
"<b>"+
"Стоимость проекта : "+$m+" ( "+$mtxt+" )"+
"</b>"+
"</p>"+
"<p>"+
"<b>"+
"Время разработки проекта : "+t.months+" "+t.weeks+" "+t.days+
"</b>"+
"</p>"
);
} else $calculator.fn.reset(); // Сброс
},
// {дни, недели, месяцы}
parsedtime : function() {
var a = $c.math.payperhour(); // Зп в час
var t = $c.math.totaltime(a); // общее время
// Переводим в текст дни, недели, месяцы
t.days =(t.days >0)?$a.str.num2word(t.days,$c.arr.days,0) : "";
t.weeks =(t.weeks >0)?$a.str.num2word(t.weeks,$c.arr.weeks,1) : "";
t.months=(t.months >0)?$a.str.num2word(t.months,$c.arr.months,0) : "";
return t;
}
},
// Немного математики..
math : {
// Расчет зп в час
payperhour : function() {
return parseInt(($z*1000*$p)/($nm*$h));
},
// Расчет общего времени на работу
totaltime : function(a) {
var t = new $c.tObj();
// Переводим текущую валюту в рубли
var m = parseInt($c.math.doconvert($m,$cur,"rub"));
// по ним считаем общее кол-во дней
t.days = Math.ceil((m/a)/$h);
// Добавляемне добавлем погрешность
if(m >=20000) t.days+=$del;
// Считаем недели и месяцы
while(t.days >=$nm) {t.days-=$nm;t.months++;}
while(t.days >=$wd) {t.days-=$wd;t.weeks++;}
return t;
},
// Конвертор валют.(val,in,to) Рубли = Доллары / Евро и наоборот
doconvert : function(v,i,t,s) {
i=i.toUpperCase(); t=t.toUpperCase();
if(i==t)return v+" "+t;
if(i=="USD"||t=="USD") k=$usd;
if(i=="EUR"||t=="EUR") k=$eur;
if(i=="RUB") r = Math.round(v/k);
else if(t=="RUB") r = Math.round(v*k);
if(s) r+=" "+t;
return r;
}
},
// Головная часть скрипта
app : {
/* Описание услуг
* Описание : ...,
* Подсказка : ...,
* Цена : ...
*/
set : [
{d : "Система управления контентом",
s : "Но про упорядоченные списки, это уже боян, скажем пару слов о неупорядоченных списках, о неиспользовании полезных html-тэгов и микроформатах. Их глубокое рассмотрение выходит за рамки этой статьи, я лишь приведу примеры «хорошо» и «плохо»."+
"<strong class='black'>Предметом бухгалтерского учета</strong> в обобщенном виде выступает хозяйственная деятельность предприятия с точки зрения системы учета ресурсов и результатов финансовой и хозяйственной деятельности предприятия…",
p : 15000
},
{d : "Система управления контентом",
s : "",
p : 10000
},
{d : "Система управления контентом",
s : "* Я мабилко и гружу непонятную картинку ужатую до нечитаемого размера;"+
"* Я принтер и зря засоряю лист бумаги картинками;"+
"* Это лишний презентационный мусор в коде для поисковиков, для тех кто будет поддерживать ваш код (вы не поменяете картинку только из css, придется лезть в шаблоны, доступ к которым может быть например только у программеров)",
p : 5000
},
{d : "Система управления контентом",
s : "",
p : 9000
}
],
// Статичная часть страницы
static : ""+
"<div id='container' class='loading'>"+
"<div id='header'></div>"+
"<div id='mainContent'>"+
"<table width=100% cellpadding='5' cellspacing='1' id=options>"+
"<tr class=opt>"+
"<td>"+
"<p id='Reset'>Сброс</p>"+
"<p id='e2usd'>Цена в долларах</p>"+
"<p id='e2eur'>Цена в евро</p>"+
"<p id='e2rub' class='cur'>Цена в рублях</p>"+
"</td>"+
"</tr>"+
"</table>"+
"</div>"+
"<div id='result'></div>"+
"</div>"
+"",
// Запуск скрипта
run : function() {
// Генерим тело страничк
$("body").html($calculator.app.static);
// Заголовок
document.title = $c.info.name;
var info = $c.info.name+" "+$c.info.version+" © "
info += "<a href='"+$c.info.site+"'>"+$c.info.author;+"</a>"
$("div#header").html("<h3>"+info+"</h3> ");
// Проверка на существование описания услуг
if(!$calculator.app.set) {
$("#options").html("<h2>Описания услуг отсутвуют!</h2>")
return;
}
// Поехал вывод
var price,n,spoiler;
for(var i=0;i< $c.app.set.length;i++) {
n = i + 1;
// Прайс
switch(($c.app.set[i].p)?1 : 0) {
case 1 : price = $c.math.doconvert($calculator.app.set[i].p,$cur,"rub",1); break;
case 0 : price = ""
}
// Спойлер
switch(($c.app.set[i].s!="" && $c.app.set[i].s)?1 : 0) {
case 1 : spoiler = "<span id='spoiler"+n+"'><br>"+$c.app.set[i].s+"</span>"; break;
case 0 : spoiler = "";
}
// Добавляем блоки
$(""+
"<tr class='opt' id='th_"+n+"'>"+
// Описание
"<td>"+
$calculator.app.set[i].d +
// Прайс
" <span class='tosumm' id='el_"+n+"'>"+
price +
"</span>" + spoiler +
"</td>"+
// Чекбокс
"<td class='ch'>"+
"<input type='checkbox' id='ch_"+n+"'>"+
"</td>"+
"</tr>"
+""
).appendTo("#options");
} $calculator.fn.spoiler();
// Раскрашиваем их
//$("div : nth-child(odd)").addClass("odd");
}
}
};
// Пачка глобальных ременных
if($calculator.settings) {
$z = $calculator.settings.pay;
$p = $calculator.settings.persons;
$h = $calculator.settings.wHour;
$m = $calculator.settings.money;
$nm = $calculator.settings.wmDays;
$wd = $calculator.settings.wDays;
$del = $calculator.settings.Delay;
$usd = $calculator.settings.exchange.usd;
$eur = $calculator.settings.exchange.eur;
$cur = $calculator.settings.exchange.cur;
} else alert("Отсутствуют настройки скрипта!!");
})();