diff --git a/css/styles.css b/css/styles.css index 7dd4293..c44dbac 100644 --- a/css/styles.css +++ b/css/styles.css @@ -34,7 +34,12 @@ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.05); box-shadow: inset 0 1px 1px rgba(0,0,0,.05); } - +.ls-none { + list-style: none; +} +.ls-pd0 { + -webkit-padding-start: 0; +} /* Side Menu */ .side-menu { padding-top: 10px; @@ -58,11 +63,12 @@ align-items: center; } .button-container.active .side-menu-button { - background: steelblue; - color: white; + color: #fff; + background-color: #286090; + border-color: #122b40; } .button-container.active .button-title { - color: steelblue; + color: #286090; } .button-container a:hover { text-decoration: none; @@ -148,3 +154,465 @@ overflow: hidden; background-color: #e5e5e5; } + +.demo-title { + text-align: center; + font-size: 3rem; + margin-bottom: 50px; +} +.invite-option { + border: 1px solid #e5e5e5; +} +.invite-card-container { + flex-wrap: wrap; + width: 100%; + display: flex; +} +.invite-card-container .invite-option { + width: 25%; + background: white; + float: left; + padding: 2%; + text-align: center; + -webkit-transition: all .3s ease-in-out; + transition: all .3s ease-in-out; + margin: 5px; +} +.invite-card-container .invite-option:hover { + /*cursor: pointer;*/ + box-shadow: 0px 2px 30px rgba(0, 0, 0, 0.3); + -webkit-transform: scale(1.04); + transform: scale(1.04); +} +.invite-card-container .invite-option:hover i, .invite-card-container .invite-option:hover h1, .invite-card-container .invite-option:hover span, .invite-card-container .invite-option:hover b { + color: #286090; +} +.invite-card-container .invite-option:hover .front { + opacity: 0; + visibility: hidden; +} +.invite-card-container .invite-option:hover .back { + opacity: 1 !important; + visibility: visible !important; +} +.invite-card-container .invite-option:hover .back a.button { + cursor: pointer; + -webkit-transform: translateY(0px) !important; + transform: translateY(0px) !important; +} +.invite-card-container .invite-option hr { + border: none; + border-bottom: 1px solid #F0F0F0; +} +.invite-card-container .invite-option i { + color: #D8D8D8; + -webkit-transition: all .3s ease-in-out; + transition: all .3s ease-in-out; +} +.invite-card-container .invite-option h1 { + margin: 10px 0; + color: #212121; + -webkit-transition: all .3s ease-in-out; + transition: all .3s ease-in-out; +} +.invite-card-container .invite-option p { + color: #999; + padding: 0 10px; + line-height: 1.3; +} +.invite-card-container .invite-option .price { + position: relative; +} +.invite-card-container .invite-option .price .front span.price { + font-size: 2rem; + text-transform: uppercase; + margin-top: 20px; + display: block; + font-weight: 700; + position: relative; +} +.invite-card-container .invite-option .price .front span.price b { + position: absolute; + font-size: 1rem; + margin-left: 2px; + font-weight: 600; +} +.invite-card-container .invite-option .price .back { + opacity: 0; + visibility: hidden; + -webkit-transition: all .3s ease-in-out; + transition: all .3s ease-in-out; +} +.invite-card-container .invite-option .price .back a.button { + background: #286090; + padding: 15px 20px; + display: inline-block; + text-decoration: none; + color: white; + position: absolute; + font-size: 13px; + top: -5px; + left: 0; + right: 0; + width: 150px; + margin: auto; + text-transform: uppercase; + -webkit-transform: translateY(20px); + transform: translateY(20px); + -webkit-transition: all .3s ease-in-out; + transition: all .3s ease-in-out; +} +.invite-card-container .invite-option .price .back a.button:hover { + background: #286090; +} +.invite-card-container .invite-option:hover i { + color: white; +} +.website-card-button-group { + display: flex; + justify-content: space-around; +} + +.media { + border: 1px solid #d5dbdd; + padding: 5px 20px; + border-radius: 5px; + box-shadow: 0px 2px 1px rgba(0,0,0,0.04); + background: #fff; + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start; +} +.align-self-center { + -ms-flex-item-align: center !important; + align-self: center !important; +} +.rounded-circle { + border-radius: 50%; +} +.media .media-left img { + width: 75px; +} +.shares-container { + list-style: none; + -webkit-padding-start: 0px; +} + + + + + + + + + +/* ————————————————————– + Tree core styles +*/ +.tree { margin: 1em; } + +.tree input { + position: absolute; + clip: rect(0, 0, 0, 0); + } + +.tree input ~ ul { display: none; } + +.tree input:checked ~ ul { display: block; } + +/* ————————————————————– + Tree rows +*/ +.tree li { + line-height: 1.2; + position: relative; + padding: 0 0 1em 1em; + } + +.tree ul li { padding: 1em 0 0 1em; } + +.tree > li:last-child { padding-bottom: 0; } + +/* ————————————————————– + Tree labels +*/ +.tree_label { + position: relative; + display: inline-block; + background: #fff; + } + +label.tree_label { cursor: pointer; } + +label.tree_label:hover { color: #666; } + +/* ————————————————————– + Tree expanded icon +*/ +label.tree_label:before { + /*background: #000;*/ + color: #000; + position: relative; + z-index: 1; + float: left; + margin: 0 1em 0 -2em; + width: 1em; + height: 1em; + border-radius: 1em; + font-family: FontAwesome; + content: '\f07b'; + text-align: center; + line-height: .9em; + } + +:checked ~ label.tree_label:before { content: '–'; } + +/* ————————————————————– + Tree branches +*/ +/*.tree li:before { + position: absolute; + top: 0; + bottom: 0; + left: -.5em; + display: block; + width: 0; + border-left: 1px solid #777; + content: ""; + }*/ + +.tree_label:after { + position: absolute; + top: 0; + left: -1.5em; + display: block; + height: 0.5em; + width: 1em; + border-bottom: 1px solid #777; + border-left: 1px solid #777; + border-radius: 0 0 0 .3em; + content: ''; + } + +.tree_label.filez:after { + position: absolute; + font-family: FontAwesome; + top: 0; + left: -1.5em; + display: block; + height: 0.5em; + width: 1em; + border-bottom: 1px solid #777; + border-left: 1px solid #777; + border-radius: 0 0 0 .3em; + content: '\f15c'; +} +label.tree_label:active:before, label.tree_label:hover:before { + position: absolute; + font-family: FontAwesome; + top: 0; + display: block; + height: 0.5em; + width: 1em; + border-bottom: 1px solid #777; + border-left: 1px solid #777; + border-radius: 0 0 0 .3em; + content: '\f07c'; +} +.breadcrumbs-list:last-child { + color: #777; +} +li.move-back { + margin-left: -20px; +} +label.tree_label:after { border-bottom: 0; } + +ul.tree.files-only.ls-none { + margin-left: 30px; +} +:checked ~ label.tree_label:after { + border-radius: 0 .3em 0 0; + border-top: 1px solid #777; + border-right: 1px solid #777; + border-bottom: 0; + border-left: 0; + bottom: 0; + top: 0.5em; + height: auto; + } + +.tree li:last-child:before { + height: 1em; + bottom: auto; + } + +.tree > li:last-child:before { display: none; } + +.tree_custom { + display: block; + background: #eee; + padding: 1em; + border-radius: 0.3em; +} +.tree ul { + -webkit-padding-start: 0; +} + + + + + + + +.websites-tile img { + height: auto; + max-width: 100%; + vertical-align: middle; +} +.websites-tile iframe { + border-width: 2px; + border-style: none; + border-color: none; + border-image: inone; +} +.websites-tile .btn { + background-color: white; + border: 1px solid #cccccc; + color: #696969; + padding: 0.5rem; + text-transform: uppercase; +} +.websites-tile .btn--block { + display: block; + width: 100%; +} +.websites-tile .cards { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + list-style: none; + margin: 0; + padding: 0; +} +.websites-tile .cards__item { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + padding: 1rem; +} +@media (min-width: 40rem) { + .websites-tile .cards__item { + width: 50%; + } +} +@media (min-width: 56rem) { + .websites-tile .cards__item { + width: 33.3333%; + } +} +.websites-tile .card { + background-color: white; + border-radius: 0.25rem; + box-shadow: 0 20px 40px -14px rgba(0, 0, 0, 0.25); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + overflow: hidden; + max-width: 350px; + min-width: 350px; +} +.websites-tile .card:hover .card__image { + -webkit-filter: contrast(100%); + filter: contrast(100%); +} +.websites-tile .card__content { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 1; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + padding: 1rem; +} +.websites-tile .card__image { + background-position: center center; + background-repeat: no-repeat; + background-size: cover; + background: rgba(0, 0, 0, 0.5); + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; + -webkit-filter: contrast(70%); + filter: contrast(70%); + overflow: hidden; + position: relative; + -webkit-transition: -webkit-filter 0.5s cubic-bezier(0.43, 0.41, 0.22, 0.91); + transition: -webkit-filter 0.5s cubic-bezier(0.43, 0.41, 0.22, 0.91); + transition: filter 0.5s cubic-bezier(0.43, 0.41, 0.22, 0.91); + transition: filter 0.5s cubic-bezier(0.43, 0.41, 0.22, 0.91), -webkit-filter 0.5s cubic-bezier(0.43, 0.41, 0.22, 0.91); +} +.websites-tile .card__title { + color: #696969; + font-size: 1.25rem; + font-weight: 300; + letter-spacing: 2px; + text-transform: uppercase; +} +.websites-tile .card__text { + -webkit-box-flex: 1; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + font-size: 0.875rem; + line-height: 1.5; + margin-bottom: 1.25rem; +} +.card__title.text-center { + margin-bottom: 10px; +} +a:hover, a:focus { + color: #2a6496; + text-decoration: none; +} +.square-service-block{ + position:relative; + overflow:hidden; + margin:15px auto; + } +.square-service-block a { + background-color: #e74c3c; + border-radius: 5px; + display: block; + padding: 60px 20px; + text-align: center; + width: 100%; +} +.square-service-block a:hover{ + background-color: rgba(231, 76, 60, 0.8); + border-radius: 5px; +} + +.ssb-icon { + color: #fff; + display: inline-block; + font-size: 28px; + margin: 0 0 20px; +} + +h2.ssb-title { + color: #fff; + font-size: 20px; + font-weight: 200; + margin:0; + padding:0; + text-transform: uppercase; +} diff --git a/index.html b/index.html index 785e77f..01143de 100644 --- a/index.html +++ b/index.html @@ -34,6 +34,9 @@ + + + diff --git a/js/app.js b/js/app.js index 116352a..01313a5 100644 --- a/js/app.js +++ b/js/app.js @@ -4,7 +4,7 @@ var angular = window.angular; var OAUTH3 = window.OAUTH3; -var app = window.app = angular.module('launchpad', ['oauth3.org', 'ui.router', 'LocalStorageModule', 'angucomplete-alt']); +var app = window.app = angular.module('launchpad', ['oauth3.org', 'ui.router', 'LocalStorageModule', 'angucomplete-alt', 'ez.fileTree']); app.directive('daplieFileChange', function () { return { diff --git a/js/controllers/website-controller.js b/js/controllers/website-controller.js index 29fe4bb..0e05a05 100644 --- a/js/controllers/website-controller.js +++ b/js/controllers/website-controller.js @@ -36,9 +36,31 @@ function handleFiles(ev) { 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' -, function ($scope, $q, Auth, Oauth3, $timeout) { + '$scope', '$q', 'Auth', 'azp@oauth3.org', '$timeout', '$sce' +, function ($scope, $q, Auth, Oauth3, $timeout, $sce) { var vm = this; var angular = window.angular; @@ -302,6 +324,7 @@ app.controller('websiteCtrl', [ console.log(r); }; vm.Sites.upload = function (r) { + r.uploadPath = vm.autoPopulateWebPath; var pkg = Auth.oauth3.pkg('www@daplie.com'); //analyzeFile(r.newFile, r); vm._uploadFile(pkg, r); @@ -340,18 +363,83 @@ app.controller('websiteCtrl', [ window.alert(JSON.stringify(result)); }); }; + + 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'); - return pkg.contents({ - hostname: r.domain - , domain: r.domain - , tld: r.tld - , sld: r.sld - //, sub: r.sub - , path: r.newPath - }).then(function (result) { - window.alert(JSON.stringify(result)); - }); + vm.getSiteContents = function (site, newPath) { + newPath = site; + site = vm.siteResults; + function updatePath (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(''); + } + 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.getDirectories = function (path) { + vm.siteDirectories = []; + vm.siteFiles = []; + var site = vm.siteResults; + vm.directoryPath = path; + vm.getSiteContents(path, site); + }; + + vm.getDirectoriesFromBreadcrumbs = function (dir) { + vm.breadcrumbPathClicked = true; + vm.siteDirectories = []; + vm.siteFiles = []; + vm.getSiteContents(dir); }; vm.Shares = {}; @@ -455,6 +543,10 @@ app.controller('websiteCtrl', [ 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); + }); }); }; @@ -489,6 +581,78 @@ app.controller('websiteCtrl', [ }); return matches; }; + + vm.showAction = function (action) { + switch(action) { + case 'invite': + vm.showInviteContainer = true; + vm.websiteTiles = true; + vm.showBackBtn = 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.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); + }; +}); diff --git a/js/lib/ez-file-tree/ez-file-tree.min.js b/js/lib/ez-file-tree/ez-file-tree.min.js new file mode 100644 index 0000000..b98a4dd --- /dev/null +++ b/js/lib/ez-file-tree/ez-file-tree.min.js @@ -0,0 +1 @@ +!function(angular){"use strict";angular.module("ez.fileTree",["ez.object2array"]).constant("EzFileTreeConfig",{enableChecking:!1,enableFolderSelection:!0,enableFileSelection:!0,multiSelect:!1,recursiveSelect:!1,recursiveUnselect:!0,icons:{chevronRight:"fa fa-chevron-right",chevronDown:"fa fa-chevron-down",folder:"fa fa-folder",openFolder:"fa fa-folder-open",file:"fa fa-file"},childrenField:"children",idField:"id",isFolder:function(file){return"folder"===file.type},preSelect:!1,ancestorField:"ancestors",showRoot:!1,movingFolder:null}).directive("ezFileTree",["$compile","$timeout","$parse","EzFileTreeConfig",function($compile,$timeout,$parse,EzFileTreeConfig){return{restrict:"EA",replace:!0,scope:{tree:"=ezFileTree",getChildren:"=?",config:"=?config"},templateUrl:"ez-file-tree-container.html",compile:function(element,attrs){var config=angular.extend({},EzFileTreeConfig);for(var key in EzFileTreeConfig)"undefined"!=typeof attrs[key]&&(config[key]=$parse(attrs[key])());return function(scope){scope.data={showTree:!1};var init=function(){scope.config=angular.extend(config,scope.config),scope.disableSelect=!1;var cachedSelectedFile=angular.extend({},scope.tree._selectedFile);if(delete scope.tree._selectedFile,scope.config.showRoot){var wrappedTree={};wrappedTree[scope.config.idField]="root",wrappedTree.name="root",wrappedTree[scope.config.childrenField]={},wrappedTree[scope.config.childrenField][scope.tree[scope.config.idField]]=$.extend(!0,{},scope.tree),wrappedTree[scope.config.childrenField][scope.tree[scope.config.idField]]._open=!0,wrappedTree[scope.config.childrenField][scope.tree[scope.config.idField]].type="folder",scope.tree=wrappedTree}scope.config.multiSelect?scope.tree._selectedFiles={}:scope.tree._selectedFile=null,scope.tree._activeFiles={},scope.tree[scope.config.childrenField]&&(setParentOnChildren(scope.tree,!0),scope.config.preSelect?scope.findAndSelectFile(cachedSelectedFile):scope.data.showTree=!0)};scope.folderFindAndSelect=function(folder,file,ancestors){if(ancestors.length>1)scope.recursiveFindAndSelect(folder,file,ancestors.slice(1));else for(var k in folder[scope.config.childrenField]){var innerFolder=folder[scope.config.childrenField][k];if(k===file.id)return select(innerFolder),void(scope.data.showTree=!0)}},scope.recursiveFindAndSelect=function(parentFolder,file,ancestors){var folder=parentFolder[scope.config.childrenField][ancestors[0][scope.config.idField]];folder._open?scope.folderFindAndSelect(folder,file,ancestors):scope.toggle(null,folder,function(updatedFolder){scope.folderFindAndSelect(updatedFolder,file,ancestors)})},scope.findAndSelectFile=function(file){for(var k in scope.tree[scope.config.childrenField]){var rootFolder=scope.tree[scope.config.childrenField][k];if(scope.config.ancestorField in file){var ancestors=file[scope.config.ancestorField];if(0===ancestors.length){if(k===file.id)return select(rootFolder),void(scope.data.showTree=!0)}else scope.recursiveFindAndSelect(scope.tree,file,ancestors)}}};var setParentOnChildren=function(file,recursive){for(var k in file[scope.config.childrenField])file[scope.config.childrenField][k]._parent=file,recursive&&file[scope.config.childrenField][k][scope.config.childrenField]&&setParentOnChildren(file[scope.config.childrenField][k],!0)},hasChildrenSelected=function(file){var selected=!1;for(var key in file[scope.config.childrenField]){if(file[scope.config.childrenField][key]._selected){selected=!0;break}if(file[scope.config.childrenField].files&&hasChildrenSelected(file[scope.config.childrenField])){selected=!0;break}}return selected},activate=function(file){file._active=!0,scope.tree._activeFiles[file[scope.config.idField]]=file,file._parent&&activate(file._parent)},deactivate=function(file){var active=!1;file[scope.config.childrenField]&&hasChildrenSelected(file)&&(active=!0),active||delete scope.tree._activeFiles[file[scope.config.idField]],file._active=active,active===!1&&void 0!==file._parent&&deactivate(file._parent)},selectChildren=function(folder){for(var key in folder[scope.config.childrenField])folder[scope.config.childrenField][key]._selected=!0,folder[scope.config.childrenField][key]._active=!0,scope.config.isFolder(folder[scope.config.childrenField][key])&&selectChildren(folder[scope.config.childrenField][key])},select=function(file){scope.$emit("ez-file-tree.select",file),(scope.config.enableFolderSelection||!scope.config.isFolder(file))&&(scope.config.enableFileSelection||scope.config.isFolder(file))&&(scope.config.movingFolder&&scope.config.movingFolder.length&&file[scope.config.idField]===scope.config.movingFolder||(scope.config.multiSelect?scope.tree._selectedFiles[file[scope.config.idField]]=file:(scope.tree._selectedFile=file,unselectAll(scope.tree[scope.config.childrenField])),file._selected=!0,activate(file),scope.config.recursiveSelect&&scope.config.isFolder(file)&&selectChildren(file)))},unselect=function(file){if(file._selected=!1,scope.$emit("ez-file-tree.unselect",file),scope.config.multiSelect?delete scope.tree._selectedFiles[file[scope.config.idField]]:scope.tree._selectedFile=null,deactivate(file),scope.config.recursiveUnselect&&scope.config.isFolder(file))for(var key in file[scope.config.childrenField])unselect(file[scope.config.childrenField][key])},unselectAll=function(files){for(var key in files)"undefined"!=typeof files[key][scope.config.childrenField]&&unselectAll(files[key][scope.config.childrenField]),files[key]._selected=!1,scope.$emit("ez-file-tree.unselect",files[key])};scope.toggle=function(e,file,callback){if(scope.config.isFolder(file)&&(!scope.config.movingFolder||!scope.config.movingFolder.length||file[scope.config.idField]!==scope.config.movingFolder)&&(e&&(scope.disableSelect=!0,$timeout(function(){scope.disableSelect=!1},500)),file._open=!file._open,!file[scope.config.childrenField]||file[scope.config.childrenField]&&!file[scope.config.childrenField].length)){if("undefined"==typeof scope.getChildren)throw new Error("You must add a getChildren method to the directive scope or hard code a children field on your folder objects.");scope.getChildren(file).then(function(children){for(var key in children)children[key]._parent=file,scope.config.multiSelect?"undefined"!=typeof scope.tree._selectedFiles[children[key][scope.config.idField]]&&(children[key]._selected=!0):scope.tree._selectedFile&&scope.tree._selectedFile[scope.config.idField]===children[key][scope.config.idField]&&(children[key]._selected=!0);file[scope.config.childrenField]=children,callback&&callback(file)})}},scope.showCheckbox=function(file){return!scope.config.enableChecking||scope.config.isFolder(file)&&!config.enableFolderSelection?!1:!0},scope.select=function(e,file){e.preventDefault(),$timeout(function(){scope.disableSelect!==!0&&(scope.disableSelect=!1,file._selected?unselect(file):select(file))},200)},init()}}}}])}(angular); diff --git a/js/lib/ez-file-tree/ez-object2array.min.js b/js/lib/ez-file-tree/ez-object2array.min.js new file mode 100644 index 0000000..4e4ec39 --- /dev/null +++ b/js/lib/ez-file-tree/ez-object2array.min.js @@ -0,0 +1 @@ +angular.module("ez.object2array",[]).filter("object2array",[function(){return function(a){if("[object Array]"===Object.prototype.toString.call(a))return a;var b=[];for(var c in a)b.push(a[c]);return b}}]); diff --git a/templates/account-settings.html b/templates/account-settings.html index e0e13ee..0ddaead 100644 --- a/templates/account-settings.html +++ b/templates/account-settings.html @@ -57,7 +57,7 @@

- + @@ -68,7 +68,7 @@ Use Account
- Sign Out + Sign Out
diff --git a/templates/splash-page.html b/templates/splash-page.html index 83c8c3d..75cb110 100644 --- a/templates/splash-page.html +++ b/templates/splash-page.html @@ -3,7 +3,7 @@

Sign in

-
Resume with {{ profile.email }}
+
Resume with {{ profile.email }} | {{ profile.issuer }}
diff --git a/templates/website.html b/templates/website.html index db20386..4bd9000 100644 --- a/templates/website.html +++ b/templates/website.html @@ -1,139 +1,238 @@ - +
+
-
- -

Create a new Website

-

Select a Domain

-
- -
- -
- - -
-
- . + -
-
+
- -
-
- -
-
+ +
+
+ + +
+
+

Enter Invite Code

+
+ +
+
+
+   +
+ +
+
+
+ +
+
+
+

Your Websites

+ +
+ + + diff --git a/templates/widgets/filetree.html b/templates/widgets/filetree.html new file mode 100644 index 0000000..09fd7b5 --- /dev/null +++ b/templates/widgets/filetree.html @@ -0,0 +1,58 @@ +
+
+ +
+
+
+
    +
  • + + +
  • +
+ +
+
+

Upload Files:

+
+ + +
+ +
+ + + +
99% | 1 MiB / 100 MiB
+ +
+ + + +
+ + +
+
+
+
+
{{ vm.folderStructure | stringify }}
+
+
+
+
+ +
+
+