Commit 4cea22e8 authored by Evren Kutar's avatar Evren Kutar

Merge branch 'feature/issue-5050' into develop

parents 423b3343 8ef962f1
......@@ -160,7 +160,8 @@ module.exports = function (grunt) {
"app/bower_components/metisMenu/dist/metisMenu.js",
"app/bower_components/Chart.js/Chart.js",
"app/bower_components/intro.js/intro.js",
"app/bower_components/moment/min/moment.min.js"
"app/bower_components/moment/min/moment.min.js",
"app/bower_components/toastr/toastr.min.js"
],
dest: 'dist/bower_components/components.js'
},
......@@ -174,7 +175,8 @@ module.exports = function (grunt) {
"app/bower_components/angular-loading-bar/build/loading-bar.min.css",
"app/bower_components/font-awesome/css/font-awesome.min.css",
"app/bower_components/intro.js/intro.css",
"app/bower_components/intro.js/themes/introjs-nassim.css"
"app/bower_components/intro.js/themes/introjs-nassim.css",
"app/bower_components/toastr/toastr.min.css"
]
}
},
......
......@@ -1857,3 +1857,7 @@ table.dataTable thead .sorting:after {
margin-bottom: 20px;
color: #636363 ;
}
#toast-container {
margin-top: 90px;
}
\ No newline at end of file
......@@ -46,6 +46,7 @@ angular.module(
*
* For development needs backendurl can be switched from both dev/settings page and querystring `?backendurl=http://example.com`
*/
// todo: convert it to service
.constant("RESTURL", (function () {
// todo: below backendurl definition is for development purpose and will be deleted
var backendurl = location.href.indexOf('nightly') > -1 ? "//nightly.api.ulakbus.net/" : "//api.ulakbus.net/";
......@@ -67,6 +68,7 @@ angular.module(
return {url: backendurl};
})())
.constant('toastr', window.toastr)
.config(function ($logProvider) {
$logProvider.debugEnabled(true);
});
\ No newline at end of file
......@@ -14,7 +14,7 @@
</h3>
<div class="node-table">
<ng-include src="'shared/templates/nodeTable.html'"></ng-include>
<ng-include src="'components/crud/templates/nodeTable.html'"></ng-include>
</div>
<hr>
</div>
......@@ -27,8 +27,11 @@
</span>
</h3>
<div class="list-node-table">
<ng-include src="'shared/templates/nodeTable.html'"></ng-include>
<div class="list-node-table" ng-if="!meta.translate_widget">
<ng-include src="'components/crud/templates/nodeTable.html'"></ng-include>
</div>
<div class="list-node-table" ng-if="meta.translate_widget">
<ng-include src="'shared/templates/translate.html'"></ng-include>
</div>
<hr>
</div>
......
......@@ -63,11 +63,10 @@
</td>
<td ng-if="meta.allow_actions!==false">
<div ng-hide="meta.object_actions.length > 0">
<button modal-for-nodes="{{node.schema.model_name}},{{node.schema.formType}},edit,{{$index}}">
Düzenle
</button>
<br>
<button ng-click="remove(node, 'ListNode', $index)">Sil</button>
<span modal-for-nodes="{{node.schema.model_name}},{{node.schema.formType}},edit,{{$index}}">
<i class="fa fa-pencil-square-o fa-fw"></i>
</span>
<span ng-click="remove(node, 'ListNode', $index)"><i class="fa fa-times fa-fw"></i></span>
</div>
<div ng-show="meta.object_actions.length > 0">
<!-- define object actions here -->
......
......@@ -25,6 +25,7 @@
<link rel="stylesheet" href="bower_components/font-awesome/css/font-awesome.min.css" type="text/css">
<link rel="stylesheet" href="bower_components/intro.js/introjs.css" type="text/css">
<link rel="stylesheet" href="bower_components/intro.js/themes/introjs-nassim.css" type="text/css">
<link rel="stylesheet" href="bower_components/toastr/toastr.min.css" type="text/css">
</head>
<body ng-controller="KeyListenController" ng-keydown="down($event)">
......@@ -88,6 +89,7 @@
<script src="bower_components/angular-schema-form/dist/bootstrap-decorator.min.js"></script>
<script src="bower_components/angular-gettext/dist/angular-gettext.min.js"></script>
<script src="bower_components/moment/min/moment.min.js"></script>
<script src="bower_components/toastr/toastr.min.js"></script>
<!-- TODO: check all js and remove unused -->
......
......@@ -26,6 +26,7 @@
<link rel="stylesheet" href="bower_components/font-awesome/css/font-awesome.min.css" type="text/css">
<link rel="stylesheet" href="bower_components/intro.js/introjs.css" type="text/css">
<link rel="stylesheet" href="bower_components/intro.js/themes/introjs-nassim.css" type="text/css">
<link rel="stylesheet" href="bower_components/toastr/toastr.min.css" type="text/css">
<!-- @endif -->
<!-- @if NODE_ENV == 'PRODUCTION' -->
......@@ -96,6 +97,7 @@
<script src="bower_components/angular-schema-form/dist/bootstrap-decorator.min.js"></script>
<script src="bower_components/angular-gettext/dist/angular-gettext.min.js"></script>
<script src="bower_components/moment/min/moment.min.js"></script>
<script src="bower_components/toastr/toastr.min.js"></script>
<!-- TODO: check all js and remove unused -->
......
......@@ -51,6 +51,7 @@ angular.module(
*
* For development needs backendurl can be switched from both dev/settings page and querystring `?backendurl=http://example.com`
*/
// todo: convert it to service
.constant("RESTURL", (function () {
// todo: below backendurl definition is for development purpose and will be deleted
var backendurl = location.href.indexOf('nightly') > -1 ? "//nightly.api.ulakbus.net/" : "//api.ulakbus.net/";
......@@ -72,6 +73,7 @@ angular.module(
return {url: backendurl};
})())
.constant('toastr', window.toastr)
.config(function ($logProvider) {
// @if NODE_ENV='PRODUCTION'
$logProvider.debugEnabled(false);
......
<div class="tablescroll">
<table class="table table-bordered" style="background-color:#fff;">
<thead>
<tr ng-if="node.schema.formType=='ListNode'">
<th colspan="2" ng-if="meta.allow_selection===true">
<label>
<input type="checkbox" style="zoom:1.5; margin:5px 0 0 8px;">
Hepsini Seç
</label>
</th>
<th scope="row" style="text-align:center">#</th>
<th ng-repeat="(key,value) in node.items[0] track by $index"
ng-if="key!=='idx' && node.schema.properties[key]">
<span ng-if="value.verbose_name">{{ value.verbose_name }}</span>
<span ng-if="!value.verbose_name">{{key}}</span>
</th>
<th ng-if="meta.allow_actions!==false">İşlem</th>
</tr>
</thead>
<tbody ng-class="{hidden: node.lengthModels < 1}">
<tr ng-repeat="listnodemodel in node.items track by $index"
ng-init="outerIndex=$index"
ng-if="node.schema.formType=='ListNode'">
<td ng-if="meta.allow_selection===true" width="60">
<label>
<input type="checkbox" style="zoom:1.5; margin:5px 0 0 8px;">
</label>
</td>
<td scope="row" style="text-align:center">{{$index+1}}</td>
<td ng-repeat="(k, v) in listnodemodel track by $index"
ng-init="innerIndex=$index"
ng-if="k!=='idx' && node.schema.properties[k]">
<span ng-if="!node.schema.inline_edit || node.schema.inline_edit.indexOf(k) < 0">{{ v.unicode || v }}</span>
<input type="{{node.schema.properties[k].type}}"
ng-if="node.schema.inline_edit.indexOf(k) > -1"
ng-model="node.model[outerIndex][k]"
ng-change="nodeModelChange(this)">
</td>
<td ng-if="meta.allow_actions!==false">
<div ng-hide="meta.object_actions.length > 0">
<span ng-click="remove(node, 'ListNode', $index)"><i class="fa fa-times fa=fw"></i></span>
</div>
<div ng-show="meta.object_actions.length > 0">
<!-- define object actions here -->
</div>
</td>
</tr>
</tbody>
</table>
</div>
\ No newline at end of file
<div class="form-group {{form.htmlClass}} schema-form-select col-md-12"
ng-class="{'has-error': form.disableErrorState !== true && hasError(), 'has-success': form.disableSuccessState !== true && hasSuccess(), 'has-feedback': form.feedback !== false}">
<label class="control-label {{form.labelHtmlClass}}" ng-show="showTitle()">
{{form.title}}
</label>
<!--<div class="form-group input-group">-->
<!--<span class="input-group-btn">-->
<!--<button class="btn btn-default dropdown-toggle" type="button"-->
<!--data-toggle="dropdown">-->
<!--<span class="caret"></span>-->
<!--</button>-->
<!--<ul class="dropdown-menu">-->
<!--<li class="text-center" ng-if="form.gettingTitleMap"><a><span class="loader"></span></a></li>-->
<!--<li ng-repeat="item in form.titleMap">-->
<!--<a ng-click="form.onDropdownSelect(item, form.name)">{{item-->
<!--.name}}</a>-->
<!--</li>-->
<!--</ul>-->
<!--</span>-->
<input type="text"
ng-model="$$value$$"
uib-typeahead="item.name for item in form.titleMap | filter:$viewValue"
typeahead-wait-ms="500"
typeahead-loading="loadingTitleMap"
placeholder="{{form.title}}"
ng-model-options="form.ngModelOptions"
ng-disabled="form.readonly"
sf-changed="form"
class="form-control {{form.fieldHtmlClass}}"
schema-validate="form"
name="{{form.name}}"/>
<!--</div>-->
<div ng-show="loadingTitleMap" class="loader"></div>
<div class="help-block" sf-message="form.description"></div>
</div>
\ No newline at end of file
......@@ -551,6 +551,23 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
int: {default: _numbers},
boolean: {default: function () {}},
string: {default: function () {}},
typeahead: {default: function (scope, v, k) {
scope.form[scope.form.indexOf(k)] = {
type: "template",
title: v.title,
titleMap: v.titleMap,
templateUrl: "shared/templates/typeahead.html",
name: k,
key: k,
onDropdownSelect: function (item, inputname) {
scope.model[k] = item.value;
$timeout(function () {
document.querySelector('input[name=' + inputname + ']').value = item.name;
});
}
};
v.type = 'string';
}},
text_general: {
default:
function (scope, v, k) {
......@@ -1078,6 +1095,7 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
});
var data = {
"form": $scope.model,
"object_key": $scope.object_key,
"token": $scope.token,
"model": $scope.form_params.model,
"cmd": $scope.form_params.cmd,
......
......@@ -21,7 +21,7 @@ angular.module('ulakbus')
* - API returns `is_login` key to check if current user is authenticated. Interceptor checks and if not logged
* in redirects to login page.
*/
$httpProvider.interceptors.push(function ($q, $rootScope, $location, $timeout, $log) {
$httpProvider.interceptors.push(function ($q, $rootScope, $location, $timeout, $log, toastr) {
return {
'request': function (config) {
if (config.method === "POST") {
......@@ -55,6 +55,10 @@ angular.module('ulakbus')
}
}
// handle toast notifications here
if (response.data.notify) {toastr.info(response.data.notify)}
return response;
},
'responseError': function (rejection) {
......@@ -109,7 +113,8 @@ angular.module('ulakbus')
if (errorInModal) {
errorModal();
} else {
$rootScope.$broadcast('alertBox', alertContent);
//$rootScope.$broadcast('alertBox', alertContent);
toastr.error(alertContent.msg, alertContent.title);
}
};
......
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -1872,6 +1872,10 @@ table.dataTable thead .sorting:after {
color: #636363 ;
}
#toast-container {
margin-top: 90px;
}
/*
* metismenu - v1.1.3
* Easy menu jQuery plugin for Twitter Bootstrap 3
......@@ -2187,3 +2191,6 @@ table.dataTable thead .sorting:after {
left: 50%;
top: 50%;
}
.toast-title{font-weight:700}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button{position:relative;right:-.3em;top:-.3em;float:right;font-size:20px;font-weight:700;color:#fff;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff;opacity:.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}.toast-close-button:focus,.toast-close-button:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}button.toast-close-button{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.toast-top-center{top:0;right:0;width:100%}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999;pointer-events:none}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{position:relative;pointer-events:auto;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#fff;opacity:.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}#toast-container>:hover{-moz-box-shadow:0 0 12px #000;-webkit-box-shadow:0 0 12px #000;box-shadow:0 0 12px #000;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer}#toast-container>.toast-info{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}#toast-container>.toast-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}#toast-container>.toast-success{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}#toast-container>.toast-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important}#toast-container.toast-bottom-center>div,#toast-container.toast-top-center>div{width:300px;margin-left:auto;margin-right:auto}#toast-container.toast-bottom-full-width>div,#toast-container.toast-top-full-width>div{width:96%;margin-left:auto;margin-right:auto}.toast{background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-warning{background-color:#f89406}.toast-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}@media all and (max-width:240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:241px) and (max-width:480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:481px) and (max-width:768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}}
\ No newline at end of file
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment