Revision c68ad72e snf-cyclades-app/synnefo/ui/static/snf/js/ui/web/ui_networks_view.js
b/snf-cyclades-app/synnefo/ui/static/snf/js/ui/web/ui_networks_view.js | ||
---|---|---|
679 | 679 |
} else { |
680 | 680 |
this.set_subtitle(subtitle); |
681 | 681 |
} |
682 |
|
|
683 | 682 |
this.vms = vms; |
684 | 683 |
this.selected = selected; |
685 | 684 |
this.cb = callback; |
... | ... | |
692 | 691 |
this.cb(this.get_selected()); |
693 | 692 |
} |
694 | 693 |
}); |
694 |
|
|
695 |
views.NetworkSelectModelView = views.ext.ModelView.extend({ |
|
696 |
select: function() { |
|
697 |
if (!this.delegate_input) { |
|
698 |
this.input.attr("checked", true); |
|
699 |
this.item.addClass("selected"); |
|
700 |
} |
|
701 |
this.selected = true; |
|
702 |
this.trigger("change:select", this, this.selected); |
|
703 |
}, |
|
704 |
|
|
705 |
deselect: function() { |
|
706 |
if (!this.delegate_input) { |
|
707 |
this.input.attr("checked", false); |
|
708 |
this.item.removeClass("selected"); |
|
709 |
} |
|
710 |
this.selected = false; |
|
711 |
this.trigger("change:select", this, this.selected); |
|
712 |
}, |
|
713 |
|
|
714 |
toggle_select: function() { |
|
715 |
if (this.selected) { |
|
716 |
this.deselect(); |
|
717 |
} else { |
|
718 |
this.select(); |
|
719 |
} |
|
720 |
}, |
|
721 |
|
|
722 |
post_init_element: function() { |
|
723 |
this.input = $(this.$("input").get(0)); |
|
724 |
this.item = $(this.$(".select-item").get(0)); |
|
725 |
this.delegate_input = this.model.get('noselect'); |
|
726 |
this.deselect(); |
|
727 |
|
|
728 |
var self = this; |
|
729 |
if (self.model.get('forced')) { |
|
730 |
this.select(); |
|
731 |
this.input.attr("disabled", true); |
|
732 |
$(this.el).attr('title', this.forced_title); |
|
733 |
$(this.el).tooltip({ |
|
734 |
'tipClass': 'tooltip', |
|
735 |
'position': 'top center', |
|
736 |
'offset': [-5, 0] |
|
737 |
}); |
|
738 |
} |
|
739 |
|
|
740 |
$(this.item).click(function(e) { |
|
741 |
if (self.model.get('forced')) { return } |
|
742 |
e.stopPropagation(); |
|
743 |
e.preventDefault(); |
|
744 |
self.toggle_select(); |
|
745 |
}); |
|
746 |
|
|
747 |
views.NetworkSelectModelView.__super__.post_init_element.apply(this, |
|
748 |
arguments); |
|
749 |
} |
|
750 |
}); |
|
751 |
|
|
752 |
views.NetworkSelectNetworkTypeModelView = views.NetworkSelectModelView.extend({ |
|
753 |
get_network_icon: function() { |
|
754 |
var ico = this.model.get('is_public') ? 'internet-small.png' : 'network-small.png'; |
|
755 |
return synnefo.config.media_url + 'images/' + ico; |
|
756 |
}, |
|
757 |
forced_title: 'You machine will be automatically connected ' + |
|
758 |
'to this network.' |
|
759 |
}); |
|
760 |
|
|
761 |
views.NetworkSelectPublicNetwork = views.NetworkSelectNetworkTypeModelView.extend({ |
|
762 |
tpl: '#networks-select-public-item-tpl', |
|
763 |
classes: 'public-network', |
|
764 |
post_init_element: function() { |
|
765 |
views.NetworkSelectPublicNetwork.__super__.post_init_element.apply(this); |
|
766 |
//$(this.el).attr('title', 'Public network tooltip'); |
|
767 |
//$(this.el).tooltip({ |
|
768 |
//'tipClass': 'tooltip', |
|
769 |
//'position': 'top center', |
|
770 |
//'offset': [-5, 0] |
|
771 |
//}); |
|
772 |
|
|
773 |
} |
|
774 |
}); |
|
775 |
|
|
776 |
views.NetworkSelectPrivateNetwork = views.NetworkSelectNetworkTypeModelView.extend({ |
|
777 |
tpl: '#networks-select-private-item-tpl', |
|
778 |
classes: 'private-network' |
|
779 |
}); |
|
780 |
|
|
781 |
views.NetworkSelectTypeView = views.ext.CollectionView.extend({}); |
|
782 |
views.NetworkSelectPublicNetworks = views.NetworkSelectTypeView.extend({ |
|
783 |
tpl: '#networks-select-public-tpl', |
|
784 |
model_view_cls: views.NetworkSelectPublicNetwork, |
|
785 |
get_floating_ips: function() { |
|
786 |
return _.map(this._subviews[1]._subviews[0].selected, function(m) { |
|
787 |
return m.id; |
|
788 |
}); |
|
789 |
} |
|
790 |
}); |
|
791 |
|
|
792 |
views.NetworkSelectFloatingIpView = views.NetworkSelectModelView.extend({ |
|
793 |
tpl: '#networks-select-floating-ip-tpl' |
|
794 |
}); |
|
795 |
|
|
796 |
views.NetworkSelectFloatingIpsView = views.ext.CollectionView.extend({ |
|
797 |
tpl: '#networks-select-floating-ips-tpl', |
|
798 |
model_view_cls: views.NetworkSelectFloatingIpView, |
|
799 |
|
|
800 |
select_available: function() { |
|
801 |
var selected = false; |
|
802 |
this.each_ip_view(function(v) { |
|
803 |
if (selected) { return } |
|
804 |
v.select(); |
|
805 |
selected = true; |
|
806 |
}); |
|
807 |
}, |
|
808 |
|
|
809 |
deselect_all: function() { |
|
810 |
this.each_ip_view(function(v) { v.deselect() }); |
|
811 |
}, |
|
812 |
|
|
813 |
each_ip_view: function(cb) { |
|
814 |
_.each(this._subviews, function(view) { |
|
815 |
if (view instanceof views.NetworkSelectFloatingIpView) { |
|
816 |
cb(view); |
|
817 |
} |
|
818 |
}) |
|
819 |
}, |
|
820 |
|
|
821 |
post_init: function() { |
|
822 |
this.selected = []; |
|
823 |
var parent = this.parent_view; |
|
824 |
var self = this; |
|
825 |
this.handle_ip_select = _.bind(this.handle_ip_select, this); |
|
826 |
this.create = this.$(".floating-ip.create"); |
|
827 |
parent.bind("change:select", function(selected) { |
|
828 |
if (parent.selected) { |
|
829 |
self.show(true); |
|
830 |
self.select_available(); |
|
831 |
} else { |
|
832 |
self.deselect_all(); |
|
833 |
self.hide(true); |
|
834 |
} |
|
835 |
}); |
|
836 |
|
|
837 |
this.create.click(function() { |
|
838 |
self.create_ip(); |
|
839 |
}) |
|
840 |
}, |
|
841 |
|
|
842 |
post_add_model_view: function(view) { |
|
843 |
view.bind("change:select", this.handle_ip_select) |
|
844 |
}, |
|
845 |
|
|
846 |
post_remove_model_view: function(view) { |
|
847 |
view.unbind("change:select", this.handle_ip_select) |
|
848 |
}, |
|
849 |
|
|
850 |
handle_create_error: function() {}, |
|
851 |
|
|
852 |
create_ip: function() { |
|
853 |
synnefo.storage.floating_ips.create({floatingip:{}}, { |
|
854 |
error: _.bind(this.handle_create_error, this), |
|
855 |
skip_api_error: true |
|
856 |
}); |
|
857 |
}, |
|
858 |
|
|
859 |
handle_ip_select: function(view) { |
|
860 |
if (view.selected) { |
|
861 |
this.selected.push(view.model); |
|
862 |
} else { |
|
863 |
this.selected = _.without(this.selected, view.model); |
|
864 |
} |
|
865 |
this.update_selected(); |
|
866 |
}, |
|
867 |
|
|
868 |
update_selected: function() { |
|
869 |
var selected = this.selected.length; |
|
870 |
if (selected) { |
|
871 |
this.parent_view.input.attr("checked", true); |
|
872 |
this.parent_view.item.addClass("selected"); |
|
873 |
$(this.parent_view.el).addClass("selected"); |
|
874 |
} else { |
|
875 |
this.parent_view.input.attr("checked", false); |
|
876 |
this.parent_view.item.removeClass("selected"); |
|
877 |
$(this.parent_view.el).removeClass("selected"); |
|
878 |
} |
|
879 |
}, |
|
880 |
|
|
881 |
post_show: function() { |
|
882 |
if (!this.parent_view.selected) { |
|
883 |
this.hide(true); |
|
884 |
} |
|
885 |
}, |
|
886 |
|
|
887 |
get_floating_ips: function() { |
|
888 |
return this.selected; |
|
889 |
} |
|
890 |
}); |
|
891 |
|
|
892 |
views.NetworkSelectPrivateNetworks = views.NetworkSelectTypeView.extend({ |
|
893 |
tpl: '#networks-select-private-tpl', |
|
894 |
model_view_cls: views.NetworkSelectPrivateNetwork, |
|
895 |
get_networks: function() { |
|
896 |
return _.filter(_.map(this._subviews, function(view) { |
|
897 |
if (view.selected) { return view.model.id } |
|
898 |
}), function(id) { return id }); |
|
899 |
} |
|
900 |
|
|
901 |
}); |
|
902 |
|
|
903 |
views.NetworkSelectView = views.ext.ModelView.extend({ |
|
904 |
rivets_view: true, |
|
905 |
tpl: '#networks-select-view-tpl', |
|
906 |
select_public: true, |
|
907 |
|
|
908 |
initialize: function(options) { |
|
909 |
this.quotas = synnefo.storage.quotas.get('cyclades.private_network'); |
|
910 |
options = options || {}; |
|
911 |
options.model = options.model || new models.Model(); |
|
912 |
this.private_networks = new Backbone.FilteredCollection(undefined, { |
|
913 |
collection: synnefo.storage.networks, |
|
914 |
collectionFilter: function(m) { |
|
915 |
return !m.get('is_public') |
|
916 |
}}); |
|
917 |
|
|
918 |
this.public_networks = new Backbone.Collection(); |
|
919 |
|
|
920 |
// forced networks |
|
921 |
// TODO: check config |
|
922 |
this.forced = new models.networks.Network({ |
|
923 |
name: 'Public IPv6 Network', |
|
924 |
subnets: [], |
|
925 |
is_public: true, |
|
926 |
forced: true |
|
927 |
}); |
|
928 |
this.public_networks.add(this.forced); |
|
929 |
|
|
930 |
// combined public |
|
931 |
this.combined_public = new models.networks.CombinedPublicNetwork(); |
|
932 |
this.combined_public.set({noselect: true, name: 'Internet'}); |
|
933 |
this.public_networks.add(this.combined_public); |
|
934 |
|
|
935 |
model_attrs = { |
|
936 |
public_collection: this.public_networks, |
|
937 |
private_collection: this.private_networks, |
|
938 |
floating_selected: true |
|
939 |
} |
|
940 |
|
|
941 |
options.model.set(model_attrs); |
|
942 |
this._configure(options); |
|
943 |
return views.NetworkSelectView.__super__.initialize.call(this, options); |
|
944 |
}, |
|
945 |
|
|
946 |
get_selected_floating_ips: function() { |
|
947 |
var ips = []; |
|
948 |
_.each(this._subviews, function(view) { |
|
949 |
if (view.get_floating_ips) { |
|
950 |
ips = _.union(ips, view.get_floating_ips()); |
|
951 |
} |
|
952 |
}, this); |
|
953 |
return _.filter( |
|
954 |
_.map(ips, function(ipid) { |
|
955 |
return synnefo.storage.floating_ips.get(parseInt(ipid)) |
|
956 |
}), function(ip) { console.log("IP", ip); return ip }); |
|
957 |
}, |
|
958 |
|
|
959 |
get_selected_networks: function() { |
|
960 |
var networks = []; |
|
961 |
_.each(this._subviews, function(view) { |
|
962 |
if (view.get_networks) { |
|
963 |
networks = _.union(networks, view.get_networks()); |
|
964 |
} |
|
965 |
}, this); |
|
966 |
return _.filter( |
|
967 |
_.map(networks, function(netid) { |
|
968 |
return synnefo.storage.networks.get(netid) |
|
969 |
}), function(net) { return net }); |
|
970 |
} |
|
971 |
}); |
|
695 | 972 |
|
696 | 973 |
})(this); |
Also available in: Unified diff