diff --git a/app/javascript/channels/consumer.js b/app/javascript/channels/consumer.js index 379c59e0..22ee739e 100644 --- a/app/javascript/channels/consumer.js +++ b/app/javascript/channels/consumer.js @@ -19,6 +19,6 @@ // Action Cable provides the framework to deal with WebSockets in Rails. // You can generate new channels where WebSocket features live using the `bin/rails generate channel` command. -window.Cable = require("@rails/actioncable") -window.App = {} -App.cable = Cable.createConsumer() +window.Cable = require("@rails/actioncable"); +window.App = {}; +App.cable = Cable.createConsumer(); diff --git a/app/javascript/channels/index.js b/app/javascript/channels/index.js index 0cfcf749..298a304d 100644 --- a/app/javascript/channels/index.js +++ b/app/javascript/channels/index.js @@ -1,5 +1,5 @@ // Load all the channels within this directory and all subdirectories. // Channel files must be named *_channel.js. -const channels = require.context('.', true, /_channel\.js$/) -channels.keys().forEach(channels) +const channels = require.context('.', true, /_channel\.js$/); +channels.keys().forEach(channels); diff --git a/app/javascript/packs/edit.js b/app/javascript/packs/edit.js index 6b2b1ad2..4399fbcf 100644 --- a/app/javascript/packs/edit.js +++ b/app/javascript/packs/edit.js @@ -16,8 +16,8 @@ * with BigBlueButton; if not, see . */ -$(document).on('turbolinks:load', function(){ - $('#copy-icon-group').on('click', function() { +$(document).on('turbolinks:load', function () { + $('#copy-icon-group').on('click', function () { let useSharedCodeCheckbox = $('#use_shared_code_checkbox'); let inputField = $('#shared_code_field'); @@ -36,7 +36,7 @@ $(document).on('turbolinks:load', function(){ let copiedText = $('#copied-text'); copiedText.css('display', 'inline'); - setTimeout(function() { + setTimeout(function () { checkIcon.css('display', 'none'); copyIcon.css('display', 'inline-block'); copiedText.css('display', 'none'); @@ -62,23 +62,23 @@ $(document).on('turbolinks:load', function(){ handleUseSharedCodeCheckbox(); - $('#allModerators_checkbox').on('click', function() { + $('#allModerators_checkbox').on('click', function () { var all_mod_checked = $('#allModerators_checkbox').prop("checked"); - if (all_mod_checked){ + if (all_mod_checked) { $('#waitForModerator_checkbox').prop("checked", false); } }) - $('#waitForModerator_checkbox').on('click', function() { + $('#waitForModerator_checkbox').on('click', function () { var wait_mod_checked = $('#waitForModerator_checkbox').prop("checked"); - if (wait_mod_checked){ + if (wait_mod_checked) { $('#allModerators_checkbox').prop("checked", false); } }) - function check_record_status(){ + function check_record_status() { var record_checked = $('#record_checkbox').prop("checked"); - if (!record_checked){ + if (!record_checked) { $('#allowStartStopRecording_checkbox').prop("checked", false); $('#allowStartStopRecording_checkbox').prop("disabled", true); $('#autoStartRecording_checkbox').prop("checked", false); @@ -91,33 +91,33 @@ $(document).on('turbolinks:load', function(){ check_record_status(); // check status every time page is loaded - $('#record_checkbox').on('click', function() { + $('#record_checkbox').on('click', function () { check_record_status(); }) // If shared room is selected, allow the code field to be editable - $('#use_shared_code_checkbox').on('click', function() { + $('#use_shared_code_checkbox').on('click', function () { var use_shared_code_checked = $('#use_shared_code_checkbox').prop("checked"); - if (use_shared_code_checked){ + if (use_shared_code_checked) { $('#shared_code_field').prop("disabled", false); $('#shared_code_field').val(''); } else { $('#shared_code_field').prop("disabled", true); - console.log("code_val: = ",$('#room_code_value').val() ) + console.log("code_val: = ", $('#room_code_value').val()) $('#shared_code_field').val($('#room_code_value').val()); } }) - function checkSharedCodeCheckboxStatus() { - var sharedcode_checked = $('#use_shared_code_checkbox').prop("checked"); - if (!sharedcode_checked){ - $('#shared_code_field').prop("disabled", true); - } else { - $('#shared_code_field').prop("disabled", false); - } - } + function checkSharedCodeCheckboxStatus() { + var sharedcode_checked = $('#use_shared_code_checkbox').prop("checked"); + if (!sharedcode_checked) { + $('#shared_code_field').prop("disabled", true); + } else { + $('#shared_code_field').prop("disabled", false); + } + } - checkSharedCodeCheckboxStatus(); + checkSharedCodeCheckboxStatus(); }); diff --git a/app/javascript/packs/meetingInfo.js b/app/javascript/packs/meetingInfo.js index 9cdccb38..d247862c 100644 --- a/app/javascript/packs/meetingInfo.js +++ b/app/javascript/packs/meetingInfo.js @@ -18,33 +18,33 @@ import '../channels/consumer' -$(document).on('turbolinks:load', function(){ +$(document).on('turbolinks:load', function () { var controller = $("body").data('controller'); var action = $("body").data('action'); - var chosenRoomId = $("#body").data("chosenroomid"); - - if (!(controller == "rooms" && action == "meeting_join")){ + var chosenRoomId = $("#body").data("chosenroomid"); + + if (!(controller == "rooms" && action == "meeting_join")) { App.meetingInfo = App.cable.subscriptions.create({ - channel: "MeetingInfoChannel", - room_id: chosenRoomId - }, { - connected: function() { - console.log("Connected to meeting info channel"); + channel: "MeetingInfoChannel", + room_id: chosenRoomId + }, { + connected: function () { + console.log("Connected to meeting info channel for [" + chosenRoomId + "]"); }, - disconnected: function() { + disconnected: function () { console.log("Disconnected from meeting info channel"); }, - received: function(data) { + received: function (data) { console.log("Received data from meeting info channel. data: " + JSON.stringify(data)); - if (data.meeting_in_progress == true){ + if (data.meeting_in_progress == true) { startTime = data.elapsed_time start_elapsed_time(); display_participant_count(data.participant_count); - show_elems(); + show_elems(); } - if (data.action == "end"){ - hide_elements(); + if (data.action == "end") { + hide_elements(); } } }); @@ -53,20 +53,20 @@ $(document).on('turbolinks:load', function(){ var startTime = 0; -var show_elems = function(){ +var show_elems = function () { $('#end-meeting-btn').show(); $('#meeting-info-msg').show(); $('#wait-for-mod-msg').hide(); } -var hide_elements = function(){ +var hide_elements = function () { $('#end-meeting-btn').hide(); $('#meeting-info-msg').hide(); $('#wait-for-mod-msg').hide(); } -var display_participant_count = function(participantCount){ - if (participantCount == 1){ +var display_participant_count = function (participantCount) { + if (participantCount == 1) { var pplprson = "person"; } else { var pplprson = "people"; @@ -75,7 +75,7 @@ var display_participant_count = function(participantCount){ document.getElementById('ppl-or-person-elem').innerHTML = pplprson; } -var start_elapsed_time = function(){ +var start_elapsed_time = function () { var diff = new Date() - new Date(startTime); // the elapsed time in ms var secs = Math.floor((diff / 1000) % 60); @@ -86,7 +86,7 @@ var start_elapsed_time = function(){ secs = addZeroMaybe(secs); hrs = addZeroMaybe(hrs); - document.getElementById('elapsed-time-elem').innerHTML = hrs + ":" + mins + ":" + secs; + document.getElementById('elapsed-time-elem').innerHTML = hrs + ":" + mins + ":" + secs; setTimeout(start_elapsed_time, 500); } diff --git a/app/javascript/packs/rename.js b/app/javascript/packs/rename.js index d62163b4..703cb4eb 100644 --- a/app/javascript/packs/rename.js +++ b/app/javascript/packs/rename.js @@ -16,16 +16,16 @@ * with BigBlueButton; if not, see . */ -function func(){ +function func() { var controller = $("body").data('controller'); var action = $("body").data('action'); - if(controller == "rooms" && action == "show" || controller == "rooms" && action == "update"){ + if (controller == "rooms" && action == "show" || controller == "rooms" && action == "update") { // Set a recording row rename event - var configure_recording_row = function(recording_text, recording_text_id){ + var configure_recording_row = function (recording_text, recording_text_id) { - function register_recording_text_event(e){ + function register_recording_text_event(e) { // Remove current window events $(window).off('mousedown keydown'); @@ -34,33 +34,33 @@ function func(){ let $input = $('').val($el.text().trim()).attr('id', $el.attr('id')).attr('class', $el.attr('class')); $el.replaceWith($input); - var save = function(){ + var save = function () { let $text = $('').text($input.val()).attr('class', $input.attr('class')); $input.replaceWith($text); submit_rename_request(recording_text); }; - $input.on('blur keyup', function(e) { - if (e.type === 'blur' || e.keyCode === 13) { // keycode is depreciated by still recognized by browsers, it's alt (.key) doesnt work in firefox + $input.on('blur keyup', function (e) { + if (e.type === 'blur' || e.keyCode === 13) { // keycode is depreciated by still recognized by browsers, it's alt (.key) doesnt work in firefox save(); this.focus(); } }); - + // Register the events for being able to exit the input box. register_window_event(recording_text, recording_text_id, '#edit-record', 'edit-recordid'); } - recording_text.find('a').on('click focusout', function(e){ + recording_text.find('a').on('click focusout', function (e) { register_recording_text_event(e); }); - recording_text.find('#recording-title-text').on('focusout', function(e){ + recording_text.find('#recording-title-text').on('focusout', function (e) { $(window).off('mousedown keydown'); submit_rename_request(recording_text); }); - recording_text.find('#recording-description-text').on('focusout', function(e){ + recording_text.find('#recording-description-text').on('focusout', function (e) { $(window).off('mousedown keydown'); submit_rename_request(recording_text); }); @@ -68,22 +68,22 @@ function func(){ // Register window event to submit new name // upon click or upon pressing the enter key - var register_window_event = function(element, textfield_id, edit_button_id, edit_button_data){ - $(window).on('mousedown keydown', function(clickEvent){ + var register_window_event = function (element, textfield_id, edit_button_id, edit_button_data) { + $(window).on('mousedown keydown', function (clickEvent) { // Return if the text is clicked - if(clickEvent.type == "mousedown" && clickEvent.target.id == textfield_id){ + if (clickEvent.type == "mousedown" && clickEvent.target.id == textfield_id) { return; } // Return if the edit icon is clicked - if(clickEvent.type == "mousedown" && $(clickEvent.target).is(edit_button_id) && - $(clickEvent.target).data(edit_button_data) === element.find(edit_button_id).data(edit_button_data)){ + if (clickEvent.type == "mousedown" && $(clickEvent.target).is(edit_button_id) && + $(clickEvent.target).data(edit_button_data) === element.find(edit_button_id).data(edit_button_data)) { return; } // Check if event is keydown and enter key is not pressed - if(clickEvent.type == "keydown" && clickEvent.which !== 13){ + if (clickEvent.type == "keydown" && clickEvent.which !== 13) { return; } @@ -95,8 +95,8 @@ function func(){ } // Apply ajax request depending on the element that triggered the event - var submit_rename_request = function(element){ - if(element.is('#recording-title')){ + var submit_rename_request = function (element) { + if (element.is('#recording-title')) { submit_update_request({ setting: "rename_recording", record_id: element.data('recordid'), @@ -104,7 +104,7 @@ function func(){ launch_nonce: element.data('launch-nonce'), }); } - else if(element.is('#recording-description')){ + else if (element.is('#recording-description')) { submit_update_request({ setting: "describe_recording", record_id: element.data('recordid'), @@ -115,12 +115,12 @@ function func(){ } // Helper for submitting ajax requests - var submit_update_request = function(data){ + var submit_update_request = function (data) { // Send ajax request for update $.ajax({ url: window.location.pathname + '/recording/' + data['record_id'] + '/update?launch_nonce=' + data['launch_nonce'], type: "POST", - beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))}, + beforeSend: function (xhr) { xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content')) }, data: data, }); } @@ -128,7 +128,7 @@ function func(){ var recording_rows = $('#recording-table').find('tr'); // Configure renaming for recording rows - recording_rows.each(function(){ + recording_rows.each(function () { var recording_title = $(this).find('#recording-title'); var recording_description = $(this).find('#recording-description'); configure_recording_row(recording_title, 'recording-title-text'); diff --git a/app/javascript/packs/rooms.js b/app/javascript/packs/rooms.js index eebe97b4..2beedd58 100644 --- a/app/javascript/packs/rooms.js +++ b/app/javascript/packs/rooms.js @@ -16,43 +16,43 @@ * with BigBlueButton; if not, see . */ -$(document).on('turbolinks:load', function(){ +$(document).on('turbolinks:load', function () { var room = window.location.pathname.split('/')[3]; - + var controller = $("body").data('controller'); var action = $("body").data('action'); - if (controller == "rooms" && action == "meeting_join"){ + if (controller == "rooms" && action == "meeting_join") { var personal_join_link = $("body").data('meeting'); App.waiter = App.cable.subscriptions.create({ channel: "WaitChannel", room_id: room }, { - connected: function(data) { + connected: function (data) { console.log("connected to wait"); }, - disconnected: function(data) { + disconnected: function (data) { console.log("disconnected to wait"); console.log(data); }, - received: function(data) { + received: function (data) { console.log("This is the wait data: " + JSON.stringify(data)); - if (data.action == "started"){ + if (data.action == "started") { $('#wait-for-mod-msg').hide(); window.location.replace(personal_join_link); this.perform("notify_join"); - this.unsubscribe(); + this.unsubscribe(); } } }) } - - $('#end-meeting-btn').on('click', function() { + + $('#end-meeting-btn').on('click', function () { var end_meeting_url = $(this).data('url'); $.ajax({ url: end_meeting_url, type: "POST", - beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))}, + beforeSend: function (xhr) { xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content')) }, data: "", }); }) @@ -66,28 +66,28 @@ $(document).on('turbolinks:load', function(){ With Dynamic State Partitioning enabled, Firefox provides embedded resources with a separate storage bucket for every top-level website, causing the request to be denied if it comes from a third party. Embedded third-parties may request access to the top-level storage bucket, which is what we're doing with the requestAccess() method. */ function requestAccess() { - document.requestStorageAccess().then( - () => { - console.log('access granted!'); - $('#access-alert').hide(); - // the user needs to reload and then press the button again for it to work - }, - () => { console.log('access denied') } + document.requestStorageAccess().then( + () => { + console.log('access granted!'); + $('#access-alert').hide(); + // the user needs to reload and then press the button again for it to work + }, + () => { console.log('access denied') } ); } - if (isFirefox || isSafari){ + if (isFirefox || isSafari) { document.hasStorageAccess().then((hasAccess) => { if (!hasAccess && (isFirefox || isSafari)) { $('#access-alert').show(); console.log("no access"); - - } else { + + } else { console.log("Already has access"); } }); } $('#accept-btn').on('click', requestAccess); - + }); diff --git a/app/javascript/packs/search.js b/app/javascript/packs/search.js index 37c8d8a0..721d86df 100644 --- a/app/javascript/packs/search.js +++ b/app/javascript/packs/search.js @@ -16,14 +16,14 @@ * with BigBlueButton; if not, see . */ -$(document).on('turbolinks:load', function(){ +$(document).on('turbolinks:load', function () { var controller = $("body").data('controller'); var action = $("body").data('action'); - if(controller == "rooms" && action == "show"){ + if (controller == "rooms" && action == "show") { search_input = $('#search_bar'); - search_input.bind("keyup", function(event){ + search_input.bind("keyup", function (event) { // Retrieve the current search query search_query = search_input.find(".form-control").val(); @@ -33,21 +33,21 @@ $(document).on('turbolinks:load', function(){ recordings = $('#recording-table').find('tr'); - recordings.each(function(){ - if($(this).find('text').text().toLowerCase().includes(search_query.toLowerCase())){ + recordings.each(function () { + if ($(this).find('text').text().toLowerCase().includes(search_query.toLowerCase())) { recordings_found = recordings_found + 1; $(this).show(); } - else{ + else { $(this).hide(); } }); // Show "No recordings match your search" if no recordings found - if(recordings_found == 0){ + if (recordings_found == 0) { $('#no_recordings_found').show(); } - else{ + else { $('#no_recordings_found').hide(); } }); diff --git a/app/javascript/stylesheets/application.scss b/app/javascript/stylesheets/application.scss index 1fa1f5ce..4d152a1f 100644 --- a/app/javascript/stylesheets/application.scss +++ b/app/javascript/stylesheets/application.scss @@ -22,4 +22,4 @@ @import "tailwindcss/components"; @import "tailwindcss/utilities"; @import 'scaffolds.scss'; -@import 'tailwind'; +@import 'tailwind'; \ No newline at end of file diff --git a/app/javascript/stylesheets/errors.scss b/app/javascript/stylesheets/errors.scss index 1c4a148c..8bff75ef 100644 --- a/app/javascript/stylesheets/errors.scss +++ b/app/javascript/stylesheets/errors.scss @@ -26,5 +26,5 @@ } .error-message { -font-size: 2rem; -} + font-size: 2rem; +} \ No newline at end of file diff --git a/app/javascript/stylesheets/rooms.scss b/app/javascript/stylesheets/rooms.scss index 940aa9c2..209c0f03 100644 --- a/app/javascript/stylesheets/rooms.scss +++ b/app/javascript/stylesheets/rooms.scss @@ -21,12 +21,15 @@ // You can use Sass (SCSS) here: http://sass-lang.com/ -html,body,.container { - height: 94%; +html, +body, +.container { + height: 94%; } + .container { - display:table; - width: 100%; + display: table; + width: 100%; } .dropdown { @@ -35,11 +38,11 @@ html,body,.container { } /* Dropdown Content (Hidden by Default) */ -.dropdown-content{ +.dropdown-content { display: none; background-color: #f9f9f9; min-width: 160px; - box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); + box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); z-index: 9; } @@ -74,7 +77,8 @@ input.recording-text { border-top: 10px solid #263f88; width: 140px; height: 140px; - -webkit-animation: spin 2s linear infinite; /* Safari */ + -webkit-animation: spin 2s linear infinite; + /* Safari */ animation: spin 2s linear infinite; } @@ -87,7 +91,7 @@ input.recording-text { text-align: center; padding: 5px 0; border-radius: 6px; - + /* Position the tooltip text - see examples below! */ position: absolute; z-index: 1; @@ -98,17 +102,19 @@ input.recording-text { visibility: visible; } -.edit_hover_class a{ - visibility:hidden; +.edit_hover_class a { + visibility: hidden; } + .edit_hover_class:hover a { - visibility:visible; + visibility: visible; background-color: white; } .input-group-prepend { display: flex; } + .copy-icon { margin-left: 5px; cursor: pointer; @@ -131,11 +137,21 @@ input.recording-text { /* Safari */ @-webkit-keyframes spin { - 0% { -webkit-transform: rotate(0deg); } - 100% { -webkit-transform: rotate(360deg); } + 0% { + -webkit-transform: rotate(0deg); + } + + 100% { + -webkit-transform: rotate(360deg); + } } @keyframes spin { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } -} + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} \ No newline at end of file diff --git a/app/javascript/stylesheets/scaffolds.scss b/app/javascript/stylesheets/scaffolds.scss index 4b615805..14d00eaf 100644 --- a/app/javascript/stylesheets/scaffolds.scss +++ b/app/javascript/stylesheets/scaffolds.scss @@ -37,7 +37,9 @@ a { div { - &.field, &.actions { + + &.field, + &.actions { margin-bottom: 10px; } } @@ -85,34 +87,36 @@ svg { summary { position: relative; - display: block; /* turns off the open indicator on modern UA's */ + display: block; + /* turns off the open indicator on modern UA's */ padding: 1rem 3em 1em 0em; border: 1px; color: black; } summary::-webkit-details-marker { - display:none; /* turn off open indicator in crApple's "new IE" */ + display: none; + /* turn off open indicator in crApple's "new IE" */ } summary::before { - top:1rem; + top: 1rem; content: ''; margin-right: 1em; - display:inline-block; - width:1em; - height:1em; - font-weight:bold; - text-align:center; - background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'%3E%3Cpath fill='%23000' d='M192 384c-8.188 0-16.38-3.125-22.62-9.375l-160-160c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L192 306.8l137.4-137.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-160 160C208.4 380.9 200.2 384 192 384z'/%3E%3C/svg%3E") center no-repeat; - background-size:contain; - transition:transform 0.5s; + display: inline-block; + width: 1em; + height: 1em; + font-weight: bold; + text-align: center; + background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 384 512'%3E%3Cpath fill='%23000' d='M192 384c-8.188 0-16.38-3.125-22.62-9.375l-160-160c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L192 306.8l137.4-137.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-160 160C208.4 380.9 200.2 384 192 384z'/%3E%3C/svg%3E") center no-repeat; + background-size: contain; + transition: transform 0.5s; } -details[open]:not(.closed) > summary::before { - transform:rotateX(180deg); +details[open]:not(.closed)>summary::before { + transform: rotateX(180deg); } details p { - margin:1em; -} + margin: 1em; +} \ No newline at end of file diff --git a/app/javascript/stylesheets/tailwind.scss b/app/javascript/stylesheets/tailwind.scss index 441fce5d..cc117de3 100644 --- a/app/javascript/stylesheets/tailwind.scss +++ b/app/javascript/stylesheets/tailwind.scss @@ -16,14 +16,14 @@ * with BigBlueButton; if not, see . */ - // This file contains custom created tailwind componenets for reusability - - @layer components { - .btn-primary { - @apply py-2 px-4 bg-bbb-blue text-white font-semibold rounded-lg shadow-md hover:bg-darker-bbb-blue focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-opacity-75; - } +// This file contains custom created tailwind componenets for reusability - .btn-secondary { - @apply py-2 px-4 bg-white text-black font-semibold rounded-lg shadow-md border hover:bg-slate-200 focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-opacity-75; - } +@layer components { + .btn-primary { + @apply py-2 px-4 bg-bbb-blue text-white font-semibold rounded-lg shadow-md hover:bg-darker-bbb-blue focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-opacity-75; } + + .btn-secondary { + @apply py-2 px-4 bg-white text-black font-semibold rounded-lg shadow-md border hover:bg-slate-200 focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-opacity-75; + } +} \ No newline at end of file