To create the fill pattern image, check out the following website:
http://www.patternify.com/
/*dots*/
.inactive_cell2 {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAEklEQVQImWNgYGD4z0AswK4SAFXuAf8EPy+xAAAAAElFTkSuQmCC");
background-repeat: repeat;
}
To create strips without using any image data,
https://css-tricks.com/stripes-css/
/*stripes*/
.inactive_cell {
background: repeating-linear-gradient( 48deg, #fefefe, #e0e0e1 5px, #eaeaea 5px, #eaeaea 10px );
}
Tuesday, 21 November 2017
Friday, 17 November 2017
Simple pie chart & doughnut chart with SVG + CSS
You can draw a simple pie chart & doughnut chart with SVG + CSS. This is quite simple and straight forward. But the limitation is that it is able to show 2 sections only.
To change the value of the section, look for stroke-dasharray and change the first value.
To change the value of the section, look for stroke-dasharray and change the first value.
.pie2 {
fill: yellow;
stroke: green;
/* max=50 (radius x 2) */
stroke-width: 50;
/* 158 = (radius x 2) x 3.142 = 25 x 2 x 3.142 */
stroke-dasharray: 40 158;
}
.chart2 {
background-color: yellow;
border-radius: 50%;
-webkit-transform: rotate(-90deg);
transform: rotate(-90deg);
}
<svg width="100" height="100" class="chart2">
<circle r="25" cx="50" cy="50" class="pie2"/>
</svg>
To draw a doughnut chart,
.doghnut {
fill: yellow;
stroke: green;
stroke-width: 20;
stroke-dasharray: 180 251;
}
.doghnut_chart {
background-color: yellow;
border-radius: 50%;
-webkit-transform: rotate(-90deg);
transform: rotate(-90deg);
}
<svg width="100" height="100" class="doghnut_chart">
<circle r="40" cx="50" cy="50" class="doghnut"/>
</svg>
Wednesday, 15 November 2017
Javascript that prevents double click on submit button
This is what happening:
var _prev_save_click_ts = null;
function beforeSubmit() {
if (_prev_save_click_ts != null) {
var ts = new Date();
if (ts - _prev_save_click_ts < 500) {
// user is double clicking.
return false;
}
}
_prev_save_click_ts = new Date();
return true;
}
- The user loves "double clicking" on any button even though single click will trigger the action.
- The Internet connection slows down and the user thought that he did not click on the correct button. So, he decided to click it again even though the waiting time is lesser than 1 second (?!).
var _prev_save_click_ts = null;
function beforeSubmit() {
if (_prev_save_click_ts != null) {
var ts = new Date();
if (ts - _prev_save_click_ts < 500) {
// user is double clicking.
return false;
}
}
_prev_save_click_ts = new Date();
return true;
}
Thursday, 9 November 2017
Easiest way to search without using loop
If you have two sets of data and one set is referencing the other set, you will need to do a "double loop" to iterating through the data. But, there is a way to eliminate one loop and shorten the code.
For example, set 1 is the list of employees and set 2 is the list of working shift.
If you are using FOR loop, your codes will look similar to the following:
var employees = [];
employees.push({name: 'Mike', shift_id:'A'});
employees.push({name: 'Micky', shift_id:'B'});
employees.push({name: 'Mini', shift_id:'C'});
var shifts = [];
shifts.push({id: 'A', start_time: '08:00', end_time: '17:00'});
shifts.push({id: 'B', start_time: '09:00', end_time: '18:00'});
var s;
for (var i = 0; i < employees.length; i++) {
s = null;
// look for the shift:
for (var j = 0; j < shifts.length; j++) {
if (shifts[j].id == employees[i].shift_id) {
s = shifts[j];
break;
}
}
if (s != null){
console.log(employees[i].name, s.start_time);
} else {
console.log(employees[i].name, 'Cannot find the shift record');
}
}
The JavaScript object is a key value collection:
o = {};
o['a'] = 'Apple';
o['b'] = 'Banana';
And you can access the value:
console.log(o['b']);
Below is the code that uses the key value collection to store the shift information and it will save us from writing one FOR loop.
var employees = [];
employees.push({name: 'Mike', shift_id:'A'});
employees.push({name: 'Micky', shift_id:'B'});
employees.push({name: 'Mini', shift_id:'C'});
var shifts = {};
shifts['A'] = {id: 'A', start_time: '08:00', end_time: '17:00'};
shifts['B'] = {id: 'B', start_time: '09:00', end_time: '18:00'};
var s;
for (var i = 0; i < employees.length; i++) {
s = null;
// look for the shift:
if (shifts.hasOwnProperty(employees[i].shift_id)) {
s = shifts[employees[i].shift_id];
console.log(employees[i].name, s.start_time);
} else {
console.log(employees[i].name, 'Cannot find the shift record');
}
}
For example, set 1 is the list of employees and set 2 is the list of working shift.
If you are using FOR loop, your codes will look similar to the following:
var employees = [];
employees.push({name: 'Mike', shift_id:'A'});
employees.push({name: 'Micky', shift_id:'B'});
employees.push({name: 'Mini', shift_id:'C'});
var shifts = [];
shifts.push({id: 'A', start_time: '08:00', end_time: '17:00'});
shifts.push({id: 'B', start_time: '09:00', end_time: '18:00'});
var s;
for (var i = 0; i < employees.length; i++) {
s = null;
// look for the shift:
for (var j = 0; j < shifts.length; j++) {
if (shifts[j].id == employees[i].shift_id) {
s = shifts[j];
break;
}
}
if (s != null){
console.log(employees[i].name, s.start_time);
} else {
console.log(employees[i].name, 'Cannot find the shift record');
}
}
The JavaScript object is a key value collection:
o = {};
o['a'] = 'Apple';
o['b'] = 'Banana';
And you can access the value:
console.log(o['b']);
Below is the code that uses the key value collection to store the shift information and it will save us from writing one FOR loop.
var employees = [];
employees.push({name: 'Mike', shift_id:'A'});
employees.push({name: 'Micky', shift_id:'B'});
employees.push({name: 'Mini', shift_id:'C'});
var shifts = {};
shifts['A'] = {id: 'A', start_time: '08:00', end_time: '17:00'};
shifts['B'] = {id: 'B', start_time: '09:00', end_time: '18:00'};
var s;
for (var i = 0; i < employees.length; i++) {
s = null;
// look for the shift:
if (shifts.hasOwnProperty(employees[i].shift_id)) {
s = shifts[employees[i].shift_id];
console.log(employees[i].name, s.start_time);
} else {
console.log(employees[i].name, 'Cannot find the shift record');
}
}
Thursday, 2 November 2017
Printing HTML with JavaScript
You want to allow the user from printing current page directly to the printer and here is the recipe:
1. A print button that calls your print function (written in JavaScript).
2. In your print function, you need to do the following thing:
2.1. Inject a hidden iFrame.
2.2. Set the "src" to the page that you have to print. If you are developing a POS (Point of Sales), you may specify the URL of the receipt page to the "src" together with the receipt number in the query string. For example,
<iframe id="receipt-frame" style="display:none;" src="myReceipt.aspx?refno=123456"/>
Note: the page that you call should return the contents to be printed out. You have two choices to merge the data into the receipt format: (1) do everything at the server side (2) execute client side JavaScript upon page loaded.
2.3. Once you have the content to be printed, you need to call the following function (upon page loaded). This function will send the content to the printer.
window.onafterprint = function() {
window.parent.myPrintJobCompleted();
}
window.print();
In case you want to inform the parent page that the user has printed the content, you must handle the window.onafterprint event. In the example above, it executes the function myPrintJobCompleted (this function will load with the main page).
1. A print button that calls your print function (written in JavaScript).
2. In your print function, you need to do the following thing:
2.1. Inject a hidden iFrame.
2.2. Set the "src" to the page that you have to print. If you are developing a POS (Point of Sales), you may specify the URL of the receipt page to the "src" together with the receipt number in the query string. For example,
<iframe id="receipt-frame" style="display:none;" src="myReceipt.aspx?refno=123456"/>
Note: the page that you call should return the contents to be printed out. You have two choices to merge the data into the receipt format: (1) do everything at the server side (2) execute client side JavaScript upon page loaded.
2.3. Once you have the content to be printed, you need to call the following function (upon page loaded). This function will send the content to the printer.
window.onafterprint = function() {
window.parent.myPrintJobCompleted();
}
window.print();
In case you want to inform the parent page that the user has printed the content, you must handle the window.onafterprint event. In the example above, it executes the function myPrintJobCompleted (this function will load with the main page).
Subscribe to:
Comments (Atom)
We are moving
We are moving this blog to our new blog site: https://ciysys.com/blog/nodejs.htm
-
Overview Usually, we start developing a new system with designing database and then writing codes. If you are not a fan of ORM, you will h...
-
Below is the sample HTML which will hide the URL at the page header when printing with Javascript. <html moznomarginboxes > ...
-
You can draw a simple pie chart & doughnut chart with SVG + CSS. This is quite simple and straight forward. But the limitation is that i...