Skip to content
Snippets Groups Projects
Select Git revision
  • 6700bf70c40efbca93b7dfdbd693180cd82f7d22
  • master default protected
  • postgres_integration
  • s3compatible
  • intros
  • bootstrap4
  • modules
7 results

server.py

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    moderator.js 10.12 KiB
    var moderator = {
    	api: {
    		csrf_token: '',
    		init: function () {
    			$("#modal_apierror").on('hidden.bs.modal', function () {
    				$(".modal-body", $("#modal_apierror"))[0].innerHTML = '';
    				$(".modal-body", $("#modal_apierror"))[0].innerHTML = '';
    			});
    		},
    		set: function(path,value,reload) {
    			var req = {};
    			req[path] = value;
    			moderator.api.set_multi(req,reload)
    		},
    		set_multi: function(dict,reload) {
    			dict['_csrf_token'] = moderator.api.csrf_token;
    			$.ajax({
    				method: "POST",
    				url: "/internal/edit",
    				dataType: "text",
    				contentType: "application/json",
    				data: JSON.stringify(dict),
    				error: moderator.api.handleapierror,
    				success: function () {
    					if (reload) {
    						window.location.reload();
    					}
    				}
    			});
    		},
    		add_new: function(value,type,reload) {
    			value['_csrf_token'] = moderator.api.csrf_token;
    			$.ajax({
    				method: "POST",
    				url: "/internal/new/"+type,
    				dataType: "text",
    				contentType: "application/json",
    				data: JSON.stringify(value),
    				error: moderator.api.handleapierror,
    				success: function () {
    					if (reload) {
    						window.location.reload();
    					}
    				}
    			})
    		},
    		handleapierror: function(jqXHR, textStatus, errorThrow) {
    			console.log("Fehler: "+errorThrow)	
    			$(".modal-body", $("#modal_apierror"))[0].innerHTML += "<p>" + errorThrow + ": " + textStatus + "</p>";
    			$("#modal_apierror").modal()
    		},
    		gethttp: function (url){
    			$.ajax({
    				method: "GET",
    				url: url,
    				dataType: "text",
    			})
    		},
    		setcsrftoken: function (token) {
    			moderator.api.csrf_token = token;
    		}
    
    	},
    	editor: {
    		init: function() {
    			var editable = $('.moderator_editor');
    			for (var i=0; i<editable.length; i++) {
    				var e = $(editable[i]);
    				$('.moderator_editor_sign',e).popover(
    					{
    						title: e.data('path'),
    						html: true,
    						trigger: 'click',
    						container: 'body',
    						content: function() {
    							return '<div class="row form-group">'+
    									'<span class="col-xs-12">'+
    										'<textarea class="form-control editor_value ctrl_enter_submit" rows="3" data-path="'+$(this.parentElement).data('path')+'">'+this.parentElement.getElementsByClassName('moderator_editor_value')[0].innerHTML+'</textarea>'+
    									'</span>'+
    									'<span class="col-xs-12">'+
    										'<input class="btn btn-default pull-right" type="submit" data-path="'+$(this.parentElement).data('path')+'" data-reload="'+$(this.parentElement).data('reload')+'" value="save" onClick="moderator.editor.editbtnclick(this)">'+
    									'</span>'+
    								'</div>';
    						}
    					}		
    				);
    				$('.moderator_editor_sign',e).on('shown.bs.popover', function(){
    					$('.ctrl_enter_submit').focus();
    					$('.ctrl_enter_submit').keydown(function (e) {
    
    						if (e.ctrlKey && e.keyCode == 13) {
    							$(this.parentNode.nextElementSibling.childNodes[0]).trigger("click");
    						}
    					});
    				});
    			}
    		},
    		editbtnclick: function (src) {
    			var path  = $($(src)[0]).data('path');
    			var reload  = $($(src)[0]).data('reload');
    			var value = $('.editor_value',src.parentElement.parentElement).val();
    
    			var editable = $('.moderator_editor');
    			for (var i=0; i<editable.length; i++) {
    				var e = $(editable[i]);
    
    				if (e.data('path') == path) {
    					$('.moderator_editor_sign',e).click();
    					$(".moderator_editor_value",e).html(value);
    				}
    			}
    			moderator.api.set(path,value,reload);
    		},
    		changeboxclick: function(src) {
    			var value = $(src)[0].checked;
    			var path = $(src).data('path');
    			moderator.api.set(path,value ? 1 : 0);
    		},
    		deletebtnclick: function(src) {
    			if (confirm('Really delete this?')) { 
    				moderator.api.set($(src).data('path'),1,true); 
    			}
    		}
    	},
    	permissioneditor: {
    		permissions: [],
    		setpermissions: function(value) {
    			var idlist = [];
    			for (i in value) {
    				if (idlist.indexOf(value[i]['id']) == -1) {
    					idlist[idlist.length] = value[i]['id'];
    					moderator.permissioneditor.permissions[moderator.permissioneditor.permissions.length] = value[i];
    				}
    			}
    		},
    		init: function () {
    			$('.modmoderator_permissioneditor').popover(
    				{
    					title: "Zugriffsrechte",
    					html: true,
    					placement: "left",
    					trigger: 'click',
    					container: 'body',
    					content: function () {
    						var html = '';
    						var id = $(this).data('id');
    						var type = $(this).data('type');
    						html += '<div width="300px" class="row" data-id="'+id+'" data-type="'+type+'">'; 
    						html += '<select onchange="moderator.permissioneditor.selectpermission(this)" size="6" class="col-xs-12 permissionlist">';
    						var idlist = [];
    						for (i in moderator.permissioneditor.permissions) {
    							if ((moderator.permissioneditor.permissions[i][type+'_id'] == id)) {
    								var perm = {};
    								perm.type = moderator.permissioneditor.permissions[i]['type'];
    								perm.param1 = moderator.permissioneditor.permissions[i]['param1'];
    								perm.param2 = moderator.permissioneditor.permissions[i]['param2'];
    								perm.id = moderator.permissioneditor.permissions[i]['id'];
    								idlist[idlist.length] = perm.id;
    
    								permstring = '';
    								switch (perm.type) {
    									case 'password':
    										permstring = '("'+perm.param1+'":"'+perm.param2+'")'
    										break;
    									case 'public':
    										permstring = '';
    										break;
    									case 'none':
    										permstring = '(Kein Zugriff)';
    										break;
    									case 'rwth':
    										permstring = '(RWTH-intern)'
    										break;
    									case 'fsmpi':
    										permstring = '(FS-intern)'
    										break;
    									case 'l2p':
    										permstring = '(' + perm.param1 + ')'
    										break;
    								}
    								html += '<option data-auth_id="'+perm.id+'">#'+perm.id+' '+perm.type+' '+ permstring +'</option>';
    							}
    						}
    						html += '</select>';
    						html += '<select class="col-xs-12 authtype" onchange="moderator.permissioneditor.typechange(this)">';
    							html += '<option value="public">Öffentlich</option>';
    							html += '<option selected value="password">Passwort</option>';
    							html += '<option value="rwth">RWTH intern</option>';
    							html += '<option value="fsmpi">FSMPI intern</option>';
    							html += '<option value="l2p">L2P Lernraum</option>';
    							html += '<option value="none">Kein Zugriff</option>';
    						html += '</select>';
    						html += '<input class="col-xs-12 passwordinput authuser" type="text" placeholder="Benutzername">';
    						html += '<input class="col-xs-12 passwordinput authpassword" type="text" placeholder="Passwort">';
    						html += '<input class="col-xs-12 authl2p" type="text" placeholder="Lernraum" style="display: none;">';
    						html += '<button class="col-xs-6" onclick="moderator.permissioneditor.addbtnclick(this)">Add</button>';
    						//html += '<button class="col-xs-4" onclick="moderator.permissionedior.updatebtnclick(this)">Update</button>';
    						html += '<button class="col-xs-6" onclick="moderator.permissioneditor.delbtnclick(this)">Delete</button>';
    						html += '</div>';
    						return html;
    					}
    				}		
    			);
    		},
    		selectpermission: function (element) {
    
    		},
    		delbtnclick: function (element) {
    			moderator.api.set("perm."+$(".permissionlist  option:selected", element.parentElement).data('auth_id')+".deleted",1,true);
    		},
    		addbtnclick: function (element) {
    			var perm = {};
    			perm.type = $(".authtype", element.parentElement).val();
    			switch(perm.type) {
    				case 'password':
    					perm.param1 = $(".authuser", element.parentElement).val();
    					perm.param2 = $(".authpassword", element.parentElement).val();
    					break
    				case 'l2p':
    					perm.param1 = $(".authl2p", element.parentElement).val();
    					break
    			}
    			dict = {}
    			dict['type'] = perm.type;
    			dict['param1'] = perm.param1;
    			dict['param2'] = perm.param2;
    			dict[$(element.parentElement).data('type')+'_id'] = $(element.parentElement).data('id');
    
    			moderator.api.add_new(dict,'perm',true);
    			var option = $('<option>', {
    				"text": perm.type+' '+( perm.type == "password" ? ' ("'+perm.param1+'":"'+perm.param2+'")' : '' ) ,
    				"data-auth": JSON.stringify(perm)
    			});
    			$(".permissionlist",element.parentElement).append(option);
    		},
    		typechange: function (element) {
    			switch ($(element).val()) {
    				case 'password':
    					$(".passwordinput",element.parentElement).show();
    					$(".authl2p",element.parentElement).hide();
    					break;
    				case 'l2p':
    					$(".passwordinput",element.parentElement).hide();
    					$(".authl2p",element.parentElement).show();
    					break;
    				default:
    					$(".passwordinput",element.parentElement).hide();
    					$(".authl2p",element.parentElement).hide();
    					break;
    			}
    		}
    	},
    	plots: {
    		init: function() {
    			$(window).on("resize", moderator.plots.resize);
    			$(".plotlyresize").on("click", moderator.plots.resize);
    			moderator.plots.createplots(".plot-view")
    		},
    		resize: function() {
    			$(".plot-view").each(function () {Plotly.Plots.resize(this)});
    		},
    		createplots: function (selector) {
    			var l = $(selector);
    			for (var i = 0; i < l.length; i ++) {
    				if (!l[i].id)
    					l[i].id = "plot-"+i;
    				$(l[i]).html('<div class="plot-loader"></div>');
    				$.ajax({
    					divobj: l[i],
    					method: "GET",
    					url: l[i].dataset.url,
    					dataType: "json",
    					error: function (jqXHR, textStatus, errorThrow) {
    						$(this.divobj).html('<div class="plot-error">'+errorThrow+'</div>');
    					},
    					success: function (traces) {
    						var layout = {margin: {l: 30, r: 30, t: 10, b: 70, pad: 0}};
    						for (var i = 0; i < traces.length; i ++) {
    							traces[i].type = this.divobj.dataset.type;
    						}
    						if (this.divobj.dataset.type == "pie")
    							layout.showlegend = false;
    						traces.sort(function (a, b) {
    							asum = 0;
    							bsum = 0;
    							for (var i = 0; i < a.y.length; i++)
    								asum += a.y[i]
    							for (var i = 0; i < b.y.length; i++)
    								bsum += b.y[i]
    							return bsum-asum;
    						});
    						for (var i = 0; i < traces.length; i++) {
    							if (i > 15) {
    								traces[i].visible = "legendonly";
    							}
    						}
    						$(this.divobj).html("");
    						Plotly.newPlot(this.divobj.id, traces, layout, { "modeBarButtonsToRemove": ['sendDataToCloud','hoverCompareCartesian'], "displaylogo": false});
    					}
    				});
    			};
    		},
    	},
    	init: function () {
    		moderator.api.init();
    		moderator.editor.init();
    		moderator.permissioneditor.init();
    		moderator.plots.init();
    	}
    };
    
    $( document ).ready( function () {
    	moderator.init(); 
    } );