NgServerMessages
How do I make an ngservermessages?
Intercept a specific http request, show a loading message and a specific http status messages.. What is a ngservermessages? How do you make a ngservermessages? This script and codes were developed by Sébastien Lombard on 16 September 2022, Friday.
NgServerMessages - Script Codes HTML Codes
<!DOCTYPE html>
<html >
<head> <meta charset="UTF-8"> <title>ngServerMessages</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"> <link rel='stylesheet prefetch' href='http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css'>
<link rel='stylesheet prefetch' href='https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.2.0/css/font-awesome.min.css'>
</head>
<body> <div ng-app="MyApp" ng-controller="MainCtrl as main" class="container text-center"> <h1>ngServerMessages</h1> <hr> <p> Intercept a specific http request, show a loading message and a specific http status messages. </p> <hr> <h2>Demos</h2> <div class="row"> <div class="col-sm-6"> <h4>Alert box</h4> <div class="row"> <form name="box200" ng-submit="main.box200()" novalidate class="col-xs-6"> <button type="submit" class="btn btn-success">Call a 200</button> <br><br> <!-- Loading + 200 --> <div ng-server-messages="bloc200"> <div ng-server-message-loading class="alert"> <i class="fa fa-refresh fa-spin"></i> Loading... </div> <div ng-server-message="200" class="alert alert-success"> <i class="fa fa-check"></i> Yeah :D </div> </div> </form> <form name="box419" ng-submit="main.box419()" novalidate class="col-xs-6"> <button type="submit" class="btn btn-danger">Call a 419</button> <br><br> <!-- Loading + 419 --> <div ng-server-messages="bloc419"> <div ng-server-message-loading class="alert"> <i class="fa fa-refresh fa-spin"></i> Loading... </div> <div ng-server-message="419" class="alert alert-danger"> <i class="fa fa-times"></i> Hooo :( </div> </div> </form> </div> </div> <div class="col-sm-6"> <h4>Dynamic buttons</h4> <div class="row"> <form name="btn200" ng-submit="main.btn200()" novalidate class="col-xs-6"> <!-- Loading + 200 --> <div ng-server-messages="btn200"> <div ng-server-message-default> <button type="submit" class="btn btn-primary">Call a 200</button> </div> <div ng-server-message-loading> <button class="btn btn-link"><i class="fa fa-refresh fa-spin"></i> Loading...</button> </div> <div ng-server-message="200"> <button class="btn btn-success"><i class="fa fa-check"></i> Yeah :D</button> </div> </div> </form> <form name="btn200" ng-submit="main.btn419()" novalidate class="col-xs-6"> <!-- Loading + 419 --> <div ng-server-messages="btn419"> <div ng-server-message-default> <button type="submit" class="btn btn-primary">Call a 419</button> </div> <div ng-server-message-loading> <button class="btn btn-link"><i class="fa fa-refresh fa-spin"></i> Loading...</button> </div> <div ng-server-message="419"> <button class="btn btn-danger"><i class="fa fa-times"></i> Hooo :(</button> </div> </div> </form> </div> </div> </div> <hr class="clearfix"> <h4><a href="https://github.com/Seb-L/ngServerMessages" target="_blank"><i class="fa fa-github"></i> Github repository</a></h4>
</div> <script src='http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.14/angular.min.js'></script> <script src="js/index.js"></script>
</body>
</html>
NgServerMessages - Script Codes JS Codes
'use strict';
angular.module('MyApp', ['ngServerMessages']) .controller('MainCtrl', function($scope, $http) { var main = this; main.box200 = function() { $http({ method: 'GET', url: 'http://private-5fbc2-sebl.apiary-mock.com/notes', headers: { 'X-ng-service-name': 'bloc200' } }); }; main.box419 = function() { $http({ method: 'GET', url: 'http://private-5fbc2-sebl.apiary-mock.com/notesbadrequest', headers: { 'X-ng-service-name': 'bloc419' } }); }; main.btn200 = function() { $http({ method: 'GET', url: 'http://private-5fbc2-sebl.apiary-mock.com/notes', headers: { 'X-ng-service-name': 'btn200' } }); }; main.btn419 = function() { $http({ method: 'GET', url: 'http://private-5fbc2-sebl.apiary-mock.com/notesbadrequest', headers: { 'X-ng-service-name': 'btn419' } }); }; })
angular.module('ngServerMessages', [])
// Intercept http request and broadcast events
.config(function($httpProvider) { $httpProvider.interceptors.push(function($rootScope, $q) { return { 'request': function(config) { $rootScope.$broadcast('server.request.ok', config); return config; }, 'requestError': function(rejection) { $rootScope.$broadcast('server.start.error', rejection); return $q.reject(rejection); }, 'response': function(response) { $rootScope.$broadcast('server.response.ok', response); return response; }, 'responseError': function(rejection) { $rootScope.$broadcast('server.response.error', rejection); return $q.reject(rejection); } } });
})
// Parent directive to get the current endpoint
.directive('ngServerMessages', function() { return { restrict: 'A', require: 'ngServerMessages', controller: function($scope, $attrs, $rootScope) { this.endpoint = $attrs.ngServerMessages; } };
})
// Handle messages visibility based on http status
.directive('ngServerMessage', function() { return { restrict: 'A', require: '^ngServerMessages', link: function(scope, element, attrs, ctrl) { element.css({ 'display': 'none' }); scope.$on('server.request.ok', function(event, args) { process(args.headers['X-ng-service-name'], null, true); }); scope.$on('server.response.ok', function(event, args) { process(args.config.headers['X-ng-service-name'], args.status); }); scope.$on('server.response.error', function(event, args) { process(args.config.headers['X-ng-service-name'], args.status); }); function process(name, status, forceHidden) { var endpoint = name; if (endpoint === ctrl.endpoint) { if (status === parseInt(attrs.ngServerMessage)) { element.css({ 'display': 'block' }); } if (!!forceHidden) { element.css({ 'display': 'none' }); } } } } };
})
// Handle loading message visibility
.directive('ngServerMessageLoading', function() { return { restrict: 'A', require: '^ngServerMessages', link: function(scope, element, attrs, ctrl) { element.css({'display': 'none'}); scope.$on('server.request.ok', function(event, args) { toggle(args.headers['X-ng-service-name'], true); }); scope.$on('server.response.ok', function(event, args) { toggle(args.config.headers['X-ng-service-name'], false); }); scope.$on('server.response.error', function(event, args) { toggle(args.config.headers['X-ng-service-name'], false); }); function toggle(name, vivibility) { if (name === ctrl.endpoint) { vivibility ? element.css({'display': 'block'}) : element.css({'display': 'none'}); } } } };
})
// Handle loading message visibility
.directive('ngServerMessageDefault', function() { return { restrict: 'A', require: '^ngServerMessages', link: function(scope, element, attrs, ctrl) { element.css({'display': 'block'}); scope.$on('server.request.ok', function(event, args) { process(args.headers['X-ng-service-name']); }); scope.$on('server.response.ok', function(event, args) { process(args.config.headers['X-ng-service-name']); }); scope.$on('server.response.error', function(event, args) { process(args.config.headers['X-ng-service-name']); }); function process(name) { if (name === ctrl.endpoint) { element.css({'display': 'none'}); } } } };
});
Developer | Sébastien Lombard |
Username | SebL |
Uploaded | September 16, 2022 |
Rating | 3 |
Size | 3,106 Kb |
Views | 20,240 |
Find the perfect freelance services for your business! Fiverr's mission is to change how the world works together. Fiverr connects businesses with freelancers offering digital services in 500+ categories. Find Developer!
Name | Size |
Responsive grid template editor concept | 4,205 Kb |
Super quick responsive parametric grid generator with SASS | 4,000 Kb |
Bloc hover animation | 3,452 Kb |
Simple 2 sides title animation | 2,306 Kb |
Super simple CSS custom checkbox | 2,990 Kb |
Perspective modal window | 3,724 Kb |
SoundCloud Mini player with css record animation | 5,024 Kb |
Handles | 1,792 Kb |
ES6 Class to get query params in string url or array of string urls | 3,158 Kb |
Jasper is the AI Content Generator that helps you and your team break through creative blocks to create amazing, original content 10X faster. Discover all the ways the Jasper AI Content Platform can help streamline your creative workflows. Start For Free!
Name | Username | Size |
My three.js practice | Esambino | 3,203 Kb |
Degree Picker | Idered | 4,307 Kb |
Ripples in water | Nobitagit | 2,704 Kb |
UI Challenge - Budget Selector | AgentRR007 | 3,547 Kb |
Toggle Time | Petebot | 5,345 Kb |
Day 1 - Portfolio | Chpecson | 3,532 Kb |
Calculator | Rzencoder | 4,572 Kb |
Basic HTML Slideshow | Tomhodgins | 3,386 Kb |
Flip test | Madhes | 1,635 Kb |
Factorial | KeithleySLHS | 1,158 Kb |
Surf anonymously, prevent hackers from acquiring your IP address, send anonymous email, and encrypt your Internet connection. High speed, ultra secure, and easy to use. Instant setup. Hide Your IP Now!