Advertisement
asimryu

addressbook using indexedDB

Jul 26th, 2016
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 5 7.15 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>indexedDB Address Book</title>
  6.     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
  7.     <link rel="stylesheet" href="http://code.jquery.com/ui/1.12.0/themes/smoothness/jquery-ui.css">
  8. </head>
  9. <body>
  10.     <div class="container">
  11.         <div class="jumbotron">
  12.             <h1>My Address Book</h1>
  13.         </div>
  14.         <div class="add-form">
  15.             <form class="form-horizontal">
  16.  
  17.                 <div class="form-group">
  18.                     <label for="adname" class="col-sm-2 control-label">Name</label>
  19.                     <div class="col-sm-10">
  20.                         <input type="text" class="form-control" id="adname" placeholder="이름을 입력하세요." required>
  21.                     </div>
  22.         </div>
  23.  
  24.         <div class="form-group">
  25.                     <label for="ademail" class="col-sm-2 control-label">Email Address</label>
  26.                     <div class="col-sm-10">
  27.                         <input type="email" class="form-control" id="ademail" placeholder="your@email.com" required>
  28.                     </div>
  29.         </div>
  30.  
  31.         <div class="form-group">
  32.                     <label for="adaddress" class="col-sm-2 control-label">Home Address</label>
  33.                     <div class="col-sm-10">
  34.                         <input type="text" class="form-control" id="adaddress" placeholder="주소를 입력하세요." required>
  35.                     </div>
  36.         </div>
  37.  
  38.         <div class="form-group">
  39.                     <label for="adphone" class="col-sm-2 control-label">Phone Number</label>
  40.                     <div class="col-sm-10">
  41.                         <input type="text" class="form-control" id="adphone" placeholder="010-111-2222" required>
  42.                     </div>
  43.         </div>
  44.  
  45.                 <div class="form-group">
  46.                     <label for="adphotos" class="col-sm-2 control-label">Photos</label>
  47.                     <div class="col-sm-10">
  48.                         <div id="photos" ondragover="dragover(event)" ondrop="drop(event)" ondragleave="dragleave(event)" style="width:500px;height:150px;background: #FF0;border: 1px solid #888;"></div>
  49.                     </div>
  50.         </div>         
  51.  
  52.                 <div class="form-group">
  53.                     <div class="col-sm-offset-2 col-sm-10">
  54.                         <button type="submit" class="btn-add btn btn-success">Add Friend</button>
  55.                     </div>
  56.                 </div>
  57.  
  58.  
  59.             </form>
  60.         </div>
  61.  
  62.         <div id="list"></div>
  63.  
  64.     </div>
  65.  
  66.     <div id="moreinfo" title="상세정보">
  67.         <h1 id="friendname"></h1>
  68.         <p id="friendemail"></p>
  69.         <p id="friendaddress"></p>
  70.         <p id="friendphone"></p>
  71.         <p id="friendphotos"></p>
  72.     </div>
  73.  
  74.     <script src="http://code.jquery.com/jquery-1.12.4.js"></script>
  75.     <script src="http://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
  76.     <script>
  77. var db;
  78. //addressbook 데이터베이스 오픈(없으면 생성)
  79. var request = window.indexedDB.open("adbook",1);
  80.  
  81. //DB Open Error Handling
  82. request.onerror = function(event) {
  83.     console.log("DB Open Error");
  84. }
  85.  
  86. //After DB Open
  87. request.onsuccess = function(event) {
  88.   db = request.result;
  89.   readAllData();
  90. }
  91.  
  92. request.onupgradeneeded = function(event) {
  93.     var result = event.target.result;
  94.     var objectStore = result.createObjectStore("address",{ keyPath: "id", autoIncrement:true });
  95. }
  96.  
  97. function readAllData(){
  98.     var tr = db.transaction(["address"]);
  99.     var store = tr.objectStore("address");
  100.     store.openCursor().onsuccess = function(event) {
  101.         var cursor = event.target.result; //한 줄 얻어내기
  102.         if (cursor) {
  103.             //console.log(cursor.value);
  104.             addList(cursor.value);
  105.             cursor.continue(); //다음 줄로 이동
  106.         } else {
  107.             console.log("No data");
  108.         }
  109.     };
  110. }
  111.  
  112. function readData(id){
  113.     var tr = db.transaction(["address"]);
  114.     var store = tr.objectStore("address");
  115.     var request = store.get(id);
  116.     request.onsuccess = function(event){
  117.         var data = request.result;
  118.         popUpInfo(data);
  119.     };
  120.     request.onerror = function(event){
  121.         console.log("read error");
  122.     };
  123. }
  124.  
  125. $("#moreinfo").hide();
  126.  
  127. function popUpInfo(data){
  128.     if( ! data ) return;
  129.     $("#friendname").text(data.adname);
  130.     $("#friendemail").text(data.ademail);
  131.     $("#friendaddress").text(data.adaddress);
  132.     $("#friendphone").text(data.adphone);
  133.  
  134.     var photolist = data.photos;
  135.     var i;
  136.     for( i=0; i<photolist.length;i++){
  137.         var src = photolist[i].src;
  138.         var img = "<img src='" + src + "' width='100' height='100' style='margin: 5px;'>";
  139.         $("#friendphotos").append(img);
  140.     }
  141.  
  142.     $("#moreinfo").dialog({
  143.         width: 500,
  144.         height: 500,
  145.         title: data.adname + " 상세정보",
  146.         modal: true
  147.     });
  148. }
  149.  
  150. function addList(data){
  151.     if( ! data ) return;
  152.     var html = "<div class='panel panel-default' id='list" + data.id + "'>";
  153.     html += "<div class='panel-body'>";
  154.     html += "<div class='row'>";
  155.     html += "<div class='col-md-6'>";
  156.     html += "<h1>" + data.adname + "</h1>";
  157.     html += "</div>";
  158.     html += "<div class='col-md-6'>";
  159.     html += "<a class='btn-del btn btn-danger' data-id='" + data.id + "'>삭제</a>";
  160.     html += "&nbsp;<a class='btn-read btn btn-primary' data-id='" + data.id + "'>보기</a>";
  161.     html += "</div>";
  162.     html += "</div>";
  163.     html += "</div>";
  164.     html += "</div>";
  165.     $("#list").prepend(html);
  166. }
  167.  
  168.  
  169.  
  170. function deleteData(id){
  171.     if( ! id ) return false;
  172.  var tr = db.transaction(["address"], "readwrite");
  173.  var store = tr.objectStore("address");
  174.  var request = store.delete(id);
  175.  request.onsuccess = function(event) {
  176.     $("#list" + id).remove();
  177.  };
  178.  request.onerror = function(event) { }
  179. }
  180.  
  181.  
  182. function saveData(data){
  183.     var tr = db.transaction(["address"], "readwrite");
  184.     var store = tr.objectStore("address");
  185.     var request = store.add(data);
  186.     request.onsuccess = function(event){
  187.         //마지막에 추가한 레코드의 id를 구함
  188.         var id = event.target.result;
  189.   data.id = id; // 데이터 객체 data에 id를 추가
  190.         addList(data);
  191.     };
  192.     request.onerror = function(event) {
  193.         console.log("Error : data save error");
  194.  } 
  195. }
  196.  
  197. $(".btn-add").on("click",function(e){
  198.     e.preventDefault();
  199.     var friend = {};
  200.     friend.adname = $("#adname").val();
  201.     friend.ademail = $("#ademail").val();
  202.     friend.adaddress = $("#adaddress").val();
  203.     friend.adphone = $("#adphone").val();
  204.     friend.photos = photos;
  205.     saveData(friend);
  206. });
  207.  
  208. $("#list").on("click",".btn-del",function(){
  209.     var id = $(this).attr("data-id");
  210.     if( ! id ) return;
  211.     id = parseInt(id,10);
  212.     deleteData(id);
  213. });
  214.  
  215. $("#list").on("click",".btn-read",function(){
  216.     var id = $(this).attr("data-id");
  217.     if( ! id ) return;
  218.     id = parseInt(id,10);
  219.     readData(id);
  220. });
  221.  
  222. function dragover(event){
  223.     event.preventDefault();
  224.     var id = event.target.id;
  225.     $("#" + id).css({"background":"red"});
  226. }
  227.  
  228. function dragleave(event){
  229.     event.preventDefault();
  230.     var id = event.target.id;
  231.     $("#" + id).css({"background":"#ff0"});
  232. }
  233.  
  234. var photos;
  235. function drop(event){
  236.     event.preventDefault();
  237.     photos = [];
  238.     var data = event.dataTransfer;
  239.     var files = data.files;
  240.     var i;
  241.     for( i=0; i<files.length; i++){
  242.         if( files[i].type == "image/jpeg" || files[i].type == "image/png" || files[i].type == "image/gif" ) {
  243.             addPhotos(files[i]);
  244.         }
  245.     }
  246. }
  247.  
  248. function addPhotos(file){
  249.     var photo = {};
  250.     photo.name = file.name;
  251.     photo.size = file.size;
  252.     photo.type = file.type;
  253.     var reader = new FileReader();
  254.     reader.addEventListener("load",function(){
  255.         photo.src = reader.result;
  256.         //console.log(photo);
  257.         photos.push(photo);
  258.     });
  259.     reader.readAsDataURL(file);
  260. }      
  261.     </script>
  262. </body>
  263. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement