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
  • bootstrap4
  • intros
  • live_sources
  • master
  • modules
5 results

Target

Select target project
  • jannik/website
  • vincent/website
  • dominic/website
  • romank/website
  • videoaginfra/website
5 results
Select Git revision
  • bootstrap4
  • intros
  • master
  • modules
  • postgres_integration
  • s3compatible
6 results
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 @@
left: 0px;
color: lightgrey;
position: absolute;
font-size: 3em;
font-size: 3em !important;
text-align: center;
line-height: 130px;
line-height: 130px !important;
text-shadow: 0 0 2px black;
}
......@@ -56,10 +56,8 @@
@media (min-width: 768px) {
.footer {
position: fixed;
bottom: 0;
width: 100%;
bottom: 0px;
height: 30px;
background-color: #f5f5f5;
}
}
......@@ -70,12 +68,14 @@
height: 80px;
clear:both;
padding-top:20px;
background-color: #f5f5f5;
}
}
.footer {
z-index: 100;
background-color: #f5f5f5;
width: 100%;
left: 0px;
}
.plot-view {
......@@ -142,5 +142,8 @@ th.rotate > div {
.tooltip-inner {
max-width: 500px;
}
.navbar {
padding: 0px;
}
......@@ -5,7 +5,7 @@ from datetime import datetime
@app.route('/internal/stats')
@app.route('/internal/stats/<semester>')
@register_navbar('Statistiken', icon='stats')
@register_navbar('Statistiken', icon='pie-chart')
@mod_required
def stats():
semester = query('SELECT DISTINCT semester from courses WHERE semester != ""');
......
......@@ -21,11 +21,9 @@ def ismod(*args):
return ('user' in session)
app.jinja_env.globals['navbar'] = []
# iconlib can be 'bootstrap'
# ( see: http://getbootstrap.com/components/#glyphicons )
# or 'fa'
# iconlib can be 'fa'
# ( 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):
urlendpoint = endpoint
if not endpoint:
......
......@@ -2,10 +2,10 @@
{% block content %}
<div class="panel panel-danger">
<div class="panel-heading">
<h1 class="panel-title">Interner Fehler</h1>
<span class="panel-title">Interner Fehler</span>
</div>
<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>
{% if online %}
<p>Wir haben das Problem registriert und werden uns schnellst möglich darum kümmern.</p>
......
......@@ -12,7 +12,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<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 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 rel="stylesheet" type="text/css" href="{{url_for('static', filename='style.css')}}">
......@@ -25,6 +25,7 @@
{% endif %}
<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='js.cookie.js')}}"></script>
{%if ismod() %}
......@@ -44,8 +45,8 @@
<body>
{% block navbar %}
{% macro navbaricon(data, user=none) -%}
<li{% if data.endpoint == request.endpoint %} class="active"{% endif %}>
<a href="{{ url_for(data.endpoint, user=user) }}" style="padding: 10px 6px;">
<li class="nav-item{% if data.endpoint == request.endpoint %} active{% endif %}">
<a href="{{ url_for(data.endpoint, user=user) }}" class="nav-link text-nowrap">
{% if data.gly != '' %}
{% if data.iconlib == 'bootstrap' %}
<span aria-hidden="true" class="glyphicon glyphicon-{{ data.icon }}"></span>
......@@ -57,33 +58,31 @@
</a>
</li>
{%- endmacro %}
<nav class="hidden-print navbar navbar-default navbar-static-top" {% if config.DEBUG %} style="background-color: red" {% endif %} >
<div class="container-fluid">
<div class="navbar-header">
<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;">
<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="navbar navbar-expand">
<a class="navbar-brand" href="/" >
<img alt="Brand" src="{{url_for('static', filename='logo.png')}}" style="height: 44px; width: 44px" >
</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) %}
{{ navbaricon(n) }}
{% endfor %}
</ul>
</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">
<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) %}
{{ navbaricon(n) }}
{% endfor %}
{% 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 %}>
<a data-toggle="dropdown" data-boundary="viewport" class="dropdown-toggle" style="padding: 10px 6px; cursor: pointer;">{{ grouper }}<span class="caret"></span></a>
<li class="nav-item dropdown{% if request.endpoint in list|map(attribute='endpoint') %} active{% endif %}">
<a data-toggle="dropdown" class="dropdown-toggle nav-link" style="cursor: pointer;">{{ grouper }}<span class="caret"></span></a>
<ul class="dropdown-menu">
{% for n in list %}
{{ navbaricon(n) }}
......@@ -91,18 +90,14 @@
</ul>
</li>
{% endfor %}
<li class="col-xs-9 col-sm-4 pull-right">
<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>
</ul>
</div>
</form>
</li>
<li class="navbar-right">
<div class="navbar navbar-expand" style="overflow-y: inherit">
<ul class="navbar-nav">
<li class="navbar-item dropdown mr-1">
{% if not ismod() %}
<a href="{{url_for('login', ref=request.url)}}" id="loginpopover" data-container="body" data-toggle="popover" data-placement="bottom">
<span class="glyphicon glyphicon-log-in"></span>
<a class="nav-link" href="{{url_for('login', ref=request.url)}}" id="loginpopover" data-toggle="popover" data-placement="bottom">
<span class="fa fa-sign-in"></span>
</a>
<script>
$('#loginpopover').on('click',function(e){
......@@ -116,27 +111,36 @@
)
</script>
{% 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">
{% for n in navbar if n.userendpoint %}
{{ navbaricon(n, user=session.user.dbid) }}
{% endfor %}
<li class="divider"></li>
<li><a href="{{url_for('logout', ref=request.url)}}">Logout</a></li>
<li class="dropdown-divider"></li>
<li class="nav-item"><a class="nav-link" href="{{url_for('logout', ref=request.url)}}">Logout</a></li>
</ul>
{% endif %}
</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>
</form>
</li>
</ul>
</div>
</nav>
{% endblock %}
<div class="container-fluid" style="margin-bottom: 30px;">
<div class="row">
<div class="row m-1 mt-2">
{% if page_border == 0 %}
<div class="col-xs-12">
<div class="col-12">
{% 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 %}
{% block announcements %}
{% for msg in get_announcements(min_announcement_level) if (not request.cookies['alert-info-'+msg.id|string]) %}
......@@ -155,28 +159,26 @@
{% endblock %}
</div>
</div>
</div>
{% block footer %}
<footer class="footer hidden-print" {% if config.DEBUG %} style="background-color: red" {% endif %} >
<div class="container-fluid">
<ul class="list-inline" style="margin-top: 5px;">
<li>
<footer class="footer hidden-print bg-light" {% if config.DEBUG %} style="background-color: red !important;" {% endif %} >
<ul class="list-inline m-1">
<li class="list-inline-item">
<a href="https://www.fsmpi.rwth-aachen.de/">Fachschaft I/1</a>
</li>
<li>
<li class="list-inline-item">
<a href="http://www.vampir.rwth-aachen.de/">Vampir e.V.</a>
</li>
<li>
<li class="list-inline-item">
<a href="https://www.youtube.com/channel/UCxh5snRN7yZyBsytNbGNuEQ">Youtube</a>
</li>
<li>
<li class="list-inline-item">
<a href="https://www.facebook.com/videoag">Facebook</a>
</li>
<li>
<li class="list-inline-item">
<a href="https://twitter.com/rwthvideo">Twitter</a>
</li>
{% 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>
<span>{{ gethostname() }}</span>
{% if is_readonly() %}
......@@ -185,16 +187,16 @@
</li>
{% endif %}
</ul>
</div>
</footer>
{% endblock %}
</div>
{% block modals %}
<div class="modal fade" id="modal_apierror" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<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 class="modal-body">
</div>
......
{% from 'macros.html' import preview %}
{% extends "base.html" %}
{% block content %}
<div class="panel-group">
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">Changelog</h1>
<div class="card-group">
<div class="card ">
<div class="card-header">
<span class="card-title">Changelog</span>
</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>
<ul class="pagination pull-right">
<ul class="pagination float-right">
<li class="page-item">
<a class="page-link" href="{{url_for('changelog', page=page-1) }}">
<span aria-hidden="true">&laquo;</span>
......@@ -47,7 +47,7 @@
<td style="white-space: nowrap;">{{i.path}}</td>
<td>"{{i.value_old}}"</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>
{% endfor %}
</table>
......
......@@ -8,21 +8,21 @@
{% extends "base.html" %}
{% block title %}- {{course.title}}{% endblock %}
{% block content %}
<div class="panel panel-default">
<div class="panel-heading">
<span class="panel-title">
<div class="card m-1">
<div class="card-header">
<span class="card-title">
{{ moderator_editor(['courses',course.id,'title'], course.title)}}
{% if ismod() %}
<i>(<a href={{ url_for('course', id=course.id) }}>{{course.id}}</a>)</i>
{% endif %}
</span>
<ul class="pull-right list-inline">
<li>{{ moderator_delete(['courses',course.id,'deleted']) }}</li>
<li>{{ moderator_permissioneditor('course',course.id,course.perm, global_permissions) }}</li>
<ul class="float-right list-inline">
<li class="list-inline-item">{{ moderator_delete(['courses',course.id,'deleted']) }}</li>
<li class="list-inline-item">{{ moderator_permissioneditor('course',course.id,course.perm, global_permissions) }}</li>
</ul>
</div>
<div class="row panel-body">
<div class="col-xs-12">
<div class="row card-body">
<div class="col-12">
<table class="table-top-aligned table-condensed">
<tbody>
{% if ismod() %}
......@@ -36,7 +36,7 @@
</table>
</div>
{% 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">
<tbody>
<tr><td>Sichtbar:</td><td>{{ moderator_checkbox(['courses',course.id,'visible'], course.visible) }}</td></tr>
......@@ -65,40 +65,42 @@
</div>
{% if ismod() %}
<div class="panel panel-default">
<div class="panel-heading">
<a data-toggle="collapse" href="#statspanel" class="plotlyresize"><h1 class="panel-title">Statistiken</h1></a>
<div class="card m-1">
<div class="card-header">
<a data-toggle="collapse" href="#statscard" class="plotlyresize"><span class="card-title">Statistiken</span></a>
</div>
<div class="row panel-body collapse out panel-collapse" id="statspanel">
<div class="col-md-6 col-xs-12">
<div class="card-body collapse out card-collapse" id="statscard">
<div class="row">
<div class="col-6 col-xs-12">
<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>
<div class="col-md-6 col-xs-12">
<div class="col-6 col-xs-12">
<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>
</div>
</div>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">Videos
<div class="card m-1">
<div class="card-header">
<span class="card-title">Videos</span>
{% 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-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('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('list_import_sources', id=course['id'])}}">Campus Import</a>
{% endif %}
<ul class="list-inline pull-right">
<li>
<ul class="list-inline float-right">
<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>
</li>
{% 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>
</li>
{% endif %}
</h1>
</ul>
</div>
<ul class="list-group lectureslist">
{% for l in lectures %}
......@@ -111,15 +113,15 @@
<div class="modal-dialog" role="document">
<div class="modal-content">
<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>
<h4 class="modal-title">Zugriffsrechte</h4>
</div>
<div class="modal-body">
<div class="row" style="padding-left: 10px; padding-right: 10px;" data-id="-1" data-type="-1" id="editpermdiv">
<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 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 selected value="password">Passwort</option>
<option value="rwth">RWTH intern</option>
......@@ -127,15 +129,15 @@
<option value="l2p">L2P Lernraum</option>
<option value="none">Kein Zugriff</option>
</select>
<input class="col-xs-12 passwordinput authuser" type="text" placeholder="Benutzername">
<input class="col-xs-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>
<input class="col-12 passwordinput authuser" type="text" placeholder="Benutzername">
<input class="col-10 passwordinput authpassword" type="text" placeholder="Passwort">
<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-xs-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.addbtnclick(this)">Add</button>
<button class="col-4" onclick="moderator.permissioneditor.updatebtnclick(this)">Update</button>
<button class="col-4" onclick="moderator.permissioneditor.delbtnclick(this)">Delete</button>
</div>
......
{% from 'macros.html' import course_list_item %}
{% extends "base.html" %}
{% block content %}
<div>
<div class="col-xs-12" style="padding: 0px;">
<ul class="list-inline pull-right">
<li>
<a class="fa fa-rss-square btn btn-default" aria-hidden="true" href="{{url_for('courses_feed')}}" style="text-decoration: none"></a>
<div class="col-12">
<ul class="list-inline float-right">
<li class="list-inline-item">
<a class="fa fa-rss-square btn btn-secondary" aria-hidden="true" href="{{url_for('courses_feed')}}" style="text-decoration: none"></a>
</li>
{% if ismod() %}
<li>
<a class="fa fa-calendar btn btn-default" aria-hidden="true" href="{{url_for('ical_all')}}" style="text-decoration: none"></a>
<li class="list-inline-item">
<a class="fa fa-calendar btn btn-secondary" aria-hidden="true" href="{{url_for('ical_all')}}" style="text-decoration: none"></a>
</li>
<li>
<li class="list-inline-item">
{% 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>
{% 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
<span class="caret"></span>
</button>
......@@ -29,7 +28,6 @@
</li>
</ul>
</div>
</div>
<div class="visible-xs" id="xs-check"></div>
{% if groupedby == 'semester' %}
......@@ -54,19 +52,20 @@
{% endif %}
{% for g in grouped_courses %}
<div class="row panel-group" id="accordion-{{ g.grouper|tagid }}">
<div class="col-xs-12"><div class="panel panel-default">
<div class="panel-heading">
<div class="row panel-group col-12" id="accordion-{{ g.grouper|tagid }}">
<div class="col-12">
<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;">
{% if groupedby == 'semester' %}
<h1 class="panel-title">{{g.grouper|semester(long=True)}} ({{g.list|length}} Veranstaltungen)
</h1>
<span class="panel-title">{{g.grouper|semester(long=True)}} ({{g.list|length}} Veranstaltungen)
</span>
{% else %}
<h1 class="panel-title">{{g.grouper}}</h1>
<span class="panel-title">{{g.grouper}}</span>
{% endif %}
</a>
</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 %}
{% if groupedby == 'semester' %}
{{ course_list_item(i) }}
......@@ -75,7 +74,8 @@
{% endif %}
{% endfor %}
</ul>
</div></div>
</div>
</div>
</div>
{% endfor %}
{% endblock %}
{% extends "base.html" %}
{% set page_border = 0 %}
{% block content %}
<div class="panel-group">
<div class="panel panel-default">
<div class="panel-heading">
<span class="panel-title">
<div class="card">
<div class="card-header">
<span class="card-title">
Schnittfortschritt{% if user %} für {{ user.realname }}{% endif %}
</span>
<span class="pull-right">
Semester <select id="semesterselect" name="semester"></select>
</span>
</div>
<div class="panel-body table-responsive">
<div class="card-body table-responsive">
<table class="table table-condensed table-bordered">
<tr>
{% for course in courses %}
......@@ -34,9 +33,9 @@
<span style="color: red" aria-hidden="true" class="fa fa-times"></span>
{% else %}
{% 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 %}
<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 %}
{% else %}
......@@ -52,7 +51,6 @@
</table>
</div>
</div>
</div>
<script>
$( document ).ready(function () {
{% for s in allsemester %}
......
{% extends "base.html" %}
{% block content %}
<div class="panel panel-default">
<div class="panel-heading"><h1 class="panel-title">Cluster</b></h1></div>
<div class="card">
<div class="card-header"><span class="card-title">Cluster</b></span></div>
<ul class="list-group">
{% 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']}})
......@@ -16,8 +16,8 @@
</table>
</div>
{% for host, status in statuses.items() %}
<div class="panel panel-default" id="{{host|tagid}}">
<div class="panel-heading"><h1 class="panel-title">{{vars[host]['wsrep_node_name']}}</h1></div>
<div class="card" id="{{host|tagid}}">
<div class="card-header"><span class="card-title">{{vars[host]['wsrep_node_name']}}</span></div>
<div class="row" style="margin: 0px;">
<div class="col-xs-6 table-responsive">
<table class="table">
......
{% from 'macros.html' import preview %}
{% macro faqentry(id, title, autocollapse=True) %}
<div class="panel panel-default">
<div class="panel-heading">
<div class="card">
<div class="card-header">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#{{id}}">
<h4 class="panel-title">
<h4 class="card-title">
{{ title }}
</h4>
</a>
</div>
<div id="{{id}}" class="panel-collapse collapse in {% if autocollapse %}auto-collapse{% endif %}">
<div class="panel-body">
<div id="{{id}}" class="card-collapse collapse in {% if autocollapse %}auto-collapse{% endif %}">
<div class="card-body">
{{ caller() }}
</div>
</div>
......
......@@ -4,7 +4,7 @@
<div class="panel-group">
<div class="panel panel-default">
<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 class="panel-body">
<div>
......@@ -51,12 +51,12 @@
</div>
<div class="panel panel-default">
<div class="panel-heading" style="height:50px">
<h1 class="panel-title">
<span class="panel-title">
Termine im Campus die nicht bei uns sind:
<ul class="list-inline pull-right">
<li><button class="btn btn-default" onclick="$('.newlecture').click(); alert('done');">alle anlegen</button></li>
</ul>
</h1>
</span>
</div>
<ul class="list-group-item">
{% for i in newevents|sort(attribute='time') %}
......@@ -81,7 +81,7 @@
</div>
<div class="panel panel-default">
<div class="panel-heading" style="height:50px">
<h1 class="panel-title">
<span class="panel-title">
Termine bei uns die nicht im Campus sind:
<ul class="list-inline pull-right">
<li><button class="btn btn-default" onclick="deleteall(); alert('done');">alle entfernen</button></li>
......@@ -99,7 +99,7 @@
}
</script>
</ul>
</h1>
</span>
</div>
<ul class="list-group-item">
{% for i in deletedlectures|sort(attribute='time') %}
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -2,7 +2,7 @@
{% block content %}
<div class="panel panel-default">
<div class="panel-heading">
<h1 class="panel-title">Login für Moderatoren</h1>
<span class="panel-title">Login für Moderatoren</span>
</div>
<div class="panel-body input-group">
<form method="post" action="login">
......
This diff is collapsed.