diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..a330a41198f1d7009a6b390e7d94243288785c6d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +.ftpconfig diff --git a/admin/lib/amiv/amivcore.js b/admin/lib/amiv/amivcore.js index 6509256212a1823056dec1f2dab5a19b731b08e3..43633f82f9b714e6e2340787f26fe3addefa1914 100644 --- a/admin/lib/amiv/amivcore.js +++ b/admin/lib/amiv/amivcore.js @@ -11,8 +11,8 @@ var core = { // Important vars n' stuff lib: { - api_url: 'https://amiv-apidev.vsos.ethz.ch', - //api_url: 'https://nicco.io/amiv', + //api_url: 'https://amiv-apidev.vsos.ethz.ch', + api_url: 'https://nicco.io/amiv', spec_url: 'lib/amiv/spec.json', //spec_url: 'https://nicco.io/amiv/docs/spec.json', authenticated: false, diff --git a/admin/lib/cust/main.js b/admin/lib/cust/main.js index 27febd792e77777f47b393aa43e894ab4b652ab7..248b0d70aa358b9dd89977eceb2d8bfeceb0532e 100644 --- a/admin/lib/cust/main.js +++ b/admin/lib/cust/main.js @@ -100,13 +100,13 @@ var tools = { menu: function(attr) { var custMenu = $('.cust-menu'); custMenu.html(''); - tools.ui.menuId++; for (var cur in attr) { + tools.ui.menuId++; if (attr[cur].link == '' || attr[cur].link === undefined) attr[cur].link = 'javascript:void(0);'; custMenu.append('<li><a href="' + attr[cur].link + '" id="cust-menu-link-' + tools.ui.menuId + '">' + cur + '</a></li>'); if (typeof(attr[cur].callback) == 'function') - $('#cust-menu-link-' + tools.ui.menuId).click(attr[cur].callback); + $('#cust-menu-link-' + tools.ui.menuId).on('click', attr[cur].callback); } } diff --git a/admin/tools/users.tool b/admin/tools/users.tool index 809a9939188615e8505df6a1e273875b88ab812c..126a8439e73bb8cd406170c30e1ea70e8e2ed649 100644 --- a/admin/tools/users.tool +++ b/admin/tools/users.tool @@ -20,99 +20,167 @@ var users = { showInTable: ['firstname', 'lastname', 'email', 'membership'], curUserData: null, + page: { + max: Number.MAX_VALUE, + cur: function() { + return parseInt(tools.mem.session.get('curPage')); + }, + set: function(num) { + num = parseInt(num); + if (num > 0 && num < users.page.max + 1) + tools.mem.session.set('curPage', num); + $('.users-cur-page-cont').html(users.page.cur()); + users.get(); + }, + inc: function() { + users.page.set(users.page.cur() + 1); + }, + dec: function() { + users.page.set(users.page.cur() - 1); + } + }, + get: function() { + amivcore.users.GET({ + data: { + 'max_results': '50', + page: users.page.cur(), + } + }, function(ret) { + + if (ret === undefined || ret['_items'].length == 0) { + tools.log('No Data', 'w'); + return; + } + + users.meta = ret['_meta']; + users.page.max = Math.ceil(users.meta.total / users.meta.max_results); + $('.users-page-max-cont').html(users.page.max); + + // Clear table from previous contentent + $('.users-table thead, .users-table tbody').html(''); + + users.showInTable.forEach(function(i) { + $('.users-table thead tr').append('<th>' + i + '</th>'); + }); + + for (var n in ret['_items']) { + var tmp = ''; + users.showInTable.forEach(function(i) { + tmp += '<td>' + ret['_items'][n][i] + '</td>'; + }); + $('.users-table tbody').append('<tr data-id="' + ret['_items'][n]['id'] + '">' + tmp + '</tr>'); + } + $('.users-table tbody tr').click(users.showDetails); + }); + }, + + // Make Modal with editable table data + showDetails: function() { + amivcore.users.GET({ + id: $(this).attr('data-id') + }, function(ret) { + curUserData = ret; + var tmp = '<table class="table table-hover users-user-edit-table" data-etag="' + ret['_etag'] + '"><tbody>'; + for (var cur in ret) + if (cur.charAt(0) != '_') + tmp += '<tr><td>' + cur + '</td><td contenteditable>' + ret[cur] + '</td></tr>' + tmp += '</tbody></table>'; + + tools.modal({ + head: ret.firstname + ' ' + ret.lastname, + body: tmp, + button: 'OK', + success: users.inspectUser + }); + + });; + }, + + // Check wether changes were maid and saves it in that case + inspectUser: function() { + var newUserData = {}; + $('.users-user-edit-table tr').each(function() { + newUserData[$(this).children('td:nth-child(1)').html()] = $(this).children('td:nth-child(2)').html(); + }); + var changed = false, + curUserDataChanged = {}; + for (var i in newUserData) { + if (newUserData[i] != String(curUserData[i])) { + changed = true; + curUserDataChanged[i] = newUserData[i]; + } + } + if (changed) { + amivcore.users.PATCH({ + id: curUserData.id, + header: { + 'If-Match': $('.users-user-edit-table').attr('data-etag') + }, + data: curUserDataChanged + }, function() { + tools.log('User Updated', 's'); + users.get(); + }); + } + }, + + //Make new user + add: function() { + var tmp = '<table class="table table-hover users-user-add-table"><tbody>', + reqFields = amivcore.getRequiredFields('users', 'POST'); + for (var reqField in reqFields) + tmp += '<tr><td>' + reqField + '</td><td contenteditable></td></tr>' + tmp += '</tbody></table>'; + tools.modal({ + head: 'New User', + body: tmp, + button: 'Add', + success: function() { + var newUserData = {}; + $('.users-user-add-table tr').each(function() { + newUserData[$(this).children('td:nth-child(1)').html()] = $(this).children('td:nth-child(2)').html(); + }); + amivcore.users.POST({ + data: newUserData + }, function(ret) { + console.log(ret); + }); + } + }) + } }; + // Setup Menu tools.ui.menu({ '<span class="glyphicon glyphicon-user" aria-hidden="true"></span>': { - callback: function() {} + callback: users.add }, '<span class="glyphicon glyphicon-arrow-left" aria-hidden="true"></span>': { - callback: function() {} + callback: users.page.dec }, - '<span class="users-cur-page" aria-hidden="true">0</span>': { - callback: function() {} + '<span class="users-cur-page-cont" aria-hidden="true"></span> / <span class="users-page-max-cont" aria-hidden="true"></span>': { + callback: function() { + tools.modal({ + head: 'Go To Page:', + body: '<div class="form-group"><input type="number" value="' + users.page.cur() + '" class="form-control users-go-page"></div>', + button: 'GO', + success: function() { + users.page.set($('.users-go-page').val()); + } + }) + } }, '<span class="glyphicon glyphicon-arrow-right" aria-hidden="true"></span>': { - callback: function() {} + callback: users.page.inc }, '<span class="glyphicon glyphicon-search" aria-hidden="true"></span>': { callback: function() {} } }); - function inspectUser() { - var newUserData = {}; - $('.users-user-edit-table tr').each(function() { - newUserData[$(this).children('td:nth-child(1)').html()] = $(this).children('td:nth-child(2)').html(); - }); - var changed = false, - curUserDataChanged = {}; - for (var i in newUserData) { - if (newUserData[i] != String(curUserData[i])) { - changed = true; - curUserDataChanged[i] = newUserData[i]; - } - } - if (changed) { - amivcore.users.PATCH({ - id: curUserData.id, - header: { - 'If-Match': $('.users-user-edit-table').attr('data-etag') - }, - data: curUserDataChanged - }, function(){ - tools.log('User Updated', 's'); - tools.getTool('users'); - }); - } - } - - function showDetails() { - amivcore.users.GET({ - id: $(this).attr('data-id') - }, function(ret) { - curUserData = ret; - var tmp = '<table class="table table-hover users-user-edit-table" data-etag="' + ret['_etag'] + '"><tbody>'; - for (var cur in ret) - if (cur.charAt(0) != '_') - tmp += '<tr><td>' + cur + '</td><td contenteditable>' + ret[cur] + '</td></tr>' - tmp += '</tbody></table>'; - - tools.modal({ - head: ret.firstname + ' ' + ret.lastname, - body: tmp, - button: 'OK', - success: inspectUser, - cancel: function() { - console.log('Canceled'); - } - }); - - });; - } - - amivcore.users.GET({ - data: { - //'max_results': '50' - } - }, function(ret) { - - if (ret === undefined || ret['_items'].length == 0) { - tools.log('No Data', 'w'); - return; - } - - users.showInTable.forEach(function(i) { - $('.users-table thead tr').append('<th>' + i + '</th>'); - }); - - for (var n in ret['_items']) { - var tmp = ''; - users.showInTable.forEach(function(i) { - tmp += '<td>' + ret['_items'][n][i] + '</td>'; - }); - $('.users-table tbody').append('<tr data-id="' + ret['_items'][n]['id'] + '">' + tmp + '</tr>'); - } - $('.users-table tbody tr').click(showDetails); - }); + // Set Initail Page and get first users + if (users.page.cur() === null || isNaN(users.page.cur())) + users.page.set(1); + else + users.page.set(users.page.cur()); </script> diff --git a/public/css/dynamic.css b/public/css/dynamic.css index 59ae92eab1fb8ecdb5c6c7a8c8289c6f5cb19def..c402efa1693a9f539c71c59c7a34aa621f04b36b 100644 --- a/public/css/dynamic.css +++ b/public/css/dynamic.css @@ -18,4 +18,21 @@ #columns[data-columns]::before { content: '4 .col-md-3'; } - } \ No newline at end of file + } + /* Responsive iFrame */ + .responsive-iframe-container { + position: relative; + padding-bottom: 56.25%; + padding-top: 30px; + height: 0; + overflow: hidden; + } + .responsive-iframe-container iframe, + .vresponsive-iframe-container object, + .vresponsive-iframe-container embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } \ No newline at end of file diff --git a/public/css/logo-nav.css b/public/css/logo-nav.css index fb83c60c3ff3d17f80837d56c726ff421d0247a2..2fbcc15bbf7f37c2bc3196ceaec3e6ce1c94f5ae 100644 --- a/public/css/logo-nav.css +++ b/public/css/logo-nav.css @@ -6,6 +6,7 @@ body { padding-top: 70px; /* Required padding for .navbar-fixed-top. Change if height of navigation changes. */ + padding-bottom: 16px; } .navbar-fixed-top .nav { diff --git a/public/index.html b/public/index.html index 56b98553e82b47a899d187c93aae55e3c63efd33..31a8e5c6ccb7225cab720ebf3b85e988db4cfde0 100644 --- a/public/index.html +++ b/public/index.html @@ -44,7 +44,7 @@ <span class="icon-bar"></span> </button> <a class="navbar-brand" href="#"> - <img src="res/AMIV_Logo_150_50.svg" alt="AMIV" height="80%"> + <img src="res/AMIV_Logo_150_50.svg" alt="AMIV"> </a> </div> <!-- Collect the nav links, forms, and other content for toggling --> @@ -72,6 +72,15 @@ <div class="container-fluid"> <div class="grid"> <div class="grid-sizer"></div> + +<!-- Google Calendar --> + <div class="grid-item col-xs-12 col-sm-6 col-md-4 col-lg-3 col-xl-2"> + <div class="responsive-iframe-container big-container card"> + <iframe src="https://calendar.google.com/calendar/embed?showTitle=0&showNav=0&showPrint=0&showTabs=0&showCalendars=0&mode=AGENDA&height=600&wkst=2&bgcolor=%23ffffff&src=amiv.an.der.eth%40gmail.com&color=%231B887A&src=o8mobocsom5ea8b0d00eidr6a4%40group.calendar.google.com&color=%23691426&src=n18j3pnpl65bp58fjfikvlkbn4%40group.calendar.google.com&color=%238C500B&src=5qbl733r12mejhaosqnqlohccg%40group.calendar.google.com&color=%23ef4ef6&src=5ef1jg56fiaoqbeqago5mbrpd4%40group.calendar.google.com&color=%230F4B38&src=rflnq53lsgj64evaiif691p280%40group.calendar.google.com&color=%2329527A&src=4a7g6cfm9shgpfvmce13aagovs%40group.calendar.google.com&color=%2323164E&src=mdk91hfvr18q8rrlh3sedlhgvo%40group.calendar.google.com&color=%23711616&src=1i7ubr4f35q6hrkond7o4dmtq0%40group.calendar.google.com&color=%23125A12&src=p38tc4mipcao4312oegcmvgkto%40group.calendar.google.com&color=%23711616&ctz=Europe%2FZurich" style="border-width:0" width="800" height="600" frameborder="0"></iframe> + </div> + </div> + +<!-- Twitter widget --> <div class="grid-item col-xs-12 col-sm-6 col-md-4 col-lg-3 col-xl-2"> <div class="card"> <p> @@ -84,69 +93,10 @@ </script> </div> </div> +<!-- Facebook widget --> </div> </div> - - <script> - function getEvents(callback) { - callback = callback || function(ret) { - console.log(ret); - } - $.getJSON('https://amiv-apidev.vsos.ethz.ch/events/', callback); - } - - function addElement(item) { - $('.grid') - .append('<div class="grid-item col-xs-12 col-sm-6 col-md-4 col-lg-3 col-xl-2">' + item + '</div>'); - } - - $(document).ready(function() { - $('.grid-item, .grid-sizer').addClass('col-xs-12 col-sm-6 col-md-4 col-lg-3 col-xl-2'); - $('.grid').masonry({ - itemSelector: '.grid-item', - columnWidth: '.grid-sizer', - percentPosition: true - }).on('DOMSubtreeModified', function(){ - $(this).masonry('reloadItems').masonry(); - }) - getEvents(function(ret) { - ret['_items'].forEach(function(item) { - /*Is it Websitecontent?*/ - if (item.show_website == false){ - return; - } - console.log(item.title_de); - - /*Picture Checker*/ - if (item.img_banner == null){ - item.img_banner = "https://s-media-cache-ak0.pinimg.com/736x/9c/24/fd/9c24fdb71c67e31efef540efb141f96d.jpg"; - } - /* Datum anpassen*/ - var datenum = new Date(item.time_start); - var regstart = new Date(item.time_register_start); - var regend = new Date(item.time_register_end); - var heute = new Date(Date.now()); - - /*Minuten immer Zweistellig*/ - var minutes = datenum.getMinutes(); - if (minutes < 10){ - minutes = "0" + minutes; - } - var month = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]; - - /*Anmeldung*/ - var register = ""; - if (/* amivcore.authenticated() && */item.spot >= 0 && regstart > heute && regend < heute){ - register = "Anmelden"; - - } - addElement('<div class="card"><div class="card-image"><img class="img-responsive" src="'+item.img_banner+'"><date><div class="month">'+month[datenum.getMonth()]+'</div><div class="day">'+datenum.getDate()+'</div><div class="starttime">'+datenum.getHours()+':'+minutes+'</div><date-overlay></date-overlay></date><span class="card-title">'+item.title_de+' @ '+item.location+'</span></div><div class="card-content">'+item.description_de+'</div><div class="card-action"><a href="#" target="new_blank">Zum Event</a><a href="#" target="new_blank">'+register+'</a><a href="#" target="new_blank">Im Kalender speichern</a></div></div>'); - }); - }); - }); - </script> - -<script src="js/main.js"></script> + <script src="js/main.js"></script> </body> </html> diff --git a/public/js/main.js b/public/js/main.js index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c79a193f1e0853d32d79b40d5eb3e219eb8f2ec7 100644 --- a/public/js/main.js +++ b/public/js/main.js @@ -0,0 +1,58 @@ +function getEvents(callback) { + callback = callback || function(ret) { + console.log(ret); + } + $.getJSON('https://amiv-apidev.vsos.ethz.ch/events/', callback); + } + + function addElement(item) { + $('.grid') + .append('<div class="grid-item col-xs-12 col-sm-6 col-md-4 col-lg-3 col-xl-2">' + item + '</div>'); + } + + $(document).ready(function() { + $('.grid-item, .grid-sizer').addClass('col-xs-12 col-sm-6 col-md-4 col-lg-3 col-xl-2'); + $('.grid').masonry({ + itemSelector: '.grid-item', + columnWidth: '.grid-sizer', + percentPosition: true, + originLeft: false + }).on('DOMSubtreeModified', function(){ + $(this).masonry('reloadItems').masonry(); + }) + getEvents(function(ret) { + ret['_items'].forEach(function(item) { + /*Is it Websitecontent?*/ + if (item.show_website == false){ + return; + } + console.log(item.title_de); + + /*Picture Checker*/ + if (item.img_banner == null){ + item.img_banner = "https://s-media-cache-ak0.pinimg.com/736x/9c/24/fd/9c24fdb71c67e31efef540efb141f96d.jpg"; + } + /* Datum anpassen*/ + var datenum = new Date(item.time_start); + + + /*Minuten immer Zweistellig*/ + var minutes = datenum.getMinutes(); + if (minutes < 10){ + minutes = "0" + minutes; + } + var month = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]; + + /*Anmeldung*/ + var regstart = new Date(item.time_register_start); + var regend = new Date(item.time_register_end); + var heute = new Date(Date.now()); + var register = ""; + if (item.spots>=0 && regstart<=heute && regend>=heute){ + register = "Anmelden"; + } + + addElement('<div class="card"><div class="card-image"><img class="img-responsive" src="'+item.img_banner+'"><date><div class="month">'+month[datenum.getMonth()]+'</div><div class="day">'+datenum.getDate()+'</div><div class="starttime">'+datenum.getHours()+':'+minutes+'</div><date-overlay></date-overlay></date><span class="card-title">'+item.title_de+' @ '+item.location+'</span></div><div class="card-content">'+item.description_de+'</div><div class="card-action"><a href="#" target="new_blank">Info</a><a href="#" target="new_blank">'+register+'</a><a href="#" target="new_blank">Im Kalender speichern</a></div></div>'); + }); + }); + });