Hello community,

here is the log from the commit of package perl-App-MFILE-WWW for 
openSUSE:Factory checked in at 2017-03-28 15:21:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-App-MFILE-WWW (Old)
 and      /work/SRC/openSUSE:Factory/.perl-App-MFILE-WWW.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-App-MFILE-WWW"

Tue Mar 28 15:21:26 2017 rev:5 rq:478926 version:0.156

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-App-MFILE-WWW/perl-App-MFILE-WWW.changes    
2016-11-18 22:04:05.000000000 +0100
+++ 
/work/SRC/openSUSE:Factory/.perl-App-MFILE-WWW.new/perl-App-MFILE-WWW.changes   
    2017-03-28 15:21:27.328081480 +0200
@@ -1,0 +2,50 @@
+Tue Mar  7 06:02:59 UTC 2017 - co...@suse.com
+
+- updated to 0.156
+   see /usr/share/doc/packages/perl-App-MFILE-WWW/Changes
+
+  
+  0.155 2017-02-27 22:37 CET
+  - html.js: handle special entries in dbrowser, too
+  - lib.js: add shallowCopy function
+  - spam console log less (rightPadSpaces, current-user.js)
+  - current-user: refrain from spamming log
+  
+  0.156 2017-02-28 15:23 CET
+  - lib.js: add isStringNotEmpty function
+
+-------------------------------------------------------------------
+Wed Mar  1 06:02:34 UTC 2017 - co...@suse.com
+
+- updated to 0.154
+   see /usr/share/doc/packages/perl-App-MFILE-WWW/Changes
+
+  
+  0.154 2017-02-27 15:40 CET
+  - build/ops: require recent versions of dependencies
+  - Cleanup session data display
+  - html.js: handle null entriesWrite array
+  - Implement a special divider dform entry, including rendering
+  - Implement a special dform entry that is just an empty line
+  - html: handle null elem.text in maxLength
+
+-------------------------------------------------------------------
+Sun Feb 26 06:02:01 UTC 2017 - co...@suse.com
+
+- updated to 0.153
+   see /usr/share/doc/packages/perl-App-MFILE-WWW/Changes
+
+  
+  0.153 2017-02-25 09:30 CET
+  - Refrain from making a new Plack::Session object
+  - doc: tweak log messages
+  - Resource.pm: implement session and session_id methods
+  - script: store sessions in a dedicated directory in /tmp
+  - Display session data on all screens
+  - login: do not trigger page reload when bad credentials
+  - Dispatch.pm: remove dead code
+  - Control display of session data by config parameter
+  - doc: better description of MFILE_APPNAME config param
+  - Control display of session data via configuration parameter
+
+-------------------------------------------------------------------

Old:
----
  App-MFILE-WWW-0.152.tar.gz

New:
----
  App-MFILE-WWW-0.156.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-App-MFILE-WWW.spec ++++++
--- /var/tmp/diff_new_pack.3J1YdK/_old  2017-03-28 15:21:28.251950634 +0200
+++ /var/tmp/diff_new_pack.3J1YdK/_new  2017-03-28 15:21:28.255950068 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package perl-App-MFILE-WWW
 #
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,21 +17,21 @@
 
 
 Name:           perl-App-MFILE-WWW
-Version:        0.152
+Version:        0.156
 Release:        0
 %define cpan_name App-MFILE-WWW
 Summary:        Web UI development toolkit with prototype demo app
 License:        BSD-3-Clause
 Group:          Development/Libraries/Perl
 Url:            http://search.cpan.org/dist/App-MFILE-WWW/
-Source0:        
http://www.cpan.org/authors/id/S/SM/SMITHFARM/%{cpan_name}-%{version}.tar.gz
+Source0:        
https://cpan.metacpan.org/authors/id/S/SM/SMITHFARM/%{cpan_name}-%{version}.tar.gz
 Source1:        cpanspec.yml
 BuildArch:      noarch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  perl
 BuildRequires:  perl-macros
-BuildRequires:  perl(App::CELL) >= 0.194
-BuildRequires:  perl(App::MFILE) >= 0.17
+BuildRequires:  perl(App::CELL) >= 0.222
+BuildRequires:  perl(App::MFILE) >= 0.181
 BuildRequires:  perl(File::ShareDir)
 BuildRequires:  perl(HTTP::Request)
 BuildRequires:  perl(JSON)
@@ -44,14 +44,13 @@
 BuildRequires:  perl(Plack::Middleware::StackTrace)
 BuildRequires:  perl(Plack::Middleware::Static)
 BuildRequires:  perl(Plack::Runner)
