Advertisement
simonradev

FisherGame

Mar 31st, 2018
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function attachEvents() {
  2.     const UrlBase = 'https://baas.kinvey.com/appdata/kid_rySvTga5G/biggestCatches/';
  3.  
  4.     const Credentials = {
  5.         username: 'simon',
  6.         password: 's'
  7.     };
  8.  
  9.     const Method = {
  10.         GET: 'GET',
  11.         POST: 'POST',
  12.         PUT: 'PUT',
  13.         DELETE: 'DELETE',
  14.     };
  15.  
  16.     const RegexFirstWord = /(\w+?)\s/;
  17.  
  18.     const divCatches = $('#catches');
  19.     const formAdd = $('#addForm');
  20.  
  21.     const btnLoad = $('button.load').click($onLoadClicked);
  22.     const btnAdd = $('button.add').click($onAddClicked);
  23.  
  24.     function $ajaxAuth(method, url, objCredentials, objData) {
  25.         if (objData &&
  26.             'id' in objData) {
  27.             url += objData.id;
  28.         }
  29.  
  30.         const requestSettings = {
  31.             method,
  32.             url,
  33.             data: objData && JSON.stringify(objData.jsonBody),
  34.             beforeSend: function (xhr) {
  35.                 xhr.setRequestHeader("Authorization", "Basic " + btoa(`${objCredentials.username}:${objCredentials.password}`));
  36.                 xhr.setRequestHeader("Content-Type", "application/json");
  37.             }
  38.         }
  39.  
  40.         return $.ajax(requestSettings);
  41.     }
  42.  
  43.     function $createJsonBodyFromFieldSet(fieldset, emptyInputField = true) {
  44.         const jsonBody = {};
  45.  
  46.         fieldset.find('input').each((ind, elem) => {
  47.             elem = $(elem);
  48.             const propFromClass = elem.attr('class');
  49.             const type = elem.attr('type');
  50.            
  51.             let parsedValue = elem.val();
  52.             if (type === 'number') {
  53.                 parsedValue = +parsedValue;
  54.             }
  55.            
  56.             jsonBody[propFromClass] = parsedValue
  57.             emptyInputField && elem.val('');
  58.         });
  59.  
  60.         return jsonBody;
  61.     }
  62.  
  63.     function $onAddClicked() {
  64.         const jsonBody = $createJsonBodyFromFieldSet(formAdd);
  65.  
  66.         $ajaxAuth(Method.POST, UrlBase, Credentials, { jsonBody });
  67.     }
  68.    
  69.     function $onLoadClicked() {
  70.         $ajaxAuth(Method.GET, UrlBase, Credentials)
  71.             .then(loadAllCatches);
  72.     }
  73.  
  74.     function loadAllCatches(allCatches) {
  75.         divCatches.empty();
  76.         for (const currCatch of allCatches) {
  77.             $createCatchDiv(currCatch, divCatches);
  78.         }
  79.     }
  80.  
  81.     function $createCatchDiv({ _id, angler, bait, captureTime, location, species, weight }, elementToAppendTo) {
  82.         const divTarget = $('<div>').addClass('catch').attr('data-id', _id).appendTo(elementToAppendTo);
  83.  
  84.         $createFieldPair('Angler', 'text', angler, divTarget);
  85.         $createFieldPair('Weight', 'number', weight, divTarget);
  86.         $createFieldPair('Species', 'text', species, divTarget);
  87.         $createFieldPair('Location', 'text', location, divTarget);
  88.         $createFieldPair('Bait', 'text', bait, divTarget);
  89.         $createFieldPair('Capture Time', 'number', captureTime, divTarget);
  90.  
  91.         $createButton('Update', $onUpdateClicked, divTarget);
  92.         $createButton('Delete', $onDeleteClicked, divTarget);
  93.     }
  94.  
  95.     function $createFieldPair(name, inpType, value, elementToAppendTo) {
  96.         $('<label>')
  97.             .text(name)
  98.             .appendTo(elementToAppendTo);
  99.  
  100.         name = name.indexOf(' ') >= 0 ?
  101.                     name.replace(RegexFirstWord, (m, g1) => g1.toLowerCase()) :
  102.                     name.toLowerCase();
  103.         $('<input>')
  104.             .attr('type', inpType)
  105.             .attr('value', value)
  106.             .addClass(name)
  107.             .appendTo(elementToAppendTo);
  108.     }
  109.  
  110.     function $createButton(name, clickHandler, elementToAppendTo) {
  111.         $('<button>')
  112.             .addClass(name.toLowerCase())
  113.             .text(name)
  114.             .click(clickHandler)
  115.             .appendTo(elementToAppendTo);
  116.     }
  117.    
  118.     function $onDeleteClicked() {
  119.         const divCatch = $(this).parent();
  120.         const id = divCatch.attr('data-id');
  121.         divCatch.remove();
  122.        
  123.         $ajaxAuth(Method.DELETE, UrlBase, Credentials, { id });
  124.     }
  125.  
  126.     function $onUpdateClicked() {
  127.         const divCatch = $(this).parent();
  128.         const id = divCatch.attr('data-id');
  129.  
  130.         const jsonBody = $createJsonBodyFromFieldSet(divCatch, false);
  131.  
  132.         $ajaxAuth(Method.PUT, UrlBase, Credentials, { id, jsonBody });
  133.     }
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement