1 <%@ Page Language="C#" Title="用户设置 - 木头盒子" AutoEventWireup="true" CodeBehind="Profile.aspx.cs"
\r
2 Inherits="PumpkinHouse.User.Profile" MasterPageFile="~/Site.Master" %>
\r
4 <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="ScriptContent">
\r
5 <link href="/Styles/jquery-ui-1.8.20/jquery-ui-1.8.20.custom.css" rel="stylesheet" type="text/css" />
\r
6 <script src="/Scripts/lib/jquery-ui-1.8.20.custom.min.draggable.js" language="javascript" type="text/javascript"></script>
\r
7 <script src="/Scripts/lib/jquery.fileupload.js" language="javascript" type="text/javascript"></script>
\r
8 <script type="text/javascript">
\r
9 var globalUsername = '<%= Username %>';
\r
10 var globalProvinces;
\r
12 var globalFlags = [];
\r
15 var globalProfilePhotoRoot = "http://image.mutouhezi.com/profile/";
\r
16 var globalCount = 0;
\r
18 function uploadPhotoSuccessful(e, data) {
\r
20 if (typeof data.result == 'string') {
\r
21 result = $.parseJSON(data.result); /* other modern browers */
\r
24 result = data.result; /* IE */
\r
26 var imageName = result.name;
\r
27 var width = result.width;
\r
28 var height = result.height;
\r
30 // calculate the size
\r
32 var maxHeight = 225;
\r
34 var fixedRatio = maxHeight * 1.0 / maxWidth;
\r
35 if (height > maxHeight || width > maxWidth) { // in that case we need to scale
\r
36 var ratio = 1.0 * height / width;
\r
37 if (ratio > fixedRatio) {
\r
39 var originalHeight = height;
\r
41 width = height / ratio;
\r
42 globalRatio = 1.0 * originalHeight / height;
\r
46 var originalWidth = width;
\r
48 height = width * ratio;
\r
49 globalRatio = 1.0 * originalWidth / width;
\r
53 $('#statusText', globalDialog).hide();
\r
54 $('#imageArea', globalDialog).show();
\r
56 var rect = $('.drawArea').draggable({ containment: "parent" });
\r
57 $('.drawArea').resizable({ containment: "parent", aspectRatio: 1 });
\r
59 var minLength = width;
\r
60 if (height < minLength) minLength = height;
\r
62 if (minLength < 200) {
\r
63 $('.drawArea').css('height', minLength).css('width', minLength);
\r
66 $('#imageArea').css('width', width + 'px');
\r
67 $('#imageArea').css('height', height + 'px');
\r
68 // set the image as the background
\r
69 var img = $('#bgImage');
\r
70 img.attr('src', '/Images/GetPhoto.aspx?name=' + imageName + "&a=Math.floor(new Date/10)");
\r
71 img.css('width', width + 'px');
\r
72 img.css('height', height + 'px');
\r
74 $('#selBtn').show();
\r
78 var t = $('.drawArea');
\r
79 var m = 'top: ' + t.position().top + ', left: ' + t.position().left + '\n';
\r
80 m += 'size: ' + t.width();
\r
82 var x = Math.floor(t.position().left * globalRatio);
\r
83 var y = Math.floor(t.position().top * globalRatio);
\r
84 var d = Math.floor(t.width() * globalRatio);
\r
86 ajaxCropPhoto(true, x, y, d, cropSuccess, handleFault);
\r
89 function cropSuccess() {
\r
90 if (globalDialog) globalDialog.closeDialog();
\r
91 $('#photo').attr('src', '/Images/GetPhoto.aspx?name=' + globalUsername + '_180_180.jpg&a=Math.floor(new Date/10)');
\r
94 function uploadPhotoStarted() {
\r
96 // globalDialog.dialog({ width: 570 , height: 370 });
\r
97 globalDialog.showDialog();
\r
100 var template = $('#photoDialogTemplate').tmpl();
\r
101 globalDialog = template.mDialog({ width: 610, height: 410 });
\r
103 $('#selBtn').on('click', select);
\r
106 $('#imageArea', globalDialog).hide();
\r
107 $('#selBtn').hide();
\r
108 $('#statusText', globalDialog).show().text('头像上传中……');
\r
112 function renderUploadTemplate() {
\r
113 var template = $('#profilePhotoTemplate').tmpl();
\r
114 var holder = $('#photoHolder');
\r
116 holder.append(template);
\r
117 $('#photo').attr('src', '/Images/GetPhoto.aspx?name=' + globalUsername + '_180_180.jpg');
\r
119 $('#photoUploadForm').fileupload({
\r
120 'formData': { type: 'photo' }, /* 区分头像还是分享 */
\r
121 // Unwrapping HTML-encoded JSON required for IE's iframe transport.
\r
122 dataType: 'iframejson',
\r
124 'html iframejson': function (htmlEncodedJson) {
\r
125 return $.parseJSON($('<div/>').html(htmlEncodedJson).text());
\r
127 'iframe iframejson': function (iframe) {
\r
128 return $.parseJSON(iframe.find('body').text());
\r
132 bind('fileuploaddone', uploadPhotoSuccessful).
\r
133 bind('fileuploadstart', uploadPhotoStarted);
\r
136 function renderGeneralInfo(userInfo) {
\r
137 globalUserInfo = userInfo;
\r
138 var holder = $('#generalInfoHolder');
\r
140 var template = $('#userGeneralInfoTemplate').tmpl({ user: userInfo, provinces: globalProvinces });
\r
141 holder.append(template);
\r
143 // bind the event on province select control
\r
144 $('#province').on('change', onProvinceChange);
\r
146 // render the province
\r
147 var provinceId = userInfo.provinceName ? userInfo.provinceId : globalProvinces[0].Id;
\r
149 renderCities(provinceId);
\r
151 if (userInfo.provinceName) {
\r
153 $('#province').val(provinceId);
\r
154 $('#city').val(userInfo.cityId);
\r
157 // render gender info
\r
158 $("input[name=gender][value=" + userInfo.gender + ']').attr("checked", "checked");
\r
160 // bind event on upate info button
\r
162 $('#generalInfoForm').validate({
\r
163 submitHandler: function () {
\r
164 var g = $('input[name=gender]:checked').val();
\r
165 var lid = $('#city').val();
\r
166 var info = new UserGeneralInfo(g, lid, $('#intro').val(), $('#nickname').val());
\r
167 ajaxUpdateUserInfo(true, info, updateUserInfoSuccess, handleFault);
\r
171 required: '昵称不能为空',
\r
172 remote: '这个昵称已经被别人使用啦!',
\r
173 maxlength: '昵称不能超过14字符/汉字'
\r
185 function updateUserInfoSuccess() {
\r
186 $('.resultMessage', '#tabHolder').text('设置成功');
\r
189 function onProvinceChange() {
\r
190 var provinceId = $('option:selected', '#province').attr('value');
\r
191 renderCities(provinceId);
\r
194 function renderCities(provinceId) {
\r
195 var cities = $.grep(globalProvinces, function (item, index) {
\r
196 return item.Id == provinceId;
\r
198 var cityTemplate = $('#locationTemplate').tmpl(cities);
\r
199 $('#city').empty().append('<option value="0"></option>');
\r
200 cityTemplate.appendTo('#city');
\r
203 function renderEmail(userInfo) {
\r
204 globalUserInfo = userInfo;
\r
205 document.title = '用户邮箱设置 - 木头盒子';
\r
206 renderTemplate('#emailHolder', '#emailTemplate', userInfo);
\r
208 $('#updateEmailBtn').on('click', function () {
\r
209 $('form#emailForm').validate({
\r
212 required: '请输入信箱地址',
\r
214 remote: '这个邮箱已经被别人使用啦!'
\r
217 submitHandler: function () {
\r
218 var newEmail = $('#email').val();
\r
219 ajaxUpdateUserEmail(true, newEmail, function () {
\r
220 $('#email').val(newEmail);
\r
221 userInfo.email = newEmail;
\r
229 function renderPassword() {
\r
230 var pwdHolder = $('#passwordHolder');
\r
232 var template = $('#resetPasswordTemplate').tmpl();
\r
233 pwdHolder.append(template);
\r
235 $('#resetPwdBtn').on('click', function () {
\r
236 $('form#pwdForm').validate({
\r
239 required: '请输入现在的密码'
\r
245 required: '请重复输入新密码',
\r
246 equalTo: '两次密码输入必须一致'
\r
249 submitHandler: function () {
\r
250 var oldPwd = $('#oldPwd').val();
\r
251 var newPwd = $('#newPwd').val();
\r
252 ajaxUpdatePassword(true, oldPwd, newPwd, updatePasswordSuccess, handleFault);
\r
258 function updatePasswordSuccess(result) {
\r
260 $('.resultMessage', '#tabHolder').text('修改成功');
\r
261 $('#oldPwd').val('');
\r
262 $('#newPwd').val('');
\r
263 $('#repPwd').val('');
\r
266 alert('现在的密码填写错误!');
\r
270 function renderReceiveEmail(userInfo) {
\r
272 renderTemplate('#receiveEmailHolder', '#receiveEmailTemplate', userInfo);
\r
273 $('input[name=receiveEmail][value=' + userInfo.receiveEmail + ']').attr('checked', true);
\r
274 globalUserInfo = userInfo;
\r
275 $('#updateReceiveEmailBtn').on('click', function () {
\r
276 var result = $('input[name=receiveEmail]:checked').val();
\r
277 ajaxUpdateReceiveEmail(true, result, function () {
\r
278 $('.resultMessage', '#tabHolder').text('邮件订阅设置成功');
\r
283 ajaxGetUserInfo(true, renderReceiveEmail, handleFault);
\r
287 function renderAssociation(associationList) {
\r
288 renderTemplate('#associationHolder', '#associationListTemplate', { list: associationList });
\r
289 if ('<%= HasBoundError %>' === 'True') {
\r
290 alert('此第三方账号已与另一个木头盒子账号绑定。如要坚持绑定此账号,请用此第三方账号登录后取消与另一个账号的绑定。');
\r
292 $('.bound_yes', '#associationHolder').on('click', removeAssociation);
\r
295 function removeAssociation(event) {
\r
296 var target = $(event.target);
\r
297 var id = target.attr('data-id');
\r
298 ajaxRemoveAssociation(true, id, function () { ajaxGetAccountAssociations(true, renderAssociation, handleFault); }, handleFault);
\r
301 function doAction() {
\r
303 //load province list
\r
304 globalProvinces = getLocationsSync(handleFault);
\r
306 globalTabs = $('#tabHolder').tabs({
\r
307 select: function (event, ui) {
\r
308 var tabName = $(ui.tab).attr('href');
\r
309 location.hash = tabName;
\r
312 show: function (event, ui) {
\r
313 var index = ($(this).tabs('option', 'selected'));
\r
316 if (!globalFlags[0]) {
\r
317 renderUploadTemplate();
\r
318 if (!globalUserInfo) {
\r
319 ajaxGetUserInfo(true, renderGeneralInfo, handleFault);
\r
322 renderGeneralInfo(globalUserInfo);
\r
325 document.title = '用户基本信息设置 - 木头盒子';
\r
328 if (!globalFlags[index]) {
\r
331 document.title = '用户密码设置 - 木头盒子';
\r
334 ajaxGetAccountAssociations(true, renderAssociation, handleFault);
\r
337 if (!globalFlags[index]) {
\r
338 renderReceiveEmail(globalUserInfo);
\r
340 document.title = '用户邮件订阅设置 - 木头盒子';
\r
343 globalFlags[index] = true;
\r
344 $('.resultMessage', '#tabHolder').text('');
\r
347 $('#tabHolder').show();
\r
351 <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
\r
352 <style type="text/css">
\r
362 border-radius: 0px;
\r
369 background: #ffffff;
\r
375 background: #FFFFFF;
\r
377 .ui-tabs-selected, .ui-state-active, .ui-state-hover
\r
381 border-radius: 0px;
\r
388 font-family: '微软雅黑';
\r
392 .ui-state-default a:hover
\r
398 .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited
\r
401 border-top: 2px solid #aacd60;
\r
402 text-decoration: none;
\r
421 .ui-widget-header .ui-icon
\r
427 background: url(/img/DialogClose.png) no-repeat center top;
\r
432 background: url(/img/DialogCloseHover.png) no-repeat center top;
\r
435 margin-right: -2px;
\r
437 a.ui-dialog-titlebar-close a.ui-corner-all
\r
439 border: 2px solid red;
\r
451 .ui-corner-all .ui-state-hover
\r
455 .ui-state-focus{ background:none;}
\r
457 <div class="siteLink clearfix" style="width: 800px; height: 55px; margin-top: 50px;">
\r
458 <a href="/">木头盒子首页</a> >用户设置</div>
\r
459 <div id="tabHolder" class="UserModifyInfo" style="display: none">
\r
460 <ul style="background: #F6F6F6; height: 38px;">
\r
461 <li style="border: none; margin-left: 10px; font-weight:100;"><a href="#tab1">基本信息</a></li>
\r
462 <li style="border: none; margin-left: 10px; font-weight:100;"><a href="#tab3">密码</a></li>
\r
463 <li style="border: none; margin-left: 10px; font-weight:100;"><a href="#tab4">账号绑定</a></li>
\r
464 <li style="border: none; margin-left: 10px; font-weight:100;"><a href="#tab5">邮件订阅</a></li>
\r
467 <div id="photoHolder" class="UserModifyTab1">
\r
469 <div id="generalInfoHolder" class="UserModifyTab2">
\r
474 <div id="passwordHolder" class="UserModifyTab4">
\r
479 <div id="associationHolder" class="UserModifyTab5">
\r
485 <div id="receiveEmailHolder" class="UserModifyTab6">
\r
489 <!-- #Include virtual="/template/userProfileTemplate.html" -->
\r