Mengganti Fungsi Default Prompt dengan Plugin Lobibox pada Intel XDK


Untuk mengganti default alert pada javascript dengan plugin Lobibox pertama yang kita butuhkan adalah download plugin lobibox di http://lobianijs.com/site/lobibox

extract file zip hasil download kemudian copy 2 file dari folder dist yaitu file
  1. lobibox.css
  2. lobibox.js
taruh kedua file tersebut ke dalam folder project intel xdk anda. kemudian tambahkan kedua script tersebut kedalam file index.html dengan menambahkan 2 baris berikut kedalam head (taruh setelah script jquery)
<link rel="stylesheet" href="lib/lobibox/lobibox.css">
<script type="application/javascript" src="lib/lobibox/lobibox.js"></script>
sesuaikan lokasi filenya dengan lokasi file lobibox dalam project anda.

tambahkan code berikut kedalam app.js untuk meng override fungsi prompt bawaan javascript
window.prompt = function(pesan,fnSuccess,nilaiDefault){
    Lobibox.prompt('text',{
        title : pesan,
        value : nilaiDefault,
        callback : function($this,type,ev){
            if(type=='ok'){
                fnSuccess($this.getValue());
            }
        }
    });
};

kemudian untuk menggunakan prompt metodenya sedikit berbeda dari prompt default yaitu 
        prompt("Masukkan email : ",function(result){
            alert("Email anda adalah : " + result);
        });
dimana result adalah hasil inputan anda, jika anda ingin menambahkan default value tinggal tambahkan parameter ke tiga seperti
        prompt("Masukkan email : ",function(result){
            alert("Email anda adalah : " + result);
        },"davidnakoko@gmail.com");
dimana davidnakoko@gmail.com adalah nilai default ketika prompt keluar


Menggunakan Fungsi Confirm Plugin Lobibox sebagai Pengganti Default Confirm pada Intel XDK


Untuk mengganti default Confirm pada javascript dengan plugin Lobibox pertama yang kita butuhkan adalah download plugin lobibox di http://lobianijs.com/site/lobibox

extract file zip hasil download kemudian copy 2 file dari folder dist yaitu file
  1. lobibox.css
  2. lobibox.js
taruh kedua file tersebut ke dalam folder project intel xdk anda. kemudian tambahkan kedua script tersebut kedalam file index.html dengan menambahkan 2 baris berikut kedalam head (taruh setelah script jquery)
<link rel="stylesheet" href="lib/lobibox/lobibox.css">
<script type="application/javascript" src="lib/lobibox/lobibox.js"></script> 

sesuaikan lokasi filenya dengan lokasi file lobibox dalam project anda.

tambahkan code berikut kedalam app.js untuk meng override fungsi confirm bawaan javascript

window.confirm = function(pesan,fnIfYes,fnIfNo){
    Lobibox.confirm({
        msg : pesan,
        callback : function($this,type){
            if(type=='yes')
                fnIfYes();
            else
                fnIfNo();
        }
    });
};
 berikutnya untuk menggunakan fungsi confirm yang baru agak sedikit berbeda dari confirm defaultnya javascript yaitu :
confirm("Yakin mau menghapus data ??",
        function(){
            alert("fungsi jika dijawab yes");
        },
        function(){
            alert("fungsi jika dijawab no");
        });
Semoga bermanfaat,

Mengganti Alert Default dengan plugin Lobibox pada Intel XDK

Untuk mengganti default alert pada javascript dengan plugin Lobibox pertama yang kita butuhkan adalah download plugin lobibox di http://lobianijs.com/site/lobibox

extract file zip hasil download kemudian copy 2 file dari folder dist yaitu file
  1. lobibox.css
  2. lobibox.js
taruh kedua file tersebut ke dalam folder project intel xdk anda. kemudian tambahkan kedua script tersebut kedalam file index.html dengan menambahkan 2 baris berikut kedalam head (taruh setelah script jquery)
<link rel="stylesheet" href="lib/lobibox/lobibox.css">
<script type="application/javascript" src="lib/lobibox/lobibox.js"></script>
sesuaikan lokasi filenya dengan lokasi file lobibox dalam project anda.

