]> jspc29.x-matter.uni-frankfurt.de Git - labtools.git/commitdiff
Update to presenter tool
authorJan Michel <jan@mueschelsoft.de>
Sun, 5 Feb 2017 18:02:15 +0000 (19:02 +0100)
committerJan Michel <jan@mueschelsoft.de>
Sun, 5 Feb 2017 18:02:15 +0000 (19:02 +0100)
presenter/convert.sh
presenter/getfiles.pl
presenter/index.pl
presenter/scripts.js
presenter/showPic.pl
presenter/showroom.pl
presenter/style.css
presenter/uploadFiles.pl

index 6d7d770ffe019594577cd941112c0cbf2f29b40c..0f12dff77593bd9135351b1fb9b5eb848b8f2c8a 100755 (executable)
@@ -1,14 +1,2 @@
 #!/bin/bash
-#convert \
-#-density 480 $1 -resize 25% \
-#-set filename:f '%t.%e' \
-#-flatten \
-#-colorspace rgb \
-#-background white \
-#-depth 8 \
-#-quality 84 \
-#PNG:'%[filename:1].png'
-
-#convert -density 300x300 -resize 1440x900 -quality 80 $1 `echo $1|cut -f1 -d'.'`.png;\
-
 pdftoppm -png -r 300 -scale-to 1400 $1 $2
