Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
Loading items

Target

Select target project
  • jannik/website
  • vincent/website
  • dominic/website
  • romank/website
  • videoaginfra/website
5 results
Select Git revision
Loading items
Show changes
Showing
with 604 additions and 594 deletions
This diff is collapsed.
This diff is collapsed.
/*
Copyright (C) Federico Zivolo 2017
Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT).
*/(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=getComputedStyle(e,null);return t?o[t]:o}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e)return document.body;switch(e.nodeName){case'HTML':case'BODY':return e.ownerDocument.body;case'#document':return e.body;}var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll)/.test(r+s+p)?e:n(o(e))}function r(e){var o=e&&e.offsetParent,i=o&&o.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TD','TABLE'].indexOf(o.nodeName)&&'static'===t(o,'position')?r(o):o:e?e.ownerDocument.documentElement:document.documentElement}function p(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||r(e.firstElementChild)===e)}function s(e){return null===e.parentNode?e:s(e.parentNode)}function d(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,i=o?e:t,n=o?t:e,a=document.createRange();a.setStart(i,0),a.setEnd(n,0);var l=a.commonAncestorContainer;if(e!==l&&t!==l||i.contains(n))return p(l)?l:r(l);var f=s(e);return f.host?d(f.host,t):d(e,s(t).host)}function a(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:'top',o='top'===t?'scrollTop':'scrollLeft',i=e.nodeName;if('BODY'===i||'HTML'===i){var n=e.ownerDocument.documentElement,r=e.ownerDocument.scrollingElement||n;return r[o]}return e[o]}function l(e,t){var o=2<arguments.length&&void 0!==arguments[2]&&arguments[2],i=a(t,'top'),n=a(t,'left'),r=o?-1:1;return e.top+=i*r,e.bottom+=i*r,e.left+=n*r,e.right+=n*r,e}function f(e,t){var o='x'===t?'Left':'Top',i='Left'==o?'Right':'Bottom';return parseFloat(e['border'+o+'Width'],10)+parseFloat(e['border'+i+'Width'],10)}function m(e,t,o,i){return J(t['offset'+e],t['scroll'+e],o['client'+e],o['offset'+e],o['scroll'+e],ie()?o['offset'+e]+i['margin'+('Height'===e?'Top':'Left')]+i['margin'+('Height'===e?'Bottom':'Right')]:0)}function h(){var e=document.body,t=document.documentElement,o=ie()&&getComputedStyle(t);return{height:m('Height',e,t,o),width:m('Width',e,t,o)}}function c(e){return se({},e,{right:e.left+e.width,bottom:e.top+e.height})}function g(e){var o={};if(ie())try{o=e.getBoundingClientRect();var i=a(e,'top'),n=a(e,'left');o.top+=i,o.left+=n,o.bottom+=i,o.right+=n}catch(e){}else o=e.getBoundingClientRect();var r={left:o.left,top:o.top,width:o.right-o.left,height:o.bottom-o.top},p='HTML'===e.nodeName?h():{},s=p.width||e.clientWidth||r.right-r.left,d=p.height||e.clientHeight||r.bottom-r.top,l=e.offsetWidth-s,m=e.offsetHeight-d;if(l||m){var g=t(e);l-=f(g,'x'),m-=f(g,'y'),r.width-=l,r.height-=m}return c(r)}function u(e,o){var i=ie(),r='HTML'===o.nodeName,p=g(e),s=g(o),d=n(e),a=t(o),f=parseFloat(a.borderTopWidth,10),m=parseFloat(a.borderLeftWidth,10),h=c({top:p.top-s.top-f,left:p.left-s.left-m,width:p.width,height:p.height});if(h.marginTop=0,h.marginLeft=0,!i&&r){var u=parseFloat(a.marginTop,10),b=parseFloat(a.marginLeft,10);h.top-=f-u,h.bottom-=f-u,h.left-=m-b,h.right-=m-b,h.marginTop=u,h.marginLeft=b}return(i?o.contains(d):o===d&&'BODY'!==d.nodeName)&&(h=l(h,o)),h}function b(e){var t=e.ownerDocument.documentElement,o=u(e,t),i=J(t.clientWidth,window.innerWidth||0),n=J(t.clientHeight,window.innerHeight||0),r=a(t),p=a(t,'left'),s={top:r-o.top+o.marginTop,left:p-o.left+o.marginLeft,width:i,height:n};return c(s)}function w(e){var i=e.nodeName;return'BODY'===i||'HTML'===i?!1:'fixed'===t(e,'position')||w(o(e))}function y(e,t,i,r){var p={top:0,left:0},s=d(e,t);if('viewport'===r)p=b(s);else{var a;'scrollParent'===r?(a=n(o(t)),'BODY'===a.nodeName&&(a=e.ownerDocument.documentElement)):'window'===r?a=e.ownerDocument.documentElement:a=r;var l=u(a,s);if('HTML'===a.nodeName&&!w(s)){var f=h(),m=f.height,c=f.width;p.top+=l.top-l.marginTop,p.bottom=m+l.top,p.left+=l.left-l.marginLeft,p.right=c+l.left}else p=l}return p.left+=i,p.top+=i,p.right-=i,p.bottom-=i,p}function E(e){var t=e.width,o=e.height;return t*o}function v(e,t,o,i,n){var r=5<arguments.length&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf('auto'))return e;var p=y(o,i,r,n),s={top:{width:p.width,height:t.top-p.top},right:{width:p.right-t.right,height:p.height},bottom:{width:p.width,height:p.bottom-t.bottom},left:{width:t.left-p.left,height:p.height}},d=Object.keys(s).map(function(e){return se({key:e},s[e],{area:E(s[e])})}).sort(function(e,t){return t.area-e.area}),a=d.filter(function(e){var t=e.width,i=e.height;return t>=o.clientWidth&&i>=o.clientHeight}),l=0<a.length?a[0].key:d[0].key,f=e.split('-')[1];return l+(f?'-'+f:'')}function O(e,t,o){var i=d(t,o);return u(o,i)}function L(e){var t=getComputedStyle(e),o=parseFloat(t.marginTop)+parseFloat(t.marginBottom),i=parseFloat(t.marginLeft)+parseFloat(t.marginRight),n={width:e.offsetWidth+i,height:e.offsetHeight+o};return n}function x(e){var t={left:'right',right:'left',bottom:'top',top:'bottom'};return e.replace(/left|right|bottom|top/g,function(e){return t[e]})}function S(e,t,o){o=o.split('-')[0];var i=L(e),n={width:i.width,height:i.height},r=-1!==['right','left'].indexOf(o),p=r?'top':'left',s=r?'left':'top',d=r?'height':'width',a=r?'width':'height';return n[p]=t[p]+t[d]/2-i[d]/2,n[s]=o===s?t[s]-i[a]:t[x(s)],n}function T(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function D(e,t,o){if(Array.prototype.findIndex)return e.findIndex(function(e){return e[t]===o});var i=T(e,function(e){return e[t]===o});return e.indexOf(i)}function C(t,o,i){var n=void 0===i?t:t.slice(0,D(t,'name',i));return n.forEach(function(t){t['function']&&console.warn('`modifier.function` is deprecated, use `modifier.fn`!');var i=t['function']||t.fn;t.enabled&&e(i)&&(o.offsets.popper=c(o.offsets.popper),o.offsets.reference=c(o.offsets.reference),o=i(o,t))}),o}function N(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=O(this.state,this.popper,this.reference),e.placement=v(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.offsets.popper=S(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position='absolute',e=C(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}function k(e,t){return e.some(function(e){var o=e.name,i=e.enabled;return i&&o===t})}function W(e){for(var t=[!1,'ms','Webkit','Moz','O'],o=e.charAt(0).toUpperCase()+e.slice(1),n=0;n<t.length-1;n++){var i=t[n],r=i?''+i+o:e;if('undefined'!=typeof document.body.style[r])return r}return null}function P(){return this.state.isDestroyed=!0,k(this.modifiers,'applyStyle')&&(this.popper.removeAttribute('x-placement'),this.popper.style.left='',this.popper.style.position='',this.popper.style.top='',this.popper.style[W('transform')]=''),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function B(e){var t=e.ownerDocument;return t?t.defaultView:window}function H(e,t,o,i){var r='BODY'===e.nodeName,p=r?e.ownerDocument.defaultView:e;p.addEventListener(t,o,{passive:!0}),r||H(n(p.parentNode),t,o,i),i.push(p)}function A(e,t,o,i){o.updateBound=i,B(e).addEventListener('resize',o.updateBound,{passive:!0});var r=n(e);return H(r,'scroll',o.updateBound,o.scrollParents),o.scrollElement=r,o.eventsEnabled=!0,o}function I(){this.state.eventsEnabled||(this.state=A(this.reference,this.options,this.state,this.scheduleUpdate))}function M(e,t){return B(e).removeEventListener('resize',t.updateBound),t.scrollParents.forEach(function(e){e.removeEventListener('scroll',t.updateBound)}),t.updateBound=null,t.scrollParents=[],t.scrollElement=null,t.eventsEnabled=!1,t}function R(){this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=M(this.reference,this.state))}function U(e){return''!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function Y(e,t){Object.keys(t).forEach(function(o){var i='';-1!==['width','height','top','right','bottom','left'].indexOf(o)&&U(t[o])&&(i='px'),e.style[o]=t[o]+i})}function j(e,t){Object.keys(t).forEach(function(o){var i=t[o];!1===i?e.removeAttribute(o):e.setAttribute(o,t[o])})}function F(e,t,o){var i=T(e,function(e){var o=e.name;return o===t}),n=!!i&&e.some(function(e){return e.name===o&&e.enabled&&e.order<i.order});if(!n){var r='`'+t+'`';console.warn('`'+o+'`'+' modifier is required by '+r+' modifier in order to work, be sure to include it before '+r+'!')}return n}function K(e){return'end'===e?'start':'start'===e?'end':e}function q(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1],o=ae.indexOf(e),i=ae.slice(o+1).concat(ae.slice(0,o));return t?i.reverse():i}function V(e,t,o,i){var n=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+n[1],p=n[2];if(!r)return e;if(0===p.indexOf('%')){var s;switch(p){case'%p':s=o;break;case'%':case'%r':default:s=i;}var d=c(s);return d[t]/100*r}if('vh'===p||'vw'===p){var a;return a='vh'===p?J(document.documentElement.clientHeight,window.innerHeight||0):J(document.documentElement.clientWidth,window.innerWidth||0),a/100*r}return r}function z(e,t,o,i){var n=[0,0],r=-1!==['right','left'].indexOf(i),p=e.split(/(\+|\-)/).map(function(e){return e.trim()}),s=p.indexOf(T(p,function(e){return-1!==e.search(/,|\s/)}));p[s]&&-1===p[s].indexOf(',')&&console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');var d=/\s*,\s*|\s+/,a=-1===s?[p]:[p.slice(0,s).concat([p[s].split(d)[0]]),[p[s].split(d)[1]].concat(p.slice(s+1))];return a=a.map(function(e,i){var n=(1===i?!r:r)?'height':'width',p=!1;return e.reduce(function(e,t){return''===e[e.length-1]&&-1!==['+','-'].indexOf(t)?(e[e.length-1]=t,p=!0,e):p?(e[e.length-1]+=t,p=!1,e):e.concat(t)},[]).map(function(e){return V(e,n,t,o)})}),a.forEach(function(e,t){e.forEach(function(o,i){U(o)&&(n[t]+=o*('-'===e[i-1]?-1:1))})}),n}function G(e,t){var o,i=t.offset,n=e.placement,r=e.offsets,p=r.popper,s=r.reference,d=n.split('-')[0];return o=U(+i)?[+i,0]:z(i,p,s,d),'left'===d?(p.top+=o[0],p.left-=o[1]):'right'===d?(p.top+=o[0],p.left+=o[1]):'top'===d?(p.left+=o[0],p.top-=o[1]):'bottom'===d&&(p.left+=o[0],p.top+=o[1]),e.popper=p,e}for(var _=Math.min,X=Math.floor,J=Math.max,Q='undefined'!=typeof window&&'undefined'!=typeof document,Z=['Edge','Trident','Firefox'],$=0,ee=0;ee<Z.length;ee+=1)if(Q&&0<=navigator.userAgent.indexOf(Z[ee])){$=1;break}var i,te=Q&&window.Promise,oe=te?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then(function(){t=!1,e()}))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout(function(){t=!1,e()},$))}},ie=function(){return void 0==i&&(i=-1!==navigator.appVersion.indexOf('MSIE 10')),i},ne=function(e,t){if(!(e instanceof t))throw new TypeError('Cannot call a class as a function')},re=function(){function e(e,t){for(var o,n=0;n<t.length;n++)o=t[n],o.enumerable=o.enumerable||!1,o.configurable=!0,'value'in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}return function(t,o,i){return o&&e(t.prototype,o),i&&e(t,i),t}}(),pe=function(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e},se=Object.assign||function(e){for(var t,o=1;o<arguments.length;o++)for(var i in t=arguments[o],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},de=['auto-start','auto','auto-end','top-start','top','top-end','right-start','right','right-end','bottom-end','bottom','bottom-start','left-end','left','left-start'],ae=de.slice(3),le={FLIP:'flip',CLOCKWISE:'clockwise',COUNTERCLOCKWISE:'counterclockwise'},fe=function(){function t(o,i){var n=this,r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};ne(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(n.update)},this.update=oe(this.update.bind(this)),this.options=se({},t.Defaults,r),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=o&&o.jquery?o[0]:o,this.popper=i&&i.jquery?i[0]:i,this.options.modifiers={},Object.keys(se({},t.Defaults.modifiers,r.modifiers)).forEach(function(e){n.options.modifiers[e]=se({},t.Defaults.modifiers[e]||{},r.modifiers?r.modifiers[e]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(e){return se({name:e},n.options.modifiers[e])}).sort(function(e,t){return e.order-t.order}),this.modifiers.forEach(function(t){t.enabled&&e(t.onLoad)&&t.onLoad(n.reference,n.popper,n.options,t,n.state)}),this.update();var p=this.options.eventsEnabled;p&&this.enableEventListeners(),this.state.eventsEnabled=p}return re(t,[{key:'update',value:function(){return N.call(this)}},{key:'destroy',value:function(){return P.call(this)}},{key:'enableEventListeners',value:function(){return I.call(this)}},{key:'disableEventListeners',value:function(){return R.call(this)}}]),t}();return fe.Utils=('undefined'==typeof window?global:window).PopperUtils,fe.placements=de,fe.Defaults={placement:'bottom',eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,o=t.split('-')[0],i=t.split('-')[1];if(i){var n=e.offsets,r=n.reference,p=n.popper,s=-1!==['bottom','top'].indexOf(o),d=s?'left':'top',a=s?'width':'height',l={start:pe({},d,r[d]),end:pe({},d,r[d]+r[a]-p[a])};e.offsets.popper=se({},p,l[i])}return e}},offset:{order:200,enabled:!0,fn:G,offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,t){var o=t.boundariesElement||r(e.instance.popper);e.instance.reference===o&&(o=r(o));var i=y(e.instance.popper,e.instance.reference,t.padding,o);t.boundaries=i;var n=t.priority,p=e.offsets.popper,s={primary:function(e){var o=p[e];return p[e]<i[e]&&!t.escapeWithReference&&(o=J(p[e],i[e])),pe({},e,o)},secondary:function(e){var o='right'===e?'left':'top',n=p[o];return p[e]>i[e]&&!t.escapeWithReference&&(n=_(p[o],i[e]-('right'===e?p.width:p.height))),pe({},o,n)}};return n.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';p=se({},p,s[t](e))}),e.offsets.popper=p,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,i=t.reference,n=e.placement.split('-')[0],r=X,p=-1!==['top','bottom'].indexOf(n),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]<r(i[d])&&(e.offsets.popper[d]=r(i[d])-o[a]),o[d]>r(i[s])&&(e.offsets.popper[d]=r(i[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var i;if(!F(e.instance.modifiers,'arrow','keepTogether'))return e;var n=o.element;if('string'==typeof n){if(n=e.instance.popper.querySelector(n),!n)return e;}else if(!e.instance.popper.contains(n))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',g=a?'bottom':'right',u=L(n)[l];d[g]-u<s[m]&&(e.offsets.popper[m]-=s[m]-(d[g]-u)),d[m]+u>s[g]&&(e.offsets.popper[m]+=d[m]+u-s[g]),e.offsets.popper=c(e.offsets.popper);var b=d[m]+d[l]/2-u/2,w=t(e.instance.popper),y=parseFloat(w['margin'+f],10),E=parseFloat(w['border'+f+'Width'],10),v=b-e.offsets.popper[m]-y-E;return v=J(_(s[l]-u,v),0),e.arrowElement=n,e.offsets.arrow=(i={},pe(i,m,Math.round(v)),pe(i,h,''),i),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(k(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=y(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement),i=e.placement.split('-')[0],n=x(i),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case le.FLIP:p=[i,n];break;case le.CLOCKWISE:p=q(i);break;case le.COUNTERCLOCKWISE:p=q(i,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(i!==s||p.length===d+1)return e;i=e.placement.split('-')[0],n=x(i);var a=e.offsets.popper,l=e.offsets.reference,f=X,m='left'===i&&f(a.right)>f(l.left)||'right'===i&&f(a.left)<f(l.right)||'top'===i&&f(a.bottom)>f(l.top)||'bottom'===i&&f(a.top)<f(l.bottom),h=f(a.left)<f(o.left),c=f(a.right)>f(o.right),g=f(a.top)<f(o.top),u=f(a.bottom)>f(o.bottom),b='left'===i&&h||'right'===i&&c||'top'===i&&g||'bottom'===i&&u,w=-1!==['top','bottom'].indexOf(i),y=!!t.flipVariations&&(w&&'start'===r&&h||w&&'end'===r&&c||!w&&'start'===r&&g||!w&&'end'===r&&u);(m||b||y)&&(e.flipped=!0,(m||b)&&(i=p[d+1]),y&&(r=K(r)),e.placement=i+(r?'-'+r:''),e.offsets.popper=se({},e.offsets.popper,S(e.instance.popper,e.offsets.reference,e.placement)),e=C(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],i=e.offsets,n=i.popper,r=i.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return n[p?'left':'top']=r[o]-(s?n[p?'width':'height']:0),e.placement=x(t),e.offsets.popper=c(n),e}},hide:{order:800,enabled:!0,fn:function(e){if(!F(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=T(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottom<o.top||t.left>o.right||t.top>o.bottom||t.right<o.left){if(!0===e.hide)return e;e.hide=!0,e.attributes['x-out-of-boundaries']=''}else{if(!1===e.hide)return e;e.hide=!1,e.attributes['x-out-of-boundaries']=!1}return e}},computeStyle:{order:850,enabled:!0,fn:function(e,t){var o=t.x,i=t.y,n=e.offsets.popper,p=T(e.instance.modifiers,function(e){return'applyStyle'===e.name}).gpuAcceleration;void 0!==p&&console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');var s,d,a=void 0===p?t.gpuAcceleration:p,l=r(e.instance.popper),f=g(l),m={position:n.position},h={left:X(n.left),top:X(n.top),bottom:X(n.bottom),right:X(n.right)},c='bottom'===o?'top':'bottom',u='right'===i?'left':'right',b=W('transform');if(d='bottom'==c?-f.height+h.bottom:h.top,s='right'==u?-f.width+h.right:h.left,a&&b)m[b]='translate3d('+s+'px, '+d+'px, 0)',m[c]=0,m[u]=0,m.willChange='transform';else{var w='bottom'==c?-1:1,y='right'==u?-1:1;m[c]=d*w,m[u]=s*y,m.willChange=c+', '+u}var E={"x-placement":e.placement};return e.attributes=se({},E,e.attributes),e.styles=se({},m,e.styles),e.arrowStyles=se({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:'bottom',y:'right'},applyStyle:{order:900,enabled:!0,fn:function(e){return Y(e.instance.popper,e.styles),j(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&Y(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,o,i,n){var r=O(n,t,e),p=v(o.placement,r,t,e,o.modifiers.flip.boundariesElement,o.modifiers.flip.padding);return t.setAttribute('x-placement',p),Y(t,{position:'absolute'}),o},gpuAcceleration:void 0}}},fe});
//# sourceMappingURL=popper.min.js.map
...@@ -7,9 +7,9 @@ ...@@ -7,9 +7,9 @@
left: 0px; left: 0px;
color: lightgrey; color: lightgrey;
position: absolute; position: absolute;
font-size: 3em; font-size: 3em !important;
text-align: center; text-align: center;
line-height: 130px; line-height: 130px !important;
text-shadow: 0 0 2px black; text-shadow: 0 0 2px black;
} }
...@@ -56,10 +56,8 @@ ...@@ -56,10 +56,8 @@
@media (min-width: 768px) { @media (min-width: 768px) {
.footer { .footer {
position: fixed; position: fixed;
bottom: 0; bottom: 0px;
width: 100%;
height: 30px; height: 30px;
background-color: #f5f5f5;
} }
} }
...@@ -70,12 +68,14 @@ ...@@ -70,12 +68,14 @@
height: 80px; height: 80px;
clear:both; clear:both;
padding-top:20px; padding-top:20px;
background-color: #f5f5f5;
} }
} }
.footer { .footer {
z-index: 100; z-index: 100;
background-color: #f5f5f5;
width: 100%;
left: 0px;
} }
.plot-view { .plot-view {
...@@ -142,5 +142,8 @@ th.rotate > div { ...@@ -142,5 +142,8 @@ th.rotate > div {
.tooltip-inner { .tooltip-inner {
max-width: 500px; max-width: 500px;
}
.navbar {
padding: 0px;
} }
...@@ -5,7 +5,7 @@ from datetime import datetime ...@@ -5,7 +5,7 @@ from datetime import datetime
@app.route('/internal/stats') @app.route('/internal/stats')
@app.route('/internal/stats/<semester>') @app.route('/internal/stats/<semester>')
@register_navbar('Statistiken', icon='stats') @register_navbar('Statistiken', icon='pie-chart')
@mod_required @mod_required
def stats(): def stats():
semester = query('SELECT DISTINCT semester from courses WHERE semester != ""'); semester = query('SELECT DISTINCT semester from courses WHERE semester != ""');
......
...@@ -21,11 +21,9 @@ def ismod(*args): ...@@ -21,11 +21,9 @@ def ismod(*args):
return ('user' in session) return ('user' in session)
app.jinja_env.globals['navbar'] = [] app.jinja_env.globals['navbar'] = []
# iconlib can be 'bootstrap' # iconlib can be 'fa'
# ( see: http://getbootstrap.com/components/#glyphicons )
# or 'fa'
# ( see: http://fontawesome.io/icons/ ) # ( see: http://fontawesome.io/icons/ )
def register_navbar(name, iconlib='bootstrap', icon=None, userendpoint=False, group=None, endpoint=None): def register_navbar(name, iconlib='fa', icon=None, userendpoint=False, group=None, endpoint=None):
def wrapper(func): def wrapper(func):
urlendpoint = endpoint urlendpoint = endpoint
if not endpoint: if not endpoint:
......
...@@ -2,10 +2,10 @@ ...@@ -2,10 +2,10 @@
{% block content %} {% block content %}
<div class="panel panel-danger"> <div class="panel panel-danger">
<div class="panel-heading"> <div class="panel-heading">
<h1 class="panel-title">Interner Fehler</h1> <span class="panel-title">Interner Fehler</span>
</div> </div>
<div class="row panel-body"> <div class="row panel-body">
<div class="col-xs-12"> <div class="col-12">
<p>Es ist ein interner Fehler aufgetreten. Eventuell betrifft dieser nur einen Teil der Seite oder er tritt nur vorübergehend auf. Versuche es doch einfach in ein paar Minuten noch einmal.</p> <p>Es ist ein interner Fehler aufgetreten. Eventuell betrifft dieser nur einen Teil der Seite oder er tritt nur vorübergehend auf. Versuche es doch einfach in ein paar Minuten noch einmal.</p>
{% if online %} {% if online %}
<p>Wir haben das Problem registriert und werden uns schnellst möglich darum kümmern.</p> <p>Wir haben das Problem registriert und werden uns schnellst möglich darum kümmern.</p>
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="icon" type="image/png" href="{{url_for('static', filename='favicon.png')}}"> <link rel="icon" type="image/png" href="{{url_for('static', filename='favicon.png')}}">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link href="{{url_for('static', filename='bootstrap/bootstrap.css')}}" rel="stylesheet"> <link href="{{url_for('static', filename='bootstrap/bootstrap.css')}}" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="{{url_for('static', filename='style.css')}}"> <link rel="stylesheet" type="text/css" href="{{url_for('static', filename='style.css')}}">
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
{% endif %} {% endif %}
<script src="{{url_for('static', filename='jquery.js')}}"></script> <script src="{{url_for('static', filename='jquery.js')}}"></script>
<script src="{{url_for('static', filename='popper.min.js')}}"></script>
<script src="{{url_for('static', filename='bootstrap/bootstrap.js')}}"></script> <script src="{{url_for('static', filename='bootstrap/bootstrap.js')}}"></script>
<script src="{{url_for('static', filename='js.cookie.js')}}"></script> <script src="{{url_for('static', filename='js.cookie.js')}}"></script>
{%if ismod() %} {%if ismod() %}
...@@ -44,8 +45,8 @@ ...@@ -44,8 +45,8 @@
<body> <body>
{% block navbar %} {% block navbar %}
{% macro navbaricon(data, user=none) -%} {% macro navbaricon(data, user=none) -%}
<li{% if data.endpoint == request.endpoint %} class="active"{% endif %}> <li class="nav-item{% if data.endpoint == request.endpoint %} active{% endif %}">
<a href="{{ url_for(data.endpoint, user=user) }}" style="padding: 10px 6px;"> <a href="{{ url_for(data.endpoint, user=user) }}" class="nav-link text-nowrap">
{% if data.gly != '' %} {% if data.gly != '' %}
{% if data.iconlib == 'bootstrap' %} {% if data.iconlib == 'bootstrap' %}
<span aria-hidden="true" class="glyphicon glyphicon-{{ data.icon }}"></span> <span aria-hidden="true" class="glyphicon glyphicon-{{ data.icon }}"></span>
...@@ -57,33 +58,31 @@ ...@@ -57,33 +58,31 @@
</a> </a>
</li> </li>
{%- endmacro %} {%- endmacro %}
<nav class="hidden-print navbar navbar-default navbar-static-top" {% if config.DEBUG %} style="background-color: red" {% endif %} > <nav class="navbar navbar-expand-lg sticky-top navbar-light bg-light" style="padding: 0px; {% if config.DEBUG %}background-color: red !important;{% endif %}" >
<div class="container-fluid"> <div class="navbar navbar-expand">
<div class="navbar-header"> <a class="navbar-brand" href="/" >
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/" style="padding: 3px;">
<img alt="Brand" src="{{url_for('static', filename='logo.png')}}" style="height: 44px; width: 44px" > <img alt="Brand" src="{{url_for('static', filename='logo.png')}}" style="height: 44px; width: 44px" >
</a> </a>
<ul class="nav nav-pills" style="margin-top: 5px; padding-left: 40px;"> <ul class="navbar-nav">
{% for n in navbar if n.visible and (not n.userendpoint) %} {% for n in navbar if n.visible and (not n.userendpoint) %}
{{ navbaricon(n) }} {{ navbaricon(n) }}
{% endfor %} {% endfor %}
</ul> </ul>
</div> </div>
{% if ismod() %}
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
{% endif %}
<div class="collapse navbar-collapse" style="overflow-y: inherit"> <div class="collapse navbar-collapse" style="overflow-y: inherit">
<ul class="nav nav-pills" style="margin-top: 5px;"> <ul class="navbar-nav mr-auto">
{% for n in navbar if (not n.visible) and ismod() and (not n.userendpoint) and (not n.group) %} {% for n in navbar if (not n.visible) and ismod() and (not n.userendpoint) and (not n.group) %}
{{ navbaricon(n) }} {{ navbaricon(n) }}
{% endfor %} {% endfor %}
{% for grouper, list in navbar|rejectattr("group", "none")|groupby("group") if ismod() %} {% for grouper, list in navbar|rejectattr("group", "none")|groupby("group") if ismod() %}
<li{% if request.endpoint in list|map(attribute='endpoint') %} class="active dropdown"{% endif %}> <li class="nav-item dropdown{% if request.endpoint in list|map(attribute='endpoint') %} active{% endif %}">
<a data-toggle="dropdown" data-boundary="viewport" class="dropdown-toggle" style="padding: 10px 6px; cursor: pointer;">{{ grouper }}<span class="caret"></span></a> <a data-toggle="dropdown" class="dropdown-toggle nav-link" style="cursor: pointer;">{{ grouper }}<span class="caret"></span></a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
{% for n in list %} {% for n in list %}
{{ navbaricon(n) }} {{ navbaricon(n) }}
...@@ -91,18 +90,14 @@ ...@@ -91,18 +90,14 @@
</ul> </ul>
</li> </li>
{% endfor %} {% endfor %}
<li class="col-xs-9 col-sm-4 pull-right"> </ul>
<form action="{{ url_for('search') }}" role="search">
<div class="input-group" style="margin-top: 3px">
<input class="form-control" type="text" name="q" placeholder="Search" value="{{ searchtext }}">
<span class="input-group-btn"><button class="btn btn-secondary" type="submit"><span class="glyphicon glyphicon-search"></span> </button></span>
</div> </div>
</form> <div class="navbar navbar-expand" style="overflow-y: inherit">
</li> <ul class="navbar-nav">
<li class="navbar-right"> <li class="navbar-item dropdown mr-1">
{% if not ismod() %} {% if not ismod() %}
<a href="{{url_for('login', ref=request.url)}}" id="loginpopover" data-container="body" data-toggle="popover" data-placement="bottom"> <a class="nav-link" href="{{url_for('login', ref=request.url)}}" id="loginpopover" data-toggle="popover" data-placement="bottom">
<span class="glyphicon glyphicon-log-in"></span> <span class="fa fa-sign-in"></span>
</a> </a>
<script> <script>
$('#loginpopover').on('click',function(e){ $('#loginpopover').on('click',function(e){
...@@ -116,27 +111,36 @@ ...@@ -116,27 +111,36 @@
) )
</script> </script>
{% else %} {% else %}
<button data-toggle="dropdown" data-boundary="viewport" class="btn dropdown-toggle" style="padding: 10px 6px;">{{ session.user.givenName }} <span class="caret"></span></button> <button data-toggle="dropdown" class="btn dropdown-toggle">{{ session.user.givenName }} <span class="caret"></span></button>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
{% for n in navbar if n.userendpoint %} {% for n in navbar if n.userendpoint %}
{{ navbaricon(n, user=session.user.dbid) }} {{ navbaricon(n, user=session.user.dbid) }}
{% endfor %} {% endfor %}
<li class="divider"></li> <li class="dropdown-divider"></li>
<li><a href="{{url_for('logout', ref=request.url)}}">Logout</a></li> <li class="nav-item"><a class="nav-link" href="{{url_for('logout', ref=request.url)}}">Logout</a></li>
</ul> </ul>
{% endif %} {% endif %}
</li> </li>
</ul> <li class="navbar-item">
<form class="form-inline" action="{{ url_for('search') }}" role="search">
<div class="input-group">
<input class="form-control" type="text" name="q" placeholder="Search" value="{{ searchtext }}">
<div class="input-group-append">
<button class="btn" type="submit"><span class="fa fa-search"></span> </button>
</div>
</div> </div>
</form>
</li>
</ul>
</div> </div>
</nav> </nav>
{% endblock %} {% endblock %}
<div class="container-fluid" style="margin-bottom: 30px;"> <div class="container-fluid" style="margin-bottom: 30px;">
<div class="row"> <div class="row m-1 mt-2">
{% if page_border == 0 %} {% if page_border == 0 %}
<div class="col-xs-12"> <div class="col-12">
{% else %} {% else %}
<div class="col-xs-12 col-md-offset-{{ page_border }} col-md-{{ 12-(2*page_border) }}"> <div class="col-12 offset-lg-{{ page_border }} col-lg-{{ 12-(2*page_border) }}">
{% endif %} {% endif %}
{% block announcements %} {% block announcements %}
{% for msg in get_announcements(min_announcement_level) if (not request.cookies['alert-info-'+msg.id|string]) %} {% for msg in get_announcements(min_announcement_level) if (not request.cookies['alert-info-'+msg.id|string]) %}
...@@ -155,28 +159,26 @@ ...@@ -155,28 +159,26 @@
{% endblock %} {% endblock %}
</div> </div>
</div> </div>
</div>
{% block footer %} {% block footer %}
<footer class="footer hidden-print" {% if config.DEBUG %} style="background-color: red" {% endif %} > <footer class="footer hidden-print bg-light" {% if config.DEBUG %} style="background-color: red !important;" {% endif %} >
<div class="container-fluid"> <ul class="list-inline m-1">
<ul class="list-inline" style="margin-top: 5px;"> <li class="list-inline-item">
<li>
<a href="https://www.fsmpi.rwth-aachen.de/">Fachschaft I/1</a> <a href="https://www.fsmpi.rwth-aachen.de/">Fachschaft I/1</a>
</li> </li>
<li> <li class="list-inline-item">
<a href="http://www.vampir.rwth-aachen.de/">Vampir e.V.</a> <a href="http://www.vampir.rwth-aachen.de/">Vampir e.V.</a>
</li> </li>
<li> <li class="list-inline-item">
<a href="https://www.youtube.com/channel/UCxh5snRN7yZyBsytNbGNuEQ">Youtube</a> <a href="https://www.youtube.com/channel/UCxh5snRN7yZyBsytNbGNuEQ">Youtube</a>
</li> </li>
<li> <li class="list-inline-item">
<a href="https://www.facebook.com/videoag">Facebook</a> <a href="https://www.facebook.com/videoag">Facebook</a>
</li> </li>
<li> <li class="list-inline-item">
<a href="https://twitter.com/rwthvideo">Twitter</a> <a href="https://twitter.com/rwthvideo">Twitter</a>
</li> </li>
{% if ismod() or config.DEBUG %} {% if ismod() or config.DEBUG %}
<li class="pull-right"> <li class="float-right list-inline-item">
<a target="_blank" href="https://git.fsmpi.rwth-aachen.de/videoaginfra/website/commit/{{ gitversion.longhash }}"><span title="{{ gitversion.branch }} {{ gitversion.hash }}: {{ gitversion.msg }}" data-toggle="tooltip">{{ gitversion.hash }}</span></a> <a target="_blank" href="https://git.fsmpi.rwth-aachen.de/videoaginfra/website/commit/{{ gitversion.longhash }}"><span title="{{ gitversion.branch }} {{ gitversion.hash }}: {{ gitversion.msg }}" data-toggle="tooltip">{{ gitversion.hash }}</span></a>
<span>{{ gethostname() }}</span> <span>{{ gethostname() }}</span>
{% if is_readonly() %} {% if is_readonly() %}
...@@ -185,16 +187,16 @@ ...@@ -185,16 +187,16 @@
</li> </li>
{% endif %} {% endif %}
</ul> </ul>
</div>
</footer> </footer>
{% endblock %} {% endblock %}
</div>
{% block modals %} {% block modals %}
<div class="modal fade" id="modal_apierror" role="dialog"> <div class="modal fade" id="modal_apierror" role="dialog">
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button> <button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 style="color:red;"><span class="glyphicon glyphicon-exclamation-sign"></span> Error</h4> <h4 style="color:red;"><span class="fa fa-exclamation"></span> Error</h4>
</div> </div>
<div class="modal-body"> <div class="modal-body">
</div> </div>
......
{% from 'macros.html' import preview %} {% from 'macros.html' import preview %}
{% extends "base.html" %} {% extends "base.html" %}
{% block content %} {% block content %}
<div class="panel-group"> <div class="card-group">
<div class="panel panel-default"> <div class="card ">
<div class="panel-heading"> <div class="card-header">
<h1 class="panel-title">Changelog</h1> <span class="card-title">Changelog</span>
</div> </div>
<div class="panel-body"> <div class="card-body">
<p>Hier werden alle Änderungen an Kursen/Veranstaltungen/Videos etc. geloggt und können Rückgängig gemacht werden.</p> <p>Hier werden alle Änderungen an Kursen/Veranstaltungen/Videos etc. geloggt und können Rückgängig gemacht werden.</p>
<ul class="pagination pull-right"> <ul class="pagination float-right">
<li class="page-item"> <li class="page-item">
<a class="page-link" href="{{url_for('changelog', page=page-1) }}"> <a class="page-link" href="{{url_for('changelog', page=page-1) }}">
<span aria-hidden="true">&laquo;</span> <span aria-hidden="true">&laquo;</span>
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
<td style="white-space: nowrap;">{{i.path}}</td> <td style="white-space: nowrap;">{{i.path}}</td>
<td>"{{i.value_old}}"</td> <td>"{{i.value_old}}"</td>
<td>"{{i.value_new}}"</td> <td>"{{i.value_new}}"</td>
<td><button onclick="moderator.api.set('{{i.path}}',atob('{{i.value_old|base64encode }}'));alert('done');" class="btn btn-default">undo</button></td> <td><button onclick="moderator.api.set('{{i.path}}',atob('{{i.value_old|base64encode }}'));alert('done');" class="btn btn-secondary">undo</button></td>
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>
......
...@@ -8,21 +8,21 @@ ...@@ -8,21 +8,21 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block title %}- {{course.title}}{% endblock %} {% block title %}- {{course.title}}{% endblock %}
{% block content %} {% block content %}
<div class="panel panel-default"> <div class="card m-1">
<div class="panel-heading"> <div class="card-header">
<span class="panel-title"> <span class="card-title">
{{ moderator_editor(['courses',course.id,'title'], course.title)}} {{ moderator_editor(['courses',course.id,'title'], course.title)}}
{% if ismod() %} {% if ismod() %}
<i>(<a href={{ url_for('course', id=course.id) }}>{{course.id}}</a>)</i> <i>(<a href={{ url_for('course', id=course.id) }}>{{course.id}}</a>)</i>
{% endif %} {% endif %}
</span> </span>
<ul class="pull-right list-inline"> <ul class="float-right list-inline">
<li>{{ moderator_delete(['courses',course.id,'deleted']) }}</li> <li class="list-inline-item">{{ moderator_delete(['courses',course.id,'deleted']) }}</li>
<li>{{ moderator_permissioneditor('course',course.id,course.perm, global_permissions) }}</li> <li class="list-inline-item">{{ moderator_permissioneditor('course',course.id,course.perm, global_permissions) }}</li>
</ul> </ul>
</div> </div>
<div class="row panel-body"> <div class="row card-body">
<div class="col-xs-12"> <div class="col-12">
<table class="table-top-aligned table-condensed"> <table class="table-top-aligned table-condensed">
<tbody> <tbody>
{% if ismod() %} {% if ismod() %}
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
</table> </table>
</div> </div>
{% if ismod() %} {% if ismod() %}
<div class="col-xs-12" style="margin-top: 20px"> <div class="col-12" style="margin-top: 20px">
<table class="table-condensed table-top-aligned"> <table class="table-condensed table-top-aligned">
<tbody> <tbody>
<tr><td>Sichtbar:</td><td>{{ moderator_checkbox(['courses',course.id,'visible'], course.visible) }}</td></tr> <tr><td>Sichtbar:</td><td>{{ moderator_checkbox(['courses',course.id,'visible'], course.visible) }}</td></tr>
...@@ -65,40 +65,42 @@ ...@@ -65,40 +65,42 @@
</div> </div>
{% if ismod() %} {% if ismod() %}
<div class="panel panel-default"> <div class="card m-1">
<div class="panel-heading"> <div class="card-header">
<a data-toggle="collapse" href="#statspanel" class="plotlyresize"><h1 class="panel-title">Statistiken</h1></a> <a data-toggle="collapse" href="#statscard" class="plotlyresize"><span class="card-title">Statistiken</span></a>
</div> </div>
<div class="row panel-body collapse out panel-collapse" id="statspanel"> <div class="card-body collapse out card-collapse" id="statscard">
<div class="col-md-6 col-xs-12"> <div class="row">
<div class="col-6 col-xs-12">
<p class="text-center">Zuschauer pro Tag</p> <p class="text-center">Zuschauer pro Tag</p>
<div class="plot-view" data-url="{{url_for('stats_viewsperday', req="course", param=course.id)}}"></div> <div class="plot-view" data-url="{{url_for('stats_viewsperday', req="course", param=course.id)}}"></div>
</div> </div>
<div class="col-md-6 col-xs-12"> <div class="col-6 col-xs-12">
<p class="text-center">Zuschauer pro Termin</p> <p class="text-center">Zuschauer pro Termin</p>
<div class="plot-view" data-type="bar" data-url="{{url_for('stats_generic', req="lecture_views", param=course.id)}}"></div> <div class="plot-view" data-type="bar" data-url="{{url_for('stats_generic', req="lecture_views", param=course.id)}}"></div>
</div> </div>
</div> </div>
</div> </div>
</div>
{% endif %} {% endif %}
<div class="panel panel-default"> <div class="card m-1">
<div class="panel-heading"> <div class="card-header">
<h1 class="panel-title">Videos <span class="card-title">Videos</span>
{% if ismod() %} {% if ismod() %}
<a class="btn btn-default" style="margin-right: 5px;" href="{{ url_for('create', table='lectures', time=datetime.now(), title='Noch kein Titel', visible='0', course_id=course.id, ref=url_for('course', id=course.id)) }}">Neuer Termin</a> <a class="btn btn-secondary" style="margin-right: 5px;" href="{{ url_for('create', table='lectures', time=datetime.now(), title='Noch kein Titel', visible='0', course_id=course.id, ref=url_for('course', id=course.id)) }}">Neuer Termin</a>
<a class="btn btn-default" style="margin-right: 5px;" href="{{url_for('list_import_sources', id=course['id'])}}">Campus Import</a> <a class="btn btn-secondary" style="margin-right: 5px;" href="{{url_for('list_import_sources', id=course['id'])}}">Campus Import</a>
{% endif %} {% endif %}
<ul class="list-inline pull-right"> <ul class="list-inline float-right">
<li> <li class="list-inline-item">
<a class="fa fa-rss-square" aria-hidden="true" href="{{url_for('rss_feed', handle=course.handle)}}" style="text-decoration: none"></a> <a class="fa fa-rss-square" aria-hidden="true" href="{{url_for('rss_feed', handle=course.handle)}}" style="text-decoration: none"></a>
</li> </li>
{% if ismod() %} {% if ismod() %}
<li> <li class="list-inline float-right">
<a class="fa fa-calendar" aria-hidden="true" href="{{url_for('ical_course', course=course.handle)}}" style="text-decoration: none"></a> <a class="fa fa-calendar" aria-hidden="true" href="{{url_for('ical_course', course=course.handle)}}" style="text-decoration: none"></a>
</li> </li>
{% endif %} {% endif %}
</h1> </ul>
</div> </div>
<ul class="list-group lectureslist"> <ul class="list-group lectureslist">
{% for l in lectures %} {% for l in lectures %}
...@@ -111,15 +113,15 @@ ...@@ -111,15 +113,15 @@
<div class="modal-dialog" role="document"> <div class="modal-dialog" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<span class="modal-title">Zugriffsrechte</span>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title">Zugriffsrechte</h4>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<div class="row" style="padding-left: 10px; padding-right: 10px;" data-id="-1" data-type="-1" id="editpermdiv"> <div class="row" style="padding-left: 10px; padding-right: 10px;" data-id="-1" data-type="-1" id="editpermdiv">
<span>Es existieren folgende Zugriffsrechte:</span> <span>Es existieren folgende Zugriffsrechte:</span>
<select onchange="moderator.permissioneditor.selectpermission(this)" size="6" class="col-xs-12" id="permissionlist"> <select onchange="moderator.permissioneditor.selectpermission(this)" size="6" class="col-12" id="permissionlist">
</select> </select>
<select class="col-xs-12 authtype" onchange="moderator.permissioneditor.typechange(this)"> <select class="col-12 authtype" onchange="moderator.permissioneditor.typechange(this)">
<option value="public">Öffentlich</option> <option value="public">Öffentlich</option>
<option selected value="password">Passwort</option> <option selected value="password">Passwort</option>
<option value="rwth">RWTH intern</option> <option value="rwth">RWTH intern</option>
...@@ -127,15 +129,15 @@ ...@@ -127,15 +129,15 @@
<option value="l2p">L2P Lernraum</option> <option value="l2p">L2P Lernraum</option>
<option value="none">Kein Zugriff</option> <option value="none">Kein Zugriff</option>
</select> </select>
<input class="col-xs-12 passwordinput authuser" type="text" placeholder="Benutzername"> <input class="col-12 passwordinput authuser" type="text" placeholder="Benutzername">
<input class="col-xs-10 passwordinput authpassword" type="text" placeholder="Passwort"> <input class="col-10 passwordinput authpassword" type="text" placeholder="Passwort">
<button class="col-xs-2 passwordinput authpgen" type="button" onclick="$('.authpassword',this.parentNode).val(moderator.permissioneditor.randompw());"><span class="fa fa-refresh" aria-hidden="true"></span></button> <button class="col-2 passwordinput authpgen" type="button" onclick="$('.authpassword',this.parentNode).val(moderator.permissioneditor.randompw());"><span class="fa fa-refresh" aria-hidden="true"></span></button>
<input class="col-xs-12 authl2p" type="text" placeholder="Lernraum" style="display: none;"> <input class="col-12 authl2p" type="text" placeholder="Lernraum" style="display: none;">
<button class="col-xs-4" onclick="moderator.permissioneditor.addbtnclick(this)">Add</button> <button class="col-4" onclick="moderator.permissioneditor.addbtnclick(this)">Add</button>
<button class="col-xs-4" onclick="moderator.permissioneditor.updatebtnclick(this)">Update</button> <button class="col-4" onclick="moderator.permissioneditor.updatebtnclick(this)">Update</button>
<button class="col-xs-4" onclick="moderator.permissioneditor.delbtnclick(this)">Delete</button> <button class="col-4" onclick="moderator.permissioneditor.delbtnclick(this)">Delete</button>
</div> </div>
......
{% from 'macros.html' import course_list_item %} {% from 'macros.html' import course_list_item %}
{% extends "base.html" %} {% extends "base.html" %}
{% block content %} {% block content %}
<div> <div class="col-12">
<div class="col-xs-12" style="padding: 0px;"> <ul class="list-inline float-right">
<ul class="list-inline pull-right"> <li class="list-inline-item">
<li> <a class="fa fa-rss-square btn btn-secondary" aria-hidden="true" href="{{url_for('courses_feed')}}" style="text-decoration: none"></a>
<a class="fa fa-rss-square btn btn-default" aria-hidden="true" href="{{url_for('courses_feed')}}" style="text-decoration: none"></a>
</li> </li>
{% if ismod() %} {% if ismod() %}
<li> <li class="list-inline-item">
<a class="fa fa-calendar btn btn-default" aria-hidden="true" href="{{url_for('ical_all')}}" style="text-decoration: none"></a> <a class="fa fa-calendar btn btn-secondary" aria-hidden="true" href="{{url_for('ical_all')}}" style="text-decoration: none"></a>
</li> </li>
<li> <li class="list-inline-item">
{% set newhandle = 'new'+(randint(0,1000)|string) %} {% set newhandle = 'new'+(randint(0,1000)|string) %}
<a class="btn btn-default" href="{{ url_for('create', table='courses', handle=newhandle, title='Neue Veranstaltung', ref=url_for('course', handle=newhandle)) }}">Neue Veranstaltung</a> <a class="btn btn-secondary" href="{{ url_for('create', table='courses', handle=newhandle, title='Neue Veranstaltung', ref=url_for('course', handle=newhandle)) }}">Neue Veranstaltung</a>
</li> </li>
{% endif %} {% endif %}
<li class="dropdown pull-right" style="padding-right: 0px"> <li class="dropdown float-right list-inline-item" style="padding-right: 0px">
<button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Gruppierung <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">Gruppierung
<span class="caret"></span> <span class="caret"></span>
</button> </button>
...@@ -29,7 +28,6 @@ ...@@ -29,7 +28,6 @@
</li> </li>
</ul> </ul>
</div> </div>
</div>
<div class="visible-xs" id="xs-check"></div> <div class="visible-xs" id="xs-check"></div>
{% if groupedby == 'semester' %} {% if groupedby == 'semester' %}
...@@ -54,19 +52,20 @@ ...@@ -54,19 +52,20 @@
{% endif %} {% endif %}
{% for g in grouped_courses %} {% for g in grouped_courses %}
<div class="row panel-group" id="accordion-{{ g.grouper|tagid }}"> <div class="row panel-group col-12" id="accordion-{{ g.grouper|tagid }}">
<div class="col-xs-12"><div class="panel panel-default"> <div class="col-12">
<div class="panel-heading"> <div class="card m-1">
<div class="card-header">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion-{{ g.grouper|tagid }}" href="#{{g.grouper|tagid}}" style="color: #222;"> <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion-{{ g.grouper|tagid }}" href="#{{g.grouper|tagid}}" style="color: #222;">
{% if groupedby == 'semester' %} {% if groupedby == 'semester' %}
<h1 class="panel-title">{{g.grouper|semester(long=True)}} ({{g.list|length}} Veranstaltungen) <span class="panel-title">{{g.grouper|semester(long=True)}} ({{g.list|length}} Veranstaltungen)
</h1> </span>
{% else %} {% else %}
<h1 class="panel-title">{{g.grouper}}</h1> <span class="panel-title">{{g.grouper}}</span>
{% endif %} {% endif %}
</a> </a>
</div> </div>
<ul class="{% if not ismod() %}courses-list {% endif %}list-group panel-collapse collapse in" id="{{g.grouper|tagid}}"> <ul class="{% if not ismod() %}courses-list {% endif %}list-group card-collapse collapse in" id="{{g.grouper|tagid}}">
{% for i in g.list %} {% for i in g.list %}
{% if groupedby == 'semester' %} {% if groupedby == 'semester' %}
{{ course_list_item(i) }} {{ course_list_item(i) }}
...@@ -75,7 +74,8 @@ ...@@ -75,7 +74,8 @@
{% endif %} {% endif %}
{% endfor %} {% endfor %}
</ul> </ul>
</div></div> </div>
</div>
</div> </div>
{% endfor %} {% endfor %}
{% endblock %} {% endblock %}
{% extends "base.html" %} {% extends "base.html" %}
{% set page_border = 0 %} {% set page_border = 0 %}
{% block content %} {% block content %}
<div class="panel-group"> <div class="card">
<div class="panel panel-default"> <div class="card-header">
<div class="panel-heading"> <span class="card-title">
<span class="panel-title">
Schnittfortschritt{% if user %} für {{ user.realname }}{% endif %} Schnittfortschritt{% if user %} für {{ user.realname }}{% endif %}
</span> </span>
<span class="pull-right"> <span class="pull-right">
Semester <select id="semesterselect" name="semester"></select> Semester <select id="semesterselect" name="semester"></select>
</span> </span>
</div> </div>
<div class="panel-body table-responsive"> <div class="card-body table-responsive">
<table class="table table-condensed table-bordered"> <table class="table table-condensed table-bordered">
<tr> <tr>
{% for course in courses %} {% for course in courses %}
...@@ -34,9 +33,9 @@ ...@@ -34,9 +33,9 @@
<span style="color: red" aria-hidden="true" class="fa fa-times"></span> <span style="color: red" aria-hidden="true" class="fa fa-times"></span>
{% else %} {% else %}
{% if l.videos|selectattr('visible')|list|count == 0 %} {% if l.videos|selectattr('visible')|list|count == 0 %}
<span style="color: orange" aria-hidden="true" class="glyphicon glyphicon-ok"></span> <span style="color: orange" aria-hidden="true" class="fa fa-ok"></span>
{% else %} {% else %}
<span style="color: green" aria-hidden="true" class="glyphicon glyphicon-ok"></span> <span style="color: green" aria-hidden="true" class="fa fa-ok"></span>
{% endif %} {% endif %}
{% endif %} {% endif %}
{% else %} {% else %}
...@@ -52,7 +51,6 @@ ...@@ -52,7 +51,6 @@
</table> </table>
</div> </div>
</div> </div>
</div>
<script> <script>
$( document ).ready(function () { $( document ).ready(function () {
{% for s in allsemester %} {% for s in allsemester %}
......
{% extends "base.html" %} {% extends "base.html" %}
{% block content %} {% block content %}
<div class="panel panel-default"> <div class="card">
<div class="panel-heading"><h1 class="panel-title">Cluster</b></h1></div> <div class="card-header"><span class="card-title">Cluster</b></span></div>
<ul class="list-group"> <ul class="list-group">
{% for clustername, clusternodes in clusters.items() %} {% for clustername, clusternodes in clusters.items() %}
<li class="list-group-item"><strong>{{vars[clusternodes|first]['wsrep_cluster_name']}}</strong> ({{statuses[clusternodes|first]['wsrep_cluster_status']}}, Größe={{statuses[clusternodes|first]['wsrep_cluster_size']}}, Konfiguration={{statuses[clusternodes|first]['wsrep_cluster_conf_id']}}) <li class="list-group-item"><strong>{{vars[clusternodes|first]['wsrep_cluster_name']}}</strong> ({{statuses[clusternodes|first]['wsrep_cluster_status']}}, Größe={{statuses[clusternodes|first]['wsrep_cluster_size']}}, Konfiguration={{statuses[clusternodes|first]['wsrep_cluster_conf_id']}})
...@@ -16,8 +16,8 @@ ...@@ -16,8 +16,8 @@
</table> </table>
</div> </div>
{% for host, status in statuses.items() %} {% for host, status in statuses.items() %}
<div class="panel panel-default" id="{{host|tagid}}"> <div class="card" id="{{host|tagid}}">
<div class="panel-heading"><h1 class="panel-title">{{vars[host]['wsrep_node_name']}}</h1></div> <div class="card-header"><span class="card-title">{{vars[host]['wsrep_node_name']}}</span></div>
<div class="row" style="margin: 0px;"> <div class="row" style="margin: 0px;">
<div class="col-xs-6 table-responsive"> <div class="col-xs-6 table-responsive">
<table class="table"> <table class="table">
......
{% from 'macros.html' import preview %} {% from 'macros.html' import preview %}
{% macro faqentry(id, title, autocollapse=True) %} {% macro faqentry(id, title, autocollapse=True) %}
<div class="panel panel-default"> <div class="card">
<div class="panel-heading"> <div class="card-header">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#{{id}}"> <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#{{id}}">
<h4 class="panel-title"> <h4 class="card-title">
{{ title }} {{ title }}
</h4> </h4>
</a> </a>
</div> </div>
<div id="{{id}}" class="panel-collapse collapse in {% if autocollapse %}auto-collapse{% endif %}"> <div id="{{id}}" class="card-collapse collapse in {% if autocollapse %}auto-collapse{% endif %}">
<div class="panel-body"> <div class="card-body">
{{ caller() }} {{ caller() }}
</div> </div>
</div> </div>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<div class="panel-group"> <div class="panel-group">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<h1 class="panel-title">Campus Import für <strong>{{course.title}}</strong> <span><a href="{{url_for('course', handle=course.handle)}}" class="btn btn-default" >Zur Veranstaltungsseite</a><span> </h1> <span class="panel-title">Campus Import für <strong>{{course.title}}</strong> <span><a href="{{url_for('course', handle=course.handle)}}" class="btn btn-default" >Zur Veranstaltungsseite</a><span> </span>
</div> </div>
<div class="panel-body"> <div class="panel-body">
<div> <div>
...@@ -51,12 +51,12 @@ ...@@ -51,12 +51,12 @@
</div> </div>
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading" style="height:50px"> <div class="panel-heading" style="height:50px">
<h1 class="panel-title"> <span class="panel-title">
Termine im Campus die nicht bei uns sind: Termine im Campus die nicht bei uns sind:
<ul class="list-inline pull-right"> <ul class="list-inline pull-right">
<li><button class="btn btn-default" onclick="$('.newlecture').click(); alert('done');">alle anlegen</button></li> <li><button class="btn btn-default" onclick="$('.newlecture').click(); alert('done');">alle anlegen</button></li>
</ul> </ul>
</h1> </span>
</div> </div>
<ul class="list-group-item"> <ul class="list-group-item">
{% for i in newevents|sort(attribute='time') %} {% for i in newevents|sort(attribute='time') %}
...@@ -81,7 +81,7 @@ ...@@ -81,7 +81,7 @@
</div> </div>
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading" style="height:50px"> <div class="panel-heading" style="height:50px">
<h1 class="panel-title"> <span class="panel-title">
Termine bei uns die nicht im Campus sind: Termine bei uns die nicht im Campus sind:
<ul class="list-inline pull-right"> <ul class="list-inline pull-right">
<li><button class="btn btn-default" onclick="deleteall(); alert('done');">alle entfernen</button></li> <li><button class="btn btn-default" onclick="deleteall(); alert('done');">alle entfernen</button></li>
...@@ -99,7 +99,7 @@ ...@@ -99,7 +99,7 @@
} }
</script> </script>
</ul> </ul>
</h1> </span>
</div> </div>
<ul class="list-group-item"> <ul class="list-group-item">
{% for i in deletedlectures|sort(attribute='time') %} {% for i in deletedlectures|sort(attribute='time') %}
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
{% block content %} {% block content %}
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<h1 class="panel-title">Login für Moderatoren</h1> <span class="panel-title">Login für Moderatoren</span>
</div> </div>
<div class="panel-body input-group"> <div class="panel-body input-group">
<form method="post" action="login"> <form method="post" action="login">
......
This diff is collapsed.