Commit 5a02fdef10e5b9c4804827afc494eb5a0246bf9c
1 parent
a9500195
Exists in
master
Melhorias na estrutura do javascript.
Showing
12 changed files
with
167 additions
and
197 deletions
Show diff stats
archetype/html-rest/src/main/resources/archetype-resources/src/main/webapp/bookmark-edit.html
| ... | ... | @@ -38,8 +38,9 @@ |
| 38 | 38 | <script src="js/lib/bootstrap.min.js" type="text/javascript"></script> |
| 39 | 39 | <script src="js/lib/purl.js" type="text/javascript"></script> |
| 40 | 40 | <script src="js/lib/bootbox.js" type="text/javascript"></script> |
| 41 | + <script type="text/javascript" src="js/lib/app.js"></script> | |
| 41 | 42 | <script src="js/proxy/auth.js" type="text/javascript"></script> |
| 42 | 43 | <script src="js/proxy/bookmark.js" type="text/javascript"></script> |
| 43 | - <script src="js/controller/bookmark-edit.js" type="text/javascript"></script> | |
| 44 | 44 | <script src="js/controller/menu.js" type="text/javascript"></script> |
| 45 | + <script src="js/controller/bookmark-edit.js" type="text/javascript"></script> | |
| 45 | 46 | </body> |
| 46 | 47 | \ No newline at end of file | ... | ... |
archetype/html-rest/src/main/resources/archetype-resources/src/main/webapp/bookmark-list.html
| ... | ... | @@ -27,14 +27,15 @@ |
| 27 | 27 | </table> |
| 28 | 28 | </div> |
| 29 | 29 | <p class="demoiselle">Aplicação de exemplo do Demoiselle 2.5.0</p> |
| 30 | - <script src="js/lib/jquery-2.1.0.min.js" type="text/javascript"></script> | |
| 31 | - <script src="js/lib/bootstrap.min.js"></script> | |
| 32 | - <script src="js/lib/jquery.dataTables.js"></script> | |
| 33 | - <script src="js/lib/datatables.js" type="text/javascript"></script> | |
| 34 | - <script src="js/lib/bootbox.js" type="text/javascript"></script> | |
| 35 | - <script src="js/proxy/auth.js" type="text/javascript"></script> | |
| 36 | - <script src="js/proxy/bookmark.js" type="text/javascript"></script> | |
| 37 | - <script src="js/controller/bookmark-list.js" type="text/javascript"></script> | |
| 38 | - <script src="js/controller/menu.js" type="text/javascript"></script> | |
| 30 | + <script type="text/javascript" src="js/lib/jquery-2.1.0.min.js"></script> | |
| 31 | + <script type="text/javascript" src="js/lib/bootstrap.min.js"></script> | |
| 32 | + <script type="text/javascript" src="js/lib/jquery.dataTables.js"></script> | |
| 33 | + <script type="text/javascript" src="js/lib/datatables.js"></script> | |
| 34 | + <script type="text/javascript" src="js/lib/bootbox.js"></script> | |
| 35 | + <script type="text/javascript" src="js/lib/app.js"></script> | |
| 36 | + <script type="text/javascript" src="js/proxy/auth.js"></script> | |
| 37 | + <script type="text/javascript" src="js/proxy/bookmark.js"></script> | |
| 38 | + <script type="text/javascript" src="js/controller/menu.js"></script> | |
| 39 | + <script type="text/javascript" src="js/controller/bookmark-list.js"></script> | |
| 39 | 40 | </body> |
| 40 | 41 | </html> |
| 41 | 42 | \ No newline at end of file | ... | ... |
archetype/html-rest/src/main/resources/archetype-resources/src/main/webapp/home.html
| ... | ... | @@ -21,8 +21,10 @@ |
| 21 | 21 | <p class="demoiselle">Aplicação de exemplo do Demoiselle 2.5.0</p> |
| 22 | 22 | <script type="text/javascript" src="js/lib/jquery-2.1.0.min.js"></script> |
| 23 | 23 | <script type="text/javascript" src="js/lib/bootstrap.min.js"></script> |
| 24 | + <script type="text/javascript" src="js/lib/bootbox.js"></script> | |
| 25 | + <script type="text/javascript" src="js/lib/app.js"></script> | |
| 24 | 26 | <script type="text/javascript" src="js/proxy/auth.js"></script> |
| 25 | - <script type="text/javascript" src="js/controller/home.js"></script> | |
| 26 | 27 | <script type="text/javascript" src="js/controller/menu.js"></script> |
| 28 | + <script type="text/javascript" src="js/controller/home.js"></script> | |
| 27 | 29 | </body> |
| 28 | 30 | </html> |
| 29 | 31 | \ No newline at end of file | ... | ... |
archetype/html-rest/src/main/resources/archetype-resources/src/main/webapp/js/controller/bookmark-edit.js
| 1 | 1 | $(function() { |
| 2 | 2 | |
| 3 | - $("#menu").load("menu.html", function() { | |
| 4 | - AuthProxy.getUser(getUserOk, getUserFailed); | |
| 5 | - $("#logout").on("click", function() { | |
| 6 | - sessionStorage.removeItem('credentials'); | |
| 7 | - location.href = "home.html"; | |
| 8 | - }); | |
| 9 | - }); | |
| 10 | - | |
| 11 | 3 | $("#delete").hide(); |
| 4 | + | |
| 12 | 5 | $("#description").focus(); |
| 13 | 6 | |
| 14 | 7 | $(document).ready(function() { |
| 15 | 8 | if (id = $.url().param('id')) { |
| 16 | - BookmarkProxy.load(id, loadOk, loadFailed); | |
| 9 | + BookmarkProxy.load(id).done(loadOk).fail(loadFailed); | |
| 17 | 10 | } |
| 18 | 11 | }); |
| 19 | 12 | |
| ... | ... | @@ -28,16 +21,16 @@ $(function() { |
| 28 | 21 | }; |
| 29 | 22 | |
| 30 | 23 | if (id = $("#id").val()) { |
| 31 | - BookmarkProxy.update(id, form, saveOk, saveFailed); | |
| 24 | + BookmarkProxy.update(id, form).done(saveOk).fail(saveFailed); | |
| 32 | 25 | } else { |
| 33 | - BookmarkProxy.insert(form, saveOk, saveFailed); | |
| 26 | + BookmarkProxy.insert(form).done(saveOk).fail(saveFailed); | |
| 34 | 27 | } |
| 35 | 28 | }); |
| 36 | 29 | |
| 37 | 30 | $("#delete").click(function() { |
| 38 | 31 | bootbox.confirm("Tem certeza que deseja apagar?", function(result) { |
| 39 | 32 | if(result) { |
| 40 | - BookmarkProxy.remove([$("#id").val()], removeOk, removeFailed); | |
| 33 | + BookmarkProxy.remove([$("#id").val()]).done(removeOk); | |
| 41 | 34 | } |
| 42 | 35 | }); |
| 43 | 36 | }); |
| ... | ... | @@ -59,8 +52,9 @@ function loadOk(data) { |
| 59 | 52 | function loadFailed(request) { |
| 60 | 53 | switch (request.status) { |
| 61 | 54 | case 404: |
| 62 | - alert('Você está tentando acessar um registro inexistente.\r\nVocê será redirecionado.') | |
| 63 | - location.href = "bookmark-list.html"; | |
| 55 | + bootbox.alert("Você está tentando acessar um registro inexistente!", function(){ | |
| 56 | + location.href = "bookmark-list.html"; | |
| 57 | + }); | |
| 64 | 58 | break; |
| 65 | 59 | |
| 66 | 60 | default: |
| ... | ... | @@ -74,10 +68,6 @@ function saveOk(data) { |
| 74 | 68 | |
| 75 | 69 | function saveFailed(request) { |
| 76 | 70 | switch (request.status) { |
| 77 | - case 401: | |
| 78 | - alert('Você não está autenticado.'); | |
| 79 | - break; | |
| 80 | - | |
| 81 | 71 | case 412: |
| 82 | 72 | $($("form input").get().reverse()).each(function() { |
| 83 | 73 | var id = $(this).attr('id'); |
| ... | ... | @@ -106,15 +96,4 @@ function saveFailed(request) { |
| 106 | 96 | |
| 107 | 97 | function removeOk(data) { |
| 108 | 98 | location.href = 'bookmark-list.html'; |
| 109 | -} | |
| 110 | - | |
| 111 | -function removeFailed(request) { | |
| 112 | - switch (request.status) { | |
| 113 | - case 401: | |
| 114 | - alert('Você não está autenticado.'); | |
| 115 | - break; | |
| 116 | - | |
| 117 | - default: | |
| 118 | - break; | |
| 119 | - } | |
| 120 | 99 | } |
| 121 | 100 | \ No newline at end of file | ... | ... |
archetype/html-rest/src/main/resources/archetype-resources/src/main/webapp/js/controller/bookmark-list.js
| 1 | 1 | $(function() { |
| 2 | 2 | |
| 3 | - $("#menu").load("menu.html", function() { | |
| 4 | - AuthProxy.getUser(getUserOk, getUserFailed); | |
| 5 | - $("#logout").on("click", function() { | |
| 6 | - sessionStorage.removeItem('credentials'); | |
| 7 | - location.href = "home.html"; | |
| 8 | - }); | |
| 9 | - }); | |
| 10 | - | |
| 11 | 3 | $("#new").focus(); |
| 12 | 4 | |
| 13 | 5 | $(document).ready(function() { |
| 14 | - BookmarkProxy.findAll(findAllOk); | |
| 6 | + BookmarkProxy.findAll().done(findAllOk); | |
| 15 | 7 | }); |
| 16 | 8 | |
| 17 | 9 | $("form").submit(function(event) { |
| ... | ... | @@ -33,19 +25,16 @@ $(function() { |
| 33 | 25 | bootbox.alert({message: "Nenhum registro selecionado"}); |
| 34 | 26 | } else { |
| 35 | 27 | bootbox.confirm("Tem certeza que deseja apagar?", function(result) { |
| 36 | - console.log(result); | |
| 37 | 28 | if(result) { |
| 38 | - BookmarkProxy.remove(ids, removeOk, removeFailed); | |
| 29 | + BookmarkProxy.remove(ids).done(removeOk); | |
| 39 | 30 | } |
| 40 | 31 | }); |
| 41 | 32 | } |
| 42 | 33 | }); |
| 43 | 34 | }); |
| 44 | 35 | |
| 45 | -var oTable; | |
| 46 | - | |
| 47 | 36 | function findAllOk(data) { |
| 48 | - oTable = $('#resultList').dataTable({ | |
| 37 | + var oTable = $('#resultList').dataTable({ | |
| 49 | 38 | "aoColumns" : [ { |
| 50 | 39 | "aTargets" : [ 0 ], |
| 51 | 40 | "mDataProp" : "id", |
| ... | ... | @@ -86,16 +75,5 @@ function findAllOk(data) { |
| 86 | 75 | } |
| 87 | 76 | |
| 88 | 77 | function removeOk() { |
| 89 | - BookmarkProxy.findAll(findAllOk); | |
| 90 | -} | |
| 91 | - | |
| 92 | -function removeFailed(request) { | |
| 93 | - switch (request.status) { | |
| 94 | - case 401: | |
| 95 | - alert('Você não está autenticado.'); | |
| 96 | - break; | |
| 97 | - | |
| 98 | - default: | |
| 99 | - break; | |
| 100 | - } | |
| 78 | + BookmarkProxy.findAll().done(findAllOk); | |
| 101 | 79 | } |
| 102 | 80 | \ No newline at end of file | ... | ... |
archetype/html-rest/src/main/resources/archetype-resources/src/main/webapp/js/controller/home.js
archetype/html-rest/src/main/resources/archetype-resources/src/main/webapp/js/controller/login.js
| ... | ... | @@ -3,12 +3,15 @@ $(function() { |
| 3 | 3 | |
| 4 | 4 | $("form").submit(function(event) { |
| 5 | 5 | event.preventDefault(); |
| 6 | + | |
| 6 | 7 | $("[id$='-message']").hide(); |
| 8 | + | |
| 7 | 9 | var form = { |
| 8 | 10 | 'username' : $("#username").val().trim(), |
| 9 | 11 | 'password' : $("#password").val().trim() |
| 10 | 12 | }; |
| 11 | - AuthProxy.login(form, loginOk, loginFail); | |
| 13 | + | |
| 14 | + AuthProxy.login(form).done(loginOk).fail(loginFail); | |
| 12 | 15 | }); |
| 13 | 16 | }); |
| 14 | 17 | |
| ... | ... | @@ -19,12 +22,11 @@ function make_base_auth(user, password) { |
| 19 | 22 | } |
| 20 | 23 | |
| 21 | 24 | function loginOk(data) { |
| 22 | - sessionStorage.setItem('credentials', make_base_auth($("#username").val().trim(), $("#password").val().trim())); | |
| 25 | + App.setToken(make_base_auth($("#username").val().trim(), $("#password").val().trim())); | |
| 23 | 26 | location.href = "home.html"; |
| 24 | 27 | } |
| 25 | 28 | |
| 26 | 29 | function loginFail(request) { |
| 27 | - sessionStorage.clear(); | |
| 28 | 30 | switch (request.status) { |
| 29 | 31 | case 401: |
| 30 | 32 | $("#global-message").html("Usuário ou senha inválidos.").show(); | ... | ... |
archetype/html-rest/src/main/resources/archetype-resources/src/main/webapp/js/controller/menu.js
| 1 | -function getUserOk(data) { | |
| 2 | - $("#username").html(data.username); | |
| 3 | -} | |
| 1 | +$(function() { | |
| 2 | + | |
| 3 | + $("#menu").load("menu.html", function() { | |
| 4 | + | |
| 5 | + AuthProxy.getUser().done(getUserOk); | |
| 4 | 6 | |
| 5 | -function getUserFailed(request) { | |
| 6 | - switch (request.status) { | |
| 7 | - case 401: | |
| 7 | + $("#logout").on("click", function() { | |
| 8 | + App.removeToken(); | |
| 8 | 9 | location.href = "login.html"; |
| 9 | - break; | |
| 10 | - default: | |
| 11 | - console.log(request.statusText); | |
| 12 | - break; | |
| 13 | - } | |
| 14 | -} | |
| 10 | + }); | |
| 15 | 11 | |
| 16 | -function logoutOk(data) { | |
| 17 | - sessionStorage.removeItem('credentials'); | |
| 18 | - location.href = "home.html"; | |
| 19 | -} | |
| 12 | + }); | |
| 20 | 13 | |
| 21 | -function logoutFailed(data) { | |
| 22 | - console.log('Falha no logout'); | |
| 23 | - console.log(data); | |
| 24 | -} | |
| 14 | +}); | |
| 15 | + | |
| 16 | +function getUserOk(data) { | |
| 17 | + $("#username").html(data.username); | |
| 18 | +} | |
| 25 | 19 | \ No newline at end of file | ... | ... |
archetype/html-rest/src/main/resources/archetype-resources/src/main/webapp/js/lib/app.js
0 → 100644
| ... | ... | @@ -0,0 +1,29 @@ |
| 1 | +$.ajaxSetup({ | |
| 2 | + error : function(request) { | |
| 3 | + switch (request.status) { | |
| 4 | + case 401: | |
| 5 | + bootbox.alert("Você não está autenticado!", function(){ | |
| 6 | + location.href = "login.html"; | |
| 7 | + }); | |
| 8 | + break; | |
| 9 | + } | |
| 10 | + } | |
| 11 | +}); | |
| 12 | + | |
| 13 | +var App = { | |
| 14 | + | |
| 15 | + tokenKey : "credentials", | |
| 16 | + | |
| 17 | + getToken : function() { | |
| 18 | + return sessionStorage.getItem(this.tokenKey); | |
| 19 | + }, | |
| 20 | + | |
| 21 | + setToken : function(token) { | |
| 22 | + sessionStorage.setItem(this.tokenKey, token); | |
| 23 | + }, | |
| 24 | + | |
| 25 | + removeToken : function() { | |
| 26 | + sessionStorage.removeItem(this.tokenKey); | |
| 27 | + } | |
| 28 | + | |
| 29 | +} | ... | ... |
archetype/html-rest/src/main/resources/archetype-resources/src/main/webapp/js/proxy/auth.js
| 1 | -var AuthProxy = {}; | |
| 1 | +var AuthProxy = { | |
| 2 | 2 | |
| 3 | -AuthProxy.url = "api/auth"; | |
| 3 | + url : "api/auth", | |
| 4 | 4 | |
| 5 | -AuthProxy.login = function($credentials, $success, $error) { | |
| 6 | - $.ajax({ | |
| 7 | - url : this.url, | |
| 8 | - type : "POST", | |
| 9 | - data : JSON.stringify($credentials), | |
| 10 | - contentType : "application/json", | |
| 11 | - success : $success, | |
| 12 | - error : $error | |
| 13 | - }); | |
| 14 | -}; | |
| 5 | + login : function($credentials) { | |
| 6 | + return $.ajax({ | |
| 7 | + url : this.url, | |
| 8 | + type : "POST", | |
| 9 | + data : JSON.stringify($credentials), | |
| 10 | + contentType : "application/json", | |
| 11 | + error: function(){ } | |
| 12 | + }); | |
| 13 | + }, | |
| 15 | 14 | |
| 16 | -AuthProxy.logout = function($success, $error) { | |
| 17 | - $.ajax({ | |
| 18 | - url : this.url, | |
| 19 | - type : "DELETE", | |
| 20 | - success : $success, | |
| 21 | - error : $error, | |
| 22 | - beforeSend : function(xhr) { | |
| 23 | - console.log(AuthProxy.getCredentials()); | |
| 24 | - xhr.setRequestHeader("Authorization", AuthProxy.getCredentials()); | |
| 25 | - } | |
| 26 | - }); | |
| 27 | -}; | |
| 15 | + logout : function() { | |
| 16 | + return $.ajax({ | |
| 17 | + url : this.url, | |
| 18 | + type : "DELETE", | |
| 19 | + beforeSend : function(request) { | |
| 20 | + request.setRequestHeader("Authorization", App.getToken()); | |
| 21 | + } | |
| 22 | + }); | |
| 23 | + }, | |
| 28 | 24 | |
| 29 | -AuthProxy.getUser = function($success, $error) { | |
| 30 | - $.ajax({ | |
| 31 | - url : this.url, | |
| 32 | - type : "GET", | |
| 33 | - success : $success, | |
| 34 | - error : $error, | |
| 35 | - beforeSend : function(xhr) { | |
| 36 | - xhr.setRequestHeader("Authorization", AuthProxy.getCredentials()); | |
| 37 | - } | |
| 38 | - }); | |
| 39 | -}; | |
| 25 | + getUser : function() { | |
| 26 | + return $.ajax({ | |
| 27 | + url : this.url, | |
| 28 | + type : "GET", | |
| 29 | + beforeSend : function(request) { | |
| 30 | + request.setRequestHeader("Authorization", App.getToken()); | |
| 31 | + } | |
| 32 | + }); | |
| 33 | + } | |
| 40 | 34 | |
| 41 | -AuthProxy.getCredentials = function() { | |
| 42 | - return sessionStorage.getItem('credentials'); | |
| 43 | 35 | } |
| 44 | 36 | \ No newline at end of file | ... | ... |
archetype/html-rest/src/main/resources/archetype-resources/src/main/webapp/js/proxy/bookmark.js
| 1 | -var BookmarkProxy = {}; | |
| 1 | +var BookmarkProxy = { | |
| 2 | + | |
| 3 | + url : "api/bookmark", | |
| 4 | + | |
| 5 | + findAll : function() { | |
| 6 | + return $.ajax({ | |
| 7 | + type : "GET", | |
| 8 | + url : this.url, | |
| 9 | + beforeSend : function(request) { | |
| 10 | + request.setRequestHeader("Authorization", App.getToken()); | |
| 11 | + } | |
| 12 | + }); | |
| 13 | + }, | |
| 14 | + | |
| 15 | + load : function($id) { | |
| 16 | + return $.ajax({ | |
| 17 | + type : "GET", | |
| 18 | + url : this.url + "/" + $id, | |
| 19 | + beforeSend : function(request) { | |
| 20 | + request.setRequestHeader("Authorization", App.getToken()); | |
| 21 | + } | |
| 22 | + }); | |
| 23 | + }, | |
| 24 | + | |
| 25 | + insert : function($form) { | |
| 26 | + return $.ajax({ | |
| 27 | + type : "POST", | |
| 28 | + url : this.url, | |
| 29 | + data : JSON.stringify($form), | |
| 30 | + contentType : "application/json", | |
| 31 | + beforeSend : function(request) { | |
| 32 | + request.setRequestHeader("Authorization", App.getToken()); | |
| 33 | + } | |
| 34 | + }); | |
| 35 | + }, | |
| 2 | 36 | |
| 3 | -BookmarkProxy.url = "api/bookmark"; | |
| 4 | - | |
| 5 | -BookmarkProxy.findAll = function($success, $error) { | |
| 6 | - $.ajax({ | |
| 7 | - type : "GET", | |
| 8 | - url : this.url, | |
| 9 | - success : $success, | |
| 10 | - error : $error | |
| 11 | - }); | |
| 12 | -}; | |
| 13 | - | |
| 14 | -BookmarkProxy.load = function($id, $success, $error) { | |
| 15 | - $.ajax({ | |
| 16 | - type : "GET", | |
| 17 | - url : this.url + "/" + $id, | |
| 18 | - success : $success, | |
| 19 | - error : $error | |
| 20 | - }); | |
| 21 | -}; | |
| 22 | - | |
| 23 | -BookmarkProxy.insert = function($form, $success, $error) { | |
| 24 | - $.ajax({ | |
| 25 | - type : "POST", | |
| 26 | - url : this.url, | |
| 27 | - data : JSON.stringify($form), | |
| 28 | - contentType : "application/json", | |
| 29 | - success : $success, | |
| 30 | - error : $error, | |
| 31 | - beforeSend : function(xhr) { | |
| 32 | - xhr.setRequestHeader("Authorization", AuthProxy.getCredentials()); | |
| 33 | - } | |
| 34 | - }); | |
| 35 | -}; | |
| 36 | - | |
| 37 | -BookmarkProxy.update = function($id, $form, $success, $error) { | |
| 38 | - $.ajax({ | |
| 39 | - type : "PUT", | |
| 40 | - url : this.url + "/" + $id, | |
| 41 | - data : JSON.stringify($form), | |
| 42 | - contentType : "application/json", | |
| 43 | - success : $success, | |
| 44 | - error : $error, | |
| 45 | - beforeSend : function(xhr) { | |
| 46 | - xhr.setRequestHeader("Authorization", AuthProxy.getCredentials()); | |
| 47 | - } | |
| 48 | - }); | |
| 49 | -}; | |
| 50 | - | |
| 51 | -BookmarkProxy.remove = function($ids, $success, $error) { | |
| 52 | - $.ajax({ | |
| 53 | - type : "DELETE", | |
| 54 | - url : this.url, | |
| 55 | - data : JSON.stringify($ids), | |
| 56 | - contentType : "application/json", | |
| 57 | - success : $success, | |
| 58 | - error : $error, | |
| 59 | - beforeSend : function(xhr) { | |
| 60 | - xhr.setRequestHeader("Authorization", AuthProxy.getCredentials()); | |
| 61 | - } | |
| 62 | - }); | |
| 63 | -}; | |
| 37 | + update : function($id, $form) { | |
| 38 | + return $.ajax({ | |
| 39 | + type : "PUT", | |
| 40 | + url : this.url + "/" + $id, | |
| 41 | + data : JSON.stringify($form), | |
| 42 | + contentType : "application/json", | |
| 43 | + beforeSend : function(request) { | |
| 44 | + request.setRequestHeader("Authorization", App.getToken()); | |
| 45 | + } | |
| 46 | + }); | |
| 47 | + }, | |
| 48 | + | |
| 49 | + remove : function($ids) { | |
| 50 | + return $.ajax({ | |
| 51 | + type : "DELETE", | |
| 52 | + url : this.url, | |
| 53 | + data : JSON.stringify($ids), | |
| 54 | + contentType : "application/json", | |
| 55 | + beforeSend : function(request) { | |
| 56 | + request.setRequestHeader("Authorization", App.getToken()); | |
| 57 | + } | |
| 58 | + }); | |
| 59 | + } | |
| 60 | + | |
| 61 | +} | |
| 64 | 62 | \ No newline at end of file | ... | ... |
archetype/html-rest/src/main/resources/archetype-resources/src/main/webapp/login.html
| ... | ... | @@ -41,7 +41,9 @@ |
| 41 | 41 | <p class="demoiselle">Aplicação de exemplo do Demoiselle 2.5.0</p> |
| 42 | 42 | <script type="text/javascript" src="js/lib/jquery-2.1.0.min.js"></script> |
| 43 | 43 | <script type="text/javascript" src="js/lib/bootstrap.min.js"></script> |
| 44 | - <script type="text/javascript" src="js/controller/login.js"></script> | |
| 44 | + <script type="text/javascript" src="js/lib/bootbox.js"></script> | |
| 45 | + <script type="text/javascript" src="js/lib/app.js"></script> | |
| 45 | 46 | <script type="text/javascript" src="js/proxy/auth.js"></script> |
| 47 | + <script type="text/javascript" src="js/controller/login.js"></script> | |
| 46 | 48 | </body> |
| 47 | 49 | </html> |
| 48 | 50 | \ No newline at end of file | ... | ... |