Compare commits

..

11 Commits

Author SHA1 Message Date
a46253ec7d Add retrieveLBC and retrieveNote for references 2024-05-26 22:46:54 -04:00
45a3398ac7 Fix error with retrieving HC and CD references and add LBC 2024-05-26 22:46:25 -04:00
a20caf1fc8 Added LBC and note reference retrieval
Convert get-reference to retrieve data from database instead of files
Fixed error with saving new note
2024-05-26 22:43:56 -04:00
435402ee41 Add LBC and new reference field 2024-05-26 22:40:45 -04:00
8315970571 Reorg the note fields and add recording link field
Add LBC
2024-05-26 22:33:41 -04:00
d26874d88b Add recording link field 2024-05-26 22:30:53 -04:00
d1ac0578f3 Add recording link field to note 2024-05-26 22:30:39 -04:00
3d10944b6d Style updates 2024-05-26 22:30:20 -04:00
72bf4273f3 increase saveTimeout
add check for note text to see if something has changed
add recording link text field
fix error for check
covert reference buttons to match style of other buttons
2024-05-26 22:30:03 -04:00
77e2777c7a Add LBC 2024-05-26 22:24:51 -04:00
a1f5ce416c Style updates 2024-05-26 22:24:40 -04:00
15 changed files with 212 additions and 78 deletions

View File

@ -0,0 +1,43 @@
<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20240527010736 extends AbstractMigration
{
public function getDescription(): string
{
return '';
}
public function up(Schema $schema): void
{
// this up() migration is auto-generated, please modify it to your needs
$this->addSql('ALTER TABLE note ADD COLUMN recording VARCHAR(255) DEFAULT NULL');
}
public function down(Schema $schema): void
{
// this down() migration is auto-generated, please modify it to your needs
$this->addSql('CREATE TEMPORARY TABLE __temp__note AS SELECT id, speaker_id, series_id, user_id, title, date, passage, refs, text FROM note');
$this->addSql('DROP TABLE note');
$this->addSql('CREATE TABLE note (id BLOB NOT NULL --(DC2Type:uuid)
, speaker_id BLOB DEFAULT NULL --(DC2Type:uuid)
, series_id BLOB DEFAULT NULL --(DC2Type:uuid)
, user_id BLOB DEFAULT NULL --(DC2Type:uuid)
, title VARCHAR(255) NOT NULL, date DATE NOT NULL, passage VARCHAR(255) NOT NULL, refs CLOB DEFAULT NULL --(DC2Type:json)
, text CLOB DEFAULT NULL, PRIMARY KEY(id), CONSTRAINT FK_CFBDFA14D04A0F27 FOREIGN KEY (speaker_id) REFERENCES speaker (id) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_CFBDFA145278319C FOREIGN KEY (series_id) REFERENCES series (id) NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_CFBDFA14A76ED395 FOREIGN KEY (user_id) REFERENCES user (id) NOT DEFERRABLE INITIALLY IMMEDIATE)');
$this->addSql('INSERT INTO note (id, speaker_id, series_id, user_id, title, date, passage, refs, text) SELECT id, speaker_id, series_id, user_id, title, date, passage, refs, text FROM __temp__note');
$this->addSql('DROP TABLE __temp__note');
$this->addSql('CREATE INDEX IDX_CFBDFA14D04A0F27 ON note (speaker_id)');
$this->addSql('CREATE INDEX IDX_CFBDFA145278319C ON note (series_id)');
$this->addSql('CREATE INDEX IDX_CFBDFA14A76ED395 ON note (user_id)');
}
}

View File

@ -43,21 +43,9 @@ body {
height: 80px; height: 80px;
width: 100%; width: 100%;
text-align: center; text-align: center;
background-color: #f56a6a;
color: #fff !important;
border: none;
border-radius: 3px;
box-shadow: 0 4px 5px rgba(0, 0, 0, 0.8);
font-size: 14px; font-size: 14px;
margin-bottom: 3px; margin-bottom: 3px;
} }
.tab button:active {
background-color: #7a0016;
}
.activeRef {
background-color: #3e8e41 !important;
}
.ref { .ref {
width: 35%; width: 35%;
@ -76,7 +64,7 @@ body {
} }
#ref { #ref {
padding: 3px 3px 3px 10px; padding: 3px 3px 3px 3px;
} }
#passage { #passage {
@ -114,10 +102,18 @@ textarea#notes {
#notePreview { #notePreview {
display: none; display: none;
overflow-x: scroll; overflow-x: scroll;
padding-left: 10px;
}
#notePreview ul,
#notePreview ol {
list-style-position: inside;
} }
#previewBtn.active, #previewBtn.active,
#show-hide-btn.active { #show-hide-btn.active,
.tab button.active,
#openRefBtn.active {
background-color: #f56a6a !important; background-color: #f56a6a !important;
color: white !important; color: white !important;
} }
@ -140,6 +136,8 @@ textarea#notes {
#note-list { #note-list {
display: none; display: none;
height: 100%;
overflow-y: scroll;
} }
#note-list ul { #note-list ul {
@ -205,7 +203,7 @@ div#refQuery #referenceSearch {
#fields-container input, #fields-container input,
#fields-container select { #fields-container select {
width: 19.5%; width: 32.5%;
display: inline-block; display: inline-block;
} }
@ -234,6 +232,11 @@ div#refQuery #referenceSearch {
font-size: 12pt; font-size: 12pt;
} }
#ref ol,
#ref ul {
list-style-position: inside;
}
#referenceBook { #referenceBook {
display: none; display: none;
}/*# sourceMappingURL=style.css.map */ }/*# sourceMappingURL=style.css.map */

View File

