Advertisement
Guest User

Untitled

a guest
Jun 17th, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // js/models/user.js
  2. /////////////////////////////////////////
  3.  
  4. import Backbone from 'backbone';
  5.  
  6.  
  7. const User = Backbone.Model.extend({
  8.     urlRoot: '/users',
  9.     defaults: {
  10.         terms: false
  11.     },
  12.     validation: {
  13.         firstname: {
  14.             required: true
  15.         },
  16.         email: {
  17.             required: true,
  18.             pattern: 'email'
  19.         },
  20.         password: {
  21.             minLength: 8
  22.         },
  23.         // repeatPassword: {
  24.         //     equalTo: 'password',
  25.         //     msg: 'The passwords does not match'
  26.         // },
  27.         age: {
  28.             required: false,
  29.             range: [18, 100]
  30.         },
  31.         terms: {
  32.             acceptance: true
  33.         }
  34.     }
  35. });
  36.  
  37. export default User;
  38.  
  39. // js/templates/editUser.html
  40. /////////////////////////////////////////
  41. <script type="text/template" id="edit-user-template">
  42.     <div class="edit-user-container">
  43.         <form class="edit-user-form" novalidate>
  44.             <legend class="formHeading"><%= user ? 'Edit' : 'New' %> User</legend>
  45.             <div class="form-group">
  46.                 <label class="inputTitle">First Name</label>
  47.                 <input class='input-line full-width' name="firstname" type="text" value="<%= user ? user.get('firstname') : '' %>">
  48.                 <span class="help-block" />
  49.             </div>
  50.             <div class="form-group">
  51.                 <label class="inputTitle">Last Name</label>
  52.                 <input class='input-line full-width' name="lastname" type="text" value="<%= user ? user.get('lastname') : '' %>">
  53.                 <span class="help-block" />
  54.             </div>
  55.             <div class="form-group">
  56.                 <label class="inputTitle">Age</label>
  57.                 <input class='input-line full-width' name="age" type="text" value="<%= user ? user.get('age') : '' %>">
  58.                 <span class="help-block" />
  59.             </div>
  60.             <div class="form-group">
  61.                 <label class="inputTitle">Email</label>
  62.                 <input class='input-line full-width' id="email" name="email" type="text" value="<%= user ? user.get('email') : '' %>">
  63.                 <span class="help-block" />
  64.             </div>
  65.             <div class="form-group">
  66.                 <label class="inputTitle">Password</label>
  67.                 <input class='input-line full-width' name="password" type="password" value="<%= user ? user.get('password') : '' %>">
  68.                 <span class="help-block" />
  69.             </div>
  70.             <!--<input type="checkbox" id="c1" name="cc" />-->
  71.             <!--<label for="c1"><span></span>I accept the terms of service</label>-->
  72.             <div class="form-group">
  73.                 <div class="editor-field">
  74.                     <% if(!user) { %>
  75.                     <input type="checkbox" id="c1" name="terms" value="true"/>
  76.                     <label for="c1"><span></span>I accept the terms of service</label>
  77.                     <% } else { %>
  78.                     <span></span>
  79.                     <% } %>
  80.                 </div>
  81.                 <span class="help-block" />
  82.             </div>
  83.             <div class="buttonsBlock">
  84.                 <button type="submit" id="submit" class="createUpdateButton"><%= user ? 'Update' : 'Create' %></button>
  85.                 <% if(user) { %>
  86.                 <input type="hidden" name="id" value="<%= user.id %>" />
  87.                 <button data-user-id="<%= user.id %>" class="deleteButton">Delete</button>
  88.             </div>
  89.             <% }; %>
  90.         </form>
  91.     </div>
  92. </script>
  93.  
  94. // js/views/editUser.js
  95. /////////////////////////////////////////
  96.  
  97. import router from '../routers/router';
  98. import User from '../models/user';
  99. import $ from 'jquery';
  100.  
  101.  
  102. $.fn.serializeObject = function() {
  103.     const o = {};
  104.     const a = this.serializeArray();
  105.     $.each(a, function() {
  106.         if (o[this.name] !== undefined) {
  107.             if (!o[this.name].push) {
  108.                 o[this.name] = [o[this.name]];
  109.             }
  110.             o[this.name].push(this.value || '');
  111.         } else {
  112.             o[this.name] = this.value || '';
  113.         }
  114.     });
  115.     return o;
  116. };
  117.  
  118. define([
  119.     'jquery',
  120.     'underscore',
  121.     'backbone',
  122.     'text!templates/editUser.html'
  123. ], ($, _, Backbone, editUserTemplate) => {
  124.     'use strict';
  125.  
  126.     return Backbone.View.extend({
  127.         el: '.page',
  128.         model: new User(),
  129.         events: {
  130.             'submit .edit-user-form': function(e) {
  131.                 e.preventDefault();
  132.                 this.saveUser(e);
  133.             },
  134.             'click .delete': 'deleteUser'
  135.         },
  136.  
  137.         saveUser(ev) {
  138.             const userDetails = $(ev.currentTarget).serializeObject();
  139.             this.model.set(userDetails);
  140.             if(this.model.isValid(true)){
  141.                 alert('Great Success!');
  142.                 this.model.save(userDetails, {
  143.                     success: function () {
  144.                         router.navigate('', { trigger:true });
  145.                     }
  146.                 });
  147.             }
  148.             return false;
  149.         },
  150.  
  151.         deleteUser() {
  152.             this.user.destroy({
  153.                 success: function () {
  154.                     console.log('destroyed');
  155.                     router.navigate('', { trigger:true });
  156.                 }
  157.             });
  158.             return false;
  159.         },
  160.  
  161.         render(options) {
  162.             Backbone.Validation.bind(this);
  163.             if (options.id) {
  164.                 this.user = new User({ id: options.id });
  165.                 this.user.fetch({
  166.                     success: function (user) {
  167.                         const template = _.template($(editUserTemplate).html())({ user: user });
  168.                         $('.page').html(template);
  169.                     }
  170.                 })
  171.             } else {
  172.                 const template = _.template($(editUserTemplate).html())({ user: null });
  173.                 $('.page').html(template);
  174.             }
  175.         }
  176.     });
  177. });
  178.  
  179. // js/main.js
  180. /////////////////////////////////////////
  181.  
  182. import 'es5-shim';
  183. import Backbone from 'backbone';
  184. import 'backbone-validation';
  185. import $ from 'jquery';
  186. import Router from './routers/router';
  187. import '../styles/main.scss';
  188.  
  189. _.extend(Backbone.Validation.callbacks, {
  190.     valid: function (view, attr, selector) {
  191.         var $el = view.$('[name=' + attr + ']'),
  192.             $group = $el.closest('.form-group');
  193.  
  194.         $group.removeClass('has-error');
  195.         $group.find('.help-block').html('').addClass('hidden');
  196.     },
  197.     invalid: function (view, attr, error, selector) {
  198.         var $el = view.$('[name=' + attr + ']'),
  199.             $group = $el.closest('.form-group');
  200.         $group.addClass('has-error');
  201.         $group.find('.help-block').html(error).removeClass('hidden');
  202.     }
  203. });
  204. _.extend(Backbone.Model.prototype, Backbone.Validation.mixin);
  205.  
  206. $.ajaxPrefilter((options) => {
  207.     options.url = 'http://demo2157898.mockable.io' + options.url;
  208. });
  209.  
  210. new Router();
  211.  
  212. Backbone.history.start();
  213.  
  214.  
  215. // styles/editUserForm.scss
  216. /////////////////////////////////////////
  217.  
  218. .edit-user-container {
  219.   display: flex;
  220.   justify-content: center;
  221. }
  222.  
  223. .edit-user-form {
  224.   display: flex;
  225.   justify-content: center;
  226.   height: 100%;
  227.   flex-flow: column;
  228.   z-index: 5;
  229.   width: 60%;
  230. }
  231.  
  232. input {
  233.   border: none;
  234. }
  235.  
  236. .input-line:focus {
  237.   outline: none;
  238.   border-color: #fff;
  239.   -webkit-transition: all .2s ease;
  240.   transition: all .2s ease;
  241. }
  242.  
  243. .input-line {
  244.   background: none;
  245.   margin-bottom: 10px;
  246.   line-height: 2.4em;
  247.   color: #191818;
  248.   font-weight: 300;
  249.   letter-spacing: 0.02rem;
  250.   font-size: 1rem;
  251.   border-bottom: 1px solid rgba(52, 52, 52, 0.65);
  252.   transition: all .2s ease;
  253.   padding: 10px;
  254. }
  255.  
  256. .inputTitle {
  257.   color: #484848;
  258.   font-size: 1.2rem;
  259.   transition: all .2s ease;
  260.   margin: 10px;
  261. }
  262.  
  263. .full-width {
  264.   width: 100%;
  265. }
  266.  
  267. .input-fields {
  268.   margin-top: 25px;
  269. }
  270.  
  271. legend {
  272.   margin-bottom: 30px;
  273.   color: #555;
  274.   font-size: 25px;
  275.   font-weight: 600;
  276.   line-height: 1;
  277.   text-align: center;
  278. }
  279.  
  280. // checkbox
  281.  
  282. input[type="checkbox"] {
  283.   display:none;
  284. }
  285.  
  286. input[type="checkbox"] + label {
  287.   color: #484848;
  288.   margin: 15px 0;
  289. }
  290.  
  291. input[type="checkbox"] + label span {
  292.   display:inline-block;
  293.   width:19px;
  294.   height:19px;
  295.   margin:-2px 10px 0 0;
  296.   vertical-align:middle;
  297.   background:url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/210284/check_radio_sheet.png) left top no-repeat;
  298.   cursor:pointer;
  299. }
  300.  
  301. input[type="checkbox"]:checked + label span {
  302.   background:url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/210284/check_radio_sheet.png) -19px top no-repeat;
  303. }
  304.  
  305. @media screen and (max-device-width: 400px) {
  306.   .edit-user-form {
  307.     width: 80%;
  308.   }
  309. }
  310. .help-block {
  311.   color: red;
  312. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement