Changeset 4d82534


Ignore:
Timestamp:
Mar 28, 2017, 11:36:40 AM (3 years ago)
Author:
Agnibho Mondal <mondal@…>
Branches:
master
Children:
11fa42d
Parents:
6efc6bf
Message:

Standardized routine.js

Files:
4 added
4 edited

Legend:

Unmodified
Added
Removed
  • index.html

    r6efc6bf r4d82534  
    11<!--
    2 ***********************************************************************
    3  * Title: PDosage
    4  * Description: Pediatric Dose Calculator
    5  * Author: Agnibho Mondal
    6  * Website: http://code.agnibho.com
    7  **********************************************************************
    8    Copyright (c) 2016 Agnibho Mondal
    9    All rights reserved
    10  **********************************************************************
    11    This file is part of PDosage.
    12    
    13    PDosage is free software: you can redistribute it and/or modify
    14    it under the terms of the GNU General Public License as published by
    15    the Free Software Foundation, either version 3 of the License, or
    16    (at your option) any later version.
    17    
    18    PDosage is distributed in the hope that it will be useful,
    19    but WITHOUT ANY WARRANTY; without even the implied warranty of
    20    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    21    GNU General Public License for more details.
    22    
    23    You should have received a copy of the GNU General Public License
    24    along with PDosage. If not, see <http://www.gnu.org/licenses/>.
    25 ***********************************************************************
     2  ***********************************************************************
     3  * Title: PDosage
     4  * Description: Pediatric Dose Calculator
     5  * Author: Agnibho Mondal
     6  * Website: http://code.agnibho.com
     7  **********************************************************************
     8  Copyright (c) 2016 Agnibho Mondal
     9  All rights reserved
     10  **********************************************************************
     11  This file is part of PDosage.
     12
     13  PDosage is free software: you can redistribute it and/or modify
     14  it under the terms of the GNU General Public License as published by
     15  the Free Software Foundation, either version 3 of the License, or
     16  (at your option) any later version.
     17
     18  PDosage is distributed in the hope that it will be useful,
     19  but WITHOUT ANY WARRANTY; without even the implied warranty of
     20  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     21  GNU General Public License for more details.
     22
     23  You should have received a copy of the GNU General Public License
     24  along with PDosage. If not, see <http://www.gnu.org/licenses/>.
     25  ***********************************************************************
    2626-->
    2727<!DOCTYPE html>
    2828<html>
    29     <head>
    30         <title>PDosage</title>
    31         <link rel="icon" href="dist/logo.png">
    32         <meta charset="utf-8">
    33         <meta name="viewport" content="width=device-width, initial-scale=1.0">
    34         <script>
    35          var VERSION="0.0.1";
    36         </script>
    37         <style>
    38          .loader {
    39              position: absolute;
    40              left: 50%;
    41              top: 50%;
    42              border: 16px solid lavender;
    43              border-top: 16px solid #428bca;
    44              border-bottom: 16px solid #428bca;
    45              border-radius: 50%;
    46              width: 150px;
    47              height: 150px;
    48              margin: -75px 0 0 -75px;
    49              animation: spin 2s linear infinite;
    50          }
    51          
    52          @keyframes spin {
    53              0% { transform: rotate(0deg); }
    54              100% { transform: rotate(360deg); }
    55          }
    56         </style>
    57        
    58     </head>
    59     <body>
    60         <div class="loader"></div>
    61         <div class="container" style="display:none">
    62             <div id="notify" style="position:fixed;margin:10px;z-index:10;display:none">
    63                 <div id="notify-alert" class="alert alert-info alert-dismissible">
    64                     <button type="button" class="close" data-dismiss="alert"><span>&times;</span></button>
    65                     <h4><span id="notify-text"></span> <a id="notify-link" href="#" class="btn btn-success btn-lg">Download</a></h4>
    66                 </div>
    67             </div>
    68             <div class="text-primary">
    69                 <div class="jumbotron">
    70                     <h1>PDosage</h1>
    71                     <h2>Drug Dose Calculator</h2>
    72                 </div>
    73             </div>
    74             <div class="row" id="app">
    75                 <data-input :patient="patient"></data-input>
    76                 <div>
    77                     <ul class="nav nav-tabs">
    78                         <li class="active"><a href="#fav" data-toggle="tab">Favorites</a></li>
    79                         <li><a href="#all" data-toggle="tab">All Drugs</a></li>
    80                         <li><a href="#calc" data-toggle="tab">Calculator</a></li>
    81                         <li><a href="#about" data-toggle="tab">About</a></li>
    82                     </ul>
    83                     <div class="tab-content">
    84                         <div class="tab-pane active" id="fav">
    85                             <quick-view :patient="patient" :dosage="dosage" :favs="favs"></quick-view>
    86                         </div>
    87                         <div class="tab-pane" id="all">
    88                             <list-view :patient="patient" :dosage="dosage" :favs="favs"></list-all>
    89                         </div>
    90                         <div class="tab-pane" id="calc">
    91                             <calculator-view></calculator-view>
    92                         </div>
    93                         <div class="tab-pane" id="about">
    94                             <about-view></about-view>
    95                         </div>
    96                     </div>
    97                 </div>
    98             </div>
    99             <div class="alert alert-info">
    100                 <h3>Copyright &copy; <span class="copyright" data-start="2016">2016</span> Agnibho Mondal</h3>
    101                 <h4><a href="http://www.agnibho.com" style="text-decoration:none;color:inherit">www.agnibho.com</a></h4>
    102             </div>
    103         </div>
    104         <script src="dist/bundle.js"></script>
    105     </body>
     29  <head>
     30    <title>PDosage</title>
     31    <link rel="icon" href="dist/logo.png">
     32    <meta charset="utf-8">
     33    <meta name="viewport" content="width=device-width, initial-scale=1.0">
     34    <script>
     35var NAME="PDosage";
     36var VERSION="0.0.1";
     37var STORAGE="pdosage_date";
     38var INFO_URL="https://code.agnibho.com/pdosage/info.json";
     39var NOTIFY=true;
     40    </script>
     41    <style>
     42.loader {
     43  position: absolute;
     44  left: 50%;
     45  top: 50%;
     46  border: 16px solid lavender;
     47  border-top: 16px solid #428bca;
     48  border-bottom: 16px solid #428bca;
     49  border-radius: 50%;
     50  width: 150px;
     51  height: 150px;
     52  margin: -75px 0 0 -75px;
     53  animation: spin 2s linear infinite;
     54}
     55
     56       @keyframes spin {
     57         0% { transform: rotate(0deg); }
     58         100% { transform: rotate(360deg); }
     59       }
     60    </style>
     61
     62  </head>
     63  <body>
     64    <div class="loader"></div>
     65    <div class="container" style="display:none">
     66      <div id="notify" style="position:fixed;margin:10px;z-index:10;display:none">
     67        <div id="notify-alert" class="alert alert-info alert-dismissible">
     68          <button type="button" class="close" data-dismiss="alert"><span>&times;</span></button>
     69          <h4><span id="notify-text"></span> <a id="notify-link" href="#" class="btn btn-success btn-lg">Download</a></h4>
     70        </div>
     71      </div>
     72      <div class="text-primary">
     73        <div class="jumbotron">
     74          <h1>PDosage</h1>
     75          <h2>Drug Dose Calculator</h2>
     76        </div>
     77      </div>
     78      <div class="row" id="app">
     79        <data-input :patient="patient"></data-input>
     80        <div>
     81          <ul class="nav nav-tabs">
     82            <li class="active"><a href="#fav" data-toggle="tab">Favorites</a></li>
     83            <li><a href="#all" data-toggle="tab">All Drugs</a></li>
     84            <li><a href="#calc" data-toggle="tab">Calculator</a></li>
     85            <li><a href="#about" data-toggle="tab">About</a></li>
     86          </ul>
     87          <div class="tab-content">
     88            <div class="tab-pane active" id="fav">
     89              <quick-view :patient="patient" :dosage="dosage" :favs="favs"></quick-view>
     90            </div>
     91            <div class="tab-pane" id="all">
     92              <list-view :patient="patient" :dosage="dosage" :favs="favs"></list-all>
     93            </div>
     94            <div class="tab-pane" id="calc">
     95              <calculator-view></calculator-view>
     96            </div>
     97            <div class="tab-pane" id="about">
     98              <about-view></about-view>
     99            </div>
     100          </div>
     101        </div>
     102      </div>
     103      <div class="alert alert-info">
     104        <h3>Copyright &copy; <span class="copyright" data-start="2016">2016</span> Agnibho Mondal</h3>
     105        <h4><a href="http://www.agnibho.com" style="text-decoration:none;color:inherit">www.agnibho.com</a></h4>
     106      </div>
     107    </div>
     108    <script src="dist/bundle.js"></script>
     109  </body>
    106110</html>
  • prepare.js

    r6efc6bf r4d82534  
    44
    55var bigData={id:"com.agnibho.com.pdosage.data", timestamp: Date.now(), version: 0};
     6bigData.version=parseInt(new Date().toISOString().slice(0,10).replace(/-/g, ""))+0.1;
    67
    78if(process.argv[2]=="watch"){
  • src/main.js

    r6efc6bf r4d82534  
    99 **********************************************************************
    1010   This file is part of PDosage.
    11    
     11
    1212   PDosage is free software: you can redistribute it and/or modify
    1313   it under the terms of the GNU General Public License as published by
    1414   the Free Software Foundation, either version 3 of the License, or
    1515   (at your option) any later version.
    16    
     16
    1717   PDosage is distributed in the hope that it will be useful,
    1818   but WITHOUT ANY WARRANTY; without even the implied warranty of
    1919   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    2020   GNU General Public License for more details.
    21    
     21
    2222   You should have received a copy of the GNU General Public License
    2323   along with PDosage. If not, see <http://www.gnu.org/licenses/>.
     
    5050//Start app
    5151new Vue({
    52     el: "#app",
    53     components: {
    54         "data-input": DataInput,
    55         "quick-view": QuickView,
    56         "list-view": ListView,
    57         "calculator-view": CalculatorView,
    58         "about-view": AboutView
    59     },
    60     data: {
    61         patient: {age: {y:30, m:null, d:null}, wt:50},
    62         dosage: "",
    63         favs: "[]"
    64     },
    65     created:function(){
    66         try{
    67             this.favs=JSON.parse(localStorage.getItem("pdosage_favs"));
    68         }
    69         finally{
    70             if(this.favs==null){
    71                 this.favs=["Paracetamol", "Levosalbutamol", "Domperidone", "Drotaverine", "Ranitidine"];
    72             }
    73         }
    74         try{
    75             var loc=JSON.parse(localStorage.getItem("pdosage_data"));
    76             if(loc.version>data.version){
    77                 this.dosage=new Dosage(loc.dosage);
    78             }
    79             else{
    80                 localStorage.setItem("pdosage_data", JSON.stringify(data));
    81             }
    82         }
    83         catch(e){
    84             if(!this.dosage){
    85                 this.dosage=new Dosage(data.dosage);
    86                 localStorage.setItem("pdosage_data", JSON.stringify(data));
    87             }
    88         }
     52  el: "#app",
     53  components: {
     54    "data-input": DataInput,
     55    "quick-view": QuickView,
     56    "list-view": ListView,
     57    "calculator-view": CalculatorView,
     58    "about-view": AboutView
     59  },
     60  data: {
     61    patient: {age: {y:30, m:null, d:null}, wt:50},
     62    dosage: "",
     63    favs: "[]"
     64  },
     65  created:function(){
     66    try{
     67      this.favs=JSON.parse(localStorage.getItem("pdosage_favs"));
    8968    }
     69    finally{
     70      if(this.favs==null){
     71        this.favs=["Paracetamol", "Levosalbutamol", "Domperidone", "Drotaverine", "Ranitidine"];
     72      }
     73    }
     74    try{
     75      var loc=JSON.parse(localStorage.getItem(STORAGE));
     76      if(loc.version>data.version){
     77        this.dosage=new Dosage(loc.dosage);
     78      }
     79      else{
     80        this.dosage=new Dosage(data.dosage);
     81        localStorage.setItem(STORAGE, JSON.stringify(data));
     82      }
     83    }
     84    catch(e){
     85      if(!this.dosage){
     86        this.dosage=new Dosage(data.dosage);
     87        localStorage.setItem(STORAGE, JSON.stringify(data));
     88      }
     89    }
     90  }
    9091});
    9192
  • src/routine.js

    r6efc6bf r4d82534  
    11/**********************************************************************
    2  * Title: PDosage
    3  * Description: Pediatric Calculator
     2 * Title: DietSurvey
     3 * Description: Nutritional Assessment App
    44 * Author: Agnibho Mondal
    55 * Website: http://code.agnibho.com
     
    88   All rights reserved
    99 **********************************************************************
    10    This file is part of PDosage.
    11    
    12    PDosage is free software: you can redistribute it and/or modify
     10   This file is part of DietSurvey.
     11
     12   DietSurvey is free software: you can redistribute it and/or modify
    1313   it under the terms of the GNU General Public License as published by
    1414   the Free Software Foundation, either version 3 of the License, or
    1515   (at your option) any later version.
    16    
    17    PDosage is distributed in the hope that it will be useful,
     16
     17   DietSurvey is distributed in the hope that it will be useful,
    1818   but WITHOUT ANY WARRANTY; without even the implied warranty of
    1919   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    2020   GNU General Public License for more details.
    21    
     21
    2222   You should have received a copy of the GNU General Public License
    23    along with PDosage. If not, see <http://www.gnu.org/licenses/>.
     23   along with DietSurvey. If not, see <http://www.gnu.org/licenses/>.
    2424 **********************************************************************/
    2525
     26$.ajaxSetup({cache:false});
     27
    2628$(document).ready(function(){
    27     //Disable cache
    28     $.ajaxSetup({"cache": false});
    2929
    30     //Remove loader
    31     $(".loader").remove();
    32     $(".container").fadeIn();
     30  //Remove loader
     31  $(".loader").remove();
     32  $(".container").fadeIn();
    3333
    34     //Insert version code
    35     $(".version").text(VERSION);
    36     $(".data-ver").text(JSON.parse(localStorage.getItem("pdosage_data")).version);
     34  //Insert version code
     35  $(".version").text(VERSION);
     36  try{
     37    $(".data-ver").text(JSON.parse(localStorage.getItem(STORAGE)).version);
     38  } catch(e){}
    3739
    38     //Update copyright
    39     $(".copyright").each(function(){
    40         if(new Date().getFullYear()>$(this).data("start")){
    41             $(this).text($(this).data("start")+"-"+new Date().getFullYear());
    42         }
    43         else{
    44             $(this).text(new Date().getFullYear());
    45         }
     40  //Update copyright
     41  $(".copyright").each(function(){
     42    if(new Date().getFullYear()>$(this).data("start")){
     43      $(this).text($(this).data("start")+"-"+new Date().getFullYear());
     44    }
     45    else{
     46      $(this).text(new Date().getFullYear());
     47    }
     48  });
     49
     50  //Emit input on form reset
     51  $("input[type='reset']").on("click", function(e){
     52    this.form.reset();
     53    $(this.form).find("input, select, textarea").each(function(){
     54      this.dispatchEvent(new Event("input"));
    4655    });
     56  });
    4757
    48     //Emit input on form reset
    49     $("input[type='reset']").on("click", function(e){
    50         this.form.reset();
    51         $(this.form).find("input, select, textarea").each(function(){
    52             this.dispatchEvent(new Event("input"));
    53         });
     58  //Change focus after number input
     59  $(".jump-focus").on("input", function(){
     60    if($(this).val().length == $(this).prop("maxlength")){
     61      var all=$("input").toArray();
     62      var i=all.indexOf(this)+1;
     63      $(all[i]).focus().select();
     64    }
     65  });
     66
     67  //Defocus after input finished
     68  $(".stop-focus").on("input", function(){
     69    if($(this).val().length == $(this).prop("maxlength")){
     70      $(this).blur();
     71      var target=$($(this).data("ref"));
     72      console.log($(target).offset());
     73      $("html, body").animate({
     74        scrollTop: $(target).offset().top
     75      }, 1000);
     76    }
     77  });
     78
     79  //Use custom datepicker if Firefox
     80  if($(".datepicker").length && navigator.userAgent.indexOf("Firefox")!=-1){
     81    $(".datepicker").datepicker({
     82      format:"yyyy-mm-dd",
     83      autoclose:true
     84    }).on("changeDate", function(){
     85      this.dispatchEvent(new Event("input"));
    5486    });
     87  }
    5588
    56     //Notifications
    57     $(window).resize(function(){
    58         $("#notify").width($(".container").width()-20);
    59     });
    60     $(window).scroll(function(){
    61         $("#notify").width($(".container").width()-20);
    62     });
    63 
    64     //Parse app info from server
    65     $.get("https://code.agnibho.com/pdosage/info.json", function(data){
    66         var vCurr=VERSION.split(".").map(Number);
    67         var vLtst=data.latest.split(".").map(Number);
    68        
    69         if(isBiggerThan(data.latest, VERSION)){
    70             $("#notify").slideDown();
    71             $("#notify").width($(".container").width()-20);
    72             $("#notify-text").text("A new version of PDosage is available.");
    73             if(document.URL.indexOf("http://")==-1 && document.URL.indexOf("https://")==-1){
    74                 if(/(android)/i.test(navigator.userAgent)){
    75                     $("#notify-link").attr("href", data.apk);
    76                     $("#notify-link").text("Download");
    77                 }
    78                 else{
    79                     $("#notify-link").attr("href", data.url);
    80                     $("#notify-link").text("Load");
    81                 }
    82             }
    83             else{
    84                 $("#notify-link").attr("href", data.url);
    85                 $("#notify-link").text("Load");
    86             }
    87         }
    88        
    89         try{
    90             if(data.data.latest>JSON.parse(localStorage.getItem("pdosage_data")).version){
    91                 $.get(data.data.src, function(d){
    92                     localStorage.setItem("pdosage_data", JSON.stringify(d));
    93                 });
    94             }
    95         }
    96         catch(e){}
    97     });
    98 
     89  //Notifications
     90  $(window).resize(function(){
     91    $("#notify").width($(".container").width()-20);
     92  });
     93  $(window).scroll(function(){
     94    $("#notify").width($(".container").width()-20);
     95  });
     96  //Get data from server
     97  $.get(INFO_URL, function(data){
     98    var vCurr=VERSION.split(".").map(Number);
     99    var vLtst=data.latest.split(".").map(Number);
     100    //Define version comparator
     101    function isBiggerThan(v1, v2){
     102      while(v1.length<v2.length){
     103        v1.push(0);
     104      }
     105      while(v2.length<v1.length){
     106        v2.push(0);
     107      }
     108      for(var i=0; i<v1.length; i++){
     109        if(v1[i]>v2[i]){
     110          return true;
     111        }
     112      }
     113      return false;
     114    }
    99115    //Compare versions
    100     function isBiggerThan(v1, v2){
    101         while(v1.length<v2.length){
    102             v1.push(0);
    103         }
    104         while(v2.length<v1.length){
    105             v2.push(0);
    106         }
    107         for(var i=0; i<v1.length; i++){
    108             if(v1[i]>v2[i]){
    109                 return true;
    110             }
    111         }
    112         return false;
     116    if(NOTIFY && isBiggerThan(data.latest, VERSION)){
     117      $("#notify").slideDown();
     118      $("#notify").width($(".container").width()-20);
     119      $("#notify-text").text("A new version of "+NAME+" is available.");
     120      if(document.URL.indexOf("http://")==-1 && document.URL.indexOf("https://")==-1){
     121        if(/(android)/i.test(navigator.userAgent)){
     122          $("#notify-link").attr("href", data.apk);
     123          $("#notify-link").text("Download");
     124        }
     125        else{
     126          $("#notify-link").attr("href", data.url);
     127          $("#notify-link").text("Load");
     128        }
     129      }
     130      else{
     131        $("#notify-link").attr("href", data.url);
     132        $("#notify-link").text("Load");
     133      }
    113134    }
     135    //Update app data
     136    try{
     137      if(data.data.latest>JSON.parse(localStorage.getItem(STORAGE)).version){
     138        $.get(data.data.src, function(d){
     139          localStorage.setItem(STORAGE, JSON.stringify(d));
     140        });
     141      }
     142    }
     143    catch(e){}
     144  });
    114145});
Note: See TracChangeset for help on using the changeset viewer.