Tip: Click lines to highlight, hold ctrl/cmd to multi-select

http://codedumper.com/uxoru (15-Jun @ 17:16)

Syntax Highlighted Code

  1. (function() {
  2.   if(!window.$calculator) {
  3.     $calculator = window.$calculator;
  4.   }
  5.  
  6.   $c = $calculator =  {
  7.  
  8.     // Информация о разработчике ;)
  9.     info :  {
  10.       name : "Калькулятор услуг",
  11.       version : "v.4.01b (Dynamic)",
  12.       author : "Axwell IT",
  13.       site : "http : //axwell.ru/"
  14.     },
  15.  
  16.     // Настройки скрипта
  17.     settings :  {
  18.       pay :  40,    // Средняя зп (*1000 рублей)
  19.       persons : 1,  // Кол-во человек в команде
  20.       wmDays : 22,  // Кол-во рабочих дней в месяц
  21.       wDays : 5,    // кол-во рабочих дней в неделю
  22.       wHour : 8,    // Кол-во рабочих часов в день
  23.       Delay :  5,   // Намеренная погрешность в сроках при расчете (изм. Дни)
  24.  
  25.       // Конвертор валют
  26.       exchange :  {
  27.         usd : 23.3, // Курс доллара
  28.         eur : 36.9, // Курс евро
  29.         cur : "rub" // Текущая валюта
  30.       },
  31.  
  32.       // Настройки оформления и селекторов
  33.       design :  {
  34.         res : "div#result", // Блок в который будет выведен результат
  35.         html : "sup"
  36.       }
  37.     },
  38.  
  39.     // Статичные массивы
  40.     arr :   {
  41.       rub    : ["рубль","рубля","рублей"],
  42.       usd    : ["доллар","доллара","долларов"],
  43.       eur    : ["евро","евро","евро"],
  44.       days   : ["день","дня","дней"],
  45.       weeks  : ["неделя","недели","недель"],
  46.       months : ["месяц","месяца","месяцев"],
  47.     },
  48.  
  49.     //
  50.     tObj : function() {return {months : 0,weeks : 0,days : 0};},
  51.  
  52.     // Общие функции
  53.     fn :  {
  54.       // Сброс всех чекбоксов и суммы
  55.       reset :  function() {
  56.         $("input").each(function() {
  57.           this.checked = false;
  58.           this.value = "";
  59.         }); $($c.settings.design.res).html(""); $m = 0;
  60.       },
  61.  
  62.       // Спойлер
  63.       spoiler :  function() {
  64.         var s = $c.settings.design.html
  65.         for(var i=1;i<= $c.app.set.length;i++) {
  66.        
  67.               $("span#spoiler"+i).hide();
  68.               $('<b><a class="reveal" id='+i+'><'+s+'>?<'+s+'></a></b>').insertAfter('#el_'+i);
  69.          
  70.         }
  71.         $("a.reveal").click(function() {
  72.           if(this.innerHTML == " ? ") {
  73.             $(this).html(" скрыть ")
  74.           } else  {
  75.             $(this).html(" ? ")
  76.           }
  77.           $("span#spoiler"+this.id).toggle(1000);
  78.         });
  79.       },
  80.  
  81.       // Смена валюты в блоках
  82.       exchange :  function(curr) {
  83.         var k;
  84.         $("span.tosumm").each(function() {
  85.           k = $c.math.doconvert(
  86.             parseInt($c.math.doconvert(
  87.               parseInt(this.innerHTML),
  88.                 $cur,"rub")),"rub",curr,1);
  89.           $(this).html(k);
  90.         }); $cur = curr;
  91.       },
  92.  
  93.       // Расчет общей стоимости по выбранным чекбоксам
  94.       getMoneySumm :  function() {
  95.         var stat=0,num; $m = 0;
  96.         $("span.tosumm").each(function() {
  97.           num = this.id.substr(3);
  98.           // Проверяем статус чекбокса
  99.           switch( $('#ch_' + num).attr('checked') ? 1 : 0 ) {
  100.             // выбран
  101.             case 1 :  $("#th_" + num).addClass("odd");
  102.               $m += parseInt(this.innerHTML); break;
  103.             // не выбран
  104.             case 0 :  $("#th_"+num).removeClass("odd");
  105.           }
  106.         }); //return $m;
  107.       },
  108.  
  109.       // Вывод инфы об общей стоимости и времени на работу
  110.       docalc :  function() {
  111.         // Считаем сумму по чекбоксам
  112.         $c.fn.getMoneySumm();
  113.         if($m >0) {
  114.           var $mtxt; // Превращаем ее в текст
  115.           if($cur=="rub") $mtxt = $a.str.num2word($m,$c.arr.rub,0);
  116.           else if($cur=="eur") $mtxt = $a.str.num2word($m,$c.arr.eur);
  117.           else if($cur=="usd") $mtxt = $a.str.num2word($m,$c.arr.usd);
  118.           // Обновляем время разработки
  119.           var t = $c.fn.parsedtime();
  120.           // Вывод на экран цены и времени
  121.           $($c.settings.design.res).html(
  122.           "<p>"+
  123.             "<b>"+
  124.               "Стоимость проекта :  "+$m+" ( "+$mtxt+" )"+
  125.             "</b>"+
  126.           "</p>"+
  127.           "<p>"+
  128.             "<b>"+
  129.               "Время разработки проекта :  "+t.months+" "+t.weeks+" "+t.days+
  130.             "</b>"+
  131.           "</p>"
  132.           );
  133.         } else $calculator.fn.reset(); // Сброс
  134.       },
  135.  
  136.       //  {дни, недели, месяцы}
  137.       parsedtime :  function() {
  138.         var a = $c.math.payperhour(); // Зп в час
  139.         var t = $c.math.totaltime(a); // общее время
  140.         // Переводим в текст дни, недели, месяцы
  141.         t.days  =(t.days >0)?$a.str.num2word(t.days,$c.arr.days,0) : "";
  142.         t.weeks =(t.weeks >0)?$a.str.num2word(t.weeks,$c.arr.weeks,1) : "";
  143.         t.months=(t.months >0)?$a.str.num2word(t.months,$c.arr.months,0) : "";
  144.         return t;
  145.       }
  146.     },
  147.  
  148.     // Немного математики..
  149.     math :  {
  150.  
  151.       // Расчет зп в час
  152.       payperhour :  function() {
  153.         return parseInt(($z*1000*$p)/($nm*$h));
  154.       },
  155.  
  156.       // Расчет общего времени на работу
  157.       totaltime :  function(a) {
  158.         var t = new $c.tObj();
  159.         // Переводим текущую валюту в рубли
  160.         var m = parseInt($c.math.doconvert($m,$cur,"rub"));
  161.         // по ним считаем общее кол-во дней
  162.         t.days = Math.ceil((m/a)/$h);
  163.         // Добавляемне добавлем погрешность
  164.         if(m >=20000) t.days+=$del;
  165.         // Считаем недели и месяцы
  166.         while(t.days >=$nm) {t.days-=$nm;t.months++;}
  167.         while(t.days >=$wd) {t.days-=$wd;t.weeks++;}
  168.         return t;
  169.       },
  170.  
  171.       // Конвертор валют.(val,in,to)  Рубли = Доллары / Евро и наоборот
  172.       doconvert :  function(v,i,t,s) {
  173.         i=i.toUpperCase(); t=t.toUpperCase();
  174.         if(i==t)return v+" "+t;
  175.         if(i=="USD"||t=="USD") k=$usd;
  176.         if(i=="EUR"||t=="EUR") k=$eur;
  177.         if(i=="RUB") r = Math.round(v/k);
  178.         else if(t=="RUB") r = Math.round(v*k);
  179.         if(s) r+=" "+t;
  180.         return r;
  181.       }
  182.     },
  183.  
  184.     // Головная часть скрипта
  185.     app :  {
  186.       /* Описание услуг
  187.        * Описание  :  ...,
  188.        * Подсказка  :  ...,
  189.        * Цена  :  ...
  190.        */
  191.       set : [
  192.          {d : "Система управления контентом",
  193.           s : "Но про упорядоченные списки, это уже боян, скажем пару слов о неупорядоченных списках, о неиспользовании полезных html-тэгов и микроформатах. Их глубокое рассмотрение выходит за рамки этой статьи, я лишь приведу примеры «хорошо» и «плохо»."+
  194.           "<strong class='black'>Предметом бухгалтерского учета</strong> в обобщенном виде выступает хозяйственная деятельность предприятия с точки зрения системы учета ресурсов и результатов финансовой и хозяйственной деятельности предприятия…",
  195.             p : 15000
  196.         },
  197.          {d : "Система управления контентом",
  198.           s : "",
  199.             p : 10000
  200.         },
  201.          {d : "Система управления контентом",
  202.           s : "* Я мабилко и гружу непонятную картинку ужатую до нечитаемого размера;"+
  203.             "* Я принтер и зря засоряю лист бумаги картинками;"+
  204.             "* Это лишний презентационный мусор в коде для поисковиков, для тех кто будет поддерживать ваш код (вы не поменяете картинку только из css, придется лезть в шаблоны, доступ к которым может быть например только у программеров)",
  205.             p : 5000
  206.         },
  207.          {d : "Система управления контентом",
  208.           s : "",
  209.             p : 9000
  210.         }
  211.       ],
  212.  
  213.       // Статичная часть страницы
  214.       static : ""+
  215.         "<div id='container' class='loading'>"+
  216.           "<div id='header'></div>"+
  217.           "<div id='mainContent'>"+
  218.             "<table width=100% cellpadding='5' cellspacing='1' id=options>"+
  219.               "<tr class=opt>"+
  220.                 "<td>"+
  221.                   "<p id='Reset'>Сброс</p>"+
  222.                   "<p id='e2usd'>Цена в долларах</p>"+
  223.                   "<p id='e2eur'>Цена в евро</p>"+
  224.                   "<p id='e2rub' class='cur'>Цена в рублях</p>"+
  225.                 "</td>"+
  226.               "</tr>"+
  227.             "</table>"+
  228.           "</div>"+
  229.           "<div id='result'></div>"+
  230.         "</div>"
  231.       +"",
  232.  
  233.       // Запуск скрипта
  234.       run :  function() {
  235.         // Генерим тело страничк
  236.         $("body").html($calculator.app.static);
  237.  
  238.         // Заголовок
  239.         document.title = $c.info.name;
  240.         var info = $c.info.name+" "+$c.info.version+" &copy; "
  241.         info += "<a href='"+$c.info.site+"'>"+$c.info.author;+"</a>"
  242.         $("div#header").html("<h3>"+info+"</h3> ");
  243.  
  244.         // Проверка на существование описания услуг
  245.         if(!$calculator.app.set) {
  246.           $("#options").html("<h2>Описания услуг отсутвуют!</h2>")
  247.           return;
  248.         }
  249.  
  250.         // Поехал вывод
  251.         var price,n,spoiler;
  252.         for(var i=0;i< $c.app.set.length;i++) {
  253.           n = i + 1;
  254.  
  255.           // Прайс
  256.           switch(($c.app.set[i].p)?1 : 0) {
  257.             case 1 :  price = $c.math.doconvert($calculator.app.set[i].p,$cur,"rub",1); break;
  258.             case 0 :  price = ""
  259.           }
  260.  
  261.           // Спойлер
  262.           switch(($c.app.set[i].s!="" && $c.app.set[i].s)?1 : 0) {
  263.             case 1 :  spoiler = "<span id='spoiler"+n+"'><br>"+$c.app.set[i].s+"</span>"; break;
  264.             case 0 :  spoiler = "";
  265.           }
  266.  
  267.           // Добавляем блоки
  268.           $(""+
  269.             "<tr class='opt' id='th_"+n+"'>"+
  270.               // Описание
  271.               "<td>"+
  272.                 $calculator.app.set[i].d +
  273.                 // Прайс
  274.                 " <span class='tosumm' id='el_"+n+"'>"+
  275.                   price +
  276.                 "</span>" + spoiler +
  277.               "</td>"+
  278.               // Чекбокс
  279.               "<td class='ch'>"+
  280.                 "<input type='checkbox' id='ch_"+n+"'>"+
  281.               "</td>"+
  282.             "</tr>"
  283.           +""
  284.           ).appendTo("#options");
  285.         } $calculator.fn.spoiler();
  286.         // Раскрашиваем их
  287.         //$("div : nth-child(odd)").addClass("odd");
  288.       }
  289.     }
  290.   };
  291.   // Пачка глобальных ременных
  292.   if($calculator.settings) {
  293.     $z    = $calculator.settings.pay;
  294.     $p    = $calculator.settings.persons;
  295.     $h    = $calculator.settings.wHour;
  296.     $m    = $calculator.settings.money;
  297.     $nm   = $calculator.settings.wmDays;
  298.     $wd   = $calculator.settings.wDays;
  299.     $del  = $calculator.settings.Delay;
  300.     $usd  = $calculator.settings.exchange.usd;
  301.     $eur  = $calculator.settings.exchange.eur;
  302.     $cur  = $calculator.settings.exchange.cur;
  303.   } else alert("Отсутствуют настройки скрипта!!");
  304. })();

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+" &copy; "
        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("Отсутствуют настройки скрипта!!");
})();

Codedump Run

Permalink: http://codedumper.com/uxoru