[Feature][S300][task-view-617][project] add S300 project based CPE_COMMON
Change-Id: I1ff09219a8d432a839f89312341021ddaf5da4d8
diff --git a/lynq/S300/ap/app/zte_webui/js/com.js b/lynq/S300/ap/app/zte_webui/js/com.js
new file mode 100755
index 0000000..e103a35
--- /dev/null
+++ b/lynq/S300/ap/app/zte_webui/js/com.js
@@ -0,0 +1,11413 @@
+
+define("service","underscore jquery set CryptoJS".split(" "), function (_, $, config, CryptoJS) {
+ function addTimerSomething(querys, cb) {
+ if (_.isArray(querys)) {
+ for (var i = 0; i < querys.length; i++) {
+ addQueryString(querys[i]);
+ }
+ } else {
+ addQueryString(querys);
+ }
+ addCallback(cb);
+ }
+ function removeTimerSomething(querys, cb) {
+ if (_.isArray(querys)) {
+ for (var i = 0; i < querys.length; i++) {
+ removeQueryString(querys[i]);
+ }
+ } else {
+ removeQueryString(querys);
+ }
+ removeCallback(cb);
+ }
+ function getCurretnMAC() {
+ return getUserMacAddr({}).get_user_mac_addr;
+ }
+ function getDdnsParams(values, callback) {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ return {
+ multi_data: 1,
+ cmd: "DDNS_Enable,DDNS_Mode,DDNSProvider,DDNSAccount,DDNSPassword,DDNS,DDNS_Hash_Value"
+ };
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return {
+ DDNS_Enable: paramD.DDNS_Enable,
+ DDNS_Mode: paramD.DDNS_Mode,
+ DDNSProvider: paramD.DDNSProvider,
+ DDNSAccount: paramD.DDNSAccount,
+ DDNSPassword: paramD.DDNSPassword,
+ DDNS: paramD.DDNS,
+ DDNS_Hash_Value: paramD.DDNS_Hash_Value
+ }
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setDDNSForward() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = $.extend({}, values);
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getLoginData() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "modem_main_state,puknumber,pinnumber,blc_wan_mode,blc_wan_auto_mode,psw_fail_num_str,login_lock_time,psw_changed";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ if (paramD.blc_wan_mode == "AUTO") {
+ paramD.blc_wan_mode = paramD.blc_wan_auto_mode ? paramD.blc_wan_auto_mode : 'AUTO_PPP';
+ } else {
+ paramD.blc_wan_mode = paramD.blc_wan_mode ? paramD.blc_wan_mode : 'PPP';
+ }
+ paramD.psw_fail_num_str = paramD.psw_fail_num_str == '' ? config.MAX_LOGIN_COUNT : paramD.psw_fail_num_str;
+ paramD.login_lock_time = paramD.login_lock_time == '' ? '300' : paramD.login_lock_time;
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function login() {
+ return stuffMake(arguments, {}, prepare, deal, {
+ errorType: 'badPassword'
+ }, true);
+ function prepare(values, isPost) {
+ var obj = {
+ goformId: "LOGIN",
+ password: config.PASSWORD_ENCODE ? Base64.encode(values.password) : values.password
+ };
+ return obj;
+ }
+ function deal(paramD) {
+ if (paramD && (paramD.result == "0" || paramD.result == "4")) {
+ informationAll.isLoggedIn = true;
+ return {
+ result: true
+ };
+ } else {
+ var loginError = {};
+ switch (paramD.result) {
+ case "1":
+ loginError = {
+ errorType: "Login Fail"
+ };
+ break;
+ case "2":
+ loginError = {
+ errorType: "duplicateUser"
+ };
+ break;
+ case "3":
+ loginError = {
+ errorType: "badPassword"
+ };
+ break;
+ default:
+ loginError = {
+ errorType: "Login Fail"
+ };
+ break;
+ }
+ informationAll.isLoggedIn = false;
+ return $.extend(errUnknownObj, loginError);
+ }
+ }
+ }
+ function getLoginStatus() {
+ if (informationAll.isLoggedIn != undefined) {
+ return stuffMake(arguments, {
+ status: informationAll.isLoggedIn ? 'loggedIn' : 'loggedOut'
+ });
+ } else {
+ var resultObject = {};
+ if (!config.HAS_LOGIN) {
+ resultObject.status = 'loggedIn';
+ resultObject.errorType = 'no_login';
+ informationAll.isLoggedIn = true;
+ }
+ return stuffMake(arguments, resultObject, prepare, deal, null, false);
+ }
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "loginfo";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.loginfo || paramD.loginfo == "") {
+ var loginStatus = {};
+ switch (paramD.loginfo) {
+ case "ok":
+ informationAll.isLoggedIn = true;
+ loginStatus.status = "loggedIn";
+ break;
+ default:
+ informationAll.isLoggedIn = false;
+ loginStatus.status = "loggedOut";
+ break;
+ }
+ return loginStatus;
+ } else {
+ informationAll.isLoggedIn = undefined;
+ return $.extend(errUnknownObj, {
+ errorType: "LoginStatusError"
+ });
+ }
+ }
+ }
+ function enterPIN() {
+ return stuffMake(arguments, {}, prepare, deal, {}, true);
+ function prepare(values, isPost) {
+ var obj = {};
+ obj.goformId = "ENTER_PIN";
+ obj.PinNumber = values.PinNumber;
+ return obj;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result === "success") {
+ return {
+ result: true
+ };
+ } else {
+ return {
+ result: false
+ };
+ }
+ }
+ }
+ function enterPUK() {
+ return stuffMake(arguments, {}, prepare, deal, {}, true);
+ function prepare(values, isPost) {
+ var obj = {};
+ obj.goformId = "ENTER_PUK";
+ obj.PUKNumber = values.PUKNumber;
+ obj.PinNumber = values.PinNumber;
+ return obj;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result === "success") {
+ return {
+ result: true
+ };
+ } else {
+ return {
+ result: false
+ };
+ }
+ }
+ }
+
+ function getStatusInfo() {
+ if (informationAll.isLoggedIn === undefined) {
+ var loginStatus = getLoginStatus();
+ return {
+ networkType: informationAll.networkType,
+ signalImg: informationAll.signalImg,
+ networkOperator: informationAll.networkOperator,
+ spn_b1_flag: informationAll.spn_b1_flag,
+ spn_name_data: informationAll.spn_name_data,
+ spn_b2_flag: informationAll.spn_b2_flag,
+ connectStatus: informationAll.connectStatus,
+ rj45ConnectStatus: informationAll.rj45ConnectStatus,
+ ssid1AttachedNum: informationAll.ssid1AttachedNum,
+ ssid2AttachedNum: informationAll.ssid2AttachedNum,
+ wirelessDeviceNum: informationAll.ssid1AttachedNum + informationAll.ssid2AttachedNum,
+ roamingStatus: informationAll.roamingStatus,
+ wifiStatus: informationAll.wifiStatus,
+ simStatus: informationAll.simStatus,
+ pinStatus: informationAll.pinStatus,
+ batteryStatus: informationAll.batteryStatus,
+ batteryLevel: informationAll.batteryLevel,
+ batteryPers: informationAll.batteryPers,
+ batteryTime: informationAll.batteryTime,
+ ssid: informationAll.ssid,
+ authMode: informationAll.authMode,
+ data_counter: informationAll.data_counter,
+ isLoggedIn: loginStatus.status == "loggedIn",
+ newSmsReceived: informationAll.newSmsReceived,
+ smsReportReceived: informationAll.smsReportReceived,
+ smsUnreadCount: informationAll.smsUnreadCount,
+ limitVolumeEnable: informationAll.limitVolumeEnable,
+ limitVolumeType: informationAll.limitVolumeType,
+ limitVolumePercent: informationAll.limitVolumePercent,
+ limitVolumeSize: informationAll.limitVolumeSize,
+ connectWifiProfile: informationAll.connectWifiProfile,
+ connectWifiSSID: informationAll.connectWifiSSID,
+ connectWifiStatus: informationAll.connectWifiStatus,
+ multi_ssid_enable: informationAll.multi_ssid_enable,
+ roamMode: informationAll.roamMode,
+ blc_wan_mode: informationAll.blc_wan_mode,
+ current_upgrade_state: informationAll.current_upgrade_state,
+ is_mandatory: informationAll.is_mandatory,
+ new_version_state: informationAll.new_version_state,
+ allowRoamingUpdate: informationAll.allowRoamingUpdate,
+ ap_station_enable: informationAll.ap_station_enable,
+ ap_station_mode: informationAll.ap_station_mode,
+ dialMode: informationAll.dialMode,
+ fota_package_already_download: informationAll.fota_package_already_download,
+ ethWanMode: informationAll.ethWanMode,
+ fota_user_selector: informationAll.fota_user_selector,
+ defaultWanName: informationAll.defaultWanName
+ };
+ }
+ return {
+ networkType: informationAll.networkType,
+ signalImg: informationAll.signalImg,
+ networkOperator: informationAll.networkOperator,
+ spn_b1_flag: informationAll.spn_b1_flag,
+ spn_name_data: informationAll.spn_name_data,
+ spn_b2_flag: informationAll.spn_b2_flag,
+ connectStatus: informationAll.connectStatus,
+ rj45ConnectStatus: informationAll.rj45ConnectStatus,
+ ssid1AttachedNum: informationAll.ssid1AttachedNum,
+ ssid2AttachedNum: informationAll.ssid2AttachedNum,
+ wirelessDeviceNum: informationAll.ssid1AttachedNum + informationAll.ssid2AttachedNum,
+ roamingStatus: informationAll.roamingStatus,
+ wifiStatus: informationAll.wifiStatus,
+ simStatus: informationAll.simStatus,
+ pinStatus: informationAll.pinStatus,
+ batteryStatus: informationAll.batteryStatus,
+ batteryLevel: informationAll.batteryLevel,
+ batteryPers: informationAll.batteryPers,
+ batteryTime: informationAll.batteryTime,
+ ssid: informationAll.ssid,
+ authMode: informationAll.authMode,
+ data_counter: informationAll.data_counter,
+ isLoggedIn: informationAll.isLoggedIn,
+ newSmsReceived: informationAll.newSmsReceived,
+ smsReportReceived: informationAll.smsReportReceived,
+ smsUnreadCount: informationAll.smsUnreadCount,
+ limitVolumeEnable: informationAll.limitVolumeEnable,
+ limitVolumeType: informationAll.limitVolumeType,
+ limitVolumePercent: informationAll.limitVolumePercent,
+ limitVolumeSize: informationAll.limitVolumeSize,
+ connectWifiProfile: informationAll.connectWifiProfile,
+ connectWifiSSID: informationAll.connectWifiSSID,
+ connectWifiStatus: informationAll.connectWifiStatus,
+ multi_ssid_enable: informationAll.multi_ssid_enable,
+ blc_wan_mode: informationAll.blc_wan_mode,
+ roamMode: informationAll.roamMode,
+ current_upgrade_state: informationAll.current_upgrade_state,
+ is_mandatory: informationAll.is_mandatory,
+ new_version_state: informationAll.new_version_state,
+ allowRoamingUpdate: informationAll.allowRoamingUpdate,
+ ap_station_enable: informationAll.ap_station_enable,
+ ap_station_mode: informationAll.ap_station_mode,
+ dialMode: informationAll.dialMode,
+ fota_package_already_download: informationAll.fota_package_already_download,
+ ethWanMode: informationAll.ethWanMode,
+ fota_user_selector: informationAll.fota_user_selector,
+ defaultWanName: informationAll.defaultWanName
+ };
+ }
+ function getConnectionInfo() {
+ var isData = informationAll.limitVolumeType == '1';
+ var result = {
+ data_counter: informationAll.data_counter,
+ connectStatus: informationAll.connectStatus,
+ rj45ConnectStatus: informationAll.rj45ConnectStatus,
+ limitVolumeEnable: informationAll.limitVolumeEnable,
+ limitVolumeType: informationAll.limitVolumeType,
+ limitVolumePercent: informationAll.limitVolumePercent,
+ networkType: informationAll.networkType
+ };
+ if (isData) {
+ result.limitDataMonth = informationAll.limitVolumeSize;
+ result.limitTimeMonth = 0;
+ } else {
+ result.limitTimeMonth = informationAll.limitVolumeSize;
+ result.limitDataMonth = 0;
+ }
+ result.blc_wan_mode = informationAll.blc_wan_mode;
+ return result;
+ }
+ function resetNewSmsReceivedVar() {
+ informationAll.newSmsReceived = false;
+ }
+ function resetSmsReportReceivedVar() {
+ informationAll.smsReportReceived = false;
+ }
+ function getSmsCapability() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "sms_capacity_info";
+ return valueReq;
+ }
+ function deal(paramD) {
+ return {
+ nvTotal: parseInt(paramD.sms_nv_total, 10),
+ nvUsed: parseInt(paramD.sms_nv_rev_total, 10) + parseInt(paramD.sms_nv_send_total, 10) + parseInt(paramD.sms_nv_draftbox_total, 10),
+ simTotal: parseInt(paramD.sms_sim_total, 10),
+ simUsed: parseInt(paramD.sms_sim_rev_total, 10) + parseInt(paramD.sms_sim_send_total, 10) + parseInt(paramD.sms_sim_draftbox_total, 10),
+ nvReceive: parseInt(paramD.sms_nv_rev_total, 10),
+ nvSend: parseInt(paramD.sms_nv_send_total, 10),
+ nvDraft: parseInt(paramD.sms_nv_draftbox_total, 10),
+ simReceive: parseInt(paramD.sms_sim_rev_total, 10),
+ simSend: parseInt(paramD.sms_sim_send_total, 10),
+ simDraft: parseInt(paramD.sms_sim_draftbox_total, 10)
+ };
+ }
+ }
+ function connect() {
+ var callback = arguments[1];
+ var checkPoint = 0;
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.notCallback = true;
+ valueReq.goformId = "CONNECT_NETWORK";
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD.result == "success") {
+ checkPoint = new Date().getTime();
+ addCallback(checkConnectStatus);
+ } else {
+ callback({
+ result: false
+ });
+ }
+ }
+ function checkConnectStatus(paramD) {
+ if (paramD.ppp_status == "ppp_connecting") {
+ informationAll.connectStatus = "ppp_connecting";
+ } else if (paramD.ppp_status == "ppp_connected") {
+ removeCallback(checkConnectStatus);
+ informationAll.connectStatus = "ppp_connected";
+ callback({
+ result: true,
+ status: informationAll.connectStatus
+ });
+ } else if (new Date().getTime() - checkPoint < 1e4) {
+ informationAll.connectStatus = "ppp_connecting";
+ } else {
+ removeCallback(checkConnectStatus);
+ callback({
+ result: false
+ });
+ }
+ }
+ }
+ function disconnect() {
+ var callback = arguments[1];
+ var checkPoint = 0;
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.notCallback = true;
+ valueReq.goformId = "DISCONNECT_NETWORK";
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD.result == "success") {
+ checkPoint = new Date().getTime();
+ addCallback(checkDisconnectStatus);
+ } else {
+ callback({
+ result: false
+ });
+ }
+ }
+ function checkDisconnectStatus(paramD) {
+ if (paramD.ppp_status == "ppp_disconnecting") {
+ informationAll.connectStatus = "ppp_disconnecting";
+ } else if (paramD.ppp_status == "ppp_disconnected") {
+ removeCallback(checkDisconnectStatus);
+ informationAll.connectStatus = "ppp_disconnected";
+ callback({
+ result: true,
+ status: informationAll.connectStatus
+ });
+ } else if (new Date().getTime() - checkPoint < 1e4) {
+ informationAll.connectStatus = "ppp_disconnecting";
+ } else {
+ removeCallback(checkDisconnectStatus);
+ callback({
+ result: false
+ });
+ }
+ }
+ }
+ function getApnSettings() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "APN_configtmp0,APN_configtmp1,APN_configtmp2,APN_configtmp3,APN_configtmp4,APN_configtmp5,APN_configtmp6,APN_configtmp7,APN_configtmp8,APN_configtmp9," + "APN_configtmp10,APN_configtmp11,APN_configtmp12,APN_configtmp13,APN_configtmp14,APN_configtmp15,APN_configtmp16,APN_configtmp17,APN_configtmp18,APN_configtmp19," + "ipv6_APN_configtmp0,ipv6_APN_configtmp1,ipv6_APN_configtmp2,ipv6_APN_configtmp3,ipv6_APN_configtmp4,ipv6_APN_configtmp5,ipv6_APN_configtmp6,ipv6_APN_configtmp7,ipv6_APN_configtmp8,ipv6_APN_configtmp9," + "ipv6_APN_configtmp10,ipv6_APN_configtmp11,ipv6_APN_configtmp12,ipv6_APN_configtmp13,ipv6_APN_configtmp14,ipv6_APN_configtmp15,ipv6_APN_configtmp16,ipv6_APN_configtmp17,ipv6_APN_configtmp18,ipv6_APN_configtmp19," + "m_profile_name,profile_name,wan_dial,pdp_type,pdp_select,index,Current_index,apn_auto_config,ipv6_apn_auto_config," + "apn_mode,wan_apn,ppp_auth_mode,ppp_username,ppp_passtmp," + "ipv6_wan_apn,ipv6_pdp_type,ipv6_ppp_auth_mode,ipv6_ppp_username,ipv6_ppp_passtmp,apn_num_preset";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(result) {
+ if (result) {
+ return {
+ APNs: result.APN_configtmp0 + "||" + result.APN_configtmp1 + "||" + result.APN_configtmp2 + "||" + result.APN_configtmp3 + "||" + result.APN_configtmp4 + "||"
+ +result.APN_configtmp5 + "||" + result.APN_configtmp6 + "||" + result.APN_configtmp7 + "||" + result.APN_configtmp8 + "||" + result.APN_configtmp9 + "||"
+ +result.APN_configtmp10 + "||" + result.APN_configtmp11 + "||" + result.APN_configtmp12 + "||" + result.APN_configtmp13 + "||" + result.APN_configtmp14 + "||"
+ +result.APN_configtmp15 + "||" + result.APN_configtmp16 + "||" + result.APN_configtmp17 + "||" + result.APN_configtmp18 + "||" + result.APN_configtmp19,
+ ipv6APNs: result.ipv6_APN_configtmp0 + "||" + result.ipv6_APN_configtmp1 + "||" + result.ipv6_APN_configtmp2 + "||" + result.ipv6_APN_configtmp3 + "||" + result.ipv6_APN_configtmp4 + "||"
+ +result.ipv6_APN_configtmp5 + "||" + result.ipv6_APN_configtmp6 + "||" + result.ipv6_APN_configtmp7 + "||" + result.ipv6_APN_configtmp8 + "||" + result.ipv6_APN_configtmp9 + "||"
+ +result.ipv6_APN_configtmp10 + "||" + result.ipv6_APN_configtmp11 + "||" + result.ipv6_APN_configtmp12 + "||" + result.ipv6_APN_configtmp13 + "||" + result.ipv6_APN_configtmp14 + "||"
+ +result.ipv6_APN_configtmp15 + "||" + result.ipv6_APN_configtmp16 + "||" + result.ipv6_APN_configtmp17 + "||" + result.ipv6_APN_configtmp18 + "||" + result.ipv6_APN_configtmp19,
+ apnMode: result.apn_mode,
+ profileName: result.m_profile_name || result.profile_name,
+ wanDial: result.wan_dial,
+ pdpType: result.pdp_type == 'IP' ? 'IP' : result.ipv6_pdp_type,
+ pdpSelect: result.pdp_select,
+ index: result.index,
+ currIndex: result.Current_index,
+ autoApns: result.apn_auto_config,
+ autoApnsV6: result.ipv6_apn_auto_config,
+ wanApn: result.wan_apn,
+ authMode: result.ppp_auth_mode.toLowerCase(),
+ username: result.ppp_username,
+ password: result.ppp_passtmp,
+ dnsMode: "",
+ dns1: "",
+ dns2: "",
+ wanApnV6: result.ipv6_wan_apn,
+ authModeV6: result.ipv6_ppp_auth_mode.toLowerCase(),
+ usernameV6: result.ipv6_ppp_username,
+ passwordV6: result.ipv6_ppp_passtmp,
+ dnsModeV6: "",
+ dns1V6: "",
+ dns2V6: "",
+ apnNumPreset: result.apn_num_preset
+ };
+ } else {
+ return {
+ result: false
+ };
+ }
+ }
+ }
+ function deleteApn() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {
+ apn_action: "delete",
+ apn_mode: "manual",
+ index: values.index
+ };
+ valueReq.goformId = "APN_PROC_EX";
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD.result == "success") {
+ return {
+ result: true
+ };
+ } else {
+ return {
+ result: false
+ };
+ }
+ }
+ }
+ function setDefaultApn() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var requestParam = {
+ goformId: "APN_PROC_EX",
+ apn_mode: values.apnMode
+ };
+ if (values.apnMode == 'manual') {
+ requestParam.apn_action = "set_default";
+ requestParam.set_default_flag = "1";
+ requestParam.pdp_type = values.pdpType;
+ requestParam.index = values.index;
+ }
+ return requestParam;
+ }
+ function deal(paramD) {
+ if (paramD.result == "success") {
+ return {
+ result: true
+ };
+ } else {
+ return {
+ result: false
+ };
+ }
+ }
+ }
+ function addOrEditApn() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {
+ goformId: "APN_PROC_EX",
+ apn_action: "save",
+ apn_mode: "manual",
+ profile_name: values.profileName,
+ wan_dial: '*99#',
+ pdp_type: values.pdpType,
+ pdp_select: 'auto',
+ index: values.index
+ };
+ if (values.pdpType == "IP") {
+ $.extend(valueReq, {
+ wan_apn: values.wanApn,
+ ppp_auth_mode: values.authMode,
+ ppp_username: values.username,
+ ppp_passtmp: values.password,
+ });
+ } else if (values.pdpType == "IPv6") {
+ $.extend(valueReq, {
+ ipv6_wan_apn: values.wanApnV6,
+ ipv6_ppp_auth_mode: values.authModeV6,
+ ipv6_ppp_username: values.usernameV6,
+ ipv6_ppp_passtmp: values.passwordV6
+ });
+ } else {
+ $.extend(valueReq, {
+ wan_apn: values.wanApn,
+ ppp_auth_mode: values.authMode,
+ ppp_username: values.username,
+ ppp_passtmp: values.password,
+ dns_mode: values.dnsMode,
+ prefer_dns_manual: values.dns1,
+ standby_dns_manual: values.dns2,
+ ipv6_wan_apn: values.wanApnV6,
+ ipv6_ppp_auth_mode: values.authModeV6,
+ ipv6_ppp_username: values.usernameV6,
+ ipv6_ppp_passtmp: values.passwordV6
+ });
+ }
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD.result == "success") {
+ return {
+ result: true
+ };
+ } else {
+ return {
+ result: false
+ };
+ }
+ }
+ }
+ var timerQueryString = ["modem_main_state", "pin_status", "blc_wan_mode", "blc_wan_auto_mode", "loginfo", "fota_new_version_state", "fota_current_upgrade_state", "fota_upgrade_selector", "network_provider", "is_mandatory", "sta_count", "m_sta_count"];
+ var loginTimerQueryString = ["signalbar", "network_type", "sub_network_type", "ppp_status", "rj45_state", "EX_SSID1", "sta_ip_status", "EX_wifi_profile", "m_ssid_enable", "wifi_cur_state", "SSID1", "simcard_roam", "lan_ipaddr", "battery_charging", "battery_vol_percent", "battery_pers", "spn_name_data", "spn_b1_flag", "spn_b2_flag", "realtime_tx_bytes", "realtime_rx_bytes", "realtime_time", "realtime_tx_thrpt", "realtime_rx_thrpt", "monthly_rx_bytes", "monthly_tx_bytes", "traffic_alined_delta", "monthly_time", "date_month", "data_volume_limit_switch", "data_volume_limit_size", "data_volume_alert_percent", "data_volume_limit_unit", "roam_setting_option", "upg_roam_switch", "fota_package_already_download", 'ssid', 'dial_mode', 'ethwan_mode', 'default_wan_name'];
+ if (config.HAS_SMS) {
+ $.merge(loginTimerQueryString, ["sms_received_flag", "sts_received_flag", 'sms_unread_num']);
+ }
+ var timerCallbackStack = [];
+ var timerCallbacks = [timerUpdateStatus];
+ function timerUpdater() {
+ if (!updateTimerFlag) {
+ setTimeout(function () {
+ timerUpdater();
+ }, 1000);
+ return;
+ }
+ var queryParams = checkTimerUpdaterParameters();
+ reqAsync(queryParams, function (paramD) {
+ for (var i = 0; i < timerCallbacks.length; i++) {
+ if (typeof timerCallbacks[i] === "function") {
+ timerCallbacks[i](paramD);
+ }
+ }
+ $.merge(timerCallbacks, timerCallbackStack);
+ timerCallbackStack = [];
+ setTimeout(function () {
+ timerUpdater();
+ }, 1000);
+ }, function () {
+ timerUpdaterErrorCallback();
+ setTimeout(function () {
+ timerUpdater();
+ }, 1000);
+ }, false);
+ }
+ function checkTimerUpdaterParameters() {
+ var queryParams = {
+ multi_data: 1,
+ };
+ if (window.location.hash && window.location.hash != '#entry' && informationAll.isLoggedIn) {
+ if (config.HAS_SMS) {
+ queryParams.sms_received_flag_flag = 0;
+ queryParams.sts_received_flag_flag = 0;
+ }
+ if (loginTimerQueryString.length > 0 && _.indexOf(timerQueryString, loginTimerQueryString[0]) == -1) {
+ $.each(loginTimerQueryString, function (i, n) {
+ timerQueryString.push(n);
+ });
+ }
+ } else {
+ if (loginTimerQueryString.length > 0 && _.indexOf(timerQueryString, loginTimerQueryString[0]) != -1) {
+ timerQueryString = _.without(timerQueryString, loginTimerQueryString);
+ }
+ }
+ queryParams.cmd = timerQueryString.join(",");
+ return queryParams;
+ }
+ function addCallback(cb) {
+ if (_.indexOf(timerCallbackStack, cb) == -1) {
+ timerCallbackStack.push(cb);
+ }
+ }
+ function removeCallback(cb) {
+ timerCallbacks = _.without(timerCallbacks, cb);
+ if (timerCallbacks.length == 0) {
+ timerCallbacks.push(timerUpdateStatus);
+ }
+ return timerCallbackStack;
+ }
+ function addQueryString(query) {
+ if (_.indexOf(timerQueryString, query) == -1) {
+ timerQueryString.push(query);
+ }
+ }
+ function removeQueryString(query) {
+ timerQueryString = _.without(timerQueryString, query);
+ return timerQueryString;
+ }
+ function timerUpdateStatus(paramD) {
+ informationAll.defaultWanName = paramD.default_wan_name;
+ informationAll.signalImg = typeof paramD.signalbar == 'undefined' ? '0' : paramD.signalbar;
+ informationAll.networkType = paramD.sub_network_type ? paramD.sub_network_type : (paramD.network_type ? paramD.network_type : '');
+ if (informationAll.networkType.toLowerCase().indexOf("limited_service") != -1 || informationAll.networkType.toLowerCase().indexOf("limited service") != -1) {
+ informationAll.networkType = "limited_service";
+ } else if (informationAll.networkType.toLowerCase().indexOf("no_service") != -1 || informationAll.networkType.toLowerCase().indexOf("no service") != -1) {
+ informationAll.networkType = "no_service";
+ }
+ informationAll.networkOperator = paramD.network_provider ? paramD.network_provider : '';
+ informationAll.spn_b1_flag = paramD.spn_b1_flag;
+ informationAll.spn_b2_flag = paramD.spn_b2_flag;
+ informationAll.spn_name_data = paramD.spn_name_data;
+ informationAll.connectStatus = typeof paramD.ppp_status == 'undefined' ? 'ppp_disconnected' : paramD.ppp_status;
+ informationAll.rj45ConnectStatus = (typeof paramD.rj45_state == 'undefined' || paramD.rj45_state == '') ? 'dead' : paramD.rj45_state;
+ informationAll.ethWanMode = paramD.ethwan_mode;
+ informationAll.ssid1AttachedNum = paramD.sta_count == "" ? 0 : parseInt(paramD.sta_count, 10);
+ informationAll.ssid2AttachedNum = paramD.m_sta_count == "" ? 0 : parseInt(paramD.m_sta_count, 10);
+ informationAll.roamingStatus = getRoamStatus(informationAll.networkType, paramD.modem_main_state, paramD.simcard_roam);
+ informationAll.wifiStatus = paramD.wifi_cur_state == "1";
+ informationAll.simStatus = paramD.modem_main_state;
+ informationAll.pinStatus = paramD.pin_status;
+ var needMinutes = 3 * 60 * 60;
+ var batteryLevel = (paramD.battery_vol_percent && paramD.battery_vol_percent.length > 0) ? paramD.battery_vol_percent : 100;
+ informationAll.batteryPers = paramD.battery_pers;
+ var remainMinutes = Math.round(needMinutes * (1 - batteryLevel / 100));
+ informationAll.batteryStatus = (typeof paramD.battery_charging == 'undefined') ? '0' : paramD.battery_charging;
+ informationAll.batteryLevel = batteryLevel;
+ informationAll.batteryTime = remainMinutes.toString();
+ informationAll.data_counter = {
+ uploadRate: paramD.realtime_tx_thrpt == '' ? 0 : paramD.realtime_tx_thrpt,
+ downloadRate: paramD.realtime_rx_thrpt == '' ? 0 : paramD.realtime_rx_thrpt,
+ currentSent: paramD.realtime_tx_bytes == '' ? 0 : paramD.realtime_tx_bytes,
+ currentReceived: paramD.realtime_rx_bytes == '' ? 0 : paramD.realtime_rx_bytes,
+ currentConnectedTime: paramD.realtime_time == '' ? 0 : paramD.realtime_time,
+ monthlySent: paramD.monthly_tx_bytes == '' ? 0 : paramD.monthly_tx_bytes,
+ monthlyReceived: paramD.monthly_rx_bytes == '' ? 0 : paramD.monthly_rx_bytes,
+ traffic_alined_delta: paramD.traffic_alined_delta == '' ? 0 : paramD.traffic_alined_delta,
+ monthlyConnectedTime: paramD.monthly_time == '' ? 0 : paramD.monthly_time,
+ month: paramD.date_month == '' ? 1 : paramD.date_month
+ };
+ informationAll.ssid = paramD.SSID1;
+ informationAll.authMode = paramD.AuthMode;
+ informationAll.isLoggedIn = config.HAS_LOGIN ? paramD.loginfo == "ok" : true;
+ if (config.HAS_SMS) {
+ if (!informationAll.newSmsReceived) {
+ informationAll.newSmsReceived = paramD.sms_received_flag > 0;
+ }
+ if (!informationAll.smsReportReceived) {
+ informationAll.smsReportReceived = paramD.sts_received_flag > 0;
+ }
+ if (typeof paramD.sms_dev_unread_num != "undefined") {
+ informationAll.smsUnreadCount = config.SMS_UNREAD_NUM_INCLUDE_SIM ? parseInt(paramD.sms_dev_unread_num | 0, 10) + parseInt(paramD.sms_sim_unread_num | 0, 10) : parseInt(paramD.sms_dev_unread_num | 0, 10);
+ } else {
+ informationAll.smsUnreadCount = parseInt(paramD.sms_unread_num | 0, 10)
+ }
+ }
+ if (paramD.data_volume_limit_switch == '1') {
+ informationAll.limitVolumeEnable = true;
+ informationAll.limitVolumeType = paramD.data_volume_limit_unit == 'data' ? '1' : '0';
+ informationAll.limitVolumePercent = paramD.data_volume_alert_percent;
+ if (paramD.data_volume_limit_unit == 'data') {
+ var limitMonth = paramD.data_volume_limit_size.split("_");
+ informationAll.limitVolumeSize = limitMonth[0] * limitMonth[1] * 1024 * 1024;
+ } else {
+ informationAll.limitVolumeSize = paramD.data_volume_limit_size * 60 * 60;
+ }
+ } else {
+ informationAll.limitVolumeEnable = false;
+ informationAll.limitVolumeType = '1';
+ informationAll.limitVolumePercent = '100';
+ informationAll.limitVolumeSize = '0';
+ }
+ informationAll.connectWifiProfile = paramD.EX_wifi_profile;
+ informationAll.connectWifiSSID = paramD.EX_SSID1;
+ informationAll.connectWifiStatus = paramD.sta_ip_status;
+ informationAll.multi_ssid_enable = paramD.m_ssid_enable;
+ informationAll.roamMode = paramD.roam_setting_option;
+ if (paramD.blc_wan_mode == "AUTO") {
+ informationAll.blc_wan_mode = paramD.blc_wan_auto_mode ? paramD.blc_wan_auto_mode : 'AUTO_PPP';
+ } else {
+ informationAll.blc_wan_mode = paramD.blc_wan_mode ? paramD.blc_wan_mode : 'PPP';
+ }
+ informationAll.new_version_state = paramD.fota_new_version_state == "has_critical" || paramD.fota_new_version_state == "has_optional" || paramD.fota_new_version_state == "already_has_pkg";
+ informationAll.current_upgrade_state = paramD.fota_current_upgrade_state;
+ if (informationAll.current_upgrade_state == "verify_failed") {
+ informationAll.current_upgrade_state = "upgrade_pack_error";
+ }
+ informationAll.fota_user_selector = paramD.fota_upgrade_selector;
+ informationAll.is_mandatory = paramD.is_mandatory == "1" || paramD.fota_new_version_state == "has_critical";
+ informationAll.allowRoamingUpdate = paramD.upg_roam_switch;
+ informationAll.dialMode = paramD.dial_mode;
+ informationAll.fota_package_already_download = paramD.fota_package_already_download;
+ }
+ function timerUpdaterErrorCallback() {
+ informationAll.batteryStatus = '0';
+ }
+ function getRoamStatus(networkType, modemState, simcardRoam) {
+ if (("" == $.trim(networkType)) || "no_service" == networkType.toLowerCase() || "limited_service" == networkType.toLowerCase() || "modem_sim_undetected" == modemState || "modem_waitpin" == modemState || "modem_waitpuk" == modemState) {
+ return false;
+ }
+ if ("Internal" == simcardRoam || "International" == simcardRoam) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ $(document).ready(function () {
+ setTimeout(function () {
+ timerUpdater();
+ }, 0);
+ });
+ function setNetwork(strNetworkNumber, nRat, nSubAct, callback) {
+ if ((typeof(strNetworkNumber) !== "string") || (strNetworkNumber === "") || (typeof(nRat) !== "number") || (isNaN(nRat))) {
+ if (typeof(callback) === "function") {
+ callback(false);
+ return;
+ }
+ }
+ var nRat1 = -1;
+ if (nRat === 0) {
+ nRat1 = 0;
+ } else if (nRat === 2) {
+ nRat1 = 2;
+ } else if (nRat == 7) {
+ nRat1 = 7;
+ } else {
+ nRat1 = -1;
+ }
+ if (-1 === nRat1) {
+ if (typeof(callback) === "function") {
+ callback(false);
+ return;
+ }
+ }
+ var SubAct;
+ if (nSubAct.toString() == "NaN") {
+ SubAct = "";
+ } else {
+ SubAct = nSubAct;
+ }
+ reqAsync({
+ goformId: "SET_NETWORK",
+ NetworkNumber: strNetworkNumber,
+ Rat: nRat,
+ nSubrat: SubAct
+ }, function (paramD) {
+ if (paramD && paramD.result == "success") {
+ var flag;
+ var counter = 0;
+ var timer = setInterval(function () {
+ var obj = reqSync({
+ cmd: 'm_netselect_result',
+ }, false);
+ if (!obj) {
+ callback(false);
+ return;
+ }
+ if (obj.m_netselect_result == "manual_success") {
+ flag = "1";
+ window.clearInterval(timer);
+ callback(true);
+ } else if (obj.m_netselect_result == "manual_fail") {
+ flag = "0";
+ window.clearInterval(timer);
+ callback(false);
+ } else if (counter < 120) {
+ counter++;
+ } else {
+ window.clearInterval(timer);
+ callback(false);
+ }
+ }, 1000);
+ } else {
+ callback(false);
+ }
+ }, function (paramD) {
+ callback(false);
+ }, true);
+ }
+ function savePhoneBook() {
+ var callback = arguments[1];
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.notCallback = true;
+ valueReq.goformId = "PBM_CONTACT_ADD";
+ valueReq.location = values.location;
+ valueReq.name = encodeMessage(values.name);
+ valueReq.mobilephone_num = values.mobile_phone_number;
+ if (valueReq.location == 1) {
+ valueReq.add_index_pc = values.index;
+ valueReq.homephone_num = values.home_phone_number;
+ valueReq.officephone_num = values.office_phone_number;
+ valueReq.email = encodeMessage(values.mail);
+ valueReq.groupchoose = values.group;
+ if (!valueReq.groupchoose) {
+ valueReq.groupchoose = "common";
+ }
+ } else {
+ valueReq.edit_index = values.index;
+ }
+ if (values.delId != undefined) {
+ valueReq.delId = values.delId;
+ }
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == "success") {
+ addTimerSomething("pbm_write_flag", checkSavePhoneBook);
+ } else {
+ callback(paramD);
+ }
+ }
+ function checkSavePhoneBook(paramD) {
+ checkPbmWriteFlag(paramD, callback, checkSavePhoneBook);
+ }
+ }
+ function checkPbmWriteFlag(paramD, callback, fn) {
+ if (paramD.pbm_write_flag == "0") {
+ removeTimerSomething("pbm_write_flag", fn);
+ callback({
+ result: "success"
+ });
+ } else if (paramD.pbm_write_flag == "6" || paramD.pbm_write_flag == "7" || paramD.pbm_write_flag == "8" || paramD.pbm_write_flag == "9" || paramD.pbm_write_flag == "10" || paramD.pbm_write_flag == "11" || paramD.pbm_write_flag == "14") {
+ removeTimerSomething("pbm_write_flag", fn);
+ callback({
+ result: "fail"
+ });
+ } else {}
+ }
+ function deletePhoneBooks() {
+ var callback = arguments[1];
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.notCallback = true;
+ valueReq.goformId = "PBM_CONTACT_DEL";
+ valueReq.del_option = "delete_num";
+ valueReq.delete_id = values.indexs.join(",");
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == "success") {
+ addTimerSomething("pbm_write_flag", checkDeletePhoneBooks);
+ } else {
+ callback(paramD);
+ }
+ }
+ function checkDeletePhoneBooks(paramD) {
+ checkPbmWriteFlag(paramD, callback, checkDeletePhoneBooks);
+ }
+ }
+ function deleteAllPhoneBooks() {
+ var callback = arguments[1];
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.notCallback = true;
+ valueReq.goformId = "PBM_CONTACT_DEL";
+ valueReq.del_option = "delete_all";
+ valueReq.del_all_location = values.location;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == "success") {
+ addTimerSomething("pbm_write_flag", checkDeleteAllPhoneBooks);
+ } else {
+ callback(paramD);
+ }
+ }
+ function checkDeleteAllPhoneBooks(paramD) {
+ checkPbmWriteFlag(paramD, callback, checkDeleteAllPhoneBooks);
+ }
+ }
+ function deleteAllPhoneBooksByGroup() {
+ var callback = arguments[1];
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.notCallback = true;
+ valueReq.goformId = "PBM_CONTACT_DEL";
+ valueReq.del_option = "delete_all_by_group";
+ valueReq.del_all_location = 3;
+ valueReq.del_group = values.group;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == "success") {
+ addTimerSomething("pbm_write_flag", checkDeleteAllPhoneBooksByGroup);
+ } else {
+ callback(paramD);
+ }
+ }
+ function checkDeleteAllPhoneBooksByGroup(paramD) {
+ checkPbmWriteFlag(paramD, callback, checkDeleteAllPhoneBooksByGroup);
+ }
+ }
+ function setConnectionMode() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "SET_CONNECTION_MODE";
+ valueReq.ConnectionMode = values.connectionMode;
+ valueReq.roam_setting_option = values.isAllowedRoaming;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ callback(paramD);
+ }
+ }
+ }
+ function getConnectionMode() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "ConnectionMode";
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {};
+ result.connectionMode = paramD.connectionMode;
+ result.isAllowedRoaming = paramD.autoConnectWhenRoaming;
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function _getPhoneBooks(array, location) {
+ if (array[0].data_per_page == 0) {
+ return {
+ "pbm_data": []
+ };
+ }
+ return stuffMake(array, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.mem_store = location;
+ if (location == 2) {
+ valueReq.cmd = "pbm_data_total";
+ } else {
+ valueReq.cmd = "pbm_data_info";
+ }
+ valueReq.page = values.page;
+ valueReq.data_per_page = values.data_per_page;
+ valueReq.orderBy = values.orderBy;
+ valueReq.isAsc = values.isAsc;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.pbm_data) {
+ var books = [];
+ $.each(paramD.pbm_data, function (i) {
+ books.push({
+ pbm_id: paramD.pbm_data[i].pbm_id,
+ pbm_location: paramD.pbm_data[i].pbm_location,
+ pbm_number: paramD.pbm_data[i].pbm_number,
+ pbm_anr: paramD.pbm_data[i].pbm_anr,
+ pbm_anr1: paramD.pbm_data[i].pbm_anr1,
+ pbm_group: paramD.pbm_data[i].pbm_group,
+ pbm_name: decodeMessage(paramD.pbm_data[i].pbm_name),
+ pbm_email: decodeMessage(paramD.pbm_data[i].pbm_email)
+ });
+ });
+ return {
+ pbm_data: books
+ };
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getPhoneBooksByGroup() {
+ if (arguments[0].data_per_page == 0) {
+ return {
+ "pbm_data": []
+ };
+ }
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "pbm_data_total";
+ valueReq.mem_store = 3;
+ valueReq.pbm_group = values.group;
+ valueReq.page = values.page;
+ valueReq.data_per_page = values.data_per_page;
+ valueReq.orderBy = values.orderBy;
+ valueReq.isAsc = values.isAsc;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.pbm_data) {
+ var books = [];
+ $.each(paramD.pbm_data, function (i) {
+ books.push({
+ pbm_id: paramD.pbm_data[i].pbm_id,
+ pbm_location: paramD.pbm_data[i].pbm_location,
+ pbm_number: paramD.pbm_data[i].pbm_number,
+ pbm_anr: paramD.pbm_data[i].pbm_anr,
+ pbm_anr1: paramD.pbm_data[i].pbm_anr1,
+ pbm_group: paramD.pbm_data[i].pbm_group,
+ pbm_name: decodeMessage(paramD.pbm_data[i].pbm_name),
+ pbm_email: decodeMessage(paramD.pbm_data[i].pbm_email)
+ });
+ });
+ return {
+ pbm_data: books
+ };
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getDevicePhoneBooks() {
+ return _getPhoneBooks(arguments, 1);
+ }
+ function getSIMPhoneBooks() {
+ return _getPhoneBooks(arguments, 0);
+ }
+ function getPhoneBooks() {
+ return _getPhoneBooks(arguments, 2);
+ }
+ function getPhoneBookReady() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "pbm_init_flag";
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getPhoneBookCapacity(array, isSIM) {
+ return stuffMake(array, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "pbm_capacity_info";
+ if (isSIM) {
+ valueReq.pbm_location = "pbm_sim";
+ } else {
+ valueReq.pbm_location = "pbm_native";
+ }
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getSIMPhoneBookCapacity() {
+ var paramD = getPhoneBookCapacity(arguments, true);
+ return {
+ simPbmTotalCapacity: parseInt(paramD.pbm_sim_max_record_num),
+ simPbmUsedCapacity: parseInt(paramD.pbm_sim_used_record_num),
+ simType: paramD.pbm_sim_type,
+ maxNameLen: parseInt(paramD.pbm_sim_max_name_len),
+ maxNumberLen: parseInt(paramD.pbm_sim_max_number_len) > 40 ? 40 : parseInt(paramD.pbm_sim_max_number_len)
+ };
+ }
+ function getDevicePhoneBookCapacity() {
+ var paramD = getPhoneBookCapacity(arguments, false);
+ return {
+ pcPbmTotalCapacity: parseInt(paramD.pbm_dev_max_record_num),
+ pcPbmUsedCapacity: parseInt(paramD.pbm_dev_used_record_num)
+ };
+ }
+ function getAttachedCableDevices() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var obj = {
+ cmd: "lan_station_list"
+ };
+ return obj;
+ }
+ function deal(paramD) {
+ var deviceArr = [];
+ var attachedDevices = paramD.lan_station_list || paramD.station_list;
+ for (var i = 0; attachedDevices && i < attachedDevices.length; i++) {
+ var obj = {};
+ obj.macAddress = attachedDevices[i].mac_addr;
+ var hostname = attachedDevices[i].hostname;
+ obj.hostName = hostname == "" ? $.i18n.prop("unknown") : hostname;
+ obj.ipAddress = attachedDevices[i].ip_addr;
+ deviceArr.push(obj);
+ }
+ return {
+ attachedDevices: deviceArr
+ };
+ }
+ }
+ function getCurrentlyAttachedDevicesInfo() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var obj = {
+ cmd: "station_list"
+ };
+ return obj;
+ }
+ function deal(paramD) {
+ var deviceArr = [];
+ var attachedDevices = paramD.station_list;
+ for (var i = 0; attachedDevices && i < attachedDevices.length; i++) {
+ var obj = {};
+ obj.macAddress = attachedDevices[i].mac_addr;
+ var hostname = attachedDevices[i].hostname;
+ obj.hostName = hostname == "" ? $.i18n.prop("unknown") : hostname;
+ obj.ipAddress = attachedDevices[i].ip_addr;
+ deviceArr.push(obj);
+ }
+ return {
+ attachedDevices: deviceArr
+ };
+ }
+ }
+
+ function setLanguage() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "SET_WEB_LANGUAGE";
+ valueReq.Language = values.Language;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getLanguage() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "Language";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {};
+ result.Language = (paramD && paramD.Language) ? paramD.Language : "en";
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+
+ function setBearerPreference() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "SET_BEARER_PREFERENCE";
+ valueReq.BearerPreference = values.strBearerPreference;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function scanForNetwork(callback) {
+ $.post("/reqproc/proc_post", {
+ goformId: "SCAN_NETWORK"
+ }, function (paramD) {
+ if (paramD.result == "success") {
+ checkScanStatus();
+ } else {
+ callback(false, []);
+ }
+ }, "json").error(function () {
+ callback(false, []);
+ });
+ function checkScanStatus() {
+ $.getJSON("/reqproc/proc_get", {
+ cmd: "m_netselect_status",
+ "_": new Date().getTime()
+ }, function (paramD) {
+ if (paramD.m_netselect_status == "manual_selecting") {
+ setTimeout(checkScanStatus, 1000);
+ } else {
+ $.getJSON("/reqproc/proc_get", {
+ cmd: "m_netselect_contents",
+ "_": new Date().getTime()
+ }, function (paramD2) {
+ if (trim(paramD2.m_netselect_contents) != "") {
+ parseScanResult(paramD2.m_netselect_contents);
+ } else {
+ callback(false, []);
+ }
+ }).error(function () {
+ callback(false, []);
+ });
+ }
+ }).error(function () {
+ callback(false, []);
+ });
+ }
+ function parseScanResult(result) {
+ var pattern = /([^,;]*),([^,]*),([^,]*),([^,]*),([^,;]*)/g;
+ var listNetwork = [];
+ var mts;
+ var unit = result.split(";");
+ var unitString = "";
+ for (i = 0; i < unit.length; i++) {
+ var unitLength = unit[i].split(",").length;
+ if (unitLength == 4) {
+ unitString += unit[i] + ",NON;";
+ } else {
+ unitString += unit[i] + ";";
+ }
+ }
+ while (mts = pattern.exec(unitString)) {
+ if (mts != null) {
+ listNetwork.push({
+ strShortName: mts[2].replace(/\"/g, ''),
+ strNumeric: mts[3].replace(/\D/g, ''),
+ nRat: parseInt(mts[4], 10),
+ nState: parseInt(mts[1], 10),
+ SubAct: parseInt(mts[5], 10)
+ });
+ }
+ }
+ callback(true, listNetwork);
+ }
+ }
+ function getNetSelectInfo() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "current_network_mode,m_netselect_save,net_select_mode,m_netselect_contents,net_select,ppp_status,modem_main_state";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {};
+ result.current_network_mode = paramD.current_network_mode;
+ result.net_select_mode = paramD.net_select_mode;
+ result.m_netselect_save = paramD.m_netselect_save;
+ result.m_netselect_contents = paramD.m_netselect_contents;
+ result.net_select = paramD.net_select;
+ result.ppp_status = paramD.ppp_status;
+ result.modem_main_state = paramD.modem_main_state;
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+
+ function getSMSMessages() {
+ return stuffMake(arguments, {}, prepare, deal, {}, false);
+ function prepare(values, isPost) {
+ var obj = {
+ cmd: "sms_data_total",
+ page: values.page,
+ data_per_page: config.SMS_DATABASE_SORT_SUPPORT ? values.smsCount : 500,
+ mem_store: values.nMessageStoreType,
+ tags: values.tags,
+ order_by: values.orderBy
+ };
+ return obj;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.messages && paramD.messages.length > 0) {
+ return {
+ messages: parseMessages(paramD.messages)
+ };
+ } else {
+ return {
+ messages: []
+ };
+ }
+ }
+ }
+ function parseMessages(messages, isReport) {
+ var result = [];
+ for (var i = 0; i < messages.length; i++) {
+ if (!config.SHOW_UN_COMPLETE_CONCAT_SMS && typeof messages[i].received_all_concat_sms != "undefined" && messages[i].received_all_concat_sms == '0') {
+ continue;
+ }
+ var oneMessage = {};
+ oneMessage.id = messages[i].id;
+ oneMessage.number = messages[i].number;
+ oneMessage.content = isReport ? messages[i].content : decodeMessageContent(messages[i].content);
+ oneMessage.time = transTime('20' + messages[i].date);
+ oneMessage.isNew = messages[i].tag == "1";
+ oneMessage.groupId = messages[i].draft_group_id;
+ oneMessage.tag = messages[i].tag;
+ oneMessage.receivedAll = messages[i].received_all_concat_sms == '1';
+ result.push(oneMessage);
+ }
+ if (!config.SMS_DATABASE_SORT_SUPPORT) {
+ var ids = [];
+ var tmpResult = [];
+ for (var i = result.length; i--; ) {
+ var n = result[i];
+ var idx = $.inArray(n.id, ids);
+ if (idx == -1) {
+ ids.push(n.id);
+ tmpResult.push(n);
+ } else {
+ if (n.content.length > tmpResult[idx].content.length) {
+ tmpResult[idx] = n;
+ }
+ }
+ }
+ return _.sortBy(tmpResult, function (n) {
+ return 0 - n.id;
+ });
+ } else {
+ return result;
+ }
+ }
+ function decodeMessageContent(msgContent) {
+ return decodeMessage(escapeMessage(msgContent));
+ }
+ function sendSMS() {
+ var callback = arguments[1];
+ var errorCabllback = arguments[2] ? arguments[2] : callback;
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var obj = {
+ goformId: "SEND_SMS",
+ notCallback: true,
+ Number: values.number,
+ sms_time: getCurrentTimeString(),
+ MessageBody: escapeMessage(encodeMessage(values.message)),
+ ID: values.id,
+ encode_type: getEncodeType(values.message).encodeType
+ };
+ return obj;
+ }
+ function deal(paramD) {
+ if (!paramD) {
+ errorCabllback($.extend(errUnknownObj, {
+ errorType: "sendFail",
+ errorText: "send_fail_try_again"
+ }));
+ return;
+ }
+ if (paramD.result == "success") {
+ setTimeout(function () {
+ getSmsStatusInfo({
+ smsCmd: 4,
+ errorType: "sendFail",
+ errorText: "send_fail_try_again"
+ }, callback, errorCabllback);
+ }, 1000);
+ } else {
+ errorCabllback($.extend(errUnknownObj, {
+ errorType: "sendFail",
+ errorText: "send_fail_try_again"
+ }));
+ }
+ }
+ }
+ function saveSMS() {
+ var callback = arguments[1];
+ var errorCabllback = arguments[2] ? arguments[2] : callback;
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var obj = {
+ notCallback: true,
+ goformId: "SAVE_SMS",
+ SMSMessage: escapeMessage(encodeMessage(values.message)),
+ SMSNumber: values.numbers.join(";") + ";",
+ Index: values.index,
+ encode_type: getEncodeType(values.message).encodeType,
+ sms_time: values.currentTimeString,
+ draft_group_id: values.groupId
+ };
+ return obj;
+ }
+ function deal(paramD) {
+ if (!paramD) {
+ errorCabllback($.extend(errUnknownObj, {
+ errorType: "saveFail",
+ errorText: "save_fail"
+ }));
+ return;
+ }
+ if (paramD.result == "success") {
+ getSmsStatusInfo({
+ smsCmd: 5,
+ errorType: "saveFail",
+ errorText: "save_fail"
+ }, callback, errorCabllback);
+ } else {
+ errorCabllback($.extend(errUnknownObj, {
+ errorType: "saveFail",
+ errorText: "save_fail"
+ }));
+ }
+ }
+ }
+ function deleteAllMessages() {
+ var callback = arguments[1];
+ var errorCabllback = arguments[2] ? arguments[2] : callback;
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var obj = {
+ goformId: "ALL_DELETE_SMS",
+ notCallback: true,
+ which_cgi: values.location
+ };
+ return obj;
+ }
+ function deal(paramD) {
+ if (!paramD) {
+ errorCabllback($.extend(errUnknownObj, {
+ errorType: "deleteFail",
+ errorText: "delete_fail_try_again"
+ }));
+ return;
+ }
+ if (paramD.result == "success") {
+ addTimerSomething("sms_cmd_status_info", checkDeleteStatus);
+ } else {
+ errorCabllback($.extend(errUnknownObj, {
+ errorType: "deleteFail",
+ errorText: "delete_fail_try_again"
+ }));
+ }
+ }
+ function checkDeleteStatus(paramD) {
+ var status = paramD.sms_cmd_status_info;
+ if (status == "2") {
+ removeTimerSomething("sms_cmd_status_info", checkDeleteStatus);
+ errorCabllback($.extend(errUnknownObj, {
+ errorType: "deleteFail",
+ errorText: "delete_fail_try_again"
+ }));
+ } else if (status == "3") {
+ removeTimerSomething("sms_cmd_status_info", checkDeleteStatus);
+ callback({
+ result: true
+ });
+ }
+ }
+ }
+ function deleteMessage() {
+ var callback = arguments[1];
+ var errorCabllback = arguments[2] ? arguments[2] : callback;
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var msgIds = values.ids.join(";") + ";";
+ var obj = {
+ goformId: "DELETE_SMS",
+ msg_id: msgIds,
+ notCallback: true
+ };
+ return obj;
+ }
+ function deal(paramD) {
+ if (!paramD) {
+ errorCabllback($.extend(errUnknownObj, {
+ errorType: "deleteFail",
+ errorText: "delete_fail_try_again"
+ }));
+ return;
+ }
+ if (paramD.result == "success") {
+ getSmsStatusInfo({
+ smsCmd: 6,
+ errorType: "deleteFail",
+ errorText: "delete_fail_try_again"
+ }, callback, errorCabllback);
+ } else {
+ errorCabllback($.extend(errUnknownObj, {
+ errorType: "deleteFail",
+ errorText: "delete_fail_try_again"
+ }));
+ }
+ }
+ }
+ function getSmsStatusInfo(obj, callback, errorCabllback) {
+ reqAsync({
+ cmd: "sms_cmd_status_info",
+ sms_cmd: obj.smsCmd,
+ }, function (paramD) {
+ if (paramD) {
+ var status = paramD.sms_cmd_status_result;
+ if (status == "2") {
+ errorCabllback($.extend(errUnknownObj, {
+ errorType: obj.errorType,
+ errorText: obj.errorText
+ }));
+ } else if (status == "3") {
+ callback({
+ result: "success"
+ });
+ } else {
+ window.setTimeout(function () {
+ getSmsStatusInfo(obj, callback, errorCabllback);
+ }, 1000);
+ }
+ } else {
+ errorCabllback($.extend(errUnknownObj, {
+ errorType: obj.errorType,
+ errorText: obj.errorText
+ }));
+ }
+ }, function (paramD) {
+ errorCabllback($.extend(errUnknownObj, {
+ errorType: obj.errorType,
+ errorText: obj.errorText
+ }));
+ }, false);
+ }
+ function getSMSReady() {
+ if (config.smsIsReady) {
+ var callback = arguments[1];
+ if (callback) {
+ return callback({
+ "sms_cmd": "1",
+ "sms_cmd_status_result": "3"
+ });
+ } else {
+ return {
+ "sms_cmd": "1",
+ "sms_cmd_status_result": "3"
+ };
+ }
+ } else {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ }
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "sms_cmd_status_info";
+ valueReq.sms_cmd = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ if (paramD.sms_cmd_status_result == "3") {
+ config.smsIsReady = true;
+ }
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setSmsRead() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var msgIds = values.ids.join(";");
+ if (values.ids.length > 0) {
+ msgIds += ";";
+ }
+ var obj = {
+ goformId: "SET_MSG_READ",
+ msg_id: msgIds,
+ tag: 0
+ };
+ return obj;
+ }
+ function deal(paramD) {
+ if (paramD.result == "success") {
+ return {
+ result: true
+ };
+ } else {
+ return {
+ result: false
+ };
+ }
+ }
+ }
+ function getSMSDeliveryReport() {
+ return stuffMake(arguments, {}, prepare, deal, {}, false);
+ function prepare(values, isPost) {
+ var obj = {
+ cmd: "sms_status_rpt_data",
+ page: values.page,
+ data_per_page: values.smsCount
+ };
+ return obj;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return {
+ messages: parseMessages(paramD.messages, true)
+ };
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function logout() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var obj = $.extend({}, values);
+ obj.goformId = "LOGOUT";
+ return obj;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == "success") {
+ informationAll.isLoggedIn = false;
+ return {
+ result: true
+ };
+ } else {
+ return $.extend(errUnknownObj, {
+ errorType: "loggedOutError"
+ });
+ }
+ }
+ }
+ function changeManageInfo() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var obj = {};
+ obj.newPassword = config.PASSWORD_ENCODE ? Base64.encode(values.newValue) : values.newValue;
+ obj.oldPassword = config.PASSWORD_ENCODE ? Base64.encode(values.oldValue) : values.oldValue;
+ obj.goformId = "CHANGE_PASSWORD";
+ return obj;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result === "success") {
+ return {
+ result: true
+ };
+ } else {
+ return $.extend(errUnknownObj, {
+ errorType: "badPassword"
+ });
+ }
+ }
+ }
+ function getPinData() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "pinnumber,pin_status,puknumber";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function enablePin() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var obj = {};
+ obj.goformId = "ENABLE_PIN";
+ obj.OldPinNumber = values.oldPin;
+ return obj;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result === "success") {
+ return {
+ result: true
+ };
+ } else {
+ return {
+ result: false
+ };
+ }
+ }
+ }
+ function disablePin() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var obj = {};
+ obj.goformId = "DISABLE_PIN";
+ obj.OldPinNumber = values.oldPin;
+ return obj;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result === "success") {
+ return {
+ result: true
+ };
+ } else {
+ return {
+ result: false
+ };
+ }
+ }
+ }
+ function changePin() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var obj = {};
+ obj.goformId = "ENABLE_PIN";
+ obj.OldPinNumber = values.oldPin;
+ obj.NewPinNumber = values.newPin;
+ return obj;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result === "success") {
+ return {
+ result: true
+ };
+ } else {
+ return {
+ result: false
+ };
+ }
+ }
+ }
+ function getLanInfo() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "lan_ipaddr,lan_netmask,mac_address,dhcpEnabled,dhcpStart,dhcpEnd,dhcpLease_hour";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {};
+ result.ipAddress = paramD.lan_ipaddr;
+ result.subnetMask = paramD.lan_netmask;
+ result.macAddress = paramD.mac_address;
+ result.dhcpServer = paramD.dhcpEnabled;
+ result.dhcpStart = paramD.dhcpStart;
+ result.dhcpEnd = paramD.dhcpEnd;
+ result.dhcpLease = parseInt(paramD.dhcpLease_hour, 10);
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setLanInfo() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "DHCP_SETTING";
+ valueReq.lanIp = values.ipAddress;
+ valueReq.lanNetmask = values.subnetMask;
+ valueReq.lanDhcpType = values.dhcpServer == "1" ? "SERVER" : "DISABLE";
+ if (valueReq.lanDhcpType == "SERVER") {
+ valueReq.dhcpStart = values.dhcpStart;
+ valueReq.dhcpEnd = values.dhcpEnd;
+ valueReq.dhcpLease = values.dhcpLease;
+ }
+ valueReq.dhcp_reboot_flag = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getSmsSetting() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "sms_parameter_info";
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {};
+ result.centerNumber = paramD.sms_para_sca;
+ result.memStroe = paramD.sms_para_mem_store;
+ result.deliveryReport = paramD.sms_para_status_report;
+ switch (parseInt(paramD.sms_para_validity_period, 10)) {
+ case 143:
+ result.validity = "twelve_hours";
+ break;
+ case 167:
+ result.validity = "one_day";
+ break;
+ case 173:
+ result.validity = "one_week";
+ break;
+ case 244:
+ result.validity = "largest";
+ break;
+ case 255:
+ result.validity = "largest";
+ break;
+ default:
+ result.validity = "twelve_hours";
+ break;
+ }
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setSmsSetting() {
+ var callback = arguments[1];
+ var errorCabllback = arguments[2] ? arguments[2] : callback;
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "SET_MESSAGE_CENTER";
+ valueReq.save_time = values.validity;
+ valueReq.MessageCenter = values.centerNumber;
+ valueReq.status_save = values.deliveryReport;
+ valueReq.save_location = 'native';
+ valueReq.notCallback = true;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (!paramD) {
+ errorCabllback($.extend(errUnknownObj, {
+ errorType: "smsSettingFail",
+ errorText: "error_info"
+ }));
+ return;
+ }
+ if (paramD.result == "success") {
+ getSmsStatusInfo({
+ smsCmd: 3,
+ errorType: "smsSettingFail",
+ errorText: "error_info"
+ }, callback, errorCabllback);
+ } else {
+ errorCabllback($.extend(errUnknownObj, {
+ errorType: "deleteFail",
+ errorText: "delete_fail_try_again"
+ }));
+ }
+ }
+ }
+ function restoreFactorySettings() {
+ var preErrorObj = {};
+ if (config.HAS_PARENTAL_CONTROL && config.currentUserInChildGroup != false) {
+ preErrorObj = {
+ errorType: 'no_auth'
+ };
+ }
+ return stuffMake(arguments, preErrorObj, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "RESTORE_FACTORY_SETTINGS";
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function checkRestoreStatus(successCallback) {
+ var valueReq = {};
+ valueReq.cmd = "restore_flag";
+ valueReq.multi_data = 1;
+ reqAsync(valueReq, function (paramD) {
+ if (paramD && paramD.restore_flag === "1") {
+ successCallback();
+ } else {
+ setTimeout(function () {
+ checkRestoreStatus(successCallback);
+ }, 5000);
+ }
+ }, function () {
+ setTimeout(function () {
+ checkRestoreStatus(successCallback);
+ }, 5000);
+ }, false);
+ }
+ function getWpsInfo() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "wifi_wps_index,WscModeOption,AuthMode,wifi_cur_state,EncrypType,wps_mode,WPS_SSID,m_ssid_enable,SSID1,m_SSID,m_EncrypType,m_AuthMode,wifi_sta_connection";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {};
+ result.wpsFlag = paramD.WscModeOption;
+ result.authMode = paramD.AuthMode;
+ result.wpsType = paramD.wps_mode;
+ result.radioFlag = paramD.wifi_cur_state == "1" ? "1" : "0";
+ result.encrypType = paramD.EncrypType;
+ result.wpsSSID = paramD.WPS_SSID;
+ result.ssidEnable = paramD.m_ssid_enable;
+ result.ssid = paramD.SSID1;
+ result.multiSSID = paramD.m_SSID;
+ result.m_encrypType = paramD.m_EncrypType;
+ result.wifi_wps_index = paramD.wifi_wps_index;
+ result.AuthMode = paramD.AuthMode;
+ result.m_AuthMode = paramD.m_AuthMode;
+ result.ap_station_enable = paramD.wifi_sta_connection;
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function openWps() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "WIFI_WPS_SET";
+ valueReq.WPS_SSID = values.wpsSSID;
+ valueReq.wps_mode = values.wpsType;
+ valueReq.wifi_wps_index = values.wpsIndex;
+ if (valueReq.wps_mode == 'PIN') {
+ valueReq.wps_pin = values.wpsPin;
+ }
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function openWps_5g() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "WIFI_M_WPS_SET";
+ valueReq.m_WPS_SSID = values.wpsSSID;
+ valueReq.m_wps_mode = values.wpsType;
+ valueReq.m_wifi_wps_index = values.wpsIndex;
+ if (valueReq.m_wps_mode == 'PIN') {
+ valueReq.m_wps_pin = values.wpsPin;
+ }
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getSleepMode() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "Sleep_interval";
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {};
+ result.sleepMode = paramD.Sleep_interval;
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setSleepMode() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "SET_WIFI_SLEEP_INFO";
+ valueReq.sysIdleTimeToSleep = values.sleepMode;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getSysSecurity() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "RemoteManagement,WANPingFilter";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {};
+ result.remoteFlag = paramD.RemoteManagement == "1" ? "1" : "0";
+ result.pingFlag = paramD.WANPingFilter == "1" ? "1" : "0";
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setSysSecurity() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "FW_SYS";
+ valueReq.remoteManagementEnabled = values.remoteFlag;
+ valueReq.pingFrmWANFilterEnabled = values.pingFlag;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getPortForward() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "PortForwardEnable,PortForwardRules_0,PortForwardRules_1,PortForwardRules_2,PortForwardRules_3,PortForwardRules_4,PortForwardRules_5,PortForwardRules_6,PortForwardRules_7,PortForwardRules_8,PortForwardRules_9";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {};
+ result.portForwardEnable = paramD.PortForwardEnable;
+ var rules = [];
+ if (paramD.PortForwardRules_0 != "") {
+ rules.push([0, paramD.PortForwardRules_0]);
+ }
+ if (paramD.PortForwardRules_1 != "") {
+ rules.push([1, paramD.PortForwardRules_1]);
+ }
+ if (paramD.PortForwardRules_2 != "") {
+ rules.push([2, paramD.PortForwardRules_2]);
+ }
+ if (paramD.PortForwardRules_3 != "") {
+ rules.push([3, paramD.PortForwardRules_3]);
+ }
+ if (paramD.PortForwardRules_4 != "") {
+ rules.push([4, paramD.PortForwardRules_4]);
+ }
+ if (paramD.PortForwardRules_5 != "") {
+ rules.push([5, paramD.PortForwardRules_5]);
+ }
+ if (paramD.PortForwardRules_6 != "") {
+ rules.push([6, paramD.PortForwardRules_6]);
+ }
+ if (paramD.PortForwardRules_7 != "") {
+ rules.push([7, paramD.PortForwardRules_7]);
+ }
+ if (paramD.PortForwardRules_8 != "") {
+ rules.push([8, paramD.PortForwardRules_8]);
+ }
+ if (paramD.PortForwardRules_9 != "") {
+ rules.push([9, paramD.PortForwardRules_9]);
+ }
+ result.portForwardRules = parsePortForwardRules(rules);
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ function parsePortForwardRules(paramD) {
+ var rules = [];
+ if (paramD && paramD.length > 0) {
+ for (var i = 0; i < paramD.length; i++) {
+ var aRule = {};
+ var elements = paramD[i][1].split(",");
+ aRule.index = paramD[i][0];
+ aRule.ipAddress = elements[0];
+ aRule.portRange = elements[1] + ' - ' + elements[2];
+ aRule.protocol = transProtocol(elements[3]);
+ aRule.comment = elements[4];
+ rules.push(aRule);
+ }
+ }
+ return rules;
+ }
+ }
+ function setPortForward() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "FW_FORWARD_ADD";
+ valueReq.ipAddress = values.ipAddress;
+ valueReq.portStart = values.portStart;
+ valueReq.portEnd = values.portEnd;
+ valueReq.protocol = values.protocol;
+ valueReq.comment = values.comment;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function deleteForwardRules() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "FW_FORWARD_DEL";
+ valueReq.delete_id = values.indexs.join(';') + ";";
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function enableVirtualServer() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "VIRTUAL_SERVER";
+ valueReq.PortForwardEnable = values.portForwardEnable;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function wifiDecode(fact1,fact2,encode_aes) {//wifiDecode(paramD.rnum_js,paramD.imei,paramD.WPAPSK1_enaes,paramD.m_WPAPSK1_enaes);
+ var kstr = fact1 + fact2 + "FFFFFFFFFFFFFFFFFFFFFFFF";
+ var kstr_final;
+ var kiv_final;
+
+ kstr_final = kstr.substring(0, 24);
+ kiv_final = kstr.substring(0, 16);
+
+ var tkey = CryptoJS.enc.Latin1.parse(kstr_final);
+ var tiv = CryptoJS.enc.Latin1.parse(kiv_final);
+ var decdata = CryptoJS.AES.decrypt(encode_aes, tkey, {
+ iv: tiv,
+ mode: CryptoJS.mode.CBC,
+ padding: CryptoJS.pad.ZeroPadding
+ }).toString(CryptoJS.enc.Utf8);
+
+ return decdata;
+ }
+ function getQuickSettingInfo() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ var wpask = config.PASSWORD_ENCODE ? ",WPAPSK1_encode" : ",imei,rnum_js,WPAPSK1_enaes";
+ valueReq.cmd = "pdp_type,ipv6_pdp_type,wifi_cur_state,SSID1,HideSSID,AuthMode,WscModeOption,ppp_status,apn_index,ipv6_apn_index,ipv6_APN_index,m_profile_name,apn_mode,EncrypType,DefaultKeyID,Key1Str1,Key2Str1,Key3Str1,Key4Str1" + wpask + ",APN_configtmp0,APN_configtmp1,APN_configtmp2,APN_configtmp3,APN_configtmp4,APN_configtmp5,APN_configtmp6,APN_configtmp7,APN_configtmp8,APN_configtmp9,APN_configtmp10,APN_configtmp11,APN_configtmp12,APN_configtmp13,APN_configtmp14,APN_configtmp15,APN_configtmp16,APN_configtmp17,APN_configtmp18,APN_configtmp19" + ",ipv6_APN_configtmp0,ipv6_APN_configtmp1,ipv6_APN_configtmp2,ipv6_APN_configtmp3,ipv6_APN_configtmp4,ipv6_APN_configtmp5,ipv6_APN_configtmp6,ipv6_APN_configtmp7,ipv6_APN_configtmp8,ipv6_APN_configtmp9,ipv6_APN_configtmp10,ipv6_APN_configtmp11,ipv6_APN_configtmp12,ipv6_APN_configtmp13,ipv6_APN_configtmp14,ipv6_APN_configtmp15,ipv6_APN_configtmp16,ipv6_APN_configtmp17,ipv6_APN_configtmp18,ipv6_APN_configtmp19";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ if (config.PASSWORD_ENCODE) {
+ paramD.WPAPSK1 = Base64.decode(paramD.WPAPSK1_encode);
+ } else {
+ paramD.WPAPSK1 = wifiDecode(paramD.rnum_js,paramD.imei,paramD.WPAPSK1_enaes);
+ }
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setQuickSetting4IPv6() {
+ stuffMakeAndCheckServerIsOnline(arguments, prepare, deal);
+ function prepare(values) {
+ var valueReq = {
+ goformId: "QUICK_SETUP_EX",
+ index: values.apn_index,
+ pdp_type: values.pdp_type,
+ apn_mode: values.apnMode,
+ profile_name: values.profile_name,
+ wan_apn: values.wan_apn,
+ ppp_auth_mode: values.ppp_auth_mode,
+ ppp_username: values.ppp_username,
+ ppp_passtmp: values.ppp_passtmp,
+ ipv6_wan_apn: values.ipv6_wan_apn,
+ ipv6_ppp_auth_mode: values.ipv6_ppp_auth_mode,
+ ipv6_ppp_username: values.ipv6_ppp_username,
+ ipv6_ppp_passtmp: values.ipv6_ppp_passtmp,
+ SSID_name: values.SSID_name,
+ SSID_Broadcast: values.SSID_Broadcast,
+ Encryption_Mode_hid: values.Encryption_Mode_hid,
+ security_shared_mode: values.security_shared_mode,
+ WPA_PreShared_Key: config.PASSWORD_ENCODE ? Base64.encode(values.WPA_PreShared_Key) : values.WPA_PreShared_Key,
+ wep_default_key: values.wep_default_key,
+ WPA_ENCRYPTION_hid: values.WPA_ENCRYPTION_hid
+ }
+ valueReq.wep_key_1 = values.wep_key_1;
+ valueReq.wep_key_2 = values.wep_key_2;
+ valueReq.wep_key_3 = values.wep_key_3;
+ valueReq.wep_key_4 = values.wep_key_4;
+ if (values.wep_default_key == '1') {
+ valueReq.WEP2Select = values.WEP2Select;
+ } else if (values.wep_default_key == '2') {
+ valueReq.WEP3Select = values.WEP3Select;
+ } else if (values.wep_default_key == '3') {
+ valueReq.WEP4Select = values.WEP4Select;
+ } else {
+ valueReq.WEP1Select = values.WEP1Select;
+ }
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return $.extend(errUnknownObj, {
+ errorType: "SetSetUpError"
+ });
+ }
+ }
+ }
+ function stuffMakeAndCheckServerIsOnline(arg, prepare, deal) {
+ var isServerOnline = false;
+ var isCallbackExecuted = false;
+ var values = prepare(arg[0]);
+ var callback = arg[1];
+ var successCallback = function (paramD) {
+ isServerOnline = true;
+ if (!isCallbackExecuted && callback) {
+ callback(deal(paramD));
+ }
+ isCallbackExecuted = true;
+ };
+ var errorMethod = arg[2];
+ var errorCallback = function () {
+ isServerOnline = true;
+ if (errorMethod) {
+ errorMethod();
+ }
+ };
+ reqAsync(values, successCallback, errorCallback, true);
+ addTimeout(function () {
+ if (isServerOnline == false) {
+ var timer = addInterval(function () {
+ if (isServerOnline == false) {
+ getLanguage({}, function (paramD) {
+ window.clearInterval(timer);
+ successCallback({
+ result: "success"
+ });
+ });
+ }
+ }, 1000);
+ }
+ }, 5000);
+ }
+ function getSDConfiguration() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {
+ cmd: "sdcard_mode_option,sd_card_state,HTTP_SHARE_STATUS,HTTP_SHARE_WR_AUTH,HTTP_SHARE_FILE",
+ multi_data: 1
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var fileToShare;
+ if ("mmc2" == paramD.HTTP_SHARE_FILE || "/mmc2" == paramD.HTTP_SHARE_FILE || "/mmc2/" == paramD.HTTP_SHARE_FILE) {
+ fileToShare = "1";
+ } else {
+ fileToShare = "0";
+ }
+ var result = {
+ sd_mode: paramD.sdcard_mode_option == "1" ? "0" : "1",
+ sd_status: paramD.sd_card_state,
+ share_status: paramD.HTTP_SHARE_STATUS == "Enabled" ? "1" : "0",
+ share_auth: paramD.HTTP_SHARE_WR_AUTH == "readOnly" ? "0" : "1",
+ file_to_share: fileToShare,
+ share_file: paramD.HTTP_SHARE_FILE
+ };
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setSdCardMode() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {
+ goformId: "HTTPSHARE_MODE_SET",
+ mode_set: values.mode == "0" ? "http_share_mode" : "usb_mode"
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == 'success') {
+ return {
+ result: 'success'
+ };
+ } else if (paramD && paramD.result == 'processing') {
+ return {
+ result: 'processing'
+ };
+ } else {
+ return {
+ result: false
+ };
+ }
+ }
+ }
+ function checkFileExists() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {
+ goformId: "GOFORM_HTTPSHARE_CHECK_FILE",
+ path_SD_CARD: values.path
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ if (paramD.result == "no_sdcard") {
+ return {
+ status: "no_sdcard"
+ };
+ } else if (paramD.result == "noexist") {
+ return {
+ status: "noexist"
+ };
+ } else if (paramD.result == "processing") {
+ return {
+ status: "processing"
+ };
+ } else {
+ return {
+ status: "exist"
+ };
+ }
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getFileList() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {
+ goformId: "HTTPSHARE_ENTERFOLD",
+ path_SD_CARD: values.path,
+ indexPage: values.index
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ if (paramD.result == 'failure') {
+ return $.extend(errUnknownObj, {
+ errorType: "get_file_list_failure"
+ });
+ } else if (paramD.result == "no_sdcard") {
+ return $.extend(errUnknownObj, {
+ errorType: "no_sdcard"
+ });
+ } else {
+ return parseSdCardFile(paramD.result);
+ }
+ } else {
+ return errUnknownObj;
+ }
+ }
+ function parseSdCardFile(result) {
+ var fileInfo = {};
+ fileInfo.totalRecord = result.totalRecord;
+ var fileArr = [];
+ var details = result.fileInfo;
+ for (var i = 0; details && i < details.length; i++) {
+ if (details[i].fileName == "") {
+ continue;
+ }
+ var obj = {};
+ obj.fileName = details[i].fileName;
+ obj.attribute = details[i].attribute;
+ obj.size = details[i].size;
+ obj.lastUpdateTime = details[i].lastUpdateTime;
+ fileArr.push(obj);
+ }
+ fileInfo.details = fileArr;
+ return fileInfo;
+ }
+ }
+ function fileRename() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var d = new Date();
+ var currentTime = d.getTime();
+ var zoneOffsetSeconds = d.getTimezoneOffset() * 60;
+ return {
+ goformId: "HTTPSHARE_FILE_RENAME",
+ path_SD_CARD: values.path,
+ OLD_NAME_SD_CARD: values.oldPath,
+ NEW_NAME_SD_CARD: values.newPath,
+ path_SD_CARD_time: transUnixTime(currentTime),
+ path_SD_CARD_time_unix: Math.round((currentTime - zoneOffsetSeconds * 1000) / 1e3)
+ };
+ }
+ function deal(paramD) {
+ if (paramD) {
+ if (paramD.result == "success") {
+ return {
+ result: true
+ };
+ } else if (paramD.result == "no_sdcard") {
+ return $.extend(errUnknownObj, {
+ errorType: "no_sdcard"
+ });
+ } else if (paramD.result == "noexist") {
+ return $.extend(errUnknownObj, {
+ errorType: "no_exist"
+ });
+ } else if (paramD.result == "processing") {
+ return $.extend(errUnknownObj, {
+ errorType: "sd_file_processing_cant_rename"
+ });
+ } else {
+ return {
+ result: false
+ };
+ }
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getSdMemorySizes() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {
+ cmd: "HTTPSHARE_GETCARD_VALUE"
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (!paramD || (paramD.result && paramD.result == "no_sdcard")) {
+ return $.extend(errUnknownObj, {
+ errorType: "no_sdcard"
+ });
+ } else {
+ return {
+ totalMemorySize: paramD.sd_card_total_size == "" ? 0 : paramD.sd_card_total_size * 32 * 1024,
+ availableMemorySize: paramD.sd_card_avi_space == "" ? 0 : paramD.sd_card_avi_space * 32 * 1024
+ };
+ }
+ }
+ }
+ function deleteFilesAndFolders() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var currentTime = new Date().getTime();
+ var valueReq = {
+ goformId: "HTTPSHARE_DEL",
+ path_SD_CARD: values.path,
+ name_SD_CARD: values.names,
+ path_SD_CARD_time: transUnixTime(currentTime),
+ path_SD_CARD_time_unix: Math.round(currentTime / 1e3)
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD.result && paramD.result == "failure") {
+ return {
+ status: "failure"
+ };
+ } else if (paramD.result && paramD.result == "no_sdcard") {
+ return {
+ status: "no_sdcard"
+ };
+ } else if (paramD.result && paramD.result == "processing") {
+ return {
+ status: "processing"
+ };
+ } else if (paramD.result && paramD.result == "success") {
+ return {
+ status: "success"
+ };
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function createFolder() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var d = new Date();
+ var currentTime = d.getTime();
+ var zoneOffsetSeconds = d.getTimezoneOffset() * 60;
+ return {
+ goformId: "HTTPSHARE_NEW",
+ path_SD_CARD: values.path,
+ path_SD_CARD_time: transUnixTime(currentTime),
+ path_SD_CARD_time_unix: Math.round((currentTime - zoneOffsetSeconds * 1000) / 1e3)
+ };
+ }
+ function deal(paramD) {
+ if (paramD.result && paramD.result == "failure") {
+ return $.extend(errUnknownObj, {
+ errorType: "create_folder_failure"
+ });
+ } else if (paramD.result && paramD.result == "no_sdcard") {
+ return $.extend(errUnknownObj, {
+ errorType: "no_sdcard"
+ });
+ } else if (paramD.result && paramD.result == "success") {
+ return {
+ result: true
+ };
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setSdCardSharing() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {
+ goformId: "HTTPSHARE_AUTH_SET",
+ HTTP_SHARE_STATUS: values.share_status == "1" ? "Enabled" : "Disabled",
+ HTTP_SHARE_WR_AUTH: values.share_auth == "1" ? "readWrite" : "readOnly",
+ HTTP_SHARE_FILE: values.share_file
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ if (paramD.result == "no_sdcard") {
+ return $.extend(errUnknownObj, {
+ errorType: "no_sdcard"
+ });
+ } else {
+ return {
+ result: true
+ };
+ }
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getPortFilter() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "IPPortFilterEnable,DefaultFirewallPolicy,IPPortFilterRules_0,IPPortFilterRules_1,IPPortFilterRules_2,IPPortFilterRules_3,IPPortFilterRules_4,IPPortFilterRules_5,IPPortFilterRules_6,IPPortFilterRules_7,IPPortFilterRules_8,IPPortFilterRules_9";
+ valueReq.cmd += ",IPPortFilterRulesv6_0,IPPortFilterRulesv6_1,IPPortFilterRulesv6_2,IPPortFilterRulesv6_3,IPPortFilterRulesv6_4,IPPortFilterRulesv6_5,IPPortFilterRulesv6_6,IPPortFilterRulesv6_7,IPPortFilterRulesv6_8,IPPortFilterRulesv6_9";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {};
+ result.portFilterEnable = paramD.IPPortFilterEnable;
+ result.defaultPolicy = paramD.DefaultFirewallPolicy;
+ var rules = [];
+ if (paramD.IPPortFilterRules_0 != "") {
+ rules.push([0, paramD.IPPortFilterRules_0]);
+ }
+ if (paramD.IPPortFilterRules_1 != "") {
+ rules.push([1, paramD.IPPortFilterRules_1]);
+ }
+ if (paramD.IPPortFilterRules_2 != "") {
+ rules.push([2, paramD.IPPortFilterRules_2]);
+ }
+ if (paramD.IPPortFilterRules_3 != "") {
+ rules.push([3, paramD.IPPortFilterRules_3]);
+ }
+ if (paramD.IPPortFilterRules_4 != "") {
+ rules.push([4, paramD.IPPortFilterRules_4]);
+ }
+ if (paramD.IPPortFilterRules_5 != "") {
+ rules.push([5, paramD.IPPortFilterRules_5]);
+ }
+ if (paramD.IPPortFilterRules_6 != "") {
+ rules.push([6, paramD.IPPortFilterRules_6]);
+ }
+ if (paramD.IPPortFilterRules_7 != "") {
+ rules.push([7, paramD.IPPortFilterRules_7]);
+ }
+ if (paramD.IPPortFilterRules_8 != "") {
+ rules.push([8, paramD.IPPortFilterRules_8]);
+ }
+ if (paramD.IPPortFilterRules_9 != "") {
+ rules.push([9, paramD.IPPortFilterRules_9]);
+ }
+ result.portFilterRules = parsePortFilterRules(rules, "IPv4");
+ var v6Rules = [];
+ if (paramD.IPPortFilterRulesv6_0 != "") {
+ v6Rules.push([10, paramD.IPPortFilterRulesv6_0]);
+ }
+ if (paramD.IPPortFilterRulesv6_1 != "") {
+ v6Rules.push([11, paramD.IPPortFilterRulesv6_1]);
+ }
+ if (paramD.IPPortFilterRulesv6_2 != "") {
+ v6Rules.push([12, paramD.IPPortFilterRulesv6_2]);
+ }
+ if (paramD.IPPortFilterRulesv6_3 != "") {
+ v6Rules.push([13, paramD.IPPortFilterRulesv6_3]);
+ }
+ if (paramD.IPPortFilterRulesv6_4 != "") {
+ v6Rules.push([14, paramD.IPPortFilterRulesv6_4]);
+ }
+ if (paramD.IPPortFilterRulesv6_5 != "") {
+ v6Rules.push([15, paramD.IPPortFilterRulesv6_5]);
+ }
+ if (paramD.IPPortFilterRulesv6_6 != "") {
+ v6Rules.push([16, paramD.IPPortFilterRulesv6_6]);
+ }
+ if (paramD.IPPortFilterRulesv6_7 != "") {
+ v6Rules.push([17, paramD.IPPortFilterRulesv6_7]);
+ }
+ if (paramD.IPPortFilterRulesv6_8 != "") {
+ v6Rules.push([18, paramD.IPPortFilterRulesv6_8]);
+ }
+ if (paramD.IPPortFilterRulesv6_9 != "") {
+ v6Rules.push([19, paramD.IPPortFilterRulesv6_9]);
+ }
+ result.portFilterRules = _.union(result.portFilterRules, parsePortFilterRules(v6Rules, "IPv6"));
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ function parsePortFilterRules(paramD, ipTypeTmp) {
+ var rules = [];
+ if (paramD && paramD.length > 0) {
+ for (var i = 0; i < paramD.length; i++) {
+ var aRule = {};
+ var elements = paramD[i][1].split(",");
+ aRule.index = paramD[i][0];
+ aRule.macAddress = elements[11];
+ aRule.destIpAddress = elements[4] == "any/0" ? "" : elements[4];
+ aRule.sourceIpAddress = elements[0] == "any/0" ? "" : elements[0];
+ aRule.destPortRange = elements[6] == '0' ? '' : elements[6] + " - " + elements[7];
+ aRule.sourcePortRange = elements[2] == '0' ? '' : elements[2] + " - " + elements[3];
+ aRule.action = elements[9] == 1 ? "filter_accept" : "filter_drop";
+ aRule.protocol = transProtocol(elements[8]);
+ aRule.comment = elements[10];
+ aRule.ipType = ipTypeTmp;
+ rules.push(aRule);
+ }
+ }
+ return rules;
+ }
+ }
+ function setPortFilterBasic() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "BASIC_SETTING";
+ valueReq.portFilterEnabled = values.portFilterEnable;
+ valueReq.defaultFirewallPolicy = values.defaultPolicy;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setPortFilter() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "ADD_IP_PORT_FILETER_V4V6";
+ valueReq.ip_version = values.ipType;
+ valueReq.mac_address = values.macAddress;
+ valueReq.dip_address = values.destIpAddress;
+ valueReq.sip_address = values.sourceIpAddress;
+ valueReq.dFromPort = values.destPortStart;
+ valueReq.dToPort = values.destPortEnd;
+ valueReq.sFromPort = values.sourcePortStart;
+ valueReq.sToPort = values.sourcePortEnd;
+ valueReq.action = values.action;
+ valueReq.protocol = values.protocol;
+ valueReq.comment = values.comment;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function deleteFilterRules() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ var deleteIds = _.filter(values.indexs, function (item) {
+ return item.length == 1;
+ });
+ valueReq.goformId = "DEL_IP_PORT_FILETER_V4V6";
+ var deletev6Ids = [];
+ _.each(values.indexs, function (item) {
+ if (item.length == 2) {
+ deletev6Ids.push(item.substring(1));
+ }
+ });
+ valueReq.delete_id_v6 = deletev6Ids.length > 0 ? deletev6Ids.join(';') + ";" : "";
+ valueReq.delete_id = deleteIds.length > 0 ? deleteIds.join(';') + ";" : "";
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getWifiAdvance() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "WirelessMode,CountryCode,Channel,HT_MCS,wifi_band,wifi_11n_cap,MAX_Access_num,m_MAX_Access_num,MAX_Station_num,wifi_sta_connection";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {
+ mode: paramD.WirelessMode,
+ countryCode: paramD.CountryCode,
+ channel: paramD.Channel,
+ rate: paramD.HT_MCS,
+ wifiBand: paramD.wifi_band == 'a' ? 'a' : 'b',
+ bandwidth: paramD.wifi_11n_cap,
+ MAX_Station_num: $.isNumeric(paramD.MAX_Station_num) ? paramD.MAX_Station_num : config.MAX_STATION_NUMBER,
+ MAX_Access_num: paramD.MAX_Access_num,
+ m_MAX_Access_num: paramD.m_MAX_Access_num,
+ ap_station_enable: paramD.wifi_sta_connection
+ };
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setWifiAdvance() {
+ stuffMakeAndCheckServerIsOnline(arguments, prepare, deal);
+ function prepare(values) {
+ var valueReq = {
+ goformId: "SET_WIFI_INFO",
+ wifiMode: values.mode,
+ countryCode: values.countryCode,
+ MAX_Access_num: values.station,
+ m_MAX_Access_num: values.m_station
+ };
+ if (config.WIFI_BAND_SUPPORT) {
+ valueReq.wifi_band = values.wifiBand;
+ }
+ if (config.WIFI_BAND_SUPPORT && values.wifiBand == 'a') {
+ valueReq.selectedChannel = 'auto';
+ } else {
+ valueReq.selectedChannel = values.channel;
+ valueReq.abg_rate = values.rate;
+ }
+ if (config.WIFI_BANDWIDTH_SUPPORT) {
+ valueReq.wifi_11n_cap = values.bandwidth;
+ }
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getDeviceInfo() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var wpask = config.PASSWORD_ENCODE ? "WPAPSK1_encode,m_WPAPSK1_encode," : "rnum_js,WPAPSK1_enaes,m_WPAPSK1_enaes,";
+ var valueReq = {
+ cmd: "wifi_coverage,m_ssid_enable,imei,network_type,sub_network_type,rssi,rscp,lte_rsrp,imsi,sim_imsi,cr_version,hw_version,MAX_Access_num," + wpask + "SSID1,AuthMode,m_SSID,m_AuthMode,m_HideSSID,m_MAX_Access_num,lan_ipaddr," + "mac_address,msisdn,LocalDomain,wan_ipaddr,static_wan_ipaddr,ipv6_wan_ipaddr,ipv6_pdp_type,pdp_type,ppp_status,sta_ip_status,rj45_state,ethwan_mode",
+ multi_data: 1
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return {
+ ssid: paramD.SSID1,
+ authMode: paramD.AuthMode,
+ passPhrase: config.PASSWORD_ENCODE ? Base64.decode(paramD.WPAPSK1_encode) : wifiDecode(paramD.rnum_js,paramD.imei,paramD.WPAPSK1_enaes),
+ m_ssid: paramD.m_SSID,
+ m_AuthMode: paramD.m_AuthMode,
+ m_passPhrase: config.PASSWORD_ENCODE ? Base64.decode(paramD.m_WPAPSK1_encode) : wifiDecode(paramD.rnum_js,paramD.imei,paramD.m_WPAPSK1_enaes),
+ m_max_access_num: paramD.m_MAX_Access_num,
+ multi_ssid_enable: paramD.m_ssid_enable,
+ ipAddress: paramD.lan_ipaddr,
+ wanIpAddress: paramD.wan_ipaddr,
+ staticWanIpAddress: paramD.static_wan_ipaddr,
+ ipv6WanIpAddress: paramD.ipv6_wan_ipaddr,
+ ipv6PdpType: paramD.ipv6_pdp_type,
+ macAddress: paramD.mac_address,
+ simSerialNumber: paramD.msisdn,
+ lanDomain: paramD.LocalDomain,
+ imei: paramD.imei,
+ signal: convertSignal(paramD),
+ imsi: paramD.imsi || paramD.sim_imsi,
+ sw_version: paramD.cr_version,
+ hw_version: paramD.hw_version,
+ max_access_num: paramD.MAX_Access_num,
+ wifiRange: paramD.wifi_coverage,
+ pdpType: paramD.pdp_type,
+ rj45ConnectStatus: (typeof paramD.rj45_state == 'undefined' || paramD.rj45_state == '') ? 'dead' : paramD.rj45_state,
+ blc_wan_mode: informationAll.blc_wan_mode,
+ connectStatus: paramD.ppp_status,
+ wifiConStatus: paramD.sta_ip_status,
+ ethwan_mode: paramD.ethwan_mode.toUpperCase()
+ };
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getDeviceInfoLow() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {
+ cmd: "imei,rnum_js",
+ multi_data: 1
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var kstr = paramD.rnum_js + paramD.imei + "FFFFFFFFFFFFFFFFFFFFFFFF";
+ var kstr_final;
+ var kiv_final;
+
+ kstr_final = kstr.substring(0, 24);
+ kiv_final = kstr.substring(0, 16);
+
+ return {
+ skey: kstr_final,
+ siv: kiv_final
+ };
+ } else {
+
+ return {
+ skey: "FFFFFFFFFFFFFFFFFFFFFFFF",
+ siv: "FFFFFFFFFFFFFFFF"
+ };
+ }
+ }
+ }
+ function getWifiRange() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "wifi_coverage";
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {};
+ result.wifiRangeMode = paramD.wifi_coverage;
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setWifiRange() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "SET_WIFI_COVERAGE";
+ valueReq.wifi_coverage = values.wifiRangeMode;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getUpnpSetting() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "upnpEnabled";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {};
+ result.upnpSetting = paramD.upnpEnabled == "1" ? "1" : "0";
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setUpnpSetting() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "UPNP_SETTING";
+ valueReq.upnp_setting_option = values.upnpSetting;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getDmzSetting() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "DMZEnable,DMZIPAddress";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {};
+ result.dmzSetting = paramD.DMZEnable == "1" ? "1" : "0";
+ result.ipAddress = paramD.DMZIPAddress;
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setDmzSetting() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "DMZ_SETTING";
+ valueReq.DMZEnabled = values.dmzSetting;
+ if (valueReq.DMZEnabled == '1') {
+ valueReq.DMZIPAddress = values.ipAddress;
+ }
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getPortMap() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "PortMapEnable,PortMapRules_0,PortMapRules_1,PortMapRules_2,PortMapRules_3,PortMapRules_4,PortMapRules_5,PortMapRules_6,PortMapRules_7,PortMapRules_8,PortMapRules_9",
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {};
+ result.portMapEnable = paramD.PortMapEnable;
+ var rules = [];
+ if (paramD.PortMapRules_0 != "") {
+ rules.push([0, paramD.PortMapRules_0]);
+ }
+ if (paramD.PortMapRules_1 != "") {
+ rules.push([1, paramD.PortMapRules_1]);
+ }
+ if (paramD.PortMapRules_2 != "") {
+ rules.push([2, paramD.PortMapRules_2]);
+ }
+ if (paramD.PortMapRules_3 != "") {
+ rules.push([3, paramD.PortMapRules_3]);
+ }
+ if (paramD.PortMapRules_4 != "") {
+ rules.push([4, paramD.PortMapRules_4]);
+ }
+ if (paramD.PortMapRules_5 != "") {
+ rules.push([5, paramD.PortMapRules_5]);
+ }
+ if (paramD.PortMapRules_6 != "") {
+ rules.push([6, paramD.PortMapRules_6]);
+ }
+ if (paramD.PortMapRules_7 != "") {
+ rules.push([7, paramD.PortMapRules_7]);
+ }
+ if (paramD.PortMapRules_8 != "") {
+ rules.push([8, paramD.PortMapRules_8]);
+ }
+ if (paramD.PortMapRules_9 != "") {
+ rules.push([9, paramD.PortMapRules_9]);
+ }
+ result.portMapRules = parsePortMapRules(rules);
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ function parsePortMapRules(paramD) {
+ var rules = [];
+ if (paramD && paramD.length > 0) {
+ for (var i = 0; i < paramD.length; i++) {
+ var aRule = {};
+ var elements = paramD[i][1].split(",");
+ aRule.index = paramD[i][0];
+ aRule.sourcePort = elements[1];
+ aRule.destIpAddress = elements[0];
+ aRule.destPort = elements[2];
+ aRule.protocol = transProtocol(elements[3]);
+ aRule.comment = elements[4];
+ rules.push(aRule);
+ }
+ }
+ return rules;
+ }
+ }
+ function setPortMap() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "ADD_PORT_MAP";
+ valueReq.portMapEnabled = values.portMapEnable;
+ valueReq.fromPort = values.sourcePort;
+ valueReq.ip_address = values.destIpAddress;
+ valueReq.toPort = values.destPort;
+ valueReq.protocol = values.protocol;
+ valueReq.comment = values.comment;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function enablePortMap() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "ADD_PORT_MAP";
+ valueReq.portMapEnabled = values.portMapEnable;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function deleteMapRules() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "DEL_PORT_MAP";
+ valueReq.delete_id = values.indexs.join(';') + ";";
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getTrafficAlertInfo() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ return {
+ cmd: "data_volume_limit_switch,data_volume_limit_unit,data_volume_limit_size,data_volume_alert_percent,monthly_tx_bytes,monthly_rx_bytes,monthly_time,traffic_alined_delta",
+ multi_data: 1
+ };
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var isData = paramD.data_volume_limit_unit == 'data';
+ var result = {
+ dataLimitChecked: paramD.data_volume_limit_switch,
+ dataLimitTypeChecked: isData ? '1' : '0',
+ limitDataMonth: isData ? paramD.data_volume_limit_size : '0',
+ alertDataReach: isData ? paramD.data_volume_alert_percent : '0',
+ limitTimeMonth: isData ? '0' : paramD.data_volume_limit_size,
+ alertTimeReach: isData ? '0' : paramD.data_volume_alert_percent,
+ monthlySent: paramD.monthly_tx_bytes == '' ? 0 : paramD.monthly_tx_bytes,
+ monthlyReceived: paramD.monthly_rx_bytes == '' ? 0 : paramD.monthly_rx_bytes,
+ monthlyConnectedTime: paramD.monthly_time == '' ? 0 : paramD.monthly_time,
+ traffic_alined_delta: paramD.traffic_alined_delta == '' ? 0 : paramD.traffic_alined_delta
+ };
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setTrafficAlertInfo() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var isData = values.dataLimitTypeChecked == '1';
+ var valueReq = {
+ goformId: "DATA_LIMIT_SETTING",
+ data_volume_limit_switch: values.dataLimitChecked
+ };
+ if (values.dataLimitChecked == '1') {
+ valueReq.data_volume_limit_unit = isData ? 'data' : 'time';
+ valueReq.data_volume_limit_size = isData ? values.limitDataMonth : values.limitTimeMonth;
+ valueReq.data_volume_alert_percent = isData ? values.alertDataReach : values.alertTimeReach;
+ }
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getUSSDResponse() {
+ var callback = arguments[1];
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ if (values.sendOrReply == "send") {
+ return {
+ goformId: "USSD_PROCESS",
+ USSD_operator: values.operator,
+ USSD_send_number: values.strUSSDCommand,
+ notCallback: true
+ };
+ } else if (values.sendOrReply == "reply") {
+ return {
+ goformId: "USSD_PROCESS",
+ USSD_operator: values.operator,
+ USSD_reply_number: values.strUSSDCommand,
+ notCallback: true
+ };
+ }
+ }
+ function deal(paramD) {
+ if (!paramD) {
+ callback(false, "ussd_fail");
+ return;
+ }
+ if (paramD.result == "success") {
+ callbackTemp = callback;
+ getResponse();
+ } else {
+ callback(false, "ussd_fail");
+ }
+ }
+ }
+ function getResponse() {
+ $.ajax({
+ url: "/reqproc/proc_get",
+ data: {
+ cmd: "ussd_write_flag"
+ },
+ cache: false,
+ async: true,
+ dataType: "json",
+ success: function (result) {
+ if (result.ussd_write_flag == "1") {
+ callbackTemp(false, "ussd_no_service");
+ } else if (result.ussd_write_flag == "4" || result.ussd_write_flag == "unknown" || result.ussd_write_flag == "3") {
+ callbackTemp(false, "ussd_timeout");
+ } else if (result.ussd_write_flag == "15") {
+ setTimeout(getResponse, 1000);
+ } else if (result.ussd_write_flag == "10") {
+ callbackTemp(false, "ussd_retry");
+ } else if (result.ussd_write_flag == "99") {
+ callbackTemp(false, "ussd_unsupport");
+ } else if (result.ussd_write_flag == "41") {
+ callbackTemp(false, "operation_not_supported");
+ } else if (result.ussd_write_flag == "2") {
+ callbackTemp(false, "network_terminated");
+ } else if (result.ussd_write_flag == "16") {
+ $.ajax({
+ url: "/reqproc/proc_get",
+ data: {
+ cmd: "ussd_data_info"
+ },
+ dataType: "json",
+ async: true,
+ cache: false,
+ success: function (paramD) {
+ var content = {};
+ content.data = paramD.ussd_data;
+ content.ussd_action = paramD.ussd_action;
+ content.ussd_dcs = paramD.ussd_dcs;
+ callbackTemp(true, content);
+ },
+ error: function () {
+ callbackTemp(false, "ussd_info_error");
+ }
+ });
+ } else {
+ callbackTemp(false, "ussd_fail");
+ }
+ },
+ error: function () {
+ callbackTemp(false, "ussd_fail");
+ }
+ });
+ }
+ function USSDReplyCancel(callback) {
+ $.ajax({
+ url: "/reqproc/proc_post",
+ data: {
+ goformId: "USSD_PROCESS",
+ USSD_operator: "ussd_cancel"
+ },
+ cache: false,
+ dataType: "json",
+ success: function (paramD) {
+ if (paramD.result == "success") {
+ getCancelResponse();
+ } else {
+ callback(false);
+ }
+ }
+ });
+ function getCancelResponse() {
+ $.ajax({
+ url: "/reqproc/proc_get",
+ data: {
+ cmd: "ussd_write_flag"
+ },
+ cache: false,
+ async: true,
+ dataType: "json",
+ success: function (result) {
+ if (result.ussd_write_flag == "15") {
+ setTimeout(getCancelResponse, 1000);
+ } else if (result.ussd_write_flag == "13") {
+ callback(true);
+ } else {
+ callback(false);
+ }
+ },
+ error: function () {
+ callback(false);
+ }
+ });
+ }
+ }
+ function unlockNetwork() {
+ var callback = arguments[1];
+ var checkPoint = 0;
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values) {
+ return {
+ goformId: "UNLOCK_NETWORK",
+ notCallback: true,
+ unlock_network_code: values.unlock_network_code
+ };
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == "success") {
+ addCallback(checkUnlockNetworkStatus);
+ } else {
+ callback({
+ result: 'fail'
+ });
+ }
+ }
+ function checkUnlockNetworkStatus() {
+ if (checkPoint > 5) {
+ removeCallback(checkUnlockNetworkStatus);
+ callback({
+ result: 'fail'
+ });
+ } else if (informationAll.simStatus != 'modem_imsi_waitnck') {
+ removeCallback(checkUnlockNetworkStatus);
+ callback({
+ result: 'success'
+ });
+ }
+ checkPoint++;
+ }
+ }
+ function getNetworkUnlockTimes() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ return {
+ cmd: "unlock_nck_time"
+ };
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setUpdateInfoWarning() {
+ var callback = arguments[1];
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values) {
+ return {
+ goformId: "SET_UPGRADE_NOTICE",
+ upgrade_notice_flag: values.upgrade_notice_flag,
+ notCallback: true
+ };
+ }
+ function deal(paramD) {
+ if (paramD.result == "success") {
+ callback(true);
+ } else {
+ callback(false);
+ }
+ }
+ }
+ function getUpdateInfoWarning() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ return {
+ cmd: "upgrade_notice_flag"
+ };
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getAPStationBasic() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ return {
+ multi_data: 1,
+ cmd: "wifi_sta_connection,pswan_priority,wifiwan_priority,ethwan_priority"
+ };
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return {
+ ap_station_enable: paramD.wifi_sta_connection,
+ ap_station_mode: parseInt(paramD.wifiwan_priority, 10) > parseInt(paramD.pswan_priority, 10) ? "wifi_pref" : "dial_pref"
+ }
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setAPStationBasic() {
+ var tmp = arguments[0];
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values) {
+ return {
+ goformId: "WIFI_STA_CONTROL",
+ wifi_sta_connection: values.ap_station_enable
+ };
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == "success") {
+ informationAll.ap_station_enable = tmp.ap_station_enable == 1;
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function refreshAPStationStatus() {
+ return getAPStationBasic({}, function (paramD) {
+ informationAll.ap_station_enable = paramD.ap_station_enable == 1;
+ informationAll.ap_station_mode = paramD.ap_station_mode;
+ });
+ }
+ function getHotspotList() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var cmdStr = "wifi_profile_num,wifi_profile";
+ for (var i = 1; i < config.AP_STATION_LIST_LENGTH; i++) {
+ cmdStr = cmdStr + ",wifi_profile" + i;
+ }
+ return {
+ multi_data: 1,
+ cmd: cmdStr
+ };
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var wifiList = [];
+ for (var i = 0; i < config.AP_STATION_LIST_LENGTH; i++) {
+ var wifiStr = "";
+ if (i == 0) {
+ wifiStr = paramD.wifi_profile;
+ } else {
+ wifiStr = paramD["wifi_profile" + i];
+ }
+ var wifiArray = wifiStr.split(";");
+ for (var j = 0; j < wifiArray.length; j++) {
+ var item = wifiArray[j].split(",");
+ if (!item[0]) {
+ break;
+ }
+ var wifiJson = {
+ profileName: item[0],
+ fromProvider: item[1],
+ connectStatus: item[2],
+ signal: item[3],
+ ssid: item[4],
+ authMode: item[5],
+ encryptType: item[6],
+ password: item[7] == "0" ? "" : item[7],
+ keyID: item[8],
+ mac: item[9]
+ };
+ wifiList.push(wifiJson);
+ }
+ }
+ return {
+ hotspotList: wifiList
+ };
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function searchHotspot() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values) {
+ return {
+ goformId: "WLAN_SET_STA_REFRESH"
+ };
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getSearchHotspotList() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ return {
+ multi_data: 1,
+ cmd: "scan_finish,EX_APLIST,EX_APLIST1"
+ }
+ }
+ function deal(paramD) {
+ if (paramD) {
+ if (paramD.scan_finish == "0") {
+ return {
+ scan_finish: "0",
+ hotspotList: []
+ };
+ }
+ if (paramD.scan_finish == "2") {
+ return {
+ scan_finish: "2",
+ hotspotList: []
+ };
+ }
+ var wifiList = [];
+ for (var i = 0; i <= 1; i++) {
+ var wifiStr;
+ if (i == 0) {
+ wifiStr = paramD.EX_APLIST;
+ } else {
+ wifiStr = paramD.EX_APLIST1;
+ }
+ var wifiArray = wifiStr.split(";");
+ for (var j = 0; j < wifiArray.length; j++) {
+ var item = wifiArray[j].split(",");
+ if (!item[0]) {
+ break;
+ }
+ var wifiJson = {
+ fromProvider: item[0],
+ connectStatus: item[1],
+ ssid: item[2],
+ signal: item[3],
+ channel: item[4],
+ authMode: item[5],
+ encryptType: item[6],
+ mac: item[7]
+ }
+ wifiList.push(wifiJson);
+ }
+ }
+ return {
+ scan_finish: "1",
+ hotspotList: wifiList
+ };
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function creatHotspotString(hotspot) {
+ var tmp = [];
+ tmp.push(hotspot.profileName);
+ tmp.push(hotspot.fromProvider || "0");
+ tmp.push(hotspot.connectStatus || "0");
+ tmp.push(hotspot.signal);
+ tmp.push(hotspot.ssid);
+ tmp.push(hotspot.authMode);
+ tmp.push(hotspot.encryptType);
+ tmp.push(hotspot.password || "0");
+ tmp.push(hotspot.keyID);
+ tmp.push(hotspot.mac);
+ return tmp.join(",");
+ }
+ function saveHotspot() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values) {
+ var apList = values.apList;
+ var action = "modify";
+ if (values.profileName == "") {
+ action = "add";
+ var newName = (jQuery.fn.jquery + Math.random()).replace(/\D/g, "");
+ values.profileName = newName;
+ apList.push({
+ profileName: newName,
+ fromProvider: "0",
+ connectStatus: "0",
+ signal: values.signal,
+ ssid: values.ssid,
+ authMode: values.authMode,
+ encryptType: values.encryptType,
+ password: values.password || "0",
+ keyID: values.keyID,
+ mac: values.mac
+ });
+ }
+ var wifi = {
+ "profile0": []
+ };
+ for (var i = 1; i < config.AP_STATION_LIST_LENGTH; i++) {
+ wifi["profile" + i] = [];
+ }
+ var activeHotspotStr = "";
+ for (var i = 0; i < apList.length; i++) {
+ var hotspotStr = "";
+ if (values.profileName == apList[i].profileName) {
+ hotspotStr = creatHotspotString(values);
+ activeHotspotStr = hotspotStr;
+ } else {
+ hotspotStr = creatHotspotString(apList[i]);
+ }
+ var index = parseInt(i % 10);
+ wifi["profile" + index].push(hotspotStr);
+ }
+ var profileParams = {
+ wifi_profile: wifi.profile0.join(";")
+ };
+ for (var i = 1; i < config.AP_STATION_LIST_LENGTH; i++) {
+ profileParams["wifi_profile" + i] = wifi["profile" + i].join(";");
+ }
+ var valueReq = $.extend({
+ goformId: "WIFI_SPOT_PROFILE_UPDATE",
+ wifi_profile_num: apList.length,
+ wifi_update_profile: activeHotspotStr,
+ action: action
+ }, profileParams);
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function deleteHotspot() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values) {
+ var apList = values.apList;
+ var wifi = {
+ "profile0": []
+ };
+ for (var i = 1; i < config.AP_STATION_LIST_LENGTH; i++) {
+ wifi["profile" + i] = [];
+ }
+ var foundDelete = false;
+ var activeHotspotStr = "";
+ for (var i = 0; i < apList.length; i++) {
+ var hotspotStr = creatHotspotString(apList[i]);
+ if (apList[i].profileName == values.profileName) {
+ foundDelete = true;
+ activeHotspotStr = hotspotStr;
+ continue;
+ }
+ var idIndex = i;
+ if (foundDelete) {
+ idIndex = i - 1;
+ }
+ var index = parseInt(idIndex % 10);
+ wifi["profile" + index].push(hotspotStr);
+ }
+ var num = foundDelete ? apList.length - 1 : apList.length;
+ var profileParams = {
+ wifi_profile: wifi.profile0.join(";")
+ };
+ for (var i = 1; i < config.AP_STATION_LIST_LENGTH; i++) {
+ profileParams["wifi_profile" + i] = wifi["profile" + i].join(";");
+ }
+ var valueReq = $.extend({
+ goformId: "WIFI_SPOT_PROFILE_UPDATE",
+ wifi_profile_num: num,
+ wifi_update_profile: activeHotspotStr,
+ action: "delete"
+ }, profileParams);
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function connectHotspot() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values) {
+ return {
+ goformId: "WLAN_SET_STA_CON",
+ EX_SSID1: values.EX_SSID1,
+ EX_AuthMode: values.EX_AuthMode,
+ EX_EncrypType: values.EX_EncrypType,
+ EX_DefaultKeyID: values.EX_DefaultKeyID,
+ EX_WEPKEY: values.EX_WEPKEY,
+ EX_WPAPSK1: values.EX_WPAPSK1,
+ EX_wifi_profile: values.EX_wifi_profile,
+ EX_mac: values.EX_mac
+ };
+ }
+ function deal(paramD) {
+ if (paramD && (paramD.result == "success" || paramD.result == "processing")) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function disconnectHotspot() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values) {
+ return {
+ goformId: "WLAN_SET_STA_DISCON"
+ };
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == "success") {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getOpMode() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ return {
+ multi_data: 1,
+ cmd: "blc_wan_mode,blc_wan_auto_mode,loginfo,ppp_status,rj45_state,ethwan_mode"
+ };
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {};
+ if (paramD.blc_wan_mode == 'AUTO') {
+ result.blc_wan_mode = paramD.blc_wan_auto_mode ? paramD.blc_wan_auto_mode : 'AUTO_PPP';
+ } else {
+ result.blc_wan_mode = paramD.blc_wan_mode ? paramD.blc_wan_mode : 'PPP';
+ }
+ result.loginfo = paramD.loginfo;
+ result.ppp_status = paramD.ppp_status;
+ result.rj45_state = (typeof paramD.rj45_state == 'undefined' || paramD.rj45_state == '') ? 'dead' : paramD.rj45_state;
+ result.ethwan_mode = paramD.ethwan_mode.toUpperCase();
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getRj45PlugState() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ return {
+ cmd: "rj45_plug"
+ };
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {};
+ result.rj45_plug = paramD.rj45_plug == "" ? "wan_lan_off" : paramD.rj45_plug;
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function checkOpMode(opmode, rj45state) {
+ if (config.RJ45_SUPPORT) {
+ if (rj45state == "dead" || rj45state == "") {
+ return 'PPP';
+ } else if (!opmode || opmode == "undefined") {
+ if (rj45state == "working") {
+ return 'PPPOE';
+ } else {
+ return 'PPP';
+ }
+ } else {
+ return opmode;
+ }
+ } else {
+ return 'PPP';
+ }
+ }
+ function SetOperationMode(values, callback) {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values) {
+ var valueReq = $.extend({
+ goformId: "OPERATION_MODE"
+ }, values);
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == "success") {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getPppoeParams() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ return {
+ multi_data: 1,
+ cmd: "opms_wan_auto_mode,ethwan_mode,pppoe_username,pppoe_cc,ethwan_dialmode,ppp_status,static_wan_ipaddr,static_wan_netmask,static_wan_gateway,static_wan_primary_dns,static_wan_secondary_dns,rj45_state,lan_ipaddr,lan_netmask"
+ };
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return {
+ opms_wan_auto_mode: paramD.opms_wan_auto_mode,
+ ethwan_mode: paramD.ethwan_mode.toUpperCase(),
+ pppoe_username: paramD.pppoe_username,
+ pppoe_cc: paramD.pppoe_cc,
+ ethwan_dialmode: paramD.ethwan_dialmode == "manual" ? "manual_dial" : "auto_dial",
+ ppp_status: paramD.ppp_status,
+ static_wan_ipaddr: paramD.static_wan_ipaddr,
+ static_wan_netmask: paramD.static_wan_netmask,
+ static_wan_gateway: paramD.static_wan_gateway,
+ static_wan_primary_dns: paramD.static_wan_primary_dns,
+ static_wan_secondary_dns: paramD.static_wan_secondary_dns,
+ rj45_state: (typeof paramD.rj45_state == 'undefined' || paramD.rj45_state == '') ? 'dead' : paramD.rj45_state,
+ lan_ipaddr: paramD.lan_ipaddr,
+ lan_netmask: paramD.lan_netmask
+ }
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setPppoeDialMode(values, callback) {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values) {
+ var valueReq = $.extend({
+ notCallback: true
+ }, values);
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD.result == "success") {
+ callback({
+ result: true
+ });
+ } else {
+ callback({
+ result: false
+ });
+ }
+ }
+ }
+ function getSntpParams(values, callback) {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ return {
+ multi_data: 1,
+ cmd: "sntp_year,sntp_month,sntp_day,sntp_hour,sntp_minute,sntp_second,sntp_time_set_mode,sntp_static_server0,sntp_static_server1,sntp_static_server2,sntp_server0,sntp_server1,sntp_server2,sntp_server3,sntp_server4,sntp_server5,sntp_server6,sntp_server7,sntp_server8,sntp_server9,sntp_other_server0,sntp_other_server1,sntp_other_server2,sntp_timezone,sntp_timezone_index,sntp_dst_enable,ppp_status,sntp_process_result,rj45_state"
+ };
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var sntp_servers = getSntpServers(paramD);
+ return {
+ sntp_year: paramD.sntp_year,
+ sntp_month: paramD.sntp_month,
+ sntp_day: paramD.sntp_day,
+ sntp_hour: paramD.sntp_hour,
+ sntp_minute: paramD.sntp_minute,
+ sntp_second: paramD.sntp_second,
+ sntp_time_set_mode: paramD.sntp_time_set_mode,
+ sntp_servers: sntp_servers,
+ sntp_server0: paramD.sntp_server0,
+ sntp_server1: paramD.sntp_server1,
+ sntp_server2: paramD.sntp_server2,
+ sntp_static_server0: paramD.sntp_static_server0,
+ sntp_static_server1: paramD.sntp_static_server1,
+ sntp_static_server2: paramD.sntp_static_server2,
+ sntp_other_server0: paramD.sntp_other_server0,
+ sntp_other_server1: paramD.sntp_other_server1,
+ sntp_other_server2: paramD.sntp_other_server2,
+ sntp_timezone: paramD.sntp_timezone,
+ sntp_timezone_index: paramD.sntp_timezone_index ? paramD.sntp_timezone_index : "0",
+ sntp_dst_enable: paramD.sntp_dst_enable,
+ ppp_status: paramD.ppp_status,
+ blc_wan_mode: informationAll.blc_wan_mode,
+ sntp_process_result: paramD.sntp_process_result,
+ rj45_state: (typeof paramD.rj45_state == 'undefined' || paramD.rj45_state == '') ? 'dead' : paramD.rj45_state
+ }
+ } else {
+ return errUnknownObj;
+ }
+ }
+ function getSntpServers(paramD) {
+ var serverArray = [];
+ for (var i = 0; i < 3; i++) {
+ var tmp = "sntp_static_server" + (i).toString();
+ if (paramD[tmp] != "") {
+ var obj = {};
+ obj.name = paramD[tmp];
+ obj.value = paramD[tmp];
+ serverArray.push(obj);
+ }
+ }
+ var otherArray = [{
+ name: "Other",
+ value: "Other"
+ }, {
+ name: "NONE",
+ value: ""
+ }
+ ];
+ for (var j = 0; j < 2; j++) {
+ serverArray.push(otherArray[j]);
+ }
+ return serverArray;
+ }
+ }
+ function setSNTPDate(values, callback) {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values) {
+ var valueReq = $.extend({}, values);
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == "success") {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setSntpSetting(values, callback) {
+ var valueReq = $.extend({}, values); {
+ $.post("reqproc/proc_post", valueReq, function (paramD) {
+ if (paramD && paramD.result == "success") {
+ if (values.manualsettime == "auto") {
+ setTimeout(checkSyncStatus, 2000);
+ callback(paramD);
+ } else {
+ callback(true);
+ }
+ } else if (paramD && paramD.result == "processing") {
+ callback(paramD);
+ } else {
+ callback(false);
+ }
+ }, "json");
+ }
+ function checkSyncStatus() {
+ $.ajax({
+ url: "reqproc/proc_get",
+ dataType: "json",
+ data: {
+ cmd: "sntp_process_result"
+ },
+ cache: false,
+ async: false,
+ success: function (paramD) {
+ if (paramD.sntp_process_result == "failure") {
+ callback(false);
+ } else if (paramD.sntp_process_result == "success") {
+ callback(true);
+ } else {
+ setTimeout(checkSyncStatus, 2000);
+ }
+ },
+ error: function () {
+ callback(false);
+ }
+ });
+ }
+ }
+ function addUrlFilterRule(values, callback) {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values) {
+ var valueReq = $.extend({}, values);
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == "success") {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getUrlFilterList() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ return {
+ cmd: "websURLFilters"
+ };
+ }
+ function deal(paramD) {
+ var urlFilterRules = [];
+ if (paramD) {
+ if (paramD.websURLFilters.length == 0) {
+ return {
+ urlFilterRules: []
+ };
+ } else {
+ var tempArray = paramD.websURLFilters.split(";");
+ for (var i = 0; i < tempArray.length; i++) {
+ var aRule = {};
+ aRule.index = i;
+ aRule.url = tempArray[i];
+ urlFilterRules.push(aRule);
+ }
+ return {
+ urlFilterRules: urlFilterRules
+ };
+ }
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function deleteSelectedRules(values, callback) {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values) {
+ var valueReq = $.extend({}, values);
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == "success") {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getWdsInfo() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ return {
+ multi_data: "1",
+ cmd: "wifi_wds_mode,wifi_wds_ssid,wifi_wds_AuthMode,wifi_wds_EncrypType,wifi_wds_WPAPSK1,wifi_cur_state "
+ };
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return {
+ currentMode: paramD.wifi_wds_mode,
+ wdsSSID: paramD.wifi_wds_ssid,
+ wdsAuthMode: paramD.wifi_wds_AuthMode,
+ wdsEncrypType: paramD.wifi_wds_EncrypType,
+ wdsWPAPSK1: paramD.wifi_wds_WPAPSK1,
+ RadioOff: paramD.wifi_cur_state == "1" ? "1" : "0"
+ };
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setWDS(values, callback) {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values) {
+ var valueReq = $.extend({}, values);
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == "success") {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getSyslogInfo() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ return {
+ multi_data: "1",
+ cmd: "syslog_mode,debug_level"
+ };
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return {
+ currentMode: paramD.syslog_mode,
+ debugLevel: paramD.debug_level
+ };
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setSysLog(values, callback) {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values) {
+ var valueReq = $.extend({}, values);
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == "success") {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getMacFilterInfo() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ return {
+ multi_data: "1",
+ cmd: "ACL_mode,wifi_mac_black_list,wifi_hostname_black_list,wifi_cur_state,user_ip_addr,client_mac_address,wifi_mac_white_list"
+ };
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return {
+ ACL_mode: paramD.ACL_mode,
+ wifi_mac_black_list: paramD.wifi_mac_black_list,
+ wifi_hostname_black_list: paramD.wifi_hostname_black_list,
+ RadioOff: paramD.wifi_cur_state == "1" ? "1" : "0",
+ user_ip_addr: paramD.user_ip_addr,
+ client_mac_address: paramD.client_mac_address,
+ wifi_mac_white_list: paramD.wifi_mac_white_list
+ };
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setMacFilter() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values) {
+ var valueReq = $.extend({
+ goformId: 'WIFI_MAC_FILTER',
+ }, values);
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == "success") {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getFastbootSetting() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values) {
+ return {
+ cmd: "mgmt_quicken_power_on,need_hard_reboot,need_sim_pin",
+ multi_data: 1
+ };
+ }
+ function deal(paramD) {
+ return {
+ fastbootEnabled: paramD.mgmt_quicken_power_on == '1' ? '1' : '0',
+ need_hard_reboot: paramD.need_hard_reboot,
+ need_sim_pin: paramD.need_sim_pin == 'yes' ? 'yes' : 'no'
+ };
+ }
+ }
+ function setFastbootSetting() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values) {
+ return {
+ goformId: "MGMT_CONTROL_POWER_ON_SPEED",
+ mgmt_quicken_power_on: values.fastbootEnabled
+ };
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == "success") {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function turnOffDevice() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "TURN_OFF_DEVICE";
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function restart() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "REBOOT_DEVICE";
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getScheduleSetting() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "schedule_restart_enable,schedule_restart_hour,schedule_restart_minute";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {};
+ result.scheduleSetting = paramD.schedule_restart_enable == "1" ? "1" : "0";
+ result.scheduleHour = paramD.schedule_restart_hour;
+ result.scheduleMinute = paramD.schedule_restart_minute;
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setScheduleSetting() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "SCHEDULE_SETTING";
+ valueReq.scheduleEnabled = values.scheduleSetting;
+ if (valueReq.scheduleEnabled == '1') {
+ valueReq.scheduleHour = values.scheduleHour;
+ valueReq.scheduleMinute = values.scheduleMinute;
+ }
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getCwmpSetting() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "cwmp_enable,acs_url,acs_username,acs_password,periodic_enable,periodic_interval,cpe_username,cpe_password";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {};
+ result.cwmpSetting = paramD.cwmp_enable == "1" ? "1" : "0";
+ result.acsUrl = paramD.acs_url;
+ result.acsUsername = paramD.acs_username;
+ result.acsPassword = paramD.acs_password;
+ result.periodicEnabled = paramD.periodic_enable == "1" ? "1" : "0";
+ result.periodicInterval = paramD.periodic_interval;
+ result.cpeUsername = paramD.cpe_username;
+ result.cpePassword = paramD.cpe_password;
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setCwmpSetting() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "CWMP_SETTING";
+ valueReq.cwmpEnabled = values.cwmpSetting;
+ if (valueReq.cwmpEnabled == '1') {
+ valueReq.acsUrl = values.acsUrl;
+ valueReq.acsUsername = values.acsUsername;
+ valueReq.acsPassword = values.acsPassword;
+ valueReq.periodicEnabled = values.periodicEnabled;
+ if (valueReq.periodicEnabled == '1') {
+ valueReq.periodicInterval = values.periodicInterval;
+ }
+ valueReq.cpeUsername = values.cpeUsername;
+ valueReq.cpePassword = values.cpePassword;
+ }
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getNewVersionState() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "fota_new_version_state,fota_current_upgrade_state,fota_package_already_download";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var hasNewVersion = (paramD.fota_new_version_state == 'has_critical' || paramD.fota_new_version_state == 'has_optional' || paramD.fota_new_version_state == 'already_has_pkg');
+ paramD.hasNewVersion = hasNewVersion;
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getMandatory() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ if (config.UPGRADE_TYPE == "OTA") {
+ valueReq.cmd = "is_mandatory";
+ } else {
+ valueReq.cmd = "fota_new_version_state";
+ }
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ if (config.UPGRADE_TYPE == "OTA") {
+ return {
+ "is_mandatory": paramD.is_mandatory == "1"
+ };
+ } else {
+ return {
+ "is_mandatory": paramD.fota_new_version_state == "has_critical"
+ };
+ }
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getUpgradeResult() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "upgrade_result";
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getCurrentUpgradeState() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "fota_current_upgrade_state";
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ paramD.current_upgrade_state = paramD.fota_current_upgrade_state;
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getPackSizeInfo() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "fota_pkg_total_size,fota_dl_pkg_size";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setUpgradeSelectOp() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "IF_UPGRADE";
+ valueReq.select_op = values.selectOp;
+ if (valueReq.select_op == 'check') {
+ valueReq.ota_manual_check_roam_state = 1;
+ }
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getOTAUpdateSetting() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "fota_updateMode,fota_updateIntervalDay,fota_allowRoamingUpdate";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return {
+ updateMode: paramD.fota_updateMode,
+ updateIntervalDay: paramD.fota_updateIntervalDay,
+ allowRoamingUpdate: paramD.fota_allowRoamingUpdate
+ };
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setOTAUpdateSetting() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "SetUpgAutoSetting";
+ valueReq.UpgMode = values.updateMode;
+ valueReq.UpgIntervalDay = values.updateIntervalDay;
+ valueReq.UpgRoamPermission = values.allowRoamingUpdate;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == "success") {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getManualOTAUpdateSetting() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "fota_manualUpgradeURL";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return {
+ updateURL: paramD.fota_manualUpgradeURL
+ };
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setManualOTAUpdateSetting() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "SetUpgManualSetting";
+ valueReq.UpgURL = values.updateURL;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == "success") {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getOTAlastCheckTime() {
+ return getParams({
+ nv: ['dm_last_check_time']
+ }, arguments[1], arguments[2]);
+ }
+ function getSignalStrength() {
+ return getParams({
+ nv: ['network_type', 'sub_network_type', 'rssi', 'rscp', 'lte_rsrp']
+ }, arguments[1], arguments[2]);
+ }
+ function clearUpdateResult() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "RESULT_RESTORE";
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == "success") {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function childGroupList() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {
+ cmd: "childGroupList"
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && (paramD.childGroupList || paramD.devices)) {
+ return paramD;
+ } else {
+ return {
+ devices: []
+ };
+ }
+ }
+ }
+ function addChildGroup() {
+ return stuffMake(arguments, config.currentUserInChildGroup == false ? {}
+ : {
+ errorType: 'no_auth'
+ }, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {
+ goformId: "ADD_DEVICE",
+ mac: values.macAddress
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == 'success') {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function removeChildGroup() {
+ return stuffMake(arguments, config.currentUserInChildGroup == false ? {}
+ : {
+ errorType: 'no_auth'
+ }, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {
+ goformId: "DEL_DEVICE",
+ mac: values.mac
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == 'success') {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function checkCurrentUserInChildGroup(devices) {
+ if (typeof config.currentUserInChildGroup == "undefined") {
+ var childGroupDevice = [];
+ if (typeof devices != "undefined") {
+ childGroupDevice = devices;
+ } else {
+ childGroupDevice = childGroupList({}).devices;
+ }
+ var userMacAddr = getUserMacAddr({}).get_user_mac_addr;
+ var found = _.find(childGroupDevice, function (item) {
+ return item.mac == userMacAddr;
+ });
+ config.currentUserInChildGroup = typeof found != 'undefined';
+ return {
+ result: typeof found != 'undefined'
+ };
+ }
+ return {
+ result: config.currentUserInChildGroup
+ };
+ }
+ function getUserMacAddr() {
+ return getParams({
+ nv: 'get_user_mac_addr'
+ }, arguments[1], arguments[2]);
+ }
+ function getHostNameList() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {
+ cmd: "hostNameList"
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && (paramD.hostNameList || paramD.devices)) {
+ return paramD;
+ } else {
+ return {
+ devices: []
+ };
+ }
+ }
+ }
+ function editHostName() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {
+ goformId: "EDIT_HOSTNAME",
+ mac: values.mac,
+ hostname: values.hostname
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == 'success') {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getSiteWhiteList() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {
+ cmd: "site_white_list"
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && (paramD.site_white_list || paramD.siteList)) {
+ return paramD;
+ } else {
+ return {
+ siteList: []
+ };
+ }
+ }
+ }
+ function removeSiteWhite() {
+ return stuffMake(arguments, config.currentUserInChildGroup == false ? {}
+ : {
+ errorType: 'no_auth'
+ }, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {
+ goformId: "REMOVE_WHITE_SITE",
+ ids: values.ids.join(',')
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == 'success') {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function saveSiteWhite() {
+ return stuffMake(arguments, config.currentUserInChildGroup == false ? {}
+ : {
+ errorType: 'no_auth'
+ }, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {
+ goformId: "ADD_WHITE_SITE",
+ name: values.name,
+ site: values.site
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == 'success') {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getTimeLimited() {
+ var defaultResult = {
+ '0': [],
+ '1': [],
+ '2': [],
+ '3': [],
+ '4': [],
+ '5': [],
+ '6': []
+ };
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {
+ cmd: "time_limited"
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return parseTimeLimited(paramD);
+ } else {
+ return defaultResult;
+ }
+ }
+ function parseTimeLimited(paramD) {
+ if (paramD.time_limited == '') {
+ return {
+ time_limited: []
+ };
+ }
+ var weeks = paramD.time_limited.split(';');
+ _.each(weeks, function (week) {
+ var weekTime = week.split('+');
+ if (weekTime.length == 2) {
+ defaultResult[weekTime[0]] = weekTime[1].split(',');
+ }
+ });
+ return defaultResult;
+ }
+ }
+ function saveTimeLimited() {
+ return stuffMake(arguments, config.currentUserInChildGroup == false ? {}
+ : {
+ errorType: 'no_auth'
+ }, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {
+ goformId: "SAVE_TIME_LIMITED",
+ time_limited: values.time
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == 'success') {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getTsw() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {
+ cmd: "openEnable,closeEnable,openTime,closeTime",
+ multi_data: '1'
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ if (paramD.openTime.indexOf(':') != -1) {
+ var open = paramD.openTime.split(':');
+ paramD.openH = leftInsert(open[0], 2, '0');
+ paramD.openM = leftInsert(open[1], 2, '0');
+ } else {
+ paramD.openH = '06';
+ paramD.openM = '00';
+ }
+ if (paramD.closeTime.indexOf(':') != -1) {
+ var close = paramD.closeTime.split(':');
+ paramD.closeH = leftInsert(close[0], 2, '0');
+ paramD.closeM = leftInsert(close[1], 2, '0');
+ } else {
+ paramD.closeH = '22';
+ paramD.closeM = '00';
+ }
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function saveTsw() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {
+ goformId: "SAVE_TSW",
+ openEnable: values.openEnable,
+ closeEnable: values.closeEnable
+ };
+ if (values.openEnable == '1') {
+ valueReq.openTime = values.openTime;
+ valueReq.closeTime = values.closeTime;
+ }
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == 'success') {
+ return paramD;
+ } else if (paramD && paramD.result == 'failure') {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function trafficCalibration() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {
+ goformId: "FLOW_CALIBRATION_MANUAL",
+ calibration_way: values.way,
+ time: values.way == 'time' ? values.value : 0,
+ data: values.way == 'data' ? values.value : 0
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == 'success') {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getParams() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ if (_.isArray(values.nv)) {
+ valueReq.cmd = values.nv.join(',');
+ valueReq.multi_data = 1;
+ } else {
+ valueReq.cmd = values.nv;
+ }
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getRedirectData() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "vwim_mc_state,traffic_overrun,detect_new_version";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {};
+ result.vwim_mc_state = paramD.vwim_mc_state;
+ result.traffic_overrun = paramD.traffic_overrun;
+ result.detect_new_version = paramD.detect_new_version;
+ result.blc_wan_mode = informationAll.blc_wan_mode;
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function clearRedirectFlag() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "CLEAR_REDIRECT_FLAG";
+ valueReq.flag_id = values.redirectFlags;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getV4Switch() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "lock_zone_enable,pin_interlock_and_V4_lock";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setV4Switch() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "PIN_LOCK_V4_ENCODE";
+ valueReq.pin_interlock_and_V4_lock = values.pin_interlock_and_V4_lock;
+ valueReq.TspLock_key_data = values.TspLock_key_data;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == "success") {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getCellId() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "cell_id_list,global_cell_id,network_type,sub_network_type,cell_not_correct";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setCellIdSwitch() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "LOCK_ZONE";
+ valueReq.lock_zone_enable = values.lock_zone_enable;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD && paramD.result == "success") {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getUpdateType() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {
+ cmd: "update_type"
+ };
+ return valueReq;
+ }
+ function deal(paramD) {
+ return {
+ update_type: paramD.update_type ? paramD.update_type : "mifi_fota"
+ }
+ }
+ }
+ function getSecurityInfo() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.cmd = "AuthMode,passPhrase";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {};
+ result.AuthMode = paramD.AuthMode;
+ result.passPhrase = config.PASSWORD_ENCODE ? Base64.decode(paramD.passPhrase) : paramD.passPhrase;
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ //can delete
+ function setSecurityInfo() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "SET_WIFI_SECURITY_INFO";
+ valueReq.AuthMode = values.AuthMode;
+ if (valueReq.AuthMode == "WPAPSKWPA2PSK") {
+ valueReq.passPhrase = config.PASSWORD_ENCODE ? Base64.encode(values.passPhrase) : values.passPhrase;
+ }
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setWifiBasic() {
+ stuffMakeAndCheckServerIsOnline(arguments, prepare, deal);
+ function prepare(values) {
+ var valueReq = {
+ goformId: "SET_WIFI_SSID1_SETTINGS",
+ ssid: values.SSID,
+ broadcastSsidEnabled: values.broadcast,
+ MAX_Access_num: values.station,
+ security_mode: values.AuthMode,
+ cipher: values.cipher,
+ NoForwarding: values.NoForwarding,
+ show_qrcode_flag: values.show_qrcode_flag
+ };
+ if (config.WIFI_WEP_SUPPORT) {
+ valueReq.wep_default_key = values.wep_default_key;
+ valueReq.wep_key_1 = values.wep_key_1;
+ valueReq.wep_key_2 = values.wep_key_2;
+ valueReq.wep_key_3 = values.wep_key_3;
+ valueReq.wep_key_4 = values.wep_key_4;
+ if (values.wep_default_key == '1') {
+ valueReq.WEP2Select = values.WEP2Select;
+ } else if (values.wep_default_key == '2') {
+ valueReq.WEP3Select = values.WEP3Select;
+ } else if (values.wep_default_key == '3') {
+ valueReq.WEP4Select = values.WEP4Select;
+ } else {
+ valueReq.WEP1Select = values.WEP1Select;
+ }
+ }
+ if (values.AuthMode == "WPAPSK" || values.AuthMode == "WPA2PSK" || values.AuthMode == "WPAPSKWPA2PSK" || values.AuthMode == "WPA3Personal" || values.AuthMode == "WPA2WPA3") {
+ valueReq.security_shared_mode = values.cipher;
+ valueReq.passphrase = config.PASSWORD_ENCODE ? Base64.encode(values.passPhrase) : values.passPhrase;
+ } else if (values.AuthMode == "SHARED") {
+ valueReq.security_shared_mode = "WEP";
+ valueReq.security_mode = "SHARED";
+ } else {
+ if (values.encryptType == "WEP") {
+ valueReq.security_shared_mode = "WEP";
+ valueReq.security_mode = "OPEN";
+ } else {
+ valueReq.security_shared_mode = "NONE";
+ }
+ }
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setWifiBasic4SSID2() {
+ stuffMakeAndCheckServerIsOnline(arguments, prepare, deal);
+ function prepare(values) {
+ var valueReq = {
+ goformId: "SET_WIFI_SSID2_SETTINGS",
+ m_SSID: values.m_SSID,
+ m_HideSSID: values.m_broadcast,
+ m_MAX_Access_num: values.m_station,
+ m_AuthMode: values.m_AuthMode,
+ cipher: values.m_cipher,
+ m_NoForwarding: values.m_NoForwarding,
+ m_show_qrcode_flag: values.m_show_qrcode_flag
+ };
+ if (config.WIFI_WEP_SUPPORT) {
+ valueReq.m_DefaultKeyID = values.m_wep_default_key;
+ valueReq.m_Key1Str1 = values.m_wep_key_1;
+ valueReq.m_Key2Str1 = values.m_wep_key_2;
+ valueReq.m_Key3Str1 = values.m_wep_key_3;
+ valueReq.m_Key4Str1 = values.m_wep_key_4;
+ if (values.m_wep_default_key == '1') {
+ valueReq.m_Key2Type = values.m_WEP2Select;
+ } else if (values.m_wep_default_key == '2') {
+ valueReq.m_Key3Type = values.m_WEP3Select;
+ } else if (values.m_wep_default_key == '3') {
+ valueReq.m_Key4Type = values.m_WEP4Select;
+ } else {
+ valueReq.m_Key1Type = values.m_WEP1Select;
+ }
+ }
+ if (values.m_AuthMode == "WPAPSK" || values.m_AuthMode == "WPA2PSK" || values.m_AuthMode == "WPAPSKWPA2PSK" || values.m_AuthMode == "WPA3Personal" || values.m_AuthMode == "WPA2WPA3") {
+ valueReq.m_EncrypType = values.m_cipher;
+ valueReq.m_WPAPSK1 = config.PASSWORD_ENCODE ? Base64.encode(values.m_passPhrase) : values.m_passPhrase;
+ } else if (values.m_AuthMode == "SHARED") {
+ valueReq.m_EncrypType = "WEP";
+ valueReq.m_security_mode = "SHARED";
+ } else {
+ if (values.m_encryptType == "WEP") {
+ valueReq.m_EncrypType = "WEP";
+ valueReq.m_security_mode = "OPEN";
+ } else {
+ valueReq.m_EncrypType = "NONE";
+ }
+ }
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function getWifiBasic() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ var wpapsk = config.PASSWORD_ENCODE ? "WPAPSK1_encode,m_WPAPSK1_encode," : "imei,rnum_js,WPAPSK1_enaes,m_WPAPSK1_enaes,";
+ valueReq.cmd = "m_ssid_enable,wifi_cur_state,NoForwarding,m_NoForwarding," + wpapsk + "MAX_Station_num," + "SSID1,AuthMode,HideSSID,MAX_Access_num,show_qrcode_flag,EncrypType,Key1Str1,Key2Str1,Key3Str1,Key4Str1,DefaultKeyID," + "m_SSID,m_AuthMode,m_HideSSID,m_MAX_Access_num,m_EncrypType,m_show_qrcode_flag,m_DefaultKeyID,m_Key1Str1,m_Key2Str1,m_Key3Str1,m_Key4Str1,rotationFlag,wifi_sta_connection";
+ valueReq.multi_data = 1;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ var result = {
+ wifi_enable: paramD.wifi_cur_state == "1" ? "1" : "0",
+ multi_ssid_enable: paramD.m_ssid_enable,
+ MAX_Station_num: $.isNumeric(paramD.MAX_Station_num) ? paramD.MAX_Station_num : config.MAX_STATION_NUMBER,
+ AuthMode: paramD.AuthMode,
+ SSID: paramD.SSID1,
+ broadcast: paramD.HideSSID,
+ apIsolation: paramD.NoForwarding,
+ passPhrase: config.PASSWORD_ENCODE ? Base64.decode(paramD.WPAPSK1_encode) : wifiDecode(paramD.rnum_js,paramD.imei,paramD.WPAPSK1_enaes),
+ MAX_Access_num: paramD.MAX_Access_num,
+ cipher: paramD.EncrypType == "TKIP" ? "0" : paramD.EncrypType == "AES" ? 1 : 2,
+ encryptType: paramD.EncrypType,
+ show_qrcode_flag: paramD.show_qrcode_flag == "1" ? true : false,
+ keyID: paramD.DefaultKeyID,
+ Key1Str1: paramD.Key1Str1,
+ Key2Str1: paramD.Key2Str1,
+ Key3Str1: paramD.Key3Str1,
+ Key4Str1: paramD.Key4Str1,
+ m_SSID: paramD.m_SSID,
+ m_broadcast: paramD.m_HideSSID,
+ m_apIsolation: paramD.m_NoForwarding,
+ m_MAX_Access_num: paramD.m_MAX_Access_num,
+ m_AuthMode: paramD.m_AuthMode,
+ m_passPhrase: config.PASSWORD_ENCODE ? Base64.decode(paramD.m_WPAPSK1_encode) : wifiDecode(paramD.rnum_js,paramD.imei,paramD.m_WPAPSK1_enaes),
+ m_cipher: paramD.m_EncrypType == "TKIP" ? "0" : paramD.m_EncrypType == "AES" ? 1 : 2,
+ m_show_qrcode_flag: paramD.m_show_qrcode_flag == "1" ? true : false,
+ m_encryptType: paramD.m_EncrypType,
+ m_keyID: paramD.m_DefaultKeyID,
+ m_Key1Str1: paramD.m_Key1Str1,
+ m_Key2Str1: paramD.m_Key2Str1,
+ m_Key3Str1: paramD.m_Key3Str1,
+ m_Key4Str1: paramD.m_Key4Str1,
+ rotationFlag: paramD.rotationFlag,
+ ap_station_enable: paramD.wifi_sta_connection
+ };
+ return result;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function setWifiBasicMultiSSIDSwitch() {
+ stuffMakeAndCheckServerIsOnline(arguments, prepare, deal);
+ function prepare(values) {
+ var paraTemp = values;
+ if (values.wifiEnabled == '0') {
+ paraTemp = {
+ wifiEnabled: values.wifiEnabled
+ }
+ }
+ var valueReq = $.extend({
+ goformId: "SET_WIFI_INFO",
+ }, paraTemp);
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+ function stuffMake(array, result, prepare, dealMethod, errorObject, isPost) {
+ var values = array[0],
+ callback = array[1],
+ errorCallback = array[2];
+ var objectToReturn;
+ if (result && typeof result.errorType === 'string') {
+ objectToReturn = $.extend(errUnknownObj, result);
+ if (!callback) {
+ return objectToReturn;
+ }
+ doCallback(objectToReturn, callback, errorCallback);
+ } else {
+ objectToReturn = $.extend({}, result);
+ var valueReq;
+ if (prepare) {
+ valueReq = prepare(values, isPost);
+ } else {
+ valueReq = values;
+ }
+ if (!callback) {
+ if (valueReq && (valueReq.cmd || valueReq.goformId)) {
+ var r = reqSync(valueReq, isPost);
+ if (dealMethod) {
+ objectToReturn = $.extend({}, dealMethod(r));
+ } else {
+ objectToReturn = r;
+ }
+ }
+ return objectToReturn;
+ } else {
+ if (valueReq && (valueReq.cmd || valueReq.goformId)) {
+ reqAsync(valueReq, function (paramD) {
+ if (dealMethod) {
+ objectToReturn = $.extend({}, dealMethod(paramD));
+ } else {
+ objectToReturn = $.extend({}, paramD);
+ }
+ if (!valueReq.notCallback) {
+ doCallback(objectToReturn, callback, errorCallback);
+ }
+ }, function () {
+ if (errorObject) {
+ objectToReturn = $.extend(errUnknownObj, errorObject);
+ } else {
+ objectToReturn = $.extend(errUnknownObj, {
+ errorType: 'Unknown'
+ });
+ }
+ doCallback(objectToReturn, callback, errorCallback);
+ }, isPost);
+ } else {
+ doCallback(objectToReturn, callback, errorCallback);
+ }
+ }
+ }
+ function doCallback(resultToReturn, callback, errorCallback) {
+ errorCallback = errorCallback ? errorCallback : callback;
+ if (isErrorObject(resultToReturn)) {
+ switch (resultToReturn.errorType) {
+ case 'cellularNetworkError':
+ case 'deviceError':
+ case 'wifiConnectionError':
+ window.receivedNonSpecificError(resultToReturn);
+ break;
+ default:
+ errorCallback(resultToReturn);
+ }
+ } else {
+ callback(resultToReturn);
+ }
+ }
+ }
+ function reqSync(values, isPost) {
+ return reqAJAX(values, null, null, false, isPost);
+ }
+ function reqAsync(values, successCallback, errorCallback, isPost) {
+ reqAJAX(values, successCallback, errorCallback, true, isPost);
+ }
+ function getString(values){
+ var regexp = /^[A-z0-9]+$/;
+ var matches = values.match(regexp);
+ if (matches == null){
+ return "error";
+ } else {
+ return values;
+ }
+ }
+ function reqAJAX(values, successCallback, errorCallback, async, isPost) {
+ var result = null;
+ $.ajax({
+ type: !!isPost ? "POST" : "GET",
+ url: isPost ? "/reqproc/proc_post" : values.cmd ? "/reqproc/proc_get" : "/reqproc/proc_post",
+ data: values,
+ dataType: "json",
+ async: !!async,
+ cache: false,
+ error: function (paramD) {
+ if (async) {
+ errorCallback(paramD);
+ } else if (paramD.status == 200) {
+ result = jQuery.parseJSON('(' + getString(paramD.responseText) + ')');
+ }
+ },
+ success: function (paramD) {
+ if (async) {
+ successCallback(paramD);
+ } else {
+ result = paramD;
+ }
+ }
+ });
+ if (!async) {
+ return result;
+ }
+ }
+ var informationAll = {
+ networkType: "",
+ signalImg: "0",
+ spn_b1_flag: "1",
+ spn_name_data: "",
+ spn_b2_flag: "1",
+ networkOperator: "China Mobile",
+ connectStatus: "ppp_disconnected",
+ rj45ConnectStatus: "rj45_dead",
+ attachedDevices: [],
+ ssid1AttachedNum: 0,
+ ssid2AttachedNum: 0,
+ data_counter: {
+ uploadRate: 0,
+ downloadRate: 0,
+ totalSent: 0,
+ totalReceived: 0,
+ totalConnectedTime: 0,
+ currentSent: 0,
+ currentReceived: 0,
+ currentConnectedTime: 0,
+ monthlySent: 0,
+ monthlyReceived: 0,
+ monthlyConnectedTime: 0,
+ month: ''
+ },
+ newSmsReceived: false,
+ smsReportReceived: false,
+ smsUnreadCount: "0",
+ isLoggedIn: undefined,
+ limitVolumeEnable: false,
+ limitVolumeType: '1',
+ limitVolumePercent: "100",
+ limitVolumeSize: "0",
+ allowRoamingUpdate: "0",
+ blc_wan_mode: "",
+ ap_station_enable: undefined,
+ ap_station_mode: undefined,
+ dialMode: '',
+ ethWanMode: 'AUTO',
+ fota_user_selector: '',
+ defaultWanName: ""
+ };
+ var errUnknownObj = {
+ errorType: 'UnknownError',
+ errorId: '123',
+ errorText: 'UnknownError'
+ };
+ var updateTimerFlag = true;
+ return {
+ clearRedirectFlag: clearRedirectFlag,
+ connect: connect,
+ disconnect: disconnect,
+ getSIMPhoneBookCapacity: getSIMPhoneBookCapacity,
+ getDevicePhoneBookCapacity: getDevicePhoneBookCapacity,
+ getDevicePhoneBooks: getDevicePhoneBooks,
+ getSIMPhoneBooks: getSIMPhoneBooks,
+ getPhoneBooks: getPhoneBooks,
+ getPhoneBookReady: getPhoneBookReady,
+ getPhoneBooksByGroup: getPhoneBooksByGroup,
+ deletePhoneBooks: deletePhoneBooks,
+ deleteAllPhoneBooks: deleteAllPhoneBooks,
+ deleteAllPhoneBooksByGroup: deleteAllPhoneBooksByGroup,
+ savePhoneBook: savePhoneBook,
+ deleteAllMessages: deleteAllMessages,
+ deleteMessage: deleteMessage,
+ setSmsRead: setSmsRead,
+ sendSMS: sendSMS,
+ saveSMS: saveSMS,
+ getSMSReady: getSMSReady,
+ getSMSMessages: getSMSMessages,
+ getSMSDeliveryReport: getSMSDeliveryReport,
+ getSmsCapability: getSmsCapability,
+ resetNewSmsReceivedVar: resetNewSmsReceivedVar,
+ resetSmsReportReceivedVar: resetSmsReportReceivedVar,
+ getSmsSetting: getSmsSetting,
+ setSmsSetting: setSmsSetting,
+ getAttachedCableDevices: getAttachedCableDevices,
+ getCurrentlyAttachedDevicesInfo: getCurrentlyAttachedDevicesInfo,
+ getConnectionInfo: getConnectionInfo,
+ getRedirectData: getRedirectData,
+ getLanguage: getLanguage,
+ setLanguage: setLanguage,
+ getNetSelectInfo: getNetSelectInfo,
+ getSecurityInfo: getSecurityInfo,
+ setSecurityInfo: setSecurityInfo,
+ getStatusInfo: getStatusInfo,
+ getConnectionMode: getConnectionMode,
+ setConnectionMode: setConnectionMode,
+ getWifiBasic: getWifiBasic,
+ setWifiBasic: setWifiBasic,
+ setWifiBasic4SSID2: setWifiBasic4SSID2,
+ setWifiBasicMultiSSIDSwitch: setWifiBasicMultiSSIDSwitch,
+ getWpsInfo: getWpsInfo,
+ openWps: openWps,
+ getSleepMode: getSleepMode,
+ setSleepMode: setSleepMode,
+ getWifiAdvance: getWifiAdvance,
+ setWifiAdvance: setWifiAdvance,
+ getWifiRange: getWifiRange,
+ setWifiRange: setWifiRange,
+
+ getLoginStatus: getLoginStatus,
+ getLoginData: getLoginData,
+ login: login,
+ logout: logout,
+ changeManageInfo: changeManageInfo,
+ getPinData: getPinData,
+ enablePin: enablePin,
+ disablePin: disablePin,
+ changePin: changePin,
+ enterPIN: enterPIN,
+ enterPUK: enterPUK,
+ getLanInfo: getLanInfo,
+ setLanInfo: setLanInfo,
+ getApnSettings: getApnSettings,
+ deleteApn: deleteApn,
+ setDefaultApn: setDefaultApn,
+ addOrEditApn: addOrEditApn,
+ getQuickSettingInfo: getQuickSettingInfo,
+ setQuickSetting4IPv6: setQuickSetting4IPv6,
+ scanForNetwork: scanForNetwork,
+ setBearerPreference: setBearerPreference,
+ editHostName: editHostName,
+ getSiteWhiteList: getSiteWhiteList,
+ removeSiteWhite: removeSiteWhite,
+ saveSiteWhite: saveSiteWhite,
+ setNetwork: setNetwork,
+ getUpnpSetting: getUpnpSetting,
+ setUpnpSetting: setUpnpSetting,
+ getDmzSetting: getDmzSetting,
+ setDmzSetting: setDmzSetting,
+ getDeviceInfo: getDeviceInfo,
+ getDeviceInfoLow: getDeviceInfoLow,
+ getPortForward: getPortForward,
+ setPortForward: setPortForward,
+ getPortFilter: getPortFilter,
+ setPortFilterBasic: setPortFilterBasic,
+ setPortFilter: setPortFilter,
+ deleteFilterRules: deleteFilterRules,
+ getPortMap: getPortMap,
+ setPortMap: setPortMap,
+ enablePortMap: enablePortMap,
+ deleteMapRules: deleteMapRules,
+ getTrafficAlertInfo: getTrafficAlertInfo,
+ setTrafficAlertInfo: setTrafficAlertInfo,
+ getCurrentUpgradeState: getCurrentUpgradeState,
+ setUpgradeSelectOp: setUpgradeSelectOp,
+ addTimerThings: addTimerSomething,
+ removeTimerThings: removeTimerSomething,
+ getPackSizeInfo: getPackSizeInfo,
+ getMandatory: getMandatory,
+ getOTAUpdateSetting: getOTAUpdateSetting,
+ setOTAUpdateSetting: setOTAUpdateSetting,
+ getManualOTAUpdateSetting: getManualOTAUpdateSetting,
+ setManualOTAUpdateSetting: setManualOTAUpdateSetting,
+ getSignalStrength: getSignalStrength,
+ getOTAlastCheckTime: getOTAlastCheckTime,
+ clearUpdateResult: clearUpdateResult,
+ refreshAPStationStatus: refreshAPStationStatus,
+ getSntpParams: getSntpParams,
+ setSntpSetting: setSntpSetting,
+ setSNTPDate: setSNTPDate,
+ restoreFactorySettings: restoreFactorySettings,
+ checkRestoreStatus: checkRestoreStatus,
+ getSysSecurity: getSysSecurity,
+ setSysSecurity: setSysSecurity,
+ deleteForwardRules: deleteForwardRules,
+ enableVirtualServer: enableVirtualServer,
+ getSDConfiguration: getSDConfiguration,
+ setSdCardMode: setSdCardMode,
+ checkFileExists: checkFileExists,
+ getFileList: getFileList,
+ fileRename: fileRename,
+ getSdMemorySizes: getSdMemorySizes,
+ deleteFilesAndFolders: deleteFilesAndFolders,
+ createFolder: createFolder,
+ setSdCardSharing: setSdCardSharing,
+ setUpdateInfoWarning: setUpdateInfoWarning,
+ getUpdateInfoWarning: getUpdateInfoWarning,
+ getAPStationBasic: getAPStationBasic,
+ setAPStationBasic: setAPStationBasic,
+ getWdsInfo: getWdsInfo,
+ setWDS: setWDS,
+ addUrlFilterRule: addUrlFilterRule,
+ getUrlFilterList: getUrlFilterList,
+ deleteSelectedRules: deleteSelectedRules,
+ getMacFilterInfo: getMacFilterInfo,
+ setMacFilter: setMacFilter,
+ getFastbootSetting: getFastbootSetting,
+ setFastbootSetting: setFastbootSetting,
+ turnOffDevice: turnOffDevice,
+ restart: restart,
+ getScheduleSetting: getScheduleSetting,
+ setScheduleSetting: setScheduleSetting,
+ getCwmpSetting: getCwmpSetting,
+ setCwmpSetting: setCwmpSetting,
+ updateTimerFlag: updateTimerFlag,
+ childGroupList: childGroupList,
+ addChildGroup: addChildGroup,
+ removeChildGroup: removeChildGroup,
+ checkCurrentUserInChildGroup: checkCurrentUserInChildGroup,
+ getTimeLimited: getTimeLimited,
+ saveTimeLimited: saveTimeLimited,
+ getHostNameList: getHostNameList,
+ getHotspotList: getHotspotList,
+ searchHotspot: searchHotspot,
+ getSearchHotspotList: getSearchHotspotList,
+ saveHotspot: saveHotspot,
+ deleteHotspot: deleteHotspot,
+ connectHotspot: connectHotspot,
+ disconnectHotspot: disconnectHotspot,
+ getOpMode: getOpMode,
+ getRj45PlugState: getRj45PlugState,
+ SetOperationMode: SetOperationMode,
+ getPppoeParams: getPppoeParams,
+ setPppoeDialMode: setPppoeDialMode,
+ getTsw: getTsw,
+ saveTsw: saveTsw,
+ trafficCalibration: trafficCalibration,
+ getParams: getParams,
+ getNewVersionState: getNewVersionState,
+ getUpgradeResult: getUpgradeResult,
+ getV4Switch: getV4Switch,
+ setV4Switch: setV4Switch,
+ getCellId: getCellId,
+ setCellIdSwitch: setCellIdSwitch,
+ getDdnsParams: getDdnsParams,
+ setDDNSForward: setDDNSForward,
+ getUpdateType: getUpdateType,
+ getCurretnMAC: getCurretnMAC,
+ getUSSDResponse: getUSSDResponse,
+ USSDReplyCancel: USSDReplyCancel,
+ getNetworkUnlockTimes: getNetworkUnlockTimes,
+ unlockNetwork: unlockNetwork,
+ getSyslogInfo: getSyslogInfo,
+ setSysLog: setSysLog,
+ };
+});
+
+ // Router����
+
+define("adm_lan","jquery knockout set service".split(" "),
+
+ function ($, ko, config, service) {
+
+ var originfrmLan = "";
+
+ // ��ȡ·�����������Ϣ
+ function getLanInfo() {
+ return service.getLanInfo();
+ }
+
+ function hex(val) {
+ var h = (val - 0).toString(16);
+ if (h.length == 1)
+ h = '0' + h;
+ return h.toUpperCase();
+ }
+
+ function LanViewModel() {
+ var target = this;
+
+ var info = getLanInfo();
+
+ target.dhcpStart = ko.observable(info.dhcpStart);
+ target.dhcpEnd = ko.observable(info.dhcpEnd);
+ target.dhcpLease = ko.observable(info.dhcpLease);
+
+ target.ipAddress = ko.observable(info.ipAddress);
+ target.subnetMask = ko.observable(info.subnetMask);
+ target.dhcpServer = ko.observable(info.dhcpServer);
+
+ target.macAddress = ko.observable(info.macAddress);
+ target.showMacAddress = ko.observable(config.SHOW_MAC_ADDRESS);
+
+ target.hasWifi = ko.observable(config.HAS_WIFI);
+ target.hasUssd = config.HAS_USSD;
+ target.hasDdns = config.DDNS_SUPPORT;
+
+ target.hasUpdateCheck = config.HAS_UPDATE_CHECK;
+
+ target.clear = function () {
+ clearTimer();
+ init();
+ clearValidateMsg();
+ };
+
+ target.refreshStatus = function () {
+ var connInfo = service.getConnectionInfo();
+ if (connInfo.connectStatus == 'ppp_disconnected') {
+ $('input', '#frmLan').each(function () {
+ $(this).attr("disabled", false);
+ });
+ } else {
+ $('input', '#frmLan').each(function () {
+ $(this).attr("disabled", true);
+ });
+
+ clearValidateMsg();
+ }
+ };
+
+ // ������Ӧ�������������ñ���
+ target.saveAct = function () {
+ showLoading();
+ var params = {
+ ipAddress: target.ipAddress(),
+ subnetMask: target.subnetMask(),
+ dhcpServer: target.dhcpServer(),
+ dhcpStart: target.dhcpStart(),
+ dhcpEnd: target.dhcpEnd(),
+ dhcpLease: target.dhcpLease()
+ };
+
+ service.setLanInfo(params, function (result) {
+ if (result.result == "success") {
+ successOverlay();
+ target.clear();
+ } else {
+ errorOverlay();
+ }
+ });
+ };
+
+ // ������Ӧ�������������ñ���
+ target.save = function () {
+ var frmLanObj = $('#frmLan').serialize();
+ if (frmLanObj == originfrmLan) {
+ showAlert("setting_no_change");
+ return false;
+ }
+ if (config.RJ45_SUPPORT) {
+ var pppObj = service.getPppoeParams();
+ if (sf_isValidate_StaticIP(pppObj.static_wan_ipaddr, target.ipAddress(), target.subnetMask())) {
+ showAlert("lan_tip_staticip_notsame");
+ return false;
+ }
+ }
+ showConfirm("lan_confirm_reopen", function () {
+ target.saveAct();
+ });
+ };
+
+ target.refreshStatus();
+ // dhcpServer�л���Ӧ����
+ target.dhcpServerHandler = function () {
+ $("#txtIpAddress").parent().find(".error").hide();
+ $("#txtIpAddress").show();
+ return true;
+ };
+ addTimeout(function () {
+ originfrmLan = $('#frmLan').serialize();
+ }, 500);
+ }
+
+
+ function sf_opAnd4Byte(i_v1, i_v2) {
+ var index;
+ var var1 = [];
+ var var2 = [];
+ var result='0x';
+
+ for (index=2,index_tmp=0; index<10; index+=2,index_tmp++) {
+ var1[index_tmp]='0x'+i_v1.substring(index,index+2);
+ var2[index_tmp]='0x'+i_v2.substring(index,index+2);
+ }
+
+ for (index=0; index<4; index++) {
+ result = result + hex(var1[index]&var2[index]);
+ }
+
+ return result - 0;
+ }
+
+ // ������ر���У�����
+ $.validator.addMethod("dhcp_check", function (i_value, i_element, i_parameter) {
+ var dhcpIp = i_parameter == "start" ? $('#txtDhcpIpPoolStart').val() : $('#txtDhcpIpPoolEnd').val();
+ var result = sf_isValidate_Gateway($('#txtIpAddress').val(), $('#txtSubnetMask').val(), dhcpIp);
+ return this.optional(i_element) || result;
+ });
+
+ $.validator.addMethod("dhcpCompare", function (i_value, i_element, i_parameter) {
+ var result;
+ if(i_parameter == "#txtDhcpIpPoolStart") {
+ result = sf_isValidate_StartEndIp($('#txtIpAddress').val(), $('#txtSubnetMask').val(), $(i_parameter).val(), i_value);
+ }
+ else {
+ result = sf_isValidate_StartEndIp($('#txtIpAddress').val(), $('#txtSubnetMask').val(), i_value, $(i_parameter).val());
+ }
+ return result != 1;
+ });
+
+ $.validator.addMethod("ipRange", function (i_value, i_element, i_parameter) {
+ var DHCP_flag = false;
+ if($('#dhcpEnable').is(':checked')){
+ DHCP_flag = true;
+ }
+ var result = sf_isValidate_StartEndIp(i_value, $('#txtSubnetMask').val(), $('#txtDhcpIpPoolStart').val(), $('#txtDhcpIpPoolEnd').val(), DHCP_flag);
+ return result != 2;
+ });
+
+ $.validator.addMethod("subnetmask_check", function (i_value, i_element, i_parameter) {
+ var result = sf_isValidate_Netmask(i_value);
+ return this.optional(i_element) || result;
+ });
+
+
+ // ��̬��ЧIPУ�麯��
+ function sf_isValidate_StaticIP(i_ip, i_lanIp, i_lanMask){
+ if(!i_ip || !i_lanIp || !i_lanMask){//������������
+ return false;
+ }
+
+ //������IP���
+ if (i_ip == i_lanIp) {
+ return true;
+ }
+
+ var res1 = [];
+ var res2 = [];
+
+ var mask_array = [];
+
+ ip_array = i_ip.split(".");
+ lanIp_array = i_lanIp.split(".");
+ mask_array = i_lanMask.split(".");
+ for(var index = 0; index < ip_array.length; index += 1){
+ res1.push(parseInt(mask_array[index]) & parseInt(ip_array[index]));
+ res2.push(parseInt(mask_array[index]) & parseInt(lanIp_array[index]));
+ }
+ if(res2.join(".") != res1.join(".")){//�ڲ�ͬ����
+ return false;
+ }else{//��ͬһ����
+ return true;
+ }
+ }
+
+
+ function sf_isValidate_NetmaskIP(i_ip) {
+ return (i_ip == 255
+ || i_ip == 254
+ || i_ip == 252
+ || i_ip == 248
+ || i_ip == 240
+ || i_ip == 224
+ || i_ip == 192
+ || i_ip == 128
+ || i_ip == 0);
+ }
+
+ function sf_convertIpToString(i_ip)
+ {
+ var s_i1 = i_ip.indexOf('.');
+ var s_i2 = i_ip.indexOf('.', (s_i1 + 1));
+ var s_i3 = i_ip.indexOf('.', (s_i2 + 1));
+ o_ip = hex(i_ip.substring(0, s_i1)) + hex(i_ip.substring((s_i1 + 1), s_i2)) + hex(i_ip.substring((s_i2 + 1), s_i3)) + hex(i_ip.substring((s_i3 + 1), i_ip.length));
+ o_ip = '0x' + o_ip;
+
+ return o_ip;
+ }
+
+ function sf_getIpString_3(i_ip)
+ {
+ var i1 = i_ip.indexOf('.');
+ var i2 = i_ip.indexOf('.', (i1 + 1));
+ var i3 = i_ip.indexOf('.', (i2 + 1));
+ var i4 = i_ip.substring((i3+1),i_ip.length)-0;
+
+ return i4;
+ }
+
+
+ // ����У�麯��
+ function sf_isValidate_Gateway(i_wanIp, i_netmaskIp, i_gatewayIp) {
+ var s_wanIp = sf_convertIpToString(i_wanIp);
+ var lan4 = sf_getIpString_3(i_wanIp);
+
+ var s_netmaskIp = sf_convertIpToString(i_netmaskIp);
+ var mask4 = sf_getIpString_3(i_netmaskIp);
+
+ var s_gatewayIp = sf_convertIpToString(i_gatewayIp);
+ var pool4 = sf_getIpString_3(i_gatewayIp);
+
+ var net_no;
+ var lo_broadcast;
+
+ if (sf_opAnd4Byte(s_wanIp, s_netmaskIp) != sf_opAnd4Byte(s_gatewayIp, s_netmaskIp)) {
+ return false;
+ }
+
+ net_no = (lan4 & mask4);
+ lo_broadcast = (lan4 & mask4) + (255-mask4);
+
+ return !(pool4==net_no || pool4==lo_broadcast);
+
+ }
+
+ // ��������У�麯��
+ function sf_isValidate_Netmask(i_netmask) {
+ var addr = i_netmask.split(".");
+
+ if ("0.0.0.0" == i_netmask || "255.255.255.255" == i_netmask) {
+ return false;
+ }
+
+ if (addr.length != 4) {
+ return false;
+ }
+
+ addr[0] = parseInt(addr[0]);
+ addr[1] = parseInt(addr[1]);
+ addr[2] = parseInt(addr[2]);
+ addr[3] = parseInt(addr[3]);
+
+ if (addr[3] != 0) {
+ if (addr[0] != 255 || addr[1] != 255 || addr[2] != 255) {
+ return false;
+ } else {
+ if (!sf_isValidate_NetmaskIP(addr[3])) {
+ return false;
+ }
+ }
+ }
+
+ if (addr[2] != 0) {
+ if (addr[0] != 255 || addr[1] != 255) {
+ return false;
+ } else {
+ if (!sf_isValidate_NetmaskIP(addr[2])) {
+ return false;
+ }
+ }
+ }
+
+ if (addr[1] != 0) {
+ if (addr[0] != 255) {
+ return false;
+ } else {
+ if (!sf_isValidate_NetmaskIP(addr[1])) {
+ return false;
+ }
+ }
+ }
+
+ if (addr[0] != 255) {
+ return false;
+ }
+
+ return true;
+ }
+
+ // DHCP IP��У�麯��
+ function sf_isValidate_StartEndIp(i_lanIpaddr, i_netIp, i_startIp, i_endIp, i_DHCPFlag) {
+ s_startIp = sf_convertIpToString(i_startIp);
+ s_endIp = sf_convertIpToString(i_endIp);
+ s_lanIp = sf_convertIpToString(i_lanIpaddr);
+
+ if(s_startIp>s_endIp) {
+ return 1;
+ }
+
+ if(s_lanIp >= s_startIp && s_lanIp <= s_endIp) {
+ return 2;
+ }
+
+ return 0;
+ }
+
+
+ function init() {
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ var fwVm = new LanViewModel();
+ ko.applyBindings(fwVm, container[0]);
+
+ addInterval(fwVm.refreshStatus, 1000);
+
+ $('#frmLan').validate({
+ submitHandler:function () {
+ fwVm.save();
+ },
+
+ rules:{
+ txtIpAddress: {
+ lanip_check: true,
+ ipRange: true
+ },
+ txtSubnetMask: {
+ ipv4: true,
+ subnetmask_check: true
+ },
+ txtDhcpIpPoolStart: {
+ lanip_check: true,
+ dhcp_check: "start",
+ dhcpCompare: "#txtDhcpIpPoolEnd"
+ },
+ txtDhcpIpPoolEnd: {
+ lanip_check: true,
+ dhcp_check: "end",
+ dhcpCompare: "#txtDhcpIpPoolStart"
+ },
+ txtDhcpLease: {
+ range: [1, 65535],
+ digits: true
+ }
+ },
+
+ groups: {
+ lanip_check: "txtDhcpIpPoolStart txtDhcpIpPoolEnd"
+ },
+
+ errorPlacement: function (error, element) {
+ if (element.attr("name") == "txtDhcpLease") {
+ error.insertAfter("#errorHolder");
+ } else if (element.attr("name") == "txtDhcpIpPoolStart") {
+ error.insertAfter("#txtDhcpIpPoolEnd");
+ } else {
+ error.insertAfter(element);
+ }
+ }
+ });
+
+ }
+
+
+ return {
+ init:init
+ }
+});
+
+define("tr069","jquery knockout set service".split(" "),
+
+ function ($, ko, config, service) {
+ function Tr069ViewModel() {
+ var target = this;
+ target.hasUssd = config.HAS_USSD;
+ target.hasDdns = config.DDNS_SUPPORT;
+ target.hasUpdateCheck = config.HAS_UPDATE_CHECK;
+
+ var cwmpInfo = service.getCwmpSetting();
+
+ target.cwmp_active = ko.observable(cwmpInfo.cwmpSetting);
+ target.cwmp_acs_server_url = ko.observable(cwmpInfo.acsUrl);
+ target.cwmp_acs_username = ko.observable(cwmpInfo.acsUsername);
+ target.cwmp_acs_password = ko.observable(cwmpInfo.acsPassword);
+ target.cwmp_periodic_inform_active = ko.observable(cwmpInfo.periodicEnabled);
+ target.cwmp_periodic_inform_interval = ko.observable(cwmpInfo.periodicInterval);
+ target.cwmp_conn_request_username = ko.observable(cwmpInfo.cpeUsername);
+ target.cwmp_conn_request_password = ko.observable(cwmpInfo.cpePassword);
+
+ // target.cwmp_stun_active=ko.observable('');
+ // target.cwmp_stun_server_addr=ko.observable('');
+ // target.cwmp_stun_server_port=ko.observable('');
+ // target.cwmp_stun_username=ko.observable('');
+ // target.cwmp_stun_password=ko.observable('');
+ // target.cwmp_stun_min_keep_alive_interval=ko.observable('');
+ // target.cwmp_stun_max_keep_alive_interval=ko.observable('');
+ // target.cwmp_udp_notify_limit_num=ko.observable('');
+ // target.cwmp_udp_conn_req_addr=ko.observable('');
+ // target.cwmp_nat_detected_mark=ko.observable('');
+
+ // target.btn=function(name,id,enableName){
+ // if($('#'+id).is(':checked')){
+ // $("."+name).animate({left: '22px'});
+ // //$('#'+name).css('background-color','#FD8204');
+ // if(enableName==='cwmp_active'){
+ // target.cwmp_active('1')
+ // }
+ // else{
+ // target.cwmp_stun_active("1")
+ // }
+ // }
+ // else{
+ // $("."+name).animate({left: '-1px'});
+ // $('#'+name).css('background-color','white');
+ // if(enableName==='cwmp_active'){
+ // target.cwmp_active('0')
+ // }
+ // else{
+ // target.cwmp_stun_active("0")
+ // }
+ // }
+ // }
+ // ���TR069
+ target.setting= function() {
+ showLoading();
+ var param = {};
+ param.cwmpSetting = target.cwmp_active();
+ param.acsUrl = target.cwmp_acs_server_url();
+ param.acsUsername = target.cwmp_acs_username();
+ param.acsPassword = target.cwmp_acs_password();
+ param.periodicEnabled = target.cwmp_periodic_inform_active();
+ param.periodicInterval =target.cwmp_periodic_inform_interval();
+ param.cpeUsername = target.cwmp_conn_request_username();
+ param.cpePassword = target.cwmp_conn_request_password();
+ service.setCwmpSetting(param, function (result) {
+ if (result.result != "success") {
+ errorOverlay();
+ } else {
+ successOverlay();
+ }
+ });
+ }
+ // ���STUN
+ target.stun=function(){
+ console.log(99999);
+ }
+ }
+
+ function init() {
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ var imVm = new Tr069ViewModel();
+ ko.applyBindings(imVm, container[0]);
+
+ $('#frmTr069').validate({
+ submitHandler:function () {
+ imVm.setting();
+ },
+ rules:{
+ cwmp_acs_server_url: {
+ url_span: false
+ },
+ },
+ });
+ $('#frmTrtun').validate({
+ submitHandler:function () {
+ imVm.stun();
+ },
+ rules:{},
+ });
+ $.validator.addMethod("url_span", validURLWithProtocol);
+ }
+ return {
+ init:init
+ }
+});
+
+// others ����:Fast Boot Settings��Restart and Reset��SNTP��Turn Off Device��PIN Management
+define("adm_others","jquery knockout set service underscore".split(" "),
+
+ function ($, ko, config, service, _) {
+
+ var timeSetModes = _.map(config.sntpTimeSetMode, function(item) {
+ return new Option(item.name, item.value);
+ });
+
+ var timeZones = _.map(config.timeZone, function(item){
+ return new Option(item.name, item.value);
+ });
+
+ var daylightSave = _.map(config.daylightSave, function(item){
+ return new Option(item.name, item.value);
+ });
+
+ var sv_sntpYears = [];
+ var sv_sntpMonths = [];
+ var sv_sntpDates = []; //���ݴ�С����������
+ var sv_sntpHours = [];
+ var sv_sntpMinutes = [];
+ var sc_startpHours = [];
+ var sc_startMinutes = [];
+
+ var sf_bigMonth = [1, 3, 5, 7, 8, 10, 12];
+ var sf_smallMonth = [4, 6, 9, 11];
+
+ function sf_produceArray(start, end, arryName) {
+ var item = {};
+ for(var i = start; i <= end; i++) {
+ item.name = i;
+ item.value = i;
+ arryName.push(new Option(item.name, item.value));
+ }
+ }
+
+ //�����ꡢ�¡�ʱ���ֵ�����
+ sf_produceArray(2000, 2030, sv_sntpYears);
+ sf_produceArray(1, 12, sv_sntpMonths);
+ sf_produceArray(0, 23, sv_sntpHours);
+ sf_produceArray(0, 59, sv_sntpMinutes);
+ sf_produceArray(0, 23, sc_startpHours);
+ sf_produceArray(0, 59, sc_startMinutes);
+
+ function othersViewModel() {
+ var target = this;
+
+ var inChildGroup = false;
+ var scheduleInfo = service.getScheduleSetting();
+
+ target.fastbootSupport = config.FAST_BOOT_SUPPORT;
+ target.turnOffSupport = config.TURN_OFF_SUPPORT;
+ target.SNTPSupport = config.HAS_SNTP;
+ target.hasUssd = config.HAS_USSD;
+ target.hasDdns = config.DDNS_SUPPORT;
+ target.hasUpdateCheck = config.HAS_UPDATE_CHECK;
+ target.scheduleSetting = ko.observable(scheduleInfo.scheduleSetting);
+ target.scheduleHour = ko.observable(parseInt(scheduleInfo.scheduleHour));
+ target.scheduleMinute = ko.observable(parseInt(scheduleInfo.scheduleMinute));
+ target.scr_hours = ko.observableArray(sc_startpHours);
+ target.scr_minutes = ko.observableArray(sc_startMinutes);
+
+
+ if (config.HAS_PARENTAL_CONTROL) {
+ inChildGroup = service.checkCurrentUserInChildGroup().result;
+ }
+ target.currentUserInChildGroup = ko.observable(inChildGroup);
+
+ var sv_fastbootInfo = service.getFastbootSetting();
+ target.fastbootEnableFlag = ko.observable(config.RJ45_SUPPORT ? (sv_fastbootInfo.need_sim_pin != "yes" && service.getRj45PlugState().rj45_plug == "wan_lan_off") : sv_fastbootInfo.need_sim_pin != "yes");
+ target.fastbootSetting = ko.observable(sv_fastbootInfo.fastbootEnabled);
+
+
+ // @method addInterval
+ addInterval(function(){
+ target.fastbootEnableFlag(config.RJ45_SUPPORT ? (sv_fastbootInfo.need_sim_pin != "yes" && service.getRj45PlugState().rj45_plug == "wan_lan_off") : sv_fastbootInfo.need_sim_pin != "yes");
+ }, 1000);
+
+ // �ָ���������
+ // @event restore
+ target.restore = function () {
+ showConfirm("restore_confirm", function () {
+ showLoading("restoring");
+ service.restoreFactorySettings({}, function (info) {
+ if (info && info.result == "success") {
+ successOverlay();
+ } else {
+ errorOverlay();
+ }
+ }, function (result) {
+ if (isErrorObject(result) && result.errorType == 'no_auth') {
+ errorOverlay();
+ }
+ });
+ });
+ };
+
+ target.restart = function () {
+ showConfirm("restart_confirm", function () {
+ restartDevice(service);
+ });
+ };
+
+ target.scheduleRestart = function () {
+ showLoading();
+ var params = {};
+ params.scheduleSetting = target.scheduleSetting();
+ params.scheduleHour = target.scheduleHour();
+ params.scheduleMinute = target.scheduleMinute();
+ service.setScheduleSetting(params, function (result) {
+ if (result.result != "success") {
+ errorOverlay();
+ } else {
+ successOverlay();
+ }
+ });
+ };
+
+ // ���ٿ��ػ�����
+ target.saveFastBoot = function() {
+ showLoading();
+ var params = {
+ fastbootEnabled: target.fastbootSetting(),
+ need_hard_reboot: sv_fastbootInfo.need_hard_reboot
+ };
+ service.setFastbootSetting(params, function(result) {
+ if (result.result == "success") {
+ successOverlay();
+ } else {
+ errorOverlay();
+ }
+ });
+ };
+
+ // �ػ�
+ target.turnoff = function () {
+ showConfirm("turnoff_confirm", function () {
+ showLoading("turnoff");
+ service.turnOffDevice({}, function (info) {
+ if (info && info.result == "success") {
+ successOverlay();
+ } else {
+ errorOverlay();
+ }
+ }, $.noop);
+ });
+ };
+
+ //SNTP����serverУʱ��
+ service.setSNTPDate({
+ goformId: "SNTP_Getdatastatic"
+ });
+
+ var target = this;
+ var sntpInfo = service.getSntpParams();
+
+ globalTime = new Date(parseInt(sntpInfo.sntp_year, 10),parseInt(sntpInfo.sntp_month, 10)-1, parseInt(sntpInfo.sntp_day, 10), parseInt(sntpInfo.sntp_hour, 10), parseInt(sntpInfo.sntp_minute, 10), parseInt(sntpInfo.sntp_second, 10));
+
+ target.day = ko.observable();
+ target.localTime = ko.observable();
+
+ //��ʼ����ǰ����ʱ��
+ //target.updateCurrentTime; cov_2
+ target.timeSetModes = ko.observableArray(timeSetModes);
+ target.isManualSetTime = ko.observable(false);
+ target.isAutoSntpTime = ko.observable(false);
+
+ target.currentMode = ko.observable(sntpInfo.sntp_time_set_mode);
+
+ changeSetTimeMode();
+ target.changeSetTimeMode = function(){
+ changeSetTimeMode();
+ };
+
+ target.currentYear = ko.observable(parseInt(sntpInfo.sntp_year, 10));
+ target.currentMonth = ko.observable(parseInt(sntpInfo.sntp_month, 10));
+ target.currentDate = ko.observable(parseInt(sntpInfo.sntp_day, 10));
+ target.currentHour = ko.observable(parseInt(sntpInfo.sntp_hour, 10));
+ target.currentMinute = ko.observable(parseInt(sntpInfo.sntp_minute, 10));
+
+
+ // ��Ҫ��������ˢ�������б����ݣ�ע��˳��
+
+ target.years = ko.observableArray(sv_sntpYears);
+ target.months = ko.observableArray(sv_sntpMonths);
+ //���û�ѡ���·ݵ�ʱ��ı�����ѡ����ѡ��
+ target.initDateList = function(){
+ initDateList();
+ target.dates(sv_sntpDates);
+ }
+
+ //��ʼ�������б�
+ initDateList();
+ target.dates = ko.observableArray(sv_sntpDates);
+ target.hours = ko.observableArray(sv_sntpHours);
+ target.minutes = ko.observableArray(sv_sntpMinutes);
+
+ //�Զ�SNTP��ȡʱ�����ݰ���
+ var serverArray = _.map(sntpInfo.sntp_servers, function(item) {
+ return new Option(item.name, item.value)
+ });
+
+ target.serverList = ko.observableArray(serverArray);
+
+ // �������ֲ����ģ�����ˢ����ҳ
+
+ target.currentServer0 = ko.observable(sntpInfo.sntp_server0);
+ target.currentServer1 = ko.observable(sntpInfo.sntp_server1);
+ target.currentServer2 = ko.observable(sntpInfo.sntp_server2);
+ target.customServer0 = ko.observable(sntpInfo.sntp_other_server0);
+ target.customServer1 = ko.observable(sntpInfo.sntp_other_server1);
+ target.customServer2 = ko.observable(sntpInfo.sntp_other_server2);
+ target.isOther0 = ko.observable(false);
+ target.isOther1 = ko.observable(false);
+ target.isOther2 = ko.observable(false);
+
+ initOtherServer();
+
+ target.changeServerSelect = function(){
+ initOtherServer();
+ }
+
+ target.timeZones = ko.observableArray(timeZones);
+ target.currentTimeZone = ko.observable(sntpInfo.sntp_timezone + "_" + sntpInfo.sntp_timezone_index);
+ target.daylightSaves = ko.observableArray(daylightSave);
+ target.currentDaylightSave = ko.observable(sntpInfo.sntp_dst_enable);
+
+ //���µ�ǰ��ʾʱ��
+ target.updateCurrentTime = function() {
+ var globalDay = globalTime.getDay();
+
+ switch(globalDay){
+ case 6:
+ target.day($.i18n.prop("saturday"));
+ break;
+ case 5:
+ target.day($.i18n.prop("friday"));
+ break;
+ case 4:
+ target.day($.i18n.prop("thursday"));
+ break;
+ case 3:
+ target.day($.i18n.prop("wednesday"));
+ break;
+ case 2:
+ target.day($.i18n.prop("tuesday"));
+ break;
+ case 1:
+ target.day($.i18n.prop("monday"));
+ break;
+ case 0:
+ target.day($.i18n.prop("sunday"));
+ break;
+ default:
+ break;
+ }
+
+ var localCurrentTime = globalTime.getFullYear() + "-" + getTwoDigit(globalTime.getMonth()+1) + "-" + getTwoDigit(globalTime.getDate()) + " " + getTwoDigit(globalTime.getHours()) + ":" + getTwoDigit(globalTime.getMinutes()) + ":" + getTwoDigit(globalTime.getSeconds());
+ target.localTime(localCurrentTime);
+ globalTime.setTime(globalTime.getTime()+1000);
+ };
+
+ // SNTP����
+ target.apply = function(){
+ var tmpArray = [];
+ for(var i=0; i< sntpInfo.sntp_servers.length; i++){
+ tmpArray.push(sntpInfo.sntp_servers[i].value);
+ }
+ var staInfo = service.getStatusInfo();
+ if(!checkConnectedStatus(staInfo.connectStatus, staInfo.rj45ConnectStatus, staInfo.connectWifiStatus) && target.currentMode() == "auto"){
+ showAlert("sntp_syn_time_wan_connected");
+ return;
+ }
+
+ showLoading("");
+ var requestParams = {
+ goformId: "SNTP",
+ manualsettime : target.currentMode(),
+ sntp_server1_ip : target.currentServer0(),
+ sntp_server2_ip : target.currentServer1(),
+ sntp_server3_ip : target.currentServer2(),
+ sntp_other_server0 : target.customServer0(),
+ sntp_other_server1 : target.customServer1(),
+ sntp_other_server2 : target.customServer2(),
+ timezone : target.currentTimeZone().split("_")[0],
+ sntp_timezone_index : target.currentTimeZone().split("_")[1],
+ DaylightEnabled : target.currentDaylightSave(),
+ time_year : target.currentYear(),
+ time_month : target.currentMonth(),
+ time_day : target.currentDate(),
+ time_hour : target.currentHour(),
+ time_minute : target.currentMinute()
+ };
+
+ service.setSntpSetting(requestParams, function(data2){
+ if(data2) {
+ if(data2.result == "success" && target.currentMode() == "auto"){
+ successOverlay("sntp_req_success");
+ //hideLoading();
+ }else if(data2.result == "processing" && target.currentMode() == "auto"){
+ successOverlay("sntp_processing");
+ }else{
+ //����serverУʱ��
+ service.setSNTPDate({
+ goformId: "SNTP_Getdatastatic"
+ }, function(result){
+ var sntpInfo = service.getSntpParams();
+ globalTime = new Date(parseInt(sntpInfo.sntp_year, 10),parseInt(sntpInfo.sntp_month, 10)-1, parseInt(sntpInfo.sntp_day, 10), parseInt(sntpInfo.sntp_hour, 10), parseInt(sntpInfo.sntp_minute, 10), parseInt(sntpInfo.sntp_second, 10));
+ successOverlay();
+ });
+ }
+ } else {
+ errorOverlay();
+ }
+ });
+ }
+
+ // �ֶ�/�Զ��л���Ӧ����
+ function changeSetTimeMode() {
+ if(target.currentMode() == "manual") {
+ target.isManualSetTime(true);
+ target.isAutoSntpTime(false);
+ } else {
+ target.isManualSetTime(false);
+ target.isAutoSntpTime(true);
+ }
+ return true;
+ }
+
+ // ��ʼ��ʱ��
+ function initDateList(){
+ sv_sntpDates = [];
+ if($.inArray(parseInt(target.currentMonth(), 10), sf_smallMonth) != -1) {
+ sf_produceArray(1, 30, sv_sntpDates);
+ } else if($.inArray(parseInt(target.currentMonth(), 10), sf_bigMonth) != -1) {
+ sf_produceArray(1, 31, sv_sntpDates);
+ } else if(parseInt(target.currentYear(), 10)%4 == 0) {
+ sf_produceArray(1, 29, sv_sntpDates);
+ } else {
+ sf_produceArray(1, 28, sv_sntpDates);
+ }
+ }
+
+ // ��ʼ������������
+ function initOtherServer(){
+ target.isOther0(target.currentServer0() == "Other");
+ target.isOther1(target.currentServer1() == "Other");
+ target.isOther2(target.currentServer2() == "Other");
+ !target.isOther0() && $("#sntp_server0").find(".error").hide();
+ !target.isOther1() && $("#sntp_server1").find(".error").hide();
+ !target.isOther2() && $("#sntp_server2").find(".error").hide();
+ }
+
+
+ }
+
+ // ��ʼ�� ViewModel����������ͼ��
+ function init() {
+ var fwVm = new othersViewModel();
+ var container = $('#container')[0];
+ ko.cleanNode(container);
+ ko.applyBindings(fwVm, container);
+ fwVm.updateCurrentTime();
+
+ addInterval(function(){
+ fwVm.updateCurrentTime();
+ }, 1000);
+
+ $("#sntpForm").validate({
+ submitHandler: function(){
+ fwVm.apply();
+ },
+ rules: {
+ sntp_other_server0 : "sntp_invalid_server_name",
+ sntp_other_server1 : "sntp_invalid_server_name",
+ sntp_other_server2 : "sntp_invalid_server_name"
+ }
+ });
+ }
+
+ return {
+ init:init
+ }
+ });
+// ������� �
+
+define("adm_management","jquery knockout set service underscore CryptoJS".split(" "),
+
+ function ($, ko, config, service, _, CryptoJS) {
+
+ function manageViewModel() {
+ var target = this;
+
+ target.currentValue = ko.observable();
+ target.newValue = ko.observable();
+ target.confirmValue = ko.observable();
+
+ function sf_changeValue() {
+ var sv_manageInfo = {};
+ if (config.PASSWORD_ENCODE) {
+ sv_manageInfo.oldValue = target.currentValue();
+ sv_manageInfo.newValue = target.newValue();
+ } else {
+ var pwdRegex = new RegExp('(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,32}');
+
+ if (!pwdRegex.test(target.newValue())) {
+ showConfirm("password_note_too_low", function () {
+
+ var kparam = service.getDeviceInfoLow();
+ var tkey = CryptoJS.enc.Latin1.parse(kparam.skey);
+ var tiv = CryptoJS.enc.Latin1.parse(kparam.siv);
+ var cipherold = CryptoJS.AES.encrypt(target.currentValue(), tkey, {
+ iv: tiv,
+ mode: CryptoJS.mode.CBC,
+ padding: CryptoJS.pad.ZeroPadding
+ }).toString();
+ var ciphernew = CryptoJS.AES.encrypt(target.newValue(), tkey, {
+ iv: tiv,
+ mode: CryptoJS.mode.CBC,
+ padding: CryptoJS.pad.ZeroPadding
+ }).toString();
+
+ sv_manageInfo.oldValue = cipherold;
+ sv_manageInfo.newValue = ciphernew;
+
+ showLoading();
+
+ service.changeManageInfo(sv_manageInfo, function (resultInfo) {
+ target.cancel();
+ if (resultInfo && resultInfo.result == true) {
+ successOverlay();
+ } else {
+ if (resultInfo && resultInfo.errorType == "badPassword") {
+ hideLoading();
+ showAlert("current_password_error",function(){
+ $("#txtCurrent").focus();
+ });
+ } else {
+ errorOverlay();
+ }
+ }
+ });
+ });
+ return;
+ }
+ var kparam = service.getDeviceInfoLow();
+ var tkey = CryptoJS.enc.Latin1.parse(kparam.skey);
+ var tiv = CryptoJS.enc.Latin1.parse(kparam.siv);
+ var cipherold = CryptoJS.AES.encrypt(target.currentValue(), tkey, {
+ iv: tiv,
+ mode: CryptoJS.mode.CBC,
+ padding: CryptoJS.pad.ZeroPadding
+ }).toString();
+ var ciphernew = CryptoJS.AES.encrypt(target.newValue(), tkey, {
+ iv: tiv,
+ mode: CryptoJS.mode.CBC,
+ padding: CryptoJS.pad.ZeroPadding
+ }).toString();
+
+ sv_manageInfo.oldValue = cipherold;
+ sv_manageInfo.newValue = ciphernew;
+ }
+
+ showLoading();
+
+ service.changeManageInfo(sv_manageInfo, function (resultInfo) {
+ target.cancel();
+ if (resultInfo && resultInfo.result == true) {
+ successOverlay();
+ } else {
+ if (resultInfo && resultInfo.errorType == "badPassword") {
+ hideLoading();
+ showAlert("current_password_error",function(){
+ $("#txtCurrent").focus();
+ });
+ } else {
+ errorOverlay();
+ }
+ }
+ });
+ }
+
+ // ������������
+ function sf_cancel() {
+ target.currentValue("");
+ target.newValue("");
+ target.confirmValue("");
+ }
+
+ target.cancel = sf_cancel;
+
+ // ������
+ target.changeValue = sf_changeValue;
+ }
+
+ function init() {
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ var fwVm = new manageViewModel();
+ ko.applyBindings(fwVm, container[0]);
+
+ $('#frmPassword').validate({
+ submitHandler:function () {
+ fwVm.changeValue();
+ },
+ rules:{
+ txtCurrent:"manage_info_check",
+ txtNew:"manage_info_check",
+ txtConfirm:{ equalTo:"#txtNew"}
+ }
+ });
+ }
+
+ return {
+ init:init
+ }
+ }
+);
+// PIN�����
+
+define("adm_pin","jquery knockout set service".split(" "),
+
+ function ($, ko, config, service) {
+ var pageState = {common:0, requirePin:1, modifyPin:2, requirePuk:3, destroyed:4};
+ var pinStatus = {enable:"1", disable:"0"};
+
+
+ function pinViewModel() {
+ var target = this;
+ var sv_currentPinData = service.getPinData();
+
+ target.isDataCard = config.PRODUCT_TYPE == 'DATACARD';
+ target.originPinStatus = ko.observable(sv_currentPinData.pin_status);
+
+ target.pinStatus = ko.observable(sv_currentPinData.pin_status);
+ target.pinNumber = ko.observable(sv_currentPinData.pinnumber);
+ target.pukNumber = ko.observable(sv_currentPinData.puknumber);
+
+ target.currentPin = ko.observable();
+ target.newPin = ko.observable();
+ target.confirmPin = ko.observable();
+
+ target.puk = ko.observable();
+
+ target.pageState = ko.observable();
+ // ���������ɹ���־λ
+ target.operateSuccessFlag = true;
+
+ target.callback = sf_callback;
+
+ function sf_callback(info) {
+ if (info && info.result == true) {
+ target.operateSuccessFlag = true;
+ successOverlay();
+ } else {
+ target.operateSuccessFlag = false;
+
+ // ���һ��ǰҪ������ʾ
+ if(target.pinNumber() == 2){
+ showAlert("last_enter_pin");
+ } else if(target.pukNumber() == 2){
+ showAlert("last_enter_puk");
+ }
+ else{
+ errorOverlay();
+ }
+ }
+ init(target);
+ }
+
+
+ // ȷ����ť�¼�������������PIN������PUK����PIN������PIN��ʹ��״̬
+
+ function sf_changePin() {
+ if (target.isConnectedNetWork()) {
+ showAlert("cannot_operate_when_connected");
+ return;
+ }
+
+ if (target.pageState() == pageState.common) {
+ return;
+ }
+
+ var sv_pinPara = {
+ oldPin:target.currentPin(),
+ newPin:target.newPin()
+ };
+ showLoading();
+
+ if (target.pageState() == pageState.modifyPin) {
+ service.changePin(sv_pinPara, target.callback);
+ } else if (target.pageState() == pageState.requirePuk) {
+ sv_pinPara = {
+ PinNumber:target.newPin(),
+ PUKNumber:target.puk()
+ };
+ service.enterPUK(sv_pinPara, target.callback);
+ } else {
+ if (target.pinStatus() == pinStatus.enable) {
+ service.enablePin(sv_pinPara, target.callback);
+ } else {
+ service.disablePin(sv_pinPara, target.callback);
+ }
+ }
+ }
+
+
+ // ȡ���¼�����
+ function sf_cancel() {
+ target.pageState(pageState.common);
+ target.pinStatus(target.originPinStatus());
+ target.clear();
+ }
+
+ // ���ҳ������ͼ����Ϣ
+ function sf_clear() {
+ target.confirmPin("");
+ target.currentPin("");
+ target.newPin("");
+ target.puk("");
+ clearValidateMsg();
+ }
+
+ // �������ݣ����õ�ǰ��ҳ��״̬
+ function sf_computePageState(i_pinData) {
+ if (i_pinData.pinnumber > 0) {
+ //�����ɹ�ҳ��ص���ʼ״̬������ʧ�ܲ���pinnumber>0,ҳ�治��ת
+ if (target.operateSuccessFlag) {
+ target.cancel();
+ } else {
+ target.clear();
+ }
+ } else {
+ target.clear();
+ if (i_pinData.puknumber > 0) {
+ target.pageState(pageState.requirePuk);
+ } else {
+ target.pageState(pageState.destroyed);
+ }
+ }
+ }
+
+ // ����PIN��״̬�¼�����
+ function sf_displayModifyPinPage() {
+ if (target.isConnectedNetWork()) {
+ showAlert("cannot_operate_when_connected");
+ return;
+ }
+ target.pinStatus(target.originPinStatus());
+ target.pageState(pageState.modifyPin);
+ target.clear();
+ }
+
+ // ����ҳ��Ԫ�ص�ʹ��״̬
+ function sf_fixPageEnable() {
+ if (target.isConnectedNetWork()) {
+ $('#frmPin :input').each(function () {
+ disableBtn($(this));
+ });
+ clearValidateMsg();
+ } else {
+ $('#frmPin :input').each(function () {
+ if (this.id == "txtPin" || this.id == "btnPinApply") {
+ if (target.pageState() == pageState.common) {
+ disableBtn($(this));
+ return;
+ }
+ }
+ if (this.id == "btnModifyPin") {
+ if (target.originPinStatus() != pinStatus.enable) {
+ disableBtn($(this));
+ return;
+ }
+ }
+ if (this.id == "pinEnable" || this.id == "pinDisable") {
+ if (target.pageState() == pageState.modifyPin) {
+ disableBtn($(this));
+ return;
+ }
+ }
+ enableBtn($(this));
+ });
+
+ }
+ }
+
+ // �Ƿ�������
+ function sf_isConnectedNetWork() {
+ var info = service.getConnectionInfo();
+ return info.connectStatus == "ppp_connected";
+ }
+
+ // PINʹ�ܸı�ʱ�¼�����
+ function sf_pinStatusChangeEvent() {
+ if (target.pinStatus() == target.originPinStatus()) {
+ target.pageState(pageState.common);
+ } else {
+ target.pageState(pageState.requirePin);
+ }
+ target.clear();
+ }
+
+ target.changePin = sf_changePin;
+ target.cancel = sf_cancel;
+ target.clear = sf_clear;
+ target.computePageState = sf_computePageState;
+
+ target.computePageState(sv_currentPinData);
+
+ target.displayModifyPinPage = sf_displayModifyPinPage;
+ target.fixPageEnable = sf_fixPageEnable;
+ target.isConnectedNetWork = sf_isConnectedNetWork;
+
+ target.pinStatusChangeEvent = ko.dependentObservable(sf_pinStatusChangeEvent, this);
+ }
+
+ function init(oldViewModel) {
+
+ var fwVm = oldViewModel;
+
+ if (fwVm) {
+ var sv_currentPinData = service.getPinData();
+ fwVm.originPinStatus(sv_currentPinData.pin_status);
+ fwVm.pinNumber(sv_currentPinData.pinnumber);
+ fwVm.pukNumber(sv_currentPinData.puknumber);
+ fwVm.computePageState(sv_currentPinData);
+ } else {
+ fwVm = new pinViewModel();
+ addInterval(function () {
+ fwVm.fixPageEnable();
+ }, 1000);
+ }
+
+ var container = $('#container')[0];
+ ko.cleanNode(container);
+ ko.applyBindings(fwVm, container);
+ fwVm.fixPageEnable();
+
+ $('#frmPin').validate({
+ submitHandler:function () {
+ fwVm.changePin();
+ },
+ rules:{
+ txtPuk:"puk_check",
+ txtPin:"pin_check",
+ txtNewPin:"pin_check",
+ txtConfirmPin:{equalToPin:"#txtNewPin"}
+ }
+ });
+ }
+
+ return {
+ init:init
+ }
+ }
+);
+
+// ��������
+define("adm_quick_set","jquery knockout set service underscore CryptoJS".split(" "),
+
+ function ($, ko, config, service, _, CryptoJS) {
+
+ var sv_wifiState = {ok:0, wps_on:1, wifi_off:2};
+ var sv_apnMode = {auto:"auto", manual:"manual"};
+ var sv_minStep = 1;
+ var sv_maxStep = 5;
+
+ // ��ȡ��Ȩ��ʽ
+ function sf_fetchAuthenticationModes() {
+ return _.map(config.APN_AUTH_MODES, function (item) {
+ return new Option(item.name, item.value);
+ });
+ }
+
+ // WIFI��ȫģʽѡ��
+ var sv_securityModes = _.map(config.WIFI_WEP_SUPPORT ? config.AUTH_MODES_WEP : config.AUTH_MODES, function (item) {
+ return new Option(item.name, item.value);
+ });
+
+
+ function quickSettingViewModel() {
+ var target = this;
+
+ var sv_quickSettingInfo = service.getQuickSettingInfo();
+
+ target.currentStep = ko.observable(sv_minStep);
+ target.ipType = ko.observable(sv_quickSettingInfo.pdp_type == "IP" ? "IP" : sv_quickSettingInfo.ipv6_pdp_type);
+ target.supportIPv6 = config.IPV6_SUPPORT;
+ target.supportIpv4AndIpv6 = config.IPV4_AND_V6_SUPPORT;
+
+ target.wpsFlag = ko.observable(sv_quickSettingInfo.WscModeOption);
+
+ function sf_apnDisabled() {
+ return (sv_quickSettingInfo.apn_index < config.defaultApnSize || sv_quickSettingInfo.ppp_status == "ppp_connected" || sv_quickSettingInfo.ppp_status == "ppp_connecting");
+ }
+
+ function sf_apnModeDisabled() {
+ return (sv_quickSettingInfo.ppp_status == "ppp_connected" || sv_quickSettingInfo.ppp_status == "ppp_connecting" || (!target.profileName() && target.apnMode() == sv_apnMode.auto));//ѡ��Ϊ�ջ��������ӻ�������
+ }
+
+ function sf_currAPN() {
+ var sv_APNText = sv_quickSettingInfo["APN_configtmp" + sv_quickSettingInfo.apn_index];
+ var strIPv6APN = sv_quickSettingInfo["ipv6_APN_configtmp" + sv_quickSettingInfo.apn_index];
+
+ var sv_apn = [];
+ var sv_ipv6APNItems = [];
+
+ if (sv_APNText) {
+ sv_apn = sv_APNText.split("($)");
+ }
+
+ if (strIPv6APN) {
+ sv_ipv6APNItems = strIPv6APN.split("($)");
+ }
+
+ return {
+ m_profile_name:sv_apn[0],
+ wan_apn:sv_apn[1],
+ ppp_auth_mode: sv_apn[4] == "" || typeof(sv_apn[4]) == "undefined" ? "" : sv_apn[4].toLowerCase(),
+ ppp_username:sv_apn[5],
+ ppp_passtmp:sv_apn[6],
+ pdp_type: sv_apn[7],
+ ipv6_wan_apn:sv_ipv6APNItems[1],
+ ipv6_ppp_auth_mode:typeof(sv_ipv6APNItems[4]) == "undefined" || sv_ipv6APNItems[4] == ""? "" : sv_ipv6APNItems[4].toLowerCase(),
+ ipv6_ppp_username:sv_ipv6APNItems[5],
+ ipv6_ppp_passtmp:sv_ipv6APNItems[6],
+ ipv6_pdp_type:sv_ipv6APNItems[7]
+ }
+ }
+
+ // ��ǰAPN����
+ target.currAPN = ko.computed(sf_currAPN);
+
+ target.apn = ko.observable(target.currAPN().wan_apn);
+ target.ipv6_apn = ko.observable(target.currAPN().ipv6_wan_apn);
+ target.ipv6_selectedAuthMode = ko.observable(target.currAPN().ipv6_ppp_auth_mode);
+ target.ipv6_username = ko.observable(target.currAPN().ipv6_ppp_username);
+ target.ipv6_password = ko.observable(target.currAPN().ipv6_ppp_passtmp);
+ target.profileName = ko.observable(target.currAPN().m_profile_name);
+ target.selectedAuthMode = ko.observable(target.currAPN().ppp_auth_mode);
+ target.username = ko.observable(target.currAPN().ppp_username);
+ target.password = ko.observable(target.currAPN().ppp_passtmp);
+
+ target.transAPN = ko.observable("apn_ipv4_apn");
+ target.transAPNIPv6 = ko.observable("apn_ipv6_apn");
+ target.transAuthMode = ko.observable("apn_authentication_ipv4");
+ target.transAuthModeIPv6 = ko.observable("apn_authentication_ipv6");
+ target.transUserName = ko.observable("apn_user_name_ipv4");
+ target.transPassword = ko.observable("apn_password_ipv4");
+ target.transUserNameIPv6 = ko.observable("apn_user_name_ipv6");
+ target.transPasswordIPv6 = ko.observable("apn_password_ipv6");
+
+
+
+ target.apnDisabled = ko.computed(sf_apnDisabled);
+ target.apnMode = ko.observable(sv_quickSettingInfo.apn_mode);
+ target.apnModeDisabled = ko.computed(sf_apnModeDisabled);
+ target.authModes = ko.observableArray(sf_fetchAuthenticationModes());
+
+ if (target.ipType() == "IPv6") {
+ target.showIPv4 = false;
+ target.showIPv6 = true;
+ target.transAPNIPv6("apn");
+ target.transAuthModeIPv6("apn_authentication");
+ target.transUserNameIPv6("apn_user_name");
+ target.transPasswordIPv6("apn_password");
+ } else if (config.IPV4_AND_V6_SUPPORT && target.ipType() == "IPv4v6") {
+ target.showIPv4 = true;
+ target.showIPv6 = true;
+ //ʹ��Ĭ��
+ } else if (target.ipType() == "IP" || target.ipType() == "IPv4") {
+ target.showIPv4 = true;
+ target.showIPv6 = false;
+ target.transAPN("apn");
+ target.transAuthMode("apn_authentication");
+ target.transUserName("apn_user_name");
+ target.transPassword("apn_password");
+ } else { //pdp_type == "IPv4v6" && config.IPV4V6_SUPPORT
+ target.showIPv4 = true;
+ target.showIPv6 = false;
+ target.transAPN("apn");
+ target.transAuthMode("apn_authentication");
+ target.transUserName("apn_user_name");
+ target.transPassword("apn_password");
+ }
+
+ target.wifiDisabled = (sv_quickSettingInfo.wifi_cur_state != "1");
+ target.ssid = ko.observable(sv_quickSettingInfo.SSID1);
+ target.broadcast = ko.observable(sv_quickSettingInfo.HideSSID);
+ target.hasWifiWep = config.WIFI_WEP_SUPPORT;
+ target.hasWifiWpa3 = config.WIFI_WAP3_SUPPORT;
+ target.hasWifiWpa23 = config.WIFI_WPA2_WAP3_SUPPORT;
+
+ target.securityModes = ko.observableArray(sv_securityModes);
+ target.selectedSecurityMode = ko.observable(sv_quickSettingInfo.AuthMode);
+ target.WPAKey = ko.observable(sv_quickSettingInfo.WPAPSK1);
+
+ target.apnMode_display = ko.observable("");
+
+ target.apnMode_trans = ko.computed(sf_apnMode_trans);
+ target.selectedAuthMode_display = ko.computed(sf_selectedAuthMode_display);
+ target.ipv6_selectedAuthMode_display = ko.computed(sf_ipv6_selectedAuthMode_display);
+
+ target.showWifiPassword = ko.observable(false);
+ target.showWifiPasswordHandler = sf_showWifiPasswordHandler;
+
+ //�ж��Ƿ���802 n only��
+ var sv_adInfo = service.getWifiAdvance();
+ target.adBand = ko.observable(sv_adInfo.wifiBand);
+ target.adMode = ko.observable(sv_adInfo.mode);
+
+ target.encryptType = ko.observable(sv_quickSettingInfo.EncrypType);
+ target.keyID = ko.observable(sv_quickSettingInfo.DefaultKeyID);
+ target.wepPassword = ko.observable("");
+
+ target.getWepPassword = sf_getWepPassword;
+ target.wepPassword(target.getWepPassword());
+ target.profileChangeHandler = sf_profileChangeHandler;
+
+ target.broadcast_display = ko.observable("");
+ target.broadcast_trans = ko.computed(sf_broadcast_trans);
+
+ target.selectedSecurityMode_display = ko.observable();
+ target.selectedSecurityMode_trans = ko.computed(sf_selectedSecurityMode_trans);
+
+
+ target.callback = sf_callback;
+ target.next = sf_button_next;
+ target.previous = sf_button_previous;
+ target.save = sf_button_save;
+
+ function sf_apnMode_trans() {
+ if (sv_apnMode.auto == target.apnMode()) {
+ target.apnMode_display($.i18n.prop("apn_auto_apn"));
+ return "apn_auto_apn";
+ } else {
+ target.apnMode_display($.i18n.prop("apn_manual_apn"));
+ return "apn_manual_apn";
+ }
+ }
+
+ function sf_broadcast_trans() {
+ if ("0" == target.broadcast()) {
+ target.broadcast_display($.i18n.prop("enable"));
+ return "enable";
+ } else {
+ target.broadcast_display($.i18n.prop("disable"));
+ return "disable";
+ }
+ }
+
+ function sf_button_next() {
+ var currentStep = target.currentStep();
+ var toStep = target.currentStep() + 1;
+ sf_changeStep(toStep);
+
+ if (currentStep == 1 && target.apnMode() == sv_apnMode.auto) {
+ toStep = target.currentStep() + 1;
+ sf_changeStep(toStep);
+ }
+ }
+
+ function sf_button_previous() {
+
+ var currentStep = target.currentStep();
+ var toStep = target.currentStep() - 1;
+
+ sf_changeStep(toStep);
+
+ if (currentStep == 3 && target.apnMode() == sv_apnMode.auto) {
+ toStep = target.currentStep() - 1;
+ sf_changeStep(toStep);
+ }
+ }
+ function sf_button_save() {
+ var submit = function () {
+ sf_quickSetting4IPv6();
+ };
+ var result = sf_isDisabled_Wifi();
+ if(result == sv_wifiState.wifi_off){
+ showConfirm("quick_setting_wifi_disable_confirm", submit);
+ } else if (result == sv_wifiState.wps_on) {
+ showAlert("wps_on_info");
+ } else{
+ showConfirm("quick_setting_param_changed_confirm", submit);//submit();
+ }
+ }
+ // ���������ύ��Ļص�����
+ function sf_callback(data) {
+ if (data.result == "success") {
+ successOverlay();
+ location.hash = "#network_choose";
+ }
+ else {
+ errorOverlay();
+ }
+ }
+
+ // �任����ʱ����
+ function sf_changeStep(i_step) {
+ if (i_step > sv_maxStep) {
+ i_step = sv_maxStep;
+ } else if (i_step < sv_minStep) {
+ i_step = sv_minStep;
+ }
+
+ target.currentStep(i_step);
+ return true;
+ }
+
+ function sf_ipv6_selectedAuthMode_display() {
+ var mode = target.ipv6_selectedAuthMode();
+ return sf_getAuthModeNameByValue(mode);
+ }
+ // ���ݼ�Ȩģʽ��ֵ��������
+ function sf_getAuthModeNameByValue(authMode) {
+ for (var i = 0; i < config.APN_AUTH_MODES.length; i++) {
+ if (authMode == config.APN_AUTH_MODES[i].value) {
+ return config.APN_AUTH_MODES[i].name;
+ }
+ }
+ }
+
+ function sf_getWepPassword(){
+ return target.keyID() == '3' ? sv_quickSettingInfo.Key4Str1 : (target.keyID() == '2' ? sv_quickSettingInfo.Key3Str1 : target.keyID() == '1' ? sv_quickSettingInfo.Key2Str1 : sv_quickSettingInfo.Key1Str1);
+ }
+
+ function sf_isDisabled_Wifi() {
+ var s_wpsInfo = service.getWpsInfo();
+ if(s_wpsInfo.radioFlag == "0"){
+ return sv_wifiState.wifi_off;
+ }else if (s_wpsInfo.wpsFlag == '1') {
+ return sv_wifiState.wps_on;
+ }
+ return sv_wifiState.ok;
+ }
+ function sf_profileChangeHandler(i_data, i_event) {
+ $("#pwdWepKey").parent().find("label[class='error']").hide();
+ target.wepPassword(target.getWepPassword());
+ return true;
+ }
+
+ // ���������ύ(֧��IPv6��
+ function sf_quickSetting4IPv6() {
+ showLoading();
+ var useIPv4ForV6 = config.IPV4V6_SUPPORT && target.currAPN().pdp_type == "IPv4v6";
+
+ var ciphertext = "";
+ if (config.PASSWORD_ENCODE) {
+ ciphertext = target.WPAKey();
+ } else {
+ var kparam = service.getDeviceInfoLow();
+ var tkey = CryptoJS.enc.Latin1.parse(kparam.skey);
+ var tiv = CryptoJS.enc.Latin1.parse(kparam.siv);
+ ciphertext = CryptoJS.AES.encrypt(target.WPAKey(), tkey, {
+ iv: tiv,
+ mode: CryptoJS.mode.CBC,
+ padding: CryptoJS.pad.ZeroPadding
+ }).toString();
+ }
+
+ var s_quickSettingParameters = {
+ apn_index: sv_quickSettingInfo.apn_index,
+ apnMode: target.apnMode(),
+ Encryption_Mode_hid: target.selectedSecurityMode(),
+ ipv6_ppp_auth_mode: useIPv4ForV6 ? target.selectedAuthMode() : target.ipv6_selectedAuthMode(),
+ ipv6_ppp_username: useIPv4ForV6 ? target.username() : target.ipv6_username(),
+ ipv6_ppp_passtmp: useIPv4ForV6 ? target.password() : target.ipv6_password(),
+ ipv6_wan_apn: useIPv4ForV6 ? target.apn() : target.ipv6_apn(),
+ pdp_type: target.ipType(),
+ ppp_auth_mode: target.selectedAuthMode(),
+ ppp_username: target.username(),
+ ppp_passtmp: target.password(),
+ profile_name: target.profileName(),
+ //Ŀǰ����ģʽֻ��2�֣�����3������Ϊ�̶�ֵ
+ //�����Ҫ����Ϊ5�֣�����ֵ��Ҫ����
+ security_shared_mode: "NONE",
+ SSID_Broadcast: target.broadcast(),
+ SSID_name: target.ssid(),
+ wan_apn: target.apn(),
+ wep_default_key: 0,
+ WPA_ENCRYPTION_hid: target.selectedSecurityMode() == "OPEN" ? "NONE" : target.selectedSecurityMode() == "WPA2PSK" ? 1 : 2,
+ WPA_PreShared_Key: ciphertext
+ }
+
+ s_quickSettingParameters.wep_default_key = target.keyID();
+
+ if(target.encryptType() == "SHARED" || target.selectedSecurityMode() == "WEP") {
+
+ s_quickSettingParameters.security_shared_mode = "WEP";
+
+ s_quickSettingParameters.wep_key_1 = sv_quickSettingInfo.Key1Str1;
+ s_quickSettingParameters.wep_key_2 = sv_quickSettingInfo.Key2Str1;
+ s_quickSettingParameters.wep_key_3 = sv_quickSettingInfo.Key3Str1;
+ s_quickSettingParameters.wep_key_4 = sv_quickSettingInfo.Key4Str1;
+
+ var WEPSelectTmp = '0';
+
+ if(target.wepPassword().length =='5' ||target.wepPassword().length =='13'){
+ WEPSelectTmp = '1';
+ }else{
+ WEPSelectTmp = '0';
+ }
+
+ if(target.keyID() =='3'){
+ s_quickSettingParameters.wep_key_4 = target.wepPassword();
+ s_quickSettingParameters.WEP4Select = WEPSelectTmp;
+ }else if(target.keyID() =='2'){
+ s_quickSettingParameters.wep_key_3 = target.wepPassword();
+ s_quickSettingParameters.WEP3Select = WEPSelectTmp;
+ }else if(target.keyID() =='1'){
+ s_quickSettingParameters.wep_key_2 = target.wepPassword();
+ s_quickSettingParameters.WEP2Select = WEPSelectTmp;
+ }else{
+ s_quickSettingParameters.wep_key_1 = target.wepPassword();
+ s_quickSettingParameters.WEP1Select = WEPSelectTmp;
+ }
+ }else if(target.encryptType() == "WPAPSKWPA2PSK") {
+ s_quickSettingParameters.security_shared_mode = "NONE";
+ }else {
+ s_quickSettingParameters.security_shared_mode = "NONE";
+ }
+
+ service.setQuickSetting4IPv6(s_quickSettingParameters, target.callback);
+ }
+
+ function sf_selectedAuthMode_display() {
+ var mode = target.selectedAuthMode();
+ return sf_getAuthModeNameByValue(mode);
+ }
+
+ function sf_selectedSecurityMode_trans() {
+ var mode = target.selectedSecurityMode();
+ var modesOption = config.WIFI_WEP_SUPPORT ? config.AUTH_MODES_WEP : config.AUTH_MODES;
+ for (var i = 0; i < modesOption.length; i++) {
+ if (mode == modesOption[i].value) {
+ target.selectedSecurityMode_display($.i18n.prop("security_mode_" + modesOption[i].value));
+ return "security_mode_" + modesOption[i].value;
+ }
+ }
+ }
+
+ function sf_showWifiPasswordHandler(){
+ $("#pwdWepKey").parent().find(".error").hide();
+ $("#codeWPAKey").parent().find(".error").hide();
+ var checkbox = $("#showWifiPassword:checked");
+ if(checkbox && checkbox.length == 0){
+ target.showWifiPassword(true);
+ }else{
+ target.showWifiPassword(false);
+ }
+ }
+
+ }
+
+ function init() {
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ var fwVm = new quickSettingViewModel();
+ ko.applyBindings(fwVm, container[0]);
+
+ $('#quickSettingForm').validate({
+ submitHandler:function () {
+ if (fwVm.currentStep() < 5) {
+ fwVm.next();
+ } else {
+ fwVm.save();
+ }
+ },
+ rules:{
+ txtAPN:"apn_check",
+ txtIPv6APN:"apn_check",
+ txtSSID:'ssid',
+ pwdWepKey:{wifi_wep_password_check:true,wifi_password_check: true},
+ txtWepKey:{wifi_wep_password_check:true,wifi_password_check: true},
+ txtWPAKey:'wifi_password_check',
+ codeWPAKey:'wifi_password_check',
+ txtUserName:'ppp_username_check',
+ txtIPv6UserName:'ppp_username_check',
+ txtSecretCode:"ppp_secretcode_check",
+ txtIPv6SecretCode:"ppp_secretcode_check"
+ },
+ errorPlacement:function (error, element) {
+ var id = element.attr("id");
+ if (id == "pwdWepKey" || id == "txtWepKey"){
+ error.insertAfter("#lblShowWepPassword");
+ } else if (id == "txtWPAKey" || id == "codeWPAKey") {
+ error.insertAfter("#lblShowWifiPassword");
+ } else {
+ error.insertAfter(element);
+ }
+ }
+ });
+ }
+
+ return {
+ init:init
+ };
+ }
+);
+
+define("main","set service knockout underscore jquery statusBar echarts".split(" "), function (set, fnc, libko, libus, libjq, barStat, echarts) {
+
+ var chartOptions = {
+ color: ['red', 'red', 'red', 'red', 'red'],
+ series: [{
+ name: '��������',
+ type: 'pie',
+ radius: ['0', '72'],
+ itemStyle: {
+ normal: {
+ label: {
+ show: false
+ },
+ labelLine: {
+ show: false
+ }
+ }
+ },
+ data: [],
+ selectedOffset: 3
+ }
+ ],
+ animation: false,
+ title: {
+ text: '',
+ x: 'center',
+ y: 'center',
+ itemGap: 0,
+ textStyle: {
+ color: '#FFF',
+ fontFamily: '���ź�',
+ fontSize: 20,
+ fontWeight: 'bolder'
+ },
+ subtextStyle: {
+ color: '#FFF',
+ fontFamily: '���ź�',
+ fontSize: 16,
+ fontWeight: 'bolder'
+ }
+ },
+ tooltip: {
+ formatter: "{b}"
+ },
+ };
+ var languageOld = window.language;
+ var num_refresh = 0;
+ var traffic_graphic_chart = null;
+ var connStat = {
+ CONNECTED: 1,
+ DISCONNECTED: 2,
+ CONNECTING: 3,
+ DISCONNECTING: 4
+ };
+ function init() {
+ num_refresh = 0;
+ homeUtil.oldUsedData = null;
+ homeUtil.oldAlarmData = null;
+ traffic_graphic_chart = echarts.init(libjq("#traffic_graphic")[0]);
+ var container = libjq('#container')[0];
+ libko.cleanNode(container);
+ var tmp = new VmHome();
+ libko.applyBindings(tmp, container);
+ var data = fnc.getLoginData();
+ var psw_flg = data.psw_changed;
+ if (psw_flg != "1") {
+ showConfirm("password_note_first_change", function () {
+ window.location.hash = '#pwd_mode';
+ });
+ return;
+ }
+ }
+
+ var homeUtil = {
+ initStatus: null,
+ initShownStatus: function (data) {
+ this.initStatus = {};
+ var ipv6Mode = data.ipv6PdpType.toLowerCase().indexOf("v6") > 0;
+ if (set.RJ45_SUPPORT) {
+ var mode = checkCableMode(data.blc_wan_mode);
+ if (mode) {
+ this.initStatus.showIpv6WanIpAddr = false;
+ this.initStatus.showIpv4WanIpAddr = true;
+ } else if (set.IPV6_SUPPORT) {
+ if (data.pdpType == "IP") {
+ this.initStatus.showIpv6WanIpAddr = false;
+ this.initStatus.showIpv4WanIpAddr = true;
+ } else if (ipv6Mode) {
+ if (data.ipv6PdpType == "IPv6") {
+ this.initStatus.showIpv6WanIpAddr = true;
+ this.initStatus.showIpv4WanIpAddr = false;
+ } else {
+ this.initStatus.showIpv6WanIpAddr = true;
+ this.initStatus.showIpv4WanIpAddr = true;
+ }
+ }
+ } else {
+ this.initStatus.showIpv6WanIpAddr = false;
+ this.initStatus.showIpv4WanIpAddr = true;
+ }
+ } else {
+ if (set.IPV6_SUPPORT) {
+ if (data.pdpType == "IP") {
+ this.initStatus.showIpv6WanIpAddr = false;
+ this.initStatus.showIpv4WanIpAddr = true;
+ } else if (ipv6Mode) {
+ if (data.ipv6PdpType == "IPv6") {
+ this.initStatus.showIpv6WanIpAddr = true;
+ this.initStatus.showIpv4WanIpAddr = false;
+ } else {
+ this.initStatus.showIpv6WanIpAddr = true;
+ this.initStatus.showIpv4WanIpAddr = true;
+ }
+ }
+ } else {
+ this.initStatus.showIpv6WanIpAddr = false;
+ this.initStatus.showIpv4WanIpAddr = true;
+ }
+ }
+ },
+ wanIpGet: function (data) {
+ var addrInfo = {
+ wanIpAddress: '',
+ ipv6WanIpAddress: ''
+ };
+ addrInfo.wanIpAddress = verifyDeviceInfo(data.wanIpAddress);
+ addrInfo.ipv6WanIpAddress = verifyDeviceInfo(data.ipv6WanIpAddress);
+ return addrInfo;
+ },
+ cachedAPStationBasic: null,
+ cachedConnectionMode: null,
+ getCanConnectNetWork: function (param) {
+ var status = fnc.getStatusInfo();
+ if (status.simStatus != "modem_init_complete") {
+ return false;
+ }
+ var typeNetworkTmp = status.networkType.toLowerCase();
+ if (typeNetworkTmp == 'searching') {
+ return false;
+ }
+ if (typeNetworkTmp == '' || typeNetworkTmp == 'limited service') {
+ typeNetworkTmp = 'limited_service';
+ }
+ if (typeNetworkTmp == 'no service') {
+ typeNetworkTmp = 'no_service';
+ }
+ if (typeNetworkTmp == 'limited_service' || typeNetworkTmp == 'no_service') {
+ if (param.cStatus() != connStat.CONNECTED) {
+ return false;
+ }
+ }
+ if (set.AP_STATION_SUPPORT) {
+ if (status.connectWifiStatus == "connect") {
+ if (status.ap_station_mode == "wifi_pref") {
+ return false;
+ }
+ }
+ }
+ return true;
+ },
+ doConnect: function () {
+ showLoading('connecting');
+ fnc.connect({}, function (data) {
+ if (data.result) {
+ successOverlay();
+ } else {
+ errorOverlay();
+ }
+ });
+ },
+ refreshHomeData: function (param) {
+ var info = fnc.getConnectionInfo();
+ param.connectStatus(info.connectStatus);
+ param.canConnect(this.getCanConnectNetWork(param));
+ param.networkType(homeUtil.getNetworkType(info.networkType));
+ if (info.connectStatus == "ppp_connected") {
+ param.current_Flux(transUnit(parseInt(info.data_counter.currentReceived, 10) + parseInt(info.data_counter.currentSent, 10), false));
+ param.connected_Time(transSecond2Time(info.data_counter.currentConnectedTime));
+ param.up_Speed(transUnit(info.data_counter.uploadRate, true));
+ param.down_Speed(transUnit(info.data_counter.downloadRate, true));
+ } else {
+ param.current_Flux(transUnit(0, false));
+ param.connected_Time(transSecond2Time(0));
+ param.up_Speed(transUnit(0, true));
+ param.down_Speed(transUnit(0, true));
+ }
+ param.trafficAlertEnable(info.limitVolumeEnable);
+ if (info.limitVolumeEnable) {
+ if (info.limitVolumeType == '1') {
+ param.trafficUsed(transUnit(parseInt(info.data_counter.monthlySent, 10) + parseInt(info.data_counter.monthlyReceived, 10), false));
+ param.trafficLimited(transUnit(info.limitDataMonth, false));
+ } else {
+ param.trafficUsed(transSecond2Time(info.data_counter.monthlyConnectedTime));
+ param.trafficLimited(transSecond2Time(info.limitTimeMonth));
+ }
+ }
+ if (languageOld != window.language) {
+ languageOld = window.language;
+ num_refresh = 1;
+ }
+ if (param.showTraffic()) {
+ homeUtil.updateEcharts(info);
+ } else {
+ homeUtil.allFreeEcharts();
+ }
+ homeUtil.refreshStationInfo(param);
+ },
+ allFreeEcharts: function () {
+ var usedData = homeUtil.data.free;
+ usedData.value = 1;
+ usedData.selected = false;
+ usedData.name = libjq.i18n.prop("echarts_no");
+ chartOptions.series[0].data = [usedData];
+ chartOptions.title.text = '';
+ homeUtil.setEcharts(chartOptions, libjq.i18n.prop("echarts_no"));
+ },
+ getNetworkType: function (networkType) {
+ var typeNetworkTmp = networkType.toLowerCase();
+ if (typeNetworkTmp == '' || typeNetworkTmp == 'limited service') {
+ typeNetworkTmp = 'limited_service';
+ }
+ if (typeNetworkTmp == 'no service') {
+ typeNetworkTmp = 'no_service';
+ }
+ if (typeNetworkTmp == 'limited_service' || typeNetworkTmp == 'no_service') {
+ return libjq.i18n.prop("network_type_" + typeNetworkTmp);
+ } else {
+ return networkType;
+ }
+ },
+ data: {
+ full: {
+ value: 30,
+ name: '��������',
+ itemStyle: {
+ normal: {
+ color: '#DF4313'
+ }
+ }
+ },
+ used: {
+ value: 30,
+ name: '��ʹ��',
+ itemStyle: {
+ normal: {
+ color: '#8CC916'
+ }
+ }
+ },
+ left1: {
+ value: 50,
+ name: '����ֵ��δʹ��',
+ itemStyle: {
+ normal: {
+ color: '#D8D8D8'
+ }
+ }
+ },
+ free: {
+ value: 50,
+ name: 'δʹ��',
+ itemStyle: {
+ normal: {
+ color: '#D8D8D8'
+ }
+ }
+ },
+ alert: {
+ value: 1,
+ name: '����ֵ',
+ itemStyle: {
+ normal: {
+ color: '#FF5500'
+ }
+ }
+ },
+ alarm: {
+ value: 19.7,
+ name: '������',
+ itemStyle: {
+ normal: {
+ color: '#8CC916'
+ }
+ }
+ },
+ start: {
+ value: 50,
+ name: '����ֵ��δʹ��',
+ itemStyle: {
+ normal: {
+ color: '#D8D8D8'
+ }
+ }
+ },
+ },
+ getDataInfo: function (value) {
+ return {
+ data: /\d+(.\d+)?/.exec(value)[0],
+ unit: /[A-Z]{1,2}/.exec(value)[0]
+ }
+ },
+ oldAlarmData: null,
+ oldUsedData: null,
+ updateEcharts: function (info) {
+ var startName = libjq.i18n.prop("echarts_no");
+ num_refresh++;
+ if (num_refresh % 10 != 2) {
+ return false;
+ }
+ var total = 0,
+ used = 0,
+ reach = 0,
+ left = 0,
+ alarm = 0,
+ left1 = 0;
+ if (info.limitVolumeEnable) {
+ startName = libjq.i18n.prop("echarts_used");
+ chartOptions.series[0].data = [];
+ if (info.limitVolumeType == '1') {
+ var limitedDataFormatted = transUnit(info.limitDataMonth, false);
+ chartOptions.series[0].data = [];
+ if (info.limitDataMonth == 0) {
+ var usedData = homeUtil.data.used;
+ usedData.value = 1;
+ usedData.selected = false;
+ usedData.name = libjq.i18n.prop("echarts_used");
+ chartOptions.series[0].data.push(usedData);
+ } else {
+ var dataInfo = homeUtil.getDataInfo(limitedDataFormatted);
+ total = dataInfo.data * homeUtil.getUnitValue(dataInfo.unit) * 1048576;
+ used = parseInt(info.data_counter.monthlySent, 10) + parseInt(info.data_counter.monthlyReceived, 10);
+ reach = total * info.limitVolumePercent / 100;
+ if (used >= total) {
+ var fullData = homeUtil.data.full;
+ fullData.value = 100;
+ fullData.name = libjq.i18n.prop("echarts_full");
+ chartOptions.series[0].data.push(fullData);
+ startName = libjq.i18n.prop("echarts_full");
+ } else {
+ if (reach - used > 0) {
+ left1 = reach - used;
+ left = total - reach;
+ } else {
+ alarm = used - reach;
+ left = total - used;
+ }
+ var usedData = homeUtil.data.used;
+ if (reach - used > 0) {
+ usedData.value = used;
+ } else {
+ usedData.value = reach;
+ }
+ usedData.name = libjq.i18n.prop("echarts_used");
+ chartOptions.series[0].data.push(usedData);
+ if (left1 > 0) {
+ var left1Data = homeUtil.data.left1;
+ left1Data.value = left1;
+ left1Data.name = libjq.i18n.prop("echarts_left1");
+ chartOptions.series[0].data.push(left1Data);
+ }
+ var alertData = homeUtil.data.alert;
+ alertData.value = total / 200;
+ alertData.name = libjq.i18n.prop("echarts_alert");
+ chartOptions.series[0].data.push(alertData);
+ if (alarm > 0) {
+ var alarmData = homeUtil.data.alarm;
+ alarmData.value = alarm;
+ alarmData.name = libjq.i18n.prop("echarts_alarm");
+ chartOptions.series[0].data.push(alarmData);
+ }
+ var freeData = homeUtil.data.free;
+ freeData.value = left;
+ freeData.name = libjq.i18n.prop("echarts_free");
+ chartOptions.series[0].data.push(freeData);
+ }
+ }
+ } else {
+ chartOptions.series[0].data = [];
+ if (info.limitTimeMonth == 0) {
+ var usedData = homeUtil.data.used;
+ usedData.value = 1;
+ usedData.selected = false;
+ usedData.name = libjq.i18n.prop("echarts_used");
+ chartOptions.series[0].data.push(usedData);
+ } else {
+ total = info.limitTimeMonth;
+ used = info.data_counter.monthlyConnectedTime;
+ reach = total * info.limitVolumePercent / 100;
+ if (used >= total) {
+ var fullTime = homeUtil.data.full;
+ fullTime.value = 100;
+ fullTime.name = libjq.i18n.prop("echarts_full");
+ chartOptions.series[0].data.push(fullTime);
+ startName = libjq.i18n.prop("echarts_full");
+ } else {
+ if (reach - used > 0) {
+ left1 = reach - used;
+ left = total - reach;
+ } else {
+ alarm = used - reach;
+ left = total - used;
+ }
+ var usedTime = homeUtil.data.used;
+ if (reach - used > 0) {
+ usedTime.value = used;
+ } else {
+ usedTime.value = reach;
+ }
+ usedTime.name = libjq.i18n.prop("echarts_used");
+ chartOptions.series[0].data.push(usedTime);
+ if (left1 > 0) {
+ var left1Time = homeUtil.data.left1;
+ left1Time.value = left1;
+ left1Time.name = libjq.i18n.prop("echarts_left1");
+ chartOptions.series[0].data.push(left1Time);
+ }
+ var alertTime = homeUtil.data.alert;
+ alertTime.value = total / 200;
+ alertTime.name = libjq.i18n.prop("echarts_alert");
+ chartOptions.series[0].data.push(alertTime);
+ if (alarm > 0) {
+ var alarmTime = homeUtil.data.alarm;
+ alarmTime.value = alarm;
+ alarmTime.name = libjq.i18n.prop("echarts_alarm");
+ chartOptions.series[0].data.push(alarmTime);
+ }
+ var freeTime = homeUtil.data.free;
+ freeTime.value = left;
+ freeTime.name = libjq.i18n.prop("echarts_free");
+ chartOptions.series[0].data.push(freeTime);
+ }
+ }
+ }
+ } else {
+ var usedData = homeUtil.data.used;
+ usedData.value = 1;
+ usedData.selected = false;
+ usedData.name = libjq.i18n.prop("echarts_no");
+ chartOptions.series[0].data = [usedData];
+ chartOptions.title.text = '';
+ }
+ var firstEle = libus.find(chartOptions.series[0].data, function (n) {
+ return n.name == libjq.i18n.prop("echarts_used");
+ });
+ var alarmEle = libus.find(chartOptions.series[0].data, function (n) {
+ return n.name == libjq.i18n.prop("echarts_alarm");
+ });
+ if (!alarmEle) {
+ alarmEle = {
+ value: 0
+ };
+ }
+ if (typeof firstEle == "undefined") {
+ homeUtil.setEcharts(chartOptions, startName);
+ } else if (homeUtil.oldUsedData != firstEle.value || homeUtil.oldAlarmData != alarmEle.value) {
+ homeUtil.oldUsedData = firstEle.value;
+ homeUtil.oldAlarmData = alarmEle.value;
+ homeUtil.setEcharts(chartOptions, startName);
+ }
+ },
+ getUnitValue: function (unit) {
+ unit = unit.toUpperCase();
+ if (unit == 'GB') {
+ return '1024';
+ } else if (unit == 'TB') {
+ return '1048576';
+ } else {
+ return '1';
+ }
+ },
+ setEcharts: function (options, startName) {
+ var startPart = homeUtil.data.start;
+ startPart.value = 0;
+ startPart.name = startName;
+ startPart.selected = false;
+ var arr = [startPart].concat(options.series[0].data);
+ options.series[0].data = arr;
+ traffic_graphic_chart.setOption(options, true);
+ addTimeout(function () {
+ traffic_graphic_chart.resize();
+ }, 1000);
+ },
+ refreshStationInfo: function (param) {
+ param.wirelessDeviceNum(fnc.getStatusInfo().wirelessDeviceNum);
+ if (num_refresh % 10 == 2) {
+ fnc.getAttachedCableDevices({}, function (data) {
+ param.wireDeviceNum(data.attachedDevices.length);
+ });
+ }
+ },
+ getUnit: function (val) {
+ if (val == '1024') {
+ return 'GB';
+ } else if (val == '1048576') {
+ return 'TB';
+ } else {
+ return 'MB';
+ }
+ },
+ refreshOpmodeInfo: function (param) {
+ var obj = fnc.getOpMode();
+ param.isLoggedIn(obj.loginfo == "ok");
+ var currentMode = checkCableMode(obj.blc_wan_mode);
+ if (param.opCurMode() && !currentMode) {
+ var data = fnc.getLoginData();
+ var state = data.modem_main_state;
+ if (state == "modem_sim_undetected" || state == "modem_undetected" || state == "modem_sim_destroy" || state == "modem_waitpin" || state == "modem_waitpuk" || state == "modem_imsi_waitnck") {
+ window.location.reload();
+ return;
+ }
+ }
+ param.opCurMode(currentMode);
+ if (currentMode && obj.ethwan_mode == "DHCP") {
+ param.enableFlag(false);
+ } else if ((!currentMode && obj.ppp_status != "ppp_disconnected") || (currentMode && obj.rj45_state != "idle" && obj.rj45_state != "dead")) {
+ param.enableFlag(true);
+ } else {
+ param.enableFlag(false);
+ }
+ var mode = (obj.blc_wan_mode == "AUTO_PPP" || obj.blc_wan_mode == "AUTO_PPPOE") ? "AUTO" : obj.blc_wan_mode;
+ var currentOpMode = "";
+ switch (mode) {
+ case "AUTO":
+ currentOpMode = "opmode_auto";
+ break;
+ case "PPPOE":
+ currentOpMode = "opmode_cable";
+ break;
+ case "PPP":
+ currentOpMode = "opmode_gateway";
+ break;
+ default:
+ break;
+ }
+ libjq("#opmode").attr("data-trans", currentOpMode).text(libjq.i18n.prop(currentOpMode));
+ param.isShowHomeConnect(!currentMode);
+ param.showTraffic(set.TRAFFIC_SUPPORT && !currentMode);
+ param.isSupportQuicksetting(set.HAS_QUICK_SETTING && !currentMode);
+ }
+ };
+ function VmHome() {
+ var target = this;
+ target.hasSms = set.HAS_SMS;
+ target.hasPhonebook = set.HAS_PHONEBOOK;
+ target.isSupportSD = set.SD_CARD_SUPPORT;
+ target.isCPE = set.PRODUCT_TYPE == 'CPE';
+ target.hasRj45 = set.RJ45_SUPPORT;
+ target.notDataCard = set.PRODUCT_TYPE != 'DATACARD';
+ target.hasParentalControl = set.HAS_PARENTAL_CONTROL;
+ var wifiInfo = fnc.getWifiBasic();
+ if (set.WIFI_SUPPORT_QR_SWITCH) {
+ target.showQRCode = set.WIFI_SUPPORT_QR_CODE && wifiInfo.show_qrcode_flag;
+ } else {
+ target.showQRCode = set.WIFI_SUPPORT_QR_CODE;
+ }
+ if(set.WIFI_SUPPORT_QR_CODE){
+ target.qrcodeSrc = './pic/qrcode_ssid_wifikey.png?_=' + libjq.now();
+ } else {
+ target.qrcodeSrc = './pic/res_blacktrans.png';
+ }
+ if (target.hasRj45) {
+ var opModeObj = checkCableMode(fnc.getOpMode().blc_wan_mode);
+ target.opCurMode = libko.observable(opModeObj);
+ target.isShowHomeConnect = libko.observable(!opModeObj);
+ target.showTraffic = libko.observable(set.TRAFFIC_SUPPORT && !opModeObj);
+ target.isSupportQuicksetting = libko.observable(set.HAS_QUICK_SETTING && !opModeObj);
+ } else {
+ target.isShowHomeConnect = libko.observable(true);
+ target.showTraffic = libko.observable(set.TRAFFIC_SUPPORT);
+ target.isSupportQuicksetting = libko.observable(set.HAS_QUICK_SETTING);
+ }
+ if (set.PRODUCT_TYPE == 'DATACARD') {
+ libjq('#home_image').addClass('data-card');
+ }
+ var info = fnc.getConnectionInfo();
+ target.networkType = libko.observable(homeUtil.getNetworkType(info.networkType));
+ target.connectStatus = libko.observable(info.connectStatus);
+ target.canConnect = libko.observable(false);
+ target.cStatus = libko.computed(function () {
+ if (target.connectStatus().indexOf('_connected') != -1) {
+ return connStat.CONNECTED;
+ } else if (target.connectStatus().indexOf('_disconnecting') != -1) {
+ return connStat.DISCONNECTING;
+ } else if (target.connectStatus().indexOf('_connecting') != -1) {
+ return connStat.CONNECTING;
+ } else {
+ return connStat.DISCONNECTED;
+ }
+ });
+ target.current_Flux = libko.observable(transUnit(0, false));
+ target.connected_Time = libko.observable(transSecond2Time(0));
+ target.up_Speed = libko.observable(transUnit(0, true));
+ target.down_Speed = libko.observable(transUnit(0, true));
+ target.isLoggedIn = libko.observable(false);
+ target.enableFlag = libko.observable(true);
+ target.simSerialNumber = libko.observable('');
+ target.imei = libko.observable('');
+ target.imsi = libko.observable('');
+ target.ssid = libko.observable('');
+ target.hasWifi = set.HAS_WIFI;
+ target.showMultiSsid = libko.observable(set.HAS_MULTI_SSID && wifiInfo.multi_ssid_enable == "1");
+ target.trafficAlertEnable = libko.observable(false);
+ target.trafficUsed = libko.observable('');
+ target.trafficLimited = libko.observable('');
+ target.wireDeviceNum = libko.observable(fnc.getAttachedCableDevices().attachedDevices.length);
+ target.wirelessDeviceNum = libko.observable(fnc.getStatusInfo().wirelessDeviceNum);
+ target.showOpModeWindow = function () {
+ if (target.enableFlag()) {
+ return;
+ }
+ showSettingWindow("change_mode", "opmode_popup", "opmode_popup", 400, 300, function () {});
+ };
+ target.currentOpMode = libko.observable("0");
+ var popoverShown = false;
+ libjq('#showDetailInfo').popover({
+ html: true,
+ placement: 'top',
+ trigger: 'focus',
+ title: function () {
+ return libjq.i18n.prop('device_info')
+ },
+ content: function () {
+ return getDetailInfoContent();
+ }
+ }).on('shown.bs.popover', function () {
+ popoverShown = true;
+ }).on('hidden.bs.popover', function () {
+ popoverShown = false;
+ });
+ function fetchDeviceInfo() {
+ var data = fnc.getDeviceInfo();
+ target.simSerialNumber(verifyDeviceInfo(data.simSerialNumber));
+ target.imei(verifyDeviceInfo(data.imei));
+ target.imsi(verifyDeviceInfo(data.imsi));
+ target.ssid(verifyDeviceInfo(data.ssid));
+ target.showMultiSsid(set.HAS_MULTI_SSID && data.multi_ssid_enable == "1");
+ return data;
+ }
+ fetchDeviceInfo();
+ function getDetailInfoContent() {
+ var data = fetchDeviceInfo();
+ homeUtil.initShownStatus(data);
+ var addrInfo = homeUtil.wanIpGet(data);
+ var compiled = libus.template(libjq("#detailInfoTmpl").html());
+ var tmpl = compiled({
+ simSerialNumber: verifyDeviceInfo(data.simSerialNumber),
+ imei: verifyDeviceInfo(data.imei),
+ imsi: verifyDeviceInfo(data.imsi),
+ signal: signalFormat(data.signal),
+ hasWifi: set.HAS_WIFI,
+ isCPE: set.PRODUCT_TYPE == 'CPE',
+ hasRj45: set.RJ45_SUPPORT,
+ showMultiSsid: set.HAS_MULTI_SSID && data.multi_ssid_enable == "1",
+ ssid: verifyDeviceInfo(data.ssid),
+ max_access_num: verifyDeviceInfo(data.max_access_num),
+ m_ssid: verifyDeviceInfo(data.m_ssid),
+ m_max_access_num: verifyDeviceInfo(data.m_max_access_num),
+ wifi_long_mode: "wifi_des_" + data.wifiRange,
+ lanDomain: verifyDeviceInfo(data.lanDomain),
+ ipAddress: verifyDeviceInfo(data.ipAddress),
+ showMacAddress: set.SHOW_MAC_ADDRESS,
+ macAddress: verifyDeviceInfo(data.macAddress),
+ showIpv4WanIpAddr: homeUtil.initStatus.showIpv4WanIpAddr,
+ wanIpAddress: addrInfo.wanIpAddress,
+ showIpv6WanIpAddr: homeUtil.initStatus.showIpv6WanIpAddr,
+ ipv6WanIpAddress: addrInfo.ipv6WanIpAddress,
+ sw_version: verifyDeviceInfo(data.sw_version),
+ hw_version: verifyDeviceInfo(data.hw_version)
+ });
+ return libjq(tmpl).translate();
+ }
+ target.connectHandler = function () {
+ if (target.connectStatus() == "ppp_connected") {
+ showLoading('disconnecting');
+ fnc.disconnect({}, function (data) {
+ if (data.result) {
+ successOverlay();
+ } else {
+ errorOverlay();
+ }
+ });
+ } else {
+ if (fnc.getStatusInfo().roamingStatus) {
+ showConfirm('dial_roaming_connect', function () {
+ target.connect();
+ });
+ } else {
+ target.connect();
+ }
+ }
+ };
+ target.connect = function () {
+ var statusInfo = fnc.getStatusInfo();
+ var trafficResult = barStat.getTrafficResult(statusInfo);
+ if (statusInfo.limitVolumeEnable && trafficResult.showConfirm) {
+ var confirmMsg = null;
+ if (trafficResult.usedPercent > 100) {
+ confirmMsg = {
+ msg: 'traffic_beyond_connect_msg'
+ };
+ barStat.setTrafficAlertPopuped(true);
+ } else {
+ confirmMsg = {
+ msg: 'traffic_limit_connect_msg',
+ params: [trafficResult.limitPercent]
+ };
+ barStat.setTrafficAlert100Popuped(false);
+ }
+ showConfirm(confirmMsg, function () {
+ homeUtil.doConnect();
+ });
+ } else {
+ homeUtil.doConnect();
+ }
+ };
+ fnc.getSignalStrength({}, function (data) {
+ var signalTxt = signalFormat(convertSignal(data));
+ libjq("#fresh_signal_strength").text(signalTxt);
+ if (popoverShown) {
+ libjq("#popoverSignalTxt").text(signalTxt);
+ }
+ });
+ homeUtil.refreshHomeData(target);
+ addInterval(function () {
+ fnc.getSignalStrength({}, function (data) {
+ var signalTxt = signalFormat(convertSignal(data));
+ libjq("#fresh_signal_strength").text(signalTxt);
+ if (popoverShown) {
+ libjq("#popoverSignalTxt").text(signalTxt);
+ }
+ });
+ homeUtil.refreshHomeData(target);
+ }, 1000);
+ if (target.hasRj45) {
+ homeUtil.refreshOpmodeInfo(target);
+ addInterval(function () {
+ homeUtil.refreshOpmodeInfo(target);
+ }, 1000);
+ }
+ target.showNetworkSettingsWindow = function () {
+ if (target.hasRj45) {
+ fnc.getOpMode({}, function (data) {
+ var mode = checkCableMode(data.blc_wan_mode);
+ if (mode) {
+ window.location.hash = '#network_set';
+ } else {
+ window.location.hash = '#conn_set';
+ }
+ });
+ } else {
+ window.location.hash = '#conn_set';
+ }
+ }
+ };
+ return {
+ init: init
+ };
+});
+
+
+define("language","knockout service jquery set underscore".split(" "),
+ function(ko, service, $, config, _) {
+
+ // ��ȡ��ǰ������
+ function getCurrentLanguage() {
+ return service.getLanguage();
+ }
+
+ // �������������������Դ������ҳ���ϵ�body����
+ // @param {String} current ������:zh-cn
+ function loadLanguageAndRefresh(current){
+ window.CURRENT_LANGUAGE = current;
+ $("body").attr('lang', current);
+ $.i18n.properties({
+ name:'Messages',
+ path:'i18n/',
+ mode:'map',
+ cache: true,
+ language:current,
+ callback: function() {
+ jQuery.validator.messages = $.i18n.map;
+ $('body').translate();
+ }
+ });
+ }
+
+ window.language = null;
+
+
+ function LanguageViewModel() {
+ var target = this;
+ var currentLan = getCurrentLanguage();
+ var languages = _.map(config.LANGUAGES, function(item) {
+ return new Option(item.name, item.value);
+ });
+
+ document.title = config.WEBUI_TITLE;
+ if($('#webui_title')[0]) {
+ $('#webui_title').html(config.WEBUI_TITLE);
+ }
+
+ target.languages = ko.observableArray(languages);
+ target.currentLan = ko.observable(currentLan.Language);
+ window.language = target.currentLan();
+
+ // �л������¼�����
+ // @event langChangeHandler
+ target.langChangeHandler = function(info, event) {
+ clearValidateMsg();
+
+ service.setLanguage({Language: target.currentLan()}, function() {
+ loadLanguageAndRefresh(target.currentLan());
+ window.language = target.currentLan();
+ });
+ };
+
+ // ���������б���ˢ�½���
+ loadLanguageAndRefresh(target.currentLan());
+ }
+
+ // ��ʼ������VM����
+ function init() {
+ ko.applyBindings(new LanguageViewModel(), $('#language')[0]);
+ }
+
+ return {
+ init: init
+ };
+});
+
+
+// ��½ ģ��
+define("entry","jquery knockout set service underscore menu logout CryptoJS".split(" "),
+ function($, ko,config, service, _, menu, logout, CryptoJS) {
+
+
+ var pageState = {LOGIN:0, WAIT_PIN:1, WAIT_PUK:2, PUK_LOCKED:3, LOGGEDIN:4, LOADING:5};
+ var timer = loginStatusCheckingTimer();
+ var loginLockTimer = 0;
+ var lastLoginStatus = "0";
+
+ function loginViewModel() {
+ var target = this;
+ var data = service.getLoginData();
+ var loginStatus = service.getLoginStatus();
+
+ target.confirmPIN = ko.observable();
+ target.leftSeconds = ko.observable(0);
+ target.loginCount = ko.observable(0);
+ target.loginSecuritySupport = ko.observable(config.LOGIN_SECURITY_SUPPORT);
+ target.newPIN = ko.observable();
+ target.password = ko.observable();
+ target.PIN = ko.observable();
+ target.pinNumber = ko.observable(data.pinnumber);
+ target.PUK = ko.observable();
+ target.pukNumber = ko.observable(data.puknumber);
+ target.showEntrance = ko.observable(false);
+ target.sharePathInvalid = ko.observable(false);
+ target.uiLoginTimer = ko.observable(300);
+
+ // ע��˳����ǰ�����ˢ�³�����
+ target.accountLocked = ko.computed(function () {
+ return target.loginCount() == config.MAX_LOGIN_COUNT && target.leftSeconds() != '-1';
+ });
+
+ target.leftUnlockTime = ko.computed(function () {
+ target.leftSeconds();
+ var formatted = transSecond2Time(target.uiLoginTimer());
+ return formatted.substring(formatted.indexOf(':') + 1, formatted.length);
+ });
+
+
+ if(config.SD_CARD_SUPPORT){
+ service.getSDConfiguration({}, function (data) {
+ target.showEntrance(data.sd_status == "1" && data.share_status == "1" && data.sd_mode == "0");
+ if(target.showEntrance()){
+ service.checkFileExists({
+ path: data.share_file
+ }, function (data1) {
+ if (data1.status == 'exist' || data1.status == 'processing') {
+ target.sharePathInvalid(false);
+ } else {
+ target.sharePathInvalid(true);
+ }
+ });
+ }
+ });
+ }
+
+ var state = computePageState(loginStatus, data);
+ target.pageState = ko.observable(state);
+ if (state == pageState.LOADING) {
+ addTimeout(refreshPage, 500);
+ }
+ setFocus();
+
+
+ // login �¼�����
+
+ target.login = function () {
+ if(config.LOGIN_SECURITY_SUPPORT && target.accountLocked()){
+ showAlert("password_error_account_lock_time", function () {
+ setFocus();
+ });
+ return false;
+ }
+ target.pageState(pageState.LOADING);
+ window.clearInterval(timer);
+ var ciphertext = "";
+ if (config.PASSWORD_ENCODE) {
+ ciphertext = target.password();
+ } else {
+ var kparam = service.getDeviceInfoLow();
+ var tkey = CryptoJS.enc.Latin1.parse(kparam.skey);
+ var tiv = CryptoJS.enc.Latin1.parse(kparam.siv);
+ ciphertext = CryptoJS.AES.encrypt(target.password(), tkey, {
+ iv: tiv,
+ mode: CryptoJS.mode.CBC,
+ padding: CryptoJS.pad.ZeroPadding
+ }).toString();
+ }
+ service.login({
+ password:ciphertext
+ }, function (info) {
+ setTimeout(function () {
+ timer = loginStatusCheckingTimer();
+ }, 1300);
+ if (info.result) {
+ target.pageState(pageState.LOGGEDIN);
+ if(config.LOGIN_SECURITY_SUPPORT){
+ target.loginCount(0);
+ target.uiLoginTimer(300);
+ clearInterval(loginLockTimer);
+ }
+ $("#container").empty();
+ window.location.hash = "#main";
+ logout.init();
+ } else {
+ target.password("");
+ if(config.LOGIN_SECURITY_SUPPORT){
+ target.checkLoginData(function(){
+ if (target.loginCount() == config.MAX_LOGIN_COUNT) {
+ showAlert("password_error_five_times", function () {
+ setFocus();
+ });
+ target.startLoginLockInterval();
+ } else {
+ showAlert({msg: 'password_error_left', params: [config.MAX_LOGIN_COUNT - target.loginCount()]}, function () {
+ setFocus();
+ });
+ }
+ });
+ }else {
+ showAlert("password_error", function () {
+ setFocus();
+ });
+ }
+ target.pageState(pageState.LOGIN);
+ }
+ });
+ };
+
+
+
+
+ // ��ȡ��¼�����Ϣ
+ target.checkLoginData = function(cb){
+ service.getLoginData({}, function(r){
+ var failTimes = parseInt(r.psw_fail_num_str, 10);
+ target.loginCount(config.MAX_LOGIN_COUNT - failTimes);
+ target.leftSeconds(r.login_lock_time);
+ target.uiLoginTimer(r.login_lock_time);
+ if($.isFunction(cb)){
+ cb();
+ } else if (target.loginCount() == config.MAX_LOGIN_COUNT) {
+ target.startLoginLockInterval();
+ }
+ });
+ };
+
+ // ��������ʱ��ʱ����
+ target.startLoginLockInterval = function () {
+ loginLockTimer = setInterval(function () {
+ service.getLoginData({}, function (data) {
+ if (data.login_lock_time <= 0 || data.psw_fail_num_str == 5) {
+ target.loginCount(0);
+ clearInterval(loginLockTimer);
+ }
+ if(target.leftSeconds() != data.login_lock_time){
+ target.leftSeconds(data.login_lock_time);
+ target.uiLoginTimer(data.login_lock_time);
+ } else {
+ target.uiLoginTimer(target.uiLoginTimer() > 0 ? target.uiLoginTimer() - 1 : 0);
+ }
+ });
+ }, 1000);
+ };
+
+ target.checkLoginData();
+
+
+
+ // ��֤����PIN�¼�����
+ target.enterPIN = function () {
+ target.pageState(pageState.LOADING);
+ var pin = target.PIN();
+ service.enterPIN({
+ PinNumber:pin
+ }, function (data) {
+ if (!data.result) {
+ showAlert("pin_error", function () {
+ refreshPage();
+ });
+ target.PIN('');
+ } else {
+ refreshPage();
+ }
+ });
+ };
+
+ function setFocus(){
+ setTimeout(function () {
+ var txtAdmin = $('#txtAdmin:visible');
+ var txtPIN = $('#txtPIN:visible');
+ var txtPUK = $('#txtPUK:visible');
+ if (txtAdmin.length > 0) {
+ txtAdmin.focus();
+ } else if (txtPIN.length > 0) {
+ txtPIN.focus();
+ } else if (txtPUK.length > 0) {
+ txtPUK.focus();
+ }
+ }, 100);
+ }
+
+
+ // ˢ��ҳ��״̬
+ function refreshPage() {
+ var data = service.getLoginData();
+ var loginStatus = service.getLoginStatus();
+ var state = computePageState(loginStatus, data);
+ if (state == pageState.LOADING) {
+ addTimeout(refreshPage, 500);
+ } else {
+ target.pageState(state);
+ target.pinNumber(data.pinnumber);
+ target.pukNumber(data.puknumber);
+ }
+ setFocus();
+ }
+
+ // ����PUK������PIN�¼�����
+ target.enterPUK = function () {
+ target.pageState(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) {
+ showAlert("puk_error", function () {
+ refreshPage();
+ });
+ target.PUK('');
+ target.newPIN('');
+ target.confirmPIN('');
+ } else {
+ refreshPage();
+ }
+ });
+ };
+
+
+
+ // ���ݵ�¼״̬��SIM��״̬����ҳ��״̬
+ function checkPinAfterLogin(loginStatus, data) {
+ if (loginStatus.status == "loggedIn") {
+ var currentState = data.modem_main_state; // cov_2
+ if (currentState == "modem_waitpin") {
+ return pageState.WAIT_PIN;
+ } else if ((currentState == "modem_waitpuk" || data.pinnumber == 0) && (data.puknumber != 0)) {
+ return pageState.WAIT_PUK;
+ } else if ((data.puknumber == 0 || currentState == "modem_sim_destroy")
+ && currentState != "modem_sim_undetected" && currentState != "modem_undetected") {
+ return pageState.PUK_LOCKED;
+ } else {
+ return pageState.LOGGEDIN;
+ }
+ } else {
+ var currentState = data.modem_main_state;
+ if ($.inArray(currentState, config.TEMPORARY_MODEM_MAIN_STATE) != -1) {
+ return pageState.LOADING;
+ } else {
+ return pageState.LOGIN;
+ }
+ }
+ }
+
+ // ���ݵ�¼״̬��SIM��״̬����ҳ��״̬
+ function computePageState(loginStatus, data) {
+ //PX-880 �ȵ�¼�ٽ���PIN��֤������router���ԭ��¼��PIN��֤���ڵ�¼ҳ����У������ݿ�����֤����һ�¡�
+ if (config.LOGIN_THEN_CHECK_PIN) {
+ return checkPinAfterLogin(loginStatus, data);
+ } else {
+ return loginAfterCheckPin(loginStatus, data);
+ }
+ }
+
+ // ���ݵ�¼״̬��SIM��״̬����ҳ��״̬
+ function loginAfterCheckPin(loginStatus, data) {
+ if (loginStatus.status == "loggedIn") {
+ return pageState.LOGGEDIN;
+ } else {
+ var currentState = data.modem_main_state;
+ if ($.inArray(currentState, config.TEMPORARY_MODEM_MAIN_STATE) != -1) {
+ return pageState.LOADING;
+ } else if (currentState == "modem_waitpin") {
+ return pageState.WAIT_PIN;
+ } else if ((currentState == "modem_waitpuk" || parseInt(data.pinnumber) === 0) && (parseInt(data.puknumber) != 0)) {
+ return pageState.WAIT_PUK;
+ } else if ((parseInt(data.puknumber) === 0 || currentState == "modem_sim_destroy") && currentState != "modem_sim_undetected" && currentState != "modem_undetected") {
+ return pageState.PUK_LOCKED;
+ } else {
+ return pageState.LOGIN;
+ }
+ }
+ }
+ }
+
+
+ // ��鵱ǰwindow.location.hash���쳣����ת��index.html
+ function gotoLogin() {
+ if (window.location.hash != config.defaultRoute && _.indexOf(config.GUEST_HASH, window.location.hash) == -1) {
+ if (!manualLogout && lastLoginStatus == "1") {
+ manualLogout = false;
+ lastLoginStatus = 'UNREAL';
+ showAlert('need_login_again', function () {
+ window.location = "index.html";
+ });
+ } else if (lastLoginStatus == 'UNREAL') {
+ //do nothing, only popup need_login_again alert one time
+ return;
+ } else {
+ window.location = "index.html";
+ }
+ }
+ }
+
+ // ��ʱ����¼״̬
+ function loginStatusCheckingTimer() {
+ return setInterval(function () {
+ var info = service.getStatusInfo();
+ if (!info.isLoggedIn) {
+ gotoLogin();
+ return;
+ }
+ lastLoginStatus = service.getStatusInfo().isLoggedIn ? "1" : "0";
+ }, 1000);
+ }
+
+ function init() {
+ var info = service.getStatusInfo();
+ if (info.isLoggedIn) {
+ window.location.hash = '#main';
+ return;
+ }
+
+ var container = $('#container')[0];
+ ko.cleanNode(container);
+ var fwVm = new loginViewModel();
+ ko.applyBindings(fwVm, container);
+
+ $('#frmLogin').validate({
+ submitHandler:function () {
+ fwVm.login();
+ },
+ rules: {
+ txtAdmin: 'login_password_length_check'
+ }
+ });
+ $('#frmPIN').validate({
+ submitHandler:function () {
+ fwVm.enterPIN();
+ },
+ rules:{
+ txtPIN:"pin_check"
+ }
+ });
+ $('#frmPUK').validate({
+ submitHandler:function () {
+ fwVm.enterPUK();
+ },
+ rules:{
+ txtNewPIN:"pin_check",
+ txtConfirmPIN:{equalToPin:"#txtNewPIN"},
+ txtPUK:"puk_check"
+ }
+ });
+ }
+
+
+ return {
+ init:init,
+ gotoLogin:gotoLogin
+ };
+ });
+
+
+// Logout �
+define("logout","set service knockout underscore jquery".split(" "),
+ function (config, service, ko, _, $) {
+
+ function logoutViewModel() {
+ var target = this;
+ // ��ȡ�Ƿ��¼
+ var loginFlag = function () {
+ var loginInfo = service.getLoginStatus();
+ return (loginInfo.status == "loggedIn");
+ }
+ ();
+ target.loggedIn = ko.observable(loginFlag);
+
+ // �˳�ϵͳ
+ target.logout = function () {
+ showConfirm("confirm_logout", function () {
+ manualLogout = true;
+ service.logout({}, setLocation());
+ });
+ };
+
+ // �Ƿ���ʾ�˳���ť
+ target.showLogout = function () {
+ if (config.HAS_LOGIN) {
+ return target.loggedIn();
+ } else {
+ return false;
+ }
+ };
+ }
+ function setLocation() {
+ window.location = 'index.html';
+ }
+ function initialize() {
+ var fwVm = new logoutViewModel();
+ bindContainer(fwVm);
+ }
+ function bindContainer(fwVm) {
+ var con = $('#logout')[0];
+ ko.cleanNode(con);
+ ko.applyBindings(fwVm, con);
+ }
+ return {
+ init: initialize
+ };
+});
+
+// operation mode �
+define("opmode","knockout service jquery set underscore".split(" "),
+
+ function (ko, service, $, config, _) {
+
+ function currentOperationModeViewMode(){
+ var target = this;
+ target.isLoggedIn = ko.observable(false);
+ target.enableFlag = ko.observable(false);
+
+ target.showOpModeWindow = function () {
+ showSettingWindow("change_mode", "opmode_popup", "opmode_popup", 400, 300, function () {
+ });
+ };
+ target.currentOpMode = ko.observable("0");
+
+ service.getOpMode({}, function(info){
+ target.isLoggedIn(info.loginfo == "ok");
+ if (info.opms_wan_mode != "PPP" && info.rj45_state != "idle" && info.rj45_state != "dead") {
+ target.enableFlag(false);
+ } else if (info.opms_wan_mode == "PPP" && info.ppp_status != "ppp_disconnected") {
+ target.enableFlag(false);
+ } else if(info.opms_wan_mode == "DHCP"){
+ target.enableFlag(true);
+ } else {
+ target.enableFlag(true);
+ }
+
+ var opmsWanMode = (info.opms_wan_mode == "DHCP" || info.opms_wan_mode == "STATIC") ? "PPPOE" : info.opms_wan_mode;
+
+ var currentOperationMode = "";
+ switch(opmsWanMode){
+ case "BRIDGE":
+ currentOperationMode = "opmode_bridge";
+ break;
+ case "PPP":
+ currentOperationMode = "opmode_gateway";
+ break;
+ case "PPPOE":
+ currentOperationMode = "opmode_cable";
+ break;
+ default:
+ break;
+ }
+ $("#opmode").attr("data-trans", currentOperationMode).text($.i18n.prop(currentOperationMode));
+ });
+ // ��ʱ��ѯ����ģʽ���״̬�����ý���״̬
+ setInterval(function(){
+ var object = service.getConnectionInfo();
+ if(object.opms_wan_mode == "DHCP") {
+ target.enableFlag(true);
+ } else if((object.opms_wan_mode == "PPP" && object.ppp_status != "ppp_disconnected") || (object.opms_wan_mode != "PPP" && object.rj45_state != "idle" && object.rj45_state != "dead")) {
+ target.enableFlag(false);
+ } else {
+ target.enableFlag(true);
+ }
+ }, 1000);
+ }
+
+ function init() {
+ var container = $('#currentOpMode')[0];
+ ko.cleanNode(container);
+ var fwVm = new currentOperationModeViewMode();
+ ko.applyBindings(fwVm, container);
+ }
+
+ return {
+ init:init
+ };
+});
+
+// operation mode popup�
+
+define("opmode_popup","knockout service jquery set underscore".split(" "),
+
+ function (ko, service, $, config, _) {
+
+ function operationModeViewMode() {
+ var target = this;
+ var currentSelectedOperationMode = "";
+ target.selectedMode = ko.observable("0");
+
+ // ��ʼ������ģʽ��ʾ
+ service.getOpMode({}, function(info){
+ if(info.blc_wan_mode == "AUTO_PPP"){
+ currentSelectedOperationMode = "AUTO";
+ }else if(info.blc_wan_mode == "AUTO_PPPOE"){
+ currentSelectedOperationMode = "AUTO";
+ }else if(info.blc_wan_mode == "PPPOE"){
+ currentSelectedOperationMode = "PPPOE";
+ }else{
+ currentSelectedOperationMode = info.blc_wan_mode;
+ }
+ target.selectedMode(currentSelectedOperationMode);
+ });
+
+ // ģʽ����/�л�
+ target.changeOpMode = function(){
+ var userSelectedOperationMode = $('input:radio[name="opMode"]:checked').val();
+ var messageText = "";
+ if(userSelectedOperationMode == currentSelectedOperationMode) {
+ hidePopupSettingWindow();
+ return;
+ }
+ if(userSelectedOperationMode == "LTE_BRIDGE"){
+ messageText = "opmode_msg3";
+ }else{
+ messageText = "opmode_msg2";
+ }
+ showConfirm(messageText, function(){
+ showLoading();
+ service.SetOperationMode({
+ opMode: userSelectedOperationMode
+ },function(info){
+ if (info && info.result == "success") {
+ var currentOperationMode = "";
+ switch(userSelectedOperationMode){
+ case "AUTO":
+ currentOperationMode = "opmode_auto"
+ break;
+ case "PPP":
+ currentOperationMode = "opmode_gateway";
+ break;
+ case "PPPOE":
+ currentOperationMode = "opmode_cable";
+ break;
+ default:
+ break;
+ }
+ $("#opmode").attr("data-trans", currentOperationMode).text($.i18n.prop(currentOperationMode));
+ successOverlay();
+ } else {
+ errorOverlay();
+ }
+ });
+ });
+
+ }
+
+ }
+
+ function init() {
+ var fwVm = new operationModeViewMode();
+ ko.applyBindings(fwVm, $('#popupSettingWindow')[0]);
+
+ $("#opmode_form").validate({
+ submitHandler: function(){
+ fwVm.changeOpMode();
+ }
+ });
+ }
+
+ return {
+ init:init
+ };
+});
+
+define("router","underscore jquery menu set service".split(" "),
+ function (_, $, menu, config, service) {
+ var currentHash = '';
+ var container = $('#container');
+
+ //�뿪����ʱ����Ƿ��������ģ����������ʾ
+ checkFormContentModify = function (href) {
+ if (config.CONTENT_MODIFIED.modified && window.location.hash != href) {
+ 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 {
+ return true;
+ }
+ };
+
+ //��ʱ�鿴SIM����״̬������ǰSIM��״̬��Ϊ����״̬��δ��ʾnosimcardҳ�棬����ʾnosimcardҳ��,�Ա��ⲻ�ر�webui�����²���豸�����ж�SIM��״̬������
+ function checkSimCardStatus() {
+ setInterval(function () {
+ var data = service.getStatusInfo();
+ var match = menu.findMenu();
+ if (match.length == 0) {
+ return false;
+ }
+ var requirePinHash = ["phonebook", "sms_list"];
+ var isRequirePin = ($.inArray(match[0].path, requirePinHash) != -1);
+ if (match[0].checkSIMStatus === true) {
+ var simstatus = data.simStatus == "modem_sim_undetected"
+ || data.simStatus == "modem_sim_destroy" || data.simStatus == "modem_waitpin"
+ || data.simStatus == "modem_waitpuk";
+ var netlockstatus = data.simStatus == "modem_imsi_waitnck";
+ if (data.isLoggedIn && (
+ ($('#div-nosimcard')[0] == undefined && simstatus)
+ || ($('#div-network-lock')[0] == undefined && netlockstatus)
+ || (($('#div-nosimcard')[0] != undefined || $('#div-network-lock')[0] != undefined) && data.simStatus == "modem_init_complete"))) {
+ fixedLoadResources(match[0], data.simStatus, isRequirePin);
+ }
+ }
+ }, 1000);
+ }
+
+ //����¼ҳ�汳��
+ function checkLoginPageBg() {
+ var h = window.location.hash;
+ if (h == '#entry' || _.indexOf(config.GUEST_HASH, h) != -1) {
+ $("#manageContainer").attr("style", "margin-top:-36px;");
+ } else {
+ $("#manageContainer").attr("style", "margin-top:0px;");
+ }
+
+ if (window.location.hash == '#entry') {
+ $("#mainContainer").addClass('loginBackgroundBlue');
+ } else {
+ var mainContainer = $("#mainContainer");
+ if (mainContainer.hasClass('loginBackgroundBlue')) {
+ $("#container").css({
+ margin: 0
+ });
+ mainContainer.removeClass('loginBackgroundBlue').height('auto');
+ }
+ }
+ }
+
+ function fixedLoadResources(menuItem, simStatus, isRequirePin) {
+ var item = {};
+ $.extend(item, menuItem);
+ //û��SIM��ʱ�����homeҳ�治��������
+ //���类��ʱ��homeҳ����ʾ����ҳ��
+ if (simStatus == "modem_sim_undetected" || simStatus == "modem_sim_destroy") {
+ if (!isRequirePin) {
+ item.path = "sim_abnormal";
+ }
+ } else if (simStatus == "modem_waitpin" || simStatus == "modem_waitpuk") {
+ item.path = "sim_abnormal";
+ } else if (simStatus == "modem_imsi_waitnck") {
+ item.path = "locknet";
+ }
+ //load tmpl and controller js
+ loadResources(item);
+ }
+
+ //���ݲ˵�����item���ض�Ӧ����Դ
+ function loadResources(item) {
+ var pId = item.path.replace(/\//g, '_');
+ var $body = $('body').removeClass();
+ if (pId != 'entry' && pId != 'main') {
+ $body.addClass('beautiful_bg page_' + pId);
+ } else {
+ $body.addClass('page_' + pId);
+ }
+ clearTimer();
+ hideLoading();
+ var tmplPath = 'text!tmpl/' + item.path + '.html';
+ //TODO: prevent first menu click cover the second menu content, need test with device
+ require([tmplPath, item.path], function (tmpl, viewModel) {
+ container.stop(true, true);
+ container.hide();
+ container.html(tmpl);
+ viewModel.init();
+ //support backward/forward
+ menu.refreshMenu();
+ $('#container').translate();
+ menu.activeSubMenu();
+
+ $("form").attr("autocomplete", "off");
+ container.fadeIn();
+ });
+ }
+ //�ȶ�hash״̬, ����仯������µ�hashƥ��˵�����,ƥ�䲻��ʱ��ת��homeҳ��, ƥ����ʱ��¼hashֵ����̬���ض�Ӧ����Դ�ļ�
+ function hashCheck() {
+ if (window.location.hash != currentHash) {
+ //�����½���������, ��½�û����ʷǵ�¼�û�ʱҳ�治��ת
+ var info = service.getStatusInfo();
+ if (window.location.hash == config.defaultRoute || _.indexOf(config.GUEST_HASH, window.location.hash) != -1) {
+ if (info.isLoggedIn) {
+ window.location.hash = currentHash == "" ? "#main" : currentHash;
+ return;
+ }
+ }
+
+ var match = menu.findMenu();
+
+ if (match.length == 0) {
+ window.location.hash = config.defaultRoute;
+ } else {
+ //��¼ʱ��鹤��ģʽ������ģʽ������������Ҫ���SIM��״̬�����¼���,����ģʽ�������治��Ҫ���SIM��״̬�����¼���
+ if (config.RJ45_SUPPORT && window.location.hash == "#main") {
+ if ((match[0].checkSIMStatus && checkCableMode(info.blc_wan_mode)) || (!match[0].checkSIMStatus && !checkCableMode(info.blc_wan_mode))) {
+ window.location.reload();
+ return;
+ }
+ }
+ //TODO: �����˵����Ӧ�����˵���һ����л�ʱ�����¼�������, ��TODO: click the same menu ʵ�ַ�ʽ����
+ var oldMenu = menu.findMenu(currentHash);
+ currentHash = match[0].hash;
+ if (currentHash == "#entry") {
+ $('#indexContainer').addClass('login-page-bg');
+ menu.rebuild();
+ } else {
+ $('#indexContainer').removeClass('login-page-bg');
+ }
+
+ if (oldMenu.length != 0 && match[0].path == oldMenu[0].path && match[0].level != oldMenu[0].level && match[0].level != '1' && oldMenu[0].level != '1') {
+ return;
+ }
+
+ checkLoginPageBg();
+ var requirePinHash = ["phonebook", "sms_list"];
+ var isRequirePin = ($.inArray(match[0].path, requirePinHash) != -1);
+ if (match[0].checkSIMStatus === true || isRequirePin) {
+ //simStatus is undefined when refreshing page
+ if (info.simStatus == undefined) {
+ showLoading('waiting');
+ function checkSIM() {
+ var data = service.getStatusInfo();
+ if (data.simStatus == undefined || $.inArray(data.simStatus, config.TEMPORARY_MODEM_MAIN_STATE) != -1) {
+ addTimeout(checkSIM, 500);
+ } else {
+ fixedLoadResources(match[0], data.simStatus, isRequirePin);
+ hideLoading();
+ }
+ }
+ checkSIM();
+ } else {
+ fixedLoadResources(match[0], info.simStatus, isRequirePin);
+ }
+ } else {
+ loadResources(match[0]);
+ }
+ }
+ }
+ }
+
+ //Ĭ�����ҳ��Ϊ#main, ��ʱ���hash״̬
+ function init() {
+ checkSimCardStatus();
+ window.location.hash = window.location.hash || "#main";
+ //if support onhashchange then use. If ie8 in ie7 mode, it doesn't trigger onhashchange.
+ if (('onhashchange' in window) && ((typeof document.documentMode === 'undefined') || document.documentMode == 8)) {
+ window.onhashchange = hashCheck;
+ hashCheck();
+ } else {
+ setInterval(hashCheck, 200);
+ }
+
+ //�������ҳ������, �뿪ʱ������ʾ
+ $("a[href^='#']").die('click').live('click', function () {
+ var $this = $(this);
+ config.CONTENT_MODIFIED.checkChangMethod();
+ return checkFormContentModify($this.attr('href'));
+ });
+ }
+
+ return {
+ init: init
+ };
+});
+
+// statusBar �
+
+define("statusBar", "knockout jquery underscore service set menu tooltip".split(" "),
+
+ function (ko, $, _, service, config, menu, tooltip) {
+
+ var sv__hasCheckedSMSCapacity = false;
+ var sv__initSMSCompleted = false;
+ var sv_newSMSMessageInDealing = false;
+ var sv_fotaUpdateCancel = null;
+ var sv_batteryCheckTimer = 0;
+ var sv_dbMessageIds = [];
+ var sv_fotaResultAlertPopuped = false;
+ var sv_isFirstLoadNewMessage = true;
+ var isLoggedIn = true;
+ var sv_messagePopStack = {};
+ var sv_newMessagePopTemplate = null;
+ var sv_resetTrafficAlertPopuped = false;
+ var sv_simMessageListTemplate = null;
+ var sv_smsListTemplate = null;
+ var sv_trafficAlertPopuped_100 = false;
+ var sv_trafficAlertPopuped = false;
+ var sv_timer = 0;
+
+ // ��ȡ״̬��Ϣ�������硢SIM��WIFI��
+ var getCurrentStatusInfo = function () {
+ return service.getStatusInfo();
+ };
+
+ function statusViewModel() {
+ var target = this;
+ var info = getCurrentStatusInfo();
+ var roamStatus = info.roamingStatus ? true : false;
+ var $langLogoBar = $("#langLogoBar");
+
+
+ // �����������¼�����
+ function sf_connect() {
+ showLoading("connecting");
+ service.connect({}, function (data) {
+ if (data.result) {
+ refreshWifiConnectStatus(target, data.status);
+ }
+ successOverlay();
+ }, function (data) {
+ errorOverlay();
+ });
+ }
+ // �Ͽ������¼�����
+ function sf_disconnect() {
+ showLoading("disconnecting");
+ service.disconnect({}, function (data) {
+ if (data.result) {
+ refreshWifiConnectStatus(target, data.status);
+ }
+ successOverlay();
+ }, function (data) {
+ errorOverlay();
+ });
+ }
+
+ if(info.isLoggedIn){
+ if(!$langLogoBar.hasClass("langborderBg")){
+ $langLogoBar.addClass("langborderBg");
+ }
+ $("#statusBar:hidden").show();
+ } else {
+ if($langLogoBar.hasClass("langborderBg")){
+ $langLogoBar.removeClass("langborderBg");
+ }
+ $("#statusBar:visible").hide();
+ }
+
+
+ //target.attachedDevices = ko.observable(info.attachedDevices);
+ target.batteryLevel = ko.observable(info.batteryLevel + '%');
+ target.batteryPers = ko.observable(sf_getBatteryLevelImage(info.batteryPers, info.batteryStatus));
+ target.batteryStatus = ko.observable(info.batteryStatus);
+ target.connectionCssClass = ko.observable("");
+ target.connectStatus = ko.observable(info.connectStatus);
+ target.connectStatusText = ko.observable();
+ target.connectStatusTrans = ko.observable();
+ target.hasWifi = ko.observable(config.HAS_WIFI);
+ target.hasBattery = ko.observable(config.HAS_BATTERY);
+ target.isLoggedIn = ko.observable(info.isLoggedIn);
+ target.isShowConnectionIcon = ko.observable(false);
+ target.isShowFotaNewversionIcon = ko.observable(info.new_version_state && info.fota_package_already_download != "yes" && !config.isShowFotaIcon);
+ target.isShowRj45ConnectionIcon = ko.observable(false);
+ target.networkOperator = ko.observable(sf_getNetWorkProvider(info.spn_b1_flag,info.spn_name_data,info.spn_b2_flag,info.networkOperator,roamStatus));
+ target.networkType = ko.observable(getNetworkType(info.networkType));
+ target.pinStatus = ko.observable(info.pinStatus);
+ target.pinStatusText = ko.observable();
+ target.rj45ConnectionCssClass = ko.observable("");
+ target.roamingStatus = ko.observable(info.roamingStatus ? "R" : "");
+ target.showAttachedDevices = ko.observable(info.wifiStatus);
+ target.showSmsDeleteConfirm = ko.observable(false);
+ target.smsUnreadCount = ko.observable(0);
+ target.simStatus = ko.observable(sf_convertSimStatusToImage(info.simStatus));
+ target.signalCssClass = ko.observable(sf_getSignalCssClass(info.signalImg, info.networkType, info.simStatus));
+ target.updateType = ko.observable(service.getUpdateType().update_type);
+ target.wifiStatusCssClass = ko.observable(sf_getWifiStatusCssClass(info.wifiStatus, info.wirelessDeviceNum));
+ target.wifiStatusImg = ko.observable(sf_getWifiStatusImage(info.wifiStatus, info.wirelessDeviceNum));
+
+ sf_getConnectionCssClass(target, info.connectStatus, info.data_counter, info.connectWifiSSID, info.connectWifiStatus, info.rj45ConnectStatus);
+
+ target.connect = sf_connect;
+ target.disconnect = sf_disconnect;
+ }
+
+ function sf_gotoSmsList(){
+ var s_href = '#msg_main';
+ if(window.location.hash == '#msg_main'){
+ s_href = '#msg_list';
+ }
+ config.CONTENT_MODIFIED.checkChangMethod();
+ if(checkFormContentModify(s_href)){
+ window.location.hash = s_href;
+ }
+ }
+
+ gotoSmsList = sf_gotoSmsList;
+
+ function sf_getNetWorkProvider(i_spnB1Flag, i_spnNameData, i_spnB2Flag, i_networkProvider, i_roamStatus) {
+ if (i_spnNameData == "") {
+ return i_networkProvider;
+ } else {
+ i_spnNameData = decodeMessage(i_spnNameData);
+ if (i_spnB1Flag == "0" && i_spnB2Flag == "0") {
+ if (i_roamStatus) {//����
+ return i_spnNameData == i_networkProvider ? i_networkProvider : (i_spnNameData + ' ' + i_networkProvider);
+ } else {//������
+ return i_spnNameData;
+ }
+ }else if (i_spnB1Flag == "1" && i_spnB2Flag == "1") {
+ if (i_roamStatus) {//����
+ return i_networkProvider;
+ } else {//������
+ return i_spnNameData == i_networkProvider ? i_networkProvider : (i_spnNameData + ' ' + i_networkProvider);
+ }
+ } else if (i_spnB1Flag == "1") {
+ return i_spnNameData == i_networkProvider ? i_networkProvider : (i_spnNameData + ' ' + i_networkProvider);
+ } else if (i_spnB2Flag == "1") {
+ if (i_roamStatus) {//����
+ return i_networkProvider;
+ } else {//������
+ return i_spnNameData;
+ }
+ }
+ return "";
+ }
+ }
+
+ // �����¶���Ϣ��ʾ���������������
+ function sf_addNewMessage(i_message, i_isUpdate, i_type){
+ config.smsMaxId = i_message.id;
+ var now = $.now();
+ sv_messagePopStack["m" + now] = now;
+ var name = i_message.number;
+ if(sv_isFirstLoadNewMessage && config.phonebook && config.phonebook.length == 0){
+ sv_isFirstLoadNewMessage = false;
+ if(config.HAS_PHONEBOOK){
+ sf_getPhoneBooks();
+ }else{
+ config.phonebook = [];
+ }
+ }
+ for(i in config.phonebook){
+ if(getLastNumber(config.phonebook[i].pbm_number, config.SMS_MATCH_LENGTH) == getLastNumber(i_message.number, config.SMS_MATCH_LENGTH)){
+ name = config.phonebook[i].pbm_name;
+ break;
+ }
+ }
+ var s_newMsg = {
+ mark : "m" + now,
+ name: name,
+ title: $.i18n.prop("sms"),
+ titleTrans: "sms",
+ tag: i_message.tag,
+ content : i_message.content,
+ datetime : i_message.time
+ };
+ if(sv_newMessagePopTemplate == null){
+ sv_newMessagePopTemplate = $.template("newMessagePopTmpl", $("#newMessagePopTmpl"));
+ }
+ $(".bubbleItem:not(.report)", "#buttom-bubble").remove();
+ $.tmpl("newMessagePopTmpl", s_newMsg).appendTo("#buttom-bubble");
+ if((window.location.hash == "#msg_main" || window.location.hash == "#msg_list") && i_type == "1"){
+ //sf_dealChosenNumber(s_newMsg.name, i_message.number);
+ var s_inChating = config.currentChatObject && config.currentChatObject == getLastNumber(i_message.number, config.SMS_MATCH_LENGTH);
+ var s_itemId = getLastNumber(i_message.number, config.SMS_MATCH_LENGTH);
+ var item = $("#smslist-item-" + s_itemId);
+ if(item && item.length > 0){
+ // �Ѵ������ݣ��������ݵ���˳��
+ for(var i = 0; config.listMsgs && i < config.listMsgs.length; i++){
+ if(getLastNumber(config.listMsgs[i].number, config.SMS_MATCH_LENGTH) == getLastNumber(i_message.number, config.SMS_MATCH_LENGTH)){
+ config.listMsgs[i].id = i_message.id;
+ config.listMsgs[i].latestId = i_message.id;
+ config.listMsgs[i].latestSms = i_message.content;
+ config.listMsgs[i].latestTime = i_message.time;
+ if(!i_isUpdate){
+ config.listMsgs[i].newCount++;
+ config.listMsgs[i].totalCount++;
+ }
+ break;
+ }
+ }
+ item.find(".smslist-item-checkbox p.checkbox").attr("id", i_message.id);
+ item.find(".smslist-item-checkbox input:checkbox").val(i_message.id).attr("id", "checkbox" + i_message.id);
+ if(!i_isUpdate){
+ var s_itemCount = item.find(".smslist-item-total-count").text();
+ s_itemCount = Number(s_itemCount.substring(1, s_itemCount.length - 1));
+ item.find(".smslist-item-total-count").text("(" + (s_itemCount + 1) + ")");
+ if(!config.currentChatObject || config.currentChatObject != getLastNumber(i_message.number, config.SMS_MATCH_LENGTH)){
+ var s_newNum = item.find(".smslist-item-new-count").removeClass("hide");
+ if(s_newNum && s_newNum.text().length > 0){
+ s_newNum.text(Number(s_newNum.text()) + 1);
+ }else{
+ s_newNum.text(1);
+ }
+ }
+ }
+ if(item.find(".smslist-item-draft-flag").length > 0){
+ if (config.currentChatObject && config.currentChatObject == getLastNumber(i_message.number, config.SMS_MATCH_LENGTH)) {
+ item.find(" td:nth-child(2)").removeClass("font-weight-bold");
+ } else {
+ item.find(" td:nth-child(2)").addClass("font-weight-bold");
+ }
+ }else{
+ var msgContent = item.find(".smslist-item-msg").text(i_message.content);
+ msgContent.closest('td').prop('title', i_message.content);
+ item.find("span.clock-time").text(i_message.time);
+ if (config.currentChatObject && config.currentChatObject == getLastNumber(i_message.number, config.SMS_MATCH_LENGTH)) {
+ msgContent.closest('tr').removeClass("font-weight-bold");
+ } else {
+ msgContent.closest('tr').addClass("font-weight-bold");
+ }
+ }
+ item.find(".smslist-item-repeat span").die().click(function() {
+ forwardClickHandler(i_message.id);
+ });
+
+ var s_tmpItem = item;
+ item.hide().remove();
+ $("#smslist-table").prepend(s_tmpItem.show());
+ } else {
+ // ��������б��в�������Ӧ����ϵ�˶�Ϣ��Ӧ�ڶ����б�����������
+ var s_theName = "";
+ if(config.phonebook && config.phonebook.length > 0) {
+ for(i in config.phonebook){
+ if(getLastNumber(config.phonebook[i].pbm_number, config.SMS_MATCH_LENGTH) == getLastNumber(i_message.number, config.SMS_MATCH_LENGTH)){
+ s_theName = config.phonebook[i].pbm_name;
+ break;
+ }
+ }
+ }
+ var s_theNewMessage = {
+ id : i_message.id,
+ name : s_theName,
+ number : i_message.number,
+ latestId :i_message.id,
+ totalCount : 1,
+ newCount : s_inChating ? 0 : 1,
+ latestSms : i_message.content,
+ latestTime : i_message.time,
+ checked : false,
+ hasDraft : false,
+ itemId : getLastNumber(i_message.number, config.SMS_MATCH_LENGTH)
+ };
+ if(sv_smsListTemplate == null){
+ sv_smsListTemplate = $.template("smsTableTmpl", $("#smsTableTmpl"));
+ }
+ $.tmpl("smsTableTmpl", {data: [s_theNewMessage]}).prependTo("#smslist-table");
+ }
+ if(config.HAS_PHONEBOOK){
+ $(".sms-add-contact-icon").removeClass("hide");
+ }else{
+ $(".sms-add-contact-icon").addClass("hide");
+ }
+ if(s_inChating){
+ var talkItem = $("#talk-item-" + i_message.id, "#chatlist");
+ if (talkItem && talkItem.length > 0) {// ���¼�����������
+ $(".J_content pre", talkItem).html(dealContent(i_message.content));
+ $(".time .smslist-item-time", talkItem).text(i_message.time);
+ $(".smslist-item-repeat", talkItem).die().click(
+ function() {
+ forwardClickHandler(i_message.id);
+ });
+ $(".smslist-item-delete", talkItem).die().click(
+ function() {
+ deleteSingleItemClickHandler(i_message.id);
+ });
+ } else {// �����µĻظ�����
+ $("#smsOtherTmpl").tmpl(i_message).appendTo("#chatlist");
+ $(".clear-container", "#chatpanel").animate({
+ scrollTop : $("#chatlist").height()
+ });
+ }
+ if (!config.SMS_SET_READ_WHEN_COMPLETE) {
+ service.setSmsRead({ids: [i_message.id]}, $.noop);
+ } else if (config.SMS_SET_READ_WHEN_COMPLETE && i_message.receivedAll) {
+ service.setSmsRead({ids: [i_message.id]}, $.noop);
+ }
+ }
+ enableCheckbox($("#smslist-checkAll"));
+ }
+ if(window.location.hash == "#msg_sim" && i_type == "0"){
+ // ��������б��в�������Ӧ����ϵ�˶�Ϣ��Ӧ�ڶ����б�����������
+ var s_theName = "";
+ if(config.phonebook && config.phonebook.length > 0) {
+ for(i in config.phonebook){
+ if(getLastNumber(config.phonebook[i].pbm_number, config.SMS_MATCH_LENGTH) == getLastNumber(i_message.number, config.SMS_MATCH_LENGTH)){
+ s_theName = config.phonebook[i].pbm_name;
+ break;
+ }
+ }
+ }
+ var s_theNewMessage = {
+ id : i_message.id,
+ name : s_theName,
+ number : i_message.number,
+ content : i_message.content,
+ time : i_message.time,
+ tag: i_message.tag,
+ checked : false,
+ itemId : getLastNumber(i_message.number, config.SMS_MATCH_LENGTH)
+ };
+ if(i_isUpdate){
+ var s_item = $(".simMsgList-item-class-" + s_theNewMessage.id);
+ s_item.hide().remove();
+ }
+ if(sv_simMessageListTemplate == null){
+ sv_simMessageListTemplate = $.template("ssimMessageListTemplate", $("#simMessageListTemplate"));
+ }
+ $.tmpl("simMessageListTemplate", {data: [s_theNewMessage]}).prependTo("#simMsgList_container");
+ }
+ }
+
+ function sf_checkBatteryStatusForFota(){
+ var s_state = service.getCurrentUpgradeState();
+ if(s_state.current_upgrade_state == 'low_battery'){
+ showInfo('ota_low_battery');
+ clearInterval(sv_batteryCheckTimer);
+ }
+ }
+
+ // ��SIM��״̬ת��Ϊ��Ӧ����������
+ function sf_convertSimStatusToImage(i_status) {
+ var s_image;
+ switch (i_status) {
+ case "modem_destroy":
+ s_image = "./pic/simcard_undetected.png";//$.i18n.prop("sim_status_destroy");
+ break;
+ case "modem_imsi_waitnck":
+ s_image = "./pic/simcard_undetected.png";//$.i18n.prop("sim_status_waitnck");
+ break;
+ case "modem_init_complete":
+ s_image = "./pic/simcard_detected.png";//$.i18n.prop("sim_status_ready");
+ break;
+ case "modem_sim_destroy":
+ s_image = "./pic/simcard_undetected.png";//$.i18n.prop("sim_status_destroy");
+ break;
+ case "modem_sim_undetected":
+ s_image = "./pic/simcard_undetected.png";//$.i18n.prop("sim_status_undetected");
+ break;
+ case "modem_undetected":
+ s_image = "./pic/simcard_undetected.png";
+ break;
+ case "modem_waitpin":
+ s_image = "./pic/simcard_undetected.png";//$.i18n.prop("sim_status_waitpin");
+ break;
+ case "modem_waitpuk":
+ s_image = "./pic/simcard_undetected.png";//$.i18n.prop("sim_status_waitpuk");
+ break;
+
+ default:
+ s_image = "./pic/simcard_detected.png";//$.i18n.prop("sim_status_ready");
+ break;
+ }
+ return s_image;
+ }
+
+ function sf_dealChosenNumber(i_choosenName, i_choosenNum) {
+ setTimeout(function () {
+ var s_choosen = $("#chosenUserSelect");
+ var s_options = $("option", s_choosen);
+ for (var index = 0; index < s_options.length; index++) {
+ if (getLastNumber(i_choosenNum, config.SMS_MATCH_LENGTH) == s_options[index].value) {
+
+ s_options[index].text = i_choosenName + '/' + i_choosenNum;
+ s_options[index].value = i_choosenNum;
+
+ break;
+ }
+ }
+ s_choosen.trigger("liszt:updated");
+ }, 0);
+ }
+
+ // ˫�첽��ȡ�豸���sim����ö���Ϣ��������ϲ�
+ function sf_dealPhoneBooksResult(i_books){
+ if($.isArray(i_books.pbm_data) && i_books.pbm_data.length > 0){
+ config.phonebook = i_books.pbm_data;
+ }
+ }
+
+ // �������µ�5������Ϣ����δ���ӵ������б��еĵ�����ʾ
+ function sf_filterNewMessage(i_messages, i_type){
+ if(!config.dbMsgs){
+ config.dbMsgs = [];
+ }
+ if(sv_dbMessageIds.length == 0){
+ $.each(config.dbMsgs, function(index_1, i_element){
+ sv_dbMessageIds.push(i_element.id);
+ });
+ }
+ $.each(i_messages, function(index_2, i_element){
+ if($.inArray(i_element.id, sv_dbMessageIds) == -1){//�����¶���
+ sv_dbMessageIds.push(i_element.id);
+ config.dbMsgs.push(i_element);
+ if(i_element.tag == '1'){
+ sf_addNewMessage(i_element, false, i_type);
+ }
+ }else{
+ for(var index = 0; index < config.dbMsgs.length; index++){//���¼�������
+ if(config.dbMsgs[index].id == i_element.id && config.dbMsgs[index].content != i_element.content && i_element.tag == '1'){
+ config.dbMsgs[index].content = i_element.content;
+ sf_addNewMessage(i_element, true, i_type);
+ break;
+ }
+ }
+ }
+ });
+ }
+
+ // ������ת��Ϊ��ӦͼƬ
+ function sf_getBatteryLevelImage(pers, i_status) {
+ var s_Image = null;
+ if ("0" == i_status) {
+ if ("-1" == pers) {
+ s_Image = null;
+ } else if ("1" == pers) {
+ s_Image = "pic/power_one.png";
+ } else if ("2" == pers) {
+ s_Image = "pic/power_two.png";
+ } else if ("3" == pers) {
+ s_Image = "pic/power_three.png";
+ } else if ("4" == pers) {
+ s_Image = "pic/power_full.png";
+ } else { //"5" == pers || "0" == pers
+ s_Image = "pic/power_out.png";
+ }
+ } else {
+ s_Image = "pic/power_charging.gif";
+ }
+ return s_Image;
+ }
+
+ // ��ȡ����״̬��CSS��ʽ
+ function sf_getConnectionCssClass(i_fwVm, i_status, i_data_counter, i_wifiSSID, i_wifiStatus, i_rj45Status) {
+
+ var s_rj45ConnectionStatus = "icon_connection ";
+ var s_connectionStatus = "icon_connection ";
+
+ if(i_rj45Status == "connect"){
+ s_rj45ConnectionStatus += "connecting";
+ }else if(i_rj45Status == "working"){
+ s_rj45ConnectionStatus += "rj45_connected";
+ }else{
+ s_rj45ConnectionStatus += "disconnect";
+ }
+
+ if (i_status == "ppp_connecting" || i_status == "wifi_connecting") {
+ s_connectionStatus += "connecting";
+ } else if(i_status == "ppp_connected") {//CPE ppp_statusΪnone ready��ֵ
+ if (i_data_counter.uploadRate != '0' && i_data_counter.downloadRate != '0') {
+ s_connectionStatus += "connectionBoth";
+ } else if (i_data_counter.uploadRate != '0' && i_data_counter.downloadRate == '0') {
+ s_connectionStatus += "connectionUp";
+ } else if (i_data_counter.uploadRate == '0' && i_data_counter.downloadRate != '0') {
+ s_connectionStatus += "connectionDown";
+ } else {
+ s_connectionStatus += "connectionNone";
+ }
+ } else if (i_status == "ppp_disconnected") {
+ if (i_wifiSSID && i_wifiStatus == "connect") {
+ service.getHotspotList({}, function (data) {
+ var s_cssName = "icon_connection ";
+ var s_css = "connecting ";
+ for (var i = 0, len = data.hotspotList.length; i < len; i++) {
+ if (data.hotspotList[i].connectStatus == "1") {
+ s_css = "wifi_connected";
+ break;
+ }
+ }
+ s_cssName += s_css;
+ i_fwVm.connectionCssClass(s_cssName);
+ });
+ i_fwVm.rj45ConnectionCssClass(s_rj45ConnectionStatus);
+ return;
+ } else if (i_wifiSSID && (i_wifiStatus == "connecting" || i_wifiStatus =="dhcping")) {
+ s_connectionStatus += "connecting";
+ } else {
+ s_connectionStatus += "disconnect";
+ }
+ } else {
+ s_connectionStatus += "disconnect";
+ }
+
+ i_fwVm.connectionCssClass(s_connectionStatus);
+ i_fwVm.rj45ConnectionCssClass(s_rj45ConnectionStatus);
+ }
+
+ // ��ȡ�绰����Ϣ
+ function sf_getPhoneBooks() {
+ var s_books = service.getPhoneBooks({
+ page : 0,
+ data_per_page : 2000,
+ orderBy : "id",
+ isAsc : false
+ });
+ sf_dealPhoneBooksResult(s_books);
+ }
+
+ // ��ȡ�ź�����CSS��ʽ
+ function sf_getSignalCssClass(siganl, networkType, simStatus) {
+ networkType = networkType.toLowerCase();
+ simStatus = simStatus ? simStatus.toLowerCase() : '';
+ if(networkType == '' || networkType == 'limited_service' || networkType == 'no_service' || networkType == 'limited service' || networkType == 'no service'
+ || simStatus != 'modem_init_complete'){
+ siganl = '_none';
+ }
+ return "signal signal" + siganl;
+ }
+
+ function sf_getWifiStatusCssClass(i_status, i_deviceSize) {
+ if (i_status) {
+ if (i_deviceSize == 0) {
+ return "wifi_status0";
+ } else {
+ return "wifi_status" + i_deviceSize;
+ }
+ } else {
+ return "wifi_status_off";
+ }
+ }
+
+ // ����wifi״̬��ȡwifi��ͼƬ��Դ
+ function sf_getWifiStatusImage(i_status, i_deviceSize) {
+ if (i_status) {
+ if (i_deviceSize == 0) {
+ return "./pic/wlan0.png";
+ } else {
+ return "./pic/wlan" + i_deviceSize + ".png";
+ }
+ } else {
+ return "./pic/wlan_off.png";
+ }
+ }
+
+ // ��ȡ��������������С���������ؽ���
+ function sf_refreshFotaDownloadProgress(){
+ service.getPackSizeInfo({}, function (data) {
+ var percents;
+ if (parseInt(data.fota_pkg_total_size) == 0) {
+ percents = 0;
+ } else {
+ percents = parseInt(parseInt(data.fota_dl_pkg_size) * 100 / parseInt(data.fota_pkg_total_size));
+ }
+ if (percents > 100) {
+ percents = 100;
+ }
+ if (percents >= 0) {
+ if (percents > 95) {
+ showProgressBar("ota_update", "<br/>" + $.i18n.prop("ota_update_warning"));
+ }
+ setProgressBar(percents);
+ }
+ });
+ }
+
+ // �������ŷ��ͱ���
+ function sf_responseSmsReport(){
+ if(sv_isFirstLoadNewMessage && config.phonebook && config.phonebook.length == 0){
+
+ sv_isFirstLoadNewMessage = false;
+
+ if(config.HAS_PHONEBOOK){
+ sf_getPhoneBooks();
+ }else{
+ config.phonebook = [];
+ }
+ }
+ service.getSMSDeliveryReport({
+ page: 0,
+ smsCount: 10
+ }, function(data){
+ var s_messages = data.messages;
+ var s_nums = [];
+ $.each(s_messages, function(i, i_message){
+ if($.inArray(i_message.number, s_nums) == -1){
+ s_nums.push(i_message.number);
+ window.setTimeout(function(){
+ var s_now = $.now();
+ sv_messagePopStack["m" + s_now] = s_now;
+ i_message.name = i_message.number;
+ for(i in config.phonebook){
+ if(getLastNumber(config.phonebook[i].pbm_number, config.SMS_MATCH_LENGTH) == getLastNumber(i_message.number, config.SMS_MATCH_LENGTH)){
+ i_message.name = config.phonebook[i].pbm_name;
+ break;
+ }
+ }
+ var s_msgContent = $.i18n.prop("sms_delivery_report_" + i_message.content);
+
+ var s_newMsg = {
+ mark : "m" + s_now,
+ name: i_message.name,
+ title: $.i18n.prop("sms_report"),
+ titleTrans: "sms_report",
+ content : s_msgContent,
+ datetime : i_message.time,
+ report : 'report'
+ };
+
+ if(sv_newMessagePopTemplate == null){
+ sv_newMessagePopTemplate = $.template("newMessagePopTmpl", $("#newMessagePopTmpl"));
+ }
+
+ $(".report", "#buttom-bubble").remove();
+ $.tmpl("newMessagePopTmpl", s_newMsg).appendTo("#buttom-bubble");
+ }, 100);
+ }
+ });
+ }, function(){
+ //No Deal
+ });
+ }
+
+ function sf_simStatusInvalid(simStatus){
+ return simStatus == 'modem_sim_undetected' || simStatus == 'modem_undetected' || simStatus == 'modem_sim_destroy'
+ || simStatus == 'modem_waitpin' || simStatus == 'modem_waitpuk' || simStatus == 'modem_imsi_waitnck';
+ }
+
+ // ��ʾFOTA������ǰ״̬
+ function sf_showFotaCurrentStatus() {
+ sv_fotaUpdateCancel = true;
+ var r = service.getNewVersionState();
+
+ function showProgress() {
+ var upgradingState = ["downloading"];
+ var info = service.getCurrentUpgradeState();
+ if(info.current_upgrade_state.toLowerCase() == "idle") {
+ addTimeout(showProgress, 1000);
+ } else if(($.inArray(info.current_upgrade_state, upgradingState) != -1)&&(r.fota_new_version_state != "already_has_pkg")) {
+ hideLoading();
+ sf_showFotaUpgradeStatus();
+ }
+ }
+ if (!($("#progress").is(":visible"))) {
+ showProgress();
+ }
+ var times = 0;
+ var getOTAUpgradeState = function () {
+ var data = null;
+ if (times <= 3) {
+ times = times + 1;
+ data = service.getCurrentUpgradeState();
+ } else {
+ data = getCurrentStatusInfo();
+ }
+ var state = data.current_upgrade_state;
+ if(sv_fotaUpdateCancel && isLoggedIn == true){
+
+ if(r.fota_new_version_state == "already_has_pkg"){
+ if(state == 'low_battery'){
+ hideProgressBar();
+ sv_fotaUpdateCancel = false;
+ service.removeTimerThings('fota_current_upgrade_state',function(){});
+ showInfo('ota_pkg_low_battery');
+ window.clearTimeout(sv_timer);
+ return;
+ }else if(state == 'prepare_install'){
+ hideProgressBar();
+ sv_fotaUpdateCancel = false;
+ service.removeTimerThings('fota_current_upgrade_state',function(){});
+ showInfo('ota_pkg_download_success');
+ window.clearTimeout(sv_timer);
+ sv_batteryCheckTimer = setInterval(function () {
+ sf_checkBatteryStatusForFota();
+ }, 1000);
+ return;
+ }
+ }else if(state == 'downloading') {
+ sf_refreshFotaDownloadProgress();
+ }else if(state == 'download_failed') {
+ hideProgressBar();
+ sv_fotaUpdateCancel = false;
+ showAlert('ota_download_failed');
+ window.clearTimeout(sv_timer);
+ return;
+ }else if(state == 'low_battery'){
+ hideProgressBar();
+ sv_fotaUpdateCancel = false;
+ service.removeTimerThings('fota_current_upgrade_state',function(){});
+ showInfo('ota_low_battery');
+ window.clearTimeout(sv_timer);
+ return;
+ }else if(state == 'prepare_install'){
+ hideProgressBar();
+ sv_fotaUpdateCancel = false;
+ service.removeTimerThings('fota_current_upgrade_state',function(){});
+ showInfo('ota_download_success');
+ window.clearTimeout(sv_timer);
+ sv_batteryCheckTimer = setInterval(function () {
+ sf_checkBatteryStatusForFota();
+ }, 1000);
+ return;
+ }else{
+ sv_fotaUpdateCancel = false;
+ hideProgressBar();
+ window.clearTimeout(sv_timer);
+ return;
+ }
+ sv_timer = window.setTimeout(getOTAUpgradeState , 1000);
+ }
+ };
+
+ if(sv_fotaUpdateCancel && isLoggedIn == true){
+ sv_timer = window.setTimeout(getOTAUpgradeState , 100);
+ }else{
+ window.clearTimeout(sv_timer);
+ }
+ }
+
+ // ��ʾFota�������
+ function sf_showFotaUpdateResult(i_otaResult) {
+ if ((!($("#loading").is(":visible"))) && (!($("#confirm").is(":visible")))) {
+ var s_message = i_otaResult ? "ota_update_success" : "ota_update_failed";
+ sv_fotaResultAlertPopuped = true;
+ showAlert(s_message, function () {
+ sv_fotaResultAlertPopuped = false;
+ if (config.UPGRADE_TYPE == "OTA") {
+ service.clearUpdateResult({}, $.noop());
+ }
+ });
+ } else {
+ window.setTimeout(function () {
+ sf_showFotaUpdateResult(i_otaResult)
+ }, 1000);
+ }
+ }
+
+ // ��ʾ��ǰ����״̬
+ function sf_showFotaUpgradeStatus() {
+ var s_data = service.getMandatory();
+ var s_isMandatory = s_data.is_mandatory;
+ var s_sizeInfo =service.getPackSizeInfo();
+ var s_percents;
+
+ if (parseInt(s_sizeInfo.fota_pkg_total_size) == 0) {
+ s_percents = 0;
+ } else {
+ s_percents = parseInt(parseInt(s_sizeInfo.fota_dl_pkg_size) * 100 / parseInt(s_sizeInfo.fota_pkg_total_size));
+ }
+ if (s_percents > 100) {
+ s_percents = 100;
+ }
+
+ if (s_isMandatory) {
+ showProgressBar("ota_update", "<br/>" + $.i18n.prop("ota_update_warning"));
+ } else {
+ var cancelHtml = "";
+ if (config.UPGRADE_TYPE == "OTA") {
+ cancelHtml = "<br/><br/><button id='btnStopUpgrade' onclick='stopOTAUpgrade();' class='btn-1 btn-primary'>" + $.i18n.prop("cancel") + "</button>";
+ }
+ showProgressBar("ota_update", "<br/>" + $.i18n.prop("ota_update_warning") + cancelHtml);
+ }
+
+ //setProgressBar(0);
+ if (s_percents >= 0) {
+ setProgressBar(s_percents);
+ }
+ }
+
+
+
+
+
+ function sf_startFotaUpgrade(){
+ service.setUpgradeSelectOp({selectOp:'1'},function(result){
+ if (result.result == "success"){
+ sf_showFotaCurrentStatus();
+ }});
+ }
+
+ function cancelFotaUpgrade(){
+ service.setUpgradeSelectOp({selectOp:'0'},function(result){ });
+ }
+
+
+ function refreshFotaStatusForUserSelector(choice){
+ var info = getCurrentStatusInfo();
+ if(choice){
+ var modeData = service.getOpMode();
+ if (!checkConnectedStatus(info.connectStatus, modeData.rj45_state, info.connectWifiStatus)) {
+ showAlert("ota_network_disconnected");
+ return;
+ }
+
+ if(info.fota_user_selector == 'none'){
+ sf_startFotaUpgrade();
+ }else if(info.fota_user_selector == 'accept'){
+ sf_showFotaCurrentStatus();
+ }else if(info.fota_user_selector == 'cancel'){
+ showAlert("ota_have_cancel");
+ }else if(info.fota_user_selector == 'downloading_cancel'){
+ showAlert("ota_have_cancel");
+ }
+ }else{
+ if(info.fota_user_selector == 'none'){
+ cancelFotaUpgrade();
+ }else if(info.fota_user_selector == 'accept'){
+ sf_showFotaCurrentStatus();
+ }else if(info.fota_user_selector == 'cancel'){
+ // todo:
+ }else if(info.fota_user_selector == 'downloading_cancel'){
+ // todo:
+ }
+ }
+ }
+
+
+ // ��ʾ���°汾�������ж��Ƿ������ʾ
+ function showFotaStatusForUserToConfirm(upgradeState) {
+ var upgState = upgradeState.current_upgrade_state;
+ if (upgState == 'upgrade_pack_redownload') {
+ showConfirm("ota_interrupted", {ok: function () {
+ refreshFotaStatusForUserSelector(1);
+ }, no: function () {
+ refreshFotaStatusForUserSelector(0);
+ }});
+ } else {
+ var upgradingState = ["prepare_install", "low_battery",
+ "connecting_server", "connect_server_success", "downloading", "accept"];
+ if ($.inArray(upgState, upgradingState) != -1) {
+ sf_showFotaCurrentStatus();
+ } else {
+
+ showConfirm($.i18n.prop('ota_new_version'), {ok: function () {
+ refreshFotaStatusForUserSelector(1);
+ config.ISNOW_NOTICE = false;
+ }, no: function () {
+ refreshFotaStatusForUserSelector(0);
+ config.ISNOW_NOTICE = false;
+ }});
+ }
+ }
+ }
+
+ showOTAAlert = function () {
+ config.ISNOW_NOTICE = true;
+ var is_mandatory = service.getMandatory().is_mandatory;
+ if (is_mandatory) {
+ sf_showFotaCurrentStatus();
+ } else {
+ var upgradeState = {};
+ upgradeState = service.getCurrentUpgradeState();
+ showFotaStatusForUserToConfirm(upgradeState);
+ }
+ };
+
+ // ��ֹFota����
+ stopOTAUpgrade = function () {
+ service.setUpgradeSelectOp({selectOp:'2'},function(result){ });
+ sv_fotaUpdateCancel = false;
+ window.clearTimeout(sv_timer);
+ hideLoading();
+ showAlert('ota_cancel');
+ };
+
+ // �������������Ƿ����ѹ�
+ function setTrafficAlertPopuped(val){
+ sv_trafficAlertPopuped = !!val;
+ sv_trafficAlertPopuped_100 = !!val;
+ if(!val){
+ sv_resetTrafficAlertPopuped = true;
+ }
+ }
+
+ function setTrafficAlert100Popuped(val){
+ sv_trafficAlertPopuped_100 = !!val;
+ if(!val){
+ sv_resetTrafficAlertPopuped = true;
+ }
+ }
+
+ // ���������ṹ
+ function getTrafficResult(info){
+ var s_trafficResult = {
+ showConfirm : false,
+ limitPercent : info.limitVolumePercent
+ };
+ if(info.limitVolumeType == '1'){
+ var monthlyTraffic = parseInt(info.data_counter.monthlySent, 10) + parseInt(info.data_counter.monthlyReceived, 10);
+ s_trafficResult.usedPercent = monthlyTraffic / info.limitVolumeSize * 100;
+ if(s_trafficResult.usedPercent > s_trafficResult.limitPercent){
+ s_trafficResult.showConfirm = true;
+ s_trafficResult.type = 'data';
+ }
+ }else{
+ s_trafficResult.usedPercent = info.data_counter.monthlyConnectedTime / info.limitVolumeSize * 100;
+ if(s_trafficResult.usedPercent > s_trafficResult.limitPercent){
+ s_trafficResult.showConfirm = true;
+ s_trafficResult.type = 'time';
+ }
+ }
+ return s_trafficResult;
+ }
+
+ // ��ʼ�� ViewModel����������ͼ��
+ function init() {
+ if(config.PRODUCT_TYPE == 'DATACARD') {
+ $('#statusBar').addClass('padding-right-90');
+ $('#language').addClass('data-card-language');
+ }
+ //preload img
+ var imgAlert = $('<img />').attr('src', 'pic/res_alert.png');
+ var imgConfirm = $('<img />').attr('src', 'pic/res_confirm.png');
+ var imgInfo = $('<img />').attr('src', 'pic/res_info.png');
+
+ window.setTimeout(function () {
+
+ var fwVm = new statusViewModel();
+
+ ko.applyBindings(fwVm, $('#statusBar')[0]);
+
+ window.setInterval(function () {
+ var info = getCurrentStatusInfo();
+ var s_roamStatus = info.roamingStatus ? true : false;
+ var $langLogoBar = $("#langLogoBar");
+ isLoggedIn = info.isLoggedIn;
+
+
+ //fwVm.attachedDevices(info.attachedDevices);
+ fwVm.batteryLevel(info.batteryLevel + '%');
+ fwVm.batteryPers(sf_getBatteryLevelImage(info.batteryPers, info.batteryStatus));
+ fwVm.batteryStatus(info.batteryStatus);
+ fwVm.isShowFotaNewversionIcon(info.new_version_state && info.fota_user_selector && info.fota_package_already_download != "yes" && config.ISNOW_NOTICE && fwVm.updateType() == 'mifi_fota');
+ fwVm.isShowRj45ConnectionIcon(config.RJ45_SUPPORT);
+ fwVm.networkOperator(sf_getNetWorkProvider(info.spn_b1_flag,info.spn_name_data,info.spn_b2_flag,info.networkOperator,s_roamStatus));
+ fwVm.networkType(getNetworkType(info.networkType));
+ fwVm.pinStatus(info.pinStatus);
+ fwVm.roamingStatus(info.roamingStatus ? "R" : "");
+ fwVm.showAttachedDevices(info.wifiStatus);
+ fwVm.simStatus(sf_convertSimStatusToImage(info.simStatus));
+ fwVm.signalCssClass(sf_getSignalCssClass(info.signalImg, info.networkType, info.simStatus));
+ fwVm.isLoggedIn(info.isLoggedIn);
+ fwVm.wifiStatusCssClass(sf_getWifiStatusCssClass(info.wifiStatus, info.wirelessDeviceNum));
+ fwVm.wifiStatusImg(sf_getWifiStatusImage(info.wifiStatus, info.wirelessDeviceNum));
+
+ if(config.HAS_SMS ){
+ if(!sv__hasCheckedSMSCapacity && info.isLoggedIn){
+ checkSMSCapacity(info.smsUnreadCount);
+ } else {
+ fwVm.smsUnreadCount(info.smsUnreadCount);
+ }
+ }
+
+ sf_getConnectionCssClass(fwVm, info.connectStatus, info.data_counter, info.connectWifiSSID, info.connectWifiStatus, info.rj45ConnectStatus);
+ refreshWifiConnectStatus(fwVm, info.connectStatus,info.connectWifiSSID,info.connectWifiStatus);
+ checkTrafficLimitAlert(fwVm, info);
+ updateStatusBarTrans({simStatus: info.simStatus, wifiStatus: info.wifiStatus, deviceSize: info.wirelessDeviceNum, networkType: info.networkType});
+
+ if(info.isLoggedIn){
+ $("#statusBar:hidden").show();
+ } else {
+ $("#statusBar:visible").hide();
+ }
+ }, 500);
+
+ if(config.HAS_SMS){
+ window.setInterval(function(){
+ if(fwVm.isLoggedIn()){
+ checkSMSCapacity();
+ }
+ }, 10000);
+ checkSmsModelReady();
+ }
+
+ window.setInterval(function() {
+ var data = getCurrentStatusInfo();
+ var upgradingState = ["prepare_install", "low_battery", "download_success","downloading"];
+
+ if (fwVm.isLoggedIn() == true && !($("#progress").is(":visible")) && data.defaultWanName != ""){
+ if ($.inArray(data.current_upgrade_state, upgradingState) != -1){
+ if(null == sv_fotaUpdateCancel){
+ if(!data.is_mandatory){
+ $.modal.close();
+ }
+ sf_showFotaCurrentStatus();
+ }else if(false == sv_fotaUpdateCancel){
+ sv_fotaUpdateCancel = null;
+ }
+ }
+ }
+ }, 1000);
+
+ var checkFotaUpgradeResult = function () {
+ var info = service.getStatusInfo();
+ if (info.isLoggedIn) {
+ service.getUpgradeResult({}, function (data) {
+ if (data.upgrade_result == "success") {
+ sf_showFotaUpdateResult(true);
+ } else if (data.upgrade_result == "fail") {
+ sf_showFotaUpdateResult(false);
+ } else {
+ window.setTimeout(checkFotaUpgradeResult, 1000);
+ }
+ }, function () {
+ window.setTimeout(checkFotaUpgradeResult, 1000);
+ });
+ } else {
+ window.setTimeout(checkFotaUpgradeResult, 1000);
+ }
+ };
+ if(fwVm.updateType() == "mifi_fota"){
+ checkFotaUpgradeResult();
+ window.setInterval(function () {
+ var info = getCurrentStatusInfo();
+ if (info.isLoggedIn && info.defaultWanName != "") {
+ if(info.new_version_state && info.fota_package_already_download != "yes" && !config.ALREADY_NOTICE){
+ service.getUpgradeResult({}, function (data) {
+ if (data.upgrade_result == "success") {
+ sf_showFotaUpdateResult(true);
+ } else if (data.upgrade_result == "fail") {
+ sf_showFotaUpdateResult(false);
+ } else {
+ if(sv_fotaResultAlertPopuped == false){
+ config.ALREADY_NOTICE = true;
+ showOTAAlert();
+ }
+ }
+ });
+ }
+ }
+ }, 1000);
+ }
+ function checkSMSCapacity(unreadCount){
+ service.getSmsCapability({}, function(info){
+ var showSmsConfirm = false;
+ if(info.nvTotal != 0 && info.nvUsed >= info.nvTotal){
+ $("#sms_unread_count").attr("tipTitle", "sms_capacity_is_full");
+ showSmsConfirm = true;
+ } else if(info.nvTotal != 0 && info.nvUsed + 5 >= info.nvTotal) {
+ $("#sms_unread_count").attr("tipTitle", "sms_capacity_will_full");
+ showSmsConfirm = true;
+ } else {
+ $("#sms_unread_count").attr("tipTitle", "sms_unread_count");
+ }
+ fwVm.showSmsDeleteConfirm(showSmsConfirm);
+ if(typeof unreadCount != "undefined"){
+ fwVm.smsUnreadCount(unreadCount);
+ }
+ sv__hasCheckedSMSCapacity = true;
+ });
+ }
+ }, 1200);
+
+ tooltip.init();
+
+ // ����Ϣģ���ʼ��״̬
+ function checkSmsModelReady(){
+ var info = getCurrentStatusInfo();
+ if(info.isLoggedIn){
+ service.getSMSReady({}, function (data) {
+ if (data.sms_cmd_status_result == "1") {
+ window.setTimeout(function(){checkSmsModelReady();}, 1000);
+ } else {
+ sv__initSMSCompleted = true;
+ }
+ });
+ } else {
+ window.setTimeout(function(){checkSmsModelReady();}, 1000);
+ }
+ }
+
+ // ����������״̬
+ checkTrafficLimitAlert = function(fwVm, info){
+ if(window.location.hash == '#entry'){
+ return false;
+ }
+ var APStationEnabled = config.AP_STATION_SUPPORT ? service.getStatusInfo().ap_station_enable : 'undefined';
+ var trafficResult = getTrafficResult(info);
+ var inShow = $("#confirm-container:visible").length > 0;
+ // var notPPP = (config.PRODUCT_TYPE == 'CPE' && checkCableMode(info.blc_wan_mode)) ? true : false;
+ var notPPP = false;
+
+ // ��ȡAp Stationʹ��״̬���������ѷ�ʽ
+ if (config.AP_STATION_SUPPORT && (typeof APStationEnabled == "undefined" || APStationEnabled === '')) {
+ service.refreshAPStationStatus({}, $.noop());
+ return false;
+ }
+ APStationEnabled = APStationEnabled == 1;
+
+ if (!info.isLoggedIn || inShow || (sv_trafficAlertPopuped && sv_trafficAlertPopuped_100) || !info.limitVolumeEnable || (!APStationEnabled && !(info.connectStatus == "ppp_connected")) || notPPP) {
+ return false;
+ }
+
+ if(sv_resetTrafficAlertPopuped){
+ window.setTimeout(function () {
+ sv_resetTrafficAlertPopuped = false;
+ }, 2000);
+ return false;
+ }
+
+ if(trafficResult.showConfirm){
+
+ var confirmMessage = null;
+
+ if(trafficResult.usedPercent > 100 && !sv_trafficAlertPopuped_100){
+
+ sv_trafficAlertPopuped = true;
+ sv_trafficAlertPopuped_100 = true;
+
+ confirmMessage = {msg: APStationEnabled ? 'traffic_beyond_msg' : 'traffic_beyond_disconnect_msg'};
+
+ } else if (!sv_trafficAlertPopuped) {
+
+ sv_trafficAlertPopuped = true;
+ sv_trafficAlertPopuped_100 = false;
+ confirmMessage = {msg: APStationEnabled ? 'traffic_limit_msg' : 'traffic_limit_disconnect_msg',
+ params: [trafficResult.limitPercent]};
+ }
+
+ if (confirmMessage != null) {
+ if (APStationEnabled) {
+ showAlert(confirmMessage);
+ } else {
+ showConfirm(confirmMessage, function () {
+ showLoading("disconnecting");
+ service.disconnect({}, function (data) {
+ if (data.result) {
+ successOverlay();
+ } else {
+ errorOverlay();
+ }
+ });
+ });
+ }
+ }
+ }
+ return true;
+ };
+
+ // ����״̬�е�tooltip
+ function updateStatusBarTrans(status){
+ $("#statusItemSimStatus").attr("tipTitle", "sim_status_" + status.simStatus);
+ if (status.wifiStatus) {
+ if (status.deviceSize == 0) {
+ $("#wifi_status").attr("tipTitle","wifi_status_on");
+ } else {
+ $("#wifi_status").attr("tipTitle","wifi_status" + status.deviceSize);
+ }
+ } else {
+ $("#wifi_status").attr("tipTitle","wifi_status_off");
+ }
+ }
+
+
+ // ˢ��wifi��������״̬
+ function refreshWifiConnectStatus(fwVm, status, wifiSSID, wifiStatus) {
+ fwVm.connectStatus(status);
+ if (status == "ppp_disconnecting") {
+ fwVm.connectStatusTrans("disconnecting");
+ fwVm.connectStatusText($.i18n.prop("disconnecting"));
+ } else if (status == "ppp_connecting") {
+ fwVm.connectStatusTrans("connecting");
+ fwVm.connectStatusText($.i18n.prop("connecting"));
+ } else if (status == "ppp_connected") {
+ fwVm.connectStatusTrans("connected");
+ fwVm.connectStatusText($.i18n.prop("connected"));
+ } else if(wifiSSID){
+ if(wifiStatus =="dhcping" || wifiStatus =="connecting"){
+ fwVm.connectStatus("wifi_connecting");
+ fwVm.connectStatusTrans("connecting");
+ fwVm.connectStatusText($.i18n.prop("connecting"));
+ }else if(wifiStatus =="connect"){
+ fwVm.connectStatus("wifi_connect");
+ fwVm.connectStatusTrans("connected");
+ fwVm.connectStatusText($.i18n.prop("connected"));
+ }else{
+ fwVm.connectStatus("ppp_disconnected");
+ fwVm.connectStatusTrans("disconnected");
+ fwVm.connectStatusText($.i18n.prop("disconnected"));
+ }
+ }else{
+ fwVm.connectStatusTrans("disconnected");
+ fwVm.connectStatusText($.i18n.prop("disconnected"));
+ }
+ }
+
+ // ��ȡ��ǰ����״̬
+ getNetworkType = function(networkType) {
+ var networkTypeTmp = networkType.toLowerCase();
+ if (networkTypeTmp == '' || networkTypeTmp == 'limited service') {
+ networkTypeTmp = 'limited_service';
+ }
+ if(networkTypeTmp == 'no service') {
+ networkTypeTmp = 'no_service';
+ }
+ if (networkTypeTmp == 'limited_service' || networkTypeTmp == 'no_service') {
+ $("#networkType", "#statusBar").attr("data-trans", "network_type_" + networkTypeTmp);
+ return $.i18n.prop("network_type_" + networkTypeTmp);
+ } else {
+ $("#networkType", "#statusBar").removeAttr("data-trans");
+ return networkType;
+ }
+ };
+
+ if(config.HAS_SMS && menu.checkIsMenuExist("sms_list")){
+ window.setInterval(function () {
+ var info = getCurrentStatusInfo();
+ if(window.location.hash == "#entry" || sf_simStatusInvalid(info.simStatus)){
+ return;
+ }
+ for(key in sv_messagePopStack){
+ var val = sv_messagePopStack[key];
+ if($.now() - val > 5000){
+ delete(sv_messagePopStack["m" + val]);
+ var node = $(".bubbleItem#m" + val, "#buttom-bubble");
+ node.fadeOut(1000, function(){
+ $(this).remove();
+ });
+ }
+ }
+ if(info.isLoggedIn){
+ if(info.newSmsReceived && !sv_newSMSMessageInDealing){
+ sv_newSMSMessageInDealing = true;
+ service.resetNewSmsReceivedVar();
+ sf_checkNewMessages();
+ }
+ if(info.smsReportReceived){
+ service.resetSmsReportReceivedVar();
+ sf_responseSmsReport();
+ }
+ }
+ }, 1000);
+
+ if(config.SMS_DATABASE_SORT_SUPPORT){
+ window.setInterval(function(){
+ if(menu.checkIsMenuExist("sms_list")){
+ var info = getCurrentStatusInfo();
+ if(info.isLoggedIn && sv__initSMSCompleted && !sv_newSMSMessageInDealing && !sf_simStatusInvalid(info.simStatus)){
+ sv_newSMSMessageInDealing = true;
+ sf_checkNewMessages();
+ }
+ }
+ }, 20001);
+ }
+ }
+
+ function sf_checkNewMessages(){
+
+ var s_tags = 1;
+ var s_smsCount = 5;
+
+ if(!config.dbMsgs || config.dbMsgs.length == 0){
+ s_smsCount = 500;
+ s_tags = 10;
+ }
+ service.getSMSMessages({
+ page : 0,
+ smsCount : s_smsCount,
+ nMessageStoreType : 0,
+ tags : s_tags,
+ orderBy : "order by id desc"
+ }, function(data){
+ if(data && data.messages){
+ sf_filterNewMessage(data.messages, 0);
+ }
+ sv_newSMSMessageInDealing = false;
+ });
+ service.getSMSMessages({
+ page : 0,
+ smsCount : s_smsCount,
+ nMessageStoreType : 1,
+ tags : s_tags,
+ orderBy : "order by id desc"
+ }, function(data){
+ if(data && data.messages){
+ sf_filterNewMessage(data.messages, 1);
+ }
+ sv_newSMSMessageInDealing = false;
+ });
+ }
+
+ if(config.HAS_SMS){
+ $(".bubbleItem", "#buttom-bubble").live("mouseover", function(){
+ var $this = $(this);
+ delete(sv_messagePopStack[$this.attr("id")]);
+ }).live("mouseout", function(){
+ var $this = $(this);
+ var now = $.now();
+ sv_messagePopStack["m" + now] = now;
+ $this.attr("id", "m" + now);
+ $(".bubbleItem h3 a.bubbleCloseBtn", "#buttom-bubble").data("targetid", "m" + now);
+ });
+
+ $(".bubbleItem h3 a.bubbleCloseBtn", "#buttom-bubble").die().live("click", function(){
+ var id = $(this).data("targetid");
+ delete(sv_messagePopStack[id]);
+ var node = $(".bubbleItem#" + id, "#buttom-bubble");
+ node.fadeOut(1000, function(){
+ $(this).remove();
+ });
+ });
+ }
+ }
+
+
+ return {
+ init:init,
+ setTrafficAlertPopuped: setTrafficAlertPopuped,
+ setTrafficAlert100Popuped: setTrafficAlert100Popuped,
+ getTrafficResult: getTrafficResult,
+ showOTAAlert:showOTAAlert
+ };
+});
+
+// ����ͳ������ģ��
+define("status_traffic_alert","jquery knockout service statusBar echarts".split(" "),
+
+ function ($, ko, service, status, echarts) {
+
+ var sv_trafficGraph = null;
+ var sv_sourceData = null;
+ var sv_usedDataModified = false;
+ var sv_usedTimeModified = false;
+
+ var sv_trafficStaticalInfo = {
+ // ����ͼ��ʼֵ
+ data: {
+ alarm: {
+
+ itemStyle: {
+ normal: {
+ color: '#8CC916'
+ }
+ },
+ name: '������',
+ value: 19.7
+ },
+ alert: {
+
+ itemStyle: {
+ normal: {
+ color: '#FF5500'
+ }
+ },
+ name: '����ֵ',
+ value: 1
+ },
+ free: {
+
+ itemStyle: {
+ normal: {
+ color: '#D8D8D8'
+ }
+ },
+ name: 'δʹ��',
+ value: 50
+ },
+ full: {
+
+
+ itemStyle: {
+ normal: {
+ color: '#DF4313'
+ }
+ },
+ name: '��������',
+ value: 30
+ },
+ left1: {
+
+ itemStyle: {
+ normal: {
+ color: '#D8D8D8'
+ }
+ },
+ name: '����ֵ��δʹ��',
+ value: 50,
+ },
+ start: {
+
+ itemStyle: {
+ normal: {
+ color: '#D8D8D8'
+ }
+ },
+ name: '����ֵ��δʹ��',
+ value: 50
+ },
+ used: {
+
+ itemStyle: {
+ normal: {
+ color: '#8CC916'
+ }
+ },
+ name: '��ʹ��',
+ value: 30
+ }
+ },
+ cacheEle: {},
+ // Ԫ�ػ�ȡ
+ getEle: function (i_elementId) {
+ if (this.cacheEle.hasOwnProperty('id')) {
+ return this.cacheEle[i_elementId];
+ } else {
+ this.cacheEle[i_elementId] = $("#" + i_elementId);
+ return this.cacheEle[i_elementId];
+ }
+ },
+ // ��ȡ�����澯״ֵ̬
+ fetchTrafficAlertInfo: function(){
+ sv_sourceData = getTrafficAlertInfo();
+ return sv_sourceData;
+ },
+ // ��ȡ����ֵ�Ͷ�Ӧ��λֵ
+ getTrafficStatisticalDatalnfo: function (i_valueInfo) {
+ return {
+ data: /\d+(.\d+)?/.exec(i_valueInfo)[0],
+ unit: /[A-Z]{1,2}/.exec(i_valueInfo)[0]
+ }
+ },
+
+ // ��ȡʱ��ʱ���֡���
+ getTrafficTimeHours: function (i_time) {
+ var s_timeArray = i_time.split(':');
+ return {
+ h: parseInt(s_timeArray[0], 10),
+ m: parseInt(s_timeArray[1], 10),
+ s: parseInt(s_timeArray[2], 10)
+ }
+ },
+ // ��ȡͳ��ʱ��Ͷ�Ӧ��λֵ
+ getTrafficTimeInfo: function (i_valueInfo) {
+ return {
+ data: /\d+(.\d+)?/.exec(i_valueInfo)[0],
+ unit: /[a-z]{4,6}/.exec(i_valueInfo)[0]
+ }
+ },
+ // ʱ�任���S
+ getTrafficTimeToSeconds: function (i_time) {
+ var s_FormattedTime = this.getTrafficTimeHours(i_time);
+ return s_FormattedTime.h * 3600 + s_FormattedTime.m * 60 + s_FormattedTime.s;
+ },
+ // ͨ�����ƻ�ȡ������λ
+ getTrafficUnitByScale: function (i_scale) {
+ if (i_scale == '1024') {
+ return 'GB';
+ } else if (i_scale == '1048576') {
+ return 'TB';
+ } else {
+ return 'MB';
+ }
+ },
+ // ��λ��Ӧֵ��ȡ
+ getTrafficValueByStatisticalUnit: function (i_unit) {
+ i_unit = i_unit.toLowerCase();
+ if(i_unit == 'minute'){
+ return '60';
+ } else if (i_unit == 'gb') {
+ return '1024';
+ } else if(i_unit == 'hour'){
+ return '3600';
+ } else if (i_unit == 'tb') {
+ return '1048576';
+ } else {
+ return '1';
+ }
+ },
+
+ // �������Ƿ�ɱ༭
+ isFormEditable: function (fwVm) {
+ var s_dataPageEditState = fwVm.dataLimitTypeChecked() == '1' && (fwVm.viewEditUsedData() || fwVm.viewEditAlertData() || fwVm.viewEditTotalData());
+ var s_timePageEditState = fwVm.dataLimitTypeChecked() == '0' && (fwVm.viewEditUsedTime() || fwVm.viewEditAlertTime() || fwVm.viewEditTotalTime());
+ if (s_dataPageEditState || s_timePageEditState) {
+ $('.border-color-transition:visible').addClass('attention-focus');
+ addTimeout(function () {
+ $('.border-color-transition:visible').removeClass('attention-focus');
+ }, 1500);
+ return true;
+ } else {
+ var s_result = false;
+ if (fwVm.dataLimitTypeChecked() == 1) {
+ if (fwVm.alertDataReach() == '0') {
+ fwVm.editAlertDataHandler();
+ s_result = true;
+ }
+ if (fwVm.limitDataMonth() == '0') {
+ fwVm.editTotalDataHandler();
+ s_result = true;
+ }
+ } else {
+ if (fwVm.alertTimeReach() == '0') {
+ fwVm.editAlertTimeHandler();
+ s_result = true;
+ }
+ if (fwVm.limitTimeMonth() == '0') {
+ fwVm.editTotalTimeHandler();
+ s_result = true;
+ }
+ }
+
+ if (s_result) {
+ $('.border-color-transition:visible').addClass('attention-focus');
+ addTimeout(function () {
+ $('.border-color-transition:visible').removeClass('attention-focus');
+ }, 1500);
+ }
+ return s_result;
+ }
+ },
+
+ // ˢ������ͼ��Ϣ�����������ֵ����ʾ���
+
+ refreshFlowDiagramInfo: function (fwVm) {
+ var s_alarm = 0;
+ var s_left = 0;
+ var s_left1 = 0;
+ var s_reach = 0;
+ var s_total = 0;
+ var s_used = 0;
+
+
+ var s_startName = $.i18n.prop("echarts_no");
+
+ if (sv_sourceData.dataLimitChecked == '1') { //if (fwVm.dataLimitChecked() == '1') { //����
+ s_startName = $.i18n.prop("echarts_used");
+ sv_trafficGraphOptions.series[0].data = [];
+
+ if (fwVm.dataLimitTypeChecked() == '1') { // ����
+ sv_trafficGraphOptions.title.text = "";
+ sv_trafficGraphOptions.series[0].data = [];
+
+ if (fwVm.limitDataMonth() == 0) {
+ var s_usedData = sv_trafficStaticalInfo.data.used;
+ s_usedData.value = 1;
+ s_usedData.name = $.i18n.prop("echarts_used");
+ s_usedData.selected = false;
+ sv_trafficGraphOptions.series[0].data.push(s_usedData);
+ } else {
+ s_total = fwVm.limitDataMonth() * fwVm.selectedDataUnit() * 1048576;
+ s_used = parseInt(sv_sourceData.monthlySent, 10) + parseInt(sv_sourceData.monthlyReceived, 10);
+ s_reach = s_total * fwVm.alertDataReach() / 100;
+
+ if (s_used >= s_total) {
+ var s_fullData = sv_trafficStaticalInfo.data.full;
+ s_fullData.value = 100;
+ s_fullData.name = $.i18n.prop("echarts_full");
+ sv_trafficGraphOptions.series[0].data.push(s_fullData);
+ s_startName = $.i18n.prop("echarts_full");
+ } else {
+ if (s_reach > s_used) {
+ s_left1 = s_reach - s_used;
+ s_left = s_total - s_reach;
+ } else {
+ s_alarm = s_used - s_reach;
+ s_left = s_total - s_used;
+ }
+
+ var s_usedData = sv_trafficStaticalInfo.data.used;
+ if (s_reach - s_used > 0) {
+ s_usedData.value = s_used;
+ } else {
+ s_usedData.value = s_reach;
+ }
+ s_usedData.name = $.i18n.prop("echarts_used");
+ sv_trafficGraphOptions.series[0].data.push(s_usedData);
+
+ if (s_left1 > 0) {
+ var s_left1Data = sv_trafficStaticalInfo.data.left1;
+ s_left1Data.value = s_left1;
+ s_left1Data.name = $.i18n.prop("echarts_left1");
+ sv_trafficGraphOptions.series[0].data.push(s_left1Data);
+ }
+
+ var s_alertData = sv_trafficStaticalInfo.data.alert;
+ s_alertData.value = s_total / 200;
+ s_alertData.name = $.i18n.prop("echarts_alert");
+ sv_trafficGraphOptions.series[0].data.push(s_alertData);
+
+ if (s_alarm > 0) {
+ var s_alarmData = sv_trafficStaticalInfo.data.alarm;
+ s_alarmData.value = s_alarm;
+ s_alarmData.name = $.i18n.prop("echarts_alarm");
+ sv_trafficGraphOptions.series[0].data.push(s_alarmData);
+ }
+
+ var s_freeData = sv_trafficStaticalInfo.data.free;
+ s_freeData.value = s_left;
+ s_freeData.name = $.i18n.prop("echarts_free");
+ sv_trafficGraphOptions.series[0].data.push(s_freeData);
+ }
+ }
+
+ }else{// ʱ��
+
+ sv_trafficGraphOptions.series[0].data = [];
+
+ if (fwVm.limitTimeMonth() == 0) {
+ var s_usedData = sv_trafficStaticalInfo.data.used;
+ s_usedData.value = 1;
+ s_usedData.selected = false;
+ s_usedData.name = $.i18n.prop("echarts_used");
+ sv_trafficGraphOptions.series[0].data.push(s_usedData);
+ } else {
+ s_total = fwVm.limitTimeMonth() * fwVm.selectedTimeUnit();
+ s_used = sv_sourceData.monthlyConnectedTime;
+ s_reach = s_total * fwVm.alertTimeReach() / 100;
+
+ if (s_used >= s_total) {
+ var fullTime = sv_trafficStaticalInfo.data.full;
+ fullTime.value = 100;
+ fullTime.name = $.i18n.prop("echarts_full");
+ sv_trafficGraphOptions.series[0].data.push(fullTime);
+ s_startName = $.i18n.prop("echarts_full");
+ } else {
+ if (s_reach - s_used > 0) {
+ s_left1 = s_reach - s_used;
+ s_left = s_total - s_reach;
+ } else {
+ s_alarm = s_used - s_reach;
+ s_left = s_total - s_used;
+ }
+
+ var s_usedTime = sv_trafficStaticalInfo.data.used;
+ if (s_reach - s_used > 0) {
+ s_usedTime.value = s_used;
+ } else {
+ s_usedTime.value = s_reach;
+ }
+ s_usedTime.name = $.i18n.prop("echarts_used");
+ sv_trafficGraphOptions.series[0].data.push(s_usedTime);
+
+ if (s_left1 > 0) {
+ var s_left1Time = sv_trafficStaticalInfo.data.left1;
+ s_left1Time.value = s_left1;
+ s_left1Time.name = $.i18n.prop("echarts_left1");
+ sv_trafficGraphOptions.series[0].data.push(s_left1Time);
+ }
+
+ var s_alertTime = sv_trafficStaticalInfo.data.alert;
+ s_alertTime.value = s_total / 200;
+ s_alertTime.name = $.i18n.prop("echarts_alert");
+ sv_trafficGraphOptions.series[0].data.push(s_alertTime);
+
+ if (s_alarm > 0) {
+ var s_alarmTime = sv_trafficStaticalInfo.data.alarm;
+ s_alarmTime.value = s_alarm;
+ s_alarmTime.name = $.i18n.prop("echarts_alarm");
+ sv_trafficGraphOptions.series[0].data.push(s_alarmTime);
+ }
+
+ var s_freeTime = sv_trafficStaticalInfo.data.free;
+ s_freeTime.value = s_left;
+ s_freeTime.name = $.i18n.prop("echarts_free");
+ sv_trafficGraphOptions.series[0].data.push(s_freeTime);
+ }
+ }
+ }
+ } else {
+ var s_usedData = sv_trafficStaticalInfo.data.used;
+ s_usedData.value = 1;
+ s_usedData.selected = false;
+ s_usedData.name = $.i18n.prop("echarts_no");
+
+ sv_trafficGraphOptions.series[0].data = [s_usedData];
+ sv_trafficGraphOptions.title.text = '';
+ }
+ sv_trafficStaticalInfo.setFlowDiagramInfo(sv_trafficGraphOptions, s_startName);
+ },
+
+
+ // �ػ�����ͼ
+ setFlowDiagramInfo: function (i_options, i_startName) {
+ var s_startPart = sv_trafficStaticalInfo.data.start;
+
+ s_startPart.name = i_startName;
+ s_startPart.selected = false;
+ s_startPart.value = 0;
+
+ var s_arr = [s_startPart].concat(i_options.series[0].data);
+ i_options.series[0].data = s_arr;
+ sv_trafficGraph.setOption(i_options, true);
+
+ addTimeout(function () {
+ sv_trafficGraph.resize();
+ }, 1000);
+ }
+ };
+
+
+ // ����ͼ��������
+ var sv_trafficGraphOptions = {
+ animation: false,
+ color: ['red', 'red', 'red', 'red', 'red'],
+ series: [
+ {
+ name: '��������',
+ radius: ['0', '75'],
+ selectedOffset: 3,
+ type: 'pie',
+ data: [
+
+ ],
+ itemStyle: {
+ normal: {
+ labelLine: {
+ show: false
+ },
+ label: {
+ show: false
+ }
+ }
+ }
+ }
+ ],
+ title: {
+ itemGap: 0,
+ text: '',
+ subtextStyle: {
+ color: '#FFF',
+ fontFamily: '���ź�',
+ fontSize: 16,
+ fontWeight: 'bolder'
+ },
+ textStyle: {
+ color: '#FFF',
+ fontFamily: '���ź�',
+ fontSize: 20,
+ fontWeight: 'bolder'
+ },
+ x: 'center',
+ y: 'center'
+ },
+ tooltip: {
+ formatter: "{b}"
+ }
+ };
+
+
+ // ��ȡ������������
+ function getTrafficAlertInfo() {
+ return service.getTrafficAlertInfo();
+ }
+
+
+
+ // ��������ViewModel
+
+ function trafficViewModel() {
+
+ var target = this;
+
+ var info = sv_trafficStaticalInfo.fetchTrafficAlertInfo();
+ var dataMonth = info.limitDataMonth.split("_");
+
+ sv_usedDataModified = false;
+ sv_usedTimeModified = false;
+
+ target.alertDataReach = ko.observable(info.alertDataReach || 0);
+ target.alertTimeReach = ko.observable(info.alertTimeReach || 0);
+ target.dataLimitChecked = ko.observable(info.dataLimitChecked == '0' ? '0' : '1');
+ target.dataLimitTypeChecked = ko.observable(info.dataLimitTypeChecked == '0' ? '0' : '1');
+ target.limitTimeMonth = ko.observable(info.limitTimeMonth || 0);
+
+
+ // ע��˳��
+ target.usedDataText = ko.observable(transUnit(parseInt(info.monthlySent, 10) + parseInt(info.monthlyReceived, 10), false));
+ var sv_staticalDataInfo = sv_trafficStaticalInfo.getTrafficStatisticalDatalnfo(target.usedDataText());
+ var sv_staticalInfoData = sv_staticalDataInfo.data;
+ target.dataUsed = ko.observable(sv_staticalInfoData);
+ var sv_staticalInfoUnit = sv_staticalDataInfo.unit;
+ target.selectedDataUsedUnit = ko.observable(sv_trafficStaticalInfo.getTrafficValueByStatisticalUnit(sv_staticalInfoUnit));
+ target.usedDataTextDescData = ko.observable("");
+
+ target.limitDataMonth = ko.observable(dataMonth[0] || 0);
+ target.selectedDataUnit = ko.observable(dataMonth[1] || 1);
+
+ var limitDataMonthTmp = transUnit(target.limitDataMonth() * target.selectedDataUnit() * 1024 * 1024, false);
+ var limitDataMonthUnitTmp = limitDataMonthTmp.substring(limitDataMonthTmp.length-2);
+ target.limitDataMonth(limitDataMonthTmp.substring(0, limitDataMonthTmp.length-2));
+ target.selectedDataUnit(sv_trafficStaticalInfo.getTrafficValueByStatisticalUnit(limitDataMonthUnitTmp));
+
+ target.usedDataTextDesc = ko.computed(sf_usedDataTextDesc);
+ target.limitDataMonthDescData = ko.observable("");
+ target.limitDataMonthDesc = ko.computed(sf_limitDataMonthDesc);
+ target.alertDataReachDescData = ko.observable("");
+ target.alertDataReachDesc = ko.computed(sf_alertDataReachDesc);
+ target.leftDataDescData = ko.observable("");
+ target.leftDataDesc = ko.computed(sf_leftDataDesc);
+ target.monthlyConnectedTime = ko.observable(transSecond2Time(info.monthlyConnectedTime));
+
+ var sv_timeInfo1 = sv_trafficStaticalInfo.getTrafficTimeInfo(transTimeUnit(info.monthlyConnectedTime));
+ target.usedTime = ko.observable(sv_timeInfo1.data);
+ target.selectedTimeUsedUnit = ko.observable(sv_trafficStaticalInfo.getTrafficValueByStatisticalUnit(sv_timeInfo1.unit));
+
+ target.usedTimeTextDescData = ko.observable("");
+ target.usedTimeTextDesc = ko.computed(sf_usedTimeTextDesc);
+
+ var sv_timeInfoNew = sv_trafficStaticalInfo.getTrafficTimeInfo(transTimeUnit(parseFloat(target.limitTimeMonth()) * 3600));
+ target.selectedTimeUnit = ko.observable(sv_trafficStaticalInfo.getTrafficValueByStatisticalUnit(sv_timeInfoNew.unit));
+ target.limitTimeMonth(sv_timeInfoNew.data);
+
+
+ target.limitTimeMonthDescData = ko.observable("");
+ target.limitTimeMonthDescText = ko.observable("traffic_limit_time_h");
+ target.limitTimeMonthDesc = ko.computed(sf_limitTimeMonthDesc);
+ target.alertTimeReachDescData = ko.observable("");
+ target.alertTimeReachDesc = ko.computed(sf_alertTimeReachDesc);
+ target.leftTimeDescData = ko.observable("");
+ target.leftTimeDesc = ko.computed(sf_leftTimeDesc);
+ target.save = sf_save;
+ target.viewEditUsedData = ko.observable(false);
+ target.editUsedDataHandler = sf_editUsedDataHandler;
+ target.editUsedDataSaveHandler = sf_editUsedDataSaveHandler;
+ target.saveUsedData = sf_saveUsedData;
+ target.editUsedDataCancelHandler = sf_editUsedDataCancelHandler;
+ target.viewEditTotalData = ko.observable(false);
+ target.editTotalDataHandler = sf_editTotalDataHandler;
+ target.editTotalDataSaveHandler = sf_editTotalDataSaveHandler;
+ target.editTotalDataCancelHandler = sf_editTotalDataCancelHandler;
+ target.viewEditAlertData = ko.observable(false);
+ target.editAlertDataHandler = sf_editAlertDataHandler;
+ target.editAlertDataSaveHandler = sf_editAlertDataSaveHandler;
+ target.editAlertDataCancelHandler = sf_editAlertDataCancelHandler;
+ target.viewEditUsedTime = ko.observable(false);
+ target.editUsedTimeHandler = sf_editUsedTimeHandler;
+ target.saveUsedTime = sf_saveUsedTime;
+ target.editUsedTimeSaveHandler = sf_editUsedTimeSaveHandler;
+ target.editUsedTimeCancelHandler = sf_editUsedTimeCancelHandler;
+ target.viewEditTotalTime = ko.observable(false);
+ target.editTotalTimeHandler = sf_editTotalTimeHandler ;
+ target.editTotalTimeSaveHandler = sf_editTotalTimeSaveHandler;
+ target.editTotalTimeCancelHandler = sf_editTotalTimeCancelHandler;
+ target.viewEditAlertTime = ko.observable(false);
+ target.editAlertTimeHandler = sf_editAlertTimeHandler;
+ target.editAlertTimeSaveHandler = sf_editAlertTimeSaveHandler;
+ target.editAlertTimeCancelHandler = sf_editAlertTimeCancelHandler;
+ sv_trafficStaticalInfo.refreshFlowDiagramInfo(target);
+
+
+ // ��������������
+ function sf_alertDataReachDesc() {
+ if(isNaN(target.limitDataMonth() * target.selectedDataUnit() * target.alertDataReach())) {
+ target.alertDataReachDescData(target.alertDataReach() + ', ');
+ return $.i18n.prop('traffic_alert_reach_text', target.alertDataReach(), ' ');
+ }
+
+ var s_value = transUnit(target.limitDataMonth() * target.selectedDataUnit() * target.alertDataReach() * 1048576 / 100, false);
+ target.alertDataReachDescData(target.alertDataReach() + ',' + s_value);
+ return $.i18n.prop('traffic_alert_reach_text', target.alertDataReach(), s_value);
+ }
+ // ʱ������������
+ function sf_alertTimeReachDesc() {
+ if(isNaN(target.limitTimeMonth() * target.alertTimeReach())) {
+ target.alertTimeReachDescData(target.alertTimeReach() + ', ');
+ return $.i18n.prop('traffic_alert_reach_text', target.alertTimeReach(), ' ');
+ }
+ var s_value = transSecond2Time(target.limitTimeMonth() * target.selectedTimeUnit() * target.alertTimeReach() / 100);
+ target.alertTimeReachDescData(target.alertTimeReach() + ',' + s_value);
+ return $.i18n.prop('traffic_alert_reach_text', target.alertTimeReach(), s_value);
+ }
+
+
+ // ��������ֵȡ���༭��ť�¼�
+ function sf_editAlertDataCancelHandler() {
+ target.alertDataReach(sv_trafficStaticalInfo.getEle('editAlertData').data('oldValue'));
+ target.viewEditAlertData(false);
+ }
+
+ // ��������ֵ�༭��ť�¼�
+ function sf_editAlertDataHandler() {
+ sv_trafficStaticalInfo.getEle('editAlertData').data('oldValue', target.alertDataReach());
+ target.viewEditAlertData(true);
+ }
+
+ // ��������ֵ����༭��ť�¼�
+ function sf_editAlertDataSaveHandler() {
+ if (sv_trafficStaticalInfo.getEle('alertDataReach').valid()) {
+ target.viewEditAlertData(false);
+ }
+ }
+
+ // ʱ������ֵȡ���༭��ť�¼�
+ function sf_editAlertTimeCancelHandler() {
+ target.alertTimeReach(sv_trafficStaticalInfo.getEle('editAlertTime').data('oldValue'));
+ target.viewEditAlertTime(false);
+ }
+ // ʱ������ֵ�༭��ť�¼�
+ function sf_editAlertTimeHandler() {
+ sv_trafficStaticalInfo.getEle('editAlertTime').data('oldValue', target.alertTimeReach());
+ target.viewEditAlertTime(true);
+ }
+ // ʱ������ֵ����༭��ť�¼�
+ function sf_editAlertTimeSaveHandler() {
+ if (sv_trafficStaticalInfo.getEle('alertTimeReach').valid()) {
+ target.viewEditAlertTime(false);
+ }
+ }
+
+ // �ײ������༭��ť�¼�
+ function sf_editTotalDataHandler() {
+ sv_trafficStaticalInfo.getEle('editTotalData').data('oldValue', target.limitDataMonth());
+ sv_trafficStaticalInfo.getEle('selectedDataUnit').data('oldValue', target.selectedDataUnit());
+ target.viewEditTotalData(true);
+ }
+
+ // �ײ���������༭��ť�¼�
+ function sf_editTotalDataSaveHandler() {
+ if (sv_trafficStaticalInfo.getEle('limitDataMonth').valid()) {
+ target.usedDataText(transUnit(target.limitDataMonth() * target.selectedDataUnit() * 1048576, false));
+ target.viewEditTotalData(false);
+ }
+ }
+
+ // �ײ�����ȡ���༭��ť�¼�
+ function sf_editTotalDataCancelHandler() {
+ target.limitDataMonth(sv_trafficStaticalInfo.getEle('editTotalData').data('oldValue'));
+ target.selectedDataUnit(sv_trafficStaticalInfo.getEle('selectedDataUnit').data('oldValue'));
+ target.viewEditTotalData(false);
+ }
+ // �ײ�ʱ��ȡ���༭��ť�¼�
+ function sf_editTotalTimeCancelHandler() {
+ target.limitTimeMonth(sv_trafficStaticalInfo.getEle('editTotalTime').data('oldValue'));
+ target.viewEditTotalTime(false);
+ }
+ // �ײ�ʱ��༭��ť�¼�
+ function sf_editTotalTimeHandler() {
+ sv_trafficStaticalInfo.getEle('editTotalTime').data('oldValue', target.limitTimeMonth());
+ target.viewEditTotalTime(true);
+ }
+ // �ײ�ʱ�䱣��༭��ť�¼�
+ function sf_editTotalTimeSaveHandler() {
+ if (sv_trafficStaticalInfo.getEle('limitTimeMonth').valid()) {
+ target.viewEditTotalTime(false);
+ }
+ }
+
+ // ��������ȡ���༭��ť�¼�
+ function sf_editUsedDataCancelHandler() {
+ target.dataUsed(sv_trafficStaticalInfo.getEle('editUsedData').data('oldValue'));
+ target.selectedDataUsedUnit(sv_trafficStaticalInfo.getEle('selectedDataUsedUnit').data('oldValue'));
+ sv_trafficStaticalInfo.getEle('editUsedDataCancel').siblings('label.error').hide();
+ target.viewEditUsedData(false);
+ }
+ // ���������༭��ť�¼�
+ function sf_editUsedDataHandler() {
+ sv_trafficStaticalInfo.getEle('editUsedData').data('oldValue', target.dataUsed());
+ sv_trafficStaticalInfo.getEle('selectedDataUsedUnit').data('oldValue', target.selectedDataUsedUnit());
+ target.dataUsed(target.dataUsed());
+ target.viewEditUsedData(true);
+ }
+ // �����������水ť�¼�
+ function sf_editUsedDataSaveHandler() {
+ if (sv_trafficStaticalInfo.getEle('dataUsed').valid()) {
+ sv_usedDataModified = true;
+ target.viewEditUsedData(false);
+ }
+ }
+ // ����ʱ��ȡ���༭��ť�¼�
+ function sf_editUsedTimeCancelHandler() {
+ target.usedTime(sv_trafficStaticalInfo.getEle('editUsedTime').data('oldValue'));
+ target.viewEditUsedTime(false);
+ }
+ // ����ʱ��༭��ť�¼�
+ function sf_editUsedTimeHandler() {
+ sv_trafficStaticalInfo.getEle('editUsedTime').data('oldValue', target.usedTime());
+ target.viewEditUsedTime(true);
+ }
+
+ // ����ʱ�䱣��༭��ť�¼�
+ function sf_editUsedTimeSaveHandler() {
+ if (sv_trafficStaticalInfo.getEle('usedTime').valid()) {
+ target.monthlyConnectedTime(transSecond2Time(parseFloat(target.usedTime()) * target.selectedTimeUsedUnit()));
+ target.viewEditUsedTime(false);
+ sv_usedTimeModified = true;
+ }
+ }
+
+ // ʣ������������
+ function sf_leftDataDesc() {
+ var s_left = (target.limitDataMonth() * target.selectedDataUnit() - target.dataUsed() * target.selectedDataUsedUnit()) * 1048576;
+ if(s_left < 0) {
+ s_left = 0;
+ }
+
+ if(isNaN(s_left)) {
+ target.leftDataDescData('');
+ return $.i18n.prop('traffic_data_left_text', ' ');
+ }
+
+ target.leftDataDescData(transUnit(s_left, false));
+ return $.i18n.prop('traffic_data_left_text', transUnit(s_left, false));
+ }
+ //ʣ��ʱ��������
+ function sf_leftTimeDesc() {
+ var s_surplus = target.limitTimeMonth() * target.selectedTimeUnit() - sv_trafficStaticalInfo.getTrafficTimeToSeconds(target.monthlyConnectedTime());
+ if(s_surplus < 0) {
+ s_surplus = 0;
+ }
+
+ if(isNaN(s_surplus)) {
+ target.leftTimeDescData(' ');
+ return $.i18n.prop('traffic_data_left_text', ' ');
+ }
+ target.leftTimeDescData(transSecond2Time(s_surplus));
+ return $.i18n.prop('traffic_data_left_text', transSecond2Time(s_surplus));
+ }
+ // �ײ�����������
+ function sf_limitDataMonthDesc() {
+ if(isNaN(target.limitDataMonth())) {
+ target.limitDataMonthDescData("");
+ return $.i18n.prop('traffic_limit_data_text', ' ');
+ }else{
+ // todo
+ }
+
+ target.limitDataMonthDescData(target.limitDataMonth() + sv_trafficStaticalInfo.getTrafficUnitByScale(target.selectedDataUnit()));
+ return $.i18n.prop('traffic_limit_data_text', target.limitDataMonth() + sv_trafficStaticalInfo.getTrafficUnitByScale(target.selectedDataUnit()));
+ }
+ // �ײ�ʱ��������
+ function sf_limitTimeMonthDesc() {
+ if(isNaN(target.limitTimeMonth())) {
+ target.limitTimeMonthDescData(' ');
+ target.limitTimeMonthDescText('traffic_limit_time_h');
+ return $.i18n.prop('traffic_limit_time_h', ' ');
+ }else{
+ // todo:
+ }
+
+ target.limitTimeMonthDescData(target.limitTimeMonth());
+
+ if(target.selectedTimeUnit() == "60"){
+ target.limitTimeMonthDescText('traffic_limit_time_m');
+ return $.i18n.prop('traffic_limit_time_m', target.limitTimeMonth());
+ }else{
+ target.limitTimeMonthDescText('traffic_limit_time_h');
+ return $.i18n.prop('traffic_limit_time_h', target.limitTimeMonth());
+ }
+ }
+
+ // Ӧ�ð�ť�¼�
+ function sf_save() {
+ if (sv_trafficStaticalInfo.isFormEditable(target) && target.dataLimitChecked() == '1') {
+ return false;
+ }
+
+ if (target.selectedDataUnit() == '1' && target.selectedDataUsedUnit() == '1048576' && target.dataLimitTypeChecked() == "1" && target.dataLimitChecked() == '1' && !(parseInt(target.dataUsed(), 10) < parseInt('4096', 10)) ) {
+ showAlert('traffic_over_note');
+ return false;
+ }
+
+ showLoading();
+ service.setTrafficAlertInfo({
+ alertDataReach: parseInt(target.alertDataReach(), 10),
+ alertTimeReach: parseInt(target.alertTimeReach(), 10),
+ dataLimitChecked: target.dataLimitChecked(),
+ dataLimitTypeChecked: target.dataLimitTypeChecked(),
+ limitDataMonth: target.limitDataMonth() + "_" + target.selectedDataUnit(),
+ limitTimeMonth: target.selectedTimeUnit() == "60" ? target.limitTimeMonth()/60 : target.limitTimeMonth()//save by hours
+ }, function (data) {
+ if (data.result == 'success') {
+ if(target.dataLimitTypeChecked() == "1" && sv_usedDataModified) {
+ target.saveUsedData();
+ } else if(target.dataLimitTypeChecked() == "0" && sv_usedTimeModified) {
+ target.saveUsedTime();
+ } else {
+ sv_trafficStaticalInfo.fetchTrafficAlertInfo();
+ sv_trafficStaticalInfo.refreshFlowDiagramInfo(target);
+ status.setTrafficAlertPopuped(false);
+ successOverlay();
+ }
+ } else {
+ errorOverlay();
+ }
+ }, function () {
+ sv_trafficStaticalInfo.refreshFlowDiagramInfo(target);
+ errorOverlay();
+ });
+ }
+
+ // ����������������
+ function sf_saveUsedData() {
+ var val = target.dataUsed() * target.selectedDataUsedUnit();
+ service.trafficCalibration({
+ way: 'data',
+ value: val
+ }, function(){
+ sv_trafficStaticalInfo.fetchTrafficAlertInfo();
+ sv_trafficStaticalInfo.refreshFlowDiagramInfo(target);
+ successOverlay();
+ target.viewEditUsedData(false);
+ status.setTrafficAlertPopuped(false);
+ sv_usedDataModified = false;
+ }, function(){
+ sv_trafficStaticalInfo.fetchTrafficAlertInfo();
+ sv_trafficStaticalInfo.refreshFlowDiagramInfo(target);
+ errorOverlay();
+ });
+ }
+
+
+
+ function sf_saveUsedTime() {
+ service.trafficCalibration({
+ way: 'time',
+ value: target.selectedTimeUsedUnit() == "60" ? parseFloat(target.usedTime())/60 : target.usedTime()
+ }, function(){
+ sv_trafficStaticalInfo.fetchTrafficAlertInfo();
+ sv_trafficStaticalInfo.refreshFlowDiagramInfo(target);
+ successOverlay();
+ target.monthlyConnectedTime(transSecond2Time(parseFloat(target.usedTime()) * target.selectedTimeUsedUnit()));
+ target.viewEditUsedTime(false);
+ status.setTrafficAlertPopuped(false);
+ sv_usedTimeModified = false;
+ }, function(){
+ sv_trafficStaticalInfo.fetchTrafficAlertInfo();
+ sv_trafficStaticalInfo.refreshFlowDiagramInfo(target);
+ errorOverlay();
+ });
+ }
+
+
+ // ��������������
+ function sf_usedDataTextDesc() {
+ if(isNaN(target.dataUsed())) {
+ target.usedDataTextDescData("");
+ return $.i18n.prop('traffic_used_text', ' ');
+ }
+ target.usedDataTextDescData(target.dataUsed() + sv_trafficStaticalInfo.getTrafficUnitByScale(target.selectedDataUsedUnit()));
+ return $.i18n.prop('traffic_used_text', target.dataUsed() + sv_trafficStaticalInfo.getTrafficUnitByScale(target.selectedDataUsedUnit()));
+ }
+ // ����ʱ��������
+ function sf_usedTimeTextDesc() {
+ target.usedTimeTextDescData(target.monthlyConnectedTime());
+ return $.i18n.prop('traffic_used_text', target.monthlyConnectedTime());
+ }
+
+
+ }
+
+ function init() {
+ sv_trafficGraph = echarts.init($("#traffic_graphic")[0]);
+ window.onresize = sv_trafficGraph.resize;
+ var s_container = $('#container');
+ ko.cleanNode(s_container[0]);
+ var fwVm = new trafficViewModel();
+ ko.applyBindings(fwVm, s_container[0]);
+ $('#trafficAlertForm').validate({
+ submitHandler: function () {
+ fwVm.save();
+ },
+
+
+ errorPlacement: function (error, para) {
+ if (para.attr("name") == "alertDataReach") {
+ error.insertAfter("#editAlertDataDiv");
+ } else if (para.attr("name") == "alertTimeReach") {
+ error.insertAfter("#editAlertTimeDiv");
+ } else if (para.attr("name") == "dataUsed") {
+ error.insertAfter("#editUsedDataDiv");
+ } else if (para.attr("name") == "limitDataMonth") {
+ error.insertAfter("#editTotalDataDiv");
+ } else if (para.attr("name") == "limitTimeMonth") {
+ error.insertAfter("#editTotalTimeDiv");
+ } else if (para.attr("name") == "usedTime") {
+ error.insertAfter("#editUsedTimeDiv");
+ } else {
+ error.insertAfter(para);
+ }
+ },
+
+ rules: {
+ alertDataReach: {
+ range: [ 1, 100 ],
+ digits: true
+ },
+ alertTimeReach: {
+ range: [ 1, 100 ],
+ digits: true
+ },
+ dataUsed: {
+ range : [ 0, 9999 ],
+ decimalRange : true
+ },
+ limitDataMonth: {
+ range : [ 1, 9999 ],
+ decimalRange : true
+ },
+ limitTimeMonth: {
+ range : [ 1, 9999 ],
+ decimalRange : true
+ },
+ usedTime: {
+ range : [ 0, 9999 ],
+ decimalRange : true
+ }
+ }
+
+ });
+
+ var sv_originalLan = window.language;
+ window.setInterval(function(){
+ if(sv_originalLan != window.language){
+ sv_originalLan = window.language;
+ sv_trafficStaticalInfo.refreshFlowDiagramInfo(fwVm);
+ }
+ }, 1000);
+
+ }
+
+ return {
+ init: init
+ };
+});
+
+// ״̬����ʾ��ʵ��
+define("tooltip",[ "jquery" ],
+
+ function($) {
+
+
+ // ����Ԫ��λ����Ϣ
+ // @method calculatePositionInfo
+ // @param trigger Ԫ��
+ // @param tooltip ״̬��
+ // @param {JSON} config �����
+
+ function calculatePositionInfo(trigger, tooltip, config) {
+ var top = trigger.offset().top;
+ var left = trigger.offset().left;
+ var position = config.position[0];
+ var height = tooltip.outerHeight() + trigger.outerHeight();
+ var width = tooltip.outerWidth() + trigger.outerWidth();
+
+ top -= tooltip.outerHeight() - config.offset[0];
+ left += trigger.outerWidth() + config.offset[1];
+
+ if (/iPad/i.test(navigator.userAgent)) {
+ top -= $(window).scrollTop();
+ }
+
+ if (position == 'center') {
+ top += height / 2;
+ }
+ if (position == 'bottom') {
+ top += height;
+ }
+ position = config.position[1];
+ if (position == 'center') {
+ left -= width / 2;
+ }else if (position == 'left') {
+ left -= width;
+ }
+
+ return {
+ top : top,
+ left : left
+ };
+ }
+
+ // ״̬����ʼ��
+ function init() {
+
+ $(".statusItem", "#statusBar").each(function(i, n){
+ var $this = $(this);
+ $this.attr("tipTitle", $this.attr("title")).removeAttr("title");
+ }).hover(
+ function() {
+ var $this = $(this);
+ var title = $this.attr("tipTitle");
+ var tooltip = $("<div>").addClass("tooltip in").appendTo(document.body).hide()
+ .append($this.attr("i18n") ? $.i18n.prop(title) : title);
+ if ($this.attr("i18n")) {
+ tooltip.attr("data-trans", title).attr("id", "tooltip_" + $this.attr("id"));
+ }
+ var pos = calculatePositionInfo($this, tooltip, {
+ position : [ 'bottom', 'center' ],
+ offset : [ 0, 0 ]
+ });
+ tooltip.css({
+ position : 'absolute',
+ top : pos.top,
+ left : pos.left
+ }).show();
+ }, function() {
+ $(".tooltip").hide().remove();
+ });
+ }
+
+ return {
+ init : init
+ };
+ });
+
+define("menu","set service knockout underscore jquery".split(" "),
+ function (set, fnc, libko, libus, libjq) {
+ var displayMenuWhenLogout = false;
+ var vmMenu;
+ var menu = [];
+ var menuResource = "";
+
+ function menuExistCheck(path) {
+ for (var i = 0; i < menu.length; i++) {
+ if (menu[i].path == path) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ function getIsLoggedin() {
+ var loginStatus = fnc.getLoginStatus();
+ return (loginStatus.status == "loggedIn");
+ }
+
+ function buildNew() {
+ var loggedIn = getIsLoggedin();
+ var menuMain = libus.filter(menu, function (param) {
+ return (param.level == '1' && ((param.requireLogin && loggedIn) || !param.requireLogin) && param.hash != "#entry");
+ });
+ vmMenu.menuMain(menuMain);
+ vmMenu.loggedIn(loggedIn);
+
+ getMainWth(vmMenu.menuMain().length);
+ vmMenu.showMenu(loggedIn || displayMenuWhenLogout);
+ libjq("#nav").translate();
+ }
+
+ function getMainWth(len) {
+ var width = 100 / len;
+ libjq('ul#list-nav li').each(function () {
+ libjq(this).css('width', width + '%');
+ });
+ }
+
+ function menuRefresh() {
+ var currentHash = window.location.hash;
+ var itmRoot = libus.find(menu, function (param) {
+ return param.hash == currentHash;
+ });
+ while (itmRoot.parent) {
+ itmRoot = libus.find(menu, function (param) {
+ return param.hash == itmRoot.parent;
+ });
+ }
+ if (!itmRoot.parent) {
+ libjq("#list-nav li").removeClass("active");
+ var mid = itmRoot.hash.substring(1, itmRoot.hash.length);
+ libjq("#list-nav li[mid=" + mid + "]").addClass("active");
+ }
+ vmMenu.changeMenu(itmRoot);
+ }
+
+ function menuSearch(hashVal) {
+ hashVal = hashVal || window.location.hash;
+ var loggedIn = getIsLoggedin();
+ return libus.filter(menu, function (param) {
+ return (hashVal == param.hash && ((param.requireLogin && loggedIn) || !param.requireLogin));
+ });
+ }
+
+ function menuRenderSub(level, baseItem) {
+ var levelItem = libus.find(menu, function (param) {
+ return param.parent == baseItem.hash && param.path == baseItem.path;
+ });
+ libjq(".menu-" + level + "-level").removeClass("active");
+ if (levelItem) {
+ if (level == "two") {
+ menuRenderSub("three", levelItem);
+ //forward/backward support
+ clickMenuTrig(levelItem.hash, level);
+ }
+ libjq(".menu-" + level + "-level." + levelItem.hash.substring(1)).addClass("active");
+ }
+ }
+
+ function menuActSub() {
+ var currentHash = window.location.hash;
+ var itmRoot = libus.find(menu, function (param) {
+ return param.hash == currentHash;
+ });
+ if (itmRoot.level == 1) {
+ menuRenderSub("two", itmRoot);
+ }
+ if (itmRoot.level == 2) {
+ menuRenderSub("three", itmRoot);
+ //forward/backward support
+ clickMenuTrig(itmRoot.hash, itmRoot.level);
+ }
+ if (itmRoot.level == 3) {
+ //forward/backward support
+ clickMenuTrig(itmRoot.parent, itmRoot.level);
+ libjq(".menu-three-level").removeClass("active");
+ libjq(".menu-three-level." + itmRoot.hash.substring(1)).addClass("active");
+ }
+ }
+
+ function clickMenuTrig(hash, level) {
+ libjqobj = libjq(".menu-two-level." + hash.substring(1));
+ var levelArr = ['3', 'three', '2', 'two'];
+ if (libus.indexOf(levelArr, level) != -1 && libjqobj.hasClass('active')) {
+ return;
+ }
+
+ libjqobj.siblings().removeClass('active');
+ libjqobj.addClass('active');
+
+ libjqobj.siblings().not('.menu-two-level').slideUp();
+ libjqobj.next().has('ul li').slideDown();
+ }
+
+ set.blc_wan_mode = fnc.getOpMode().blc_wan_mode;
+ if (!set.RJ45_SUPPORT) {
+ menuResource = "menu";
+ } else {
+ switch (set.blc_wan_mode) {
+ case "PPPOE":
+ case "AUTO_PPPOE":
+ menuResource = "menu_pppoe";
+ break;
+ default:
+ menuResource = "menu";
+ break;
+ }
+ }
+
+ require([set.DEVICE + '/' + menuResource], function (otherMenu) {
+ menu = otherMenu;
+ if (set.SD_CARD_SUPPORT) {
+ menu = menu.concat([{ hash: '#httpshare_guest', path: 'sd_httpshare', level: '', requireLogin: false, checkSIMStatus: false},
+ { hash: '#sdcard', path: 'sd', level: '', requireLogin: true, checkSIMStatus: false},
+ { hash: '#httpshare', path: 'sd_httpshare', level: '', requireLogin: true, checkSIMStatus: false}]);
+ }
+ });
+
+ function initialize() {
+ vmMenu = new Menu_vm();
+ }
+
+ function Menu_vm() {
+ var loginState = getIsLoggedin();
+ var target = this;
+ target.loggedIn = libko.observable(loginState);
+
+ target.showMenu = libko.observable(loginState || displayMenuWhenLogout);
+
+ var menuMain = libus.filter(menu, function (param) {
+ return (param.level == '1' && ((param.requireLogin && target.loggedIn()) || !param.requireLogin) && param.hash != "#entry");
+ });
+
+ target.menuMain = libko.observableArray(menuMain);
+ target.secondMenu = libko.observableArray([]);
+ //target.curThirdMenu; cov_2
+ target.changeMenu = function (data) {
+ var secondMenu = getSubMenu(data);
+ if (secondMenu.length == 0) {
+ libjq("#container").addClass("fixContainerWidth");
+ } else {
+ libjq("#container").removeClass("fixContainerWidth");
+ }
+
+ target.secondMenu(secondMenu);
+ return true;
+ };
+ target.thirdMenu = function () {
+ return target.curThirdMenu;
+ };
+ target.getThirdMenu = function (data) {
+ target.curThirdMenu = getSubMenu(data);
+ };
+ function getSubMenu(data) {
+ return libus.filter(menu, function (param) {
+ return ((param.parent && param.parent == data.hash) && ((param.requireLogin && target.loggedIn()) || !param.requireLogin));
+ });
+ }
+ }
+
+ return {
+ activeSubMenu: menuActSub,
+ checkIsMenuExist: menuExistCheck,
+ findMenu: menuSearch,
+ rebuild: buildNew,
+ refreshMenu: menuRefresh,
+ init: initialize
+ };
+});
diff --git a/lynq/S300/ap/app/zte_webui/js/ext/menu.js b/lynq/S300/ap/app/zte_webui/js/ext/menu.js
new file mode 100755
index 0000000..4eeb17f
--- /dev/null
+++ b/lynq/S300/ap/app/zte_webui/js/ext/menu.js
@@ -0,0 +1,315 @@
+define(function () {
+ var needLogin = true;
+ var menu = [{
+ hash: '#tr069',
+ path: 'tr069',
+ level: '3',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#more',
+ path: 'adm_others',
+ level: '3',
+ parent: '#local_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#filter_url',
+ path: 'firewall_url_filter',
+ level: '3',
+ parent: '#filter_main',
+ requireLogin: needLogin
+ }, {
+ hash: '#demilitarized_zone',
+ path: 'firewall_dmz_set',
+ level: '3',
+ parent: '#filter_main',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#universal_plug_and_play',
+ path: 'firewall_upnp_set',
+ level: '3',
+ parent: '#filter_main',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#map_port',
+ path: 'firewall_port_map',
+ level: '3',
+ parent: '#filter_main',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#foward_port',
+ path: 'firewall_port_forward',
+ level: '3',
+ parent: '#filter_main',
+ requireLogin: needLogin
+ }, {
+ hash: '#filter_port',
+ path: 'firewall_port_filter',
+ level: '3',
+ parent: '#filter_main',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#wlan_sleep',
+ path: 'wifi_sleep_mode',
+ level: '3',
+ parent: '#local_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#pin_mode',
+ path: 'adm_pin',
+ level: '3',
+ parent: '#local_set',
+ requireLogin: needLogin,
+ checkSIMStatus: true
+ }, {
+ hash: '#pwd_mode',
+ path: 'adm_management',
+ level: '3',
+ parent: '#local_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#filter_mac',
+ path: 'wifi_mac_filter',
+ level: '3',
+ parent: '#wlan_basic',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#wlan_wps',
+ path: 'wifi_wps',
+ level: '3',
+ parent: '#wlan_basic',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#wlan_adv',
+ path: 'wifi_advance',
+ level: '3',
+ parent: '#wlan_basic',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#conn_device',
+ path: 'wifi_station_info',
+ level: '3',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#wlan_guset',
+ path: 'wifi_guest',
+ level: '3',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#wlan_main',
+ path: 'wifi_main',
+ level: '3',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#fota',
+ path: 'ota_update',
+ level: '3',
+ parent: '#local_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#dynamic_dns',
+ path: 'ddns',
+ level: '3',
+ parent: '#local_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#cgdcont_set',
+ path: 'network_apn_set',
+ level: '3',
+ parent: '#network_set',
+ requireLogin: needLogin,
+ checkSIMStatus: true
+ }, {
+ hash: '#network_choose',
+ path: 'network_net_select',
+ level: '3',
+ parent: '#network_set',
+ requireLogin: needLogin,
+ checkSIMStatus: true
+ }, {
+ hash: '#conn_set',
+ path: 'network_dial_set',
+ level: '3',
+ parent: '#network_set',
+ requireLogin: needLogin,
+ checkSIMStatus: true
+ },
+ {
+ hash: '#wlan_station',
+ path: 'wifi_ap_station',
+ level: '2',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#msg_set',
+ path: 'sms_set',
+ level: '2',
+ parent: '#msg_main',
+ requireLogin: needLogin,
+ checkSIMStatus: true
+ }, {
+ hash: '#msg_sim',
+ path: 'sms_sim_messages',
+ level: '2',
+ parent: '#msg_main',
+ requireLogin: needLogin,
+ checkSIMStatus: true
+ }, {
+ hash: '#msg_list',
+ path: 'sms_list',
+ level: '2',
+ parent: '#msg_main',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#flow_ctl',
+ path: 'status_traffic_alert',
+ level: '1',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#pb_work_grp',
+ path: 'phonebook',
+ level: '2',
+ parent: '#pb_main',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#pb_friend_grp',
+ path: 'phonebook',
+ level: '2',
+ parent: '#pb_main',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#pb_family_grp',
+ path: 'phonebook',
+ level: '2',
+ parent: '#pb_main',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#pb_com_grp',
+ path: 'phonebook',
+ level: '2',
+ parent: '#pb_main',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#pb_all_grp',
+ path: 'phonebook',
+ level: '2',
+ parent: '#pb_main',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#usat',
+ path: 'ussd',
+ level: '2',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#route_set',
+ path: 'adm_lan',
+ level: '2',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#filter_main',
+ path: 'firewall',
+ level: '2',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#local_set',
+ path: 'adm_management',
+ level: '2',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#wlan_basic',
+ path: 'wifi_basic',
+ level: '2',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#network_set',
+ path: 'network_dial_set_cpe',
+ level: '2',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#fast_set',
+ path: 'adm_quick_set',
+ level: '2',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: true
+ },
+ {
+ hash: '#child_ctl',
+ path: 'firewall_parental_control',
+ level: '1',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#normal_set',
+ path: 'adm_quick_set',
+ level: '1',
+ requireLogin: needLogin,
+ checkSIMStatus: true
+ }, {
+ hash: '#pb_main',
+ path: 'phonebook',
+ level: '1',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#msg_main',
+ path: 'sms_list',
+ level: '1',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#main',
+ path: 'main',
+ level: '1',
+ requireLogin: needLogin,
+ checkSIMStatus: true
+ }, {
+ hash: '#entry',
+ path: 'entry',
+ level: '1',
+ requireLogin: false,
+ checkSIMStatus: false
+ },
+ ];
+
+ return menu;
+});
diff --git a/lynq/S300/ap/app/zte_webui/js/ext/menu_pppoe.js b/lynq/S300/ap/app/zte_webui/js/ext/menu_pppoe.js
new file mode 100755
index 0000000..b50f29a
--- /dev/null
+++ b/lynq/S300/ap/app/zte_webui/js/ext/menu_pppoe.js
@@ -0,0 +1,315 @@
+define(function () {
+ var needLogin = true;
+ var menu = [{
+ hash: '#tr069',
+ path: 'tr069',
+ level: '3',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#more',
+ path: 'adm_others',
+ level: '3',
+ parent: '#local_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#filter_url',
+ path: 'firewall_url_filter',
+ level: '3',
+ parent: '#filter_main',
+ requireLogin: needLogin
+ }, {
+ hash: '#demilitarized_zone',
+ path: 'firewall_dmz_set',
+ level: '3',
+ parent: '#filter_main',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#universal_plug_and_play',
+ path: 'firewall_upnp_set',
+ level: '3',
+ parent: '#filter_main',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#map_port',
+ path: 'firewall_port_map',
+ level: '3',
+ parent: '#filter_main',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#foward_port',
+ path: 'firewall_port_forward',
+ level: '3',
+ parent: '#filter_main',
+ requireLogin: needLogin
+ }, {
+ hash: '#filter_port',
+ path: 'firewall_port_filter',
+ level: '3',
+ parent: '#filter_main',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#wlan_sleep',
+ path: 'wifi_sleep_mode',
+ level: '3',
+ parent: '#local_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#pin_mode',
+ path: 'adm_pin',
+ level: '3',
+ parent: '#local_set',
+ requireLogin: needLogin,
+ checkSIMStatus: true
+ }, {
+ hash: '#pwd_mode',
+ path: 'adm_management',
+ level: '3',
+ parent: '#local_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#filter_mac',
+ path: 'wifi_mac_filter',
+ level: '3',
+ parent: '#wlan_basic',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#wlan_wps',
+ path: 'wifi_wps',
+ level: '3',
+ parent: '#wlan_basic',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#wlan_adv',
+ path: 'wifi_advance',
+ level: '3',
+ parent: '#wlan_basic',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#conn_device',
+ path: 'wifi_station_info',
+ level: '3',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#wlan_guset',
+ path: 'wifi_guest',
+ level: '3',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#wlan_main',
+ path: 'wifi_main',
+ level: '3',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#fota',
+ path: 'ota_update',
+ level: '3',
+ parent: '#local_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#dynamic_dns',
+ path: 'ddns',
+ level: '3',
+ parent: '#local_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#cgdcont_set',
+ path: 'network_apn_set',
+ level: '3',
+ parent: '#network_set',
+ requireLogin: needLogin,
+ checkSIMStatus: true
+ }, {
+ hash: '#network_choose',
+ path: 'network_net_select',
+ level: '3',
+ parent: '#network_set',
+ requireLogin: needLogin,
+ checkSIMStatus: true
+ }, {
+ hash: '#conn_set',
+ path: 'network_dial_set',
+ level: '3',
+ parent: '#network_set',
+ requireLogin: needLogin,
+ checkSIMStatus: true
+ },
+ {
+ hash: '#wlan_station',
+ path: 'wifi_ap_station',
+ level: '2',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#msg_set',
+ path: 'sms_set',
+ level: '2',
+ parent: '#msg_main',
+ requireLogin: needLogin,
+ checkSIMStatus: true
+ }, {
+ hash: '#msg_sim',
+ path: 'sms_sim_messages',
+ level: '2',
+ parent: '#msg_main',
+ requireLogin: needLogin,
+ checkSIMStatus: true
+ }, {
+ hash: '#msg_list',
+ path: 'sms_list',
+ level: '2',
+ parent: '#msg_main',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#flow_ctl',
+ path: 'status_traffic_alert',
+ level: '1',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#pb_work_grp',
+ path: 'phonebook',
+ level: '2',
+ parent: '#pb_main',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#pb_friend_grp',
+ path: 'phonebook',
+ level: '2',
+ parent: '#pb_main',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#pb_family_grp',
+ path: 'phonebook',
+ level: '2',
+ parent: '#pb_main',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#pb_com_grp',
+ path: 'phonebook',
+ level: '2',
+ parent: '#pb_main',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#pb_all_grp',
+ path: 'phonebook',
+ level: '2',
+ parent: '#pb_main',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#usat',
+ path: 'ussd',
+ level: '2',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#route_set',
+ path: 'adm_lan',
+ level: '2',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#filter_main',
+ path: 'firewall',
+ level: '2',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#local_set',
+ path: 'adm_management',
+ level: '2',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#wlan_basic',
+ path: 'wifi_basic',
+ level: '2',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#network_set',
+ path: 'network_dial_set_cpe',
+ level: '2',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#fast_set',
+ path: 'adm_quick_set',
+ level: '2',
+ parent: '#normal_set',
+ requireLogin: needLogin,
+ checkSIMStatus: true
+ },
+ {
+ hash: '#child_ctl',
+ path: 'firewall_parental_control',
+ level: '1',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#normal_set',
+ path: 'adm_quick_set',
+ level: '1',
+ requireLogin: needLogin,
+ checkSIMStatus: true
+ }, {
+ hash: '#pb_main',
+ path: 'phonebook',
+ level: '1',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#msg_main',
+ path: 'sms_list',
+ level: '1',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#main',
+ path: 'main',
+ level: '1',
+ requireLogin: needLogin,
+ checkSIMStatus: false
+ }, {
+ hash: '#entry',
+ path: 'entry',
+ level: '1',
+ requireLogin: false,
+ checkSIMStatus: false
+ },
+ ];
+
+ return menu;
+});
diff --git a/lynq/S300/ap/app/zte_webui/js/ext/set_realtek.js b/lynq/S300/ap/app/zte_webui/js/ext/set_realtek.js
new file mode 100755
index 0000000..2313bab
--- /dev/null
+++ b/lynq/S300/ap/app/zte_webui/js/ext/set_realtek.js
@@ -0,0 +1,87 @@
+define(function () {
+ var config = {
+ WEBUI_TITLE: '4G CPE',
+ PRODUCT_TYPE: 'CPE', // ��Ʒ����UFI��CPE
+ HAS_BLACK_AND_WHITE_FILTER: true, //�Ƿ�֧�ֺڰ�����
+ AP_STATION_SUPPORT: false,
+ MAX_STATION_NUMBER: 8,
+ STATION_BLOCK_SUPPORT: true, // �������豸�Ƿ�֧��Block����
+ HAS_MULTI_SSID: false, //��ssid����
+ WIFI_BANDWIDTH_SUPPORT_40MHZ: true, //Ƶ�������Ƿ�֧��40MHZ,reltekоƬ֧��
+ WIFI_BANDWIDTH_SUPPORT: true,
+ WIFI_BAND_SUPPORT: true,
+ SD_CARD_SUPPORT: false, //�Ƿ�֧��SD��
+ DDNS_SUPPORT: false, //DDNS
+ NETWORK_UNLOCK_SUPPORT: true,
+ NETWORK_MODES : [ {
+ name : '802.11 b/g/n',
+ value : '4'
+ } ],
+ WIFI_SUPPORT_QR_CODE: false,
+ HAS_PHONEBOOK: true,
+ HAS_BATTERY: true, //�Ƿ��е��
+ FAST_BOOT_SUPPORT: false, //�Ƿ�֧�ֿ��ٿ���
+ TURN_OFF_SUPPORT: false, //�Ƿ�֧�ֹػ�
+ WIFI_SLEEP_SUPPORT: false, // �Ƿ�֧��wifi����
+ HAS_USSD: true, // 是否支持USSD功能,
+ WIFI_WAP3_SUPPORT: false, //是否支持wifi WAP3加密
+ WIFI_WPA2_WAP3_SUPPORT: false, //是否支持wifi WPA2/WAP3兼容模式
+ //station����ģʽ
+ //wifi加密模式
+ AUTH_MODES: [{
+ name: 'NO ENCRYPTION',
+ value: 'OPEN'
+ }, {
+ name: 'WPA2(AES)-PSK',
+ value: 'WPA2PSK'
+ }, {
+ name: 'WPA-PSK/WPA2-PSK',
+ value: 'WPAPSKWPA2PSK'
+ }
+ ],
+ AUTH_MODES_WEP: [{
+ name: 'NO ENCRYPTION',
+ value: 'OPEN'
+ }, {
+ name: 'SHARED',
+ value: 'SHARED'
+ }, {
+ name: 'WPA2(AES)-PSK',
+ value: 'WPA2PSK'
+ }, {
+ name: 'WPA-PSK/WPA2-PSK',
+ value: 'WPAPSKWPA2PSK'
+ }
+ ],
+ AUTH_MODES_ALL: [{
+ name: 'NO ENCRYPTION',
+ value: 'OPEN'
+ }, {
+ name: 'SHARED',
+ value: 'SHARED'
+ }, {
+ name: 'WPA-PSK',
+ value: 'WPAPSK'
+ }, {
+ name: 'WPA2-PSK',
+ value: 'WPA2PSK'
+ }, {
+ name: 'WPA-PSK/WPA2-PSK',
+ value: 'WPAPSKWPA2PSK'
+ }
+ ],
+ AUTO_MODES: [{
+ name: 'Automatic',
+ value: 'NETWORK_auto'
+ }, {
+ name: '4G Only',
+ value: 'Only_LTE'
+ }, {
+ name: '3G Only',
+ value: 'Only_WCDMA'
+ }
+ ]
+ };
+
+ return config;
+});
diff --git a/lynq/S300/ap/app/zte_webui/js/lib.js b/lynq/S300/ap/app/zte_webui/js/lib.js
new file mode 100755
index 0000000..0703ce2
--- /dev/null
+++ b/lynq/S300/ap/app/zte_webui/js/lib.js
@@ -0,0 +1,1168 @@
+function restartDevice(service) {
+ showLoading("restarting");
+ service.restart({}, function (data) {
+ if (data && data.result == "success") {
+ successOverlay();
+ } else {
+ errorOverlay();
+ }
+ }, $.noop);
+}
+function signalFormat(signal) {
+ if (signal) {
+ if (signal > 0) {
+ return "-" + signal + " dBm";
+ } else {
+ return signal + " dBm";
+ }
+ } else {
+ return "— —";
+ }
+}
+function convertSignal(data) {
+ var type_2g = ["GSM", "GPRS", "EDGE", "G", "E"];
+ var type_3g = ["UMTS", "HSDPA", "HSUPA", "HSPA", "HSPA+", "DC-HSPA+", "WCDMA", "TD-SCDMA", "TD", "3G", "TD_SCDMA"];
+ var type_4g = ["LTE", "4G", "FDD", "TDD", "TDD-LTE", "FDD-LTE", "TDD_LTE", "FDD_LTE"];
+ var network_type = data.sub_network_type ? data.sub_network_type : (data.network_type ? data.network_type : '');
+ if ($.inArray(network_type, type_2g) != -1) {
+ return data.rssi;
+ } else if ($.inArray(network_type, type_3g) != -1) {
+ return data.rscp;
+ } else if ($.inArray(network_type, type_4g) != -1) {
+ return data.lte_rsrp;
+ }
+}
+
+function verifyDeviceInfo(field) {
+ if (field && field != "" && field != "0.0.0.0") {
+ return field;
+ } else {
+ return "— —";
+ }
+}
+$(document).ready(function () {
+ $("body").click(function (evt) {
+ var $popover = $(".popover");
+ var $target = $(evt.target);
+ if ((evt.target.id != $popover.data('source') && $target.parents('.popover').length == 0) || $target.hasClass("popover-close")) {
+ popover.close();
+ }
+ });
+});
+var popover = {
+ popoverEle: null,
+ _init: function () {
+ if (this.popoverEle == null) {
+ $("body").append('<div class="popover"></div>');
+ this.popoverEle = $(".popover");
+ }
+ },
+ open: function (opt) {
+ this._init();
+ var offset = opt.target.offset();
+ var top = offset.top + opt.target.outerHeight();
+ this.popoverEle.html(opt.html).css({
+ width: opt.width,
+ left: offset.left,
+ top: top
+ }).data({
+ source: opt.target[0].id
+ }).translate();
+ setTimeout(function () {
+ popover.popoverEle.show();
+ }, 100);
+ this.popoverEle.translate();
+ opt.validation && opt.validation.apply();
+ },
+ close: function () {
+ this.popoverEle && this.popoverEle.fadeOut();
+ },
+ show: function () {
+ this.popoverEle && this.popoverEle.show();
+ },
+ hide: function () {
+ this.popoverEle && this.popoverEle.hide();
+ }
+};
+function isWifiConnected(user_ip_addr, station_list) {
+ return !!_.find(station_list, function (station) {
+ return station.ip_addr == user_ip_addr;
+ });
+}
+function trim(stringToTrim) {
+ return stringToTrim.replace(/^\s+|\s+$/g, "");
+}
+
+function renderCustomElement(container) {
+ if (!container) {
+ container = $("#container");
+ }
+ var radios = container.find("input[type='radio']");
+ var checkboxes = container.find("input[type='checkbox']");
+ $.each(radios, function (i, n) {
+ var $el = $(n),
+ ch = 'checked',
+ checkAction = $el.prop('checked') ? true : false;
+ $el.closest('.radio')[checkAction ? 'addClass' : 'removeClass'](ch) && checkAction ? $el.attr(ch, true) : $el.removeAttr(ch);
+ });
+ $.each(checkboxes, function (i, n) {
+ var $el = $(n),
+ ch = 'checked',
+ checkAction = $el.prop('checked') ? true : false;
+ $el.closest('.checkbox')[checkAction ? 'addClass' : 'removeClass'](ch) && checkAction ? $el.attr(ch, true) : $el.removeAttr(ch);
+ });
+}
+
+function getSelectValFromChosen(choices) {
+ var choicesNums = [];
+ $.each(choices, function (i, n) {
+ var arr = $(n).text().split('/');
+ choicesNums.push(arr[arr.length - 1]);
+ });
+ return choicesNums;
+}
+function syncSelectAndChosen(select, choices) {
+ var choicesNums = getSelectValFromChosen(choices);
+ select.val(choicesNums);
+ return choicesNums;
+}
+
+function getPercent(numerator, denominator, accuracy) {
+ if (accuracy) {
+ accuracy = accuracy * 10;
+ } else {
+ accuracy = 100;
+ }
+ return roundToTwoDecimalNumber(numerator / denominator * accuracy) + "%";
+}
+function checkConnectedStatus(modemConnStatus, rj45ConnStatus, apConnStatus) {
+ return modemConnStatus == "ppp_connected" || rj45ConnStatus == "working" || apConnStatus == "connect";
+}
+
+function enableBtn(ele) {
+ ele.removeAttr("disabled").removeClass("disabled");
+}
+function replaceSpaceWithNbsp(str) {
+ return str.replace(/ /g, ' ');
+}
+function URLEncodeComponent(url) {
+ return encodeURIComponent(url);
+}
+function URLEncode(url) {
+ return encodeURI(url);
+}
+function checkCableMode(currentMode) {
+ return currentMode == "PPPOE" || currentMode == "AUTO_PPPOE";
+}
+function disableBtn(ele) {
+ ele.attr("disabled", "disabled").removeClass("focusIn").addClass("disabled");
+}
+var Escape = {
+ html: function (string) {
+ return (string + '').replace(/[&<>"'\/`]/g, Escape._htmlReplacer);
+ },
+ regex: function (string) {
+ return (string + '').replace(/[\-$\^*()+\[\]{}|\\,.?\s]/g, '\\$&');
+ },
+ _htmlReplacer: function (match) {
+ return Escape.HTML_CHARS[match];
+ },
+ HTML_CHARS: {
+ '&': '&',
+ '<': '<',
+ '>': '>',
+ '"': '"',
+ "'": ''',
+ '/': '/',
+ '`': '`'
+ }
+};
+function roundToTwoDecimalNumber(num) {
+ return Math.round(num * 100) / 100;
+}
+function HTMLEncode(html) {
+ return Escape.html(html);
+}
+function HTMLDecode(text) {
+ var temp = document.createElement("div");
+ temp.innerHTML = text;
+ var output = temp.innerText || temp.textContent;
+ output = output.replace(new RegExp(" ", "gm"), " ");
+ temp = null;
+ return output;
+}
+function getDisplayVolume1(volume, isSpeed) {
+ volume = parseInt(volume, 10);
+ if (volume == "" || volume == "0") {
+ return "";
+ }
+ var needReverse = false;
+ if (volume < 0) {
+ needReverse = true;
+ volume = 0 - volume;
+ }
+ var numberOfBytesInOneB = 1;
+ var numberOfBytesInOneKB = numberOfBytesInOneB * 1024;
+ var numberOfBytesInOneMB = numberOfBytesInOneKB * 1024;
+ var numberOfBytesInOneGB = numberOfBytesInOneMB * 1024;
+ var numberOfBytesInOneTB = numberOfBytesInOneGB * 1024;
+ var labelForOneB = isSpeed ? 'b' : 'B';
+ var labelForOneKB = isSpeed ? 'Kb' : 'KB';
+ var labelForOneMB = isSpeed ? 'Mb' : 'MB';
+ var labelForOneGB = isSpeed ? 'Gb' : 'GB';
+ var labelForOneTB = isSpeed ? 'Tb' : 'TB';
+ if (isSpeed) {
+ volume = volume * 8;
+ }
+ var vol = volume / numberOfBytesInOneTB;
+ var displayString = roundToTwoDecimalNumber(vol) + labelForOneTB;
+ if (vol < 0.5) {
+ vol = volume / numberOfBytesInOneGB;
+ displayString = roundToTwoDecimalNumber(vol) + labelForOneGB;
+ if (vol < 0.5) {
+ vol = volume / numberOfBytesInOneMB;
+ displayString = roundToTwoDecimalNumber(vol) + labelForOneMB;
+ if (isSpeed) {
+ if (vol < 0.5) {
+ vol = volume / numberOfBytesInOneKB;
+ displayString = roundToTwoDecimalNumber(vol) + labelForOneKB;
+ if (vol < 0.5) {
+ vol = volume;
+ displayString = roundToTwoDecimalNumber(vol) + labelForOneB;
+ }
+ }
+ }
+ }
+ }
+ if (needReverse) {
+ displayString = "-" + displayString;
+ }
+ return displayString;
+}
+function getDisplayVolume(volume, isSpeed) {
+ volume = parseInt(volume, 10);
+ if (volume == "" || volume == "0") {
+ return "";
+ }
+ var needReverse = false;
+ if (volume < 0) {
+ needReverse = true;
+ volume = 0 - volume;
+ }
+ var numberOfBytesInOneB = 1;
+ var numberOfBytesInOneKB = numberOfBytesInOneB * 1024;
+ var numberOfBytesInOneMB = numberOfBytesInOneKB * 1024;
+ var numberOfBytesInOneGB = numberOfBytesInOneMB * 1024;
+ var numberOfBytesInOneTB = numberOfBytesInOneGB * 1024;
+ var labelForOneB = isSpeed ? 'b' : 'B';
+ var labelForOneKB = isSpeed ? 'Kb' : 'KB';
+ var labelForOneMB = isSpeed ? 'Mb' : 'MB';
+ var labelForOneGB = isSpeed ? 'Gb' : 'GB';
+ var labelForOneTB = isSpeed ? 'Tb' : 'TB';
+ if (isSpeed) {
+ volume = volume * 8;
+ }
+ var vol = volume / numberOfBytesInOneTB;
+ var displayString = roundToTwoDecimalNumber(vol) + labelForOneTB;
+ if (vol < 0.5) {
+ vol = volume / numberOfBytesInOneGB;
+ displayString = roundToTwoDecimalNumber(vol) + labelForOneGB;
+ if (vol < 0.5) {
+ vol = volume / numberOfBytesInOneMB;
+ displayString = roundToTwoDecimalNumber(vol) + labelForOneMB;
+ if (vol < 0.5) {
+ vol = volume / numberOfBytesInOneKB;
+ displayString = roundToTwoDecimalNumber(vol) + labelForOneKB;
+ if (vol < 0.5) {
+ vol = volume;
+ displayString = roundToTwoDecimalNumber(vol) + labelForOneB;
+ }
+ }
+ }
+ }
+ if (needReverse) {
+ displayString = "-" + displayString;
+ }
+ return displayString;
+}
+function transUnit(data, isSpeed) {
+ var result = getDisplayVolume1(data, isSpeed);
+ if (result == "") {
+ result = isSpeed ? "0b" : "0MB";
+ }
+ if (isSpeed) {
+ result += "/s";
+ }
+ return result;
+}
+function transTimeUnit(data) {
+ data = parseFloat(data);
+ if (data == "") {
+ return result = "0hour";
+ }
+ var needReverse = false;
+ if (data < 0) {
+ needReverse = true;
+ data = 0 - data;
+ }
+ var labelForOneMinute = 'minute';
+ var labelForOneHour = 'hour';
+ var vol = data / 3600;
+ var result = roundToTwoDecimalNumber(vol) + labelForOneHour;
+ if (vol < 1) {
+ vol = data / 60;
+ result = roundToTwoDecimalNumber(vol) + labelForOneMinute;
+ }
+ if (needReverse) {
+ result = "-" + result;
+ }
+ return result;
+}
+function transSecond2Time(secs) {
+ secs = parseInt(secs, 10);
+ var isNegative = false;
+ if (secs < 0) {
+ isNegative = true;
+ secs = 0 - secs;
+ }
+ var hour = Math.floor(secs / 3600);
+ secs = secs % 3600;
+ var minu = Math.floor(secs / 60);
+ secs = secs % 60;
+ return (isNegative ? '-' : '') + leftInsert(hour, 2, '0') + ":" + leftInsert(minu, 2, '0') + ":" + leftInsert(secs, 2, '0');
+}
+function leftInsert(value, length, placeholder) {
+ var len = value.toString().length;
+ for (; len < length; len++) {
+ value = placeholder + value;
+ }
+ return value;
+}
+
+var _timeoutStack = [];
+var _intervalStack = [];
+function addTimeout(code, delay) {
+ var time = window.setTimeout(code, delay);
+ _timeoutStack.push(time);
+ return time;
+}
+function addInterval(code, delay) {
+ var time = window.setInterval(code, delay);
+ _intervalStack.push(time);
+ return time;
+}
+function clearTimer() {
+ clearTimeoutTimer();
+ clearIntervalTimer();
+}
+function clearTimeoutTimer() {
+ for (var i = 0; i < _timeoutStack.length; i++) {
+ window.clearTimeout(_timeoutStack[i]);
+ }
+ _timeoutStack = [];
+}
+function clearIntervalTimer() {
+ for (var i = 0; i < _intervalStack.length; i++) {
+ window.clearInterval(_intervalStack[i]);
+ }
+ _intervalStack = [];
+}
+$(document).ready(function () {
+ $("[manualControl!=true].checkbox").live("click", function (event) {
+ var $this = $(this);
+ if ($this.hasClass('disable')) {
+ return false;
+ }
+ var checkbox = $this.find("input:checkbox");
+ if (checkbox.attr("checked")) {
+ checkbox.removeAttr("checked");
+ } else {
+ checkbox.attr("checked", "checked");
+ }
+ checkCheckbox(checkbox);
+ event.stopPropagation();
+ return true;
+ });
+ $('input[type="text"][noAction!="true"],input[type="password"][noAction!="true"],select').live("focusin", function (event) {
+ $(this).addClass("focusIn");
+ }).live("focusout", function (event) {
+ $(this).removeClass("focusIn");
+ });
+ $(".form-note .notes-title").live('click', function () {
+ var $this = $(this);
+ $this.siblings("ul.notes-content:first").slideToggle();
+ $this.toggleClass("notes-dot");
+ });
+});
+var GSM7_Table = ["000A", "000C", "000D", "0020", "0021", "0022", "0023", "0024", "0025", "0026", "0027", "0028", "0029", "002A", "002B", "002C", "002D", "002E", "002F", "0030", "0031", "0032", "0033", "0034", "0035", "0036", "0037", "0038", "0039", "003A", "003A", "003B", "003C", "003D", "003E", "003F", "0040", "0041", "0042", "0043", "0044", "0045", "0046", "0047", "0048", "0049", "004A", "004B", "004C", "004D", "004E", "004F", "0050", "0051", "0052", "0053", "0054", "0055", "0056", "0057", "0058", "0059", "005A", "005B", "005C", "005D", "005E", "005F", "0061", "0062", "0063", "0064", "0065", "0066", "0067", "0068", "0069", "006A", "006B", "006C", "006D", "006E", "006F", "0070", "0071", "0072", "0073", "0074", "0075", "0076", "0077", "0078", "0079", "007A", "007B", "007C", "007D", "007E", "00A0", "00A1", "00A3", "00A4", "00A5", "00A7", "00BF", "00C4", "00C5", "00C6", "00C7", "00C9", "00D1", "00D6", "00D8", "00DC", "00DF", "00E0", "00E4", "00E5", "00E6", "00E8", "00E9", "00EC", "00F1", "00F2", "00F6", "00F8", "00F9", "00FC", "0393", "0394", "0398", "039B", "039E", "03A0", "03A3", "03A6", "03A8", "03A9", "20AC"];
+var GSM7_Table_Extend = ["007B", "007D", "005B", "005D", "007E", "005C", "005E", "20AC", "007C"];
+function getEncodeType(strMessage) {
+ var encodeType = "GSM7_default";
+ var gsm7_extend_char_len = 0;
+ if (!strMessage) {
+ return {
+ encodeType: encodeType,
+ extendLen: gsm7_extend_char_len
+ };
+ }
+ for (var i = 0; i < strMessage.length; i++) {
+ var charCode = strMessage.charCodeAt(i).toString(16).toUpperCase();
+ while (charCode.length != 4) {
+ charCode = "0" + charCode;
+ }
+ if ($.inArray(charCode, GSM7_Table_Extend) != -1) {
+ gsm7_extend_char_len++;
+ }
+ if ($.inArray(charCode, GSM7_Table) == -1) {
+ encodeType = "UNICODE";
+ gsm7_extend_char_len = 0;
+ break;
+ }
+ }
+ return {
+ encodeType: encodeType,
+ extendLen: gsm7_extend_char_len
+ };
+}
+function encodeMessage(textString) {
+ var haut = 0;
+ var result = '';
+ if (!textString)
+ return result;
+ for (var i = 0; i < textString.length; i++) {
+ var b = textString.charCodeAt(i);
+ if (haut != 0) {
+ if (0xDC00 <= b && b <= 0xDFFF) {
+ result += dec2hex(0x10000 + ((haut - 0xD800) << 10) + (b - 0xDC00));
+ haut = 0;
+ continue;
+ } else {
+ haut = 0;
+ }
+ }
+ if (0xD800 <= b && b <= 0xDBFF) {
+ haut = b;
+ } else {
+ cp = dec2hex(b);
+ while (cp.length < 4) {
+ cp = '0' + cp;
+ }
+ result += cp;
+ }
+ }
+ return result;
+}
+var specialChars = ['000D', '000A', '0009', '0000'];
+var specialCharsIgnoreWrap = ['0009', '0000'];
+function decodeMessage(str, ignoreWrap) {
+ if (!str)
+ return "";
+ var specials = specialCharsIgnoreWrap;
+ return str.replace(/([A-Fa-f0-9]{1,4})/g, function (matchstr, parens) {
+ if ($.inArray(parens, specials) == -1) {
+ return hex2char(parens);
+ } else {
+ return '';
+ }
+ });
+}
+function dec2hex(textString) {
+ return (textString + 0).toString(16).toUpperCase();
+}
+function hex2char(hex) {
+ var result = '';
+ var n = parseInt(hex, 16);
+ if (n <= 0xFFFF) {
+ result += String.fromCharCode(n);
+ } else if (n <= 0x10FFFF) {
+ n -= 0x10000;
+ result += String.fromCharCode(0xD800 | (n >> 10)) + String.fromCharCode(0xDC00 | (n & 0x3FF));
+ }
+ return result;
+}
+function renderCheckbox() {
+ var checkboxToggle = $(".checkboxToggle");
+ checkboxToggle.each(function () {
+ checkBoxesSize($(this));
+ });
+ var checkboxes = $(".checkbox").not("[class*='checkboxToggle']").find("input:checkbox");
+ if (checkboxes.length == 0) {
+ disableCheckbox(checkboxToggle);
+ } else {
+ enableCheckbox(checkboxToggle);
+ }
+ checkboxes.each(function () {
+ checkCheckbox($(this));
+ });
+}
+function checkBoxesSize(selectAll) {
+ var target = selectAll.attr("target");
+ var boxSize = $("#" + target + " .checkbox input:checkbox").length;
+ var checkedBoxSize = $("#" + target + " .checkbox input:checkbox:checked").length;
+ var checkbox = selectAll.find("input:checkbox");
+ if (boxSize != 0 && boxSize == checkedBoxSize) {
+ checkbox.attr("checked", "checked");
+ } else {
+ checkbox.removeAttr("checked");
+ }
+ checkP(checkbox);
+}
+function checkSelectAll(selectAll, target) {
+ var theCheckbox = $("#" + target + " .checkbox input:checkbox");
+ if (selectAll.attr("checked")) {
+ theCheckbox.attr("checked", "checked");
+ } else {
+ theCheckbox.removeAttr("checked");
+ }
+ theCheckbox.each(function () {
+ checkCheckbox($(this));
+ });
+}
+function checkCheckbox(checkbox) {
+ if (checkbox.closest("p.checkbox").hasClass("checkboxToggle")) {
+ checkSelectAll(checkbox, checkbox.closest("p.checkbox").attr("target"));
+ }
+ checkP(checkbox);
+ checkBoxesSize($("#" + checkbox.attr("target")));
+}
+function checkP(checkbox) {
+ if (checkbox.attr("checked")) {
+ checkbox.closest("p.checkbox").addClass("checkbox_selected");
+ } else {
+ checkbox.closest("p.checkbox").removeClass("checkbox_selected");
+ }
+}
+function removeChecked(id) {
+ $("#" + id).removeClass("checkbox_selected").find("input:checkbox").removeAttr("checked");
+}
+function disableCheckbox(checkbox) {
+ var chk = checkbox.find("input:checkbox");
+ if (chk.attr("checked")) {
+ checkbox.addClass('checked_disable');
+ } else {
+ checkbox.addClass('disable');
+ }
+}
+function enableCheckbox(checkbox) {
+ checkbox.removeClass('disable').removeClass("checked_disable");
+}
+function tryToDisableCheckAll(checkbox, len) {
+ if (len == 0) {
+ disableCheckbox(checkbox);
+ } else {
+ enableCheckbox(checkbox);
+ }
+}
+
+function escapeMessage(msg) {
+ return msg;
+}
+function parseTime(date) {
+ if (date.indexOf("+") > -1) {
+ date = date.substring(0, date.lastIndexOf("+"));
+ }
+ var dateArr;
+ if (date.indexOf(",") > -1) {
+ dateArr = date.split(",");
+ } else {
+ dateArr = date.split(";");
+ }
+ if (dateArr.length == 0) {
+ return "";
+ } else {
+ var time = dateArr[0] + "-" + dateArr[1] + "-" + dateArr[2] + " " + leftInsert(dateArr[3], 2, '0') + ":" + leftInsert(dateArr[4], 2, '0') + ":"
+ +leftInsert(dateArr[5], 2, '0');
+ return time;
+ }
+}
+function transTime(data) {
+ var dateArr = data.split(",");
+ if (dateArr.length == 0 || ("," + data + ",").indexOf(",,") != -1) {
+ return "";
+ } else {
+ var time = dateArr[0] + "/" + dateArr[1] + "/" + dateArr[2] + " " + leftInsert(dateArr[3], 2, '0') + ":" + leftInsert(dateArr[4], 2, '0') + ":"
+ +leftInsert(dateArr[5], 2, '0');
+ return time;
+ }
+}
+function getSmsCount(str) {
+ var encodeType = getEncodeType(str);
+ var len = str.length,
+ gsm7 = encodeType.encodeType != "UNICODE",
+ needChunking = false,
+ chunkSize = 0;
+ if (gsm7) {
+ needChunking = (len + encodeType.extendLen) > 160;
+ chunkSize = 153;
+ } else {
+ needChunking = len > 70;
+ chunkSize = 67;
+ }
+ if (needChunking) {
+ return Math.ceil((len + encodeType.extendLen) / chunkSize);
+ } else {
+ return 1;
+ }
+}
+function getInsertPos(textbox) {
+ var iPos = 0;
+ if (textbox.selectionStart || textbox.selectionStart == "0") {
+ iPos = textbox.selectionStart;
+ } else if (document.selection) {
+ textbox.focus();
+ var range = document.selection.createRange();
+ var rangeCopy = range.duplicate();
+ rangeCopy.moveToElementText(textbox);
+ while (range.compareEndPoints("StartToStart", rangeCopy) > 0) {
+ range.moveStart("character", -1);
+ iPos++;
+ }
+ }
+ return iPos;
+}
+function setInsertPos(textbox, iPos) {
+ textbox.focus();
+ if (textbox.selectionStart || textbox.selectionStart == "0") {
+ textbox.selectionStart = iPos;
+ textbox.selectionEnd = iPos;
+ } else if (document.selection) {
+ var range = textbox.createTextRange();
+ range.moveStart("character", iPos);
+ range.collapse(true);
+ range.select();
+ }
+}
+function isIntNum(input, num) {
+ for (var i = 1; i < 6; i++) {
+ if (input == i * num) {
+ return true;
+ }
+ }
+ return false;
+}
+
+function transUnixTime(millisecond) {
+ var time = new Date(parseInt(millisecond, 10));
+ var year = time.getFullYear();
+ var month = leftPad(time.getMonth() + 1, 2, "0");
+ var date = leftPad(time.getDate(), 2, "0");
+ var hour = leftPad(time.getHours(), 2, "0");
+ var minute = leftPad(time.getMinutes(), 2, "0");
+ var second = leftPad(time.getSeconds(), 2, "0");
+ return year + "-" + month + "-" + date + " " + hour + ":" + minute + ":" + second;
+}
+function leftPad(value, length, placeholder) {
+ var len = value.toString().length;
+ for (; len < length; len++) {
+ value = placeholder + value;
+ }
+ return value;
+};
+function convertNumberToId(number) {
+ return number.replace(/[\+\*#]/g, '_');
+}
+function getLastNumber(number, len) {
+ if (number.length > len) {
+ return convertNumberToId(number.substring(number.length - len, number.length));
+ }
+ return convertNumberToId(number);
+}
+function fixTableHeight() {
+ if ($.browser.msie) {
+ var heightTimer = setInterval(function () {
+ var $table = $(".fixTableScroll")[0];
+ if ($table) {
+ var scrollHeight = $table.scrollHeight;
+ if (scrollHeight != 0) {
+ $table.style.height = scrollHeight + 20;
+ window.clearInterval(heightTimer);
+ }
+ } else {
+ window.clearInterval(heightTimer);
+ }
+ }, 300);
+ }
+}
+function refreshTableHeight() {
+ if ($.browser.msie) {
+ $(".fixTableScroll")[0].style.height = $(".fixTableScroll .ko-grid-container")[0].scrollHeight + 35;
+ }
+}
+
+function popup(option) {
+ $.modal.close();
+ var minHeight = option.minHeight || 140;
+ $('#confirm').modal({
+ zIndex: 3000,
+ position: ["30%"],
+ overlayId: 'confirm-overlay',
+ containerId: 'confirm-container',
+ escClose: false,
+ minHeight: minHeight
+ });
+ var $confirmDiv = $('div#confirm');
+ $('#confirmImg', $confirmDiv).attr('src', option.img);
+ $('#popTitle', $confirmDiv).html($.i18n.prop(option.title));
+ if (typeof option.msg != 'string') {
+ var params = [option.msg.msg];
+ params.push(option.msg.params);
+ $('.message', $confirmDiv).html($.i18n.prop.apply(null, _.flatten(params)));
+ } else {
+ $('.message', $confirmDiv).html($.i18n.prop(option.msg));
+ }
+ var $promptDiv = $("div.promptDiv", $confirmDiv);
+ if (option.showInput === true) {
+ $promptDiv.show();
+ $("input#promptInput", $promptDiv).val(option.defaultValue ? option.defaultValue : "");
+ $(".promptErrorLabel", $promptDiv).empty();
+ } else {
+ $promptDiv.hide();
+ }
+ window.setTimeout(function () {
+ $(':input:enabled:visible:first', '#confirm-container').focus();
+ }, 0);
+}
+function showSettingWindow(title, htmlPath, jsPath, minWidth, minHeight, callback) {
+ var option = {
+ title: title,
+ htmlPath: htmlPath,
+ jsPath: jsPath,
+ minHeight: minHeight,
+ minWidth: minWidth
+ };
+ var callbackIsFunction = $.isFunction(callback);
+ var callbackIsPojo = $.isPlainObject(callback);
+ popupSettingWindow(option);
+}
+function popupSettingWindow(option) {
+ $.modal.close();
+ var minHeight = option.minHeight || 140;
+ var minWidth = option.minWidth || 400;
+ var subContainer = $("#htmlContainer");
+ var tmplPath = 'text!tmpl/' + option.htmlPath + '.html';
+ require([tmplPath, option.jsPath], function (tmpl, viewModel) {
+ subContainer.stop(true, true);
+ subContainer.hide();
+ subContainer.html(tmpl);
+ viewModel.init();
+ $('#htmlContainer').translate();
+ subContainer.show();
+ $('#htmlContainer').css("opacity", 50);
+ });
+ $('#popupSettingWindow').modal({
+ zIndex: 3000,
+ position: ["30%"],
+ escClose: false,
+ minWidth: minWidth,
+ minHeight: minHeight,
+ maxWidth: 400,
+ opacity: 50
+ });
+}
+function hidePopupSettingWindow() {
+ $("#popupSettingWindow").remove();
+ $.modal.close();
+}
+function showInfo(msgObj, minHeight) {
+ var option = {
+ title: 'info',
+ img: 'pic/res_info.png',
+ msg: msgObj,
+ minHeight: minHeight
+ };
+ popup(option);
+ $('#yesbtn, #nobtn').hide();
+ $('#okbtn').unbind('click').click(function () {
+ $.modal.close();
+ }).show();
+}
+function showPrompt(msgObj, callback, minHeight, defaultValue, checkPromptInput, NobtnCallback) {
+ var option = {
+ title: 'prompt',
+ img: 'pic/res_confirm.png',
+ msg: msgObj,
+ minHeight: minHeight,
+ showInput: true,
+ defaultValue: defaultValue
+ };
+ popup(option);
+ $('#yesbtn, #nobtn').unbind('click').show();
+ $('#okbtn').hide();
+ $('#yesbtn').click(function () {
+ if ($.isFunction(checkPromptInput)) {
+ if (!checkPromptInput()) {
+ return false;
+ };
+ }
+ if ($.isFunction(callback)) {
+ if (callback()) {
+ $.modal.close();
+ }
+ }
+ });
+ $('#nobtn').click(function () {
+ if ($.isFunction(NobtnCallback)) {
+ NobtnCallback();
+ }
+ $.modal.close();
+ });
+ if ($.isFunction(checkPromptInput)) {
+ $("#promptInput", "#confirm").unbind('input propertychange').bind('input propertychange', function () {
+ if ($.isFunction(checkPromptInput)) {
+ checkPromptInput();
+ }
+ });
+ }
+ $("#promptInput", "#confirm").unbind('keypress').bind('keypress', function (event) {
+ if (event.keyCode == 13) {
+ $('#yesbtn').trigger("click");
+ }
+ });
+}
+function showConfirm(msgObj, callback, minHeight, yesTrans, noTrans) {
+ if (yesTrans) {
+ $('#yesbtn').attr("data-trans", yesTrans);
+ } else {
+ $('#yesbtn').attr("data-trans", "yes");
+ }
+ if (noTrans) {
+ $('#nobtn').attr("data-trans", noTrans);
+ } else {
+ $('#nobtn').attr("data-trans", "no");
+ }
+ $('#yesbtn, #nobtn').translate();
+ var option = {
+ title: 'confirm',
+ img: 'pic/res_confirm.png',
+ msg: msgObj,
+ minHeight: minHeight
+ };
+ popup(option);
+ $('#yesbtn, #nobtn').show();
+ $('#okbtn').hide();
+ var callbackIsFunction = $.isFunction(callback);
+ var callbackIsPojo = $.isPlainObject(callback);
+ $('#yesbtn').unbind('click').click(function () {
+ $.modal.close();
+ if (callbackIsFunction) {
+ callback();
+ } else if (callbackIsPojo && $.isFunction(callback.ok)) {
+ callback.ok();
+ }
+ });
+ $('#nobtn').unbind('click').click(function () {
+ $.modal.close();
+ if (callbackIsPojo && $.isFunction(callback.no)) {
+ callback.no();
+ }
+ });
+}
+function showAlert(msgObj, callback, minHeight) {
+ var option = {
+ title: 'alert',
+ img: 'pic/res_alert.png',
+ msg: msgObj,
+ minHeight: minHeight
+ };
+ popup(option);
+ $('#yesbtn, #nobtn').hide();
+ $('#okbtn').unbind('click').click(function () {
+ $.modal.close();
+ if ($.isFunction(callback)) {
+ callback();
+ }
+ }).show();
+}
+function loadingMsgChange(msg) {
+ $('#loadMsg').html($.i18n.prop(msg));
+}
+function hideLoading() {
+ $('#confirm-overlay').css("cursor", "default");
+ $.modal.close();
+ $('#loadMsg').html('');
+}
+function getRandomInt(n) {
+ return Math.round(Math.random() * n);
+}
+function getCurrentDatetime() {
+ var d = new Date();
+ return d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate() + " " + d.getHours() + ":" + d.getMinutes()
+ + ":" + d.getSeconds();
+}
+function getRandomDatetime() {
+ var d = new Date();
+ return d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate() + " " + getRandomInt(24) + ":" + getRandomInt(60)
+ + ":" + getRandomInt(60);
+}
+function getRandomDatetimeSep() {
+ var d = new Date();
+ return d.getFullYear() + "," + (d.getMonth() + 1) + "," + d.getDate() + "," + getRandomInt(24) + "," + getRandomInt(60)
+ + "," + getRandomInt(60);
+}
+function getCurrentTimeString(theTime) {
+ var time = "";
+ var d = theTime ? theTime : new Date();
+ time += (d.getFullYear() + "").substring(2) + ";";
+ time += getTwoDigit((d.getMonth() + 1)) + ";" + getTwoDigit(d.getDate()) + ";" + getTwoDigit(d.getHours()) + ";"
+ +getTwoDigit(d.getMinutes()) + ";" + getTwoDigit(d.getSeconds()) + ";";
+ if (d.getTimezoneOffset() < 0) {
+ time += "+" + (0 - d.getTimezoneOffset() / 60);
+ } else {
+ time += (0 - d.getTimezoneOffset() / 60);
+ }
+ return time;
+}
+function getTwoDigit(num) {
+ num += "";
+ while (num.length < 2) {
+ num = "0" + num;
+ }
+ return num;
+}
+function showLoading(msg, content, contentAlert) {
+ if (msg) {
+ $('#loadMsg').html($.i18n.prop(msg));
+ } else {
+ $('#loadMsg').html('');
+ }
+ $('#loading').modal({
+ zIndex: 3000,
+ position: ['30%'],
+ overlayId: 'confirm-overlay',
+ containerId: 'confirm-container',
+ minHeight: 140,
+ persist: true,
+ focus: false,
+ escClose: false
+ });
+ var loading = $("#loading #loading_container");
+ var a = "<a href='javascript:void(0)'> </a>";
+ if (content) {
+ loading.html(content + a);
+ } else {
+ loading.html(a);
+ }
+ if (contentAlert) {
+ $('#loading #loading_wording').html($.i18n.prop(contentAlert));
+ } else {
+ $("#loading #loading_wording").html("");
+ }
+ $("a:last", loading).focus().hide();
+}
+function hideProgressBar() {
+ $.modal.close();
+ setProgressBar(0);
+ $('#barMsg').html('');
+}
+function setProgressBar(percents) {
+ jQuery("#bar").width(400 * percents / 100);
+ jQuery("#barValue").text(percents + "%");
+}
+
+function showProgressBar(msg, content) {
+ if (msg) {
+ $('#barMsg').html($.i18n.prop(msg));
+ }
+ $('#progress').modal({
+ zIndex: 3000,
+ position: ['30%'],
+ overlayId: 'confirm-overlay',
+ containerId: 'confirm-container',
+ minHeight: 140,
+ persist: true,
+ focus: false,
+ escClose: false
+ });
+ if (content) {
+ $("#progress #progress_container").html(content);
+ } else {
+ $("#progress #progress_container").html("");
+ }
+}
+
+function showInfoMsg(msg, nameText, tmp) {
+ $.modal.close();
+ if (msg) {
+ $('#result-image', '#result-overlay').removeClass().addClass(nameText);
+ $('#result_wording').html('<h2>' + $.i18n.prop(msg) + '</h2>');
+ }
+ $('#result-overlay').modal({
+ zIndex: 3000,
+ position: ['30%'],
+ overlayId: 'confirm-overlay',
+ containerId: 'confirm-container',
+ minHeight: 140,
+ persist: true,
+ focus: false,
+ escClose: false
+ });
+ var count = 3;
+ var overlayTimer = setInterval(function () {
+ count--;
+ if (count == 0) {
+ clearInterval(overlayTimer);
+ if ($('#result-overlay:visible').length > 0) {
+ $.modal.close();
+ }
+ }
+ }, 1000);
+}
+function errorOverlay(msg, isContinueLoading) {
+ showInfoMsg(msg ? msg : 'error_info', 'overlay-error', !isContinueLoading);
+}
+function successOverlay(msg, isContinueLoading) {
+ showInfoMsg(msg ? msg : 'success_info', 'overlay-success', !isContinueLoading);
+}
+function transOption(transid, isChannel) {
+ if (isChannel) {
+ return function (item) {
+ if (item.value != 0) {
+ var val = item.value.split("_");
+ return val[1] + "MHz " + $.i18n.prop(transid + '_' + val[0]);
+ } else {
+ return $.i18n.prop(transid + '_0');
+ }
+ };
+ }
+ return function (item) {
+ return $.i18n.prop(transid + '_' + item.value);
+ };
+}
+function getFileType(fileName) {
+ var ext = fileName.split('.').pop().toLowerCase();
+ for (type in extMap) {
+ if ($.inArray(ext, extMap[type]) != -1) {
+ return type;
+ }
+ }
+ return "file";
+}
+var extMap = {
+ mp3: ["mp3", "wma", "wav"],
+ film: ["mp4", "avi", "rm", "rmvb", "3gp", "mpeg"],
+ picture: ["jpeg", "jpg", "gif", "bmp", "png"],
+ pdf: ['pdf'],
+ rar: ['rar', '7z', 'zip', 'gzip', 'gz', 'tar'],
+ doc: ['doc', 'docx'],
+ ppt: ['ppt', 'pptx'],
+ xls: ['xls', 'xlsx'],
+ xml: ['xml']
+};
+function checkRange(str, min, max) {
+ var intVal = parseInt(str, 10);
+ return !(intVal > max || intVal < min);
+}
+function transProtocolValue(proto) {
+ switch (proto) {
+ case "TCP":
+ case "UDP":
+ case "ICMP":
+ return proto;
+ case "TCP&UDP":
+ return "TCP+UDP";
+ case "None":
+ default:
+ return "ALL";
+ }
+}
+function transProtocol(proto) {
+ var type = "ALL";
+ if ("1" == proto)
+ type = "TCP";
+ else if ("2" == proto)
+ type = "UDP";
+ else if ("3" == proto)
+ type = "TCP+UDP";
+ else if ("4" == proto)
+ type = "ICMP";
+ else if ("5" == proto)
+ type = "ALL";
+ return type;
+}
+function updateLength(sms_content) {
+ var length = 0;
+ var tmpchr;
+ var index = 0;
+ for (var i = 0; i < sms_content.length; i++) {
+ tmpchr = sms_content.charAt(i);
+ length = length + 1;
+ if ((tmpchr == "[") || (tmpchr == "]") || (tmpchr == "{") || (tmpchr == "}") || (tmpchr == "|") || (tmpchr == "\\") || (tmpchr == "^") || (tmpchr == "~") || (tmpchr == "€")) {
+ length = length + 1;
+ }
+ index = i;
+ if (length == 765) {
+ break;
+ }
+ if (length > 765) {
+ index = i - 1;
+ length = length - 2;
+ break;
+ }
+ }
+ return {
+ index: index,
+ length: length
+ };
+}
+function clearValidateMsg(areaId) {
+ areaId = areaId || '*';
+ $(areaId + ' label.error').remove();
+}
+function isErrorObject(object) {
+ return typeof object.errorType === 'string';
+}
+var manualLogout = false;
+
+// 新增TR069
+function validURLWithProtocol(str_url) {
+ var strRegex = '^((http|https)+://)'
+ + '((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])([.](25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])){3}'// IP范围1.0.0.0~255.255.255.255
+ + '|'
+ + '([a-zA-Z0-9][-a-zA-Z0-9]{0,62}[.])*'
+ + '[a-zA-Z0-9][-a-zA-Z0-9]{0,62}[.]'
+ + '[a-zA-Z]{2,6})'
+ + '(:[0-9]{1,5})?'
+ + '((/?)|'
+ + '(/[0-9a-zA-Z_!~*\'().;?:@&=+$,%#-]+)+/?)$';
+ var ipv6Reg = '^((http|https)+://)\\[(([0-9a-fA-F]{0,4})([:]{0,1})){1,8}\\](:[0-9]{1,5})?((/?)|(/[0-9a-zA-Z_!~*\'().;?:@&=+$,%#-]+)+/?)$';
+ var rev6 = new RegExp(ipv6Reg);
+ var re = new RegExp(strRegex);
+ if (re.test(str_url)) {
+ if (excludedFTPSpclIp(str_url) == false)
+ return false;
+ return true;
+ }
+ else if ((rev6.test(str_url))) {
+ var istart = str_url.indexOf('[') + 1;
+ var iend = str_url.indexOf(']');
+ if (istart == -1 || iend == -1) {
+ return false;
+ }
+ var strIpv6 = str_url.substring(istart, iend);
+ if (!v6IpVerify(strIpv6)) {
+ return false;
+ }
+ return true;
+ }
+ else {
+ return false;
+ }
+};
+function excludedFTPSpclIp(str_url){
+ var ipstr='';
+ var strRegex = '^((ftp|ftps|http|https)+://)((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])([.](25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])){3})'
+ + '(:[0-9]{1,5})?((/?)|(/[0-9a-zA-Z_!~*\'().;?:@&=+$,%#-]+)+/?)$';
+ var re=new RegExp(strRegex);
+ if (re.test(str_url)){
+ ipstr=str_url.substring(str_url.indexOf("://")+3);
+ if(ipstr.indexOf("/")!=-1){
+ ipstr=ipstr.substring(0,ipstr.indexOf("/"));
+ }
+ if(ipstr.indexOf(":")!=-1){
+ ipstr=ipstr.substring(0,ipstr.indexOf(":"));
+ }
+ if(ipstr!=""&&false==IpAddrVerify(ipstr))
+ return false;
+ }
+ return true;
+}
diff --git a/lynq/S300/ap/app/zte_webui/js/net.js b/lynq/S300/ap/app/zte_webui/js/net.js
new file mode 100755
index 0000000..22a9d2b
--- /dev/null
+++ b/lynq/S300/ap/app/zte_webui/js/net.js
@@ -0,0 +1,4233 @@
+
+define("firewall_url_filter","underscore jquery knockout set service".split(" "),
+ function (_, $, ko, config, service) {
+
+ //system url filter setting VM
+
+ function UrlFilterSettingVM() {
+ var target = this;
+ var urlFltInfo = service.getUrlFilterList();
+ var columnsTmpl = [{
+ columnType: "checkbox",
+ rowText: "index",
+ width: "30%"
+ }, {
+ headerTextTrans: "url",
+ rowText: "url",
+ width: "70%"
+ }
+ ];
+ target.rules = ko.observableArray(urlFltInfo.urlFilterRules);
+
+ target.gridTemplate = new ko.simpleGrid.viewModel({
+ data: target.rules(),
+ idName: "index",
+ columns: columnsTmpl,
+ tmplType: 'list',
+ pageSize: 10
+ });
+
+ target.clear = clearFunc;
+
+ target.callback = callbackFunc;
+ //删除规则
+
+ target.deleteRule = deleteRuleFunc;
+
+ //添加规则
+
+ target.addRule = addRuleFunc;
+ function callbackFunc(elem) {
+ if (elem.result != "success") {
+ errorOverlay();
+ } else {
+ target.clear();
+ initialize(target);
+ successOverlay();
+ $("#urlFilters").translate();
+ }
+ }
+
+ //添加规则
+ function addRuleFunc() {
+ if (target.rules().length >= config.urlFilterMax) {
+ showAlert({
+ msg: "url_filter_max",
+ params: config.urlFilterMax
+ });
+ return false;
+ }
+ var tmpArr = [];
+ for (var idx = 0; idx < target.rules().length; idx++) {
+ tmpArr.push(target.rules()[idx].url);
+ }
+ if ($.inArray($("#addURLFilter").val(), tmpArr) != -1) {
+ showAlert("url_repeated");
+ return false;
+ }
+
+ showLoading();
+ var urlFltParams = {
+ goformId: "URL_FILTER_ADD",
+ addURLFilter: $("#addURLFilter").val()
+ };
+ service.addUrlFilterRule(urlFltParams, target.callback);
+ }
+ //删除规则
+ function deleteRuleFunc() {
+ showConfirm('confirm_data_delete', function () {
+ showLoading();
+ var urlFltParams = {
+ goformId: "URL_FILTER_DELETE",
+ url_filter_delete_id: target.gridTemplate.selectedIds().join(";") + ";"
+ };
+ service.deleteSelectedRules(urlFltParams, target.callback);
+ });
+ }
+
+ }
+
+ function clearFunc() {
+ $("#addURLFilter").val("");
+ }
+
+ //页面初始化
+
+ function initialize() {
+
+ var vm = new UrlFilterSettingVM();
+ bindContainer(vm);
+ }
+ function bindContainer(vm){
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ ko.applyBindings(vm, container[0]);
+ $('#urlFilterForm').validate({
+ submitHandler: function () {
+ vm.addRule();
+ },
+ rules: {
+ addURLFilter: 'url_filter_check'
+ }
+ });
+
+ $("#urlFilterListForm").validate({
+ submitHandler: function () {
+ vm.deleteRule();
+ }
+ });
+ }
+
+ return {
+ init: initialize
+ };
+});
+
+define("firewall_upnp_set","underscore jquery knockout set service".split(" "),
+ function (_, $, ko, config, service) {
+
+ //system upnp setting VM
+
+ function UpnpSettingVM() {
+ var target = this;
+ var upnpInfo = getUpnpSetting();
+
+ target.upnpSetting = ko.observable(upnpInfo.upnpSetting);
+
+ target.save = saveFunc;
+ function saveFunc() {
+ showLoading();
+ var upnpParams = {};
+ upnpParams.upnpSetting = target.upnpSetting();
+ service.setUpnpSetting(upnpParams, function (rlt) {
+ if (rlt.result == "success") {
+ successOverlay();
+ } else {
+ errorOverlay();
+ }
+ });
+
+ }
+ }
+
+
+ //获取upnp 信息
+
+ function getUpnpSetting() {
+ return service.getUpnpSetting();
+ }
+
+ //初始化UpnpSettingVM model
+
+ function initialize() {
+
+ var vm = new UpnpSettingVM();
+ bindContainer(vm);
+
+ }
+ function bindContainer(vm) {
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ ko.applyBindings(vm, container[0]);
+ $('#upnpSettingForm').validate({
+ submitHandler: function () {
+ vm.save();
+ }
+ });
+ }
+
+ return {
+ init: initialize
+ };
+});
+
+define("firewall_upnp_set","underscore jquery knockout set service".split(" "),
+ function (_, $, ko, config, service) {
+
+ //system upnp setting VM
+
+ function UpnpSettingVM() {
+ var target = this;
+ var upnpInfo = getUpnpSetting();
+
+ target.upnpSetting = ko.observable(upnpInfo.upnpSetting);
+
+ target.save = saveFunc;
+ function saveFunc() {
+ showLoading();
+ var upnpParams = {};
+ upnpParams.upnpSetting = target.upnpSetting();
+ service.setUpnpSetting(upnpParams, function (rlt) {
+ if (rlt.result == "success") {
+ successOverlay();
+ } else {
+ errorOverlay();
+ }
+ });
+
+ }
+ }
+
+
+ //获取upnp 信息
+
+ function getUpnpSetting() {
+ return service.getUpnpSetting();
+ }
+
+ //初始化UpnpSettingVM model
+
+ function initialize() {
+
+ var vm = new UpnpSettingVM();
+ bindContainer(vm);
+
+ }
+ function bindContainer(vm) {
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ ko.applyBindings(vm, container[0]);
+ $('#upnpSettingForm').validate({
+ submitHandler: function () {
+ vm.save();
+ }
+ });
+ }
+
+ return {
+ init: initialize
+ };
+});
+
+//端口映射
+
+define("firewall_port_map","underscore jquery knockout set service".split(" "),
+ function (_, $, ko, config, service) {
+
+ var protocolModes = _.map(config.MAP_PROTOCOL_MODES, function (ele) {
+ return new Option(ele.name, ele.value);
+ });
+
+ var columnsTmpl = [{
+ columnType: "checkbox",
+ rowText: "index",
+ width: "8%"
+ }, {
+ headerTextTrans: "source_port",
+ rowText: "sourcePort",
+ width: "20%"
+ }, {
+ headerTextTrans: "dest_ip_address",
+ rowText: "destIpAddress",
+ width: "20%"
+ }, {
+ headerTextTrans: "dest_port",
+ rowText: "destPort",
+ width: "20%"
+ }, {
+ headerTextTrans: "protocol",
+ rowText: "protocol",
+ width: "12%"
+ }, {
+ headerTextTrans: "comment",
+ rowText: "comment",
+ width: "20%"
+ }
+ ];
+
+ //prot_map VM
+
+ function PortMapVM() {
+ var target = this;
+ var mapInfo = getPortMap();
+
+ target.oriPortMapEnable = ko.observable(mapInfo.portMapEnable);
+ target.rules = ko.observableArray(mapInfo.portMapRules);
+ target.portMapEnable = ko.observable(mapInfo.portMapEnable);
+
+
+ target.comment = ko.observable('');
+ target.selectedMode = ko.observable('TCP&UDP');
+ target.modes = ko.observableArray(protocolModes);
+
+ target.destPort = ko.observable('');
+ target.destIpAddress = ko.observable('');
+ target.sourcePort = ko.observable('');
+
+
+
+ target.gridTemplate = new ko.simpleGrid.viewModel({
+ data: target.rules(),
+ idName: "index",
+ columns: columnsTmpl,
+ tmplType: 'list',
+ pageSize: 10
+ });
+
+ //设定,新增,删除回调函数
+
+ target.callback = callbackFunc;
+
+ //删除规则
+
+ target.deleteMapRules = deleteMapRulesFunc;
+
+ //检查新增规则是否已经存在
+
+ target.checkExist = checkExistFunc;
+
+ //设定端口映射
+
+ target.enablePortMap = enablePortMapFunc;
+
+ //保存规则
+
+ target.save = saveFunc;
+
+ //保存规则
+ function saveFunc() {
+ if (target.rules().length >= config.portForwardMax) {
+ showAlert({
+ msg: "rules_max",
+ params: config.portForwardMax
+ });
+ return;
+ }
+
+ if (target.checkExist()) {
+ showAlert("rule_exist");
+ return;
+ }
+
+ showLoading();
+ var mapParams = {};
+ mapParams.portMapEnable = target.portMapEnable();
+ mapParams.sourcePort = target.sourcePort();
+ mapParams.destIpAddress = target.destIpAddress();
+ mapParams.destPort = target.destPort();
+ mapParams.protocol = target.selectedMode();
+ mapParams.comment = target.comment();
+ service.setPortMap(mapParams, target.callback);
+ }
+
+ //检查新增规则是否已经存在
+ function checkExistFunc() {
+ var newMapRule = {
+ sourcePort: target.sourcePort(),
+ destIpAddress: target.destIpAddress(),
+ destPort: target.destPort(),
+ protocol: transProtocolValue(target.selectedMode())
+ };
+
+ var oldMapRule;
+ var mapRules = target.rules();
+ for (var idx = 0; idx < mapRules.length; idx++) {
+ oldMapRule = {
+ sourcePort: mapRules[idx].sourcePort,
+ destIpAddress: mapRules[idx].destIpAddress,
+ destPort: mapRules[idx].destPort,
+ protocol: mapRules[idx].protocol
+ };
+
+ if (_.isEqual(newMapRule, oldMapRule)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ //设定端口映射
+ function enablePortMapFunc() {
+ showLoading();
+ var mapParams = {};
+ mapParams.portMapEnable = target.portMapEnable();
+ service.enablePortMap(mapParams, target.callback);
+ }
+
+ //删除规则
+ function deleteMapRulesFunc() {
+ var ids = target.gridTemplate.selectedIds();
+ if (ids.length == 0) {
+ showAlert("no_data_selected");
+ return;
+ }
+
+ showConfirm("confirm_data_delete", function () {
+ showLoading();
+ var mapParams = {};
+ mapParams.indexs = ids;
+ service.deleteMapRules(mapParams, target.callback);
+ });
+ }
+
+ //设定,新增,删除回调函数
+ function callbackFunc(ret) {
+ if (ret.result == "success") {
+ clear();
+ initialize(target);
+ successOverlay();
+ } else {
+ errorOverlay();
+ }
+ }
+
+ //情况添加规则输入
+
+ function clear() {
+ target.sourcePort('');
+ target.destIpAddress('');
+ target.destPort('');
+ target.selectedMode('TCP&UDP');
+ target.comment('');
+ }
+ }
+
+ //获取port map信息
+
+ function getPortMap() {
+ return service.getPortMap();
+ }
+
+ function bindingContainer(vm){
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ ko.applyBindings(vm, container[0]);
+
+ }
+ //初始化port map view model
+
+ function initialize(viewModel) {
+ var vm;
+ if (viewModel) {
+ vm = viewModel;
+ var mapInfo = getPortMap();
+ vm.portMapEnable(mapInfo.portMapEnable);
+ vm.oriPortMapEnable(mapInfo.portMapEnable);
+ vm.rules(mapInfo.portMapRules);
+ vm.gridTemplate.clearAllChecked();
+ vm.gridTemplate.data(mapInfo.portMapRules);
+ refreshTableHeight();
+ renderCheckbox();
+ return;
+ }
+
+ vm = new PortMapVM();
+ bindingContainer(vm);
+ fixTableHeight();
+
+ $('#mapBasicForm').validate({
+ submitHandler: function () {
+ vm.enablePortMap();
+ }
+ });
+
+ $('#portMapListForm').validate({
+ submitHandler: function () {
+ vm.deleteMapRules();
+ }
+ });
+
+ $('#portMapForm').validate({
+ submitHandler: function () {
+ vm.save();
+ },
+ rules: {
+ txtDestIpAddress: {
+ ip_check: true
+ },
+ txtSourcePort: {
+ digits: true,
+ range_except: [1, 65000]
+ },
+ txtDestPort: {
+ digits: true,
+ range_except: [1, 65000]
+ },
+ txtComment: {
+ comment_check: true
+ }
+ },
+ errorPlacement: function (error, element) {
+ if (element.attr("name") == "txtDestIpAddress") {
+ error.appendTo("#txtDestIpAddressErrorDiv");
+ } else if (element.attr("name") == "txtSourcePort") {
+ error.appendTo("#txtSourcePortErrorDiv");
+ } else if (element.attr("name") == "txtDestPort") {
+ error.appendTo("#txtDestPortErrorDiv");
+ } else
+ error.insertAfter(element);
+ }
+ });
+ }
+
+ return {
+ init: initialize
+ };
+});
+
+//端口转发
+
+define("firewall_port_forward","underscore jquery knockout set service".split(" "),
+ function (_, $, ko, config, service) {
+
+ var protocolModes = _.map(config.FORWARD_PROTOCOL_MODES, function (ele) {
+ return new Option(ele.name, ele.value);
+ });
+ //列表模板的columns项
+
+ var columnsTmpl = [{
+ columnType: "checkbox",
+ rowText: "index",
+ width: "8%"
+ }, {
+ headerTextTrans: "ip_address",
+ rowText: "ipAddress",
+ width: "23%"
+ }, {
+ headerTextTrans: "port_range",
+ rowText: "portRange",
+ width: "23%"
+ }, {
+ headerTextTrans: "protocol",
+ rowText: "protocol",
+ width: "23%"
+ }, {
+ headerTextTrans: "comment",
+ rowText: "comment",
+ width: "23%"
+ }
+ ];
+
+ //prot_forward VM
+
+ function PortForwardVM() {
+ var target = this;
+ var fwdinfo = getPortForward();
+
+ target.portForwardEnable = ko.observable(fwdinfo.portForwardEnable);
+ target.oriPortForwardEnable = ko.observable(fwdinfo.portForwardEnable);
+
+ target.portEnd = ko.observable('');
+ target.portStart = ko.observable('');
+ target.ipAddress = ko.observable('');
+
+ target.comment = ko.observable('');
+ target.selectedMode = ko.observable('3');
+ target.modes = ko.observableArray(protocolModes);
+
+ target.rules = ko.observableArray(fwdinfo.portForwardRules);
+
+ //设定,新增,删除回调函数
+
+ target.callback = callbackFunc;
+
+ //创建列表模板
+
+ target.gridTemplate = new ko.simpleGrid.viewModel({
+ data: target.rules(),
+ idName: "index",
+ columns: columnsTmpl,
+ tmplType: 'list',
+ pageSize: 10
+ });
+
+ //检查新增规则是否已经存在
+
+ target.checkExist = checkExistFunc;
+
+ //保存规则
+
+ target.save = saveFunc;
+
+ //删除规则
+
+ target.deleteForwardRules = deleteForwardRulesFunc;
+
+ //设定虚拟服务器
+
+ target.enableVirtualServer = enableVirtualServerFunc;
+
+ //设定虚拟服务器
+ function enableVirtualServerFunc() {
+ showLoading();
+ var fwdParams = {};
+ fwdParams.portForwardEnable = target.portForwardEnable();
+ service.enableVirtualServer(fwdParams, target.callback);
+ }
+
+ //删除规则
+ function deleteForwardRulesFunc() {
+ var ids = target.gridTemplate.selectedIds();
+ if (ids.length == 0) {
+ showAlert("no_data_selected");
+ return;
+ }
+
+ showConfirm("confirm_data_delete", function () {
+ showLoading('deleting');
+ var fwdParams = {};
+ fwdParams.indexs = ids;
+ service.deleteForwardRules(fwdParams, target.callback);
+ });
+ }
+
+ //保存规则
+ function saveFunc() {
+ if (target.rules().length >= config.portForwardMax) {
+ showAlert({
+ msg: "rules_max",
+ params: config.portForwardMax
+ });
+ return;
+ }
+
+ if (target.checkExist()) {
+ showAlert("rule_exist");
+ return;
+ }
+
+ showLoading();
+ var fwdParams = {};
+ fwdParams.comment = target.comment();
+ fwdParams.protocol = target.selectedMode();
+ fwdParams.portEnd = target.portEnd();
+ fwdParams.portStart = target.portStart();
+ fwdParams.ipAddress = target.ipAddress();
+ service.setPortForward(fwdParams, target.callback);
+ }
+ //情况添加规则输入
+ function clear() {
+ target.ipAddress('');
+ target.portStart('');
+ target.portEnd('');
+ target.selectedMode('TCP&UDP');
+ target.comment('');
+ }
+
+ //设定,新增,删除回调函数
+ function callbackFunc(ret) {
+ if (ret.result == "success") {
+ clear();
+ initialize(target);
+ successOverlay();
+ } else {
+ errorOverlay();
+ }
+ }
+
+ //检查新增规则是否已经存在
+ function checkExistFunc() {
+ var newRule = {
+ ipAddress: target.ipAddress(),
+ portRange: target.portStart() + ' - ' + target.portEnd(),
+ protocol: transProtocolValue(target.selectedMode())
+ };
+
+ var oldRule;
+ var fwdrules = target.rules();
+ for (var ki = 0; ki < fwdrules.length; ki++) {
+ oldRule = {
+ ipAddress: fwdrules[ki].ipAddress,
+ portRange: fwdrules[ki].portRange,
+ protocol: fwdrules[ki].protocol
+ };
+
+ if (_.isEqual(newRule, oldRule)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ }
+
+ //获取port forward信息
+
+ function getPortForward() {
+ return service.getPortForward();
+ }
+
+ //初始化port forward view model
+
+ function initialize(viewModel) {
+ var vm;
+ if (viewModel) {
+ vm = viewModel;
+ var fwdinfo = getPortForward();
+ vm.gridTemplate.clearAllChecked();
+ vm.gridTemplate.data(fwdinfo.portForwardRules);
+ vm.rules(fwdinfo.portForwardRules);
+ vm.portForwardEnable(fwdinfo.portForwardEnable);
+ vm.oriPortForwardEnable(fwdinfo.portForwardEnable);
+ refreshTableHeight();
+ return;
+ }
+
+ vm = new PortForwardVM();
+ bindContainer(vm);
+
+ fixTableHeight();
+ renderCheckbox();
+
+ $('#virtualServerForm').validate({
+ submitHandler: function () {
+ vm.enableVirtualServer();
+ }
+ });
+
+ $('#portForwardListForm').validate({
+ submitHandler: function () {
+ vm.deleteForwardRules();
+ }
+ });
+
+ $('#portForwardForm').validate({
+ submitHandler: function () {
+ vm.save();
+ },
+ rules: {
+ txtIpAddress: {
+ ip_check: true
+ },
+ txtPortStart: {
+ digits: true,
+ range: [1, 65535],
+ portCompare: "#txtPortEnd"
+ },
+ txtPortEnd: {
+ digits: true,
+ range: [1, 65535],
+ portCompare: "#txtPortStart"
+ },
+ txtComment: {
+ comment_check: true
+ }
+ },
+ groups: {
+ range: "txtPortStart txtPortEnd"
+ },
+ errorPlacement: function (error, element) {
+ if (element.attr("name") == "txtIpAddress") {
+ error.appendTo("#ipErrorDiv");
+ } else if (element.attr("name") == "txtPortStart" || element.attr("name") == "txtPortEnd") {
+ error.appendTo("#portRangeErrorDiv");
+ } else
+ error.insertAfter(element);
+ }
+ });
+ }
+
+ function bindContainer(vm){
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ ko.applyBindings(vm, container[0]);
+
+ }
+
+
+ return {
+ init: initialize
+ };
+});
+
+define("firewall_port_filter","underscore jquery knockout set service".split(" "),
+ function (_, $, ko, config, service) {
+
+ var PROTOCOLS = {
+ ICMP: 'ICMP',
+ NONE: 'None'
+ };
+
+ var columnsTmpl = [{
+ columnType: "checkbox",
+ rowText: "index",
+ width: "4%"
+ }, {
+ headerTextTrans: "mac_address",
+ rowText: "macAddress",
+ width: "12%"
+ }, {
+ headerTextTrans: "ip_type",
+ rowText: "ipType",
+ width: "5%",
+ display: config.IPV6_SUPPORT
+ }, {
+ headerTextTrans: "source_ip_address",
+ rowText: "sourceIpAddress",
+ width: "12%"
+ }, {
+ headerTextTrans: "dest_ip_address",
+ rowText: "destIpAddress",
+ width: "12%"
+ }, {
+ headerTextTrans: "protocol",
+ rowText: "protocol",
+ width: "12%",
+ needTrans: true
+ }, {
+ headerTextTrans: "source_port_range",
+ rowText: "sourcePortRange",
+ width: "12%"
+ }, {
+ headerTextTrans: "dest_port_range",
+ rowText: "destPortRange",
+ width: "12%"
+ }, {
+ headerTextTrans: "port_filter_action",
+ rowText: "action",
+ width: "12%",
+ needTrans: true
+ }, {
+ headerTextTrans: "comment",
+ rowText: "comment",
+ width: "12%"
+ }
+ ];
+
+ var protocolModes = _.map(config.FILTER_PROTOCOL_MODES, function (elem) {
+ return new Option(elem.name, elem.value);
+ });
+ //prot_filter VM
+
+ function PortFilterVM() {
+ var target = this;
+ var info = getPortFilter();
+
+ target.oriDefaultPolicy = ko.observable(info.defaultPolicy);
+ target.defaultPolicy = ko.observable(info.defaultPolicy);
+ target.oriPortFilterEnable = ko.observable(info.portFilterEnable);
+ target.portFilterEnable = ko.observable(info.portFilterEnable);
+ target.rules = ko.observableArray(info.portFilterRules);
+
+ target.ipv6Support = ko.observable(config.IPV6_SUPPORT);
+ target.comment = ko.observable('');
+ target.selectedMode = ko.observable('5');
+ target.modes = ko.observableArray(protocolModes);
+ target.sourcePortEnd = ko.observable('');
+ target.sourcePortStart = ko.observable('');
+ target.destPortEnd = ko.observable('');
+ target.destPortStart = ko.observable('');
+ target.destIpv6Address = ko.observable('');
+ target.sourceIpv6Address = ko.observable('');
+ target.sourceIpAddress = ko.observable('');
+ target.destIpAddress = ko.observable('');
+ target.macAddress = ko.observable('');
+ target.portFilterAction = ko.observable('');
+
+ target.ipType = ko.observable('ipv4');
+
+ //设定,新增,删除回调函数
+
+ target.callback = callbackFunc;
+
+ //创建列表模板
+
+ target.gridTemplate = new ko.simpleGrid.viewModel({
+ data: target.rules(),
+ idName: "index",
+ columns: columnsTmpl,
+ tmplType: 'list',
+ pageSize: 20
+ });
+ //default policy change handler
+
+ target.policyChangeHandler = policyChangeHandlerFunc;
+
+ //保存规则
+
+ target.save = saveFunc;
+
+ //设定过滤基本信息
+
+ target.setPortFilterBasic = setPortFilterBasicFunc;
+
+ //清空添加规则输入
+
+ target.clear = clearFunc;
+
+ //检查新增规则是否已经存在
+
+ target.checkExist = checkExistFunc;
+
+ //ip类型变化事件监听
+
+ target.ipTypeChangeHandler = ipTypeChangeHandlerFunc;
+
+ //协议变化事件监听
+
+ target.protocolChangeHandler = protocolChangeHandlerFunc;
+
+ //删除规则
+
+ target.deleteFilterRules = deleteFilterRulesFunc;
+
+ //init to call
+ target.policyChangeHandler();
+
+ //设定,新增,删除回调函数
+ function callbackFunc(ret) {
+ if (ret.result != "success") {
+ errorOverlay();
+ } else {
+ target.clear();
+ initialize(target);
+ successOverlay();
+ }
+ }
+ //default policy change handler
+ function policyChangeHandlerFunc() {
+ var action = target.defaultPolicy() != "1" ? "Drop" : "Accept";
+ target.portFilterAction(action);
+ return true;
+ }
+
+ //保存规则
+ function saveFunc() {
+ target.sourceIpAddress(target.sourceIpAddress().replace(/\s+/g, ''));
+ target.destIpAddress(target.destIpAddress().replace(/\s+/g, ''));
+ target.sourceIpv6Address(target.sourceIpv6Address().replace(/\s+/g, ''));
+ target.destIpv6Address(target.destIpv6Address().replace(/\s+/g, ''));
+ target.macAddress(target.macAddress().replace(/\s+/g, ''));
+ if (target.ipv6Support() == false) {
+ if (target.rules().length >= config.portForwardMax) {
+ showAlert({
+ msg: "rules_max",
+ params: config.portForwardMax
+ });
+ return;
+ }
+
+ if (target.checkExist()) {
+ showAlert("rule_exist");
+ return;
+ }
+
+ } else {
+ var type = target.ipType() == "ipv4" ? "IPv4" : "IPv6";
+ var oldRules = _.filter(target.rules(), function (item) {
+ return item.ipType == type;
+ });
+
+ if (oldRules.length >= config.portForwardMax) {
+ showAlert({
+ msg: "rules_max_v4v6",
+ params: [type, config.portForwardMax]
+ });
+ return;
+ }
+
+ if (target.checkExist()) {
+ showAlert({
+ msg: "rule_exist_v4v6",
+ params: type
+ });
+ return;
+ }
+ }
+ showConfirm("confirm_data_effect", function () {
+ showLoading();
+ var fltParams = {};
+ fltParams.macAddress = target.macAddress();
+
+ if (target.ipv6Support() && target.ipType() != 'ipv6') {
+ fltParams.destIpAddress = target.destIpAddress();
+ fltParams.sourceIpAddress = target.sourceIpAddress();
+ } else {
+ fltParams.destIpAddress = target.destIpv6Address();
+ fltParams.sourceIpAddress = target.sourceIpv6Address();
+ }
+
+ fltParams.ipType = target.ipType();
+ fltParams.comment = target.comment();
+ fltParams.protocol = target.selectedMode();
+ fltParams.action = target.portFilterAction();
+ fltParams.sourcePortEnd = target.sourcePortEnd();
+ fltParams.sourcePortStart = target.sourcePortStart();
+ fltParams.destPortEnd = target.destPortEnd();
+ fltParams.destPortStart = target.destPortStart();
+ service.setPortFilter(fltParams, target.callback);
+ });
+ }
+
+ //设定过滤基本信息
+ function setPortFilterBasicFunc() {
+ showLoading();
+ var elems = {};
+ elems.defaultPolicy = target.defaultPolicy();
+ elems.portFilterEnable = target.portFilterEnable();
+ service.setPortFilterBasic(elems, target.callback);
+ }
+ //清空添加规则输入
+ function clearFunc() {
+ target.comment('');
+ target.selectedMode('None');
+ target.sourcePortEnd('0');
+ target.sourcePortStart('0');
+ target.destPortEnd('0');
+ target.destPortStart('0');
+ target.sourceIpv6Address('');
+ target.sourceIpAddress('');
+ target.destIpv6Address('');
+ target.destIpAddress('');
+ target.macAddress('');
+ clearValidateMsg();
+ }
+
+ //检查新增规则是否已经存在
+ function checkExistFunc() {
+ target.macAddress(target.macAddress().toUpperCase());
+ var currIpType = target.ipType().toUpperCase();
+ var newRule = {
+ macAddress: target.macAddress(),
+ destIpAddress: currIpType == "IPV4" ? target.destIpAddress() : target.destIpv6Address(),
+ sourceIpAddress: currIpType == "IPV4" ? target.sourceIpAddress() : target.sourceIpv6Address(),
+ destPortRange: target.destPortStart() == '0' ? '' : target.destPortStart() + ' - ' + target.destPortEnd(),
+ sourcePortRange: target.sourcePortStart() == '0' ? '' : target.sourcePortStart() + ' - ' + target.sourcePortEnd(),
+ action: target.portFilterAction() == "Drop" ? "filter_drop" : "filter_accept",
+ protocol: transProtocolValue(target.selectedMode()),
+ ipType: currIpType
+ };
+
+ var oldRule;
+ var rules = target.rules();
+ for (var ki = 0; ki < rules.length; ki++) {
+ oldRule = {
+ macAddress: rules[ki].macAddress,
+ destIpAddress: rules[ki].destIpAddress,
+ sourceIpAddress: rules[ki].sourceIpAddress,
+ destPortRange: rules[ki].destPortRange,
+ sourcePortRange: rules[ki].sourcePortRange,
+ action: rules[ki].action,
+ protocol: rules[ki].protocol,
+ ipType: rules[ki].ipType.toUpperCase()
+ };
+
+ if (_.isEqual(newRule, oldRule)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ //协议变化事件监听
+ function protocolChangeHandlerFunc() {
+ if (target.selectedMode() == PROTOCOLS.ICMP || target.selectedMode() == PROTOCOLS.NONE) {
+ target.sourcePortEnd('0');
+ target.sourcePortStart('0');
+ target.destPortEnd('0');
+ target.destPortStart('0');
+ clearValidateMsg('#portRangeArea');
+ } else {
+ target.sourcePortEnd('65535');
+ target.sourcePortStart('1');
+ target.destPortEnd('65535');
+ target.destPortStart('1');
+ }
+ return true;
+ }
+
+ //删除规则
+ function deleteFilterRulesFunc() {
+ var ids = target.gridTemplate.selectedIds();
+ if (ids.length == 0) {
+ showAlert("no_data_selected");
+ return;
+ }
+
+ showConfirm("confirm_data_effect", function () {
+ showLoading('deleting');
+ var rules = {};
+ rules.indexs = ids;
+ service.deleteFilterRules(rules, target.callback);
+ });
+ }
+
+ }
+
+ //获取port filter信息
+
+ function getPortFilter() {
+ return service.getPortFilter();
+ }
+
+ //ip类型变化事件监听
+ function ipTypeChangeHandlerFunc() {
+ clearValidateMsg();
+ return true;
+ }
+
+ //初始化port filter view model
+
+ function initialize(viewModel) {
+ var vm;
+ if (viewModel) {
+ vm = viewModel;
+ var fltinfo = getPortFilter();
+ vm.gridTemplate.clearAllChecked();
+ vm.gridTemplate.data(fltinfo.portFilterRules);
+ vm.defaultPolicy(fltinfo.defaultPolicy);
+ vm.oriDefaultPolicy(fltinfo.defaultPolicy);
+ vm.portFilterEnable(fltinfo.portFilterEnable);
+ vm.oriPortFilterEnable(fltinfo.portFilterEnable);
+ vm.rules(fltinfo.portFilterRules);
+ refreshTableHeight();
+ $('#portFilters').find('tbody').translate();
+ renderCheckbox();
+ $('.notes-content').translate();
+ return;
+ }
+
+ vm = new PortFilterVM();
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ ko.applyBindings(vm, container[0]);
+
+ fixTableHeight();
+
+ $('#filterBasicForm').validate({
+ submitHandler: function () {
+ showConfirm("confirm_data_effect", function () {
+ vm.setPortFilterBasic();
+ });
+ }
+ });
+
+ $('#portFilterListForm').validate({
+ submitHandler: function () {
+ vm.deleteFilterRules();
+ }
+ });
+
+ $('#portFilterForm').validate({
+ submitHandler: function () {
+ vm.save();
+ },
+ rules: {
+ txtMacAddress: {
+ filter_optional: true,
+ mac_check: true
+ },
+ txtDestIpAddress: {
+ ip_check: true
+ },
+ txtSourceIpAddress: {
+ ip_check: true
+ },
+ txtSourceIpv6Address: {
+ ipv6: true
+ },
+ txtDestIpv6Address: {
+ ipv6: true
+ },
+ txtDestPortStart: {
+ digits: true,
+ range: [1, 65535],
+ portCompare: "#txtDestPortEnd"
+ },
+ txtDestPortEnd: {
+ digits: true,
+ range: [1, 65535],
+ portCompare: "#txtDestPortStart"
+ },
+ txtSourcePortStart: {
+ digits: true,
+ range: [1, 65535],
+ portCompare: "#txtSourcePortEnd"
+ },
+ txtSourcePortEnd: {
+ digits: true,
+ range: [1, 65535],
+ portCompare: "#txtSourcePortStart"
+ },
+
+ txtComment: {
+ comment_check: true
+ }
+ },
+ groups: {
+ destPort: "txtDestPortStart txtDestPortEnd",
+ sourcePort: "txtSourcePortStart txtSourcePortEnd"
+ },
+ errorPlacement: function (error, element) {
+ if (element.attr("name") == "txtMacAddress") {
+ error.appendTo("#macErrorDiv");
+ } else if (element.attr("name") == "txtDestPortStart" || element.attr("name") == "txtDestPortEnd") {
+ error.appendTo("#destPortErrorDiv");
+ } else if (element.attr("name") == "txtSourcePortStart" || element.attr("name") == "txtSourcePortEnd") {
+ error.appendTo("#sourcePortErrorDiv");
+ } else
+ error.insertAfter(element);
+ }
+ });
+ }
+
+ $.validator.addMethod("filter_optional", function (value, element, param) {
+ var result = _.any(['#txtMacAddress', '#txtDestIpAddress', '#txtSourceIpAddress', '#txtSourceIpv6Address', '#txtDestIpv6Address'],
+ function (item) {
+ var tmp = $(item).val().replace(/\s+/g, '');
+ return $(item + ':visible').length > 0 && tmp != '';
+ });
+
+ var portResult = _.any(['#txtDestPortStart', '#txtDestPortEnd', '#txtSourcePortStart', '#txtSourcePortEnd'],
+ function (item) {
+ return $(item).val() != '0';
+ });
+
+ return result || portResult;
+ });
+
+ return {
+ init: initialize
+ };
+});
+
+//家长控制
+
+define("firewall_parental_control","underscore jquery knockout set service".split(" "),
+ function (_, $, ko, config, service) {
+
+ var maxItem = 10;
+ var pcVm = null;
+ var PAGES = {
+ MAIN: 0,
+ MANAGE: 1,
+ RULE: 2
+ };
+
+
+ function ParentalControlVM() {
+ var target = this;
+ var hostNameList = service.getHostNameList({}).devices;
+ target.currentPage = ko.observable(PAGES.MAIN);
+ target.pages = PAGES;
+
+
+ target.childGroupList = ko.observable([]);
+ target.childGroupMac = ko.computed(function () {
+ return _.map(target.childGroupList(), function (data) {
+ return data.mac;
+ });
+ });
+
+ target.currentUserInChildGroup = ko.observable(true);
+ //获取儿童组设备列表
+
+ target.fetchChildGroupList = fetchChildGroupListFunc;
+
+ target.fetchChildGroupList();
+
+ target.manageHandler = manageHandlerFunc;
+ function manageHandlerFunc() {
+ target.currentPage(PAGES.MANAGE);
+ target.fetchAttachedDevices();
+ }
+ target.attachedDevices = ko.observable([]);
+ //获取已连接设备列表
+
+ target.fetchAttachedDevices = fetchAttachedDevicesFunc;
+
+
+ //儿童组设备 标签按钮事件
+
+ target.backToMainHandler = backToMainHandlerFunc;
+
+
+ ko.computed(function () {
+ target.attachedDevices();
+ target.childGroupList();
+ $("#pc_children_group_form").translate();
+ }).extend({
+ notify: 'always',
+ throttle: 300
+ });
+
+ //添加至儿童组
+
+ function addChildGroupFun(flag, eleData) {
+ showLoading();
+ service.addChildGroup(eleData, function (data) {
+ target.fetchChildGroupList(function () {
+ target.fetchAttachedDevices(function () {
+ hideLoading();
+ if (flag) {
+ service.logout({}, function () {
+ window.location = 'index.html';
+ });
+ }
+ });
+ });
+ }, function (data) {
+ errorOverlay();
+ });
+ }
+
+ //移除按钮事件
+
+ target.removeChildGroupHandler = removeChildGroupHandlerFunc;
+
+
+ //添加按钮事件
+
+ target.addChildGroupHandler = addChildGroupHandlerFunc;
+
+
+ target.dealElement = dealElementFunc;
+
+
+
+ //取消编辑主机名按钮事件
+
+ target.cancelEditHostNameHandler = cancelEditHostNameHandlerFunc;
+
+ //主机名编辑保存按钮事件
+
+ target.saveHostNameHandler = saveHostNameHandlerFunc;
+
+ //主机名编辑按钮事件
+
+ target.editHostNameHandler = editHostNameHandlerFunc;
+
+
+ target.selectedIds = ko.observableArray([]);
+ target.siteList = ko.observable([]);
+ /////////////////////////////////////////////////////////////////
+ target.disableAdd = ko.computed(function () {
+ return target.siteList().length == maxItem;
+ });
+
+ ko.computed(function () {
+ target.siteList();
+ target.selectedIds();
+ setTimeout(function () {
+ renderCheckbox();
+ }, 100);
+ $("#pc_site_white_list_form").translate();
+ });
+
+ //网站白名单添加按钮事件
+
+ target.openAddSitePopoverHandler = openAddSitePopoverHandlerFunc;
+
+ //网站白名单列表选择框点击事件
+
+ target.checkboxClickHandler = checkboxClickHandlerFunc;
+
+ //获取网站白名单列表
+
+ target.fetchSiteWhiteList = fetchSiteWhiteListFunc;
+
+ //网站白名单删除函数
+
+ function removeSiteWhiteItem(ids) {
+ showConfirm('confirm_data_delete', function () {
+ showLoading();
+ service.removeSiteWhite({
+ ids: ids
+ }, function (data) {
+ target.fetchSiteWhiteList(function () {
+ successOverlay();
+ });
+ }, function (data) {
+ target.fetchSiteWhiteList(function () {
+ errorOverlay();
+ });
+ });
+ });
+ }
+ //网站白名单删除所有按钮事件
+
+ target.removeAllWhiteSite = removeAllWhiteSiteFunc;
+
+ //网站白名单删除按钮事件
+
+ target.removeSelectedWhiteSite = removeSelectedWhiteSiteFunc;
+
+ //网站白名单移除按钮事件
+
+ target.removeWhiteSite = removeWhiteSiteFunc;
+
+
+
+ //网站白名单添加框保存按钮事件
+
+ target.saveSiteWhite = saveSiteWhiteFunc;
+
+ //////////////////////////////////////////////////////////////////
+ target.notSave = ko.observable(false);
+ //获取时间限制信息
+
+ target.fetchTimeLimited = fetchTimeLimitedFunc;
+
+
+ //上网时间设置时间表格事件绑定
+
+ target.bindEvent = bindEventFunc;
+
+ //上网时间设置保存按钮事件
+
+ target.saveTimeLimitedHandler = saveTimeLimitedHandlerFunc;
+
+ //////////////////////////////////////////////////////////////////
+ var isBinded = false;
+ //上网规则标签点击事件
+
+ target.openRulePage = openRulePageFunc;
+ function openRulePageFunc() {
+ if (target.currentPage() == PAGES.RULE) {
+ return;
+ }
+ target.currentPage(PAGES.RULE);
+ target.currentUserInChildGroup(service.checkCurrentUserInChildGroup().result);
+ initTableData();
+ if (!isBinded) {
+ if (!target.currentUserInChildGroup()) {
+ target.bindEvent();
+ }
+ isBinded = true;
+ }
+ showLoading();
+ target.fetchTimeLimited();
+ target.fetchSiteWhiteList(function () {
+ hideLoading();
+ });
+ }
+
+ //获取儿童组设备列表
+ function fetchChildGroupListFunc(cb) {
+ service.childGroupList({}, function (data) {
+ target.currentUserInChildGroup(service.checkCurrentUserInChildGroup(data.devices).result);
+ target.childGroupList([]);
+ _.map(data.devices, function (elem, idx) {
+ elem.idx = idx;
+ elem.hostname = pcUtil.getHostName(elem.hostname, elem.mac, hostNameList);
+ });
+ target.childGroupList(data.devices);
+ if (_.isFunction(cb)) {
+ cb.apply(this);
+ }
+ });
+ }
+
+ //获取已连接设备列表
+ function fetchAttachedDevicesFunc(cb) {
+ target.attachedDevices([]);
+ var counter = 0;
+ var currDevices = [];
+ //RJ45 已连接设备
+ service.getAttachedCableDevices({}, function (data) {
+ counter++;
+ var devs = _.map(data.attachedDevices, function (elem) {
+ elem.idx = _.uniqueId('wireless_');
+ elem.hostName = pcUtil.getHostName(elem.hostName, elem.macAddress, hostNameList);
+ elem.inChildGroup = _.contains(target.childGroupMac(), elem.macAddress);
+ return elem;
+ });
+ if (counter != 1) {
+ target.attachedDevices(_.flatten([currDevices, devs]));
+ if (_.isFunction(cb)) {
+ cb.apply(this);
+ }
+ } else {
+ currDevices = devs;
+ }
+ });
+
+ //wifi 已连接设备
+ service.getCurrentlyAttachedDevicesInfo({}, function (data) {
+ counter++;
+ var devs = _.map(data.attachedDevices, function (elem) {
+ elem.idx = _.uniqueId('wireless_');
+ elem.hostName = pcUtil.getHostName(elem.hostName, elem.macAddress, hostNameList);
+ elem.inChildGroup = _.contains(target.childGroupMac(), elem.macAddress);
+ return elem;
+ });
+ if (counter != 1) {
+ target.attachedDevices(_.flatten([currDevices, devs]));
+ if (_.isFunction(cb)) {
+ cb.apply(this);
+ }
+ } else {
+ currDevices = devs;
+ }
+ });
+ }
+ //儿童组设备 标签按钮事件
+ function backToMainHandlerFunc() {
+ target.currentPage(PAGES.MAIN);
+ }
+
+ //移除按钮事件
+ function removeChildGroupHandlerFunc(ele) {
+ showLoading();
+ service.removeChildGroup(ele, function (data) {
+ target.fetchChildGroupList(function () {
+ target.fetchAttachedDevices(function () {
+ hideLoading();
+ });
+ });
+ }, function (data) {
+ errorOverlay();
+ });
+ }
+
+ //添加按钮事件
+ function addChildGroupHandlerFunc(data) {
+ var uMacAddr = service.getCurretnMAC();
+ if (uMacAddr != data.macAddress) {
+ addChildGroupFun(false, data);
+ } else {
+ showConfirm("parental_add_self", function () {
+ addChildGroupFun(true, data);
+ })
+ }
+ }
+
+ //取消编辑主机名按钮事件
+ function cancelEditHostNameHandlerFunc(eleData) {
+ target.dealElement(false, eleData.idx);
+ }
+
+ //主机名编辑保存按钮事件
+ function saveHostNameHandlerFunc(ele) {
+ var $hostInput = $("#hostname_input_" + ele.idx);
+ var hostname = $.trim($hostInput.val());
+ if (hostname.indexOf(" ") == 0 || hostname.lastIndexOf(" ") == (hostname.length - 1) || /[\*\+\$\[&:,;<>'"\\`\]¥]{1,32}/.test(hostname)) {
+ showAlert('modify_hostname_invalid');
+ return false;
+ }else if (hostname == '') {
+ $(".promptErrorLabel", "#confirm-message-container").text($.i18n.prop("required"));
+ var $closestTD = $hostInput.closest('td').addClass('has-error');
+ addTimeout(function () {
+ $closestTD.removeClass('has-error');
+ }, 5000);
+ showAlert('required');
+ return false;
+ }
+ showLoading();
+ ele.hostname = hostname;
+ service.editHostName(ele, function () {
+ service.getHostNameList({}, function (hostNameData) {
+ hostNameList = hostNameData.devices;
+ target.fetchChildGroupList(function () {
+ hideLoading();
+ });
+ target.fetchAttachedDevices();
+ });
+ }, function () {
+ errorOverlay();
+ });
+ }
+
+ //主机名编辑按钮事件
+ function editHostNameHandlerFunc(ele) {
+ $("#hostname_input_" + ele.idx).val(ele.hostname);
+ target.dealElement(true, ele.idx);
+ return false;
+ }
+ //网站白名单添加按钮事件
+ function openAddSitePopoverHandlerFunc() {
+ var addNewSiteTmpl = $("#addNewSiteTmpl").html();
+ popover.open({
+ target: $("#openAddSiteBtn"),
+ html: addNewSiteTmpl,
+ width: "300px",
+ validation: addValidation
+ });
+ }
+
+ //网站白名单列表选择框点击事件
+ function checkboxClickHandlerFunc(eleData, evt) {
+ addTimeout(function () {
+ target.selectedIds(getSelectedValues());
+ }, 100);
+ }
+ //获取网站白名单列表
+ function fetchSiteWhiteListFunc(cb) {
+ service.getSiteWhiteList({}, function (eledata) {
+ target.selectedIds([]);
+ target.siteList(eledata.siteList);
+ _.isFunction(cb) && cb.apply(this);
+ }, function () {
+ target.siteList([]);
+ _.isFunction(cb) && cb.apply(this);
+ });
+ }
+
+ //网站白名单删除所有按钮事件
+ function removeAllWhiteSiteFunc() {
+ removeSiteWhiteItem(getAllCheckboxValues());
+ }
+ //网站白名单删除按钮事件
+ function removeSelectedWhiteSiteFunc() {
+ removeSiteWhiteItem(getSelectedValues());
+ }
+ //网站白名单移除按钮事件
+ function removeWhiteSiteFunc(ele, evt) {
+ removeSiteWhiteItem([ele.id]);
+ }
+
+ //网站白名单添加框保存按钮事件
+ function saveSiteWhiteFunc(name, site) {
+ popover.hide();
+ var matched = _.find(target.siteList(), function (one) {
+ return one.site == site;
+ });
+ if (matched) {
+ showAlert("pc_link_exist", function () {
+ setTimeout(function () {
+ popover.show();
+ }, 200);
+ });
+ return false;
+ }
+
+ showLoading();
+ service.saveSiteWhite({
+ name: name,
+ site: site
+ }, function () {
+ target.fetchSiteWhiteList(function () {
+ popover.close();
+ successOverlay();
+ });
+ }, function () {
+ target.fetchSiteWhiteList(function () {
+ errorOverlay();
+ popover.show();
+ });
+ });
+ }
+
+ //上网时间设置时间表格事件绑定
+ function bindEventFunc() {
+ $("td:not('.col-head')", "#pc_time_limited_tbody").addClass('cursorhand').die().click(function () {
+ target.notSave(true);
+ $(this).toggleClass('active');
+ }).hover(function () {
+ var $this = $(this);
+ var w = $this.data('week');
+ var h = $this.data('hour');
+ $("tr:nth-child(" + (w + 1) + ") td:first-child", "#pc_time_limited_tbody").addClass('time_td_hover');
+ $("#col_" + h).addClass('time_td_hover');
+ if ($this.not('.active')) {
+ $this.addClass('time_td_hover');
+ }
+ }, function () {
+ var $this = $(this);
+ var w = $this.data('week');
+ var h = $this.data('hour');
+ $("tr:nth-child(" + (w + 1) + ") td:first-child", "#pc_time_limited_tbody").removeClass('time_td_hover');
+ $("#col_" + h).removeClass('time_td_hover');
+ $this.removeClass('time_td_hover');
+ });
+ }
+
+ //上网时间设置保存按钮事件
+ function saveTimeLimitedHandlerFunc() {
+ showLoading();
+ var tds = getSelectedTds();
+ var timeStr = getSavedData(tds);
+ service.saveTimeLimited({
+ time: timeStr
+ }, function () {
+ target.notSave(false);
+ successOverlay();
+ }, function () {
+ errorOverlay();
+ });
+ }
+
+ }
+
+ function dealElementFunc(flag, idx) {
+ if (flag == false) {
+ $("#edit_btn_" + idx + ",#hostname_txt_" + idx).show();
+ $("#save_btn_" + idx + ",#cancel_btn_" + idx + ",#hostname_input_" + idx).hide();
+ } else {
+ $("#edit_btn_" + idx + ",#hostname_txt_" + idx).hide();
+ $("#save_btn_" + idx + ",#cancel_btn_" + idx + ",#hostname_input_" + idx).show();
+ }
+ }
+
+ //获取时间限制信息
+ function fetchTimeLimitedFunc() {
+ service.getTimeLimited({}, function (ele) {
+ for (var ki in ele) {
+ for (var idx = 0; idx < ele[ki].length; idx++) {
+ var id = 'td_' + ki + '_' + ele[ki][idx];
+ $("#" + id).addClass('active');
+ }
+ }
+ }, function () {});
+ }
+
+ var pcUtil = {
+ getHostName: function (hostName, mac, hostNameList) {
+ var ele = _.find(hostNameList, function (ele) {
+ return ele.mac == mac;
+ });
+ return ele ? ele.hostname : hostName;
+ }
+ };
+ function getCheckboxValues(flag) {
+ var selectedValues = [];
+ $(":checkbox" + (flag ? ":checked" : ""), "#pb_white_list").each(function (i, n) {
+ selectedValues.push(n.value)
+ });
+ return selectedValues;
+ }
+ //获取列表中被选中项的value值
+
+ function getSelectedValues() {
+ return getCheckboxValues(true);
+ }
+ function getAllCheckboxValues() {
+ return getCheckboxValues(false);
+ }
+
+ //增加网站白名单表单提交函数绑定和校验规则设置
+
+ function addValidation() {
+ $('#whiteSiteAddForm').validate({
+ submitHandler: function () {
+ var name = $("#siteName").val();
+ var site = $("#siteLink").val();
+ pcVm.saveSiteWhite(name, site);
+ },
+ rules: {
+ siteName: 'siteName_check',
+ siteLink: 'siteLink_check'
+ }
+ });
+ }
+
+ function getSavedData(timeDatas) {
+ var ret = '';
+ for (var ki in timeDatas) {
+ var hours = _.sortBy(timeDatas[ki], function (n) {
+ return n;
+ });
+ if (timeDatas[ki].length) {
+ ret += ki + '+';
+ ret += hours.join(',');
+ ret += ';'
+ }
+ }
+ return ret.substring(0, ret.length - 1);
+ }
+ //获取时间表格选中的时间
+
+ function getSelectedTds() {
+ var defaultValue = {
+ '0': [],
+ '1': [],
+ '2': [],
+ '3': [],
+ '4': [],
+ '5': [],
+ '6': []
+ };
+ $("td.active", "#pc_time_limited_tbody").each(function (i, n) {
+ var $this = $(n);
+ var week = $this.data('week');
+ var hour = $this.data('hour');
+ defaultValue[week].push(hour);
+ });
+ return defaultValue;
+ }
+
+ function convertHour(hour) {
+ if (hour <= 16) {
+ return hour + 7;
+ } else {
+ return hour - 17;
+ }
+ }
+ //初始化时间表格
+
+ function initTableData() {
+ $("tr", "#pc_time_limited_tbody").each(function (idx, n) {
+ var $tr = $(n);
+ $("td:not(:first)", $tr).each(function (j, m) {
+ var $td = $(m);
+ var hour = convertHour(j);
+ $td.attr({
+ id: 'td_' + idx + '_' + hour
+ }).data({
+ week: idx,
+ hour: hour
+ });
+ });
+ });
+ $("td.active", "#pc_time_limited_tbody").removeClass("active");
+ $("thead td:not(:first)", "#pc_time_limited_form").each(function (idx, n) {
+ var hour = convertHour(idx);
+ $(n).attr({
+ id: 'col_' + hour
+ });
+ });
+ pcVm.notSave(false);
+ }
+
+
+ //页面初始化
+
+ function initialize() {
+
+ pcVm = new ParentalControlVM();
+ bindContainer(pcVm);
+ }
+ function bindContainer(pcVm)
+ {
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ ko.applyBindings(pcVm, container[0]);
+ }
+
+ return {
+ init: initialize
+ };
+});
+
+define("firewall_dmz_set","underscore jquery knockout set service".split(" "),
+ function ( _, $, ko, config, service) {
+
+ //system dmz setting VM
+
+ function DmzSettingVM() {
+ var target = this;
+ var dmzInfo = getDmzSetting();
+ target.dmzSetting = ko.observable(dmzInfo.dmzSetting);
+ target.ipAddress = ko.observable(dmzInfo.ipAddress);
+ target.isDataCard = config.PRODUCT_TYPE == 'DATACARD';
+
+ target.clear = clearFunc;
+ //应用按钮事件
+
+ target.save = saveFunc;
+
+ function saveFunc() {
+ showLoading();
+ var params = {};
+ params.dmzSetting = target.dmzSetting();
+ params.ipAddress = target.ipAddress();
+ service.setDmzSetting(params, function (result) {
+ if (result.result != "success") {
+ errorOverlay();
+ } else {
+ target.clear();
+ successOverlay();
+ }
+ });
+ }
+
+ }
+
+ function clearFunc() {
+ initialize();
+ }
+
+
+ //获取dmz 信息
+
+ function getDmzSetting() {
+ return service.getDmzSetting();
+ }
+
+ //初始化DmzSettingVM model
+
+ function initialize() {
+
+ var dmzVm = new DmzSettingVM();
+ bindContainer(dmzVm);
+ }
+ function bindContainer(dmzVm){
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ ko.applyBindings(dmzVm, container[0]);
+ $('#dmzSettingForm').validate({
+ submitHandler: function () {
+ dmzVm.save();
+ },
+ rules: {
+ txtIpAddress: 'dmz_ip_check'
+ }
+ });
+ }
+
+ return {
+ init: initialize
+ };
+});
+
+define("firewall","underscore jquery knockout set service".split(" "),
+
+function(_, $, ko, config, service) {
+
+ function FirewallVM() {
+ var target = this;
+ target.hasDdns = config.DDNS_SUPPORT;
+ target.hasUpdateCheck = config.HAS_UPDATE_CHECK;
+ target.hasUrlFilter = config.HAS_URL;
+ target.hasUssd = config.HAS_USSD;
+ target.hasUpnp = config.HAS_UPNP;
+ }
+
+ function initialize() {
+ var fwVm = new FirewallVM();
+ bindingContainer(fwVm);
+ }
+ function bindingContainer(fwVm)
+ {
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ ko.applyBindings(fwVm, container[0]);
+ }
+ return {
+ init : initialize
+ };
+});
+
+define("ddns","underscore jquery knockout set service".split(" "), function (_, $, ko, config, service) {
+ var ddnsSetModes = _.map(config.DDNSSetMode, newOption);
+ var ddnsProviderList = _.map(config.DDNSDDP, newOption);
+ var ddns_mode_select = _.map(config.ddns_Modeselect, newOption);
+ function newOption(optItem) {
+ return new Option(optItem.name, optItem.value);
+ }
+ function DdnsViewModel() {
+ var target = this;
+ target.hasUssd = config.HAS_USSD;
+ target.hasUpdateCheck = config.HAS_UPDATE_CHECK;
+ var data = service.getDdnsParams();
+ target.ddnsSetModes = ko.observableArray(ddnsSetModes);
+ target.ddnsProviderList = ko.observableArray(ddnsProviderList);
+ target.ddns_mode_select = ko.observableArray(ddns_mode_select);
+ target.currentMode = ko.observable(data.DDNS_Enable);
+ target.currentModeselect = ko.observable(data.DDNS_Mode);
+ target.currentProviderList = ko.observable("dyndns.org");
+ $.each(config.DDNSDDP, function (i, n) {
+ if (data.DDNSProvider == n.value) {
+ target.currentProviderList(data.DDNSProvider);
+ }
+ });
+ target.DDNSaccount = ko.observable(data.DDNSAccount);
+ target.DDNSpasswd = ko.observable(data.DDNSPassword);
+ target.DDNSname = ko.observable(data.DDNS);
+ target.DDNS_HashValue = ko.observable(data.DDNS_Hash_Value);
+ target.isddnsStatusTrans = ko.observable();
+ target.isEnableSet = ko.observable();
+ target.isHashValue = ko.observable();
+ target.isddnsaccount = ko.observable();
+ target.isddnspasswd = ko.observable();
+ target.isDDNSStatus = ko.observable();
+ target.isddnsdomainName = ko.observable();
+ target.isNone = ko.observable();
+ target.onStates = ko.observable();
+ target.showPassword_ddns = ko.observable(false);
+ target.showPasswordHandler_ddns = showPasswordHandler_ddns;
+ changeddnsProviderList();
+ target.changeDdnsProvider = changeDdnsProviderFunc;
+ changeSetDdnsMode();
+ target.changeSetDdnsMode = changeSetDdnsModeFunc;
+ updateScanDdnsStatus();
+ target.apply = applyFunc;
+ function updateScanDdnsStatus() {
+ var trans = "";
+ $.getJSON("/reqproc/proc_get", {
+ cmd: "getddns_status",
+ "_": new Date().getTime()
+ }, function (data) {
+ if (data.getddns_status == "0") {
+ trans = "register successful";
+ target.onStates(true);
+ } else if (data.getddns_status == "1") {
+ trans = "login error";
+ target.onStates(true);
+ } else if (data.getddns_status == "2") {
+ trans = "network error";
+ target.onStates(true);
+ } else if (data.getddns_status == "3") {
+ trans = "registering";
+ target.onStates(true);
+ } else if (data.getddns_status == "4") {
+ trans = "not registered";
+ target.onStates(true);
+ } else if (data.getddns_status == "5") {
+ trans = "error registering";
+ target.onStates(true);
+ } else if (data.getddns_status == "-1") {
+ trans = "";
+ target.onStates(true);
+ }
+ target.isddnsStatusTrans($.i18n.prop(trans));
+ addTimeout(updateScanDdnsStatus, 2000);
+ });
+ }
+ function changeSetDdnsMode() {
+ if (target.currentMode() != "1") {
+ target.isEnableSet(false);
+ } else {
+ target.isEnableSet(true);
+ }
+ return true;
+ }
+ function changeSetDdnsModeFunc() {
+ changeSetDdnsMode();
+ }
+ function showPasswordHandler_ddns() {
+ $("#ddns_secretcode_input").parent().find(".error").hide();
+ var checkbox = $("#showPassword_ddns:checked");
+ if (checkbox && checkbox.length == 0) {
+ target.showPassword_ddns(true);
+ } else {
+ target.showPassword_ddns(false);
+ }
+ }
+ function changeDdnsProviderFunc() {
+ if (data.DDNSProvider != target.currentProviderList()) {
+ target.DDNSaccount("");
+ target.DDNSpasswd("");
+ target.DDNSname("");
+ } else {
+ target.DDNSaccount(data.DDNSAccount);
+ target.DDNSpasswd(data.DDNSPassword);
+ target.DDNSname(data.DDNS);
+ }
+ changeddnsProviderList();
+ }
+ function changeddnsProviderList() {
+ if (target.currentProviderList() != "none") {
+ target.isddnsaccount(true);
+ target.isddnspasswd(true);
+ target.isddnsdomainName(true);
+ target.isHashValue(true);
+ target.isDDNSStatus(true);
+ } else {
+ target.isddnsaccount(false);
+ target.isddnspasswd(false);
+ target.isddnsdomainName(false);
+ target.isHashValue(false);
+ target.isDDNSStatus(false);
+ }
+ if (target.currentProviderList() != "freedns.afraid.org") {
+ target.isHashValue(false);
+ } else {
+ target.isHashValue(true);
+ }
+ return true;
+ }
+ function applyFunc() {
+ showLoading();
+ var params = {};
+ params.goformId = "DDNS";
+ params.DDNS_Enable = target.currentMode();
+ if (target.currentMode() == "1") {
+ params.DDNS_Mode = target.currentModeselect();
+ params.DDNSProvider = target.currentProviderList();
+ if (target.currentProviderList() != "none") {
+ params.DDNS = target.DDNSname();
+ params.DDNSPassword = target.DDNSpasswd();
+ params.DDNSAccount = target.DDNSaccount();
+ }
+ if (target.currentProviderList() == "freedns.afraid.org") {
+ params.DDNS_Hash_Value = target.DDNS_HashValue();
+ }
+ }
+ service.setDDNSForward(params, function (result) {
+ if (result.result == "success") {
+ successOverlay();
+ data = service.getDdnsParams();
+ } else {
+ errorOverlay();
+ }
+ });
+ }
+ }
+ function initialize() {
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ var vm = new DdnsViewModel();
+ ko.applyBindings(vm, container[0]);
+ $("#ddnsForm").validate({
+ submitHandler: function () {
+ vm.apply();
+ },
+ rules: {
+ ddns_secretcode_input: "secretcode_check",
+ DDNS_Hash_Value: "ddns_hashvalue_check",
+ ddns_secretcode_inputshow: "secretcode_check"
+ },
+ errorPlacement: function (error, element) {
+ var id = element.attr("id");
+ if (id == "ddns_secretcode_input" || id == "ddns_secretcode_inputshow") {
+ error.insertAfter("#lblShowPassword");
+ } else {
+ error.insertAfter(element);
+ }
+ }
+ });
+ }
+ return {
+ init: initialize
+ };
+});
+
+
+//选网模块
+
+define("network_net_select","underscore jquery knockout set service".split(" "),
+ function (_, $, ko, config, service) {
+
+ var selectModes = _.map(config.AUTO_MODES, function (item) {
+ return new Option(item.name, item.value);
+ });
+
+ //选网功能view model
+
+ function NetSelectVM() {
+ var target = this;
+
+ target.networkList = ko.observableArray([]);
+ target.selectNetwork = ko.observable('');
+ target.enableFlag = ko.observable(true);
+ target.types = ko.observableArray(selectModes);
+ target.selectedType = ko.observable();
+ target.selectMode = ko.observable();
+
+ target.networkText = networkTextFunc;
+
+ target.networkStatusId = networkStatusIdFunc;
+
+ target.networkStatus = networkStatusFunc;
+
+ target.subnetworkType = subnetworkTypeFunc;
+
+ target.networkType = networkTypeFunc;
+
+ target.operatorName = operatorNameFunc;
+
+ target.networkValue = networkValueFunc;
+
+ target.networkTypeId = networkTypeIdFunc;
+
+ target.subnetTypeId = subnetTypeIdFunc;
+ //手动搜网.
+
+ target.search = searchFunc;
+
+ //自动选网时设置网络模式.
+
+ target.save = saveFunc;
+
+ target.checkEnable = checkEnableFunc;
+
+ //注册选择的网络.
+
+ target.register = registerFunc;
+
+ //init data
+ target.checkEnable();
+ var info = getNetSelectInfo();
+ if ("manual_select" == info.net_select_mode || "manual_select" == info.m_netselect_save) {
+ target.selectMode("manual_select");
+ } else {
+ target.selectMode("auto_select");
+ }
+
+ target.selectedType(info.net_select);
+
+ //注册选择的网络.
+ function registerFunc() {
+ showLoading('registering_net');
+ var networkToSet = target.selectNetwork().split(',');
+ service.setNetwork(networkToSet[0], parseInt(networkToSet[1]), parseInt(networkToSet[2]), function (result) {
+ if (result) {
+ target.networkList([]);
+ var autoType = getNetSelectInfo();
+ target.selectedType(autoType.net_select);
+ successOverlay();
+ } else {
+ errorOverlay();
+ }
+ });
+ }
+
+ function checkEnableFunc() {
+ var status = service.getStatusInfo();
+ if (status.connectStatus == "ppp_connected" || status.connectStatus == "ppp_connecting") {
+ target.enableFlag(false);
+ } else {
+ target.enableFlag(true);
+ }
+ }
+
+ //自动选网时设置网络模式.
+ function saveFunc() {
+ showLoading();
+
+ //AutoSelect call SetBearerPreference
+ var params = {};
+ params.strBearerPreference = target.selectedType();
+ service.setBearerPreference(params, function (result) {
+ if (result.result == "success") {
+ target.networkList([]);
+ successOverlay();
+ } else {
+ errorOverlay();
+ }
+ });
+ }
+
+ //手动搜网.
+ function searchFunc() {
+ showLoading('searching_net');
+ service.scanForNetwork(function (result, networkList) {
+ hideLoading();
+ if (result) {
+ target.networkList(networkList);
+ for (var i = 0; i < networkList.length; i++) {
+ var n = networkList[i];
+ if (n.nState == '2') {
+ target.selectNetwork(n.strNumeric + ',' + n.nRat + ',' + n.SubAct);
+ return;
+ }
+ }
+ } else {
+ target.networkList([]);
+ }
+ });
+ }
+
+ function subnetTypeIdFunc(data) {
+ return getSubNetworkTypeTog(data.nRat, data.SubAct);
+ }
+
+ function networkTypeIdFunc(data) {
+ return getNetworkType(data.nRat);
+ }
+
+ function networkValueFunc(data) {
+ var result = [];
+ result.push(data.strNumeric); //strNumeric
+ result.push(data.nRat); //nRat
+ result.push(data.SubAct);
+ return result.join(',');
+ }
+
+ function operatorNameFunc(data) {
+ return data.strShortName;
+ }
+
+ function networkTypeFunc(data) {
+ var result = getNetworkType(data.nRat);
+ if (result == "auto")
+ result = $.i18n.prop("auto");
+ return result;
+ }
+
+ function subnetworkTypeFunc(data) {
+ var result = getSubNetworkTypeTog(data.nRat, data.SubAct);
+ return result;
+ }
+
+ function networkStatusFunc(data) {
+ return $.i18n.prop(getNetworkStatusTog(data.nState));
+ }
+
+ function networkStatusIdFunc(data) {
+ return getNetworkStatusTog(data.nState);
+ }
+
+ function networkTextFunc(data) {
+ return data.strNumeric;
+ }
+
+ }
+
+ //获取网络选择信息.
+
+ function getNetSelectInfo() {
+ return service.getNetSelectInfo();
+ }
+
+ //搜网结果中的状态转换为对应的语言项.
+
+ function getNetworkStatusTog(status) {
+ if ("3" == status) {
+ return "forbidden";
+ } else if ("2" == status) {
+ return "current";
+ } else if ("1" == status) {
+ return "available";
+ }else if ("0" == status) {
+ return "unknown";
+ }
+ }
+ //子网络类型转换.
+
+ function getSubNetworkTypeTog(type, subtype) {
+ var type_3g = [2, 4, 5, 6, 8];
+ if ("1" == subtype) {
+ if ("7" == type) {
+ subtype = "FDD-LTE";
+ } else if ($.inArray(type, type_3g) != -1) {
+ subtype = "WCDMA";
+ }else {
+ subtype = "GSM";
+ }
+ } else if ("0" == subtype) {
+ if ("7" == type) {
+ subtype = "TD-LTE";
+ } else if ($.inArray(type, type_3g) != -1) {
+ subtype = "TD-SCDMA";
+ } else {
+ subtype = "GSM";
+ }
+ } else {
+ subtype = "";
+ }
+ return subtype;
+ }
+ //网络类型转换.
+
+ function getNetworkType(type) {
+ if ("7" == type) {
+ return "4G";
+ } else if ("2" == type) {
+ return "3G";
+ } else if ("0" == type) {
+ return "2G";
+ } else {
+ return "auto";
+ }
+ }
+
+ function bindContainer(vm){
+
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ ko.applyBindings(vm, container[0]);
+ }
+
+ //初始化选网功能view model.
+
+ function initialize() {
+ var vm = new NetSelectVM();
+ bindContainer(vm);
+ addInterval(vm.checkEnable, 1000);
+ }
+
+ return {
+ init: initialize
+ };
+});
+define("locknet","jquery knockout service jquery set main".split(" "),
+ function ($, ko, service, config, home) {
+
+ function initialize() {
+ var container = $('#container')[0];
+ ko.cleanNode(container);
+ var vm = new locknetViewMode();
+ ko.applyBindings(vm, container);
+
+ $("#frmNetworkLock").validate({
+ submitHandler: function () {
+ vm.unlock();
+ },
+ rules: {
+ txtLockNumber: "unlock_code_check"
+ }
+ });
+ }
+
+ function locknetViewMode() {
+ var target = this;
+ var curCableMode = false;
+ target.isCPE = config.PRODUCT_TYPE == 'CPE';
+ 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 == false) {
+ target.showQRCode = config.WIFI_SUPPORT_QR_CODE;
+ } else {
+ var wifiInfo = service.getWifiBasic();
+ target.showQRCode = config.WIFI_SUPPORT_QR_CODE && wifiInfo.show_qrcode_flag;
+ }
+ if(config.WIFI_SUPPORT_QR_CODE){
+ target.qrcodeSrc = './pic/qrcode_ssid_wifikey.png?_=' + $.now();
+ } else {
+ target.qrcodeSrc = './pic/res_blacktrans.png';
+ }
+ target.hasParentalControl = ko.observable(config.HAS_PARENTAL_CONTROL && curCableMode);
+ target.deviceInfo = ko.observable([]);
+ target.isHomePage = ko.observable(false);
+ if (window.location.hash == "#main") {
+ target.isHomePage(true);
+ }
+
+ target.supportUnlock = config.NETWORK_UNLOCK_SUPPORT;
+ target.unlockCode = ko.observable();
+
+ var info = service.getNetworkUnlockTimes();
+ target.times = ko.observable(info.unlock_nck_time);
+
+ //显示工作模式设置窗口
+ target.showOpModeWindow = showOpModeWindowFunc;
+
+ target.isLoggedIn = ko.observable(false);
+ target.enableFlag = ko.observable(false);
+ //解锁
+ target.unlock = unlockFunc;
+
+ //更新工作模式状态
+ target.refreshOpmodeInfo = refreshOpmodeInfoFunc;
+
+ //定时检查工作模式状态
+ if (target.hasRj45) {
+ target.refreshOpmodeInfo();
+ addInterval(function () {
+ target.refreshOpmodeInfo();
+ }, 1000);
+ }
+
+ //更新工作模式状态
+ function refreshOpmodeInfoFunc() {
+ var obj = service.getStatusInfo();
+ target.isLoggedIn(obj.isLoggedIn);
+
+ if (!curCableMode && checkCableMode(obj.blc_wan_mode)) { //如果有线,则重新加载
+ window.location.reload();
+ return;
+ }
+
+ curCableMode = checkCableMode(obj.blc_wan_mode);
+ target.hasParentalControl(config.HAS_PARENTAL_CONTROL && curCableMode);
+ if (curCableMode && obj.ethWanMode.toUpperCase() == "DHCP") {
+ target.enableFlag(true);
+ } else if ((!curCableMode && obj.connectStatus != "ppp_disconnected") || (curCableMode && obj.rj45ConnectStatus != "idle" && obj.rj45ConnectStatus != "dead")) {
+ target.enableFlag(false);
+ } else {
+ target.enableFlag(true);
+ }
+ var getMode = (obj.blc_wan_mode == "AUTO_PPP" || obj.blc_wan_mode == "AUTO_PPPOE") ? "AUTO" : obj.blc_wan_mode;
+ var currMode = "";
+ switch (getMode) {
+ case "PPP":
+ currMode = "opmode_gateway";
+ break;
+ case "PPPOE":
+ currMode = "opmode_cable";
+ break;
+ case "AUTO":
+ currMode = "opmode_auto";
+ break;
+ default:
+ break;
+ }
+ $("#opmode").attr("data-trans", currMode).text($.i18n.prop(currMode));
+ }
+
+ //解锁
+ function unlockFunc() {
+ showLoading();
+ service.unlockNetwork({
+ unlock_network_code: target.unlockCode()
+ }, function (data) {
+ target.unlockCode("");
+ if (data && data.result == "success") {
+ successOverlay();
+ if (window.location.hash == "#main") {
+ setTimeout(function () {
+ window.location.reload();
+ }, 500);
+ } else {
+ window.location.hash = "#main";
+ }
+ } else {
+ var info = service.getNetworkUnlockTimes();
+ target.times(info.unlock_nck_time);
+ errorOverlay();
+ }
+ })
+ }
+
+ //显示工作模式设置窗口
+ function showOpModeWindowFunc() {
+ showSettingWindow("change_mode", "opmode_popup", "opmode_popup", 400, 300, function () {});
+ }
+ }
+
+ return {
+ init: initialize
+ };
+});
+
+// RJ45联网设置模块
+
+define("network_dial_set_cpe","underscore jquery knockout set service".split(" "),
+function(_, $, ko, config, service) {
+ var dialActions = _.map(config.dialActions, function(elem){
+ return new Option(elem.name, elem.value);
+ });
+
+ var dialModes = _.map(config.pppoeModes, function(elem) {
+ return new Option(elem.name, elem.value);
+ });
+
+ var checkStatusTimer = 0;
+ var checkConCounter = 0;
+ var timeoutTipShowed = false;
+
+ // 联网设置view model.
+
+ function PPPoEViewModel() {
+ var pppObj = service.getPppoeParams();
+ var ethParams = pppObj;
+ var target = this;
+
+ target.staticNoticeShow = ko.observable();
+ target.dhcpNoticeShow = ko.observable();
+ target.pppoeNoticeShow = ko.observable();
+ target.autoNoticeShow = ko.observable();
+ target.staticNotice = ko.observable();
+ target.dhcpNotice = ko.observable();
+ target.pppoeNotice = ko.observable();
+ target.autoNotice = ko.observable();
+ target.dhcpNoticeText = ko.observable();
+ target.staticNoticeText = ko.observable();
+ target.pppoeNoticeText = ko.observable();
+ target.autoNoticeText = ko.observable();
+ target.currentMode = ko.observable(pppObj.ethwan_mode);//auto dhcp pppoe static
+ target.showPassword = ko.observable(false);
+ target.modes = ko.observableArray(dialModes);
+ target.isPppoeMode = ko.observable(false);
+ target.isStaticMode = ko.observable(false);
+ target.isAutoMode = ko.observable(false);
+ target.action = ko.observable();
+ target.btnTrans = ko.observable();
+ target.enableFlag = ko.observable();
+ target.isShowDisbtn = ko.observable();
+ target.isShowCancelbtn = ko.observable();
+
+ if(pppObj.rj45_state == "dead"){
+ checkRj45DeadTip();
+ } else if(pppObj.rj45_state == "connect"){
+ timeoutTipShowed = true;
+ setRj45CheckTimer("connect");
+ } else if(pppObj.rj45_state == "working"){
+ setRj45WorkingTip();
+ }
+
+ target.user = ko.observable(pppObj.pppoe_username);
+ target.password = ko.observable(pppObj.pppoe_cc);
+ target.autoUser = ko.observable(pppObj.pppoe_username);
+ target.autoPassword = ko.observable(pppObj.pppoe_cc);
+ target.pppMode = ko.observable(pppObj.ethwan_dialmode);
+ initContronler();
+
+
+ //下拉框选择改变下面DIV模块
+ target.changeModeDiv = changeModeDivFunc;
+
+ target.radioHandler = radioHandlerFunc;
+
+ target.primaryDNS = ko.observable(pppObj.static_wan_primary_dns);
+ target.secondaryDNS = ko.observable(pppObj.static_wan_secondary_dns);
+ target.ipAddress = ko.observable(pppObj.static_wan_ipaddr);
+ target.subnetMask = ko.observable(pppObj.static_wan_netmask);
+ target.defaultGateway = ko.observable(pppObj.static_wan_gateway);
+
+ addInterval(function(){
+ ethParams = service.getPppoeParams();
+ pppObj.rj45_state = ethParams.rj45_state;
+ initContronler();
+ }, 1000);
+
+ // 取消连接按钮事件.
+
+ target.cancelConnect = cancelConnectFunc;
+
+ // 应用按钮事件.
+
+ target.save = saveFunc;
+
+ //密码显示事件
+ target.showPasswordHandler = function () {
+ var checkbox = $("#showPassword:checked");
+ if (checkbox && checkbox.length == 0) {
+ target.showPassword(true);
+ } else {
+ target.showPassword(false);
+ }
+ };
+
+ // 更新当前界面状态、按钮、提示语等.
+
+ function initContronler() {
+ checkRj45DeadTip();
+ if(target.currentMode() == "PPPOE"){
+ target.isPppoeMode(true);
+ target.isStaticMode(false);
+ target.isAutoMode(false);
+ target.staticNoticeShow(false);
+ target.dhcpNoticeShow(false);
+ target.autoNoticeShow(false);
+ } else if(target.currentMode() == "AUTO"){
+ target.isStaticMode(false);
+ target.isPppoeMode(false);
+ target.isAutoMode(true);
+ target.dhcpNoticeShow(false);
+ target.pppoeNoticeShow(false);
+ target.staticNoticeShow(false);
+ } else if(target.currentMode() == "STATIC"){
+ target.isStaticMode(true);
+ target.isPppoeMode(false);
+ target.isAutoMode(false);
+ target.dhcpNoticeShow(false);
+ target.pppoeNoticeShow(false);
+ target.autoNoticeShow(false);
+ } else{
+ target.isStaticMode(false);
+ target.isPppoeMode(false);
+ target.isAutoMode(false);
+ target.staticNoticeShow(false);
+ target.pppoeNoticeShow(false);
+ target.autoNoticeShow(false);
+ }
+ if(ethParams.ethwan_dialmode != "auto_dial" && (pppObj.rj45_state == "working" || pppObj.rj45_state =="connect") ){
+ target.enableFlag(false);
+ } else {
+ target.enableFlag(true);
+ }
+ if(pppObj.rj45_state == "connect"){
+ if(target.pppMode() == "auto_dial"){
+ target.action("connect");
+ }else{
+ target.action("disconnect");
+ }
+ } else if(pppObj.rj45_state == "working"){
+ target.action("disconnect");
+ }else{
+ target.action("connect");
+ }
+ //应用/连接按钮
+ if(target.pppMode() != "auto_dial" && target.currentMode() == ethParams.ethwan_mode){
+ target.btnTrans("connect");
+ } else{
+ target.btnTrans("apply");
+ }
+ if(pppObj.rj45_state != "idle"){
+ $("#pppoeApply").attr("disabled", true);
+ }else {
+ $("#pppoeApply").attr("disabled", false);
+ }
+
+ //取消/断开按钮
+ target.isShowDisbtn(target.pppMode() != "auto_dial" && pppObj.rj45_state == "working");
+ target.isShowCancelbtn(target.pppMode() != "auto_dial" && pppObj.rj45_state == "connect");
+
+ $("#pppoeApply").translate();
+ }
+ // 设置后通过定时检查rj45_state状态,判断连接或断开操作结果.
+
+ function setRj45CheckTimer(action){
+ checkStatusTimer && window.clearInterval(checkStatusTimer);
+ if("connect" != action){
+ checkStatusTimer = addInterval(function () {
+ checkDisconnectStatus();
+ }, 2000);
+ }else{
+ if(target.currentMode() == "PPPOE"){
+ target.pppoeNoticeShow(true);
+ target.pppoeNotice("pppoe_processing");
+ target.pppoeNoticeText($.i18n.prop("pppoe_processing"));
+ } else if(target.currentMode() == "STATIC"){
+ target.staticNoticeShow(true);
+ target.staticNotice("static_processing");
+ target.staticNoticeText($.i18n.prop("static_processing"));
+ } else if(target.currentMode() == "DHCP"){
+ target.dhcpNoticeShow(true);
+ target.dhcpNotice("dyn_processing");
+ target.dhcpNoticeText($.i18n.prop("dyn_processing"));
+ }else{
+ target.autoNoticeShow(true);
+ target.autoNotice("auto_processing");
+ target.autoNoticeText($.i18n.prop("auto_processing"));
+ }
+ checkStatusTimer = addInterval(function () {
+ checkConnectionStatus();
+ }, 2000);
+ }
+ }
+ // 设置后通过定时检查rj45_state状态,判断连接操作结果.
+
+ function checkConnectionStatus(){
+ if(checkConCounter < 1){
+ checkConCounter++;
+ return;
+ }
+ if(pppObj.rj45_state == "connect"){
+ if(target.currentMode() != ethParams.ethwan_mode){
+ if(target.currentMode() == "AUTO"){
+ target.autoNoticeShow(true);
+ }else if(target.currentMode() == "PPPOE"){
+ target.pppoeNoticeShow(true);
+ }else if(target.currentMode() == "STATIC"){
+ target.staticNoticeShow(true);
+ }else if(target.currentMode() == "DHCP"){
+ target.dhcpNoticeShow(true);
+ }
+ }
+ if(checkConCounter > 6){
+ if(timeoutTipShowed == false){
+ timeoutTipShowed = true;
+ showAlert("ussd_operation_timeout");
+ }
+ }
+ checkConCounter++;
+ } else if (pppObj.rj45_state == "working") {
+ hideLoading();
+ setRj45WorkingTip();
+ window.clearInterval(checkStatusTimer);
+ } else if (pppObj.rj45_state == "dead") {
+ hideLoading();
+ checkRj45DeadTip();
+ window.clearInterval(checkStatusTimer);
+ } else if(pppObj.rj45_state == "idle"){
+ hideLoading();
+ if(target.currentMode() == "DHCP" && ethParams.ethwan_mode == "DHCP") {
+ timeoutTipShowed == false && target.dhcpNoticeShow(true);
+ target.dhcpNotice("dyn_fail");
+ target.dhcpNoticeText($.i18n.prop("dyn_fail"));
+ }
+ if(target.currentMode() == "STATIC" && ethParams.ethwan_mode == "STATIC") {
+ timeoutTipShowed == false && target.staticNoticeShow(true);
+ target.staticNotice("static_fail");
+ target.staticNoticeText($.i18n.prop("static_fail"));
+ }
+ if(target.currentMode() == "PPPOE" && ethParams.ethwan_mode == "PPPOE") {
+ timeoutTipShowed == false && target.pppoeNoticeShow(true);
+ target.pppoeNotice("pppoe_fail");
+ target.pppoeNoticeText($.i18n.prop("pppoe_fail"));
+ }
+ if(target.currentMode() == "AUTO" && ethParams.ethwan_mode == "AUTO") {
+ timeoutTipShowed == false && target.autoNoticeShow(true);
+ target.autoNotice("auto_fail");
+ target.autoNoticeText($.i18n.prop("auto_fail"));
+ }
+ window.clearInterval(checkStatusTimer);
+ } else{
+ hideLoading();
+ window.clearInterval(checkStatusTimer);
+ }
+ }
+ // 设置连接成功时提示语状态.
+
+ function setRj45WorkingTip(){
+ if(target.currentMode() == ethParams.ethwan_mode){
+ if(target.currentMode() == "AUTO") {
+ target.autoNoticeShow(true);
+ target.autoNotice("auto_success");
+ target.autoNoticeText($.i18n.prop("auto_success"));
+ }else if(target.currentMode() == "PPPOE") {
+ target.pppoeNoticeShow(true);
+ target.pppoeNotice("pppoe_success");
+ target.pppoeNoticeText($.i18n.prop("pppoe_success"));
+ }else if(target.currentMode() == "STATIC") {
+ target.staticNoticeShow(true);
+ target.staticNotice("static_success");
+ target.staticNoticeText($.i18n.prop("static_success"));
+ }else if(target.currentMode() == "DHCP" ) {
+ target.dhcpNoticeShow(true);
+ target.dhcpNotice("dyn_success");
+ target.dhcpNoticeText($.i18n.prop("dyn_success"));
+ }
+ }
+ }
+
+ // 设置网线断开提示语状态.
+
+ function checkRj45DeadTip(){
+ if(pppObj.rj45_state != "dead"){
+ if(target.currentMode() == "AUTO" && target.autoNotice() == "pppoe_msg") {
+ target.autoNoticeShow(false);
+ }else if(target.currentMode() == "PPPOE" && target.pppoeNotice() == "pppoe_msg") {
+ target.pppoeNoticeShow(false);
+ }else if(target.currentMode() == "STATIC" && target.staticNotice() == "pppoe_msg") {
+ target.staticNoticeShow(false);
+ }else if(target.currentMode() == "DHCP" && target.dhcpNotice() == "pppoe_msg") {
+ target.dhcpNoticeShow(false);
+ }
+
+ } else{
+ target.dhcpNotice("pppoe_msg");
+ target.dhcpNoticeText($.i18n.prop("pppoe_msg"));
+ target.staticNotice("pppoe_msg");
+ target.staticNoticeText($.i18n.prop("pppoe_msg"));
+ target.pppoeNotice("pppoe_msg");
+ target.pppoeNoticeText($.i18n.prop("pppoe_msg"));
+ target.autoNotice("pppoe_msg");
+ target.autoNoticeText($.i18n.prop("pppoe_msg"));
+ if(target.currentMode() == "AUTO") {
+ target.autoNoticeShow(true);
+ }else if(target.currentMode() == "PPPOE") {
+ target.pppoeNoticeShow(true);
+ }else if(target.currentMode() == "STATIC") {
+ target.staticNoticeShow(true);
+ }else if(target.currentMode() == "DHCP") {
+ target.dhcpNoticeShow(true);
+ }
+ }
+ }
+ // 设置后通过定时检查rj45_state状态,判断断开操作结果.
+
+ function checkDisconnectStatus(){
+ if(checkConCounter < 1){
+ checkConCounter++;
+ } else if (pppObj.rj45_state != "working" && pppObj.rj45_state != "connect") {
+ target.dhcpNoticeShow(false);
+ target.staticNoticeShow(false);
+ target.pppoeNoticeShow(false);
+ target.autoNoticeShow(false);
+ window.clearInterval(checkStatusTimer);
+ successOverlay();
+ } else if(checkConCounter > 6){
+ if(timeoutTipShowed == false){
+ timeoutTipShowed = true;
+ showAlert("ussd_operation_timeout");
+ }
+ window.clearInterval(checkStatusTimer);
+ } else if(checkConCounter < 7) {
+ checkConCounter++;
+ } else {
+ hideLoading();
+ window.clearInterval(checkStatusTimer);
+ }
+ }
+
+ //应用按钮事件.
+ function saveFunc(){
+ target.dhcpNoticeShow(false);
+ target.staticNoticeShow(false);
+ target.pppoeNoticeShow(false);
+ target.autoNoticeShow(false);
+ if(pppObj.rj45_state == "dead"){
+ showAlert("pppoe_msg");
+ return;
+ }
+ var requestParams = {};
+ if($("#pppoe_mode").val() == "PPPOE") {
+ requestParams = $.extend({}, {
+ goformId: "WAN_GATEWAYMODE_PPPOE",
+ pppoe_username: target.user(),
+ pppoe_cc: target.password()
+ });
+ } else if($("#pppoe_mode").val() == "AUTO") {
+ requestParams = $.extend({}, {
+ goformId: "WAN_GATEWAYMODE_AUTO",
+ pppoe_username: target.autoUser(),
+ pppoe_cc: target.autoPassword()
+ });
+ } else if($("#pppoe_mode").val() == "STATIC") {
+ if(target.ipAddress() == target.defaultGateway()){
+ showAlert("ip_gate_not_same");
+ return;
+ }
+ if(isStaticIPValid(target.ipAddress(), pppObj.lan_ipaddr, pppObj.lan_netmask)){
+ showAlert("ip_innergate_not_same");
+ return;
+ }
+ requestParams = $.extend({}, {
+ goformId: "WAN_GATEWAYMODE_STATIC",
+ static_wan_ipaddr: target.ipAddress(),
+ static_wan_netmask: target.subnetMask(),
+ static_wan_gateway: target.defaultGateway(),
+ static_wan_primary_dns: target.primaryDNS(),
+ static_wan_secondary_dns: target.secondaryDNS(),
+ WAN_MODE: "STATIC"
+ });
+ } else {
+ requestParams = $.extend({}, {
+ goformId: "WAN_GATEWAYMODE_DHCP"
+ });
+ }
+ requestParams.action_link = "connect";
+ requestParams.dial_mode = target.pppMode();
+ showLoading("waiting");
+
+ service.setPppoeDialMode(requestParams, function(data){
+ if(data.result){
+ target.currentMode($("#pppoe_mode").val());
+ pppObj = service.getPppoeParams();
+ checkConCounter = 0;
+ timeoutTipShowed = false;
+ setRj45CheckTimer("connect");
+ $("#pppoeApply").translate();
+ } else {
+ errorOverlay("pppoe_message_send_fail");
+ }
+ });
+
+ }
+
+ //取消连接按钮事件.
+ function cancelConnectFunc(){
+ target.dhcpNoticeShow(false);
+ target.staticNoticeShow(false);
+ target.pppoeNoticeShow(false);
+ target.autoNoticeShow(false);
+ if(pppObj.rj45_state == "dead"){
+ showAlert("pppoe_msg");
+ return;
+ }
+ var requestParams = {
+ dial_mode: target.pppMode(),
+ action_link: "disconnect"
+ };
+ if(pppObj.ethwan_mode == "PPPOE") {
+ requestParams = $.extend(requestParams, {
+ goformId: "WAN_GATEWAYMODE_PPPOE",
+ pppoe_username: pppObj.pppoe_username,
+ pppoe_cc: pppObj.pppoe_cc
+ });
+ }else if(pppObj.ethwan_mode == "AUTO") {
+ requestParams = $.extend(requestParams, {
+ goformId: "WAN_GATEWAYMODE_AUTO",
+ pppoe_username: pppObj.pppoe_username,
+ pppoe_cc: pppObj.pppoe_cc
+ });
+ }else if(pppObj.ethwan_mode == "STATIC") {
+ requestParams = $.extend(requestParams, {
+ goformId: "WAN_GATEWAYMODE_STATIC",
+ static_wan_ipaddr: pppObj.static_wan_ipaddr,
+ static_wan_netmask: pppObj.static_wan_netmask,
+ static_wan_gateway: pppObj.static_wan_gateway,
+ static_wan_primary_dns: pppObj.static_wan_primary_dns,
+ static_wan_secondary_dns: pppObj.static_wan_secondary_dns,
+ WAN_MODE: "STATIC"
+ });
+ }else {
+ requestParams = $.extend(requestParams, {
+ goformId: "WAN_GATEWAYMODE_DHCP"
+ });
+ }
+ showLoading("waiting");
+ service.setPppoeDialMode(requestParams, function(data){
+ if(data.result){
+ checkConCounter = 0;
+ timeoutTipShowed = false;
+ setRj45CheckTimer("disconnect");
+ $("#pppoeApply").translate();
+ } else {
+ errorOverlay("pppoe_message_send_fail");
+ }
+ });
+
+ }
+
+ function radioHandlerFunc(){
+ initContronler();
+ return true;
+ }
+
+ function changeModeDivFunc(){
+ initContronler();
+ }
+
+ }
+
+ function bindContainer(vm){
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ ko.applyBindings(vm, container[0]);
+
+ }
+ // 联网设置初始化.
+
+ function initialize() {
+ var vm = new PPPoEViewModel();
+ bindContainer(vm);
+
+ $("#pppoeApply").translate();
+
+ $('#pppoeForm').validate({
+ submitHandler : function() {
+ vm.save();
+ },
+ rules: {
+ txtPin: "wps_pin_check",
+ txtIpAddress: "dmz_ip_check",
+ txtSubnetMask: {
+ ipv4: true,
+ subnetmask_check: true
+ },
+ txtDefaultGateway: {
+ ipv4: true,
+ gateway_check: true
+ },
+ txtPrimaryDNS: {
+ ipv4: true,
+ dns_check:true
+ },
+ txtSecondaryDNS: {
+ ipv4: true,
+ dns_check:true
+ }
+ }
+ });
+ }
+
+
+//from 4.0
+ // 有效DNS检查.
+
+function validateDns(dns){
+ if ( "0.0.0.0" == dns || "255.255.255.255" == dns) {
+ return false;
+ }
+ return true;
+}
+ // 联网设置初始化.
+
+function isStaticIPValid(ip, lanip, lanmask){
+ if(!ip || !lanip || !lanmask){//各参数不能为空
+ return false;
+ }
+ if(ip == lanip){// 与内网IP相等
+ return true;
+ }
+ var res1 = [], res2 = [], mask = [];
+ addr1 = ip.split(".");
+ addr2 = lanip.split(".");
+ mask = lanmask.split(".");
+ for(var i = 0; i < addr1.length; i += 1){
+ res1.push(parseInt(addr1[i]) & parseInt(mask[i]));
+ res2.push(parseInt(addr2[i]) & parseInt(mask[i]));
+ }
+ if(res1.join(".") == res2.join(".")){//在同一个网段
+ return true;
+ }else{//不在同一个网段
+ return false;
+ }
+}
+
+// 有效子网掩码验证.
+
+function isNetmaskIPValid(ip) {
+ if (ip == 255 || ip == 254 || ip == 252 || ip == 248
+ || ip == 240 || ip == 224 || ip == 192 || ip == 128 || ip == 0)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+ // 有效子网掩码检查.
+
+function validateNetmask(netmask) {
+ var array = new Array();
+ array = netmask.split(".");
+
+ if (array.length != 4) {
+ return false;
+ }
+
+ array[0] = parseInt(array[0]);
+ array[1] = parseInt(array[1]);
+ array[2] = parseInt(array[2]);
+ array[3] = parseInt(array[3]);
+
+ if (array[3] != 0) {
+ if (array[2] != 255 || array[1] != 255 || array[0] != 255) {
+ return false;
+ } else {
+ if (!isNetmaskIPValid(array[3])) {
+ return false;
+ }
+ }
+ }
+
+ if (array[2] != 0) {
+ if (array[1] != 255 || array[0] != 255) {
+ return false;
+ } else {
+ if (!isNetmaskIPValid(array[2])) {
+ return false;
+ }
+ }
+ }
+
+ if (array[1] != 0) {
+ if (array[0] != 255) {
+ return false;
+ } else{
+ if (!isNetmaskIPValid(array[1])) {
+ return false;
+ }
+ }
+ }
+ if(array[0]!=255) {
+ return false;
+ }
+ if ( "0.0.0.0" == netmask || "255.255.255.255" == netmask) {
+ return false;
+ }
+ return true;
+}
+
+ // subnetmask_check校验规则
+
+jQuery.validator.addMethod("subnetmask_check", function (value, element, param) {
+ var result = validateNetmask(value);
+ return this.optional(element) || result;
+});
+ // dns_check校验规则
+
+jQuery.validator.addMethod("dns_check", function (value, element, param) {
+ var result = validateDns(value);
+ return this.optional(element) || result;
+});
+ // 有效网关检查.
+
+function validateGateway(wanIp, netmaskIp, gatewayIp) {
+ if(myConcat(wanIp,netmaskIp) == myConcat(netmaskIp, gatewayIp)) {
+ return true;
+ } else {
+ return false;
+ }
+}
+ // IP和子网掩码转换成数组形式并相与,返回相与后的IP.
+
+function myConcat(ip1,ip2){
+ var result = [];
+ var iplArr = ip1.split(".");
+ var ip2Arr = ip2.split(".");
+ for(var i = 0; i < iplArr.length;i++){
+ result[i] = (iplArr[i] & ip2Arr[i]);
+ }
+ return result.join(".");
+}
+ // gateway_check校验规则
+
+jQuery.validator.addMethod("gateway_check", function (value, element, param) {
+ var result = validateGateway($('#txtIpAddress').val(), $('#txtSubnetMask').val(), $("#txtDefaultGateway").val());
+ return this.optional(element) || result;
+});
+
+ return {
+ init: initialize
+ };
+});
+//联网设置模块
+define("network_dial_set","underscore jquery knockout set service".split(" "),
+function(_, $, ko, config, service) {
+
+ //联网设置view model
+ function DialVM() {
+ var dialMode = service.getConnectionMode();
+ var target = this;
+
+ target.selectMode = ko.observable(dialMode.connectionMode);
+ target.enableFlag = ko.observable(true);
+ target.isAllowedRoaming = ko.observable(dialMode.isAllowedRoaming);
+ var originalRoaming = dialMode.isAllowedRoaming;
+
+ target.setAllowedRoaming = setAllowedRoamingFunc;
+
+ var checkboxFlag = $(".checkboxToggle");
+ target.checkEnable = checkEnableFunc;
+
+ //修改联网模式
+ target.save = saveFunc;
+
+ function saveFunc() {
+ showLoading();
+ var connMode = target.selectMode();
+ //当选择自动时,下发原先的勾选状态
+ if (connMode == 'auto_dial') {
+ originalRoaming = target.isAllowedRoaming();
+ } else {
+ target.isAllowedRoaming(originalRoaming);
+ }
+ service.setConnectionMode({
+ connectionMode: connMode,
+ isAllowedRoaming: target.isAllowedRoaming()
+ }, function (result) {
+ if (result.result == "success") {
+ successOverlay();
+ } else {
+ errorOverlay();
+ }
+ });
+ }
+
+ function setAllowedRoamingFunc() {
+ if(!$("#roamBtn").hasClass("disable")){
+ var checkbox = $("#isAllowedRoaming:checked");
+ if(checkbox && checkbox.length == 0 ){
+ target.isAllowedRoaming("on");
+ }else{
+ target.isAllowedRoaming("off");
+ }
+ }
+ }
+
+ function checkEnableFunc() {
+ var status = service.getStatusInfo();
+
+ if (status.connectStatus == "ppp_connected" || status.connectStatus == "ppp_connecting") {
+ target.enableFlag(false);
+ disableCheckbox(checkboxFlag);
+ }
+ else {
+ target.enableFlag(true);
+ enableCheckbox(checkboxFlag);
+ }
+ }
+
+ }
+
+ //联网设置初始化.
+ function initialize() {
+ var vm = new DialVM();
+ bindContainer(vm);
+
+ vm.checkEnable();
+ addInterval( vm.checkEnable, 1000);
+ }
+
+ function bindContainer(vm){
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ ko.applyBindings(vm, container[0]);
+
+ }
+
+ return {
+ init: initialize
+ };
+});
+// APN Setting 模块
+define("network_apn_set","underscore jquery knockout set service".split(" "),
+ function (_, $, ko, config, service) {
+
+ //获取鉴权方式
+
+ function getAuthModes() {
+ return _.map(config.APN_AUTH_MODES, function (item) {
+ return new Option(item.name, item.value);
+ });
+ }
+
+ function getApnPdpTypes() {
+ var pdpTypesArray = [new Option('IPv4', 'IP')];
+ if (config.IPV6_SUPPORT) {
+ pdpTypesArray.push(new Option('IPv6', 'IPv6'));
+ if (config.IPV4V6_SUPPORT) {
+ pdpTypesArray.push(new Option('IPv4v6', 'IPv4v6'));
+ }
+ if (config.IPV4_AND_V6_SUPPORT) {
+ pdpTypesArray.push(new Option('IPv4 & IPv6', 'IPv4v6'));
+ }
+ }
+ return pdpTypesArray;
+ }
+
+ //获取apn相关信息
+
+ function getApnSet() {
+ var apnInfo = service.getApnSettings();
+ apnInfo.ipv6ApnConfigs = getApnConfigs(apnInfo.ipv6APNs, true);
+ apnInfo.apnConfigs = getApnConfigs(apnInfo.APNs, false);
+ apnInfo.autoApnConfigs = getAutoApnsConfig(apnInfo.autoApns, apnInfo.autoApnsV6);
+ return apnInfo;
+ }
+ var apnConfigs = {};
+ var ipv6ApnConfigs = {};
+ var autoApnConfigs = {};
+
+ //解析自动apn信息
+
+ function getAutoApnsConfig(autoApnV4, autoApnV6) {
+ var autoApnsV4 = [];
+ var autoApnsV6 = [];
+
+ if (autoApnV4 && autoApnV4.length > 5) {
+ var apnArr = autoApnV4.split("||");
+ for (var ki = 0; ki < apnArr.length; ki++) {
+ if (apnArr[ki] != "") {
+ var apnItem = parseApnItem(apnArr[ki], false);
+ autoApnsV4.push(apnItem);
+ }
+ }
+ }
+ if (autoApnV6 && autoApnV6.length > 5) {
+ var apnArr = autoApnV6.split("||");
+ for (var ki = 0; ki < apnArr.length; ki++) {
+ if (apnArr[ki] != "") {
+ var apnItem = parseApnItem(apnArr[ki], false);
+ autoApnsV6.push(apnItem);
+ }
+ }
+ }
+ return dealAutoApnsV4V6(autoApnsV4, autoApnsV6);
+ }
+ //解析apn信息
+
+ function getApnConfigs(apnsStr, isIpv6) {
+ var apnCfgs = [];
+ var theApnConfigs = {};
+ if (apnsStr && apnsStr.length > 10) {
+ var apnArr = apnsStr.split("||");
+ for (var ki = 0; ki < apnArr.length; ki++) {
+ if (apnArr[ki] != "") {
+ var apnItem = parseApnItem(apnArr[ki], isIpv6);
+ apnCfgs.push(apnItem);
+ theApnConfigs[apnItem.profileName] = apnItem;
+ }
+ }
+ }
+ if (isIpv6 == false) {
+ apnConfigs = theApnConfigs;
+ } else {
+ ipv6ApnConfigs = theApnConfigs;
+ }
+ return apnCfgs;
+ }
+
+ //解析单条apn信息
+
+ function parseApnItem(apnStr, isIpv6) {
+ var apnItem = {};
+ var items = apnStr.split("($)");
+ for (var ki = 0; ki < items.length; ki++) {
+ apnItem.profileName = items[0];
+ apnItem.pdpType = items[7];
+ if (isIpv6 == false) {
+ apnItem.dnsMode = items[10];
+ apnItem.dns1 = items[11];
+ apnItem.dns2 = items[12];
+ apnItem.wanApn = items[1];
+ apnItem.authMode = items[4].toLowerCase();
+ apnItem.username = items[5];
+ apnItem.password = items[6];
+ } else {
+ apnItem.dnsModeV6 = items[10];
+ apnItem.dns1V6 = items[11];
+ apnItem.dns2V6 = items[12];
+ apnItem.wanApnV6 = items[1];
+ apnItem.authModeV6 = items[4].toLowerCase();
+ apnItem.usernameV6 = items[5];
+ apnItem.passwordV6 = items[6];
+ }
+ }
+ return apnItem;
+ }
+ //合并V4\V6自动apn信息
+
+ function dealAutoApnsV4V6(v4, v6) {
+ autoApnConfigs = {};
+ var autoApns = [];
+ for (var ki = 0; ki < v4.length; ki++) {
+ var apnElem = v4[ki];
+ var itemsV6 = v6[ki];
+ if (itemsV6 && (itemsV6.pdpType == 'IPv6' || itemsV6.pdpType == 'IPv4v6')) {
+ apnElem.usernameV6 = itemsV6.username;
+ apnElem.passwordV6 = itemsV6.password;
+ apnElem.dns1V6 = itemsV6.dns1;
+ apnElem.dns2V6 = itemsV6.dns2;
+ apnElem.wanApnV6 = itemsV6.wanApn;
+ apnElem.authModeV6 = itemsV6.authMode;
+ apnElem.dnsModeV6 = itemsV6.dnsMode;
+ }
+ autoApns.push(apnElem);
+ autoApnConfigs[apnElem.profileName] = apnElem;
+ }
+ return autoApns;
+ }
+
+ function getProfileOptions(apns) {
+ return _.map(apns, function (item) {
+ return new Option(item.profileName, item.profileName);
+ });
+ }
+
+ //APNViewModel
+
+ function APNViewModel() {
+ var target = this;
+ var apnSettings = getApnSet();
+ if (apnSettings.apnNumPreset) {
+ config.maxApnNumber = apnSettings.apnNumPreset;
+ }
+
+ target.defApn = ko.observable(apnSettings.profileName); //当前默认APN
+ target.apnMode = ko.observable(apnSettings.apnMode);
+ target.autoProfiles = ko.observableArray(getProfileOptions(apnSettings.autoApnConfigs));
+ target.profiles = ko.observableArray(getProfileOptions(apnSettings.apnConfigs));
+ target.wanDial = ko.observable(apnSettings.wanDial);
+
+ target.showApnDns = ko.observable(config.SHOW_APN_DNS);
+ target.index = ko.observable(apnSettings.currIndex);
+ target.supportIPv6 = ko.observable(config.IPV6_SUPPORT);
+ target.supportIpv4AndIpv6 = ko.observable(config.IPV4_AND_V6_SUPPORT);
+
+ target.apn = ko.observable(apnSettings.wanApn);
+ target.dnsMode = ko.observable(apnSettings.dnsMode == 'manual' ? 'manual' : 'auto');
+ target.dns1 = ko.observable(apnSettings.dns1);
+ target.dns2 = ko.observable(apnSettings.dns2);
+ target.authModes = ko.observableArray(getAuthModes());
+ target.username = ko.observable(apnSettings.username);
+ target.password = ko.observable(apnSettings.password);
+
+ target.pdpTypes = ko.observableArray(getApnPdpTypes());
+ target.selectedPdpType = ko.observable(apnSettings.pdpType);
+ target.selectedPdpTypeTmp = ko.observable(apnSettings.pdpType); //the PdpType select's value before chang
+ target.profileName = ko.observable(apnSettings.profileName); //当前编辑框中的
+ target.selectedProfile = ko.observable(apnSettings.profileName); //当前下拉框选择的APN
+
+ target.showPassword = ko.observable(false);
+
+ target.apnV6 = ko.observable(apnSettings.wanApnV6);
+ target.dnsModeV6 = ko.observable(apnSettings.dnsModeV6 == 'manual' ? 'manual' : 'auto');
+ target.dns1V6 = ko.observable(apnSettings.dns1V6);
+ target.dns2V6 = ko.observable(apnSettings.dns2V6);
+ target.authModesV6 = ko.observableArray(getAuthModes());
+ target.usernameV6 = ko.observable(apnSettings.usernameV6);
+ target.passwordV6 = ko.observable(apnSettings.passwordV6);
+ target.pdpTypeNote = ko.observable(true);
+ if (apnSettings.autoApnConfigs && apnSettings.autoApnConfigs.length > 0) {
+ target.selectedAutoProfile = ko.observable(apnSettings.autoApnConfigs[0].profileName);
+ } else {
+ target.selectedAutoProfile = ko.observable();
+ }
+
+ if (config.EMPTY_APN_SUPPORT == false) {
+ $("#apn_ipv4_apn").addClass("required");
+ $("#apn_ipv6_apn").addClass("required");
+ } else {
+ $("#apn_ipv4_apn").removeClass("required");
+ $("#apn_ipv6_apn").removeClass("required");
+ }
+
+ target.disableProfile = ko.observable(false); //表示处于新增页面
+ target.addApnHide = ko.observable(true);
+ target.defaultCfg = ko.observable(true); //当前选中的是默认APN
+ target.predeterminedCfg = ko.observable(true); //当前选中的是预置的APN
+
+ target.selectedAuthentication = ko.observable(apnSettings.authMode);
+ target.selectedAuthenticationV6 = ko.observable(apnSettings.authModeV6);
+
+
+ target.transApnV6 = ko.observable('apn');
+ target.transDnsModeV6 = ko.observable('apn_dns_mode');
+ target.transDns1V6 = ko.observable('apn_dns1');
+ target.transDns2V6 = ko.observable('apn_dns2');
+ target.transAuthV6 = ko.observable('apn_authentication');
+ target.transUserNameV6 = ko.observable('apn_user_name');
+ target.transPasswordV6 = ko.observable('apn_password');
+
+ target.transApn = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_ipv4_apn' : 'apn');
+ target.transDnsMode = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_dns_mode_ipv4' : 'apn_dns_mode');
+ target.transDns1 = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_dns1_ipv4' : 'apn_dns1');
+ target.transDns2 = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_dns2_ipv4' : 'apn_dns2');
+ target.transAuth = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_authentication_ipv4' : 'apn_authentication');
+ target.transUserName = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_user_name_ipv4' : 'apn_user_name');
+ target.transPassword = ko.observable(config.IPV4_AND_V6_SUPPORT ? 'apn_password_ipv4' : 'apn_password');
+
+ target.setDefaultVisible = ko.observable(!isConnectedNetWork());
+
+ target.tmp1 = ko.computed(function () {
+ if (target.selectedPdpType() == "IPv6") {
+ target.transApnV6('apn');
+ target.transDnsModeV6('apn_dns_mode');
+ target.transDns1V6('apn_dns1');
+ target.transDns2V6('apn_dns2');
+ target.transAuthV6('apn_authentication');
+ target.transUserNameV6('apn_user_name');
+ target.transPasswordV6('apn_password');
+ } else if (config.IPV4_AND_V6_SUPPORT && target.selectedPdpType() == 'IPv4v6') {
+ target.transApn('apn_ipv4_apn');
+ target.transDnsMode('apn_dns_mode_ipv4');
+ target.transDns1('apn_dns1_ipv4');
+ target.transDns2('apn_dns2_ipv4');
+ target.transAuth('apn_authentication_ipv4');
+ target.transUserName('apn_user_name_ipv4');
+ target.transPassword('apn_password_ipv4');
+
+ target.transApnV6('apn_ipv6_apn');
+ target.transDnsModeV6('apn_dns_mode_ipv6');
+ target.transDns1V6('apn_dns1_ipv6');
+ target.transDns2V6('apn_dns2_ipv6');
+ target.transAuthV6('apn_authentication_ipv6');
+ target.transUserNameV6('apn_user_name_ipv6');
+ target.transPasswordV6('apn_password_ipv6');
+ } else if (target.selectedPdpType() == "IP" || target.selectedPdpType() == "IPv4") {
+ target.transApn('apn');
+ target.transDnsMode('apn_dns_mode');
+ target.transDns1('apn_dns1');
+ target.transDns2('apn_dns2');
+ target.transAuth('apn_authentication');
+ target.transUserName('apn_user_name');
+ target.transPassword('apn_password');
+ } else { //config.IPV4V6_SUPPORT && target.selectedPdpType() == 'IPv4v6'
+ target.transApn('apn');
+ target.transDnsMode('apn_dns_mode');
+ target.transDns1('apn_dns1');
+ target.transDns2('apn_dns2');
+ target.transAuth('apn_authentication');
+ target.transUserName('apn_user_name');
+ target.transPassword('apn_password');
+ }
+ $("#apn_setting_form").translate();
+ });
+
+ target.autoApnChecked = ko.computed(function () {
+ return target.apnMode() == "auto";
+ });
+
+ target.hasCapacity = ko.computed(function () {
+ if (target.profiles().length < config.maxApnNumber) {
+ return true;
+ } else {
+ return false;
+ }
+ });
+
+ target.showDnsV6 = ko.computed(function () {
+ return target.dnsModeV6() == "manual";
+ });
+
+ target.showDns = ko.computed(function () {
+ return target.dnsMode() == "manual";
+ });
+
+
+ checkDefaultProfileStatus();
+ target.checkInputDisable = ko.computed(function () {
+ if (target.apnMode() != "auto" && (target.predeterminedCfg() == false && target.defaultCfg() == true) && !isConnectedNetWork()) {
+ return false;
+ }
+ if (((target.apnMode() != "auto" && (target.predeterminedCfg() || target.defaultCfg()) && !target.disableProfile())) || target.apnMode() == "auto") {
+ return true;
+ }
+ if ((!target.disableProfile() || !(target.predeterminedCfg() || target.defaultCfg())) && target.apnMode() != "auto") {
+ return false;
+ }
+ return false;
+ });
+
+ var data = service.getDeviceInfo();
+ target.pdpTypeChangeAlert = pdpTypeChangeAlertFunc;
+
+
+ target.showAutoApnDetail = ko.computed(function () {
+ if (target.apnMode() != "auto") {
+ return true;
+ } else {
+ return target.autoProfiles().length > 0;
+ }
+ });
+ //密码显示事件
+ target.showPasswordHandler = function () {
+ var checkbox = $("#showPassword:checked");
+ if (checkbox && checkbox.length == 0) {
+ target.showPassword(true);
+ } else {
+ target.showPassword(false);
+ }
+ };
+ //auto apn profile change 事件处理
+
+ target.autoProfileChangeHandler = autoProfileChangeHandlerFunc;
+
+
+ //profile change 事件处理
+
+ target.profileChangeHandler = profileChangeHandlerFunc;
+
+
+ //切换profile时重置下面的显示项
+ target.setUIData = setUIDataFunc;
+
+
+ //设置默认apn状态
+
+ function checkDefaultProfileStatus() {
+ var index = getApnIndex();
+ //默认apn不允许编辑
+ if (target.apnMode() != "auto") { //当前选中与实际不一致的话
+ if (target.selectedProfile() != target.defApn()) {
+ target.defaultCfg(false);
+ } else {
+ target.defaultCfg(true); //默认APN
+ }
+ } else {
+ if (target.selectedAutoProfile() != target.defApn()) {
+ target.defaultCfg(false);
+ } else {
+ target.defaultCfg(true); //默认APN
+ }
+ }
+
+ if (index >= config.defaultApnSize) {
+ target.predeterminedCfg(false);
+ } else {
+ target.predeterminedCfg(true); //预置APN
+ }
+ }
+
+
+ //设置为默认apn
+
+ target.setDefaultAct = setDefaultActFunc;
+
+
+
+ //APN mode change 事件处理
+
+ target.apnModeChangeHandler = apnModeChangeHandlerFunc;
+
+
+ function doSetDefaultAct() {
+ var index = 0;
+ if (target.apnMode() != 'auto') {
+ index = getApnIndex();
+ target.selectedProfile($("#profile").val());
+ } else {
+ index = getAutoApnIndex();
+ target.selectedAutoProfile($("#autoProfile").val());
+ }
+ var selectedProfileDetail = target.getSelectedManualProfile();
+ service.setDefaultApn({
+ index: index,
+ apnMode: target.apnMode(),
+ pdpType: selectedProfileDetail.pdpType,
+
+ profileName: selectedProfileDetail.profileName,
+ wanApn: selectedProfileDetail.wanApn,
+ authMode: selectedProfileDetail.authMode,
+ username: selectedProfileDetail.username,
+ password: selectedProfileDetail.password,
+ dnsMode: config.SHOW_APN_DNS ? selectedProfileDetail.dnsMode : 'auto',
+ dns1: config.SHOW_APN_DNS ? selectedProfileDetail.dns1 : '',
+ dns2: config.SHOW_APN_DNS ? selectedProfileDetail.dns2 : ''
+ }, function (data) {
+ if (data.result) {
+ //showLoading("apn_alert_restart");
+ //restartDevice(service);
+ addTimeout(function () {
+ initialize(true);
+ target.apnModeChangeHandler();
+ successOverlay();
+ }, 500);
+ } else {
+ errorOverlay();
+ }
+ }, function (data) {
+ errorOverlay();
+ });
+ }
+
+ target.getSelectedManualProfile = getSelectedManualProfileFunc;
+
+
+ //获取自动apn索引
+
+ function getAutoApnIndex() {
+ var configs = $("#autoProfile option");
+ for (var ki = 0; ki < configs.length; ki++) {
+ if (configs[ki].value == target.selectedAutoProfile()) {
+ return ki;
+ }
+ }
+ return configs.length - 1;
+ }
+
+ //获取apn索引
+
+ function getApnIndex() {
+ var configs = $("#profile option");
+ if (configs.length == 0) {
+ configs = target.profiles();
+ }
+ var ki = 0;
+ for (; ki < configs.length; ki++) {
+ if (configs[ki].value == target.selectedProfile()) {
+ break;
+ }
+ }
+ return ki;
+ }
+
+ //保存APN设置信息
+
+ target.saveAct = saveActFunc;
+
+ //编辑APN信息
+
+ function editApnSetting(preAct) { //默认设置按钮触发为TRUE
+ showLoading();
+ var apnIndex = getApnIndex();
+ var sameInfo = false;
+ if (config.IPV4V6_SUPPORT && target.selectedPdpType() == 'IPv4v6') {
+ sameInfo = true;
+ }
+ var needDoDefault = false;
+ if (preAct || (target.predeterminedCfg() || target.defaultCfg())) {
+ needDoDefault = true;
+ }
+ service.addOrEditApn({
+ profileName: target.profileName(),
+ pdpType: target.selectedPdpType(),
+ index: apnIndex,
+
+ wanApn: target.apn(),
+ authMode: target.selectedAuthentication(),
+ username: target.username(),
+ password: target.password(),
+ dnsMode: config.SHOW_APN_DNS ? target.dnsMode() : 'auto',
+ dns1: config.SHOW_APN_DNS ? target.dns1() : '',
+ dns2: config.SHOW_APN_DNS ? target.dns2() : '',
+
+ wanApnV6: sameInfo ? target.apn() : target.apnV6(),
+ authModeV6: sameInfo ? target.selectedAuthentication() : target.selectedAuthenticationV6(),
+ usernameV6: sameInfo ? target.username() : target.usernameV6(),
+ passwordV6: sameInfo ? target.password() : target.passwordV6(),
+ dnsModeV6: config.SHOW_APN_DNS ? (sameInfo ? target.dnsMode() : target.dnsModeV6()) : 'auto',
+ dns1V6: config.SHOW_APN_DNS ? (sameInfo ? target.dns1() : target.dns1V6()) : '',
+ dns2V6: config.SHOW_APN_DNS ? (sameInfo ? target.dns2() : target.dns2V6()) : ''
+ }, function (data) {
+ if (data.result) {
+ apnSettings = getApnSet();
+ if (target.profileName() != target.selectedProfile()) {
+ var newProfileName = target.profileName();
+ target.profiles(getProfileOptions(apnSettings.apnConfigs));
+ $('#profile').val(newProfileName).trigger('change');
+ }
+ if (needDoDefault == false) {
+ successOverlay();
+ } else {
+ doSetDefaultAct();
+ }
+ } else {
+ errorOverlay();
+ }
+ }, function (data) {
+ errorOverlay();
+ });
+ }
+
+ //新增APN信息
+
+ function addNewApnSetting() {
+ showLoading("waiting");
+ var optionLen = $("option", "#profile").length;
+ if (optionLen < config.defaultApnSize) {
+ errorOverlay();
+ return;
+ }
+ // 支持IPv4v6,并且选择IPv4v6时,IPv4 与 IPv6下发相同的信息
+ // 支持IPv4 & v6,并且选择IPv4v6时,IPv4 与 IPv6下发各自的信息
+ var sameInfo = false;
+ if (config.IPV4V6_SUPPORT && target.selectedPdpType() == 'IPv4v6') {
+ sameInfo = true;
+ }
+
+ service.addOrEditApn({
+ profileName: target.profileName(),
+ pdpType: target.selectedPdpType(),
+ index: optionLen,
+
+ wanApn: target.apn(),
+ authMode: target.selectedAuthentication(),
+ username: target.username(),
+ password: target.password(),
+ dnsMode: config.SHOW_APN_DNS ? target.dnsMode() : 'auto',
+ dns1: config.SHOW_APN_DNS ? target.dns1() : '',
+ dns2: config.SHOW_APN_DNS ? target.dns2() : '',
+
+ wanApnV6: sameInfo ? target.apn() : target.apnV6(),
+ authModeV6: sameInfo ? target.selectedAuthentication() : target.selectedAuthenticationV6(),
+ usernameV6: sameInfo ? target.username() : target.usernameV6(),
+ passwordV6: sameInfo ? target.password() : target.passwordV6(),
+ dnsModeV6: config.SHOW_APN_DNS ? (sameInfo ? target.dnsMode() : target.dnsModeV6()) : 'auto',
+ dns1V6: config.SHOW_APN_DNS ? (sameInfo ? target.dns1() : target.dns1V6()) : '',
+ dns2V6: config.SHOW_APN_DNS ? (sameInfo ? target.dns2() : target.dns2V6()) : ''
+ }, function (data) {
+ if (data.result) {
+ apnSettings = getApnSet();
+ if (target.profileName() != target.selectedProfile()) {
+ var newProfileName = target.profileName();
+ target.profiles(getProfileOptions(apnSettings.apnConfigs));
+ $('#profile').val(newProfileName).trigger('change');
+ }
+ doSetDefaultAct();
+ } else {
+ errorOverlay();
+ }
+ }, function (data) {
+ errorOverlay();
+ });
+ }
+
+
+
+ var tempApn = {};
+ //删除APN
+
+ target.deleteAct = deleteActFunc;
+
+ //取消新增APN
+
+ target.cancelAddAct = cancelAddActFunc;
+
+ //进入新增APN页面
+
+ target.addAct = addActFunc;
+ //进入新增APN页面
+ function addActFunc() {
+ clearValidateMsg('#apn_setting_form');
+ target.pdpTypeNote(true);
+ target.disableProfile(true);
+ target.addApnHide(true);
+ tempApn = {
+ profileName: target.profileName(),
+ selectedPdpType: target.selectedPdpType(),
+
+ wanApnV6: target.apnV6(),
+ dnsModeV6: config.SHOW_APN_DNS ? target.dnsModeV6() : 'auto',
+ dns1V6: config.SHOW_APN_DNS ? target.dns1V6() : '',
+ dns2V6: config.SHOW_APN_DNS ? target.dns2V6() : '',
+ authModeV6: target.selectedAuthenticationV6(),
+ usernameV6: target.usernameV6(),
+ passwordV6: target.passwordV6(),
+
+ wanApn: target.apn(),
+ dnsMode: config.SHOW_APN_DNS ? target.dnsMode() : 'auto',
+ dns1: config.SHOW_APN_DNS ? target.dns1() : '',
+ dns2: config.SHOW_APN_DNS ? target.dns2() : '',
+ authMode: target.selectedAuthentication(),
+ username: target.username(),
+ password: target.password(),
+
+ };
+ target.profileName("");
+ target.selectedPdpType("IP");
+ target.selectedPdpTypeTmp("IP");
+
+ target.apnV6("");
+ target.dnsModeV6("auto");
+ target.dns1V6("");
+ target.dns2V6("");
+ target.selectedAuthenticationV6("none");
+ target.usernameV6("");
+ target.passwordV6("");
+
+ target.apn("");
+ target.dnsMode("auto");
+ target.dns1("");
+ target.dns2("");
+ target.selectedAuthentication("none");
+ target.username("");
+ target.password("");
+
+ }
+
+ //取消新增APN
+ function cancelAddActFunc() {
+ clearValidateMsg('#apn_setting_form');
+ target.pdpTypeNote(false);
+ target.disableProfile(false);
+ target.addApnHide(false);
+ target.profileName(tempApn.profileName);
+ target.selectedPdpType(tempApn.selectedPdpType);
+ target.selectedPdpTypeTmp(tempApn.selectedPdpType);
+
+ target.apnV6(tempApn.wanApnV6);
+ target.dnsModeV6(tempApn.dnsModeV6);
+ target.dns1V6(tempApn.dns1V6);
+ target.dns2V6(tempApn.dns2V6);
+ target.selectedAuthenticationV6(tempApn.authModeV6);
+ target.usernameV6(tempApn.usernameV6);
+ target.passwordV6(tempApn.passwordV6);
+
+ target.apn(tempApn.wanApn);
+ target.dnsMode(tempApn.dnsMode);
+ target.dns1(tempApn.dns1);
+ target.dns2(tempApn.dns2);
+ target.selectedAuthentication(tempApn.authMode);
+ target.username(tempApn.username);
+ target.password(tempApn.password);
+
+ }
+
+ //删除APN
+ function deleteActFunc() {
+ if (!target.selectedProfile()) {
+ showAlert("apn_no_select_alert");
+ return false;
+ }
+ if (target.predeterminedCfg()) { //预置的apn不允许删除
+ errorOverlay("apn_delete_cant_delete_default");
+ return false;
+ }
+ if (getApnSet().profileName == target.profileName()) {
+ errorOverlay("apn_cant_delete_current");
+ return false;
+ }
+
+ showConfirm("apn_delete_confirm", function () {
+ showLoading('deleting');
+ service.deleteApn({
+ index: getApnIndex()
+ }, function (data) {
+ if (data.result) {
+ target.profiles(getProfileOptions(getApnSet().apnConfigs));
+ target.selectedProfile(target.defApn());
+ target.profileChangeHandler();
+ successOverlay();
+ } else {
+ errorOverlay();
+ }
+ }, function (data) {
+ errorOverlay();
+ });
+ });
+ }
+
+ //保存APN设置信息
+ function saveActFunc() {
+ if (!$('#apn_setting_form').valid()) {
+ return false;
+ }
+ if (!target.selectedProfile() && !target.disableProfile()) { //不是增加时的设置需要判断是否选择了Profile
+ showAlert("apn_no_select_alert");
+ return false;
+ }
+ var exist = false;
+ $.each(target.profiles(), function (i, e) {
+ if (e.value == target.profileName()) {
+ exist = true;
+ }
+ });
+
+ if (target.disableProfile() == false) {
+ if (exist && target.selectedProfile() != target.profileName()) {
+ showInfo("apn_save_profile_exist");
+ return false;
+ }
+ if (target.predeterminedCfg()) { //预置的APN不可以修改
+ errorOverlay();
+ return false;
+ }
+ if (target.predeterminedCfg() || target.defaultCfg()) {
+ //showConfirm("apn_alert", function () {
+ editApnSetting(false);
+ //});
+ } else {
+ editApnSetting(false);
+ }
+ } else {
+
+ if ($("#profile option").length >= config.maxApnNumber) {
+ showInfo({
+ msg: "apn_profile_full",
+ params: [config.maxApnNumber]
+ });
+ return false;
+ }
+ if (exist) {
+ showInfo("apn_save_profile_exist");
+ return false;
+ }
+ var info = service.getStatusInfo();
+ if (info.connectStatus != "ppp_connected") {
+ //showConfirm("apn_alert", function () {
+ addNewApnSetting();
+ //});
+
+ } else {
+ showConfirm("apn_diconneted_network_confirm", function () {
+ showLoading('disconnecting');
+ service.disconnect({}, function (data) {
+ if (data.result) {
+ config.connect_flag = true;
+ addNewApnSetting();
+ } else {
+ errorOverlay();
+ }
+ });
+ });
+ }
+ }
+ }
+
+ function getSelectedManualProfileFunc() {
+ var cfg = {};
+ var profileVal = $("#profile").val();
+ if (typeof target.selectedProfile() == 'undefined') {
+ target.selectedProfile(profileVal);
+ }
+ var cfgV4 = apnConfigs[profileVal];
+ var cfgV6 = ipv6ApnConfigs[profileVal];
+ if (cfgV4 && !cfgV6) {
+ $.extend(cfg, cfgV4);
+ } else if (cfgV4 && cfgV6) {
+ if (!!cfgV4.pdpType) {
+ $.extend(cfg, cfgV6);
+ $.extend(cfg, cfgV4);
+ } else {
+ $.extend(cfg, cfgV4);
+ $.extend(cfg, cfgV6);
+ }
+ }
+ return cfg;
+ }
+
+ //APN mode change 事件处理
+ function apnModeChangeHandlerFunc(data, event) {
+ if (target.apnMode() != 'auto') {
+ target.profileChangeHandler();
+ } else {
+ if (target.showAutoApnDetail()) {
+ target.autoProfileChangeHandler();
+ }
+ }
+ return true;
+ }
+
+ //设置为默认apn
+ function setDefaultActFunc() {
+ if (!target.selectedProfile()) {
+ showAlert("apn_no_select_alert");
+ return false;
+ }
+ var connectStatus = service.getConnectionInfo().connectStatus;
+ if (connectStatus == "ppp_connecting") {
+ showAlert({
+ msg: "apn_cant_modify_status",
+ params: [$.i18n.prop("connecting").toLowerCase()]
+ });
+ return false;
+ } else if (connectStatus == "ppp_disconnecting") {
+ showAlert({
+ msg: "apn_cant_modify_status",
+ params: [$.i18n.prop("disconnecting").toLowerCase()]
+ });
+ return false;
+ } else if (connectStatus == "ppp_connected") {
+ showAlert({
+ msg: "apn_cant_modify_status",
+ params: [$.i18n.prop("connected").toLowerCase()]
+ });
+ return false;
+ }
+ if (target.apnMode() == 'auto' || target.predeterminedCfg()) {
+ //showConfirm("apn_alert", function () {
+ showLoading("waiting");
+ doSetDefaultAct();
+ //});
+ } else {
+ if ($('#apn_setting_form').valid() == false) {
+ $(".error:first", "#apn_setting_form").focus();
+ } else {
+ var exist = false;
+ $.each(target.profiles(), function (i, e) {
+ if (e.value == target.profileName()) {
+ exist = true;
+ }
+ });
+ if (exist && target.selectedProfile() != target.profileName()) {
+ showInfo("apn_save_profile_exist");
+ return false;
+ }
+ //showLoading("waiting");
+ //showConfirm("apn_alert", function () {
+ editApnSetting(true);
+ //});
+ }
+ }
+ }
+
+ //切换profile时重置下面的显示项
+ function setUIDataFunc(data) {
+ clearValidateMsg('#apn_setting_form');
+ if (!data) {
+ return;
+ }
+ target.selectedPdpType(data.pdpType || 'IP');
+ target.selectedPdpTypeTmp(data.pdpType || 'IP');
+ target.profileName(data.profileName);
+
+ target.apn(data.wanApn);
+ target.dnsMode(data.dnsMode != 'manual' ? 'auto' : 'manual');
+ target.dns1(data.dns1);
+ target.dns2(data.dns2);
+ target.username(data.username);
+ target.password(data.password);
+ target.selectedAuthentication(data.authMode || 'none');
+
+ target.apnV6(data.wanApnV6);
+ target.dnsModeV6(data.dnsModeV6 != 'manual' ? 'auto' : 'manual');
+ target.dns1V6(data.dns1V6);
+ target.dns2V6(data.dns2V6);
+ target.usernameV6(data.usernameV6);
+ target.passwordV6(data.passwordV6);
+ target.selectedAuthenticationV6(data.authModeV6 || 'none');
+ }
+
+ //profile change 事件处理
+ function profileChangeHandlerFunc(data, event) {
+ target.pdpTypeNote(true);
+ if (target.apnMode() != 'manual') {
+ return true;
+ }
+ var cfg = target.getSelectedManualProfile();
+ target.setUIData(cfg);
+ checkDefaultProfileStatus();
+ return true;
+ }
+
+ //auto apn profile change 事件处理
+ function autoProfileChangeHandlerFunc(data, event) {
+ if (target.apnMode() != 'auto') {
+ return true;
+ }
+ var cfg = autoApnConfigs[target.selectedAutoProfile()];
+ target.setUIData(cfg);
+ checkDefaultProfileStatus();
+ return true;
+ }
+
+ function pdpTypeChangeAlertFunc() {
+ if (target.pdpTypeNote()) {
+ showAlert({
+ msg: "apn_pdptype_change_note",
+ params: [data.lanDomain, data.ipAddress]
+ });
+ }
+ if (target.apnMode() != "auto" && !target.disableProfile()) { //如果是手动非ADD状态,切换PDP类型时,不改变界面显示的各项值
+ if ((config.IPV4_AND_V6_SUPPORT && target.selectedPdpTypeTmp() != 'IPv4v6' && target.selectedPdpType() != 'IPv4v6') || !config.IPV4_AND_V6_SUPPORT) { //
+ if (target.selectedPdpTypeTmp() == 'IPv6') { //V6 -> V4 / V4V6
+ target.apn(target.apnV6());
+ target.dnsMode(target.dnsModeV6());
+ target.dns1(target.dns1V6());
+ target.dns2(target.dns2V6());
+ target.username(target.usernameV6());
+ target.password(target.passwordV6());
+ target.selectedAuthentication(target.selectedAuthenticationV6());
+ } else if (target.selectedPdpType() == 'IPv6') { //V4 / V4V6 -> V6
+ target.apnV6(target.apn());
+ target.dnsModeV6(target.dnsMode());
+ target.dns1V6(target.dns1());
+ target.dns2V6(target.dns2());
+ target.usernameV6(target.username());
+ target.passwordV6(target.password());
+ target.selectedAuthenticationV6(target.selectedAuthentication());
+ }
+ }
+ }
+ target.selectedPdpTypeTmp(target.selectedPdpType());
+ }
+
+
+ }
+
+ //是否已联网
+
+ function isConnectedNetWork() {
+ var info = service.getConnectionInfo();
+ return info.connectStatus == "ppp_connected";
+ }
+
+ function initVar() {
+ apnConfigs = {};
+ ipv6ApnConfigs = {};
+ autoApnConfigs = {};
+ }
+ function bindContainer(vm){
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ ko.applyBindings(vm, container[0]);
+ }
+ //初始化ViewModel
+
+ function initialize(formInit) {
+ initVar();
+
+ var vm = new APNViewModel();
+ bindContainer(vm);
+
+ if (!formInit) {
+ addInterval(function () {
+ vm.setDefaultVisible(!isConnectedNetWork());
+ }, 1000);
+ }
+ $('#apn_setting_form').validate({
+ submitHandler: function () {
+ vm.saveAct();
+ },
+ rules: {
+ profile_name: 'apn_profile_name_check',
+ apn_ipv4_apn: 'apn_check',
+ apn_dns1_ipv4: "ipv4",
+ apn_dns2_ipv4: "ipv4",
+ apn_ipv6_apn: 'apn_check',
+ apn_dns1_ipv6: "ipv6",
+ apn_dns2_ipv6: "ipv6",
+ apn_user_name_ipv4: 'ppp_username_check',
+ apn_secretcode_ipv4: 'ppp_secretcode_check',
+ apn_user_name_ipv6: 'ppp_username_check',
+ apn_secretcode_ipv6: 'ppp_secretcode_check'
+ }
+ });
+ }
+
+ return {
+ init: initialize
+ };
+});
\ No newline at end of file
diff --git a/lynq/S300/ap/app/zte_webui/js/set.js b/lynq/S300/ap/app/zte_webui/js/set.js
new file mode 100755
index 0000000..f2dc0cc
--- /dev/null
+++ b/lynq/S300/ap/app/zte_webui/js/set.js
@@ -0,0 +1,959 @@
+define(function () {
+ var config = {
+ WEBUI_TITLE: '4G Hostless Modem', //title配置, 具体参考各设备下的配置
+ ALREADY_NOTICE: false, //是否已经提醒,有在线升级信息
+ ALREADY_OTA_NOTICE: false, //是否OTA升级提醒过
+ dbMsgs: [], //数据库中全部的短消息
+ listMsgs: [], //经解析关联后的所有短消息
+ currentChatObject: null, //当前聊天对象的手机号
+ smsMaxId: 0, //短消息最大编号
+ phonebook: [], //电话本记录
+ smsIsReady: false, //缓存短信初始化状态
+ portForwardMax: 10, //端口转发最大规则数
+ urlFilterMax: 10, //URL filter最大规则数
+ defaultApnSize: 1, //出厂设置默认APN的个数
+ maxApnNumber: 10, //最大APN个数
+ RJ45_SUPPORT: false, //是否支持rj45
+ TSW_SUPPORT: false, // 是否支持定时休眠唤醒
+ WIFI_SLEEP_SUPPORT: true, // 是否支持wifi休眠
+ HAS_BATTERY: true, //是否有电池
+ FAST_BOOT_SUPPORT: true, //是否支持快速开机
+ TURN_OFF_SUPPORT: true, //是否支持关机
+ PRODUCT_TYPE: 'UFI', // 产品类型UFI、CPE
+ IS_TEST: false, //配置是否是模拟数据
+ NATIVE_UPDATE_FILE_SIZE: 64, //支持的本地升级文件大小上限,单位为M
+ DDNS_SUPPORT: false, //DDNS
+ MAX_LOGIN_COUNT: 5, //最大登录次数,密码输入错误次数到了以后会账户冻结一定时间
+ LOGIN_SECURITY_SUPPORT: true, //是否支持登录安全
+ LOGIN_THEN_CHECK_PIN: true, //是否先登录后验证PIN,PUK
+ GUEST_HASH: ['#httpshare_guest'],
+ DEVICE: 'ext', //各个型号机配置文件路径
+ connect_flag: false,
+ defaultRoute: '#entry',
+ IPV4_AND_V6_SUPPORT: false, //是否支持IPv4 & v6。 双PDP双栈
+ IPV4V6_SUPPORT: true, //是否支持ipv4v6。 IPV4V6_SUPPORT和IPV4_AND_V6_SUPPORT不可同时为true.单PDP双栈
+ IPV6_SUPPORT: true, //是否支持ipv6
+ EMPTY_APN_SUPPORT: false, //是否支持空apn
+ SHOW_APN_DNS: false, //APN设置页面是否显示DNS,不显示则dnsMode默认设置为auto
+ TRAFFIC_SUPPORT: true, //是否支持流量功能
+ CLEAR_DATA_SUPPORT: false, //是否支持流量和时间清空功能
+ NETWORK_UNLOCK_SUPPORT: false, //是否支持解锁
+ SHOW_MAC_ADDRESS: false, //是否显示mac地址
+ PASSWORD_ENCODE: true, //登录密码和WIFI密码是否加密
+ AP_STATION_SUPPORT: false, //是否支持AP Station功能
+ AP_STATION_LIST_LENGTH: 10,
+ WIFI_WEP_SUPPORT: false, //是否支持wifi WEP加密
+ WIFI_WAP3_SUPPORT: true, //是否支持wifi WAP3加密
+ WIFI_WPA2_WAP3_SUPPORT: true, //是否支持wifi WPA2/WAP3兼容模式
+ WIFI_HAS_5G: false,
+ WIFI_BAND_SUPPORT: false, //是否支持wifi频段设置
+ WIFI_BANDWIDTH_SUPPORT: false, //是否支持频带宽度
+ WIFI_BANDWIDTH_SUPPORT_40MHZ: false, //频带宽度是否支持40MHZ,reltek芯片支持
+ WIFI_SUPPORT_QR_CODE: true, //是否支持wifi二维码显示
+ WIFI_SUPPORT_QR_SWITCH: false, //是否支持wifi二维码显示控制
+ WIFI_SWITCH_SUPPORT: true, //是否支持wifi开关
+ MAX_STATION_NUMBER: 32, //CPE WIFI最大连接数为32
+ SHOW_WIFI_AP_ISOLATED: false, // 是否显示AP隔离
+ STATION_BLOCK_SUPPORT: false, // 已连接设备是否支持Block功能
+ UPGRADE_TYPE: "FOTA", //取值有"NONE","OTA","FOTA","TWO_PORTION"
+ SMS_UNREAD_NUM_INCLUDE_SIM: false, //未读短息数量是否包含SIM侧
+ SMS_DATABASE_SORT_SUPPORT: true, //短信是否支持DB排序
+ SMS_MATCH_LENGTH: 11, //短信联系人号码匹配位数,11国内项目,8国际项目
+ SHOW_UN_COMPLETE_CONCAT_SMS: true, //级联短信未接收完是否显示相关级联短信
+ SMS_SET_READ_WHEN_COMPLETE: false, //聊天过程中,级联短信只有接受完成后才能自动设置为已读
+ SD_CARD_SUPPORT: false, //是否支持SD卡
+ SD_BASE_PATH: '/mmc2', //SD 卡根目录
+ //modem_main_state的临时状态,一般需要界面轮询等待
+ TEMPORARY_MODEM_MAIN_STATE: ["modem_undetected", "modem_detected", "modem_sim_state", "modem_handover", "modem_imsi_lock", "modem_online", "modem_offline"],
+ ISNOW_NOTICE: false, //FOTA是否正在提示有新版本
+ INCLUDE_MOBILE: true,
+ HAS_USSD: false, // 是否支持USSD功能,
+ HAS_URL: false, // 是否支持URL过滤,
+ HAS_CASCADE_SMS: true, //是否支持级联短信
+ HAS_FOTA: true, //是否支持FOTA
+ HAS_UPDATE_CHECK: true, //是否支持升级检测设置
+ HAS_PHONEBOOK: true, //是否有电话本功能
+ HAS_SMS: true, //是否有短信功能
+ HAS_PARENTAL_CONTROL: false, // 是否支持家长控制功能
+ HAS_MULTI_SSID: false, //多ssid功能
+ HAS_WIFI: true, //是否包含wifi功能
+ HAS_QUICK_SETTING: true, //是否支持快速设置
+ HAS_SNTP: true, //是否支持时间管理
+ HAS_BLACK_AND_WHITE_FILTER: false, //是否支持黑白名单
+ HAS_LOGIN: true, //是否有登录页面
+ HAS_UPNP: true, //是否支持UPNP
+ BAUD_RATES: [{
+ name: '9600',
+ value: '9600'
+ }, {
+ name: '19200',
+ value: '19200'
+ }, {
+ name: '38400',
+ value: '38400'
+ }, {
+ name: '57600',
+ value: '57600'
+ }, {
+ name: '115200',
+ value: '115200'
+ }, {
+ name: '230400',
+ value: '230400'
+ }, {
+ name: '460800',
+ value: '460800'
+ }, {
+ name: '921600',
+ value: '921600'
+ }
+ ],
+ FORWARDING_MODES: [{
+ name: 'Unconditional forwarding',
+ value: '1'
+ }, {
+ name: 'When busy',
+ value: '2'
+ }, {
+ name: 'When no answer',
+ value: '3'
+ }, {
+ name: 'Cancel all forwarding',
+ value: '0'
+ }
+ ],
+ wdsModes: [{
+ name: "Disable",
+ value: "0"
+ }, {
+ name: "RootAP Mode",
+ value: "1"
+ }, {
+ name: "Bridge Mode",
+ value: "2"
+ }, {
+ name: "Repeater Mode",
+ value: "3"
+ }
+ ],
+ daylightSave: [{
+ name: "Disable",
+ value: "0"
+ }, {
+ name: "Enable",
+ value: "1"
+ }
+ ],
+ sntpTimeSetMode: [{
+ name: 'manual',
+ value: 'manual'
+ }, {
+ name: 'auto',
+ value: 'auto'
+ }
+ ],
+ //时区
+ timeZone: [{
+ name: "(GMT-12:00) Dateline West",
+ value: "<-12>12_0"
+ }, {
+ name: "(GMT-11:00) Midway Islands, Samoa",
+ value: "SST11_0"
+ }, {
+ name: "(GMT-10:00) Hawaii",
+ value: "<-10>10_0"
+ }, {
+ name: "(GMT-09:00) Alaska",
+ value: "<-09>9_0"
+ }, {
+ name: "(GMT-08:00) Pacific time (USA and Canada), Tijuana",
+ value: "PST8PDT,M3.2.0,M11.1.0_0"
+ }, {
+ name: "(GMT-07:00) Mountain time (USA and Canada)",
+ value: "<-07>7_0"
+ }, {
+ name: "(GMT-07:00) Arizona",
+ value: "<-07>7_1"
+ }, {
+ name: "(GMT-07:00) Chihuahua, La Paz, Mazza Tran",
+ value: "MST7MDT,M4.1.0,M10.5.0_2"
+ }, {
+ name: "(GMT-06:00) Saskatchewan",
+ value: "<-06>6_0"
+ }, {
+ name: "(GMT-06:00) Central time (USA and Canada)",
+ value: "<-06>6_1"
+ }, {
+ name: "(GMT-06:00) Central America",
+ value: "<-06>6_2"
+ }, {
+ name: "(GMT-06:00) Guadalajara City, Mexico City, Monterey",
+ value: "<-06>6_3"
+ }, {
+ name: "(GMT-05:00) Bogota, Lima, Quito",
+ value: "<-05>5_0"
+ }, {
+ name: "(GMT-05:00) Eastern time (USA and Canada)",
+ value: "<-05>5_1"
+ }, {
+ name: "(GMT-05:00) Indiana (East)",
+ value: "EST5EDT,M3.2.0,M11.1.0_2"
+ }, {
+ name: "(GMT-04:00) Atlantic time (Canada)",
+ value: "AST4ADT,M3.2.0,M11.1.0_0"
+ }, {
+ name: "(GMT-04:00) Caracas, La Paz",
+ value: "<-04>4_1"
+ }, {
+ name: "(GMT-04:00) Santiago",
+ value: "<-04>4<-03>,M8.2.6/24,M5.2.6/24_2"
+ }, {
+ name: "(GMT-03:30) Newfoundland",
+ value: "NST3:30NDT,M3.2.0,M11.1.0_0"
+ }, {
+ name: "(GMT-03:00) Brasilia",
+ value: "<-03>3_0"
+ }, {
+ name: "(GMT-03:00) Buenos Aires, Georgetown",
+ value: "<-03>3_1"
+ }, {
+ name: "(GMT-03:00) Greenland",
+ value: "<-03>3_2"
+ }, {
+ name: "(GMT-02:00) Mid-Atlantic",
+ value: "<-02>2_0"
+ }, {
+ name: "(GMT-01:00) Cape Verde Islands",
+ value: "<-01>1_0"
+ }, {
+ name: "(GMT-01:00) Azores",
+ value: "<-01>1<+00>,M3.5.0/0,M10.5.0/1_1"
+ }, {
+ name: "(GMT) GMT: Dublin, Edinburgh, London, Lisbon",
+ value: "GMT0IST,M3.5.0/1,M10.5.0_0"
+ }, {
+ name: "(GMT) Casablanca, Monrovia",
+ value: "WET0WEST,M3.5.0,M10.5.0/3_1"
+ }, {
+ name: "(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna",
+ value: "CET-1CEST,M3.5.0,M10.5.0/3_0"
+ }, {
+ name: "(GMT+01:00) Belgrad, Bratislava, Budapest, Ljubljana, Prague",
+ value: "CET-1CEST,M3.5.0,M10.5.0/3_1"
+ }, {
+ name: "(GMT+01:00) Brussels, Copenhagen, Madrid, Paris",
+ value: "CET-1CEST,M3.5.0,M10.5.0/3_2"
+ }, {
+ name: "(GMT+01:00) Sarajevo, Skopje,Warsaw, Zagreb",
+ value: "CET-1CEST,M3.5.0,M10.5.0/3_3"
+ }, {
+ name: "(GMT+01:00) Western Central African",
+ value: "<+01>-1_4"
+ }, {
+ name: "(GMT+02:00) Bucharest",
+ value: "EET-2EEST,M3.5.0/3,M10.5.0/4_0"
+ }, {
+ name: "(GMT+02:00) Pretoria, Harare",
+ value: "CAT-2_1"
+ }, {
+ name: "(GMT+02:00) Helsinki, Kiev, Riga, Sofia, Tallinn, Vilnius",
+ value: "EET-2EEST,M3.5.0/3,M10.5.0/4_2"
+ }, {
+ name: "(GMT+02:00) Cairo",
+ value: "EET-2_3"
+ }, {
+ name: "(GMT+02:00) Athens, Beirut, Istanbul, Minsk",
+ value: "EET-2EEST,M3.5.0/3,M10.5.0/4_4"
+ }, {
+ name: "(GMT+02:00) Jerusalem",
+ value: "IST-2IDT,M3.4.5/02:00:00,M10.5.0/02:00:00_5"
+ }, {
+ name: "(GMT+03:00) Baghdad",
+ value: "<+03>-3_0"
+ }, {
+ name: "(GMT+03:00) Riyadh, Kuwait",
+ value: "<+03>-3_1"
+ }, {
+ name: "(GMT+03:00) Moscow, St Petersburg, Volgograd",
+ value: "<+03>-3_2"
+ }, {
+ name: "(GMT+03:00) Nairobi",
+ value: "EAT-3_3"
+ }, {
+ name: "(GMT+03:30) Teheran",
+ value: "<+0330>-3:30<+0430>,J80/0,J264/0_0"
+ }, {
+ name: "(GMT+04:00) Abu Zabi, Muscat",
+ value: "<+04>-4_0"
+ }, {
+ name: "(GMT+04:00) Baku, Tbilisi, Yerevan",
+ value: "<+04>-4_1"
+ }, {
+ name: "(GMT+04:30) Kabul",
+ value: "<+0430>-4:30_0"
+ }, {
+ name: "(GMT+05:00) Yekaterinburg",
+ value: "<+05>-5_0"
+ }, {
+ name: "(GMT+05:00) Islamabad, Karachi, Tashkent",
+ value: "PKT-5_1"
+ }, {
+ name: "(GMT+05:30) Madras, Calcutta, Mumbai, New Delhi",
+ value: "<+0530>-5:30_0"
+ }, {
+ name: "(GMT+05:45) Kathmandu",
+ value: "<+0545>-5:45_0"
+ }, {
+ name: "(GMT+06:00) Ala Mutu, Novosibirsk",
+ value: "<+06>-6_0"
+ }, {
+ name: "(GMT+06:00) Dhaka, Astana",
+ value: "<+06>-6_1"
+ }, {
+ name: "(GMT+06:00) Sri Haya Ed Denny Pla",
+ value: "<+06>-6_2"
+ }, {
+ name: "(GMT+06:30) Yangon",
+ value: "<+0630>-6:30_0"
+ }, {
+ name: "(GMT+07:00) Krasnoyarsk",
+ value: "<+07>-7_0"
+ }, {
+ name: "(GMT+07:00) Bangkok, Hanoi, Jakarta",
+ value: "<+07>-7_1"
+ }, {
+ name: "(GMT+08:00) Beijing, Chongqing, Hongkong Special Administrative Region, Urumqi",
+ value: "CST-8_0"
+ }, {
+ name: "(GMT+08:00) Kuala Lumpur, Singapore",
+ value: "<+08>-8_1"
+ }, {
+ name: "(GMT+08:00) Perth",
+ value: "AWST-8_2"
+ }, {
+ name: "(GMT+08:00) Taipei",
+ value: "CST-8_3"
+ }, {
+ name: "(GMT+08:00) Irkutsk, Ulam Batu",
+ value: "<+08>-8_4"
+ }, {
+ name: "(GMT+09:00) Osaka, Sapporo, Tokyo",
+ value: "JST-9_0"
+ }, {
+ name: "(GMT+09:00) Seoul",
+ value: "KST-9_1"
+ }, {
+ name: "(GMT+09:00) Yakutsk",
+ value: "<+09>-9_2"
+ }, {
+ name: "(GMT+09:30) Adelaide",
+ value: "ACST-9:30ACDT,M10.1.0,M4.1.0/3_0"
+ }, {
+ name: "(GMT+09:30) Darwin",
+ value: "ACST-9:30_1"
+ }, {
+ name: "(GMT+10:00) Brisbane",
+ value: "AEST-10_0"
+ }, {
+ name: "(GMT+10:00) Vladivostok",
+ value: "<+10>-10_1"
+ }, {
+ name: "(GMT+10:00) Guam, Port Moresby",
+ value: "<+10>-10_2"
+ }, {
+ name: "(GMT+10:00) Hobart",
+ value: "AEST-10AEDT,M10.1.0,M4.1.0/3_3"
+ }, {
+ name: "(GMT+10:00) Canberra, Melbourne, Sydney",
+ value: "AEST-10AEDT,M10.1.0,M4.1.0/3_4"
+ }, {
+ name: "(GMT+11:00) Magadan, Solomon islands, New Caledonia",
+ value: "<+11>-11_0"
+ }, {
+ name: "(GMT+12:00) Wellington, Oakland",
+ value: "<+12>-12_0"
+ }, {
+ name: "(GMT+12:00) Fiji, Kamchatka, Marshall Islands",
+ value: "<+12>-12_1"
+ }, {
+ name: "(GMT+13:00) Nukualofa",
+ value: "<+13>-13_0"
+ }
+ ],
+
+ //短信保存时间
+ SMS_VALIDITY: [{
+ name: '12 hours',
+ value: 'twelve_hours'
+ }, {
+ name: 'A day',
+ value: 'one_day'
+ }, {
+ name: 'A week',
+ value: 'one_week'
+ }, {
+ name: 'The longest period',
+ value: 'largest'
+ }
+ ],
+ MAP_PROTOCOL_MODES: [{
+ name: "TCP+UDP",
+ value: "TCP&UDP"
+ }, {
+ name: "TCP",
+ value: "TCP"
+ }, {
+ name: "UDP",
+ value: "UDP"
+ }
+ ],
+ //端口转发协议
+ FORWARD_PROTOCOL_MODES: [{
+ name: "TCP+UDP",
+ value: "TCP&UDP"
+ }, {
+ name: "TCP",
+ value: "TCP"
+ }, {
+ name: "UDP",
+ value: "UDP"
+ }
+ ],
+ FILTER_PROTOCOL_MODES: [{
+ name: "NONE",
+ value: "None"
+ }, {
+ name: "TCP",
+ value: "TCP"
+ }, {
+ name: "UDP",
+ value: "UDP"
+ }, {
+ name: "ICMP",
+ value: "ICMP"
+ }
+ ],
+
+ //HTTPSHARE模式
+ SD_SHARE_ENABLE: [{
+ name: "Enable",
+ value: "1"
+ }, {
+ name: "Disable",
+ value: "0"
+ }
+ ],
+
+ SD_ACCESS_TYPE: [{
+ name: "entire_sd_card",
+ value: "1"
+ }, {
+ name: "custom_setting",
+ value: "0"
+ }
+ ],
+
+ SD_FILE_TO_SHARE: [{
+ name: "entire_sd_card",
+ value: "1"
+ }, {
+ name: "custom_setting",
+ value: "0"
+ }
+ ],
+
+ //国家码所述类型
+ countryCodeType: {
+ world: 3,
+ mkkc: 3,
+ apld: 7,
+ etsic: 3,
+ fcca: 1
+ },
+
+ countries_5g: {
+ NONE: "NONE",
+ AR: "ARGENTIA",
+ AM: "ՀԱՅԱՍՏԱՆ",
+ AU: "AUSTRILIA",
+ AT: "ÖSTERREICH",
+ AZ: "AZƏRBAYCAN",
+ BH: "البحرين",
+ BY: "БЕЛАРУСЬ",
+ BE: "BELGIË",
+ BA: "БОСНА И ХЕРЦЕГОВИНА",
+ BR: "BRASIL",
+ BN: "BRUNEI DARUSSALAM",
+ BG: "БЪЛГАРИЯ",
+ CL: "CHILE",
+ CN: "中国",
+ CR: "COSTA RICA",
+ HR: "HRVATSKA",
+ CY: "ΚΎΠΡΟΣ",
+ CZ: "ČESKÁ REPUBLIKA",
+ DK: "DANMARK",
+ EC: "ECUADOR",
+ EG: "مصر",
+ SV: "EL SALVADOR",
+ EE: "EESTI",
+ FI: "SUOMI",
+ FR: "FRANCE",
+ GE: "საქართველო",
+ DE: "DEUTSCHLAND",
+ GR: "ΕΛΛΆΔΑ",
+ HK: "香港",
+ HU: "MAGYARORSZÁG",
+ IS: "ÍSLAND",
+ IN: "INDIA",
+ ID: "INDONESIA",
+ IR: "ایران",
+ IE: "ÉIRE",
+ IL: "إسرائيل",
+ IT: "ITALIA",
+ JM: "JAMAICA",
+ JO: "الأردن",
+ KP: "조선민주주의인민공화국",
+ KR: "한국 ROK",
+ LV: "LATVIJA",
+ LI: "LIECHTENSTEIN",
+ LT: "LIETUVA",
+ LU: "LUXEMBOURG",
+ MO: "澳門",
+ MY: "MALAYSIA",
+ MT: "MALTA",
+ MC: "MONACO",
+ NL: "NEDERLAND",
+ AN: "Netherlands Antilles",
+ NO: "NORGE",
+ OM: "سلطنة عمان",
+ PE: "PERÚ",
+ PH: "PHILIPPINES",
+ PL: "POLSKA",
+ PT: "PORTUGAL",
+ SA: "السعودية",
+ SG: "SINGAPORE",
+ SK: "SLOVENSKÁ REPUBLIKA",
+ SI: "SLOVENIJA",
+ ZA: "SOUTH AFRICA",
+ ES: "ESPAÑA",
+ LK: "SRILANKA",
+ SE: "SVERIGE",
+ CH: "SCHWEIZ",
+ TT: "TRINIDAD AND TOBAGO",
+ TN: "تونس",
+ TR: "TÜRKİYE",
+ GB: "UNITED KINGDOM",
+ UY: "URUGUAY",
+ JP: "日本",
+ BZ: "BELIZE",
+ BO: "BOLIVIA",
+ NZ: "NEW ZEALAND",
+ VE: "VENEZUELA",
+ CA: "CANADA",
+ CO: "COLOMBIA",
+ DO: "REPÚBLICA DOMINICANA",
+ GT: "GUATEMALA",
+ MX: "MEXICO",
+ PA: "PANAMÁ",
+ PR: "PUERTO RICO",
+ TW: "台灣",
+ US: "UNITED STATES",
+ UZ: "O’zbekiston"
+ },
+
+ //国家码与语言匹配表
+ countries: {
+ NONE: "NONE",
+ AL: "SHQIPERI",
+ DZ: "الجزائر",
+ AR: "ARGENTIA",
+ AM: "ՀԱՅԱՍՏԱՆ",
+ AU: "AUSTRALIA",
+ AT: "ÖSTERREICH",
+ AZ: "AZƏRBAYCAN",
+ BD: "বাংলাদেশ",
+ BH: "البحرين",
+ BY: "БЕЛАРУСЬ",
+ BE: "BELGIË",
+ BA: "БОСНА И ХЕРЦЕГОВИНА",
+ BR: "BRASIL",
+ BN: "BRUNEI DARUSSALAM",
+ BG: "БЪЛГАРИЯ",
+ CL: "CHILE",
+ CN: "中国",
+ CR: "COSTA RICA",
+ HR: "HRVATSKA",
+ CY: "ΚΎΠΡΟΣ",
+ CZ: "ČESKÁ REPUBLIKA",
+ DK: "DANMARK",
+ EC: "ECUADOR",
+ EG: "مصر",
+ SV: "EL SALVADOR",
+ EE: "EESTI",
+ FI: "SUOMI",
+ FR: "FRANCE",
+ GE: "საქართველო",
+ DE: "DEUTSCHLAND",
+ GR: "ΕΛΛΆΔΑ",
+ HN: "HONDURAS",
+ HK: "香港",
+ HU: "MAGYARORSZÁG",
+ IS: "ÍSLAND",
+ IN: "INDIA",
+ ID: "INDONESIA",
+ IR: "ایران، جمهوری اسلامی",
+ IE: "ÉIRE",
+ IL: "إسرائيل",
+ IT: "ITALIA",
+ JM: "JAMAICA",
+ JO: "الأردن",
+ KZ: "КАЗАХСТАН",
+ KE: "KENYA",
+ KP: "조선민주주의인민공화국",
+ KR: "한국 ROK",
+ KW: "الكويت",
+ LV: "LATVIJA",
+ LB: "لبنان",
+ LI: "LIECHTENSTEIN",
+ LT: "LIETUVA",
+ LU: "LUXEMBOURG",
+ MO: "澳門",
+ MK: "МАКЕДОНИЈА",
+ MY: "MALAYSIA",
+ MT: "MALTA",
+ MC: "MONACO",
+ MA: "المغرب",
+ NL: "NEDERLAND",
+ AN: "NETHERLANDS ANTILLES",
+ NO: "NORGE",
+ OM: "سلطنة عمان",
+ PK: "PAKISTAN",
+ PE: "PERÚ",
+ PH: "PHILIPPINES",
+ PL: "POLSKA",
+ PT: "PORTUGAL",
+ QA: "قطر",
+ RO: "ROMÂNIA",
+ RU: "Российская Федерация",
+ SA: "السعودية",
+ SG: "SINGAPORE",
+ SK: "SLOVENSKÁ REPUBLIKA",
+ SI: "SLOVENIJA",
+ ZA: "SOUTH AFRICA",
+ ES: "ESPAÑA",
+ LK: "SRILANKA",
+ SE: "SVERIGE",
+ CH: "SCHWEIZ",
+ SY: "الجمهورية العربية السورية",
+ TH: "ประเทศไทย",
+ TT: "TRINIDAD AND TOBAGO",
+ TN: "تونس",
+ TR: "TÜRKİYE",
+ UA: "Україна",
+ AE: "الإمارات العربية المتحدة",
+ GB: "UNITED KINGDOM",
+ UY: "URUGUAY",
+ VN: "VIỆT NAM",
+ YE: "اليمن",
+ ZW: "ZIMBABWE",
+ JP: "日本",
+ BZ: "BELIZE",
+ BO: "BOLIVIA",
+ NZ: "NEW ZEALAND",
+ VE: "REPÚBLICA BOLIVARIANA DE VENEZUELA",
+ CA: "CANADA",
+ CO: "COLOMBIA",
+ DO: "REPÚBLICA DOMINICANA",
+ GT: "GUATEMALA",
+ MX: "MEXICO",
+ PA: "PANAMÁ",
+ PR: "PUERTO RICO",
+ TW: "台灣",
+ US: "UNITED STATES",
+ UZ: "O’zbekiston"
+ },
+ //国家码与类型匹配表
+ countryCode_5g: {
+ //88 countries of world【36 40 44 48】
+ one: {
+ codes: ["AL", "AI", "AW", "AT", "BY", "BM", "BA", "BW", "IO", "BG",
+ "CV", "HR", "CY", "CZ", "DK", "EE", "FI", "FR", "GF", "PF",
+ "TF", "GI", "DE", "GR", "GP", "GG", "HU", "IS", "IE", "IT",
+ "KE", "LA", "LV", "LS", "LI", "LT", "LU", "MK", "MT", "IM",
+ "MQ", "MR", "MU", "YT", "MC", "MS", "NL", "AN", "NO",
+ "OM", "PL", "PT", "RE", "RO", "SM", "SN", "RS", "SK", "SI",
+ "ZA", "ES", "SE", "CH", "TC", "UG", "GB", "VG", "WF", "ZM",
+ "AF", "JO", "MA", "EH", "EU", "DZ", "IL", "MX", "PM", "TN",
+ "TR", "JP"],
+ channels: [36, 40, 44, 48]
+ },
+ //60 countrys of world【36 40 44 48 149 153 157 161 165】
+ two: {
+ codes: ["AS", "AG", "AZ", "BR", "KH", "KY", "CO", "CR", "DM", "DO",
+ "EC", "GH", "GD", "HK", "KZ", "KI", "FM", "MZ", "NA", "NZ",
+ "NI", "NE", "PW", "PE", "PH", "PR", "VC", "TH", "TT", "UY",
+ "ZW", "AU", "BH", "BB", "CA", "CL", "CX", "EG", "SV", "GT",
+ "HT", "IN", "MY", "NF", "PA", "PG", "SG", "US", "VN"],
+ channels: [36, 40, 44, 48, 149, 153, 157, 161, 165]
+ },
+ //9 countrys of world【149 153 157 161】
+ three: {
+ codes: ["CU", "IR", "KR", "SY", "LB", "MW", "MO", "QA"],
+ channels: [149, 153, 157, 161]
+ },
+ //12 countrys of world【149 153 157 161 165】
+ four: {
+ codes: ["BD", "BF", "CN", "HN", "JM", "PK", "PY", "KN", "AR", "TW", "NG"],
+ channels: [149, 153, 157, 161, 165]
+ },
+ //1 country of world【36 40 44 48 149 153 157 161】
+ five: {
+ codes: ["SA"],
+ channels: [36, 40, 44, 48, 149, 153, 157, 161]
+ }
+ },
+ countryCode: {
+ world: ["AL", "DZ", "AR", "AM", "AU", "AT", "AZ", "BH", "BY",
+ "BE", "BA", "BR", "BN", "BG", "CL", "CN", "CR", "HR", "CY",
+ "CZ", "DK", "EC", "EG", "SV", "EE", "FI", "FR", "GE",
+ "DE", "GR", "HN", "HK", "HU", "IS", "IN", "ID", "IR", "IE",
+ "IL", "IT", "JM", "JO", "KZ", "KE", "KP", "KR", "KW", "LV",
+ "LB", "LI", "LT", "LU", "MO", "MK", "MY", "MT", "MC", "MA",
+ "NL", "AN", "NO", "OM", "PK", "PE", "PH", "PL", "PT", "QA",
+ "RO", "RU", "SA", "SG", "SK", "SI", "ZA", "ES", "LK",
+ "SE", "CH", "SY", "TH", "TT", "TN", "TR", "UA", "AE", "GB",
+ "UY", "VN", "YE", "ZW", "BD"],
+ mkkc: ["JP"],
+ apld: [],
+ etsic: ["BZ", "BO", "NZ", "VE"],
+ fcca: ["CA", "CO", "DO", "GT", "MX", "PA", "PR", "TW", "US", "UZ"]
+ },
+ //休眠时间
+ SLEEP_MODES: [{
+ name: "Always on",
+ value: "-1"
+ }, {
+ name: "5 minutes",
+ value: "5"
+ }, {
+ name: "10 minutes",
+ value: "10"
+ }, {
+ name: "20 minutes",
+ value: "20"
+ }, {
+ name: "30 minutes",
+ value: "30"
+ }, {
+ name: "1 hour",
+ value: "60"
+ }, {
+ name: "2 hours",
+ value: "120"
+ }
+ ],
+ DDNSSetMode: [{
+ name: 'Enable',
+ value: '1'
+ }, {
+ name: 'Disable',
+ value: '0'
+ }
+ ],
+ ddns_Modeselect: [{
+ name: 'manual',
+ value: 'manual'
+ }, {
+ name: 'auto',
+ value: 'auto'
+ }
+ ],
+ DDNSDDP: [{
+ name: 'dyndns.org',
+ value: 'dyndns.org'
+ }, {
+ name: 'freedns.afraid.org',
+ value: 'freedns.afraid.org'
+ }, {
+ name: 'zoneedit.com',
+ value: 'zoneedit.com'
+ }, {
+ name: 'no-ip.com',
+ value: 'no-ip.com'
+ }, {
+ name: 'None',
+ value: 'none'
+ }
+ ],
+ //RJ45连接模式
+ pppoeModes: [{
+ name: "PPPoE",
+ value: "PPPOE"
+ }, {
+ name: "Static",
+ value: "STATIC"
+ }, {
+ name: "DHCP",
+ value: "DHCP"
+ }, {
+ name: "AUTO",
+ value: "AUTO"
+ }
+ ],
+ //联网模式
+ AUTO_MODES: [{
+ name: 'Automatic',
+ value: 'NETWORK_auto'
+ }, {
+ name: '4G Only',
+ value: 'Only_LTE'
+ }, {
+ name: '3G Only',
+ value: 'Only_WCDMA'
+ }, {
+ name: '2G Only',
+ value: 'Only_GSM'
+ }
+ ],
+ //APN鉴权模式
+ APN_AUTH_MODES: [{
+ name: "NONE",
+ value: "none"
+ }, {
+ name: "CHAP",
+ value: "chap"
+ }, {
+ name: "PAP",
+ value: "pap"
+ }
+ ],
+ //语言
+ LANGUAGES: [{
+ name: 'English',
+ value: 'en'
+ }, {
+ name: '中文',
+ value: 'zh-cn'
+ }
+ ],
+ //wifi加密模式
+ AUTH_MODES: [{
+ name: 'NO ENCRYPTION',
+ value: 'OPEN'
+ }, {
+ name: 'WPA2(AES)-PSK',
+ value: 'WPA2PSK'
+ }, {
+ name: 'WPA-PSK/WPA2-PSK',
+ value: 'WPAPSKWPA2PSK'
+ }, {
+ name: 'WPA3-Personal',
+ value: 'WPA3Personal'
+ }, {
+ name: 'WPA2(AES)/WPA3-Personal',
+ value: 'WPA2WPA3'
+ }
+ ],
+ AUTH_MODES_WEP: [{
+ name: 'NO ENCRYPTION',
+ value: 'OPEN'
+ }, {
+ name: 'SHARED',
+ value: 'SHARED'
+ }, {
+ name: 'WPA2(AES)-PSK',
+ value: 'WPA2PSK'
+ }, {
+ name: 'WPA-PSK/WPA2-PSK',
+ value: 'WPAPSKWPA2PSK'
+ }, {
+ name: 'WPA3-Personal',
+ value: 'WPA3Personal'
+ }, {
+ name: 'WPA2(AES)/WPA3-Personal',
+ value: 'WPA2WPA3'
+ }
+ ],
+ AUTH_MODES_ALL: [{
+ name: 'NO ENCRYPTION',
+ value: 'OPEN'
+ }, {
+ name: 'SHARED',
+ value: 'SHARED'
+ }, {
+ name: 'WPA-PSK',
+ value: 'WPAPSK'
+ }, {
+ name: 'WPA2-PSK',
+ value: 'WPA2PSK'
+ }, {
+ name: 'WPA-PSK/WPA2-PSK',
+ value: 'WPAPSKWPA2PSK'
+ }, /*{
+ name: 'WPA3-Personal',
+ value: 'WPA3Personal'
+ }, {
+ name: 'WPA2(AES)/WPA3-Personal',
+ value: 'WPA2WPA3'
+ }, */{
+ name: 'EAP-SIM/AKA',
+ value: 'EAP-SIM/AKA'
+ }
+ ],
+
+ NETWORK_MODES: [{
+ name: '802.11 b/g/n',
+ value: '4'
+ }, {
+ name: '802.11 n only',
+ value: '2'
+ }
+ ],
+ NETWORK_MODES_BAND: [{
+ name: '802.11 a only',
+ value: '5'
+ }, {
+ name: '802.11 n only',
+ value: '2'
+ }, {
+ name: '802.11 a/n',
+ value: '4'
+ }
+ ],
+ resetContentModifyValue: function () {
+ this.CONTENT_MODIFIED.checkChangMethod = function () {
+ return false;
+ };
+ this.CONTENT_MODIFIED.modified = false;
+ this.CONTENT_MODIFIED.message = 'leave_page_info';
+ this.CONTENT_MODIFIED.callback = {
+ ok: $.noop,
+ no: function () {
+ return true;
+ }
+ }; //如果no返回true,页面则保持原状
+ this.CONTENT_MODIFIED.data = {};
+ },
+ CONTENT_MODIFIED: {
+ modified: false,
+ message: 'leave_page_info',
+ data: {},
+ checkChangMethod: function () {
+ return false;
+ },
+ callback: {
+ ok: $.noop,
+ no: function () {
+ return true;
+ }
+ } //如果no返回true,页面则保持原状
+ }, //当前页面内容是否已经修改
+
+ };
+
+ require([config.DEVICE + '/set'], function (otherConf) {
+ $.extend(config, otherConf);
+ });
+
+ return config;
+});
diff --git a/lynq/S300/ap/app/zte_webui/js/sim_device.js b/lynq/S300/ap/app/zte_webui/js/sim_device.js
new file mode 100755
index 0000000..633e2e6
--- /dev/null
+++ b/lynq/S300/ap/app/zte_webui/js/sim_device.js
@@ -0,0 +1,5028 @@
+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;
+ }
+ if(config.WIFI_SUPPORT_QR_CODE){
+ target.qrcodeSrc = './pic/qrcode_ssid_wifikey.png?_=' + $.now();
+ } else {
+ target.qrcodeSrc = './pic/res_blacktrans.png';
+ }
+ 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();
+ var upgUrl = service.getManualOTAUpdateSetting();
+
+ 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.updateURL = ko.observable(upgUrl.updateURL);
+
+ // 手动ota升级事件
+ target.ota_upgrade_apply = function () {
+ var otaUpdateURLInfo = {
+ updateURL: target.updateURL()
+ };
+ showLoading();
+ service.setManualOTAUpdateSetting(otaUpdateURLInfo, function (settingInfo) {
+ if (settingInfo && settingInfo.result == "success") {
+ successOverlay();
+ } else {
+ errorOverlay();
+ }
+ });
+ };
+
+
+ // 自动检测设置按钮事件
+ 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');
+ window.location.reload();
+ } else {
+ !data.noLoading && successOverlay('sms_save_draft_success');
+ window.location.reload();
+ }
+ }, 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
+ };
+});
diff --git a/lynq/S300/ap/app/zte_webui/js/wifi.js b/lynq/S300/ap/app/zte_webui/js/wifi.js
new file mode 100755
index 0000000..eceb2a9
--- /dev/null
+++ b/lynq/S300/ap/app/zte_webui/js/wifi.js
@@ -0,0 +1,3757 @@
+define("wifi_advance","underscore jquery knockout set service jqui".split(" "),
+ function (_, $, ko, config, service, jqui) {
+ var $sliderRange = null;
+ //当前是否WiFi连接
+ var viaWifi = false;
+
+ function paintRateOption(data) {
+ var opts = [];
+ for (var i = 0; i < data.length; i++) {
+ var rate = data[i].rate == 0 ? "Auto" : data[i].rate + " Mbps";
+ opts.push(new Option(rate, data[i].index));
+ }
+ return opts;
+ }
+
+ //wifi传输速率
+ var transpeed = [0, 1, 2, 5.5, 6, 6.5, 9, 11, 12, 13, 18, 19.5, 24, 26, 36, 39, 48, 52, 54, 58.5, 65];
+
+ function rateSort(a, b) {
+ return a.rate - b.rate;
+ }
+ //删除重复速率值
+ function unionRate(rateTable) {
+ var rates = [],
+ result = [];
+ for (var i = 0; i < rateTable.length; i++) {
+ for (var j = 0; j < rateTable[i].length; j++) {
+ if (ko.utils.arrayIndexOf(rates, rateTable[i][j]) == -1) {
+ rates.push(rateTable[i][j]);
+ result.push({
+ index: rateTable[i][j],
+ rate: transpeed[rateTable[i][j]]
+ });
+ }
+ }
+ }
+ result.sort(rateSort);
+ return result;
+ }
+
+ //根据模式生成速率选项
+ function modeRateOption(wifimode) {
+ var wifimodeN = [0, 5, 9, 11, 13, 15, 17, 19, 20];
+ var wifimodeG = [0, 4, 6, 8, 10, 12, 14, 16, 18];
+ var wifimodeB = [0, 1, 2, 3, 7];
+ var rate = [];
+
+ switch (wifimode) {
+ //--wifimode
+ case '5':
+ rate.push(wifimodeN);
+ rate.push(wifimodeG);
+ rate.push(wifimodeB);
+ break;
+ case '4':
+ rate.push(wifimodeN);
+ rate.push(wifimodeG);
+ rate.push(wifimodeB);
+ break;
+ case '3':
+ rate.push(wifimodeG);
+ rate.push(wifimodeB);
+ break;
+ case '2':
+ rate.push(wifimodeN);
+ break;
+ case '1':
+ rate.push(wifimodeG);
+ break;
+ case '0':
+ rate.push(wifimodeB);
+ break;
+
+ default:
+ rate.push(wifimodeN);
+ break;
+ }
+ var union = unionRate(rate);
+ return paintRateOption(union);
+ }
+
+ function getCountryCode(country) {
+ var countryCodeArr = config.countryCode;
+ var type = '';
+ for (key in countryCodeArr) {
+ var codes = countryCodeArr[key];
+ if ($.inArray(country, codes) != -1) {
+ type = key;
+ break;
+ }
+ }
+ var typeCode = config.countryCodeType[type];
+ return typeCode ? typeCode : "0";
+ }
+
+ function channelOption(country) {
+ var showOption = [new Option('Auto', '0')];
+ var type = getCountryCode(country) + '';
+ switch (type) {
+ //--type
+ case '9':
+ generateChannelOption(showOption, 2307, 13);
+ break;
+ case '7':
+ generateChannelOption(showOption, 2307, 13);
+ generateChannelOption(showOption, 2407, 11);
+ generateChannelOption(showOption, 2462, 2);
+ break;
+ case '3':
+ generateChannelOption(showOption, 2407, 11);
+ generateChannelOption(showOption, 2462, 2);
+ break;
+ //--type
+ case '2':
+ generateChannelOption(showOption, 2307, 13);
+ generateChannelOption(showOption, 2407, 11);
+ break;
+ case '1':
+ generateChannelOption(showOption, 2407, 11);
+ break;
+ default:
+ generateChannelOption(showOption, 2407, 11);
+ }
+ return showOption;
+ }
+ function generateChannelOption(showOption, start, count) {
+ for (var i = 1; i <= count; i++) {
+ var txt = start + i * 5 + "MHz (Channel " + showOption.length + ")";
+ showOption.push(new Option(txt, showOption.length + "_" + (start + i * 5)));
+ }
+ }
+
+ function channelOption5g(country) {
+ for (key in config.countryCode_5g) {
+ var item = config.countryCode_5g[key];
+ if ($.inArray(country, item.codes) != -1) {
+ return generate5gChannelOption(item.channels);
+ }
+ }
+ return [new Option('Auto', '0')];
+ }
+ function generate5gChannelOption(channels) {
+ var showOption = [new Option('Auto', '0')];
+ for (var i = 0; i < channels.length; i++) {
+ var channel = channels[i];
+ var mhz = channel * 5 + 5000;
+ var txt = mhz + "MHz (Channel " + channel + ")";
+ showOption.push(new Option(txt, channel + "_" + (mhz)));
+ }
+ return showOption;
+ }
+
+ function getBandOptions() {
+ var showOption = [];
+ if (!config.WIFI_HAS_5G) {
+ showOption.push(new Option('2.4GHz', 'b'));
+ } else {
+ showOption.push(new Option('5GHz', 'a'));
+ showOption.push(new Option('2.4GHz', 'b'));
+ }
+ return showOption;
+ }
+
+ function getChannelBandwidthsOptions(isSupport40) {
+ var showOption = [];
+ if (isSupport40) {
+ showOption.push(new Option('20MHz', '0'));
+ showOption.push(new Option('20MHz/40MHz', '1'));
+ } else {
+ showOption.push(new Option('20MHz', '0'));
+ }
+ return showOption;
+ }
+
+ function countryCodeOption(is5G) {
+ var countries = is5G ? config.countries_5g : config.countries;
+ var showOption = [];
+ for (key in countries) {
+ showOption.push(new Option(countries[key], key));
+ }
+ showOption = _.sortBy(showOption, function (opt) {
+ return opt.text;
+ });
+ return showOption;
+ }
+
+ function getWifiAdvance() {
+ return service.getWifiAdvance();
+ }
+
+ function getWpsState() {
+ return service.getWpsInfo();
+ }
+
+ function getModeOption(wifiBand) {
+ var modes = wifiBand == 'a' ? config.NETWORK_MODES_BAND : config.NETWORK_MODES;
+ if (wifiBand == 'a') {
+ $("#mode").hide();
+ $("#modeFor5HZ").show();
+ $("#modeLabel").attr('for', 'modeFor5HZ');
+ } else if (modes.length == 1) {
+ $("#mode").hide();
+ $("#modeFor5HZ").hide();
+ } else {
+ $("#mode").show();
+ $("#modeFor5HZ").hide();
+ }
+ var modeOptions = [];
+ for (var i = 0; i < modes.length; i++) {
+ modeOptions.push(new Option(modes[i].name, modes[i].value));
+ }
+ return modeOptions;
+ }
+
+ function getSelectedRateV(rate, rates) {
+ for (var i = 0; i < rates.length; i++) {
+ var opt = rates[i];
+ if (opt.text == rate + " Mbps") {
+ return opt.value;
+ }
+ }
+ return '0';
+ }
+ //获取所选的信道对应的value值
+ function getSelectedChannelV(channel, channels) {
+ for (var i = 0; i < channels.length; i++) {
+ var opt = $(channels[i]);
+ if (opt.val().split("_")[0] == channel) {
+ return opt.val();
+ }
+ }
+ return '0';
+ }
+
+ function WifiAdvanceViewModel() {
+ // Data
+ var target = this;
+
+ var wifiInfo = service.getWifiAdvance();
+ target.origin_ap_station_enable = wifiInfo.ap_station_enable;
+ target.modes = ko.observableArray(getModeOption(wifiInfo.wifiBand));
+ target.bands = ko.observableArray(getBandOptions());
+
+ var countryOpts = countryCodeOption(wifiInfo.wifiBand == 'a');
+ target.countries = ko.observableArray(countryOpts);
+ target.channels = ko.observableArray(wifiInfo.wifiBand == 'a' ? channelOption5g(wifiInfo.countryCode) : channelOption(wifiInfo.countryCode));
+ target.rates = ko.observableArray(modeRateOption(wifiInfo.mode));
+
+ target.hasAPStation = config.AP_STATION_SUPPORT;
+ target.hasWifiSwitch = config.WIFI_SWITCH_SUPPORT;
+ target.hasMultiSSID = config.HAS_MULTI_SSID;
+ target.hasWlanMacfilter = config.HAS_BLACK_AND_WHITE_FILTER;
+ target.hasWifiBand = ko.observable(config.WIFI_BAND_SUPPORT);
+ target.hasBandwidth = ko.observable(config.WIFI_BANDWIDTH_SUPPORT);
+
+ target.selectedMode = ko.observable(wifiInfo.mode);
+ target.selectedChannel = ko.observable(getSelectedChannelV(wifiInfo.channel, target.channels()));
+ target.selectedChannelBandwidth = ko.observable(wifiInfo.bandwidth); //5:a, 2.5:b
+ target.selectedCountry = ko.observable(wifiInfo.countryCode.toUpperCase());
+ target.selectedBand = ko.observable(wifiInfo.wifiBand); //5:a, 2.5:b
+ target.selectedRate = ko.observable(getSelectedRateV(wifiInfo.rate, target.rates()));
+
+ var baseInfo = service.getWifiBasic();
+ target.wifi_enable = ko.observable(baseInfo.wifi_enable);
+ if (config.HAS_MULTI_SSID && ((baseInfo.m_AuthMode == "OPEN" && baseInfo.m_encryptType == "WEP") || (baseInfo.m_AuthMode == "SHARED" && baseInfo.m_encryptType == "WEP") || baseInfo.m_encryptType == "TKIP")) {
+ target.isF = ko.observable(true);
+ } else if ((baseInfo.AuthMode == "OPEN" && baseInfo.encryptType == "WEP") || (baseInfo.AuthMode == "SHARED" && baseInfo.encryptType == "WEP") || baseInfo.encryptType == "TKIP") {
+ target.isF = ko.observable(true);
+ } else {
+ target.isF = ko.observable(false);
+ }
+ target.isShowSSIDInfoDiv = ko.observable(false);
+ if (config.WIFI_SWITCH_SUPPORT) {
+ if (baseInfo.wifi_enable == "1") {
+ target.isShowSSIDInfoDiv(true);
+ } else {
+ target.isShowSSIDInfoDiv(false);
+ }
+ } else {
+ target.isShowSSIDInfoDiv(true);
+ }
+ target.multi_ssid_enable = ko.observable(baseInfo.multi_ssid_enable);
+ target.origin_multi_ssid_enable = baseInfo.multi_ssid_enable;
+ target.maxStationNumber = ko.observable(wifiInfo.MAX_Station_num);
+ target.selectedStation = ko.observable(wifiInfo.MAX_Access_num);
+ target.selectedStationM = ko.observable(wifiInfo.m_MAX_Access_num);
+
+ target.oneBandTrans = ko.observable(wifiInfo.wifiBand == 'a' ? '5G' : '2.4G');
+ target.oneModeTrans = ko.observable((wifiInfo.wifiBand == 'a' ? 'network_modes_band_select_' : 'network_mode_select_') + wifiInfo.mode);
+
+ target.channelBandwidths = ko.computed(function () {
+ if (config.WIFI_BANDWIDTH_SUPPORT_40MHZ) {
+ return getChannelBandwidthsOptions(true);
+ } else {
+ return getChannelBandwidthsOptions(false);
+ }
+ });
+
+ wifiInfo = $.extend(wifiInfo, target);
+
+ //Event Handler 频段切换时更新对应的国家/地区码、信道和网络模式选项
+ target.bandChangeHandler = function () {
+ if (target.selectedBand() == 'a') { //5g
+ //802.11a only 802.11n only 802.11a/n
+ target.modes(getModeOption(target.selectedBand()));
+ target.countries(countryCodeOption(true));
+ } else { // 2.4g
+ //802.11 n only 802.11 b/g/n
+ target.modes(getModeOption(target.selectedBand()));
+ target.countries(countryCodeOption(false));
+ }
+ target.selectedCountry('0');
+ target.channels(target.generateChannelOption());
+ target.selectedChannel('0');
+ };
+
+ target.countryChangeHandler = function (data, event) {
+ var opts = target.generateChannelOption();
+ target.channels(opts);
+ target.selectedChannel('0');
+ };
+
+ target.modeChangeHandler = function (data, event) {
+ var opts = modeRateOption(target.selectedMode());
+ target.rates(opts);
+ target.selectedRate('0');
+ };
+
+ target.generateChannelOption = function () {
+ if (target.selectedBand() == 'a') {
+ return channelOption5g(target.selectedCountry());
+ } else {
+ return channelOption(target.selectedCountry());
+ }
+ };
+
+ target.save = function () {
+ var status = getWpsState();
+ if (status.wpsFlag == '1') {
+ showAlert('wps_on_info', function() {
+ window.location.reload();
+ });
+ return;
+ }
+ var selectedRateTxt = $("#rate option:selected").text();
+ var rateVal = null;
+ if (selectedRateTxt != $.i18n.prop('rate_0')) {
+ rateVal = $.trim(selectedRateTxt.replace('Mbps', ''));
+ } else {
+ rateVal = 0;
+ }
+ var wifiParam = {};
+ wifiParam.countryCode = target.selectedCountry();
+ wifiParam.mode = target.selectedMode();
+ var selectedChannel = target.selectedChannel();
+ wifiParam.channel = selectedChannel == '0' ? '0' : selectedChannel.split("_")[0];
+ wifiParam.rate = rateVal;
+ wifiParam.wifiBand = target.selectedBand();
+ if (config.WIFI_BANDWIDTH_SUPPORT) {
+ wifiParam.bandwidth = target.selectedChannelBandwidth();
+ }
+ wifiParam.station = target.selectedStation();
+ wifiParam.m_station = target.selectedStationM();
+ showConfirm('wifi_disconnect_confirm', function () {
+ showLoading('waiting');
+ service.setWifiAdvance(wifiParam, function (result) {
+ if (result.result == "success") {
+ if (viaWifi) {
+ setTimeout(advanceReloadVarWifi, 15000);
+ } else {
+ addInterval(advanceReload, 1000);
+ }
+ } else {
+ errorOverlay();
+ }
+ });
+ });
+ };
+
+ target.checkSettings = function (ssid) {
+ var status = getWpsState();
+ if (status.wpsFlag == '1') {
+ showAlert('wps_on_info', function() {
+ window.location.reload();
+ });
+ return true;
+ }
+ if (config.HAS_MULTI_SSID && baseInfo.multi_ssid_enable == "1") {
+ if ((ssid == "ssid1" && parseInt(target.selectedStation()) + parseInt(baseInfo.m_MAX_Access_num) > baseInfo.MAX_Station_num)
+ || (ssid == "ssid2" && parseInt(target.m_selectedStation()) + parseInt(baseInfo.MAX_Access_num) > baseInfo.MAX_Station_num)) {
+ showAlert({
+ msg: 'multi_ssid_max_access_number_alert',
+ wifiParam: baseInfo.MAX_Station_num
+ });
+ return true;
+ }
+ }
+
+ return false;
+ };
+
+ target.setMultiSSIDSwitch = function () {
+ if (target.checkSettings("switch")) {
+ return;
+ }
+
+ var setSwitch = function () {
+ showLoading('waiting');
+ var wifiParam = {};
+ wifiParam.m_ssid_enable = target.multi_ssid_enable();
+ if (config.WIFI_SWITCH_SUPPORT) {
+ wifiParam.wifiEnabled = target.wifi_enable();
+ }
+ service.setWifiBasicMultiSSIDSwitch(wifiParam, function (result) {
+ if (result.result == "success") {
+ if (viaWifi) {
+ setTimeout(hasApReloadVarWifi, 15000);
+ } else {
+ addInterval(hasApReload, 1000);
+ }
+ } else {
+ errorOverlay();
+ }
+ });
+ };
+
+ var baseInfo = service.getStatusInfo();
+ if (config.HAS_MULTI_SSID && target.wifi_enable() == "1") {
+ if (target.multi_ssid_enable() == "1" && config.AP_STATION_SUPPORT && target.origin_ap_station_enable == "1") {
+ if (!baseInfo.wifiStatus) {
+ showConfirm("multi_ssid_enable_confirm", function () {
+ setSwitch();
+ });
+ } else {
+ showConfirm("multi_ssid_enable_confirm2", function () {
+ setSwitch();
+ });
+ }
+ } else {
+ if (!baseInfo.wifiStatus) {
+ setSwitch();
+ } else {
+ showConfirm("wifi_disconnect_confirm2", function () {
+ setSwitch();
+ });
+ }
+ }
+ } else {
+ setSwitch();
+ }
+
+ function hasApReloadVarWifi() {
+ successOverlay();
+ setTimeout(function () {
+ window.location.reload();
+ }, 1000);
+ clearTimer();
+ clearValidateMsg();
+ service.refreshAPStationStatus();
+ initialize();
+ }
+ function hasApReload() {
+ var baseInfo = service.getWifiBasic();
+ if (baseInfo.wifi_enable == target.wifi_enable()) {
+ successOverlay();
+ clearTimer();
+ clearValidateMsg();
+ service.refreshAPStationStatus();
+ initialize();
+ }
+ }
+
+ };
+
+ }
+
+ function checkAccessMode() {
+ service.getParams({
+ nv: 'user_ip_addr'
+ }, function (dataIp) {
+ service.getParams({
+ nv: 'station_list'
+ }, function (dataList) {
+ viaWifi = isWifiConnected(dataIp.user_ip_addr, dataList.station_list);
+ });
+ });
+ }
+
+ function advanceReloadVarWifi() {
+ successOverlay();
+ setTimeout(function () {
+ window.location.reload();
+ }, 1000);
+ }
+
+ function advanceReload() {
+ var baseInfo = service.getWifiBasic();
+ if (baseInfo.wifi_enable == "1") {
+ successOverlay();
+ clearTimer();
+ clearValidateMsg();
+ initialize();
+ }
+ }
+
+ function initialize() {
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ var vm = new WifiAdvanceViewModel();
+ ko.applyBindings(vm, container[0]);
+ addTimeout(function () {
+ checkAccessMode();
+ }, 600);
+
+ if (config.WDS_SUPPORT) {
+ checkWifiStatusUseWDS();
+ } else if (config.AP_STATION_SUPPORT) {
+ checkWifiStatus();
+ }
+
+ $('#wifi_advance_form').validate({
+ submitHandler: function () {
+ vm.save();
+ }
+ });
+
+ $('#frmWifiSwitch').validate({
+ submitHandler: function () {
+ vm.setMultiSSIDSwitch();
+ }
+ });
+ }
+
+ function checkWifiStatusUseWDS() {
+ var baseInfo = service.getWdsInfo();
+ if (baseInfo.currentMode == "0") {
+ $(':input', '#frmWifiSwitch,#wifi_advance_form').each(function () {
+ $(this).prop("disabled", false);
+ });
+ } else {
+ $(':input', '#frmWifiSwitch,#wifi_advance_form').each(function () {
+ $(this).prop("disabled", true);
+ });
+ }
+ }
+
+ function checkWifiStatus() {
+ var baseInfo = service.getAPStationBasic();
+ if (baseInfo.ap_station_enable != "1") {
+ $(':input', '#wifi_advance_form').each(function () {
+ $(this).prop("disabled", false);
+ });
+ } else {
+ $(':input', '#wifi_advance_form').each(function () {
+ $(this).prop("disabled", true);
+ });
+ }
+ }
+
+ return {
+ init: initialize
+ };
+});
+
+define("wifi_ap_station","underscore jquery knockout set service".split(" "),
+ function (_, $, ko, config, service) {
+ var viaWifi = false;
+ function checkAccessMode() {
+ service.getParams({
+ nv: 'user_ip_addr'
+ }, function (dataIp) {
+ service.getParams({
+ nv: 'station_list'
+ }, function (dataList) {
+ viaWifi = isWifiConnected(dataIp.user_ip_addr, dataList.station_list);
+ });
+ });
+ }
+
+ function apStationViewMode() {
+ var target = this;
+ var ssid_ex = "";
+ target.hasMultiSSID = config.HAS_MULTI_SSID;
+ target.hasAPStation = config.AP_STATION_SUPPORT;
+ target.hasWifiSwitch = config.WIFI_SWITCH_SUPPORT;
+ target.hasWlanMacfilter = config.HAS_BLACK_AND_WHITE_FILTER;
+
+ var securityModes = _.map(config.AUTH_MODES_ALL, function (item) {
+ return new Option(item.name, item.value);
+ });
+ //当前页面标识 list列表页 add添加页面 edit编辑页面
+ target.page = {
+ list: 1,
+ add: 2,
+ edit: 3
+ };
+ //WiFi热点列表列的配置项
+ var gridColumn = [{
+ columnType: "radio",
+ headerTextTrans: "option",
+ rowText: "profileName",
+ width: "10%"
+ }, {
+ headerTextTrans: "ssid_title",
+ rowText: "ssid",
+ width: "30%"
+ }, {
+ columnType: "image",
+ headerTextTrans: "signal",
+ rowText: "imgSignal",
+ width: "30%"
+ }, {
+ headerTextTrans: "security_mode",
+ rowText: "authMode_show",
+ width: "30%"
+ }
+ ];
+ //搜索到的WiFi热点列表列的配置项
+ var searchGridColumn = [{
+ columnType: "radio",
+ rowText: "index",
+ width: "10%"
+ }, {
+ headerTextTrans: "ssid_title",
+ rowText: "ssid",
+ width: "30%"
+ }, {
+ columnType: "image",
+ headerTextTrans: "signal",
+ rowText: "imgSignal",
+ width: "30%"
+ }, {
+ headerTextTrans: "security_mode",
+ rowText: "authMode_show",
+ width: "30%"
+ }
+ ];
+
+ target.pageState = ko.observable(target.page.list);
+
+ var info = service.getAPStationBasic();
+
+ target.origin_ap_station_enable = info.ap_station_enable;
+ target.ap_station_enable = ko.observable(info.ap_station_enable);
+ target.apList = ko.observable([]);
+ if (target.origin_ap_station_enable == "1") {
+ var apList = service.getHotspotList();
+ target.apList(fixHotspotList(apList.hotspotList));
+ }
+
+ target.apSearchList = ko.observable([]);
+
+ target.connectButtonStatus = ko.observable("disable");
+ target.hasSelectFromUser = ko.observable();
+ target.showPassword = ko.observable(false);
+
+ target.isCableMode = ko.observable();
+
+ var infoBasic = service.getWifiBasic();
+ target.wifi_enable = ko.observable(infoBasic.wifi_enable);
+
+ target.isShowSSIDInfoDiv = ko.observable(false);
+ if (config.WIFI_SWITCH_SUPPORT) {
+ if (infoBasic.wifi_enable == "1") {
+ target.isShowSSIDInfoDiv(true);
+ } else {
+ target.isShowSSIDInfoDiv(false);
+ }
+ } else {
+ target.isShowSSIDInfoDiv(true);
+ }
+ target.multi_ssid_enable = ko.observable(infoBasic.multi_ssid_enable);
+
+ //密码显示事件
+ target.showPasswordHandler = function () {
+ $("#codeWPAKey").parent().find(".error").hide();
+ $("#pwdWepKey").parent().find(".error").hide();
+ var checkbox = $("#showPassword:checked");
+ if (checkbox && checkbox.length == 0) {
+ target.showPassword(true);
+ } else {
+ target.showPassword(false);
+ }
+ };
+
+ target.showWPAPasswordHandler = function () {
+ $("#codeWPAKey").parent().find(".error").hide();
+ $("#pwdWepKey").parent().find(".error").hide();
+ if ($("#showWPAPassword").is(":checked")) {
+ target.showPassword(true);
+ } else {
+ target.showPassword(false);
+ }
+ };
+
+ //列表模板创建
+ target.apGrid = new ko.simpleGrid.viewModel({
+ idName: "profileName",
+ data: target.apList(),
+ tmplType: 'list',
+ pageSize: 100,
+ columns: gridColumn,
+ primaryColumn: "fromProvider",
+ radioClickHandler: function () {
+ computeButtonState();
+ }
+ });
+ //热点搜索结果列表模板创建
+ target.apSearchGrid = new ko.simpleGrid.viewModel({
+ data: target.apSearchList(),
+ idName: "index",
+ tmplType: 'list',
+ pageSize: 100,
+ columns: searchGridColumn,
+ radioClickHandler: function () {
+ var index = target.apSearchGrid.radioSelectValue();
+ var aplist = target.apSearchList();
+ for (var i = 0; i < aplist.length; i++) {
+ var list_item = aplist[i];
+ if (list_item.index == index) {
+ target.profileName("");
+ target.ssid(list_item.ssid);
+ ssid_ex = list_item.ssid;
+ target.signal(list_item.signal);
+ target.authMode(list_item.authMode);
+ target.password(list_item.password);
+ target.mac(list_item.mac);
+ if (list_item.authMode == "WPAPSKWPA2PSK" || list_item.authMode == "WPA2PSK" || list_item.authMode == "WPAPSK" || list_item.authMode == "WPA3Personal" || list_item.authMode == "WPA2WPA3") {
+ target.encryptType_WPA(list_item.encryptType);
+ } else {
+ target.encryptType(list_item.encryptType);
+ }
+ target.keyID(list_item.keyID);
+ renderCustomElement($("#cipherGroup"));
+ break;
+ }
+ }
+ }
+ });
+
+ //计算并设置当前连接和按钮的状态
+ target.computeConnectStatus = function () {
+ computeButtonState();
+
+ var networkStatus = target.connectStatus();
+ if (networkStatus == "ppp_connected") {
+ target.current_status_trans("ap_station_wan_connected");
+ target.current_status_text($.i18n.prop("ap_station_wan_connected"));
+ return;
+ }
+
+ var ssid = target.connectWifiSSID();
+ var wifiStatus = target.connectWifiStatus();
+ if (ssid && wifiStatus == "connect") {
+ target.current_status_trans("ap_station_wlan_connected");
+ target.current_status_text($.i18n.prop("ap_station_wlan_connected"));
+ return;
+ }
+
+ target.current_status_trans("ap_station_no_connection");
+ target.current_status_text($.i18n.prop("ap_station_no_connection"));
+ };
+ //计算并设置按钮的状态
+ function computeButtonState() {
+ var profileName = target.apGrid.radioSelectValue();
+ if (!profileName) {
+ target.hasSelectFromUser(false);
+ target.connectButtonStatus("disable");
+ return;
+ }
+
+ var status = "";
+ var fromProvider = "";
+ for (var i = 0; i < target.apList().length; i++) {
+ var list_item = target.apList()[i];
+ if (list_item.profileName == profileName) {
+ status = list_item.connectStatus;
+ fromProvider = list_item.fromProvider;
+ break;
+ }
+ }
+
+ if (status == "1") {
+ target.connectButtonStatus("hide");
+ target.hasSelectFromUser(false);
+ } else {
+ target.connectButtonStatus("show");
+ target.hasSelectFromUser(fromProvider == "0");
+ }
+ }
+ var statusInfo = service.getStatusInfo();
+ target.networkType = ko.observable(statusInfo.networkType);
+ target.networkOperator = ko.observable(statusInfo.networkOperator);
+ target.connectStatus = ko.observable(statusInfo.connectStatus);
+ target.connectWifiStatus = ko.observable(statusInfo.connectWifiStatus);
+ target.connectWifiProfile = ko.observable(statusInfo.connectWifiProfile);
+ target.connectWifiSSID = ko.observable(statusInfo.connectWifiSSID);
+
+ target.current_status_trans = ko.observable("");
+ target.current_status_text = ko.observable("");
+ target.current_status = ko.computed(function () {
+ target.computeConnectStatus()
+ });
+
+ target.modes = securityModes;
+ target.profileName = ko.observable("");
+ target.ssid = ko.observable();
+ target.signal = ko.observable("0");
+ target.authMode = ko.observable();
+ target.password = ko.observable();
+ target.encryptType = ko.observable();
+ target.encryptType_WPA = ko.observable("TKIPCCMP");
+ target.keyID = ko.observable("0");
+ target.mac = ko.observable();
+
+ target.openAddPage = function () {
+ if (wifiIsClosed()) {
+ return;
+ }
+ if (wpsIsOn()) {
+ return;
+ }
+ target.clear();
+ getSearchHotspot();
+ };
+
+ //打开基本设置页面
+ target.openListPage = function () {
+ if (wifiIsClosed()) {
+ return;
+ }
+ if (wpsIsOn()) {
+ return;
+ }
+ target.clear();
+ target.pageState(target.page.list);
+ target.apGrid.data(target.apList());
+ v.computeConnectStatus();
+ };
+
+ target.addHotspot = function () {
+ if (wifiIsClosed()) {
+ return;
+ }
+ if (wpsIsOn()) {
+ return;
+ }
+ if (target.pageState() == target.page.add && target.apList().length >= config.AP_STATION_LIST_LENGTH) {
+ showAlert({
+ msg: "ap_station_exceed_list_max",
+ params: config.AP_STATION_LIST_LENGTH
+ });
+ return;
+ }
+ showLoading('waiting');
+ var wifi_para = {};
+ var profileName = target.apGrid.radioSelectValue();
+ wifi_para.profileName = target.profileName();
+ wifi_para.ssid = target.ssid();
+ wifi_para.signal = target.signal();
+ wifi_para.authMode = target.authMode();
+ wifi_para.password = target.password();
+ if (wifi_para.authMode == "SHARED") {
+ wifi_para.encryptType = "WEP";
+ } else if (wifi_para.authMode == "WPAPSKWPA2PSK" || wifi_para.authMode == "WPA2PSK" || wifi_para.authMode == "WPAPSK" || wifi_para.authMode == "WPA3Personal" || wifi_para.authMode == "WPA2WPA3") {
+ wifi_para.encryptType = target.encryptType_WPA();
+ } else {
+ wifi_para.encryptType = target.encryptType();
+ }
+ wifi_para.keyID = target.keyID();
+ wifi_para.mac = (target.mac() == "" || target.ssid() != ssid_ex) ? "0F:00:00:00:00:00" : target.mac();
+ wifi_para.apList = target.apList();
+ service.saveHotspot(wifi_para, function (data) {
+ target.callback(data, true);
+ });
+ };
+
+ target.deleteHotspot = function () {
+ if (wifiIsClosed()) {
+ return;
+ }
+ if (wpsIsOn()) {
+ return;
+ }
+ showConfirm("confirm_data_delete", function () {
+ var wifi_para = {};
+ wifi_para.profileName = target.apGrid.radioSelectValue();
+ wifi_para.apList = target.apList();
+ showLoading('waiting');
+ service.deleteHotspot(wifi_para, function (data) {
+ target.callback(data, true);
+ });
+ });
+ };
+
+ target.openEditPage = function () {
+ if (wifiIsClosed()) {
+ return;
+ }
+ if (wpsIsOn()) {
+ return;
+ }
+ var profileName = target.apGrid.radioSelectValue();
+ var aplist = target.apList();
+ for (var i = 0; i < aplist.length; i++) {
+ var list_item = aplist[i];
+ if (list_item.profileName == profileName) {
+ target.profileName(profileName);
+ target.ssid(list_item.ssid);
+ target.signal(list_item.signal);
+ target.authMode(list_item.authMode);
+ target.password(list_item.password);
+ target.mac(list_item.mac);
+ if (list_item.authMode == "WPAPSKWPA2PSK" || list_item.authMode == "WPA2PSK" || list_item.authMode == "WPAPSK" || list_item.authMode == "WPA3Personal" || list_item.authMode == "WPA2WPA3") {
+ target.encryptType_WPA(list_item.encryptType);
+ } else {
+ target.encryptType(list_item.encryptType);
+ }
+ target.keyID(list_item.keyID);
+ }
+ }
+ target.pageState(target.page.edit);
+ };
+
+ target.connectHotspot = function () {
+ if (wifiIsClosed()) {
+ return;
+ }
+ if (wpsIsOn()) {
+ return;
+ }
+ var profileName = target.apGrid.radioSelectValue();
+ var apList = target.apList();
+
+ function connect() {
+ showLoading("connecting");
+ var wifi_para = {};
+ var connectIndex = -1;
+ var ssid = "";
+ for (var i = 0; i < apList.length; i++) {
+ if (apList[i].profileName == profileName) {
+
+ wifi_para.EX_SSID1 = apList[i].ssid;
+ wifi_para.EX_AuthMode = apList[i].authMode;
+ wifi_para.EX_EncrypType = apList[i].encryptType;
+ wifi_para.EX_DefaultKeyID = apList[i].keyID;
+ wifi_para.EX_WEPKEY = apList[i].password;
+ wifi_para.EX_WPAPSK1 = apList[i].password;
+ wifi_para.EX_wifi_profile = apList[i].profileName;
+ wifi_para.EX_mac = apList[i].mac;
+ connectIndex = i;
+ ssid = apList[i].ssid;
+ break;
+ }
+ }
+
+ target.connectWifiSSID(ssid);
+ target.connectWifiStatus("connecting");
+ target.apGrid.setRadioSelect(profileName);
+ target.connectButtonStatus("disable");
+
+ service.connectHotspot(wifi_para, function (data) {
+ if (data && data.result == "success") {
+ target.connectButtonStatus("disable");
+ //延迟检测 确保取得的状态是最新的
+ addTimeout(checkWifiStatus, 3000);
+ } else if (data && data.result == "processing") {
+ showAlert("ap_station_processing");
+ } else {
+ var apList = target.apList(); // cov_2
+ apList[connectIndex].connectStatus = "0";
+ target.connectWifiStatus("disconnect");
+ target.connectButtonStatus("show");
+ hideLoading();
+ errorOverlay();
+ }
+ var apList = service.getHotspotList();
+ target.apList(fixHotspotList(apList.hotspotList));
+ target.connectWifiProfile(profileName);
+ target.connectWifiSSID(ssid);
+ target.apGrid.data([]);
+ target.apGrid.data(target.apList());
+ target.apGrid.setRadioSelect(profileName);
+ });
+ }
+
+ //将用户选中的profile排在运营商定制profile后的第一位
+ function refreshApList(profile, aplist) {
+ var apListLeft = [];
+ var apListPre = [];
+ for (var i = 0; i < aplist.length; i++) {
+ if (aplist[i].fromProvider != "1") {
+ if (aplist[i].profileName == profile) {
+ apListPre.push(apList[i]);
+ } else {
+ apListLeft.push(apList[i]);
+ }
+ } else {
+ apListPre.push(apList[i]);
+ }
+ }
+ var apListNew = apListPre.concat(apListLeft);
+ service.saveHotspot({
+ apList: apListNew
+ }, function (data) {
+ if (data && data.result == "success") {
+ apList = apListNew;
+ target.apList(fixHotspotList(apList));
+ }
+ });
+ }
+
+ var check_count = 0;
+ var connectStatus = false;
+
+ var status = service.getStatusInfo();
+ if (status.connectStatus == "ppp_connected" || status.connectStatus == "ppp_connecting") {
+ showConfirm("ap_station_connect_change_alert", function () {
+ showLoading();
+ connect();
+ });
+ } else {
+ connect();
+ }
+
+ function checkWifiStatus() {
+ check_count = check_count + 1;
+ if (check_count > 60) {
+ hideLoading();
+ errorOverlay();
+ return;
+ }
+ if (!connectStatus) {
+ var status = service.getStatusInfo();
+ if (status.connectWifiStatus != "connect") {
+ addTimeout(checkWifiStatus, 1000);
+ } else {
+ connectStatus = true;
+ }
+ }
+ if (connectStatus) {
+ //继续判断profile中连接状态是否为1
+ service.getHotspotList({}, function (data) {
+ for (var i = 0, len = data.hotspotList.length; i < len; i++) {
+ var list_item = data.hotspotList[i];
+ if (list_item.profileName == profileName) {
+ if (list_item.connectStatus == "1") {
+ hideLoading();
+ return;
+ } else {
+ var errorMsg = {
+ msg: 'ap_connect_error',
+ params: [list_item.ssid]
+ };
+ showAlert(errorMsg);
+ return;
+ }
+ break;
+ }
+ }
+ addTimeout(checkWifiStatus, 1000);
+ });
+ }
+ }
+
+ };
+
+ target.disconnectHotspot = function () {
+ if (wpsIsOn()) {
+ return;
+ }
+ showLoading('disconnecting');
+ service.disconnectHotspot({}, function (data) {
+ target.callback(data, true);
+ })
+ };
+
+ function getSearchHotspot() {
+ var check_count = 0;
+
+ function search() {
+ var result = service.getSearchHotspotList();
+ if (result.scan_finish == "0") {
+ if (check_count <= 60) {
+ check_count = check_count + 1;
+ addTimeout(search, 1000);
+ } else {
+ hideLoading();
+ showAlert("ap_station_search_hotspot_fail");
+ }
+ } else {
+ if ("2" == result.scan_finish) {
+ hideLoading();
+ showAlert("ap_station_processing");
+ } else {
+ target.apSearchList(fixHotspotList(result.hotspotList));
+ target.apSearchGrid.data(target.apSearchList());
+ hideLoading();
+ }
+ }
+ }
+
+ showLoading('scanning');
+ service.searchHotspot({}, function (data) {
+ if (data && data.result == "processing") {
+ hideLoading();
+ showAlert("ap_station_processing");
+ } else if (data && data.result == "success") {
+ if (target.pageState() != target.page.add) {
+ target.pageState(target.page.add);
+ }
+ search();
+ } else {
+ if (target.pageState() != target.page.add) {
+ target.pageState(target.page.add);
+ }
+ hideLoading();
+ showAlert("ap_station_search_hotspot_fail");
+ }
+ });
+ }
+
+ //清除编辑页面的信息
+ target.clear = function () {
+ target.apSearchGrid.clearRadioSelect();
+ target.profileName("");
+ target.ssid("");
+ target.signal("0");
+ target.authMode("OPEN");
+ target.password("");
+ target.encryptType("NONE");
+ target.encryptType_WPA("TKIPCCMP");
+ target.keyID("0");
+ target.mac("");
+ };
+
+ target.apply = function () {
+ if (wifiIsClosed()) {
+ return;
+ }
+ if (wpsIsOn()) {
+ return;
+ }
+
+ function setBasic() {
+ showLoading('waiting');
+ var wifi_para = {};
+ wifi_para.ap_station_enable = target.ap_station_enable();
+ service.setAPStationBasic(wifi_para, function (data) {
+ if (target.origin_ap_station_enable == target.ap_station_enable()) {
+ target.callback(data, true);
+ } else {
+ target.callback2(data, true);
+ }
+ });
+ service.refreshAPStationStatus();
+ }
+ if (!config.HAS_MULTI_SSID) {
+ setBasic();
+ } else {
+ var infoBasic = service.getWifiBasic();
+ if (target.ap_station_enable() == "1" && infoBasic.multi_ssid_enable == "1") {
+ showConfirm("ap_station_enable_confirm", setBasic);
+ } else {
+ setBasic();
+ }
+ }
+ };
+ //刷新搜到的热点列表
+ target.searchHotspot = function () {
+ if (wifiIsClosed()) {
+ return;
+ }
+ if (wpsIsOn()) {
+ return;
+ }
+ getSearchHotspot();
+ };
+ //和webserver交互时的回调,wifi不重启的情况
+ target.callback = function (data, isInitPage) {
+ if (data) {
+ if (isInitPage) {
+ initialize();
+ $("#apList").translate();
+ }
+ if (data.result == "processing") {
+ showAlert("ap_station_processing");
+ } else if (data.result == "spot_connected" || data.result == "spot_connecting") {
+ showAlert("ap_station_update_fail");
+ } else if (data.result == "success") {
+ successOverlay();
+ } else if (data.result == "exist") {
+ showAlert("ap_station_exist");
+ } else {
+ errorOverlay();
+ }
+ } else {
+ errorOverlay();
+ }
+ }
+
+ //和webserver交互时的回调,wifi会重启的情况
+ target.callback2 = function (data, isInitPage) {
+ if (data) {
+ if (!viaWifi) { //通过wifi登录webui
+ addInterval(function () {
+ var info = service.getWifiBasic();
+ if (info.wifi_enable == "1") {
+ clearTimer();
+ clearValidateMsg();
+ initialize();
+ $("#apList").translate();
+ if (data.result == "spot_connected" || data.result == "spot_connecting") {
+ showAlert("ap_station_update_fail");
+ } else if (data.result == "success") {
+ successOverlay();
+ } else {
+ errorOverlay();
+ }
+ }
+ }, 1000);
+ } else {
+ setTimeout(function () {
+ if (data.result == "processing") {
+ showAlert("ap_station_processing");
+ } else if (data.result == "spot_connecting" || data.result == "spot_connected") {
+ showAlert("ap_station_update_fail");
+ } else if (data.result == "success") {
+ successOverlay();
+ setTimeout(function () {
+ window.location.reload();
+ }, 1000);
+ clearTimer();
+ clearValidateMsg();
+ initialize();
+ } else {
+ errorOverlay();
+ }
+ }, 15000);
+ }
+ } else {
+ errorOverlay();
+ }
+ };
+
+ target.checkSettings = function (ssid) {
+ var status = service.getWpsInfo();
+ if (status.wpsFlag == '1') {
+ showAlert('wps_on_info', function() {
+ window.location.reload();
+ });
+ return true;
+ }
+ if (config.HAS_MULTI_SSID && info.multi_ssid_enable == "1") {
+ if ((ssid == "ssid1" && parseInt(target.selectedStation()) + parseInt(info.m_MAX_Access_num) > info.MAX_Station_num)
+ || (ssid == "ssid2" && parseInt(target.m_selectedStation()) + parseInt(info.MAX_Access_num) > info.MAX_Station_num)) {
+ showAlert({
+ msg: 'multi_ssid_max_access_number_alert',
+ params: info.MAX_Station_num
+ });
+ return true;
+ }
+ }
+
+ return false;
+ };
+
+ target.setMultiSSIDSwitch = function () {
+ if (target.checkSettings("switch")) {
+ return;
+ }
+
+ var setSwitch = function () {
+ showLoading('waiting');
+ var params = {};
+ params.m_ssid_enable = target.multi_ssid_enable();
+ if (config.WIFI_SWITCH_SUPPORT) {
+ params.wifiEnabled = target.wifi_enable();
+ }
+ service.setWifiBasicMultiSSIDSwitch(params, function (result) {
+ if (result.result == "success") {
+ if (!viaWifi) {
+ addInterval(function () {
+ var info = service.getWifiBasic();
+ if (info.wifi_enable == target.wifi_enable()) {
+ successOverlay();
+ clearTimer();
+ clearValidateMsg();
+ service.refreshAPStationStatus();
+ initialize();
+ }
+ }, 1000);
+ } else {
+ setTimeout(function () {
+ successOverlay();
+ setTimeout(function () {
+ window.location.reload();
+ }, 1000);
+ clearTimer();
+ clearValidateMsg();
+ service.refreshAPStationStatus();
+ initialize();
+ }, 15000);
+ }
+ } else {
+ errorOverlay();
+ }
+ });
+ };
+
+ var info = service.getStatusInfo();
+ if (config.HAS_MULTI_SSID && target.wifi_enable() == "1") {
+ if (target.multi_ssid_enable() == "1" && config.AP_STATION_SUPPORT && target.origin_ap_station_enable == "1") {
+ if (!info.wifiStatus) {
+ showConfirm("multi_ssid_enable_confirm", function () {
+ setSwitch();
+ });
+ } else {
+ showConfirm("multi_ssid_enable_confirm2", function () {
+ setSwitch();
+ });
+ }
+ } else {
+ if (!info.wifiStatus) {
+ setSwitch();
+ } else {
+ showConfirm("wifi_disconnect_confirm2", function () {
+ setSwitch();
+ });
+ }
+ }
+ } else {
+ setSwitch();
+ }
+ };
+
+ }
+
+ function wpsIsOn() {
+ var wifi_info = service.getWpsInfo();
+ if (wifi_info.wpsFlag == '1') {
+ showAlert('wps_on_info', function() {
+ window.location.reload();
+ });
+ return true;
+ }
+ }
+
+ //处理热点列表内容,以便在表格显示
+ function fixHotspotList(list) {
+ var fixedList = [];
+ for (var ii = 0; ii < list.length; ii++) {
+ list[ii].index = ii;
+ var url_image = "";
+ if (list[ii].connectStatus != "1") {
+ if (list[ii].encryptType.toLowerCase() == "none" && list[ii].authMode.toLowerCase() == "open") {
+ url_image = "pic/wlan_signal_" + list[ii].signal + ".png";
+ } else {
+ url_image = "pic/wlan_lock_signal_" + list[ii].signal + ".png";
+ }
+ } else {
+ if (list[ii].encryptType.toLowerCase() == "none" && list[ii].authMode.toLowerCase() == "open") {
+ url_image = "pic/wlan_connected.png";
+ } else {
+ url_image = "pic/wlan_lock_connected.png";
+ }
+ }
+ list[ii].imgSignal = url_image;
+ list[ii].authMode_show = $.i18n.prop("ap_station_security_mode_" + list[ii].authMode);
+ }
+ return list;
+ }
+
+ function wifiIsClosed() {
+ var wifi_info = service.getWpsInfo();
+ if (wifi_info.radioFlag == "0") {
+ showAlert('wps_wifi_off');
+ return true;
+ }
+ }
+
+ function event_bind(aps_vm) {
+ $("#showWPAPassword").change(function () {
+ aps_vm.showWPAPasswordHandler();
+ });
+ $("#showPassword").change(function () {
+ aps_vm.showPasswordHandler();
+ });
+ }
+
+ function initialize() {
+ var aps_vm = new apStationViewMode();
+ var container = $('#container')[0];
+ ko.cleanNode(container);
+ ko.applyBindings(aps_vm, container);
+ event_bind(aps_vm);
+
+ aps_refresh(true);
+ clearTimer();
+ addInterval(function () {
+ aps_refresh(false);
+ checkAccessMode();
+ }, 1000);
+
+ $('#frmWifiSwitch').validate({
+ submitHandler: function () {
+ aps_vm.setMultiSSIDSwitch();
+ }
+ });
+
+ $("#frmAPStation").validate({
+ submitHandler: function () {
+ aps_vm.addHotspot();
+ },
+ rules: {
+ txtSSID: "ssid_ap"
+ },
+ errorPlacement: function (error, element) {
+ var id = element.attr("id");
+ if (id == "txtWPAKey" || id == "codeWPAKey") {
+ error.insertAfter("#lblshowWPAPassword");
+ } else if (id == "txtWepKey" || id == "pwdWepKey") {
+ error.insertAfter("#lblShowPassword");
+ } else {
+ error.insertAfter(element);
+ }
+ }
+ });
+
+ function aps_refresh(initPage) {
+ var info = service.getStatusInfo();
+ if (info.multi_ssid_enable != "1") {
+ aps_vm.isCableMode(checkCableMode(info.blc_wan_mode));
+ aps_vm.connectWifiProfile(info.connectWifiProfile);
+ aps_vm.connectWifiSSID(info.connectWifiSSID);
+ aps_vm.connectWifiStatus(info.connectWifiStatus);
+ aps_vm.networkType(info.networkType);
+ aps_vm.connectStatus(info.connectStatus);
+ aps_vm.computeConnectStatus();
+
+ service.getHotspotList({}, function (data) {
+ var list = fixHotspotList(data.hotspotList);
+ aps_vm.apList(list);
+ var gripList = aps_vm.apGrid.data();
+ if (list.length > 0 && list[0].profileName != gripList[0].profileName && list[0].connectStatus == "1") {
+ aps_vm.apGrid.data([]);
+ aps_vm.apGrid.data(aps_vm.apList());
+ aps_vm.apGrid.setRadioSelect(list[0].profileName);
+ }
+ renderCustomElement($("#apList"));
+ var radios = $("input[type='radio']", "#apList").each(function () {
+ for (var i = 0, len = list.length; i < len; i++) {
+ if (list[i].profileName == $(this).val()) {
+ var img = $(this).parent().parent().find("img")[0];
+ img.src = list[i].imgSignal;
+ if (initPage) {
+ if (list[i].connectStatus == "1") {
+ aps_vm.hasSelectFromUser(false);
+ aps_vm.connectButtonStatus("disable");
+ }
+ }
+ }
+ }
+ });
+ });
+ } else {
+ //to do
+ }
+ }
+
+ }
+
+ return {
+ init: initialize
+ }
+});
+
+define("wifi_guest","underscore jquery knockout set service CryptoJS".split(" "),
+
+ function (_, $, ko, config, service, CryptoJS) {
+
+ var viaWifi = false;
+ function checkAccessMode() {
+ service.getParams({
+ nv: 'user_ip_addr'
+ }, function (dataIp) {
+ service.getParams({
+ nv: 'station_list'
+ }, function (dataList) {
+ viaWifi = isWifiConnected(dataIp.user_ip_addr, dataList.station_list);
+ });
+ });
+ }
+
+ var securityModes = _.map(config.WIFI_WEP_SUPPORT ? config.AUTH_MODES_WEP : config.AUTH_MODES, function (item) {
+ return new Option(item.name, item.value);
+ });
+
+ function maxStationAccess(max) {
+ var showOption = [];
+ for (var i = 1; i <= max; i++) {
+ showOption.push(new Option(i, i));
+ }
+ return showOption;
+ }
+
+ function wifiGuestVM() {
+ var target = this;
+ var info = service.getWifiBasic();
+
+ target.hasWifiSwitch = config.WIFI_SWITCH_SUPPORT;
+ target.hasMultiSSID = config.HAS_MULTI_SSID;
+ target.showIsolated = config.SHOW_WIFI_AP_ISOLATED;
+ target.hasAPStation = config.AP_STATION_SUPPORT;
+ target.hasWlanMacfilter = config.HAS_BLACK_AND_WHITE_FILTER;
+ target.hasWifiWep = config.WIFI_WEP_SUPPORT;
+ target.hasWifiWpa3 = config.WIFI_WAP3_SUPPORT;
+ target.hasWifiWpa23 = config.WIFI_WPA2_WAP3_SUPPORT;
+
+ var advanceInfo = service.getWifiAdvance();
+ target.adBand = ko.observable(advanceInfo.wifiBand);
+ target.adMode = ko.observable(advanceInfo.mode);
+
+ target.showQRSwitch = config.WIFI_SUPPORT_QR_CODE && config.WIFI_SUPPORT_QR_SWITCH;
+ target.showQR = ko.observable(info.m_show_qrcode_flag);
+ if (config.WIFI_SUPPORT_QR_SWITCH) {
+ target.showQRCode = ko.observable(config.WIFI_SUPPORT_QR_CODE && target.showQR());
+ } else {
+ target.showQRCode = ko.observable(config.WIFI_SUPPORT_QR_CODE);
+ }
+ if(config.WIFI_SUPPORT_QR_CODE){
+ target.qrcodeSrc = './pic/qrcode_multi_ssid_wifikey.png?_=' + $.now();
+ } else {
+ target.qrcodeSrc = './pic/res_blacktrans.png';
+ }
+ target.origin_ap_station_enable = info.ap_station_enable;
+ target.wifi_enable = ko.observable(info.wifi_enable);
+ target.isShowSSIDInfoDiv = ko.observable(false);
+ if (config.WIFI_SWITCH_SUPPORT) {
+ if (info.wifi_enable == "1") {
+ target.isShowSSIDInfoDiv(true);
+ } else {
+ target.isShowSSIDInfoDiv(false);
+ }
+ } else {
+ target.isShowSSIDInfoDiv(true);
+ }
+
+ target.multi_ssid_enable = ko.observable(info.multi_ssid_enable);
+ target.origin_multi_ssid_enable = info.multi_ssid_enable;
+
+ target.maxStationNumber = ko.computed(function () {
+ return config.MAX_STATION_NUMBER;
+ });
+
+ target.modes = ko.observableArray(securityModes);
+ target.selectedMode = ko.observable(info.AuthMode);
+ target.passPhrase = ko.observable(info.passPhrase);
+ target.showPassword = ko.observable(false);
+ target.ssid = ko.observable(info.SSID);
+ target.broadcast = ko.observable(info.broadcast == '1' ? '1' : '0');
+ target.apIsolation = ko.observable(info.apIsolation == '1' ? '1' : '0');
+ target.cipher = info.cipher;
+ target.selectedStation = ko.observable(info.MAX_Access_num);
+ target.maxStations = ko.observableArray(maxStationAccess(info.MAX_Station_num));
+
+ target.m_modes = ko.observableArray(securityModes);
+ target.m_selectedMode = ko.observable(info.m_AuthMode);
+ target.m_passPhrase = ko.observable(info.m_passPhrase);
+ target.m_showPassword = ko.observable(false);
+ target.m_ssid = ko.observable(info.m_SSID);
+ target.m_broadcast = ko.observable(info.m_broadcast == '1' ? '1' : '0');
+ target.m_apIsolation = ko.observable(info.m_apIsolation == '1' ? '1' : '0');
+ target.m_cipher = info.m_cipher;
+ target.m_selectedStation = ko.observable(info.m_MAX_Access_num);
+ target.m_maxStations = ko.observableArray(maxStationAccess(info.MAX_Station_num));
+ target.m_encryptType = ko.observable(info.m_encryptType);
+ target.m_keyID = ko.observable(info.m_keyID);
+ target.m_wepPassword = ko.observable("");
+
+ //刷新界面状态值显示
+ target.clear = function (option) {
+ if (option == "switch") {
+ target.multi_ssid_enable(info.multi_ssid_enable);
+ target.wifi_enable(info.wifi_enable);
+ } else if (option == "ssid1") {
+ target.selectedMode(info.AuthMode);
+ target.passPhrase(info.passPhrase);
+ target.ssid(info.SSID);
+ target.broadcast(info.broadcast == '1' ? '1' : '0');
+ target.cipher = info.cipher;
+ target.selectedStation(info.MAX_Access_num);
+ target.apIsolation(info.apIsolation == '1' ? '1' : '0');
+ } else if (option == "ssid2") {
+ target.m_selectedMode(info.m_AuthMode);
+ target.m_passPhrase(info.m_passPhrase);
+ target.m_ssid(info.m_SSID);
+ target.m_broadcast(info.m_broadcast == '1' ? '1' : '0');
+ target.m_cipher = info.m_cipher;
+ target.m_selectedStation(info.m_MAX_Access_num);
+ target.m_apIsolation(info.m_apIsolation == '1' ? '1' : '0');
+ if (config.WIFI_WEP_SUPPORT) {
+ target.m_encryptType(info.m_encryptType);
+ target.m_keyID(info.m_keyID);
+ target.m_wepPassword(target.getWepPassword());
+ }
+ } else {
+ clearTimer();
+ clearValidateMsg();
+ initialize();
+ service.refreshAPStationStatus();
+ }
+ };
+
+ target.getWepPassword = function () {
+ return target.m_keyID() == '3' ? info.m_Key4Str1 : (target.m_keyID() == '2' ? info.m_Key3Str1 : target.m_keyID() == '1' ? info.m_Key2Str1 : info.m_Key1Str1);
+ }
+ target.m_wepPassword(target.getWepPassword());
+ //WEP加密模式下网络秘钥切换事件
+ target.profileChangeHandler = function (data, event) {
+ $("#pwdWepKey").parent().find("label[class='error']").hide();
+ target.m_wepPassword(target.getWepPassword());
+ return true;
+ };
+
+ target.saveSSID1 = function () {
+ if (target.checkSettings("ssid1")) {
+ return;
+ }
+ showConfirm('wifi_disconnect_confirm', function () {
+ target.saveSSID1Action();
+ });
+ };
+ target.saveSSID1Action = function () {
+ showLoading('waiting');
+ target.broadcast($("#broadcastCheckbox:checked").length > 0 ? '0' : '1');
+ target.apIsolation($("#apisolatedCheckbox:checked").length);
+ var params = {};
+ params.AuthMode = target.selectedMode();
+ params.passPhrase = target.passPhrase();
+ params.SSID = target.ssid();
+ params.broadcast = target.broadcast();
+ params.station = target.selectedStation();
+ params.cipher = target.selectedMode() == "WPA2PSK" ? 1 : 2;
+ if (params.AuthMode == "WPA3Personal" || params.AuthMode == "WPA2WPA3") {
+ params.cipher = 1;
+ }
+ params.NoForwarding = target.apIsolation();
+ params.show_qrcode_flag = target.showQR() == true ? 1 : 0;
+ service.setWifiBasic(params, function (result) {
+ if (result.result == "success") {
+ if (viaWifi) {
+ setTimeout(guestReloadVarWifi, 15000);
+ } else {
+ addInterval(guestReload, 1000);
+ }
+ } else {
+ errorOverlay();
+ }
+ });
+ };
+
+ target.saveSSID2 = function () {
+ if (target.checkSettings("ssid2")) {
+ return;
+ }
+ if (!config.PASSWORD_ENCODE) {
+ var pwdRegex = new RegExp('(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,32}');
+ if (!pwdRegex.test(target.m_passPhrase())) {
+ showConfirm("password_note_too_low", function () {
+ showConfirm('wifi_disconnect_confirm', function () {
+ target.saveSSID2Action();
+ return;
+ });
+ return;
+ });
+ return;
+ }
+ }
+ showConfirm('wifi_disconnect_confirm', function () {
+ target.saveSSID2Action();
+ });
+ };
+ target.saveSSID2Action = function () {
+ showLoading('waiting');
+ target.m_broadcast($("#mBroadcastCheckbox:checked").length > 0 ? '0' : '1');
+ target.m_apIsolation($("#mApIsolatedCheckbox:checked").length);
+ var ciphertext = "";
+ if (config.PASSWORD_ENCODE) {
+ ciphertext = target.m_passPhrase();
+ } else {
+ var kparam = service.getDeviceInfoLow();
+ var tkey = CryptoJS.enc.Latin1.parse(kparam.skey);
+ var tiv = CryptoJS.enc.Latin1.parse(kparam.siv);
+ ciphertext = CryptoJS.AES.encrypt(target.m_passPhrase(), tkey, {
+ iv: tiv,
+ mode: CryptoJS.mode.CBC,
+ padding: CryptoJS.pad.ZeroPadding
+ }).toString();
+ }
+ var params = {};
+ params.m_AuthMode = target.m_selectedMode();
+ params.m_passPhrase = ciphertext;
+ params.m_SSID = target.m_ssid();
+ params.m_broadcast = target.m_broadcast();
+ params.m_station = target.m_selectedStation();
+ params.m_cipher = target.m_selectedMode() == "WPA2PSK" ? 1 : 2;
+ if (params.m_AuthMode == "WPA3Personal" || params.m_AuthMode == "WPA2WPA3") {
+ params.m_cipher = 1;
+ }
+ params.m_NoForwarding = target.m_apIsolation();
+ params.m_show_qrcode_flag = target.showQR() == true ? 1 : 0;
+
+ if (config.WIFI_WEP_SUPPORT) {
+ if (params.m_AuthMode == "SHARED") {
+ params.m_encryptType = "WEP";
+ } else if (params.m_AuthMode == "WPAPSKWPA2PSK" || params.m_AuthMode == "WPA2PSK" || params.m_AuthMode == "WPAPSK" || params.m_AuthMode == "WPA3Personal" || params.m_AuthMode == "WPA2WPA3") {
+ //params.m_encryptType = target.m_encryptType_WPA();
+ } else {
+ params.m_encryptType = target.m_encryptType();
+ }
+ params.m_wep_default_key = target.m_keyID();
+ params.m_wep_key_4 = info.m_Key4Str1;
+ params.m_wep_key_3 = info.m_Key3Str1;
+ params.m_wep_key_2 = info.m_Key2Str1;
+ params.m_wep_key_1 = info.m_Key1Str1;
+ var mWEPSelect = '0';
+ if (target.m_wepPassword().length == '13' || target.m_wepPassword().length == '5') {
+ mWEPSelect = '1';
+ } else {
+ mWEPSelect = '0';
+ }
+ if (target.m_keyID() == '3') {
+ params.m_wep_key_4 = target.m_wepPassword();
+ params.m_WEP4Select = mWEPSelect;
+ } else if (target.m_keyID() == '2') {
+ params.m_wep_key_3 = target.m_wepPassword();
+ params.m_WEP3Select = mWEPSelect;
+ } else if (target.m_keyID() == '1') {
+ params.m_wep_key_2 = target.m_wepPassword();
+ params.m_WEP2Select = mWEPSelect;
+ } else {
+ params.m_wep_key_1 = target.m_wepPassword();
+ params.m_WEP1Select = mWEPSelect;
+ }
+ }
+
+ service.setWifiBasic4SSID2(params, function (result) {
+ if (result.result == "success") {
+ if (viaWifi) {
+ setTimeout(ssid2ReloadVarWifi, 15000);
+ } else {
+ addInterval(ssid2Reload, 1000);
+ }
+ } else {
+ errorOverlay();
+ }
+ });
+ };
+
+ function guestReloadVarWifi() {
+ successOverlay();
+ setTimeout(function () {
+ window.location.reload();
+ }, 1000);
+ target.clear();
+ }
+ function guestReload() {
+ var info = getWifiMain();
+ if (info.wifi_enable == "1") {
+ successOverlay();
+ target.clear();
+ }
+ }
+ function ssid2ReloadVarWifi() {
+ successOverlay();
+ setTimeout(function () {
+ window.location.reload();
+ }, 1000);
+ target.clear();
+ }
+ function ssid2Reload() {
+ var info = getWifiMain();
+ if (info.wifi_enable == "1") {
+ successOverlay();
+ target.clear();
+ }
+ }
+
+ target.checkSettings = function (ssid) {
+ var status = getWpsState();
+
+ if (config.HAS_MULTI_SSID) {
+ if (ssid == "ssid1" || ssid == "ssid2") {
+ if (ssid == "ssid2") {
+ var accessDevice = service.getStatusInfo().ssid2AttachedNum;
+ if (parseInt(target.m_selectedStation()) < accessDevice) {
+ showAlert('Extend_accessDevice');
+ return true;
+ }
+ } else {
+ var accessDevice = service.getStatusInfo().ssid1AttachedNum;
+ if (parseInt(target.selectedStation()) < accessDevice) {
+ showAlert('Extend_accessDevice');
+ return true;
+ }
+ }
+ }
+ }
+
+ if (status.wpsFlag == '1') {
+ showAlert('wps_on_info', function() {
+ window.location.reload();
+ });
+ return true;
+ }
+ if (config.HAS_MULTI_SSID && info.multi_ssid_enable == "1") {
+ if ((ssid == "ssid1" && parseInt(target.selectedStation()) + parseInt(info.m_MAX_Access_num) > info.MAX_Station_num)
+ || (ssid == "ssid2" && parseInt(target.m_selectedStation()) + parseInt(info.MAX_Access_num) > info.MAX_Station_num)) {
+ showAlert({
+ msg: 'multi_ssid_max_access_number_alert',
+ params: info.MAX_Station_num
+ });
+ return true;
+ }
+ }
+
+ return false;
+ };
+
+ target.setMultiSSIDSwitch = function () {
+ if (target.checkSettings("switch")) {
+ return;
+ }
+
+ var setSwitch = function () {
+ showLoading('waiting');
+ var params = {};
+ params.m_ssid_enable = target.multi_ssid_enable();
+ if (config.WIFI_SWITCH_SUPPORT) {
+ params.wifiEnabled = target.wifi_enable();
+ }
+ service.setWifiBasicMultiSSIDSwitch(params, function (result) {
+ if (result.result == "success") {
+ if (viaWifi) {
+ setTimeout(multiReloadViaWifi, 15000);
+ } else {
+ addInterval(multiReload, 1000);
+ }
+ } else {
+ errorOverlay();
+ }
+ });
+ };
+ function multiReloadViaWifi() {
+ successOverlay();
+ setTimeout(function () {
+ window.location.reload();
+ }, 1000);
+ target.clear();
+ }
+ function multiReload() {
+ var info = getWifiMain();
+ if (info.wifi_enable == target.wifi_enable()) {
+ successOverlay();
+ target.clear();
+ }
+ }
+ var info = service.getStatusInfo();
+ if (config.HAS_MULTI_SSID && target.wifi_enable() == "1") {
+ if (config.AP_STATION_SUPPORT && target.multi_ssid_enable() == "1" && target.origin_ap_station_enable == "1") {
+ if (!info.wifiStatus) {
+ showConfirm("multi_ssid_enable_confirm", function () {
+ setSwitch();
+ });
+ } else {
+ showConfirm("multi_ssid_enable_confirm2", function () {
+ setSwitch();
+ });
+ }
+ } else {
+ if (!info.wifiStatus) {
+ setSwitch();
+ } else {
+ showConfirm("wifi_disconnect_confirm2", function () {
+ setSwitch();
+ });
+ }
+ }
+ } else {
+ setSwitch();
+ }
+ };
+ target.showQRHandler = function () {
+ var checkbox = $("#showQR:checked");
+ if (checkbox && checkbox.length == 0) {
+ target.showQR(true);
+ } else {
+ target.showQR(false);
+ }
+ target.showQRCode(config.WIFI_SUPPORT_QR_CODE && target.showQR());
+ };
+
+ target.showPasswordHandler = guestShowPassword;
+
+ target.m_showPasswordHandler = m_guestShowPassword;
+
+ function guestShowPassword() {
+ $("#passShow").parent().find(".error").hide();
+ var checkbox = $("#showPassword:checked");
+ if (checkbox && checkbox.length == 0) {
+ target.showPassword(true);
+ } else {
+ target.showPassword(false);
+ }
+ }
+ function m_guestShowPassword() {
+ $("#m_passShow").parent().find(".error").hide();
+ $("#m_pwdWepKey").parent().find(".error").hide();
+ var checkbox = $("#m_showPassword:checked");
+ if (checkbox && checkbox.length == 0) {
+ target.m_showPassword(true);
+ } else {
+ target.m_showPassword(false);
+ }
+ }
+
+ }
+
+ function getWifiMain() {
+ return service.getWifiBasic();
+ }
+
+ function initialize() {
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ var vm = new wifiGuestVM();
+ ko.applyBindings(vm, container[0]);
+ addTimeout(function () {
+ checkAccessMode();
+ }, 600);
+
+ function checkWifiStatus() {
+ var info = service.getAPStationBasic();
+ if (info.ap_station_enable != "1") {
+ $('#frmMultiSSID :input').each(function () {
+ $(this).attr("disabled", false);
+ });
+ } else {
+ $('#frmMultiSSID :input').each(function () {
+ $(this).attr("disabled", true);
+ });
+ }
+ }
+
+ function checkWifiStatusAccordingToWDS() {
+ var info = service.getWdsInfo();
+ if (info.currentMode == "0") {
+ $('#frmWifiSwitch :input').each(function () {
+ $(this).attr("disabled", false);
+ });
+ $('#frmSSID2 :input').each(function () {
+ $(this).attr("disabled", false);
+ });
+ $('#frmSSID1 :input').each(function () {
+ $(this).attr("disabled", false);
+ });
+ } else {
+ $('#frmWifiSwitch :input').each(function () {
+ $(this).attr("disabled", true);
+ });
+ $('#frmSSID2 :input').each(function () {
+ $(this).attr("disabled", true);
+ });
+ $('#frmSSID1 :input').each(function () {
+ $(this).attr("disabled", true);
+ });
+ }
+ }
+
+ if (config.WDS_SUPPORT) {
+ checkWifiStatusAccordingToWDS();
+ } else if (config.AP_STATION_SUPPORT) {
+ checkWifiStatus();
+ }
+
+ $('#frmMultiSSID').validate({
+ submitHandler: function () {
+ vm.setMultiSSIDSwitch();
+ }
+ });
+ $('#frmWifiSwitch').validate({
+ submitHandler: function () {
+ vm.setMultiSSIDSwitch();
+ }
+ });
+ $('#frmSSID2').validate({
+ submitHandler: function () {
+ vm.saveSSID2();
+ },
+ rules: {
+ m_ssid: 'ssid',
+ m_pwdWepKey: {
+ wifi_wep_password_check: true,
+ wifi_password_check: true
+ },
+ m_txtWepKey: {
+ wifi_wep_password_check: true,
+ wifi_password_check: true
+ },
+ m_pass: 'wifi_password_check',
+ m_passShow: 'wifi_password_check'
+ },
+ errorPlacement: function (error, element) {
+ var id = element.attr("id");
+ if (id == "m_passShow" || id == "m_pass") {
+ error.insertAfter("#m_lblShowPassword");
+ } else if (id == "m_txtWepKey" || id == "m_pwdWepKey") {
+ error.insertAfter("#m_lblShowWepPassword");
+ } else {
+ error.insertAfter(element);
+ }
+ }
+ });
+ $('#frmSSID1').validate({
+ submitHandler: function () {
+ vm.saveSSID1();
+ },
+ rules: {
+ pass: 'wifi_password_check',
+ ssid: 'ssid',
+ passShow: 'wifi_password_check'
+ },
+ errorPlacement: function (error, element) {
+ var id = element.attr("id");
+ if (id == "passShow" || id == "pass") {
+ error.insertAfter("#lblShowPassword");
+ } else {
+ error.insertAfter(element);
+ }
+ }
+ });
+
+ }
+
+ function getWpsState() {
+ return service.getWpsInfo();
+ }
+
+ return {
+ init: initialize
+ };
+});
+
+define("wifi_mac_filter","underscore jquery knockout set service".split(" "),
+ function (_, $, ko, config, service) {
+
+ var viaWifi = false;
+ function checkAccessMode() {
+ service.getParams({
+ nv: 'user_ip_addr'
+ }, function (dataIp) {
+ service.getParams({
+ nv: 'station_list'
+ }, function (dataList) {
+ viaWifi = isWifiConnected(dataIp.user_ip_addr, dataList.station_list);
+ });
+ });
+ }
+
+ function macFilterViewModel() {
+ var target = this;
+ target.hasAPStation = config.AP_STATION_SUPPORT;
+ target.hasWifiSwitch = config.WIFI_SWITCH_SUPPORT;
+ target.hasMultiSSID = config.HAS_MULTI_SSID;
+ target.showIsolated = config.SHOW_WIFI_AP_ISOLATED;
+
+ var info = service.getMacFilterInfo();
+ var wifiBaseInfo = service.getWifiBasic();
+ target.multi_ssid_enable = ko.observable(wifiBaseInfo.multi_ssid_enable);
+ target.origin_ap_station_enable = wifiBaseInfo.ap_station_enable;
+ target.wifi_enable = ko.observable(wifiBaseInfo.wifi_enable);
+
+ target.isShowSSIDInfoDiv = ko.observable(false);
+ if (config.WIFI_SWITCH_SUPPORT) {
+ if (wifiBaseInfo.wifi_enable == "1") {
+ target.isShowSSIDInfoDiv(true);
+ } else {
+ target.isShowSSIDInfoDiv(false);
+ }
+ } else {
+ target.isShowSSIDInfoDiv(true);
+ }
+
+ target.selectedAction = ko.observable(info.ACL_mode);
+ target.mac1 = ko.observable("");
+ target.mac2 = ko.observable("");
+ target.mac3 = ko.observable("");
+ target.mac4 = ko.observable("");
+ target.mac5 = ko.observable("");
+ target.mac6 = ko.observable("");
+ target.mac7 = ko.observable("");
+ target.mac8 = ko.observable("");
+ target.mac9 = ko.observable("");
+ target.mac10 = ko.observable("");
+ if (info.ACL_mode == "1") {
+ macInfoWhite = info.wifi_mac_white_list.split(";");
+ target.mac1 = ko.observable(macInfoWhite[0]);
+ target.mac2 = ko.observable(macInfoWhite[1]);
+ target.mac3 = ko.observable(macInfoWhite[2]);
+ target.mac4 = ko.observable(macInfoWhite[3]);
+ target.mac5 = ko.observable(macInfoWhite[4]);
+ target.mac6 = ko.observable(macInfoWhite[5]);
+ target.mac7 = ko.observable(macInfoWhite[6]);
+ target.mac8 = ko.observable(macInfoWhite[7]);
+ target.mac9 = ko.observable(macInfoWhite[8]);
+ target.mac10 = ko.observable(macInfoWhite[9]);
+ } else if (info.ACL_mode == "2") {
+ macInfoBlack = info.wifi_mac_black_list.split(";");
+ target.mac1 = ko.observable(macInfoBlack[0]);
+ target.mac2 = ko.observable(macInfoBlack[1]);
+ target.mac3 = ko.observable(macInfoBlack[2]);
+ target.mac4 = ko.observable(macInfoBlack[3]);
+ target.mac5 = ko.observable(macInfoBlack[4]);
+ target.mac6 = ko.observable(macInfoBlack[5]);
+ target.mac7 = ko.observable(macInfoBlack[6]);
+ target.mac8 = ko.observable(macInfoBlack[7]);
+ target.mac9 = ko.observable(macInfoBlack[8]);
+ target.mac10 = ko.observable(macInfoBlack[9]);
+ }
+
+ target.save = filter_save;
+ //切换MAC过滤规则事件
+ target.ChangeHandler = function () {
+ $("#mac_filter_form").find(".error").hide();
+ $("#mac_filter_form").find("input[type=text]").show();
+ var info = service.getMacFilterInfo();
+ if (target.selectedAction() == "1") {
+ macInfoWhite = info.wifi_mac_white_list.split(";");
+ target.mac1(macInfoWhite[0]);
+ target.mac2(macInfoWhite[1]);
+ target.mac3(macInfoWhite[2]);
+ target.mac4(macInfoWhite[3]);
+ target.mac5(macInfoWhite[4]);
+ target.mac6(macInfoWhite[5]);
+ target.mac7(macInfoWhite[6]);
+ target.mac8(macInfoWhite[7]);
+ target.mac9(macInfoWhite[8]);
+ target.mac10(macInfoWhite[9]);
+ } else if (target.selectedAction() == "2") {
+ macInfoBlack = info.wifi_mac_black_list.split(";");
+ target.mac1(macInfoBlack[0]);
+ target.mac2(macInfoBlack[1]);
+ target.mac3(macInfoBlack[2]);
+ target.mac4(macInfoBlack[3]);
+ target.mac5(macInfoBlack[4]);
+ target.mac6(macInfoBlack[5]);
+ target.mac7(macInfoBlack[6]);
+ target.mac8(macInfoBlack[7]);
+ target.mac9(macInfoBlack[8]);
+ target.mac10(macInfoBlack[9]);
+ } else {
+ target.mac1("");
+ target.mac2("");
+ target.mac3("");
+ target.mac4("");
+ target.mac5("");
+ target.mac6("");
+ target.mac7("");
+ target.mac8("");
+ target.mac9("");
+ target.mac10("");
+ }
+ }
+ //检查WPS状态
+ target.checkSettings = function (ssid) {
+ var wifi_status = service.getWpsInfo();
+ if (wifi_status.wpsFlag == '1') {
+ showAlert('wps_on_info', function() {
+ window.location.reload();
+ });
+ return true;
+ }
+ return false;
+ };
+
+ //设置多SSID开关
+ target.setMultiSSIDSwitch = function () {
+ if (target.checkSettings("switch")) {
+ return;
+ }
+
+ var setSwitch = setFilterSwitch;
+
+ var info = service.getStatusInfo();
+ if (config.HAS_MULTI_SSID && target.wifi_enable() == "1") {
+ if (target.multi_ssid_enable() == "1" && config.AP_STATION_SUPPORT && target.origin_ap_station_enable == "1") {
+ if (!info.wifiStatus) {
+ showConfirm("multi_ssid_enable_confirm", function () {
+ setSwitch();
+ });
+ } else {
+ showConfirm("multi_ssid_enable_confirm2", function () {
+ setSwitch();
+ });
+ }
+ } else {
+ if (!info.wifiStatus) {
+ setSwitch();
+ } else {
+ showConfirm("wifi_disconnect_confirm2", function () {
+ setSwitch();
+ });
+ }
+ }
+ } else {
+ setSwitch();
+ }
+
+ function setFilterSwitch() {
+ showLoading('waiting');
+ var filter_param = {};
+ filter_param.m_ssid_enable = target.multi_ssid_enable();
+ if (config.WIFI_SWITCH_SUPPORT) {
+ filter_param.wifiEnabled = target.wifi_enable();
+ }
+ service.setWifiBasicMultiSSIDSwitch(filter_param, function (result) {
+ if (result.result == "success") {
+ if (!viaWifi) {
+ addInterval(function () {
+ var info = service.getWifiBasic();
+ service.refreshAPStationStatus();
+ if (info.wifi_enable == target.wifi_enable()) {
+ successOverlay();
+ clearTimer();
+ clearValidateMsg();
+ service.refreshAPStationStatus();
+ initialize();
+ }
+ }, 1000);
+ } else {
+ setTimeout(function () {
+ successOverlay();
+ setTimeout(function () {
+ window.location.reload();
+ }, 1000);
+ clearTimer();
+ clearValidateMsg();
+ service.refreshAPStationStatus();
+ initialize();
+ }, 15000);
+ }
+ } else {
+ errorOverlay();
+ }
+ });
+ }
+ };
+
+ function filter_save() {
+ var wifi_status = service.getWpsInfo();
+ if (wifi_status.wpsFlag == '1') {
+ showAlert('wps_on_info', function() {
+ window.location.reload();
+ });
+ return true;
+ }
+
+ if (target.mac1() == undefined || target.mac1().indexOf(" ") >= 0) {
+ target.mac1("")
+ }
+ if (target.mac2() == undefined || target.mac2().indexOf(" ") >= 0) {
+ target.mac2("")
+ }
+ if (target.mac3() == undefined || target.mac3().indexOf(" ") >= 0) {
+ target.mac3("")
+ }
+ if (target.mac4() == undefined || target.mac4().indexOf(" ") >= 0) {
+ target.mac4("")
+ }
+ if (target.mac5() == undefined || target.mac5().indexOf(" ") >= 0) {
+ target.mac5("")
+ }
+ if (target.mac6() == undefined || target.mac6().indexOf(" ") >= 0) {
+ target.mac6("")
+ }
+ if (target.mac7() == undefined || target.mac7().indexOf(" ") >= 0) {
+ target.mac7("")
+ }
+ if (target.mac8() == undefined || target.mac8().indexOf(" ") >= 0) {
+ target.mac8("")
+ }
+ if (target.mac9() == undefined || target.mac9().indexOf(" ") >= 0) {
+ target.mac9("")
+ }
+ if (target.mac10() == undefined || target.mac10().indexOf(" ") >= 0) {
+ target.mac10("")
+ }
+
+ var mac_list = new Array(target.mac1(), target.mac2(), target.mac3(), target.mac4(), target.mac5(),
+ target.mac6(), target.mac7(), target.mac8(), target.mac9(), target.mac10());
+ if (target.selectedAction() == "2" && info.client_mac_address != "" && $.inArray(info.client_mac_address, mac_list) != -1) {
+ showAlert('black_yourself_tip');
+ return false;
+ }
+ var list_sort = mac_list.sort(); //排序
+ for (var i = 0; i < list_sort.length - 1; i++) {
+ if (list_sort[i] != "" && list_sort[i] == list_sort[i + 1]) {
+ showAlert('mac_repeat_tip');
+ return false;
+ }
+ }
+ var string_maclist = "";
+ for (var i = 0; i < 10; i++) {
+ if (string_maclist == "") {
+ string_maclist = mac_list[i];
+ } else {
+ if (mac_list[i]) {
+ string_maclist = string_maclist + ";" + mac_list[i];
+ }
+ }
+ }
+ var filter_param = {};
+ filter_param.ACL_mode = target.selectedAction();
+ if (target.selectedAction() == "2") {
+ filter_param.wifi_mac_black_list = string_maclist;
+ } else if (target.selectedAction() == "1") {
+ filter_param.wifi_mac_white_list = string_maclist;
+ }
+ showLoading('waiting');
+ service.setMacFilter(filter_param, function (result) {
+ if (result.result == "success") {
+ successOverlay();
+ } else {
+ errorOverlay();
+ }
+ });
+ }
+ }
+
+ function bindContainer(filter_vm) {
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ ko.applyBindings(filter_vm, container[0]);
+
+ $('#frmWifiSwitch').validate({
+ submitHandler: function () {
+ filter_vm.setMultiSSIDSwitch();
+ }
+ });
+ $('#mac_filter_form').validate({
+ submitHandler: function () {
+ filter_vm.save();
+ },
+ rules: {
+ mac_1: 'mac_check',
+ mac_2: 'mac_check',
+ mac_3: 'mac_check',
+ mac_4: 'mac_check',
+ mac_5: 'mac_check',
+ mac_6: 'mac_check',
+ mac_7: 'mac_check',
+ mac_8: 'mac_check',
+ mac_9: 'mac_check',
+ mac_10: 'mac_check'
+ }
+ });
+ }
+ function initialize() {
+ var filter_vm = new macFilterViewModel();
+ bindContainer(filter_vm);
+
+ addTimeout(function () {
+ checkAccessMode();
+ }, 600);
+ }
+
+ return {
+ init: initialize
+ };
+});
+
+define("wifi_main","underscore jquery knockout set service CryptoJS".split(" "),
+ function (_, $, ko, config, service, CryptoJS) {
+
+ var securityModes = _.map(config.WIFI_WEP_SUPPORT ? config.AUTH_MODES_WEP : config.AUTH_MODES, function (item) {
+ return new Option(item.name, item.value);
+ });
+
+ function maxStationAccess(max) {
+ var showOption = [];
+ for (var i = 1; i <= max; i++) {
+ showOption.push(new Option(i, i));
+ }
+ return showOption;
+ }
+ //是否通过wifi接入
+ var viaWifi = false;
+ function checkAccessMode() {
+ service.getParams({
+ nv: 'user_ip_addr'
+ }, function (dataIp) {
+ service.getParams({
+ nv: 'station_list'
+ }, function (dataList) {
+ viaWifi = isWifiConnected(dataIp.user_ip_addr, dataList.station_list);
+ });
+ });
+ }
+
+ function WifiMainVM() {
+ var target = this;
+ var info = getWifiMain();
+
+ target.hasWifiSwitch = config.WIFI_SWITCH_SUPPORT;
+ target.hasMultiSSID = config.HAS_MULTI_SSID;
+ target.showIsolated = config.SHOW_WIFI_AP_ISOLATED;
+ target.hasAPStation = config.AP_STATION_SUPPORT;
+ target.hasWlanMacfilter = config.HAS_BLACK_AND_WHITE_FILTER;
+ target.hasWifiWep = config.WIFI_WEP_SUPPORT;
+ target.hasWifiWpa3 = config.WIFI_WAP3_SUPPORT;
+ target.hasWifiWpa23 = config.WIFI_WPA2_WAP3_SUPPORT;
+
+ var advanceInfo = service.getWifiAdvance();
+ target.adBand = ko.observable(advanceInfo.wifiBand);
+ target.adMode = ko.observable(advanceInfo.mode);
+ target.showQRSwitch = config.WIFI_SUPPORT_QR_CODE && config.WIFI_SUPPORT_QR_SWITCH;
+ target.showQR = ko.observable(info.show_qrcode_flag);
+ if (config.WIFI_SUPPORT_QR_SWITCH) {
+ target.showQRCode = ko.observable(config.WIFI_SUPPORT_QR_CODE && target.showQR());
+ } else {
+ target.showQRCode = ko.observable(config.WIFI_SUPPORT_QR_CODE);
+ }
+ if(config.WIFI_SUPPORT_QR_CODE){
+ target.qrcodeSrc = './pic/qrcode_ssid_wifikey.png?_=' + $.now();
+ } else {
+ target.qrcodeSrc = './pic/res_blacktrans.png';
+ }
+ target.origin_ap_station_enable = info.ap_station_enable;
+ target.wifi_enable = ko.observable(info.wifi_enable);
+
+ target.isShowSSIDInfoDiv = ko.observable(false);
+ if (config.WIFI_SWITCH_SUPPORT) {
+ if (info.wifi_enable == "1") {
+ target.isShowSSIDInfoDiv(true);
+ } else {
+ target.isShowSSIDInfoDiv(false);
+ }
+ } else {
+ target.isShowSSIDInfoDiv(true);
+ }
+
+ target.multi_ssid_enable = ko.observable(info.multi_ssid_enable);
+ target.origin_multi_ssid_enable = info.multi_ssid_enable;
+
+ target.maxStationNumber = ko.computed(function () {
+ return config.MAX_STATION_NUMBER;
+ });
+
+ target.modes = ko.observableArray(securityModes);
+ target.selectedMode = ko.observable(info.AuthMode);
+ target.passPhrase = ko.observable(info.passPhrase);
+ target.showPassword = ko.observable(false);
+ target.ssid = ko.observable(info.SSID);
+ target.broadcast = ko.observable(info.broadcast == '1' ? '1' : '0');
+ target.apIsolation = ko.observable(info.apIsolation == '1' ? '1' : '0');
+ target.cipher = info.cipher;
+ target.selectedStation = ko.observable(info.MAX_Access_num);
+ target.maxStations = ko.observableArray(maxStationAccess(info.MAX_Station_num));
+ target.encryptType = ko.observable(info.encryptType);
+ target.keyID = ko.observable(info.keyID);
+ target.wepPassword = ko.observable("");
+
+ target.m_modes = ko.observableArray(securityModes);
+ target.m_selectedMode = ko.observable(info.m_AuthMode);
+ target.m_passPhrase = ko.observable(info.m_passPhrase);
+ target.m_showPassword = ko.observable(false);
+ target.m_ssid = ko.observable(info.m_SSID);
+ target.m_broadcast = ko.observable(info.m_broadcast == '1' ? '1' : '0');
+ target.m_apIsolation = ko.observable(info.m_apIsolation == '1' ? '1' : '0');
+ target.m_cipher = info.m_cipher;
+ target.m_selectedStation = ko.observable(info.m_MAX_Access_num);
+ target.m_maxStations = ko.observableArray(maxStationAccess(info.MAX_Station_num));
+
+ target.getWepPassword = function () {
+ return target.keyID() == '3' ? info.Key4Str1 : (target.keyID() == '2' ? info.Key3Str1 : target.keyID() == '1' ? info.Key2Str1 : info.Key1Str1);
+ }
+ target.wepPassword(target.getWepPassword());
+ target.profileChangeHandler = function (data, event) {
+ $("#pwdWepKey").parent().find("label[class='error']").hide();
+ target.wepPassword(target.getWepPassword());
+ return true;
+ };
+
+ target.clear = function (option) {
+ if (option == "switch") {
+ target.multi_ssid_enable(info.multi_ssid_enable);
+ target.wifi_enable(info.wifi_enable);
+ } else if (option == "ssid2") {
+ target.m_selectedMode(info.m_AuthMode);
+ target.m_passPhrase(info.m_passPhrase);
+ target.m_ssid(info.m_SSID);
+ target.m_broadcast(info.m_broadcast == '1' ? '1' : '0');
+ target.m_cipher = info.m_cipher;
+ target.m_selectedStation(info.m_MAX_Access_num);
+ target.m_apIsolation(info.m_apIsolation == '1' ? '1' : '0');
+ } else if (option == "ssid1") {
+ target.selectedMode(info.AuthMode);
+ target.passPhrase(info.passPhrase);
+ target.ssid(info.SSID);
+ target.broadcast(info.broadcast == '1' ? '1' : '0');
+ target.cipher = info.cipher;
+ target.selectedStation(info.MAX_Access_num);
+ target.apIsolation(info.apIsolation == '1' ? '1' : '0');
+ if (config.WIFI_WEP_SUPPORT) {
+ target.encryptType(info.encryptType);
+ target.keyID(info.keyID);
+ target.wepPassword(target.getWepPassword());
+ }
+ } else {
+ clearTimer();
+ clearValidateMsg();
+ initialize();
+ }
+ };
+
+ target.saveSSID1 = function () {
+ if (target.checkSettings("ssid1")) {
+ return;
+ }
+ if (!config.PASSWORD_ENCODE) {
+ var pwdRegex = new RegExp('(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,32}');
+ if (!pwdRegex.test(target.passPhrase())) {
+ showConfirm("password_note_too_low", function () {
+ showConfirm('wifi_disconnect_confirm', function () {
+ target.saveSSID1Action();
+ return;
+ });
+ return;
+ });
+ return;
+ }
+ }
+ showConfirm('wifi_disconnect_confirm', function () {
+ target.saveSSID1Action();
+ });
+ };
+
+ target.saveSSID1Action = getSSID1Action;
+
+ target.saveSSID2 = function () {
+ if (target.checkSettings("ssid2")) {
+ return;
+ }
+ showConfirm('wifi_disconnect_confirm', function () {
+ target.saveSSID2Action();
+ });
+ };
+
+ target.saveSSID2Action = getSSID2Action;
+
+ //检测wps\最大接入数
+ target.checkSettings = function (ssid) {
+ var status = getWpsState();
+ if (ssid == "ssid1" || ssid == "ssid2") {
+ if (ssid == "ssid2") {
+ var accessDevice = service.getStatusInfo().ssid2AttachedNum;
+ if (parseInt(target.m_selectedStation()) < accessDevice) {
+ showAlert('Extend_accessDevice');
+ return true;
+ }
+ } else {
+ var accessDevice = service.getStatusInfo().ssid1AttachedNum;
+ if (parseInt(target.selectedStation()) < accessDevice) {
+ showAlert('Extend_accessDevice');
+ return true;
+ }
+ }
+ }
+
+ if (status.wpsFlag == '1') {
+ showAlert('wps_on_info', function() {
+ window.location.reload();
+ });
+ return true;
+ }
+
+ if (info.multi_ssid_enable == "1" && config.HAS_MULTI_SSID) {
+ if ((ssid == "ssid2" && parseInt(target.m_selectedStation()) + parseInt(info.MAX_Access_num) > info.MAX_Station_num)
+ || (ssid == "ssid1" && parseInt(target.selectedStation()) + parseInt(info.m_MAX_Access_num) > info.MAX_Station_num)) {
+ showAlert({
+ msg: 'multi_ssid_max_access_number_alert',
+ params: info.MAX_Station_num
+ });
+ return true;
+ }
+ }
+
+ return false;
+ };
+
+ target.setMultiSSIDSwitch = function () {
+ if (target.checkSettings("switch")) {
+ return;
+ }
+
+ var setSwitch = function () {
+ showLoading('waiting');
+ var params = {};
+ params.m_ssid_enable = target.multi_ssid_enable();
+ if (config.WIFI_SWITCH_SUPPORT) {
+ params.wifiEnabled = target.wifi_enable();
+ }
+ service.setWifiBasicMultiSSIDSwitch(params, function (result) {
+ if (result.result == "success") {
+ if (viaWifi) {
+ setTimeout(hasApReloadVarWifi, 15000);
+ } else {
+ addInterval(hasApReload, 1000);
+ }
+ } else {
+ errorOverlay();
+ }
+ });
+ };
+
+ function hasApReloadVarWifi() {
+ successOverlay();
+ setTimeout(function () {
+ window.location.reload();
+ }, 1000);
+ service.refreshAPStationStatus();
+ target.clear();
+ }
+ function hasApReload() {
+ var info = getWifiMain();
+ service.refreshAPStationStatus();
+ if (info.wifi_enable == target.wifi_enable()) {
+ successOverlay();
+ target.clear();
+ }
+ }
+
+ var info = service.getStatusInfo();
+ if (config.HAS_MULTI_SSID && target.wifi_enable() == "1") {
+ if (target.multi_ssid_enable() == "1" && config.AP_STATION_SUPPORT && target.origin_ap_station_enable == "1") {
+ if (!info.wifiStatus) {
+ showConfirm("multi_ssid_enable_confirm", function () {
+ setSwitch();
+ });
+ } else {
+ showConfirm("multi_ssid_enable_confirm2", function () {
+ setSwitch();
+ });
+ }
+ } else {
+ if (!info.wifiStatus) {
+ setSwitch();
+ } else {
+ showConfirm("wifi_disconnect_confirm2", function () {
+ setSwitch();
+ });
+ }
+ }
+ } else {
+ setSwitch();
+ }
+ };
+
+ //二维码显示事件
+ target.showQRHandler = function () {
+ var checkbox = $("#showQR:checked");
+ if (checkbox && checkbox.length == 0) {
+ target.showQR(true);
+ } else {
+ target.showQR(false);
+ }
+ target.showQRCode(config.WIFI_SUPPORT_QR_CODE && target.showQR());
+ };
+
+ //SSID2
+ target.m_showPasswordHandler = function () {
+ $("#m_passShow").parent().find(".error").hide();
+ var checkbox = $("#m_showPassword:checked");
+ if (checkbox && checkbox.length == 0) {
+ target.m_showPassword(true);
+ } else {
+ target.m_showPassword(false);
+ }
+ };
+ target.showPasswordHandler = function () {
+ $("#codeWPAKey").parent().find(".error").hide();
+ $("#pwdWepKey").parent().find(".error").hide();
+ var checkbox = $("#showPassword:checked");
+ if (checkbox && checkbox.length == 0) {
+ target.showPassword(true);
+ } else {
+ target.showPassword(false);
+ }
+ };
+
+ function getSSID2Action() {
+ showLoading('waiting');
+ var params = {};
+ params.m_AuthMode = target.m_selectedMode();
+ params.m_passPhrase = target.m_passPhrase();
+ params.m_SSID = target.m_ssid();
+ params.m_broadcast = target.m_broadcast();
+ params.m_station = target.m_selectedStation();
+ params.m_cipher = target.m_selectedMode() == "WPA2PSK" ? 1 : 2;
+ if (params.m_AuthMode == "WPA3Personal" || params.m_AuthMode == "WPA2WPA3") {
+ params.m_cipher = 1;
+ }
+ params.m_NoForwarding = target.m_apIsolation();
+ params.m_show_qrcode_flag = target.showQR() == true ? 1 : 0;
+ service.setWifiBasic4SSID2(params, function (result) {
+ if (result.result == "success") {
+ if (viaWifi) {
+ setTimeout(ssid2ReloadVarWifi, 15000);
+ } else {
+ addInterval(ssid2Reload, 1000);
+ }
+ } else {
+ errorOverlay();
+ }
+ });
+ }
+ function ssid2ReloadVarWifi() {
+ successOverlay();
+ setTimeout(function () {
+ window.location.reload();
+ }, 1000);
+ target.clear();
+ }
+ function ssid2Reload() {
+ var info = getWifiMain();
+ if (info.wifi_enable == "1") {
+ successOverlay();
+ target.clear();
+ }
+ }
+
+ function getSSID1Action() {
+
+ showLoading('waiting');
+ target.broadcast($("#broadcastCheckbox:checked").length > 0 ? '0' : '1');
+ target.apIsolation($("#apisolatedCheckbox:checked").length);
+ var ciphertext = "";
+ if (config.PASSWORD_ENCODE) {
+ ciphertext = target.passPhrase();
+ } else {
+ var kparam = service.getDeviceInfoLow();
+ var tkey = CryptoJS.enc.Latin1.parse(kparam.skey);
+ var tiv = CryptoJS.enc.Latin1.parse(kparam.siv);
+ ciphertext = CryptoJS.AES.encrypt(target.passPhrase(), tkey, {
+ iv: tiv,
+ mode: CryptoJS.mode.CBC,
+ padding: CryptoJS.pad.ZeroPadding
+ }).toString();
+ }
+ var params = {};
+ params.AuthMode = target.selectedMode();
+ params.passPhrase = ciphertext;
+ params.SSID = target.ssid();
+ params.broadcast = target.broadcast();
+ params.station = target.selectedStation();
+ params.cipher = target.selectedMode() == "WPA2PSK" ? 1 : 2;
+ if (params.AuthMode == "WPA3Personal" || params.AuthMode == "WPA2WPA3") {
+ params.cipher = 1;
+ }
+ params.NoForwarding = target.apIsolation();
+ params.show_qrcode_flag = target.showQR() == true ? 1 : 0;
+ if (config.WIFI_WEP_SUPPORT) {
+ if (params.AuthMode == "WPAPSK" || params.AuthMode == "WPA2PSK" || params.AuthMode == "WPAPSKWPA2PSK" || params.AuthMode == "WPA3Personal" || params.AuthMode == "WPA2WPA3") {}
+ else if (params.AuthMode == "SHARED") {
+ params.encryptType = "WEP";
+ } else {
+ params.encryptType = target.encryptType();
+ }
+ params.wep_default_key = target.keyID();
+ params.wep_key_1 = info.Key1Str1;
+ params.wep_key_2 = info.Key2Str1;
+ params.wep_key_3 = info.Key3Str1;
+ params.wep_key_4 = info.Key4Str1;
+ var WEPSelect = '0';
+ if (target.wepPassword().length == '5' || target.wepPassword().length == '13') {
+ WEPSelect = '1';
+ } else {
+ WEPSelect = '0';
+ }
+ if (target.keyID() == '3') {
+ params.wep_key_4 = target.wepPassword();
+ params.WEP4Select = WEPSelect;
+ } else if (target.keyID() == '2') {
+ params.wep_key_3 = target.wepPassword();
+ params.WEP3Select = WEPSelect;
+ } else if (target.keyID() == '1') {
+ params.wep_key_2 = target.wepPassword();
+ params.WEP2Select = WEPSelect;
+ } else {
+ params.wep_key_1 = target.wepPassword();
+ params.WEP1Select = WEPSelect;
+ }
+ }
+
+ service.setWifiBasic(params, function (result) {
+ if (result.result == "success") {
+ if (viaWifi) {
+ setTimeout(ssid1ReloadVarWifi, 15000);
+ } else {
+ addInterval(ssid1Reload, 1000);
+ }
+ } else {
+ errorOverlay();
+ }
+ });
+ }
+ function ssid1ReloadVarWifi() {
+ successOverlay();
+ setTimeout(function () {
+ window.location.reload();
+ }, 1000);
+ target.clear();
+ }
+ function ssid1Reload() {
+ var info = getWifiMain();
+ if (info.wifi_enable == "1") {
+ successOverlay();
+ target.clear();
+ }
+ }
+
+ }
+
+ function getWpsState() {
+ return service.getWpsInfo();
+ }
+
+ function getWifiMain() {
+ return service.getWifiBasic();
+ }
+
+ function initialize() {
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ var vm = new WifiMainVM();
+ ko.applyBindings(vm, container[0]);
+ addTimeout(function () {
+ checkAccessMode();
+ }, 600);
+
+ if (config.WDS_SUPPORT) {
+ checkWifiStatusAccordingToWDS();
+ } else if (config.AP_STATION_SUPPORT) {
+ checkWifiStatus();
+ }
+
+ $('#frmSSID1').validate({
+ submitHandler: function () {
+ vm.saveSSID1();
+ },
+ rules: {
+ ssid: 'ssid',
+ pwdWepKey: {
+ wifi_wep_password_check: true,
+ wifi_password_check: true
+ },
+ txtWepKey: {
+ wifi_wep_password_check: true,
+ wifi_password_check: true
+ },
+ codeWPAKey: 'wifi_password_check',
+ txtWPAKey: 'wifi_password_check'
+ },
+ errorPlacement: function (error, element) {
+ var id = element.attr("id");
+ if (id == "codeWPAKey" || id == "txtWPAKey") {
+ error.insertAfter("#lblshowWPAPassword");
+ } else if (id == "pwdWepKey" || id == "txtWepKey") {
+ error.insertAfter("#lblShowWepPassword");
+ } else {
+ error.insertAfter(element);
+ }
+ }
+ });
+ $('#frmSSID2').validate({
+ submitHandler: function () {
+ vm.saveSSID2();
+ },
+ rules: {
+ m_ssid: 'ssid',
+ m_pass: 'wifi_password_check',
+ m_passShow: 'wifi_password_check'
+ },
+ errorPlacement: function (error, element) {
+ var id = element.attr("id");
+ if (id == "m_pass" || id == "m_passShow") {
+ error.insertAfter("#m_lblShowPassword");
+ } else if (id == "pass" || id == "passShow") {
+ error.insertAfter("#lblShowPassword");
+ } else {
+ error.insertAfter(element);
+ }
+ }
+ });
+ //表单提交函数、校验规则配置
+ $('#frmWifiSwitch').validate({
+ submitHandler: function () {
+ vm.setMultiSSIDSwitch();
+ }
+ });
+
+ $('#frmMultiSSID').validate({
+ submitHandler: function () {
+ vm.setMultiSSIDSwitch();
+ }
+ });
+
+ }
+
+ function checkWifiStatusAccordingToWDS() {
+ var info = service.getWdsInfo();
+ if (info.currentMode == "0") {
+ $('#frmWifiSwitch :input').each(function () {
+ $(this).prop("disabled", false);
+ });
+ $('#frmSSID1 :input').each(function () {
+ $(this).prop("disabled", false);
+ });
+ $('#frmSSID2 :input').each(function () {
+ $(this).prop("disabled", false);
+ });
+ } else {
+ $('#frmWifiSwitch :input').each(function () {
+ $(this).prop("disabled", true);
+ });
+ $('#frmSSID1 :input').each(function () {
+ $(this).prop("disabled", true);
+ });
+ $('#frmSSID2 :input').each(function () {
+ $(this).prop("disabled", true);
+ });
+ }
+ }
+ function checkWifiStatus() {
+ var info = service.getAPStationBasic();
+ if (info.ap_station_enable == "1") {
+ $('#frmMultiSSID :input').each(function () {
+ $(this).prop("disabled", true);
+ });
+ } else {
+ $('#frmMultiSSID :input').each(function () {
+ $(this).prop("disabled", false);
+ });
+ }
+ }
+
+ return {
+ init: initialize
+ };
+});
+
+define("wifi_sleep_mode","underscore jquery knockout set service".split(" "),
+ function (_, $, ko, config, service) {
+
+ //休眠方式
+ function getSleepMode() {
+ return service.getSleepMode();
+ }
+
+ //覆盖范围
+ function getWifiRange() {
+ return service.getWifiRange();
+ }
+
+ var sleepTime = _.map(config.SLEEP_MODES, function (item) {
+ return new Option(item.name, item.value);
+ });
+
+ function SleepModeViewMode() {
+ var target = this;
+
+ target.isCPE = config.PRODUCT_TYPE == 'CPE';
+ target.showTSWDiv = config.TSW_SUPPORT;
+ target.showSleepDiv = config.WIFI_SLEEP_SUPPORT;
+ target.hasUssd = config.HAS_USSD;
+ target.hasUpdateCheck = config.HAS_UPDATE_CHECK;
+ target.hasDdns = config.DDNS_SUPPORT;
+
+ target.modes = ko.observableArray(sleepTime);
+
+ var smInfo = getSleepMode();
+ target.selectedMode = ko.observable(smInfo.sleepMode);
+
+ var wifiRangeInfo = getWifiRange();
+ target.wifiRangeMode = ko.observable(wifiRangeInfo.wifiRangeMode);
+
+ target.setWifiRange = smSetWifiRange;
+
+ target.setWifiRangeAct = smSetWifiRangeAct;
+
+ target.setSleepMode = smSetSleepMode;
+
+ target.setSleepModeAct = smSetSleepModeAct;
+
+ var tsw = service.getTsw();
+ target.openEnable = ko.observable(tsw.openEnable == "" ? '0' : tsw.openEnable);
+ target.openH = ko.observable(tsw.openH);
+ target.openM = ko.observable(tsw.openM);
+ target.closeH = ko.observable(tsw.closeH);
+ target.closeM = ko.observable(tsw.closeM);
+ //定时休眠唤醒
+ target.saveTsw = smSaveTsw;
+
+ function smSetWifiRange() {
+ service.getWpsInfo({}, function (smInfo) {
+ if (smInfo.wpsFlag == '1') {
+ showAlert('wps_on_info', function() {
+ window.location.reload();
+ });
+ } else if (smInfo.radioFlag == '0') {
+ showAlert('wps_wifi_off');
+ } else {
+ showConfirm('wifi_sleep_confirm', function () {
+ showLoading('waiting');
+ target.setWifiRangeAct();
+ });
+
+ }
+ });
+ }
+ function smSetSleepModeAct() {
+ var params = {};
+ params.sleepMode = target.selectedMode();
+ service.setSleepMode(params, function (result) {
+ if (result.result != "success") {
+ errorOverlay();
+ } else {
+ successOverlay();
+ }
+ });
+ }
+
+ function smSetWifiRangeAct() {
+ var params = {};
+ params.wifiRangeMode = target.wifiRangeMode();
+ service.setWifiRange(params, function (result) {
+ if (result.result != "success") {
+ errorOverlay();
+ } else {
+ successOverlay();
+ }
+ });
+ }
+
+ function smSetSleepMode() {
+ showLoading('waiting');
+ service.getWpsInfo({}, function (info) {
+ if (info.wpsFlag == '1') {
+ showAlert('wps_on_info', function() {
+ window.location.reload();
+ });
+ } else if (info.radioFlag == '0') {
+ showAlert('wps_wifi_off');
+ } else {
+ target.setSleepModeAct();
+ }
+ });
+ }
+ function smSaveTsw() {
+ if (target.openEnable() == '1') {
+ if (Math.abs((target.openH() * 60 + parseInt(target.openM(), 10)) - (target.closeH() * 60 + parseInt(target.closeM(), 10))) < 10) {
+ showAlert('tsw_time_interval_alert');
+ return false;
+ }
+ showLoading('waiting');
+ service.saveTsw({
+ openEnable: target.openEnable(),
+ closeEnable: target.openEnable(),
+ openTime: leftInsert(target.openH(), 2, '0') + ':' + leftInsert(target.openM(), 2, '0'),
+ closeTime: leftInsert(target.closeH(), 2, '0') + ':' + leftInsert(target.closeM(), 2, '0')
+ }, smShowRes, $.noop);
+ } else {
+ showLoading('waiting');
+ service.saveTsw({
+ openEnable: target.openEnable(),
+ closeEnable: target.openEnable()
+ }, smShowRes, $.noop);
+ }
+
+ }
+
+ }
+ function bindContainer(smVm) {
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ ko.applyBindings(smVm, container[0]);
+
+ $('#frmTsw').validate({
+ submitHandler: function () {
+ smVm.saveTsw();
+ },
+ errorPlacement: function (error, element) {
+ if (element.attr("name") == "closeM" || element.attr("name") == "closeH") {
+ $("#closeErrorDiv").html(error);
+ } else if (element.attr("name") == "openM" || element.attr("name") == "openH") {
+ $("#openErrorDiv").html(error);
+ } else {
+ error.insertAfter(element);
+ }
+ }
+ });
+
+ $('#sleepModeForm').validate({
+ submitHandler: function () {
+ smVm.setSleepMode();
+ }
+ });
+
+ $('#wifiRangeForm').validate({
+ submitHandler: function () {
+ smVm.setWifiRange();
+ }
+ });
+
+ }
+ function initialize() {
+ var smVm = new SleepModeViewMode();
+ bindContainer(smVm);
+ }
+ function smShowRes(data) {
+ if (data && data.result == "success") {
+ successOverlay();
+ } else {
+ errorOverlay();
+ }
+ }
+
+ return {
+ init: initialize
+ };
+});
+
+define("wifi_station_info","underscore jquery knockout set service menu".split(" "),
+ function (_, $, ko, config, service, menu) {
+
+ var stationUtil = {
+ dealElement: function (showEdit, idx) {
+ if (idx != "all") {
+ if (!showEdit) {
+ $("#edit_btn_" + idx + ",#hostname_txt_" + idx).show();
+ $("#save_btn_" + idx + ",#cancel_btn_" + idx + ",#hostname_input_" + idx).hide();
+ } else {
+ $("#edit_btn_" + idx + ",#hostname_txt_" + idx).hide();
+ $("#save_btn_" + idx + ",#cancel_btn_" + idx + ",#hostname_input_" + idx).show();
+ }
+ } else {
+ $("input[id^='hostname_txt_'],a[id^='edit_btn_']").show();
+ $("input[id^='hostname_input_'],a[id^='cancel_btn_'],a[id^='save_btn_']").hide();
+ }
+ },
+ //根据MAC匹配主机名
+ getHostName: function (hostName, mac, hostNameList) {
+ var element_data = _.find(hostNameList, function (element_data) {
+ return element_data.mac == mac;
+ });
+ return element_data ? element_data.hostname : hostName;
+ },
+ //匹配黑名单列表和主机名
+ parseBlackString: function (macStr, hostnameStr) {
+ if (macStr == "") {
+ return [];
+ }
+ var tempMac = macStr.split(';');
+ var tempHostName = hostnameStr.split(';');
+ var result = [];
+ for (var i = 0; i < tempMac.length; i++) {
+ //var obj = {};
+ //obj.hostName = tempHostName[i];
+ //obj.macAddress = tempMac[i];
+ result.push({
+ hostName: tempHostName[i],
+ macAddress: tempMac[i]
+ });
+ }
+ return result;
+ }
+ };
+
+ function staInfoViewMode() {
+ var target = this;
+ var originalData = {
+ user_ip: '',
+ macList: '',
+ ACL_mode: 2, //黑白名单
+ hostnameList: ''
+ };
+ target.showCableDiv = config.PRODUCT_TYPE == 'CPE' && config.RJ45_SUPPORT;
+ target.supportBlock = config.STATION_BLOCK_SUPPORT;
+ var pcMenu = menu.findMenu('#parental_control');
+ target.showPCLink = pcMenu && pcMenu.length > 0 && config.HAS_PARENTAL_CONTROL;
+
+ target.deviceInfo = ko.observableArray([]);
+ target.cableDeviceInfo = ko.observableArray([]);
+ target.blackDevices = ko.observableArray([]);
+ target.blackDevicesMac = ko.computed(function () {
+ return _.map(target.blackDevices(), function (element_data) {
+ return element_data.macAddress;
+ });
+ });
+ target.showBlackDiv = ko.observable(config.HAS_BLACK_AND_WHITE_FILTER ? (originalData.ACL_mode == '2' ? true : false) : config.STATION_BLOCK_SUPPORT);
+
+ ko.computed(function () {
+ target.deviceInfo();
+ target.cableDeviceInfo();
+ target.blackDevices();
+ $("#station_info_div").translate();
+ }).extend({
+ notify: 'always',
+ throttle: 300
+ });
+
+ var hostNameList = service.getHostNameList({}).devices;
+ //获取WiFi已连接设备
+ target.fetchAttachedDevices = function (cb) {
+ service.getCurrentlyAttachedDevicesInfo({}, function (data) {
+ if (editingHostname) {
+ return false;
+ }
+ target.deviceInfo(_.map(data.attachedDevices, function (element_data, idx) {
+ element_data.idx = _.uniqueId('wireless_');
+ element_data.type = 1;
+ element_data.inBlackGroup = config.HAS_BLACK_AND_WHITE_FILTER && originalData.ACL_mode != '2' ? false : _.contains(target.blackDevicesMac(), element_data.macAddress);
+ element_data.hostName = stationUtil.getHostName(element_data.hostName, element_data.macAddress, hostNameList);
+ element_data.disableFlag = (config.HAS_BLACK_AND_WHITE_FILTER && originalData.ACL_mode != '2') || element_data.inBlackGroup || editingHostname;
+ return element_data;
+ }));
+ if (_.isFunction(cb)) {
+ cb.apply(this);
+ }
+ });
+ };
+ //获取RJ45已连接设备
+ target.fetchAttachedCableDevices = function (cb) {
+ service.getAttachedCableDevices({}, function (data) {
+ if (editingHostname) {
+ return false;
+ }
+ target.cableDeviceInfo(_.map(data.attachedDevices, function (element_data, idx) {
+ element_data.idx = _.uniqueId('cable_');
+ element_data.hostName = stationUtil.getHostName(element_data.hostName, element_data.macAddress, hostNameList);
+ element_data.type = 2;
+ return element_data;
+ }));
+ if (_.isFunction(cb)) {
+ cb.apply(this);
+ }
+ });
+ };
+
+ target.fetchBlacklist = function (cb) {
+ service.getMacFilterInfo({}, function (data) {
+ originalData.ACL_mode = data.ACL_mode;
+ originalData.user_ip = data.user_ip_addr;
+ originalData.hostnameList = data.wifi_hostname_black_list;
+ originalData.macList = data.wifi_mac_black_list;
+ target.showBlackDiv(config.HAS_BLACK_AND_WHITE_FILTER ? (originalData.ACL_mode == '2' ? true : false) : config.STATION_BLOCK_SUPPORT);
+ var blackDevices = stationUtil.parseBlackString(data.wifi_mac_black_list, data.wifi_hostname_black_list);
+ target.blackDevices(_.map(blackDevices, function (element_data, idx) {
+ element_data.idx = _.uniqueId('black_');
+ element_data.type = 3;
+ element_data.hostName = stationUtil.getHostName(element_data.hostName, element_data.macAddress, hostNameList);
+ return element_data;
+ }));
+ if (_.isFunction(cb)) {
+ cb.apply(this);
+ }
+ }, $.noop);
+ };
+ target.fetchBlacklist();
+ target.fetchAttachedDevices();
+ if (target.showCableDiv) {
+ target.fetchAttachedCableDevices();
+ }
+
+ var editingHostname = 0;
+ addInterval(function () {
+ if (editingHostname == 0) {
+ target.fetchAttachedDevices();
+ }
+ }, 3000);
+
+ if (target.showCableDiv) {
+ addInterval(function () {
+ if (editingHostname == 0) {
+ target.fetchAttachedCableDevices();
+ }
+ }, 5000);
+ }
+ //WiFi已连接设备列表中屏蔽按钮事件 入黑名单
+ target.wirelessBlockHandler = stationBlockEvent;
+ //保存主机名事件
+ target.saveHostNameHandler = saveHostNameEvent;
+ //主机名修改按钮点击事件
+ target.editHostNameHandler = function (element_data) {
+ editingHostname++;
+ $("#hostname_input_" + element_data.idx).val(element_data.hostName);
+ stationUtil.dealElement(true, element_data.idx);
+ return false;
+ };
+ //取消编辑主机名事件
+ target.cancelEditHostNameHandler = function (element_data) {
+ stationUtil.dealElement(false, element_data.idx);
+ editingHostname--;
+ };
+ target.cancelAllEditHostNameHandler = function () {
+ stationUtil.dealElement(false, "all");
+ editingHostname = 0;
+ };
+ //从黑名单列表中移除
+ target.blacklistRemoveHandler = function (element_data) {
+ if (originalData.macList.indexOf(element_data.macAddress) == -1) {
+ return false;
+ }
+ if (editingHostname) {
+ target.cancelAllEditHostNameHandler();
+ }
+ showLoading('waiting');
+ var macArr = [];
+ var hostnameArr = [];
+ $.each(target.blackDevices(), function (i, n) {
+ if (n.macAddress != element_data.macAddress) {
+ macArr.push(n.macAddress);
+ hostnameArr.push(n.hostName);
+ }
+ });
+ var params = {
+ ACL_mode: '2', //originalData.ACL_mode
+ macFilteringMode: '2', //originalData.ACL_mode
+ wifi_hostname_black_list: hostnameArr.join(';'),
+ wifi_mac_black_list: macArr.join(';')
+ };
+ target.updateMacFilterList(params);
+ };
+ target.updateMacFilterList = function (params) {
+ service.setMacFilter(params, function (data) {
+ if (data.result == "success") {
+ target.blackDevices([]);
+ target.fetchBlacklist(function () {
+ target.fetchAttachedDevices(function () {
+ successOverlay();
+ });
+ });
+ }
+ }, function () {
+ errorOverlay();
+ });
+ };
+
+ function saveHostNameEvent(element_data) {
+ var $input = $("#hostname_input_" + element_data.idx);
+ var newHostname = $input.val();
+ if (newHostname.indexOf(" ") == 0 || newHostname.lastIndexOf(" ") == (newHostname.length - 1) || /[\*\$\[&:,;<>'"\\`\]¥]{1,32}/.test(newHostname)) {
+ showAlert('device_rename');
+ return false;
+ } else if (newHostname == '') {
+ $(".promptErrorLabel", "#confirm-message-container").text($.i18n.prop("required"));
+ var $closestTD = $input.closest('td').addClass('has-error');
+ addTimeout(function () {
+ $closestTD.removeClass('has-error');
+ }, 5000);
+ showAlert('required');
+ return false;
+ }
+ showLoading('waiting');
+ element_data.hostName = newHostname;
+ service.editHostName({
+ hostname: element_data.hostName,
+ mac: element_data.macAddress
+ }, function () {
+ editingHostname = 0;
+ service.getHostNameList({}, function (data) {
+ hostNameList = data.devices;
+ if (element_data.type == 3) {
+ target.fetchBlacklist(function () {
+ hideLoading();
+ successOverlay();
+ });
+ } else if (element_data.type == 2) {
+ target.fetchAttachedCableDevices(function () {
+ hideLoading();
+ successOverlay();
+ });
+ } else if (element_data.type == 1) {
+ target.fetchAttachedDevices(function () {
+ hideLoading();
+ successOverlay();
+ });
+ }
+ });
+ }, function () {
+ errorOverlay();
+ });
+ }
+
+ function stationBlockEvent(element_data) {
+ if (config.HAS_BLACK_AND_WHITE_FILTER && originalData.ACL_mode != '2') {
+ return false;
+ }
+ if (originalData.macList.split(';').length == 10) {
+ showAlert('black_list_max');
+ return false;
+ }
+ if (originalData.macList.indexOf(element_data.macAddress) != -1) {
+ return false;
+ }
+ if (element_data.ipAddress == originalData.user_ip) {
+ showAlert('black_yourself_tip');
+ return false;
+ }
+ if (editingHostname) {
+ target.cancelAllEditHostNameHandler();
+ }
+ showLoading('waiting');
+ var newHostnameList = originalData.hostnameList == '' ? element_data.hostName : element_data.hostName + ';' + originalData.hostnameList;
+ var newMacList = originalData.macList == '' ? element_data.macAddress : element_data.macAddress + ';' + originalData.macList;
+ var params = {
+ ACL_mode: '2',
+ wifi_hostname_black_list: newHostnameList,
+ wifi_mac_black_list: newMacList
+ };
+ target.updateMacFilterList(params);
+ }
+
+ }
+
+ function bindContainer(ws_vm) {
+ var container = $('#container')[0];
+ ko.cleanNode(container);
+ ko.applyBindings(ws_vm, container);
+ }
+ function initialize() {
+ var ws_vm = new staInfoViewMode();
+ bindContainer(ws_vm);
+ }
+
+ return {
+ init: initialize
+ };
+});
+
+define("wifi_wps","underscore jquery knockout set service".split(" "),
+ function (_, $, ko, config, service) {
+
+ var viaWifi = false;
+
+ function WpsViewMode() {
+ var target = this;
+ target.hasMultiSSID = config.HAS_MULTI_SSID;
+ target.hasAPStation = config.AP_STATION_SUPPORT;
+ target.hasWifiSwitch = config.WIFI_SWITCH_SUPPORT;
+ target.hasWlanMacfilter = config.HAS_BLACK_AND_WHITE_FILTER;
+
+ target.wpsType = ko.observable('');
+ target.wpsPin = ko.observable('');
+
+ var state = getWpsState();
+ target.origin_ap_station_enable = state.ap_station_enable;
+
+ target.wpsFlag = ko.observable(state.wpsFlag);
+ target.authMode = ko.observable(state.authMode);
+
+ target.radioFlag = ko.observable(state.radioFlag);
+ target.encrypType = ko.observable(state.encrypType);
+
+ target.mulOption = ko.observable(paintSSIDOption(state));
+ target.wpsSSID = ko.observable(getSSIDCurrWps(state));
+
+ var infoBasic = service.getWifiBasic();
+ target.wifi_enable = ko.observable(infoBasic.wifi_enable);
+
+ target.isShowSSIDInfoDiv = ko.observable(false);
+ if (config.WIFI_SWITCH_SUPPORT) { //软开关
+ if (infoBasic.wifi_enable == "1") {
+ target.isShowSSIDInfoDiv(true);
+ } else {
+ target.isShowSSIDInfoDiv(false);
+ }
+ } else {
+ target.isShowSSIDInfoDiv(true);
+ }
+ target.multi_ssid_enable = ko.observable(infoBasic.multi_ssid_enable);
+ target.origin_multi_ssid_enable = infoBasic.multi_ssid_enable;
+
+ target.save = wpa_save;
+
+ // if (state.wpsFlag != '0') {
+ // target.wpsType(state.wpsType == 'PIN' ? 'PIN' : 'PBC');
+ // } else {
+ // target.wpsType('');
+ // }
+ target.wpsType(state.wpsType == 'PIN' ? 'PIN' : 'PBC');
+
+ target.setMultiSSIDSwitch = function () {
+ if (target.checkSettings("switch")) {
+ return;
+ }
+
+ function wpsSetSwitch() {
+ showLoading('waiting');
+ var wps_param = {};
+ wps_param.m_ssid_enable = target.multi_ssid_enable();
+ if (config.WIFI_SWITCH_SUPPORT) {
+ wps_param.wifiEnabled = target.wifi_enable();
+ }
+ service.setWifiBasicMultiSSIDSwitch(wps_param, function (result) {
+ if (result.result == "success") {
+ if (!viaWifi) {
+ addInterval(wpsReload, 1000);
+ } else {
+ setTimeout(wpsReloadViaWifi, 15000);
+ }
+ } else {
+ errorOverlay();
+ }
+ });
+ }
+
+ var setSwitch = wpsSetSwitch;
+ var state = service.getStatusInfo();
+ if (target.wifi_enable() == "1" && config.HAS_MULTI_SSID) {
+ if (target.multi_ssid_enable() == "1" && config.AP_STATION_SUPPORT && target.origin_ap_station_enable == "1") {
+ if (!state.wifiStatus) {
+ showConfirm("multi_ssid_enable_confirm", function () {
+ setSwitch();
+ });
+ } else {
+ showConfirm("multi_ssid_enable_confirm2", function () {
+ setSwitch();
+ });
+ }
+ } else {
+ if (!state.wifiStatus) {
+ setSwitch();
+ } else {
+ showConfirm("wifi_disconnect_confirm2", function () {
+ setSwitch();
+ });
+ }
+ }
+ } else {
+ setSwitch();
+ }
+
+ function wpsReload() {
+ var state = service.getWifiBasic();
+ if (state.wifi_enable == target.wifi_enable()) {
+ successOverlay();
+ clearTimer();
+ clearValidateMsg();
+ service.refreshAPStationStatus();
+ initialize();
+ }
+ }
+ function wpsReloadViaWifi() {
+ successOverlay();
+ setTimeout(function () {
+ window.location.reload();
+ }, 1000);
+ clearTimer();
+ clearValidateMsg();
+ service.refreshAPStationStatus();
+ initialize();
+ }
+
+ };
+
+ target.checkSettings = function (ssid) {
+ var state = getWpsState();
+ if (state.wpsFlag == '1') {
+ showAlert('wps_on_info', function() {
+ window.location.reload();
+ });
+ return true;
+ }
+ return false;
+ };
+
+ function wpa_save() {
+ var state = getWpsState();
+
+ if (state.radioFlag == '0') {
+ showAlert('wps_wifi_off');
+ return;
+ }
+
+ if (state.wpsFlag == '1') {
+ showAlert('wps_on_info', function() {
+ window.location.reload();
+ });
+ return true;
+ }
+
+ if (target.wpsSSID() == "SSID1") {
+ var res = (state.AuthMode == "OPEN" && state.encrypType == "WEP")
+ || (state.AuthMode == "SHARED" && state.encrypType == "WEP")
+ || (state.AuthMode == "WPAPSK" && state.encrypType == "TKIP")
+ || (state.AuthMode == "WPAPSK" && state.encrypType == "TKIPCCMP")
+ || (state.AuthMode == "WPAPSK" && state.encrypType == "AES")
+ || (state.AuthMode == "WPA2PSK" && state.encrypType == "TKIP")
+ || (state.AuthMode == "WPAPSKWPA2PSK" && state.encrypType == "TKIP")
+ || (state.AuthMode == "WPA3Personal")
+ || (state.AuthMode == "WPA2WPA3");
+ if (res) {
+ showAlert('wps_auth_open');
+ return;
+ }
+ } else {
+ var resm = (state.m_AuthMode == "OPEN" && state.m_encrypType == "WEP")
+ || (state.m_AuthMode == "SHARED" && state.m_encrypType == "WEP")
+ || (state.m_AuthMode == "WPAPSK" && state.m_encrypType == "TKIP")
+ || (state.m_AuthMode == "WPAPSK" && state.m_encrypType == "TKIPCCMP")
+ || (state.m_AuthMode == "WPAPSK" && state.m_encrypType == "AES")
+ || (state.m_AuthMode == "WPA2PSK" && state.m_encrypType == "TKIP")
+ || (state.m_AuthMode == "WPAPSKWPA2PSK" && state.m_encrypType == "TKIP")
+ || (state.m_AuthMode == "WPA3Personal")
+ || (state.m_AuthMode == "WPA2WPA3");
+ if (resm) {
+ showAlert('wps_auth_open');
+ return;
+ }
+ }
+
+ var wpsSSID;
+ var wpsIndex;
+ if (target.wpsSSID() != "SSID1") {
+ wpsSSID = state.multiSSID;
+ wpsIndex = 2;
+ } else {
+ wpsSSID = state.ssid;
+ wpsIndex = 1;
+ }
+
+ var basic = service.getWifiBasic();
+ if (wpsSSID == basic.m_SSID && wpsIndex == 2) {
+ if (basic.m_broadcast == '1') {
+ showAlert('wps_ssid_broadcast_disable');
+ return;
+ }
+ } else if (wpsSSID == basic.SSID && wpsIndex == 1) {
+ if (basic.broadcast == '1') {
+ showAlert('wps_ssid_broadcast_disable');
+ return;
+ }
+ }
+
+ showLoading('waiting');
+ var wps_param = {};
+ wps_param.wpsType = target.wpsType();
+ wps_param.wpsSSID = wpsSSID;
+ wps_param.wpsIndex = wpsIndex;
+ wps_param.wpsPin = getWpsPin(target.wpsPin());
+
+ service.openWps(wps_param, function (result) {
+ if (result.result != "success") {
+ errorOverlay();
+ } else {
+ target.wpsPin('');
+ clearValidateMsg();
+ successOverlay();
+ }
+ });
+ }
+
+ }
+
+ function getWpsPin(value) {
+ if (value.length != 9) {
+ return value;
+ } else {
+ return value.substring(0, 4) + value.substring(5);
+ }
+ }
+
+ function getWpsState() {
+ return service.getWpsInfo();
+ }
+
+ function paintSSIDOption(info) {
+ var show_opt = [];
+ show_opt.push(new Option(info.ssid, "SSID1"));
+ if (info.ssidEnable == "1") {
+ show_opt.push(new Option(info.multiSSID, "SSID2"));
+ }
+ return show_opt;
+ }
+
+ //检查当前是否通过wifi登录webui
+ function checkAccessMode() {
+ service.getParams({
+ nv: 'user_ip_addr'
+ }, function (dataIp) {
+ service.getParams({
+ nv: 'station_list'
+ }, function (dataList) {
+ viaWifi = isWifiConnected(dataIp.user_ip_addr, dataList.station_list);
+ });
+ });
+ }
+ function bindContainer(wpsVm) {
+ var container = $('#container');
+ ko.cleanNode(container[0]);
+ ko.applyBindings(wpsVm, container[0]);
+
+ addTimeout(function () {
+ checkAccessMode();
+ }, 600);
+
+ $('#wpsForm').validate({
+ submitHandler: function () {
+ wpsVm.save();
+ },
+ rules: {
+ txtPin: {
+ "wps_pin_validator": true
+ }
+ }
+ });
+
+ $('#frmWifiSwitch').validate({
+ submitHandler: function () {
+ wpsVm.setMultiSSIDSwitch();
+ }
+ });
+ }
+ function getSSIDCurrWps(info) {
+ if (info.ssid != info.multiSSID) {
+ return info.wpsSSID == info.multiSSID ? "SSID2" : "SSID1";
+ } else {
+ if (info.wifi_wps_index == '2') {
+ return "SSID2";
+ } else {
+ return "SSID1";
+ }
+ }
+ }
+ //视图初始化
+ function initialize() {
+ var wpsVm = new WpsViewMode();
+ bindContainer(wpsVm);
+ }
+
+ return {
+ init: initialize
+ };
+});
+