PageRenderTime 64ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 0ms

/js/sites.js

https://github.com/nimishamukherjee/CPNSites
JavaScript | 1106 lines | 920 code | 93 blank | 93 comment | 37 complexity | f0110d321a0ddeb0e52091708c48a6a4 MD5 | raw file
  1. $(document).ready(function() {
  2. //=======================L I S T O F D E V I C E S====================
  3. //Get the list of devices
  4. var getListOfDevicesUrl = Backbone.Model.extend({
  5. urlRoot : "data/listofdevices.json"
  6. //url :function(){return "/Orchestration/account/"+accountID+"/devices"}
  7. });
  8. //Define Each Device for the List Model
  9. var DeviceListModel = Backbone.Model.extend({
  10. url:"http://www.google.com"
  11. //url :function(){return "/Orchestration/account/"+accountID+"/devices" + (this.get("id") == null ? "" : "/" + this.get("id"))}
  12. });
  13. //Collection of devices
  14. var DeviceList = Backbone.Collection.extend({
  15. model: DeviceListModel
  16. });
  17. //Define individual device list view - activated
  18. var EachDevInListActView = Backbone.View.extend({
  19. tagName: "tr",
  20. className: "eachdevlistact",
  21. template: $("#activatedDevicesTemplate").html(),
  22. eachDeviceListTempl: "eachdevlistTempl",
  23. events: {
  24. "click td": "startDevInfoDisplay",
  25. },
  26. render: function (ref) {
  27. var _self = this;
  28. var data = this.model.toJSON();
  29. this.compiled = dust.compile(this.template,this.eachDeviceListTempl);
  30. dust.loadSource(this.compiled);
  31. dust.render(this.eachDeviceListTempl,data,function(err,out){
  32. _self.$el.html(out);
  33. });
  34. return this;
  35. },
  36. startDevInfoDisplay: function(e){
  37. deviceID = this.model.get('id');
  38. }
  39. });
  40. //Define individual device list view - pending activation
  41. var EachDevInListPendActView = Backbone.View.extend({
  42. tagName: "tr",
  43. className: "eachdevlistpendact",
  44. template: $("#pendingActivationTemplate").html(),
  45. eachDeviceListTempl: "eachdevlistTempl",
  46. events: {
  47. "click td": "storeDeviceType",
  48. },
  49. render: function () {
  50. var _self = this;
  51. var data = this.model.toJSON();
  52. this.compiled = dust.compile(this.template,this.eachDeviceListTempl);
  53. dust.loadSource(this.compiled);
  54. dust.render(this.eachDeviceListTempl,data,function(err,out){
  55. _self.$el.html(out);
  56. });
  57. return this;
  58. },
  59. storeDeviceType: function(ref){
  60. activateDeviceType = this.model.get("type");
  61. }
  62. });
  63. //=======================A C T I V A T E A D E V I C E ====================
  64. //Define Activate a device view
  65. var ActivateADeviceView = Backbone.View.extend({
  66. tagName: "div",
  67. className: "actAdev",
  68. template: $("#activateAdeviceTemplate").html(),
  69. actTmpl: "activateadeviceTempl",
  70. events:{
  71. "click button.activateDevice": "activateDevice",
  72. "click button.cancel": "fnCancel",
  73. },
  74. render: function () {
  75. var _self = this;
  76. var data = this.model.toJSON();
  77. this.compiled = dust.compile(this.template,this.actTmpl);
  78. dust.loadSource(this.compiled);
  79. dust.render(this.actTmpl,data,function(err,out){
  80. _self.$el.html(out);
  81. });
  82. return this;
  83. },
  84. activateDevice:function(e){
  85. e.preventDefault();
  86. var that = this;
  87. var data = Backbone.Syphon.serialize(this);
  88. this.model.set(data);
  89. this.model.save(null, {
  90. success:function(){
  91. alert("done");
  92. location.href = ""
  93. },
  94. error:function(m,xhr,o){
  95. location.href = ""
  96. alert("error")
  97. }
  98. })
  99. },
  100. fnCancel: function(e){
  101. e.preventDefault();
  102. }
  103. });
  104. //define master view
  105. var ListOfDevicesView = Backbone.View.extend({
  106. eachDevView: null,
  107. render: function () {
  108. var that = this;
  109. _.each(this.collection.models, function (item) {
  110. that.renderDeviceList(item);
  111. }, this);
  112. },
  113. renderDeviceList: function (item) {
  114. if(item.toJSON().serial==null){
  115. //check if activate a device
  116. if(activateDeviceType==item.toJSON().type){
  117. this.eachDevView = new ActivateADeviceView({
  118. model: item
  119. });
  120. $("#activateadevice").append(this.eachDevView.render().el);
  121. }else{
  122. this.eachDevView = new EachDevInListPendActView({
  123. model: item
  124. });
  125. $("#pendactivatedevlist").append(this.eachDevView.render().el);
  126. }
  127. }else{
  128. this.eachDevView = new EachDevInListActView({
  129. model: item
  130. });
  131. $("#activateddevicelist").append(this.eachDevView.render().el);
  132. }
  133. }
  134. });
  135. //=======================E A C H D E V I C E I N F O R M A T I O N====================
  136. //Get the each device information
  137. //Model
  138. var getADeviceInfo = Backbone.Model.extend({
  139. urlRoot : "data/deviceInfo.json"
  140. //url :function(){return "/Orchestration/account/"+accountID+"/devices" + (this.get("id") == null ? "" : "/" + this.get("id"))}
  141. });
  142. //View
  143. var DeviceInfoView = Backbone.View.extend({
  144. tagName: "div",
  145. className: "deviceInfo",
  146. template: $("#deviceInfoViewTemplate").html(),
  147. currentTemplate: $("#deviceInfoViewTemplate").html(),
  148. editTemplate: $("#deviceInfoEditTemplate").html(),
  149. eachDeviceViewTempl: "devInfoTempl",
  150. events: {
  151. "click button.editDevice": "fnEditDevDetails",
  152. "click button.deleteDevice": "fnDeleteDevDetails",
  153. "click button.saveDeviceEdits": "fnSaveDeviceEdit",
  154. "click button.cancelDeviceEdits": "fnCancelDeviceEdits",
  155. },
  156. initialize: function(){
  157. this.on('completeDeviceDelete', this.fnCompleteDeviceDelete, this);
  158. },
  159. render: function (ref) {
  160. var _self = this;
  161. var data = this.model.toJSON();
  162. viewDeviceName = this.model.get("name");
  163. this.compiled = dust.compile(this.currentTemplate,this.eachDeviceViewTempl);
  164. dust.loadSource(this.compiled);
  165. dust.render(this.eachDeviceViewTempl,data,function(err,out){
  166. _self.$el.html(out);
  167. });
  168. return this;
  169. },
  170. fnEditDevDetails: function(e){
  171. e.preventDefault();
  172. this.currentTemplate = this.editTemplate;
  173. this.render();
  174. },
  175. fnSaveDeviceEdit: function(e){
  176. e.preventDefault();
  177. var that = this;
  178. var data = Backbone.Syphon.serialize(this);
  179. this.model.set(data);
  180. //save to server
  181. this.model.save(null, {
  182. success:function(){
  183. alert("done");
  184. },
  185. error:function(m,xhr,o){
  186. alert("error")
  187. }
  188. })
  189. this.currentTemplate = this.template;
  190. this.render();
  191. },
  192. fnDeleteDevDetails: function(e){
  193. e.preventDefault();
  194. //double popup for clarification
  195. fnShowAlert("Are you sure you want to delete this device","delete","device");
  196. },
  197. fnCompleteDeviceDelete: function(e){
  198. this.remove();
  199. this.model.destroy({
  200. success:function(){
  201. },
  202. error: function(){
  203. }
  204. });
  205. viewDeviceName = "";
  206. location.href="";
  207. },
  208. fnCancelDeviceEdits: function(e){
  209. e.preventDefault();
  210. this.currentTemplate = this.template;
  211. this.render();
  212. }
  213. });
  214. //============================F I R E W A L L=====================
  215. var getFirewallUrl = Backbone.Model.extend({
  216. urlRoot : "data/firewall.json"
  217. });
  218. //Define Provider Network Model
  219. var RuleModel = Backbone.Model.extend({
  220. defaults: {
  221. 'name':'',
  222. 'description':'',
  223. 'action':''
  224. }
  225. });
  226. //Collection of rules
  227. var RuleList = Backbone.Collection.extend({
  228. model: RuleModel
  229. });
  230. //Define Policy Model
  231. var PolicyModel = Backbone.Model.extend({
  232. defaults:{
  233. 'default':"",
  234. 'rules':""
  235. },
  236. url:"http://www.google.com"
  237. //urlRoot: "http://admin.qa.intercloud.net/Orchestration/account/devices/"+deviceID+"/firewall/"+policyid
  238. });
  239. //Define Firewall List (collection of models)
  240. var FirewallList = Backbone.Collection.extend({
  241. model: PolicyModel
  242. });
  243. //Define individual rule view
  244. var RuleView = Backbone.View.extend({
  245. tagName: "div",
  246. className: "eachrule",
  247. template: $("#ruleViewTemplate").html(),
  248. currentTemplate: $("#ruleViewTemplate").html(),
  249. editTemplate: $("#ruleEditTemplate").html(),
  250. editNatTemplate: $("#ruleNatEditTemplate").html(),
  251. rlTempl: "ruleTempl",
  252. compiled: null,
  253. parentref: null,
  254. events:{
  255. "click button.editRule": "editFirewallRule",
  256. "click button.removeRule": "deleteFirewallRule",
  257. "click button.saveRule": "saveFirewallRule",
  258. "click button.cancel": "fnCancel",
  259. "change select.dropdown": "fnDropDowns",
  260. "keyup input": "fnCheckInput",
  261. },
  262. render: function (ref) {
  263. if(ref){
  264. this.parentref = ref;
  265. }
  266. var _self = this;
  267. if(this.model != null){
  268. var data = this.model.toJSON();
  269. //For new rule - show the edit template
  270. if(this.model.get('id')==null){
  271. if(this.parentref.fnReturnPolicy()=="nat"){
  272. this.currentTemplate = this.editNatTemplate;
  273. }else{
  274. this.currentTemplate = this.editTemplate;
  275. }
  276. }
  277. }
  278. this.compiled = dust.compile(this.currentTemplate,this.rlTempl);
  279. dust.loadSource(this.compiled);
  280. dust.render(this.rlTempl,data,function(err,out){
  281. _self.$el.html(out);
  282. });
  283. //if(this.model.get('id')){
  284. //Edit - after rendering - check for dropdowns
  285. this.fnSetDropdownsVals();
  286. //}
  287. return this;
  288. },
  289. editFirewallRule:function(e){
  290. e.stopPropagation();
  291. if(this.parentref.fnReturnPolicy()=="nat"){
  292. this.currentTemplate = this.editNatTemplate;
  293. }else{
  294. this.currentTemplate = this.editTemplate;
  295. }
  296. this.render();
  297. },
  298. saveFirewallRule:function(e){
  299. e.preventDefault();
  300. var data = Backbone.Syphon.serialize(this);
  301. this.currentTemplate = this.template;
  302. this.model.set(data);
  303. if(data.id){
  304. //save to parent policy
  305. this.parentref.savePolicy(data,this.parentref,"");
  306. }else{
  307. //add to parent policy
  308. this.parentref.savePolicy(data,this.parentref,"add");
  309. }
  310. },
  311. deleteFirewallRule:function(e){
  312. e.preventDefault();
  313. this.remove();
  314. this.model.destroy();
  315. },
  316. fnCancel:function(e){
  317. e.preventDefault();
  318. if(this.model.get('id')){
  319. this.currentTemplate = this.template;
  320. this.render();
  321. }else{
  322. this.remove();
  323. this.model.destroy();
  324. }
  325. },
  326. fnSetDropdownsVals:function(){
  327. var that = this;
  328. var policyType = this.parentref.fnReturnPolicy();
  329. switch(policyType){
  330. case "lan":
  331. var optstr = "<option>Accept</option><option>Reject</option><option>Drop</option><option>Static NAT</option>";
  332. this.$("#action").html(optstr)
  333. break;
  334. case "wan":
  335. var optstr = "<option>Accept</option>,<option>Reject</option><option>Drop</option><option>Port Forward</option><option>Service bypass</option>";
  336. this.$("#action").html(optstr)
  337. break;
  338. }
  339. if(this.model.get('id')){
  340. this.$('select > option').each(function() {
  341. var optVal = $(this).val().toLowerCase();
  342. //action
  343. if(optVal==that.model.get('action').toLowerCase()){
  344. $(this).attr('selected','selected');
  345. that.fnSetDropDowns($(this).parent());
  346. }
  347. //protocol
  348. if(optVal==that.model.get('protocol').toLowerCase()){
  349. $(this).attr('selected','selected');
  350. that.fnSetDropDowns(that.$("#protocol"));
  351. }
  352. //range
  353. if(optVal==((that.model.get('source')).range).toLowerCase()){
  354. $(this).attr('selected','selected');
  355. that.fnSetDropDowns($(this).parent());
  356. }
  357. //operator
  358. if(optVal==((that.model.get('source')).operator).toLowerCase()){
  359. $(this).attr('selected','selected');
  360. }
  361. //range
  362. if(optVal==((that.model.get('destination')).range).toLowerCase()){
  363. $(this).attr('selected','selected');
  364. that.fnSetDropDowns($(this).parent());
  365. }
  366. //operator
  367. if(optVal==((that.model.get('destination')).operator).toLowerCase()){
  368. $(this).attr('selected','selected');
  369. that.fnSetDropDowns($(this).parent());
  370. }
  371. });
  372. }else{
  373. //Blank template
  374. this.$('select > option').each(function() {
  375. var optVal = $(this).val().toLowerCase();
  376. that.fnSetDropDowns($(this).parent());
  377. that.fnSetDropDowns(that.$("#protocol"));
  378. });
  379. }
  380. },
  381. fnDropDowns:function(e){
  382. e.preventDefault();
  383. this.fnSetDropDowns(e.currentTarget);
  384. },
  385. fnSetDropDowns:function(ref){
  386. switch($(ref).attr('name')){
  387. case 'action':
  388. switch($(ref).val().toLowerCase()){
  389. case "port forward":
  390. //port forward
  391. this.$("#protocol").html("<option>ICMP</option><option>TCP</option><option>UDP</option>");
  392. this.$('.mainmod').removeClass('hidden');
  393. this.$('.misc').removeClass('hidden');
  394. this.$('.publicvpn').addClass('hidden');
  395. this.$('.notes').addClass('hidden');
  396. break;
  397. case "service bypass":
  398. this.$('.mainmod').addClass('hidden');
  399. this.$('.misc').addClass('hidden');
  400. this.$('.notes').removeClass('hidden');
  401. break;
  402. case "static nat":
  403. this.$(".proto").css("display","none")
  404. this.$('.misc').removeClass('hidden');
  405. this.$('.forwardto').addClass('hidden');
  406. this.$('.publicvpn').removeClass('hidden');
  407. this.$('.operatorset').addClass('hidden');
  408. this.$('.range').addClass('hidden')
  409. this.$(".sourceip").removeClass("hidden");
  410. this.$(".destinationip").removeClass("hidden");
  411. break;
  412. default:
  413. //hide forward to/bypass
  414. this.$(".misc").addClass("hidden");
  415. this.$("#protocol").html("<option>ICMP</option><option>IP</option><option>TCP</option><option>UDP</option><option>RDP</option><option>RSVP</option><option>GRE</option><option>ESP</option><option>AH</option><option>L2TP</option>");
  416. break;
  417. }
  418. break;
  419. case 'protocol':
  420. //Operator n Port
  421. if(($(ref).val().toLowerCase()=="icmp") || ($(ref).val().toLowerCase()=="tcp") || ($(ref).val().toLowerCase()=="udp")){
  422. this.$(".operatorset").removeClass("hidden");
  423. }else{
  424. this.$(".operatorset").addClass("hidden");
  425. }
  426. break;
  427. case 'source[operator]':
  428. if($(ref).val().toLowerCase()=="equal"){
  429. this.$(".sourceportto").addClass("hidden");
  430. }else{
  431. this.$(".sourceportto").removeClass("hidden");
  432. }
  433. break;
  434. case 'destination[operator]':
  435. if($(ref).val().toLowerCase()=="equal"){
  436. this.$(".destinationportto").addClass("hidden");
  437. }else{
  438. this.$(".destinationportto").removeClass("hidden");
  439. }
  440. break;
  441. case 'source[range]':
  442. switch($(ref).val().toLowerCase()){
  443. case 'any':
  444. //hide ip and subnet
  445. this.$(".sourceip").addClass("hidden");
  446. this.$(".sourcesubnet").addClass("hidden");
  447. break;
  448. case 'network':
  449. this.$(".sourceip").removeClass("hidden");
  450. this.$(".sourcesubnet").removeClass("hidden");
  451. break;
  452. case 'host':
  453. this.$(".sourceip").removeClass("hidden");
  454. this.$(".sourcesubnet").addClass("hidden");
  455. break;
  456. }
  457. break;
  458. case 'destination[range]':
  459. switch($(ref).val().toLowerCase()){
  460. case 'any':
  461. //hide ip and subnet
  462. this.$(".destinationip").addClass("hidden");
  463. this.$(".destinationsubnet").addClass("hidden");
  464. this.$(".operator").addClass("hidden");
  465. break;
  466. case 'network':
  467. this.$(".destinationip").removeClass("hidden");
  468. this.$(".destinationsubnet").removeClass("hidden");
  469. this.$(".operator").removeClass("hidden");
  470. break;
  471. case 'host':
  472. this.$(".destinationip").removeClass("hidden");
  473. this.$(".destinationsubnet").addClass("hidden");
  474. this.$(".operator").addClass("hidden");
  475. break;
  476. }
  477. break;
  478. }
  479. },
  480. fnCheckValidityAll:function()
  481. {
  482. },
  483. fnCheckInput: function(e)
  484. {
  485. e.preventDefault();
  486. var ip = new RegExp("^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$");
  487. //var ref = "#"+$(e.target).attr('name').replace('[','').replace(']','');
  488. var ref = "#"+$(e.target).attr('name');
  489. if(ref.indexOf('[ip]')>=0 || ref.indexOf('subnet')>=0){
  490. if(($(e.target).val()).match(ip)){
  491. $(e.target).removeClass("error");
  492. }else{
  493. $(e.target).addClass("error");
  494. }
  495. }
  496. this.fnCheckValidityAll();
  497. }
  498. });
  499. var RuleListView = Backbone.View.extend({
  500. parentRefHtml: null,
  501. parentRef:null,
  502. render: function (ref) {
  503. this.parentRefHtml = $(ref.el);
  504. this.parentRef = ref;
  505. var that = this;
  506. _.each(this.collection.models, function (item) {
  507. that.renderRule(item,this.parentRef);
  508. }, this);
  509. },
  510. renderRule: function (item,ref) {
  511. var rlView = new RuleView({
  512. model: item
  513. });
  514. this.parentRefHtml.append(rlView.render(ref).el);
  515. },
  516. addNewRule: function(ref){
  517. var ruleObj = new RuleView();
  518. this.collection.add(ruleObj);
  519. this.parentRefHtml.find(".eachrule").remove();
  520. this.render(ref);
  521. }
  522. })
  523. //Define individual policy view
  524. var FirewallView = Backbone.View.extend({
  525. tagName: "div",
  526. className: "box",
  527. template: $("#firewallViewTemplate").html(),
  528. fwTmpl: "firewallTempl",
  529. compiled: null,
  530. ruleListRender: null,
  531. htmlref: null,
  532. viewRef:null,
  533. events:{
  534. "click button.addRule": "addFirewallRule",
  535. },
  536. initialize:function(){
  537. this.compiled = dust.compile(this.template,this.fwTmpl);
  538. var ref = dust.loadSource(this.compiled);
  539. //this.model.bind("change:rules", this.subRender, this);
  540. this.model.bind("change", this.render, this);
  541. },
  542. render: function () {
  543. var _self = this;
  544. var data = this.model.toJSON();
  545. dust.render(this.fwTmpl,data,function(err,out){
  546. _self.$el.html(out);
  547. });
  548. this.subRender();
  549. return this;
  550. },
  551. subRender: function(){
  552. this.htmlref = $(this.el);
  553. this.viewRef = this;
  554. this.ruleListRender = new RuleListView();
  555. this.ruleListRender.on('change',this.fnHello);
  556. this.ruleListRender.collection = new RuleList(this.model.get('rules'));
  557. this.ruleListRender.render(this.viewRef);
  558. },
  559. fnReturnPolicy:function(){
  560. switch(this.model.get('policy'))
  561. {
  562. case "wan2lan":
  563. case "vpn2lan":
  564. return "wan";
  565. break;
  566. case "lan2wan":
  567. case "lan2vpn":
  568. case "lan2lan":
  569. return "lan";
  570. break;
  571. case "lannatwan":
  572. return "nat";
  573. break;
  574. }
  575. },
  576. savePolicy: function(data,ref,str){
  577. var that = ref;
  578. var oldData = ref.model.toJSON();
  579. var rules = ref.model.get("rules");
  580. var rules_arr=new Array()
  581. if(str=="add"){
  582. //This is for offline
  583. data.id="123"
  584. _.each(rules, function (item) {
  585. rules_arr.push(item)
  586. }, this);
  587. rules_arr.push(data)
  588. }else{
  589. var rules_arr=new Array()
  590. _.each(rules, function (item) {
  591. if(item.id==data.id){
  592. rules_arr.push(data)
  593. }else{
  594. rules_arr.push(item)
  595. }
  596. }, this);
  597. }
  598. ref.model.set("rules",rules_arr);
  599. ref.model.save(null, {
  600. success:function(){
  601. alert("save");
  602. },
  603. error:function(){
  604. //that.model.set('rules',oldData.get('rules'));
  605. alert("err");
  606. }
  607. });
  608. },
  609. addFirewallRule:function(e){
  610. e.preventDefault();
  611. //add a new rule - show the rule edit template
  612. this.ruleListRender.addNewRule(this.viewRef);
  613. }
  614. });
  615. //define master view
  616. var MasterFirewallView = Backbone.View.extend({
  617. el: $("#firewallrules"),
  618. fwView: null,
  619. render: function () {
  620. var that = this;
  621. _.each(this.collection.models, function (item) {
  622. that.renderFirewall(item);
  623. }, this);
  624. },
  625. renderFirewall: function (item) {
  626. this.fwView = new FirewallView({
  627. model: item
  628. });
  629. this.$el.append(this.fwView.render().el);
  630. }
  631. });
  632. //=======================N E T W O R K I N T E R F A C E====================
  633. //Get the network url
  634. var getNetworkUrl = Backbone.Model.extend({
  635. urlRoot : "data/network.json"
  636. });
  637. //Network Interface Model
  638. var interfaceModel = Backbone.Model.extend({
  639. defaults: {
  640. 'name':'',
  641. 'config':[],
  642. 'dhcp':{},
  643. 'staticIP':[],
  644. 'vlan':[]
  645. },
  646. url:"http://www.google.com",
  647. //url :function(){return "Orchestration/account/"+accountID+"/devices/"+deviceid+"/networkinterface/" + (this.get("id") == null ? "/" : "/" + this.get("id"))}
  648. parse: function(response){
  649. for(var key in this.model)
  650. {
  651. var embeddedClass = this.model[key];
  652. var embeddedData = response[key];
  653. response[key] = new embeddedClass(embeddedData, {parse:true});
  654. }
  655. return response;
  656. },
  657. initialize: function(){
  658. //use memento for cancel
  659. var memento = new Backbone.Memento(this);
  660. _.extend(this, memento);
  661. }
  662. });
  663. //Collection of interfaces
  664. var InterfaceList = Backbone.Collection.extend({
  665. model: interfaceModel
  666. });
  667. //Define individual interface view
  668. var InterfaceView = Backbone.View.extend({
  669. tagName: "div",
  670. className: "eachInterface",
  671. template: $("#networkViewTemplate").html(),
  672. currentTemplate: $("#networkViewTemplate").html(),
  673. editTemplate: $("#networkEditTemplate").html(),
  674. nwTempl: "nwInterfaceTempl",
  675. complied: null,
  676. events:{
  677. "click button.editInterface": "fnEditInterface",
  678. "click button.cancelEditInterface": "fnCancelEditInterface",
  679. "click button.saveEditInterface": "fnSaveEditInterface",
  680. "click button.addServerRange": "fnAddServerRange",
  681. "click button.deleteserverrange": "fnDeleteServerRange",
  682. "click button.addStaticIP": "fnAddStaticIp",
  683. "click button.deleteStaticIp": "fnDeleteStaticIp",
  684. "click button.addVlanServeRange": "fnAddVlanServerRange",
  685. "click button.deleteVlanServerRange": "fnDelVlanServerRange",
  686. "click button.addVlanStaticIp": "fnAddVlanStaticIp",
  687. "click button.deleteVlanStaticIp": "fnDelVlanStaticIp",
  688. "click button.addvlaninterface": "fnAddVlanInterface",
  689. "click button.delvlaninterface": "fnDelVlanInterface",
  690. "click input[type=radio]": "fnSetInterfaceType",
  691. "click input[type=checkbox]": "fnSetDhcpServer"
  692. },
  693. render: function () {
  694. vlanCtr=-1;
  695. var _self = this;
  696. var data = this.model.toJSON();
  697. this.compiled = dust.compile(this.currentTemplate,this.nwTempl);
  698. dust.loadSource(this.compiled);
  699. dust.render(this.nwTempl,data,function(err,out){
  700. _self.$el.html(out);
  701. });
  702. return this;
  703. },
  704. //Edit Main Interface
  705. fnEditInterface: function(e){
  706. e.preventDefault();
  707. this.model.store();
  708. this.currentTemplate = this.editTemplate;
  709. this.render();
  710. },
  711. //Cancel on Main Interface
  712. fnCancelEditInterface: function(e){
  713. e.preventDefault();
  714. this.model.restore();
  715. this.currentTemplate = this.template;
  716. this.render();
  717. },
  718. //Save on Main interface
  719. fnSaveEditInterface: function(e){
  720. e.preventDefault();
  721. var data = this.cleanUpArrays(Backbone.Syphon.serialize(this));
  722. var that = this;
  723. this.model.set(data);
  724. this.model.save(null, {
  725. success:function(){
  726. alert("success")
  727. },
  728. error:function(m,xhr,o){
  729. alert("error")
  730. }
  731. });
  732. this.currentTemplate = this.template;
  733. this.render();
  734. },
  735. //Add DHCP on Base Interface
  736. fnAddServerRange: function(e){
  737. e.preventDefault();
  738. this.saveState();
  739. this.model.get("dhcp").ranges.push({'from':'','to':''});
  740. this.render();
  741. },
  742. //Delete DHCP on Base Interface
  743. fnDeleteServerRange: function(e){
  744. e.preventDefault();
  745. this.saveState();
  746. var ranges = this.model.get("dhcp").ranges;
  747. var id = $(e.target).attr("id");
  748. ranges.splice(id,1);
  749. this.model.get("dhcp").ranges = ranges;
  750. this.render();
  751. },
  752. //Add Static IP Route on Base Interface
  753. fnAddStaticIp: function(e){
  754. e.preventDefault();
  755. this.saveState();
  756. this.model.get("staticiproute").push({'networkhost':'','subnetmask':'','gateway':'','sharevpn':false});
  757. this.render()
  758. },
  759. //Delete Static IP on Base Interface
  760. fnDeleteStaticIp:function(e){
  761. e.preventDefault();
  762. this.saveState();
  763. var staticips = this.model.get("staticiproute");
  764. var id = $(e.target).attr("id");
  765. //delete staticips[id];
  766. staticips.splice(id,1)
  767. this.model.set("staticiproute",staticips);
  768. this.render();
  769. },
  770. //Add DHCP on VLAN Interface
  771. fnAddVlanServerRange: function(e){
  772. e.preventDefault();
  773. this.saveState();
  774. var id = parseInt($(e.target).attr("id"));
  775. var vlans = this.model.get("vlaninterfaces");
  776. vlans[id].dhcp.ranges.push({'from':'','to':''});
  777. this.render();
  778. },
  779. //Delete DHCP Server Range on VLAN Interface
  780. fnDelVlanServerRange: function(e){
  781. e.preventDefault();
  782. this.saveState();
  783. var id = $(e.target).attr("id").split('-');
  784. //id[0] is vlan id, id[1] is server range id
  785. var vlans = this.model.get("vlaninterfaces");
  786. var ranges = vlans[id[0]].dhcp.ranges
  787. ranges.splice(id[1],1);
  788. vlans[id[0]].dhcp.ranges = ranges;
  789. this.render();
  790. },
  791. //Add Static IP route on Vlan Interface
  792. fnAddVlanStaticIp: function(e){
  793. e.preventDefault();
  794. this.saveState();
  795. var id = parseInt($(e.target).attr("id"));
  796. var vlans = this.model.get("vlaninterfaces");
  797. vlans[id].staticiproute.push({'networkhost':'','subnetmask':'','gateway':'','sharevpn':false});
  798. this.render();
  799. },
  800. //Delete Staic IP on Vlan Interface
  801. fnDelVlanStaticIp: function(e){
  802. e.preventDefault();
  803. this.saveState();
  804. var id = $(e.target).attr("id").split('-');
  805. //id[0] is vlan id, id[1] is server range id
  806. var vlans = this.model.get("vlaninterfaces");
  807. var staticip = vlans[id[0]].staticiproute
  808. staticip.splice(id[1],1);
  809. vlans[id[0]].staticiproute = staticip;
  810. this.render();
  811. },
  812. //Add new vlan interface
  813. fnAddVlanInterface: function(e){
  814. e.preventDefault();
  815. this.saveState();
  816. this.model.get("vlaninterfaces").push({'id':'','config':{"type": "dhcp", "ipaddress": null, "subnetmask": null,"gateway": null,"broadcast": null},'dhcp':{},'staticiproute':[]});
  817. this.render()
  818. },
  819. //Delete Vlan interface
  820. fnDelVlanInterface: function(e){
  821. e.preventDefault();
  822. this.saveState();
  823. var id = $(e.target).attr("id")
  824. //id is vlan id
  825. var vlans = this.model.get("vlaninterfaces");
  826. vlans.splice(id,1);
  827. this.render();
  828. },
  829. //Dhcp/static toggle
  830. fnSetInterfaceType: function(e){
  831. //e.preventDefault();
  832. this.saveState();
  833. //check if main or sub interface
  834. if($(e.target).attr('name').indexOf('vlan')>=0){
  835. var id_arr = $(e.target).attr('name').split('[');
  836. var id = parseInt(id_arr[1].replace(']',''));
  837. var vlans = this.model.get("vlaninterfaces");
  838. vlans[id].config.type = $(e.target).val();
  839. }else{
  840. this.model.get('config').type = $(e.target).val();
  841. }
  842. this.render();
  843. },
  844. //Enable/disable dhcp server range
  845. fnSetDhcpServer: function(e){
  846. //Enable/disable only toggles the display and does not delete a range
  847. this.saveState();
  848. if($(e.target).attr('name').indexOf('vlan')>=0){
  849. var id_arr = $(e.target).attr('name').split('[');
  850. var id = parseInt(id_arr[1].replace(']',''));
  851. var vlans = this.model.get("vlaninterfaces");
  852. if($(e.target).attr('checked')){
  853. vlans[id].dhcp.enabled = true;
  854. }else{
  855. vlans[id].dhcp.enabled = false;
  856. }
  857. }else{
  858. if($(e.target).attr('checked')){
  859. this.model.get('dhcp').enabled = true;
  860. }else{
  861. //hide ranges
  862. this.model.get('dhcp').enabled = false;
  863. }
  864. }
  865. this.render();
  866. },
  867. saveState:function(){
  868. this.model.set(this.cleanUpArrays(Backbone.Syphon.serialize(this)));
  869. },
  870. cleanUpArrays:function(model){
  871. //Dhcp ranges
  872. var out = new Array();
  873. var ranges = model.dhcp.ranges;
  874. for(var i in ranges){
  875. out.push(ranges[i]);
  876. }
  877. model.dhcp.ranges = out;
  878. //Static IP Route
  879. out = new Array();
  880. var iproutes = model.staticiproute;
  881. for(var j in iproutes){
  882. out.push(iproutes[j]);
  883. }
  884. model.staticiproute = out;
  885. //Vlan
  886. out = new Array();
  887. var vlans = model.vlaninterfaces
  888. for(var k in vlans){
  889. //clean up the dhcp
  890. var vlansdhcp = vlans[k].dhcp.ranges;
  891. var outvlan = new Array();
  892. for(var l in vlansdhcp){
  893. outvlan.push(vlansdhcp[l]);
  894. }
  895. vlans[k].dhcp.ranges = outvlan;
  896. //clean up static ip route
  897. var vlansip = vlans[k].staticiproute;
  898. var outip = new Array();
  899. for(var m in vlansip){
  900. outip.push(vlansip[m]);
  901. }
  902. vlans[k].staticiproute = outip;
  903. out.push(vlans[k]);
  904. }
  905. model.vlaninterfaces = out;
  906. return model;
  907. }
  908. });
  909. //define master network view
  910. var MasterNetworkView = Backbone.View.extend({
  911. el: $("#networkinterfaces"),
  912. nwView: null,
  913. render: function () {
  914. var that = this;
  915. _.each(this.collection.models, function (item) {
  916. that.renderNetwork(item);
  917. }, this);
  918. },
  919. renderNetwork: function (item) {
  920. this.nwView = new InterfaceView({
  921. model: item
  922. });
  923. this.$el.append(this.nwView.render().el);
  924. }
  925. });
  926. //=======================R O U T E R====================
  927. var ListOfDevRouter = Backbone.Router.extend({
  928. eachDevInfoView: null,
  929. routes: {
  930. "": "fnGetListOfDev",
  931. "activate": "fnActivate",
  932. "deviceInfo": "fnDeviceInfo",
  933. "firewall":"fnGetFirewall",
  934. "network":"fnGetNetwork"
  935. },
  936. fnGetListOfDev: function (type) {
  937. this.router_devlist=new getListOfDevicesUrl();
  938. this.router_devlist.fetch({
  939. success:function(model, response){
  940. listOfDevicesRender.collection = new DeviceList(response);
  941. listOfDevicesRender.render();
  942. },
  943. error:function(data){
  944. alert("Error loading json")
  945. }
  946. });
  947. },
  948. //Activate a device
  949. fnActivate: function(){
  950. fnUpdateSectionDisplay("#activateadevice");
  951. this.fnGetListOfDev();
  952. },
  953. //Display a devices's information
  954. fnDeviceInfo: function(){
  955. var that = this;
  956. fnUpdateSectionDisplay("#eachDeviceInformation");
  957. this.router_devinfo=new getADeviceInfo();
  958. this.router_devinfo.fetch({
  959. success:function(model, response){
  960. that.eachDevInfoView = new DeviceInfoView({
  961. model: model
  962. });
  963. $("#eachDeviceInformation").html("")
  964. $("#eachDeviceInformation").append(that.eachDevInfoView.render().el);
  965. },
  966. error:function(data){
  967. alert("Error loading json")
  968. }
  969. });
  970. },
  971. fnStartDelete: function(){
  972. this.eachDevInfoView.trigger("completeDeviceDelete")
  973. },
  974. //Firewall
  975. fnGetFirewall: function () {
  976. fnUpdateSectionDisplay("#viewFirewall");
  977. //viewDeviceName = this.model.get('name')
  978. $("#firewallrules").html("");
  979. $("#viewFirewall .deviceNm").html(viewDeviceName)
  980. this.fw_router=new getFirewallUrl();
  981. this.fw_router.fetch({
  982. success:function(model, response){
  983. firewallRender.collection = new FirewallList(response);
  984. firewallRender.render();
  985. },
  986. error:function(data){
  987. alert("Error loading json")
  988. }
  989. });
  990. },
  991. //Network
  992. fnGetNetwork: function(){
  993. fnUpdateSectionDisplay("#viewNetwork");
  994. $("#networkinterfaces").html("");
  995. $("#viewNetwork .deviceNm").html(viewDeviceName);
  996. this.network_router=new getNetworkUrl();
  997. this.network_router.fetch({
  998. success:function(model, response){
  999. networkRender.collection = new InterfaceList(response);
  1000. networkRender.render();
  1001. },
  1002. error:function(data){
  1003. alert("Error loading json")
  1004. }
  1005. });
  1006. }
  1007. });
  1008. sitesRouter = new ListOfDevRouter();
  1009. Backbone.history.start();
  1010. listOfDevicesRender = new ListOfDevicesView();
  1011. firewallRender = new MasterFirewallView();
  1012. networkRender = new MasterNetworkView();
  1013. });