UNPKG

4.89 kBHTMLView Raw
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="utf-8">
5 <title>Plumes - Login</title>
6
7 <meta name="viewport" content="width=device-width, initial-scale=1">
8 <link rel="stylesheet" href="/public/base/base-plumes.css" type="text/css" />
9 <style type="text/css">
10 .example-mask {
11 z-index: 99998;
12 position: fixed;
13 top: 0;
14 left: 0;
15 right: 0;
16 bottom: 0;
17 background: #fff;
18 }
19 </style>
20</head>
21<body>
22
23 <rv-require
24 name="pl-layout-platform"
25 src="../public/layouts/pl-layout-platform"
26
27 data-bind-onloaded="onloaded"
28 data-bind-beforerequire="beforerequire"
29 data-bind-brand="brand"
30 data-bind-apps="apps"
31 data-bind-user="user"
32 >
33 <rv-partial target="mask-title">
34 Login <span class="accent">example</span>
35 </rv-partial>
36 <rv-partial target="message-title">
37 Login <span class="accent">example</span>
38 </rv-partial>
39 <rv-partial target="content">
40
41 <rv-require
42 name="pl-login"
43 src="../public/login/pl-login"
44 ondemand="pl-login"
45
46 data-text-question="Who are you?"
47 data-text-username="Email"
48 data-text-userpassword="Password"
49 ></rv-require>
50
51 </rv-partial>
52 </rv-require>
53
54 <div class="example-mask"></div>
55
56 <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.3.js"></script>
57 <script type="text/javascript" src="http://cdn.ractivejs.org/latest/ractive.js"></script>
58 <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/ractive-require/0.5.1/ractive-require.js"></script>
59 <script type="text/javascript" src="http://www.myersdaily.org/joseph/javascript/md5.js"></script>
60 <script type="text/javascript" src="/public/base/base-bootstrap.js"></script>
61
62 <script type="text/javascript">
63 (function() {
64 'use strict';
65
66 window.Ractive.bootstrap(function(page) {
67
68 page.set('brand', 'Plumes');
69 page.set('apps', [{
70 name: 'Layout',
71 select: function() {
72 window.location.href = '/layout.html';
73 }
74 }, {
75 name: 'Login',
76 selected: true,
77 select: function() {
78 window.location.href = 'login.html';
79 }
80 }, {
81 name: 'Lists',
82 select: function() {
83 window.location.href = 'lists.html';
84 }
85 }]);
86 page.set('user', {
87 avatar: 'https://www.gravatar.com/avatar/9e38451efa23937301594f273033c5f1.png'
88 });
89
90 function _validateEmail(email) {
91 return /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i.test(email);
92 }
93
94 page.set('beforerequire', function(Layout, callback) {
95 Layout.require('pl-login').then(function() {
96
97 var Login = Layout.findChild('name', 'pl-login');
98
99 Login.on('username', function(args) {
100 if (args.username && _validateEmail(args.username)) {
101 var src = 'https://www.gravatar.com/avatar/' + window.md5(args.username) + '.png?s=140';
102
103 $('<img/>')
104 .load(function() {
105 Login.set('avatar', src);
106 })
107 .attr('src', src);
108
109 return;
110 }
111
112 Login.set('avatar', '');
113 });
114
115 Login.on('login', function(args) {
116 console.log(args);
117 if (!args.username || !args.userpassword) {
118 return Login.fire('error', {
119 message: 'The password entered is incorrect.'
120 });
121 }
122
123 Login.fire('logged', 'Welcome back <strong class="accent">' + args.username + '</strong>');
124 });
125
126 Login.on('forgot', function(args) {
127 if (!_validateEmail(args.username)) {
128 return Login.fire('forgotError', {
129 message: 'Please give a valid email address.'
130 });
131 }
132
133 Login.fire('forgotSuccess');
134 });
135
136 Login.on('forgotCode', function(args) {
137 if (!args.code) {
138 return Login.fire('forgotCodeError', {
139 message: 'Please give a valid code.'
140 });
141 }
142
143 Login.fire('forgotCodeSuccess');
144 });
145
146 Login.on('forgotPassword', function(args) {
147 if (!args.password || args.password != args.confirmPassword) {
148 return Login.fire('forgotPasswordError', {
149 message: 'Please give valid passwords.'
150 });
151 }
152
153 Login.fire('forgotPasswordSuccess', {
154 message: 'Your new password is registered.'
155 });
156 });
157
158 Login.on('closed', function() {
159 callback();
160 });
161 });
162 });
163
164 page.set('onloaded', function() {
165 $('.example-mask').remove();
166 });
167
168 page.require();
169 });
170
171 })();
172</script>
173</body>
174</html>