WebDocumentViewer and WebDocumentThumbnailer controls can be used as JS modules, or as controls in a global namespace. This tutorial shows how to configure your web application to use Atalasoft controls the desired way.
Global namespace
When no module systems are used then approach for WDV initialization is very straightforward. You should manually add scripts with WDV control and all its dependencies on a page and run the application.
Assume that application has an index.html
page in wwwroot
folder and all JS scripts for WDV and dependencies located in wwwroot\lib
folder in separate subfolders, server handler is exposed on <application web address>/wdv
, and image with a name Test.tif
is placed in wwwroot\images
folder. More details about how to gather dependencies and setup server handler can be found in tutorials Demo Application and Demo Application (ASP.NET Core).
Note The optional dependencies like Raphaƫl or ClipboardJS can be skipped only with this approach. AMD and CommonJS modules requires to setup all dependencies whether or not you plan to use text extraction or annotations features in WDV.
index.html
<!DOCTYPE html>
<html>
<head>
<!-- Scripts for Web Viewing -->
<script src="lib/jquery/jquery.min.js" type="text/javascript"></script>
<script src="lib/jquery-ui/jquery-ui.min.js" type="text/javascript"></script>
<script src="lib/raphael/raphael.min.js" type="text/javascript"></script>
<script src="lib/clipboard/clipboard.min.js" type="text/javascript"></script>
<script src="lib/web-document-viewer/atalaWebDocumentViewer.js" type="text/javascript"></script>
<!-- Style for Web Viewer -->
<link href="lib/jquery-ui/css/jquery-ui.min.css" rel="stylesheet" />
<link href="lib/web-document-viewer/atalaWebDocumentViewer.css" rel="stylesheet" />
<script type="text/javascript">
var _viewer;
$(function() {
RunApp();
});
function RunApp() {
// Initialize Web Document Viewer
_viewer = new Atalasoft.Controls.WebDocumentViewer({
parent: $('.atala-document-container'),
toolbarparent: $('.atala-document-toolbar'),
serverurl: '/wdv',
documenturl: 'images/Test.tif'
});
}
</script>
</head>
<body>
<div class="atala-document-toolbar" style="width: 800px;"></div>
<div class="atala-document-container" style="width: 800px; height: 600px;"></div>
</body>
</html>
AMD configuration using RequireJS
When you use AMD module, then all dependencies should be presented because Atalasoft library will try to load them all regardless of WDV/WDT configuration. To do this, you should create a separate JS file, where all dependencies paths are set, and which is contains an entry point for the web application.
So, we should modify the previously created web page the following way. Let's create an app.js
file and place it near index.html
page. Then we add the RequireJS config to it, and copy our RunApp
function to it.
app.js
requirejs.config({
baseUrl: 'lib',
paths: {
'jquery': 'jquery/dist/jquery.min',
'jquery-ui': 'jquery-ui/jquery-ui.min',
'raphael': 'raphael/raphael.min',
'clipboard': 'clipboard/dist/clipboard.min',
'web-document-viewer': 'web-document-viewer/atalaWebDocumentViewer'
}
});
requirejs(["web-document-viewer", "jquery"], function RunApp(Atalasoft, jQuery) {
// Initialize Web Document Viewer
var _viewer = new Atalasoft.Controls.WebDocumentViewer({
parent: jQuery('.atala-document-container'),
toolbarparent: jQuery('.atala-document-toolbar'),
serverurl: '/wdv',
documenturl: 'images/Test.tif'
});
});
The next step is to setup index.html
to load RequireJS and to specify app.js
as entry point. To do this, you should write the following code:
index.html
<!DOCTYPE html>
<html>
<head>
<!-- Style for Web Viewer -->
<link href="lib/jquery-ui/themes/base/jquery-ui.min.css" rel="stylesheet" />
<link href="lib/web-document-viewer/atalaWebDocumentViewer.css" rel="stylesheet" />
<!-- data-main attribute tells require.js to load app.js after require.js loads. -->
<script data-main="app" src="lib/requirejs/require.js" defer="defer"></script>
</head>
<body>
<div class="atala-document-toolbar" style="width: 800px;"></div>
<div class="atala-document-container" style="width: 800px; height: 600px;"></div>
</body>
</html>
That's all. Now the browser will load RequireJS and this framework will the rest job and load WDV script and all its dependencies. It also will notify you about missing dependencies, if you forgot mention some of them, or mention incorrectly with the following error in browser console:
Error text about missing 'clipboard' dependency
require.js:168 Uncaught Error: Script error for "clipboard", needed by: web-document-viewer
https://requirejs.org/docs/errors.html#scripterror
at makeError (require.js:168)
at HTMLScriptElement.onScriptError (require.js:1738)
CommonJS configuration using webpack
While CommonJS modules can't be used in browser directly but they are supported by popular bundling systems like Browserify or webpack. In this section a simple sample how to create web application using webpack is shown.
Since webpack usually installed using npm and because it by default looking for modules in node_modules
folder, let's assume that Atalasoft library installed via npm too. It simplifies our webpack.config.js
file for this tutorial, but you can install libraries using any other way and locate them in different folder. The package.json
file for this application looks the following way:
package.json
{
"name": "atalasoft-webpack-tutorial",
"version": "1.0.0",
"description": "Demo application to show Atalasoft WDV webpack support",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Atalasoft",
"devDependencies": {
"css-loader": "^2.1.1",
"mini-css-extract-plugin": "^0.5.0",
"style-loader": "^0.23.1",
"url-loader": "^1.1.2",
"web-document-viewer": "^11.4.0",
"webpack": "^4.29.6",
"webpack-cli": "^3.3.0"
}
}
Now we are ready to create demo application. First of all, we create an application entry file with the same function RunApp
and store it in src
folder of our project. So it looks like this
./src/app.js
require('web-document-viewer/atalaWebDocumentViewer.css');
require('jquery-ui-dist/jquery-ui.css');
var Atalasoft = require('web-document-viewer');
var jQuery = require('jquery');
// Initialize Web Document Viewer
var _viewer = new Atalasoft.Controls.WebDocumentViewer({
parent: jQuery('.atala-document-container'),
toolbarparent: jQuery('.atala-document-toolbar'),
serverurl: '/wdv',
documenturl: 'images/Test.tif'
});
The first two lines are needed to create a bundle files not only for JS code but also for CSS data.
The next step is to create index.html
file with the same layout as we use in previous samples and save it in wwwroot
folder.
./wwwroot/index.html
<!DOCTYPE html>
<html>
<head>
<!-- Scripts for Web Viewing -->
<script src="bundle.js" type="text/javascript" defer="defer"></script>
<!-- Style for Web Viewer -->
<link href="bundle.css" rel="stylesheet" />
</head>
<body>
<div class="atala-document-toolbar" style="width: 800px;"></div>
<div class="atala-document-container" style="width: 800px; height: 600px;"></div>
</body>
</html>
The final step is to add a webpack magic, and create a bundle from our app.js
file, WebDocumentViewer and all its dependencies. For this we create a configuration file for webpack and place it in the project root.
webpack.config.js
var path = require('path');
var extractCss = require('mini-css-extract-plugin');
module.exports = {
entry: './src/app.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'wwwroot'),
},
resolve: {
alias: {
'jquery-ui': 'jquery-ui-dist/jquery-ui',
'jquery': 'jquery/dist/jquery',
'raphael': 'raphael/raphael',
'clipboard': 'clipboard/dist/clipboard',
'webDocumentViewer': 'web-document-viewer/atalaWebDocumentViewer'
}
},
module: {
rules: [
{
test: /\.css$/,
loader: [extractCss.loader, 'css-loader']
},
{
test:/\.(png|gif)$/,
loader: 'url-loader'
}
]
},
plugins: [
new extractCss({filename: 'bundle.css'})
],
devtool: 'source-map',
stats: 'verbose'
};
After this, we should run webpack from command line, or from your build system and, as result of the operation, the files ./wwwroot/bundle.js
and ./wwwroot/bundle.css
will be created. These files will contain all scripts and styles necessary for our application.