-BuildRequires:  perl(Plack::Session)
 BuildRequires:  perl(Plack::Test)
 BuildRequires:  perl(Test::Fatal)
 BuildRequires:  perl(Test::JSON)
 BuildRequires:  perl(Try::Tiny)
 BuildRequires:  perl(Web::Machine) >= 0.15
-Requires:       perl(App::CELL) >= 0.194
-Requires:       perl(App::MFILE) >= 0.17
+Requires:       perl(App::CELL) >= 0.222
+Requires:       perl(App::MFILE) >= 0.181
 Requires:       perl(File::ShareDir)
 Requires:       perl(JSON)
 Requires:       perl(LWP::UserAgent)
@@ -62,7 +61,6 @@
 Requires:       perl(Plack::Middleware::StackTrace)
 Requires:       perl(Plack::Middleware::Static)
 Requires:       perl(Plack::Runner)
-Requires:       perl(Plack::Session)
 Requires:       perl(Try::Tiny)
 Requires:       perl(Web::Machine) >= 0.15
 %{perl_requires}
@@ -105,6 +103,7 @@
 
 %files -f %{name}.files
 %defattr(-,root,root,755)
-%doc Changes COPYING LICENSE README.rst share
+%doc Changes README.rst share
+%license COPYING LICENSE
 
 %changelog

++++++ App-MFILE-WWW-0.152.tar.gz -> App-MFILE-WWW-0.156.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/App-MFILE-WWW-0.152/Build.PL 
new/App-MFILE-WWW-0.156/Build.PL
--- old/App-MFILE-WWW-0.152/Build.PL    2016-11-05 21:18:27.000000000 +0100
+++ new/App-MFILE-WWW-0.156/Build.PL    2017-03-01 17:12:46.000000000 +0100
@@ -21,10 +21,9 @@
         'Module::Build'  => 0,
     },
     build_requires => {
-        'App::CELL'      => 0.194,
-        'App::MFILE'     => 0.170,
+        'App::CELL'      => 0.222,
+        'App::MFILE'     => 0.181,
         'HTTP::Request'  => 0,
-        'Plack::Session' => 0,
         'Plack::Test'    => 0,
         'Scalar::Util'   => 0,
         'Test::Fatal'    => 0,
@@ -32,8 +31,8 @@
     },
     requires => {
         'perl'           => 5.012,
-        'App::CELL'      => 0.194,
-        'App::MFILE'     => 0.170,
+        'App::CELL'      => 0.222,
+        'App::MFILE'     => 0.181,
         'Getopt::Long'   => 0,
         'File::ShareDir' => 0,
         'File::Temp'     => 0,
@@ -46,7 +45,6 @@
         'Plack::Middleware::StackTrace' => 0,
         'Plack::Middleware::Static' => 0,
         'Plack::Runner'  => 0,
-        'Plack::Session' => 0,
         'Scalar::Util'   => 0,
         'Try::Tiny'      => 0,
         'Web::Machine'   => 0.15,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/App-MFILE-WWW-0.152/Changes 
new/App-MFILE-WWW-0.156/Changes
--- old/App-MFILE-WWW-0.152/Changes     2016-11-05 21:18:27.000000000 +0100
+++ new/App-MFILE-WWW-0.156/Changes     2017-03-01 17:12:46.000000000 +0100
@@ -920,3 +920,32 @@
 - core: improve display of empty table/rowselect in html.js
 - core: display drowselect navigation only if rows > 1
 
+0.153 2017-02-25 09:30 CET
+- Refrain from making a new Plack::Session object
+- doc: tweak log messages
+- Resource.pm: implement session and session_id methods
+- script: store sessions in a dedicated directory in /tmp
+- Display session data on all screens
+- login: do not trigger page reload when bad credentials
+- Dispatch.pm: remove dead code
+- Control display of session data by config parameter
+- doc: better description of MFILE_APPNAME config param
+- Control display of session data via configuration parameter
+
+0.154 2017-02-27 15:40 CET
+- build/ops: require recent versions of dependencies
+- Cleanup session data display
+- html.js: handle null entriesWrite array
+- Implement a special divider dform entry, including rendering
+- Implement a special dform entry that is just an empty line
+- html: handle null elem.text in maxLength
+
+0.155 2017-02-27 22:37 CET
+- html.js: handle special entries in dbrowser, too
+- lib.js: add shallowCopy function
+- spam console log less (rightPadSpaces, current-user.js)
+- current-user: refrain from spamming log
+
+0.156 2017-02-28 15:23 CET
+- lib.js: add isStringNotEmpty function
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/App-MFILE-WWW-0.152/META.json 
new/App-MFILE-WWW-0.156/META.json
--- old/App-MFILE-WWW-0.152/META.json   2016-11-05 21:18:27.000000000 +0100
+++ new/App-MFILE-WWW-0.156/META.json   2017-03-01 17:12:46.000000000 +0100
@@ -4,7 +4,7 @@
       "Nathan Cutler <ncut...@suse.cz>"
    ],
    "dynamic_config" : 1,
