Dmitry Pashkevich
We're hiring!
www.golucid.co
AngularJS is a new, powerful, client-side technology that provides a way of accomplishing really powerful things in a way that embraces and extends HTML, CSS and JavaScript
^ Evolution of existing Web Standards
* actually, it’s MVVM (Model-View-ViewModel)**
** actually, it’s Model-View-Whatever
<context-menu menu-name="context-menu-options">
<context-item
ng-repeat="option in options"
item-click="combo.selectedIndex = $index">
{{option.label}}
</context-item>
</context-menu>
Your name: <input type="text" ng-model="firstName">
<p>Hello, {{firstName}}!</p>
<!-- That's it! No JavaScript written here! -->
$routeProvider.
when('/', {
templateUrl: '/view/MainView.html',
label: 'Admin'
}).
when('/users', {
templateUrl: '/view/UsersView.html',
label: 'Users'
}).
when('/users/create', {
templateUrl: '/view/CreateUsersView.html',
label: 'Add New'
})
// …
<a href="#/users/create">New user</a>
// Define account service
var AccountService = function() {
// account service constructor body...
};
AccountService.prototype.getAccount = function() {
// code for getting account...
};
// register it with Angular:
TeamApp.service('accountService', AccountService);
// We need the account service
// in our apps controller!
var AppsController = function(accountService,
samlService, gappsService) {
// controller's constructor body...
var account = accountService.getAccount();
}
<script src="/controller/LicensingController.js"></script>
<script src="/service/RestService.js"></script>
<script src="/model/UserRole.js"></script>
<script src="/model/User.js"></script>
<script src="/service/UserService.js"></script>
<script src="/model/License.js"></script>
<script src="/model/LicenseRequest.js"></script>
<script src="/model/Consumer.js"></script>
<script src="/model/Saml.js"></script>
<script src="/model/GAppsDomain.js"></script>
<script src="/model/Account.js"></script>
...
<script src="/teamAdmin.js"></script>
/**
* @constructor
* @param {lucid.services.RestLink} userLink
*/
lucid.team.model.User = function(userLink) {
this.selfLink = userLink;
/**
* @type {?string}
*/
this.username = null;
/**
* @type {?string}
*/
this.email = null;
/**
* @type {?Date}
*/
this.created = null;
}
/**
* @param {string} productName
* @return {angular.$q.Promise}
*/
lucid.team.model.User.prototype.getDocuments = function() {
return lucid.team.model.UserDocuments.getUserDocuments(this);
}
{
"uri": "https://localhost/accounts/2",
"name": "My Team Name",
"owner": "https://localhost/accounts/2/owner",
"size": 54,
"users": "https://localhost/accounts/2/users",
"groups": "https://localhost/groups?accountId=2",
"roles": "https://localhost/userRoles?account=2",
"metadata": "https://localhost/accounts/2/metadata",
"created": "2014-06-23T17:30:53Z",
"updated": "2014-07-18T17:58:34Z"
}
AccountService.prototype.accountUsers = function() {
return this.getAccount()
.then(function(account) {
return account.users.get();
}
);
}
RoleService.prototype.assignUserRole = function(
userRow, roleName) {
return userRow.user.roles.post({
'role': this.getRoleID(roleName)
});
}
<section class="filters-container" id="filtersPanel">
<h2>Products & Users</h2>
<combo-box model="currentProductFilter" options="productFilterOptions">
</combo-box>
<combo-box model="currentLicenseFilter" options="licenseFilterOptions">
</combo-box>
</section>
.component-combo-box {
.component-pill-with-text;
.box-sizing(border-box);
line-height: 18px;
&-primary-gray {
.component-combo-box-variant(
@component-primary-gray,
@component-primary-gray-hover
)
}
&-secondary-gray {
.component-combo-box-variant(
@component-secondary-gray,
@component-secondary-gray-hover
}
...
}