blob: 06fbd32008c28934f3abde643fbdb7c9ea76109f [file] [log] [blame]
define("sim_abnormal","jquery knockout service set main opmode".split(" "),
function ($, ko, service, config, home, opmode) {
function init() {
var container = $('#container')[0];
ko.cleanNode(container);
var vm = new simViewMode();
ko.applyBindings(vm, container);
$('#frmPUK').validate({
submitHandler: function () {
vm.enterPUK();
},
rules: {
txtNewPIN: "pin_check",
txtConfirmPIN: {
equalToPin: "#txtNewPIN"
},
txtPUK: "puk_check"
}
});
$('#frmPIN').validate({
submitHandler: function () {
vm.enterPIN();
},
rules: {
txtPIN: "pin_check"
}
});
}
function simViewMode() {
var target = this;
var staInfo = service.getStatusInfo();
var curCableMode = "PPPOE" == staInfo.blc_wan_mode || "AUTO_PPPOE" == staInfo.blc_wan_mode;
target.hasRj45 = config.RJ45_SUPPORT;
target.hasSms = config.HAS_SMS;
target.hasPhonebook = config.HAS_PHONEBOOK;
target.isSupportSD = config.SD_CARD_SUPPORT;
if (config.WIFI_SUPPORT_QR_SWITCH) {
var wifiInfo = service.getWifiBasic();
target.showQRCode = config.WIFI_SUPPORT_QR_CODE && wifiInfo.show_qrcode_flag;
} else {
target.showQRCode = config.WIFI_SUPPORT_QR_CODE;
}
target.qrcodeSrc = './pic/qrcode_ssid_wifikey.png?_=' + $.now();
target.hasParentalControl = ko.observable(config.HAS_PARENTAL_CONTROL && curCableMode);
target.pageState = {
NO_SIM: 0,
WAIT_PIN: 1,
WAIT_PUK: 2,
PUK_LOCKED: 3,
LOADING: 4
};
target.isHomePage = ko.observable(false);
if (window.location.hash == "#main") {
target.isHomePage(true);
}
var info = service.getLoginData();
target.PIN = ko.observable();
target.newPIN = ko.observable();
target.confirmPIN = ko.observable();
target.PUK = ko.observable();
target.pinNumber = ko.observable(info.pinnumber);
target.pukNumber = ko.observable(info.puknumber);
var state = computePageState(info);
target.page = ko.observable(state);
if (state == target.pageState.LOADING) {
addTimeout(refreshPage, 500);
}
target.showOpModeWindow = function () {
showSettingWindow("change_mode", "opmode_popup", "opmode_popup", 400, 300, function () {});
};
target.isLoggedIn = ko.observable(false);
target.enableFlag = ko.observable(false);
//更新当前工作模式状态信息
target.refreshOpmodeInfo = function () {
var staInfo = service.getStatusInfo();
target.isLoggedIn(staInfo.isLoggedIn);
if (!curCableMode && checkCableMode(staInfo.blc_wan_mode)) { //如果有线,则重新加载
if (target.page() == target.pageState.NO_SIM || target.page() == target.pageState.WAIT_PIN || target.page() == target.pageState.WAIT_PUK || target.page() == target.pageState.PUK_LOCKED) {
window.location.reload();
}
}
curCableMode = checkCableMode(staInfo.blc_wan_mode);
target.hasParentalControl(config.HAS_PARENTAL_CONTROL && curCableMode);
if (curCableMode && staInfo.ethWanMode.toUpperCase() == "DHCP") {
target.enableFlag(true);
} else if ((!curCableMode && staInfo.connectStatus != "ppp_disconnected") || (curCableMode && staInfo.rj45ConnectStatus != "idle" && staInfo.rj45ConnectStatus != "dead")) {
target.enableFlag(false);
} else {
target.enableFlag(true);
}
var mode = (staInfo.blc_wan_mode == "AUTO_PPP" || staInfo.blc_wan_mode == "AUTO_PPPOE") ? "AUTO" : staInfo.blc_wan_mode;
var currentOpMode = "";
switch (mode) {
case "PPP":
currentOpMode = "opmode_gateway";
break;
case "PPPOE":
currentOpMode = "opmode_cable";
break;
case "AUTO":
currentOpMode = "opmode_auto";
break;
default:
break;
}
$("#opmode").attr("data-trans", currentOpMode).text($.i18n.prop(currentOpMode));
}
//刷新页面状态
function refreshPage() {
var data = service.getLoginData();
var state = computePageState(data);
if (state == target.pageState.LOADING) {
addTimeout(refreshPage, 500);
} else {
target.page(state);
target.pinNumber(data.pinnumber);
target.pukNumber(data.puknumber);
}
}
//输入PUK设置新PIN事件处理
target.enterPUK = function () {
showLoading();
target.page(target.pageState.LOADING);
var newPIN = target.newPIN();
var confirmPIN = target.confirmPIN();
var params = {};
params.PinNumber = newPIN;
params.PUKNumber = target.PUK();
service.enterPUK(params, function (data) {
if (!data.result) {
hideLoading();
if (target.pukNumber() == 2) {
showAlert("last_enter_puk", function () {
refreshPage();
});
} else {
showAlert("puk_error", function () {
refreshPage();
if (target.page() == target.pageState.PUK_LOCKED) {
hideLoading();
}
});
}
target.PUK('');
target.newPIN('');
target.confirmPIN('');
} else {
refreshPage();
if (target.page() == target.pageState.PUK_LOCKED) {
hideLoading();
}
}
});
};
//验证输入PIN事件处理
target.enterPIN = function () {
showLoading();
target.page(target.pageState.LOADING);
var pin = target.PIN();
service.enterPIN({
PinNumber: pin
}, function (data) {
if (!data.result) {
hideLoading();
if (target.pinNumber() == 2) {
showAlert("last_enter_pin", function () {
refreshPage();
});
} else {
showAlert("pin_error", function () {
refreshPage();
});
}
target.PIN('');
}
refreshPage();
if (target.page() == target.pageState.WAIT_PUK) {
hideLoading();
}
});
};
if (target.hasRj45) {
target.refreshOpmodeInfo();
addInterval(function () {
target.refreshOpmodeInfo();
}, 1000);
}
//根据登录状态和SIM卡状态设置页面状态
function computePageState(data) {
var state = data.modem_main_state;
if (state == "modem_undetected" || state == "modem_sim_undetected" || state == "modem_sim_destroy") {
return target.pageState.NO_SIM;
} else if (state == "modem_waitpin") {
return target.pageState.WAIT_PIN;
} else if ((state == "modem_waitpuk" || data.pinnumber == 0) && (data.puknumber != 0)) {
return target.pageState.WAIT_PUK;
} else if ((data.puknumber == 0 || state == "modem_sim_destroy") && state != "modem_sim_undetected" && state != "modem_undetected") {
return target.pageState.PUK_LOCKED;
} else if ($.inArray(state, config.TEMPORARY_MODEM_MAIN_STATE) != -1) {
return target.pageState.LOADING;
} else {
location.reload();
}
}
}
return {
init: init
};
});
define("ota_update", "jquery jq_fileinput service knockout set statusBar".split(" "),
function ($, fileinput, service, ko, config, status) {
function FotaUpdateViewModel() {
var target = this;
var setting = service.getOTAUpdateSetting();
target.allowRoamingUpdate = ko.observable(setting.allowRoamingUpdate);
target.hasDdns = config.DDNS_SUPPORT;
target.hasUpdateCheck = config.HAS_UPDATE_CHECK;
target.hasUssd = config.HAS_USSD;
target.isDataCard = config.PRODUCT_TYPE == 'DATACARD';
target.lastCheckTime = ko.observable('');
target.updateIntervalDay = ko.observable(setting.updateIntervalDay);
target.updateMode = ko.observable(setting.updateMode);
target.updateType = ko.observable(service.getUpdateType().update_type);
// 自动检测设置按钮事件
target.apply = function () {
var updateSettingInfo = {
updateMode: target.updateMode(),
updateIntervalDay: target.updateIntervalDay(),
allowRoamingUpdate: target.allowRoamingUpdate()
};
showLoading();
service.setOTAUpdateSetting(updateSettingInfo, function (settingInfo) {
if (settingInfo && settingInfo.result == "success") {
setting.allowRoamingUpdate = target.allowRoamingUpdate();
successOverlay();
} else {
errorOverlay();
}
});
};
// 按钮【检测】点击事件处理接口
target.checkNewVersion = function () {
var newVersionState = service.getNewVersionState();
if(newVersionState.fota_package_already_download == "yes"){
showAlert("fota_package_already_download");
return;
}
if(config.UPGRADE_TYPE=="FOTA"){
var checkingState = ["checking"];
if ($.inArray(newVersionState.fota_current_upgrade_state, checkingState) != -1) {
showAlert("ota_update_running");
return;
}
}
// FOTA开始下载前,判断当前是否已经在下载过程中,防止错误清空fota_new_version_state状态
var statusInfo = service.getStatusInfo();
if (newVersionState.fota_current_upgrade_state == "prepare_install") {
showInfo('ota_download_success');
return;
}
var upgradingState = ["downloading", "confirm_dowmload"];
if ($.inArray(newVersionState.fota_current_upgrade_state, upgradingState) != -1) {
status.showOTAAlert();
return;
}
if (statusInfo.roamingStatus) {
showConfirm("ota_check_roaming_confirm", function () {
checkNewVersion();
});
} else {
checkNewVersion();
}
// 检测是否有新版本
function checkNewVersion() {
showLoading("ota_new_version_checking");
function checkNewVersionResult() {
var result = service.getNewVersionState();
if (result.hasNewVersion) {
if(result.fota_new_version_state == "already_has_pkg"&&result.fota_current_upgrade_state !="prepare_install"&&result.fota_current_upgrade_state !="low_battery")
{
addTimeout(checkNewVersionResult, 1000);
}
else
{
status.showOTAAlert();
}
} else if (result.fota_new_version_state == "no_new_version") {
showAlert("ota_no_new_version");
}else if (result.fota_new_version_state == "check_failed" ) {
errorOverlay("ota_check_fail");
} else if ( result.fota_new_version_state == "bad_network"){
errorOverlay("ota_connect_server_failed");
}else {
addTimeout(checkNewVersionResult, 1000);
}
}
service.setUpgradeSelectOp({selectOp: 'check'}, function (result) {
if (result.result == "success") {
checkNewVersionResult();
} else {
errorOverlay();
}
});
}
};
// 确认按钮状态:可用/灰化
target.fixPageEnable = function () {
var connectStatusInfo = service.getStatusInfo();
var opModeData = service.getOpMode();
if (checkConnectedStatus(connectStatusInfo.connectStatus, opModeData.rj45_state, connectStatusInfo.connectWifiStatus)) {
enableBtn($("#btnCheckNewVersion"));
} else {
disableBtn($("#btnCheckNewVersion"));
}
};
target.clickAllowRoamingUpdate = function () {
var checkedbox = $("#chkUpdateRoamPermission:checked");
if (checkedbox && checkedbox.length == 0) {
target.allowRoamingUpdate("1");
} else {
target.allowRoamingUpdate("0");
}
};
service.getOTAlastCheckTime({}, function(info){
target.lastCheckTime(info.dm_last_check_time);
});
}
// 获取升级文件大小
function getFileSize(object){
var fileLenth = 0;
var isIE = /msie/i.test(navigator.userAgent) && !window.opera;
if (isIE) { //如果是ie
var objectValue = object.value;
try {
var fso = new ActiveXObject("Scripting.FileSystemObject");
fileLenth = parseInt(fso.GetFile(objectValue).size);
} catch (e) {
fileLenth = 1;
}
}else{ //对于非IE获得要上传文件的大小
try{
fileLenth = parseInt(object.files[0].size);
}catch (e) {
fileLenth = 1; //获取不到取-1
}
}
return fileLenth/1024/1024;
}
function init() {
var container = $('#container')[0];
ko.cleanNode(container);
var fwVm = new FotaUpdateViewModel();
ko.applyBindings(fwVm, container);
if(fwVm.updateType() == "mifi_fota"){
fwVm.fixPageEnable();
addInterval(function () {
fwVm.fixPageEnable();
}, 1000);
}else{
if ($(".customfile").length == 0) {
$("#fileField").customFileInput();
}
}
$('#frmOTAUpdate').validate({
submitHandler: function () {
fwVm.apply();
}
});
}
return {
init: init
};
});
// SD卡 模块
define("sd", "jquery set service knockout".split(" ") , function($, config, service, ko) {
// 基目录。感觉此根目录不显示给用户会更友好
var basePath = config.SD_BASE_PATH;
function SDCardViewModel() {
var target = this;
var SDConfiguration = service.getSDConfiguration();
target.selectedMode = ko.observable(SDConfiguration.sd_mode);
target.orignalMode = ko.observable(SDConfiguration.sd_mode);
target.sdStatus = ko.observable(SDConfiguration.sd_status);
target.orignalSdStatus = ko.observable(SDConfiguration.sd_status);
target.sdStatusInfo = ko.observable("sd_card_status_info_" + SDConfiguration.sd_status);
target.selectedShareEnable = ko.observable(SDConfiguration.share_status);
target.selectedFileToShare = ko.observable(SDConfiguration.file_to_share);
target.selectedAccessType = ko.observable(SDConfiguration.share_auth);
var path = SDConfiguration.share_file.substring(basePath.length);
target.pathToShare = ko.observable(path);
target.isInvalidPath = ko.observable(false);
target.checkEnable = ko.observable(true);
addInterval(function(){
target.refreshSimStatus();
}, 3000);
// 检查共享路径是否有效
target.checkPathIsValid = ko.computed(function () {
if (target.orignalMode() == 0 && target.selectedShareEnable() == '1' && target.selectedFileToShare() == '0'
&& target.pathToShare() != '' && target.pathToShare() != '/') {
service.checkFileExists({
"path": basePath + target.pathToShare()
}, function (info) {
if (info.status != "exist") {
target.isInvalidPath(true);
} else {
target.isInvalidPath(false);
}
});
} else {
target.isInvalidPath(false);
}
});
target.disableApplyBtn = ko.computed(function(){
return target.selectedMode() == target.orignalMode() && target.selectedMode() == '1';
});
// 文件共享方式radio点击事件
target.fileToShareClickHandle = function(){
if(target.selectedFileToShare() == "1"){
target.pathToShare("/");
}
return true;
};
// T卡热插拔时状态监控,拔插卡重刷界面
target.refreshSimStatus = function(){
if(target.checkEnable()){
var SDConfiguration = service.getSDConfiguration();
if(SDConfiguration.sd_status && (SDConfiguration.sd_status != target.orignalSdStatus())){
if(SDConfiguration.sd_status != '1'){
target.sdStatusInfo("sd_card_status_info_" + SDConfiguration.sd_status);
target.sdStatus(SDConfiguration.sd_status);
target.orignalSdStatus(SDConfiguration.sd_status);
$("#sd_card_status_info").translate();
}else{
clearTimer();
clearValidateMsg();
init();
}
}
}
}
// 表单submit事件处理
target.save = function(){
showLoading('waiting');
target.checkEnable(false);
if(target.orignalMode() == target.selectedMode()){
showAlert("setting_no_change");
} else {
service.setSdCardMode({
mode : target.selectedMode()
}, function(info) {
if(info.result){
target.orignalMode(target.selectedMode());
if(info.result == "processing"){
errorOverlay("sd_usb_forbidden");
}else{
successOverlay();
}
} else {
if (target.selectedMode() == "0") {
errorOverlay("sd_not_support");
} else {
errorOverlay();
}
}
}, function(error) {
if (target.selectedMode() == "0") {
errorOverlay("sd_not_support");
} else {
errorOverlay();
}
});
}
target.checkEnable(true);
return true;
};
// 保存详细配置信息
target.saveShareDetailConfig = function() {
showLoading('waiting');
target.checkEnable(false);
var param = {
share_status : target.selectedShareEnable(),
share_auth : target.selectedAccessType(),
share_file : basePath + target.pathToShare()
};
if (target.selectedShareEnable() == "0") {
setSdCardSharing(param);
} else {
service.checkFileExists({
"path" : param.share_file
}, function(info) {
if (info.status != "exist" && info.status != "processing") {
errorOverlay("sd_card_share_setting_" + info.status);
} else {
setSdCardSharing(param);
}
}, function(){
errorOverlay();
});
}
target.checkEnable(true);
return true;
}
// 设置SD卡共享信息
function setSdCardSharing(param){
service.setSdCardSharing(param, function(result) {
if (isErrorObject(result)) {
if (result.errorType == "no_sdcard") {
errorOverlay("sd_card_share_setting_no_sdcard");
} else {
errorOverlay();
}
} else {
successOverlay();
}
});
}
}
// 将配置的option项转换成Option数组
// {Array} configItem [{name: "name1", value: "val1"},{name: "name2", value: "val2"}]
function getOptionArray(configItem) {
var arr = [];
for ( var i = 0; i < configItem.length; i++) {
arr.push(new Option(configItem.name, configItem.value));
}
return arr;
}
function init() {
var container = $('#container')[0];
ko.cleanNode(container);
var fwVm = new SDCardViewModel();
ko.applyBindings(fwVm, container);
$("#sd_card_status_info").translate();
$('#sdmode_form').validate({
submitHandler : function() {
fwVm.save();
}
});
$('#httpshare_form').validate({
submitHandler : function() {
fwVm.saveShareDetailConfig();
},
rules : {
path_to_share : "check_file_path"
}
});
}
return {
init : init
};
});
// SD卡 HttpShare模块
define("sd_httpshare","jquery underscore jq_fileinput set service knockout".split(" ") ,
function($, _, fileinput, config, service, ko) {
// 每页记录条数
// 不能够设置每页数据个数,默认:10
// 默认值不可修改
var perPage = 10;
// 当前页
var activePage = 1;
// 当前目录,默认根目录""
var currentPath = "";
// 基目录。是否需要显示给用户?用户友好度
var basePath = config.SD_BASE_PATH;
// 前置路径,发现有的设备会将sd卡数据显示在web目录
// prePath = "/usr/conf/web";
var prePath = "";
// 是否隐藏重命名按钮
var readwrite = true;
// 文件列表模板
var sdFileItemTmpl = null;
// 分页模板
var pagerTmpl = null;
// 配置信息原始状态
var originalStatus = null;
var zoneOffsetSeconds = new Date().getTimezoneOffset() * 60;
var shareFilePath = '';
var sdIsUploading = false;//SD卡是否正在上传文件
// 生成分页数据数组
// @method generatePager
// @param {Integer} totalSize 总记录数
// @param {Integer} perPageNum 每页记录条数
// @param {Integer} currentPage 当前页
// @return {Array} 分页数据数组
function generatePager(totalSize, perPageNum, currentPage) {
if (totalSize == 0) {
return [];
}
var pagersArr = [];
var totalPages = getTotalPages(totalSize, perPageNum);
pagersArr.push({
pageNum: currentPage - 1,
isActive: false,
isPrev: true,
isNext: false,
isDot: false
});
if (currentPage == 6) {
pagersArr.push({
pageNum: 1,
isActive: false,
isPrev: false,
isNext: false,
isDot: false
});
} else if (currentPage > 5) {
pagersArr.push({
pageNum: 1,
isActive: false,
isPrev: false,
isNext: false,
isDot: false
});
pagersArr.push({
pageNum: 0,
isPrev: false,
isNext: false,
isActive: false,
isDot: true
});
}
var i;
var startPage = currentPage - 4 > 0 ? currentPage - 4 : 1;
var endPage = currentPage + 4;
for (i = startPage; i <= endPage && i <= totalPages; i++) {
pagersArr.push({
pageNum: i,
isActive: i == currentPage,
isPrev: false,
isNext: false,
isDot: false
});
}
if (currentPage + 5 == totalPages) {
pagersArr.push({
pageNum: totalPages,
isPrev: false,
isNext: false,
isActive: false,
isDot: false
});
} else if (currentPage + 3 <= totalPages && i - 1 != totalPages) {
pagersArr.push({
pageNum: 0,
isPrev: false,
isNext: false,
isActive: false,
isDot: true
});
pagersArr.push({
pageNum: totalPages,
isPrev: false,
isNext: false,
isActive: false,
isDot: false
});
}
pagersArr.push({
pageNum: parseInt(currentPage, 10) + 1,
isPrev: false,
isNext: true,
isActive: false,
isDot: false
});
return pagersArr;
}
function getTotalPages(total, perPage){
var totalPages = Math.floor(total / perPage);
if (total % perPage != 0) {
totalPages++;
}
return totalPages;
}
// 整理文件列表数据,并用模板显示
function showFileSet(files) {
var i = 0;
var shownFiles = $.map(files, function(n) {
var obj = {
fileName : HTMLEncode(n.fileName),
fileType : n.attribute == 'document' ? 'folder' : getFileType(n.fileName),
fileSize : getDisplayVolume(n.size, false),
filePath : basePath + getCurrentPath() + "/" + n.fileName,
lastUpdateTime : transUnixTime((parseInt(n.lastUpdateTime, 10) + zoneOffsetSeconds) * 1000),
trClass : i % 2 == 0 ? "even" : "",
readwrite : readwrite
};
i++;
return obj;
});
if(sdFileItemTmpl == null){
sdFileItemTmpl = $.template("sdFileItemTmpl", $("#sdFileItemTmpl"));
}
$("#fileList_container").html($.tmpl("sdFileItemTmpl", {data: shownFiles}));
}
// HttpShareViewModel
function HttpShareViewModel() {
var isGuest = false;
if(window.location.hash == "#httpshare_guest"){
isGuest = true;
}
readwrite = true;
activePage = 1;
setCurrentPath('');
basePath = config.SD_BASE_PATH;
showLoading('waiting');
service.getSDConfiguration({}, function(data){
originalStatus = data;
shareFilePath = data.share_file;
if(shareFilePath.charAt(shareFilePath.length - 1) == '/'){//如果路径中有/,则去掉
shareFilePath = shareFilePath.substring(0, shareFilePath.length - 1);
}
if(data.sd_status == '1' && data.sd_mode == '0'){ //共享
if(isGuest && data.share_status == '1'){// guest and share
basePath = shareFilePath;
if(data.share_auth == '0'){ // readonly
readwrite = false;
$("#uploadSection, #delete_file_button, .sd_guest_hide_th", "#httpshare_form").hide();
}else{
$("#uploadSection, #delete_file_button, .sd_guest_hide_th", "#httpshare_form").show();
}
$("#go_to_login_button").removeClass("hide");
$('#sd_menu').hide();
$('.form-note').hide();
if ($(".customfile").length == 0) {
$("#fileField").customFileInput();
}
pagerItemClickHandler(1);
} else if(isGuest && data.share_status == '0'){ // guest not share
$(".form-body .content", "#httpshare_form").hide().remove();
$(".form-title", "#httpshare_form").attr("data-trans", "httpshare").html($.i18n.prop("httpshare"));
$(".form-note", "#httpshare_form").attr("data-trans", "note_http_share_cannot_access").html($.i18n.prop("note_http_share_cannot_access"));
hideLoading();
} else {
if ($(".customfile").length == 0) {
$("#fileField").customFileInput();
}
pagerItemClickHandler(1);
}
} else { // usb
$(".form-body .content", "#httpshare_form").hide().remove();
$(".form-title", "#httpshare_form").attr("data-trans", "httpshare").html($.i18n.prop("httpshare"));
$(".form-note", "#httpshare_form").attr("data-trans", "note_http_share_usb_access").html($.i18n.prop("note_http_share_usb_access"));
$(".form-note", "#httpshare_form").addClass("margintop10");
hideLoading();
}
}, function(){
errorOverlay();
$(".form-body .content", "#httpshare_form").hide().remove();
$(".form-title", "#httpshare_form").attr("data-trans", "httpshare").html($.i18n.prop("httpshare"));
$(".form-note", "#httpshare_form").attr("data-trans", "note_http_share_cannot_access").html($.i18n.prop("note_http_share_cannot_access"));
});
addInterval(function(){
!sdIsUploading && self.checkSdStatus();
}, 3000);
// T卡热插拔时状态监控,拔插卡重刷界面
self.checkSdStatus = function(){
var data = service.getSDConfiguration();
if(data.sd_status && (data.sd_status != originalStatus.sd_status)){
if(data.sd_status == '1'){
window.location.reload();
}else{
clearTimer();
clearValidateMsg();
init();
}
}
}
}
// 页码点击事件处理
pagerItemClickHandler = function(num) {
activePage = num;
refreshFileList(getCurrentPath(), activePage);
};
function checkConfiguration(){
var data = service.getSDConfiguration();
if(!_.isEqual(originalStatus, data)){
showAlert('sd_config_changed_reload', function(){
init();
});
return false;
}
return true;
}
//检查操作路径是否为共享路径,如果是共享路径,给用户提示
function inSharePath(path, wording) {
var tmpShareFilePath = shareFilePath + '/';
var tmpPath = path + '/';
if (originalStatus.share_status == '1' && shareFilePath != '' && shareFilePath != '/' && tmpShareFilePath.indexOf(tmpPath) != -1) {
showAlert(wording);
return true;
}
return false;
}
// 进入文件夹
enterFolder = function(name) {
if(!checkConfiguration()){
return false;
}
var path;
if (name == "") {
path = "";
} else {
path = getCurrentPath() + '/' + name;
}
refreshFileList(path, 1);
return true;
};
// 回到上一级目录
backFolder = function() {
if(!checkConfiguration()){
return false;
}
var path = getCurrentPath().substring(0, getCurrentPath().lastIndexOf("/"));
refreshFileList(path, 1);
return true;
};
// 更新按钮状态
refreshBtnsStatus = function() {
if (getCurrentPath() == "") {
$("#rootBtnLi, #backBtnLi").hide();
} else {
$("#rootBtnLi, #backBtnLi").show();
}
if (readwrite) {
$("#createNewFolderLi").hide();
$("#createNewFolderLi").find(".error").hide();
$("#newFolderBtnLi").show();
$("#newFolderName").val('');
$("#createNewFolderErrorLabel").removeAttr('data-trans').text('');
} else {
$("#newFolderBtnLi, #createNewFolderLi").hide().remove();
}
checkDeleteBtnStatus();
};
// 刷新文件列表
refreshFileList = function(path, index, alertShown) {
if(!alertShown){
showLoading('waiting');
}
service.getFileList({
path : prePath + basePath + path,
index : index
}, function(data) {
if (isErrorObject(data)) {
showAlert(data.errorType);
return;
}
setCurrentPath(path);
$("#sd_path").val(path);
activePage = index;
totalSize = data.totalRecord;
showFileSet(data.details);
pagination(totalSize); //测试分页时可以将此处totalSize调大
refreshBtnsStatus();
updateSdMemorySizes();
if(!alertShown){
hideLoading();
}
});
};
// 显示新建文件夹按钮点击事件
openCreateNewFolderClickHandler = function() {
$("#newFolderBtnLi").hide();
$("#newFolderName").show();
$("#createNewFolderLi").show();
};
// 取消显示新建文件夹按钮点击事件
cancelCreateNewFolderClickHandler = function() {
$("#createNewFolderLi").hide();
$("#newFolderName").val('');
$("#newFolderBtnLi").show();
$("#createNewFolderLi").find(".error").hide();
};
// 新建文件夹按钮点击事件
createNewFolderClickHandler = function() {
if(!checkConfiguration()){
return false;
}
var newFolderName = $.trim($("#newFolderName").val());
var newPath = prePath + basePath + getCurrentPath() + "/" + newFolderName;
showLoading('creating');
service.checkFileExists({
path : newPath
}, function(data1) {
if (data1.status == "noexist" || data1.status == "processing") {
service.createFolder({
path : newPath
}, function(data) {
if (isErrorObject(data)) {
showAlert(data.errorType);
return false;
} else {
successOverlay();
refreshFileList(getCurrentPath(), 1);
}
});
} else if (data1.status == "no_sdcard") {
showAlert("no_sdcard", function(){
window.location.reload();
});
} else if (data1.status == "exist") {
$("#createNewFolderErrorLabel").attr('data-trans', 'sd_card_share_setting_exist').text($.i18n.prop("sd_card_share_setting_exist"));
hideLoading();
}
}, function(){
errorOverlay();
});
return true;
};
// 重命名按钮点击事件
renameBtnClickHandler = function(oldName) {
var oldPath = prePath + basePath + getCurrentPath() + "/" + oldName;
if(inSharePath(oldPath, 'sd_share_path_cant_rename')){
return false;
}
showPrompt("sd_card_folder_name_is_null", function() {
renamePromptCallback(oldName);
}, 160, oldName, checkPromptInput);
};
function renamePromptCallback(oldName){
if(!checkConfiguration()){
return false;
}
var promptInput = $("div#confirm div.promptDiv input#promptInput");
var newFolderName = $.trim(promptInput.val());
var newPath = prePath + basePath + getCurrentPath() + "/" + newFolderName;
service.checkFileExists({
path : newPath
}, function(data1) {
if (data1.status == "noexist" || data1.status == "processing") {
hideLoadingButtons();
var oldPath = prePath + basePath + getCurrentPath() + "/" + oldName;
service.fileRename({
oldPath : oldPath,
newPath : newPath,
path : prePath + basePath + getCurrentPath()
}, function(data) {
if (isErrorObject(data)) {
showAlert($.i18n.prop(data.errorType));
if(data.errorType == "no_exist"){
var alertShown = true;
refreshFileList(getCurrentPath(), 1, alertShown);
} else if(data.errorType == "processing"){
//
}
} else {
refreshFileList(getCurrentPath(), 1);
successOverlay();
}
showLoadingButtons();
return true;
});
} else if (data1.status == "no_sdcard") {
showAlert("no_sdcard", function(){
window.location.reload();
});
return false;
} else if (data1.status == "exist") {
$(".promptErrorLabel").text($.i18n.prop("sd_card_share_setting_exist"));
return false;
}
return true;
}, function(){
errorOverlay();
});
return false;
}
// Prompt弹出框INPUT校验函数
function checkPromptInput(){
var promptInput = $("div#confirm div.promptDiv input#promptInput");
var newFileName = $.trim(promptInput.val());
var newPath = (prePath + basePath + getCurrentPath() + "/" + newFileName).replace("//", "/");
var checkResult = checkFileNameAndPath(newFileName, newPath);
if (1 == checkResult) {
$(".promptErrorLabel").text($.i18n.prop("sd_upload_rename_null"));//tip filena is null
return false;
}else if (2 == checkResult) {
$(".promptErrorLabel").text($.i18n.prop("sd_card_path_too_long"));
return false;
}else if (3 == checkResult) {
$(".promptErrorLabel").text($.i18n.prop("check_file_path"));
return false;
}else{
$(".promptErrorLabel").text("");
return true;
}
return true;;
}
hideLoadingButtons = function () {
$(".buttons", "#confirm").hide();
};
showLoadingButtons = function () {
$(".buttons", "#confirm").show();
};
// 删除按钮点击事件
deleteBtnClickHandler = function() {
if(!checkConfiguration()){
return false;
}
var files = $("input:checkbox:checked", "#fileList_container");
var fileNames = "";
if (!files || files.length == 0) {
return false;
}
var hasSharePath = false;
$.each(files, function (i, n) {
var theFile = $(n).val();
if (inSharePath(prePath + basePath + getCurrentPath() + "/" + theFile, {msg: 'sd_share_path_cant_delete', params: [theFile]})) {
hasSharePath = true;
return false;
}
return true;
});
if (hasSharePath) {
return false;
}
showConfirm("confirm_data_delete", function(){
$.each(files, function(i, n) {
fileNames += $(n).val() + "*";
});
var thePath = prePath + basePath + getCurrentPath();
service.deleteFilesAndFolders({
path : thePath,
names : fileNames
}, function(data) {
if (data.status == "failure") {
showAlert("delete_folder_failure");
}
else if(data.status == "no_sdcard"){
showAlert("no_sdcard");
}
else if(data.status == "processing"){
showAlert("sd_file_processing_cant_delete");
}
else if(data.status == "success"){
successOverlay();
}
refreshFileList(getCurrentPath(), 1);
}, function(){
errorOverlay();
});
});
return true;
};
// 文件上传按钮点击事件
fileUploadSubmitClickHandler = function(ifReName) {
if(ifReName){
var fileName = $.trim($("div#confirm div.promptDiv input#promptInput").val());
}else{
var fileName = $(".customfile").attr('title');
}
var newPath = (basePath + getCurrentPath() + "/" + fileName).replace("//", "/");
var fileSize = getFileSize($("#fileField")[0]);
if(!checkuploadFileNameAndPath(fileName, newPath, fileSize)){
return false;
}
doCheckAndUpload(fileName, newPath, fileSize);
};
function doCheckAndUpload(fileName, newPath, fileSize){
service.getSdMemorySizes({}, function(data) {
if (isErrorObject(data)) {
showAlert(data.errorType);
return false;
}
if (data.availableMemorySize < fileSize) {
showAlert("sd_upload_space_not_enough");
return false;
}
$.modal.close();
showLoading('uploading', '<span data-trans="note_uploading_not_refresh">' + $.i18n.prop('note_uploading_not_refresh') + '</span>');
service.checkFileExists({
path : newPath
}, function(data1) {
if (data1.status == "noexist") {
$("#fileUploadForm").attr("action", "/cgi-bin/httpshare/" + URLEncodeComponent(fileName));
var currentTime = new Date().getTime();
$("#path_SD_CARD_time").val(transUnixTime(currentTime));
$("#path_SD_CARD_time_unix").val(Math.round((currentTime - zoneOffsetSeconds * 1000) / 1e3));
if(!iframeLoadBinded){
bindIframeLoad();
}
sdIsUploading = true;
$("#fileUploadForm").submit();
} else if (data1.status == "no_sdcard") {
showAlert("no_sdcard", function(){
window.location.reload();
});
} else if (data1.status == "processing") {
showAlert("sd_upload_file_is_downloading");//("system is downloading,try later!");
}else if (data1.status == "exist") {
showPrompt("sd_upload_rename",function(){
fileUploadSubmitClickHandler(true);
},160, fileName, checkPromptInput, clearUploadInput);
}
}, function(){
errorOverlay();
});
return true;
});
}
var iframeLoadBinded = false;
function bindIframeLoad(){
iframeLoadBinded = true;
$('#fileUploadIframe').load(function() {
sdIsUploading = false;
var txt = $('#fileUploadIframe').contents().find("body").html().toLowerCase();
var alertShown = false;
if (txt.indexOf('success') != -1) {
successOverlay();
} else if (txt.indexOf('space_not_enough') != -1) {
alertShown = true;
showAlert('sd_upload_space_not_enough');
} else if (txt.indexOf('data_lost') != -1) {
alertShown = true;
showAlert('sd_upload_data_lost');
} else {
errorOverlay();
}
clearUploadInput();
refreshFileList(getCurrentPath(), 1, alertShown);
});
}
// 更新SD卡容量显示数据
updateSdMemorySizes = function() {
service.getSdMemorySizes({}, function(data) {
if (isErrorObject(data)) {
showAlert(data.errorType);
return false;
}
var total = getDisplayVolume(data.totalMemorySize, false);
var used = getDisplayVolume(data.totalMemorySize - data.availableMemorySize, false);
$("#sd_volumn_used").text(used);
$("#sd_volumn_total").text(total);
return true;
});
};
// 翻页
pagination = function(fileTotalSize) {
var pagers = generatePager(fileTotalSize, perPage, parseInt(activePage, 10));
if(pagerTmpl == null){
pagerTmpl = $.template("pagerTmpl", $("#pagerTmpl"));
}
$(".pager", "#fileListButtonSection").html($.tmpl("pagerTmpl", {data: {pagers : pagers, total : getTotalPages(fileTotalSize, perPage)}}));
renderCheckbox();
$(".content", "#httpshare_form").translate();
};
// 下载文件是检查文件路径是否包含特殊字符
checkFilePathForDownload = function(path){
if(!checkConfiguration()){
return false;
}
var idx = path.lastIndexOf('/');
var prePath = path.substring(0, idx+1);
var name = path.substring(idx+1, path.length);
if(checkFileNameChars(prePath, true) && checkFileNameChars(name, false)){
return true;
}
showAlert('sd_card_invalid_chars_cant_download');
return false;
};
gotoLogin = function(){
window.location.href="#entry";
};
// 事件绑定
function bindEvent(){
$('#createNewFolderForm').validate({
submitHandler : function() {
createNewFolderClickHandler();
},
rules : {
newFolderName : {sd_card_path_too_long:true,check_filefold_name: true}
}
});
$("p.checkbox", "#httpshare_form").die().live('click', function () {
addTimeout(function () {
checkDeleteBtnStatus();
}, 100);
});
$(".icon-download", "#httpshare_form").die().live("click", function () {
return checkFilePathForDownload($(this).attr("filelocal"));
});
$(".folderTd", "#httpshare_form").die().live("click", function () {
return enterFolder($(this).attr("filename"));
});
$(".fileRename", "#httpshare_form").die().live("click", function () {
return renameBtnClickHandler($(this).attr("filename"));
});
iframeLoadBinded = false;
}
// 刷新删除按钮状态
function checkDeleteBtnStatus(){
var checkedItem = $("p.checkbox.checkbox_selected", '#fileListSection');
if(checkedItem.length > 0){
enableBtn($('#delete_file_button'));
} else {
disableBtn($('#delete_file_button'));
}
}
// 文件名和路径检查
function checkFileNameAndPath(filename, path) {
if (filename == "" || filename.length > 25) {
return 1;
}
if (path.length >= 200) {
return 2;
}
if (!checkFileNameChars(filename, false)) {
return 3;
}
}
// 文件名特殊字符检查
function checkFileNameChars(filename, isIncludePath) {
var ASCStringInvalid = '+/:*?<>\"\'\\|#&`~';
if(isIncludePath){
ASCStringInvalid = '+:*?<>\"\'\\|#&`~';
}
var flag = false;
var dotFlag = false;
var reg = /^\.+$/;
for ( var filenamelen = 0; filenamelen < filename.length; filenamelen++) {
for ( var ACSlen = 0; ACSlen < ASCStringInvalid.length; ACSlen++) {
if (filename.charAt(filenamelen) == ASCStringInvalid.charAt(ACSlen)) {
flag = true;
break;
}
}
if (reg.test(filename)) {
dotFlag = true;
}
if (flag || dotFlag) {
return false;
}
}
return true;
}
function checkuploadFileNameAndPath(fileName, newPath, fileSize){
if(!checkConfiguration()){
return false;
}
if (typeof fileName == "undefined" || fileName == '' || fileName == $.i18n.prop("no_file_selected")) {
showAlert("sd_no_file_selected");
return false;
}
if (newPath.length >= 200) {
showAlert("sd_card_path_too_long");
return false;
}
if (fileSize/1024/1024/1024 > 2){ //no more than 2G
showAlert("sd_file_size_too_big");
return false;
}
if (fileName.indexOf('*') >= 0){ //no *
showAlert("sd_file_name_invalid");
return false;
}
return true;
}
//清空上传控件
function clearUploadInput(){
$("#fileField").closest('.customfile').before('<input id="fileField" name="filename" maxlength="200" type="file" dir="ltr"/>').remove();
addTimeout(function(){
$("#fileField").customFileInput();
}, 0);
$("#uploadBtn", "#uploadSection").attr("data-trans", "browse_btn").html($.i18n.prop('browse_btn'));
$(".customfile", "#uploadSection").removeAttr("title");
$(".customfile span.customfile-feedback", "#uploadSection")
.html('<span data-trans="no_file_selected">'+$.i18n.prop('no_file_selected')+'</span>')
.attr('class', 'customfile-feedback');
}
function getCurrentPath(){
return currentPath;
}
function setCurrentPath(path){
if(path.lastIndexOf("/") == path.length - 1){
currentPath = path.substring(0, path.length - 1);
} else {
currentPath = path;
}
}
function getFileSize(object){
var isIE = /msie/i.test(navigator.userAgent) && !window.opera;
if (isIE) { //如果是ie
var objValue = object.value;
try {
var fileSysObj = new ActiveXObject("Scripting.FileSystemObject");
fileLenth = parseInt(fileSysObj.GetFile(objValue).size);
} catch (e) { //('IE内核取不到长度');
fileLenth = 1;
}
}else{ //其他
try{//对于非IE获得要上传文件的大小
fileLenth = parseInt(object.files[0].size);
}catch (e) {
fileLenth=1; //获取不到取-1
}
}
return fileLenth;
}
function init() {
var container = $('#container')[0];
ko.cleanNode(container);
var fwVm = new HttpShareViewModel();
ko.applyBindings(fwVm, container);
bindEvent();
}
jQuery.validator.addMethod("check_filefold_name", function(value, element, param) {
var result = checkFileNameChars(value, false);
return this.optional(element) || result;
});
jQuery.validator.addMethod("sd_card_path_too_long", function(value, element, param) {
var newFolderName = $.trim($("#newFolderName").val());
var newPath = prePath + basePath + getCurrentPath() + "/" + newFolderName;
var result = true;
if (newPath.length >= 200) {
result = false;
}
return this.optional(element) || result;
});
return {
init : init
};
});
define("ussd","set service knockout jquery".split(" "), function (set, fnc, libko, libjq) {
var time_interval = 0;
var initFlg = true;
var numTimeout = 0;
var replyFlg = false;
var ussd_action = 1;
function init() {
var container = libjq('#container')[0];
libko.cleanNode(container);
var vm = new vmUSSD();
libko.applyBindings(vm, container);
}
var USSDLocation = {
SEND: 0,
REPLY: 1
};
function vmUSSD() {
var target = this;
target.hasUpdateCheck = set.HAS_UPDATE_CHECK;
target.ussd_action = libko.observable(ussd_action);
target.USSDLocation = libko.observable(USSDLocation.SEND);
target.USSDReply = libko.observable("");
target.USSDSend = libko.observable("");
target.hasDdns = set.DDNS_SUPPORT;
function checkTimeout() {
if (replyFlg) {
replyFlg = true;
window.clearInterval(time_interval);
numTimeout = 0;
} else {
if (numTimeout > 28) {
replyFlg = true;
window.clearInterval(time_interval);
showAlert("ussd_operation_timeout");
target.USSDReply("");
target.USSDSend("");
target.USSDLocation(USSDLocation.SEND);
numTimeout = 0;
} else {
numTimeout++;
}
}
};
target.sendToNet = function () {
numTimeout = 0;
window.clearInterval(time_interval);
var command = target.USSDSend();
var idx_t = 0;
var indexChar;
for (idx_t = 0; idx_t < command.length; ) { //corem0418, delte left blanks and right blanks
indexChar = command.charAt(idx_t);
if (indexChar == ' ') {
if (command.length > 1) {
command = command.substr(idx_t + 1);
} else {
command = ''; // string is filled with blank
break;
}
} else {
break;
}
}
for (idx_t = command.length - 1; idx_t >= 0 && command.length > 0; --idx_t) {
indexChar = command.charAt(idx_t);
if (indexChar == ' ') {
if (command.length > 1) {
command = command.substr(0, idx_t);
} else {
command = ''; // string is filled with blank
break;
}
} else {
break;
}
}
if (('string' != typeof(command)) || ('' == command)) {
showAlert("ussd_error_input");
return;
}
showLoading('waiting');
var tmp = {};
tmp.operator = "ussd_send";
tmp.strUSSDCommand = command;
tmp.sendOrReply = "send";
fnc.getUSSDResponse(tmp, function (result, content) {
hideLoading();
if (result) {
USSD_reset();
target.USSDLocation(USSDLocation.REPLY);
target.ussd_action(content.ussd_action);
libjq("#USSD_Content").val(decodeMessage(content.data, true));
replyFlg = false;
numTimeout = 0;
} else {
showAlert(content);
}
});
};
target.replyToNet = function () {
numTimeout = 0;
window.clearInterval(time_interval);
var command = target.USSDReply();
var idx_t = 0;
var indexChar;
for (idx_t = 0; idx_t < command.length; ) { //corem0418, delte left blanks and right blanks
indexChar = command.charAt(idx_t);
if (indexChar == ' ') {
if (command.length > 1) {
command = command.substr(idx_t + 1);
} else {
command = ''; // string is filled with blank
break;
}
} else {
break;
}
}
for (idx_t = command.length - 1; idx_t >= 0 && command.length > 0; --idx_t) {
indexChar = command.charAt(idx_t);
if (indexChar == ' ') {
if (command.length > 1) {
command = command.substr(0, idx_t);
} else {
command = ''; // string is filled with blank
break;
}
} else {
break;
}
}
if (('string' != typeof(command)) || ('' == command)) {
showAlert("ussd_error_input");
return;
}
showLoading('waiting');
var tmp = {};
tmp.operator = "ussd_reply";
tmp.strUSSDCommand = command;
tmp.sendOrReply = "reply";
fnc.getUSSDResponse(tmp, function (result, content) {
hideLoading();
if (result) {
target.ussd_action(content.ussd_action);
libjq("#USSD_Content").val(decodeMessage(content.data, true));
replyFlg = false;
USSD_reset();
numTimeout = 0;
} else {
showAlert(content);
}
});
};
USSD_reset = function () {
target.USSDReply("");
target.USSDSend("");
};
USSD_cancel = function () {
fnc.USSDReplyCancel(function (result) {});
};
target.noReplyCancel = function () {
numTimeout = 0;
replyFlg = true;
window.clearInterval(time_interval);
fnc.USSDReplyCancel(function (result) {
if (result) {
USSD_reset();
target.USSDLocation(USSDLocation.SEND);
} else {
showAlert("ussd_fail");
}
});
};
//如果首次进入USSD菜单,先发送USSD取消命令,进行初始化
if (initFlg) {
USSD_cancel();
initFlg = false;
}
}
return {
init: init
};
});
define("phonebook","underscore jquery knockout set service jq_chosen".split(" "),
function (_, $, ko, config, service, chosen) {
var locationValue = {
SIM: "0",
DEVICE: "1"
};
var pageState = {
LIST: 0,
NEW: 1,
EDIT: 2,
VIEW: 3,
SEND_MSM: 4
};
//存储位置选项
var saveLocationOpts = function (hasSIMCard) {
var opts = [];
opts.push(new Option($.i18n.prop("device_book"), locationValue.DEVICE));
if (hasSIMCard) {
opts.push(new Option($.i18n.prop("sim_book"), locationValue.SIM));
}
return opts;
};
function getCurrentGroup() {
return $("#selectedFilterGroup").val();
}
//列表模板对应的Columns
var templateColumns = {
cardColumns: [{
rowText: "index",
display: false
}, {
rowText: "name"
}, {
rowText: "mobile_phone_number"
}, {
rowText: "home_phone_number"
}
],
listColumns: [{
columnType: "checkbox",
headerTextTrans: "number",
rowText: "index",
width: "10%"
}, {
headerTextTrans: "name",
rowText: "name",
width: "25%",
sortable: true
}, {
columnType: "image",
headerTextTrans: "save_location",
rowText: "imgLocation",
width: "20%",
sortable: true
}, {
headerTextTrans: "mobile_phone_number",
rowText: "mobile_phone_number",
width: "30%",
sortable: true
}, {
headerTextTrans: "group",
rowText: "transGroup",
width: "15%",
sortable: true,
needTrans: true
}
]
};
//分组选项
var groupOpts = function () {
var opts = [];
opts.push(new Option($.i18n.prop("common"), "common"));
opts.push(new Option($.i18n.prop("family"), "family"));
opts.push(new Option($.i18n.prop("friend"), "friend"));
opts.push(new Option($.i18n.prop("colleague"), "colleague"));
return opts;
};
var _phoneBookStopSMSSending = false;
function pbViewMode() {
var target = this;
//property for common
target.pageState = ko.observable(pageState.LIST);
target.initFail = ko.observable(true);
target.hasSms = ko.observable(config.HAS_SMS);
var smsHasCapability = true;
var smsLeftCount = 0;
//property for list
var capacity = {
simMaxNameLen: 0,
simMaxNumberLen: 0,
IsSimCardFull: true,
IsDeviceFull: true,
Used: 0,
Capacity: 0,
Ratio: "(0/0)"
};
target.capacity = ko.observable(capacity);
target.phoneBookCapacity = ko.observable(capacity.Ratio);
target.books = ko.observableArray();
//列表模板创建
target.gridTemplate = new ko.simpleGrid.viewModel({
tableClass: "table-fixed",
data: target.books(),
idName: "index",
columns: templateColumns.listColumns,
defaultSortField: "name",
defaultSortDirection: "ASC",
pageSize: 10,
tmplType: 'list',
searchColumns: ["name", "mobile_phone_number"],
primaryColumn: "mobile_phone_number",
showPager: true,
rowClickHandler: function (dataId) {
target.editBooks(dataId, 'view');
},
deleteHandler: function (dataId) {
target.deleteOneBook(dataId);
},
changeTemplateHandler: function () {
target.changeTemplate();
}
});
//property for edit or new
target.locations = ko.observableArray();
target.originLocation = "";
target.selectedLocation = ko.observable(locationValue.DEVICE);
target.locationTrans = ko.observable();
target.locationTransText = ko.observable();
target.index = ko.observable(-1);
target.name = ko.observable("");
target.nameMaxLength = ko.computed(function () {
var max = getNameMaxLength();
var name = target.name().substring(0, max);
target.name(name);
return getNameMaxLength();
});
function getNameMaxLength() {
var max = 22;
if (target.selectedLocation() == locationValue.DEVICE) {
var encodeType = getEncodeType(target.name());
if ("UNICODE" == encodeType.encodeType || encodeType.extendLen > 0) {
max = 11;
} else {
max = 22;
}
//max = 22;
} else {
//对"^"需要按照2个字符处理
var encodeType = getEncodeType(target.name());
if ("UNICODE" == encodeType.encodeType || encodeType.extendLen > 0) {
max = (target.capacity().simMaxNameLen / 2) - 1;
} else {
max = target.capacity().simMaxNameLen;
}
}
return max;
}
target.mobile_phone_number = ko.observable("");
target.mobileMaxLength = ko.computed(function () {
var max = getMobileMaxLength();
var mobileNumber = target.mobile_phone_number().substring(0, max);
target.mobile_phone_number(mobileNumber);
return getMobileMaxLength();
});
function getMobileMaxLength() {
var max = 40;
if (target.selectedLocation() == locationValue.DEVICE) {
max = 40;
} else {
max = target.capacity().simMaxNumberLen;
}
return max;
}
target.home_phone_number = ko.observable("");
target.office_phone_number = ko.observable("");
target.mail = ko.observable("");
target.transEditAreaTitle = ko.dependentObservable(function () {
var state = target.pageState();
if (state == pageState.EDIT) {
return "edit";
} else if (state == pageState.NEW) {
return "new";
} else if (state == pageState.VIEW) {
return "view";
}
});
var groups = groupOpts();
target.groups = ko.observableArray(groups);
target.selectedGroup = ko.observable();
target.groupTrans = ko.observable();
target.groupTransText = ko.observable();
target.selectedFilterGroup = ko.observable('all');
target.selectedFilterGroupChangeHandler = function () {
target.selectedFilterGroup($("#selectedFilterGroup").val());
getPhoneBookReady();
};
//property for sendMessage
target.showErrorInfo = ko.observable(false);
target.messageContent = ko.observable("");
target.messageCount = ko.computed(function () {
var msgInput = $("#txtSmsContent", "#sendMessage");
var msgInputDom = msgInput[0];
target.messageContent();
var strValue = msgInput.val();
var encodeType = getEncodeType(strValue);
var maxLength = encodeType.encodeType == 'UNICODE' ? 335 : 765;
if (strValue.length + encodeType.extendLen > maxLength) {
var scrollTop = msgInputDom.scrollTop;
var insertPos = getInsertPos(msgInputDom);
var moreLen = strValue.length + encodeType.extendLen - maxLength;
var insertPart = strValue.substr(insertPos - moreLen > 0 ? insertPos - moreLen : 0, moreLen);
var reversed = insertPart.split('').reverse();
var checkMore = 0;
var cutNum = 0;
for (var i = 0; i < reversed.length; i++) {
if (getEncodeType(reversed[i]).extendLen > 0) {
checkMore += 2;
} else {
checkMore++;
}
if (checkMore >= moreLen) {
cutNum = i + 1;
break;
}
}
var iInsertToStartLength = insertPos - cutNum;
target.messageContent(strValue.substr(0, iInsertToStartLength) + strValue.substr(insertPos));
if (target.messageContent().length > maxLength) {
target.messageContent(target.messageContent().substr(0, maxLength));
}
setInsertPos(msgInputDom, iInsertToStartLength);
msgInputDom.scrollTop = scrollTop;
}
pbDraftListener();
var newValue = $(msgInputDom).val();
var newEncodeType = getEncodeType(newValue);
var newMaxLength = newEncodeType.encodeType == 'UNICODE' ? 335 : 765;
if (newValue.length + newEncodeType.extendLen >= newMaxLength) {
$("#msgCount").addClass("colorRed");
} else {
$("#msgCount").removeClass("colorRed");
}
return "(" + (newValue.length + newEncodeType.extendLen) + "/" + newMaxLength + ")" + "(" + getSmsCount(newValue) + "/5)";
});
target.clear = function (isNeedInit) {
if (target.pageState() == pageState.SEND_MSM) {
smsPageCheckDraft(clearPhonebookForm, isNeedInit);
} else {
clearPhonebookForm(isNeedInit);
}
config.resetContentModifyValue();
};
//通过按钮返回列表状态事件处理
target.btnClear = function (isNeedInit) {
if (target.pageState() == pageState.SEND_MSM) {
smsPageCheckDraft(clearPhonebookForm, isNeedInit);
config.resetContentModifyValue();
} else if ((target.pageState() == pageState.NEW || target.pageState() == pageState.EDIT) && (target.preContent.location != target.selectedLocation()
|| target.preContent.name != target.name()
|| target.preContent.mobile_phone_number != target.mobile_phone_number()
|| target.preContent.home_phone_number != target.home_phone_number()
|| target.preContent.office_phone_number != target.office_phone_number()
|| target.preContent.mail != target.mail()
|| target.preContent.group != target.selectedGroup())) {
showConfirm("leave_page_info", {
ok: function () {
clearPhonebookForm(isNeedInit);
config.resetContentModifyValue();
},
no: function () {
return false;
}
});
} else {
clearPhonebookForm(isNeedInit);
config.resetContentModifyValue();
}
};
function clearPhonebookForm(isNeedInit) {
$("#frmPhoneBook").hide();
target.pageState(pageState.LIST);
target.index(-1);
target.name("");
target.mobile_phone_number("");
target.home_phone_number("");
target.office_phone_number("");
target.mail("");
target.messageContent("");
if (true == isNeedInit) {
refreshPage();
}
target.gridTemplate.clearAllChecked();
clearValidateMsg();
$("#books ").translate();
$("#frmPhoneBook").show();
}
//检查SIM卡状态
target.checkHasSIMCard = function (showMsg) {
var status = service.getStatusInfo();
if (status.simStatus != "modem_init_complete") {
if (showMsg) {
showAlert("sim_removed", function () {
target.pageState(pageState.LIST);
target.clear(true);
});
}
return false;
}
return true;
};
//保存电话本事件
target.save = function () {
var saveBook = function (index) {
var isSaveInSIM = (location == locationValue.SIM);
if (isSaveInSIM) {
if (!target.checkHasSIMCard(true)) {
return;
}
}
if (target.pageState() == pageState.NEW || (target.pageState() == pageState.EDIT && location != target.originLocation)) {
if (isSaveInSIM) {
if (target.capacity().IsSimCardFull) {
showAlert("sim_full");
return;
}
} else {
if (target.capacity().IsDeviceFull) {
showAlert("device_full");
return;
}
}
}
var name = target.name();
var mobile_phone_number = target.mobile_phone_number();
if ($.trim(name) == "" || $.trim(mobile_phone_number) == "") {
return;
}
showLoading('saving');
var params = {};
params.location = location;
params.index = index;
params.name = name;
params.mobile_phone_number = mobile_phone_number;
if (!isSaveInSIM) {
params.home_phone_number = target.home_phone_number();
params.office_phone_number = target.office_phone_number();
params.mail = target.mail();
params.group = target.selectedGroup();
}
if (target.selectedLocation() != target.originLocation) {
params.delId = target.index();
}
service.savePhoneBook(params, target.callback);
}
var location = target.selectedLocation();
var editIndex = (location == target.originLocation) ? target.index() : -1;
if (location == locationValue.SIM && target.originLocation == locationValue.DEVICE) {
showConfirm("change_device_to_sim_confirm", function () {
saveBook(editIndex);
});
} else {
saveBook(editIndex);
}
};
//打开添加电话本记录页面事件
target.openNewPage = function () {
if (target.pageState() == pageState.SEND_MSM) {
pbDraftListener();
smsPageCheckDraft(openNewPageAct, false);
} else if (target.pageState() == pageState.EDIT && (target.preContent.location != target.selectedLocation()
|| target.preContent.name != target.name()
|| target.preContent.mobile_phone_number != target.mobile_phone_number()
|| target.preContent.home_phone_number != target.home_phone_number()
|| target.preContent.office_phone_number != target.office_phone_number()
|| target.preContent.mail != target.mail()
|| target.preContent.group != target.selectedGroup())) {
showConfirm("leave_page_info", {
ok: function () {
openNewPageAct(false);
},
no: function () {
return false;
}
});
} else {
openNewPageAct(false);
}
};
function openNewPageAct(isNeedInit) {
target.pageState(pageState.NEW);
target.selectedLocation(locationValue.DEVICE);
target.originLocation = "";
if (target.checkHasSIMCard(false)) {
target.locations(saveLocationOpts(true));
} else {
target.locations(saveLocationOpts(false));
}
var group = getCurrentGroup();
if (group != "all") {
target.selectedGroup(group);
} else {
target.selectedGroup("common");
}
target.name("");
target.mobile_phone_number("");
target.home_phone_number("");
target.office_phone_number("");
target.mail("");
target.index(-1);
target.dynamicTranslate();
preOpenEditPage();
}
//打开添加电话本记录编辑页面事件
target.openPage = function (option) {
var index;
if (target.pageState() == pageState.LIST) {
var result = target.checkSelect(option);
if (!result.isCorrectData)
return;
index = result.selectedIds[0];
} else {
index = target.index();
}
target.editBooks(index, option);
};
//打开添加电话本记录查看页面事件
target.openViewPage = function () {
target.openPage("view");
};
//打开添加电话本记录查看页面事件
target.openEditPage = function () {
target.openPage("edit");
if ($.browser.mozilla) {
$("#txtName, #txtMobile").removeAttr('maxlength');
}
preOpenEditPage();
};
//编辑电话本事件处理
target.editBooks = function (selectedId, option) {
if (!selectedId)
return;
if (target.checkHasSIMCard(false)) {
target.locations(saveLocationOpts(true));
} else {
target.locations(saveLocationOpts(false));
}
var data = target.books();
for (var i = 0; i < data.length; i++) {
var n = data[i];
if (n.index == selectedId) {
target.index(n.index);
target.selectedLocation(n.location);
target.originLocation = n.location;
var trans = (n.location == locationValue.DEVICE) ? "device" : "sim";
target.locationTrans(trans);
var transText = $.i18n.prop("trans");
target.locationTransText(transText);
target.name(n.name);
target.mobile_phone_number(n.mobile_phone_number);
target.home_phone_number(n.home_phone_number);
target.office_phone_number(n.office_phone_number);
target.mail(n.mail);
target.selectedGroup(n.group);
target.groupTrans("group_" + n.group);
target.groupTransText($.i18n.prop(target.groupTrans()));
if (option == "edit") {
target.pageState(pageState.EDIT);
} else {
target.pageState(pageState.VIEW);
}
break;
}
}
target.dynamicTranslate();
if (target.selectedLocation() == locationValue.SIM) {
target.checkHasSIMCard(true)
}
};
//翻译编辑区域
target.dynamicTranslate = function () {
$("#container").translate();
};
//删除一条电话本事件处理(card模式使用)
target.deleteOneBook = function (index) {
showConfirm("confirm_pb_delete", function () {
showLoading('deleting');
var params = {};
params.indexs = [String(index)];
service.deletePhoneBooks(params, target.callback);
});
return false;
};
//删除一条电话本事件处理
target.deleteBook = function () {
target.deleteOneBook(target.index());
};
//删除一条或多条电话本事件处理
target.deleteBooks = function () {
var result = target.checkSelect("delete");
if (!result.isCorrectData)
return;
showConfirm("confirm_pb_delete", function () {
showLoading('deleting');
var params = {};
params.indexs = result.selectedIds;
service.deletePhoneBooks(params, target.callback);
});
};
//判断电话本选中
target.checkSelect = function (pState) {
var ids;
if ("send" == pState) {
ids = target.gridTemplate.selectedPrimaryValue();
} else {
ids = target.gridTemplate.selectedIds();
}
var isCorrectData = true;
if (ids.length == 0) {
showAlert("no_data_selected");
isCorrectData = false;
} else if ("edit" == pState || "view" == pState) {
if (ids.length > 1) {
showAlert("too_many_data_selected");
isCorrectData = false;
}
} else if ("send" == pState) {
if (ids.length > 5) {
showAlert("max_send_number");
isCorrectData = false;
}
}
return {
selectedIds: ids,
isCorrectData: isCorrectData
};
};
//全部删除电话本事件处理
target.deleteAllBooks = function () {
showConfirm("confirm_data_delete", function () {
showLoading('deleting');
var group = getCurrentGroup();
var params = {};
if (group == "all") {
params.location = 2;
service.deleteAllPhoneBooks(params, target.callback);
} else {
params.location = 3;
params.group = group;
service.deleteAllPhoneBooksByGroup(params, target.callback);
}
});
};
target.callback = function (data) {
if (data && data.result == "success") {
target.clear(true);
$("#books ").translate();
renderCheckbox();
successOverlay(null, true);
} else {
errorOverlay();
}
};
//变换显示方式事件处理
target.changeTemplate = function () {
if (target.gridTemplate.tmplType == "card") {
target.gridTemplate.tmplType = "list";
target.gridTemplate.pageSize = 10;
target.gridTemplate.columns = templateColumns.listColumns;
} else {
target.gridTemplate.tmplType = "card";
target.gridTemplate.pageSize = 10;
target.gridTemplate.columns = templateColumns.cardColumns;
}
refreshPage();
$("#books ").translate();
};
//显示发送短信页面
target.openSendMessagePage = function () {
if (pageState.SEND_MSM == target.pageState()) {
return;
}
if ((target.pageState() == pageState.EDIT || pageState.NEW == target.pageState()) && (target.preContent.location != target.selectedLocation()
|| target.preContent.name != target.name()
|| target.preContent.mobile_phone_number != target.mobile_phone_number()
|| target.preContent.home_phone_number != target.home_phone_number()
|| target.preContent.office_phone_number != target.office_phone_number()
|| target.preContent.mail != target.mail()
|| target.preContent.group != target.selectedGroup())) {
showConfirm("leave_page_info", {
ok: function () {
openSendMessagePageAct();
},
no: function () {
return false;
}
});
} else {
openSendMessagePageAct();
}
};
function openSendMessagePageAct() {
if (pageState.NEW == target.pageState()) {
target.pageState(pageState.SEND_MSM);
showAlert("no_data_selected");
target.clear();
return;
}
var selectedNumber = null;
if (pageState.LIST == target.pageState()) {
var result = target.checkSelect("send");
if (!result.isCorrectData)
return;
selectedNumber = result.selectedIds;
} else {
selectedNumber = target.mobile_phone_number();
}
var select = $("#chosenUserList .chosen-select-deselect");
select.empty();
var options = [];
var tmp = [];
for (var j = 0; j < config.phonebook.length; j++) {
var book = config.phonebook[j];
if ($.inArray(book.pbm_number, tmp) == -1) {
options.push(new Option(book.pbm_name + "/" + book.pbm_number, book.pbm_number, false, true));
tmp.push(book.pbm_number);
} else {
for (var i = 0; i < options.length; i++) {
if (options[i].value == book.pbm_number) {
options[i].text = book.pbm_name + "/" + book.pbm_number;
break;
}
}
}
}
var opts = "";
$.each(options, function (i, e) {
opts += "<option value='" + HTMLEncode(e.value) + "'>" + HTMLEncode(e.text) + "</option>";
});
select.append(opts);
select.chosen({
max_selected_options: 5,
search_contains: true,
width: '545px'
});
$("#chosenUserSelect").val(selectedNumber);
$("#chosenUserSelect").trigger("chosen:updated.chosen");
config.resetContentModifyValue();
pbDraftListener();
target.pageState(pageState.SEND_MSM);
}
//发送短信
target.sendMessage = function () {
service.getSmsCapability({}, function (capability) {
var hasCapability = capability.nvUsed < capability.nvTotal;
if (!hasCapability) {
showAlert("sms_capacity_is_full_for_send");
return false;
}
var numbers = syncSelectAndChosen($("select#chosenUserSelect"), $('.search-choice', '#chosenUserSelect_chosen'));
if (numbers.length + capability.nvUsed > capability.nvTotal) {
showAlert({
msg: "sms_capacity_will_full_just",
params: [capability.nvTotal - capability.nvUsed]
});
return false;
}
target.sendMessageAction();
return true;
});
};
target.sendMessageAction = function () {
var numbers = syncSelectAndChosen($("select#chosenUserSelect"), $('.search-choice', '#chosenUserSelect_chosen'));
if (!numbers || numbers.length == 0) {
target.showErrorInfo(true);
var timer = addTimeout(function () {
target.showErrorInfo(false);
window.clearTimeout(timer);
}, 5000);
return;
}
var content = target.messageContent();
var sentCount = 0;
var failCount = 0;
if (numbers.length > 1) {
showLoading("sending", "<button id='btnStopSending' onclick='phoneBookStopSMSSending();' class='btn btn-primary'>"
+ $.i18n.prop("sms_stop_sending")
+ "</button>");
} else {
showLoading('sending');
}
var callback = function (data) {
sentCount++;
if (sentCount == numbers.length) {
$("#chosenUserSelect").val("");
target.messageContent("");
config.CONTENT_MODIFIED.modified = false;
if (failCount == 0) {
successOverlay();
location.hash = "#msg_list";
} else {
var msg = $.i18n.prop("success_info") + $.i18n.prop("colon") + (sentCount - failCount)
+ "<br/>" + $.i18n.prop("error_info") + $.i18n.prop("colon") + (failCount);
showAlert(msg, function () {
location.hash = "#msg_list";
});
}
} else {
sendSMS();
}
}
_phoneBookStopSMSSending = false;
var sendSMS = function () {
if (_phoneBookStopSMSSending) {
hideLoading();
return;
}
if ((sentCount + 1) == numbers.length) {
$("#loading #loading_container").html("");
}
service.sendSMS({
number: numbers[sentCount],
message: content,
id: -1
}, function (data) {
callback(data);
}, function (data) {
failCount++;
callback(data);
});
};
sendSMS();
};
//清除搜索关键字事件
target.clearSearchKey = function () {
target.gridTemplate.searchInitStatus(true);
target.gridTemplate.searchKey($.i18n.prop("search"));
$("#ko_grid_search_txt").addClass("ko-grid-search-txt-default").attr("data-trans", "search");
};
//点击搜索输入框事件
target.searchTextClick = function () {
var searchText = $("#ko_grid_search_txt");
if (searchText.hasClass("ko-grid-search-txt-default")) {
target.gridTemplate.searchKey("");
target.gridTemplate.searchInitStatus(false);
searchText.removeClass("ko-grid-search-txt-default").removeAttr("data-trans");
}
};
//离开搜索输入框事件
target.searchTextBlur = function () {
var txt = $.trim(target.gridTemplate.searchKey()).toLowerCase();
if (txt == "") {
target.clearSearchKey();
}
};
//当前表格是否有数据
target.hasData = ko.computed(function () {
return target.gridTemplate.afterSearchData().length > 0;
});
//当前表格是否有选中的数据
target.hasChecked = ko.computed(function () {
return target.gridTemplate.checkedCount() > 0;
});
//是否可以点击发送按钮
target.canSend = ko.computed(function () {
var checked = target.gridTemplate.checkedCount();
if (!target.checkHasSIMCard(false)) {
return false;
}
return (checked > 0 && checked <= 5);
});
//发送短信时,选择用户变化的监控事件
target.draftListenerEvent = function () {
pbDraftListener();
};
//文档内容监听,判断是否修改过
function pbDraftListener() {
var smsHasCapability = true;
if (smsHasCapability) {
var content = target.messageContent();
var hasContent = false;
var numbers = getSelectValFromChosen($('.search-choice', '#chosenUserSelect_chosen'));
var noContactSelected = !(numbers && numbers.length > 0);
if (typeof content == "undefined" || content == '') {
config.resetContentModifyValue();
return false;
} else {
hasContent = true;
}
if (hasContent && !noContactSelected) {
config.CONTENT_MODIFIED.modified = true;
config.CONTENT_MODIFIED.message = 'sms_to_save_draft';
config.CONTENT_MODIFIED.callback.ok = saveDraftAction;
config.CONTENT_MODIFIED.callback.no = $.noop;
config.CONTENT_MODIFIED.data = {
content: content,
numbers: numbers
};
return false;
}
if (hasContent && noContactSelected) {
config.CONTENT_MODIFIED.modified = true;
config.CONTENT_MODIFIED.message = 'sms_no_recipient';
config.CONTENT_MODIFIED.callback.ok = $.noop;
config.CONTENT_MODIFIED.callback.no = function () {
// 返回true,页面保持原状
return true;
};
return false;
}
}
/*else { cov_2
config.resetContentModifyValue();
}*/
}
function saveDraftAction(data) {
var datetime = new Date();
var params = {
index: -1,
currentTimeString: getCurrentTimeString(datetime),
groupId: data.numbers.length > 1 ? datetime.getTime() : '',
message: data.content,
numbers: data.numbers
};
service.saveSMS(params, function () {
successOverlay('sms_save_draft_success');
}, function () {
errorOverlay("sms_save_draft_failed")
});
}
function smsPageCheckDraft(clearCallback, isNeedInit) {
if (config.CONTENT_MODIFIED.message != 'sms_to_save_draft') {
if (config.CONTENT_MODIFIED.modified) {
showConfirm(config.CONTENT_MODIFIED.message, {
ok: function () {
config.CONTENT_MODIFIED.callback.ok(config.CONTENT_MODIFIED.data);
clearCallback(isNeedInit);
},
no: function () {
if (config.CONTENT_MODIFIED.message == 'sms_to_save_draft') {
clearCallback(isNeedInit);
}
return false;
}
});
return false;
} else {
clearCallback(isNeedInit);
}
} else {
config.CONTENT_MODIFIED.callback.ok(config.CONTENT_MODIFIED.data);
clearCallback(isNeedInit);
}
}
//重新获取页面数据并显示
function getPhoneBookReady() {
service.getPhoneBookReady({}, function (data) {
if (data.pbm_init_flag == "6") {
target.initFail(true);
hideLoading();
showAlert("phonebook_init_fail");
} else if (data.pbm_init_flag != "0") {
addTimeout(getPhoneBookReady, 1000);
} else {
target.initFail(false);
var capacity = getCapacity();
target.capacity(capacity);
target.phoneBookCapacity(capacity.Ratio);
var phoneBooks = getBooks(capacity.Used);
target.books(phoneBooks);
target.gridTemplate.data(phoneBooks);
$('#books').find('tbody').translate();
hideLoading();
}
});
}
showLoading('waiting');
addTimeout(getPhoneBookReady, 200);
//重新获取页面数据并显示
function refreshPage() {
showLoading();
var capacity = getCapacity();
target.phoneBookCapacity(capacity.Ratio);
target.capacity(capacity);
var books = getBooks(capacity.Used);
target.books(books);
target.gridTemplate.data(books);
hideLoading();
}
target.preContent = {};
//保存编辑前的内容
function setPreContent() {
target.preContent.location = target.selectedLocation();
target.preContent.name = target.name();
target.preContent.mobile_phone_number = target.mobile_phone_number();
target.preContent.home_phone_number = target.home_phone_number();
target.preContent.office_phone_number = target.office_phone_number();
target.preContent.mail = target.mail();
target.preContent.group = target.selectedGroup();
}
//检测数据是否改变
function checkContentChang() {
var changed = (target.preContent.location != target.selectedLocation()
|| target.preContent.name != target.name()
|| target.preContent.mobile_phone_number != target.mobile_phone_number()
|| target.preContent.home_phone_number != target.home_phone_number()
|| target.preContent.office_phone_number != target.office_phone_number()
|| target.preContent.mail != target.mail()
|| target.preContent.group != target.selectedGroup());
config.CONTENT_MODIFIED.modified = changed;
}
function preOpenEditPage() {
config.resetContentModifyValue();
setPreContent();
config.CONTENT_MODIFIED.checkChangMethod = checkContentChang;
}
}
//设置停止发送标志为true
phoneBookStopSMSSending = function () {
_phoneBookStopSMSSending = true;
$("#loading #loading_container").html($.i18n.prop("sms_cancel_sending"));
}
//获取电话本
function getBooks(capacity) {
var para = {};
para.page = 0;
para.data_per_page = capacity;
para.orderBy = "name";
para.isAsc = true;
var books = [];
var group = getCurrentGroup();
if (config.HAS_SMS) {
books = service.getPhoneBooks(para);
config.phonebook = books.pbm_data;
if (group != "all") {
books = {
"pbm_data": _.filter(books.pbm_data, function (item) {
return item.pbm_group == group;
})
};
}
} else {
if (group != "all") {
para.group = group;
books = service.getPhoneBooksByGroup(para);
} else {
books = service.getPhoneBooks(para);
}
}
return translateData(books.pbm_data);
}
//获取电话本容量信息
function getCapacity() {
var sim = service.getSIMPhoneBookCapacity();
var device = service.getDevicePhoneBookCapacity();
return {
simUsed: sim.simPbmUsedCapacity,
deviceUsed: device.pcPbmUsedCapacity,
simCapacity: sim.simPbmTotalCapacity,
deviceCapacity: device.pcPbmTotalCapacity,
simMaxNameLen: sim.maxNameLen,
simMaxNumberLen: sim.maxNumberLen,
IsSimCardFull: (sim.simPbmUsedCapacity == sim.simPbmTotalCapacity),
IsDeviceFull: (device.pcPbmUsedCapacity == device.pcPbmTotalCapacity),
Used: sim.simPbmUsedCapacity + device.pcPbmUsedCapacity,
Capacity: sim.simPbmTotalCapacity + device.pcPbmTotalCapacity,
Ratio: "(" + (sim.simPbmUsedCapacity + device.pcPbmUsedCapacity) + "/" + (sim.simPbmTotalCapacity + device.pcPbmTotalCapacity) + ")"
};
}
function translateData(books) {
var ret = [];
var group = getCurrentGroup();
var hasFilter = (group != "all");
if (books) {
for (var i = 0; i < books.length; i++) {
if (hasFilter) {
var currentGroup = books[i].pbm_group;
if (books[i].pbm_location == locationValue.SIM || currentGroup != group) {
continue;
}
}
var temp = {
index: books[i].pbm_id,
location: books[i].pbm_location,
imgLocation: books[i].pbm_location == locationValue.SIM ? "pic/simcard.png" : "pic/res_device.png",
name: books[i].pbm_name,
mobile_phone_number: books[i].pbm_number,
home_phone_number: books[i].pbm_anr,
office_phone_number: books[i].pbm_anr1,
mail: books[i].pbm_email,
group: books[i].pbm_group,
transGroup: (!books[i].pbm_group) ? "group_null" : "group_" + books[i].pbm_group
};
ret.push(temp);
}
}
return ret;
}
//初始化ViewModel并进行绑定
function init() {
var container = $('#container');
ko.cleanNode(container[0]);
var vm = new pbViewMode();
ko.applyBindings(vm, container[0]);
$("#txtSmsContent").die().live("contextmenu", function () {
return false;
});
$('#frmPhoneBook').validate({
submitHandler: function () {
vm.save();
},
rules: {
txtMail: "email_check",
txtName: "name_check",
txtMobile: "phonenumber_check",
txtHomeNumber: "phonenumber_check",
txtOfficeNumber: "phonenumber_check"
}
});
}
return {
init: init
};
});
define("sms_list","underscore jquery knockout set service jq_chosen".split(" "),
function (_, $, ko, config, service, chosen) {
var currentPage = 1;
//数据是否加载完成
var ready = false,
//聊天室信息正在加载中
chatRoomInLoading = false;
//快速添加联系人模板
var addPhonebookTmpl = null,
//短消息模板
smsTableTmpl = null,
//接收短消息模板
smsOtherTmpl = null,
//发送短消息模板
smsMeTmpl = null,
//群聊草稿
groupDrafts = [],
//短消息列表显示群聊草稿
groupDraftItems = [],
//短消息列表显示群聊草稿及其草稿群聊细节
groupedDraftsObject = {},
//短消息容量信息
smsCapability = {},
//短消息是否还有存储空间
hasCapability = true;
//获取全部短消息,并将短信通过回调函数getPhoneBooks,与电话本进行关联
function getSMSMessages(callback) {
return service.getSMSMessages({
page: 0,
smsCount: 500,
nMessageStoreType: 1,
tags: 10,
orderBy: "order by id desc"
}, function (data) {
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), data.messages.length);
config.dbMsgs = data.messages;
config.listMsgs = groupSms(config.dbMsgs);
callback();
}, function () {
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), 0);
config.dbMsgs = [];
config.listMsgs = [];
cleanSmsList();
});
}
//清楚短消息列表内容
cleanSmsList = function () {
$("#smslist-table").empty();
};
//关联后的短消息根据电话号码进行分组
function groupSms(messages) {
var peoples = {},
theSortedPeoples = [];
config.listMsgs = [];
groupDrafts = [];
$.each(messages, function (i, e) {
if (e.tag == '4' && e.groupId != '') { // 群聊草稿
groupDrafts.push(e);
return;
}
e.target = e.number;
if (parseInt(e.id, 10) > config.smsMaxId) {
config.smsMaxId = e.id;
}
var last8 = getLastNumber(e.number, config.SMS_MATCH_LENGTH);
if (last8 in peoples) {
peoples[last8].push(e);
} else {
peoples[last8] = [e];
theSortedPeoples.push(e);
}
});
theSortedPeoples = _.sortBy(theSortedPeoples, function (ele) {
return 0 - parseInt(ele.id + "", 10);
});
$.each(theSortedPeoples, function (s_i, sp) {
var people = getLastNumber(sp.number, config.SMS_MATCH_LENGTH);
var newCount = 0;
var hasDraft = false;
for (var i = 0; i < peoples[people].length; i++) {
if (peoples[people][i].isNew) {
newCount++;
}
if (peoples[people][i].tag == '4' && peoples[people][i].groupId == '') { // 单条草稿
hasDraft = true;
}
}
config.listMsgs.push({
id: peoples[people][0].id,
name: "",
number: peoples[people][0].number,
latestId: peoples[people][0].id,
totalCount: peoples[people].length,
newCount: newCount,
latestSms: peoples[people][0].content,
latestTime: peoples[people][0].time,
checked: false,
itemId: getLastNumber(people, config.SMS_MATCH_LENGTH),
groupId: peoples[people][0].groupId,
hasDraft: hasDraft
});
});
return config.listMsgs;
}
//获取电话本信息,并与短消息关联
function getPhoneBooks() {
var books = service.getPhoneBooks({
page: 0,
data_per_page: 2000,
orderBy: "name",
isAsc: true
});
if ($.isArray(books.pbm_data) && books.pbm_data.length > 0) {
config.phonebook = books.pbm_data;
}
dealPhoneBooks();
}
//双异步获取设备侧和sim卡侧的短信息,并将其合并
function dealPhoneBooks() {
var select = $("#chosenUserList .chosen-select-deselect");
select.empty();
var options = [];
var tmp = [];
var pbTmp = [];
for (var j = 0; j < config.phonebook.length; j++) {
var book = config.phonebook[j];
var last8Num = getLastNumber(book.pbm_number, config.SMS_MATCH_LENGTH);
if (last8Num && $.inArray(last8Num, pbTmp) == -1) {
options.push(new Option(book.pbm_name + "/" + book.pbm_number, last8Num, false, true));
if ($.inArray(last8Num, tmp) == -1) {
tmp.push(last8Num);
}
pbTmp.push(last8Num);
} else {
for (var i = 0; i < options.length; i++) {
if (options[i].value == last8Num) {
options[i].text = book.pbm_name + "/" + book.pbm_number;
break;
}
}
}
}
var groupIds = [];
for (var k = 0; k < groupDrafts.length; k++) { // 将草稿做对象Map封装,供草稿组点击后的草稿分解
if ($.inArray(groupDrafts[k].groupId, groupIds) == -1) {
groupIds.push(groupDrafts[k].groupId);
var draft = groupDrafts[k];
groupedDraftsObject[groupDrafts[k].groupId] = [draft];
} else {
var draft = groupDrafts[k];
groupedDraftsObject[groupDrafts[k].groupId].push(draft);
}
var itemId = getLastNumber(groupDrafts[k].number, config.SMS_MATCH_LENGTH);
if ($.inArray(itemId, tmp) == -1) {
options.push(new Option(groupDrafts[k].number, itemId));
tmp.push(itemId);
}
}
for (var g in groupedDraftsObject) { // 处理列表显示的草稿信息
var drafts = groupedDraftsObject[g];
var draftItem = drafts[drafts.length - 1];
draftItem.draftShowName = '';
draftItem.draftShowNameTitle = '';
$.each(drafts, function (i, n) {
var showName = getShowNameByNumber(n.number);
draftItem.draftShowName += (i == 0 ? '' : ';') + showName;
draftItem.draftShowNameTitle += (i == 0 ? '' : ';') + showName;
});
var len = 10;
if (getEncodeType(draftItem.draftShowName).encodeType == "UNICODE") {
len = 10;
}
draftItem.draftShowName = draftItem.draftShowName.length > len ? draftItem.draftShowName.substring(0, len) + "..." : draftItem.draftShowName;
draftItem.totalCount = drafts.length;
draftItem.hasDraft = true;
draftItem.latestTime = draftItem.time;
groupDraftItems.push(draftItem);
}
for (var i = 0; i < config.listMsgs.length; i++) {
var smsItem = config.listMsgs[i];
for (var j = config.phonebook.length; j > 0; j--) {
var book = config.phonebook[j - 1];
var last8Num = getLastNumber(book.pbm_number, config.SMS_MATCH_LENGTH);
if (smsItem.itemId == last8Num) {
smsItem.name = book.pbm_name;
for (var k = 0; k < options.length; k++) {
if (last8Num == options[k].value) {
options[k].value = getLastNumber(smsItem.number, config.SMS_MATCH_LENGTH);
options[k].text = book.pbm_name + '/' + smsItem.number;
break;
}
}
break;
}
}
if ($.inArray(smsItem.itemId, tmp) == -1) {
options.push(new Option(smsItem.number, getLastNumber(smsItem.number, config.SMS_MATCH_LENGTH)));
tmp.push(smsItem.itemId);
}
}
var opts = "";
$.each(options, function (i, e) {
opts += "<option value='" + HTMLEncode(e.value) + "'>" + HTMLEncode(e.text) + "</option>";
});
select.append(opts);
select.chosen({
max_selected_options: 5,
search_contains: true,
width: '740px'
});
showSmsListData();
showMultiDraftListData();
//changeShownMsgs();
ready = true;
}
function showSmsListData() {
if (smsTableTmpl == null) {
smsTableTmpl = $.template("smsTableTmpl", $("#smsTableTmpl"));
}
cleanSmsList();
$.tmpl("smsTableTmpl", {
data: config.listMsgs
}).translate().appendTo("#smslist-table");
if (config.HAS_PHONEBOOK) {
$(".sms-add-contact-icon").removeClass("hide");
} else {
$(".sms-add-contact-icon").addClass("hide");
}
}
//群组草稿列表显示
function showMultiDraftListData() {
if (groupDraftItems.length == 0) {
return false;
}
if (smsTableTmpl == null) {
smsTableTmpl = $.template("smsTableTmpl", $("#smsTableTmpl"));
}
$.tmpl("smsTableTmpl", {
data: groupDraftItems
}).translate().prependTo("#smslist-table");
}
// 页面发生滚动后,改变页面显示的短消息
function changeShownMsgs() {
var shownMsgsTmp = [];
var range = _.range((currentPage - 1) * 5, currentPage * 5);
$.each(range, function (i, e) {
if (config.listMsgs[e]) {
shownMsgsTmp.push(config.listMsgs[e]);
}
});
//shownMsgsTmp = config.listMsgs;
currentPage++;
if (smsTableTmpl == null) {
smsTableTmpl = $.template("smsTableTmpl", $("#smsTableTmpl"));
}
$.tmpl("smsTableTmpl", {
data: shownMsgsTmp
}).translate().appendTo("#smslist-table");
renderCheckbox();
if (shownMsgsTmp.length == 0) {
disableBtn($("#smslist-delete-all"));
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), 0);
} else {
enableBtn($("#smslist-delete-all"));
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), 1);
}
if (currentPage == 2 && window.innerHeight == $("body").height()) {
changeShownMsgs();
}
return shownMsgsTmp;
}
//将被checked的条目添加到self.checkedItem中,用于在滚动还原checkbox
checkboxClickHandler = function (id) {
checkDeleteBtnStatus();
};
//获取已选择的条目
getSelectedItem = function () {
var selected = [];
var checkedItem = $("#smslist-table input:checkbox:checked");
checkedItem.each(function (i, e) {
selected.push($(e).val());
});
return selected;
};
//删除按钮是否禁用
checkDeleteBtnStatus = function () {
var size = getSelectedItem().length;
if (size == 0) {
disableBtn($("#smslist-delete"));
} else {
enableBtn($("#smslist-delete"));
}
};
//刷新短消息列表
refreshClickHandler = function () {
$("#smslist-table").empty();
disableBtn($("#smslist-delete"));
disableCheckbox($("#smslist-checkAll", "#smsListForm"));
init();
renderCheckbox();
};
//删除全部短消息
deleteAllClickHandler = function () {
showConfirm("confirm_data_delete", function () {
showLoading('deleting');
service.deleteAllMessages({
location: "native_inbox"
}, function (data) {
cleanSmsList();
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), 0);
successOverlay();
}, function (error) {
errorOverlay(error.errorText);
});
});
};
//删除选中的短消息
deleteSelectClickHandler = function () {
showConfirm("confirm_sms_delete", function () {
showLoading('deleting');
var items = getIdsBySelectedIds();
service.deleteMessage({
ids: items.ids
}, function (data) {
renderAfterDelete(items);
disableBtn($("#smslist-delete"));
$("#checkbox-all").removeAttr("checked");
renderCheckbox();
successOverlay();
}, function (error) {
errorOverlay(error.errorText);
});
});
function renderAfterDelete(items) {
var ids = items.ids;
var nums = [];
$.each(config.dbMsgs, function (i, e) {
if ($.inArray(e.id, items.normalIds) != -1) {
nums.push(e.number);
}
});
nums = _.uniq(nums);
$.each(nums, function (i, e) {
$("#smslist-item-" + getLastNumber(e, config.SMS_MATCH_LENGTH)).hide().remove();
});
$.each(items.groups, function (i, e) {
$("#smslist-item-" + e).hide().remove();
});
synchSmsList(nums, ids);
}
function getIdsBySelectedIds() {
var nums = [];
var resultIds = [];
var normalIds = [];
var groups = [];
var selectedItem = getSelectedItem();
$.each(selectedItem, function (i, e) {
var checkbox = $("#checkbox" + e);
if (checkbox.attr("groupid")) {
groups.push(checkbox.attr("groupid"));
} else {
nums.push(getLastNumber(checkbox.attr("number"), config.SMS_MATCH_LENGTH));
}
});
$.each(config.dbMsgs, function (i, e) {
if ($.inArray(getLastNumber(e.number, config.SMS_MATCH_LENGTH), nums) != -1 && (typeof e.groupId == "undefined" || _.isEmpty(e.groupId + ''))) {
resultIds.push(e.id);
normalIds.push(e.id);
} else if ($.inArray(e.groupId + '', groups) != -1) { //删除草稿组
resultIds.push(e.id);
}
});
resultIds = _.uniq(resultIds);
return {
ids: resultIds,
groups: groups,
normalIds: normalIds
};
}
};
//新短信按钮点击
newMessageClickHandler = function () {
$("#chosenUser1", "#smsChatRoom").addClass("hide");
$("#chosenUser", "#smsChatRoom").show();
cleanChatInput();
checkSmsCapacityAndAlert();
$("select.chosen-select-deselect").val("").trigger("chosen:updated.chosen");
switchPage('chat');
gotoBottom();
clearChatList();
};
//返回聊天室列表
chatCancelClickHandler = function () {
if (config.CONTENT_MODIFIED.modified) {
var confirmMessage = 'sms_to_save_draft';
var selectedContact = syncSelectAndChosen($("select#chosenUserSelect"), $('.search-choice', '#chosenUserSelect_chosen'));
var noContactSelected = !selectedContact || selectedContact.length == 0;
if (noContactSelected) {
confirmMessage = 'sms_no_recipient';
}
if (noContactSelected) {
showConfirm(confirmMessage, {
ok: function () {
if (!noContactSelected) {
saveDraftAction({
content: $("#chat-input", "#smsChatRoom").val(),
numbers: selectedContact,
isFromBack: true
});
}
config.resetContentModifyValue();
backToSmsListMainPage();
},
no: function () {
if (noContactSelected) {
return true;
}
config.resetContentModifyValue();
backToSmsListMainPage();
}
});
} else {
saveDraftAction({
content: $("#chat-input", "#smsChatRoom").val(),
numbers: selectedContact,
isFromBack: true
});
config.resetContentModifyValue();
backToSmsListMainPage();
}
return false;
}
backToSmsListMainPage();
};
//跳转页面至SIM卡侧、设置界面
toOtherClickHandler = function (href) {
config.CONTENT_MODIFIED.checkChangMethod();
if (config.CONTENT_MODIFIED.modified) {
draftListener();
if (config.CONTENT_MODIFIED.message == 'sms_to_save_draft') {
config.CONTENT_MODIFIED.callback.ok(config.CONTENT_MODIFIED.data);
config.resetContentModifyValue();
window.location.hash = href;
} else {
showConfirm(config.CONTENT_MODIFIED.message, {
ok: function () {
config.CONTENT_MODIFIED.callback.ok(config.CONTENT_MODIFIED.data);
config.resetContentModifyValue();
window.location.hash = href;
},
no: function () {
var result = config.CONTENT_MODIFIED.callback.no(config.CONTENT_MODIFIED.data);
if (!result) {
window.location.hash = href;
config.resetContentModifyValue();
}
}
});
}
return false;
} else {
window.location.hash = href;
}
};
function backToSmsListMainPage() {
$("select.chosen-select-deselect").val("").trigger("chosen:updated.chosen");
config.currentChatObject = null;
$(".smslist-btns", "#smslist-main").removeClass('smsListFloatButs');
switchPage('list');
}
function switchPage(page) {
if (page == 'chat') {
$("#smslist-main").hide();
$("#smsChatRoom").show();
} else {
$("#smsChatRoom").hide();
$("#smslist-main").show();
}
}
var sendSmsErrorTimer = null;
//添加发送错误消息
addSendSmsError = function (msg) {
if (sendSmsErrorTimer) {
window.clearTimeout(sendSmsErrorTimer);
sendSmsErrorTimer = null;
}
$("#sendSmsErrorLi").text($.i18n.prop(msg));
sendSmsErrorTimer = addTimeout(function () {
$("#sendSmsErrorLi").text("");
}, 5000);
};
//发送短消息
sendSmsClickHandler = function () {
if (!hasCapability) {
showAlert("sms_capacity_is_full_for_send");
return;
}
var inputVal = $("#chat-input", "#smsChatRoom");
var msgContent = inputVal.val();
if (msgContent == $.i18n.prop("chat_input_placehoder")) {
inputVal.val("");
msgContent = "";
}
var nums = syncSelectAndChosen($("select#chosenUserSelect"), $('.search-choice', '#chosenUserSelect_chosen'));
if ($.isArray(nums)) {
nums = $.grep(nums, function (n, i) {
return !_.isEmpty(n);
});
}
if (!nums || nums.length == 0) {
addSendSmsError("sms_contact_required");
return;
}
if (nums.length + smsCapability.nvUsed > smsCapability.nvTotal) {
showAlert({
msg: "sms_capacity_will_full_just",
params: [smsCapability.nvTotal - smsCapability.nvUsed]
});
return;
}
if (nums.length == 1) {
config.currentChatObject = getLastNumber(nums[0], config.SMS_MATCH_LENGTH);
showLoading('sending');
} else if (nums.length > 1) {
showLoading("sending", "<button id='sms_cancel_sending' onclick='cancelSending()' class='btn btn-primary'>"
+ $.i18n.prop("sms_stop_sending")
+ "</button>");
config.currentChatObject = null;
}
var i = 0;
var leftNum = nums.length;
couldSend = true;
disableBtn($("#btn-send", "#inputpanel"));
sendSms = function () {
if (!couldSend) {
hideLoading();
return;
}
var newMsg = {
id: -1,
number: nums[i],
content: msgContent,
isNew: false
};
if (leftNum == 1) {
$("#loading #loading_container").html("");
}
leftNum--;
service.sendSMS({
number: newMsg.number,
message: newMsg.content,
id: -1
}, function (data) {
var latestMsg = getLatestMessage() || {
id: parseInt(config.smsMaxId, 10) + 1,
time: transUnixTime($.now()),
number: newMsg.number
};
config.smsMaxId = latestMsg.id;
newMsg.id = config.smsMaxId;
newMsg.time = latestMsg.time;
newMsg.tag = 2;
newMsg.hasDraft = false;
if (nums.length > 1) {
newMsg.targetName = getNameOrNumberByNumber(newMsg.number);
}
addSendMessage(newMsg, i + 1 != nums.length);
updateDBMsg(newMsg);
updateMsgList(newMsg);
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), $(".smslist-item", "#smslist-table").length);
gotoBottom();
if (i + 1 == nums.length) {
updateChatInputWordLength();
enableBtn($("#btn-send", "#inputpanel"));
hideLoading();
return;
}
i++;
sendSms();
}, function (error) {
var latestMsg = getLatestMessage() || {
id: parseInt(config.smsMaxId, 10) + 1,
time: transUnixTime($.now()),
number: newMsg.number
};
config.smsMaxId = latestMsg.id;
newMsg.id = config.smsMaxId;
newMsg.time = latestMsg.time;
newMsg.errorText = $.i18n.prop(error.errorText);
newMsg.tag = 3;
newMsg.target = newMsg.number;
newMsg.hasDraft = false;
if (nums.length > 1) {
newMsg.targetName = getNameOrNumberByNumber(newMsg.number);
}
addSendMessage(newMsg, i + 1 != nums.length);
updateDBMsg(newMsg);
updateMsgList(newMsg);
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), $(".smslist-item", "#smslist-table").length);
gotoBottom();
if (i + 1 == nums.length) {
updateChatInputWordLength();
enableBtn($("#btn-send", "#inputpanel"));
hideLoading();
return;
}
i++;
sendSms();
});
};
sendSms();
};
var couldSend = true;
//取消剩余短信发送操作
cancelSending = function () {
couldSend = false;
$("#loading #loading_container").html($.i18n.prop('sms_cancel_sending'));
};
//获取最新的短消息
getLatestMessage = function () {
var data = service.getSMSMessages({
page: 0,
smsCount: 5,
nMessageStoreType: 1,
tags: 10,
orderBy: "order by id desc"
});
if (data.messages.length > 0) {
for (var i = 0; i < data.messages.length; i++) {
if (data.messages[i].tag == '2' || data.messages[i].tag == '3') {
return data.messages[i];
}
}
return null;
} else {
return null;
}
};
//发送短信后,更新短信数据对象
function updateDBMsg(msg) {
if (config.dbMsgs.length == 0) {
config.dbMsgs = [msg];
} else {
/* cov_2
for(var j = 0; j < config.dbMsgs.length; j++){
if(config.dbMsgs[j].id == msg.id){
config.dbMsgs[j] = msg;
return;
} else {
var newMsg = [msg];
$.merge(newMsg, config.dbMsgs);
config.dbMsgs = newMsg;
return;
}
}
*/
if (config.dbMsgs[0].id == msg.id) {
config.dbMsgs[0] = msg;
return;
} else {
var newMsg = [msg];
$.merge(newMsg, config.dbMsgs);
config.dbMsgs = newMsg;
return;
}
}
}
//发送短信后,更新短信列表, number不为空做删除处理,为空做增加处理
function updateMsgList(msg, number, counter) {
if ((!msg || !msg.number) && !number) {
return;
}
var itemId = '';
if (msg && typeof msg.groupId != "undefined" && msg.groupId != '') {
itemId = msg.groupId;
} else {
itemId = getLastNumber((number || msg.number), config.SMS_MATCH_LENGTH);
}
var item = $("#smslist-item-" + itemId);
if (item && item.length > 0) {
var totalCountItem = item.find(".smslist-item-total-count");
var count = totalCountItem.text();
count = Number(count.substring(1, count.length - 1));
if (number) {
if (count == 1 || msg == null) {
item.hide().remove();
return;
} else {
totalCountItem.text("(" + (count - (counter || 1)) + ")");
item.find(".smslist-item-draft-flag").addClass('hide');
}
} else {
totalCountItem.text("(" + (count + 1) + ")");
if (msg.tag == '4') {
item.find(".smslist-item-draft-flag").removeClass('hide');
}
}
item.find(".smslist-item-checkbox p.checkbox").attr("id", msg.id);
item.find(".smslist-item-checkbox input:checkbox").val(msg.id).attr("id", "checkbox" + msg.id);
var contentHtml = msg.content;
var msgContent;
if (msg.tag == '4') {
//contentHtml = '<span class="smslist-item-draft-flag colorRed" data-trans="draft"></span>: ' + contentHtml;
msgContent = item.find(".smslist-item-msg").html('<span class="smslist-item-draft-flag colorRed" data-trans="draft"></span>: ' + HTMLEncode(contentHtml)); //.addClass("font-weight-bold");
} else {
msgContent = item.find(".smslist-item-msg").html(HTMLEncode(contentHtml)); //.addClass("font-weight-bold");
}
//var msgContent = item.find(".smslist-item-msg").html(HTMLEncode(contentHtml)); //.addClass("font-weight-bold");
msgContent.closest('td').prop('title', msg.content);
item.find(".smslist-item-repeat span").die().click(function () {
forwardClickHandler(msg.id);
});
item.find("span.clock-time").text(msg.time);
var tmpItem = item;
item.hide().remove();
$("#smslist-table").prepend(tmpItem.show());
} else {
if (smsTableTmpl == null) {
smsTableTmpl = $.template("smsTableTmpl", $("#smsTableTmpl"));
}
msg.checked = false;
msg.newCount = 0;
msg.latestId = msg.id;
msg.latestSms = msg.content;
msg.latestTime = msg.time;
if (msg.groupId == '' || typeof msg.groupId == "undefined") {
msg.totalCount = 1;
}
if (!msg.hasDraft) {
msg.hasDraft = false;
}
msg.itemId = itemId;
msg.name = getNameByNumber(msg.number);
$.tmpl("smsTableTmpl", {
data: [msg]
}).translate().prependTo("#smslist-table");
}
if (config.HAS_PHONEBOOK) {
$(".sms-add-contact-icon").removeClass("hide");
} else {
$(".sms-add-contact-icon").addClass("hide");
}
$("#smslist-table").translate();
renderCheckbox();
}
//增加发送内容到聊天室, notCleanChatInput 是否清除输入框内容
addSendMessage = function (sms, notCleanChatInput) {
if (smsMeTmpl == null) {
smsMeTmpl = $.template("smsMeTmpl", $("#smsMeTmpl"));
}
$.tmpl("smsMeTmpl", sms).appendTo("#chatlist");
$("#chatlist").translate();
if (!notCleanChatInput) {
cleanChatInput();
}
clearMySmsErrorMessage(sms.id);
};
//清楚错误消息,避免翻译问题
clearMySmsErrorMessage = function (id) {
addTimeout(function () {
$("div.error", "#talk-item-" + id).text("");
}, 3000);
};
//快速添加联系人overlay是否打开
var isPoped = false;
//关闭快速添加联系人overlay
hidePopup = function () {
$(".tagPopup").remove();
isPoped = false;
};
//清空聊天室内容
clearChatList = function () {
$("#chatlist").empty();
updateChatInputWordLength();
};
//过滤短消息内容
dealContent = function (content) {
if (config.HAS_PHONEBOOK) {
return HTMLEncode(content).replace(/(\d{3,})/g, function (word) {
var r = (new Date().getTime() + '').substring(6) + (getRandomInt(1000) + 1000);
return "<a id='aNumber" + r + "' href='javascript:openPhoneBook(\"" + r + "\", \"" + word + "\")'>" + word + "</a>";
});
} else {
return HTMLEncode(content);
}
};
//打开快速添加联系人overlay
openPhoneBook = function (id, num) {
var target = null;
var outContainer = "";
var itemsContainer = null;
var isChatRoom = false;
if (!id) {
target = $("#listNumber" + getLastNumber(num, config.SMS_MATCH_LENGTH));
outContainer = ".smslist-item";
itemsContainer = $("#addPhonebookContainer");
} else {
target = $("#aNumber" + id);
outContainer = ".msg_container";
itemsContainer = $("#chatlist");
isChatRoom = true;
}
if (isPoped) {
hidePopup();
}
isPoped = true;
$("#tagPopup").remove();
if (addPhonebookTmpl == null) {
addPhonebookTmpl = $.template("addPhonebookTmpl", $("#addPhonebookTmpl"));
}
$.tmpl("addPhonebookTmpl", {
number: num
}).appendTo(itemsContainer);
var p = target.position();
var msgContainer = target.closest(outContainer);
var msgP = msgContainer.position();
var _left = 0,
_top = 0;
if (isChatRoom) {
var containerWidth = itemsContainer.width();
var containerHeight = itemsContainer.height();
var pop = $("#innerTagPopup");
_left = msgP.left + p.left;
_top = msgP.top + p.top + 20;
if (pop.width() + _left > containerWidth) {
_left = containerWidth - pop.width() - 20;
}
if (containerHeight > 100 && pop.height() + _top > containerHeight) {
_top = containerHeight - pop.height() - 5;
}
} else {
_left = p.left;
_top = p.top;
}
$("#innerTagPopup").css({
top: _top + "px",
left: _left + "px"
});
$('#quickSaveContactForm').translate().validate({
submitHandler: function () {
quickSaveContact(isChatRoom);
},
rules: {
name: "name_check",
number: "phonenumber_check"
}
});
};
//快速添加联系人
quickSaveContact = function () {
var name = $(".tagPopup #innerTagPopup #name").val();
var number = $(".tagPopup #innerTagPopup #number").val();
var newContact = {
index: -1,
location: 1,
name: name,
mobile_phone_number: number,
home_phone_number: "",
office_phone_number: "",
mail: ""
};
var device = service.getDevicePhoneBookCapacity();
if (device.pcPbmUsedCapacity >= device.pcPbmTotalCapacity) {
showAlert("device_full");
return false;
}
showLoading('waiting');
service.savePhoneBook(newContact, function (data) {
if (data.result == "success") {
config.phonebook.push({
pbm_name: name,
pbm_number: number
});
updateItemShowName(name, number);
hidePopup();
successOverlay();
} else {
errorOverlay();
}
}, function (data) {
errorOverlay();
});
};
function updateItemShowName(name, number) {
var lastNum = getLastNumber(number, config.SMS_MATCH_LENGTH);
$("span.smslist-item-name2", "#smslist-item-" + lastNum).text(name);
$("#listNumber" + lastNum).hide();
}
//聊天室删除单条消息
deleteSingleItemClickHandler = function (id, resendCallback) {
if (resendCallback) {
deleteTheSingleItem(id);
} else {
showConfirm("confirm_sms_delete", function () {
showLoading('deleting');
deleteTheSingleItem(id);
});
}
function deleteTheSingleItem(id) {
service.deleteMessage({
ids: [id]
}, function (data) {
var target = $(".smslist-item-delete", "#talk-item-" + id).attr("target");
$("#talk-item-" + id).hide().remove();
synchSmsList(null, [id]);
updateMsgList(getPeopleLatestMsg(target), target);
if (resendCallback) {
resendCallback();
} else {
hideLoading();
}
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), $(".smslist-item", "#smslist-table").length);
}, function (error) {
if (resendCallback) {
resendCallback();
} else {
hideLoading();
}
});
}
};
//删除草稿
function deleteDraftSms(ids, numbers) {
stopNavigation();
service.deleteMessage({
ids: ids
}, function (data) {
updateSmsCapabilityStatus(null, function () {
draftListener();
restoreNavigation();
});
for (var i = 0; i < numbers.length; i++) {
updateMsgList(getPeopleLatestMsg(numbers[i]), numbers[i], ids.length);
}
synchSmsList(null, ids);
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), $(".smslist-item", "#smslist-table").length);
}, function (error) {
restoreNavigation();
// Do nothing
});
}
//删除群聊草稿草稿
function deleteMultiDraftSms(ids, groupId) {
service.deleteMessage({
ids: ids
}, function (data) {
synchSmsList(null, ids);
$("#smslist-item-" + groupId).hide().remove();
checkSmsCapacityAndAlert();
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), $(".smslist-item", "#smslist-table").length);
}, function (error) {
// Do nothing
});
}
getCurrentChatObject = function () {
var nums = $("select.chosen-select-deselect").val();
if (!nums) {
config.currentChatObject = null;
} else if (nums.length == 1) {
config.currentChatObject = getLastNumber(nums, config.SMS_MATCH_LENGTH);
} else if (nums.length > 1) {
config.currentChatObject = null;
}
return config.currentChatObject;
};
//获取当前聊天对象最新的短消息
getPeopleLatestMsg = function (number) {
for (var j = 0; j < config.dbMsgs.length; j++) {
if (!config.dbMsgs[j].groupId && getLastNumber(config.dbMsgs[j].number, config.SMS_MATCH_LENGTH) == getLastNumber(number, config.SMS_MATCH_LENGTH)) {
return config.dbMsgs[j];
}
}
return null;
};
//重新发送,复制消息到发送框
resendClickHandler = function (id) {
if (!hasCapability) {
showAlert("sms_capacity_is_full_for_send");
return;
}
showLoading('sending');
$("div.error", "#talk-item-" + id).text($.i18n.prop("sms_resending"));
var targetNumber = $("div.smslist-item-resend", "#talk-item-" + id).attr("target");
var content = $("div.J_content", "#talk-item-" + id).text();
for (var j = 0; j < config.dbMsgs.length; j++) {
if (config.dbMsgs[j].id == id) {
content = config.dbMsgs[j].content;
}
}
disableBtn($("#btn-send", "#inputpanel"));
var newMsg = {
id: -1,
number: targetNumber,
content: content,
isNew: false
};
service.sendSMS({
number: newMsg.number,
message: newMsg.content,
id: -1
}, function (data) {
var latestMsg = getLatestMessage() || {
id: parseInt(config.smsMaxId, 10) + 1,
time: transUnixTime($.now()),
number: newMsg.number
};
config.smsMaxId = latestMsg.id;
newMsg.id = config.smsMaxId;
newMsg.time = latestMsg.time;
newMsg.tag = 2;
newMsg.target = latestMsg.number;
newMsg.targetName = getNameOrNumberByNumber(targetNumber);
updateDBMsg(newMsg);
updateMsgList(newMsg);
deleteSingleItemClickHandler(id, function () {
addSendMessage(newMsg, true);
updateChatInputWordLength();
enableBtn($("#btn-send", "#inputpanel"));
hideLoading();
gotoBottom();
});
}, function (error) {
var latestMsg = getLatestMessage() || {
id: parseInt(config.smsMaxId, 10) + 1,
time: transUnixTime($.now()),
number: newMsg.number
};
config.smsMaxId = latestMsg.id;
newMsg.id = config.smsMaxId;
newMsg.time = latestMsg.time;
newMsg.errorText = $.i18n.prop("sms_resend_fail");
newMsg.tag = 3;
newMsg.target = latestMsg.number;
newMsg.targetName = getNameOrNumberByNumber(targetNumber);
updateDBMsg(newMsg);
updateMsgList(newMsg);
deleteSingleItemClickHandler(id, function () {
addSendMessage(newMsg, true);
updateChatInputWordLength();
enableBtn($("#btn-send", "#inputpanel"));
hideLoading();
gotoBottom();
});
});
};
//滚动到底部
gotoBottom = function () {
$("#chatpanel .clear-container").animate({
scrollTop: $("#chatlist").height()
});
};
//最后一条短消息距离顶部的距离
var lastItemOffsetTop = 0;
//页面是否处于滚动中
var scrolling = false;
//初始化页面状态信息
function initStatus() {
currentPage = 1;
ready = false;
shownMsgs = [];
scrolling = false;
lastItemOffsetTop = 0;
groupDrafts = groupDraftItems = [];
groupedDraftsObject = {};
config.dbMsgs = [];
config.listMsgs = null;
config.smsMaxId = 0;
config.phonebook = [];
}
function getReadyStatus() {
showLoading('waiting');
config.currentChatObject = null;
var getSMSReady = function () {
service.getSMSReady({}, function (data) {
if (data.sms_cmd_status_result == "2") {
$("input:button", "#smsListForm .smslist-btns").attr("disabled", "disabled");
hideLoading();
showAlert("sms_init_fail");
} else if (data.sms_cmd_status_result == "1") {
addTimeout(getSMSReady, 1000);
} else {
if (config.HAS_PHONEBOOK) {
getPhoneBookReady();
} else {
initSMSList(false);
}
}
});
};
var getPhoneBookReady = function () {
service.getPhoneBookReady({}, function (data) {
if (data.pbm_init_flag == "6") {
initSMSList(false);
} else if (data.pbm_init_flag != "0") {
addTimeout(getPhoneBookReady, 1000);
} else {
initSMSList(true);
}
});
};
var initSMSList = function (isPbmInitOK) {
initStatus();
if (isPbmInitOK) {
getSMSMessages(function () {
getPhoneBooks();
hideLoading();
});
} else {
getSMSMessages(function () {
config.phonebook = [];
//if(config.HAS_PHONEBOOK){
dealPhoneBooks();
//}
hideLoading();
});
}
bindingEvents();
fixScrollTop();
window.scrollTo(0, 0);
initSmsCapability();
};
getSMSReady();
}
//初始化短信容量状态
function initSmsCapability() {
var capabilityContainer = $("#smsCapability");
updateSmsCapabilityStatus(capabilityContainer);
checkSimStatusForSend();
addInterval(function () {
updateSmsCapabilityStatus(capabilityContainer);
checkSimStatusForSend();
}, 5000);
}
//SIM卡未准备好时,禁用发送按钮
function checkSimStatusForSend() {
var data = service.getStatusInfo();
if (data.simStatus != 'modem_init_complete') {
disableBtn($("#btn-send"));
$("#sendSmsErrorLi").html('<span data-trans="no_sim_card_message">' + $.i18n.prop('no_sim_card_message') + '</span>');
$("#chatpanel .smslist-item-resend:visible").hide();
} else {
enableBtn($("#btn-send"));
$("#chatpanel .smslist-item-resend:hidden").show();
}
}
//更新短信容量状态
function updateSmsCapabilityStatus(capabilityContainer, callback) {
service.getSmsCapability({}, function (capability) {
if (capabilityContainer != null) {
capabilityContainer.text("(" + (capability.nvUsed > capability.nvTotal ? capability.nvTotal : capability.nvUsed) + "/" + capability.nvTotal + ")");
}
hasCapability = capability.nvUsed < capability.nvTotal;
smsCapability = capability;
if ($.isFunction(callback)) {
callback();
}
});
}
//初始化页面及VM
function init() {
getReadyStatus();
}
//事件绑定
bindingEvents = function () {
var $win = $(window);
var $smsListBtns = $("#smslist-main .smslist-btns");
var offsetTop = $("#mainContainer").offset().top;
$win.unbind("scroll").scroll(function () {
if ($win.scrollTop() > offsetTop) {
$smsListBtns.addClass("smsListFloatButs marginnone");
} else {
$smsListBtns.removeClass("smsListFloatButs marginnone");
}
//loadData(); //由于目前数据显示是全显示,不做动态加载,因此暂时注释掉
});
$("#smslist-table p.checkbox").die().live("click", function () {
checkboxClickHandler($(this).attr("id"));
});
$("#smslist-checkAll", "#smsListForm").die().live("click", function () {
checkDeleteBtnStatus();
});
$("#chat-input", "#smsChatRoom").die().live("drop", function () {
$("#inputpanel .chatform").addClass("chatformfocus");
var $this = $(this);
$this.removeAttr("data-trans");
if ($this.val() == $.i18n.prop("chat_input_placehoder")) {
$this.val("");
}
updateChatInputWordLength();
}).live("focusin", function () {
$("#inputpanel .chatform").addClass("chatformfocus");
var $this = $(this);
$this.removeAttr("data-trans");
if ($this.val() == $.i18n.prop("chat_input_placehoder")) {
$this.val("");
}
updateChatInputWordLength();
}).live("focusout", function () {
$("#inputpanel .chatform").removeClass("chatformfocus");
var $this = $(this);
if ($this.val() == "" || $this.val() == $.i18n.prop("chat_input_placehoder")) {
$this.val($.i18n.prop("chat_input_placehoder")).attr("data-trans", "chat_input_placehoder");
}
updateChatInputWordLength();
}).live("keyup", function () {
updateChatInputWordLength();
}).live("paste", function () {
window.setTimeout(function () {
updateChatInputWordLength();
}, 0);
}).live("cut", function () {
window.setTimeout(function () {
updateChatInputWordLength();
}, 0);
}).live("drop", function () {
window.setTimeout(function () {
updateChatInputWordLength();
}, 0);
}).live("contextmenu", function () {
return false;
});
$("#name").die().live("drop", function () {
updateNameInputWordLength();
}).live("focusin", function () {
updateNameInputWordLength();
}).live("focusout", function () {
updateNameInputWordLength();
}).live("keyup", function () {
updateNameInputWordLength();
}).live("paste", function () {
updateNameInputWordLength();
}).live("cut", function () {
updateNameInputWordLength();
}).live("dragend", function () {
updateNameInputWordLength();
}).live("contextmenu", function () {
return false;
});
$("select.chosen-select-deselect", "#smsChatRoom").die().live('change', function () {
draftListener();
});
$("#searchInput").die().live('blur', function () {
searchTextBlur();
}).live('keyup', function () {
updateSearchValue($("#searchInput").val());
});
};
//更新剩余字数
updateNameInputWordLength = function () {
var msgInput = $("#name", "#quickSaveContactForm");
var msgInputDom = msgInput[0];
var strValue = msgInput.val();
var encodeType = getEncodeType(strValue);
var maxLength = encodeType.encodeType == 'UNICODE' ? 11 : 22;
while (strValue.length + encodeType.extendLen > maxLength) {
strValue = strValue.substring(0, strValue.length - 1);
msgInputDom.value = strValue;
encodeType = getEncodeType(strValue);
maxLength = encodeType.encodeType == 'UNICODE' ? 11 : 22;
}
};
//获取聊天对象的名字
getNameByNumber = function (num) {
for (var i = config.phonebook.length; i > 0; i--) {
if (getLastNumber(config.phonebook[i - 1].pbm_number, config.SMS_MATCH_LENGTH) == getLastNumber(num, config.SMS_MATCH_LENGTH)) {
return config.phonebook[i - 1].pbm_name;
}
}
return "";
};
//获取聊天对象的名字和号码
getShowNameByNumber = function (num) {
for (var i = config.phonebook.length; i > 0; i--) {
if (getLastNumber(config.phonebook[i - 1].pbm_number, config.SMS_MATCH_LENGTH) == getLastNumber(num, config.SMS_MATCH_LENGTH)) {
return config.phonebook[i - 1].pbm_name /* + "/" + num*/;
}
}
return num;
};
//获取聊天对象的名字,如果没有名字,则显示号码
getNameOrNumberByNumber = function (num) {
for (var i = config.phonebook.length; i > 0; i--) {
if (config.phonebook[i - 1].pbm_number == num) {
return config.phonebook[i - 1].pbm_name;
}
}
for (var i = config.phonebook.length; i > 0; i--) {
if (getLastNumber(config.phonebook[i - 1].pbm_number, config.SMS_MATCH_LENGTH) == getLastNumber(num, config.SMS_MATCH_LENGTH)) {
return config.phonebook[i - 1].pbm_name;
}
}
return num;
};
//点击短信列表条目,进入聊天室页面
smsItemClickHandler = function (num) {
if (chatRoomInLoading) {
return false;
}
chatRoomInLoading = true;
if (smsOtherTmpl == null) {
smsOtherTmpl = $.template("smsOtherTmpl", $("#smsOtherTmpl"));
}
if (smsMeTmpl == null) {
smsMeTmpl = $.template("smsMeTmpl", $("#smsMeTmpl"));
}
var name = getShowNameByNumber(num);
$("#chosenUser", "#smsChatRoom").hide();
$("#chosenUser1", "#smsChatRoom").addClass("hide");
config.currentChatObject = getLastNumber(num, config.SMS_MATCH_LENGTH);
setAsRead(num);
cleanChatInput();
clearChatList();
var userSelect = $("select.chosen-select-deselect", "#smsChatRoom");
var ops = $("option", userSelect);
var numberExist = false;
for (var i = 0; i < ops.length; i++) {
var n = ops[i];
if (getLastNumber(n.value, config.SMS_MATCH_LENGTH) == config.currentChatObject) {
num = n.value;
numberExist = true;
break;
}
}
if (!numberExist) {
userSelect.append("<option value='" + HTMLEncode(num) + "' selected='selected'>" + HTMLEncode(num) + "</option>");
}
$("select.chosen-select-deselect").val(num).trigger("chosen:updated.chosen");
switchPage('chat');
config.dbMsgs = _.sortBy(config.dbMsgs, function (e) {
return 0 - e.id;
});
var draftIds = [];
var dbMsgsTmp = [];
var dbMsgsTmpIds = [];
var chatHasDraft = false;
for (var i = config.dbMsgs.length - 1; i >= 0; i--) {
var e = config.dbMsgs[i];
if (_.indexOf(dbMsgsTmpIds, e.id) != -1) {
continue;
}
if (getLastNumber(e.number, config.SMS_MATCH_LENGTH) == config.currentChatObject && _.isEmpty(e.groupId)) {
e.isNew = false;
e.errorText = '';
e.targetName = '';
if (e.tag == "0" || e.tag == "1") {
$.tmpl("smsOtherTmpl", e).appendTo("#chatlist");
dbMsgsTmpIds.push(e.id);
dbMsgsTmp.push(e);
} else if (e.tag == "2" || e.tag == "3") {
$.tmpl("smsMeTmpl", e).appendTo("#chatlist");
dbMsgsTmpIds.push(e.id);
dbMsgsTmp.push(e);
} else if (e.tag == "4") {
draftIds.push(e.id);
$("#chat-input", "#smsChatRoom").val(e.content).removeAttr('data-trans');
updateChatInputWordLength();
chatHasDraft = true;
}
} else {
dbMsgsTmpIds.push(e.id);
dbMsgsTmp.push(e);
}
}
$("#chatlist").translate();
if (chatHasDraft) {
$("#chosenUser", "#smsChatRoom").show();
$("#chosenUser1", "#smsChatRoom").addClass("hide");
} else {
$("#chosenUser", "#smsChatRoom").hide();
$("#chosenUser1", "#smsChatRoom").removeClass("hide").html(HTMLEncode(name));
}
config.dbMsgs = dbMsgsTmp.reverse();
if (draftIds.length > 0) {
deleteDraftSms(draftIds, [num]);
} else {
checkSmsCapacityAndAlert();
}
checkSimStatusForSend();
gotoBottom();
chatRoomInLoading = false;
};
function checkSmsCapacityAndAlert() {
var capabilityContainer = $("#smsCapability");
updateSmsCapabilityStatus(capabilityContainer);
addTimeout(function () {
if (!hasCapability) {
showAlert("sms_capacity_is_full_for_send");
}
}, 2000);
}
cleanChatInput = function () {
$("#chat-input", "#smsChatRoom").val($.i18n.prop("chat_input_placehoder")).attr("data-trans", "chat_input_placehoder");
};
//设置为已读
setAsRead = function (num) {
var ids = [];
$.each(config.dbMsgs, function (i, e) {
if (getLastNumber(e.number, config.SMS_MATCH_LENGTH) == getLastNumber(num, config.SMS_MATCH_LENGTH) && e.isNew) {
ids.push(e.id);
e.isNew = false;
}
});
if (ids.length > 0) {
service.setSmsRead({
ids: ids
}, function (data) {
if (data.result) {
$("#smslist-item-" + getLastNumber(num, config.SMS_MATCH_LENGTH) + " .smslist-item-new-count").text("").addClass("hide");
$("#smslist-item-" + getLastNumber(num, config.SMS_MATCH_LENGTH)).removeClass("font-weight-bold");
$("#smslist-item-" + getLastNumber(num, config.SMS_MATCH_LENGTH) + " td:nth-child(2)").removeClass("font-weight-bold");
}
$.each(config.listMsgs, function (i, e) {
if (e.number == num && e.newCount > 0) {
e.newCount = 0;
}
});
});
}
};
//转发按钮点击事件
forwardClickHandler = function (id) {
var selectedContact = syncSelectAndChosen($("select#chosenUserSelect"), $('.search-choice', '#chosenUserSelect_chosen'));
var content = $("#chat-input", "#smsChatRoom").val();
var hasContent = typeof content != "undefined" && content != '' && content != $.i18n.prop('chat_input_placehoder');
if (hasContent) {
saveDraftAction({
content: content,
numbers: selectedContact,
isFromBack: true,
noLoading: true
});
}
clearChatList();
config.currentChatObject = null;
$("#chosenUser1", "#smsChatRoom").addClass("hide");
$("#chosenUser", "#smsChatRoom").show();
for (var j = 0; j < config.dbMsgs.length; j++) {
if (config.dbMsgs[j].id == id) {
var theChatInput = $("#chat-input", "#smsChatRoom");
theChatInput.val(config.dbMsgs[j].content);
setInsertPos(theChatInput[0], config.dbMsgs[j].content.length);
}
}
updateChatInputWordLength();
$("select.chosen-select-deselect").val("").trigger("chosen:updated.chosen");
addTimeout(function () {
$("#chosen-search-field-input").focus();
}, 300);
switchPage('chat');
gotoBottom();
};
//更新剩余字数
updateChatInputWordLength = function () {
var msgInput = $("#chat-input", "#smsChatRoom");
var msgInputDom = msgInput[0];
var strValue = msgInput.val();
var encodeType = getEncodeType(strValue);
var maxLength = encodeType.encodeType == 'UNICODE' ? 335 : 765;
if (strValue.length + encodeType.extendLen > maxLength) {
var scrollTop = msgInputDom.scrollTop;
var insertPos = getInsertPos(msgInputDom);
var moreLen = strValue.length + encodeType.extendLen - maxLength;
var insertPart = strValue.substr(insertPos - moreLen > 0 ? insertPos - moreLen : 0, moreLen);
var reversed = insertPart.split('').reverse();
var checkMore = 0;
var cutNum = 0;
for (var i = 0; i < reversed.length; i++) {
if (getEncodeType(reversed[i]).extendLen > 0) {
checkMore += 2;
} else {
checkMore++;
}
if (checkMore >= moreLen) {
cutNum = i + 1;
break;
}
}
var iInsertToStartLength = insertPos - cutNum;
msgInputDom.value = strValue.substr(0, iInsertToStartLength) + strValue.substr(insertPos);
if (msgInputDom.value.length > maxLength) {
msgInputDom.value = msgInputDom.value.substr(0, maxLength);
}
setInsertPos(msgInputDom, iInsertToStartLength);
msgInputDom.scrollTop = scrollTop;
}
var textLength = 0;
var newValue = $(msgInputDom).val();
var newEncodeType = {
encodeType: 'GSM7_default',
extendLen: 0
};
if (newValue != $.i18n.prop('chat_input_placehoder')) {
newEncodeType = getEncodeType(newValue);
}
var newMaxLength = newEncodeType.encodeType == 'UNICODE' ? 335 : 765;
var $inputCount = $("#inputcount", "#inputpanel");
var $inputItemCount = $("#inputItemCount", "#inputpanel");
if (newValue.length + newEncodeType.extendLen >= newMaxLength) {
$inputCount.addClass("colorRed");
$inputItemCount.addClass("colorRed");
} else {
$("#inputcount", "#inputpanel").removeClass("colorRed");
$("#inputItemCount", "#inputpanel").removeClass("colorRed");
}
if ("" != newValue && $.i18n.prop('chat_input_placehoder') != newValue) {
textLength = newValue.length + newEncodeType.extendLen;
}
$inputCount.html("(" + textLength + "/" + newMaxLength + ")");
$inputItemCount.html("(" + getSmsCount(newValue) + "/5)");
draftListener();
};
//文档内容监听,判断是否修改过
function draftListener() {
var content = $("#chat-input", "#smsChatRoom").val();
if (hasCapability) {
var selectedContact = getSelectValFromChosen($('.search-choice', '#chosenUserSelect_chosen'));
var noContactSelected = !selectedContact || selectedContact.length == 0;
var hasContent = typeof content != "undefined" && content != '' && content != $.i18n.prop('chat_input_placehoder');
if (!hasContent) {
config.resetContentModifyValue();
return;
}
if (hasContent && !noContactSelected) {
config.CONTENT_MODIFIED.modified = true;
config.CONTENT_MODIFIED.message = 'sms_to_save_draft';
config.CONTENT_MODIFIED.callback.ok = saveDraftAction;
config.CONTENT_MODIFIED.callback.no = $.noop;
config.CONTENT_MODIFIED.data = {
content: $("#chat-input", "#smsChatRoom").val(),
numbers: selectedContact
};
return;
}
if (hasContent && noContactSelected) {
config.CONTENT_MODIFIED.modified = true;
config.CONTENT_MODIFIED.message = 'sms_no_recipient';
config.CONTENT_MODIFIED.callback.ok = $.noop;
config.CONTENT_MODIFIED.callback.no = function () {
// 返回true,页面保持原状
return true;
}; //$.noop;
return;
}
} else {
config.resetContentModifyValue();
}
}
//保存草稿回调动作
function saveDraftAction(data) {
var datetime = new Date();
var params = {
index: -1,
currentTimeString: getCurrentTimeString(datetime),
groupId: data.numbers.length > 1 ? datetime.getTime() : '',
message: data.content,
numbers: data.numbers
};
!data.noLoading && showLoading('waiting');
service.saveSMS(params, function () {
if (data.isFromBack) {
getLatestDraftSms(data.numbers);
!data.noLoading && successOverlay('sms_save_draft_success');
} else {
!data.noLoading && successOverlay('sms_save_draft_success');
}
}, function () {
!data.noLoading && errorOverlay("sms_save_draft_failed")
});
//获取最新的草稿信息
function getLatestDraftSms(numbers) {
service.getSMSMessages({
page: 0,
smsCount: 5,
nMessageStoreType: 1,
tags: 4,
orderBy: "order by id desc"
}, function (data) {
if (data.messages && data.messages.length > 0) {
var theGroupId = '',
draftShowName = '',
draftShowNameTitle = '',
i = 0,
drafts = [];
for (; i < data.messages.length; i++) {
var msg = data.messages[i];
for (var k = 0; k < numbers.length; k++) {
var num = numbers[k];
if (getLastNumber(num, config.SMS_MATCH_LENGTH) == getLastNumber(msg.number, config.SMS_MATCH_LENGTH)) { //if (num.indexOf(msg.number) == 0) {
msg.number = num;
}
}
if (theGroupId != '' && theGroupId != msg.groupId) {
break;
}
updateDBMsg(msg);
if (msg.groupId == '') { // 单条草稿
break;
} else { // 多条草稿
theGroupId = msg.groupId;
var showName = getShowNameByNumber(msg.number);
draftShowName += (i == 0 ? '' : ';') + showName;
draftShowNameTitle += (i == 0 ? '' : ';') + showName;
}
drafts.push(msg);
}
if (theGroupId == '') { // 单条草稿
var msg = data.messages[0];
msg.hasDraft = true;
updateMsgList(msg);
} else { // 多条草稿
var msg = data.messages[0];
var len = 10;
if (getEncodeType(draftShowName).encodeType == "UNICODE") {
len = 10;
}
msg.draftShowNameTitle = draftShowNameTitle;
msg.draftShowName = draftShowName.length > len ? draftShowName.substring(0, len) + "..." : draftShowName;
msg.hasDraft = true;
msg.totalCount = i;
groupedDraftsObject[theGroupId] = drafts;
updateMsgList(msg);
}
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), $(".smslist-item", "#smslist-table").length);
}
}, function () {
// do nothing
});
}
}
//点击群聊草稿进入草稿发送页面 在进入的过程中会先删掉草稿
draftSmsItemClickHandler = function (groupId) {
if (chatRoomInLoading) {
return false;
}
chatRoomInLoading = true;
var msgs = groupedDraftsObject[groupId];
var numbers = [];
var ids = [];
for (var i = 0; msgs && i < msgs.length; i++) {
numbers.push(getLastNumber(msgs[i].number, config.SMS_MATCH_LENGTH));
ids.push(msgs[i].id + '');
}
$("#chosenUser", "#smsChatRoom").show();
$("#chosenUser1", "#smsChatRoom").addClass("hide").html('');
$("select.chosen-select-deselect").val(numbers).trigger("chosen:updated.chosen");
$("#chat-input", "#smsChatRoom").val(msgs[0].content);
updateChatInputWordLength();
clearChatList();
switchPage('chat');
draftListener();
gotoBottom();
chatRoomInLoading = false;
deleteMultiDraftSms(ids, groupId);
};
//按列表条目删除短消息
deletePhoneMessageClickHandler = function (num) {
showConfirm("confirm_sms_delete", function () {
showLoading('deleting');
var ids = [];
$.each(config.dbMsgs, function (i, e) {
if (e.number == num) {
ids.push(e.id);
}
});
service.deleteMessage({
ids: ids
}, function (data) {
$("#smslist-item-" + getLastNumber(num, config.SMS_MATCH_LENGTH)).hide().remove();
synchSmsList([num], ids);
successOverlay();
tryToDisableCheckAll($("#smslist-checkAll", "#smsListForm"), $(".smslist-item", "#smslist-table").length);
}, function (error) {
errorOverlay(error.errorText);
});
});
};
//同步短信列表数据
synchSmsList = function (nums, ids) {
if (nums && nums.length > 0) {
config.listMsgs = $.grep(config.listMsgs, function (n, i) {
return $.inArray(n.number, nums) == -1;
});
}
if (ids && ids.length > 0) {
var dbMsgsTmp = [];
$.each(config.dbMsgs, function (i, e) {
if ($.inArray(e.id, ids) == -1) {
dbMsgsTmp.push(e);
}
});
config.dbMsgs = dbMsgsTmp;
}
};
//确定最后一条短消息距离顶部的距离
function fixScrollTop() {
var items = $(".smslist-item");
var lastOne;
if (items.length > 0) {
lastOne = items[items.length - 1];
} else {
lastOne = items[0];
}
lastItemOffsetTop = lastOne ? lastOne.offsetTop : 600;
}
function loadData() {
if (ready && !scrolling && lastItemOffsetTop < ($(window).scrollTop() + $(window).height())
&& $(".smslist-item").length != config.listMsgs.length) {
scrolling = true;
addTimeout(function () {
removeChecked("smslist-checkAll");
changeShownMsgs();
fixScrollTop();
scrolling = false;
}, 100);
}
}
function stopNavigation() {
disableBtn($('#btn-back'));
$('a', '#left').bind("click", function () {
return false;
});
$('a', '#list-nav').bind("click", function () {
return false;
});
}
function restoreNavigation() {
enableBtn($('#btn-back'));
$('a', '#left').unbind("click");
$('a', '#list-nav').unbind("click");
}
function searchTable(key) {
key = $.trim(key);
var $trs = $('tr', '#smslist-table'),
trLength = $trs.length;
if (key == '') {
$trs.show();
return false;
}
$trs.hide();
while (trLength) {
var $tr = $($trs[trLength - 1]),
$tds = $('td', $tr),
tdLength = $tds.length;
while (tdLength - 1) {
var $td = $($tds[tdLength - 1]);
if ($td.text().toLowerCase().indexOf(key.toLowerCase()) != -1) {
$tr.show();
break;
}
tdLength--;
}
trLength--;
}
addTimeout(function () {
$(":checkbox:checked", "#addPhonebookContainer").removeAttr('checked');
vm.selectedItemIds([]);
vm.freshStatus($.now());
renderCheckbox();
}, 300);
return true;
}
updateSearchValue = function (key) {
if (key == "" || key == $.i18n.prop("search")) {
return true;
}
searchTable(key);
};
//清除搜索关键字事件
clearSearchKey = function () {
updateSearchValue($.i18n.prop("search"));
$("#searchInput").addClass("ko-grid-search-txt-default").attr("data-trans", "search");
};
//点击搜索输入框事件
searchTextClick = function () {
var searchText = $("#searchInput");
if (searchText.hasClass("ko-grid-search-txt-default")) {
updateSearchValue("");
searchText.val("");
searchText.removeClass("ko-grid-search-txt-default").removeAttr("data-trans");
}
};
//离开搜索输入框事件
searchTextBlur = function () {
var txt = $.trim($("#searchInput").val()).toLowerCase();
if (txt == "") {
clearSearchKey();
}
};
window.smsUtil = {
changeLocationHandler: function (ele) {
if ($(ele).val() == 'sim') {
window.location.hash = '#msg_sim';
} else {
window.location.hash = '#msg_main';
}
}
};
return {
init: init
};
});
define("sms_set","underscore jquery knockout set service".split(" "),
function (_, $, ko, config, service) {
var validityModes = _.map(config.SMS_VALIDITY, function (item) {
return new Option(item.name, item.value);
});
function SmsSetViewMode() {
var target = this;
var setting = getSmsSetting();
target.modes = ko.observableArray(validityModes);
target.selectedMode = ko.observable(setting.validity);
target.centerNumber = ko.observable(setting.centerNumber);
target.deliveryReport = ko.observable(setting.deliveryReport);
target.clear = function () {
init();
clearValidateMsg();
};
target.save = function () {
showLoading('waiting');
var params = {};
params.validity = target.selectedMode();
params.centerNumber = target.centerNumber();
params.deliveryReport = target.deliveryReport();
service.setSmsSetting(params, function (result) {
if (result.result == "success") {
successOverlay();
} else {
errorOverlay();
}
});
};
}
//获取短信设置参数
function getSmsSetting() {
return service.getSmsSetting();
}
function init() {
var container = $('#container');
ko.cleanNode(container[0]);
var vm = new SmsSetViewMode();
ko.applyBindings(vm, container[0]);
$('#smsSettingForm').validate({
submitHandler: function () {
vm.save();
},
rules: {
txtCenterNumber: "sms_service_center_check"
}
});
}
return {
init: init
};
});
define("sms_sim_messages","jquery knockout set service".split(" "),
function ($, ko, config, service) {
var simMsgListTmpl = null;
//每页记录条数
var perPage = 200;
//获取短信分页记录
function getSMSMessages() {
return service.getSMSMessages({
page: 0,
smsCount: perPage,
nMessageStoreType: 0,
tags: 10,
orderBy: "order by id desc"
}, function (data) {
tryToDisableCheckAll($("#simMsgList-checkAll"), data.messages.length);
dealPhoneBooks(data.messages);
}, function (data) {
dealPhoneBooks([]);
});
}
//短信显示联系人名字,并将结果显示在UI
function dealPhoneBooks(messages) {
$.each(messages, function (j, n) {
n.itemId = getLastNumber(n.number, config.SMS_MATCH_LENGTH);
for (var i = 0; i < config.phonebook.length; i++) {
var person = config.phonebook[i];
if (n.itemId == getLastNumber(person.pbm_number, config.SMS_MATCH_LENGTH)) {
n.name = person.pbm_name;
break;
}
}
});
renderSimMessageList(messages);
}
//清楚短信列表内容
cleanSimSmsList = function () {
$("#simMsgList_container").empty();
};
//将短信显示结果显示在UI
function renderSimMessageList(messages) {
if (simMsgListTmpl == null) {
simMsgListTmpl = $.template("simMsgListTmpl", $("#simMsgListTmpl"));
}
cleanSimSmsList();
$("#simMsgList_container").html($.tmpl("simMsgListTmpl", {
data: messages
}));
hideLoading();
}
//初始化电话本信息
function initPhoneBooks(cb) {
service.getPhoneBooks({
page: 0,
data_per_page: 2000,
orderBy: "name",
isAsc: true
}, function (books) {
if ($.isArray(books.pbm_data) && books.pbm_data.length > 0) {
config.phonebook = books.pbm_data;
} else {
config.phonebook = [];
}
cb();
}, function () {
errorOverlay();
});
}
function simSmsViewMode() {
var self = this;
start();
}
//短信删除事件处理
deleteSelectedSimMsgClickHandler = function () {
var checkbox = $("input[name=msgId]:checked", "#simMsgList_container");
var msgIds = [];
for (var i = 0; i < checkbox.length; i++) {
msgIds.push($(checkbox[i]).val());
}
if (msgIds.length == 0) {
return false;
}
showConfirm("confirm_sms_delete", function () {
showLoading('deleting');
service.deleteMessage({
ids: msgIds
}, function (data) {
removeChecked("simMsgList-checkAll");
disableBtn($("#simMsgList-delete"));
var idsForDelete = "";
checkbox.each(function (i, n) {
idsForDelete += ".simMsgList-item-class-" + $(n).val() + ",";
});
if (idsForDelete.length > 0) {
$(idsForDelete.substring(0, idsForDelete.length - 1)).hide().remove();
}
tryToDisableCheckAll($("#simMsgList-checkAll"), $(".smslist-item", "#simMsgList_container").length);
successOverlay();
}, function (error) {
errorOverlay(error.errorText);
});
//删除短信后需要刷新列表
updateSimSmsCapabilityStatus($("#simSmsCapability"));
});
};
//将被checked的条目添加到self.checkedItem中,用于在滚动还原checkbox
function checkboxClickHandler() {
if (getSelectedItemSize() == 0) {
disableBtn($("#simMsgList-delete"));
} else {
enableBtn($("#simMsgList-delete"));
}
}
//获取已选择的条目
function getSelectedItemSize() {
return $("input:checkbox:checked", '#simMsgList_container').length;
}
//模块开始,检查电话本及短信状态并加装页码数据
function start() {
showLoading('waiting');
var getSMSReady = function () {
service.getSMSReady({}, function (data) {
if (data.sms_cmd_status_result == "2") {
hideLoading();
showAlert("sms_init_fail");
} else if (data.sms_cmd_status_result == "1") {
addTimeout(function () {
getSMSReady();
}, 1000);
} else {
if (!config.HAS_PHONEBOOK) {
initSMSList(config.HAS_PHONEBOOK);
} else {
getPhoneBookReady();
}
}
});
};
var getPhoneBookReady = function () {
service.getPhoneBookReady({}, function (data) {
if (data.pbm_init_flag == "6") {
initSMSList(false);
} else if (data.pbm_init_flag != "0") {
addTimeout(function () {
getPhoneBookReady();
}, 1000);
} else {
initSMSList(config.HAS_PHONEBOOK);
}
});
};
var initSMSList = function (isPbmInitOK) {
if (isPbmInitOK) {
initPhoneBooks(function () {
getSMSMessages();
});
} else {
config.phonebook = [];
getSMSMessages();
}
};
getSMSReady();
initSimSmsCapability();
}
//初始化短信容量状态
function initSimSmsCapability() {
var capabilityContainer = $("#simSmsCapability");
updateSimSmsCapabilityStatus(capabilityContainer);
addInterval(function () {
updateSimSmsCapabilityStatus(capabilityContainer);
}, 5000);
}
//更新短信容量状态
function updateSimSmsCapabilityStatus(capabilityContainer) {
service.getSmsCapability({}, function (capability) {
if (capabilityContainer != null) {
capabilityContainer.text("(" + capability.simUsed + "/" + capability.simTotal + ")");
}
});
}
//清除搜索关键字事件
clearSearchKey = function () {
updateSearchValue($.i18n.prop("search"));
$("#searchInput").addClass("ko-grid-search-txt-default").attr("data-trans", "search");
};
//点击搜索输入框事件
searchTextClick = function () {
var searchText = $("#searchInput");
if (searchText.hasClass("ko-grid-search-txt-default")) {
updateSearchValue("");
searchText.val("");
searchText.removeClass("ko-grid-search-txt-default").removeAttr("data-trans");
}
};
//离开搜索输入框事件
searchTextBlur = function () {
var txt = $.trim($("#searchInput").val()).toLowerCase();
if (txt == "") {
clearSearchKey();
}
};
updateSearchValue = function (key) {
if (key == "" || key == $.i18n.prop("search")) {
return true;
}
searchTable(key);
}
function searchTable(key) {
key = $.trim(key);
var $trs = $('tr', '#smslist-table'),
trLength = $trs.length;
if (key == '') {
$trs.show();
return false;
}
$trs.hide();
while (trLength) {
var $tr = $($trs[trLength - 1]),
$tds = $('td', $tr),
tdLength = $tds.length;
while (tdLength - 1) {
var $td = $($tds[tdLength - 1]);
if ($td.text().toLowerCase().indexOf(key.toLowerCase()) != -1) {
$tr.show();
break;
}
tdLength--;
}
trLength--;
}
addTimeout(function () {
$(":checkbox:checked", "#addPhonebookContainer").removeAttr('checked');
vm.selectedItemIds([]);
vm.freshStatus($.now());
renderCheckbox();
}, 300);
return true;
}
//点击短信列表条目
simsmsItemClickHandler = function (tag, id, num) {
if (tag == "1") {
var ids = [];
ids.push(id);
service.setSmsRead({
ids: ids
}, function (data) {
if (data.result) {
$(".simMsgList-item-class-" + id, "#simMsgTableContainer").removeClass('font-weight-bold');
}
});
}
}
//页面事件绑定
function initEventBind() {
$(".smslist-item-msg", "#simMsgTableContainer").die().live("click", function () {
var $this = $(this).addClass('showFullHeight');
$('.smslist-item-msg.showFullHeight', '#simMsgTableContainer').not($this).removeClass('showFullHeight');
});
$("#simMsgList_container p.checkbox, #simMsgListForm #simMsgList-checkAll").die().live("click", function () {
checkboxClickHandler();
});
$("#searchInput").die().live('blur', function () {
searchTextBlur();
}).live('keyup', function () {
updateSearchValue($("#searchInput").val());
});
}
//模块初始化开始
function init() {
var container = $('#container');
ko.cleanNode(container[0]);
var vm = new simSmsViewMode();
ko.applyBindings(vm, container[0]);
initEventBind();
}
window.smsUtil = {
changeLocationHandler: function (ele) {
if ($(ele).val() == 'sim') {
window.location.hash = '#msg_sim';
} else {
window.location.hash = '#msg_main';
}
}
};
return {
init: init
};
});