tambahkan code berikut kedalam app.js untuk meng override fungsi alert bawaan javascript
window.alert = function(pesan){
    Lobibox.alert('info',{
        msg : pesan
    });
};
jika anda berhasil, maka setiap anda memanggil alert maka yang keluar adalah alert milik lobibox.



Intel XDK : Memformat Number Dalam Bentuk Rupiah dengan Javascript





Jika anda membutuhkan fungsi untuk memformat angka / number menjadi bentuk yang mudah dibaca seperti ada pembatas . setiap 3 digitnya dalam Intel XDK, maka tambahkan fungsi berikut ke dalam script anda

/**
 * Number.prototype.format(n, x, s, c)
 * 
 * @param integer n: length of decimal
 * @param integer x: length of whole part
 * @param mixed   s: sections delimiter
 * @param mixed   c: decimal delimiter
 */
Number.prototype.format = function(n, x, s, c) {
    var re = '\\d(?=(\\d{' + (x || 3) + '})+' + (n > 0 ? '\\D' : '$') + ')',
        num = this.toFixed(Math.max(0, ~~n));

    return (c ? num.replace('.', c) : num).replace(new RegExp(re, 'g'), '$&' + (s || ','));
};
sedangkan untuk pemakaiannya tinggal tambahkan perintah format dibelakang angka diikuti parameter pertama untuk banyaknya angka di belakang koma, kedua adalah banyaknya angka tiap kelompok (biasanya 3) dan empat adalah simbol yang digunakan untuk pembatas tiap kelompok, terakhir adalah pembatas koma. Misal :
12345678.9.format(2, 3, '.', ',');  // "12.345.678,90"
123456.789.format(4, 4, ' ', ':');  // "12 3456:7890"
12345678.9.format(0, 3, '-');       // "12-345-679"
Semoga bermanfaat...

Membuat Popup Exit Ketika Tombol Back

