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) { ...@@ -160,7 +160,8 @@ module.exports = function (grunt) {
"app/bower_components/metisMenu/dist/metisMenu.js", "app/bower_components/metisMenu/dist/metisMenu.js",
"app/bower_components/Chart.js/Chart.js", "app/bower_components/Chart.js/Chart.js",
"app/bower_components/intro.js/intro.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' dest: 'dist/bower_components/components.js'
}, },
...@@ -174,7 +175,8 @@ module.exports = function (grunt) { ...@@ -174,7 +175,8 @@ module.exports = function (grunt) {
"app/bower_components/angular-loading-bar/build/loading-bar.min.css", "app/bower_components/angular-loading-bar/build/loading-bar.min.css",
"app/bower_components/font-awesome/css/font-awesome.min.css", "app/bower_components/font-awesome/css/font-awesome.min.css",
"app/bower_components/intro.js/intro.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"
] ]
} }
}, },
......
...@@ -1856,4 +1856,8 @@ table.dataTable thead .sorting:after { ...@@ -1856,4 +1856,8 @@ table.dataTable thead .sorting:after {
text-align: center; text-align: center;
margin-bottom: 20px; margin-bottom: 20px;
color: #636363 ; color: #636363 ;
}
#toast-container {
margin-top: 90px;
} }
\ No newline at end of file
...@@ -46,6 +46,7 @@ angular.module( ...@@ -46,6 +46,7 @@ angular.module(
* *
* For development needs backendurl can be switched from both dev/settings page and querystring `?backendurl=http://example.com` * 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 () { .constant("RESTURL", (function () {
// todo: below backendurl definition is for development purpose and will be deleted // 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/"; var backendurl = location.href.indexOf('nightly') > -1 ? "//nightly.api.ulakbus.net/" : "//api.ulakbus.net/";
...@@ -67,6 +68,7 @@ angular.module( ...@@ -67,6 +68,7 @@ angular.module(
return {url: backendurl}; return {url: backendurl};
})()) })())
.constant('toastr', window.toastr)
.config(function ($logProvider) { .config(function ($logProvider) {
$logProvider.debugEnabled(true); $logProvider.debugEnabled(true);
}); });
\ No newline at end of file
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
</h3> </h3>
<div class="node-table"> <div class="node-table">
<ng-include src="'shared/templates/nodeTable.html'"></ng-include> <ng-include src="'components/crud/templates/nodeTable.html'"></ng-include>
</div> </div>
<hr> <hr>
</div> </div>
...@@ -27,8 +27,11 @@ ...@@ -27,8 +27,11 @@
</span> </span>
</h3> </h3>
<div class="list-node-table"> <div class="list-node-table" ng-if="!meta.translate_widget">
<ng-include src="'shared/templates/nodeTable.html'"></ng-include> <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> </div>
<hr> <hr>
</div> </div>
......
...@@ -63,11 +63,10 @@ ...@@ -63,11 +63,10 @@
</td> </td>
<td ng-if="meta.allow_actions!==false"> <td ng-if="meta.allow_actions!==false">
<div ng-hide="meta.object_actions.length > 0"> <div ng-hide="meta.object_actions.length > 0">
<button modal-for-nodes="{{node.schema.model_name}},{{node.schema.formType}},edit,{{$index}}"> <span modal-for-nodes="{{node.schema.model_name}},{{node.schema.formType}},edit,{{$index}}">
Düzenle <i class="fa fa-pencil-square-o fa-fw"></i>
</button> </span>
<br> <span ng-click="remove(node, 'ListNode', $index)"><i class="fa fa-times fa-fw"></i></span>
<button ng-click="remove(node, 'ListNode', $index)">Sil</button>
</div> </div>
<div ng-show="meta.object_actions.length > 0"> <div ng-show="meta.object_actions.length > 0">
<!-- define object actions here --> <!-- define object actions here -->
......
...@@ -25,6 +25,7 @@ ...@@ -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/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/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/intro.js/themes/introjs-nassim.css" type="text/css">
<link rel="stylesheet" href="bower_components/toastr/toastr.min.css" type="text/css">
</head> </head>
<body ng-controller="KeyListenController" ng-keydown="down($event)"> <body ng-controller="KeyListenController" ng-keydown="down($event)">
...@@ -88,6 +89,7 @@ ...@@ -88,6 +89,7 @@
<script src="bower_components/angular-schema-form/dist/bootstrap-decorator.min.js"></script> <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/angular-gettext/dist/angular-gettext.min.js"></script>
<script src="bower_components/moment/min/moment.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 --> <!-- TODO: check all js and remove unused -->
......
...@@ -26,6 +26,7 @@ ...@@ -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/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/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/intro.js/themes/introjs-nassim.css" type="text/css">
<link rel="stylesheet" href="bower_components/toastr/toastr.min.css" type="text/css">
<!-- @endif --> <!-- @endif -->
<!-- @if NODE_ENV == 'PRODUCTION' --> <!-- @if NODE_ENV == 'PRODUCTION' -->
...@@ -96,6 +97,7 @@ ...@@ -96,6 +97,7 @@
<script src="bower_components/angular-schema-form/dist/bootstrap-decorator.min.js"></script> <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/angular-gettext/dist/angular-gettext.min.js"></script>
<script src="bower_components/moment/min/moment.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 --> <!-- TODO: check all js and remove unused -->
......
...@@ -51,6 +51,7 @@ angular.module( ...@@ -51,6 +51,7 @@ angular.module(
* *
* For development needs backendurl can be switched from both dev/settings page and querystring `?backendurl=http://example.com` * 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 () { .constant("RESTURL", (function () {
// todo: below backendurl definition is for development purpose and will be deleted // 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/"; var backendurl = location.href.indexOf('nightly') > -1 ? "//nightly.api.ulakbus.net/" : "//api.ulakbus.net/";
...@@ -72,6 +73,7 @@ angular.module( ...@@ -72,6 +73,7 @@ angular.module(
return {url: backendurl}; return {url: backendurl};
})()) })())
.constant('toastr', window.toastr)
.config(function ($logProvider) { .config(function ($logProvider) {
// @if NODE_ENV='PRODUCTION' // @if NODE_ENV='PRODUCTION'
$logProvider.debugEnabled(false); $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']) ...@@ -551,6 +551,23 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
int: {default: _numbers}, int: {default: _numbers},
boolean: {default: function () {}}, boolean: {default: function () {}},
string: {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: { text_general: {
default: default:
function (scope, v, k) { function (scope, v, k) {
...@@ -1078,6 +1095,7 @@ angular.module('ulakbus.formService', ['ui.bootstrap']) ...@@ -1078,6 +1095,7 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
}); });
var data = { var data = {
"form": $scope.model, "form": $scope.model,
"object_key": $scope.object_key,
"token": $scope.token, "token": $scope.token,
"model": $scope.form_params.model, "model": $scope.form_params.model,
"cmd": $scope.form_params.cmd, "cmd": $scope.form_params.cmd,
......
...@@ -21,7 +21,7 @@ angular.module('ulakbus') ...@@ -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 * - API returns `is_login` key to check if current user is authenticated. Interceptor checks and if not logged
* in redirects to login page. * 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 { return {
'request': function (config) { 'request': function (config) {
if (config.method === "POST") { if (config.method === "POST") {
...@@ -55,6 +55,10 @@ angular.module('ulakbus') ...@@ -55,6 +55,10 @@ angular.module('ulakbus')
} }
} }
// handle toast notifications here
if (response.data.notify) {toastr.info(response.data.notify)}
return response; return response;
}, },
'responseError': function (rejection) { 'responseError': function (rejection) {
...@@ -109,7 +113,8 @@ angular.module('ulakbus') ...@@ -109,7 +113,8 @@ angular.module('ulakbus')
if (errorInModal) { if (errorInModal) {
errorModal(); errorModal();
} else { } 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 { ...@@ -1872,6 +1872,10 @@ table.dataTable thead .sorting:after {
color: #636363 ; color: #636363 ;
} }
#toast-container {
margin-top: 90px;
}
/* /*
* metismenu - v1.1.3 * metismenu - v1.1.3
* Easy menu jQuery plugin for Twitter Bootstrap 3 * Easy menu jQuery plugin for Twitter Bootstrap 3
...@@ -2187,3 +2191,6 @@ table.dataTable thead .sorting:after { ...@@ -2187,3 +2191,6 @@ table.dataTable thead .sorting:after {
left: 50%; left: 50%;
top: 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