ES6: Port pageInfo to ES6

Change-Id: I84828d5b14c1fc7dfd7cfc1c02ea227fb05e03c4
diff --git a/dev/js/src-lib/pageInfo/demo/index.html b/dev/js/src-lib/pageInfo/demo/index.html
new file mode 100644
index 0000000..011df9b
--- /dev/null
+++ b/dev/js/src-lib/pageInfo/demo/index.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html lang="en">
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1" />
+  <title>PageInfo Demo</title>
+</head>
+<body>
+  <main>
+    <h1>PageInfo Demo</h1>
+    <div id="pageinfo-demo"></div>
+  </main>
+
+  <script type="module" src="./pageInfodemo.js"></script>
+</body>
+</html>
diff --git a/dev/js/src-lib/pageInfo/demo/pageInfodemo.js b/dev/js/src-lib/pageInfo/demo/pageInfodemo.js
new file mode 100644
index 0000000..d329d41
--- /dev/null
+++ b/dev/js/src-lib/pageInfo/demo/pageInfodemo.js
@@ -0,0 +1,39 @@
+import PageInfo from '../pageInfo.js';
+import '../../../../scss/kalamar.scss';
+
+function mountPageInfoDemo() {
+  const host = document.getElementById('pageinfo-demo');
+  if (!host) {
+    return;
+  }
+
+  // Demo source element read by PageInfo
+  let pagination = document.getElementById('pagination');
+  if (!pagination) {
+    pagination = document.createElement('div');
+    pagination.setAttribute('id', 'pagination');
+    pagination.setAttribute('data-page', '3');
+    pagination.setAttribute('data-total', '30');
+    pagination.setAttribute('data-count', '25');
+    host.appendChild(pagination);
+  }
+
+  const pi = new PageInfo();
+
+  const out = document.createElement('pre');
+  out.textContent = [
+    'PageInfo demo',
+    '-------------',
+    'page: ' + pi.page(),
+    'total: ' + pi.total(),
+    'count: ' + pi.count()
+  ].join('\n');
+
+  host.appendChild(out);
+}
+
+if (document.readyState === 'loading') {
+  document.addEventListener('DOMContentLoaded', mountPageInfoDemo);
+} else {
+  mountPageInfoDemo();
+}
diff --git a/dev/js/src-lib/pageInfo/package.json b/dev/js/src-lib/pageInfo/package.json
new file mode 100644
index 0000000..186a704
--- /dev/null
+++ b/dev/js/src-lib/pageInfo/package.json
@@ -0,0 +1,11 @@
+{
+  "name": "kalamar-pageInfo",
+  "version": "0.0.1",
+  "description": "PageInfo for Kalmar",
+  "main": "pageInfo.js",
+  "scripts": {
+    "dev": "vite --open /demo/index.html"
+  },
+  "author": "",
+  "license": "ISC"
+}
diff --git a/dev/js/src-lib/pageInfo/pageInfo.js b/dev/js/src-lib/pageInfo/pageInfo.js
new file mode 100644
index 0000000..79685ce
--- /dev/null
+++ b/dev/js/src-lib/pageInfo/pageInfo.js
@@ -0,0 +1,18 @@
+export default class PageInfo {
+  constructor() {
+    const p = document.getElementById('pagination');
+    this.ds = p ? p.dataset : {};
+  }
+
+  page() {
+    return parseInt(this.ds["page"] || 0);
+  }
+
+  total() {
+    return parseInt(this.ds["total"] || 0);
+  }
+
+  count() {
+    return parseInt(this.ds["count"] || 0);
+  }
+}
diff --git a/dev/js/src-lib/pageInfo/test/pageInfoSpec.js b/dev/js/src-lib/pageInfo/test/pageInfoSpec.js
new file mode 100644
index 0000000..1f5b462
--- /dev/null
+++ b/dev/js/src-lib/pageInfo/test/pageInfoSpec.js
@@ -0,0 +1,31 @@
+import { describe, it, expect } from 'vitest';
+import pageInfoClass from '../pageInfo.js';
+
+  describe('KorAP.PageInfo', function () {
+    it('should be initializable', function () {
+      let pi = new pageInfoClass();
+      expect(pi.total()).toEqual(0);
+      expect(pi.count()).toEqual(0);
+      expect(pi.page()).toEqual(0);
+    });
+
+    it('should be read the correct values', function () {
+
+      // Create pagination element for pagination information
+      let p = document.createElement('div');
+      p.setAttribute('id', 'pagination')
+      p.setAttribute('data-page',3);
+      p.setAttribute('data-total',30);
+      p.setAttribute('data-count',25);
+
+      document.body.appendChild(p);
+      
+      let pi = new pageInfoClass();
+      expect(pi.total()).toEqual(30);
+      expect(pi.count()).toEqual(25);
+      expect(pi.page()).toEqual(3);
+
+      // Recreate initial state
+      document.body.removeChild(p);
+    });
+  });
diff --git a/dev/js/src-lib/pageInfo/vite.config.js b/dev/js/src-lib/pageInfo/vite.config.js
new file mode 100644
index 0000000..5ba5801
--- /dev/null
+++ b/dev/js/src-lib/pageInfo/vite.config.js
@@ -0,0 +1,27 @@
+import { defineConfig } from 'vite';
+import path from 'path';
+
+const scssDir = path.resolve(__dirname, '../../../scss'); // Path to your SCSS directory
+
+export default defineConfig({
+
+  server: {
+    fs: {
+      allow: [
+        scssDir,
+        __dirname
+      ]
+    },
+    port: 3000
+  },
+
+ 
+  css: {
+    preprocessorOptions: {
+      scss: {
+        loadPaths: [scssDir]
+      }
+    }
+  }
+});
+