index c70caff1bbb45a8f0ae570158172e4f847dc9cf3..1bc05d3d85f0b13650b64151f4d32bee6fa676c9 100755 (executable)
@@ -15,13 +15,24 @@ if (!($room =~ /^[a-zA-Z0-9]+$/) || !(-d "store/$room")) {
 
 my $cmd = "cd store;cd $room; ls -1 -v";
 my @files = qx($cmd);
-print "<select  onChange=\"previewSelected()\" id=\"filelist\" size=\"20\">\n";
+my $i = 0;
+
+print "<div id=\"filecontainer\">";
 foreach my $f (@files) {
   chomp($f);
   next if $f eq "currentstate";
   next if $f eq "thumb";
-  print "<option  onMouseover=\"preview('$f')\" value='$f'>$f</option>\n";
+  print '<div>'.$f.'<br><img src="store/'.$room.'/thumb/'.$f.'"  onClick="present(this)"  data-file="'.$f.'" data-id="'.$i.'">
+  <button type="button" onClick="window.open(\'store/'.$room.'/'.$f.'\')">View</button>
+</div>';
+  $i++;
+  }
+print "</div>";
+print "<hr><select multiple=\"multiple\" id=\"filelist\" >\n";
+foreach my $f (@files) {
+  chomp($f);
+  next if $f eq "currentstate";
+  next if $f eq "thumb";
+  print "<option value='$f'>$f</option>\n";
   } 
 print "</select>";
-
-
index ff8d763fb5f915a1415c38509edb49f8779d897f..617f569dcdec3b3ed62410c370a5d48534cd11a0 100755 (executable)
@@ -16,7 +16,8 @@ print <<HDOC;
 </head>
 <body class="title">
 <h1>Remote Presenter</h1>
-<select id="roomlist" size="20">
+<p>Please select a room to enter:
+<p><select id="roomlist" size="20">
 HDOC
 my @files = qx(cd store; ls -1 -v );
 
@@ -28,6 +29,16 @@ foreach my $f (@files) {
 print <<HDOC;
 </select><br>
 <button type="button" onClick="window.location='showroom.pl?'+document.getElementById('roomlist').value">Enter Room</button>
+
+<h2>Usage summary</h2>
+<ul>
+<li>The menu hides on the left side of the screen - move your pointer there or click close to the boarder of the window
+<li>File upload: First select a file (jpg, png, gif or pdf only), then click upload. Converting PDFs might take a moment
+<li>Click on an image to show to all connected viewers
+<li>"View" - the selected image is shown in a new browser window, the public view is not changed
+<li>"Delete" - delete the selected files from the list above
+<li>Click anywhere in the image to set a red pointer for everybody to see
+<li>Images can be changed by using the arrow keys
 </body>
 </html>
-HDOC
\ No newline at end of file
+HDOC
index d7b2c488c1f1b54318273da842c7c190a4220554..3eb166588c4dfe80df6ac5bb7d3c3904e917ba9e 100644 (file)
@@ -32,8 +32,8 @@ function updatefiles() {
   }
 
 function present(f) {
-  if(f != "") {
-    getData("showPic.pl?img="+f+"&room="+currentRoom+'&posx=-1&posy=-1');
+  if(f) {
+    getData("showPic.pl?img="+f.getAttribute('data-file')+"&room="+currentRoom+'&posx=-1&posy=-1'); 
     }
   else {
     alert("Select a file to show!");
@@ -45,14 +45,14 @@ function presentNext(d) {
   else if(d==38 || d==33) d=-1;
   else return true;
   current = currentPic.split(',',1);
-  for(i=0;i<document.getElementById('filelist').children.length;i++){
-    if (document.getElementById('filelist').children[i].getAttribute('value') == current[0]) {
+  for(i=0;i<document.getElementById('filecontainer').children.length;i++){
+    if (document.getElementById('filecontainer').children[i].children[1].getAttribute('data-file') == current[0]) {
       break;
       }
     }  
   f = '';
-  if(document.getElementById('filelist').children[i+d]) {
-    f = document.getElementById('filelist').children[i+d].getAttribute('value');
+  if(document.getElementById('filecontainer').children[i+d]) {
+    f = document.getElementById('filecontainer').children[i+d].children[1].getAttribute('data-file');
     }
   if(f != "") {
     getData("showPic.pl?img="+f+"&room="+currentRoom+'&posx=-1&posy=-1');
@@ -80,8 +80,8 @@ function deletePic(f) {
 function pointer(e) {
   var t = document.getElementById("screen");
 //   alert(t.offsetLeft);
-  var x = Math.round((e.pageX - t.offsetLeft)/t.offsetWidth*100);
-  var y = Math.round((e.pageY - t.offsetTop)/t.offsetHeight*100);  
+  var x = Math.round((e.pageX - t.offsetLeft)/t.clientWidth*100);
+  var y = Math.round((e.pageY - t.offsetTop)/t.clientHeight*100);  
   var i = currentPic.split(",");
   getData("showPic.pl?img="+i[0]+"&room="+currentRoom+'&posx='+x+'&posy='+y);
   }
@@ -94,34 +94,16 @@ function updatepresentation(t) {
     currentPic = t;
     var i = t.split(",");
     if(s) {
-      x = i[1]*s.offsetWidth/100-30 + s.offsetLeft;
-      y = i[2]*s.offsetHeight/100-10 + s.offsetTop;
+      x = i[1]*s.clientWidth/100-30 + s.offsetLeft;
+      y = i[2]*s.clientHeight/100-10 + s.offsetTop;
       }
     else { x=0;y=0; }  
     document.getElementById("content").innerHTML = '<img id="screen" onClick="pointer(event);" src="store/'+currentRoom+'/'+i[0]+'"><div id="pointer" style="left:'+x+'px;top:'+y+'px;">&nbsp;</div>';
-    
-    c = currentPic.split(',',1);
-    document.getElementById('current').innerHTML = "Current: "+c[0];
 
     }
   setTimeout('getData("getPic.pl?old='+t+'&room='+currentRoom+'",null,updatepresentation)',1000);  
   }
 
-function preview(f) {
-  document.getElementById("preview").innerHTML = '<img src="store/'+currentRoom+'/thumb/'+f+'">';
-  }
-
-function previewSelected() {
-  f = document.getElementById("filelist").value;
-  document.getElementById("preview").innerHTML = '<img src="store/'+currentRoom+'/thumb/'+f+'">';
-  }
-
-
-function togglemulti() {
-  document.getElementById("filelist").setAttribute('multiple','multiple');
-  }
-
-
 
 setTimeout('updatefiles();',500);
 setTimeout('updatepresentation(" ");',200);
index 0066cb5dac0770335a01459bdef52409707264d7..ee8bdb1210946f3313190e20de96a7817419d4d2 100755 (executable)
@@ -9,23 +9,23 @@ my $cgi = new CGI();
 my $room = $cgi->param("room");
 if (!($room =~ /^[a-zA-Z0-9]+$/) || !(-d "store/$room")) {
   print "Invalid room";
-  return 1;
+  exit 1;
 }
 
  
 my $t = $cgi->param("img");
-if($t =~ /[\"\$\(\)\/]/ || !(-e "store/$room/$t")) {
+if(!($t =~  /^[a-zA-Z0-9\.\-_]+$/) || $t =~ /[\"\$\(\)\/]/ || !(-e "store/$room/$t")) {
   print "Invalid selection";
-  return 1;
+  exit 1;
 }
 
 my $tmp = $cgi->param("posx").','.$cgi->param("posy");
 if(!($tmp =~ /^-?[0-9]+,-?[0-9]+$/)) {
   print "Invalid Position";
-  return 1;
+  exit 1;
   }
 $t .= ','.$tmp;
 
 system("echo $t>store/$room/currentstate");
 
-1;
\ No newline at end of file
+1;
index cc51d021a5b0ff969e42657bfca7345568869374..a1a43af6c73dc07d0fbba04e9fc4482d0d99bffa 100755 (executable)
@@ -33,16 +33,18 @@ print <<HDOC;
 Select a file and press upload.
 <form method="post" action="uploadFiles.pl" enctype="multipart/form-data" >
 <input type="hidden" name="room" value="$room">
-<input type="file" name="upfile" ><input type="submit" name="button" value="Upload">
+<input type="file" name="upfile">
+<input type="submit" name="button" value="Upload">
 </form>
 <hr>
 <button type="button" onClick="updatefiles();">Update file list</button>
 <div id="files"> &nbsp; </div>
-<button type="button" onClick="window.open('store/$room/'+document.getElementById('filelist').value)">Show 2 Me</button>
-<button type="button" onClick="present(document.getElementById('filelist').value)">Show 2 All</button>
 <br><button type="button" onClick="deletePic(document.getElementById('filelist').value)">Delete</button>
-<button type="button" onClick="togglemulti()" title='Enable selecting several files for deletion'>MS</button>
-<div id="current"></div><div id="preview"></div>You can use arrow keys to change slides!</div>
+
+<!--<button type="button" onClick="window.open('store/$room/'+document.getElementById('filelist').value)">Show 2 Me</button>
+<button type="button" onClick="present(document.getElementById('filelist').value)">Show 2 All</button>
+<button type="button" onClick="togglemulti()" title='Enable selecting several files for deletion'>MS</button>-->
+
 </body></html>
 HDOC
   
index 66585e010272a87feda4bc1494fe6750908c48b0..7d830c17937249f50ad3ebfaa23343c255124318 100644 (file)
@@ -16,7 +16,7 @@ body {
   color:#888;
   font-family: sans-serif;
   height: 100%;
-  overflow:hidden;
+  overflow:hidden !important;
   margin:0;
   padding-left:20px;
   }
@@ -24,6 +24,7 @@ body {
 body.title {
   background:#f0f0ea;
   padding:0;
+  margin-left: 20px;
 }
   
 h1 {
@@ -39,10 +40,12 @@ h1 {
   left:-200px;
   position:absolute;
   top:0;
+  padding-left:10px;
   border-right:70px solid #000;
   background:#ccb;
   transition:left 0.6s 3s ease-out, border 0.6s 3s ease-out;
-  overflow:hidden;
+  overflow-y:scroll !important;
+  overflow-x:hidden;
   }
   
 #control:hover {
@@ -66,11 +69,11 @@ h1 {
   
 #content img {
   height:100%;
-/*   width:100%; */
+  width:100%;
   max-height:100%;  
   max-width:100%;
   object-fit:contain;
-  margin:auto;
+  margin:auto;
   padding:0;
   }
   
@@ -82,13 +85,6 @@ h1 {
   width:180px;
 }
 
-/*
-@keyframes pointerani {
-  0% {width:25px;height:25px;margin:0;}
-  100% {width:20px;height:20px;margin:2.5px 0 0 2.5px;}
-}
-*/
-
 @keyframes pointerani {
   0% {opacity:.2;}
   100% {opacity:.7;}
@@ -103,17 +99,31 @@ h1 {
   opacity:0.7;
   border-radius:15px;
   position:absolute;
-  //animation: pointerani 1s infinite alternate;
   }
 
-#preview {
-  width:205px;
-  border:1px solid #aaa;
-  margin:1px;
+
+#files div {
+  padding-top:2px;
+  border-bottom:1px solid #aaa;
+  clear:both;
+  
+}
+
+#files img {
+  margin:auto;
+  max-height:100px;
+  max-width:150px;
+  object-fit:contain;
   position:relative;
-  left:5px;
-  padding:1px;
-  text-align:center;
-  background:white;
-  }
+}
 
+#files button {
+  font-size:80%;
+  width:35px;
+  display:block;
+  float:right;
+  margin-right:5px;
+  padding:0px;
+  }
+  
+  
index 487e514b4112d9bb32145f83283273b39f84df01..347976717f01848e403be2fae08c26d6cf9b0dd5 100755 (executable)
@@ -20,6 +20,11 @@ my $basename = GetBasename($upfile);
 $basename =~ s-/--;
 $basename =~ s-\s--;
 
+unless($basename =~ /^[a-zA-Z0-9\.\-_]+$/) {
+  print("Filename contains invalid characters. Only a-z A-Z 0-9 . _ - are allowed.");
+  exit(-1);
+  }
+
 my $fh = $cgi->upload('upfile');