-   "generated_by" : "Module::Build version 0.4205",
+   "generated_by" : "Module::Build version 0.4003, CPAN::Meta::Converter 
version 2.120921",
    "license" : [
       "bsd"
    ],
@@ -16,10 +16,9 @@
    "prereqs" : {
       "build" : {
          "requires" : {
-            "App::CELL" : "0.194",
-            "App::MFILE" : "0.17",
+            "App::CELL" : "0.222",
+            "App::MFILE" : "0.181",
             "HTTP::Request" : "0",
-            "Plack::Session" : "0",
             "Plack::Test" : "0",
             "Scalar::Util" : "0",
             "Test::Fatal" : "0",
@@ -33,8 +32,8 @@
       },
       "runtime" : {
          "requires" : {
-            "App::CELL" : "0.194",
-            "App::MFILE" : "0.17",
+            "App::CELL" : "0.222",
+            "App::MFILE" : "0.181",
             "File::ShareDir" : "1.00",
             "File::Temp" : "0",
             "Getopt::Long" : "0",
@@ -47,7 +46,6 @@
             "Plack::Middleware::StackTrace" : "0",
             "Plack::Middleware::Static" : "0",
             "Plack::Runner" : "0",
-            "Plack::Session" : "0",
             "Scalar::Util" : "0",
             "Try::Tiny" : "0",
             "Web::Machine" : "0.15",
@@ -58,21 +56,22 @@
    "provides" : {
       "App::MFILE::WWW" : {
          "file" : "lib/App/MFILE/WWW.pm",
-         "version" : "0.152"
+         "version" : "0.156"
       },
       "App::MFILE::WWW::Dispatch" : {
-         "file" : "lib/App/MFILE/WWW/Dispatch.pm"
+         "file" : "lib/App/MFILE/WWW/Dispatch.pm",
+         "version" : 0
       },
       "App::MFILE::WWW::Resource" : {
-         "file" : "lib/App/MFILE/WWW/Resource.pm"
+         "file" : "lib/App/MFILE/WWW/Resource.pm",
+         "version" : 0
       }
    },
    "release_status" : "stable",
    "resources" : {
       "license" : [
-         "http://opensource.org/licenses/bsd-license.php";
+         "http://opensource.org/licenses/BSD-3-Clause";
       ]
    },
-   "version" : "0.152",
-   "x_serialization_backend" : "JSON::PP version 2.27203"
+   "version" : "0.156"
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/App-MFILE-WWW-0.152/META.yml 
new/App-MFILE-WWW-0.156/META.yml
--- old/App-MFILE-WWW-0.152/META.yml    2016-11-05 21:18:27.000000000 +0100
+++ new/App-MFILE-WWW-0.156/META.yml    2017-03-01 17:12:46.000000000 +0100
@@ -3,52 +3,51 @@
 author:
   - 'Nathan Cutler <ncut...@suse.cz>'
 build_requires:
-  App::CELL: '0.194'
-  App::MFILE: '0.17'
-  HTTP::Request: '0'
-  Plack::Session: '0'
-  Plack::Test: '0'
-  Scalar::Util: '0'
-  Test::Fatal: '0'
-  Test::JSON: '0'
+  App::CELL: 0.222
+  App::MFILE: 0.181
+  HTTP::Request: 0
+  Plack::Test: 0
+  Scalar::Util: 0
+  Test::Fatal: 0
+  Test::JSON: 0
 configure_requires:
-  Module::Build: '0'
+  Module::Build: 0
 dynamic_config: 1
-generated_by: 'Module::Build version 0.4205, CPAN::Meta::Converter version 
2.150005'
+generated_by: 'Module::Build version 0.4003, CPAN::Meta::Converter version 
2.120921'
 license: bsd
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
-  version: '1.4'
+  version: 1.4
 name: App-MFILE-WWW
 provides:
   App::MFILE::WWW:
     file: lib/App/MFILE/WWW.pm
-    version: '0.152'
+    version: 0.156
   App::MFILE::WWW::Dispatch:
     file: lib/App/MFILE/WWW/Dispatch.pm
+    version: 0
   App::MFILE::WWW::Resource:
     file: lib/App/MFILE/WWW/Resource.pm
+    version: 0
 requires:
-  App::CELL: '0.194'
-  App::MFILE: '0.17'
-  File::ShareDir: '1.00'
-  File::Temp: '0'
-  Getopt::Long: '0'
-  JSON: '0'
-  LWP::UserAgent: '0'
-  Log::Any::Adapter: '0'
-  Params::Validate: '1.06'
-  Plack::Builder: '0'
-  Plack::Middleware::Session: '0'
-  Plack::Middleware::StackTrace: '0'
-  Plack::Middleware::Static: '0'
-  Plack::Runner: '0'
-  Plack::Session: '0'
-  Scalar::Util: '0'
-  Try::Tiny: '0'
-  Web::Machine: '0.15'
-  perl: '5.012'
+  App::CELL: 0.222
+  App::MFILE: 0.181
+  File::ShareDir: 1.00
+  File::Temp: 0
+  Getopt::Long: 0
+  JSON: 0
+  LWP::UserAgent: 0
+  Log::Any::Adapter: 0
+  Params::Validate: 1.06
+  Plack::Builder: 0
+  Plack::Middleware::Session: 0
+  Plack::Middleware::StackTrace: 0
+  Plack::Middleware::Static: 0
+  Plack::Runner: 0
+  Scalar::Util: 0
+  Try::Tiny: 0
+  Web::Machine: 0.15
+  perl: 5.012
 resources:
-  license: http://opensource.org/licenses/bsd-license.php
-version: '0.152'
-x_serialization_backend: 'CPAN::Meta::YAML version 0.012'
+  license: http://opensource.org/licenses/BSD-3-Clause
+version: 0.156
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/App-MFILE-WWW-0.152/Makefile.PL 
new/App-MFILE-WWW-0.156/Makefile.PL
--- old/App-MFILE-WWW-0.152/Makefile.PL 2016-11-05 21:18:27.000000000 +0100
+++ new/App-MFILE-WWW-0.156/Makefile.PL 2017-03-01 17:12:46.000000000 +0100
@@ -1,4 +1,4 @@
-# Note: this file was auto-generated by Module::Build::Compat version 0.4205
+# Note: this file was auto-generated by Module::Build::Compat version 0.4003
 require 5.012;
 use ExtUtils::MakeMaker;
 WriteMakefile
@@ -6,8 +6,8 @@
   'NAME' => 'App::MFILE::WWW',
   'VERSION_FROM' => 'lib/App/MFILE/WWW.pm',
   'PREREQ_PM' => {
-                   'App::CELL' => '0.194',
-                   'App::MFILE' => '0.17',
+                   'App::CELL' => '0.222',
+                   'App::MFILE' => '0.181',
                    'File::ShareDir' => '1.00',
                    'File::Temp' => 0,
                    'Getopt::Long' => 0,
@@ -21,7 +21,6 @@
                    'Plack::Middleware::StackTrace' => 0,
                    'Plack::Middleware::Static' => 0,
                    'Plack::Runner' => 0,
-                   'Plack::Session' => 0,
                    'Plack::Test' => 0,
                    'Scalar::Util' => 0,
                    'Test::Fatal' => 0,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/App-MFILE-WWW-0.152/bin/mfile-www 
new/App-MFILE-WWW-0.156/bin/mfile-www
--- old/App-MFILE-WWW-0.152/bin/mfile-www       2016-11-05 21:18:27.000000000 
+0100
+++ new/App-MFILE-WWW-0.156/bin/mfile-www       2017-03-01 17:12:46.000000000 
+0100
@@ -44,13 +44,14 @@
 use App::CELL::Util qw( is_directory_viable );
 use App::MFILE::WWW qw( $VERSION );
 use Getopt::Long;
-use File::Path;
+use File::Path qw( make_path remove_tree );
 use File::ShareDir;
 use File::Spec;
 use Module::Load;
 use Module::Runtime qw( is_module_name require_module );
 use Plack::Builder;
 use Plack::Runner;
+use Plack::Session::Store::File;
 use Try::Tiny;
 use Web::Machine;
  
@@ -288,7 +289,7 @@
     my $module = join( '::', @tmp_c );
     my $app_module = $module . '::Dispatch';
     die "$app_module is not a module name" unless is_module_name( $app_module 
);
-    print "Derived distro is $app_distro\n";
+    print "_get_sharedir: Derived distro is $app_distro\n";
 
     my $status = undef;
     try {
@@ -337,7 +338,7 @@
     my ( $old, $new ) = @_;
     die "Need to be root to create symlink" unless $sharedir_writable;
     my ( undef, $path, $file ) = File::Spec->splitpath( $new );
-    File::Path::make_path( $path );
+    make_path( $path );
     symlink( $old, $new ) ;
     if ( ! stat( $new ) ) {
         unlink( $new );
@@ -491,11 +492,16 @@
 );
 
 $runner->parse_options(@ARGV);
+remove_tree( '/tmp/mfile-www-sessions' );
+mkdir '/tmp/mfile-www-sessions';
 
 $runner->run( 
     builder {
         enable "StackTrace", force => 1;
-        enable "Session", store => 'File';
+#        enable "Session", store => 'File';
+        enable "Session", store => Plack::Session::Store::File->new(
+            dir => '/tmp/mfile-www-sessions',
+        );
         enable "Static", path => qr{^/(js|css)/}, root => $http_root;
         Web::Machine->new( resource => $dispatch_module, )->to_app;
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/App-MFILE-WWW-0.152/lib/App/MFILE/WWW/Dispatch.pm 
new/App-MFILE-WWW-0.156/lib/App/MFILE/WWW/Dispatch.pm
--- old/App-MFILE-WWW-0.152/lib/App/MFILE/WWW/Dispatch.pm       2016-11-05 
21:18:27.000000000 +0100
+++ new/App-MFILE-WWW-0.156/lib/App/MFILE/WWW/Dispatch.pm       2017-03-01 
17:12:46.000000000 +0100
@@ -42,7 +42,6 @@
 
 use App::CELL qw( $CELL $log $meta $site );
 use Data::Dumper;
-use File::Temp qw( tempdir );
 use JSON;
 use LWP::UserAgent;
 use Params::Validate qw(:all);
@@ -50,9 +49,7 @@
 # methods/attributes not defined in this module will be inherited from:
 use parent 'App::MFILE::WWW::Resource';
 
-our $ua = LWP::UserAgent->new(
-              cookie_jar => { file => tempdir( CLEANUP => 0 ) }
-          );
+
 
 
 =head1 NAME
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/App-MFILE-WWW-0.152/lib/App/MFILE/WWW/Resource.pm 
new/App-MFILE-WWW-0.156/lib/App/MFILE/WWW/Resource.pm
--- old/App-MFILE-WWW-0.152/lib/App/MFILE/WWW/Resource.pm       2016-11-05 
21:18:27.000000000 +0100
+++ new/App-MFILE-WWW-0.156/lib/App/MFILE/WWW/Resource.pm       2017-03-01 
17:12:46.000000000 +0100
@@ -47,7 +47,6 @@
 use JSON;
 use LWP::UserAgent;
 use Params::Validate qw(:all);
-use Plack::Session;
 use Try::Tiny;
 
 # methods/attributes not defined in this module will be inherited from:
@@ -101,6 +100,26 @@
 }
 
 
+=head2 session
+
+=cut
+
+sub session {
+    my $self = shift;
+    return $self->request->{'env'}->{'psgix.session'};
+}
+
+
+=head2 session_id
+
+=cut
+
+sub session_id {
+    my $self = shift;
+    return $self->request->{'env'}->{'psgix.session.options'}->{'id'};
+}
+
+
 =head2 service_available
 
 This is the first method called on every incoming request.
@@ -128,14 +147,16 @@
 
 sub _render_response_html { 
     my ( $self ) = @_;
+    $log->debug( "Entering " . __PACKAGE__ . "::_render_response_html" );
+
     my $r = $self->request;
-    my $session = Plack::Session->new( $r->{'env'} );
-    my $ce = $session->get('currentUser');
-    my $cepriv = $session->get('currentUserPriv');
+    my $session = $r->{'env'}->{'psgix.session'};
+    my $ce = $session->{'currentUser'};
+    my $cepriv = $session->{'currentUserPriv'};
     my $entity;
     $entity = ( $r->path_info =~ m/test/i )
-        ? test_html( $ce, $cepriv )
-        : main_html( $ce, $cepriv );
+        ? $self->test_html( $ce, $cepriv )
+        : $self->main_html( $ce, $cepriv );
     return $entity;
 }
 
@@ -276,7 +297,7 @@
 =cut
 
 sub main_html {
-    my ( $ce, $cepriv ) = @_;
+    my ( $self, $ce, $cepriv ) = @_;
 
     $cepriv = '' unless defined( $cepriv );
     $log->debug( "Entering " . __PACKAGE__ . "::main_html() with \$ce " .
@@ -289,7 +310,7 @@
     $r .= '<link rel="stylesheet" type="text/css" href="/css/start.css" />';
 
     # Bring in RequireJS
-    $r .= _require_js($ce, $cepriv);
+    $r .= $self->_require_js($ce, $cepriv);
 
     $r .= '</head>';
     $r .= '<body>';
@@ -310,7 +331,7 @@
 =cut
 
 sub test_html {
-    my ( $ce, $cepriv ) = @_;
+    my ( $self, $ce, $cepriv ) = @_;
 
     my $r = '';
     
@@ -320,7 +341,7 @@
     $r .= '<link rel="stylesheet" type="text/css" href="/css/qunit.css" />';
 
     # Bring in RequireJS
-    $r .= _require_js($ce, $cepriv);
+    $r .= $self->_require_js($ce, $cepriv);
 
     $r .= '</head><body>';
     $r .= '<div id="qunit"></div>';
@@ -336,7 +357,7 @@
 
 # HTML necessary for RequireJS
 sub _require_js {
-    my ( $ce, $cepriv ) = @_;
+    my ( $self, $ce, $cepriv ) = @_;
 
     my $r = '';
 
@@ -397,6 +418,13 @@
     $r .= 'loginDialogMaxLengthUsername: ' . 
$site->MFILE_WWW_LOGIN_DIALOG_MAXLENGTH_USERNAME . ',';
     $r .= 'loginDialogMaxLengthPassword: ' . 
$site->MFILE_WWW_LOGIN_DIALOG_MAXLENGTH_PASSWORD . ',';
 
+    # session data
+    $r .= 'displaySessionData: ' . ( $site->MFILE_WWW_DISPLAY_SESSION_DATA ? 
'true' : 'false' ) . ',';
+    if ( $site->MFILE_WWW_DISPLAY_SESSION_DATA ) {
+        $r .= 'sessionID: \'' . $self->session_id . '\',';
+        $r .= 'sessionLastSeen: \'' . ( exists $self->session->{'last_seen'} ? 
$self->session->{'last_seen'} : 'never' ) . '\',';
+    }
+
     # REST server URI
     if ( defined( $site->DOCHAZKA_WWW_BACKEND_URI ) ) {
         $r .= 'restURI: \'' . $site->DOCHAZKA_WWW_BACKEND_URI . '\',';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/App-MFILE-WWW-0.152/lib/App/MFILE/WWW.pm 
new/App-MFILE-WWW-0.156/lib/App/MFILE/WWW.pm
--- old/App-MFILE-WWW-0.152/lib/App/MFILE/WWW.pm        2016-11-05 
21:18:27.000000000 +0100
+++ new/App-MFILE-WWW-0.156/lib/App/MFILE/WWW.pm        2017-03-01 
17:12:46.000000000 +0100
@@ -58,11 +58,11 @@
 
 =head1 VERSION
 
-Version 0.152
+Version 0.156
 
 =cut
 
-our $VERSION = '0.152';
+our $VERSION = '0.156';
 our @EXPORT_OK = ( '$VERSION' );
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/App-MFILE-WWW-0.152/share/config/WWW_Config.pm 
new/App-MFILE-WWW-0.156/share/config/WWW_Config.pm
--- old/App-MFILE-WWW-0.152/share/config/WWW_Config.pm  2016-11-05 
21:18:27.000000000 +0100
+++ new/App-MFILE-WWW-0.156/share/config/WWW_Config.pm  2017-03-01 
17:12:46.000000000 +0100
@@ -36,7 +36,9 @@
 # 
 
 # MFILE_APPNAME
-#     the name of this web front-end
+#     the name of this web front-end (no colons; must match the directory
+#     name where application-specific JavaScript files are stored - e.g.
+#     share/js/mfile-www)
 set( 'MFILE_APPNAME', 'mfile-www' );
 
 # MFILE_WWW_DEBUG_MODE
@@ -109,6 +111,10 @@
 #     message that will be displayed for 1 second upon logout
 set( 'MFILE_WWW_LOGOUT_MESSAGE', '<br><br><br><br>App::MFILE::WWW over and 
out.<br><br>Have a lot of fun.<br><br><br><br>' );
 
+# MFILE_WWW_DISPLAY_SESSION_DATA
+#     controls whether session data will be displayed on all screens
+set( 'MFILE_WWW_DISPLAY_SESSION_DATA', 0 );
+
 # JAVASCRIPT (REQUIREJS)
 #     we use RequireJS to bring in dependencies - the following configuration
 #     parameters are required to bring in RequireJS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/App-MFILE-WWW-0.152/share/js/core/ajax.js 
new/App-MFILE-WWW-0.156/share/js/core/ajax.js
--- old/App-MFILE-WWW-0.152/share/js/core/ajax.js       2016-11-05 
21:18:27.000000000 +0100
+++ new/App-MFILE-WWW-0.156/share/js/core/ajax.js       2017-03-01 
17:12:46.000000000 +0100
@@ -109,8 +109,10 @@
                         console.log("Payload is", data.payload);
                         if (data.payload.hasOwnProperty('code')) {
                             if (data.payload.code === "401" ) {
-                                console.log("401 encountered: logging out");
-                                logout();
+                                if (mfao.method !== 'LOGIN') {
+                                    console.log("401 encountered: logging 
out");
+                                    logout();
+                                }
                             }
                         }
                     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/App-MFILE-WWW-0.152/share/js/core/current-user.js 
new/App-MFILE-WWW-0.156/share/js/core/current-user.js
--- old/App-MFILE-WWW-0.152/share/js/core/current-user.js       2016-11-05 
21:18:27.000000000 +0100
+++ new/App-MFILE-WWW-0.156/share/js/core/current-user.js       2017-03-01 
17:12:46.000000000 +0100
@@ -80,8 +80,8 @@
         priv = cf('currentUserPriv'),
         flag1;
 
-    console.log("current-user: ce is ", ce);
-    console.log("current-user: priv is " + priv);
+    // console.log("current-user: ce is ", ce);
+    // console.log("current-user: priv is " + priv);
 
     if (ce) {
         $.extend(cu, ce)
@@ -90,7 +90,7 @@
     // current-user function
     return function (sw, arg) { 
         if (sw === 'obj') {
-            console.log('current-user function called with "obj"');
+            // console.log('current-user function called with "obj"');
             if (arg) {
                 console.log('NOTICE: setting current user object to ', arg);
                 cu = arg;
@@ -100,7 +100,7 @@
             return cu.nick ? cu : null;
         }
         if (sw === 'priv') {
-            console.log('current-user function called with "priv"');
+            // console.log('current-user function called with "priv"');
             if (arg) {
                 console.log('NOTICE: setting current user priv to ' + arg);
                 priv = arg;
@@ -109,14 +109,14 @@
             return priv;
         }
         if (sw === 'flag1') {
-            console.log('current-user function called with "flag1"');
+            // console.log('current-user function called with "flag1"');
             if (arg || arg === 0) {
                 console.log('NOTICE: setting current user flag1 to ' + arg);
                 flag1 = arg;
             }
             return flag1;
         }
-        console.log('current-user function called with no arguments');
+        // console.log('current-user function called with no arguments');
         return {
             'obj': cu,
             'priv': priv,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/App-MFILE-WWW-0.152/share/js/core/html.js 
new/App-MFILE-WWW-0.156/share/js/core/html.js
--- old/App-MFILE-WWW-0.152/share/js/core/html.js       2016-11-05 
21:18:27.000000000 +0100
+++ new/App-MFILE-WWW-0.156/share/js/core/html.js       2017-03-01 
17:12:46.000000000 +0100
@@ -105,6 +105,9 @@
             len = arr ? arr.length : 0;
             console.log("arr has " + len + " members");
             max = arr.reduce(function(prevVal, elem) {
+                if (elem.text === null) {
+                    elem.text = '';
+                }
                 if (elem.text.length > prevVal) {
                     prevVal = elem.text.length;
                 }
@@ -335,6 +338,10 @@
             r += '<div id="noticesline" style="font-size: small">';
             // r += appLib.fillNoticesLine();
             r += '</div>';
+            if (cf('displaySessionData') === true) {
+                r += 'Plack session ID: ' + cf('sessionID');
+                r += ' (last_seen ' + cf('sessionLastSeen') + ')</br>';
+            }
             return r;
         }, // body
 
@@ -390,11 +397,16 @@
                 // determine characters needed for padding (based on longest
                 // entry)
                 if (dfo.entriesRead !== undefined) {
+                    console.log("entriesRead", dfo.entriesRead);
                     allEntries = lib.forceArray(dfo.entriesRead);
                 }
                 if (dfo.entriesWrite !== undefined) {
-                    allEntries = allEntries.concat(dfo.entriesWrite);
+                    console.log("entriesWrite", dfo.entriesWrite);
+                    allEntries = allEntries.concat(
+                        dfo.entriesWrite === null ? [] : dfo.entriesWrite
+                    );
                 }
+                console.log("About to call maxLength() on allEntries", 
allEntries);
                 needed = maxLength(allEntries) + 2;
 
                 // READ-ONLY entries first
@@ -402,7 +414,11 @@
                 console.log("Processing " + len + "read-only dform entries");
                 for (i = 0; i < len; i += 1) {
                     entry = dfo.entriesRead[i];
-                    if (lib.privCheck(entry.aclProfileRead)) {
+                    if (entry.name === 'divider') {
+                        r += Array(entry.maxlen).join(entry.text) + '<br>';
+                    } else if (entry.name === 'emptyLine') {
+                        r += '<br>';
+                    } else if (lib.privCheck(entry.aclProfileRead)) {
                         r += lib.rightPadSpaces(entry.text.concat(':'), 
needed);
                         r += '<span id="' + entry.name + '">';
                         r += valueToDisplay(obj, entry.prop);
@@ -472,7 +488,11 @@
                 if (len > 0) {
                     for (i = 0; i < len; i += 1) {
                         entry = dbo.entries[i];
-                        if (lib.privCheck(entry.aclProfileRead)) {
+                        if (entry.name === 'divider') {
+                            r += Array(entry.maxlen).join(entry.text) + '<br>';
+                        } else if (entry.name === 'emptyLine') {
+                            r += '<br>';
+                        } else if (lib.privCheck(entry.aclProfileRead)) {
                             r += lib.rightPadSpaces(entry.text.concat(':'), 
needed);
                             r += '<span id="' + entry.name + '">';
                             r += valueToDisplay(obj, entry.prop);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/App-MFILE-WWW-0.152/share/js/core/lib.js 
new/App-MFILE-WWW-0.156/share/js/core/lib.js
--- old/App-MFILE-WWW-0.152/share/js/core/lib.js        2016-11-05 
21:18:27.000000000 +0100
+++ new/App-MFILE-WWW-0.156/share/js/core/lib.js        2017-03-01 
17:12:46.000000000 +0100
@@ -59,6 +59,24 @@
 
     return {
 
+        // special entries
+        dividerEntry: {
+            name: 'divider',
+            aclProfileRead: 'passerby',
+            aclProfileWrite: null,
+            text: '-',
+            prop: null,
+            maxlen: 20
+        },
+        emptyLineEntry: {
+            name: 'emptyLine',
+            aclProfileRead: 'passerby',
+            aclProfileWrite: null,
+            text: null,
+            prop: null,
+            maxlen: 20
+        },
+
         // clear the result line
         clearResult: function () {
             $('#result').css('text-align', 'left');
@@ -130,7 +148,7 @@
         // right pad a string with spaces 
         rightPadSpaces: function (toPad, padto) {
             var strToPad = ((toPad === null) ? '' : toPad).toString();
-            console.log("Padding " + strToPad + " to " + padto + " spaces.");
+            // console.log("Padding " + strToPad + " to " + padto + " 
spaces.");
             var sp = '&nbsp;',
                 padSpaces = sp.repeat(padto - String(strToPad).length);
             return strToPad.concat(padSpaces);
@@ -224,8 +242,35 @@
             $("#result").html(msg);
             $('input[name="sel"]').val('');
             $('input[name="entry0"]').focus();
-        }
+        },
 
+        // shallow object copy, from
+        // 
http://blog.soulserv.net/understanding-object-cloning-in-javascript-part-i/
+        shallowCopy: function (original) {
+            // First create an empty object with
+            // same prototype of our original source
+            var clone = Object.create(Object.getPrototypeOf(original)),
+                i, keys = Object.getOwnPropertyNames(original);
+            for (i = 0; i < keys.length; i++) {
+                // copy each property into the clone
+                Object.defineProperty(clone, keys[i],
+                    Object.getOwnPropertyDescriptor(original, keys[i])
+                );
+            }
+            return clone;
+        },
+
+        // boolean function for existing, non-empty string, from 
+        // 
https://www.safaribooksonline.com/library/view/javascript-cookbook/9781449390211/ch01s07.html
+        // true if variable exists, is a string, and has a length greater than 
zero
+        isStringNotEmpty: function (unknownVariable) {
+            if (((typeof unknownVariable !== "undefined") &&
+                 (typeof unknownVariable.valueOf() === "string")) &&
+                 (unknownVariable.length > 0)) {
+                return true;
+            }
+            return false;
+        }
     };
 });
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/App-MFILE-WWW-0.152/share/js/core/login-dialog.js 
new/App-MFILE-WWW-0.156/share/js/core/login-dialog.js
--- old/App-MFILE-WWW-0.152/share/js/core/login-dialog.js       2016-11-05 
21:18:27.000000000 +0100
+++ new/App-MFILE-WWW-0.156/share/js/core/login-dialog.js       2017-03-01 
17:12:46.000000000 +0100
@@ -73,6 +73,7 @@
                     },
                     // failure callback
                     fc = function (st) {
+                        console.log("Login failed", st);
                         $('#result').html('Login failed: code ' + 
st.payload.code + 
                                           ' (' + st.payload.message + ')');
                         $('input[name="nam"]').focus();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/App-MFILE-WWW-0.152/share/js/core/logout.js 
new/App-MFILE-WWW-0.156/share/js/core/logout.js
--- old/App-MFILE-WWW-0.152/share/js/core/logout.js     2016-11-05 
21:18:27.000000000 +0100
+++ new/App-MFILE-WWW-0.156/share/js/core/logout.js     2017-03-01 
17:12:46.000000000 +0100
@@ -50,7 +50,7 @@
     return function () {
         var displayLogoutMessage = function () {
                 $('#mainarea').html(html.logout());
-                setTimeout(function () { location.reload(); }, 500);
+                location.reload();
             },
             rest = {
                 method: 'LOGIN',


Reply via email to