unserver-unify
Version:
797 lines (795 loc) • 25.9 kB
JavaScript
'use strict';
angular.module('bamboo.common').service('CommonService', function($rootScope, $sce, $timeout, $cookieStore, ApiService, $translate, $locale, $state, $http, $uibModal, LocalConfig, toastr, deviceDetector, FileUploader, $filter) {
"use strict";
var _this = this;
this.recodTableState;
this.classTableState;
var locales = {
'Chinese': {
"DATETIME_FORMATS": {
"AMPMS": ["\u4e0a\u5348", "\u4e0b\u5348"],
"DAY": ["\u661f\u671f\u65e5", "\u661f\u671f\u4e00", "\u661f\u671f\u4e8c", "\u661f\u671f\u4e09", "\u661f\u671f\u56db", "\u661f\u671f\u4e94", "\u661f\u671f\u516d"],
"ERANAMES": ["\u516c\u5143\u524d", "\u516c\u5143"],
"ERAS": ["\u516c\u5143\u524d", "\u516c\u5143"],
"FIRSTDAYOFWEEK": 6,
"MONTH": ["\u4e00\u6708", "\u4e8c\u6708", "\u4e09\u6708", "\u56db\u6708", "\u4e94\u6708", "\u516d\u6708", "\u4e03\u6708", "\u516b\u6708", "\u4e5d\u6708", "\u5341\u6708", "\u5341\u4e00\u6708", "\u5341\u4e8c\u6708"],
"SHORTDAY": ["\u5468\u65e5", "\u5468\u4e00", "\u5468\u4e8c", "\u5468\u4e09", "\u5468\u56db", "\u5468\u4e94", "\u5468\u516d"],
"SHORTMONTH": ["1\u6708", "2\u6708", "3\u6708", "4\u6708", "5\u6708", "6\u6708", "7\u6708", "8\u6708", "9\u6708", "10\u6708", "11\u6708", "12\u6708"],
"STANDALONEMONTH": ["\u4e00\u6708", "\u4e8c\u6708", "\u4e09\u6708", "\u56db\u6708", "\u4e94\u6708", "\u516d\u6708", "\u4e03\u6708", "\u516b\u6708", "\u4e5d\u6708", "\u5341\u6708", "\u5341\u4e00\u6708", "\u5341\u4e8c\u6708"],
"WEEKENDRANGE": [
5,
6
],
"fullDate": "y\u5e74M\u6708d\u65e5EEEE",
"longDate": "y\u5e74M\u6708d\u65e5",
"medium": "y\u5e74M\u6708d\u65e5 ah:mm:ss",
"mediumDate": "y\u5e74M\u6708d\u65e5",
"mediumTime": "ah:mm:ss",
"short": "y/M/d ah:mm",
"shortDate": "y/M/d",
"shortTime": "ah:mm"
},
"NUMBER_FORMATS": {
"CURRENCY_SYM": "\u00a5",
"DECIMAL_SEP": ".",
"GROUP_SEP": ",",
"PATTERNS": [{
"gSize": 3,
"lgSize": 3,
"maxFrac": 3,
"minFrac": 0,
"minInt": 1,
"negPre": "-",
"negSuf": "",
"posPre": "",
"posSuf": ""
}, {
"gSize": 3,
"lgSize": 3,
"maxFrac": 2,
"minFrac": 2,
"minInt": 1,
"negPre": "-\u00a4",
"negSuf": "",
"posPre": "\u00a4",
"posSuf": ""
}]
},
"id": "zh-cn",
"localeID": "zh_CN",
"pluralCat": function(n, opt_precision) {
return PLURAL_CATEGORY.OTHER;
}
},
'en_US': {
"DATETIME_FORMATS": {
"AMPMS": ["AM", "PM"],
"DAY": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
"ERANAMES": ["Before Christ", "Anno Domini"],
"ERAS": ["BC", "AD"],
"FIRSTDAYOFWEEK": 6,
"MONTH": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
"SHORTDAY": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
"SHORTMONTH": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
"STANDALONEMONTH": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
"WEEKENDRANGE": [
5,
6
],
"fullDate": "EEEE, MMMM d, y",
"longDate": "MMMM d, y",
"medium": "MMM d, y h:mm:ss a",
"mediumDate": "MMM d, y",
"mediumTime": "h:mm:ss a",
"short": "M/d/yy h:mm a",
"shortDate": "M/d/yy",
"shortTime": "h:mm a"
},
"NUMBER_FORMATS": {
"CURRENCY_SYM": "$",
"DECIMAL_SEP": ".",
"GROUP_SEP": ",",
"PATTERNS": [{
"gSize": 3,
"lgSize": 3,
"maxFrac": 3,
"minFrac": 0,
"minInt": 1,
"negPre": "-",
"negSuf": "",
"posPre": "",
"posSuf": ""
}, {
"gSize": 3,
"lgSize": 3,
"maxFrac": 2,
"minFrac": 2,
"minInt": 1,
"negPre": "-\u00a4",
"negSuf": "",
"posPre": "\u00a4",
"posSuf": ""
}]
},
"id": "en-us",
"localeID": "en_US",
"pluralCat": function(n, opt_precision) {
var i = n | 0;
var vf = getVF(n, opt_precision);
if (i == 1 && vf.v == 0) {
return PLURAL_CATEGORY.ONE;
}
return PLURAL_CATEGORY.OTHER;
}
},
'France': {
"DATETIME_FORMATS": {
"AMPMS": ["AM", "PM"],
"DAY": ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"],
"ERANAMES": ["avant J\u00e9sus-Christ", "apr\u00e8s J\u00e9sus-Christ"],
"ERAS": ["av. J.-C.", "ap. J.-C."],
"FIRSTDAYOFWEEK": 0,
"MONTH": ["janvier", "f\u00e9vrier", "mars", "avril", "mai", "juin", "juillet", "ao\u00fbt", "septembre", "octobre", "novembre", "d\u00e9cembre"],
"SHORTDAY": ["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."],
"SHORTMONTH": ["janv.", "f\u00e9vr.", "mars", "avr.", "mai", "juin", "juil.", "ao\u00fbt", "sept.", "oct.", "nov.", "d\u00e9c."],
"STANDALONEMONTH": ["janvier", "f\u00e9vrier", "mars", "avril", "mai", "juin", "juillet", "ao\u00fbt", "septembre", "octobre", "novembre", "d\u00e9cembre"],
"WEEKENDRANGE": [
5,
6
],
"fullDate": "EEEE d MMMM y",
"longDate": "d MMMM y",
"medium": "d MMM y HH:mm:ss",
"mediumDate": "d MMM y",
"mediumTime": "HH:mm:ss",
"short": "dd/MM/y HH:mm",
"shortDate": "dd/MM/y",
"shortTime": "HH:mm"
},
"NUMBER_FORMATS": {
"CURRENCY_SYM": "\u20ac",
"DECIMAL_SEP": ",",
"GROUP_SEP": "\u00a0",
"PATTERNS": [{
"gSize": 3,
"lgSize": 3,
"maxFrac": 3,
"minFrac": 0,
"minInt": 1,
"negPre": "-",
"negSuf": "",
"posPre": "",
"posSuf": ""
}, {
"gSize": 3,
"lgSize": 3,
"maxFrac": 2,
"minFrac": 2,
"minInt": 1,
"negPre": "-",
"negSuf": "\u00a0\u00a4",
"posPre": "",
"posSuf": "\u00a0\u00a4"
}]
},
"id": "fr",
"localeID": "fr",
"pluralCat": function(n, opt_precision) {
var i = n | 0;
if (i == 0 || i == 1) {
return PLURAL_CATEGORY.ONE;
}
return PLURAL_CATEGORY.OTHER;
}
},
};
$rootScope.languages = [{
"value": "en_US",
"text": "English"
}, {
"value": "Chinese",
"text": "中文"
}];
if (LocalConfig.LANGUAGE_FRANCH) {
$rootScope.languages.push({
"value": "France",
"text": "français"
})
$rootScope.LANGUAGE_FRANCH = true;
}
var releaseNotesOpts = {
size: "md-lg vertical-align-center",
animation: true,
backdrop: 'static',
templateUrl: 'app/directive/notice/releasenotes.component.html',
controller: ['$uibModalInstance', 'ApiService', 'UserService', function($uibModalInstance, ApiService, UserService) {
console.log("--- releaseNotesOpts release controller ");
self = this;
var info = {
start: 0,
limit: 3,
action: "getStudentReleases"
};
ApiService.post('/logs', info).then(function(data) {
if(data.data.success){
var result=data.data.data;
self.releaseItems = result.items;
if (self.releaseItems && self.releaseItems.length) {
var info = {
action: 'recordWebVer',
ver: self.releaseItems[0].version
}
UserService.UserApi(info, function(result) {
console.log(result);
})
}
}
});
self.cancel = function() {
$uibModalInstance.dismiss()
};
}],
controllerAs: '$ctrl',
keyboard: false
};
this.alertReleaseNotesDlg = function() {
var info = {
action: 'checkNewReleaseToRead',
student:true,
}
ApiService.post('/logs', info).then(function(result) {
console.log(result);
if (result.data.success && result.data.data) {
$uibModal.open(releaseNotesOpts);
}
});
}
function findLanguage(v, defaultLanguage) {
var lang = defaultLanguage;
for (var i = 0; i < $rootScope.languages.length; i++) {
if ($rootScope.languages[i].value === v) {
lang = v;
break;
}
}
return lang;
}
$rootScope.initLang = function() {
var defaultLanguage = 'en_US';
var language = window.sessionStorage ? window.sessionStorage.language : $cookieStore.get('web.language');
if (language) {
this.setLang(findLanguage(language, defaultLanguage));
} else if ($rootScope.currentSchool && $rootScope.currentSchool.language) {
this.setLang(findLanguage($rootScope.currentSchool.language, defaultLanguage));
} else {
this.setLang(defaultLanguage);
}
};
$rootScope.setLang = function(key) {
if (window.sessionStorage) {
window.sessionStorage.language = key;
} else {
$cookieStore.put('web.language', key); //向cookie里存入language
}
useLang(key);
};
var prekey;
function useLang(key) {
// console.log(key);
// console.log("----------------------");
// console.log($rootScope.currentSchool.translationStyle);
if (key == 'Chinese' && $rootScope.currentSchool.translationStyle != 'default') {
// console.log('--lang 1');
$translate.fallbackLanguage('Chinese');
switch ($rootScope.currentSchool.translationStyle) {
case 'k12':
$translate.use('Chinese_k12');
break;
case 'university':
$translate.use('Chinese_university');
// $translate.fallbackLanguage('Chinese');
break;
case 'association':
console.log('-- associate');
$translate.use('Chinese_associate');
// $translate.fallbackLanguage('Chinese');
break;
case 'gsx':
$translate.use('Chinese_gsx');
// $translate.fallbackLanguage('Chinese');
break;
case 'stec':
$translate.use('Chinese_stec');
// $translate.fallbackLanguage('Chinese');
break;
case 'sgpower':
$translate.use('Chinese_sgpower');
//$translate.fallbackLanguage('Chinese');
break;
case 'poiz':
$translate.use('Chinese_poiz');
// $translate.fallbackLanguage('Chinese');
break;
case 'iaf':
$translate.use('Chinese_iaf');
// $translate.fallbackLanguage('Chinese');
break;
case 'hdb':
$translate.use('Chinese_hdb');
// $translate.fallbackLanguage('Chinese');
break;
default:
$translate.use('Chinese');
// console.log('undefined translationStyle');
}
} else if (key == 'Chinese') {
// console.log("-- lang c");
$translate.fallbackLanguage('Chinese');
$translate.use(key); //angualr translate 设置语言 ----会调用不同的json文件
} else if (key == 'France') {
// console.log("-- lang c");
$translate.fallbackLanguage('France');
$translate.use(key); //angualr translate 设置语言 ----会调用不同的json文件
} else {
// console.log("-- lang e");
$translate.fallbackLanguage('en_US');
// console.log($rootScope.currentSchool.translationStyle);
switch ($rootScope.currentSchool.translationStyle) {
case 'association':
// console.log('-- associate cn');
$translate.use('en_associate');
break;
case 'gsx':
$translate.use('en_gsx');
break;
case 'stec':
$translate.use('en_stec');
break;
case 'poiz':
$translate.use('en_poiz');
break;
case 'hdb':
$translate.use('en_hdb');
break;
case 'sgpower':
$translate.use('en_sgpower');
break;
case 'iaf':
$translate.use('en_iaf');
break;
default:
$translate.use('en_normal');
//$translate.fallbackLanguage('en_US');
break; //angualr translate 设置语言 ----会调用不同的json文件
// console.log('undefined translationStyle');
}
}
$rootScope.currentLanguage = key;
// console.log($rootScope.currentLanguage);
angular.copy(locales[key], $locale);
/* if(key!=prekey){
$timeout(useLang,1000);
prekey=key;
}*/
}
this.getVimeoLinkfromUrl = function(content) {
var strings = content.split('vimeo.com/');
var idstr = strings[1].split('/');
var id = idstr[idstr.length - 1];
// var content = $sce.trustAsResourceUrl("//player.vimeo.com/video/" + id);
return $sce.trustAsResourceUrl("//player.vimeo.com/video/" + id);
//return id;
}
this.getYoutubeLinkfromUrl = function(content) {
var id = '';
var url = content.replace(/(>|<)/gi, '').split(/(vi\/|v=|\/v\/|youtu.be\/|\/embed\/)/);
if (url[2] !== undefined) {
id = url[2].split(/[^0-9a-z-_]/i);
id = id[0];
} else {
id = url;
}
return $sce.trustAsResourceUrl('//www.youtube.com/embed/' + id + '?&controls=1&showinfo=0&autoplay=1');
//return id;
}
// $rootScope.initLang();
this.showInfo = function(info, callback) {
var pre = info && (info.indexOf("\n") != -1);
$uibModal.open({
templateUrl: "components/dialog/info-dlg.html",
// controller: "SendMsgDlgCtrl",
controller: 'Info_DlgCtrl',
size: "lg",
controllerAs: 'ctrl',
resolve: {
info: function() {
return info;
},
pre: function() {
return pre;
},
}
}).result.then(callback, callback);
};
this.showHTML = function(title, content, callback) {
$uibModal.open({
templateUrl: "components/dialog/html-dlg.html",
// controller: "SendMsgDlgCtrl",
controller: 'HTML_DlgCtrl',
size: "lg",
controllerAs: 'ctrl',
resolve: {
title: function() {
return title;
},
content: function() {
return content;
},
}
}).result.then(callback, callback);
};
this.showNoBlockSuccess = this.showNoBlockInfo = function(info) {
if (typeof(info) == "string" && info.length !== 0) {
toastr.success($translate.instant(info), {
timeOut: 1000
});
}
};
this.POST = function(url, info, callback) {
ApiService.post(url, info).then(function(result) {
if (result.data.success) {
if (callback) {
callback(result.data.data);
} else {
_this.showNoBlockInfo('Update Successful!');
$state.reload();
}
} else {
_this.showError('Update Fail!');
console.log(result.data);
}
});
};
this.convertPNG = function(text, width, height, callback) {
if (!text) {
return;
}
var data = {
text: text,
width: width,
height: height,
}
var url = '//' + LocalConfig.OSSSERVER + '/svgtopng';
if (LocalConfig.OSSSERVER.charAt(0) == '/') {
url = LocalConfig.OSSSERVER +'/svgtopng';
}
var info = {
url: url,
method: "POST",
headers: {
'Content-Type': 'application/json'
},
withCredentials: true,
timeout: 600000,
data: data,
}
console.log(info);
$http.defaults.useXDomain = true;
// console.log(info);
$http(info).success(callback)
}
this.showError = function(error, callback) {
console.log(typeof error);
console.dir(error);
var pre = angular.isString(error) && (error.indexOf("\n") > -1);
console.log(pre);
$uibModal.open({
templateUrl: "components/dialog/info-dlg.html",
size: "lg vertical-align-center",
controller: 'ErrorDlgCtrl',
resolve: {
error: function() {
return error;
},
pre: function() {
return pre;
},
}
}).result.then(callback, callback);
};
this.showNoBlockErr = function(error) {
if (typeof(error) == "string" && error.length !== 0) {
if (deviceDetector.isMobile() && !deviceDetector.isTablet()) {
toastr.error(error, {
timeOut: 1000
});
} else {
toastr.error(error);
}
}
};
this.getArray = function(obj, array, level, parent) {
if ((typeof obj) === "object") {
for (var key in obj) {
var fullkey;
if (parent == '') {
fullkey = key;
} else {
fullkey = parent + "," + key;
}
var _i = {
key: fullkey,
value: level,
title: key,
items: [],
};
array.push(_i);
var info = obj[key];
if (typeof info === "object") {
_this.getArray(info, _i.items, level + 1, fullkey);
}
}
}
}
this.showConfirm = function(info, callback, fail) {
this.confirm({
message: info
}).then(callback, fail);
};
this.messageBox = function(options) {
return $uibModal.open({
templateUrl: 'components/dialog/message-dlg.html',
controller: 'MessageboxCtrl',
// backdrop: 'static',
//size: 'sm',
resolve: {
options: function() {
return options;
}
}
}).result;
};
this.alert = function(options) {
options = options || {};
options.title = options.title || $translate.instant("Alert");
return this.messageBox(options);
};
this.confirm = function(options) {
options = options || {};
options.title = options.title || $translate.instant("Confirm");
options.button = options.button || $translate.instant("Yes");
options.button_dismiss = options.button_dismiss || $translate.instant("No");
options.icon = options.icon || "text-warning fa fa-question-circle fa-4x";
return this.messageBox(options);
};
this.changeText = function(title, content) {
//console.log(user);
console.log("show text : " + title + ' / ' + content);
return $uibModal.open({
templateUrl: "components/dialog/changetext-dlg.html",
//size: "lg",
controller: 'ChangeTextCtrl',
controllerAs: 'ctrl',
resolve: {
title: function() {
return title;
},
content: function() {
return content;
}
}
}).result;
};
this.sendmsgdlg = function(sendTo) {
return $uibModal.open({
templateUrl: "components/dialog/sendmessage-dlg.html",
controller: "SendMsgDlgCtrl",
controllerAs: 'ctrl',
resolve: {
sendTo: function() {
return sendTo;
}
}
}).result;
};
this.SpeechEQ = function(text, lang, file, callback) {
var apiurl = '/speecheq';
var url = '//' + LocalConfig.OSSSERVER + apiurl;
if (LocalConfig.OSSSERVER.charAt(0) == '/') {
url = LocalConfig.OSSSERVER + apiurl;
}
var _protocol = window.location.protocol;
if (_protocol.indexOf('https') > -1 && LocalConfig.HTTPSFILESERVER) {
url = LocalConfig.HTTPSFILESERVER + apiurl;
}
var uploader = new FileUploader({
url: url,
});
var info = {
// path: path,
text: text,
lang: lang,
};
// file.name=fileName;
console.log(file);
uploader.formData.push(info);
uploader.addToQueue(file);
uploader.uploadAll();
uploader.onCompleteItem = function(item, response) {
console.log(response);
if (response.success) {
console.log(response);
callback(response.value);
} else {
console.log('--- error ---');
callback({
result: false,
message: response.error || 'Not able to decode!'
});
}
}
}
this.directUploadFile = function(setting) {
if (setting.maxheight || setting.width || setting.cropping) {
var promise = croppingHelper.openCroppingDlg(setting);
return promise;
} else {
var dlgHtml;
var dlgCtrl;
if (!LocalConfig.OSSSERVER) { // direct upload to aws
dlgHtml = 'components/upload/awsupload-dlg.html';
dlgCtrl = 'awsUploadCtrl';
} else if (LocalConfig.OSSSERVER) { // direct upload to alicloud
dlgHtml = 'components/upload/alicloudupload-dlg.html';
dlgCtrl = 'alicloudUploadCtrl';
} else {
_this.showError('please set LocalConfig.UPLOADSERVER to aws or alicloud');
return;
}
var r = $uibModal.open({
templateUrl: dlgHtml,
controller: dlgCtrl,
controllerAs: 'ctrl',
backdrop: 'static',
resolve: {
setting: function() {
return setting;
}
}
}).result;
console.info(r);
if (setting.promise) {
return r;
} else {
r.then(function(data) {
if (data.result) {
_this.showNoBlockSuccess(data.message);
$state.reload();
} else {
_this.showError(data.message);
}
});
}
}
};
this.uploadFile = function(setting) {
console.log(setting);
var template = 'components/upload/oss-upload-dlg.html';
var controller = 'UploadDialogOSSCtrl';
if (!LocalConfig.OSSSERVER) { // direct upload to aws
var template = 'components/upload/aws-upload-dlg.html';
var controller = 'UploadDialogAWSCtrl';
console.log("--- aws ---");
}
var r = $uibModal.open({
templateUrl: template,
controller: controller,
controllerAs: 'ctrl',
backdrop: 'static',
resolve: {
setting: function() {
return setting;
}
}
}).result;
if (setting.promise) {
return r;
} else {
r.then(function(data) {
if (data.result) {
_this.showInfo(data.message);
$state.reload();
} else {
_this.showError(data.message);
}
});
}
};
this.showVideo = function(videos, idx) {
var r = $uibModal.open({
templateUrl: 'components/course/video.dlg.html',
controller: 'CourseVideoDialogCtrl',
controllerAs: 'ctrl',
size: "lg",
backdrop: 'static',
resolve: {
videos: function() {
return videos;
},
idx: function() {
return idx;
}
}
}).result;
return r;
};
this.showWiki = function(key, sid) {
var r = $uibModal.open({
templateUrl: 'components/course/wiki.dlg.html',
controller: 'CourseWikiDialogCtrl',
controllerAs: 'ctrl',
backdrop: 'static',
size: "lg",
resolve: {
key: function() {
return key;
},
sid: function() {
return sid;
},
}
}).result;
return r;
};
this.getAvatarSrc = function(user) {
var userId = user._id || user.id;
if (!user.avatar || user.avatar.indexOf("http://www.gravatar.com") > -1) {
return "assets/images/default-person-icon.png";
} else {
return LocalConfig.SHOST + "/public/" + LocalConfig.RES + '/avatar/' + userId + '/' + user.avatar;
}
};
this.download = function(filename, text) {
var pom = document.createElement('a');
pom.setAttribute('href', 'data:text/plain;charset=utf-8,\uFEFF' + encodeURIComponent(text));
pom.setAttribute('download', filename);
if (document.createEvent) {
var event = document.createEvent('MouseEvents');
event.initEvent('click', true, true);
pom.dispatchEvent(event);
} else {
pom.click();
}
};
this.getHexRandomColorStr = function() {
function gethex() {
var val = Math.floor(Math.random() * 256).toString(16).toUpperCase();
if (val.length < 2) {
val = '0' + val;
}
return val;
}
var color = '#' + gethex() + gethex() + gethex();
return color;
}
this.showDeleteConfirm = function(callback) {
this.alert({
message: $filter('trans')({
eng: "Are you sure to delete this item ?!",
chn: '确定要删除吗?'
})
}).then(callback);
};
this.isIE = function() {
var ua = navigator.userAgent;
/* MSIE used to detect old browsers and Trident used to newer ones*/
var is_ie = ua.indexOf("MSIE ") > -1 || ua.indexOf("Trident/") > -1 || typeof InstallTrigger !== 'undefined';
return is_ie;
}
}).controller('MessageboxCtrl', function($scope, options) {
$scope.title = options.title || "Message";
$scope.message = options.message || "";
$scope.btn = options.button || "Ok";
$scope.btn_dismiss = options.button_dismiss || "Cancel";
$scope.icon = options.icon;
});