UNPKG

unserver-unify

Version:

797 lines (795 loc) 25.9 kB
'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; });