/*
* Copyright (C) 2014
* This file is part of WvS VPlan.
*
* WvS VPlan is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
var page_html = '\n\
\n\
\n\
WvS VPlan | Vertretungen
\n\
\n\
\n\
\n\
\n\
';
function renderPage(div, pdf, pageNumber, callback){
pdf.getPage(pageNumber).then(function(page){
var scale = 1;
var viewport = page.getViewport(scale);
var pageDisplayWidth = viewport.width;
var pageDisplayHeight = viewport.height;
var pageDivHolder = document.createElement('div');
/* pageDivHolder.className = 'pdfpage';
pageDivHolder.style.width = pageDisplayWidth + 'px';
pageDivHolder.style.height = pageDisplayWidth + 'px';
*/
var canvas = document.createElement('canvas');
canvas.className = 'pdfcanvas';
var context = canvas.getContext('2d');
canvas.width = pageDisplayWidth;
canvas.height = pageDisplayHeight;
pageDivHolder.appendChild(canvas);
div.appendChild(pageDivHolder);
var renderContext = {
canvasContext: context,
viewport: viewport
};
page.render(renderContext).promise.then(callback);
});
}
function render_pdf(viewerstr){
console.log("Rendere PDF: " + $(viewerstr).attr('data-plan-url') + " (" + viewerstr + ")");
PDFJS.getDocument($(viewerstr).attr('data-plan-url')).then(function(pdf){
var viewer = document.getElementById(viewerstr.replace(/#/, ''));
var pageNumber = 1;
renderPage(viewer, pdf, pageNumber++, function pageRenderingComplete(){
if(pageNumber > pdf.numPages){
return;
}
renderPage(viewer, pdf, pageNumber++, pageRenderingComplete);
});
});
}
function fail(text){
alert("Etwas ist schiefgelaufen: " + text.toString());
}
function download_pdf(link, id){
var filename = link.substring(link.lastIndexOf('/') + 1);
window.requestFileSystem(
LocalFileSystem.PERSISTENT, 0,
function onFileSystemSuccess(fileSystem){
fileSystem.root.getFile(
filename, {create: true, exclusive: false},
function gotFileEntry(fileEntry){
var sPath = "/storage/sdcard0" + fileEntry.fullPath; // !!! TODO Unterstützung anderer Geräte
console.log("Pfad: " + sPath);
var fileTransfer = new FileTransfer();
fileEntry.remove();
fileTransfer.download(
link,
sPath,
function(theFile){
console.log("Download fertig: " + theFile.toURL());
$('#pdf-' + id).attr('data-plan-url', theFile.toURL());
if(location.href.indexOf("page-") == -1){
location.href = "#page-vplan-" + id;
}
},
function(error){
console.log("Fehler: " + error.source + " - "+ error.target + " - " + error.code);
}
);
},
fail);
},
fail);
}
function get_plan(link, id){
var request = $.ajax({
type: "GET",
url: link
});
request.done(function(result){
var pdf_re = new RegExp("(http://***REMOVED***\\.de/moodle/pluginfile\\.php/\\d+/mod_resource/content/\\d+.*?\\.pdf)");
var pdflink = pdf_re.exec(result)[1];
console.log('Plan gefunden: ' + pdflink);
download_pdf(pdflink, id);
});
request.fail(function(jqXHR, textStatus){
alert("Etwas ist schiefgelaufen: " + textStatus);
});
}
function get_overview(link){
var request = $.ajax({
type: "GET",
url: link
});
request.done(function(result){
var plans_re = new RegExp("window\\.open\\('(http://***REMOVED***\\.de/moodle/mod/resource/view\\.php\\?id=\\d+)&redirect=1'\\)", "g");
var link;
// TODO keine result.match: Login fehlerhaft
//
// Pages für Vertretungsplände erstellen und pageshow-Events festlegen
var resultl = result.match(plans_re).length;
for(j = 0; j < resultl; j++){
new_html = page_html.replace(/{ID}/g, j);
$('#loginpage').after(new_html);
if(j + 1 < resultl){
$('#page-vplan-' + j).on('swipeleft', function(event){
console.log("Wisch links");
location.href = "#page-vplan-" + (parseInt($('.ui-page-active').attr('id').match(/\d+/)[0]) + 1);
});
}
if(j - 1 >= 0){
$('#page-vplan-' + j).on('swiperight', function(event){
console.log("Wisch rechts");
location.href = "#page-vplan-" + (parseInt($('.ui-page-active').attr('id').match(/\d+/)[0]) - 1);
});
}
console.log('Html hinzugefügt zu: ' + j);
$('#page-vplan-' + j).on('pageshow', function(event){
render_pdf($('.ui-page-active').attr('id').replace(/page-vplan/, '#pdf'));
});
}
j = 0;
while((link = plans_re.exec(result)) !== null){
console.log('suche Plan ' + link[1]);
get_plan(link[1], j++);
}
console.log('Übersichts-Request erfolgreich');
});
request.fail(function(jqXHR, textStatus){
alert("Etwas ist schiefgelaufen: " + textStatus);
});
}
function login(){
$.mobile.loading("show", {
text: "Lade...",
textVisible: true,
theme: "b",
});
var username = encodeURIComponent($("#username").val());
var password = encodeURIComponent($("#password").val());
var params = "username=" + username + "&password=" + password;
var request = $.ajax({
type: "POST",
url: "https://***REMOVED***/moodle/login/index.php",
data: {username: username, password: password}
});
request.done(function(result){
var vertretungs_re = new RegExp("title=\"Vertretungsplan\" href=\"(http://***REMOVED***\\.de/moodle/course/view\\.php\\?id=\\d+)");
var link = vertretungs_re.exec(result)[1];
console.log('Login-Request erfolgreich: ' + link);
get_overview(link);
});
request.fail(function(jqXHR, textStatus){
alert("Etwas ist schiefgelaufen: " + textStatus);
});
}
var app = {
// Application Constructor
initialize: function() {
this.bindEvents();
},
// Bind Event Listeners
//
// Bind any events that are required on startup. Common events are:
// 'load', 'deviceready', 'offline', and 'online'.
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
// deviceready Event Handler
//
// The scope of 'this' is the event. In order to call the 'receivedEvent'
// function, we must explicity call 'app.receivedEvent(...);'
onDeviceReady: function() {
app.receivedEvent('deviceready');
},
// Update DOM on a Received Event
receivedEvent: function(id) {
/* var parentElement = document.getElementById(id);
var listeningElement = parentElement.querySelector('.listening');
var receivedElement = parentElement.querySelector('.received');
listeningElement.setAttribute('style', 'display:none;');
receivedElement.setAttribute('style', 'display:block;');
*/
console.log('Received Event: ' + id);
}
};