@ -1 +1 @@
{"version":3,"sources":["style.scss","style.css"],"names":[],"mappings":"AAAA,kCAAA;AACA;EACI,SAAA;ACCJ;;ADEA,6BAAA;AAEA;EACI,aAAA;EACA,mBAAA;EACA,eAAA;EACA,6BAAA;EACA,oBAAA;EACA,yBAAA;EACA,iBAAA;EACA,iCAAA;EACA,cAAA;ACAJ;;ADGA;EACI,WAAA;EACA,4BAAA;ACAJ;;ADGA;EACI,SAAA;EACA,UAAA;ACAJ;;ADGA;EACI,gBAAA;EACA,qBAAA;ACAJ;;ADGA;EACI,kBAAA;ACAJ;;ADGA,GAAA;AACA;EACI,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,YAAA;EACA,WAAA;EACA,kBAAA;EACA,yBAAA;EACA,sBAAA;EACA,YAAA;EACA,kBAAA;EACA,wCAAA;EACA,eAAA;EACA,kBAAA;ACAJ;ADEI;EACI,yBAAA;ACAR;;ADIA;EACI,oCAAA;ACDJ;;ADIA;EACI,UAAA;ACDJ;;ADIA;EACI,mBAAA;EACA,2BAAA;EACA,yBAAA;EACA,kBAAA;EACA,WAAA;EACA,YAAA;EACA,uBAAA;EACA,kBAAA;EACA,wCAAA;ACDJ;;ADIA;EACI,yBAAA;ACDJ;;ADIA;EACI,YAAA;ACDJ;;ADIA;EACI,aAAA;EACA,YAAA;ACDJ;;ADIA;EACI,aAAA;EACA,YAAA;ACDJ;;ADIA;EACI,aAAA;ACDJ;;ADIA;EACI,cAAA;ACDJ;;ADIA;EACI,UAAA;ACDJ;;ADIA;EACI,WAAA;EACA,YAAA;EACA,eAAA;ACDJ;;ADIA;EACI,aAAA;EACA,kBAAA;ACDJ;;ADIA;;EAEI,oCAAA;EACA,uBAAA;ACDJ;;ADIA;EACI,oBAAA;EACA,mBAAA;EACA,UAAA;ACDJ;;ADIA;EACI,oBAAA;EACA,2BAAA;EACA,UAAA;ACDJ;;ADIA;EACI,iBAAA;ACDJ;;ADIA;EACI,aAAA;ACDJ;;ADIA;EACI,SAAA;EACA,UAAA;EACA,qBAAA;EACA,gBAAA;ACDJ;;ADIA;EACI,aAAA;EACA,kBAAA;EACA,YAAA;EACA,oCAAA;EACA,YAAA;EACA,aAAA;ACDJ;;ADIA;EACI,YAAA;EACA,kBAAA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;EACA,WAAA;EACA,yBAAA;EACA,YAAA;EACA,YAAA;EACA,eAAA;EACA,aAAA;ACDJ;;ADIA;EACI,aAAA;EACA,kBAAA;EACA,YAAA;EACA,sBAAA;EACA,YAAA;EACA,aAAA;EACA,sBAAA;EACA,kBAAA;EACA,wCAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;ACDJ;;ADIA;EACI,UAAA;EACA,iBAAA;EACA,eAAA;EACA,iBAAA;EACA,YAAA;ACDJ;;ADIA;EACI,aAAA;ACDJ;;ADIA;EACI,UAAA;ACDJ;;ADIA;;EAEI,YAAA;EACA,qBAAA;ACDJ;;ADIA;EACI,2BAAA;EACA,eAAA;ACDJ;;ADIA;EACI,eAAA;ACDJ;;ADIA;EACI,eAAA;ACDJ;;ADIA;EACI,eAAA;ACDJ;;ADIA;EACI,qBAAA;ACDJ;;ADIA;EACI,eAAA;ACDJ;;ADIA;EACI,aAAA;ACDJ","file":"style.css"} {"version":3,"sources":["style.scss","style.css"],"names":[],"mappings":"AAAA,kCAAA;AACA;EACI,SAAA;ACCJ;;ADEA,6BAAA;AAEA;EACI,aAAA;EACA,mBAAA;EACA,eAAA;EACA,6BAAA;EACA,oBAAA;EACA,yBAAA;EACA,iBAAA;EACA,iCAAA;EACA,cAAA;ACAJ;;ADGA;EACI,WAAA;EACA,4BAAA;ACAJ;;ADGA;EACI,SAAA;EACA,UAAA;ACAJ;;ADGA;EACI,gBAAA;EACA,qBAAA;ACAJ;;ADGA;EACI,kBAAA;ACAJ;;ADGA,GAAA;AACA;EACI,aAAA;EACA,uBAAA;EACA,mBAAA;EACA,YAAA;EACA,WAAA;EACA,kBAAA;EACA,eAAA;EACA,kBAAA;ACAJ;;ADIA;EACI,UAAA;ACDJ;;ADIA;EACI,mBAAA;EACA,2BAAA;EACA,yBAAA;EACA,kBAAA;EACA,WAAA;EACA,YAAA;EACA,uBAAA;EACA,kBAAA;EACA,wCAAA;ACDJ;;ADIA;EACI,wBAAA;ACDJ;;ADIA;EACI,YAAA;ACDJ;;ADIA;EACI,aAAA;EACA,YAAA;ACDJ;;ADIA;EACI,aAAA;EACA,YAAA;ACDJ;;ADIA;EACI,aAAA;ACDJ;;ADIA;EACI,cAAA;ACDJ;;ADIA;EACI,UAAA;ACDJ;;ADIA;EACI,WAAA;EACA,YAAA;EACA,eAAA;ACDJ;;ADIA;EACI,aAAA;EACA,kBAAA;EACA,kBAAA;ACDJ;;ADIA;;EAEI,2BAAA;ACDJ;;ADIA;;;;EAII,oCAAA;EACA,uBAAA;ACDJ;;ADIA;EACI,oBAAA;EACA,mBAAA;EACA,UAAA;ACDJ;;ADIA;EACI,oBAAA;EACA,2BAAA;EACA,UAAA;ACDJ;;ADIA;EACI,iBAAA;ACDJ;;ADIA;EACI,aAAA;EACA,YAAA;EACA,kBAAA;ACDJ;;ADIA;EACI,SAAA;EACA,UAAA;EACA,qBAAA;EACA,gBAAA;ACDJ;;ADIA;EACI,aAAA;EACA,kBAAA;EACA,YAAA;EACA,oCAAA;EACA,YAAA;EACA,aAAA;ACDJ;;ADIA;EACI,YAAA;EACA,kBAAA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;EACA,WAAA;EACA,yBAAA;EACA,YAAA;EACA,YAAA;EACA,eAAA;EACA,aAAA;ACDJ;;ADIA;EACI,aAAA;EACA,kBAAA;EACA,YAAA;EACA,sBAAA;EACA,YAAA;EACA,aAAA;EACA,sBAAA;EACA,kBAAA;EACA,wCAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;ACDJ;;ADIA;EACI,UAAA;EACA,iBAAA;EACA,eAAA;EACA,iBAAA;EACA,YAAA;ACDJ;;ADIA;EACI,aAAA;ACDJ;;ADIA;EACI,UAAA;ACDJ;;ADIA;;EAEI,YAAA;EACA,qBAAA;ACDJ;;ADIA;EACI,2BAAA;EACA,eAAA;ACDJ;;ADIA;EACI,eAAA;ACDJ;;ADIA;EACI,eAAA;ACDJ;;ADIA;EACI,eAAA;ACDJ;;ADIA;EACI,qBAAA;ACDJ;;ADIA;EACI,eAAA;ACDJ;;ADIA;;EAEI,2BAAA;ACDJ;;ADIA;EACI,aAAA;ACDJ","file":"style.css"}

