201 lines
5.1 KiB
JavaScript
201 lines
5.1 KiB
JavaScript
|
(function (angular) {
|
||
|
|
||
|
const SECTION_NAME = "network-throttle";
|
||
|
|
||
|
angular
|
||
|
.module("BrowserSync")
|
||
|
.controller("NetworkThrottleController", [
|
||
|
"options",
|
||
|
"pagesConfig",
|
||
|
"Socket",
|
||
|
"$scope",
|
||
|
NetworkThrottleController
|
||
|
]);
|
||
|
|
||
|
/**
|
||
|
* @param options
|
||
|
* @param pagesConfig
|
||
|
* @param Socket
|
||
|
* @param $scope
|
||
|
*/
|
||
|
function NetworkThrottleController (options, pagesConfig, Socket, $scope) {
|
||
|
|
||
|
var ctrl = this;
|
||
|
|
||
|
ctrl.section = pagesConfig[SECTION_NAME];
|
||
|
ctrl.options = options.bs;
|
||
|
ctrl.uiOptions = options.ui;
|
||
|
ctrl.clientFiles = options.ui.clientFiles || {};
|
||
|
ctrl.section = pagesConfig[SECTION_NAME];
|
||
|
|
||
|
ctrl.throttle = ctrl.uiOptions[SECTION_NAME];
|
||
|
ctrl.selected = ctrl.throttle.targets[0].id;
|
||
|
ctrl.servers = ctrl.throttle.servers;
|
||
|
ctrl.port = "";
|
||
|
ctrl.portEntry = "auto";
|
||
|
ctrl.serverCount = Object.keys(ctrl.servers).length;
|
||
|
ctrl.blurs = [];
|
||
|
|
||
|
ctrl.state = {
|
||
|
success: false,
|
||
|
waiting: false,
|
||
|
classname: "ready"
|
||
|
};
|
||
|
|
||
|
ctrl.createServer = function (selected, event) {
|
||
|
|
||
|
if (ctrl.blurs.indexOf(event.target) === -1) {
|
||
|
ctrl.blurs.push(event.target);
|
||
|
}
|
||
|
|
||
|
var item = getByProp(ctrl.throttle.targets, "id", ctrl.selected);
|
||
|
|
||
|
|
||
|
if (ctrl.portEntry === "auto") {
|
||
|
return send("");
|
||
|
}
|
||
|
|
||
|
if (!ctrl.port || !ctrl.port.length) {
|
||
|
setError();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (!ctrl.port.match(/\d{4,5}/)) {
|
||
|
setError();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var port = parseInt(ctrl.port, 10);
|
||
|
|
||
|
if (port < 1024 || port > 65535) {
|
||
|
setError();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
send(ctrl.port);
|
||
|
|
||
|
function setError() {
|
||
|
ctrl.state.waiting = false;
|
||
|
ctrl.state.portError = true;
|
||
|
}
|
||
|
|
||
|
function send (port) {
|
||
|
|
||
|
ctrl.state.classname = "waiting";
|
||
|
ctrl.state.waiting = true;
|
||
|
|
||
|
Socket.uiEvent({
|
||
|
namespace: SECTION_NAME,
|
||
|
event: "server:create",
|
||
|
data: {
|
||
|
speed: item,
|
||
|
port: port
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
|
||
|
ctrl.destroyServer = function (item, port) {
|
||
|
Socket.uiEvent({
|
||
|
namespace: SECTION_NAME,
|
||
|
event: "server:destroy",
|
||
|
data: {
|
||
|
speed: item,
|
||
|
port: port
|
||
|
}
|
||
|
});
|
||
|
};
|
||
|
|
||
|
ctrl.toggleSpeed = function (item) {
|
||
|
if (!item.active) {
|
||
|
item.urls = [];
|
||
|
}
|
||
|
};
|
||
|
|
||
|
ctrl.update = function (data) {
|
||
|
|
||
|
ctrl.servers = data.servers;
|
||
|
ctrl.serverCount = Object.keys(ctrl.servers).length;
|
||
|
|
||
|
if (data.event === "server:create") {
|
||
|
updateButtonState();
|
||
|
}
|
||
|
|
||
|
$scope.$digest();
|
||
|
};
|
||
|
|
||
|
function updateButtonState() {
|
||
|
|
||
|
ctrl.state.success = true;
|
||
|
ctrl.state.classname = "success";
|
||
|
|
||
|
setTimeout(function () {
|
||
|
|
||
|
ctrl.blurs.forEach(function (elem) {
|
||
|
elem.blur();
|
||
|
});
|
||
|
|
||
|
setTimeout(function () {
|
||
|
ctrl.state.success = false;
|
||
|
ctrl.state.waiting = false;
|
||
|
ctrl.state.classname = "ready";
|
||
|
|
||
|
$scope.$digest();
|
||
|
|
||
|
}, 500);
|
||
|
|
||
|
}, 300);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param collection
|
||
|
* @param prop
|
||
|
* @returns {*}
|
||
|
*/
|
||
|
function getByProp (collection, prop, name) {
|
||
|
var match = collection.filter(function (item) {
|
||
|
return item[prop] === name;
|
||
|
});
|
||
|
if (match.length) {
|
||
|
return match[0];
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
Socket.on("ui:network-throttle:update", ctrl.update);
|
||
|
$scope.$on("$destroy", function () {
|
||
|
Socket.off("ui:network-throttle:update", ctrl.update);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Display the snippet when in snippet mode
|
||
|
*/
|
||
|
angular
|
||
|
.module("BrowserSync")
|
||
|
.directive("throttle", function () {
|
||
|
return {
|
||
|
restrict: "E",
|
||
|
replace: true,
|
||
|
scope: {
|
||
|
"target": "=",
|
||
|
"options": "="
|
||
|
},
|
||
|
templateUrl: "network-throttle.directive.html",
|
||
|
controller: ["$scope", "Socket", throttleDirectiveControlller],
|
||
|
controllerAs: "ctrl"
|
||
|
};
|
||
|
});
|
||
|
|
||
|
/**
|
||
|
* @param $scope
|
||
|
*/
|
||
|
function throttleDirectiveControlller ($scope) {
|
||
|
|
||
|
var ctrl = this;
|
||
|
|
||
|
ctrl.throttle = $scope.options[SECTION_NAME];
|
||
|
|
||
|
}
|
||
|
|
||
|
})(angular);
|