function MainCtrl($rootScope, $scope, synConn, emAuth, $timeout, EmDrafts, $location, EmEml) { $scope.workplace = null; $scope.fullUserName = null; $scope.authenticated = false; $scope.email = null; $scope.template = null; $scope.draft = null; $scope.sub = null; $scope.itemParams = null; $scope.toggleCollaped = function(){ $rootScope.isCollapsed = !$rootScope.isCollapsed; }; $scope.item = null; $scope.setItem = function(item) { $scope.item = item; window.item = item; }; $scope.emlCanBeSent = false; $scope.emlCanBeStopped = false; $scope.$watch('item.Status', function(itms){ if ( itms ) { $scope.emlCanBeSent = EmEml.canBeSent(itms); $scope.emlCanBeStopped = EmEml.canBeStopped(itms); } }); $scope.startSending = function() { if ( $scope.item ) { $scope.item.startSending(); } } $scope.stopSending = function(){ if ( $scope.item ) { $scope.item.stopSending(); } }; $scope.alerts = []; $scope.alert = function(a) { $scope.alerts.push(a); var idx = $scope.alerts.length - 1; $timeout(function() { $scope.alerts.splice(idx, 1); }, 3000); }; if ( emAuth.get('userName') ) { $scope.fullUserName = emAuth.get('userName'); } $scope.setUserName = function(userName) { emAuth.set('userName', userName); $scope.fullUserName = userName; }; $scope.setWorkplace = function(wp) { $scope.workplace = wp; emAuth.set('workplace', wp); }; $scope.setEmail = function(eml) { $scope.email = eml; }; $scope.setTemplate = function(tpl) { $scope.template = tpl; } $scope.setDraft = function(drf) { $scope.draft = drf; }; $scope.setWPS = function(wps) { $scope.workplaces = wps; }; $scope.setItemParams = function(params) { $scope.itemParams = params; }; $scope.setSub = function(s) { $scope.sub = s; } $scope.compose = function() { (new EmDrafts()).createDraft(function(drf){ window.location.hash = '#/workplaces/'+emAuth.get('workplace').ID+'/drafts/'+drf.ID+'/edit'; }); }; // preview for mobile devices $scope.showPreview = false; $scope.togglePreview = function() { $scope.showPreview = !$scope.showPreview; }; $scope.showExclusionList = false; $scope.toggleExclusionList = function() { $scope.showExclusionList = !$scope.showExclusionList; }; } var LS = (function(){ var l = window.localStorage; return { get: function(key) { var v = l.getItem(key); if ( v && v.indexOf('__JSON__') === 0 ) { var vObj = null; try { vObj = JSON.parse(v.substr(8)) v = vObj; } catch(e) { console.error('cannot parse localStorage value '+v); } } return v; }, set: function(key, value) { if ( typeof value !== 'string' ) { value = '__JSON__'+JSON.stringify(value); } l.setItem(key, value); } } })(); function LoginCtrl($window, $scope, $http, emAuth, synConn) { var u = (window.location+'').match(/http(s|)\:\/\/([^\/]+)(?:\:(\d+)|)/); var port = u[3] || null, secure = (u[1] == 's'); if ( !port ) { port = secure ? '443' : '50888'; } else if ( port == '443' ) { secure = true; } $scope.conn = { host: u[2]+':'+port, email: '', password: '', secure: secure }; $scope.remember = false; $scope.savedHosts = LS.get('savedHosts') || []; var lastUsedHostID = LS.get('lastUsedHostID'); if ( lastUsedHostID !== null ) { $scope.conn = angular.extend({}, $scope.savedHosts[lastUsedHostID]); if ( typeof $scope.conn.secure === 'undefined' ) { $scope.conn.secure = !!$scope.conn.host.match(/\:443$/); } } $scope.loadHost = function(idx){ var h = $scope.savedHosts[idx]; if ( h ) { $scope.conn = angular.extend({}, h); lastUsedHostID = idx; } else { console.error('cannot load host data with index '+idx); } }; function isHostSaved(hostData) { var saved = false; angular.forEach($scope.savedHosts, function(conn, i){ if ( conn.host == hostData.host && conn.email == hostData.email && conn.password == hostData.password ) { saved = i; return false; // breaking the loop } }); return saved; } $scope.signIn = function() { var hostData = { host: $scope.conn.host.trim(), email: $scope.conn.email.trim(), password: $scope.conn.password.trim() }; var hostSaved = isHostSaved(hostData); if ( $scope.remember ) { if ( hostSaved === false ) { $scope.savedHosts.push(hostData); LS.set('savedHosts', $scope.savedHosts); lastUsedHostID = $scope.savedHosts.length-1; } else { lastUsedHostID = hostSaved; } } if ( lastUsedHostID !== null ) { LS.set('lastUsedHostID', lastUsedHostID); } var arr = $scope.conn.host.split(':'), host = arr[0], port = arr[1] || '50888'; emAuth .set('host', host) .set('port', port) .set('email', $scope.conn.email) .set('password', $scope.conn.password) .set('secure', $scope.conn.secure); synConn.setOpts({ host: host, port: port, email: $scope.conn.email, password: $scope.conn.password, secure: $scope.conn.secure }); synConn.touch('wps', function(err, sa){ if ( err ) { $scope.error = err; } else { emAuth.setAuthenticated(true); $scope.setUserName(sa.User); $window.location.hash = '#/workplaces'; } }); }; } function WorkplacesCtrl($scope, $stateParams, wps) { //var wps = $route.current.locals.wps; $scope.setWPS(wps); } WorkplacesCtrl.resolve = { wps: function($q, $http, synConn) { var defer = $q.defer(); synConn .http({ uri: 'wps/GetUserWorkplaces?UserName={email}' }) .success(function(data){ defer.resolve(data); }) .error(function(data, status, headers, config){ defer.reject(data); }); return defer.promise; } } app.controller('TopToolbarCtrl', function($scope){ //console.log('TopToolbarCtrl section: '+$scope.section); //$scope.itemPath }); app.controller('SidebarMenuCtrl', function($scope, emCategories){ var cats = emCategories.getAll(); if ( cats.then ) { cats.then(function(c){ $scope.templateCats = c; }); } else { $scope.templateCats = cats; } }); function openPreview(item) { // // var zoomStyle = [''].join(''); // // zoomStyle = []; console.warn('zoom style disabled'); // // data.EmailSource = data.EmailSource.replace(/(<\/head>)/i, zoomStyle+'$1'); // // data.EmailSource = emUtils.expandAssetURLs(data.EmailSource, data.BaseURL); if ( item.then ) { item.then( function(itm){ openPreview(itm); }, function(err){ console.error(err); } ); return; } var body = item.getBody(); if ( body.then ) { body.then( function(b){ setIFrameContent(b); }, function(err){ if ( err instanceof URIError || (err+'').match(/URI\s+malformed/i) ) { err = 'cannot unpack EmailSource'; } setIFrameContent('An error occured: '+err); } ); } else { setIFrameContent(body); } } function setIFrameContent(data) { var iframeId = 'preview-container-iframe', container = document.getElementById('preview-container'), iframe = document.getElementById(iframeId); if ( !container ) { return; } if ( !iframe ) { var iframe = document.createElement('iframe'); container.appendChild(iframe); iframe.id = iframeId; } var doc = iframe.document; if ( iframe.contentDocument ) { doc = iframe.contentDocument; // For NS6 } else if(iframe.contentWindow) { doc = iframe.contentWindow.document; // For IE5.5 and IE6 } // Put the content in the iframe doc.open(); doc.writeln(data); doc.close(); } function CtrlConsole($scope, synConn) { $scope.params = []; $scope.headers = []; $scope.method = 'GET'; $scope.uri = '/wp/1/settings/Drafts?Select=*&where=deleted=0&STARTINDEX=0&RESULTS=10'; $scope.contentType = ''; $scope.response = ''; $scope.useRawBody = false; $scope.rawBodyBtn = 'Use raw body'; $scope.rawBody = ''; $scope.$watch('useRawBody', function(use){ $scope.rawBodyBtn = $scope.useRawBody ? 'Don\'t use raw body' : 'Use raw body'; }); $scope.addParam = function() { $scope.useRawBody = false; $scope.params.push({ name: '', value: '' }) }; $scope.toggleRawBody = function(){ $scope.useRawBody = !$scope.useRawBody; if ( $scope.useRawBody ) { $scope.params = []; } }; $scope.delParam = function(idx) { $scope.params.splice(idx, 1); }; $scope.addHeader = function() { $scope.headers.push({ name: '', value: '' }) }; $scope.delHeader = function(idx) { $scope.headers.splice(idx, 1); }; $scope.sendRequest = function() { var uri = $scope.uri; if ( uri[0] === '/' ) { uri = uri.substr(1); } var params = $scope.params.length ? {} : null; angular.forEach($scope.params, function(p){ params[p.name] = p.value; }); var headers = {}; if ( $scope.contentType ) { headers['Content-Type'] = $scope.contentType; } angular.forEach($scope.headers, function(h){ headers[h.name] = h.value; }); var opts = { method: $scope.method, uri: uri, headers: headers, synReq: true }; if ( params ) { opts[ ( opts.method === 'GET' ) ? 'params' : 'data' ] = params; } if ( $scope.useRawBody ) { opts.data = $scope.rawBody; } synConn .http(opts) .success(function(data){ if ( typeof data !== 'string' ) { data = JSON.stringify(data, null, '\t'); } $scope.response = data; }) .error(function(err){ $scope.$apply(function(){ $scope.response = err.status+' : '+err.message; }); }); }; }