View File

@ -1 +1 @@
body{margin:0}.inner{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-evenly;align-items:stretch;align-content:flex-start;max-width:1060px;margin:0 auto}.ref-tab{width:60px;padding-top:75px !important}.ref-tab ul{margin:0;padding:0}.ref-tab ul li{list-style:none;list-style-type:none}.tab{margin-bottom:3px}.tab button{display:flex;justify-content:center;align-items:center;height:80px;width:100%;text-align:center;background-color:#f56a6a;color:#fff !important;border:none;border-radius:3px;box-shadow:0 4px 5px rgba(0,0,0,.8);font-size:14px;margin-bottom:3px}.tab button:active{background-color:#7a0016}.activeRef{background-color:#3e8e41 !important}.ref{width:35%}.ref>div#ref{vertical-align:top;justify-content:flex-start;align-content:flex-start;overflow-y:scroll;width:100%;height:100%;border:#000 solid 1px;border-radius:3px;box-shadow:0 2px 5px rgba(0,0,0,.3)}#ref{padding:3px 3px 3px 10px}#passage{width:100px}#newSpeaker{display:none;width:110px}#newSeries{display:none;width:110px}#fields-container{display:none}#fields-container.show{display:block}.notes{width:55%}textarea#notes{width:100%;height:100%;font-size:14pt}#notePreview{display:none;overflow-x:scroll}#previewBtn.active,#show-hide-btn.active{background-color:#f56a6a !important;color:#fff !important}#note-header-left{display:inline-flex;flex-direction:row;width:25%}#note-header-right{display:inline-flex;flex-direction:row-reverse;width:74%}#note-header-left h2.dirty{color:#ff8c00}#note-list{display:none}#note-list ul{margin:0;padding:0;list-style-type:none;list-style:none}div#refQuery{display:none;position:absolute;z-index:100;background-color:rgba(0,0,0,.8);width:400px;height:200px}div#refQuery #referenceSearch{border:none;border-radius:5px;padding:10px 20px;font-size:16px;line-height:1.5;color:#333;background-color:#f4f4f4;width:150px;height:25px;cursor:pointer;display:none}#passage-popup{display:none;position:absolute;z-index:100;background-color:#fff;color:#000;padding:10px;border:1px solid #ccc;border-radius:5px;box-shadow:0 2px 5px rgba(0,0,0,.3);width:300px;height:300px;overflow-x:scroll}#save-check{opacity:0;text-align:right;font-size:20pt;margin-left:15px;color:green}#save-check.saving{color:orange}#save-check.error{color:red}#fields-container input,#fields-container select{width:19.5%;display:inline-block}#old-notes article p:first-child{margin-bottom:0 !important;font-size:10pt}#old-notes article a{font-size:12pt}#old-notes article p:last-child{font-size:12pt}.inner{padding-left:0}.ref h2{display:inline-block}#ref{font-size:12pt}#referenceBook{display:none}/*# sourceMappingURL=style.min.css.map */ body{margin:0}.inner{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-evenly;align-items:stretch;align-content:flex-start;max-width:1060px;margin:0 auto}.ref-tab{width:60px;padding-top:75px !important}.ref-tab ul{margin:0;padding:0}.ref-tab ul li{list-style:none;list-style-type:none}.tab{margin-bottom:3px}.tab button{display:flex;justify-content:center;align-items:center;height:80px;width:100%;text-align:center;font-size:14px;margin-bottom:3px}.ref{width:35%}.ref>div#ref{vertical-align:top;justify-content:flex-start;align-content:flex-start;overflow-y:scroll;width:100%;height:100%;border:#000 solid 1px;border-radius:3px;box-shadow:0 2px 5px rgba(0,0,0,.3)}#ref{padding:3px 3px 3px 3px}#passage{width:100px}#newSpeaker{display:none;width:110px}#newSeries{display:none;width:110px}#fields-container{display:none}#fields-container.show{display:block}.notes{width:55%}textarea#notes{width:100%;height:100%;font-size:14pt}#notePreview{display:none;overflow-x:scroll;padding-left:10px}#notePreview ul,#notePreview ol{list-style-position:inside}#previewBtn.active,#show-hide-btn.active,.tab button.active,#openRefBtn.active{background-color:#f56a6a !important;color:#fff !important}#note-header-left{display:inline-flex;flex-direction:row;width:25%}#note-header-right{display:inline-flex;flex-direction:row-reverse;width:74%}#note-header-left h2.dirty{color:#ff8c00}#note-list{display:none;height:100%;overflow-y:scroll}#note-list ul{margin:0;padding:0;list-style-type:none;list-style:none}div#refQuery{display:none;position:absolute;z-index:100;background-color:rgba(0,0,0,.8);width:400px;height:200px}div#refQuery #referenceSearch{border:none;border-radius:5px;padding:10px 20px;font-size:16px;line-height:1.5;color:#333;background-color:#f4f4f4;width:150px;height:25px;cursor:pointer;display:none}#passage-popup{display:none;position:absolute;z-index:100;background-color:#fff;color:#000;padding:10px;border:1px solid #ccc;border-radius:5px;box-shadow:0 2px 5px rgba(0,0,0,.3);width:300px;height:300px;overflow-x:scroll}#save-check{opacity:0;text-align:right;font-size:20pt;margin-left:15px;color:green}#save-check.saving{color:orange}#save-check.error{color:red}#fields-container input,#fields-container select{width:32.5%;display:inline-block}#old-notes article p:first-child{margin-bottom:0 !important;font-size:10pt}#old-notes article a{font-size:12pt}#old-notes article p:last-child{font-size:12pt}.inner{padding-left:0}.ref h2{display:inline-block}#ref{font-size:12pt}#ref ol,#ref ul{list-style-position:inside}#referenceBook{display:none}/*# sourceMappingURL=style.min.css.map */

View File

@ -1 +1 @@
{"version":3,"sources":["style.scss"],"names":[],"mappings":"AACA,KACI,QAAA,CAKJ,OACI,YAAA,CACA,kBAAA,CACA,cAAA,CACA,4BAAA,CACA,mBAAA,CACA,wBAAA,CACA,gBAAA,CAEA,aAAA,CAGJ,SACI,UAAA,CACA,2BAAA,CAGJ,YACI,QAAA,CACA,SAAA,CAGJ,eACI,eAAA,CACA,oBAAA,CAGJ,KACI,iBAAA,CAIJ,YACI,YAAA,CACA,sBAAA,CACA,kBAAA,CACA,WAAA,CACA,UAAA,CACA,iBAAA,CACA,wBAAA,CACA,qBAAA,CACA,WAAA,CACA,iBAAA,CACA,mCAAA,CACA,cAAA,CACA,iBAAA,CAEA,mBACI,wBAAA,CAIR,WACI,mCAAA,CAGJ,KACI,SAAA,CAGJ,aACI,kBAAA,CACA,0BAAA,CACA,wBAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CACA,qBAAA,CACA,iBAAA,CACA,mCAAA,CAGJ,KACI,wBAAA,CAGJ,SACI,WAAA,CAGJ,YACI,YAAA,CACA,WAAA,CAGJ,WACI,YAAA,CACA,WAAA,CAGJ,kBACI,YAAA,CAGJ,uBACI,aAAA,CAGJ,OACI,SAAA,CAGJ,eACI,UAAA,CACA,WAAA,CACA,cAAA,CAGJ,aACI,YAAA,CACA,iBAAA,CAGJ,yCAEI,mCAAA,CACA,qBAAA,CAGJ,kBACI,mBAAA,CACA,kBAAA,CACA,SAAA,CAGJ,mBACI,mBAAA,CACA,0BAAA,CACA,SAAA,CAGJ,2BACI,aAAA,CAGJ,WACI,YAAA,CAGJ,cACI,QAAA,CACA,SAAA,CACA,oBAAA,CACA,eAAA,CAGJ,aACI,YAAA,CACA,iBAAA,CACA,WAAA,CACA,+BAAA,CACA,WAAA,CACA,YAAA,CAGJ,8BACI,WAAA,CACA,iBAAA,CACA,iBAAA,CACA,cAAA,CACA,eAAA,CACA,UAAA,CACA,wBAAA,CACA,WAAA,CACA,WAAA,CACA,cAAA,CACA,YAAA,CAGJ,eACI,YAAA,CACA,iBAAA,CACA,WAAA,CACA,qBAAA,CACA,UAAA,CACA,YAAA,CACA,qBAAA,CACA,iBAAA,CACA,mCAAA,CACA,WAAA,CACA,YAAA,CACA,iBAAA,CAGJ,YACI,SAAA,CACA,gBAAA,CACA,cAAA,CACA,gBAAA,CACA,WAAA,CAGJ,mBACI,YAAA,CAGJ,kBACI,SAAA,CAGJ,iDAEI,WAAA,CACA,oBAAA,CAGJ,iCACI,0BAAA,CACA,cAAA,CAGJ,qBACI,cAAA,CAGJ,gCACI,cAAA,CAGJ,OACI,cAAA,CAGJ,QACI,oBAAA,CAGJ,KACI,cAAA,CAGJ,eACI,YAAA","file":"style.min.css"} {"version":3,"sources":["style.scss"],"names":[],"mappings":"AACA,KACI,QAAA,CAKJ,OACI,YAAA,CACA,kBAAA,CACA,cAAA,CACA,4BAAA,CACA,mBAAA,CACA,wBAAA,CACA,gBAAA,CAEA,aAAA,CAGJ,SACI,UAAA,CACA,2BAAA,CAGJ,YACI,QAAA,CACA,SAAA,CAGJ,eACI,eAAA,CACA,oBAAA,CAGJ,KACI,iBAAA,CAIJ,YACI,YAAA,CACA,sBAAA,CACA,kBAAA,CACA,WAAA,CACA,UAAA,CACA,iBAAA,CACA,cAAA,CACA,iBAAA,CAIJ,KACI,SAAA,CAGJ,aACI,kBAAA,CACA,0BAAA,CACA,wBAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CACA,qBAAA,CACA,iBAAA,CACA,mCAAA,CAGJ,KACI,uBAAA,CAGJ,SACI,WAAA,CAGJ,YACI,YAAA,CACA,WAAA,CAGJ,WACI,YAAA,CACA,WAAA,CAGJ,kBACI,YAAA,CAGJ,uBACI,aAAA,CAGJ,OACI,SAAA,CAGJ,eACI,UAAA,CACA,WAAA,CACA,cAAA,CAGJ,aACI,YAAA,CACA,iBAAA,CACA,iBAAA,CAGJ,gCAEI,0BAAA,CAGJ,+EAII,mCAAA,CACA,qBAAA,CAGJ,kBACI,mBAAA,CACA,kBAAA,CACA,SAAA,CAGJ,mBACI,mBAAA,CACA,0BAAA,CACA,SAAA,CAGJ,2BACI,aAAA,CAGJ,WACI,YAAA,CACA,WAAA,CACA,iBAAA,CAGJ,cACI,QAAA,CACA,SAAA,CACA,oBAAA,CACA,eAAA,CAGJ,aACI,YAAA,CACA,iBAAA,CACA,WAAA,CACA,+BAAA,CACA,WAAA,CACA,YAAA,CAGJ,8BACI,WAAA,CACA,iBAAA,CACA,iBAAA,CACA,cAAA,CACA,eAAA,CACA,UAAA,CACA,wBAAA,CACA,WAAA,CACA,WAAA,CACA,cAAA,CACA,YAAA,CAGJ,eACI,YAAA,CACA,iBAAA,CACA,WAAA,CACA,qBAAA,CACA,UAAA,CACA,YAAA,CACA,qBAAA,CACA,iBAAA,CACA,mCAAA,CACA,WAAA,CACA,YAAA,CACA,iBAAA,CAGJ,YACI,SAAA,CACA,gBAAA,CACA,cAAA,CACA,gBAAA,CACA,WAAA,CAGJ,mBACI,YAAA,CAGJ,kBACI,SAAA,CAGJ,iDAEI,WAAA,CACA,oBAAA,CAGJ,iCACI,0BAAA,CACA,cAAA,CAGJ,qBACI,cAAA,CAGJ,gCACI,cAAA,CAGJ,OACI,cAAA,CAGJ,QACI,oBAAA,CAGJ,KACI,cAAA,CAGJ,gBAEI,0BAAA,CAGJ,eACI,YAAA","file":"style.min.css"}

View File

@ -44,22 +44,10 @@ body {
height: 80px; height: 80px;
width: 100%; width: 100%;
text-align: center; text-align: center;
background-color: #f56a6a;
color: #fff !important;
border: none;
border-radius: 3px;
box-shadow: 0 4px 5px rgba(0, 0, 0, 0.8);
font-size: 14px; font-size: 14px;
margin-bottom: 3px; margin-bottom: 3px;
&:active {
background-color: #7a0016;
}
} }
.activeRef {
background-color: #3e8e41 !important;
}
.ref { .ref {
width: 35%; width: 35%;
@ -78,7 +66,7 @@ body {
} }
#ref { #ref {
padding: 3px 3px 3px 10px; padding: 3px 3px 3px 3px;
} }
#passage { #passage {
@ -116,10 +104,18 @@ textarea#notes {
#notePreview { #notePreview {
display: none; display: none;
overflow-x: scroll; overflow-x: scroll;
padding-left: 10px;
}
#notePreview ul,
#notePreview ol {
list-style-position: inside;
} }
#previewBtn.active, #previewBtn.active,
#show-hide-btn.active { #show-hide-btn.active,
.tab button.active,
#openRefBtn.active {
background-color: #f56a6a !important; background-color: #f56a6a !important;
color: white !important; color: white !important;
} }
@ -142,6 +138,8 @@ textarea#notes {
#note-list { #note-list {
display: none; display: none;
height: 100%;
overflow-y: scroll;
} }
#note-list ul { #note-list ul {
@ -207,7 +205,7 @@ div#refQuery #referenceSearch {
#fields-container input, #fields-container input,
#fields-container select { #fields-container select {
width: 19.5%; width: 32.5%;
display: inline-block; display: inline-block;
} }
@ -236,6 +234,11 @@ div#refQuery #referenceSearch {
font-size: 12pt; font-size: 12pt;
} }
#ref ol,
#ref ul {
list-style-position: inside;
}
#referenceBook { #referenceBook {
display: none; display: none;
} }