Ingin menambahkan Popup untuk pertanyaan apakah mau keluar dari aplikasi atau tidak ketika tombol back ditekan, berikut tutorial singkatnya menggunakan Intel XDK
  1. Pertama tambahkan Popup pada halaman utama (#mainpage) kemudian popup tersebut beri nama popupKeluar
  2. Tambahkan control text untuk menampilkan pertanyaan, dan button group yang berisi 2 tombol dengan masing-masing diberi nama btnBatalKeluar dan btnJadiKeluar
  3. Agar ketika tombol back pada gadget ditekan muncul popup yang kita buat maka tambahkan code berikut pada index_user_script.js
    //kode tambahan untuk btn back
         document.addEventListener("backbutton",function(e){
            
             if($("#mainpage").is(":visible")){
                 e.preventDefault();
                 $("#popupKeluar").modal();
             }
            
         },false);
  4. Kemudian pada tombol jadi keluar untuk keluar aplikasi kita bisa menggunakan perintah navigator.app.exitApp(); seperti berikut
        /* button  #btnBatalKeluar */
        $(document).on("click", "#btnBatalKeluar", function(evt)
        {
             /* Other options: .modal("show")  .modal("hide")  .modal("toggle")
             See full API here: http://getbootstrap.com/javascript/#modals
                */
           
             $("#popupKeluar").modal("toggle"); 
        });
       
            /* button  #btnJadiKeluar */
        $(document).on("click", "#btnJadiKeluar", function(evt)
        {
            navigator.app.exitApp();
        });

Sekian semoga bermanfaat.

Tutorial Cross Platform Mobile Application untuk Penjualan menggunakan Intel XDK

Project Waroeng XDK
Project Waroeng XDK
Tutorial Cross Platform Mobile Application menggunakan Intel XDK yang akan kita pelajari berikut adalah membuat aplikasi untuk warung kecil dengan fungsi pencatatan penjualan sehingga penjual akan dengan mudah mencatat dan melihat laporan penjualan yang dilakukan tiap harinya.

Waroeng XDK Halaman Jual
Halaman Jual

Warong XDK Pilih Menu
Pilih Menu

Waroeng XDK Menu Option
menu Options

Waroeng XDK Halaman Input Daftar Menu
Halaman Input Daftar Menu

Waroeng XDK Halaman Laporan
Halaman Laporan


hal yang akan kita pelajari :
  1. Membuat project menggunakan intel xdk
  2. Membuat page dengan rincian page Penjualan, page Input Data Menu dan page Laporan
  3. Mengatur Interactivity / Event Handler
  4. Coding Logic dan penyimpanan ke database websql sebagai basis datanya
  5. Build menjadi apk dan menyebarkannya. 

1. Membuat Project Menggunakan Intel XDK

buat dulu sebuah project baru menggunakan template blank dengan type HTML + Cordova project, pastikan opsi use App Designer sudah anda aktifkan (centang)

2. Membuat Page Penjualan

Waroeng XDK Design Halaman Jual
  • Tambahkan Header dan Footer, beri title sesuai keinginan Anda
  • Tambahkan Tombol Menu menggunakan komponen Button pada sebelah kiri Header beri Id btnShowMenu
  • tambahkan Tombol Opsi menggunakan komponen Button pada sebelah kanan Header beri Id btnShowOpsi
  • Tambahkan row dan isi dengan list pada bagian tengah halaman, hapus item pada listnya dan sisakan satu saja dan beri id itemDetailJual atur properties nya seperti gambar berikut

  • Bawah list tambahkan text beri id txtTotalJual atur style textnya sesuai keinginan
  • Bawah text total tambahkan 2 tombol, gunakan button group dan hapus salah satu tombolnya beri nama tombolnya masing-masing btnSimpan dan btnClear
  • Tambahkan text lagi pada bagian bawah dan isi dengan petunjuk cara penggunaan aplikasi ini
  • Berikutnya untuk memilih menu yang dijual tambahkan sebuah side menu pada bagian kiri halaman menggunakan komponen Animated Sidebar Left dan beri id menuSamping isi dengan row terlebih dahulu dan tambahkan :
    • input untuk pencarian beri id txtSearchMenu
    • list untuk daftar menu hapus item dan sisakan satu beri id itemMenu
    • button untuk menutup side menu beri id btnCloseMenu


  • Tambahkan lagi Animated Sidebar tapi yang Right berfungsi untuk menempatkan menu Input Daftar menu yang dijual dan menu Laporan, gunakan list untuk menunya
    • item Daftar Menu beri id mnDaftarMenu
    • item Laporan beri id mnLaporan
    • item Keluar beri id mnKeluar
    • tombol untuk tutup menu opsi beri id btnCloseOpsi 



  •  Tambahkan komponen popup kedalam halaman jual ini, yang berfungsi untuk menampung pilihan menu edit jumlah barang ,edit harga dan hapus barang jika item jual di tap. Beri id popupEdit dan tambahkan tiga tombol dalam popup ini :
    • Tombol Edit jumlah beri id btnEditJumlah
    • Tombol Edit Harga beri id btnEditHarga
    • Tombol Hapus dan beri id btnEditHapus



  •   Berikutnya buat Page baru lewat tombol New Page yang ada pada panel Pages beri nama menupage kemudian isi dengan control seperti berikut

  • Tambahkan Input Menu pada page ini dan beri id txtNamaMenu
  • Tambahkan Input Harga dan beri id txtHargaMenu
  • Tambahkan Tombol untuk simpan dan beri id btnSimpanMenu
  • Tambahkan List untuk menampilkan data Menu yang sudah tersimpan, hapus itemnya dan tinggalkan satu beri id itemDataMenu
  • Atur item data menu dengan properties seperti berikut 
  • Berikutnya buat halaman ke tiga untuk laporan, dengan nama laporanpage dengan tampilan seperti berikut

  •  Gunakan komponen Collapsible dan beri id panelLap kemudian isikan List pada panel body nya, hapus itemnya dan sisakan satu beri nama itemLap

3. Mengatur Interactivity / Event Handler 

Langkah berikutnya adalah mengatur Interactivity atau event ketika sebuah tombol atau menu di tap/click dia mau ngapain, misal ketika tombol btnShowMenu di click maka akan memunculkan side menu, maka langkahnya cari kontrol btnShowMenu pada panel Interactivity (biasanya ada di kanan bawah) pilih menu dropdownnya kemudian pilih opsi menuSamping, sedangkan untuk menutup kembali side menu cari btnCloseMenu dan pilih juga opsi menuSamping.

Lakukan juga untuk tombol btnShowOpsi pilih menuOpsi untuk memunculkan side Menu yang sebelah kanan. Sedangkan untuk mengakses halaman lain tinggal cari mnDaftarMenu set actien ke menupage dan mnLaporan ke laporanpage

pada tahap ini harusnya anda sudah bisa mencoba aplikasi anda lewat emulator dan ketika anda klik tombol menu akan keluar side daftar menu dan ketika anda klik tombol opsi akan keluar side menu disebelah kanan yang isinya tombol daftar menu, laporan dan keluar. ketika di klik tombol daftar menu akan berpindah ke halaman daftar menu, begitu pula kalau di klik menu laporan akan diarahkan ke halaman laporan.

Pada halaman daftar menu tambahkan tombol back pada header dan set actionnya ke mainpage agar kembali ke halaman utama. sedangkan tombol yang lain seperti tombol simpan dan batal pakai custom script saja sehingga nanti kita bisa menuliskan codenya sendiri secara manual.

4. Coding Logic dan penyimpanan ke database websql sebagai basis datanya
Buka file index_user_script.js yang ada di dalam folder js kemudian tambahkan code berikut pada bagian atas sendiri yang berfungsi untuk membuat database, struktur tabel dan mengisi tabel menu dengan daftar menu default,

var db = null;
function OpenDB(){
    try
    {
        db = openDatabase("waroeng.db","1.0","waroeng db",2*1024*1024);
    }
    catch(e)
    {
        alert(e);
    }
    if(localStorage.getItem("createTable")==null)
    {
        db.transaction(function(tx){
            //buat tabel menu
            tx.executeSql("CREATE TABLE IF NOT EXISTS menu (nama TEXT PRIMARY KEY,harga INTEGER)");
            //isi menu awal
            tx.executeSql("INSERT INTO menu VALUES('Mie Ayam',5000)");
            tx.executeSql("INSERT INTO menu VALUES('Bakso',5000)");
            tx.executeSql("INSERT INTO menu VALUES('Mie Ayam Bakso',8000)");
            tx.executeSql("INSERT INTO menu VALUES('Es Teh',2000)");
            //buat tabel jual dan detail
            tx.executeSql("CREATE TABLE IF NOT EXISTS jual (nota INTEGER PRIMARY KEY AUTOINCREMENT, tanggal TEXT, total INTEGER)");
            tx.executeSql("CREATE TABLE IF NOT EXISTS detail (nota INTEGER, nama TEXT, harga INTEGER, jumlah INTEGER)");

            localStorage.setItem("createTable","OK");
        });
    }

}; // end opendb


kemudian buat function dibawahnya untuk meload data menu pada page daftar menu

function loadDataMenu(){
    var listDataMenu = $("#listDataMenu");
    var itemDataMenu = listDataMenu.data("templatesItem");
   
    listDataMenu.html("");
   
    db.transaction(function(tx){
        tx.executeSql('SELECT * FROM menu',[],
        function(tx,result){
            for(i=0;i<result.rows.length;i++){
                var nama = result.rows.item(i).nama;
                var harga = result.rows.item(i).harga;
                //tambah item data
                var newItem = itemDataMenu.clone().appendTo(listDataMenu);
                newItem.find("h4").html(nama)
                newItem.find("p").html(harga);
            }
           
            //bind event
            listDataMenu.find("a").unbind().click(function(){
                var item = $(this);
                var nama = item.find("h4").html();
                //hapus menu item
                db.transaction(function(tx){
                    tx.executeSql("DELETE FROM menu WHERE nama=?",[nama],
                    function(tx,result){
                        if(result.rowsAffected>0){
                            $(item).fadeOut();
                            loadMenu();
                        }
                    },
                    function(tx,err){
                        console.log("ERROR DELETE MENU");
                        console.log(err);
                    });
                });
            });
        },
        function(tx,err){
            console.log(err);
        });
    });
}; //end loadDataMenu

 Tambahkan juga fungsi untuk meload data menu yang akan diletakkan pada sidemenu
function loadMenu(){
    var listMenu = $("#listMenu");
    var itemMenu = listMenu.data("templatesItem");
   
    listMenu.html("");
   
    db.transaction(function(tx){
        tx.executeSql('SELECT * FROM menu',[],
        function(tx,result){
            for(i=0;i<result.rows.length;i++){
                var nama = result.rows.item(i).nama;
                var harga = result.rows.item(i).harga;
                //tambah item menu
                var newItem = itemMenu.clone().appendTo(listMenu);
                newItem.find("h4").html(nama);
                newItem.find("p").html(harga);
            }
           
            //bind event
            listMenu.find("a").unbind().click(function(){
                var nama = $(this).find("h4").html();
                var harga = $(this).find("p").html();
                var nota = localStorage.getItem("curnota");
                db.transaction(function(tx){
                    tx.executeSql("SELECT * FROM detail WHERE nota=? AND nama=?",[nota,nama],
                    function(tx,result){
                        if(result.rows.length>0){
                            //sudah ada
                            tx.executeSql("UPDATE detail SET jumlah=jumlah+1 WHERE nota=? AND nama=?",[nota,nama],
                            function(tx,result){
                                $("#listDetailJual>a").each(function(){
                                   var detNama = $(this).find("h4").html();
                                    if(detNama===nama){
                                        var jumlahLama = $(this).data("jumlah");
                                        jumlahLama++;
                                        $(this).data("jumlah",jumlahLama);
                                        $(this).find("p").html(jumlahLama + " x " + $(this).data("harga"));
                                        var totalBaru = jumlahLama * $(this).data("harga");
                                        $(this).find(".badge").html("Rp " + totalBaru);
                                       
                                        hitungTotal();
                                    }
                                });
                            },
                            function(tx,error){
                                console.log(error);
                            });
                        }else{
                            //blom ada
                            tx.executeSql("INSERT INTO detail VALUES (?,?,?,1)",[nota,nama,harga],
                            function(tx,result){
                                var listDetailJual = $("#listDetailJual");
                                var itemDetailJual = listDetailJual.data("templatesItem");
                                var newDetail = itemDetailJual.clone().appendTo(listDetailJual);
                                newDetail.find("h4").html(nama);
                                newDetail.find("p").html("1 x Rp " + harga);
                                newDetail.find(".badge").html("Rp " + harga);
                                newDetail.data("jumlah",1);
                                newDetail.data("harga",harga);
                                newDetail.slideDown();

                                hitungTotal();

                            },
                            function(tx,error){
                                console.log(error);
                            });
                        }
                    },
                    function(tx,error){
                        console.log(error);
                    });
                   
                });
            });
        },
        function(tx,err){
            console.log(err);
        });
    });
}; //end loadMenu

Berikutnya tambahkan menu untuk buat transaksi baru / meload transaksi lama beserta detailnya untuk ditampilkan dalam halaman utama
 function loadTransaksi(){
    if(localStorage.getItem("curnota")==null){
        newTransaksi();
    }else{
        loadDataTransaksi();
    }
   
}; //end loadTransaksi

function newTransaksi(){
    //transaksi baru
    db.transaction(function(tx){
        tx.executeSql("INSERT INTO jual (tanggal) VALUES (?)",[new Date().toISOString().substr(0,10)],
        function(tx,result){
            if(result.rowsAffected==1){
                localStorage.setItem("curnota", result.insertId);
                loadDataTransaksi();
            }
        },
        function(tx,error){
            console.log(error);
        });
    });
}; //end transaksi baru

function loadDataTransaksi(){
    var listDetailJual = $("#listDetailJual");
    var itemDetailJual = listDetailJual.data("templatesItem");
    listDetailJual.html("");
   
    db.transaction(function(tx){
        tx.executeSql("SELECT * FROM detail WHERE nota=?",[localStorage.getItem("curnota")],
        function(tx,result){
           
            for(i=0;i<result.rows.length;i++){
                var nama = result.rows.item(i).nama;
                var harga = result.rows.item(i).harga;
                var jumlah = result.rows.item(i).jumlah;
               
                var newDetail = itemDetailJual.clone().appendTo(listDetailJual);
                newDetail.find("h4").html(nama);
                newDetail.find("p").html(jumlah + " x Rp " + harga);
                var total = jumlah * harga;
                newDetail.find(".badge").html("Rp " + total);
                newDetail.data("jumlah",jumlah);
                newDetail.data("harga",harga);
                newDetail.show();
            }
           
            hitungTotal();
           
        },
        function(tx,error){
            console.log(error);
        });
    });
   
} //end loadDataTransaksi

Tambahkan pula function untuk menghitung total penjualan pada halaman utama
function hitungTotal(){
    var totalBayar = 0;
    $("#listDetailJual > a").each(function(index){
        totalBayar += $(this).data("jumlah") * $(this).data("harga");
    });
    $("#txtTotalJual").find("p").html("Total : Rp " + totalBayar);
    $("#txtTotalJual").data("total",totalBayar);
}; // end hitungtotal

Tambahkan function untuk menampilkan data laporan
function loadLaporan(){
    db.transaction(function(tx){
        tx.executeSql("SELECT tanggal,SUM(total) AS gtotal FROM jual GROUP BY tanggal ORDER BY tanggal DESC",[],
        function(tx,result){
            var containerLap = $("#containerLap");
            var panelLap = containerLap.data("panelLap");
            containerLap.html("");
           
            for(var i=0;i<result.rows.length;i++){
                var tanggal = result.rows.item(i).tanggal;
                var gtotal = result.rows.item(i).gtotal;
                var newLap = panelLap.clone().appendTo(containerLap).attr("data-date",tanggal);
                newLap.find(".panel-title > a").html(tanggal);
                newLap.find(".panel-lap-total").html("Rp " + gtotal);
               
                newLap.find(".panel-collapse").attr("id","lap-" + tanggal);
                newLap.find(".accordion-toggle").attr("href","#lap-" + tanggal);
               
                if(i==result.rows.length-1){
                    newLap.addClass("has-footer");
                }
               
                var itemLap = newLap.find("#itemLap");
                var listLap = itemLap.parent().attr("id","listLap" + tanggal).data("templatesItem",itemLap);
                listLap.html("");
               
                tx.executeSql("SELECT * FROM jual WHERE tanggal=? AND total NOT NULL",[tanggal],
                function(tx,resultDetail){
                    for(var j=0;j<resultDetail.rows.length;j++){
                        var listLap = $("#listLap" + resultDetail.rows.item(j).tanggal);
                        var itemLap = listLap.data("templatesItem");
                        var newItem = itemLap.clone().appendTo(listLap);
                        newItem.find("p").html("Nota : " + resultDetail.rows.item(j).nota);
                        newItem.find(".badge").html("Rp " + resultDetail.rows.item(j).total);
                    }  
                },
                function(tx,error){
                    console.log(error);
                });
               
            }
        },
        function(tx,error){
            console.log(error);
        });
    });
}; //end loadLaporan

setelah itu tambahkan function untuk setting apa aja yang akan dipanggil ketika aplikasi dijalankan / on load
 function loadAwal(){
    //buka database
    OpenDB();
   
    //sembunyikan temp menu
    var itemMenu = $("#itemMenu");
    var listMenu = itemMenu.parent().attr("id","listMenu");
    listMenu.data("templatesItem",itemMenu);
    loadMenu();
   
    //sembunyikan temp detail jual
    var itemJual = $("#itemDetailJual");
    var listJual = itemJual.parent().attr("id","listDetailJual");
    listJual.data("templatesItem",itemJual);
    listJual.html("");
    $("#txtTotalJual").find("p").html("Total : Rp 0");
    $("#txtTotalJual").data("total",0);
   
    loadTransaksi();
   
    //sembunyikan temp data menu di halaman daftar menu
    var itemDataMenu = $("#itemDataMenu");
    var listDataMenu = itemDataMenu.parent().attr("id","listDataMenu");
    listDataMenu.data("templatesItem",itemDataMenu);   
    loadDataMenu();
   
    //sembunyikan temp laporan
    /*var itemLap = $("#itemLap");
    var listLap = itemLap.parent().attr("id","listLap");
    listLap.data("templatesItem",itemLap);
    listLap.html("");*/
    var panelLap = $("#panelLap");
    var containerLap = panelLap.parent().attr("id","containerLap");
    containerLap.data("panelLap",panelLap);
    containerLap.html("");
    loadLaporan();
   
} //end load awal

Setelah function load awal dibuat panggil function tersebut pada saat app.ready / sebelum event handler sehingga isi function event handler seperti ini
(function()
{
 "use strict";
 /*
   hook up event handlers
 */
 function register_event_handlers()
 {  
 
    loadAwal();
   
    
    $(document).on("change","#txtSearchMenu",function(){
        var cari = $("#txtSearchMenu").val().toUpperCase();
        $("#listMenu>a").each(function(){
            if($(this).find("h4").html().toUpperCase().indexOf(cari)>=0){
                $(this).show();
            }else{
                $(this).hide();
            }
        });
    });
    
   
     /* listitem  3 x Rp 5.000 */
    $(document).on("click", ".uib_w_6", function(evt)
    {
         /* Other options: .modal("show")  .modal("hide")  .modal("toggle")
         See full API here: http://getbootstrap.com/javascript/#modals
            */
       
         $("#popupEdit").modal("toggle"); 
       
        var item = $(this);
        var nama = $(this).find("h4").html();
        var jumlah = $(this).data("jumlah");
        var harga = $(this).data("harga");
       
       
        $("#btnEditJumlah").unbind().click(function(){
            $("#popupEdit").modal("hide");
            jumlah = prompt("Masukkan jumlah jual...!",jumlah);
            db.transaction(function(tx){
                tx.executeSql("UPDATE detail SET jumlah=? WHERE nota=? AND nama=?",[jumlah,localStorage.getItem("curnota"),nama],
                function(tx,result){
                    if(result.rowsAffected>0){
                        item.data("jumlah", jumlah);
                        item.find("p").html(jumlah + " x Rp " + harga);
                        var total = jumlah * harga;
                        item.find(".badge").html("Rp " + total);
                        hitungTotal();
                    }
                },
                function(tx,error){
                    console.log(error);
                });
                             
            });
           
        });
       
        $("#btnEditHarga").unbind().click(function(){
            $("#popupEdit").modal("hide");
            harga = prompt("Masukkan harga jual...!",harga);
            db.transaction(function(tx){
                tx.executeSql("UPDATE detail SET harga=? WHERE nota=? AND nama=?",[harga,localStorage.getItem("curnota"),nama],
                function(tx,result){
                    if(result.rowsAffected>0){
                        item.data("harga",harga);
                        item.find("p").html(jumlah + " x Rp " + harga);
                        var total = jumlah * harga;
                        item.find(".badge").html("Rp " + total);
                        hitungTotal();
                    }
                },
                function(tx,error){
                    console.log(error);
                });
            });
        });
       
        $("#btnEditHapus").unbind().click(function(){
            db.transaction(function(tx){
                tx.executeSql("DELETE FROM detail WHERE nota=? AND nama=?",[localStorage.getItem("curnota"),nama],
                              function(tx,result){
                    if(result.rowsAffected > 0){
                        $("#popupEdit").modal("hide");
                        item.remove();
                        hitungTotal();
                    }
                },function(tx,error){
                    console.log(error);
                });
            });
        });
       
    });
   
        /* button  #btnCloseMenu */
    $(document).on("click", "#btnCloseMenu", function(evt)
    {
         /* Other possible functions are:
           uib_sb.open_sidebar($sb)
           uib_sb.close_sidebar($sb)
           uib_sb.toggle_sidebar($sb)
            uib_sb.close_all_sidebars()
          See js/sidebar.js for the full sidebar API */
       
         uib_sb.toggle_sidebar($("#menuSamping"));
       
    });
   
        /* button  #btnShowMenu */
    $(document).on("click", "#btnShowMenu", function(evt)
    {
         /* Other possible functions are:
           uib_sb.open_sidebar($sb)
           uib_sb.close_sidebar($sb)
           uib_sb.toggle_sidebar($sb)
            uib_sb.close_all_sidebars()
          See js/sidebar.js for the full sidebar API */
       
         uib_sb.toggle_sidebar($("#menuSamping")); 
    });
   
        /* button  #btnShowOpsi */
    $(document).on("click", "#btnShowOpsi", function(evt)
    {
         /* Other possible functions are:
           uib_sb.open_sidebar($sb)
           uib_sb.close_sidebar($sb)
           uib_sb.toggle_sidebar($sb)
            uib_sb.close_all_sidebars()
          See js/sidebar.js for the full sidebar API */
       
         uib_sb.toggle_sidebar($("#mnOpsi")); 
    });
   
        /* button  #btnCloseOpsi */
    $(document).on("click", "#btnCloseOpsi", function(evt)
    {
         /* Other possible functions are:
           uib_sb.open_sidebar($sb)
           uib_sb.close_sidebar($sb)
           uib_sb.toggle_sidebar($sb)
            uib_sb.close_all_sidebars()
          See js/sidebar.js for the full sidebar API */
       
         uib_sb.toggle_sidebar($("#mnOpsi")); 
    });
   
        /* listitem  #mnDaftarMenu */
    $(document).on("click", "#mnDaftarMenu", function(evt)
    {
        activate_page("#menupage");
        uib_sb.toggle_sidebar($("#mnOpsi"));
    });
    
        /* button  #btnBack */
    $(document).on("click", "#btnBack", function(evt)
    {
         activate_page("#mainpage");
    });
   
        /* button  #btnSimpanMenu */
    $(document).on("click", "#btnSimpanMenu", function(evt)
    {
        var nama = $("#txtNamaMenu").val();
        var harga = $("#txtHargaMenu").val();
       
        if(nama!="" && harga!=""){
            db.transaction(function(tx){
                tx.executeSql("INSERT INTO menu VALUES(?,?)",[nama,harga],
                function(tx,result){
                    if(result.rowsAffected==1){
                       
                        $("#txtNamaMenu").val("");
                        $("#txtHargaMenu").val("");
                        loadDataMenu();
                        loadMenu();
                       
                       
                    }
                },
                function(tx,error){
                    console.log(error);
                });
            });
        }else{
            alert("Isikan nama menu dan harga...!");
        }
       
    });
   
        /* button  #btnSimpan */
    $(document).on("click", "#btnSimpan", function(evt)
    {
        db.transaction(function(tx){
            tx.executeSql("UPDATE jual SET tanggal=?,total=? WHERE nota=?",[new Date().toISOString().substr(0,10), $("#txtTotalJual").data("total"),localStorage.getItem("curnota")],
            function(tx,result){
                if(result.rowsAffected>0){
                    newTransaksi();
                }
            },
            function(tx,error){
                console.log(error);
            });
        });
       
        if(window.admob){
            window.admob.showFullScreenAd();
        }
    });
   
        /* button  #btnClear */
    $(document).on("click", "#btnClear", function(evt)
    {
        db.transaction(function(tx){
            tx.executeSql("DELETE FROM detail WHERE nota=?",[localStorage.getItem("curnota")],
            function(tx,result){
                loadDataTransaksi();
            },
            function(tx,error){
                console.log(error);
            });
        });
    });
   
        /* listitem  #mnKeluar */
    $(document).on("click", "#mnKeluar", function(evt)
    {
        navigator.app.exitApp();
    });
   
        /* listitem  #mnLaporan */
    $(document).on("click", "#mnLaporan", function(evt)
    {
       
         activate_page("#laporanpage");
        loadLaporan();
        uib_sb.toggle_sidebar($("#mnOpsi"));
    });
   
        /* button  #btnBackFromLaporan */
    $(document).on("click", "#btnBackFromLaporan", function(evt)
    {
         activate_page("#mainpage");
    });
   
    }   
 document.addEventListener("app.Ready", register_event_handlers, false);
})();

Perhatikan pada bagian atas function event handler ada pemanggilan loadAwal(); dan sesuaikan isi function untuk tombol simpan dan tombol batalnya seperti contoh script yang ada di atas.


5. Build menjadi apk dan menyebarkannya. 

Bagian terakhir jika sudah berjalan dengan baik silahkan masuk tab build dan pilih mau dijadikan aplikasi apa project ini, jika ingin dijadikan aplikasi android silahkan pilih android, proses ini membutuhkan koneksi internet karena project akan di upload ke server intel xdk dan di build disana setelah itu kita akan dikirim hasil apk nya lewat email.



Contoh Source Code Project Waroeng XDK ini bisa di Download di SINI

Sekian semoga bermanfaat
Terimakasih