743 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			743 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| (function () {
 | |
| 'use strict';
 | |
| 
 | |
| var app = window.app;
 | |
| //
 | |
| // Angular file upload hack
 | |
| //
 | |
| // TODO modularize for reuse
 | |
| function analyzeFile(file, vm) {
 | |
|   vm.isZip = /\.zip$/.test(file.name);
 | |
|   vm.unzip = vm.isZip;
 | |
|   vm.stripZip = vm.isZip;
 | |
|   return vm;
 | |
| }
 | |
| 
 | |
| /*
 | |
| function handleFiles(ev) {
 | |
|   var selector = 'js-file-upload';
 | |
|   var $scope;
 | |
|   var vm;
 | |
| 
 | |
|   if ('INPUT' !== ev.target.tagName || 'file' !== ev.target.type || -1 === ev.target.className.indexOf(selector)) {
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   $scope = angular.element(ev.target).scope();
 | |
|   // 'vm' is the Controller As name.
 | |
|   vm = $scope.vm;
 | |
|   vm.currentFiles = ev.target.files;
 | |
|   analyzeFile(vm.currentFiles[0], vm);
 | |
| 
 | |
|   $scope.$digest();
 | |
|   console.log('[handleFiles] vm.currentFiles:');
 | |
|   console.log(vm.currentFiles);
 | |
| }
 | |
| window.document.body.addEventListener('change', handleFiles);
 | |
| */
 | |
| 
 | |
| app.directive('daplieFileChange', [function () {
 | |
|   return {
 | |
|     restrict: 'A',
 | |
|     require:"ngModel",
 | |
|     link: function (scope, element, attrs, ngModel) {
 | |
|       element.bind('change', function (event) {
 | |
|         var files = event.target.files;
 | |
|         ngModel.$setViewValue(files[0]);
 | |
|         scope.$eval(attrs.daplieFileChange);
 | |
|       });
 | |
|     }
 | |
|   };
 | |
| }]);
 | |
| 
 | |
| app.directive('fileTree', [function () {
 | |
|   return {
 | |
|     restrict: 'EA',
 | |
|     templateUrl: '/templates/widgets/filetree.html',
 | |
|     controller: 'websiteCtrl as vm'
 | |
|   };
 | |
| }]);
 | |
| 
 | |
| app.controller('websiteCtrl', [
 | |
|   '$scope', '$q', 'Auth', 'azp@oauth3.org', '$timeout', '$sce'
 | |
| , function ($scope, $q, Auth, Oauth3, $timeout, $sce) {
 | |
| 
 | |
|   var vm = this;
 | |
|   var angular = window.angular;
 | |
|   vm.domains = [];
 | |
|   //vm.unzipPath = '/';
 | |
|   vm.uploadPath = '/';
 | |
| 
 | |
|   // already validated
 | |
|   function domainIsVerified(r) {
 | |
|     return r.verifiedAt || r.mode;
 | |
|   }
 | |
| 
 | |
|   Auth.api = function (apiname, opts) {
 | |
|     var els = [];
 | |
| 
 | |
|     return $q.all(Auth.sessions.map(function (session) {
 | |
| 
 | |
|       return Auth.get(session).then(function (oauth3) {
 | |
| 
 | |
|         return oauth3.api(apiname, {}).then(function (collection) {
 | |
| 
 | |
|           if (collection.error) {
 | |
|             // not all tokens support all apis
 | |
|             return;
 | |
|           }
 | |
| 
 | |
|           if (!Array.isArray(collection)) {
 | |
|             console.error('collection is not an array');
 | |
|             console.error(collection);
 | |
|             return;
 | |
|           }
 | |
| 
 | |
|           collection.forEach(function (el) {
 | |
|             els.push(el);
 | |
|             el.session = session.token.sub + '@' + session.token.iss;
 | |
|           });
 | |
| 
 | |
|         });
 | |
|       });
 | |
|     })).then(function (results) {
 | |
|       return els;
 | |
|     });
 | |
|   };
 | |
| 
 | |
|   vm.getDomains = function () {
 | |
|     return Auth.oauth3.api('domains.list', {}).then(function (result) {
 | |
|       vm.domains = result.registrations || result;
 | |
|     });
 | |
|   };
 | |
| 
 | |
|   vm.setDomain = function () {
 | |
|     if (!vm.domains || !vm.domains.length) {
 | |
|       vm.domain = { domain: vm.newDomain };
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     vm.domains.some(function (domain) {
 | |
|       if (domain.domain === vm.newDomain) {
 | |
|         vm.domain = domain;
 | |
|         return true;
 | |
|       }
 | |
|     });
 | |
| 
 | |
|     if (!vm.domain) {
 | |
|       vm.domain = { domain: vm.newDomain };
 | |
|     }
 | |
| 
 | |
|     if (!vm.domain.tld) {
 | |
|       var parts = vm.domain.domain.split('.');
 | |
|       vm.domain.sld = parts.shift();
 | |
|       vm.domain.tld = parts.join('.');
 | |
|     }
 | |
| 
 | |
|     vm.setRecord();
 | |
|   };
 | |
| 
 | |
|   vm.selectDomain = function (domain) {
 | |
|     vm.domain = domain; //vm.selectedDomain.description;
 | |
|     vm.newDomain = vm.domain.domain;
 | |
| 
 | |
|     return Auth.api('dns.list', { }).then(function (records) {
 | |
|       records = records.filter(function (r) {
 | |
|         return /^A(AAA)?$/i.test(r.type) && ((r.sld + '.' + r.tld) === vm.domain.domain || r.zone === vm.domain.domain);
 | |
|       });
 | |
|       vm.records = records;
 | |
|       records.forEach(function (record) {
 | |
|         if (!record.sub) {
 | |
|           record.sub = record.host.replace('.' + record.zone, '');
 | |
|           if (record.host === record.zone) {
 | |
|             record.sub = '@';
 | |
|           }
 | |
|         }
 | |
|       });
 | |
|       console.log('[selectDomain] dns records:');
 | |
|       console.log(records);
 | |
|     });
 | |
|   };
 | |
| 
 | |
|   vm.setRecord = function () {
 | |
|     // TODO set record based on (record.host === sub + domain.domain)
 | |
|     var sub = vm.newRecord;
 | |
| 
 | |
|     if ('@' === sub) {
 | |
|       sub = '';
 | |
|     }
 | |
|     vm.record = { sub: sub, host: (sub ? sub + '.' : '') + vm.domain.domain };
 | |
|     vm.currentHost = vm.record.host;
 | |
| 
 | |
|     console.log('[setRecord] vm.record:');
 | |
|     console.log(vm.record);
 | |
|   };
 | |
| 
 | |
|   vm.selectRecord = function (record) {
 | |
|     vm.record = record;
 | |
|     vm.newRecord = record.sub;
 | |
|     vm.currentHost = record.host; // .replace(new RegExp('\\.' + vm.domain.domain.replace(/\./g, '\\.') + '$', ''));
 | |
|   };
 | |
| 
 | |
|   vm._uploadFileVm = function (pkg, opts) {
 | |
|     return vm._uploadFile(pkg, {
 | |
|       domain: opts.currentHost
 | |
|     , tld: opts.domain.tld
 | |
|     , sld: opts.domain.sld
 | |
|     , sub: opts.domain.sub
 | |
|     , newFile: opts.newFile
 | |
|     , uploadPath: opts.uploadPath
 | |
|     , progress: opts
 | |
|     });
 | |
|   };
 | |
|   vm._uploadFile = function (pkg, opts) {
 | |
|     opts.progress = opts.progress || opts;
 | |
|     return pkg.add({
 | |
|       hostname: opts.domain
 | |
|     , domain: opts.domain
 | |
|     , tld: opts.tld
 | |
|     , sld: opts.sld
 | |
|     //, sub: opts.record.sub
 | |
|     , multipart: { site: opts.newFile }
 | |
|     , progress: function (ev) {
 | |
|         // TODO must digest
 | |
|         opts.progress.uploadPercent = Math.round((ev.loaded / ev.total) * 100);
 | |
|         // TODO GiB, MiB, KiB, etc
 | |
|         opts.progress.uploadTotal = (ev.total / (1024 * 1024)).toFixed(2);
 | |
|         opts.progress.uploadProgress = (ev.loaded / (1024 * 1024)).toFixed(2);
 | |
|       }
 | |
|     , unzip: opts.unzip
 | |
|     , strip: opts.stripZip
 | |
|     , path: opts.uploadPath
 | |
|     }).then(function (result) {
 | |
|       opts.progress.uploadTotal = 0;
 | |
|       window.alert(JSON.stringify(result));
 | |
|     });
 | |
|   };
 | |
| 
 | |
|   vm._isSubDomain = function (sub, domain) {
 | |
|     return -1 !== ('.' + sub).indexOf(('.' + domain));
 | |
|   };
 | |
| 
 | |
|   vm.Sites = {};
 | |
|   vm.Sites.create = function () {
 | |
|     var pkg = Auth.oauth3.pkg('www@daplie.com');
 | |
|     var parts;
 | |
|     var sub;
 | |
|     var sld;
 | |
|     var tld;
 | |
| 
 | |
|     /*
 | |
|     //vm.unlock('webpreneur');
 | |
|     if (!vm.currentFiles || !vm.currentFiles.length) {
 | |
|       window.alert('No files chosen.');
 | |
|       return;
 | |
|     }
 | |
|     if (1 !== vm.currentFiles.length) {
 | |
|       window.alert('Too many files chosen.');
 | |
|       return;
 | |
|     }
 | |
|     */
 | |
|     if (!vm.newFile) {
 | |
|       window.alert('No file chosen.');
 | |
|       return;
 | |
|     }
 | |
|     if (!vm.currentHost) {
 | |
|       window.alert('No hostname chosen.');
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     if (vm.domain) {
 | |
|       if (!vm.domain.tld || !vm.domain.sld) {
 | |
|         parts = vm.domain.domain.split('.');
 | |
|         sld = parts.shift();
 | |
|         tld = parts.join('.');
 | |
|       } else {
 | |
|         sld = vm.domain.sld;
 | |
|         tld = vm.domain.tld;
 | |
|       }
 | |
|     } else {
 | |
|       parts = vm.currentHost.split('.');
 | |
|       // TODO get list of tlds
 | |
|       tld = parts.pop();
 | |
|       sld = parts.pop();
 | |
|       sub = parts.join('.');
 | |
|     }
 | |
| 
 | |
|     if (vm.sites.some(function (r) {
 | |
|       return (-1 !== ('.' + vm.currentHost).indexOf(('.' + r.domain))) && domainIsVerified(r);
 | |
|     })) {
 | |
|       vm._uploadFileVm(pkg, vm);
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     // We're making a request to claim a domain
 | |
|     // (because two users could both claim a single domain)
 | |
|     // We're claiming it at the top level (i.e. example.com)
 | |
|     // but we could also claim it at the subdomain level (needs UI update)
 | |
|     var domainReq = { sld: sld, tld: tld, sub: undefined };
 | |
|     return pkg.request(domainReq).then(function (result) {
 | |
|       var sess;
 | |
|       var prom;
 | |
|       var def;
 | |
| 
 | |
|       // can validate automatically
 | |
|       if (vm.domain.session && vm._isSubDomain(vm.currentHost, vm.domain.domain)) {
 | |
|         // this should always succeed
 | |
|         Auth.sessions.some(function (session) {
 | |
|           if (vm.domain.session === (session.token.sub + '@' + session.token.iss)) {
 | |
|             sess = session;
 | |
|             return session;
 | |
|           }
 | |
|         });
 | |
| 
 | |
|         if (sess) {
 | |
|           prom = Auth.get(sess).then(function (oauth3) {
 | |
|             return oauth3.api('dns.set', { sld: sld, tld: tld, sub: ('' + result.data.prefix), type: 'TXT', ttl: 300, value: result.data.challenge });
 | |
|           });
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       if (!prom) {
 | |
|         def = $q.defer();
 | |
|         // must validate manually
 | |
|         window.alert(
 | |
|           "Please set a TXT record for '"
 | |
|         + ('' + result.data.prefix) + '.' + sld + '.' + tld
 | |
|         + "' with the value '" + result.data.challenge + "' and then continue."
 | |
|         );
 | |
|         def.resolve();
 | |
|         prom = def.promise;
 | |
|       }
 | |
| 
 | |
|       return prom.then(function () {
 | |
|         return pkg.claim(domainReq).then(function (result) {
 | |
|           return vm._uploadFileVm(pkg, vm);
 | |
|         });
 | |
|       });
 | |
| 
 | |
|     });
 | |
|   };
 | |
|   vm.Sites.setUpload = function (r) {
 | |
|     console.log("Hey! At least it can tell if there's a change!");
 | |
|     analyzeFile(r.newFile, r);
 | |
|     vm.showCompleteFileUploadBtn = true;
 | |
|     console.log(r);
 | |
| 
 | |
|   };
 | |
|   vm.Sites.upload = function (r) {
 | |
|     if (r.uploadPath === undefined) {
 | |
|       r.uploadPath = vm.autoPopulateWebPath;
 | |
|     }
 | |
|     var pkg = Auth.oauth3.pkg('www@daplie.com');
 | |
|     //analyzeFile(r.newFile, r);
 | |
|     vm._uploadFile(pkg, r);
 | |
|   };
 | |
|   vm.Sites.archive = function (r) {
 | |
|     var pkg = Auth.oauth3.pkg('www@daplie.com');
 | |
| 
 | |
|     return pkg.archive({
 | |
|       hostname: r.domain
 | |
|     , domain: r.domain
 | |
|     , tld: r.tld
 | |
|     , sld: r.sld
 | |
|     //, sub: vm.record.sub
 | |
|     //, path: vm.uploadPath
 | |
|     }).then(function (result) {
 | |
|       window.alert(JSON.stringify(result));
 | |
|       // TODO use iframe to initiate download?
 | |
|       window.open(result.data.url);
 | |
|     });
 | |
|   };
 | |
| 
 | |
|   vm.Sites.remove = function (r, opts) {
 | |
|     var pkg = Auth.oauth3.pkg('www@daplie.com');
 | |
|     debugger;
 | |
| 
 | |
|     return pkg.remove({
 | |
|       hostname: r.domain
 | |
|     , domain: r.domain
 | |
|     , tld: r.tld
 | |
|     , sld: r.sld
 | |
|     //, sub: vm.record.sub
 | |
|     , path: opts.path || r.path
 | |
|     , confirm: opts.confirm || r.confirm
 | |
|     }).then(function (result) {
 | |
|       window.alert(JSON.stringify(result));
 | |
|     });
 | |
|   };
 | |
| 
 | |
|   vm.deleteFilesFrom = function (r, path, opts) {
 | |
|     var confirmMessage;
 | |
|     vm.autoPopulateWebPath;
 | |
|     opts = {};
 | |
| 
 | |
|     if (path === undefined) {
 | |
|       confirmMessage = "Delete all files for this site?";
 | |
|       opts.path = '/';
 | |
|       opts.confirm = true;
 | |
|     } else if (path.includes(".")) {
 | |
|       confirmMessage = "Delete this file?";
 | |
|       if (vm.autoPopulateWebPath === undefined) {
 | |
|         opts.path = path;
 | |
|       } else {
 | |
|         opts.path = vm.autoPopulateWebPath + path;
 | |
|       }
 | |
|     } else {
 | |
|       confirmMessage = "Delete all items in this folder?";
 | |
|       if (vm.autoPopulateWebPath === undefined) {
 | |
|         opts.path = path;
 | |
|       } else if (vm.autoPopulateWebPath.includes(path)) {
 | |
|         opts.path = vm.autoPopulateWebPath;
 | |
|       } else {
 | |
|         opts.path = vm.autoPopulateWebPath + path;
 | |
|       }
 | |
|       opts.confirm = true;
 | |
|     }
 | |
|     if (!window.confirm(confirmMessage)) {
 | |
|       return;
 | |
|     }
 | |
|     vm.Sites.remove(r, opts);
 | |
|   };
 | |
| 
 | |
|   vm.breadcrumbs = ['root'];
 | |
|   vm.breadcrumbsPath = ['/'];
 | |
|   vm.breadcrumbPathClicked = false;
 | |
|   vm.webPathAutofill = '/';
 | |
|   vm.Sites.contents = function (r) {
 | |
|     vm.siteResults = r;
 | |
|     vm.directoryPath = r.newPath;
 | |
|     vm.siteDirectories = [];
 | |
|     vm.siteFiles = [];
 | |
|     var pkg = Auth.oauth3.pkg('www@daplie.com');
 | |
|     vm.getSiteContents = function (site, newPath) {
 | |
|       newPath = site;
 | |
|       site = vm.siteResults;
 | |
|       function updatePath (path) {
 | |
|         vm.currentFolder = path;
 | |
|         if (typeof path !== 'object') {
 | |
|           vm.breadcrumbs.push(path);
 | |
|           vm.breadcrumbsPath.push(path);
 | |
|           vm.autoPopulateWebPath = vm.breadcrumbsPath;
 | |
|           vm.autoPopulateWebPath.push('/');
 | |
|           vm.autoPopulateWebPath = vm.autoPopulateWebPath.join('');
 | |
|         } else {
 | |
|           vm.currentFolder = "hidden"
 | |
|         }
 | |
|         if (vm.breadcrumbPathClicked) {
 | |
|           if (path === 'root') {
 | |
|             vm.breadcrumbs = ['root'];
 | |
|             vm.breadcrumbsPath = ['/'];
 | |
|             vm.breadcrumbPathClicked = false;
 | |
|             vm.autoPopulateWebPath = "/";
 | |
|             vm.showUploadContainer = false;
 | |
|           } else {
 | |
|             var breadcrumbsPath = vm.breadcrumbsPath;
 | |
|             var breadcrumbs = vm.breadcrumbs;
 | |
|             var removeFromBreadcrumbsPath = breadcrumbsPath.indexOf(path) + 1;
 | |
|             var removeFromBreadcrumbs = breadcrumbs.indexOf(path) + 1;
 | |
|             vm.breadcrumbsPath = breadcrumbsPath.splice(0,removeFromBreadcrumbsPath);
 | |
|             vm.breadcrumbs = breadcrumbs.splice(0,removeFromBreadcrumbs);
 | |
|             var updatebreadcrumbsPath = vm.breadcrumbsPath;
 | |
|             vm.autoPopulateWebPath = updatebreadcrumbsPath.join('');
 | |
|             vm.autoPopulateWebPath = vm.autoPopulateWebPath+"/";
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|       updatePath(newPath);
 | |
|       return pkg.contents({
 | |
|         hostname: site.domain,
 | |
|         domain: site.domain,
 | |
|         tld: site.tld,
 | |
|         sld: site.sld,
 | |
|         //, sub: r.sub,
 | |
|         path: vm.breadcrumbsPath.join('/')
 | |
|       }).then(function (result) {
 | |
|         vm.folderStructure = result;
 | |
|         result.data.forEach(function(file) {
 | |
|           if (file.directory) {
 | |
|             vm.siteDirectories.push(file.name);
 | |
|           } else if (file.file) {
 | |
|             vm.siteFiles.push(file.name);
 | |
|           }
 | |
|         });
 | |
|       });
 | |
|     };
 | |
|     vm.getSiteContents(r);
 | |
|   };
 | |
| 
 | |
|   vm.cleanPath = function () {
 | |
|     vm.savedPath = vm.autoPopulateWebPath;
 | |
|     vm.autoPopulateWebPath = '';
 | |
|   }
 | |
| 
 | |
|   vm.showUploadButton = true;
 | |
|   vm.showFolderAction = true;
 | |
|   vm.createNewFolder = function (r) {
 | |
|     if (vm.savedPath === undefined) {
 | |
|       vm.savedPath = '/';
 | |
|     }
 | |
|     vm.savedPath;
 | |
|     vm.hideFolderInput = 'hidden';
 | |
|     vm.showFileUploadBtn = true;
 | |
|     r.uploadPath = vm.savedPath + vm.autoPopulateWebPath;
 | |
|   };
 | |
| 
 | |
|   vm.autoPopulateFolderName = function () {
 | |
|     console.log('blah', vm.currentFolder);
 | |
|     if (vm.currentFolder === 'hidden') {
 | |
|       vm.autoPopulateWebPath = '/'
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   vm.getDirectories = function (path) {
 | |
|     vm.siteDirectories = [];
 | |
|     vm.siteFiles = [];
 | |
|     var site = vm.siteResults;
 | |
|     vm.directoryPath = path;
 | |
|     vm.getSiteContents(path, site);
 | |
|     vm.showUploadButton = false;
 | |
|     vm.showFolderAction = false;
 | |
|   };
 | |
| 
 | |
|   vm.getDirectoriesFromBreadcrumbs = function (dir) {
 | |
|     if (dir === 'root') {
 | |
|       vm.showFolderAction = true;
 | |
|       vm.showUploadButton = true;
 | |
|     } else {
 | |
|       vm.showFolderAction = false;
 | |
|       vm.showUploadButton = false;
 | |
|     }
 | |
|     vm.breadcrumbPathClicked = true;
 | |
|     vm.siteDirectories = [];
 | |
|     vm.siteFiles = [];
 | |
|     vm.getSiteContents(dir);
 | |
|   };
 | |
| 
 | |
|   vm.triggerDeleteFolder = function (folder, r) {
 | |
|     console.log('DELETE FOLDER ->', folder);
 | |
|     vm.deleteFilesFrom(r, folder)
 | |
|   }
 | |
| 
 | |
|   vm.Shares = {};
 | |
|   vm.Shares.invite = function (r) {
 | |
|     var pkg = Auth.oauth3.pkg('www@daplie.com');
 | |
|     return pkg.invite({
 | |
|       comment: r.shareEmail
 | |
|     , email: r.shareEmail
 | |
|     , domain: r.domain
 | |
|     , tld: r.tld
 | |
|     , sld: r.sld
 | |
|     //, sub: r.sub
 | |
|     , path: r.sharePath
 | |
|     , mode: r.shareMode
 | |
|     }).then(function (result) {
 | |
|       var arr = r.sharedWith || [];
 | |
|       arr.push(result.data);
 | |
|       r.sharedWith = arr;
 | |
|       window.alert(JSON.stringify(result.data));
 | |
|     });
 | |
|   };
 | |
|   vm.Shares.accept = function () {
 | |
|     var pkg = Auth.oauth3.pkg('www@daplie.com');
 | |
|     return pkg.acceptInvite({
 | |
|       token: vm.Shares.inviteToken
 | |
|     }).then(function (result) {
 | |
|       window.alert(JSON.stringify(result));
 | |
|       vm.listSites();
 | |
|     });
 | |
|   };
 | |
|   vm.Shares.list = function (r) {
 | |
|     var pkg = Auth.oauth3.pkg('www@daplie.com');
 | |
|     return pkg.listShares({
 | |
|       domain: r.domain
 | |
|     , hostname: r.domain
 | |
|     , tld: r.tld
 | |
|     , sld: r.sld
 | |
|     //, sub: r.sub
 | |
|     , path: r.sharePath
 | |
|     }).then(function (result) {
 | |
|       console.log('list shares result:');
 | |
|       console.log(result);
 | |
|       r.sharedWith = result.data;
 | |
|       //r.usersnames = r.sharedWith.map().join(',');
 | |
|     });
 | |
|   };
 | |
|   vm.Shares.remove = function (r, s) {
 | |
|     console.log('Shares.remove');
 | |
|     var pkg = Auth.oauth3.pkg('www@daplie.com');
 | |
|     return pkg.removeShare({
 | |
|       domain: s.domain
 | |
|     , hostname: s.domain
 | |
|     , tld: s.tld
 | |
|     , sld: s.sld
 | |
|     //, sub: r.sub
 | |
|     , path: s.sharePath
 | |
|     , challenge: s.challenge
 | |
|     }).then(function (result) {
 | |
|       console.log('remove share result:');
 | |
|       console.log(result);
 | |
|       var index;
 | |
| 
 | |
|       r.sharedWith.forEach(function (_s, i) {
 | |
|         if (s.challenge === _s.challenge) {
 | |
|           index = i;
 | |
|         }
 | |
|       });
 | |
| 
 | |
|       r.sharedWith.splice(index, 1);
 | |
|       //r.usersnames = r.sharedWith.map().join(',');
 | |
|     });
 | |
|   };
 | |
| 
 | |
|   vm.listSites = function () {
 | |
|     var sites = [];
 | |
| 
 | |
|     return $q.all(Auth.sessions.map(function (session) {
 | |
| 
 | |
|       return Auth.get(session).then(function (oauth3) {
 | |
|         var pkg = oauth3.pkg('www@daplie.com');
 | |
| 
 | |
|         return pkg.list().then(function (result) {
 | |
|           var _sites = result.data;
 | |
| 
 | |
|           if (Array.isArray(_sites)) {
 | |
|             sites = _sites.concat(sites);
 | |
|             return;
 | |
|           }
 | |
| 
 | |
|           console.error('_sites is not an array');
 | |
|           console.error(_sites);
 | |
|         }, function (err) {
 | |
|           console.error('_sites had an error');
 | |
|           console.error(err);
 | |
|         });
 | |
|       });
 | |
|     })).then(function () {
 | |
|       sites.forEach(function (site) {
 | |
|         site.pending = !domainIsVerified(site);
 | |
|       });
 | |
|       // console.log('[listSites] sites:');
 | |
|       // console.log(sites);
 | |
|       vm.sites = sites;
 | |
|       vm.sites.forEach(function(site) {
 | |
|         site.urlSafeDomain = "https://" + site.domain;
 | |
|         site.urlSafeDomain = $sce.trustAsResourceUrl(site.urlSafeDomain);
 | |
|       });
 | |
|     });
 | |
|   };
 | |
| 
 | |
|   //vm.getDomains();
 | |
|   Auth.api('domains.list', {}).then(function (els) {
 | |
|     // console.log('[init] domains.list els:');
 | |
|     // console.log(els);
 | |
|     vm.domains = els;
 | |
|     $scope.domain = vm.domains;
 | |
|   });
 | |
|   vm.listSites();
 | |
| 
 | |
|   vm.triggerDropdown = function() {
 | |
|     $timeout(function() {
 | |
|       var el = document.querySelector('.trigger-dropdown');
 | |
|       angular.element(el).triggerHandler('focus');
 | |
|     }, 0);
 | |
|   };
 | |
| 
 | |
|   $scope.$watch('vm.selectedDomain', function (domainSelected) {
 | |
|     if (domainSelected !== undefined) {
 | |
|       vm.selectDomain(vm.selectedDomain.description);
 | |
|     }
 | |
|   });
 | |
| 
 | |
|   $scope.localDomainSearch = function(str, domain) {
 | |
|     var matches = [];
 | |
|     domain.forEach(function(domain) {
 | |
|       if ((domain.domain.toLowerCase().indexOf(str.toString().toLowerCase()) >= 0)) {
 | |
|         matches.push(domain);
 | |
|       }
 | |
|     });
 | |
|     return matches;
 | |
|   };
 | |
| 
 | |
|   vm.showAction = function (action) {
 | |
|     switch(action) {
 | |
|       case 'invite':
 | |
|         vm.showInviteContainer = true;
 | |
|         vm.websiteTiles = true;
 | |
|         vm.showBackBtn = true;
 | |
|         vm.displayFileTree = true;
 | |
|       break;
 | |
|       case 'shares':
 | |
|         vm.showSharesContainer = true;
 | |
|         vm.websiteTiles = true;
 | |
|         vm.showBackBtn = true;
 | |
|       break;
 | |
|       case 'files':
 | |
|         vm.showFilesContainer = true;
 | |
|         vm.websiteTiles = true;
 | |
|         vm.showBackBtn = true;
 | |
|       break;
 | |
|       default:
 | |
|     }
 | |
|   };
 | |
| 
 | |
|   vm.closeAllOpenActions = function () {
 | |
|     $timeout(function() {
 | |
|       vm.showInviteContainer = false;
 | |
|       vm.showSharesContainer = false;
 | |
|       vm.showFilesContainer = false;
 | |
|       vm.displayFileTree = false;
 | |
|       vm.websiteTiles = false;
 | |
|       vm.showBackBtn = false;
 | |
|     }, 150);
 | |
|   };
 | |
| }]);
 | |
| 
 | |
| }());
 | |
| 
 | |
| app.filter('stringify', function() {
 | |
|   function getSerialize (fn, decycle) {
 | |
|     var seen = [], keys = [];
 | |
|     decycle = decycle || function(key, value) {
 | |
|     return '[Parent REFERENCE]: ' + value.id;
 | |
|     };
 | |
|     return function(key, value) {
 | |
|       var ret = value;
 | |
|       if (typeof value === 'object' && value) {
 | |
|         if (seen.indexOf(value) !== -1)
 | |
|           ret = decycle(key, value);
 | |
|         else {
 | |
|           seen.push(value);
 | |
|           keys.push(key);
 | |
|         }
 | |
|       }
 | |
|       if (fn) ret = fn(key, ret);
 | |
|       return ret;
 | |
|     };
 | |
|   }
 | |
|   function getPath (value, seen, keys) {
 | |
|     var index = seen.indexOf(value);
 | |
|     var path = [ keys[index] ];
 | |
|     for (index--; index >= 0; index--) {
 | |
|       if (seen[index][ path[0] ] === value) {
 | |
|         value = seen[index];
 | |
|         path.unshift(keys[index]);
 | |
|       }
 | |
|     }
 | |
|     return '~' + path.join('.');
 | |
|   }
 | |
|   function stringify(obj, fn, spaces, decycle) {
 | |
|     return JSON.stringify(obj, getSerialize(fn, decycle), spaces);
 | |
|   }
 | |
|   stringify.getSerialize = getSerialize;
 | |
|   return function(ob) {
 | |
|     return stringify(ob, undefined, 2);
 | |
|   };
 | |
| });
 | |
| 
 | |
| app.filter('capitalize', function() {
 | |
|     return function(input) {
 | |
|       return (!!input) ? input.charAt(0).toUpperCase() + input.substr(1).toLowerCase() : '';
 | |
|     }
 | |
| });
 |