View File

@ -1354,5 +1354,9 @@
"wlc": [ "wlc": [
1, 1,
196 196
],
"lbc": [
1,
32
] ]
} }

View File

@ -4,7 +4,7 @@ var references = {};
var tabs = []; var tabs = [];
let saved = false; let saved = false;
let textDirty = false; let textDirty = false;
let saveTimeout = 10000; let saveTimeout = 15000;
var to = null; var to = null;
let controller; let controller;
var BOOKS = {}; var BOOKS = {};
@ -158,6 +158,7 @@ function saveNote(event) {
} }
let saveCheck = document.querySelector('#save-check'); let saveCheck = document.querySelector('#save-check');
var noteText = document.querySelector('#notes').value;
startSave(); startSave();
@ -169,6 +170,7 @@ function saveNote(event) {
series: document.querySelector('#series').value, series: document.querySelector('#series').value,
passage: document.querySelector('#passage').value, passage: document.querySelector('#passage').value,
note: document.querySelector('#notes').value, note: document.querySelector('#notes').value,
recording: document.querySelector('#recording').value,
refs: references refs: references
}; };
$.ajax({ $.ajax({
@ -182,20 +184,23 @@ function saveNote(event) {
.done(function (data) { .done(function (data) {
if (data.msg == 'saved' && !saved) { if (data.msg == 'saved' && !saved) {
saveCheck.classList.remove('saving'); saveCheck.classList.remove('saving');
saveCheck.classList.remove('error');
showSave(); showSave();
if (noteText == document.querySelector('#notes').value) {
saved = true; saved = true;
textDirty = false; textDirty = false;
document.querySelector('#note-header-left h2').classList.remove('dirty'); document.querySelector('#note-header-left h2').classList.remove('dirty');
}
if (data.new) { if (data.new) {
document.querySelector('#noteId').value = data.id; document.querySelector('#noteId').value = data.id;
} }
} }
}) })
.fail(function (data) { .fail(function (xhr, status, error) {
saveCheck.classList.remove('saving'); saveCheck.classList.remove('saving');
saveCheck.classList.add('error'); saveCheck.classList.add('error');
console.error(data); console.error(error);
}) })
.always(function (xhr, status) { .always(function (xhr, status) {
if (status == 'timeout') { if (status == 'timeout') {
@ -271,6 +276,9 @@ function discardNote() {
document.querySelector('#template').value = 0; document.querySelector('#template').value = 0;
document.querySelector('#passage').value = ''; document.querySelector('#passage').value = '';
document.querySelector('#notes').value = ''; document.querySelector('#notes').value = '';
document.querySelector('#recording').value = '';
document.querySelector('#noteDate').value = '';
document.querySelector('#noteId').value = '';
fetch('/index.php/discard-note', { fetch('/index.php/discard-note', {
method: 'POST', method: 'POST',
@ -368,6 +376,8 @@ function saveSeries(event) {
} }
function openRef(closeSidebar = true) { function openRef(closeSidebar = true) {
document.querySelector('#openRefBtn').classList.add('active');
refQuery = document.querySelector('#refQuery'); refQuery = document.querySelector('#refQuery');
refQuery.style.display = 'block'; refQuery.style.display = 'block';
@ -389,6 +399,7 @@ function closeRef() {
document.querySelector('#verse-range').innerText = ''; document.querySelector('#verse-range').innerText = '';
document.querySelector('#refQuery').style.display = 'none'; document.querySelector('#refQuery').style.display = 'none';
document.querySelector('#openRefBtn').classList.remove('active');
} }
function queryRef(type = null, book = null, input = null) { function queryRef(type = null, book = null, input = null) {
@ -438,10 +449,11 @@ function queryRef(type = null, book = null, input = null) {
function makeButton(title) { function makeButton(title) {
var btn = document.createElement('button'); var btn = document.createElement('button');
btn.innerText = title; btn.innerText = title;
btn.class = 'button';
btn.addEventListener('click', function () { btn.addEventListener('click', function () {
removeActiveRef(); removeActiveRef();
document.querySelector('#ref').innerHTML = md.render(references[title]); document.querySelector('#ref').innerHTML = md.render(references[title]);
this.classList.add('activeRef'); this.classList.add('active');
findRefLinks(); findRefLinks();
}); });
@ -456,16 +468,16 @@ function makeButton(title) {
}); });
removeActiveRef(); removeActiveRef();
btn.classList.add('activeRef'); btn.classList.add('active');
return btn; return btn;
} }
function removeActiveRef() { function removeActiveRef() {
tabs = document.querySelectorAll('.activeRef'); tabs = document.querySelectorAll('.active');
for (var t in tabs) { for (var t in tabs) {
if (isFinite(parseInt(t))) { if (isFinite(parseInt(t))) {
tabs[t].classList.remove('activeRef'); tabs[t].classList.remove('active');
} }
} }
} }
@ -573,6 +585,30 @@ function retrieveBooks() {
newBook.text = BOOKS.cd[x]; newBook.text = BOOKS.cd[x];
bookList.appendChild(newBook); bookList.appendChild(newBook);
} }
} else if (selectedType == 'note') {
var none = document.createElement("option");
none.value = '';
none.text = '-- Select --';
bookList.appendChild(none);
fetch('/index.php/retrieve-reference', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
'type': 'note'
})
})
.then(response => response.json())
.then(results => {
for (var x in results) {
var newBook = document.createElement("option");
newBook.value = results[x].id;
newBook.text = results[x].title;
bookList.appendChild(newBook);
}
});
} else { } else {
var min = BOOKS[selectedType][0]; var min = BOOKS[selectedType][0];
var max = BOOKS[selectedType][1]; var max = BOOKS[selectedType][1];
@ -623,6 +659,10 @@ function filterVerse() {
} }
function retrieveReference(el) { function retrieveReference(el) {
if (el.value == 'new') {
document.querySelector('#refName').style.display = 'inline-block';
return;
}
fetch('/index.php/get-reference', { fetch('/index.php/get-reference', {
method: "POST", method: "POST",
header: { header: {

View File

@ -2233,7 +2233,6 @@ a.image:hover img {
ol { ol {
list-style: decimal; list-style: decimal;
margin: 0 0 2em 0; margin: 0 0 2em 0;
padding-left: 1.5em;
} }
ol li { ol li {
@ -2243,7 +2242,6 @@ ol li {
ul { ul {
list-style: disc; list-style: disc;
margin: 0 0 2em 0; margin: 0 0 2em 0;
padding-left: 1em;
} }
ul.alt { ul.alt {

View File

@ -166,6 +166,7 @@ class AjaxController extends AbstractController
} }
ReferenceController::$emi = $emi; ReferenceController::$emi = $emi;
$user = $this->getUser();
$ret = match(strtolower($data->type)) { $ret = match(strtolower($data->type)) {
'bible' => ReferenceController::retrieveBible("{$data->book} {$search}"), 'bible' => ReferenceController::retrieveBible("{$data->book} {$search}"),
@ -175,7 +176,9 @@ class AjaxController extends AbstractController
'wcf' => ReferenceController::retrieveWCF($ref), 'wcf' => ReferenceController::retrieveWCF($ref),
'wsc' => ReferenceController::retrieveWSC($ref), 'wsc' => ReferenceController::retrieveWSC($ref),
'wlc' => ReferenceController::retrieveWLC($ref), 'wlc' => ReferenceController::retrieveWLC($ref),
'creed' => ReferenceController::retrieveCreed($data->book) 'lbc' => ReferenceController::retrieveLBC($ref),
'creed' => ReferenceController::retrieveCreed($data->book),
'note' => ReferenceController::retrieveNote($user)
}; };
if (!is_a($ret, Reference::class)) { if (!is_a($ret, Reference::class)) {
@ -195,19 +198,12 @@ class AjaxController extends AbstractController
{ {
$res = new Response(); $res = new Response();
$data = json_decode($req->getContent()); $data = json_decode($req->getContent());
$ret = match ($data->type) { $ref = $emi->getRepository(Reference::class)->find($data->file);
'creed' => '/Creeds/',
'bc' => '/Belgic/',
'hc' => '/Heidelberg/',
'cd' => '/Dort/',
'wcf' => '/Westminster/Confessions/',
'wsc' => '/Westminster/Shorter Catechism/',
'wlc' => '/Westminster/Larger Catechism/'
};
$fc = file_get_contents(dirname(dirname(__DIR__))."/references{$ret}{$data->file}"); if (!is_a($ref, Reference::class)) {
$ref = new Reference();
$res->setContent(json_encode(['text' => $fc])); }
$res->setContent(json_encode(['text' => $ref->getContent()]));
return $res; return $res;
} }
@ -274,6 +270,10 @@ class AjaxController extends AbstractController
if (is_array($note) && count($note) > 0) { if (is_array($note) && count($note) > 0) {
/** @var Note $note */ /** @var Note $note */
$note = $note[0]; $note = $note[0];
} else {
$note = new Note();
$newNote = true;
$note->setUser($this->getUser());
} }
} else { } else {
$note = new Note(); $note = new Note();
@ -293,6 +293,7 @@ class AjaxController extends AbstractController
->setSpeaker($speaker) ->setSpeaker($speaker)
->setText($data->note) ->setText($data->note)
->setPassage($data->passage) ->setPassage($data->passage)
->setRecording($data->recording)
->setRefs($refs); ->setRefs($refs);
$emi->persist($note); $emi->persist($note);

View File

@ -42,20 +42,22 @@ class DefaultController extends AbstractController
$creeds = $emi->getRepository(Reference::class)->findByType('creed'); $creeds = $emi->getRepository(Reference::class)->findByType('creed');
$belgic = $emi->getRepository(Reference::class)->findByType('belgic'); $belgic = $emi->getRepository(Reference::class)->findByType('belgic');
$heidelberg = $emi->getRepository(Reference::class)->findByType('heidelberg'); $heidelberg = $emi->getRepository(Reference::class)->findByType('hc');
$dort = $emi->getRepository(Reference::class)->findByType('dort'); $dort = $emi->getRepository(Reference::class)->findByType('cd');
$wcf = $emi->getRepository(Reference::class)->findByType('wcf'); $wcf = $emi->getRepository(Reference::class)->findByType('wcf');
$wsc = $emi->getRepository(Reference::class)->findByType('wsc'); $wsc = $emi->getRepository(Reference::class)->findByType('wsc');
$wlc = $emi->getRepository(Reference::class)->findByType('wlc'); $wlc = $emi->getRepository(Reference::class)->findByType('wlc');
$lbc = $emi->getRepository(Reference::class)->findByType('lbc');
return $this->render('editors/reference-editor.html.twig', [ return $this->render('editors/reference-editor.html.twig', [
'creeds' => $creeds, 'creeds' => ($creeds),
'belgic' => $belgic, 'belgic' => ($belgic),
'heidelberg' => $heidelberg, 'heidelberg' => ($heidelberg),
'dort' => $dort, 'dort' => ($dort),
'wcf' => $wcf, 'wcf' => ($wcf),
'wsc' => $wsc, 'wsc' => ($wsc),
'wlc' => $wlc 'wlc' => ($wlc),
'lbc' => ($lbc),
]); ]);
} }

View File

@ -3,7 +3,9 @@
namespace App\Controller; namespace App\Controller;
use App\Entity\Bible; use App\Entity\Bible;
use App\Entity\Note;
use App\Entity\Reference; use App\Entity\Reference;
use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
@ -172,4 +174,16 @@ class ReferenceController extends AbstractController
$r = self::$emi->getRepository(Reference::class)->findBy(['type' => $ref->getType(), 'ndx' => $ref->getNdx()]); $r = self::$emi->getRepository(Reference::class)->findBy(['type' => $ref->getType(), 'ndx' => $ref->getNdx()]);
return $r[0]; return $r[0];
} }
public static function retrieveLBC($ref): Reference
{
$r = self::$emi->getRepository(Reference::class)->findBy(['type' => 'lbc', 'ndx' => $ref->getNdx()]);
return $r[0];
}
public static function retrieveNote(?User $user): array
{
$notes = self::$emi->getRepository(Note::class)->findBy(['user' => $user], ['date' => 'DESC']);
return $notes;
}
} }

View File

@ -42,6 +42,9 @@ class Note implements JsonSerializable
#[ORM\ManyToOne(inversedBy: 'notes')] #[ORM\ManyToOne(inversedBy: 'notes')]
private ?User $user = null; private ?User $user = null;
#[ORM\Column(length: 255, nullable: true)]
private ?string $recording = null;
public function getId(): ?Uuid public function getId(): ?Uuid
{ {
return $this->id; return $this->id;
@ -193,4 +196,16 @@ class Note implements JsonSerializable
'user' => $this->getUser(), 'user' => $this->getUser(),
]; ];
} }
public function getRecording(): ?string
{
return $this->recording;
}
public function setRecording(?string $recording): static
{
$this->recording = $recording;
return $this;
}
} }

View File

@ -34,7 +34,7 @@
<div style='display:inline-block'> <div style='display:inline-block'>
<button onclick='increaseFont()'><i class='fa fa-plus'></i></button>&nbsp; <button onclick='increaseFont()'><i class='fa fa-plus'></i></button>&nbsp;
<button onclick='decreaseFont()'><i class='fa fa-minus'></i></button>&nbsp; <button onclick='decreaseFont()'><i class='fa fa-minus'></i></button>&nbsp;
<button onclick='openRef(false)'><i class='fa fa-book'></i></button> <button id='openRefBtn' class='button' onclick='openRef(false)'><i class='fa fa-book'></i></button>
</div> </div>
<div id="ref" style='font-size:12pt;'></div> <div id="ref" style='font-size:12pt;'></div>
<div id='note-list'> <div id='note-list'>
@ -80,7 +80,10 @@
<div id='fields-container'> <div id='fields-container'>
<input type="hidden" id="noteId" value="" /> <input type="hidden" id="noteId" value="" />
<input type="text" id="noteTitle" placeholder="Title..." /> <input type="text" id="noteTitle" placeholder="Title..." />
<input type='text' id='noteDate' onchange='textDirty=true;saved=false;' /> <input type='text' id='noteDate' placeholder='Date...' onchange='textDirty=true;saved=false;' />
<input type='text' id='passage' placeholder='Passage...' onchange='saved=false;textDirty=true;' />
<br />
<input type='text' id='recording' name='recording' placeholder='Recording link...' />
<input type='text' id='newSpeaker' placeholder='Name...' onkeyup='saveSpeaker(event)' style='display:none;' /> <input type='text' id='newSpeaker' placeholder='Name...' onkeyup='saveSpeaker(event)' style='display:none;' />
<select id="speaker" onchange='newSpeaker()'> <select id="speaker" onchange='newSpeaker()'>
<option value=0>-- Speaker --</option> <option value=0>-- Speaker --</option>
@ -97,7 +100,6 @@
<option value='{{ s.id }}'>{{ s.name }}</option> <option value='{{ s.id }}'>{{ s.name }}</option>
{% endfor %} {% endfor %}
</select> </select>
<input type='text' id='passage' placeholder='Passage...' onchange='saved=false;textDirty=true;' />
</div> </div>
<textarea id="notes" wrap="hard"></textarea> <textarea id="notes" wrap="hard"></textarea>
@ -121,6 +123,8 @@
<option value='wcf'>Westminster Confession of Faith</option> <option value='wcf'>Westminster Confession of Faith</option>
<option value='wsc'>Westminster Shorter Catechism</option> <option value='wsc'>Westminster Shorter Catechism</option>
<option value='wlc'>Westminster Larger Catechism</option> <option value='wlc'>Westminster Larger Catechism</option>
<option value='lbc'>London Baptist Confession</option>
<option value='note'>Note</option>
</select> </select>
<select id='referenceBook' onchange='filterBooks()'> <select id='referenceBook' onchange='filterBooks()'>
</select> </select>

View File

@ -7,42 +7,49 @@
<body> <body>
<select id='references' onchange='retrieveReference(this)'> <select id='references' onchange='retrieveReference(this)'>
<option value=''>-- Select Reference --</option> <option value=''>-- Select Reference --</option>
<option value='new'>-- Insert New --</option>
<optgroup id='creeds' label='Creeds'> <optgroup id='creeds' label='Creeds'>
{% for c in creeds %} {% for c in creeds %}
<option type='creed'>{{ c }}</option> <option type='creed' value='{{ c.id }}'>{{ c.name }}</option>
{% endfor %} {% endfor %}
</optgroup> </optgroup>
<optgroup id='belgic' label='Belgic Confession'> <optgroup id='belgic' label='Belgic Confession'>
{% for c in belgic %} {% for c in belgic %}
<option type='bc'>{{ c }}</option> <option type='bc' value='{{ c.id }}'>{{ c.label }}</option>
{% endfor %} {% endfor %}
</optgroup> </optgroup>
<optgroup id='heidelberg' label='Heidelberg Catechism'> <optgroup id='heidelberg' label='Heidelberg Catechism'>
{% for c in heidelberg %} {% for c in heidelberg %}
<option type='hc'>{{ c }}</option> <option type='hc' value='{{ c.id }}'>{{ c.label }}</option>
{% endfor %} {% endfor %}
</optgroup> </optgroup>
<optgroup id='dort' label='Canons of Dort'> <optgroup id='dort' label='Canons of Dort'>
{% for c in dort %} {% for c in dort %}
<option type='cd'>{{ c }}</option> <option type='cd' value='{{ c.id }}'>{{ c.label }}</option>
{% endfor %} {% endfor %}
</optgroup> </optgroup>
<optgroup id='wcf' label='Westminster Confession of Faith'> <optgroup id='wcf' label='Westminster Confession of Faith'>
{% for c in wcf %} {% for c in wcf %}
<option type='wcf'>{{ c }}</option> <option type='wcf' value='{{ c.id }}'>{{ c.label }}</option>
{% endfor %} {% endfor %}
</optgroup> </optgroup>
<optgroup id='wsc' label='Westminster Short Catechism'> <optgroup id='wsc' label='Westminster Short Catechism'>
{% for c in wsc %} {% for c in wsc %}
<option type='wsc'>{{ c }}</option> <option type='wsc' value='{{ c.id }}'>{{ c.label }}</option>
{% endfor %} {% endfor %}
</optgroup> </optgroup>
<optgroup id='wlc' label='Westminster Larger Catechism'> <optgroup id='wlc' label='Westminster Larger Catechism'>
{% for c in wlc %} {% for c in wlc %}
<option type='wlc'>{{ c }}</option> <option type='wlc' value='{{ c.id }}'>{{ c.label }}</option>
{% endfor %} {% endfor %}
</optgroup> </optgroup>
</select> <optgroup id='lbc' label='London Baptist Confession'>
{% for c in lbc %}
<option type='lbc' value='{{ c.id }}'>{{ c.label }}</option>
{% endfor %}
</optgroup>
</select>&nbsp;&nbsp;
<input type='text' name='name' id='refName' style='display:none;' />&nbsp;&nbsp;
<button id='save' name='save' onclick='saveReference()'>Save</button> <button id='save' name='save' onclick='saveReference()'>Save</button>
<a href='/index.php/home'>Back</a><br /> <a href='/index.php/home'>Back</a><br />