Skip to content

Instantly share code, notes, and snippets.

@chukcha-wtf
Created May 5, 2014 15:14
Show Gist options
  • Save chukcha-wtf/f6889ff125d25cb4e745 to your computer and use it in GitHub Desktop.
Save chukcha-wtf/f6889ff125d25cb4e745 to your computer and use it in GitHub Desktop.
Ember.js preview
App.ApplicationAdapter = DS.RESTAdapter.extend({
find: function(store, type, token) {
var service = new AuthServiceClient(new Thrift.Protocol(new Thrift.Transport(App.Config.url.auth)));
return new Ember.RSVP.Promise(function(resolve, reject) {
service.error = function(status) {
Ember.run(function(){
reject(status.errorDescription);
});
}
var json = service.refreshAuthSession(token);
Ember.run(null, resolve, json);
});
},
findQuery: function(store, type, query) {
var model_name = type.typeKey.replace("Contract", "")
if (query.fromDate) {
var service = new ContractOperationHistoryServiceClient(new Thrift.Protocol(new Thrift.Transport(App.Config.url.operationHistoryService)));
} else {
var service = new ContractsServiceClient(new Thrift.Protocol(new Thrift.Transport(App.Config.url.contractsService)));
}
var token = query.token
return new Ember.RSVP.Promise(function(resolve, reject) {
service.error = function(status) {
Ember.run(function(){
reject(status.errorDescription);
});
}
var data = null;
switch (model_name) {
case 'card':
data = service.findAllCardContracts(token);
break;
case 'account':
data = service.findAllAccountContracts(token);
break;
case 'credit':
data = service.findAllCreditContracts(token);
break;
case 'deposit':
data = service.findAllDepositContracts(token);
break;
case 'depositItem':
data = service.fetchDepositOperationHistoryItemsWithFromToDate(token, query.id, query.filter, query.fromDate, query.toDate)
break;
case 'accountItem':
data = service.fetchAccountOperationHistoryItemsWithFromToDate(token, query.id, query.filter, query.fromDate, query.toDate)
break;
case 'creditItem':
data = service.fetchCreditOperationHistoryItemsWithFromToDate(token, query.id, query.filter, query.fromDate, query.toDate)
break;
case 'cardItem':
data = service.fetchCardContractOperationHistoryItemsWithFromToDate(token, query.id, query.filter, query.fromDate, query.toDate, query.attr)
break;
}
Ember.run(null, resolve, data);
});
}
});
App.ContractsController = Ember.ArrayController.extend({
token: this.get('session.access_token'),
fetchCards: function() {
var _this = this;
_this.store.find('card_contract', {token: _this.get('token')}).then(function(contracts){
_this.set('card_contracts', contracts)
});
},
fetchDeposits: function() {
var _this = this;
_this.store.find('deposit_contract', {token: _this.get('token')}).then(function(contracts){
_this.set('deposit_contracts', contracts)
});
},
fetchAccounts: function() {
var _this = this;
_this.store.find('account_contract', {token: _this.get('token')}).then(function(contracts){
_this.set('account_contracts', contracts)
});
},
fetchCredits: function() {
var _this = this;
_this.store.find('credit_contract', {token: _this.get('token')}).then(function(contracts){
_this.set('credit_contracts', contracts)
});
}
});
<section class="my_cards">
<header class="title">
<h5><ins class="ico card"></ins>Карты</h5>
</header>
{{#each card in cards}}
<div class="item">
<div class="left">
<div {{bind-attr class=":card card.logo"}}></div>
<div class="left">
<h4 class="title">{{card.cardNumberMask}}</h4>
<table>
<tr>
<td>Статус</td>
<td><b {{bind-attr class=":status card.booleanStatus:active:disabled"}}>{{card.formattedStatus}}</b></td>
</tr>
<tr>
<td>Действует до:</td>
<td><b>{{card.expiryMonth}}/{{card.expiryYear}}</b></td>
</tr>
</table>
</div>
</div>
<div class="right">
<a class="btn" {{action "notImplemented"}}>Пополнить</a>
<a class="btn btn-unstyled">Операции</a>
</div>
<div class="left">
<a class="collapse" href="#">Дополнительно</a>
</div>
<div class="collapse-inner">
{{#view App.CardInnerView}}
<div class="clearfix">
<div class="left">
<h5>Настройки карты</h5>
<a href="" class="block" {{action "notImplemented"}}>Заблокировать карту</a>
<div class="custom-checkbox">
<input id="cvv" type="checkbox" {{action "notImplemented"}}>
<label for="cvv" {{action "notImplemented"}}>Включить CVV/CVC-код</label>
</div>
<div class="custom-checkbox">
<input id="i_pay" type="checkbox" {{action "notImplemented"}}>
<label for="i_pay" {{action "notImplemented"}}>Оплата в интернете</label>
</div>
</div>
<div class="right">
<div class="card-contract-section" {{action 'goToContract' card }}>
<h5>Договор</h5>
{{#with card.contract as contract}}
<table>
<tr>
<th>Номер договора:</th>
<td>{{contract.legalNumber}}</td>
</tr>
<tr>
<th>Дата договора:</th>
<td>{{contract.formattedStartDate}}</td>
</tr>
<tr>
<th>Номер счета</th>
<td>{{contract.mainAccountNumber}}</td>
</tr>
<tr>
<th>Валюта счета</th>
<td>{{contract.localizedCurrencyFull}}</td>
</tr>
</table>
{{/with}}
</div>
</div>
</div>
<div class="clearfix">
<div class="left">
<h5>Лимит на расчеты в торговой сети</h5>
<div class="payments-range clearfix">
</div>
<div class="number_of_operations clearfix">
<span>Кол-во операций</span>
<div class="select" {{action "notImplemented"}}>
<select>
<option>10</option>
<option>20</option>
<option>30</option>
</select>
<ins class="triangle"></ins>
</div> <span>до</span>
<div class="select" {{action "notImplemented"}}>
<input class="date"></input>
<ins class="triangle"></ins>
</div>
</div>
<div class="save clearfix">
{{input type="number" step="any" class="num payment-num" value=card.calculationLimit}}&nbsp;<span>грн</span>
</div>
</div>
<div class="right">
<h5>Лимит на снятие наличных</h5>
<div class="cash-range clearfix">
</div>
<div class="number_of_operations clearfix">
<span>Кол-во операций</span>
<div class="select" {{action "notImplemented"}}>
<select>
<option>10</option>
<option>20</option>
<option>30</option>
</select>
<ins class="triangle"></ins>
</div> <span>до</span>
<div class="select" {{action "notImplemented"}}>
<input class="date"></input>
<ins class="triangle"></ins>
</div>
</div>
<div class="save clearfix">
{{input type="number" step="any" class="num cash-num" value=card.cashLimit}}&nbsp;<span>грн</span>
<a class="btn btn-filter" {{action "notImplemented"}}>Сохранить</a>
</div>
</div>
</div>
{{/view}}
</div>
</div>
{{/each}}
</section>
App.MyCardsController = Ember.ArrayController.extend({
selectedCard: null,
actions: {
notImplemented: function() {
this.showNotice('Данная функция будет доступна в следующем релизе.')
},
goToContract: function(card) {
this.set('selectedCard', card);
this.transitionToRoute('card', card.get('contract'));
}
},
fetchCards: function() {
var _this = this;
_this.store.find('card_contract', {token: _this.get('session.access_token')}).then(function(contracts){
var active_cards = [],
inactive_cards = [];
if (contracts.toArray().length) {
contracts.toArray().forEach(function(contract){
if (contract.get('cards') && contract.get('cards').toArray().length) {
contract.get('cards').toArray().forEach(function(card){
if (card.get('status')) {
card.get('booleanStatus') ? active_cards.push(card) : inactive_cards.push(card);
} else {
inactive_cards.push(card);
}
});
}
});
}
_this.set('cards', active_cards.concat(inactive_cards));
}, function(error){
_this.showError(error.errorMessageKey);
});
},
clearData: function() {
}
})
App.MyCardsView = Ember.View.extend({
didInsertElement: function() {
$('a.banking').addClass('active');
this.$().on('click', ".collapse", function() {
$(this).toggleClass("opened");
$(this).text() === "Дополнительно" ? $(this).text("Свернуть") : $(this).text("Дополнительно")
$(this).parents(".item").find(".collapse-inner").slideToggle(400);
return false;
});
},
willremoveElement: function() {
$('a.banking').removeClass('active');
}
});
App.CardInnerView = Ember.View.extend({
didInsertElement: function() {
var _this = this;
_this.$('.cash-range').slider({
value:0,
min: 0,
max: 25000,
step: 50,
create: function() {
var handle = $('.cash-range .ui-slider-handle');
var bubble = $('<div class="valuebox"><span class="v"></span>&nbsp;грн</div>');
handle.append(bubble);
},
slide: function( event, ui ) {
var formattedValue = ui.value.toFixed(2);
_this.$( ".cash-num" ).val(formattedValue);
_this.$('.cash-range .valuebox').fadeIn().find(".v").text(formattedValue);
}
});
_this.$(".cash-num").val($(".cash-range").slider("value"));
_this.$('.payments-range').slider({
value:0,
min: 0,
max: 25000,
step: 50,
create: function() {
var handle = $('.payments-range .ui-slider-handle');
var bubble = $('<div class="valuebox"><span class="v"></span>&nbsp;грн</div>');
handle.append(bubble);
},
slide: function( event, ui ) {
var formattedValue = ui.value.toFixed(2);
_this.$('.payment-num').val(formattedValue);
_this.$('.payments-range .valuebox').fadeIn().find(".v").text(formattedValue);
}
});
_this.$(".payment-num").val($(".payments-range").slider("value"));
}
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment