358 Lotus blogs updated hourly. Who will post next? Home | Downloads | Events | Pods | Blogs | Search | myPL | About 
 
Latest 7 Posts
Practice what you preach – be fast and look sexy
Tue, Dec 16th 2014 336
BTE 102: The Future of Web Development Write Once, Run Everywhere with AngularJS and Domino
Tue, Dec 16th 2014 306
Angular in XPages: Formatting Domino Data Services Date values with app.filter
Sun, Dec 14th 2014 299
Looking forward to IBM ConnectED – AD201: IBM Domino Applications in Bluemix
Thu, Dec 11th 2014 281
Websockets in XPages: Improving on the automated partialRefresh interface
Tue, Dec 9th 2014 475
XPages and Bluemix: Pushing out data changes through automated partialRefresh
Sun, Dec 7th 2014 216
XPages and Bluemix: Sending a targeted Websockets message to specific XPages
Sun, Nov 30th 2014 1968
Top 10
XPages and Bluemix: Sending a targeted Websockets message to specific XPages
Sun, Nov 30th 2014 1968
Creating an XPages Websockets chat client using Bluemix
Sun, Nov 9th 2014 1190
Create your own Watson Q and A example with Bluemix, Webstorm and Jazz Hub
Sun, Oct 12th 2014 563
Integrating the Bluemix Watson Translation service into an XPages application
Sun, Oct 19th 2014 518
Websockets in XPages: Improving on the automated partialRefresh interface
Tue, Dec 9th 2014 475
Binding jQuery code to an XPages partialRefresh using DOM Mutation events
Wed, Oct 29th 2014 396
Arguably the most dangerous thing you could ever do in XPages – let other people use your eval() in their SSJS
Tue, Jun 18th 2013 377
One way to make a responsive XPages viewPanel
Tue, Nov 11th 2014 358
Practice what you preach – be fast and look sexy
Tue, Dec 16th 2014 336
XPages and Bluemix: How to create a Websockets message without being connected to the application
Sun, Nov 16th 2014 326


jQuery in XPages #6 – watermark.js
MarkyRoden    

In this article I will demonstrate how to implement watermark.js by Patrick Wied. Using the power of HTML5 image manipulation we are able to add a watermark graphic to another image and determine position and opacity - even with a JPG!! Of course that means no IE but hey we’re looking forward not backward people!

Introduction

This week I am only going to use one article because this hopefully won’t be too long. I am also going to try and break the article down into a simpler format than before, highlighting the XPages techniques as well as the jQuery techniques. Thanks to David Leedy for the feedback on article format and content.

Demonstration

The effect is demonstrated here

Download

The demonstration database can be downloaded from the link above or from here

Opacity in images

JPEG has been the standard web format for many years and was fantastic when we were able to reduce the size of images to (good enough) over a slow connection. Nowadays though the need to have image capability is opacity. PNG files are now the go to image format for the web and like GIF they support an A(lpha) channel which allows for an opacity to be applied to the image directly.

watermark.js

Looping through all pixels in an image – using JavaScript!

watermark.js uses a new feature in HTML5 whereby each pixel of a graphic can be manipulated from JavaScript, including the addition of an alpha (opactiy) value. The original article by Patrick explains how some very simple loop code can be written to go through each pixel in an image and apply an opacity.

First we have to create a canvas element, add it to the document’s body, set the canvas size to the image size (we have a 500×200 img) and add the image to the canvas.

// get the image
var img = document.getElementById("your-image");
// create and customize the canvas
var canvas = document.createElement("canvas");
canvas.width = 500;
canvas.height = 200;
document.body.appendChild(canvas);
// get the context
var ctx = canvas.getContext("2d");
// draw the image into the canvas
ctx.drawImage(img, 0, 0);

“Ok this is the more interesting part of the solution. We have to access the image data, loop thru all pixels of the image and set the alpha values to the value of our choice. A pixel in the imagedata is represented by four values: red, green, blue, alpha (rgba) therefore we have to change every fourth value.”

// get the image data object
var image = ctx.getImageData(0, 0, 500, 200);
// get the image data values
var imageData = image.data,
length = imageData.length;
// set every fourth value to 50
for(var i=3; i < length; i+=4){
    imageData[i] = 50;
}
// after the manipulation, reset the data
image.data = imageData;
// and put the imagedata back to the canvas
ctx.putImageData(image, 0, 0);

And here’s what we are going to build – an image with another opaque image surfaced on top of is as a watermark.

Our watermarked image

Our watermarked image

The watermark custom control

We are going to build an XPages watermark custom control whereby the developer can determine all the parameters of the effect through the custom properties of the control and therefore not have to change any of the underlying code.

There are 5 parameters which go with the jQuery plugin for watermark.js

  1. “className”: the class of the elements which should get a mark. (Optionally) Default: “watermark”
  2. “position”: “top-left”|”top-right”|”bottom-right”|”bottom-left”. (Optionally) Default: “bottom-right”
  3. “watermark”: an img element which represents your watermark. (Optionally)
  4. “path”: the path to your watermark image. (Optionally)
  5. “opacity”: opacity percentage, no “%” only the number [0-100] (Optionally) Default: 50

So we create the custom control in our database and under the “Property Definition” section we add our “properties”. Each property is a string except the position which is a combobox with pre-defined parameters.

Property Definition of a Custom Control

formWatermark Property Definitions

formWatermark Property Definitions

Entering custom properties to your custom control

And when we add the custom control to our XPage we are able to fill in the parameters for the control

Adding parameter values to our custom control in the XPage

Adding parameter values to our custom control in the XPage

Accessing the custom properties through the XPage

Accessing the custom properties through the XPage is achieved using compositeData.whateverParameterName. As you can see from the above example though not all the fields need to be filled in – so we need to compute their inclusion on the plugin instantiation.

This is the code used to create the effect. It must be added through and output script in the XPage because we need access to the Server Side variable computation which is not available through a Client Side library.

<xp:scriptBlock id="scriptBlock1">
		<xp:this.value><![CDATA[
		$(document).watermark({
			path: '#{compositeData.path}',
			className: '#{compositeData.className}',
			opacity: '#{compositeData.opacity}',
			position: '#{compositeData.position}',
			watermark: '#{compositeData.watermark}'
		});
		]]></xp:this.value>
	</xp:scriptBlock>

Watermark these images
Unless otherwise stated in the parameters the watermark.js effect is applied to all images with the class=”watermark”. Here are my images from the database.

	<xp:table style="width:100%" id="table1">
		<xp:tr>
			<xp:td style="width:50%">
				<xp:image url="/Nin9TV.jpg" id="image1" styleClass="watermark">
				</xp:image>
			</xp:td>
			<xp:td>
				<xp:image url="/xpages.jpg" id="image2" styleClass="watermark">
				</xp:image>
			</xp:td>
		</xp:tr>
	</xp:table>

Demonstration

The demonstration site shows a number of possibilities and allows the developer to change the variables and see the effect.

Demonstration of using watermark.js in an XPage

Demonstration of using watermark.js in an XPage




---------------------
http://xomino.com/2012/04/17/jquery-in-xpages-6-watermark-js/
Apr 17, 2012
31 hits



Recent Blog Posts
336


Practice what you preach – be fast and look sexy
Tue, Dec 16th 2014 5:19p   Mark Roden
As people who know me well may have heard once or twice, user experience is everything. When designing a custom web based application for a customer, there is always an unwritten requirement of “look sexy” and be fast. This week my team and I at PSC successfully rolled out a new global application to a customer and here are some examples of the feedback we received within the first day or so: I tried the new site only this morning and I have only one word: fantastic! It is very u [read] Keywords: domino application network server
306


BTE 102: The Future of Web Development Write Once, Run Everywhere with AngularJS and Domino
Tue, Dec 16th 2014 5:33a   Mark Roden
Mark Leusink and I are very excited to be presenting a session at ConnectED this coming January. This is a great opportunity to come and find out about something a little different from the normal XPages run of the mill development. Mark and I will provide an introduction to the concepts and structure behind Angular.js, and then demonstrate how to build a very simple yet useful application using Angular.js and a Domino data store. We are also going to blow some minds by showing the same ap [read] Keywords: collaboration connections domino ibm xpages application development javascript
299


Angular in XPages: Formatting Domino Data Services Date values with app.filter
Sun, Dec 14th 2014 7:39p   Mark Roden
In this article I will show how we can use the core angular date filter capabilities to format Date format, Domino data into an Angular.js based application Introduction In previous articles I have shown how to create a simple Angular.js application using a notes Domino Data Services feed from a notes database. If we want to add “date” information then we need a way to nicely format it. Using the Angular.js documentation page as reference I will show you how we can do this with Do [read] Keywords: domino notes xpages application database google xml
281


Looking forward to IBM ConnectED – AD201: IBM Domino Applications in Bluemix
Thu, Dec 11th 2014 8:04p   Mark Roden
The session preview tool for ConnectED 2015 has been announced. https://www-950.ibm.com/events/global/ibmced/agenda/preview.html Looking through it I found the following abstract – which unsurprisingly has me really excited !!! AD201: IBM Domino Applications in Bluemix This session will show how Bluemix enables you to deploy Domino applications to the cloud in a matter of minutes. We will demonstrate how to leverage Bluemix buildpacks like XPages and Node.js both to modernize Domino applic [read] Keywords: domino ibm xpages applications
475


Websockets in XPages: Improving on the automated partialRefresh interface
Tue, Dec 9th 2014 5:59p   Mark Roden
In this article I will further discuss how tom improve the user experience of an automated partial Refresh on an user’s XPage. Although these posts were originally about using Bluemix to host the node.js server I kinda feel that the focus has drifted onto websockets more than Bluemix. So in an attempt to make it easier to find I am going to use the Websockets in XPages title moniker for a few posts and then go back to Bluemix :) Introduction In the last article we looked at how to push [read] Keywords: xpages application css interface server wiki
216


XPages and Bluemix: Pushing out data changes through automated partialRefresh
Sun, Dec 7th 2014 7:32p   Mark Roden
In this article I will demonstrate how using targeted websockets messages we are able to refresh user data on pertinent screens within an application, and keep user’s data up to date. Introduction In previous articles I have discussed the creation of a nodejs websockets service within Bluemix and how we are able to send messages to specific web pages using the socket.io rooms capability. Both of those examples were proofs of concept and the messages were generated in the browser via fireb [read] Keywords: xpages ajax application applications css javascript server xml
1968


XPages and Bluemix: Sending a targeted Websockets message to specific XPages
Sun, Nov 30th 2014 6:51p   Mark Roden
In this article I will demonstrate how the use of socket.io “rooms” enables us to send message to users who are only accessing specific pages within our application, rather than blanket messages to all users. Introduction In the previous article I demonstrated how to use a message POST to the node.js server which could then be turned into a chat message and sent out to all users. While this is a nice example it only serves as such and does not have significant business value. In thi [read] Keywords: domino xpages ajax application applications development javascript server xml




230


Multiple Chrome Incognito browsers share the same data
Sun, Nov 23rd 2014 7:15p   Mark Roden
In a previous post I talked about how going porn-mode on your browser is great for a developer. What I didn’t realize until today is that incognito mode is not as unique as I want it to be. We use localStorage in one of the applications we are developing and I had issues when I was opening up multiple Chrome Incognito mode browsers, assuming they were unique….I wanted to compare separate instances in separate windows Mr. Genius (Toby) pointed out to me that localStorage is shared a [read] Keywords: applications
280


x$ – now a part of XPages Extension Library
Tue, Nov 18th 2014 9:16p   Mark Roden
I am very flattered to find out that not only is my x$ OpenNTF xSnippet being used more widely than I realized (over 600 downloads). It now being used in the latest release of the OpenNTF Extension library. If you look here – http://bootstrap4xpages.com/xsp/.ibmxspres/.extlib/responsive/xpages/js/xsp-mixin.js and search for it you will find //jQuery selector that works with XPages IDs //See - http://openntf.org/XSnippets.nsf/snippet.xsp?id=x-jquery-selector-for-xpages function x$(id [read] Keywords: xpages community openntf
321


Got non-XPages design elements? You really should use WebContent.
Mon, Nov 17th 2014 7:20p   Mark Roden
Recently I was able to help explain an issue Russ Maher was having with his application png files - http://xpagetips.blogspot.com/2014/11/got-png-you-may-get-problems.html. It got me thinking that as modern web developers (which is what XPage developers need to be), we should not be using Domino database elements for “web elements”. Back before R8 we all used the Database Files, Style sheets and Database Images as a way to reference files as part of the database. I now believe w [read] Keywords: domino R8 xpages application applications css database development server




Created and Maintained by Yancy Lent - About - Blog Submission - Suggestions - Change Log - Blog Widget - Advertising - Mobile Edition