Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions firebase/database.rules.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,14 @@
"complete"
]
},
"tutorialDrafts": {
// only project managers can write projectDrafts
".read": false,
".write": "auth.token.projectManager === true",
".indexOn": [
"complete"
]
},
"groups": {
".write": false,
".read": "auth.token.projectManager === true",
Expand Down
24 changes: 23 additions & 1 deletion manager_dashboard/manager_dashboard/create.html
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,9 @@
<li class="nav-item active">
<a class="nav-link" href="create.html">CREATE PROJECTS</a>
</li>
<li class="nav-item">
<a class="nav-link" href="tutorial.html">CREATE TUTORIAL</a>
</li>
<li class="nav-item">
<a class="nav-link" href="manage.html">MANAGE PROJECTS</a>
</li>
Expand Down Expand Up @@ -141,7 +144,7 @@ <h3>Basic Project Information</h3>
</li>
<li>
<label for="visibility">Visibility</label>
<select name="visibility" id="visibility">
<select name="visibility" id="visibility" onchange="displayTeamSettings(this.value)">
<option value="public">Public</option>
</select>
<span>Choose either "public" or select the team for which this project should be displayed.</span>
Expand All @@ -161,6 +164,12 @@ <h3>Basic Project Information</h3>
</select>
<span>Select the type of your project.</span>
</li>
<li>
<label for="tutorial">Tutorial</label>
<select name="tutorial" id="tutorial">
</select>
<span>Choose which tutorial should be used for this project. Make sure that this aligns with what you are looking for.</span>
</li>
<li>
<label for="projectDetails">Project Details</label>
<textarea name="projectDetails" id="projectDetails" onkeyup="adjust_textarea(this)"></textarea>
Expand Down Expand Up @@ -233,6 +242,19 @@ <h3>Project Tasks Geometry</h3>
</ul>
</form>
</div>
<div class="container" id="form_team_settings">
<h3>Team Settings</h3>
<form class="form-style-7">
<ul>
<li>
<label for="maxTasksPerUser">Max Tasks Per User</label>
<input type="number" name="maxTasksPerUser" id="maxTasksPerUser" value="-1" min="-1">
<span>How many tasks each user is allowed to work on for this project. "-1" indicates that no limit is set.</span>
</li>
<li></li>
</ul>
</form>
</div>
<div class="container" id="form_tile_server_a">
<h3>Tile Server A</h3>
<form class="form-style-7">
Expand Down
3 changes: 3 additions & 0 deletions manager_dashboard/manager_dashboard/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@
<li class="nav-item">
<a class="nav-link" href="create.html">CREATE PROJECTS</a>
</li>
<li class="nav-item">
<a class="nav-link" href="tutorial.html">CREATE TUTORIAL</a>
</li>
<li class="nav-item">
<a class="nav-link" href="manage.html">MANAGE PROJECTS</a>
</li>
Expand Down
194 changes: 194 additions & 0 deletions manager_dashboard/manager_dashboard/js/forms-tutorial.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
//auto expand textarea
function adjust_textarea(h) {
h.style.height = "20px";
h.style.height = (h.scrollHeight)+"px";
}

function initForm() {
displayProjectTypeForm("build_area")
}

function openImageFile(event) {
var input = event.target;
console.log(event.target.id)
element_id = event.target.id + 'File'

var reader = new FileReader();
reader.onload = function(){
try {
var dataURL = reader.result;
var output = document.getElementById(element_id);
output.src = dataURL;
}
catch(err) {
element_id = event.target.id + 'Text'
var output = document.getElementById(element_id);
output.innerHTML = '<b>Error reading Image file</b><br>' + err;
}
};
reader.readAsDataURL(input.files[0]);
};

function displayProjectTypeForm(projectType) {
document.getElementById("projectType").value = projectType;
switch (projectType) {
case "build_area":
displayTileServer("bing", "A");
document.getElementById("form_zoom_level").style.display = "block";
document.getElementById("form_tile_server_a").style.display = "block";
document.getElementById("form_tile_server_b").style.display = "None";
break;
case "footprint":
displayTileServer("bing", "A");
document.getElementById("form_zoom_level").style.display = "None";
document.getElementById("form_tile_server_a").style.display = "block";
document.getElementById("form_tile_server_b").style.display = "None";
break;
case "change_detection":
case "completeness":
displayTileServer("bing", "A");
displayTileServer("bing", "B");
document.getElementById("form_zoom_level").style.display = "block";
document.getElementById("form_tile_server_a").style.display = "block";
document.getElementById("form_tile_server_b").style.display = "block";
break;
}
}

function addTileServerCredits (tileServerName, which) {
var credits = {
"bing": "© 2019 Microsoft Corporation, Earthstar Geographics SIO",
"maxar_premium": "© 2019 Maxar",
"maxar_standard": "© 2019 Maxar",
"esri": "© 2019 ESRI",
"esri_beta": "© 2019 ESRI",
"mapbox": "© 2019 MapBox",
"sinergise": "© 2019 Sinergise",
"custom": "Please add imagery credits here."
}
document.getElementById("tileServer"+which+"Credits").value = credits[tileServerName]
}


function displayTileServer (tileServerName, which) {
switch (tileServerName) {
case "custom":
document.getElementById("tileServer"+which+"UrlField").style.display = "block";
document.getElementById("tileServer"+which+"LayerNameField").style.display = "block";
break;
case "sinergise":
document.getElementById("tileServer"+which+"UrlField").style.display = "None";
document.getElementById("tileServer"+which+"LayerNameField").style.display = "block";
break;
default:
document.getElementById("tileServer"+which+"UrlField").style.display = "None";
document.getElementById("tileServer"+which+"LayerNameField").style.display = "None";
}
addTileServerCredits(tileServerName, which)
}

function clear_fields() {
console.log('clear fields.')
displayProjectTypeForm("build_area")
}

function displaySuccessMessage() {
//document.getElementById("import-formular").style.display = "None";
alert('Your project has been uploaded. It can take up to one hour for the project to appear in the dashboard.')
}

function displayImportForm() {
document.getElementById("import-formular").style.display = "block";
}

function openJsonFile(event) {
var input = event.target;

// clear info field
var info_output = document.getElementById("screenInfo");
info_output.innerHTML = '';
info_output.style.display = 'block'

// Check file size before loading
var filesize = input.files[0].size;
if (filesize > 1 * 1024 * 1024) {
var err='filesize is too big (max 1MB): ' + filesize/(1000*1000)
info_output.innerHTML = '<b>Error reading GeoJSON file</b><br>' + err;
info_output.style.display = 'block'
} else {
info_output.innerHTML += 'File Size is valid <br>';
info_output.style.display = 'block'

var reader = new FileReader();
reader.onload = function(){

try {
var text = reader.result;
var screensJsonData = JSON.parse(text)
// check number of screens
numberOfScreens = Object.keys(screensJsonData).length
console.log('number of screens: ' + numberOfScreens)

info_output.innerHTML += 'Number of Screens: ' + numberOfScreens + '<br>';
info_output.style.display = 'block'
screens = text

}
catch(err) {
info_output.innerHTML = '<b>Error reading JSON file</b><br>' + err;
info_output.style.display = 'block'
}
};
reader.readAsText(input.files[0]);
}
};

function openGeoJsonFile(event) {
var input = event.target;

// clear info field
var info_output = document.getElementById("tutorialTasksInfo");
info_output.innerHTML = '';
info_output.style.display = 'block'

// Check file size before loading
var filesize = input.files[0].size;
if (filesize > 1 * 1024 * 1024) {
var err='filesize is too big (max 1MB): ' + filesize/(1000*1000)
info_output.innerHTML = '<b>Error reading GeoJSON file</b><br>' + err;
info_output.style.display = 'block'
} else {
info_output.innerHTML += 'File Size is valid <br>';
info_output.style.display = 'block'

var reader = new FileReader();
reader.onload = function(){

try {
var text = reader.result;
var geoJsonData = JSON.parse(text)
// check number of screens
numberOfFeatures = Object.keys(geoJsonData["features"]).length
console.log('number of features: ' + numberOfFeatures)

info_output.innerHTML += 'Number of Features: ' + numberOfFeatures + '<br>';
info_output.style.display = 'block'
tutorialTasks = text

}
catch(err) {
info_output.innerHTML = '<b>Error reading GeoJSON file</b><br>' + err;
info_output.style.display = 'block'
}
};
reader.readAsText(input.files[0]);
}
};


function closeModal() {
var modal = document.getElementById("uploadModal");
modal.style.display = "none";
var modalSuccess = document.getElementById("modalSuccess");
modalSuccess.style.display = "none";
}
44 changes: 44 additions & 0 deletions manager_dashboard/manager_dashboard/js/forms.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
const BUILD_AREA_TYPE = 1
const FOOTPRINT_TYPE = 2
const CHANGE_DETECTION_TYPE = 3
const COMPLETENESS_TYPE = 4

//auto expand textarea
function adjust_textarea(h) {
h.style.height = "20px";
Expand Down Expand Up @@ -42,10 +47,33 @@ function initTeams() {
}


function initTutorials(projectType) {
// clear all existing options
document.getElementById("tutorial").innerHTML = ""
console.log("init tutorials")
// get teams from firebase
var TutorialsRef = firebase.database().ref("v2/projects").orderByChild("status").equalTo("tutorial");
TutorialsRef.once('value', function(snapshot){
if(snapshot.exists()){
snapshot.forEach(function(data){
// add teamName to drop down option and set teamId as value
if (data.val().projectType == projectType) {
option = document.createElement('option')
option.innerHTML = data.val().name
option.value = data.key
document.getElementById("tutorial").appendChild(option);
}
})
}
})
}


function displayProjectTypeForm(projectType) {
document.getElementById("projectType").value = projectType;
switch (projectType) {
case "build_area":
initTutorials(BUILD_AREA_TYPE);
displayTileServer("bing", "A");
document.getElementById("groupSize").value = 120;
document.getElementById("form_project_aoi_geometry").style.display = "block";
Expand All @@ -54,31 +82,37 @@ function displayProjectTypeForm(projectType) {
document.getElementById("form_tile_server_a").style.display = "block";
document.getElementById("form_tile_server_b").style.display = "None";
setTimeout(function(){ ProjectAoiMap.invalidateSize()}, 400);
document.getElementById("form_team_settings").style.display = "None";
break;
case "footprint":
initTutorials(FOOTPRINT_TYPE);
displayTileServer("bing", "A");
document.getElementById("groupSize").value = 25;
document.getElementById("form_project_aoi_geometry").style.display = "None";
document.getElementById("form_project_task_geometry").style.display = "block";
document.getElementById("form_zoom_level").style.display = "None";
document.getElementById("form_tile_server_a").style.display = "block";
document.getElementById("form_tile_server_b").style.display = "None";
document.getElementById("form_team_settings").style.display = "None";
break;
case "change_detection":
case "completeness":
displayTileServer("bing", "A");
displayTileServer("bing", "B");
if (projectType == "change_detection") {
document.getElementById("groupSize").value = 25;
initTutorials(CHANGE_DETECTION_TYPE);
} else {
document.getElementById("groupSize").value = 80;
initTutorials(COMPLETENESS_TYPE);
}
document.getElementById("form_project_aoi_geometry").style.display = "block";
document.getElementById("form_project_task_geometry").style.display = "None";
document.getElementById("form_zoom_level").style.display = "block";
document.getElementById("form_tile_server_a").style.display = "block";
document.getElementById("form_tile_server_b").style.display = "block";
setTimeout(function(){ ProjectAoiMap.invalidateSize()}, 400);
document.getElementById("form_team_settings").style.display = "None";
break;
}
}
Expand All @@ -97,6 +131,16 @@ function addTileServerCredits (tileServerName, which) {
document.getElementById("tileServer"+which+"Credits").value = credits[tileServerName]
}

function displayTeamSettings (teamId) {
switch (teamId) {
case "public":
document.getElementById("form_team_settings").style.display = "None";
break;
default:
document.getElementById("form_team_settings").style.display = "block";
}
}


function displayTileServer (tileServerName, which) {
switch (tileServerName) {
Expand Down
Loading