First Commit
This commit is contained in:
1 parent
5eb9dd037d
commit
2e62c0e60b
11877 files changed
+2035312
No files matched your search
@@ -0,0 +1,269 @@
|
||||
// Flash Player Version Detection - Rev 1.5
|
||||
// Detect Client Browser type
|
||||
// Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
|
||||
var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
|
||||
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
|
||||
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
|
||||
|
||||
function ControlVersion()
|
||||
{
|
||||
var version;
|
||||
var axo;
|
||||
var e;
|
||||
|
||||
// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
|
||||
|
||||
try {
|
||||
// version will be set for 7.X or greater players
|
||||
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
|
||||
version = axo.GetVariable("$version");
|
||||
} catch (e) {
|
||||
}
|
||||
|
||||
if (!version)
|
||||
{
|
||||
try {
|
||||
// version will be set for 6.X players only
|
||||
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
|
||||
|
||||
// installed player is some revision of 6.0
|
||||
// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
|
||||
// so we have to be careful.
|
||||
|
||||
// default to the first public version
|
||||
version = "WIN 6,0,21,0";
|
||||
|
||||
// throws if AllowScripAccess does not exist (introduced in 6.0r47)
|
||||
axo.AllowScriptAccess = "always";
|
||||
|
||||
// safe to call for 6.0r47 or greater
|
||||
version = axo.GetVariable("$version");
|
||||
|
||||
} catch (e) {
|
||||
}
|
||||
}
|
||||
|
||||
if (!version)
|
||||
{
|
||||
try {
|
||||
// version will be set for 4.X or 5.X player
|
||||
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
|
||||
version = axo.GetVariable("$version");
|
||||
} catch (e) {
|
||||
}
|
||||
}
|
||||
|
||||
if (!version)
|
||||
{
|
||||
try {
|
||||
// version will be set for 3.X player
|
||||
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
|
||||
version = "WIN 3,0,18,0";
|
||||
} catch (e) {
|
||||
}
|
||||
}
|
||||
|
||||
if (!version)
|
||||
{
|
||||
try {
|
||||
// version will be set for 2.X player
|
||||
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
|
||||
version = "WIN 2,0,0,11";
|
||||
} catch (e) {
|
||||
version = -1;
|
||||
}
|
||||
}
|
||||
|
||||
return version;
|
||||
}
|
||||
|
||||
// JavaScript helper required to detect Flash Player PlugIn version information
|
||||
function GetSwfVer(){
|
||||
// NS/Opera version >= 3 check for Flash plugin in plugin array
|
||||
var flashVer = -1;
|
||||
|
||||
if (navigator.plugins != null && navigator.plugins.length > 0) {
|
||||
if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
|
||||
var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
|
||||
var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
|
||||
var descArray = flashDescription.split(" ");
|
||||
var tempArrayMajor = descArray[2].split(".");
|
||||
var versionMajor = tempArrayMajor[0];
|
||||
var versionMinor = tempArrayMajor[1];
|
||||
if ( descArray[3] != "" ) {
|
||||
tempArrayMinor = descArray[3].split("r");
|
||||
} else {
|
||||
tempArrayMinor = descArray[4].split("r");
|
||||
}
|
||||
var versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
|
||||
var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
|
||||
}
|
||||
}
|
||||
// MSN/WebTV 2.6 supports Flash 4
|
||||
else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
|
||||
// WebTV 2.5 supports Flash 3
|
||||
else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
|
||||
// older WebTV supports Flash 2
|
||||
else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
|
||||
else if ( isIE && isWin && !isOpera ) {
|
||||
flashVer = ControlVersion();
|
||||
}
|
||||
return flashVer;
|
||||
}
|
||||
|
||||
// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
|
||||
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
|
||||
{
|
||||
versionStr = GetSwfVer();
|
||||
if (versionStr == -1 ) {
|
||||
return false;
|
||||
} else if (versionStr != 0) {
|
||||
if(isIE && isWin && !isOpera) {
|
||||
// Given "WIN 2,0,0,11"
|
||||
tempArray = versionStr.split(" "); // ["WIN", "2,0,0,11"]
|
||||
tempString = tempArray[1]; // "2,0,0,11"
|
||||
versionArray = tempString.split(","); // ['2', '0', '0', '11']
|
||||
} else {
|
||||
versionArray = versionStr.split(".");
|
||||
}
|
||||
var versionMajor = versionArray[0];
|
||||
var versionMinor = versionArray[1];
|
||||
var versionRevision = versionArray[2];
|
||||
|
||||
// is the major.revision >= requested major.revision AND the minor version >= requested minor
|
||||
if (versionMajor > parseFloat(reqMajorVer)) {
|
||||
return true;
|
||||
} else if (versionMajor == parseFloat(reqMajorVer)) {
|
||||
if (versionMinor > parseFloat(reqMinorVer))
|
||||
return true;
|
||||
else if (versionMinor == parseFloat(reqMinorVer)) {
|
||||
if (versionRevision >= parseFloat(reqRevision))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function AC_AddExtension(src, ext)
|
||||
{
|
||||
if (src.indexOf('?') != -1)
|
||||
return src.replace(/\?/, ext+'?');
|
||||
else
|
||||
return src + ext;
|
||||
}
|
||||
|
||||
function AC_Generateobj(objAttrs, params, embedAttrs)
|
||||
{
|
||||
var str = '';
|
||||
if (isIE && isWin && !isOpera)
|
||||
{
|
||||
str += '<object ';
|
||||
for (var i in objAttrs)
|
||||
str += i + '="' + objAttrs[i] + '" ';
|
||||
for (var i in params)
|
||||
str += '><param name="' + i + '" value="' + params[i] + '" /> ';
|
||||
str += '></object>';
|
||||
} else {
|
||||
str += '<embed ';
|
||||
for (var i in embedAttrs)
|
||||
str += i + '="' + embedAttrs[i] + '" ';
|
||||
str += '> </embed>';
|
||||
}
|
||||
document.write(str);
|
||||
|
||||
}
|
||||
|
||||
function AC_FL_RunContent(){
|
||||
var ret =
|
||||
AC_GetArgs
|
||||
( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
|
||||
, "application/x-shockwave-flash"
|
||||
);
|
||||
AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
|
||||
}
|
||||
|
||||
function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
|
||||
var ret = new Object();
|
||||
ret.embedAttrs = new Object();
|
||||
ret.params = new Object();
|
||||
ret.objAttrs = new Object();
|
||||
for (var i=0; i < args.length; i=i+2){
|
||||
var currArg = args[i].toLowerCase();
|
||||
|
||||
switch (currArg){
|
||||
case "classid":
|
||||
break;
|
||||
case "pluginspage":
|
||||
ret.embedAttrs[args[i]] = args[i+1];
|
||||
break;
|
||||
case "src":
|
||||
case "movie":
|
||||
args[i+1] = AC_AddExtension(args[i+1], ext);
|
||||
ret.embedAttrs["src"] = args[i+1];
|
||||
ret.params[srcParamName] = args[i+1];
|
||||
break;
|
||||
case "onafterupdate":
|
||||
case "onbeforeupdate":
|
||||
case "onblur":
|
||||
case "oncellchange":
|
||||
case "onclick":
|
||||
case "ondblClick":
|
||||
case "ondrag":
|
||||
case "ondragend":
|
||||
case "ondragenter":
|
||||
case "ondragleave":
|
||||
case "ondragover":
|
||||
case "ondrop":
|
||||
case "onfinish":
|
||||
case "onfocus":
|
||||
case "onhelp":
|
||||
case "onmousedown":
|
||||
case "onmouseup":
|
||||
case "onmouseover":
|
||||
case "onmousemove":
|
||||
case "onmouseout":
|
||||
case "onkeypress":
|
||||
case "onkeydown":
|
||||
case "onkeyup":
|
||||
case "onload":
|
||||
case "onlosecapture":
|
||||
case "onpropertychange":
|
||||
case "onreadystatechange":
|
||||
case "onrowsdelete":
|
||||
case "onrowenter":
|
||||
case "onrowexit":
|
||||
case "onrowsinserted":
|
||||
case "onstart":
|
||||
case "onscroll":
|
||||
case "onbeforeeditfocus":
|
||||
case "onactivate":
|
||||
case "onbeforedeactivate":
|
||||
case "ondeactivate":
|
||||
case "type":
|
||||
case "codebase":
|
||||
case "id":
|
||||
ret.objAttrs[args[i]] = args[i+1];
|
||||
break;
|
||||
case "width":
|
||||
case "height":
|
||||
case "align":
|
||||
case "vspace":
|
||||
case "hspace":
|
||||
case "class":
|
||||
case "title":
|
||||
case "accesskey":
|
||||
case "name":
|
||||
case "tabindex":
|
||||
ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
|
||||
break;
|
||||
default:
|
||||
ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
|
||||
}
|
||||
}
|
||||
ret.objAttrs["classid"] = classid;
|
||||
if (mimeType) ret.embedAttrs["type"] = mimeType;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,147 @@
|
||||
// ===================================================================
|
||||
// Author: Matt Kruse <matt@mattkruse.com>
|
||||
// WWW: http://www.mattkruse.com/
|
||||
//
|
||||
// NOTICE: You may use this code for any purpose, commercial or
|
||||
// private, without any further permission from the author. You may
|
||||
// remove this notice from your final code if you wish, however it is
|
||||
// appreciated by the author if at least my web site address is kept.
|
||||
//
|
||||
// You may *NOT* re-distribute this code in any way except through its
|
||||
// use. That means, you can include it in your product, or your web
|
||||
// site, or any other form where the code is actually being used. You
|
||||
// may not put the plain javascript up on your site for download or
|
||||
// include it in your javascript libraries for download.
|
||||
// If you wish to share this code with others, please just point them
|
||||
// to the URL instead.
|
||||
// Please DO NOT link directly to my .js files from your site. Copy
|
||||
// the files to your server and use them there. Thank you.
|
||||
// ===================================================================
|
||||
|
||||
/*
|
||||
AnchorPosition.js
|
||||
Author: Matt Kruse
|
||||
Last modified: 10/11/02
|
||||
|
||||
DESCRIPTION: These functions find the position of an <A> tag in a document,
|
||||
so other elements can be positioned relative to it.
|
||||
|
||||
COMPATABILITY: Netscape 4.x,6.x,Mozilla, IE 5.x,6.x on Windows. Some small
|
||||
positioning errors - usually with Window positioning - occur on the
|
||||
Macintosh platform.
|
||||
|
||||
FUNCTIONS:
|
||||
getAnchorPosition(anchorname)
|
||||
Returns an Object() having .x and .y properties of the pixel coordinates
|
||||
of the upper-left corner of the anchor. Position is relative to the PAGE.
|
||||
|
||||
getAnchorWindowPosition(anchorname)
|
||||
Returns an Object() having .x and .y properties of the pixel coordinates
|
||||
of the upper-left corner of the anchor, relative to the WHOLE SCREEN.
|
||||
|
||||
NOTES:
|
||||
|
||||
1) For popping up separate browser windows, use getAnchorWindowPosition.
|
||||
Otherwise, use getAnchorPosition
|
||||
|
||||
2) Your anchor tag MUST contain both NAME and ID attributes which are the
|
||||
same. For example:
|
||||
<A NAME="test" ID="test"> </A>
|
||||
|
||||
3) There must be at least a space between <A> </A> for IE5.5 to see the
|
||||
anchor tag correctly. Do not do <A></A> with no space.
|
||||
*/
|
||||
|
||||
// getAnchorPosition(anchorname)
|
||||
// This function returns an object having .x and .y properties which are the coordinates
|
||||
// of the named anchor, relative to the page.
|
||||
function getAnchorPosition(anchorname) {
|
||||
// This function will return an Object with x and y properties
|
||||
var useWindow=false;
|
||||
var coordinates=new Object();
|
||||
var x=0,y=0;
|
||||
// Browser capability sniffing
|
||||
var use_gebi=false, use_css=false, use_layers=false;
|
||||
if (document.getElementById) { use_gebi=true; }
|
||||
else if (document.all) { use_css=true; }
|
||||
else if (document.layers) { use_layers=true; }
|
||||
// Logic to find position
|
||||
if (use_gebi && document.all) {
|
||||
x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
|
||||
y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);
|
||||
}
|
||||
else if (use_gebi) {
|
||||
var o=document.getElementById(anchorname);
|
||||
x=AnchorPosition_getPageOffsetLeft(o);
|
||||
y=AnchorPosition_getPageOffsetTop(o);
|
||||
}
|
||||
else if (use_css) {
|
||||
x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
|
||||
y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);
|
||||
}
|
||||
else if (use_layers) {
|
||||
var found=0;
|
||||
for (var i=0; i<document.anchors.length; i++) {
|
||||
if (document.anchors[i].name==anchorname) { found=1; break; }
|
||||
}
|
||||
if (found==0) {
|
||||
coordinates.x=0; coordinates.y=0; return coordinates;
|
||||
}
|
||||
x=document.anchors[i].x;
|
||||
y=document.anchors[i].y;
|
||||
}
|
||||
else {
|
||||
coordinates.x=0; coordinates.y=0; return coordinates;
|
||||
}
|
||||
coordinates.x=x;
|
||||
coordinates.y=y;
|
||||
return coordinates;
|
||||
}
|
||||
|
||||
// getAnchorWindowPosition(anchorname)
|
||||
// This function returns an object having .x and .y properties which are the coordinates
|
||||
// of the named anchor, relative to the window
|
||||
function getAnchorWindowPosition(anchorname) {
|
||||
var coordinates=getAnchorPosition(anchorname);
|
||||
var x=0;
|
||||
var y=0;
|
||||
if (document.getElementById) {
|
||||
if (isNaN(window.screenX)) {
|
||||
x=coordinates.x-document.body.scrollLeft+window.screenLeft;
|
||||
y=coordinates.y-document.body.scrollTop+window.screenTop;
|
||||
}
|
||||
else {
|
||||
x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;
|
||||
y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;
|
||||
}
|
||||
}
|
||||
else if (document.all) {
|
||||
x=coordinates.x-document.body.scrollLeft+window.screenLeft;
|
||||
y=coordinates.y-document.body.scrollTop+window.screenTop;
|
||||
}
|
||||
else if (document.layers) {
|
||||
x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;
|
||||
y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;
|
||||
}
|
||||
coordinates.x=x;
|
||||
coordinates.y=y;
|
||||
return coordinates;
|
||||
}
|
||||
|
||||
// Functions for IE to get position of an object
|
||||
function AnchorPosition_getPageOffsetLeft (el) {
|
||||
var ol=el.offsetLeft;
|
||||
while ((el=el.offsetParent) != null) { ol += el.offsetLeft; }
|
||||
return ol;
|
||||
}
|
||||
function AnchorPosition_getWindowOffsetLeft (el) {
|
||||
return AnchorPosition_getPageOffsetLeft(el)-document.body.scrollLeft;
|
||||
}
|
||||
function AnchorPosition_getPageOffsetTop (el) {
|
||||
var ot=el.offsetTop;
|
||||
while((el=el.offsetParent) != null) { ot += el.offsetTop; }
|
||||
return ot;
|
||||
}
|
||||
function AnchorPosition_getWindowOffsetTop (el) {
|
||||
return AnchorPosition_getPageOffsetTop(el)-document.body.scrollTop;
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,692 @@
|
||||
// ===================================================================
|
||||
// Author: Matt Kruse <matt@mattkruse.com>
|
||||
// WWW: http://www.mattkruse.com/
|
||||
//
|
||||
// NOTICE: You may use this code for any purpose, commercial or
|
||||
// private, without any further permission from the author. You may
|
||||
// remove this notice from your final code if you wish, however it is
|
||||
// appreciated by the author if at least my web site address is kept.
|
||||
//
|
||||
// You may *NOT* re-distribute this code in any way except through its
|
||||
// use. That means, you can include it in your product, or your web
|
||||
// site, or any other form where the code is actually being used. You
|
||||
// may not put the plain javascript up on your site for download or
|
||||
// include it in your javascript libraries for download.
|
||||
// If you wish to share this code with others, please just point them
|
||||
// to the URL instead.
|
||||
// Please DO NOT link directly to my .js files from your site. Copy
|
||||
// the files to your server and use them there. Thank you.
|
||||
// ===================================================================
|
||||
|
||||
// HISTORY
|
||||
// ------------------------------------------------------------------
|
||||
// Feb 7, 2005: Fixed a CSS styles to use px unit
|
||||
// March 29, 2004: Added check in select() method for the form field
|
||||
// being disabled. If it is, just return and don't do anything.
|
||||
// March 24, 2004: Fixed bug - when month name and abbreviations were
|
||||
// changed, date format still used original values.
|
||||
// January 26, 2004: Added support for drop-down month and year
|
||||
// navigation (Thanks to Chris Reid for the idea)
|
||||
// September 22, 2003: Fixed a minor problem in YEAR calendar with
|
||||
// CSS prefix.
|
||||
// August 19, 2003: Renamed the function to get styles, and made it
|
||||
// work correctly without an object reference
|
||||
// August 18, 2003: Changed showYearNavigation and
|
||||
// showYearNavigationInput to optionally take an argument of
|
||||
// true or false
|
||||
// July 31, 2003: Added text input option for year navigation.
|
||||
// Added a per-calendar CSS prefix option to optionally use
|
||||
// different styles for different calendars.
|
||||
// July 29, 2003: Fixed bug causing the Today link to be clickable
|
||||
// even though today falls in a disabled date range.
|
||||
// Changed formatting to use pure CSS, allowing greater control
|
||||
// over look-and-feel options.
|
||||
// June 11, 2003: Fixed bug causing the Today link to be unselectable
|
||||
// under certain cases when some days of week are disabled
|
||||
// March 14, 2003: Added ability to disable individual dates or date
|
||||
// ranges, display as light gray and strike-through
|
||||
// March 14, 2003: Removed dependency on graypixel.gif and instead
|
||||
/// use table border coloring
|
||||
// March 12, 2003: Modified showCalendar() function to allow optional
|
||||
// start-date parameter
|
||||
// March 11, 2003: Modified select() function to allow optional
|
||||
// start-date parameter
|
||||
/*
|
||||
DESCRIPTION: This object implements a popup calendar to allow the user to
|
||||
select a date, month, quarter, or year.
|
||||
|
||||
COMPATABILITY: Works with Netscape 4.x, 6.x, IE 5.x on Windows. Some small
|
||||
positioning errors - usually with Window positioning - occur on the
|
||||
Macintosh platform.
|
||||
The calendar can be modified to work for any location in the world by
|
||||
changing which weekday is displayed as the first column, changing the month
|
||||
names, and changing the column headers for each day.
|
||||
|
||||
USAGE:
|
||||
// Create a new CalendarPopup object of type WINDOW
|
||||
var cal = new CalendarPopup();
|
||||
|
||||
// Create a new CalendarPopup object of type DIV using the DIV named 'mydiv'
|
||||
var cal = new CalendarPopup('mydiv');
|
||||
|
||||
// Easy method to link the popup calendar with an input box.
|
||||
cal.select(inputObject, anchorname, dateFormat);
|
||||
// Same method, but passing a default date other than the field's current value
|
||||
cal.select(inputObject, anchorname, dateFormat, '01/02/2000');
|
||||
// This is an example call to the popup calendar from a link to populate an
|
||||
// input box. Note that to use this, date.js must also be included!!
|
||||
<A HREF="#" onClick="cal.select(document.forms[0].date,'anchorname','MM/dd/yyyy'); return false;">Select</A>
|
||||
|
||||
// Set the type of date select to be used. By default it is 'date'.
|
||||
cal.setDisplayType(type);
|
||||
|
||||
// When a date, month, quarter, or year is clicked, a function is called and
|
||||
// passed the details. You must write this function, and tell the calendar
|
||||
// popup what the function name is.
|
||||
// Function to be called for 'date' select receives y, m, d
|
||||
cal.setReturnFunction(functionname);
|
||||
// Function to be called for 'month' select receives y, m
|
||||
cal.setReturnMonthFunction(functionname);
|
||||
// Function to be called for 'quarter' select receives y, q
|
||||
cal.setReturnQuarterFunction(functionname);
|
||||
// Function to be called for 'year' select receives y
|
||||
cal.setReturnYearFunction(functionname);
|
||||
|
||||
// Show the calendar relative to a given anchor
|
||||
cal.showCalendar(anchorname);
|
||||
|
||||
// Hide the calendar. The calendar is set to autoHide automatically
|
||||
cal.hideCalendar();
|
||||
|
||||
// Set the month names to be used. Default are English month names
|
||||
cal.setMonthNames("January","February","March",...);
|
||||
|
||||
// Set the month abbreviations to be used. Default are English month abbreviations
|
||||
cal.setMonthAbbreviations("Jan","Feb","Mar",...);
|
||||
|
||||
// Show navigation for changing by the year, not just one month at a time
|
||||
cal.showYearNavigation();
|
||||
|
||||
// Show month and year dropdowns, for quicker selection of month of dates
|
||||
cal.showNavigationDropdowns();
|
||||
|
||||
// Set the text to be used above each day column. The days start with
|
||||
// sunday regardless of the value of WeekStartDay
|
||||
cal.setDayHeaders("S","M","T",...);
|
||||
|
||||
// Set the day for the first column in the calendar grid. By default this
|
||||
// is Sunday (0) but it may be changed to fit the conventions of other
|
||||
// countries.
|
||||
cal.setWeekStartDay(1); // week is Monday - Sunday
|
||||
|
||||
// Set the weekdays which should be disabled in the 'date' select popup. You can
|
||||
// then allow someone to only select week end dates, or Tuedays, for example
|
||||
cal.setDisabledWeekDays(0,1); // To disable selecting the 1st or 2nd days of the week
|
||||
|
||||
// Selectively disable individual days or date ranges. Disabled days will not
|
||||
// be clickable, and show as strike-through text on current browsers.
|
||||
// Date format is any format recognized by parseDate() in date.js
|
||||
// Pass a single date to disable:
|
||||
cal.addDisabledDates("2003-01-01");
|
||||
// Pass null as the first parameter to mean "anything up to and including" the
|
||||
// passed date:
|
||||
cal.addDisabledDates(null, "01/02/03");
|
||||
// Pass null as the second parameter to mean "including the passed date and
|
||||
// anything after it:
|
||||
cal.addDisabledDates("Jan 01, 2003", null);
|
||||
// Pass two dates to disable all dates inbetween and including the two
|
||||
cal.addDisabledDates("January 01, 2003", "Dec 31, 2003");
|
||||
|
||||
// When the 'year' select is displayed, set the number of years back from the
|
||||
// current year to start listing years. Default is 2.
|
||||
// This is also used for year drop-down, to decide how many years +/- to display
|
||||
cal.setYearSelectStartOffset(2);
|
||||
|
||||
// Text for the word "Today" appearing on the calendar
|
||||
cal.setTodayText("Today");
|
||||
|
||||
// The calendar uses CSS classes for formatting. If you want your calendar to
|
||||
// have unique styles, you can set the prefix that will be added to all the
|
||||
// classes in the output.
|
||||
// For example, normal output may have this:
|
||||
// <SPAN CLASS="cpTodayTextDisabled">Today<SPAN>
|
||||
// But if you set the prefix like this:
|
||||
cal.setCssPrefix("Test");
|
||||
// The output will then look like:
|
||||
// <SPAN CLASS="TestcpTodayTextDisabled">Today<SPAN>
|
||||
// And you can define that style somewhere in your page.
|
||||
|
||||
// When using Year navigation, you can make the year be an input box, so
|
||||
// the user can manually change it and jump to any year
|
||||
cal.showYearNavigationInput();
|
||||
|
||||
// Set the calendar offset to be different than the default. By default it
|
||||
// will appear just below and to the right of the anchorname. So if you have
|
||||
// a text box where the date will go and and anchor immediately after the
|
||||
// text box, the calendar will display immediately under the text box.
|
||||
cal.offsetX = 20;
|
||||
cal.offsetY = 20;
|
||||
|
||||
NOTES:
|
||||
1) Requires the functions in AnchorPosition.js and PopupWindow.js
|
||||
|
||||
2) Your anchor tag MUST contain both NAME and ID attributes which are the
|
||||
same. For example:
|
||||
<A NAME="test" ID="test"> </A>
|
||||
|
||||
3) There must be at least a space between <A> </A> for IE5.5 to see the
|
||||
anchor tag correctly. Do not do <A></A> with no space.
|
||||
|
||||
4) When a CalendarPopup object is created, a handler for 'onmouseup' is
|
||||
attached to any event handler you may have already defined. Do NOT define
|
||||
an event handler for 'onmouseup' after you define a CalendarPopup object
|
||||
or the autoHide() will not work correctly.
|
||||
|
||||
5) The calendar popup display uses style sheets to make it look nice.
|
||||
|
||||
*/
|
||||
|
||||
// CONSTRUCTOR for the CalendarPopup Object
|
||||
function CalendarPopup() {
|
||||
var c;
|
||||
if (arguments.length>0) {
|
||||
c = new PopupWindow(arguments[0]);
|
||||
}
|
||||
else {
|
||||
c = new PopupWindow();
|
||||
c.setSize(150,175);
|
||||
}
|
||||
c.offsetX = -152;
|
||||
c.offsetY = 25;
|
||||
c.autoHide();
|
||||
// Calendar-specific properties
|
||||
c.monthNames = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
|
||||
c.monthAbbreviations = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
|
||||
c.dayHeaders = new Array("S","M","T","W","T","F","S");
|
||||
c.returnFunction = "CP_tmpReturnFunction";
|
||||
c.returnMonthFunction = "CP_tmpReturnMonthFunction";
|
||||
c.returnQuarterFunction = "CP_tmpReturnQuarterFunction";
|
||||
c.returnYearFunction = "CP_tmpReturnYearFunction";
|
||||
c.weekStartDay = 0;
|
||||
c.isShowYearNavigation = false;
|
||||
c.displayType = "date";
|
||||
c.disabledWeekDays = new Object();
|
||||
c.disabledDatesExpression = "";
|
||||
c.yearSelectStartOffset = 2;
|
||||
c.currentDate = null;
|
||||
c.todayText="Today";
|
||||
c.cssPrefix="";
|
||||
c.isShowNavigationDropdowns=false;
|
||||
c.isShowYearNavigationInput=false;
|
||||
window.CP_calendarObject = null;
|
||||
window.CP_targetInput = null;
|
||||
window.CP_dateFormat = "MM/dd/yyyy";
|
||||
// Method mappings
|
||||
c.copyMonthNamesToWindow = CP_copyMonthNamesToWindow;
|
||||
c.setReturnFunction = CP_setReturnFunction;
|
||||
c.setReturnMonthFunction = CP_setReturnMonthFunction;
|
||||
c.setReturnQuarterFunction = CP_setReturnQuarterFunction;
|
||||
c.setReturnYearFunction = CP_setReturnYearFunction;
|
||||
c.setMonthNames = CP_setMonthNames;
|
||||
c.setMonthAbbreviations = CP_setMonthAbbreviations;
|
||||
c.setDayHeaders = CP_setDayHeaders;
|
||||
c.setWeekStartDay = CP_setWeekStartDay;
|
||||
c.setDisplayType = CP_setDisplayType;
|
||||
c.setDisabledWeekDays = CP_setDisabledWeekDays;
|
||||
c.addDisabledDates = CP_addDisabledDates;
|
||||
c.setYearSelectStartOffset = CP_setYearSelectStartOffset;
|
||||
c.setTodayText = CP_setTodayText;
|
||||
c.showYearNavigation = CP_showYearNavigation;
|
||||
c.showCalendar = CP_showCalendar;
|
||||
c.hideCalendar = CP_hideCalendar;
|
||||
c.getStyles = getCalendarStyles;
|
||||
c.refreshCalendar = CP_refreshCalendar;
|
||||
c.getCalendar = CP_getCalendar;
|
||||
c.select = CP_select;
|
||||
c.setCssPrefix = CP_setCssPrefix;
|
||||
c.showNavigationDropdowns = CP_showNavigationDropdowns;
|
||||
c.showYearNavigationInput = CP_showYearNavigationInput;
|
||||
c.copyMonthNamesToWindow();
|
||||
// Return the object
|
||||
return c;
|
||||
}
|
||||
function CP_copyMonthNamesToWindow() {
|
||||
// Copy these values over to the date.js
|
||||
if (typeof(window.MONTH_NAMES)!="undefined" && window.MONTH_NAMES!=null) {
|
||||
window.MONTH_NAMES = new Array();
|
||||
for (var i=0; i<this.monthNames.length; i++) {
|
||||
window.MONTH_NAMES[window.MONTH_NAMES.length] = this.monthNames[i];
|
||||
}
|
||||
for (var i=0; i<this.monthAbbreviations.length; i++) {
|
||||
window.MONTH_NAMES[window.MONTH_NAMES.length] = this.monthAbbreviations[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
// Temporary default functions to be called when items clicked, so no error is thrown
|
||||
function CP_tmpReturnFunction(y,m,d) {
|
||||
if (window.CP_targetInput!=null) {
|
||||
var dt = new Date(y,m-1,d,0,0,0);
|
||||
if (window.CP_calendarObject!=null) { window.CP_calendarObject.copyMonthNamesToWindow(); }
|
||||
window.CP_targetInput.value = formatDate(dt,window.CP_dateFormat);
|
||||
}
|
||||
else {
|
||||
alert('Use setReturnFunction() to define which function will get the clicked results!');
|
||||
}
|
||||
}
|
||||
function CP_tmpReturnMonthFunction(y,m) {
|
||||
alert('Use setReturnMonthFunction() to define which function will get the clicked results!\nYou clicked: year='+y+' , month='+m);
|
||||
}
|
||||
function CP_tmpReturnQuarterFunction(y,q) {
|
||||
alert('Use setReturnQuarterFunction() to define which function will get the clicked results!\nYou clicked: year='+y+' , quarter='+q);
|
||||
}
|
||||
function CP_tmpReturnYearFunction(y) {
|
||||
alert('Use setReturnYearFunction() to define which function will get the clicked results!\nYou clicked: year='+y);
|
||||
}
|
||||
|
||||
// Set the name of the functions to call to get the clicked item
|
||||
function CP_setReturnFunction(name) { this.returnFunction = name; }
|
||||
function CP_setReturnMonthFunction(name) { this.returnMonthFunction = name; }
|
||||
function CP_setReturnQuarterFunction(name) { this.returnQuarterFunction = name; }
|
||||
function CP_setReturnYearFunction(name) { this.returnYearFunction = name; }
|
||||
|
||||
// Over-ride the built-in month names
|
||||
function CP_setMonthNames() {
|
||||
for (var i=0; i<arguments.length; i++) { this.monthNames[i] = arguments[i]; }
|
||||
this.copyMonthNamesToWindow();
|
||||
}
|
||||
|
||||
// Over-ride the built-in month abbreviations
|
||||
function CP_setMonthAbbreviations() {
|
||||
for (var i=0; i<arguments.length; i++) { this.monthAbbreviations[i] = arguments[i]; }
|
||||
this.copyMonthNamesToWindow();
|
||||
}
|
||||
|
||||
// Over-ride the built-in column headers for each day
|
||||
function CP_setDayHeaders() {
|
||||
for (var i=0; i<arguments.length; i++) { this.dayHeaders[i] = arguments[i]; }
|
||||
}
|
||||
|
||||
// Set the day of the week (0-7) that the calendar display starts on
|
||||
// This is for countries other than the US whose calendar displays start on Monday(1), for example
|
||||
function CP_setWeekStartDay(day) { this.weekStartDay = day; }
|
||||
|
||||
// Show next/last year navigation links
|
||||
function CP_showYearNavigation() { this.isShowYearNavigation = (arguments.length>0)?arguments[0]:true; }
|
||||
|
||||
// Which type of calendar to display
|
||||
function CP_setDisplayType(type) {
|
||||
if (type!="date"&&type!="week-end"&&type!="month"&&type!="quarter"&&type!="year") { alert("Invalid display type! Must be one of: date,week-end,month,quarter,year"); return false; }
|
||||
this.displayType=type;
|
||||
}
|
||||
|
||||
// How many years back to start by default for year display
|
||||
function CP_setYearSelectStartOffset(num) { this.yearSelectStartOffset=num; }
|
||||
|
||||
// Set which weekdays should not be clickable
|
||||
function CP_setDisabledWeekDays() {
|
||||
this.disabledWeekDays = new Object();
|
||||
for (var i=0; i<arguments.length; i++) { this.disabledWeekDays[arguments[i]] = true; }
|
||||
}
|
||||
|
||||
// Disable individual dates or ranges
|
||||
// Builds an internal logical test which is run via eval() for efficiency
|
||||
function CP_addDisabledDates(start, end) {
|
||||
if (arguments.length==1) { end=start; }
|
||||
if (start==null && end==null) { return; }
|
||||
if (this.disabledDatesExpression!="") { this.disabledDatesExpression+= "||"; }
|
||||
if (start!=null) { start = parseDate(start); start=""+start.getFullYear()+LZ(start.getMonth()+1)+LZ(start.getDate());}
|
||||
if (end!=null) { end=parseDate(end); end=""+end.getFullYear()+LZ(end.getMonth()+1)+LZ(end.getDate());}
|
||||
if (start==null) { this.disabledDatesExpression+="(ds<="+end+")"; }
|
||||
else if (end ==null) { this.disabledDatesExpression+="(ds>="+start+")"; }
|
||||
else { this.disabledDatesExpression+="(ds>="+start+"&&ds<="+end+")"; }
|
||||
}
|
||||
|
||||
// Set the text to use for the "Today" link
|
||||
function CP_setTodayText(text) {
|
||||
this.todayText = text;
|
||||
}
|
||||
|
||||
// Set the prefix to be added to all CSS classes when writing output
|
||||
function CP_setCssPrefix(val) {
|
||||
this.cssPrefix = val;
|
||||
}
|
||||
|
||||
// Show the navigation as an dropdowns that can be manually changed
|
||||
function CP_showNavigationDropdowns() { this.isShowNavigationDropdowns = (arguments.length>0)?arguments[0]:true; }
|
||||
|
||||
// Show the year navigation as an input box that can be manually changed
|
||||
function CP_showYearNavigationInput() { this.isShowYearNavigationInput = (arguments.length>0)?arguments[0]:true; }
|
||||
|
||||
// Hide a calendar object
|
||||
function CP_hideCalendar() {
|
||||
if (arguments.length > 0) { window.popupWindowObjects[arguments[0]].hidePopup(); }
|
||||
else { this.hidePopup(); }
|
||||
}
|
||||
|
||||
// Refresh the contents of the calendar display
|
||||
function CP_refreshCalendar(index) {
|
||||
var calObject = window.popupWindowObjects[index];
|
||||
if (arguments.length>1) {
|
||||
calObject.populate(calObject.getCalendar(arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]));
|
||||
}
|
||||
else {
|
||||
calObject.populate(calObject.getCalendar());
|
||||
}
|
||||
calObject.refresh();
|
||||
}
|
||||
|
||||
// Populate the calendar and display it
|
||||
function CP_showCalendar(anchorname) {
|
||||
if (arguments.length>1) {
|
||||
if (arguments[1]==null||arguments[1]=="") {
|
||||
this.currentDate=new Date();
|
||||
}
|
||||
else {
|
||||
this.currentDate=new Date(parseDate(arguments[1]));
|
||||
}
|
||||
}
|
||||
this.populate(this.getCalendar());
|
||||
this.showPopup(anchorname);
|
||||
}
|
||||
|
||||
// Simple method to interface popup calendar with a text-entry box
|
||||
function CP_select(inputobj, linkname, format) {
|
||||
var selectedDate=(arguments.length>3)?arguments[3]:null;
|
||||
if (!window.getDateFromFormat) {
|
||||
alert("calendar.select: To use this method you must also include 'date.js' for date formatting");
|
||||
return;
|
||||
}
|
||||
if (this.displayType!="date"&&this.displayType!="week-end") {
|
||||
alert("calendar.select: This function can only be used with displayType 'date' or 'week-end'");
|
||||
return;
|
||||
}
|
||||
if (inputobj.type!="text" && inputobj.type!="hidden" && inputobj.type!="textarea") {
|
||||
alert("calendar.select: Input object passed is not a valid form input object");
|
||||
window.CP_targetInput=null;
|
||||
return;
|
||||
}
|
||||
if (inputobj.disabled) { return; } // Can't use calendar input on disabled form input!
|
||||
window.CP_targetInput = inputobj;
|
||||
window.CP_calendarObject = this;
|
||||
this.currentDate=null;
|
||||
var time=0;
|
||||
if (selectedDate!=null) {
|
||||
time = getDateFromFormat(selectedDate,format)
|
||||
}
|
||||
else if (inputobj.value!="") {
|
||||
time = getDateFromFormat(inputobj.value,format);
|
||||
}
|
||||
if (selectedDate!=null || inputobj.value!="") {
|
||||
if (time==0) { this.currentDate=null; }
|
||||
else { this.currentDate=new Date(time); }
|
||||
}
|
||||
window.CP_dateFormat = format;
|
||||
this.showCalendar(linkname);
|
||||
}
|
||||
|
||||
// Get style block needed to display the calendar correctly
|
||||
function getCalendarStyles() {
|
||||
var result = "";
|
||||
var p = "";
|
||||
if (this!=null && typeof(this.cssPrefix)!="undefined" && this.cssPrefix!=null && this.cssPrefix!="") { p=this.cssPrefix; }
|
||||
result += "<STYLE>\n";
|
||||
result += "."+p+"cpYearNavigation,."+p+"cpMonthNavigation { background-color:#C0C0C0; text-align:center; vertical-align:middle; text-decoration:none; color:#000000; font-weight:bold; }\n";
|
||||
result += "."+p+"cpDayColumnHeader, ."+p+"cpYearNavigation,."+p+"cpMonthNavigation,."+p+"cpCurrentMonthDate,."+p+"cpCurrentMonthDateDisabled,."+p+"cpOtherMonthDate,."+p+"cpOtherMonthDateDisabled,."+p+"cpCurrentDate,."+p+"cpCurrentDateDisabled,."+p+"cpTodayText,."+p+"cpTodayTextDisabled,."+p+"cpText { font-family:arial; font-size:8pt; }\n";
|
||||
result += "TD."+p+"cpDayColumnHeader { text-align:right; border:solid thin #C0C0C0;border-width:0px 0px 1px 0px; }\n";
|
||||
result += "."+p+"cpCurrentMonthDate, ."+p+"cpOtherMonthDate, ."+p+"cpCurrentDate { text-align:right; text-decoration:none; }\n";
|
||||
result += "."+p+"cpCurrentMonthDateDisabled, ."+p+"cpOtherMonthDateDisabled, ."+p+"cpCurrentDateDisabled { color:#D0D0D0; text-align:right; text-decoration:line-through; }\n";
|
||||
result += "."+p+"cpCurrentMonthDate, .cpCurrentDate { color:#000000; }\n";
|
||||
result += "."+p+"cpOtherMonthDate { color:#808080; }\n";
|
||||
result += "TD."+p+"cpCurrentDate { color:white; background-color: #C0C0C0; border-width:1px; border:solid thin #800000; }\n";
|
||||
result += "TD."+p+"cpCurrentDateDisabled { border-width:1px; border:solid thin #FFAAAA; }\n";
|
||||
result += "TD."+p+"cpTodayText, TD."+p+"cpTodayTextDisabled { border:solid thin #C0C0C0; border-width:1px 0px 0px 0px;}\n";
|
||||
result += "A."+p+"cpTodayText, SPAN."+p+"cpTodayTextDisabled { height:20px; }\n";
|
||||
result += "A."+p+"cpTodayText { color:black; }\n";
|
||||
result += "."+p+"cpTodayTextDisabled { color:#D0D0D0; }\n";
|
||||
result += "."+p+"cpBorder { border:solid thin #808080; }\n";
|
||||
result += "</STYLE>\n";
|
||||
return result;
|
||||
}
|
||||
|
||||
// Return a string containing all the calendar code to be displayed
|
||||
function CP_getCalendar() {
|
||||
var now = new Date();
|
||||
// Reference to window
|
||||
if (this.type == "WINDOW") { var windowref = "window.opener."; }
|
||||
else { var windowref = ""; }
|
||||
var result = "";
|
||||
// If POPUP, write entire HTML document
|
||||
if (this.type == "WINDOW") {
|
||||
result += "<HTML><HEAD><TITLE>Calendar</TITLE>"+this.getStyles()+"</HEAD><BODY MARGINWIDTH=0 MARGINHEIGHT=0 TOPMARGIN=0 RIGHTMARGIN=0 LEFTMARGIN=0>\n";
|
||||
result += '<CENTER><TABLE WIDTH=100% BORDER=0 BORDERWIDTH=0 CELLSPACING=0 CELLPADDING=0>\n';
|
||||
}
|
||||
else {
|
||||
result += '<TABLE CLASS="'+this.cssPrefix+'cpBorder" WIDTH=144 BORDER=1 BORDERWIDTH=1 CELLSPACING=0 CELLPADDING=1>\n';
|
||||
result += '<TR><TD ALIGN=CENTER>\n';
|
||||
result += '<CENTER>\n';
|
||||
}
|
||||
// Code for DATE display (default)
|
||||
// -------------------------------
|
||||
if (this.displayType=="date" || this.displayType=="week-end") {
|
||||
if (this.currentDate==null) { this.currentDate = now; }
|
||||
if (arguments.length > 0) { var month = arguments[0]; }
|
||||
else { var month = this.currentDate.getMonth()+1; }
|
||||
if (arguments.length > 1 && arguments[1]>0 && arguments[1]-0==arguments[1]) { var year = arguments[1]; }
|
||||
else { var year = this.currentDate.getFullYear(); }
|
||||
var daysinmonth= new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
|
||||
if ( ( (year%4 == 0)&&(year%100 != 0) ) || (year%400 == 0) ) {
|
||||
daysinmonth[2] = 29;
|
||||
}
|
||||
var current_month = new Date(year,month-1,1);
|
||||
var display_year = year;
|
||||
var display_month = month;
|
||||
var display_date = 1;
|
||||
var weekday= current_month.getDay();
|
||||
var offset = 0;
|
||||
|
||||
offset = (weekday >= this.weekStartDay) ? weekday-this.weekStartDay : 7-this.weekStartDay+weekday ;
|
||||
if (offset > 0) {
|
||||
display_month--;
|
||||
if (display_month < 1) { display_month = 12; display_year--; }
|
||||
display_date = daysinmonth[display_month]-offset+1;
|
||||
}
|
||||
var next_month = month+1;
|
||||
var next_month_year = year;
|
||||
if (next_month > 12) { next_month=1; next_month_year++; }
|
||||
var last_month = month-1;
|
||||
var last_month_year = year;
|
||||
if (last_month < 1) { last_month=12; last_month_year--; }
|
||||
var date_class;
|
||||
if (this.type!="WINDOW") {
|
||||
result += "<TABLE WIDTH=144 BORDER=0 BORDERWIDTH=0 CELLSPACING=0 CELLPADDING=0>";
|
||||
}
|
||||
result += '<TR>\n';
|
||||
var refresh = windowref+'CP_refreshCalendar';
|
||||
var refreshLink = 'javascript:' + refresh;
|
||||
if (this.isShowNavigationDropdowns) {
|
||||
result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="78" COLSPAN="3"><select CLASS="'+this.cssPrefix+'cpMonthNavigation" name="cpMonth" onChange="'+refresh+'('+this.index+',this.options[this.selectedIndex].value-0,'+(year-0)+');">';
|
||||
for( var monthCounter=1; monthCounter<=12; monthCounter++ ) {
|
||||
var selected = (monthCounter==month) ? 'SELECTED' : '';
|
||||
result += '<option value="'+monthCounter+'" '+selected+'>'+this.monthNames[monthCounter-1]+'</option>';
|
||||
}
|
||||
result += '</select></TD>';
|
||||
result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="10"> </TD>';
|
||||
|
||||
result += '<TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="56" COLSPAN="3"><select CLASS="'+this.cssPrefix+'cpYearNavigation" name="cpYear" onChange="'+refresh+'('+this.index+','+month+',this.options[this.selectedIndex].value-0);">';
|
||||
for( var yearCounter=year-this.yearSelectStartOffset; yearCounter<=year+this.yearSelectStartOffset; yearCounter++ ) {
|
||||
var selected = (yearCounter==year) ? 'SELECTED' : '';
|
||||
result += '<option value="'+yearCounter+'" '+selected+'>'+yearCounter+'</option>';
|
||||
}
|
||||
result += '</select></TD>';
|
||||
}
|
||||
else {
|
||||
if (this.isShowYearNavigation) {
|
||||
result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="10"><A CLASS="'+this.cssPrefix+'cpMonthNavigation" HREF="'+refreshLink+'('+this.index+','+last_month+','+last_month_year+');"><</A></TD>';
|
||||
result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="58"><SPAN CLASS="'+this.cssPrefix+'cpMonthNavigation">'+this.monthNames[month-1]+'</SPAN></TD>';
|
||||
result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="10"><A CLASS="'+this.cssPrefix+'cpMonthNavigation" HREF="'+refreshLink+'('+this.index+','+next_month+','+next_month_year+');">></A></TD>';
|
||||
result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="10"> </TD>';
|
||||
|
||||
result += '<TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="10"><A CLASS="'+this.cssPrefix+'cpYearNavigation" HREF="'+refreshLink+'('+this.index+','+month+','+(year-1)+');"><</A></TD>';
|
||||
if (this.isShowYearNavigationInput) {
|
||||
result += '<TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="36"><INPUT NAME="cpYear" CLASS="'+this.cssPrefix+'cpYearNavigation" SIZE="4" MAXLENGTH="4" VALUE="'+year+'" onBlur="'+refresh+'('+this.index+','+month+',this.value-0);"></TD>';
|
||||
}
|
||||
else {
|
||||
result += '<TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="36"><SPAN CLASS="'+this.cssPrefix+'cpYearNavigation">'+year+'</SPAN></TD>';
|
||||
}
|
||||
result += '<TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="10"><A CLASS="'+this.cssPrefix+'cpYearNavigation" HREF="'+refreshLink+'('+this.index+','+month+','+(year+1)+');">></A></TD>';
|
||||
}
|
||||
else {
|
||||
result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="22"><A CLASS="'+this.cssPrefix+'cpMonthNavigation" HREF="'+refreshLink+'('+this.index+','+last_month+','+last_month_year+');"><<</A></TD>\n';
|
||||
result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="100"><SPAN CLASS="'+this.cssPrefix+'cpMonthNavigation">'+this.monthNames[month-1]+' '+year+'</SPAN></TD>\n';
|
||||
result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="22"><A CLASS="'+this.cssPrefix+'cpMonthNavigation" HREF="'+refreshLink+'('+this.index+','+next_month+','+next_month_year+');">>></A></TD>\n';
|
||||
}
|
||||
}
|
||||
result += '</TR></TABLE>\n';
|
||||
result += '<TABLE WIDTH=120 BORDER=0 CELLSPACING=0 CELLPADDING=1 ALIGN=CENTER>\n';
|
||||
result += '<TR>\n';
|
||||
for (var j=0; j<7; j++) {
|
||||
|
||||
result += '<TD CLASS="'+this.cssPrefix+'cpDayColumnHeader" WIDTH="14%"><SPAN CLASS="'+this.cssPrefix+'cpDayColumnHeader">'+this.dayHeaders[(this.weekStartDay+j)%7]+'</TD>\n';
|
||||
}
|
||||
result += '</TR>\n';
|
||||
for (var row=1; row<=6; row++) {
|
||||
result += '<TR>\n';
|
||||
for (var col=1; col<=7; col++) {
|
||||
var disabled=false;
|
||||
if (this.disabledDatesExpression!="") {
|
||||
var ds=""+display_year+LZ(display_month)+LZ(display_date);
|
||||
eval("disabled=("+this.disabledDatesExpression+")");
|
||||
}
|
||||
var dateClass = "";
|
||||
if ((display_month == this.currentDate.getMonth()+1) && (display_date==this.currentDate.getDate()) && (display_year==this.currentDate.getFullYear())) {
|
||||
dateClass = "cpCurrentDate";
|
||||
}
|
||||
else if (display_month == month) {
|
||||
dateClass = "cpCurrentMonthDate";
|
||||
}
|
||||
else {
|
||||
dateClass = "cpOtherMonthDate";
|
||||
}
|
||||
if (disabled || this.disabledWeekDays[col-1]) {
|
||||
result += ' <TD CLASS="'+this.cssPrefix+dateClass+'"><SPAN CLASS="'+this.cssPrefix+dateClass+'Disabled">'+display_date+'</SPAN></TD>\n';
|
||||
}
|
||||
else {
|
||||
var selected_date = display_date;
|
||||
var selected_month = display_month;
|
||||
var selected_year = display_year;
|
||||
if (this.displayType=="week-end") {
|
||||
var d = new Date(selected_year,selected_month-1,selected_date,0,0,0,0);
|
||||
d.setDate(d.getDate() + (7-col));
|
||||
selected_year = d.getYear();
|
||||
if (selected_year < 1000) { selected_year += 1900; }
|
||||
selected_month = d.getMonth()+1;
|
||||
selected_date = d.getDate();
|
||||
}
|
||||
result += ' <TD CLASS="'+this.cssPrefix+dateClass+'"><A HREF="javascript:'+windowref+this.returnFunction+'('+selected_year+','+selected_month+','+selected_date+');'+windowref+'CP_hideCalendar(\''+this.index+'\');" CLASS="'+this.cssPrefix+dateClass+'">'+display_date+'</A></TD>\n';
|
||||
}
|
||||
display_date++;
|
||||
if (display_date > daysinmonth[display_month]) {
|
||||
display_date=1;
|
||||
display_month++;
|
||||
}
|
||||
if (display_month > 12) {
|
||||
display_month=1;
|
||||
display_year++;
|
||||
}
|
||||
}
|
||||
result += '</TR>';
|
||||
}
|
||||
var current_weekday = now.getDay() - this.weekStartDay;
|
||||
if (current_weekday < 0) {
|
||||
current_weekday += 7;
|
||||
}
|
||||
result += '<TR>\n';
|
||||
result += ' <TD COLSPAN=7 ALIGN=CENTER CLASS="'+this.cssPrefix+'cpTodayText">\n';
|
||||
if (this.disabledDatesExpression!="") {
|
||||
var ds=""+now.getFullYear()+LZ(now.getMonth()+1)+LZ(now.getDate());
|
||||
eval("disabled=("+this.disabledDatesExpression+")");
|
||||
}
|
||||
if (disabled || this.disabledWeekDays[current_weekday+1]) {
|
||||
result += ' <SPAN CLASS="'+this.cssPrefix+'cpTodayTextDisabled">'+this.todayText+'</SPAN>\n';
|
||||
}
|
||||
else {
|
||||
result += ' <A CLASS="'+this.cssPrefix+'cpTodayText" HREF="javascript:'+windowref+this.returnFunction+'(\''+now.getFullYear()+'\',\''+(now.getMonth()+1)+'\',\''+now.getDate()+'\');'+windowref+'CP_hideCalendar(\''+this.index+'\');">'+this.todayText+'</A>\n';
|
||||
}
|
||||
result += ' <BR>\n';
|
||||
result += ' </TD></TR></TABLE></CENTER></TD></TR></TABLE>\n';
|
||||
}
|
||||
|
||||
// Code common for MONTH, QUARTER, YEAR
|
||||
// ------------------------------------
|
||||
if (this.displayType=="month" || this.displayType=="quarter" || this.displayType=="year") {
|
||||
if (arguments.length > 0) { var year = arguments[0]; }
|
||||
else {
|
||||
if (this.displayType=="year") { var year = now.getFullYear()-this.yearSelectStartOffset; }
|
||||
else { var year = now.getFullYear(); }
|
||||
}
|
||||
if (this.displayType!="year" && this.isShowYearNavigation) {
|
||||
result += "<TABLE WIDTH=144 BORDER=0 BORDERWIDTH=0 CELLSPACING=0 CELLPADDING=0>";
|
||||
result += '<TR>\n';
|
||||
result += ' <TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="22"><A CLASS="'+this.cssPrefix+'cpYearNavigation" HREF="javascript:'+windowref+'CP_refreshCalendar('+this.index+','+(year-1)+');"><<</A></TD>\n';
|
||||
result += ' <TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="100">'+year+'</TD>\n';
|
||||
result += ' <TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="22"><A CLASS="'+this.cssPrefix+'cpYearNavigation" HREF="javascript:'+windowref+'CP_refreshCalendar('+this.index+','+(year+1)+');">>></A></TD>\n';
|
||||
result += '</TR></TABLE>\n';
|
||||
}
|
||||
}
|
||||
|
||||
// Code for MONTH display
|
||||
// ----------------------
|
||||
if (this.displayType=="month") {
|
||||
// If POPUP, write entire HTML document
|
||||
result += '<TABLE WIDTH=120 BORDER=0 CELLSPACING=1 CELLPADDING=0 ALIGN=CENTER>\n';
|
||||
for (var i=0; i<4; i++) {
|
||||
result += '<TR>';
|
||||
for (var j=0; j<3; j++) {
|
||||
var monthindex = ((i*3)+j);
|
||||
result += '<TD WIDTH=33% ALIGN=CENTER><A CLASS="'+this.cssPrefix+'cpText" HREF="javascript:'+windowref+this.returnMonthFunction+'('+year+','+(monthindex+1)+');'+windowref+'CP_hideCalendar(\''+this.index+'\');" CLASS="'+date_class+'">'+this.monthAbbreviations[monthindex]+'</A></TD>';
|
||||
}
|
||||
result += '</TR>';
|
||||
}
|
||||
result += '</TABLE></CENTER></TD></TR></TABLE>\n';
|
||||
}
|
||||
|
||||
// Code for QUARTER display
|
||||
// ------------------------
|
||||
if (this.displayType=="quarter") {
|
||||
result += '<BR><TABLE WIDTH=120 BORDER=1 CELLSPACING=0 CELLPADDING=0 ALIGN=CENTER>\n';
|
||||
for (var i=0; i<2; i++) {
|
||||
result += '<TR>';
|
||||
for (var j=0; j<2; j++) {
|
||||
var quarter = ((i*2)+j+1);
|
||||
result += '<TD WIDTH=50% ALIGN=CENTER><BR><A CLASS="'+this.cssPrefix+'cpText" HREF="javascript:'+windowref+this.returnQuarterFunction+'('+year+','+quarter+');'+windowref+'CP_hideCalendar(\''+this.index+'\');" CLASS="'+date_class+'">Q'+quarter+'</A><BR><BR></TD>';
|
||||
}
|
||||
result += '</TR>';
|
||||
}
|
||||
result += '</TABLE></CENTER></TD></TR></TABLE>\n';
|
||||
}
|
||||
|
||||
// Code for YEAR display
|
||||
// ---------------------
|
||||
if (this.displayType=="year") {
|
||||
var yearColumnSize = 4;
|
||||
result += "<TABLE WIDTH=144 BORDER=0 BORDERWIDTH=0 CELLSPACING=0 CELLPADDING=0>";
|
||||
result += '<TR>\n';
|
||||
result += ' <TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="50%"><A CLASS="'+this.cssPrefix+'cpYearNavigation" HREF="javascript:'+windowref+'CP_refreshCalendar('+this.index+','+(year-(yearColumnSize*2))+');"><<</A></TD>\n';
|
||||
result += ' <TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="50%"><A CLASS="'+this.cssPrefix+'cpYearNavigation" HREF="javascript:'+windowref+'CP_refreshCalendar('+this.index+','+(year+(yearColumnSize*2))+');">>></A></TD>\n';
|
||||
result += '</TR></TABLE>\n';
|
||||
result += '<TABLE WIDTH=120 BORDER=0 CELLSPACING=1 CELLPADDING=0 ALIGN=CENTER>\n';
|
||||
for (var i=0; i<yearColumnSize; i++) {
|
||||
for (var j=0; j<2; j++) {
|
||||
var currentyear = year+(j*yearColumnSize)+i;
|
||||
result += '<TD WIDTH=50% ALIGN=CENTER><A CLASS="'+this.cssPrefix+'cpText" HREF="javascript:'+windowref+this.returnYearFunction+'('+currentyear+');'+windowref+'CP_hideCalendar(\''+this.index+'\');" CLASS="'+date_class+'">'+currentyear+'</A></TD>';
|
||||
}
|
||||
result += '</TR>';
|
||||
}
|
||||
result += '</TABLE></CENTER></TD></TR></TABLE>\n';
|
||||
}
|
||||
// Common
|
||||
if (this.type == "WINDOW") {
|
||||
result += "</BODY></HTML>\n";
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -0,0 +1,206 @@
|
||||
// ===================================================================
|
||||
// Author: Matt Kruse <matt@mattkruse.com>
|
||||
// WWW: http://www.mattkruse.com/
|
||||
//
|
||||
// NOTICE: You may use this code for any purpose, commercial or
|
||||
// private, without any further permission from the author. You may
|
||||
// remove this notice from your final code if you wish, however it is
|
||||
// appreciated by the author if at least my web site address is kept.
|
||||
//
|
||||
// You may *NOT* re-distribute this code in any way except through its
|
||||
// use. That means, you can include it in your product, or your web
|
||||
// site, or any other form where the code is actually being used. You
|
||||
// may not put the plain javascript up on your site for download or
|
||||
// include it in your javascript libraries for download.
|
||||
// If you wish to share this code with others, please just point them
|
||||
// to the URL instead.
|
||||
// Please DO NOT link directly to my .js files from your site. Copy
|
||||
// the files to your server and use them there. Thank you.
|
||||
// ===================================================================
|
||||
|
||||
/*
|
||||
Last modified: 02/24/2003
|
||||
|
||||
DESCRIPTION: This widget is used to select a color, in hexadecimal #RRGGBB
|
||||
form. It uses a color "swatch" to display the standard 216-color web-safe
|
||||
palette. The user can then click on a color to select it.
|
||||
|
||||
COMPATABILITY: See notes in AnchorPosition.js and PopupWindow.js.
|
||||
Only the latest DHTML-capable browsers will show the color and hex values
|
||||
at the bottom as your mouse goes over them.
|
||||
|
||||
USAGE:
|
||||
// Create a new ColorPicker object using DHTML popup
|
||||
var cp = new ColorPicker();
|
||||
|
||||
// Create a new ColorPicker object using Window Popup
|
||||
var cp = new ColorPicker('window');
|
||||
|
||||
// Add a link in your page to trigger the popup. For example:
|
||||
<A HREF="#" onClick="cp.show('pick');return false;" NAME="pick" ID="pick">Pick</A>
|
||||
|
||||
// Or use the built-in "select" function to do the dirty work for you:
|
||||
<A HREF="#" onClick="cp.select(document.forms[0].color,'pick');return false;" NAME="pick" ID="pick">Pick</A>
|
||||
|
||||
// If using DHTML popup, write out the required DIV tag near the bottom
|
||||
// of your page.
|
||||
<SCRIPT LANGUAGE="JavaScript">cp.writeDiv()</SCRIPT>
|
||||
|
||||
// Write the 'pickColor' function that will be called when the user clicks
|
||||
// a color and do something with the value. This is only required if you
|
||||
// want to do something other than simply populate a form field, which is
|
||||
// what the 'select' function will give you.
|
||||
function pickColor(color) {
|
||||
field.value = color;
|
||||
}
|
||||
|
||||
NOTES:
|
||||
1) Requires the functions in AnchorPosition.js and PopupWindow.js
|
||||
|
||||
2) Your anchor tag MUST contain both NAME and ID attributes which are the
|
||||
same. For example:
|
||||
<A NAME="test" ID="test"> </A>
|
||||
|
||||
3) There must be at least a space between <A> </A> for IE5.5 to see the
|
||||
anchor tag correctly. Do not do <A></A> with no space.
|
||||
|
||||
4) When a ColorPicker object is created, a handler for 'onmouseup' is
|
||||
attached to any event handler you may have already defined. Do NOT define
|
||||
an event handler for 'onmouseup' after you define a ColorPicker object or
|
||||
the color picker will not hide itself correctly.
|
||||
*/
|
||||
ColorPicker_targetInput = null;
|
||||
function ColorPicker_writeDiv() {
|
||||
document.writeln("<DIV ID=\"colorPickerDiv\" STYLE=\"position:absolute;visibility:hidden;\"> </DIV>");
|
||||
}
|
||||
|
||||
function ColorPicker_show(anchorname) {
|
||||
this.showPopup(anchorname);
|
||||
}
|
||||
|
||||
function ColorPicker_pickColor(color,obj) {
|
||||
obj.hidePopup();
|
||||
pickColor(color);
|
||||
}
|
||||
|
||||
// A Default "pickColor" function to accept the color passed back from popup.
|
||||
// User can over-ride this with their own function.
|
||||
function pickColor(color) {
|
||||
if (ColorPicker_targetInput==null) {
|
||||
alert("Target Input is null, which means you either didn't use the 'select' function or you have no defined your own 'pickColor' function to handle the picked color!");
|
||||
return;
|
||||
}
|
||||
ColorPicker_targetInput.value = color;
|
||||
}
|
||||
|
||||
// This function is the easiest way to popup the window, select a color, and
|
||||
// have the value populate a form field, which is what most people want to do.
|
||||
function ColorPicker_select(inputobj,linkname) {
|
||||
if (inputobj.type!="text" && inputobj.type!="hidden" && inputobj.type!="textarea") {
|
||||
alert("colorpicker.select: Input object passed is not a valid form input object");
|
||||
window.ColorPicker_targetInput=null;
|
||||
return;
|
||||
}
|
||||
window.ColorPicker_targetInput = inputobj;
|
||||
this.show(linkname);
|
||||
}
|
||||
|
||||
// This function runs when you move your mouse over a color block, if you have a newer browser
|
||||
function ColorPicker_highlightColor(c) {
|
||||
var thedoc = (arguments.length>1)?arguments[1]:window.document;
|
||||
var d = thedoc.getElementById("colorPickerSelectedColor");
|
||||
d.style.backgroundColor = c;
|
||||
d = thedoc.getElementById("colorPickerSelectedColorValue");
|
||||
d.innerHTML = c;
|
||||
}
|
||||
|
||||
function ColorPicker() {
|
||||
var windowMode = false;
|
||||
// Create a new PopupWindow object
|
||||
if (arguments.length==0) {
|
||||
var divname = "colorPickerDiv";
|
||||
}
|
||||
else if (arguments[0] == "window") {
|
||||
var divname = '';
|
||||
windowMode = true;
|
||||
}
|
||||
else {
|
||||
var divname = arguments[0];
|
||||
}
|
||||
|
||||
if (divname != "") {
|
||||
var cp = new PopupWindow(divname);
|
||||
}
|
||||
else {
|
||||
var cp = new PopupWindow();
|
||||
cp.setSize(225,250);
|
||||
}
|
||||
|
||||
// Object variables
|
||||
cp.currentValue = "#FFFFFF";
|
||||
|
||||
// Method Mappings
|
||||
cp.writeDiv = ColorPicker_writeDiv;
|
||||
cp.highlightColor = ColorPicker_highlightColor;
|
||||
cp.show = ColorPicker_show;
|
||||
cp.select = ColorPicker_select;
|
||||
|
||||
// Code to populate color picker window
|
||||
var colors = new Array("#000000","#000033","#000066","#000099","#0000CC","#0000FF","#330000","#330033","#330066","#330099","#3300CC",
|
||||
"#3300FF","#660000","#660033","#660066","#660099","#6600CC","#6600FF","#990000","#990033","#990066","#990099",
|
||||
"#9900CC","#9900FF","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#FF0000","#FF0033","#FF0066",
|
||||
"#FF0099","#FF00CC","#FF00FF","#003300","#003333","#003366","#003399","#0033CC","#0033FF","#333300","#333333",
|
||||
"#333366","#333399","#3333CC","#3333FF","#663300","#663333","#663366","#663399","#6633CC","#6633FF","#993300",
|
||||
"#993333","#993366","#993399","#9933CC","#9933FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF",
|
||||
"#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#006600","#006633","#006666","#006699","#0066CC",
|
||||
"#0066FF","#336600","#336633","#336666","#336699","#3366CC","#3366FF","#666600","#666633","#666666","#666699",
|
||||
"#6666CC","#6666FF","#996600","#996633","#996666","#996699","#9966CC","#9966FF","#CC6600","#CC6633","#CC6666",
|
||||
"#CC6699","#CC66CC","#CC66FF","#FF6600","#FF6633","#FF6666","#FF6699","#FF66CC","#FF66FF","#009900","#009933",
|
||||
"#009966","#009999","#0099CC","#0099FF","#339900","#339933","#339966","#339999","#3399CC","#3399FF","#669900",
|
||||
"#669933","#669966","#669999","#6699CC","#6699FF","#999900","#999933","#999966","#999999","#9999CC","#9999FF",
|
||||
"#CC9900","#CC9933","#CC9966","#CC9999","#CC99CC","#CC99FF","#FF9900","#FF9933","#FF9966","#FF9999","#FF99CC",
|
||||
"#FF99FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#33CC00","#33CC33","#33CC66","#33CC99",
|
||||
"#33CCCC","#33CCFF","#66CC00","#66CC33","#66CC66","#66CC99","#66CCCC","#66CCFF","#99CC00","#99CC33","#99CC66",
|
||||
"#99CC99","#99CCCC","#99CCFF","#CCCC00","#CCCC33","#CCCC66","#CCCC99","#CCCCCC","#CCCCFF","#FFCC00","#FFCC33",
|
||||
"#FFCC66","#FFCC99","#FFCCCC","#FFCCFF","#00FF00","#00FF33","#00FF66","#00FF99","#00FFCC","#00FFFF","#33FF00",
|
||||
"#33FF33","#33FF66","#33FF99","#33FFCC","#33FFFF","#66FF00","#66FF33","#66FF66","#66FF99","#66FFCC","#66FFFF",
|
||||
"#99FF00","#99FF33","#99FF66","#99FF99","#99FFCC","#99FFFF","#CCFF00","#CCFF33","#CCFF66","#CCFF99","#CCFFCC",
|
||||
"#CCFFFF","#FFFF00","#FFFF33","#FFFF66","#FFFF99","#FFFFCC","#FFFFFF");
|
||||
var total = colors.length;
|
||||
var width = 18;
|
||||
var cp_contents = "";
|
||||
var windowRef = (windowMode)?"window.opener.":"";
|
||||
if (windowMode) {
|
||||
cp_contents += "<HTML><HEAD><TITLE>Select Color</TITLE></HEAD>";
|
||||
cp_contents += "<BODY MARGINWIDTH=0 MARGINHEIGHT=0 LEFTMARGIN=0 TOPMARGIN=0><CENTER>";
|
||||
}
|
||||
cp_contents += "<TABLE BORDER=1 CELLSPACING=1 CELLPADDING=0>";
|
||||
var use_highlight = (document.getElementById || document.all)?true:false;
|
||||
for (var i=0; i<total; i++) {
|
||||
if ((i % width) == 0) { cp_contents += "<TR>"; }
|
||||
if (use_highlight) { var mo = 'onMouseOver="'+windowRef+'ColorPicker_highlightColor(\''+colors[i]+'\',window.document)"'; }
|
||||
else { mo = ""; }
|
||||
cp_contents += '<TD BGCOLOR="'+colors[i]+'"><FONT SIZE="-3"><A HREF="#" onClick="'+windowRef+'ColorPicker_pickColor(\''+colors[i]+'\','+windowRef+'window.popupWindowObjects['+cp.index+']);return false;" '+mo+' STYLE="text-decoration:none;"> </A></FONT></TD>';
|
||||
if ( ((i+1)>=total) || (((i+1) % width) == 0)) {
|
||||
cp_contents += "</TR>";
|
||||
}
|
||||
}
|
||||
// If the browser supports dynamically changing TD cells, add the fancy stuff
|
||||
if (document.getElementById) {
|
||||
var width1 = Math.floor(width/2);
|
||||
var width2 = width = width1;
|
||||
cp_contents += "<TR><TD COLSPAN='"+width1+"' BGCOLOR='#ffffff' ID='colorPickerSelectedColor'> </TD><TD COLSPAN='"+width2+"' ALIGN='CENTER' ID='colorPickerSelectedColorValue'>#FFFFFF</TD></TR>";
|
||||
}
|
||||
cp_contents += "</TABLE>";
|
||||
if (windowMode) {
|
||||
cp_contents += "</CENTER></BODY></HTML>";
|
||||
}
|
||||
// end populate code
|
||||
|
||||
// Write the contents to the popup object
|
||||
cp.populate(cp_contents+"\n");
|
||||
// Move the table down a bit so you can see it
|
||||
cp.offsetY = 25;
|
||||
cp.autoHide();
|
||||
return cp;
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
body {
|
||||
background: #eee;
|
||||
color: #555;
|
||||
font: 12px/14px Georgia, serif;
|
||||
}
|
||||
h1 {
|
||||
font-size: 24px;
|
||||
line-height: 24px;
|
||||
margin-bottom: 20px;
|
||||
text-shadow: 1px 1px 0 #fff;
|
||||
}
|
||||
a img {
|
||||
border: none;
|
||||
}
|
||||
#Wrapper {
|
||||
margin: 10px auto 0;
|
||||
width: 720px;
|
||||
}
|
||||
#Slider {
|
||||
margin-bottom: 20px;
|
||||
overflow: visible;
|
||||
}
|
||||
.nivoo-slider-holder {
|
||||
box-shadow: 0 0 10px rgba(100, 100, 100, .8);
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
<!DOCTYPE html>
|
||||
<head>
|
||||
<title>Nivoo Slider Demo</title>
|
||||
<link rel="stylesheet" type="text/css" href="NivooSlider.css" />
|
||||
<link rel="stylesheet" type="text/css" href="demo.css" />
|
||||
<script type="text/javascript" src="mootools-core-1.4.5-full-nocompat-yc.js"></script>
|
||||
<script type="text/javascript" src="../Source/NivooSlider.js"></script>
|
||||
<script type="text/javascript">
|
||||
window.addEvent('domready', function () {
|
||||
// Click event for demo only
|
||||
$$('a')[1].addEvent('click', function(e){
|
||||
e.stop();
|
||||
alert('[you triggered a click event]');
|
||||
});
|
||||
// initialize Nivoo-Slider
|
||||
new NivooSlider($('Slider'), {
|
||||
directionNavPosition: 'outside',
|
||||
effect: 'random',
|
||||
interval: 5000,
|
||||
orientation: 'random'
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="Wrapper">
|
||||
|
||||
<h1>Nivoo Slider Demo</h1>
|
||||
|
||||
<div id="Slider" class="nivoo-slider">
|
||||
<a href="#">
|
||||
<img src="images/1269388.jpg" alt="useful alt text" title="This is an example of a linked image" height="350" width="600" />
|
||||
</a>
|
||||
<img src="images/1268244.jpg" alt="useful alt text" title="This is an example of a caption" height="350" width="600" />
|
||||
<a href="#">
|
||||
<img src="images/1270048.jpg" alt="useful alt text" title="Click on the image to trigger the click event" height="350" width="600" />
|
||||
</a>
|
||||
<img src="images/1270256.jpg" alt="useful alt text" height="350" width="600" />
|
||||
</div>
|
||||
|
||||
<p>For the documentation go to the <a href="https://github.com/JohannesFischer/Nivoo-Slider">Nivoo Slider github page</a>.</p>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,491 @@
|
||||
/*
|
||||
---
|
||||
MooTools: the javascript framework
|
||||
|
||||
web build:
|
||||
- http://mootools.net/core/76bf47062d6c1983d66ce47ad66aa0e0
|
||||
|
||||
packager build:
|
||||
- packager build Core/Core Core/Array Core/String Core/Number Core/Function Core/Object Core/Event Core/Browser Core/Class Core/Class.Extras Core/Slick.Parser Core/Slick.Finder Core/Element Core/Element.Style Core/Element.Event Core/Element.Delegation Core/Element.Dimensions Core/Fx Core/Fx.CSS Core/Fx.Tween Core/Fx.Morph Core/Fx.Transitions Core/Request Core/Request.HTML Core/Request.JSON Core/Cookie Core/JSON Core/DOMReady Core/Swiff
|
||||
|
||||
copyrights:
|
||||
- [MooTools](http://mootools.net)
|
||||
|
||||
licenses:
|
||||
- [MIT License](http://mootools.net/license.txt)
|
||||
...
|
||||
*/
|
||||
|
||||
(function(){this.MooTools={version:"1.4.5",build:"ab8ea8824dc3b24b6666867a2c4ed58ebb762cf0"};var o=this.typeOf=function(i){if(i==null){return"null";}if(i.$family!=null){return i.$family();
|
||||
}if(i.nodeName){if(i.nodeType==1){return"element";}if(i.nodeType==3){return(/\S/).test(i.nodeValue)?"textnode":"whitespace";}}else{if(typeof i.length=="number"){if(i.callee){return"arguments";
|
||||
}if("item" in i){return"collection";}}}return typeof i;};var j=this.instanceOf=function(t,i){if(t==null){return false;}var s=t.$constructor||t.constructor;
|
||||
while(s){if(s===i){return true;}s=s.parent;}if(!t.hasOwnProperty){return false;}return t instanceof i;};var f=this.Function;var p=true;for(var k in {toString:1}){p=null;
|
||||
}if(p){p=["hasOwnProperty","valueOf","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","constructor"];}f.prototype.overloadSetter=function(s){var i=this;
|
||||
return function(u,t){if(u==null){return this;}if(s||typeof u!="string"){for(var v in u){i.call(this,v,u[v]);}if(p){for(var w=p.length;w--;){v=p[w];if(u.hasOwnProperty(v)){i.call(this,v,u[v]);
|
||||
}}}}else{i.call(this,u,t);}return this;};};f.prototype.overloadGetter=function(s){var i=this;return function(u){var v,t;if(typeof u!="string"){v=u;}else{if(arguments.length>1){v=arguments;
|
||||
}else{if(s){v=[u];}}}if(v){t={};for(var w=0;w<v.length;w++){t[v[w]]=i.call(this,v[w]);}}else{t=i.call(this,u);}return t;};};f.prototype.extend=function(i,s){this[i]=s;
|
||||
}.overloadSetter();f.prototype.implement=function(i,s){this.prototype[i]=s;}.overloadSetter();var n=Array.prototype.slice;f.from=function(i){return(o(i)=="function")?i:function(){return i;
|
||||
};};Array.from=function(i){if(i==null){return[];}return(a.isEnumerable(i)&&typeof i!="string")?(o(i)=="array")?i:n.call(i):[i];};Number.from=function(s){var i=parseFloat(s);
|
||||
return isFinite(i)?i:null;};String.from=function(i){return i+"";};f.implement({hide:function(){this.$hidden=true;return this;},protect:function(){this.$protected=true;
|
||||
return this;}});var a=this.Type=function(u,t){if(u){var s=u.toLowerCase();var i=function(v){return(o(v)==s);};a["is"+u]=i;if(t!=null){t.prototype.$family=(function(){return s;
|
||||
}).hide();}}if(t==null){return null;}t.extend(this);t.$constructor=a;t.prototype.$constructor=t;return t;};var e=Object.prototype.toString;a.isEnumerable=function(i){return(i!=null&&typeof i.length=="number"&&e.call(i)!="[object Function]");
|
||||
};var q={};var r=function(i){var s=o(i.prototype);return q[s]||(q[s]=[]);};var b=function(t,x){if(x&&x.$hidden){return;}var s=r(this);for(var u=0;u<s.length;
|
||||
u++){var w=s[u];if(o(w)=="type"){b.call(w,t,x);}else{w.call(this,t,x);}}var v=this.prototype[t];if(v==null||!v.$protected){this.prototype[t]=x;}if(this[t]==null&&o(x)=="function"){m.call(this,t,function(i){return x.apply(i,n.call(arguments,1));
|
||||
});}};var m=function(i,t){if(t&&t.$hidden){return;}var s=this[i];if(s==null||!s.$protected){this[i]=t;}};a.implement({implement:b.overloadSetter(),extend:m.overloadSetter(),alias:function(i,s){b.call(this,i,this.prototype[s]);
|
||||
}.overloadSetter(),mirror:function(i){r(this).push(i);return this;}});new a("Type",a);var d=function(s,x,v){var u=(x!=Object),B=x.prototype;if(u){x=new a(s,x);
|
||||
}for(var y=0,w=v.length;y<w;y++){var C=v[y],A=x[C],z=B[C];if(A){A.protect();}if(u&&z){x.implement(C,z.protect());}}if(u){var t=B.propertyIsEnumerable(v[0]);
|
||||
x.forEachMethod=function(G){if(!t){for(var F=0,D=v.length;F<D;F++){G.call(B,B[v[F]],v[F]);}}for(var E in B){G.call(B,B[E],E);}};}return d;};d("String",String,["charAt","charCodeAt","concat","indexOf","lastIndexOf","match","quote","replace","search","slice","split","substr","substring","trim","toLowerCase","toUpperCase"])("Array",Array,["pop","push","reverse","shift","sort","splice","unshift","concat","join","slice","indexOf","lastIndexOf","filter","forEach","every","map","some","reduce","reduceRight"])("Number",Number,["toExponential","toFixed","toLocaleString","toPrecision"])("Function",f,["apply","call","bind"])("RegExp",RegExp,["exec","test"])("Object",Object,["create","defineProperty","defineProperties","keys","getPrototypeOf","getOwnPropertyDescriptor","getOwnPropertyNames","preventExtensions","isExtensible","seal","isSealed","freeze","isFrozen"])("Date",Date,["now"]);
|
||||
Object.extend=m.overloadSetter();Date.extend("now",function(){return +(new Date);});new a("Boolean",Boolean);Number.prototype.$family=function(){return isFinite(this)?"number":"null";
|
||||
}.hide();Number.extend("random",function(s,i){return Math.floor(Math.random()*(i-s+1)+s);});var g=Object.prototype.hasOwnProperty;Object.extend("forEach",function(i,t,u){for(var s in i){if(g.call(i,s)){t.call(u,i[s],s,i);
|
||||
}}});Object.each=Object.forEach;Array.implement({forEach:function(u,v){for(var t=0,s=this.length;t<s;t++){if(t in this){u.call(v,this[t],t,this);}}},each:function(i,s){Array.forEach(this,i,s);
|
||||
return this;}});var l=function(i){switch(o(i)){case"array":return i.clone();case"object":return Object.clone(i);default:return i;}};Array.implement("clone",function(){var s=this.length,t=new Array(s);
|
||||
while(s--){t[s]=l(this[s]);}return t;});var h=function(s,i,t){switch(o(t)){case"object":if(o(s[i])=="object"){Object.merge(s[i],t);}else{s[i]=Object.clone(t);
|
||||
}break;case"array":s[i]=t.clone();break;default:s[i]=t;}return s;};Object.extend({merge:function(z,u,t){if(o(u)=="string"){return h(z,u,t);}for(var y=1,s=arguments.length;
|
||||
y<s;y++){var w=arguments[y];for(var x in w){h(z,x,w[x]);}}return z;},clone:function(i){var t={};for(var s in i){t[s]=l(i[s]);}return t;},append:function(w){for(var v=1,t=arguments.length;
|
||||
v<t;v++){var s=arguments[v]||{};for(var u in s){w[u]=s[u];}}return w;}});["Object","WhiteSpace","TextNode","Collection","Arguments"].each(function(i){new a(i);
|
||||
});var c=Date.now();String.extend("uniqueID",function(){return(c++).toString(36);});})();Array.implement({every:function(c,d){for(var b=0,a=this.length>>>0;
|
||||
b<a;b++){if((b in this)&&!c.call(d,this[b],b,this)){return false;}}return true;},filter:function(d,f){var c=[];for(var e,b=0,a=this.length>>>0;b<a;b++){if(b in this){e=this[b];
|
||||
if(d.call(f,e,b,this)){c.push(e);}}}return c;},indexOf:function(c,d){var b=this.length>>>0;for(var a=(d<0)?Math.max(0,b+d):d||0;a<b;a++){if(this[a]===c){return a;
|
||||
}}return -1;},map:function(c,e){var d=this.length>>>0,b=Array(d);for(var a=0;a<d;a++){if(a in this){b[a]=c.call(e,this[a],a,this);}}return b;},some:function(c,d){for(var b=0,a=this.length>>>0;
|
||||
b<a;b++){if((b in this)&&c.call(d,this[b],b,this)){return true;}}return false;},clean:function(){return this.filter(function(a){return a!=null;});},invoke:function(a){var b=Array.slice(arguments,1);
|
||||
return this.map(function(c){return c[a].apply(c,b);});},associate:function(c){var d={},b=Math.min(this.length,c.length);for(var a=0;a<b;a++){d[c[a]]=this[a];
|
||||
}return d;},link:function(c){var a={};for(var e=0,b=this.length;e<b;e++){for(var d in c){if(c[d](this[e])){a[d]=this[e];delete c[d];break;}}}return a;},contains:function(a,b){return this.indexOf(a,b)!=-1;
|
||||
},append:function(a){this.push.apply(this,a);return this;},getLast:function(){return(this.length)?this[this.length-1]:null;},getRandom:function(){return(this.length)?this[Number.random(0,this.length-1)]:null;
|
||||
},include:function(a){if(!this.contains(a)){this.push(a);}return this;},combine:function(c){for(var b=0,a=c.length;b<a;b++){this.include(c[b]);}return this;
|
||||
},erase:function(b){for(var a=this.length;a--;){if(this[a]===b){this.splice(a,1);}}return this;},empty:function(){this.length=0;return this;},flatten:function(){var d=[];
|
||||
for(var b=0,a=this.length;b<a;b++){var c=typeOf(this[b]);if(c=="null"){continue;}d=d.concat((c=="array"||c=="collection"||c=="arguments"||instanceOf(this[b],Array))?Array.flatten(this[b]):this[b]);
|
||||
}return d;},pick:function(){for(var b=0,a=this.length;b<a;b++){if(this[b]!=null){return this[b];}}return null;},hexToRgb:function(b){if(this.length!=3){return null;
|
||||
}var a=this.map(function(c){if(c.length==1){c+=c;}return c.toInt(16);});return(b)?a:"rgb("+a+")";},rgbToHex:function(d){if(this.length<3){return null;}if(this.length==4&&this[3]==0&&!d){return"transparent";
|
||||
}var b=[];for(var a=0;a<3;a++){var c=(this[a]-0).toString(16);b.push((c.length==1)?"0"+c:c);}return(d)?b:"#"+b.join("");}});String.implement({test:function(a,b){return((typeOf(a)=="regexp")?a:new RegExp(""+a,b)).test(this);
|
||||
},contains:function(a,b){return(b)?(b+this+b).indexOf(b+a+b)>-1:String(this).indexOf(a)>-1;},trim:function(){return String(this).replace(/^\s+|\s+$/g,"");
|
||||
},clean:function(){return String(this).replace(/\s+/g," ").trim();},camelCase:function(){return String(this).replace(/-\D/g,function(a){return a.charAt(1).toUpperCase();
|
||||
});},hyphenate:function(){return String(this).replace(/[A-Z]/g,function(a){return("-"+a.charAt(0).toLowerCase());});},capitalize:function(){return String(this).replace(/\b[a-z]/g,function(a){return a.toUpperCase();
|
||||
});},escapeRegExp:function(){return String(this).replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1");},toInt:function(a){return parseInt(this,a||10);},toFloat:function(){return parseFloat(this);
|
||||
},hexToRgb:function(b){var a=String(this).match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);return(a)?a.slice(1).hexToRgb(b):null;},rgbToHex:function(b){var a=String(this).match(/\d{1,3}/g);
|
||||
return(a)?a.rgbToHex(b):null;},substitute:function(a,b){return String(this).replace(b||(/\\?\{([^{}]+)\}/g),function(d,c){if(d.charAt(0)=="\\"){return d.slice(1);
|
||||
}return(a[c]!=null)?a[c]:"";});}});Number.implement({limit:function(b,a){return Math.min(a,Math.max(b,this));},round:function(a){a=Math.pow(10,a||0).toFixed(a<0?-a:0);
|
||||
return Math.round(this*a)/a;},times:function(b,c){for(var a=0;a<this;a++){b.call(c,a,this);}},toFloat:function(){return parseFloat(this);},toInt:function(a){return parseInt(this,a||10);
|
||||
}});Number.alias("each","times");(function(b){var a={};b.each(function(c){if(!Number[c]){a[c]=function(){return Math[c].apply(null,[this].concat(Array.from(arguments)));
|
||||
};}});Number.implement(a);})(["abs","acos","asin","atan","atan2","ceil","cos","exp","floor","log","max","min","pow","sin","sqrt","tan"]);Function.extend({attempt:function(){for(var b=0,a=arguments.length;
|
||||
b<a;b++){try{return arguments[b]();}catch(c){}}return null;}});Function.implement({attempt:function(a,c){try{return this.apply(c,Array.from(a));}catch(b){}return null;
|
||||
},bind:function(e){var a=this,b=arguments.length>1?Array.slice(arguments,1):null,d=function(){};var c=function(){var g=e,h=arguments.length;if(this instanceof c){d.prototype=a.prototype;
|
||||
g=new d;}var f=(!b&&!h)?a.call(g):a.apply(g,b&&h?b.concat(Array.slice(arguments)):b||arguments);return g==e?f:g;};return c;},pass:function(b,c){var a=this;
|
||||
if(b!=null){b=Array.from(b);}return function(){return a.apply(c,b||arguments);};},delay:function(b,c,a){return setTimeout(this.pass((a==null?[]:a),c),b);
|
||||
},periodical:function(c,b,a){return setInterval(this.pass((a==null?[]:a),b),c);}});(function(){var a=Object.prototype.hasOwnProperty;Object.extend({subset:function(d,g){var f={};
|
||||
for(var e=0,b=g.length;e<b;e++){var c=g[e];if(c in d){f[c]=d[c];}}return f;},map:function(b,e,f){var d={};for(var c in b){if(a.call(b,c)){d[c]=e.call(f,b[c],c,b);
|
||||
}}return d;},filter:function(b,e,g){var d={};for(var c in b){var f=b[c];if(a.call(b,c)&&e.call(g,f,c,b)){d[c]=f;}}return d;},every:function(b,d,e){for(var c in b){if(a.call(b,c)&&!d.call(e,b[c],c)){return false;
|
||||
}}return true;},some:function(b,d,e){for(var c in b){if(a.call(b,c)&&d.call(e,b[c],c)){return true;}}return false;},keys:function(b){var d=[];for(var c in b){if(a.call(b,c)){d.push(c);
|
||||
}}return d;},values:function(c){var b=[];for(var d in c){if(a.call(c,d)){b.push(c[d]);}}return b;},getLength:function(b){return Object.keys(b).length;},keyOf:function(b,d){for(var c in b){if(a.call(b,c)&&b[c]===d){return c;
|
||||
}}return null;},contains:function(b,c){return Object.keyOf(b,c)!=null;},toQueryString:function(b,c){var d=[];Object.each(b,function(h,g){if(c){g=c+"["+g+"]";
|
||||
}var f;switch(typeOf(h)){case"object":f=Object.toQueryString(h,g);break;case"array":var e={};h.each(function(k,j){e[j]=k;});f=Object.toQueryString(e,g);
|
||||
break;default:f=g+"="+encodeURIComponent(h);}if(h!=null){d.push(f);}});return d.join("&");}});})();(function(){var j=this.document;var g=j.window=this;
|
||||
var a=navigator.userAgent.toLowerCase(),b=navigator.platform.toLowerCase(),h=a.match(/(opera|ie|firefox|chrome|version)[\s\/:]([\w\d\.]+)?.*?(safari|version[\s\/:]([\w\d\.]+)|$)/)||[null,"unknown",0],d=h[1]=="ie"&&j.documentMode;
|
||||
var n=this.Browser={extend:Function.prototype.extend,name:(h[1]=="version")?h[3]:h[1],version:d||parseFloat((h[1]=="opera"&&h[4])?h[4]:h[2]),Platform:{name:a.match(/ip(?:ad|od|hone)/)?"ios":(a.match(/(?:webos|android)/)||b.match(/mac|win|linux/)||["other"])[0]},Features:{xpath:!!(j.evaluate),air:!!(g.runtime),query:!!(j.querySelector),json:!!(g.JSON)},Plugins:{}};
|
||||
n[n.name]=true;n[n.name+parseInt(n.version,10)]=true;n.Platform[n.Platform.name]=true;n.Request=(function(){var p=function(){return new XMLHttpRequest();
|
||||
};var o=function(){return new ActiveXObject("MSXML2.XMLHTTP");};var e=function(){return new ActiveXObject("Microsoft.XMLHTTP");};return Function.attempt(function(){p();
|
||||
return p;},function(){o();return o;},function(){e();return e;});})();n.Features.xhr=!!(n.Request);var i=(Function.attempt(function(){return navigator.plugins["Shockwave Flash"].description;
|
||||
},function(){return new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version");})||"0 r0").match(/\d+/g);n.Plugins.Flash={version:Number(i[0]||"0."+i[1])||0,build:Number(i[2])||0};
|
||||
n.exec=function(o){if(!o){return o;}if(g.execScript){g.execScript(o);}else{var e=j.createElement("script");e.setAttribute("type","text/javascript");e.text=o;
|
||||
j.head.appendChild(e);j.head.removeChild(e);}return o;};String.implement("stripScripts",function(o){var e="";var p=this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,function(q,r){e+=r+"\n";
|
||||
return"";});if(o===true){n.exec(e);}else{if(typeOf(o)=="function"){o(e,p);}}return p;});n.extend({Document:this.Document,Window:this.Window,Element:this.Element,Event:this.Event});
|
||||
this.Window=this.$constructor=new Type("Window",function(){});this.$family=Function.from("window").hide();Window.mirror(function(e,o){g[e]=o;});this.Document=j.$constructor=new Type("Document",function(){});
|
||||
j.$family=Function.from("document").hide();Document.mirror(function(e,o){j[e]=o;});j.html=j.documentElement;if(!j.head){j.head=j.getElementsByTagName("head")[0];
|
||||
}if(j.execCommand){try{j.execCommand("BackgroundImageCache",false,true);}catch(f){}}if(this.attachEvent&&!this.addEventListener){var c=function(){this.detachEvent("onunload",c);
|
||||
j.head=j.html=j.window=null;};this.attachEvent("onunload",c);}var l=Array.from;try{l(j.html.childNodes);}catch(f){Array.from=function(o){if(typeof o!="string"&&Type.isEnumerable(o)&&typeOf(o)!="array"){var e=o.length,p=new Array(e);
|
||||
while(e--){p[e]=o[e];}return p;}return l(o);};var k=Array.prototype,m=k.slice;["pop","push","reverse","shift","sort","splice","unshift","concat","join","slice"].each(function(e){var o=k[e];
|
||||
Array[e]=function(p){return o.apply(Array.from(p),m.call(arguments,1));};});}})();(function(){var b={};var a=this.DOMEvent=new Type("DOMEvent",function(c,g){if(!g){g=window;
|
||||
}c=c||g.event;if(c.$extended){return c;}this.event=c;this.$extended=true;this.shift=c.shiftKey;this.control=c.ctrlKey;this.alt=c.altKey;this.meta=c.metaKey;
|
||||
var i=this.type=c.type;var h=c.target||c.srcElement;while(h&&h.nodeType==3){h=h.parentNode;}this.target=document.id(h);if(i.indexOf("key")==0){var d=this.code=(c.which||c.keyCode);
|
||||
this.key=b[d];if(i=="keydown"){if(d>111&&d<124){this.key="f"+(d-111);}else{if(d>95&&d<106){this.key=d-96;}}}if(this.key==null){this.key=String.fromCharCode(d).toLowerCase();
|
||||
}}else{if(i=="click"||i=="dblclick"||i=="contextmenu"||i=="DOMMouseScroll"||i.indexOf("mouse")==0){var j=g.document;j=(!j.compatMode||j.compatMode=="CSS1Compat")?j.html:j.body;
|
||||
this.page={x:(c.pageX!=null)?c.pageX:c.clientX+j.scrollLeft,y:(c.pageY!=null)?c.pageY:c.clientY+j.scrollTop};this.client={x:(c.pageX!=null)?c.pageX-g.pageXOffset:c.clientX,y:(c.pageY!=null)?c.pageY-g.pageYOffset:c.clientY};
|
||||
if(i=="DOMMouseScroll"||i=="mousewheel"){this.wheel=(c.wheelDelta)?c.wheelDelta/120:-(c.detail||0)/3;}this.rightClick=(c.which==3||c.button==2);if(i=="mouseover"||i=="mouseout"){var k=c.relatedTarget||c[(i=="mouseover"?"from":"to")+"Element"];
|
||||
while(k&&k.nodeType==3){k=k.parentNode;}this.relatedTarget=document.id(k);}}else{if(i.indexOf("touch")==0||i.indexOf("gesture")==0){this.rotation=c.rotation;
|
||||
this.scale=c.scale;this.targetTouches=c.targetTouches;this.changedTouches=c.changedTouches;var f=this.touches=c.touches;if(f&&f[0]){var e=f[0];this.page={x:e.pageX,y:e.pageY};
|
||||
this.client={x:e.clientX,y:e.clientY};}}}}if(!this.client){this.client={};}if(!this.page){this.page={};}});a.implement({stop:function(){return this.preventDefault().stopPropagation();
|
||||
},stopPropagation:function(){if(this.event.stopPropagation){this.event.stopPropagation();}else{this.event.cancelBubble=true;}return this;},preventDefault:function(){if(this.event.preventDefault){this.event.preventDefault();
|
||||
}else{this.event.returnValue=false;}return this;}});a.defineKey=function(d,c){b[d]=c;return this;};a.defineKeys=a.defineKey.overloadSetter(true);a.defineKeys({"38":"up","40":"down","37":"left","39":"right","27":"esc","32":"space","8":"backspace","9":"tab","46":"delete","13":"enter"});
|
||||
})();(function(){var a=this.Class=new Type("Class",function(h){if(instanceOf(h,Function)){h={initialize:h};}var g=function(){e(this);if(g.$prototyping){return this;
|
||||
}this.$caller=null;var i=(this.initialize)?this.initialize.apply(this,arguments):this;this.$caller=this.caller=null;return i;}.extend(this).implement(h);
|
||||
g.$constructor=a;g.prototype.$constructor=g;g.prototype.parent=c;return g;});var c=function(){if(!this.$caller){throw new Error('The method "parent" cannot be called.');
|
||||
}var g=this.$caller.$name,h=this.$caller.$owner.parent,i=(h)?h.prototype[g]:null;if(!i){throw new Error('The method "'+g+'" has no parent.');}return i.apply(this,arguments);
|
||||
};var e=function(g){for(var h in g){var j=g[h];switch(typeOf(j)){case"object":var i=function(){};i.prototype=j;g[h]=e(new i);break;case"array":g[h]=j.clone();
|
||||
break;}}return g;};var b=function(g,h,j){if(j.$origin){j=j.$origin;}var i=function(){if(j.$protected&&this.$caller==null){throw new Error('The method "'+h+'" cannot be called.');
|
||||
}var l=this.caller,m=this.$caller;this.caller=m;this.$caller=i;var k=j.apply(this,arguments);this.$caller=m;this.caller=l;return k;}.extend({$owner:g,$origin:j,$name:h});
|
||||
return i;};var f=function(h,i,g){if(a.Mutators.hasOwnProperty(h)){i=a.Mutators[h].call(this,i);if(i==null){return this;}}if(typeOf(i)=="function"){if(i.$hidden){return this;
|
||||
}this.prototype[h]=(g)?i:b(this,h,i);}else{Object.merge(this.prototype,h,i);}return this;};var d=function(g){g.$prototyping=true;var h=new g;delete g.$prototyping;
|
||||
return h;};a.implement("implement",f.overloadSetter());a.Mutators={Extends:function(g){this.parent=g;this.prototype=d(g);},Implements:function(g){Array.from(g).each(function(j){var h=new j;
|
||||
for(var i in h){f.call(this,i,h[i],true);}},this);}};})();(function(){this.Chain=new Class({$chain:[],chain:function(){this.$chain.append(Array.flatten(arguments));
|
||||
return this;},callChain:function(){return(this.$chain.length)?this.$chain.shift().apply(this,arguments):false;},clearChain:function(){this.$chain.empty();
|
||||
return this;}});var a=function(b){return b.replace(/^on([A-Z])/,function(c,d){return d.toLowerCase();});};this.Events=new Class({$events:{},addEvent:function(d,c,b){d=a(d);
|
||||
this.$events[d]=(this.$events[d]||[]).include(c);if(b){c.internal=true;}return this;},addEvents:function(b){for(var c in b){this.addEvent(c,b[c]);}return this;
|
||||
},fireEvent:function(e,c,b){e=a(e);var d=this.$events[e];if(!d){return this;}c=Array.from(c);d.each(function(f){if(b){f.delay(b,this,c);}else{f.apply(this,c);
|
||||
}},this);return this;},removeEvent:function(e,d){e=a(e);var c=this.$events[e];if(c&&!d.internal){var b=c.indexOf(d);if(b!=-1){delete c[b];}}return this;
|
||||
},removeEvents:function(d){var e;if(typeOf(d)=="object"){for(e in d){this.removeEvent(e,d[e]);}return this;}if(d){d=a(d);}for(e in this.$events){if(d&&d!=e){continue;
|
||||
}var c=this.$events[e];for(var b=c.length;b--;){if(b in c){this.removeEvent(e,c[b]);}}}return this;}});this.Options=new Class({setOptions:function(){var b=this.options=Object.merge.apply(null,[{},this.options].append(arguments));
|
||||
if(this.addEvent){for(var c in b){if(typeOf(b[c])!="function"||!(/^on[A-Z]/).test(c)){continue;}this.addEvent(c,b[c]);delete b[c];}}return this;}});})();
|
||||
(function(){var k,n,l,g,a={},c={},m=/\\/g;var e=function(q,p){if(q==null){return null;}if(q.Slick===true){return q;}q=(""+q).replace(/^\s+|\s+$/g,"");g=!!p;
|
||||
var o=(g)?c:a;if(o[q]){return o[q];}k={Slick:true,expressions:[],raw:q,reverse:function(){return e(this.raw,true);}};n=-1;while(q!=(q=q.replace(j,b))){}k.length=k.expressions.length;
|
||||
return o[k.raw]=(g)?h(k):k;};var i=function(o){if(o==="!"){return" ";}else{if(o===" "){return"!";}else{if((/^!/).test(o)){return o.replace(/^!/,"");}else{return"!"+o;
|
||||
}}}};var h=function(u){var r=u.expressions;for(var p=0;p<r.length;p++){var t=r[p];var q={parts:[],tag:"*",combinator:i(t[0].combinator)};for(var o=0;o<t.length;
|
||||
o++){var s=t[o];if(!s.reverseCombinator){s.reverseCombinator=" ";}s.combinator=s.reverseCombinator;delete s.reverseCombinator;}t.reverse().push(q);}return u;
|
||||
};var f=function(o){return o.replace(/[-[\]{}()*+?.\\^$|,#\s]/g,function(p){return"\\"+p;});};var j=new RegExp("^(?:\\s*(,)\\s*|\\s*(<combinator>+)\\s*|(\\s+)|(<unicode>+|\\*)|\\#(<unicode>+)|\\.(<unicode>+)|\\[\\s*(<unicode1>+)(?:\\s*([*^$!~|]?=)(?:\\s*(?:([\"']?)(.*?)\\9)))?\\s*\\](?!\\])|(:+)(<unicode>+)(?:\\((?:(?:([\"'])([^\\13]*)\\13)|((?:\\([^)]+\\)|[^()]*)+))\\))?)".replace(/<combinator>/,"["+f(">+~`!@$%^&={}\\;</")+"]").replace(/<unicode>/g,"(?:[\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])").replace(/<unicode1>/g,"(?:[:\\w\\u00a1-\\uFFFF-]|\\\\[^\\s0-9a-f])"));
|
||||
function b(x,s,D,z,r,C,q,B,A,y,u,F,G,v,p,w){if(s||n===-1){k.expressions[++n]=[];l=-1;if(s){return"";}}if(D||z||l===-1){D=D||" ";var t=k.expressions[n];
|
||||
if(g&&t[l]){t[l].reverseCombinator=i(D);}t[++l]={combinator:D,tag:"*"};}var o=k.expressions[n][l];if(r){o.tag=r.replace(m,"");}else{if(C){o.id=C.replace(m,"");
|
||||
}else{if(q){q=q.replace(m,"");if(!o.classList){o.classList=[];}if(!o.classes){o.classes=[];}o.classList.push(q);o.classes.push({value:q,regexp:new RegExp("(^|\\s)"+f(q)+"(\\s|$)")});
|
||||
}else{if(G){w=w||p;w=w?w.replace(m,""):null;if(!o.pseudos){o.pseudos=[];}o.pseudos.push({key:G.replace(m,""),value:w,type:F.length==1?"class":"element"});
|
||||
}else{if(B){B=B.replace(m,"");u=(u||"").replace(m,"");var E,H;switch(A){case"^=":H=new RegExp("^"+f(u));break;case"$=":H=new RegExp(f(u)+"$");break;case"~=":H=new RegExp("(^|\\s)"+f(u)+"(\\s|$)");
|
||||
break;case"|=":H=new RegExp("^"+f(u)+"(-|$)");break;case"=":E=function(I){return u==I;};break;case"*=":E=function(I){return I&&I.indexOf(u)>-1;};break;
|
||||
case"!=":E=function(I){return u!=I;};break;default:E=function(I){return !!I;};}if(u==""&&(/^[*$^]=$/).test(A)){E=function(){return false;};}if(!E){E=function(I){return I&&H.test(I);
|
||||
};}if(!o.attributes){o.attributes=[];}o.attributes.push({key:B,operator:A,value:u,test:E});}}}}}return"";}var d=(this.Slick||{});d.parse=function(o){return e(o);
|
||||
};d.escapeRegExp=f;if(!this.Slick){this.Slick=d;}}).apply((typeof exports!="undefined")?exports:this);(function(){var k={},m={},d=Object.prototype.toString;
|
||||
k.isNativeCode=function(c){return(/\{\s*\[native code\]\s*\}/).test(""+c);};k.isXML=function(c){return(!!c.xmlVersion)||(!!c.xml)||(d.call(c)=="[object XMLDocument]")||(c.nodeType==9&&c.documentElement.nodeName!="HTML");
|
||||
};k.setDocument=function(w){var p=w.nodeType;if(p==9){}else{if(p){w=w.ownerDocument;}else{if(w.navigator){w=w.document;}else{return;}}}if(this.document===w){return;
|
||||
}this.document=w;var A=w.documentElement,o=this.getUIDXML(A),s=m[o],r;if(s){for(r in s){this[r]=s[r];}return;}s=m[o]={};s.root=A;s.isXMLDocument=this.isXML(w);
|
||||
s.brokenStarGEBTN=s.starSelectsClosedQSA=s.idGetsName=s.brokenMixedCaseQSA=s.brokenGEBCN=s.brokenCheckedQSA=s.brokenEmptyAttributeQSA=s.isHTMLDocument=s.nativeMatchesSelector=false;
|
||||
var q,u,y,z,t;var x,v="slick_uniqueid";var c=w.createElement("div");var n=w.body||w.getElementsByTagName("body")[0]||A;n.appendChild(c);try{c.innerHTML='<a id="'+v+'"></a>';
|
||||
s.isHTMLDocument=!!w.getElementById(v);}catch(C){}if(s.isHTMLDocument){c.style.display="none";c.appendChild(w.createComment(""));u=(c.getElementsByTagName("*").length>1);
|
||||
try{c.innerHTML="foo</foo>";x=c.getElementsByTagName("*");q=(x&&!!x.length&&x[0].nodeName.charAt(0)=="/");}catch(C){}s.brokenStarGEBTN=u||q;try{c.innerHTML='<a name="'+v+'"></a><b id="'+v+'"></b>';
|
||||
s.idGetsName=w.getElementById(v)===c.firstChild;}catch(C){}if(c.getElementsByClassName){try{c.innerHTML='<a class="f"></a><a class="b"></a>';c.getElementsByClassName("b").length;
|
||||
c.firstChild.className="b";z=(c.getElementsByClassName("b").length!=2);}catch(C){}try{c.innerHTML='<a class="a"></a><a class="f b a"></a>';y=(c.getElementsByClassName("a").length!=2);
|
||||
}catch(C){}s.brokenGEBCN=z||y;}if(c.querySelectorAll){try{c.innerHTML="foo</foo>";x=c.querySelectorAll("*");s.starSelectsClosedQSA=(x&&!!x.length&&x[0].nodeName.charAt(0)=="/");
|
||||
}catch(C){}try{c.innerHTML='<a class="MiX"></a>';s.brokenMixedCaseQSA=!c.querySelectorAll(".MiX").length;}catch(C){}try{c.innerHTML='<select><option selected="selected">a</option></select>';
|
||||
s.brokenCheckedQSA=(c.querySelectorAll(":checked").length==0);}catch(C){}try{c.innerHTML='<a class=""></a>';s.brokenEmptyAttributeQSA=(c.querySelectorAll('[class*=""]').length!=0);
|
||||
}catch(C){}}try{c.innerHTML='<form action="s"><input id="action"/></form>';t=(c.firstChild.getAttribute("action")!="s");}catch(C){}s.nativeMatchesSelector=A.matchesSelector||A.mozMatchesSelector||A.webkitMatchesSelector;
|
||||
if(s.nativeMatchesSelector){try{s.nativeMatchesSelector.call(A,":slick");s.nativeMatchesSelector=null;}catch(C){}}}try{A.slick_expando=1;delete A.slick_expando;
|
||||
s.getUID=this.getUIDHTML;}catch(C){s.getUID=this.getUIDXML;}n.removeChild(c);c=x=n=null;s.getAttribute=(s.isHTMLDocument&&t)?function(G,E){var H=this.attributeGetters[E];
|
||||
if(H){return H.call(G);}var F=G.getAttributeNode(E);return(F)?F.nodeValue:null;}:function(F,E){var G=this.attributeGetters[E];return(G)?G.call(F):F.getAttribute(E);
|
||||
};s.hasAttribute=(A&&this.isNativeCode(A.hasAttribute))?function(F,E){return F.hasAttribute(E);}:function(F,E){F=F.getAttributeNode(E);return !!(F&&(F.specified||F.nodeValue));
|
||||
};var D=A&&this.isNativeCode(A.contains),B=w&&this.isNativeCode(w.contains);s.contains=(D&&B)?function(E,F){return E.contains(F);}:(D&&!B)?function(E,F){return E===F||((E===w)?w.documentElement:E).contains(F);
|
||||
}:(A&&A.compareDocumentPosition)?function(E,F){return E===F||!!(E.compareDocumentPosition(F)&16);}:function(E,F){if(F){do{if(F===E){return true;}}while((F=F.parentNode));
|
||||
}return false;};s.documentSorter=(A.compareDocumentPosition)?function(F,E){if(!F.compareDocumentPosition||!E.compareDocumentPosition){return 0;}return F.compareDocumentPosition(E)&4?-1:F===E?0:1;
|
||||
}:("sourceIndex" in A)?function(F,E){if(!F.sourceIndex||!E.sourceIndex){return 0;}return F.sourceIndex-E.sourceIndex;}:(w.createRange)?function(H,F){if(!H.ownerDocument||!F.ownerDocument){return 0;
|
||||
}var G=H.ownerDocument.createRange(),E=F.ownerDocument.createRange();G.setStart(H,0);G.setEnd(H,0);E.setStart(F,0);E.setEnd(F,0);return G.compareBoundaryPoints(Range.START_TO_END,E);
|
||||
}:null;A=null;for(r in s){this[r]=s[r];}};var f=/^([#.]?)((?:[\w-]+|\*))$/,h=/\[.+[*$^]=(?:""|'')?\]/,g={};k.search=function(U,z,H,s){var p=this.found=(s)?null:(H||[]);
|
||||
if(!U){return p;}else{if(U.navigator){U=U.document;}else{if(!U.nodeType){return p;}}}var F,O,V=this.uniques={},I=!!(H&&H.length),y=(U.nodeType==9);if(this.document!==(y?U:U.ownerDocument)){this.setDocument(U);
|
||||
}if(I){for(O=p.length;O--;){V[this.getUID(p[O])]=true;}}if(typeof z=="string"){var r=z.match(f);simpleSelectors:if(r){var u=r[1],v=r[2],A,E;if(!u){if(v=="*"&&this.brokenStarGEBTN){break simpleSelectors;
|
||||
}E=U.getElementsByTagName(v);if(s){return E[0]||null;}for(O=0;A=E[O++];){if(!(I&&V[this.getUID(A)])){p.push(A);}}}else{if(u=="#"){if(!this.isHTMLDocument||!y){break simpleSelectors;
|
||||
}A=U.getElementById(v);if(!A){return p;}if(this.idGetsName&&A.getAttributeNode("id").nodeValue!=v){break simpleSelectors;}if(s){return A||null;}if(!(I&&V[this.getUID(A)])){p.push(A);
|
||||
}}else{if(u=="."){if(!this.isHTMLDocument||((!U.getElementsByClassName||this.brokenGEBCN)&&U.querySelectorAll)){break simpleSelectors;}if(U.getElementsByClassName&&!this.brokenGEBCN){E=U.getElementsByClassName(v);
|
||||
if(s){return E[0]||null;}for(O=0;A=E[O++];){if(!(I&&V[this.getUID(A)])){p.push(A);}}}else{var T=new RegExp("(^|\\s)"+e.escapeRegExp(v)+"(\\s|$)");E=U.getElementsByTagName("*");
|
||||
for(O=0;A=E[O++];){className=A.className;if(!(className&&T.test(className))){continue;}if(s){return A;}if(!(I&&V[this.getUID(A)])){p.push(A);}}}}}}if(I){this.sort(p);
|
||||
}return(s)?null:p;}querySelector:if(U.querySelectorAll){if(!this.isHTMLDocument||g[z]||this.brokenMixedCaseQSA||(this.brokenCheckedQSA&&z.indexOf(":checked")>-1)||(this.brokenEmptyAttributeQSA&&h.test(z))||(!y&&z.indexOf(",")>-1)||e.disableQSA){break querySelector;
|
||||
}var S=z,x=U;if(!y){var C=x.getAttribute("id"),t="slickid__";x.setAttribute("id",t);S="#"+t+" "+S;U=x.parentNode;}try{if(s){return U.querySelector(S)||null;
|
||||
}else{E=U.querySelectorAll(S);}}catch(Q){g[z]=1;break querySelector;}finally{if(!y){if(C){x.setAttribute("id",C);}else{x.removeAttribute("id");}U=x;}}if(this.starSelectsClosedQSA){for(O=0;
|
||||
A=E[O++];){if(A.nodeName>"@"&&!(I&&V[this.getUID(A)])){p.push(A);}}}else{for(O=0;A=E[O++];){if(!(I&&V[this.getUID(A)])){p.push(A);}}}if(I){this.sort(p);
|
||||
}return p;}F=this.Slick.parse(z);if(!F.length){return p;}}else{if(z==null){return p;}else{if(z.Slick){F=z;}else{if(this.contains(U.documentElement||U,z)){(p)?p.push(z):p=z;
|
||||
return p;}else{return p;}}}}this.posNTH={};this.posNTHLast={};this.posNTHType={};this.posNTHTypeLast={};this.push=(!I&&(s||(F.length==1&&F.expressions[0].length==1)))?this.pushArray:this.pushUID;
|
||||
if(p==null){p=[];}var M,L,K;var B,J,D,c,q,G,W;var N,P,o,w,R=F.expressions;search:for(O=0;(P=R[O]);O++){for(M=0;(o=P[M]);M++){B="combinator:"+o.combinator;
|
||||
if(!this[B]){continue search;}J=(this.isXMLDocument)?o.tag:o.tag.toUpperCase();D=o.id;c=o.classList;q=o.classes;G=o.attributes;W=o.pseudos;w=(M===(P.length-1));
|
||||
this.bitUniques={};if(w){this.uniques=V;this.found=p;}else{this.uniques={};this.found=[];}if(M===0){this[B](U,J,D,q,G,W,c);if(s&&w&&p.length){break search;
|
||||
}}else{if(s&&w){for(L=0,K=N.length;L<K;L++){this[B](N[L],J,D,q,G,W,c);if(p.length){break search;}}}else{for(L=0,K=N.length;L<K;L++){this[B](N[L],J,D,q,G,W,c);
|
||||
}}}N=this.found;}}if(I||(F.expressions.length>1)){this.sort(p);}return(s)?(p[0]||null):p;};k.uidx=1;k.uidk="slick-uniqueid";k.getUIDXML=function(n){var c=n.getAttribute(this.uidk);
|
||||
if(!c){c=this.uidx++;n.setAttribute(this.uidk,c);}return c;};k.getUIDHTML=function(c){return c.uniqueNumber||(c.uniqueNumber=this.uidx++);};k.sort=function(c){if(!this.documentSorter){return c;
|
||||
}c.sort(this.documentSorter);return c;};k.cacheNTH={};k.matchNTH=/^([+-]?\d*)?([a-z]+)?([+-]\d+)?$/;k.parseNTHArgument=function(q){var o=q.match(this.matchNTH);
|
||||
if(!o){return false;}var p=o[2]||false;var n=o[1]||1;if(n=="-"){n=-1;}var c=+o[3]||0;o=(p=="n")?{a:n,b:c}:(p=="odd")?{a:2,b:1}:(p=="even")?{a:2,b:0}:{a:0,b:n};
|
||||
return(this.cacheNTH[q]=o);};k.createNTHPseudo=function(p,n,c,o){return function(s,q){var u=this.getUID(s);if(!this[c][u]){var A=s.parentNode;if(!A){return false;
|
||||
}var r=A[p],t=1;if(o){var z=s.nodeName;do{if(r.nodeName!=z){continue;}this[c][this.getUID(r)]=t++;}while((r=r[n]));}else{do{if(r.nodeType!=1){continue;
|
||||
}this[c][this.getUID(r)]=t++;}while((r=r[n]));}}q=q||"n";var v=this.cacheNTH[q]||this.parseNTHArgument(q);if(!v){return false;}var y=v.a,x=v.b,w=this[c][u];
|
||||
if(y==0){return x==w;}if(y>0){if(w<x){return false;}}else{if(x<w){return false;}}return((w-x)%y)==0;};};k.pushArray=function(p,c,r,o,n,q){if(this.matchSelector(p,c,r,o,n,q)){this.found.push(p);
|
||||
}};k.pushUID=function(q,c,s,p,n,r){var o=this.getUID(q);if(!this.uniques[o]&&this.matchSelector(q,c,s,p,n,r)){this.uniques[o]=true;this.found.push(q);}};
|
||||
k.matchNode=function(n,o){if(this.isHTMLDocument&&this.nativeMatchesSelector){try{return this.nativeMatchesSelector.call(n,o.replace(/\[([^=]+)=\s*([^'"\]]+?)\s*\]/g,'[$1="$2"]'));
|
||||
}catch(u){}}var t=this.Slick.parse(o);if(!t){return true;}var r=t.expressions,s=0,q;for(q=0;(currentExpression=r[q]);q++){if(currentExpression.length==1){var p=currentExpression[0];
|
||||
if(this.matchSelector(n,(this.isXMLDocument)?p.tag:p.tag.toUpperCase(),p.id,p.classes,p.attributes,p.pseudos)){return true;}s++;}}if(s==t.length){return false;
|
||||
}var c=this.search(this.document,t),v;for(q=0;v=c[q++];){if(v===n){return true;}}return false;};k.matchPseudo=function(q,c,p){var n="pseudo:"+c;if(this[n]){return this[n](q,p);
|
||||
}var o=this.getAttribute(q,c);return(p)?p==o:!!o;};k.matchSelector=function(o,v,c,p,q,s){if(v){var t=(this.isXMLDocument)?o.nodeName:o.nodeName.toUpperCase();
|
||||
if(v=="*"){if(t<"@"){return false;}}else{if(t!=v){return false;}}}if(c&&o.getAttribute("id")!=c){return false;}var r,n,u;if(p){for(r=p.length;r--;){u=this.getAttribute(o,"class");
|
||||
if(!(u&&p[r].regexp.test(u))){return false;}}}if(q){for(r=q.length;r--;){n=q[r];if(n.operator?!n.test(this.getAttribute(o,n.key)):!this.hasAttribute(o,n.key)){return false;
|
||||
}}}if(s){for(r=s.length;r--;){n=s[r];if(!this.matchPseudo(o,n.key,n.value)){return false;}}}return true;};var j={" ":function(q,w,n,r,s,u,p){var t,v,o;
|
||||
if(this.isHTMLDocument){getById:if(n){v=this.document.getElementById(n);if((!v&&q.all)||(this.idGetsName&&v&&v.getAttributeNode("id").nodeValue!=n)){o=q.all[n];
|
||||
if(!o){return;}if(!o[0]){o=[o];}for(t=0;v=o[t++];){var c=v.getAttributeNode("id");if(c&&c.nodeValue==n){this.push(v,w,null,r,s,u);break;}}return;}if(!v){if(this.contains(this.root,q)){return;
|
||||
}else{break getById;}}else{if(this.document!==q&&!this.contains(q,v)){return;}}this.push(v,w,null,r,s,u);return;}getByClass:if(r&&q.getElementsByClassName&&!this.brokenGEBCN){o=q.getElementsByClassName(p.join(" "));
|
||||
if(!(o&&o.length)){break getByClass;}for(t=0;v=o[t++];){this.push(v,w,n,null,s,u);}return;}}getByTag:{o=q.getElementsByTagName(w);if(!(o&&o.length)){break getByTag;
|
||||
}if(!this.brokenStarGEBTN){w=null;}for(t=0;v=o[t++];){this.push(v,w,n,r,s,u);}}},">":function(p,c,r,o,n,q){if((p=p.firstChild)){do{if(p.nodeType==1){this.push(p,c,r,o,n,q);
|
||||
}}while((p=p.nextSibling));}},"+":function(p,c,r,o,n,q){while((p=p.nextSibling)){if(p.nodeType==1){this.push(p,c,r,o,n,q);break;}}},"^":function(p,c,r,o,n,q){p=p.firstChild;
|
||||
if(p){if(p.nodeType==1){this.push(p,c,r,o,n,q);}else{this["combinator:+"](p,c,r,o,n,q);}}},"~":function(q,c,s,p,n,r){while((q=q.nextSibling)){if(q.nodeType!=1){continue;
|
||||
}var o=this.getUID(q);if(this.bitUniques[o]){break;}this.bitUniques[o]=true;this.push(q,c,s,p,n,r);}},"++":function(p,c,r,o,n,q){this["combinator:+"](p,c,r,o,n,q);
|
||||
this["combinator:!+"](p,c,r,o,n,q);},"~~":function(p,c,r,o,n,q){this["combinator:~"](p,c,r,o,n,q);this["combinator:!~"](p,c,r,o,n,q);},"!":function(p,c,r,o,n,q){while((p=p.parentNode)){if(p!==this.document){this.push(p,c,r,o,n,q);
|
||||
}}},"!>":function(p,c,r,o,n,q){p=p.parentNode;if(p!==this.document){this.push(p,c,r,o,n,q);}},"!+":function(p,c,r,o,n,q){while((p=p.previousSibling)){if(p.nodeType==1){this.push(p,c,r,o,n,q);
|
||||
break;}}},"!^":function(p,c,r,o,n,q){p=p.lastChild;if(p){if(p.nodeType==1){this.push(p,c,r,o,n,q);}else{this["combinator:!+"](p,c,r,o,n,q);}}},"!~":function(q,c,s,p,n,r){while((q=q.previousSibling)){if(q.nodeType!=1){continue;
|
||||
}var o=this.getUID(q);if(this.bitUniques[o]){break;}this.bitUniques[o]=true;this.push(q,c,s,p,n,r);}}};for(var i in j){k["combinator:"+i]=j[i];}var l={empty:function(c){var n=c.firstChild;
|
||||
return !(n&&n.nodeType==1)&&!(c.innerText||c.textContent||"").length;},not:function(c,n){return !this.matchNode(c,n);},contains:function(c,n){return(c.innerText||c.textContent||"").indexOf(n)>-1;
|
||||
},"first-child":function(c){while((c=c.previousSibling)){if(c.nodeType==1){return false;}}return true;},"last-child":function(c){while((c=c.nextSibling)){if(c.nodeType==1){return false;
|
||||
}}return true;},"only-child":function(o){var n=o;while((n=n.previousSibling)){if(n.nodeType==1){return false;}}var c=o;while((c=c.nextSibling)){if(c.nodeType==1){return false;
|
||||
}}return true;},"nth-child":k.createNTHPseudo("firstChild","nextSibling","posNTH"),"nth-last-child":k.createNTHPseudo("lastChild","previousSibling","posNTHLast"),"nth-of-type":k.createNTHPseudo("firstChild","nextSibling","posNTHType",true),"nth-last-of-type":k.createNTHPseudo("lastChild","previousSibling","posNTHTypeLast",true),index:function(n,c){return this["pseudo:nth-child"](n,""+(c+1));
|
||||
},even:function(c){return this["pseudo:nth-child"](c,"2n");},odd:function(c){return this["pseudo:nth-child"](c,"2n+1");},"first-of-type":function(c){var n=c.nodeName;
|
||||
while((c=c.previousSibling)){if(c.nodeName==n){return false;}}return true;},"last-of-type":function(c){var n=c.nodeName;while((c=c.nextSibling)){if(c.nodeName==n){return false;
|
||||
}}return true;},"only-of-type":function(o){var n=o,p=o.nodeName;while((n=n.previousSibling)){if(n.nodeName==p){return false;}}var c=o;while((c=c.nextSibling)){if(c.nodeName==p){return false;
|
||||
}}return true;},enabled:function(c){return !c.disabled;},disabled:function(c){return c.disabled;},checked:function(c){return c.checked||c.selected;},focus:function(c){return this.isHTMLDocument&&this.document.activeElement===c&&(c.href||c.type||this.hasAttribute(c,"tabindex"));
|
||||
},root:function(c){return(c===this.root);},selected:function(c){return c.selected;}};for(var b in l){k["pseudo:"+b]=l[b];}var a=k.attributeGetters={"for":function(){return("htmlFor" in this)?this.htmlFor:this.getAttribute("for");
|
||||
},href:function(){return("href" in this)?this.getAttribute("href",2):this.getAttribute("href");},style:function(){return(this.style)?this.style.cssText:this.getAttribute("style");
|
||||
},tabindex:function(){var c=this.getAttributeNode("tabindex");return(c&&c.specified)?c.nodeValue:null;},type:function(){return this.getAttribute("type");
|
||||
},maxlength:function(){var c=this.getAttributeNode("maxLength");return(c&&c.specified)?c.nodeValue:null;}};a.MAXLENGTH=a.maxLength=a.maxlength;var e=k.Slick=(this.Slick||{});
|
||||
e.version="1.1.7";e.search=function(n,o,c){return k.search(n,o,c);};e.find=function(c,n){return k.search(c,n,null,true);};e.contains=function(c,n){k.setDocument(c);
|
||||
return k.contains(c,n);};e.getAttribute=function(n,c){k.setDocument(n);return k.getAttribute(n,c);};e.hasAttribute=function(n,c){k.setDocument(n);return k.hasAttribute(n,c);
|
||||
};e.match=function(n,c){if(!(n&&c)){return false;}if(!c||c===n){return true;}k.setDocument(n);return k.matchNode(n,c);};e.defineAttributeGetter=function(c,n){k.attributeGetters[c]=n;
|
||||
return this;};e.lookupAttributeGetter=function(c){return k.attributeGetters[c];};e.definePseudo=function(c,n){k["pseudo:"+c]=function(p,o){return n.call(p,o);
|
||||
};return this;};e.lookupPseudo=function(c){var n=k["pseudo:"+c];if(n){return function(o){return n.call(this,o);};}return null;};e.override=function(n,c){k.override(n,c);
|
||||
return this;};e.isXML=k.isXML;e.uidOf=function(c){return k.getUIDHTML(c);};if(!this.Slick){this.Slick=e;}}).apply((typeof exports!="undefined")?exports:this);
|
||||
var Element=function(b,g){var h=Element.Constructors[b];if(h){return h(g);}if(typeof b!="string"){return document.id(b).set(g);}if(!g){g={};}if(!(/^[\w-]+$/).test(b)){var e=Slick.parse(b).expressions[0][0];
|
||||
b=(e.tag=="*")?"div":e.tag;if(e.id&&g.id==null){g.id=e.id;}var d=e.attributes;if(d){for(var a,f=0,c=d.length;f<c;f++){a=d[f];if(g[a.key]!=null){continue;
|
||||
}if(a.value!=null&&a.operator=="="){g[a.key]=a.value;}else{if(!a.value&&!a.operator){g[a.key]=true;}}}}if(e.classList&&g["class"]==null){g["class"]=e.classList.join(" ");
|
||||
}}return document.newElement(b,g);};if(Browser.Element){Element.prototype=Browser.Element.prototype;Element.prototype._fireEvent=(function(a){return function(b,c){return a.call(this,b,c);
|
||||
};})(Element.prototype.fireEvent);}new Type("Element",Element).mirror(function(a){if(Array.prototype[a]){return;}var b={};b[a]=function(){var h=[],e=arguments,j=true;
|
||||
for(var g=0,d=this.length;g<d;g++){var f=this[g],c=h[g]=f[a].apply(f,e);j=(j&&typeOf(c)=="element");}return(j)?new Elements(h):h;};Elements.implement(b);
|
||||
});if(!Browser.Element){Element.parent=Object;Element.Prototype={"$constructor":Element,"$family":Function.from("element").hide()};Element.mirror(function(a,b){Element.Prototype[a]=b;
|
||||
});}Element.Constructors={};var IFrame=new Type("IFrame",function(){var e=Array.link(arguments,{properties:Type.isObject,iframe:function(f){return(f!=null);
|
||||
}});var c=e.properties||{},b;if(e.iframe){b=document.id(e.iframe);}var d=c.onload||function(){};delete c.onload;c.id=c.name=[c.id,c.name,b?(b.id||b.name):"IFrame_"+String.uniqueID()].pick();
|
||||
b=new Element(b||"iframe",c);var a=function(){d.call(b.contentWindow);};if(window.frames[c.id]){a();}else{b.addListener("load",a);}return b;});var Elements=this.Elements=function(a){if(a&&a.length){var e={},d;
|
||||
for(var c=0;d=a[c++];){var b=Slick.uidOf(d);if(!e[b]){e[b]=true;this.push(d);}}}};Elements.prototype={length:0};Elements.parent=Array;new Type("Elements",Elements).implement({filter:function(a,b){if(!a){return this;
|
||||
}return new Elements(Array.filter(this,(typeOf(a)=="string")?function(c){return c.match(a);}:a,b));}.protect(),push:function(){var d=this.length;for(var b=0,a=arguments.length;
|
||||
b<a;b++){var c=document.id(arguments[b]);if(c){this[d++]=c;}}return(this.length=d);}.protect(),unshift:function(){var b=[];for(var c=0,a=arguments.length;
|
||||
c<a;c++){var d=document.id(arguments[c]);if(d){b.push(d);}}return Array.prototype.unshift.apply(this,b);}.protect(),concat:function(){var b=new Elements(this);
|
||||
for(var c=0,a=arguments.length;c<a;c++){var d=arguments[c];if(Type.isEnumerable(d)){b.append(d);}else{b.push(d);}}return b;}.protect(),append:function(c){for(var b=0,a=c.length;
|
||||
b<a;b++){this.push(c[b]);}return this;}.protect(),empty:function(){while(this.length){delete this[--this.length];}return this;}.protect()});(function(){var f=Array.prototype.splice,a={"0":0,"1":1,length:2};
|
||||
f.call(a,1,1);if(a[1]==1){Elements.implement("splice",function(){var g=this.length;var e=f.apply(this,arguments);while(g>=this.length){delete this[g--];
|
||||
}return e;}.protect());}Array.forEachMethod(function(g,e){Elements.implement(e,g);});Array.mirror(Elements);var d;try{d=(document.createElement("<input name=x>").name=="x");
|
||||
}catch(b){}var c=function(e){return(""+e).replace(/&/g,"&").replace(/"/g,""");};Document.implement({newElement:function(e,g){if(g&&g.checked!=null){g.defaultChecked=g.checked;
|
||||
}if(d&&g){e="<"+e;if(g.name){e+=' name="'+c(g.name)+'"';}if(g.type){e+=' type="'+c(g.type)+'"';}e+=">";delete g.name;delete g.type;}return this.id(this.createElement(e)).set(g);
|
||||
}});})();(function(){Slick.uidOf(window);Slick.uidOf(document);Document.implement({newTextNode:function(e){return this.createTextNode(e);},getDocument:function(){return this;
|
||||
},getWindow:function(){return this.window;},id:(function(){var e={string:function(E,D,l){E=Slick.find(l,"#"+E.replace(/(\W)/g,"\\$1"));return(E)?e.element(E,D):null;
|
||||
},element:function(D,E){Slick.uidOf(D);if(!E&&!D.$family&&!(/^(?:object|embed)$/i).test(D.tagName)){var l=D.fireEvent;D._fireEvent=function(F,G){return l(F,G);
|
||||
};Object.append(D,Element.Prototype);}return D;},object:function(D,E,l){if(D.toElement){return e.element(D.toElement(l),E);}return null;}};e.textnode=e.whitespace=e.window=e.document=function(l){return l;
|
||||
};return function(D,F,E){if(D&&D.$family&&D.uniqueNumber){return D;}var l=typeOf(D);return(e[l])?e[l](D,F,E||document):null;};})()});if(window.$==null){Window.implement("$",function(e,l){return document.id(e,l,this.document);
|
||||
});}Window.implement({getDocument:function(){return this.document;},getWindow:function(){return this;}});[Document,Element].invoke("implement",{getElements:function(e){return Slick.search(this,e,new Elements);
|
||||
},getElement:function(e){return document.id(Slick.find(this,e));}});var m={contains:function(e){return Slick.contains(this,e);}};if(!document.contains){Document.implement(m);
|
||||
}if(!document.createElement("div").contains){Element.implement(m);}var r=function(E,D){if(!E){return D;}E=Object.clone(Slick.parse(E));var l=E.expressions;
|
||||
for(var e=l.length;e--;){l[e][0].combinator=D;}return E;};Object.forEach({getNext:"~",getPrevious:"!~",getParent:"!"},function(e,l){Element.implement(l,function(D){return this.getElement(r(D,e));
|
||||
});});Object.forEach({getAllNext:"~",getAllPrevious:"!~",getSiblings:"~~",getChildren:">",getParents:"!"},function(e,l){Element.implement(l,function(D){return this.getElements(r(D,e));
|
||||
});});Element.implement({getFirst:function(e){return document.id(Slick.search(this,r(e,">"))[0]);},getLast:function(e){return document.id(Slick.search(this,r(e,">")).getLast());
|
||||
},getWindow:function(){return this.ownerDocument.window;},getDocument:function(){return this.ownerDocument;},getElementById:function(e){return document.id(Slick.find(this,"#"+(""+e).replace(/(\W)/g,"\\$1")));
|
||||
},match:function(e){return !e||Slick.match(this,e);}});if(window.$$==null){Window.implement("$$",function(e){if(arguments.length==1){if(typeof e=="string"){return Slick.search(this.document,e,new Elements);
|
||||
}else{if(Type.isEnumerable(e)){return new Elements(e);}}}return new Elements(arguments);});}var w={before:function(l,e){var D=e.parentNode;if(D){D.insertBefore(l,e);
|
||||
}},after:function(l,e){var D=e.parentNode;if(D){D.insertBefore(l,e.nextSibling);}},bottom:function(l,e){e.appendChild(l);},top:function(l,e){e.insertBefore(l,e.firstChild);
|
||||
}};w.inside=w.bottom;var j={},d={};var k={};Array.forEach(["type","value","defaultValue","accessKey","cellPadding","cellSpacing","colSpan","frameBorder","rowSpan","tabIndex","useMap"],function(e){k[e.toLowerCase()]=e;
|
||||
});k.html="innerHTML";k.text=(document.createElement("div").textContent==null)?"innerText":"textContent";Object.forEach(k,function(l,e){d[e]=function(D,E){D[l]=E;
|
||||
};j[e]=function(D){return D[l];};});var x=["compact","nowrap","ismap","declare","noshade","checked","disabled","readOnly","multiple","selected","noresize","defer","defaultChecked","autofocus","controls","autoplay","loop"];
|
||||
var h={};Array.forEach(x,function(e){var l=e.toLowerCase();h[l]=e;d[l]=function(D,E){D[e]=!!E;};j[l]=function(D){return !!D[e];};});Object.append(d,{"class":function(e,l){("className" in e)?e.className=(l||""):e.setAttribute("class",l);
|
||||
},"for":function(e,l){("htmlFor" in e)?e.htmlFor=l:e.setAttribute("for",l);},style:function(e,l){(e.style)?e.style.cssText=l:e.setAttribute("style",l);
|
||||
},value:function(e,l){e.value=(l!=null)?l:"";}});j["class"]=function(e){return("className" in e)?e.className||null:e.getAttribute("class");};var f=document.createElement("button");
|
||||
try{f.type="button";}catch(z){}if(f.type!="button"){d.type=function(e,l){e.setAttribute("type",l);};}f=null;var p=document.createElement("input");p.value="t";
|
||||
p.type="submit";if(p.value!="t"){d.type=function(l,e){var D=l.value;l.type=e;l.value=D;};}p=null;var q=(function(e){e.random="attribute";return(e.getAttribute("random")=="attribute");
|
||||
})(document.createElement("div"));Element.implement({setProperty:function(l,D){var E=d[l.toLowerCase()];if(E){E(this,D);}else{if(q){var e=this.retrieve("$attributeWhiteList",{});
|
||||
}if(D==null){this.removeAttribute(l);if(q){delete e[l];}}else{this.setAttribute(l,""+D);if(q){e[l]=true;}}}return this;},setProperties:function(e){for(var l in e){this.setProperty(l,e[l]);
|
||||
}return this;},getProperty:function(F){var D=j[F.toLowerCase()];if(D){return D(this);}if(q){var l=this.getAttributeNode(F),E=this.retrieve("$attributeWhiteList",{});
|
||||
if(!l){return null;}if(l.expando&&!E[F]){var G=this.outerHTML;if(G.substr(0,G.search(/\/?['"]?>(?![^<]*<['"])/)).indexOf(F)<0){return null;}E[F]=true;}}var e=Slick.getAttribute(this,F);
|
||||
return(!e&&!Slick.hasAttribute(this,F))?null:e;},getProperties:function(){var e=Array.from(arguments);return e.map(this.getProperty,this).associate(e);
|
||||
},removeProperty:function(e){return this.setProperty(e,null);},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this;},set:function(D,l){var e=Element.Properties[D];
|
||||
(e&&e.set)?e.set.call(this,l):this.setProperty(D,l);}.overloadSetter(),get:function(l){var e=Element.Properties[l];return(e&&e.get)?e.get.apply(this):this.getProperty(l);
|
||||
}.overloadGetter(),erase:function(l){var e=Element.Properties[l];(e&&e.erase)?e.erase.apply(this):this.removeProperty(l);return this;},hasClass:function(e){return this.className.clean().contains(e," ");
|
||||
},addClass:function(e){if(!this.hasClass(e)){this.className=(this.className+" "+e).clean();}return this;},removeClass:function(e){this.className=this.className.replace(new RegExp("(^|\\s)"+e+"(?:\\s|$)"),"$1");
|
||||
return this;},toggleClass:function(e,l){if(l==null){l=!this.hasClass(e);}return(l)?this.addClass(e):this.removeClass(e);},adopt:function(){var E=this,e,G=Array.flatten(arguments),F=G.length;
|
||||
if(F>1){E=e=document.createDocumentFragment();}for(var D=0;D<F;D++){var l=document.id(G[D],true);if(l){E.appendChild(l);}}if(e){this.appendChild(e);}return this;
|
||||
},appendText:function(l,e){return this.grab(this.getDocument().newTextNode(l),e);},grab:function(l,e){w[e||"bottom"](document.id(l,true),this);return this;
|
||||
},inject:function(l,e){w[e||"bottom"](this,document.id(l,true));return this;},replaces:function(e){e=document.id(e,true);e.parentNode.replaceChild(this,e);
|
||||
return this;},wraps:function(l,e){l=document.id(l,true);return this.replaces(l).grab(l,e);},getSelected:function(){this.selectedIndex;return new Elements(Array.from(this.options).filter(function(e){return e.selected;
|
||||
}));},toQueryString:function(){var e=[];this.getElements("input, select, textarea").each(function(D){var l=D.type;if(!D.name||D.disabled||l=="submit"||l=="reset"||l=="file"||l=="image"){return;
|
||||
}var E=(D.get("tag")=="select")?D.getSelected().map(function(F){return document.id(F).get("value");}):((l=="radio"||l=="checkbox")&&!D.checked)?null:D.get("value");
|
||||
Array.from(E).each(function(F){if(typeof F!="undefined"){e.push(encodeURIComponent(D.name)+"="+encodeURIComponent(F));}});});return e.join("&");}});var i={},A={};
|
||||
var B=function(e){return(A[e]||(A[e]={}));};var v=function(l){var e=l.uniqueNumber;if(l.removeEvents){l.removeEvents();}if(l.clearAttributes){l.clearAttributes();
|
||||
}if(e!=null){delete i[e];delete A[e];}return l;};var C={input:"checked",option:"selected",textarea:"value"};Element.implement({destroy:function(){var e=v(this).getElementsByTagName("*");
|
||||
Array.each(e,v);Element.dispose(this);return null;},empty:function(){Array.from(this.childNodes).each(Element.dispose);return this;},dispose:function(){return(this.parentNode)?this.parentNode.removeChild(this):this;
|
||||
},clone:function(G,E){G=G!==false;var L=this.cloneNode(G),D=[L],F=[this],J;if(G){D.append(Array.from(L.getElementsByTagName("*")));F.append(Array.from(this.getElementsByTagName("*")));
|
||||
}for(J=D.length;J--;){var H=D[J],K=F[J];if(!E){H.removeAttribute("id");}if(H.clearAttributes){H.clearAttributes();H.mergeAttributes(K);H.removeAttribute("uniqueNumber");
|
||||
if(H.options){var O=H.options,e=K.options;for(var I=O.length;I--;){O[I].selected=e[I].selected;}}}var l=C[K.tagName.toLowerCase()];if(l&&K[l]){H[l]=K[l];
|
||||
}}if(Browser.ie){var M=L.getElementsByTagName("object"),N=this.getElementsByTagName("object");for(J=M.length;J--;){M[J].outerHTML=N[J].outerHTML;}}return document.id(L);
|
||||
}});[Element,Window,Document].invoke("implement",{addListener:function(E,D){if(E=="unload"){var e=D,l=this;D=function(){l.removeListener("unload",D);e();
|
||||
};}else{i[Slick.uidOf(this)]=this;}if(this.addEventListener){this.addEventListener(E,D,!!arguments[2]);}else{this.attachEvent("on"+E,D);}return this;},removeListener:function(l,e){if(this.removeEventListener){this.removeEventListener(l,e,!!arguments[2]);
|
||||
}else{this.detachEvent("on"+l,e);}return this;},retrieve:function(l,e){var E=B(Slick.uidOf(this)),D=E[l];if(e!=null&&D==null){D=E[l]=e;}return D!=null?D:null;
|
||||
},store:function(l,e){var D=B(Slick.uidOf(this));D[l]=e;return this;},eliminate:function(e){var l=B(Slick.uidOf(this));delete l[e];return this;}});if(window.attachEvent&&!window.addEventListener){window.addListener("unload",function(){Object.each(i,v);
|
||||
if(window.CollectGarbage){CollectGarbage();}});}Element.Properties={};Element.Properties.style={set:function(e){this.style.cssText=e;},get:function(){return this.style.cssText;
|
||||
},erase:function(){this.style.cssText="";}};Element.Properties.tag={get:function(){return this.tagName.toLowerCase();}};Element.Properties.html={set:function(e){if(e==null){e="";
|
||||
}else{if(typeOf(e)=="array"){e=e.join("");}}this.innerHTML=e;},erase:function(){this.innerHTML="";}};var t=document.createElement("div");t.innerHTML="<nav></nav>";
|
||||
var a=(t.childNodes.length==1);if(!a){var s="abbr article aside audio canvas datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video".split(" "),b=document.createDocumentFragment(),u=s.length;
|
||||
while(u--){b.createElement(s[u]);}}t=null;var g=Function.attempt(function(){var e=document.createElement("table");e.innerHTML="<tr><td></td></tr>";return true;
|
||||
});var c=document.createElement("tr"),o="<td></td>";c.innerHTML=o;var y=(c.innerHTML==o);c=null;if(!g||!y||!a){Element.Properties.html.set=(function(l){var e={table:[1,"<table>","</table>"],select:[1,"<select>","</select>"],tbody:[2,"<table><tbody>","</tbody></table>"],tr:[3,"<table><tbody><tr>","</tr></tbody></table>"]};
|
||||
e.thead=e.tfoot=e.tbody;return function(D){var E=e[this.get("tag")];if(!E&&!a){E=[0,"",""];}if(!E){return l.call(this,D);}var H=E[0],G=document.createElement("div"),F=G;
|
||||
if(!a){b.appendChild(G);}G.innerHTML=[E[1],D,E[2]].flatten().join("");while(H--){F=F.firstChild;}this.empty().adopt(F.childNodes);if(!a){b.removeChild(G);
|
||||
}G=null;};})(Element.Properties.html.set);}var n=document.createElement("form");n.innerHTML="<select><option>s</option></select>";if(n.firstChild.value!="s"){Element.Properties.value={set:function(G){var l=this.get("tag");
|
||||
if(l!="select"){return this.setProperty("value",G);}var D=this.getElements("option");for(var E=0;E<D.length;E++){var F=D[E],e=F.getAttributeNode("value"),H=(e&&e.specified)?F.value:F.get("text");
|
||||
if(H==G){return F.selected=true;}}},get:function(){var D=this,l=D.get("tag");if(l!="select"&&l!="option"){return this.getProperty("value");}if(l=="select"&&!(D=D.getSelected()[0])){return"";
|
||||
}var e=D.getAttributeNode("value");return(e&&e.specified)?D.value:D.get("text");}};}n=null;if(document.createElement("div").getAttributeNode("id")){Element.Properties.id={set:function(e){this.id=this.getAttributeNode("id").value=e;
|
||||
},get:function(){return this.id||null;},erase:function(){this.id=this.getAttributeNode("id").value="";}};}})();(function(){var i=document.html;var d=document.createElement("div");
|
||||
d.style.color="red";d.style.color=null;var c=d.style.color=="red";d=null;Element.Properties.styles={set:function(k){this.setStyles(k);}};var h=(i.style.opacity!=null),e=(i.style.filter!=null),j=/alpha\(opacity=([\d.]+)\)/i;
|
||||
var a=function(l,k){l.store("$opacity",k);l.style.visibility=k>0||k==null?"visible":"hidden";};var f=(h?function(l,k){l.style.opacity=k;}:(e?function(l,k){var n=l.style;
|
||||
if(!l.currentStyle||!l.currentStyle.hasLayout){n.zoom=1;}if(k==null||k==1){k="";}else{k="alpha(opacity="+(k*100).limit(0,100).round()+")";}var m=n.filter||l.getComputedStyle("filter")||"";
|
||||
n.filter=j.test(m)?m.replace(j,k):m+k;if(!n.filter){n.removeAttribute("filter");}}:a));var g=(h?function(l){var k=l.style.opacity||l.getComputedStyle("opacity");
|
||||
return(k=="")?1:k.toFloat();}:(e?function(l){var m=(l.style.filter||l.getComputedStyle("filter")),k;if(m){k=m.match(j);}return(k==null||m==null)?1:(k[1]/100);
|
||||
}:function(l){var k=l.retrieve("$opacity");if(k==null){k=(l.style.visibility=="hidden"?0:1);}return k;}));var b=(i.style.cssFloat==null)?"styleFloat":"cssFloat";
|
||||
Element.implement({getComputedStyle:function(m){if(this.currentStyle){return this.currentStyle[m.camelCase()];}var l=Element.getDocument(this).defaultView,k=l?l.getComputedStyle(this,null):null;
|
||||
return(k)?k.getPropertyValue((m==b)?"float":m.hyphenate()):null;},setStyle:function(l,k){if(l=="opacity"){if(k!=null){k=parseFloat(k);}f(this,k);return this;
|
||||
}l=(l=="float"?b:l).camelCase();if(typeOf(k)!="string"){var m=(Element.Styles[l]||"@").split(" ");k=Array.from(k).map(function(o,n){if(!m[n]){return"";
|
||||
}return(typeOf(o)=="number")?m[n].replace("@",Math.round(o)):o;}).join(" ");}else{if(k==String(Number(k))){k=Math.round(k);}}this.style[l]=k;if((k==""||k==null)&&c&&this.style.removeAttribute){this.style.removeAttribute(l);
|
||||
}return this;},getStyle:function(q){if(q=="opacity"){return g(this);}q=(q=="float"?b:q).camelCase();var k=this.style[q];if(!k||q=="zIndex"){k=[];for(var p in Element.ShortStyles){if(q!=p){continue;
|
||||
}for(var o in Element.ShortStyles[p]){k.push(this.getStyle(o));}return k.join(" ");}k=this.getComputedStyle(q);}if(k){k=String(k);var m=k.match(/rgba?\([\d\s,]+\)/);
|
||||
if(m){k=k.replace(m[0],m[0].rgbToHex());}}if(Browser.opera||Browser.ie){if((/^(height|width)$/).test(q)&&!(/px$/.test(k))){var l=(q=="width")?["left","right"]:["top","bottom"],n=0;
|
||||
l.each(function(r){n+=this.getStyle("border-"+r+"-width").toInt()+this.getStyle("padding-"+r).toInt();},this);return this["offset"+q.capitalize()]-n+"px";
|
||||
}if(Browser.ie&&(/^border(.+)Width|margin|padding/).test(q)&&isNaN(parseFloat(k))){return"0px";}}return k;},setStyles:function(l){for(var k in l){this.setStyle(k,l[k]);
|
||||
}return this;},getStyles:function(){var k={};Array.flatten(arguments).each(function(l){k[l]=this.getStyle(l);},this);return k;}});Element.Styles={left:"@px",top:"@px",bottom:"@px",right:"@px",width:"@px",height:"@px",maxWidth:"@px",maxHeight:"@px",minWidth:"@px",minHeight:"@px",backgroundColor:"rgb(@, @, @)",backgroundPosition:"@px @px",color:"rgb(@, @, @)",fontSize:"@px",letterSpacing:"@px",lineHeight:"@px",clip:"rect(@px @px @px @px)",margin:"@px @px @px @px",padding:"@px @px @px @px",border:"@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)",borderWidth:"@px @px @px @px",borderStyle:"@ @ @ @",borderColor:"rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)",zIndex:"@",zoom:"@",fontWeight:"@",textIndent:"@px",opacity:"@"};
|
||||
Element.ShortStyles={margin:{},padding:{},border:{},borderWidth:{},borderStyle:{},borderColor:{}};["Top","Right","Bottom","Left"].each(function(q){var p=Element.ShortStyles;
|
||||
var l=Element.Styles;["margin","padding"].each(function(r){var s=r+q;p[r][s]=l[s]="@px";});var o="border"+q;p.border[o]=l[o]="@px @ rgb(@, @, @)";var n=o+"Width",k=o+"Style",m=o+"Color";
|
||||
p[o]={};p.borderWidth[n]=p[o][n]=l[n]="@px";p.borderStyle[k]=p[o][k]=l[k]="@";p.borderColor[m]=p[o][m]=l[m]="rgb(@, @, @)";});})();(function(){Element.Properties.events={set:function(b){this.addEvents(b);
|
||||
}};[Element,Window,Document].invoke("implement",{addEvent:function(f,h){var i=this.retrieve("events",{});if(!i[f]){i[f]={keys:[],values:[]};}if(i[f].keys.contains(h)){return this;
|
||||
}i[f].keys.push(h);var g=f,b=Element.Events[f],d=h,j=this;if(b){if(b.onAdd){b.onAdd.call(this,h,f);}if(b.condition){d=function(k){if(b.condition.call(this,k,f)){return h.call(this,k);
|
||||
}return true;};}if(b.base){g=Function.from(b.base).call(this,f);}}var e=function(){return h.call(j);};var c=Element.NativeEvents[g];if(c){if(c==2){e=function(k){k=new DOMEvent(k,j.getWindow());
|
||||
if(d.call(j,k)===false){k.stop();}};}this.addListener(g,e,arguments[2]);}i[f].values.push(e);return this;},removeEvent:function(e,d){var c=this.retrieve("events");
|
||||
if(!c||!c[e]){return this;}var h=c[e];var b=h.keys.indexOf(d);if(b==-1){return this;}var g=h.values[b];delete h.keys[b];delete h.values[b];var f=Element.Events[e];
|
||||
if(f){if(f.onRemove){f.onRemove.call(this,d,e);}if(f.base){e=Function.from(f.base).call(this,e);}}return(Element.NativeEvents[e])?this.removeListener(e,g,arguments[2]):this;
|
||||
},addEvents:function(b){for(var c in b){this.addEvent(c,b[c]);}return this;},removeEvents:function(b){var d;if(typeOf(b)=="object"){for(d in b){this.removeEvent(d,b[d]);
|
||||
}return this;}var c=this.retrieve("events");if(!c){return this;}if(!b){for(d in c){this.removeEvents(d);}this.eliminate("events");}else{if(c[b]){c[b].keys.each(function(e){this.removeEvent(b,e);
|
||||
},this);delete c[b];}}return this;},fireEvent:function(e,c,b){var d=this.retrieve("events");if(!d||!d[e]){return this;}c=Array.from(c);d[e].keys.each(function(f){if(b){f.delay(b,this,c);
|
||||
}else{f.apply(this,c);}},this);return this;},cloneEvents:function(e,d){e=document.id(e);var c=e.retrieve("events");if(!c){return this;}if(!d){for(var b in c){this.cloneEvents(e,b);
|
||||
}}else{if(c[d]){c[d].keys.each(function(f){this.addEvent(d,f);},this);}}return this;}});Element.NativeEvents={click:2,dblclick:2,mouseup:2,mousedown:2,contextmenu:2,mousewheel:2,DOMMouseScroll:2,mouseover:2,mouseout:2,mousemove:2,selectstart:2,selectend:2,keydown:2,keypress:2,keyup:2,orientationchange:2,touchstart:2,touchmove:2,touchend:2,touchcancel:2,gesturestart:2,gesturechange:2,gestureend:2,focus:2,blur:2,change:2,reset:2,select:2,submit:2,paste:2,input:2,load:2,unload:1,beforeunload:2,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1};
|
||||
Element.Events={mousewheel:{base:(Browser.firefox)?"DOMMouseScroll":"mousewheel"}};if("onmouseenter" in document.documentElement){Element.NativeEvents.mouseenter=Element.NativeEvents.mouseleave=2;
|
||||
}else{var a=function(b){var c=b.relatedTarget;if(c==null){return true;}if(!c){return false;}return(c!=this&&c.prefix!="xul"&&typeOf(this)!="document"&&!this.contains(c));
|
||||
};Element.Events.mouseenter={base:"mouseover",condition:a};Element.Events.mouseleave={base:"mouseout",condition:a};}if(!window.addEventListener){Element.NativeEvents.propertychange=2;
|
||||
Element.Events.change={base:function(){var b=this.type;return(this.get("tag")=="input"&&(b=="radio"||b=="checkbox"))?"propertychange":"change";},condition:function(b){return this.type!="radio"||(b.event.propertyName=="checked"&&this.checked);
|
||||
}};}})();(function(){var c=!!window.addEventListener;Element.NativeEvents.focusin=Element.NativeEvents.focusout=2;var k=function(l,m,n,o,p){while(p&&p!=l){if(m(p,o)){return n.call(p,o,p);
|
||||
}p=document.id(p.parentNode);}};var a={mouseenter:{base:"mouseover"},mouseleave:{base:"mouseout"},focus:{base:"focus"+(c?"":"in"),capture:true},blur:{base:c?"blur":"focusout",capture:true}};
|
||||
var b="$delegation:";var i=function(l){return{base:"focusin",remove:function(m,o){var p=m.retrieve(b+l+"listeners",{})[o];if(p&&p.forms){for(var n=p.forms.length;
|
||||
n--;){p.forms[n].removeEvent(l,p.fns[n]);}}},listen:function(x,r,v,n,t,s){var o=(t.get("tag")=="form")?t:n.target.getParent("form");if(!o){return;}var u=x.retrieve(b+l+"listeners",{}),p=u[s]||{forms:[],fns:[]},m=p.forms,w=p.fns;
|
||||
if(m.indexOf(o)!=-1){return;}m.push(o);var q=function(y){k(x,r,v,y,t);};o.addEvent(l,q);w.push(q);u[s]=p;x.store(b+l+"listeners",u);}};};var d=function(l){return{base:"focusin",listen:function(m,n,p,q,r){var o={blur:function(){this.removeEvents(o);
|
||||
}};o[l]=function(s){k(m,n,p,s,r);};q.target.addEvents(o);}};};if(!c){Object.append(a,{submit:i("submit"),reset:i("reset"),change:d("change"),select:d("select")});
|
||||
}var h=Element.prototype,f=h.addEvent,j=h.removeEvent;var e=function(l,m){return function(r,q,n){if(r.indexOf(":relay")==-1){return l.call(this,r,q,n);
|
||||
}var o=Slick.parse(r).expressions[0][0];if(o.pseudos[0].key!="relay"){return l.call(this,r,q,n);}var p=o.tag;o.pseudos.slice(1).each(function(s){p+=":"+s.key+(s.value?"("+s.value+")":"");
|
||||
});l.call(this,r,q);return m.call(this,p,o.pseudos[0].value,q);};};var g={addEvent:function(v,q,x){var t=this.retrieve("$delegates",{}),r=t[v];if(r){for(var y in r){if(r[y].fn==x&&r[y].match==q){return this;
|
||||
}}}var p=v,u=q,o=x,n=a[v]||{};v=n.base||p;q=function(B){return Slick.match(B,u);};var w=Element.Events[p];if(w&&w.condition){var l=q,m=w.condition;q=function(C,B){return l(C,B)&&m.call(C,B,v);
|
||||
};}var z=this,s=String.uniqueID();var A=n.listen?function(B,C){if(!C&&B&&B.target){C=B.target;}if(C){n.listen(z,q,x,B,C,s);}}:function(B,C){if(!C&&B&&B.target){C=B.target;
|
||||
}if(C){k(z,q,x,B,C);}};if(!r){r={};}r[s]={match:u,fn:o,delegator:A};t[p]=r;return f.call(this,v,A,n.capture);},removeEvent:function(r,n,t,u){var q=this.retrieve("$delegates",{}),p=q[r];
|
||||
if(!p){return this;}if(u){var m=r,w=p[u].delegator,l=a[r]||{};r=l.base||m;if(l.remove){l.remove(this,u);}delete p[u];q[m]=p;return j.call(this,r,w);}var o,v;
|
||||
if(t){for(o in p){v=p[o];if(v.match==n&&v.fn==t){return g.removeEvent.call(this,r,n,t,o);}}}else{for(o in p){v=p[o];if(v.match==n){g.removeEvent.call(this,r,n,v.fn,o);
|
||||
}}}return this;}};[Element,Window,Document].invoke("implement",{addEvent:e(f,g.addEvent),removeEvent:e(j,g.removeEvent)});})();(function(){var h=document.createElement("div"),e=document.createElement("div");
|
||||
h.style.height="0";h.appendChild(e);var d=(e.offsetParent===h);h=e=null;var l=function(m){return k(m,"position")!="static"||a(m);};var i=function(m){return l(m)||(/^(?:table|td|th)$/i).test(m.tagName);
|
||||
};Element.implement({scrollTo:function(m,n){if(a(this)){this.getWindow().scrollTo(m,n);}else{this.scrollLeft=m;this.scrollTop=n;}return this;},getSize:function(){if(a(this)){return this.getWindow().getSize();
|
||||
}return{x:this.offsetWidth,y:this.offsetHeight};},getScrollSize:function(){if(a(this)){return this.getWindow().getScrollSize();}return{x:this.scrollWidth,y:this.scrollHeight};
|
||||
},getScroll:function(){if(a(this)){return this.getWindow().getScroll();}return{x:this.scrollLeft,y:this.scrollTop};},getScrolls:function(){var n=this.parentNode,m={x:0,y:0};
|
||||
while(n&&!a(n)){m.x+=n.scrollLeft;m.y+=n.scrollTop;n=n.parentNode;}return m;},getOffsetParent:d?function(){var m=this;if(a(m)||k(m,"position")=="fixed"){return null;
|
||||
}var n=(k(m,"position")=="static")?i:l;while((m=m.parentNode)){if(n(m)){return m;}}return null;}:function(){var m=this;if(a(m)||k(m,"position")=="fixed"){return null;
|
||||
}try{return m.offsetParent;}catch(n){}return null;},getOffsets:function(){if(this.getBoundingClientRect&&!Browser.Platform.ios){var r=this.getBoundingClientRect(),o=document.id(this.getDocument().documentElement),q=o.getScroll(),t=this.getScrolls(),s=(k(this,"position")=="fixed");
|
||||
return{x:r.left.toInt()+t.x+((s)?0:q.x)-o.clientLeft,y:r.top.toInt()+t.y+((s)?0:q.y)-o.clientTop};}var n=this,m={x:0,y:0};if(a(this)){return m;}while(n&&!a(n)){m.x+=n.offsetLeft;
|
||||
m.y+=n.offsetTop;if(Browser.firefox){if(!c(n)){m.x+=b(n);m.y+=g(n);}var p=n.parentNode;if(p&&k(p,"overflow")!="visible"){m.x+=b(p);m.y+=g(p);}}else{if(n!=this&&Browser.safari){m.x+=b(n);
|
||||
m.y+=g(n);}}n=n.offsetParent;}if(Browser.firefox&&!c(this)){m.x-=b(this);m.y-=g(this);}return m;},getPosition:function(p){var q=this.getOffsets(),n=this.getScrolls();
|
||||
var m={x:q.x-n.x,y:q.y-n.y};if(p&&(p=document.id(p))){var o=p.getPosition();return{x:m.x-o.x-b(p),y:m.y-o.y-g(p)};}return m;},getCoordinates:function(o){if(a(this)){return this.getWindow().getCoordinates();
|
||||
}var m=this.getPosition(o),n=this.getSize();var p={left:m.x,top:m.y,width:n.x,height:n.y};p.right=p.left+p.width;p.bottom=p.top+p.height;return p;},computePosition:function(m){return{left:m.x-j(this,"margin-left"),top:m.y-j(this,"margin-top")};
|
||||
},setPosition:function(m){return this.setStyles(this.computePosition(m));}});[Document,Window].invoke("implement",{getSize:function(){var m=f(this);return{x:m.clientWidth,y:m.clientHeight};
|
||||
},getScroll:function(){var n=this.getWindow(),m=f(this);return{x:n.pageXOffset||m.scrollLeft,y:n.pageYOffset||m.scrollTop};},getScrollSize:function(){var o=f(this),n=this.getSize(),m=this.getDocument().body;
|
||||
return{x:Math.max(o.scrollWidth,m.scrollWidth,n.x),y:Math.max(o.scrollHeight,m.scrollHeight,n.y)};},getPosition:function(){return{x:0,y:0};},getCoordinates:function(){var m=this.getSize();
|
||||
return{top:0,left:0,bottom:m.y,right:m.x,height:m.y,width:m.x};}});var k=Element.getComputedStyle;function j(m,n){return k(m,n).toInt()||0;}function c(m){return k(m,"-moz-box-sizing")=="border-box";
|
||||
}function g(m){return j(m,"border-top-width");}function b(m){return j(m,"border-left-width");}function a(m){return(/^(?:body|html)$/i).test(m.tagName);
|
||||
}function f(m){var n=m.getDocument();return(!n.compatMode||n.compatMode=="CSS1Compat")?n.html:n.body;}})();Element.alias({position:"setPosition"});[Window,Document,Element].invoke("implement",{getHeight:function(){return this.getSize().y;
|
||||
},getWidth:function(){return this.getSize().x;},getScrollTop:function(){return this.getScroll().y;},getScrollLeft:function(){return this.getScroll().x;
|
||||
},getScrollHeight:function(){return this.getScrollSize().y;},getScrollWidth:function(){return this.getScrollSize().x;},getTop:function(){return this.getPosition().y;
|
||||
},getLeft:function(){return this.getPosition().x;}});(function(){var f=this.Fx=new Class({Implements:[Chain,Events,Options],options:{fps:60,unit:false,duration:500,frames:null,frameSkip:true,link:"ignore"},initialize:function(g){this.subject=this.subject||this;
|
||||
this.setOptions(g);},getTransition:function(){return function(g){return -(Math.cos(Math.PI*g)-1)/2;};},step:function(g){if(this.options.frameSkip){var h=(this.time!=null)?(g-this.time):0,i=h/this.frameInterval;
|
||||
this.time=g;this.frame+=i;}else{this.frame++;}if(this.frame<this.frames){var j=this.transition(this.frame/this.frames);this.set(this.compute(this.from,this.to,j));
|
||||
}else{this.frame=this.frames;this.set(this.compute(this.from,this.to,1));this.stop();}},set:function(g){return g;},compute:function(i,h,g){return f.compute(i,h,g);
|
||||
},check:function(){if(!this.isRunning()){return true;}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(this.caller.pass(arguments,this));
|
||||
return false;}return false;},start:function(k,j){if(!this.check(k,j)){return this;}this.from=k;this.to=j;this.frame=(this.options.frameSkip)?0:-1;this.time=null;
|
||||
this.transition=this.getTransition();var i=this.options.frames,h=this.options.fps,g=this.options.duration;this.duration=f.Durations[g]||g.toInt();this.frameInterval=1000/h;
|
||||
this.frames=i||Math.round(this.duration/this.frameInterval);this.fireEvent("start",this.subject);b.call(this,h);return this;},stop:function(){if(this.isRunning()){this.time=null;
|
||||
d.call(this,this.options.fps);if(this.frames==this.frame){this.fireEvent("complete",this.subject);if(!this.callChain()){this.fireEvent("chainComplete",this.subject);
|
||||
}}else{this.fireEvent("stop",this.subject);}}return this;},cancel:function(){if(this.isRunning()){this.time=null;d.call(this,this.options.fps);this.frame=this.frames;
|
||||
this.fireEvent("cancel",this.subject).clearChain();}return this;},pause:function(){if(this.isRunning()){this.time=null;d.call(this,this.options.fps);}return this;
|
||||
},resume:function(){if((this.frame<this.frames)&&!this.isRunning()){b.call(this,this.options.fps);}return this;},isRunning:function(){var g=e[this.options.fps];
|
||||
return g&&g.contains(this);}});f.compute=function(i,h,g){return(h-i)*g+i;};f.Durations={"short":250,normal:500,"long":1000};var e={},c={};var a=function(){var h=Date.now();
|
||||
for(var j=this.length;j--;){var g=this[j];if(g){g.step(h);}}};var b=function(h){var g=e[h]||(e[h]=[]);g.push(this);if(!c[h]){c[h]=a.periodical(Math.round(1000/h),g);
|
||||
}};var d=function(h){var g=e[h];if(g){g.erase(this);if(!g.length&&c[h]){delete e[h];c[h]=clearInterval(c[h]);}}};})();Fx.CSS=new Class({Extends:Fx,prepare:function(b,e,a){a=Array.from(a);
|
||||
var h=a[0],g=a[1];if(g==null){g=h;h=b.getStyle(e);var c=this.options.unit;if(c&&h.slice(-c.length)!=c&&parseFloat(h)!=0){b.setStyle(e,g+c);var d=b.getComputedStyle(e);
|
||||
if(!(/px$/.test(d))){d=b.style[("pixel-"+e).camelCase()];if(d==null){var f=b.style.left;b.style.left=g+c;d=b.style.pixelLeft;b.style.left=f;}}h=(g||1)/(parseFloat(d)||1)*(parseFloat(h)||0);
|
||||
b.setStyle(e,h+c);}}return{from:this.parse(h),to:this.parse(g)};},parse:function(a){a=Function.from(a)();a=(typeof a=="string")?a.split(" "):Array.from(a);
|
||||
return a.map(function(c){c=String(c);var b=false;Object.each(Fx.CSS.Parsers,function(f,e){if(b){return;}var d=f.parse(c);if(d||d===0){b={value:d,parser:f};
|
||||
}});b=b||{value:c,parser:Fx.CSS.Parsers.String};return b;});},compute:function(d,c,b){var a=[];(Math.min(d.length,c.length)).times(function(e){a.push({value:d[e].parser.compute(d[e].value,c[e].value,b),parser:d[e].parser});
|
||||
});a.$family=Function.from("fx:css:value");return a;},serve:function(c,b){if(typeOf(c)!="fx:css:value"){c=this.parse(c);}var a=[];c.each(function(d){a=a.concat(d.parser.serve(d.value,b));
|
||||
});return a;},render:function(a,d,c,b){a.setStyle(d,this.serve(c,b));},search:function(a){if(Fx.CSS.Cache[a]){return Fx.CSS.Cache[a];}var c={},b=new RegExp("^"+a.escapeRegExp()+"$");
|
||||
Array.each(document.styleSheets,function(f,e){var d=f.href;if(d&&d.contains("://")&&!d.contains(document.domain)){return;}var g=f.rules||f.cssRules;Array.each(g,function(k,h){if(!k.style){return;
|
||||
}var j=(k.selectorText)?k.selectorText.replace(/^\w+/,function(i){return i.toLowerCase();}):null;if(!j||!b.test(j)){return;}Object.each(Element.Styles,function(l,i){if(!k.style[i]||Element.ShortStyles[i]){return;
|
||||
}l=String(k.style[i]);c[i]=((/^rgb/).test(l))?l.rgbToHex():l;});});});return Fx.CSS.Cache[a]=c;}});Fx.CSS.Cache={};Fx.CSS.Parsers={Color:{parse:function(a){if(a.match(/^#[0-9a-f]{3,6}$/i)){return a.hexToRgb(true);
|
||||
}return((a=a.match(/(\d+),\s*(\d+),\s*(\d+)/)))?[a[1],a[2],a[3]]:false;},compute:function(c,b,a){return c.map(function(e,d){return Math.round(Fx.compute(c[d],b[d],a));
|
||||
});},serve:function(a){return a.map(Number);}},Number:{parse:parseFloat,compute:Fx.compute,serve:function(b,a){return(a)?b+a:b;}},String:{parse:Function.from(false),compute:function(b,a){return a;
|
||||
},serve:function(a){return a;}}};Fx.Tween=new Class({Extends:Fx.CSS,initialize:function(b,a){this.element=this.subject=document.id(b);this.parent(a);},set:function(b,a){if(arguments.length==1){a=b;
|
||||
b=this.property||this.options.property;}this.render(this.element,b,a,this.options.unit);return this;},start:function(c,e,d){if(!this.check(c,e,d)){return this;
|
||||
}var b=Array.flatten(arguments);this.property=this.options.property||b.shift();var a=this.prepare(this.element,this.property,b);return this.parent(a.from,a.to);
|
||||
}});Element.Properties.tween={set:function(a){this.get("tween").cancel().setOptions(a);return this;},get:function(){var a=this.retrieve("tween");if(!a){a=new Fx.Tween(this,{link:"cancel"});
|
||||
this.store("tween",a);}return a;}};Element.implement({tween:function(a,c,b){this.get("tween").start(a,c,b);return this;},fade:function(d){var e=this.get("tween"),g,c=["opacity"].append(arguments),a;
|
||||
if(c[1]==null){c[1]="toggle";}switch(c[1]){case"in":g="start";c[1]=1;break;case"out":g="start";c[1]=0;break;case"show":g="set";c[1]=1;break;case"hide":g="set";
|
||||
c[1]=0;break;case"toggle":var b=this.retrieve("fade:flag",this.getStyle("opacity")==1);g="start";c[1]=b?0:1;this.store("fade:flag",!b);a=true;break;default:g="start";
|
||||
}if(!a){this.eliminate("fade:flag");}e[g].apply(e,c);var f=c[c.length-1];if(g=="set"||f!=0){this.setStyle("visibility",f==0?"hidden":"visible");}else{e.chain(function(){this.element.setStyle("visibility","hidden");
|
||||
this.callChain();});}return this;},highlight:function(c,a){if(!a){a=this.retrieve("highlight:original",this.getStyle("background-color"));a=(a=="transparent")?"#fff":a;
|
||||
}var b=this.get("tween");b.start("background-color",c||"#ffff88",a).chain(function(){this.setStyle("background-color",this.retrieve("highlight:original"));
|
||||
b.callChain();}.bind(this));return this;}});Fx.Morph=new Class({Extends:Fx.CSS,initialize:function(b,a){this.element=this.subject=document.id(b);this.parent(a);
|
||||
},set:function(a){if(typeof a=="string"){a=this.search(a);}for(var b in a){this.render(this.element,b,a[b],this.options.unit);}return this;},compute:function(e,d,c){var a={};
|
||||
for(var b in e){a[b]=this.parent(e[b],d[b],c);}return a;},start:function(b){if(!this.check(b)){return this;}if(typeof b=="string"){b=this.search(b);}var e={},d={};
|
||||
for(var c in b){var a=this.prepare(this.element,c,b[c]);e[c]=a.from;d[c]=a.to;}return this.parent(e,d);}});Element.Properties.morph={set:function(a){this.get("morph").cancel().setOptions(a);
|
||||
return this;},get:function(){var a=this.retrieve("morph");if(!a){a=new Fx.Morph(this,{link:"cancel"});this.store("morph",a);}return a;}};Element.implement({morph:function(a){this.get("morph").start(a);
|
||||
return this;}});Fx.implement({getTransition:function(){var a=this.options.transition||Fx.Transitions.Sine.easeInOut;if(typeof a=="string"){var b=a.split(":");
|
||||
a=Fx.Transitions;a=a[b[0]]||a[b[0].capitalize()];if(b[1]){a=a["ease"+b[1].capitalize()+(b[2]?b[2].capitalize():"")];}}return a;}});Fx.Transition=function(c,b){b=Array.from(b);
|
||||
var a=function(d){return c(d,b);};return Object.append(a,{easeIn:a,easeOut:function(d){return 1-c(1-d,b);},easeInOut:function(d){return(d<=0.5?c(2*d,b):(2-c(2*(1-d),b)))/2;
|
||||
}});};Fx.Transitions={linear:function(a){return a;}};Fx.Transitions.extend=function(a){for(var b in a){Fx.Transitions[b]=new Fx.Transition(a[b]);}};Fx.Transitions.extend({Pow:function(b,a){return Math.pow(b,a&&a[0]||6);
|
||||
},Expo:function(a){return Math.pow(2,8*(a-1));},Circ:function(a){return 1-Math.sin(Math.acos(a));},Sine:function(a){return 1-Math.cos(a*Math.PI/2);},Back:function(b,a){a=a&&a[0]||1.618;
|
||||
return Math.pow(b,2)*((a+1)*b-a);},Bounce:function(f){var e;for(var d=0,c=1;1;d+=c,c/=2){if(f>=(7-4*d)/11){e=c*c-Math.pow((11-6*d-11*f)/4,2);break;}}return e;
|
||||
},Elastic:function(b,a){return Math.pow(2,10*--b)*Math.cos(20*b*Math.PI*(a&&a[0]||1)/3);}});["Quad","Cubic","Quart","Quint"].each(function(b,a){Fx.Transitions[b]=new Fx.Transition(function(c){return Math.pow(c,a+2);
|
||||
});});(function(){var d=function(){},a=("onprogress" in new Browser.Request);var c=this.Request=new Class({Implements:[Chain,Events,Options],options:{url:"",data:"",headers:{"X-Requested-With":"XMLHttpRequest",Accept:"text/javascript, text/html, application/xml, text/xml, */*"},async:true,format:false,method:"post",link:"ignore",isSuccess:null,emulation:true,urlEncoded:true,encoding:"utf-8",evalScripts:false,evalResponse:false,timeout:0,noCache:false},initialize:function(e){this.xhr=new Browser.Request();
|
||||
this.setOptions(e);this.headers=this.options.headers;},onStateChange:function(){var e=this.xhr;if(e.readyState!=4||!this.running){return;}this.running=false;
|
||||
this.status=0;Function.attempt(function(){var f=e.status;this.status=(f==1223)?204:f;}.bind(this));e.onreadystatechange=d;if(a){e.onprogress=e.onloadstart=d;
|
||||
}clearTimeout(this.timer);this.response={text:this.xhr.responseText||"",xml:this.xhr.responseXML};if(this.options.isSuccess.call(this,this.status)){this.success(this.response.text,this.response.xml);
|
||||
}else{this.failure();}},isSuccess:function(){var e=this.status;return(e>=200&&e<300);},isRunning:function(){return !!this.running;},processScripts:function(e){if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader("Content-type"))){return Browser.exec(e);
|
||||
}return e.stripScripts(this.options.evalScripts);},success:function(f,e){this.onSuccess(this.processScripts(f),e);},onSuccess:function(){this.fireEvent("complete",arguments).fireEvent("success",arguments).callChain();
|
||||
},failure:function(){this.onFailure();},onFailure:function(){this.fireEvent("complete").fireEvent("failure",this.xhr);},loadstart:function(e){this.fireEvent("loadstart",[e,this.xhr]);
|
||||
},progress:function(e){this.fireEvent("progress",[e,this.xhr]);},timeout:function(){this.fireEvent("timeout",this.xhr);},setHeader:function(e,f){this.headers[e]=f;
|
||||
return this;},getHeader:function(e){return Function.attempt(function(){return this.xhr.getResponseHeader(e);}.bind(this));},check:function(){if(!this.running){return true;
|
||||
}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(this.caller.pass(arguments,this));return false;}return false;},send:function(o){if(!this.check(o)){return this;
|
||||
}this.options.isSuccess=this.options.isSuccess||this.isSuccess;this.running=true;var l=typeOf(o);if(l=="string"||l=="element"){o={data:o};}var h=this.options;
|
||||
o=Object.append({data:h.data,url:h.url,method:h.method},o);var j=o.data,f=String(o.url),e=o.method.toLowerCase();switch(typeOf(j)){case"element":j=document.id(j).toQueryString();
|
||||
break;case"object":case"hash":j=Object.toQueryString(j);}if(this.options.format){var m="format="+this.options.format;j=(j)?m+"&"+j:m;}if(this.options.emulation&&!["get","post"].contains(e)){var k="_method="+e;
|
||||
j=(j)?k+"&"+j:k;e="post";}if(this.options.urlEncoded&&["post","put"].contains(e)){var g=(this.options.encoding)?"; charset="+this.options.encoding:"";this.headers["Content-type"]="application/x-www-form-urlencoded"+g;
|
||||
}if(!f){f=document.location.pathname;}var i=f.lastIndexOf("/");if(i>-1&&(i=f.indexOf("#"))>-1){f=f.substr(0,i);}if(this.options.noCache){f+=(f.contains("?")?"&":"?")+String.uniqueID();
|
||||
}if(j&&e=="get"){f+=(f.contains("?")?"&":"?")+j;j=null;}var n=this.xhr;if(a){n.onloadstart=this.loadstart.bind(this);n.onprogress=this.progress.bind(this);
|
||||
}n.open(e.toUpperCase(),f,this.options.async,this.options.user,this.options.password);if(this.options.user&&"withCredentials" in n){n.withCredentials=true;
|
||||
}n.onreadystatechange=this.onStateChange.bind(this);Object.each(this.headers,function(q,p){try{n.setRequestHeader(p,q);}catch(r){this.fireEvent("exception",[p,q]);
|
||||
}},this);this.fireEvent("request");n.send(j);if(!this.options.async){this.onStateChange();}else{if(this.options.timeout){this.timer=this.timeout.delay(this.options.timeout,this);
|
||||
}}return this;},cancel:function(){if(!this.running){return this;}this.running=false;var e=this.xhr;e.abort();clearTimeout(this.timer);e.onreadystatechange=d;
|
||||
if(a){e.onprogress=e.onloadstart=d;}this.xhr=new Browser.Request();this.fireEvent("cancel");return this;}});var b={};["get","post","put","delete","GET","POST","PUT","DELETE"].each(function(e){b[e]=function(g){var f={method:e};
|
||||
if(g!=null){f.data=g;}return this.send(f);};});c.implement(b);Element.Properties.send={set:function(e){var f=this.get("send").cancel();f.setOptions(e);
|
||||
return this;},get:function(){var e=this.retrieve("send");if(!e){e=new c({data:this,link:"cancel",method:this.get("method")||"post",url:this.get("action")});
|
||||
this.store("send",e);}return e;}};Element.implement({send:function(e){var f=this.get("send");f.send({data:this,url:e||f.options.url});return this;}});})();
|
||||
Request.HTML=new Class({Extends:Request,options:{update:false,append:false,evalScripts:true,filter:false,headers:{Accept:"text/html, application/xml, text/xml, */*"}},success:function(f){var e=this.options,c=this.response;
|
||||
c.html=f.stripScripts(function(h){c.javascript=h;});var d=c.html.match(/<body[^>]*>([\s\S]*?)<\/body>/i);if(d){c.html=d[1];}var b=new Element("div").set("html",c.html);
|
||||
c.tree=b.childNodes;c.elements=b.getElements(e.filter||"*");if(e.filter){c.tree=c.elements;}if(e.update){var g=document.id(e.update).empty();if(e.filter){g.adopt(c.elements);
|
||||
}else{g.set("html",c.html);}}else{if(e.append){var a=document.id(e.append);if(e.filter){c.elements.reverse().inject(a);}else{a.adopt(b.getChildren());}}}if(e.evalScripts){Browser.exec(c.javascript);
|
||||
}this.onSuccess(c.tree,c.elements,c.html,c.javascript);}});Element.Properties.load={set:function(a){var b=this.get("load").cancel();b.setOptions(a);return this;
|
||||
},get:function(){var a=this.retrieve("load");if(!a){a=new Request.HTML({data:this,link:"cancel",update:this,method:"get"});this.store("load",a);}return a;
|
||||
}};Element.implement({load:function(){this.get("load").send(Array.link(arguments,{data:Type.isObject,url:Type.isString}));return this;}});if(typeof JSON=="undefined"){this.JSON={};
|
||||
}(function(){var special={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};var escape=function(chr){return special[chr]||"\\u"+("0000"+chr.charCodeAt(0).toString(16)).slice(-4);
|
||||
};JSON.validate=function(string){string=string.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"");
|
||||
return(/^[\],:{}\s]*$/).test(string);};JSON.encode=JSON.stringify?function(obj){return JSON.stringify(obj);}:function(obj){if(obj&&obj.toJSON){obj=obj.toJSON();
|
||||
}switch(typeOf(obj)){case"string":return'"'+obj.replace(/[\x00-\x1f\\"]/g,escape)+'"';case"array":return"["+obj.map(JSON.encode).clean()+"]";case"object":case"hash":var string=[];
|
||||
Object.each(obj,function(value,key){var json=JSON.encode(value);if(json){string.push(JSON.encode(key)+":"+json);}});return"{"+string+"}";case"number":case"boolean":return""+obj;
|
||||
case"null":return"null";}return null;};JSON.decode=function(string,secure){if(!string||typeOf(string)!="string"){return null;}if(secure||JSON.secure){if(JSON.parse){return JSON.parse(string);
|
||||
}if(!JSON.validate(string)){throw new Error("JSON could not decode the input; security is enabled and the value is not secure.");}}return eval("("+string+")");
|
||||
};})();Request.JSON=new Class({Extends:Request,options:{secure:true},initialize:function(a){this.parent(a);Object.append(this.headers,{Accept:"application/json","X-Request":"JSON"});
|
||||
},success:function(c){var b;try{b=this.response.json=JSON.decode(c,this.options.secure);}catch(a){this.fireEvent("error",[c,a]);return;}if(b==null){this.onFailure();
|
||||
}else{this.onSuccess(b,c);}}});var Cookie=new Class({Implements:Options,options:{path:"/",domain:false,duration:false,secure:false,document:document,encode:true},initialize:function(b,a){this.key=b;
|
||||
this.setOptions(a);},write:function(b){if(this.options.encode){b=encodeURIComponent(b);}if(this.options.domain){b+="; domain="+this.options.domain;}if(this.options.path){b+="; path="+this.options.path;
|
||||
}if(this.options.duration){var a=new Date();a.setTime(a.getTime()+this.options.duration*24*60*60*1000);b+="; expires="+a.toGMTString();}if(this.options.secure){b+="; secure";
|
||||
}this.options.document.cookie=this.key+"="+b;return this;},read:function(){var a=this.options.document.cookie.match("(?:^|;)\\s*"+this.key.escapeRegExp()+"=([^;]*)");
|
||||
return(a)?decodeURIComponent(a[1]):null;},dispose:function(){new Cookie(this.key,Object.merge({},this.options,{duration:-1})).write("");return this;}});
|
||||
Cookie.write=function(b,c,a){return new Cookie(b,a).write(c);};Cookie.read=function(a){return new Cookie(a).read();};Cookie.dispose=function(b,a){return new Cookie(b,a).dispose();
|
||||
};(function(i,k){var l,f,e=[],c,b,d=k.createElement("div");var g=function(){clearTimeout(b);if(l){return;}Browser.loaded=l=true;k.removeListener("DOMContentLoaded",g).removeListener("readystatechange",a);
|
||||
k.fireEvent("domready");i.fireEvent("domready");};var a=function(){for(var m=e.length;m--;){if(e[m]()){g();return true;}}return false;};var j=function(){clearTimeout(b);
|
||||
if(!a()){b=setTimeout(j,10);}};k.addListener("DOMContentLoaded",g);var h=function(){try{d.doScroll();return true;}catch(m){}return false;};if(d.doScroll&&!h()){e.push(h);
|
||||
c=true;}if(k.readyState){e.push(function(){var m=k.readyState;return(m=="loaded"||m=="complete");});}if("onreadystatechange" in k){k.addListener("readystatechange",a);
|
||||
}else{c=true;}if(c){j();}Element.Events.domready={onAdd:function(m){if(l){m.call(this);}}};Element.Events.load={base:"load",onAdd:function(m){if(f&&this==i){m.call(this);
|
||||
}},condition:function(){if(this==i){g();delete Element.Events.load;}return true;}};i.addEvent("load",function(){f=true;});})(window,document);(function(){var Swiff=this.Swiff=new Class({Implements:Options,options:{id:null,height:1,width:1,container:null,properties:{},params:{quality:"high",allowScriptAccess:"always",wMode:"window",swLiveConnect:true},callBacks:{},vars:{}},toElement:function(){return this.object;
|
||||
},initialize:function(path,options){this.instance="Swiff_"+String.uniqueID();this.setOptions(options);options=this.options;var id=this.id=options.id||this.instance;
|
||||
var container=document.id(options.container);Swiff.CallBacks[this.instance]={};var params=options.params,vars=options.vars,callBacks=options.callBacks;
|
||||
var properties=Object.append({height:options.height,width:options.width},options.properties);var self=this;for(var callBack in callBacks){Swiff.CallBacks[this.instance][callBack]=(function(option){return function(){return option.apply(self.object,arguments);
|
||||
};})(callBacks[callBack]);vars[callBack]="Swiff.CallBacks."+this.instance+"."+callBack;}params.flashVars=Object.toQueryString(vars);if(Browser.ie){properties.classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";
|
||||
params.movie=path;}else{properties.type="application/x-shockwave-flash";}properties.data=path;var build='<object id="'+id+'"';for(var property in properties){build+=" "+property+'="'+properties[property]+'"';
|
||||
}build+=">";for(var param in params){if(params[param]){build+='<param name="'+param+'" value="'+params[param]+'" />';}}build+="</object>";this.object=((container)?container.empty():new Element("div")).set("html",build).firstChild;
|
||||
},replaces:function(element){element=document.id(element,true);element.parentNode.replaceChild(this.toElement(),element);return this;},inject:function(element){document.id(element,true).appendChild(this.toElement());
|
||||
return this;},remote:function(){return Swiff.remote.apply(Swiff,[this.toElement()].append(arguments));}});Swiff.CallBacks={};Swiff.remote=function(obj,fn){var rs=obj.CallFunction('<invoke name="'+fn+'" returntype="javascript">'+__flash__argumentsToXML(arguments,2)+"</invoke>");
|
||||
return eval(rs);};})();
|
||||
@@ -0,0 +1,121 @@
|
||||
# Nivoo-Slider #
|
||||
|
||||
The Nivoo-Slider is an image gallery based on the jQuery Plugin NivoSlider (http://nivo.dev7studios.com/). It features 18 different transition effects.
|
||||
|
||||

|
||||
|
||||
## How to use ##
|
||||
|
||||
Just include NivooSider.js and the NivooSlider.css to your the head section of your HTML file:
|
||||
|
||||
<script type="text/javascript" src="NivooSlider.js"></script>
|
||||
<link href="NivooSlider.css" rel="stylesheet" type="text/css" media="screen" />
|
||||
|
||||
And the gallery structure:
|
||||
|
||||
<div id="Slider" class="nivoo-slider">
|
||||
<a href="#">
|
||||
<img src="images/1269388.jpg" alt="" title="This is an example of a linked image" height="350" width="600" />
|
||||
</a>
|
||||
<img src="images/1268244.jpg" alt="" title="This is an example of a caption" height="350" width="600" />
|
||||
<a href="#">
|
||||
<img src="images/1270048.jpg" alt="" title="This is another example of a caption" height="350" width="600" />
|
||||
</a>
|
||||
<img src="images/1270256.jpg" alt="" title="This is another example of a caption" height="350" width="600" />
|
||||
</div>
|
||||
|
||||
And then initialize the slider using the domready event:
|
||||
|
||||
window.addEvent('domready', function () {
|
||||
// The simple way
|
||||
new NivooSlider($('Slider'));
|
||||
|
||||
// The more advanced way
|
||||
new NivooSlider($('Slider'), {
|
||||
animSpeed: 750,
|
||||
effect: 'sliceLeftRightDown',
|
||||
interval: 5000,
|
||||
orientation: 'horizontal',
|
||||
slices: 20
|
||||
}).addEvents({
|
||||
'onFinish': function () {
|
||||
// fired after each transition
|
||||
},
|
||||
'onLastSlide': function () {
|
||||
// fired when the last slide comes on
|
||||
},
|
||||
'onStart': function () {
|
||||
// fired right before each transition
|
||||
}
|
||||
});
|
||||
|
||||
// add an if statement to check for the slider element (e.g. in a global script)
|
||||
// in this way you can add the code even if the slider element doesn't exist on the current page
|
||||
if ($('Slider')) {
|
||||
new NivooSlider($('Slider'));
|
||||
}
|
||||
}
|
||||
|
||||
## Documentation ##
|
||||
|
||||
### Class: NivooSlider ###
|
||||
|
||||
##### Syntax #####
|
||||
|
||||
var slider = new NivooSlider(element[, options]);
|
||||
|
||||
###### Arguments ######
|
||||
1. element - (mixed) An Element or the string id of an Element to apply the gallery to.
|
||||
2. options - (object, optional) The Nivoo-Slider options object, described below:
|
||||
|
||||
###### Options ######
|
||||
- animSpeed - (number: defaults to 500) The time (duration) in ms of the transition
|
||||
- autoPlay - (bool: defaults to true) Start the transition automatically after initializing
|
||||
- controlNav: (bool: defauls to true) Add a control navigation (bullet points) below the slider
|
||||
- controlNavItem: (string: defauls to disc) Sets the character used in the control navigation, can be disc, decimal, or any other string / html entity
|
||||
- directionNav -(bool: deafults to true) Shows controls to go back and forth
|
||||
- directionNavHide - (bool: defaults to false) Hides the navigation controls on mouseout, so they are only visible when the mouse cursor is over the slider element
|
||||
- directionNavPosition -(string: deafult is inside) Place of the directional navigation, can be inside or outside. When positioned outside the css-class direction-nav-outside will be added to the slider-container
|
||||
- directionNavWidth - (number,string: defaults to 20%) Width of the clickable area of the directional navigation. Can be a number for pixels or a string with a percentage of the full width.
|
||||
- effect - (string: defaults to sliceDown) Type of transition (see effects),
|
||||
- interval - (number: defaults to 3000) Interval in ms between the transitions, required for the autoPlay function
|
||||
- orientation - (string: defaults to vertical) Defines the direction of the transition, can be horizontal, random or vertical
|
||||
- pauseOnBlur - (bool: defaults to false) Pauses the Animation when the window is not focused
|
||||
- pauseOnHover - (bool: defaults to true) Clears the interval on mouseover
|
||||
- slices - (number: defaults to 15) Number of the slices used for the transitions
|
||||
|
||||
###### Events ######
|
||||
- finish - (function) Is fired right after each transition
|
||||
- lastSlide - (function) Is fired when the last slide comes on
|
||||
- start - (function) Is fired right before each transition
|
||||
|
||||
#### Effects ####
|
||||
|
||||
###### horizontal & vertical ######
|
||||
- fade
|
||||
- fold
|
||||
- random
|
||||
|
||||
###### horizontal ######
|
||||
- sliceLeftDown
|
||||
- sliceLeftUp
|
||||
- sliceLeftRightDown
|
||||
- sliceLeftRightUp
|
||||
- sliceRightDown
|
||||
- sliceRightUp
|
||||
- wipeDown
|
||||
- wipeUp
|
||||
|
||||
###### vertical ######
|
||||
- sliceDownLeft
|
||||
- sliceDownRight
|
||||
- sliceUpDownLeft
|
||||
- sliceUpDownRight
|
||||
- sliceUpLeft
|
||||
- sliceUpRight
|
||||
- wipeLeft
|
||||
- wipeRight
|
||||
|
||||
## License ##
|
||||
|
||||
MIT-style license.
|
||||
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
---
|
||||
|
||||
script: NivooSlider.js
|
||||
|
||||
description: A nice image slider for MooTools.
|
||||
|
||||
license: MIT-style license
|
||||
|
||||
authors:
|
||||
- Johannes Fischer
|
||||
|
||||
requires:
|
||||
- core/1.4: '*'
|
||||
|
||||
provides:
|
||||
- NivooSlider
|
||||
|
||||
...
|
||||
*/
|
||||
var NivooSlider=new Class({Implements:[Events,Options],caption:null,children:null,containerSize:0,count:0,currentSlide:0,currentImage:"",effects:{common:["fade"],horizontal:["foldDown","foldUp","sliceLeftUp","sliceLeftDown","sliceLeftRightDown","sliceLeftRightUp","sliceRightDown","sliceRightUp","wipeDown","wipeUp"],vertical:["foldLeft","foldRight","sliceDownLeft","sliceDownRight","sliceUpDownLeft","sliceUpDownRight","sliceUpLeft","sliceUpRight","wipeLeft","wipeRight"]},holder:null,hover:false,interval:null,isActive:true,orientation:"",paused:false,running:false,slices:null,sliceSize:null,totalSlides:0,options:{animSpeed:500,autoPlay:true,controlNav:true,controlNavItem:"disc",directionNav:true,directionNavHide:false,directionNavPosition:"inside",directionNavWidth:"20%",effect:"sliceDown",interval:3000,orientation:"vertical",pauseOnBlur:false,pauseOnHover:true,slices:15,preLoadImages:false},initialize:function(a,b){this.container=$(a);this.setOptions(b);this.orientation=this.getOrientation();this.effects.horizontal.combine(this.effects.common);this.effects.vertical.combine(this.effects.common);this.initSlider();this.createSlices();if(this.options.autoPlay){this.play();if(this.options.pauseOnBlur){window.addEvents({blur:function(){this.isActive=false;this.pause()}.bind(this),focus:function(){this.isActive=true;this.play()}.bind(this)})}}},animate:function(e,d,b){var a=e.retrieve("fxInstance"),c=b!==undefined&&b===true;a.start(d).chain(function(){this.count+=1;if(this.count===this.options.slices||c){this.running=false;this.finish();this.setBackgroundImage();this.count=0;if(this.currentSlide===(this.totalSlides-1)){this.lastSlide()}}}.bind(this))},arrangeSlices:function(){var b,a,d,c;this.slices.each(function(f,e){a={left:this.orientation==="vertical"?this.sliceSize.x*e:0,top:this.orientation==="horizontal"?this.sliceSize.y*e:0};if(this.orientation==="horizontal"){b=e===this.options.slices-1?this.containerSize.y-(this.sliceSize.y*e):this.sliceSize.y;c="100%";f.setStyles({height:b,top:a.top,width:c})}else{b=0;c=e===this.options.slices-1?this.containerSize.x-(this.sliceSize.x*e):this.sliceSize.x;f.setStyles({height:b,left:a.left,top:"",width:c})}f.store("fxInstance",new Fx.Morph(f,{duration:this.options.animSpeed})).store("coordinates",Object.merge(a,{height:b,width:c}))},this)},createCaption:function(){this.caption=new Element("p",{styles:{opacity:0}}).inject(this.holder);this.caption.store("fxInstance",new Fx.Morph(this.caption,{duration:200,wait:false}))},createControlNav:function(){var a="",c,b=1;this.container.addClass("got-control-nav");new Element("div.control-nav").inject(this.container);this.totalSlides.each(function(d){if(this.options.controlNavItem==="decimal"){c=b;b++}else{if(this.options.controlNavItem==="disc"){a="decimal";c="•"}else{c=this.options.controlNavItem}}new Element("a",{"class":a,events:{click:function(f){f.stop();this.slide(d)}.bind(this)},href:"#",html:c}).inject(this.container.getElement("div.control-nav"))},this);this.setCurrentControlItem()},createDirectionNav:function(){var a,d,b,e,c;e=this.options.directionNavPosition==="inside"?this.holder:this.container;c=this.options.directionNavWidth;a={height:this.containerSize.y};if(this.options.directionNavPosition==="inside"&&this.options.directionNavWidth.toInt()!==0){a.width=c}d=new Element("div.direction-nav-left",{styles:a}).inject(e);b=new Element("div.direction-nav-right",{styles:a}).inject(e);this.leftNav=new Element("a",{events:{click:function(f){f.stop();if(this.options.autoPlay){this.pause();if(!this.options.pauseOnHover){this.play()}}this.previous()}.bind(this)},href:"#",styles:{height:a.height}}).inject(d);this.rightNav=new Element("a",{events:{click:function(f){f.stop();if(this.options.autoPlay){this.pause();if(!this.options.pauseOnHover){this.play()}}this.next()}.bind(this)},href:"#",styles:{height:a.height}}).inject(b);if(this.options.directionNavHide&&this.options.directionNav){$$(this.leftNav,this.rightNav).setStyle("opacity",0);this.holder.addEvents({mouseout:function(){$$(this.leftNav,this.rightNav).fade(0)}.bind(this),mouseover:function(){$$(this.leftNav,this.rightNav).fade(1)}.bind(this)})}},createLinkHolder:function(){this.linkHolder=new Element("a.nivoo-link",{href:"#"}).inject(this.holder)},createSlices:function(){this.sliceSize={x:(this.containerSize.x/this.options.slices).round(),y:(this.containerSize.y/this.options.slices).round()};if(["fade","wipeLeft","wipeRight"].contains(this.options.effect)){this.options.slices=1}this.options.slices.each(function(a){new Element("div.nivoo-slice").inject(this.holder)},this);this.slices=this.getSlices();this.arrangeSlices()},getImages:function(){return this.holder.getElements("img")},getOrientation:function(){if(this.effects.horizontal.indexOf(this.options.effect)>-1){return"horizontal"}else{if(this.effects.vertical.indexOf(this.options.effect)>-1){return"vertical"}else{return this.options.orientation}}},getSlices:function(){return this.holder.getElements(".nivoo-slice")},Line truncated
|
||||
@@ -0,0 +1,22 @@
|
||||
Copyright (c) 2010 Gilbert Pellegrom
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
@@ -0,0 +1,6 @@
|
||||
name: Nivoo-Slider
|
||||
author: Johannes
|
||||
category: Widgets
|
||||
tags: [effect,image,gallery]
|
||||
demo: http://www.johannes-fischer.de/labs/nivoo-slider/
|
||||
current: 1.1
|
||||
@@ -0,0 +1,780 @@
|
||||
/*
|
||||
---
|
||||
|
||||
script: NivooSlider.js
|
||||
|
||||
description: A nice image slider for MooTools.
|
||||
|
||||
license: MIT-style license
|
||||
|
||||
authors:
|
||||
- Johannes Fischer
|
||||
|
||||
requires:
|
||||
- core/1.4: '*'
|
||||
|
||||
provides:
|
||||
- NivooSlider
|
||||
|
||||
...
|
||||
*/
|
||||
|
||||
var NivooSlider = new Class({
|
||||
|
||||
Implements: [Events, Options],
|
||||
|
||||
caption: null,
|
||||
children: null,
|
||||
containerSize: 0,
|
||||
count: 0,
|
||||
currentSlide: 0,
|
||||
currentImage: '',
|
||||
effects: {
|
||||
// used for random effects
|
||||
common: ['fade'],
|
||||
horizontal: ['foldDown', 'foldUp', 'sliceLeftUp', 'sliceLeftDown', 'sliceLeftRightDown', 'sliceLeftRightUp', 'sliceRightDown', 'sliceRightUp', 'wipeDown', 'wipeUp'],
|
||||
vertical: ['foldLeft', 'foldRight', 'sliceDownLeft', 'sliceDownRight', 'sliceUpDownLeft', 'sliceUpDownRight', 'sliceUpLeft', 'sliceUpRight', 'wipeLeft', 'wipeRight']
|
||||
},
|
||||
holder: null,
|
||||
hover: false,
|
||||
interval: null,
|
||||
isActive: true,
|
||||
orientation: '',
|
||||
paused: false,
|
||||
running: false,
|
||||
slices: null,
|
||||
sliceSize: null,
|
||||
totalSlides: 0,
|
||||
|
||||
options: {
|
||||
animSpeed: 500,
|
||||
autoPlay: true,
|
||||
controlNav: true,
|
||||
controlNavItem: 'disc',
|
||||
directionNav: true,
|
||||
directionNavHide: false,
|
||||
directionNavPosition: 'inside',
|
||||
directionNavWidth: '20%',
|
||||
effect: 'sliceDown', // TODO allow to pass an array with multiple effects
|
||||
interval: 3000,
|
||||
orientation: 'vertical',
|
||||
pauseOnBlur: false,
|
||||
pauseOnHover: true,
|
||||
slices: 15,
|
||||
|
||||
// not implemented yet
|
||||
preLoadImages: false
|
||||
|
||||
//onFinish: function () {}
|
||||
//onLastSlide: function () {}
|
||||
//onStart: function () {}
|
||||
},
|
||||
|
||||
initialize: function (container, options) {
|
||||
this.container = $(container);
|
||||
|
||||
this.setOptions(options);
|
||||
this.orientation = this.getOrientation();
|
||||
|
||||
this.effects.horizontal.combine(this.effects.common);
|
||||
this.effects.vertical.combine(this.effects.common);
|
||||
|
||||
this.initSlider();
|
||||
this.createSlices();
|
||||
|
||||
if (this.options.autoPlay) {
|
||||
this.play();
|
||||
|
||||
if (this.options.pauseOnBlur) {
|
||||
window.addEvents({
|
||||
blur: function () {
|
||||
this.isActive = false;
|
||||
this.pause();
|
||||
}.bind(this),
|
||||
focus: function () {
|
||||
this.isActive = true;
|
||||
this.play();
|
||||
}.bind(this)
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
animate: function (slice, fxStyles, last)
|
||||
{
|
||||
var fx = slice.retrieve('fxInstance'),
|
||||
isLast = last !== undefined && last === true;
|
||||
|
||||
fx.start(fxStyles).chain(function () {
|
||||
this.count += 1;
|
||||
if (this.count === this.options.slices || isLast) {
|
||||
this.running = false;
|
||||
|
||||
// fire onFinish function
|
||||
this.finish();
|
||||
|
||||
this.setBackgroundImage();
|
||||
|
||||
this.count = 0;
|
||||
|
||||
if (this.currentSlide === (this.totalSlides - 1)) {
|
||||
this.lastSlide();
|
||||
}
|
||||
}
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
arrangeSlices: function () {
|
||||
var height,
|
||||
position,
|
||||
sliceSize,
|
||||
width;
|
||||
|
||||
this.slices.each(function (el, i) {
|
||||
|
||||
position = {
|
||||
left: this.orientation === 'vertical' ? this.sliceSize.x * i : 0,
|
||||
top: this.orientation === 'horizontal' ? this.sliceSize.y * i : 0
|
||||
};
|
||||
|
||||
// set size & position
|
||||
if (this.orientation === 'horizontal') {
|
||||
height = i === this.options.slices - 1 ? this.containerSize.y - (this.sliceSize.y * i) : this.sliceSize.y;
|
||||
width = '100%';
|
||||
|
||||
el.setStyles({
|
||||
height: height,
|
||||
top: position.top,
|
||||
width: width
|
||||
});
|
||||
} else { // if vertical
|
||||
height = 0;
|
||||
width = i === this.options.slices - 1 ? this.containerSize.x - (this.sliceSize.x * i) : this.sliceSize.x;
|
||||
|
||||
el.setStyles({
|
||||
height: height,
|
||||
left: position.left,
|
||||
top: '',
|
||||
width: width
|
||||
});
|
||||
}
|
||||
|
||||
el.store('fxInstance', new Fx.Morph(el, {
|
||||
duration: this.options.animSpeed
|
||||
})).store('coordinates', Object.merge(position, {height: height, width: width}));
|
||||
}, this);
|
||||
},
|
||||
|
||||
createCaption: function () {
|
||||
this.caption = new Element('p', {
|
||||
styles: {
|
||||
opacity: 0
|
||||
}
|
||||
}).inject(this.holder);
|
||||
|
||||
this.caption.store('fxInstance', new Fx.Morph(this.caption, {
|
||||
duration: 200,
|
||||
wait: false
|
||||
}));
|
||||
},
|
||||
|
||||
createControlNav: function () {
|
||||
var cssClass = '',
|
||||
html,
|
||||
i = 1;
|
||||
|
||||
this.container.addClass('got-control-nav');
|
||||
|
||||
new Element('div.control-nav').inject(this.container);
|
||||
|
||||
this.totalSlides.each(function (el) {
|
||||
if (this.options.controlNavItem === 'decimal') {
|
||||
html = i;
|
||||
i++;
|
||||
} else if (this.options.controlNavItem === 'disc') {
|
||||
cssClass = 'decimal';
|
||||
html = '•';
|
||||
} else {
|
||||
html = this.options.controlNavItem;
|
||||
}
|
||||
|
||||
new Element('a', {
|
||||
'class': cssClass,
|
||||
events: {
|
||||
'click': function (e) {
|
||||
e.stop();
|
||||
this.slide(el);
|
||||
}.bind(this)
|
||||
},
|
||||
href: '#',
|
||||
html: html
|
||||
}).inject(this.container.getElement('div.control-nav'));
|
||||
}, this);
|
||||
|
||||
this.setCurrentControlItem();
|
||||
},
|
||||
|
||||
createDirectionNav: function () {
|
||||
var directionNavStyles,
|
||||
leftContainer,
|
||||
rightContainer,
|
||||
target,
|
||||
width;
|
||||
|
||||
target = this.options.directionNavPosition === 'inside' ? this.holder : this.container;
|
||||
width = this.options.directionNavWidth;
|
||||
|
||||
directionNavStyles = {
|
||||
height: this.containerSize.y
|
||||
};
|
||||
|
||||
if (this.options.directionNavPosition === 'inside' && this.options.directionNavWidth.toInt() !== 0) {
|
||||
directionNavStyles.width = width;
|
||||
}
|
||||
|
||||
// create container
|
||||
leftContainer = new Element('div.direction-nav-left', {
|
||||
styles: directionNavStyles
|
||||
}).inject(target);
|
||||
|
||||
rightContainer = new Element('div.direction-nav-right', {
|
||||
styles: directionNavStyles
|
||||
}).inject(target);
|
||||
|
||||
// create controls
|
||||
|
||||
this.leftNav = new Element('a', {
|
||||
events: {
|
||||
'click': function (e) {
|
||||
e.stop();
|
||||
if (this.options.autoPlay)
|
||||
{
|
||||
this.pause();
|
||||
if (!this.options.pauseOnHover)
|
||||
{
|
||||
this.play();
|
||||
}
|
||||
}
|
||||
this.previous();
|
||||
}.bind(this)
|
||||
},
|
||||
href: '#',
|
||||
styles: {
|
||||
height: directionNavStyles.height
|
||||
}
|
||||
}).inject(leftContainer);
|
||||
|
||||
this.rightNav = new Element('a', {
|
||||
events: {
|
||||
'click': function (e) {
|
||||
e.stop();
|
||||
if (this.options.autoPlay) {
|
||||
this.pause();
|
||||
if (!this.options.pauseOnHover)
|
||||
{
|
||||
this.play();
|
||||
}
|
||||
}
|
||||
this.next();
|
||||
}.bind(this)
|
||||
},
|
||||
href: '#',
|
||||
styles: {
|
||||
height: directionNavStyles.height
|
||||
}
|
||||
}).inject(rightContainer);
|
||||
|
||||
if (this.options.directionNavHide && this.options.directionNav)
|
||||
{
|
||||
$$(this.leftNav, this.rightNav).setStyle('opacity', 0);
|
||||
this.holder.addEvents({
|
||||
'mouseout': function () {
|
||||
$$(this.leftNav, this.rightNav).fade(0);
|
||||
}.bind(this),
|
||||
'mouseover': function () {
|
||||
$$(this.leftNav, this.rightNav).fade(1);
|
||||
}.bind(this)
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
createLinkHolder: function ()
|
||||
{
|
||||
this.linkHolder = new Element('a.nivoo-link', {
|
||||
href: '#'
|
||||
}).inject(this.holder);
|
||||
},
|
||||
|
||||
createSlices: function ()
|
||||
{
|
||||
this.sliceSize = {
|
||||
x: (this.containerSize.x / this.options.slices).round(),
|
||||
y: (this.containerSize.y / this.options.slices).round()
|
||||
};
|
||||
|
||||
// effects that need one slice only
|
||||
if (['fade', 'wipeLeft', 'wipeRight'].contains(this.options.effect)) {
|
||||
this.options.slices = 1;
|
||||
}
|
||||
|
||||
this.options.slices.each(function (i) {
|
||||
new Element('div.nivoo-slice').inject(this.holder);
|
||||
}, this);
|
||||
|
||||
this.slices = this.getSlices();
|
||||
|
||||
this.arrangeSlices();
|
||||
},
|
||||
|
||||
getImages: function () {
|
||||
return this.holder.getElements('img');
|
||||
},
|
||||
|
||||
getOrientation: function () {
|
||||
if (this.effects.horizontal.indexOf(this.options.effect) > -1) {
|
||||
return 'horizontal';
|
||||
} else if (this.effects.vertical.indexOf(this.options.effect) > -1) {
|
||||
return 'vertical';
|
||||
} else {
|
||||
return this.options.orientation;
|
||||
}
|
||||
},
|
||||
|
||||
getSlices: function () {
|
||||
return this.holder.getElements('.nivoo-slice');
|
||||
},
|
||||
|
||||
initSlider: function () {
|
||||
if (this.options.directionNavPosition === 'outside') {
|
||||
this.container.addClass('direction-nav-outside');
|
||||
}
|
||||
// wrap child elements
|
||||
this.holder = new Element('div.nivoo-slider-holder').adopt(this.container.getChildren()).inject(this.container);
|
||||
|
||||
this.containerSize = this.holder.getSize();
|
||||
|
||||
// Find our slider children
|
||||
this.children = this.getImages();
|
||||
|
||||
this.totalSlides = this.children.length;
|
||||
|
||||
this.children.setStyle('display', 'none');
|
||||
|
||||
this.currentImage = this.children[0];
|
||||
|
||||
// init LinkHolderand set link
|
||||
this.createLinkHolder();
|
||||
this.setLink();
|
||||
|
||||
// Set first background
|
||||
this.setBackgroundImage();
|
||||
|
||||
this.createCaption();
|
||||
|
||||
this.showCaption();
|
||||
|
||||
// attach pauseOnHover
|
||||
if (this.options.pauseOnHover && this.options.autoPlay) {
|
||||
this.holder.addEvents({
|
||||
'mouseenter': function () {
|
||||
this.pause();
|
||||
}.bind(this),
|
||||
'mouseleave': function () {
|
||||
this.play();
|
||||
}.bind(this)
|
||||
});
|
||||
}
|
||||
|
||||
// create directional navigation
|
||||
if (this.options.directionNav)
|
||||
{
|
||||
this.createDirectionNav();
|
||||
}
|
||||
|
||||
// create control navigation
|
||||
if (this.options.controlNav)
|
||||
{
|
||||
this.createControlNav();
|
||||
}
|
||||
},
|
||||
|
||||
hideCaption: function ()
|
||||
{
|
||||
this.caption.retrieve('fxInstance').start({
|
||||
bottom: this.caption.getHeight() * -1,
|
||||
opacity: 0.5
|
||||
});
|
||||
},
|
||||
|
||||
next: function ()
|
||||
{
|
||||
this.currentSlide += 1;
|
||||
|
||||
if (this.currentSlide === this.totalSlides) {
|
||||
this.currentSlide = 0;
|
||||
}
|
||||
|
||||
this.slide();
|
||||
},
|
||||
|
||||
pause: function ()
|
||||
{
|
||||
window.clearInterval(this.interval);
|
||||
this.interval = null;
|
||||
},
|
||||
|
||||
play: function ()
|
||||
{
|
||||
if (this.interval === null && this.isActive === true) {
|
||||
this.interval = this.next.periodical(this.options.interval, this);
|
||||
}
|
||||
},
|
||||
|
||||
previous: function ()
|
||||
{
|
||||
if (this.options.autoPlay) {
|
||||
this.pause();
|
||||
if (!this.options.pauseOnHover) {
|
||||
this.play();
|
||||
}
|
||||
}
|
||||
|
||||
this.currentSlide -= 1;
|
||||
|
||||
if (this.currentSlide < 0) {
|
||||
this.currentSlide = (this.totalSlides - 1);
|
||||
}
|
||||
|
||||
this.slide();
|
||||
},
|
||||
|
||||
setCurrentControlItem: function ()
|
||||
{
|
||||
var active = this.container.getElement('div.control-nav a.current');
|
||||
|
||||
if (active) {
|
||||
active.removeClass('current');
|
||||
}
|
||||
|
||||
this.container.getElements('div.control-nav a')[this.currentSlide].addClass('current');
|
||||
},
|
||||
|
||||
showCaption: function ()
|
||||
{
|
||||
var title = this.currentImage.get('title');
|
||||
|
||||
if (!title) {
|
||||
this.hideCaption();
|
||||
return;
|
||||
}
|
||||
|
||||
this.setCaptionText(title);
|
||||
|
||||
this.caption.retrieve('fxInstance').start({
|
||||
bottom: 0,
|
||||
opacity: 1
|
||||
});
|
||||
},
|
||||
|
||||
slide: function (slideNo) {
|
||||
var coordinates,
|
||||
effect,
|
||||
slice,
|
||||
slices,
|
||||
styles,
|
||||
timeBuff;
|
||||
|
||||
if (this.running) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.orientation === 'random') {
|
||||
this.orientation = ['horizontal', 'vertical'].getRandom();
|
||||
}
|
||||
|
||||
this.arrangeSlices();
|
||||
|
||||
if (slideNo !== undefined) {
|
||||
this.currentSlide = slideNo;
|
||||
}
|
||||
|
||||
// set currentImage
|
||||
this.currentImage = this.children[this.currentSlide];
|
||||
|
||||
// set current control nav item
|
||||
if (this.options.controlNav) {
|
||||
this.setCurrentControlItem();
|
||||
}
|
||||
|
||||
this.setLink();
|
||||
|
||||
// Process caption
|
||||
this.showCaption();
|
||||
|
||||
// TODO use this.slices within each loop instead
|
||||
slices = this.slices;
|
||||
timeBuff = 0;
|
||||
|
||||
// reset slices
|
||||
this.slices.each(function (slice) {
|
||||
|
||||
coordinates = slice.retrieve('coordinates');
|
||||
|
||||
slice.setStyles({
|
||||
background: 'url("' + this.currentImage.get('src') + '") no-repeat -' + coordinates.left + 'px ' + coordinates.top * -1 + 'px',
|
||||
bottom: '',
|
||||
height: coordinates.height,
|
||||
left: coordinates.left,
|
||||
opacity: 0,
|
||||
right: '',
|
||||
top: coordinates.top,
|
||||
width: coordinates.width
|
||||
});
|
||||
|
||||
var property = this.orientation === 'horizontal' ? 'width' : 'height';
|
||||
|
||||
slice.setStyle(property, 0);
|
||||
}, this);
|
||||
|
||||
// fire onStart function
|
||||
this.start();
|
||||
|
||||
// Run effects
|
||||
this.running = true;
|
||||
|
||||
effect = this.options.effect;
|
||||
|
||||
if (effect === 'random') {
|
||||
effect = this.effects[this.orientation].getRandom();
|
||||
}
|
||||
|
||||
// vertical effects
|
||||
if (['sliceDownRight', 'sliceDownLeft'].contains(effect)) {
|
||||
if (effect === 'sliceDownLeft')
|
||||
{
|
||||
slices = slices.reverse();
|
||||
}
|
||||
|
||||
slices.each(function (slice) {
|
||||
slice.setStyle('top', 0);
|
||||
|
||||
this.animate.delay(100 + timeBuff, this, [slice, {height: this.containerSize.y, opacity: 1}]);
|
||||
|
||||
timeBuff += 50;
|
||||
}, this);
|
||||
} else if (['sliceUpRight', 'sliceUpLeft'].contains(effect)) {
|
||||
if (effect === 'sliceUpLeft')
|
||||
{
|
||||
slices = slices.reverse();
|
||||
}
|
||||
|
||||
slices.each(function (slice) {
|
||||
var fx = slice.retrieve('fxInstance');
|
||||
|
||||
slice.setStyle('bottom', 0);
|
||||
|
||||
this.animate.delay(100 + timeBuff, this, [slice, {height: this.containerSize.y, opacity: 1}]);
|
||||
|
||||
timeBuff += 50;
|
||||
}, this);
|
||||
}
|
||||
else if (['sliceUpDownRight', 'sliceUpDownLeft'].contains(effect))
|
||||
{
|
||||
if (effect === 'sliceUpDownLeft')
|
||||
{
|
||||
slices = slices.reverse();
|
||||
}
|
||||
|
||||
slices.each(function (slice, i) {
|
||||
if (i % 2 === 0)
|
||||
{
|
||||
slice.setStyle('top', 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
slice.setStyles({
|
||||
bottom: 0,
|
||||
top: ''
|
||||
});
|
||||
}
|
||||
|
||||
this.animate.delay(100 + timeBuff, this, [slice, {height: this.containerSize.y, opacity: 1}]);
|
||||
|
||||
timeBuff += 50;
|
||||
}, this);
|
||||
}
|
||||
else if (['wipeLeft', 'wipeRight'].contains(effect))
|
||||
{
|
||||
styles = {
|
||||
height: this.containerSize.y,
|
||||
opacity: 1,
|
||||
width: 0
|
||||
};
|
||||
|
||||
if (effect === 'wipeRight')
|
||||
{
|
||||
Object.append(styles, {
|
||||
backgroundPosition: 'top right',
|
||||
left: '',
|
||||
right: 0
|
||||
});
|
||||
}
|
||||
|
||||
slice = slices[0];
|
||||
|
||||
slice.setStyles(styles);
|
||||
this.animate(slice, {width: this.containerSize.x}, true);
|
||||
}
|
||||
|
||||
// horizontal effects
|
||||
else if (['sliceLeftUp', 'sliceLeftDown', 'sliceRightDown', 'sliceRightUp'].contains(effect))
|
||||
{
|
||||
if (effect === 'sliceLeftUp' || effect === 'sliceRightUp') {
|
||||
slices = slices.reverse();
|
||||
}
|
||||
|
||||
if (effect === 'sliceRightDown' || effect === 'sliceRightUp') {
|
||||
slices.setStyles({
|
||||
left: '',
|
||||
right: 0
|
||||
});
|
||||
} else {
|
||||
slices.setStyles({
|
||||
left: 0,
|
||||
right: ''
|
||||
});
|
||||
}
|
||||
|
||||
slices.each(function (slice) {
|
||||
this.animate.delay(100 + timeBuff, this, [slice, {opacity: 1, width: this.containerSize.x}]);
|
||||
|
||||
timeBuff += 50;
|
||||
}, this);
|
||||
} else if (['sliceLeftRightDown', 'sliceLeftRightUp'].contains(effect)) {
|
||||
if (effect === 'sliceLeftRightUp') {
|
||||
slices = slices.reverse();
|
||||
}
|
||||
|
||||
slices.each(function (slice, i) {
|
||||
if (i % 2 === 0) {
|
||||
slice.setStyles({
|
||||
left: 0,
|
||||
right: ''
|
||||
});
|
||||
} else {
|
||||
slice.setStyles({
|
||||
left: '',
|
||||
right: 0
|
||||
});
|
||||
}
|
||||
|
||||
this.animate.delay(100 + timeBuff, this, [slice, {opacity: 1, width: this.containerSize.x}]);
|
||||
|
||||
timeBuff += 50;
|
||||
}, this);
|
||||
} else if (['wipeDown', 'wipeUp'].contains(effect)) {
|
||||
styles = {
|
||||
height: 0,
|
||||
opacity: 1,
|
||||
width: this.containerSize.x
|
||||
};
|
||||
|
||||
if (effect === 'wipeUp')
|
||||
{
|
||||
Object.append(styles, {
|
||||
backgroundPosition: 'bottom left',
|
||||
bottom: 0,
|
||||
top: ''
|
||||
});
|
||||
}
|
||||
|
||||
slice = slices[0];
|
||||
|
||||
slice.setStyles(styles);
|
||||
this.animate(slice, {height: this.containerSize.y}, true);
|
||||
} else if (['foldDown', 'foldLeft', 'foldRight', 'foldUp'].contains(effect)) {
|
||||
|
||||
if (effect === 'foldUp' || effect === 'foldLeft') {
|
||||
slices.reverse();
|
||||
}
|
||||
|
||||
slices.each(function (slice) {
|
||||
var fxStyles = {
|
||||
opacity: 1
|
||||
};
|
||||
|
||||
if (this.orientation === 'horizontal') {
|
||||
fxStyles.height = slice.getHeight();
|
||||
|
||||
slice.setStyles({
|
||||
height: 0,
|
||||
width: this.containerSize.x
|
||||
});
|
||||
} else {
|
||||
fxStyles.width= slice.getWidth();
|
||||
|
||||
slice.setStyles({
|
||||
height: this.containerSize.y,
|
||||
width: 0
|
||||
});
|
||||
}
|
||||
|
||||
this.animate.delay(100 + timeBuff, this, [slice, fxStyles]);
|
||||
timeBuff += 50;
|
||||
}, this);
|
||||
}
|
||||
else // if (effect == 'fade')
|
||||
{
|
||||
slice = slices[0];
|
||||
|
||||
slice.setStyles({
|
||||
height: this.containerSize.y,
|
||||
width: this.containerSize.x
|
||||
});
|
||||
|
||||
this.animate(slice, {opacity: 1}, true);
|
||||
}
|
||||
},
|
||||
|
||||
setBackgroundImage: function () {
|
||||
this.holder.setStyle('background-image', 'url("' + this.currentImage.get('src') + '")');
|
||||
},
|
||||
|
||||
setCaptionText: function (text)
|
||||
{
|
||||
this.caption.set('text', text);
|
||||
},
|
||||
|
||||
setLink: function ()
|
||||
{
|
||||
//Set active link
|
||||
var clone,
|
||||
imageParent = this.currentImage.getParent();
|
||||
|
||||
if (imageParent.get('tag') === 'a') {
|
||||
clone = imageParent.clone(false).cloneEvents(imageParent);
|
||||
clone.replaces(this.linkHolder);
|
||||
this.linkHolder = clone;
|
||||
this.linkHolder.addClass('nivoo-link').setStyle('display', 'block');
|
||||
} else {
|
||||
this.linkHolder.setStyle('display', 'none');
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Events
|
||||
*/
|
||||
|
||||
finish: function () {
|
||||
this.fireEvent('finish');
|
||||
},
|
||||
|
||||
lastSlide: function () {
|
||||
this.fireEvent('lastSlide');
|
||||
},
|
||||
|
||||
start: function () {
|
||||
this.fireEvent('start');
|
||||
}
|
||||
|
||||
});
|
||||
@@ -0,0 +1,624 @@
|
||||
/*
|
||||
---
|
||||
|
||||
script: NivooSlider.js
|
||||
|
||||
description: A nice image slider for MooTools.
|
||||
|
||||
license: MIT-style license
|
||||
|
||||
authors:
|
||||
- Johannes Fischer
|
||||
|
||||
requires:
|
||||
- core/1.2.4: '*'
|
||||
|
||||
provides:
|
||||
- NivooSlider
|
||||
|
||||
...
|
||||
*/
|
||||
|
||||
var NivooSlider = new Class({
|
||||
|
||||
Implements: [Events,Options],
|
||||
|
||||
caption: null,
|
||||
children: null,
|
||||
containerSize: 0,
|
||||
count: 0,
|
||||
currentSlide: 0,
|
||||
currentImage: '',
|
||||
effects: {
|
||||
horizontal: ['fade', 'fold', 'sliceLeftUp', 'sliceLeftDown' , 'sliceLeftRightDown', 'sliceLeftRightUp', 'sliceRightDown', 'sliceRightUp'],
|
||||
vertical: ['fade','fold','sliceDownLeft','sliceDownRight','sliceUpDownLeft','sliceUpDownRight','sliceUpLeft','sliceUpRight']
|
||||
},
|
||||
hover: false,
|
||||
interval: null,
|
||||
paused: false,
|
||||
running: false,
|
||||
totalSlides: 0,
|
||||
|
||||
options: {
|
||||
animSpeed: 500,
|
||||
autoPlay: true,
|
||||
directionNav: true,
|
||||
directionNavHide: false,
|
||||
effect: 'sliceDown',
|
||||
interval: 3000,
|
||||
orientation: 'vertical',
|
||||
pauseOnHover: true,
|
||||
slices: 15,
|
||||
|
||||
// not implemented yet
|
||||
preLoadImages: false
|
||||
|
||||
//onStart: $empty(),
|
||||
//onFinish: $empty()
|
||||
},
|
||||
|
||||
initialize: function(container, options)
|
||||
{
|
||||
this.container = $(container);
|
||||
this.setOptions(options);
|
||||
|
||||
this.initSlider();
|
||||
this.createSlices();
|
||||
if(this.options.autoPlay)
|
||||
{
|
||||
this.play();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Getter
|
||||
*/
|
||||
|
||||
getImages: function()
|
||||
{
|
||||
return this.container.getElements('img');
|
||||
},
|
||||
|
||||
getSlices: function()
|
||||
{
|
||||
return this.container.getElements('.nivoo-slice');
|
||||
},
|
||||
|
||||
/**
|
||||
* Setter
|
||||
*/
|
||||
|
||||
setBackgroundImage: function()
|
||||
{
|
||||
this.container.setStyle('background-image','url('+this.currentImage.get('src') +')');
|
||||
},
|
||||
|
||||
setCaptionText: function(text)
|
||||
{
|
||||
this.caption.set('text', text);
|
||||
},
|
||||
|
||||
/**
|
||||
* Create
|
||||
*/
|
||||
|
||||
initSlider: function()
|
||||
{
|
||||
this.container.addClass('nivooSlider');
|
||||
|
||||
this.containerSize = this.container.getSize();
|
||||
|
||||
// Find our slider children
|
||||
this.children = this.getImages();
|
||||
|
||||
this.totalSlides = this.children.length;
|
||||
|
||||
this.children.setStyle('display','none');
|
||||
|
||||
this.currentImage = this.children[0];
|
||||
|
||||
// init LinkHolder
|
||||
this.createLinkHolder();
|
||||
|
||||
// Set first background
|
||||
this.container.setStyle('background-image', 'url('+this.currentImage.get('src')+')');
|
||||
|
||||
this.createCaption();
|
||||
|
||||
|
||||
//Set active link
|
||||
var imageParent = this.currentImage.getParent();
|
||||
|
||||
if(imageParent.get('tag') == 'a')
|
||||
{
|
||||
this.linkHolder.setStyle('display', 'block').set('href', imageParent.get('href'));
|
||||
}
|
||||
else
|
||||
{
|
||||
this.linkHolder.setStyle('display', 'none');
|
||||
}
|
||||
|
||||
this.showCaption();
|
||||
|
||||
// attach pauseOnHover
|
||||
if(this.options.pauseOnHover && this.options.autoPlay)
|
||||
{
|
||||
this.container.addEvents({
|
||||
'mouseenter': this.pause.bindWithEvent(this),
|
||||
'mouseleave': this.play.bindWithEvent(this)
|
||||
});
|
||||
}
|
||||
|
||||
// create directional navigation
|
||||
if(this.options.directionNav)
|
||||
{
|
||||
this.createDirectionNav();
|
||||
}
|
||||
},
|
||||
|
||||
createCaption: function()
|
||||
{
|
||||
this.caption = new Element('p', {
|
||||
'class': 'nivoo-caption',
|
||||
styles: {
|
||||
opacity: 0
|
||||
}
|
||||
}).inject(this.container);
|
||||
|
||||
this.caption.store('fxInstance', new Fx.Morph(this.caption, {
|
||||
duration: 200,
|
||||
wait: false
|
||||
}));
|
||||
this.caption.store('height', this.caption.getHeight());
|
||||
},
|
||||
|
||||
createDirectionNav: function()
|
||||
{
|
||||
var containerSize = this.container.getSize();
|
||||
|
||||
var directionNavStyles = {
|
||||
height: containerSize.y,
|
||||
width: (containerSize.x/5).round()
|
||||
};
|
||||
|
||||
// create container
|
||||
|
||||
var leftContainer = new Element('div', {
|
||||
'class': 'direction-nav-left',
|
||||
styles: directionNavStyles
|
||||
}).inject(this.container);
|
||||
|
||||
var rightContainer = new Element('div', {
|
||||
'class': 'direction-nav-right',
|
||||
styles: directionNavStyles
|
||||
}).inject(this.container);
|
||||
|
||||
// create controls
|
||||
|
||||
this.leftNav = new Element('a', {
|
||||
events: {
|
||||
'click': function(e){
|
||||
e.stop();
|
||||
this.previous();
|
||||
}.bind(this)
|
||||
},
|
||||
href: '#',
|
||||
styles: {
|
||||
height: directionNavStyles.height
|
||||
}
|
||||
}).inject(leftContainer);
|
||||
|
||||
this.rightNav = new Element('a', {
|
||||
events: {
|
||||
'click': function(e){
|
||||
e.stop();
|
||||
this.next();
|
||||
}.bind(this)
|
||||
},
|
||||
href: '#',
|
||||
styles: {
|
||||
height: directionNavStyles.height
|
||||
}
|
||||
}).inject(rightContainer);
|
||||
|
||||
if(this.options.directionNavHide)
|
||||
{
|
||||
$$(this.leftNav, this.rightNav).setStyle('opacity', 0);
|
||||
this.container.addEvents({
|
||||
'mouseout': function(){
|
||||
$$(this.leftNav, this.rightNav).fade(0);
|
||||
}.bind(this),
|
||||
'mouseover': function(){
|
||||
$$(this.leftNav, this.rightNav).fade(1);
|
||||
}.bind(this)
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
createLinkHolder: function()
|
||||
{
|
||||
this.linkHolder = new Element('a', {
|
||||
'class': 'nivoo-link',
|
||||
href: '#'
|
||||
}).inject(this.container);
|
||||
},
|
||||
|
||||
createSlices: function()
|
||||
{
|
||||
var sliceSize = {
|
||||
x: (this.container.getWidth()/this.options.slices).round(),
|
||||
y: (this.container.getHeight()/this.options.slices).round()
|
||||
};
|
||||
|
||||
this.options.slices.each(function(i){
|
||||
|
||||
var slice = new Element('div', {
|
||||
'class': 'nivoo-slice'
|
||||
}).inject(this.container);
|
||||
|
||||
var position = {
|
||||
left: this.options.orientation == 'vertical' ? sliceSize.x*i : 0,
|
||||
top: this.options.orientation == 'horizontal' ? sliceSize.y*i : 0
|
||||
};
|
||||
|
||||
// set size & position
|
||||
if(this.options.orientation == 'horizontal')
|
||||
{
|
||||
slice.setStyles({
|
||||
height: i == this.options.slices-1 ? this.container.getHeight()-(sliceSize.y*i) : sliceSize.y,
|
||||
top: position.top,
|
||||
width: '100%'
|
||||
});
|
||||
}
|
||||
// if vertical
|
||||
else
|
||||
{
|
||||
slice.setStyles({
|
||||
left: position.left,
|
||||
width: i == this.options.slices-1 ? this.container.getWidth()-(sliceSize.x*i) : sliceSize.x
|
||||
});
|
||||
}
|
||||
slice.store('fxInstance', new Fx.Morph(slice, {
|
||||
duration: this.options.animSpeed
|
||||
})).store('position', position);
|
||||
}, this);
|
||||
},
|
||||
|
||||
/**
|
||||
* Caption
|
||||
*/
|
||||
|
||||
hideCaption:function()
|
||||
{
|
||||
var fx = this.caption.retrieve('fxInstance');
|
||||
|
||||
fx.start({
|
||||
bottom: this.caption.retrieve('height') * -1,
|
||||
opacity: 0
|
||||
});
|
||||
},
|
||||
|
||||
showCaption: function()
|
||||
{
|
||||
var title = this.currentImage.get('title');
|
||||
|
||||
if(!title){
|
||||
return;
|
||||
}
|
||||
|
||||
this.setCaptionText(title);
|
||||
|
||||
var fx = this.caption.retrieve('fxInstance');
|
||||
fx.start({
|
||||
bottom: 0,
|
||||
opacity: 1
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Slide / Animations
|
||||
*/
|
||||
|
||||
next: function()
|
||||
{
|
||||
if(this.options.autoPlay)
|
||||
{
|
||||
this.pause();
|
||||
if(!this.options.pauseOnHover)
|
||||
{
|
||||
this.play();
|
||||
}
|
||||
}
|
||||
this.slide('+');
|
||||
},
|
||||
|
||||
pause: function()
|
||||
{
|
||||
$clear(this.interval);
|
||||
},
|
||||
|
||||
play: function()
|
||||
{
|
||||
this.interval = this.slide.periodical(this.options.interval, this);
|
||||
},
|
||||
|
||||
previous: function()
|
||||
{
|
||||
if(this.options.autoPlay)
|
||||
{
|
||||
this.pause();
|
||||
if(!this.options.pauseOnHover)
|
||||
{
|
||||
this.play();
|
||||
}
|
||||
}
|
||||
this.slide('-');
|
||||
},
|
||||
|
||||
slide: function(direction)
|
||||
{
|
||||
if(this.running)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Set current background before change
|
||||
this.setBackgroundImage();
|
||||
|
||||
if($defined(direction))
|
||||
{
|
||||
if(direction == '+')
|
||||
{
|
||||
this.currentSlide++;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.currentSlide--;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this.currentSlide++;
|
||||
}
|
||||
if(this.currentSlide == this.totalSlides) this.currentSlide = 0;
|
||||
if(this.currentSlide < 0) this.currentSlide = (this.totalSlides - 1);
|
||||
|
||||
// Set currentImage
|
||||
this.currentImage = this.children[this.currentSlide];
|
||||
|
||||
//Set active link
|
||||
var imageParent = this.currentImage.getParent();
|
||||
|
||||
if(imageParent.get('tag') == 'a')
|
||||
{
|
||||
this.linkHolder.setStyle('display', 'block').set('href', imageParent.get('href'));
|
||||
}
|
||||
else
|
||||
{
|
||||
this.linkHolder.setStyle('display', 'none');
|
||||
}
|
||||
|
||||
// Process caption
|
||||
this.hideCaption();
|
||||
this.showCaption();
|
||||
|
||||
var slices = this.getSlices();
|
||||
var timeBuff = 0;
|
||||
|
||||
//Set new slice backgrounds
|
||||
var orientation = this.options.orientation;
|
||||
|
||||
slices.each(function(slice, i){
|
||||
var position = slice.retrieve('position');
|
||||
|
||||
slice.setStyles({
|
||||
background: 'url('+this.currentImage.get('src')+') no-repeat -'+ position.left +'px '+ position.top*-1 +'px',
|
||||
opacity: 0
|
||||
});
|
||||
|
||||
var property = orientation == 'horizontal' ? 'width' : 'height';
|
||||
|
||||
slice.setStyle(property, 0);
|
||||
|
||||
}, this);
|
||||
|
||||
// fire onStart function
|
||||
this.start();
|
||||
|
||||
// Run effects
|
||||
this.running = true;
|
||||
|
||||
var effect = this.options.effect;
|
||||
|
||||
if(effect == 'random')
|
||||
{
|
||||
effect = this.effects[orientation].getRandom();
|
||||
}
|
||||
|
||||
// vertical effects
|
||||
if(['sliceDownRight', 'sliceDownLeft'].contains(effect))
|
||||
{
|
||||
if(effect == 'sliceDownLeft')
|
||||
{
|
||||
slices = slices.reverse();
|
||||
}
|
||||
|
||||
slices.each(function(slice, i){
|
||||
slice.setStyle('top', 0);
|
||||
|
||||
this.animate.delay(100 + timeBuff, this, [slice, 'height', this.containerSize.y]);
|
||||
|
||||
timeBuff+= 50;
|
||||
}, this);
|
||||
}
|
||||
else if(['sliceUpRight', 'sliceUpLeft'].contains(effect))
|
||||
{
|
||||
if(effect == 'sliceUpLeft')
|
||||
{
|
||||
slices = slices.reverse();
|
||||
}
|
||||
|
||||
slices.each(function(slice, i){
|
||||
var fx = slice.retrieve('fxInstance');
|
||||
|
||||
slice.setStyle('bottom', 0);
|
||||
|
||||
this.animate.delay(100 + timeBuff, this, [slice, 'height', this.containerSize.y]);
|
||||
|
||||
timeBuff+= 50;
|
||||
}, this);
|
||||
}
|
||||
else if(['sliceUpDownRight', 'sliceUpDownLeft'].contains(effect))
|
||||
{
|
||||
if(effect == 'sliceUpDownLeft')
|
||||
{
|
||||
slices = slices.reverse();
|
||||
}
|
||||
|
||||
slices.each(function(slice, i){
|
||||
if(i%2 == 0)
|
||||
{
|
||||
slice.setStyle('top', 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
slice.setStyle('bottom', 0);
|
||||
}
|
||||
|
||||
this.animate.delay(100 + timeBuff, this, [slice, 'height', this.containerSize.y]);
|
||||
|
||||
timeBuff+= 50;
|
||||
}, this);
|
||||
}
|
||||
|
||||
// horizontal effects
|
||||
else if(['sliceLeftUp', 'sliceLeftDown' , 'sliceRightDown', 'sliceRightUp'].contains(effect))
|
||||
{
|
||||
if(effect == 'sliceLeftUp' || effect == 'sliceRightUp')
|
||||
{
|
||||
slices = slices.reverse();
|
||||
}
|
||||
|
||||
if(effect == 'sliceRightDown' || effect == 'sliceRightUp')
|
||||
{
|
||||
slices.setStyle('right', 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
slices.setStyle('left', 0);
|
||||
}
|
||||
|
||||
slices.each(function(slice, i){
|
||||
this.animate.delay(100 + timeBuff, this, [slice, 'width', this.containerSize.x]);
|
||||
|
||||
timeBuff+= 50;
|
||||
}, this);
|
||||
}
|
||||
else if(['sliceLeftRightDown', 'sliceLeftRightUp'].contains(effect))
|
||||
{
|
||||
if(effect == 'sliceLeftRightUp')
|
||||
{
|
||||
slices = slices.reverse();
|
||||
}
|
||||
|
||||
slices.each(function(slice, i){
|
||||
if(i%2 == 0)
|
||||
{
|
||||
slice.setStyle('left', 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
slice.setStyle('right', 0);
|
||||
}
|
||||
|
||||
this.animate.delay(100 + timeBuff, this, [slice, 'width', this.containerSize.x]);
|
||||
|
||||
timeBuff+= 50;
|
||||
}, this);
|
||||
}
|
||||
|
||||
// horizontal or vertical
|
||||
else if(effect == 'fold')
|
||||
{
|
||||
slices.each(function(slice, i){
|
||||
if(orientation == 'horizontal')
|
||||
{
|
||||
var property = 'height';
|
||||
var to = slice.getHeight();
|
||||
|
||||
slice.setStyles({
|
||||
height: 0,
|
||||
width: this.containerSize.x
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
var property = 'width';
|
||||
var to = slice.getWidth();
|
||||
|
||||
slice.setStyles({
|
||||
height: this.containerSize.y,
|
||||
top: 0,
|
||||
width: 0
|
||||
});
|
||||
}
|
||||
|
||||
this.animate.delay(100 + timeBuff, this, [slice, property, to]);
|
||||
timeBuff+= 50;
|
||||
}, this);
|
||||
}
|
||||
else // if(effect == 'fade')
|
||||
{
|
||||
slices.each(function(slice, i){
|
||||
if(orientation == 'horizontal')
|
||||
{
|
||||
slice.setStyle('width', this.containerSize.x);
|
||||
}
|
||||
else
|
||||
{
|
||||
slice.setStyle('height', this.containerSize.y);
|
||||
}
|
||||
this.animate.delay(100, this, [slice]);
|
||||
}, this);
|
||||
}
|
||||
},
|
||||
|
||||
animate: function(slice, property, to)
|
||||
{
|
||||
this.count++;
|
||||
|
||||
var fx = slice.retrieve('fxInstance');
|
||||
|
||||
var styles = {
|
||||
opacity: 1
|
||||
};
|
||||
styles[property] = to;
|
||||
|
||||
fx.start(styles).chain(function(){
|
||||
if(this.count == this.options.slices)
|
||||
{
|
||||
this.running = false;
|
||||
|
||||
// fire onFinish function
|
||||
this.finish();
|
||||
|
||||
this.count = 0;
|
||||
}
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
/**
|
||||
* Events
|
||||
*/
|
||||
|
||||
finish: function()
|
||||
{
|
||||
this.fireEvent('finish');
|
||||
},
|
||||
|
||||
start: function()
|
||||
{
|
||||
this.fireEvent('start');
|
||||
}
|
||||
|
||||
});
|
||||
@@ -0,0 +1,194 @@
|
||||
// ===================================================================
|
||||
// Author: Matt Kruse <matt@mattkruse.com>
|
||||
// WWW: http://www.mattkruse.com/
|
||||
//
|
||||
// NOTICE: You may use this code for any purpose, commercial or
|
||||
// private, without any further permission from the author. You may
|
||||
// remove this notice from your final code if you wish, however it is
|
||||
// appreciated by the author if at least my web site address is kept.
|
||||
//
|
||||
// You may *NOT* re-distribute this code in any way except through its
|
||||
// use. That means, you can include it in your product, or your web
|
||||
// site, or any other form where the code is actually being used. You
|
||||
// may not put the plain javascript up on your site for download or
|
||||
// include it in your javascript libraries for download.
|
||||
// If you wish to share this code with others, please just point them
|
||||
// to the URL instead.
|
||||
// Please DO NOT link directly to my .js files from your site. Copy
|
||||
// the files to your server and use them there. Thank you.
|
||||
// ===================================================================
|
||||
|
||||
/*
|
||||
OptionTransfer.js
|
||||
Last Modified: 7/12/2004
|
||||
|
||||
DESCRIPTION: This widget is used to easily and quickly create an interface
|
||||
where the user can transfer choices from one select box to another. For
|
||||
example, when selecting which columns to show or hide in search results.
|
||||
This object adds value by automatically storing the values that were added
|
||||
or removed from each list, as well as the state of the final list.
|
||||
|
||||
COMPATABILITY: Should work on all Javascript-compliant browsers.
|
||||
|
||||
USAGE:
|
||||
// Create a new OptionTransfer object. Pass it the field names of the left
|
||||
// select box and the right select box.
|
||||
var ot = new OptionTransfer("from","to");
|
||||
|
||||
// Optionally tell the lists whether or not to auto-sort when options are
|
||||
// moved. By default, the lists will be sorted.
|
||||
ot.setAutoSort(true);
|
||||
|
||||
// Optionally set the delimiter to be used to separate values that are
|
||||
// stored in hidden fields for the added and removed options, as well as
|
||||
// final state of the lists. Defaults to a comma.
|
||||
ot.setDelimiter("|");
|
||||
|
||||
// You can set a regular expression for option texts which are _not_ allowed to
|
||||
// be transferred in either direction
|
||||
ot.setStaticOptionRegex("static");
|
||||
|
||||
// These functions assign the form fields which will store the state of
|
||||
// the lists. Each one is optional, so you can pick to only store the
|
||||
// new options which were transferred to the right list, for example.
|
||||
// Each function takes the name of a HIDDEN or TEXT input field.
|
||||
|
||||
// Store list of options removed from left list into an input field
|
||||
ot.saveRemovedLeftOptions("removedLeft");
|
||||
// Store list of options removed from right list into an input field
|
||||
ot.saveRemovedRightOptions("removedRight");
|
||||
// Store list of options added to left list into an input field
|
||||
ot.saveAddedLeftOptions("addedLeft");
|
||||
// Store list of options radded to right list into an input field
|
||||
ot.saveAddedRightOptions("addedRight");
|
||||
// Store all options existing in the left list into an input field
|
||||
ot.saveNewLeftOptions("newLeft");
|
||||
// Store all options existing in the right list into an input field
|
||||
ot.saveNewRightOptions("newRight");
|
||||
|
||||
// IMPORTANT: This step is required for the OptionTransfer object to work
|
||||
// correctly.
|
||||
// Add a call to the BODY onLoad="" tag of the page, and pass a reference to
|
||||
// the form which contains the select boxes and input fields.
|
||||
BODY onLoad="ot.init(document.forms[0])"
|
||||
|
||||
// ADDING ACTIONS INTO YOUR PAGE
|
||||
// Finally, add calls to the object to move options back and forth, either
|
||||
// from links in your page or from double-clicking the options themselves.
|
||||
// See example page, and use the following methods:
|
||||
ot.transferRight();
|
||||
ot.transferAllRight();
|
||||
ot.transferLeft();
|
||||
ot.transferAllLeft();
|
||||
|
||||
|
||||
NOTES:
|
||||
1) Requires the functions in selectbox.js
|
||||
|
||||
*/
|
||||
function OT_transferLeft() { moveSelectedOptions(this.right,this.left,this.autoSort,this.staticOptionRegex); this.update(); }
|
||||
function OT_transferRight() { moveSelectedOptions(this.left,this.right,this.autoSort,this.staticOptionRegex); this.update(); }
|
||||
function OT_transferAllLeft() { moveAllOptions(this.right,this.left,this.autoSort,this.staticOptionRegex); this.update(); }
|
||||
function OT_transferAllRight() { moveAllOptions(this.left,this.right,this.autoSort,this.staticOptionRegex); this.update(); }
|
||||
function OT_saveRemovedLeftOptions(f) { this.removedLeftField = f; }
|
||||
function OT_saveRemovedRightOptions(f) { this.removedRightField = f; }
|
||||
function OT_saveAddedLeftOptions(f) { this.addedLeftField = f; }
|
||||
function OT_saveAddedRightOptions(f) { this.addedRightField = f; }
|
||||
function OT_saveNewLeftOptions(f) { this.newLeftField = f; }
|
||||
function OT_saveNewRightOptions(f) { this.newRightField = f; }
|
||||
function OT_update() {
|
||||
var removedLeft = new Object();
|
||||
var removedRight = new Object();
|
||||
var addedLeft = new Object();
|
||||
var addedRight = new Object();
|
||||
var newLeft = new Object();
|
||||
var newRight = new Object();
|
||||
for (var i=0;i<this.left.options.length;i++) {
|
||||
var o=this.left.options[i];
|
||||
newLeft[o.value]=1;
|
||||
if (typeof(this.originalLeftValues[o.value])=="undefined") {
|
||||
addedLeft[o.value]=1;
|
||||
removedRight[o.value]=1;
|
||||
}
|
||||
}
|
||||
for (var i=0;i<this.right.options.length;i++) {
|
||||
var o=this.right.options[i];
|
||||
newRight[o.value]=1;
|
||||
if (typeof(this.originalRightValues[o.value])=="undefined") {
|
||||
addedRight[o.value]=1;
|
||||
removedLeft[o.value]=1;
|
||||
}
|
||||
}
|
||||
if (this.removedLeftField!=null) { this.removedLeftField.value = OT_join(removedLeft,this.delimiter); }
|
||||
if (this.removedRightField!=null) { this.removedRightField.value = OT_join(removedRight,this.delimiter); }
|
||||
if (this.addedLeftField!=null) { this.addedLeftField.value = OT_join(addedLeft,this.delimiter); }
|
||||
if (this.addedRightField!=null) { this.addedRightField.value = OT_join(addedRight,this.delimiter); }
|
||||
if (this.newLeftField!=null) { this.newLeftField.value = OT_join(newLeft,this.delimiter); }
|
||||
if (this.newRightField!=null) { this.newRightField.value = OT_join(newRight,this.delimiter); }
|
||||
}
|
||||
function OT_join(o,delimiter) {
|
||||
var val; var str="";
|
||||
for(val in o){
|
||||
if (str.length>0) { str=str+delimiter; }
|
||||
str=str+val;
|
||||
}
|
||||
return str;
|
||||
}
|
||||
function OT_setDelimiter(val) { this.delimiter=val; }
|
||||
function OT_setAutoSort(val) { this.autoSort=val; }
|
||||
function OT_setStaticOptionRegex(val) { this.staticOptionRegex=val; }
|
||||
function OT_init(theform) {
|
||||
this.form = theform;
|
||||
if(!theform[this.left]){alert("OptionTransfer init(): Left select list does not exist in form!");return false;}
|
||||
if(!theform[this.right]){alert("OptionTransfer init(): Right select list does not exist in form!");return false;}
|
||||
this.left=theform[this.left];
|
||||
this.right=theform[this.right];
|
||||
for(var i=0;i<this.left.options.length;i++) {
|
||||
this.originalLeftValues[this.left.options[i].value]=1;
|
||||
}
|
||||
for(var i=0;i<this.right.options.length;i++) {
|
||||
this.originalRightValues[this.right.options[i].value]=1;
|
||||
}
|
||||
if(this.removedLeftField!=null) { this.removedLeftField=theform[this.removedLeftField]; }
|
||||
if(this.removedRightField!=null) { this.removedRightField=theform[this.removedRightField]; }
|
||||
if(this.addedLeftField!=null) { this.addedLeftField=theform[this.addedLeftField]; }
|
||||
if(this.addedRightField!=null) { this.addedRightField=theform[this.addedRightField]; }
|
||||
if(this.newLeftField!=null) { this.newLeftField=theform[this.newLeftField]; }
|
||||
if(this.newRightField!=null) { this.newRightField=theform[this.newRightField]; }
|
||||
this.update();
|
||||
}
|
||||
// -------------------------------------------------------------------
|
||||
// OptionTransfer()
|
||||
// This is the object interface.
|
||||
// -------------------------------------------------------------------
|
||||
function OptionTransfer(l,r) {
|
||||
this.form = null;
|
||||
this.left=l;
|
||||
this.right=r;
|
||||
this.autoSort=true;
|
||||
this.delimiter=",";
|
||||
this.staticOptionRegex = "";
|
||||
this.originalLeftValues = new Object();
|
||||
this.originalRightValues = new Object();
|
||||
this.removedLeftField = null;
|
||||
this.removedRightField = null;
|
||||
this.addedLeftField = null;
|
||||
this.addedRightField = null;
|
||||
this.newLeftField = null;
|
||||
this.newRightField = null;
|
||||
this.transferLeft=OT_transferLeft;
|
||||
this.transferRight=OT_transferRight;
|
||||
this.transferAllLeft=OT_transferAllLeft;
|
||||
this.transferAllRight=OT_transferAllRight;
|
||||
this.saveRemovedLeftOptions=OT_saveRemovedLeftOptions;
|
||||
this.saveRemovedRightOptions=OT_saveRemovedRightOptions;
|
||||
this.saveAddedLeftOptions=OT_saveAddedLeftOptions;
|
||||
this.saveAddedRightOptions=OT_saveAddedRightOptions;
|
||||
this.saveNewLeftOptions=OT_saveNewLeftOptions;
|
||||
this.saveNewRightOptions=OT_saveNewRightOptions;
|
||||
this.setDelimiter=OT_setDelimiter;
|
||||
this.setAutoSort=OT_setAutoSort;
|
||||
this.setStaticOptionRegex=OT_setStaticOptionRegex;
|
||||
this.init=OT_init;
|
||||
this.update=OT_update;
|
||||
}
|
||||
@@ -0,0 +1,337 @@
|
||||
// ===================================================================
|
||||
// Author: Matt Kruse <matt@mattkruse.com>
|
||||
// WWW: http://www.mattkruse.com/
|
||||
//
|
||||
// NOTICE: You may use this code for any purpose, commercial or
|
||||
// private, without any further permission from the author. You may
|
||||
// remove this notice from your final code if you wish, however it is
|
||||
// appreciated by the author if at least my web site address is kept.
|
||||
//
|
||||
// You may *NOT* re-distribute this code in any way except through its
|
||||
// use. That means, you can include it in your product, or your web
|
||||
// site, or any other form where the code is actually being used. You
|
||||
// may not put the plain javascript up on your site for download or
|
||||
// include it in your javascript libraries for download.
|
||||
// If you wish to share this code with others, please just point them
|
||||
// to the URL instead.
|
||||
// Please DO NOT link directly to my .js files from your site. Copy
|
||||
// the files to your server and use them there. Thank you.
|
||||
// ===================================================================
|
||||
|
||||
/*
|
||||
PopupWindow.js
|
||||
Author: Matt Kruse
|
||||
Last modified: 02/16/04
|
||||
|
||||
DESCRIPTION: This object allows you to easily and quickly popup a window
|
||||
in a certain place. The window can either be a DIV or a separate browser
|
||||
window.
|
||||
|
||||
COMPATABILITY: Works with Netscape 4.x, 6.x, IE 5.x on Windows. Some small
|
||||
positioning errors - usually with Window positioning - occur on the
|
||||
Macintosh platform. Due to bugs in Netscape 4.x, populating the popup
|
||||
window with <STYLE> tags may cause errors.
|
||||
|
||||
USAGE:
|
||||
// Create an object for a WINDOW popup
|
||||
var win = new PopupWindow();
|
||||
|
||||
// Create an object for a DIV window using the DIV named 'mydiv'
|
||||
var win = new PopupWindow('mydiv');
|
||||
|
||||
// Set the window to automatically hide itself when the user clicks
|
||||
// anywhere else on the page except the popup
|
||||
win.autoHide();
|
||||
|
||||
// Show the window relative to the anchor name passed in
|
||||
win.showPopup(anchorname);
|
||||
|
||||
// Hide the popup
|
||||
win.hidePopup();
|
||||
|
||||
// Set the size of the popup window (only applies to WINDOW popups
|
||||
win.setSize(width,height);
|
||||
|
||||
// Populate the contents of the popup window that will be shown. If you
|
||||
// change the contents while it is displayed, you will need to refresh()
|
||||
win.populate(string);
|
||||
|
||||
// set the URL of the window, rather than populating its contents
|
||||
// manually
|
||||
win.setUrl("http://www.site.com/");
|
||||
|
||||
// Refresh the contents of the popup
|
||||
win.refresh();
|
||||
|
||||
// Specify how many pixels to the right of the anchor the popup will appear
|
||||
win.offsetX = 50;
|
||||
|
||||
// Specify how many pixels below the anchor the popup will appear
|
||||
win.offsetY = 100;
|
||||
|
||||
NOTES:
|
||||
1) Requires the functions in AnchorPosition.js
|
||||
|
||||
2) Your anchor tag MUST contain both NAME and ID attributes which are the
|
||||
same. For example:
|
||||
<A NAME="test" ID="test"> </A>
|
||||
|
||||
3) There must be at least a space between <A> </A> for IE5.5 to see the
|
||||
anchor tag correctly. Do not do <A></A> with no space.
|
||||
|
||||
4) When a PopupWindow object is created, a handler for 'onmouseup' is
|
||||
attached to any event handler you may have already defined. Do NOT define
|
||||
an event handler for 'onmouseup' after you define a PopupWindow object or
|
||||
the autoHide() will not work correctly.
|
||||
*/
|
||||
|
||||
// Set the position of the popup window based on the anchor
|
||||
function PopupWindow_getXYPosition(anchorname) {
|
||||
var coordinates;
|
||||
if (this.type == "WINDOW") {
|
||||
coordinates = getAnchorWindowPosition(anchorname);
|
||||
}
|
||||
else {
|
||||
coordinates = getAnchorPosition(anchorname);
|
||||
}
|
||||
this.x = coordinates.x;
|
||||
this.y = coordinates.y;
|
||||
}
|
||||
// Set width/height of DIV/popup window
|
||||
function PopupWindow_setSize(width,height) {
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
}
|
||||
// Fill the window with contents
|
||||
function PopupWindow_populate(contents) {
|
||||
this.contents = contents;
|
||||
this.populated = false;
|
||||
}
|
||||
// Set the URL to go to
|
||||
function PopupWindow_setUrl(url) {
|
||||
this.url = url;
|
||||
}
|
||||
// Set the window popup properties
|
||||
function PopupWindow_setWindowProperties(props) {
|
||||
this.windowProperties = props;
|
||||
}
|
||||
// Refresh the displayed contents of the popup
|
||||
function PopupWindow_refresh() {
|
||||
if (this.divName != null) {
|
||||
// refresh the DIV object
|
||||
if (this.use_gebi) {
|
||||
document.getElementById(this.divName).innerHTML = this.contents;
|
||||
}
|
||||
else if (this.use_css) {
|
||||
document.all[this.divName].innerHTML = this.contents;
|
||||
}
|
||||
else if (this.use_layers) {
|
||||
var d = document.layers[this.divName];
|
||||
d.document.open();
|
||||
d.document.writeln(this.contents);
|
||||
d.document.close();
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (this.popupWindow != null && !this.popupWindow.closed) {
|
||||
if (this.url!="") {
|
||||
this.popupWindow.location.href=this.url;
|
||||
}
|
||||
else {
|
||||
this.popupWindow.document.open();
|
||||
this.popupWindow.document.writeln(this.contents);
|
||||
this.popupWindow.document.close();
|
||||
}
|
||||
this.popupWindow.focus();
|
||||
}
|
||||
}
|
||||
}
|
||||
// Position and show the popup, relative to an anchor object
|
||||
function PopupWindow_showPopup(anchorname) {
|
||||
this.getXYPosition(anchorname);
|
||||
this.x += this.offsetX;
|
||||
this.y += this.offsetY;
|
||||
if (!this.populated && (this.contents != "")) {
|
||||
this.populated = true;
|
||||
this.refresh();
|
||||
}
|
||||
if (this.divName != null) {
|
||||
// Show the DIV object
|
||||
if (this.use_gebi) {
|
||||
document.getElementById(this.divName).style.left = this.x + "px";
|
||||
document.getElementById(this.divName).style.top = this.y + "px";
|
||||
document.getElementById(this.divName).style.visibility = "visible";
|
||||
}
|
||||
else if (this.use_css) {
|
||||
document.all[this.divName].style.left = this.x;
|
||||
document.all[this.divName].style.top = this.y;
|
||||
document.all[this.divName].style.visibility = "visible";
|
||||
}
|
||||
else if (this.use_layers) {
|
||||
document.layers[this.divName].left = this.x;
|
||||
document.layers[this.divName].top = this.y;
|
||||
document.layers[this.divName].visibility = "visible";
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (this.popupWindow == null || this.popupWindow.closed) {
|
||||
// If the popup window will go off-screen, move it so it doesn't
|
||||
if (this.x<0) { this.x=0; }
|
||||
if (this.y<0) { this.y=0; }
|
||||
if (screen && screen.availHeight) {
|
||||
if ((this.y + this.height) > screen.availHeight) {
|
||||
this.y = screen.availHeight - this.height;
|
||||
}
|
||||
}
|
||||
if (screen && screen.availWidth) {
|
||||
if ((this.x + this.width) > screen.availWidth) {
|
||||
this.x = screen.availWidth - this.width;
|
||||
}
|
||||
}
|
||||
var avoidAboutBlank = window.opera || ( document.layers && !navigator.mimeTypes['*'] ) || navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled );
|
||||
this.popupWindow = window.open(avoidAboutBlank?"":"about:blank","window_"+anchorname,this.windowProperties+",width="+this.width+",height="+this.height+",screenX="+this.x+",left="+this.x+",screenY="+this.y+",top="+this.y+"");
|
||||
}
|
||||
this.refresh();
|
||||
}
|
||||
}
|
||||
// Hide the popup
|
||||
function PopupWindow_hidePopup() {
|
||||
if (this.divName != null) {
|
||||
if (this.use_gebi) {
|
||||
document.getElementById(this.divName).style.visibility = "hidden";
|
||||
}
|
||||
else if (this.use_css) {
|
||||
document.all[this.divName].style.visibility = "hidden";
|
||||
}
|
||||
else if (this.use_layers) {
|
||||
document.layers[this.divName].visibility = "hidden";
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (this.popupWindow && !this.popupWindow.closed) {
|
||||
this.popupWindow.close();
|
||||
this.popupWindow = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Pass an event and return whether or not it was the popup DIV that was clicked
|
||||
function PopupWindow_isClicked(e) {
|
||||
if (this.divName != null) {
|
||||
if (this.use_layers) {
|
||||
var clickX = e.pageX;
|
||||
var clickY = e.pageY;
|
||||
var t = document.layers[this.divName];
|
||||
if ((clickX > t.left) && (clickX < t.left+t.clip.width) && (clickY > t.top) && (clickY < t.top+t.clip.height)) {
|
||||
return true;
|
||||
}
|
||||
else { return false; }
|
||||
}
|
||||
else if (document.all) { // Need to hard-code this to trap IE for error-handling
|
||||
var t = window.event.srcElement;
|
||||
while (t.parentElement != null) {
|
||||
if (t.id==this.divName) {
|
||||
return true;
|
||||
}
|
||||
t = t.parentElement;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
else if (this.use_gebi && e) {
|
||||
// var t = e.originalTarget;
|
||||
var t = e.target;
|
||||
while (t.parentNode != null) {
|
||||
if (t.id==this.divName) {
|
||||
return true;
|
||||
}
|
||||
t = t.parentNode;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check an onMouseDown event to see if we should hide
|
||||
function PopupWindow_hideIfNotClicked(e) {
|
||||
if (this.autoHideEnabled && !this.isClicked(e)) {
|
||||
this.hidePopup();
|
||||
}
|
||||
}
|
||||
// Call this to make the DIV disable automatically when mouse is clicked outside it
|
||||
function PopupWindow_autoHide() {
|
||||
this.autoHideEnabled = true;
|
||||
}
|
||||
// This global function checks all PopupWindow objects onmouseup to see if they should be hidden
|
||||
function PopupWindow_hidePopupWindows(e) {
|
||||
for (var i=0; i<popupWindowObjects.length; i++) {
|
||||
if (popupWindowObjects[i] != null) {
|
||||
var p = popupWindowObjects[i];
|
||||
p.hideIfNotClicked(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Run this immediately to attach the event listener
|
||||
function PopupWindow_attachListener() {
|
||||
if (document.layers) {
|
||||
document.captureEvents(Event.MOUSEUP);
|
||||
}
|
||||
window.popupWindowOldEventListener = document.onmouseup;
|
||||
if (window.popupWindowOldEventListener != null) {
|
||||
document.onmouseup = new Function("window.popupWindowOldEventListener(); PopupWindow_hidePopupWindows();");
|
||||
}
|
||||
else {
|
||||
document.onmouseup = PopupWindow_hidePopupWindows;
|
||||
}
|
||||
}
|
||||
// CONSTRUCTOR for the PopupWindow object
|
||||
// Pass it a DIV name to use a DHTML popup, otherwise will default to window popup
|
||||
function PopupWindow() {
|
||||
if (!window.popupWindowIndex) { window.popupWindowIndex = 0; }
|
||||
if (!window.popupWindowObjects) { window.popupWindowObjects = new Array(); }
|
||||
if (!window.listenerAttached) {
|
||||
window.listenerAttached = true;
|
||||
PopupWindow_attachListener();
|
||||
}
|
||||
this.index = popupWindowIndex++;
|
||||
popupWindowObjects[this.index] = this;
|
||||
this.divName = null;
|
||||
this.popupWindow = null;
|
||||
this.width=0;
|
||||
this.height=0;
|
||||
this.populated = false;
|
||||
this.visible = false;
|
||||
this.autoHideEnabled = false;
|
||||
|
||||
this.contents = "";
|
||||
this.url="";
|
||||
this.windowProperties="toolbar=no,location=no,status=no,menubar=no,scrollbars=auto,resizable,alwaysRaised,dependent,titlebar=no";
|
||||
if (arguments.length>0) {
|
||||
this.type="DIV";
|
||||
this.divName = arguments[0];
|
||||
}
|
||||
else {
|
||||
this.type="WINDOW";
|
||||
}
|
||||
this.use_gebi = false;
|
||||
this.use_css = false;
|
||||
this.use_layers = false;
|
||||
if (document.getElementById) { this.use_gebi = true; }
|
||||
else if (document.all) { this.use_css = true; }
|
||||
else if (document.layers) { this.use_layers = true; }
|
||||
else { this.type = "WINDOW"; }
|
||||
this.offsetX = 0;
|
||||
this.offsetY = 0;
|
||||
// Method mappings
|
||||
this.getXYPosition = PopupWindow_getXYPosition;
|
||||
this.populate = PopupWindow_populate;
|
||||
this.setUrl = PopupWindow_setUrl;
|
||||
this.setWindowProperties = PopupWindow_setWindowProperties;
|
||||
this.refresh = PopupWindow_refresh;
|
||||
this.showPopup = PopupWindow_showPopup;
|
||||
this.hidePopup = PopupWindow_hidePopup;
|
||||
this.setSize = PopupWindow_setSize;
|
||||
this.isClicked = PopupWindow_isClicked;
|
||||
this.autoHide = PopupWindow_autoHide;
|
||||
this.hideIfNotClicked = PopupWindow_hideIfNotClicked;
|
||||
}
|
||||
@@ -0,0 +1,205 @@
|
||||
// ===================================================================
|
||||
// Author: Denis Howlett <feedback@isocra.com>
|
||||
// WWW: http://www.isocra.com/
|
||||
//
|
||||
// NOTICE: You may use this code for any purpose, commercial or
|
||||
// private, without any further permission from the author. You may
|
||||
// remove this notice from your final code if you wish, however we
|
||||
// would appreciate it if at least the web site address is kept.
|
||||
//
|
||||
// You may *NOT* re-distribute this code in any way except through its
|
||||
// use. That means, you can include it in your product, or your web
|
||||
// site, or any other form where the code is actually being used. You
|
||||
// may not put the plain javascript up on your site for download or
|
||||
// include it in your javascript libraries for download.
|
||||
// If you wish to share this code with others, please just point them
|
||||
// to the URL instead.
|
||||
//
|
||||
// Please DO NOT link directly to this .js files from your site. Copy
|
||||
// the files to your server and use them there. Thank you.
|
||||
// ===================================================================
|
||||
|
||||
/** Keep hold of the current table being dragged */
|
||||
var currenttable = null;
|
||||
|
||||
/** Capture the onmousemove so that we can see if a row from the current
|
||||
* table if any is being dragged.
|
||||
* @param ev the event (for Firefox and Safari, otherwise we use window.event for IE)
|
||||
*/
|
||||
document.onmousemove = function(ev){
|
||||
if (currenttable && currenttable.dragObject) {
|
||||
ev = ev || window.event;
|
||||
var mousePos = currenttable.mouseCoords(ev);
|
||||
var y = mousePos.y - currenttable.mouseOffset.y;
|
||||
if (y != currenttable.oldY) {
|
||||
// work out if we're going up or down...
|
||||
var movingDown = y > currenttable.oldY;
|
||||
// update the old value
|
||||
currenttable.oldY = y;
|
||||
// update the style to show we're dragging
|
||||
currenttable.dragObject.style.backgroundColor = "#eee";
|
||||
// If we're over a row then move the dragged row to there so that the user sees the
|
||||
// effect dynamically
|
||||
var currentRow = currenttable.findDropTargetRow(y);
|
||||
if (currentRow) {
|
||||
if (movingDown && currenttable.dragObject != currentRow) {
|
||||
currenttable.dragObject.parentNode.insertBefore(currenttable.dragObject, currentRow.nextSibling);
|
||||
} else if (! movingDown && currenttable.dragObject != currentRow) {
|
||||
currenttable.dragObject.parentNode.insertBefore(currenttable.dragObject, currentRow);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Similarly for the mouseup
|
||||
document.onmouseup = function(ev){
|
||||
if (currenttable && currenttable.dragObject) {
|
||||
var droppedRow = currenttable.dragObject;
|
||||
// If we have a dragObject, then we need to release it,
|
||||
// The row will already have been moved to the right place so we just reset stuff
|
||||
droppedRow.style.backgroundColor = 'transparent';
|
||||
currenttable.dragObject = null;
|
||||
// And then call the onDrop method in case anyone wants to do any post processing
|
||||
currenttable.onDrop(currenttable.table, droppedRow);
|
||||
currenttable = null; // let go of the table too
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/** get the source element from an event in a way that works for IE and Firefox and Safari
|
||||
* @param evt the source event for Firefox (but not IE--IE uses window.event) */
|
||||
function getEventSource(evt) {
|
||||
if (window.event) {
|
||||
evt = window.event; // For IE
|
||||
return evt.srcElement;
|
||||
} else {
|
||||
return evt.target; // For Firefox
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Encapsulate table Drag and Drop in a class. We'll have this as a Singleton
|
||||
* so we don't get scoping problems.
|
||||
*/
|
||||
function TableDnD() {
|
||||
/** Keep hold of the current drag object if any */
|
||||
this.dragObject = null;
|
||||
/** The current mouse offset */
|
||||
this.mouseOffset = null;
|
||||
/** The current table */
|
||||
this.table = null;
|
||||
/** Remember the old value of Y so that we don't do too much processing */
|
||||
this.oldY = 0;
|
||||
|
||||
/** Initialise the drag and drop by capturing mouse move events */
|
||||
this.init = function(table) {
|
||||
this.table = table;
|
||||
var rows = table.tBodies[0].rows; //getElementsByTagName("tr")
|
||||
for (var i=0; i<rows.length; i++) {
|
||||
// John Tarr: added to ignore rows that I've added the NoDnD attribute to (Category and Header rows)
|
||||
var nodrag = rows[i].getAttribute("NoDrag")
|
||||
if (nodrag == null || nodrag == "undefined") { //There is no NoDnD attribute on rows I want to drag
|
||||
this.makeDraggable(rows[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** This function is called when you drop a row, so redefine it in your code
|
||||
to do whatever you want, for example use Ajax to update the server */
|
||||
this.onDrop = function(table, droppedRow) {
|
||||
// Do nothing for now
|
||||
}
|
||||
|
||||
/** Get the position of an element by going up the DOM tree and adding up all the offsets */
|
||||
this.getPosition = function(e){
|
||||
var left = 0;
|
||||
var top = 0;
|
||||
/** Safari fix -- thanks to Luis Chato for this! */
|
||||
if (e.offsetHeight == 0) {
|
||||
/** Safari 2 doesn't correctly grab the offsetTop of a table row
|
||||
this is detailed here:
|
||||
http://jacob.peargrove.com/blog/2006/technical/table-row-offsettop-bug-in-safari/
|
||||
the solution is likewise noted there, grab the offset of a table cell in the row - the firstChild.
|
||||
note that firefox will return a text node as a first child, so designing a more thorough
|
||||
solution may need to take that into account, for now this seems to work in firefox, safari, ie */
|
||||
e = e.firstChild; // a table cell
|
||||
}
|
||||
|
||||
while (e.offsetParent){
|
||||
left += e.offsetLeft;
|
||||
top += e.offsetTop;
|
||||
e = e.offsetParent;
|
||||
}
|
||||
|
||||
left += e.offsetLeft;
|
||||
top += e.offsetTop;
|
||||
|
||||
return {x:left, y:top};
|
||||
}
|
||||
|
||||
/** Get the mouse coordinates from the event (allowing for browser differences) */
|
||||
this.mouseCoords = function(ev){
|
||||
if(ev.pageX || ev.pageY){
|
||||
return {x:ev.pageX, y:ev.pageY};
|
||||
}
|
||||
return {
|
||||
x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
|
||||
y:ev.clientY + document.body.scrollTop - document.body.clientTop
|
||||
};
|
||||
}
|
||||
|
||||
/** Given a target element and a mouse event, get the mouse offset from that element.
|
||||
To do this we need the element's position and the mouse position */
|
||||
this.getMouseOffset = function(target, ev){
|
||||
ev = ev || window.event;
|
||||
|
||||
var docPos = this.getPosition(target);
|
||||
var mousePos = this.mouseCoords(ev);
|
||||
return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
|
||||
}
|
||||
|
||||
/** Take an item and add an onmousedown method so that we can make it draggable */
|
||||
this.makeDraggable = function(item) {
|
||||
if(!item) return;
|
||||
var self = this; // Keep the context of the TableDnd inside the function
|
||||
item.onmousedown = function(ev) {
|
||||
// Need to check to see if we are an input or not, if we are an input, then
|
||||
// return true to allow normal processing
|
||||
var target = getEventSource(ev);
|
||||
if (target.tagName == 'INPUT' || target.tagName == 'SELECT') return true;
|
||||
currenttable = self;
|
||||
self.dragObject = this;
|
||||
self.mouseOffset = self.getMouseOffset(this, ev);
|
||||
return false;
|
||||
}
|
||||
item.style.cursor = "move";
|
||||
}
|
||||
|
||||
/** We're only worried about the y position really, because we can only move rows up and down */
|
||||
this.findDropTargetRow = function(y) {
|
||||
var rows = this.table.tBodies[0].rows;
|
||||
for (var i=0; i<rows.length; i++) {
|
||||
var row = rows[i];
|
||||
// John Tarr added to ignore rows that I've added the NoDnD attribute to (Header rows)
|
||||
var nodrop = row.getAttribute("NoDrop");
|
||||
if (nodrop == null || nodrop == "undefined") { //There is no NoDnD attribute on rows I want to drag
|
||||
var rowY = this.getPosition(row).y;
|
||||
var rowHeight = parseInt(row.offsetHeight)/2;
|
||||
if (row.offsetHeight == 0) {
|
||||
rowY = this.getPosition(row.firstChild).y;
|
||||
rowHeight = parseInt(row.firstChild.offsetHeight)/2;
|
||||
}
|
||||
// Because we always have to insert before, we need to offset the height a bit
|
||||
if ((y > rowY - rowHeight) && (y < (rowY + rowHeight))) {
|
||||
// that's the row we're over
|
||||
return row;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
if (!isset($_SESSION)) {
|
||||
$sessionName = 'hotlunch';
|
||||
session_name($sessionName);
|
||||
if (!session_start()) {
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
||||
if (!array_key_exists('csrf_token', $_SESSION)) {
|
||||
$_SESSION['csrf_token'] = str_replace('+','.',base64_encode(openssl_random_pseudo_bytes(32)));
|
||||
}
|
||||
?>
|
||||
$.ajaxSetup({
|
||||
data: window.csrf,
|
||||
cache: false,
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': '<?php echo($_SESSION['csrf_token']); ?>'
|
||||
}
|
||||
});
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
// if ($school_num == 20158 || $school_num == 3) startLog("ajax.csrfToken.php");
|
||||
|
||||
// if (!isset($csrf_token)) writeLog("Token Not Set");
|
||||
if (array_key_exists('HTTP_X_CSRF_TOKEN', $_SERVER)) writeLog("_SERVER['HTTP_X_CSRF_TOKEN']: ".$_SERVER['HTTP_X_CSRF_TOKEN']);
|
||||
if (array_key_exists('csrf_token', $_GET)) writeLog("_GET['csrf_token']: ".$_GET['csrf_token']);
|
||||
if (array_key_exists('csrf_token', $_POST)) writeLog("_POST['csrf_token']: ".$_POST['csrf_token']);
|
||||
|
||||
|
||||
// CSRF token validation
|
||||
if (!isset($csrf_token) && array_key_exists('HTTP_X_CSRF_TOKEN',$_SERVER)) $csrf_token = $_SERVER['HTTP_X_CSRF_TOKEN'];
|
||||
if (!isset($csrf_token) && array_key_exists('csrf_token',$_GET)) $csrf_token = $_GET['csrf_token'];
|
||||
if (!isset($csrf_token) && array_key_exists('csrf_token',$_POST)) $csrf_token = $_POST['csrf_token'];
|
||||
|
||||
// startLog("ajax.csrfToken.php");
|
||||
if (!isset($csrf_token)) {
|
||||
header("Location: /?error_message=" . urlencode(getLanguageText('ERRORMSG-INVALID-ACCESS')));
|
||||
logExit("csrf_token not set");
|
||||
}
|
||||
|
||||
if (!array_key_exists('csrf_token',$_SESSION)) {
|
||||
header("Location: /?error_message=" . urlencode(getLanguageText('ERRORMSG-INVALID-ACCESS')));
|
||||
logExit("CSRF SESSION Error");
|
||||
exit();
|
||||
}
|
||||
|
||||
if (!isset($csrf_token) || !isset($_SESSION['csrf_token']) || $csrf_token !== $_SESSION['csrf_token']) {
|
||||
header("Location: /?error_message=" . urlencode(getLanguageText('ERRORMSG-INVALID-ACCESS')));
|
||||
logExit("CSRF Token Error");
|
||||
exit();
|
||||
}
|
||||
|
||||
writeLog("csrf_token: $csrf_token");
|
||||
|
||||
|
||||
?>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 66 B |
@@ -0,0 +1,43 @@
|
||||
// ===================================================================
|
||||
// Author: Matt Kruse <matt@mattkruse.com>
|
||||
// WWW: http://www.mattkruse.com/
|
||||
//
|
||||
// NOTICE: You may use this code for any purpose, commercial or
|
||||
// private, without any further permission from the author. You may
|
||||
// remove this notice from your final code if you wish, however it is
|
||||
// appreciated by the author if at least my web site address is kept.
|
||||
//
|
||||
// You may *NOT* re-distribute this code in any way except through its
|
||||
// use. That means, you can include it in your product, or your web
|
||||
// site, or any other form where the code is actually being used. You
|
||||
// may not put the plain javascript up on your site for download or
|
||||
// include it in your javascript libraries for download.
|
||||
// If you wish to share this code with others, please just point them
|
||||
// to the URL instead.
|
||||
// Please DO NOT link directly to my .js files from your site. Copy
|
||||
// the files to your server and use them there. Thank you.
|
||||
// ===================================================================
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// TabNext()
|
||||
// Function to auto-tab phone field
|
||||
// Arguments:
|
||||
// obj : The input object (this)
|
||||
// event: Either 'up' or 'down' depending on the keypress event
|
||||
// len : Max length of field - tab when input reaches this length
|
||||
// next_field: input object to get focus after this one
|
||||
// -------------------------------------------------------------------
|
||||
var phone_field_length=0;
|
||||
function TabNext(obj,event,len,next_field) {
|
||||
if (event == "down") {
|
||||
phone_field_length=obj.value.length;
|
||||
}
|
||||
else if (event == "up") {
|
||||
if (obj.value.length != phone_field_length) {
|
||||
phone_field_length=obj.value.length;
|
||||
if (phone_field_length == len) {
|
||||
next_field.focus();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
<?php
|
||||
if(!defined('IN_CB'))die('You are not allowed to access to this page.');
|
||||
|
||||
/**
|
||||
* Holds all type of barcodes
|
||||
* You must call init().
|
||||
* You can use get_im() to add other kind of form not held into these classes.
|
||||
*/
|
||||
class BarCode {
|
||||
protected $maxHeight;
|
||||
protected $color1,$color2;
|
||||
protected $positionX, $positionY, $res;
|
||||
public $lastX, $lastY;
|
||||
private $error;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param int $maxHeight
|
||||
* @param FColor $color1
|
||||
* @param FColor $color2
|
||||
* @param int $res
|
||||
*/
|
||||
protected function __construct($maxHeight,FColor $color1,FColor $color2,$res){
|
||||
$this->maxHeight = $maxHeight;
|
||||
$this->color1 = $color1;
|
||||
$this->color2 = $color2;
|
||||
$this->res = $res;
|
||||
$this->error = 0;
|
||||
$this->positionY = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the index in $keys (useful for checksum)
|
||||
*
|
||||
* @param mixed $var
|
||||
* @return mixed
|
||||
*/
|
||||
protected function findIndex($var){
|
||||
return array_search($var,$this->keys);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the code of the char (useful for drawing bars)
|
||||
*
|
||||
* @param mixed $var
|
||||
* @return string
|
||||
*/
|
||||
protected function findCode($var){
|
||||
return $this->code[$this->findIndex($var)];
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws a Bar of $color depending of the resolution
|
||||
*
|
||||
* @param ressource $img
|
||||
* @param FColor $color
|
||||
*/
|
||||
protected function DrawSingleBar($im,FColor $color){
|
||||
$bar_color = (is_null($color))?NULL:$color->allocate($im);
|
||||
if(!is_null($bar_color))
|
||||
for($i=0;$i<$this->res;$i++)
|
||||
imageline($im,$this->positionX+$i,$this->positionY,$this->positionX+$i,$this->positionY+$this->maxHeight,$bar_color);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes the Error on the picture
|
||||
*
|
||||
* @param ressource $img
|
||||
* @param string $text
|
||||
*/
|
||||
protected function DrawError($im,$text){
|
||||
$text_color = (is_null($this->color1))?NULL:$this->color1->allocate($im);
|
||||
imagestring($im,5,0,$this->error*15,$text,$text_color);
|
||||
$this->error++;
|
||||
$this->lastX = (imagefontwidth(5)*strlen($text)>$this->lastX)?imagefontwidth(5)*strlen($text):$this->lastX;
|
||||
$this->lastY = $this->error*15;
|
||||
}
|
||||
|
||||
/**
|
||||
* Moving the pointer right to write a bar
|
||||
*/
|
||||
protected function nextX(){
|
||||
$this->positionX+=$this->res;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws all chars thanks to $code. if $start==1, the line begins by a bar.
|
||||
* if $start==2, the line begins by a space.
|
||||
*
|
||||
* @param ressource $im
|
||||
* @param string $code
|
||||
* @param int $start
|
||||
*/
|
||||
protected function DrawChar($im,$code,$start=1){
|
||||
$currentColor = ($start==1)?$this->color1:$this->color2;
|
||||
$colornumber = $start;
|
||||
for($i=0;$i<strlen($code);$i++){
|
||||
for($j=0;$j<intval($code[$i])+1;$j++){
|
||||
$this->DrawSingleBar($im,$currentColor);
|
||||
$this->nextX();
|
||||
}
|
||||
if($colornumber==1){
|
||||
$currentColor=$this->color2;
|
||||
$colornumber=2;
|
||||
}
|
||||
else{
|
||||
$currentColor=$this->color1;
|
||||
$colornumber=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the label under the barcode
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
protected function DrawText($im) {
|
||||
if($this->textfont != 0) {
|
||||
$xPosition = ($this->positionX / 2) - (strlen($this->text)/2)*imagefontwidth($this->textfont);
|
||||
$text_color = (is_null($this->color1))?NULL:$this->color1->allocate($im);
|
||||
imagestring($im,$this->textfont,$xPosition,$this->maxHeight,$this->text,$text_color);
|
||||
$this->lastY = $this->maxHeight + imagefontheight($this->textfont);
|
||||
}
|
||||
}
|
||||
};
|
||||
?>
|
||||
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
if(!defined('IN_CB'))die('You are not allowed to access to this page.');
|
||||
|
||||
/**
|
||||
* Holds Color in RGB Format.
|
||||
*/
|
||||
class FColor {
|
||||
protected $r,$g,$b; // int Hexadecimal Value
|
||||
|
||||
/**
|
||||
* Save RGB value into the classes
|
||||
*
|
||||
* @param int $r
|
||||
* @param int $g
|
||||
* @param int $b
|
||||
*/
|
||||
public function __construct($r,$g,$b){
|
||||
$this->r = $r;
|
||||
$this->g = $g;
|
||||
$this->b = $b;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns Red Color
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function r(){
|
||||
return $this->r;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns Green Color
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function g(){
|
||||
return $this->g;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns Blue Color
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function b(){
|
||||
return $this->b;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the int value for PHP color
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function allocate($im) {
|
||||
return imagecolorallocate($im,$this->r,$this->g,$this->b);
|
||||
}
|
||||
};
|
||||
?>
|
||||
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
if(!defined('IN_CB'))die('You are not allowed to access to this page.');
|
||||
|
||||
/**
|
||||
* Holds the drawing $im and can also holds all forms and texts
|
||||
* You must call init().
|
||||
* You can use get_im() to add other kind of form not held into these classes.
|
||||
*/
|
||||
class FDrawing {
|
||||
private $w, $h; // int
|
||||
private $color; // Fcolor
|
||||
private $filename; // char *
|
||||
private $im; // {object}
|
||||
private $barcode = array();// BarCode *
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param int $w
|
||||
* @param int $h
|
||||
* @param string filename
|
||||
* @param FColor $color
|
||||
*/
|
||||
public function __construct($w,$h,$filename,Fcolor $color) {
|
||||
$this->w = $w;
|
||||
$this->h = $h;
|
||||
$this->filename = $filename;
|
||||
$this->color = $color;
|
||||
}
|
||||
|
||||
/**
|
||||
* Destructor
|
||||
*/
|
||||
public function __destruct() {
|
||||
$this->destroy();
|
||||
}
|
||||
|
||||
/**
|
||||
* Init Image and color background
|
||||
*/
|
||||
public function init(){
|
||||
$this->im = imagecreate($this->w, $this->h)
|
||||
or die('Can\'t Initialize the GD Libraty');
|
||||
imagecolorallocate($this->im,$this->color->r(),$this->color->g(),$this->color->b());
|
||||
}
|
||||
|
||||
/**
|
||||
* @return ressource
|
||||
*/
|
||||
public function get_im() {
|
||||
return $this->im;
|
||||
}
|
||||
public function set_im($im) {
|
||||
$this->im = $im;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add barcode into the drawing array (for future drawing)
|
||||
*
|
||||
* @param BarCode $barcode
|
||||
*/
|
||||
public function add_barcode(BarCode $barcode) {
|
||||
$this->barcode[] = $barcode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw first all forms and after all texts on $im
|
||||
*/
|
||||
public function draw_all() {
|
||||
for($i=0;$i<count($this->barcode);$i++)
|
||||
$this->barcode[$i]->draw($this->im);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save $im into the file (many format available)
|
||||
*
|
||||
* @param int $image_style
|
||||
* @param int $quality
|
||||
*/
|
||||
public function finish($image_style=IMG_FORMAT_PNG,$quality=100) {
|
||||
if($image_style==constant('IMG_FORMAT_PNG')){
|
||||
if(empty($this->filename))
|
||||
imagepng($this->im);
|
||||
else
|
||||
imagepng($this->im,$this->filename);
|
||||
}
|
||||
elseif($image_style==constant('IMG_FORMAT_JPEG'))
|
||||
imagejpeg($this->im,$this->filename,$quality);
|
||||
}
|
||||
|
||||
/**
|
||||
* Free the memory of PHP (called also by destructor)
|
||||
*/
|
||||
public function destroy() {
|
||||
imagedestroy($this->im);
|
||||
}
|
||||
};
|
||||
?>
|
||||
@@ -0,0 +1,691 @@
|
||||
<?php
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// table.class.php
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// Class Table - Don't modify this file !
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
// Revision History
|
||||
// $Id: Table.php,v 1.2 2005/01/16 18:26:47 jsgoupil Exp $
|
||||
//--------------------------------------------------------------------
|
||||
// Copyright (C) Jean-Sebastien Goupil
|
||||
// http://other.lookstrike.com/
|
||||
//--------------------------------------------------------------------
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
define( 'TABLE_DEFAULT_ROW_HIDDEN', FALSE );
|
||||
define( 'TABLE_DEFAULT_COL_HIDDEN', FALSE );
|
||||
define( 'TABLE_DEFAULT_CELL_VALUE', ' ' ); // If ' ', a cell will appear, if NULL, no cell will appear
|
||||
define( 'TABLE_DEFAULT_TEMPLATE', 'tpl_LS' );
|
||||
|
||||
include( $class_dir.'/Table_template.php' );
|
||||
class LSTable {
|
||||
// PRIVATE ARGUMENTS
|
||||
private $template; // string
|
||||
private $numRows, $numCols; // int
|
||||
private $title; // string
|
||||
private $text = array(); // string
|
||||
private $cellsAttributes = array(), $rowsAttributes = array(); // string
|
||||
private $hiddenRows = array(), $hiddenCols = array(); // bool
|
||||
private $width; // string
|
||||
|
||||
private $temp_col; // int
|
||||
private $temp_ascending; // bool
|
||||
|
||||
// PUBLIC FUNCTIONS
|
||||
/**
|
||||
* @return
|
||||
* @param int $numRows
|
||||
* @param int $numCols
|
||||
* @param string $width
|
||||
* @param object $parent
|
||||
* @desc Constructor. You can put a $parent object. This will search the first empty place into the parent.
|
||||
**/
|
||||
function __construct ( $numRows, $numCols, $width, &$parent ) {
|
||||
$this->numRows = intval( $numRows );
|
||||
$this->numCols = intval( $numCols );
|
||||
for( $i = 0; $i < $numRows; $i++ )
|
||||
$this->_setVariable( $i );
|
||||
for( $i = 0; $i < $numCols; $i++ )
|
||||
$this->hiddenCols[ $i ] = TABLE_DEFAULT_COL_HIDDEN;
|
||||
$this->title = '';
|
||||
$this->width = strval( $width );
|
||||
|
||||
if( defined( 'TABLE_DEFAULT_TEMPLATE' ) )
|
||||
$this->setTemplate( TABLE_DEFAULT_TEMPLATE );
|
||||
|
||||
// We look for an empty place if $parent isn't null
|
||||
if( is_object( $parent ) ) {
|
||||
$stop = false;
|
||||
for( $i = 0; $i < $parent->numRows; $i++ ) {
|
||||
for( $j = 0; $j < $parent->numCols; $j++ ) {
|
||||
if( $parent->text[ $i ][ $j ] == TABLE_DEFAULT_CELL_VALUE ) {
|
||||
$parent->text[ $i ][ $j ] =& $this;
|
||||
$stop = true;
|
||||
}
|
||||
if( $stop == true )
|
||||
break;
|
||||
}
|
||||
if( $stop == true )
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// No destructor for PHP4
|
||||
//function __destruct() {
|
||||
//
|
||||
//}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $row
|
||||
* @param int $col
|
||||
* @param mixed $string
|
||||
* @desc Writes Text or Object into $row and $col.
|
||||
**/
|
||||
public function setText ( $row, $col, $string ) {
|
||||
if( is_int( $row ) && is_int( $col ) )
|
||||
if( $row < $this->numRows && $col < $this->numCols )
|
||||
$this->text[ $row ][ $col ] = $string;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $row
|
||||
* @param int $col
|
||||
* @param string $attrib
|
||||
* @param mixed $value
|
||||
* @desc Adds a Cell Attribute at $row and $col.
|
||||
**/
|
||||
public function addCellAttribute ( $row, $col, $attrib, $value ) {
|
||||
if( is_int( $row ) && is_int( $col ) && is_string( $attrib ) )
|
||||
if( $row < $this->numRows && $col < $this->numCols )
|
||||
$this->cellsAttributes[ $row ][ $col ][ strtolower( $attrib ) ] = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $row
|
||||
* @param int $col
|
||||
* @param string $attrib
|
||||
* @desc Deletes a Cell Attribute at $row and $col.
|
||||
**/
|
||||
public function delCellAttribute ( $row, $col, $attrib ) {
|
||||
if( is_int( $row ) && is_int( $col ) && is_string( $attrib ) )
|
||||
if( $row < $this->numRows && $col < $this->numCols )
|
||||
unset( $this->cellsAttributes[ $row ][ $col ][ strtolower( $attrib ) ] );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $row
|
||||
* @param string $attrib
|
||||
* @param mixed $value
|
||||
* @desc Adds a Row Attribute at $row. Will be located in TR.
|
||||
**/
|
||||
public function addRowAttribute ( $row, $attrib, $value ) {
|
||||
if( is_int( $row ) && is_string( $attrib ) )
|
||||
if( $row < $this->numRows )
|
||||
$this->rowsAttributes[ $row ][ strtolower( $attrib ) ] = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $row
|
||||
* @param string $attrib
|
||||
* @desc Deletes a Row Attribute at $row.
|
||||
**/
|
||||
public function delRowAttribute ( $row, $attrib ) {
|
||||
if( is_int( $row ) && is_string( $attrib ) )
|
||||
if( $row < $this->numRows )
|
||||
unset( $this->rowsAttributes[ $row ][ strtolower( $attrib ) ] );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $row
|
||||
* @param string $attrib
|
||||
* @param mixed $value
|
||||
* @desc Adds a Cell Attribute in all cells located on $row row.
|
||||
**/
|
||||
public function addAllCellsInRowAttribute ( $row, $attrib, $value ) {
|
||||
if( is_int( $row ) && is_string( $attrib ) )
|
||||
if( $row < $this->numRows )
|
||||
for( $i = 0; $i < $this->numCols; $i++ )
|
||||
$this->cellsAttributes[ $row ][ $i ][ strtolower( $attrib ) ] = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $col
|
||||
* @param string $attrib
|
||||
* @param mixed $value
|
||||
* @desc Adds a Cell Attribute in all cells located on $col column.
|
||||
**/
|
||||
public function addAllCellsInColAttribute ( $col, $attrib, $value ) {
|
||||
if( is_int( $col ) && is_string( $attrib ) )
|
||||
if( $col < $this->numCols )
|
||||
for( $i = 0; $i < $this->numRows; $i++ )
|
||||
$this->cellsAttributes[ $i ][ $col ][ strtolower( $attrib ) ] = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param callback $template
|
||||
* @desc Sets Template (Class)
|
||||
**/
|
||||
public function setTemplate ( $template ) {
|
||||
if( is_string( $template ) )
|
||||
if( class_exists( $template ) )
|
||||
$this->template = strval( $template );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @desc Returns current Template
|
||||
**/
|
||||
public function template () {
|
||||
return $this->template;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
* @param int $row
|
||||
* @param int $col
|
||||
* @desc Returns the text or object contained into $row and $col
|
||||
**/
|
||||
public function text ( $row, $col ) {
|
||||
if( is_int( $row ) && is_int( $col ) )
|
||||
if( $row < $this->numRows && $col < $this->numCols )
|
||||
return $this->text[ $row ][ $col ];
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $row
|
||||
* @param int $col
|
||||
* @desc Clears the cell located into $row and $col. Keeps the Cell.
|
||||
*/
|
||||
public function clearCell ( $row, $col ) {
|
||||
if( is_int( $row ) && is_int( $col ) ) {
|
||||
if( $row < $this->numRows && $col < $this->numCols ) {
|
||||
$this->text[ $row ][ $col ] = TABLE_DEFAULT_CELL_VALUE;
|
||||
unset( $this->cellsAttributes[ $row ][ $col ] );
|
||||
$this->cellsAttributes[ $row ][ $col ] = array();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
* @desc Returns the number of Rows
|
||||
**/
|
||||
public function numRows () {
|
||||
return $this->numRows;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
* @desc Returns the number of Columns
|
||||
**/
|
||||
public function numCols () {
|
||||
return $this->numCols;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $col
|
||||
* @param bool $ascending
|
||||
* @desc Sorts table based on $col.
|
||||
**/
|
||||
public function sortColumn ( $col, $ascending = TRUE ) {
|
||||
if( is_int( $col ) && is_bool( $ascending ) ) {
|
||||
if( $col < $this->numCols ) {
|
||||
$this->temp_col = $col;
|
||||
$this->temp_ascending = $ascending;
|
||||
$this->_sort_merge( $this->text );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $r
|
||||
* @desc Sets the number of rows of the table.
|
||||
**/
|
||||
public function setNumRows ( $r ) {
|
||||
if( is_int( $r ) )
|
||||
if( $r >= 0 )
|
||||
if( $r > $this->numRows )
|
||||
$this->insertRows( $this->numRows, $r - $this->numRows );
|
||||
elseif( $r < $this->numRows )
|
||||
for( $i = $this->numRows; $i > $r; $i-- )
|
||||
$this->removeRow( $i - 1 );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $r
|
||||
* @desc Sets the number of columns of the table.
|
||||
**/
|
||||
public function setNumCols ( $r ) {
|
||||
if( is_int( $r ) )
|
||||
if( $r >= 0 )
|
||||
if( $r > $this->numCols )
|
||||
$this->insertColumns( $this->numCols, $r - $this->numCols );
|
||||
elseif( $r < $this->numCols )
|
||||
for( $i = $this->numCols; $i > $r; $i-- )
|
||||
$this->removeColumn( $i - 1 );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $row
|
||||
* @desc Hides a $row from table
|
||||
**/
|
||||
public function hideRow ( $row ) {
|
||||
if( is_int( $row ) )
|
||||
if( $row < $this->numRows )
|
||||
$this->hiddenRows[ $row ] = TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $col
|
||||
* @desc Hides a $col from table
|
||||
**/
|
||||
public function hideColumn ( $col ) {
|
||||
if( is_int( $col ) )
|
||||
if( $col < $this->numCols )
|
||||
$this->hiddenCols[ $col ] = TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $row
|
||||
* @desc Shows a $row from table
|
||||
**/
|
||||
public function showRow ( $row ) {
|
||||
if( is_int( $row ) )
|
||||
if( $row < $this->numRows )
|
||||
$this->hiddenRows[ $row ] = FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $col
|
||||
* @desc Shows a $col from table
|
||||
**/
|
||||
public function showColumn ( $col ) {
|
||||
if( is_int( $col ) )
|
||||
if( $col < $this->numCols )
|
||||
$this->hiddenCols[ $col ] = FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
* @param int $row
|
||||
* @desc Returns TRUE if a row is hidden.
|
||||
**/
|
||||
public function isRowHidden ( $row ) {
|
||||
if( is_int( $row ) )
|
||||
if( $row < $this->numRows )
|
||||
return $this->hiddenRows[ $row ];
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
* @param int $col
|
||||
* @desc Returns TRUE if a col is hidden.
|
||||
**/
|
||||
public function isColumnHidden ( $col ) {
|
||||
if( is_int( $col ) )
|
||||
if( $col < $this->numCols )
|
||||
return $this->hiddenCols[ $col ];
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $row1
|
||||
* @param int $row2
|
||||
* @param bool $swapAttributes
|
||||
* @desc Swaps 2 rows. Swaps attributes if $switchAttributes is TRUE.
|
||||
**/
|
||||
public function swapRows ( $row1, $row2, $swapAttributes = FALSE ) {
|
||||
if( is_int( $row1 ) && is_int( $row2 ) && is_bool( $swapAttributes ) ) {
|
||||
if( $row1 < $this->numRows && $row2 < $this->numRows ) {
|
||||
$temp =& $this->text[ $row1 ];
|
||||
$this->text[ $row1 ] =& $this->text[ $row2 ];
|
||||
$this->text[ $row2 ] =& $temp;
|
||||
if( $swapAttributes == TRUE ) {
|
||||
$temp2 = $this->cellsAttributes[ $row1 ];
|
||||
$this->cellsAttributes[ $row1 ] = $this->cellsAttributes[ $row2 ];
|
||||
$this->cellsAttributes[ $row2 ] = $temp2;
|
||||
|
||||
$temp2 = $this->rowsAttributes[ $row1 ];
|
||||
$this->rowsAttributes[ $row1 ] = $this->rowsAttributes[ $row2 ];
|
||||
$this->rowsAttributes[ $row2 ] = $temp2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $col1
|
||||
* @param int $col2
|
||||
* @param bool $swapAttributes
|
||||
* @desc Swaps 2 cols. Swaps attributes if $switchAttributes is TRUE.
|
||||
**/
|
||||
public function swapColumns ( $col1, $col2, $swapAttributes = FALSE ) {
|
||||
if( is_int( $col1 ) && is_int( $col2 ) && is_bool( $swapAttributes ) ) {
|
||||
if( $col1 < $this->numCols && $col2 < $this->numCols ) {
|
||||
for( $i = 0; $i < $this->numRows; $i++ ){
|
||||
$temp =& $this->text[ $i ][ $col1 ];
|
||||
$this->text[ $i ][ $col1 ] =& $this->text[ $i ][ $col2 ];
|
||||
$this->text[ $i ][ $col2 ] =& $temp;
|
||||
if( $swapAttributes == TRUE ) {
|
||||
$temp2 = $this->cellsAttributes[ $i ][ $col1 ];
|
||||
$this->cellsAttributes[ $i ][ $col1 ] = $this->cellsAttributes[ $i ][ $col2 ];
|
||||
$this->cellsAttributes[ $i ][ $col2 ] = $temp2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $row1
|
||||
* @param int $col1
|
||||
* @param int $row2
|
||||
* @param int $col2
|
||||
* @param bool $swapAttributes
|
||||
* @desc Swaps 2 cells. Swaps attributes if $switchAttributes is TRUE.
|
||||
**/
|
||||
public function swapCells ( $row1, $col1, $row2, $col2, $swapAttributes = FALSE ) {
|
||||
if( is_int( $row1 ) && is_int( $col1 ) && is_int( $row2 ) && is_int( $col2 ) && is_bool( $swapAttributes ) ) {
|
||||
if( $row1 < $this->numRows && $col1 < $this->numCols && $row2 < $this->numRows && $col2 < $this->numCols ) {
|
||||
$temp =& $this->text[ $row1 ][ $col1 ];
|
||||
$this->text[ $row1 ][ $col1 ] =& $this->text[ $row2 ][ $col2 ];
|
||||
$this->text[ $row2 ][ $col2 ] =& $temp;
|
||||
if( $swapAttributes == TRUE ) {
|
||||
$temp2 = $this->cellsAttributes[ $row1 ][ $col1 ];
|
||||
$this->cellsAttributes[ $row1 ][ $col1 ] = $this->cellsAttributes[ $row2 ][ $col2 ];
|
||||
$this->cellsAttributes[ $row2 ][ $col2 ] = $temp2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $row
|
||||
* @param int $count
|
||||
* @desc Inserts $count row at $row position.
|
||||
**/
|
||||
public function insertRows ( $row, $count = 1 ) {
|
||||
if( is_int( $row ) && is_int( $count ) ) {
|
||||
if( $row >= 0 && $row <= $this->numRows ) {
|
||||
for( $i = 0; $i < $count; $i++) {
|
||||
array_splice( $this->text, $row, 0, '' );
|
||||
array_splice( $this->hiddenRows, $row, 0, FALSE );
|
||||
array_splice( $this->cellsAttributes, $row, 0, FALSE );
|
||||
array_splice( $this->rowsAttributes, $row, 0, FALSE );
|
||||
$this->_setVariable( $row );
|
||||
$this->numRows += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $col
|
||||
* @param int $count
|
||||
* @desc Inserts $count columns at $col position.
|
||||
**/
|
||||
public function insertColumns ( $col, $count = 1 ) {
|
||||
if( is_int( $col ) && is_int( $count ) ) {
|
||||
if( $col >= 0 && $col <= $this->numCols ) {
|
||||
for( $i = 0; $i < $this->numRows; $i++ ) {
|
||||
$temp_text = array();
|
||||
$temp_attributes = array();
|
||||
reset($this->text[ $i ]);
|
||||
for( $j = 0; $j <= $this->numCols; $j++ ) {
|
||||
if( $col == $j ) {
|
||||
for( $k = 0; $k < $count; $k++ ){
|
||||
$temp_text[] = '';
|
||||
$temp_attributes[] = array();
|
||||
}
|
||||
}
|
||||
if( $j == $this->numCols )
|
||||
break;
|
||||
$temp_text[] = $this->text[ $i ][ $j ];
|
||||
$temp_attributes[] = $this->cellsAttributes[ $i ][ $j ];
|
||||
}
|
||||
$this->text[ $i ] = $temp_text;
|
||||
$this->cellsAttributes[ $i ] = $temp_attributes;
|
||||
}
|
||||
for( $i = 0; $i < $count; $i++ )
|
||||
array_splice( $this->hiddenCols, $col, 0, FALSE );
|
||||
$this->numCols += $count;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $row
|
||||
* @desc Removes $row.
|
||||
**/
|
||||
public function removeRow ( $row ) {
|
||||
if( is_int( $row ) ) {
|
||||
if( $row < $this->numRows ) {
|
||||
array_splice( $this->text, $row, 1 );
|
||||
array_splice( $this->hiddenRows, $row, 1 );
|
||||
array_splice( $this->cellsAttributes, $row, 1 );
|
||||
array_splice( $this->rowsAttributes, $row, 1 );
|
||||
$this->numRows -= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $col
|
||||
* @desc Removes $col.
|
||||
**/
|
||||
public function removeColumn ( $col ) {
|
||||
if( is_int( $col ) ) {
|
||||
if( $col < $this->numCols ) {
|
||||
for( $i = 0; $i < $this->numRows; $i++ ) {
|
||||
$temp_text = array();
|
||||
$temp_attributes = array();
|
||||
reset($this->text[ $i ]);
|
||||
while ( list( $key, ) = each( $this->text[ $i ] ) ) {
|
||||
if( $key != $col ) {
|
||||
$temp_text[] = $this->text[ $i ][ $key ];
|
||||
$temp_attributes[] = $this->cellsAttributes[ $i ][ $key ];
|
||||
}
|
||||
}
|
||||
$this->text[ $i ] = $temp_text;
|
||||
$this->cellsAttributes[ $i ] = $temp_attributes;
|
||||
}
|
||||
array_splice( $this->hiddenCols, $col, 1 );
|
||||
$this->numCols -= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $width
|
||||
* @desc Sets Table Width.
|
||||
**/
|
||||
public function setWidth ( $width ) {
|
||||
if( is_string( $width ) )
|
||||
$this->width = strval( $width );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @desc Returns Table Width.
|
||||
**/
|
||||
public function width () {
|
||||
return $this->width;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $title
|
||||
* @desc Sets Table Title.
|
||||
**/
|
||||
public function setTitle ( $title ) {
|
||||
if( is_string( $title ) )
|
||||
$this->title = strval( $title );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @desc Returns Table Title.
|
||||
**/
|
||||
public function title () {
|
||||
return $this->title;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @desc Displays the table with its cells.
|
||||
**/
|
||||
public function draw () {
|
||||
if( $this->template != '' ) {
|
||||
$tpl = new $this->template;
|
||||
$tpl->__header( $this->width, $this->title );
|
||||
$this->_check_rowcol_span();
|
||||
for( $i = 0; $i < $this->numRows; $i++ ) {
|
||||
if( $this->hiddenRows[ $i ] == FALSE ) {
|
||||
$tpl->__row_start( $this->rowsAttributes[ $i ] );
|
||||
for( $j = 0; $j < $this->numCols; $j++ ) {
|
||||
if( $this->hiddenCols[ $j ] == FALSE ) {
|
||||
if( $this->text[ $i ][ $j ] !== NULL ) {
|
||||
if( is_object( $this->text[ $i ][ $j ] ) ) {
|
||||
$tpl->__cell_start( '', $this->cellsAttributes[ $i ][ $j ] );
|
||||
$this->text[ $i ][ $j ]->draw();
|
||||
}
|
||||
else
|
||||
$tpl->__cell_start( $this->text[ $i ][ $j ], $this->cellsAttributes[ $i ][ $j ] );
|
||||
$tpl->__cell_stop( $this->text[ $i ][ $j ], $this->cellsAttributes[ $i ][ $j ] );
|
||||
}
|
||||
}
|
||||
}
|
||||
$tpl->__row_stop( $this->rowsAttributes[ $i ] );
|
||||
}
|
||||
}
|
||||
$tpl->__footer( $this->width, $this->title );
|
||||
}
|
||||
}
|
||||
|
||||
// PRIVATE FUNCTIONS
|
||||
/**
|
||||
* @return void
|
||||
* @desc Sets NULL to cells if colspan or rowspan go on the cells
|
||||
**/
|
||||
private function _check_rowcol_span() {
|
||||
for( $i = 0; $i < $this->numRows; $i++ ) {
|
||||
for( $j = 0; $j < $this->numCols; $j++ ) {
|
||||
if( isset( $this->cellsAttributes[ $i ][ $j ][ 'colspan' ] ) )
|
||||
if( $this->cellsAttributes[ $i ][ $j ][ 'colspan' ] > 0 )
|
||||
for( $z = 1; $z < intval( $this->cellsAttributes[ $i ][ $j ][ 'colspan' ] ); $z++ )
|
||||
$this->text[ $i ][ $j + $z ] = NULL;
|
||||
if( isset( $this->cellsAttributes[ $i ][ $j ][ 'rowspan' ] ) )
|
||||
if( $this->cellsAttributes[ $i ][ $j ][ 'rowspan' ] > 0 )
|
||||
for( $z = 1; $z < intval( $this->cellsAttributes[ $i ][ $j ][ 'rowspan' ] ); $z++ )
|
||||
$this->text[ $i + $z ][ $j ] = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $r
|
||||
* @desc Sets Default Variables for row $r.
|
||||
**/
|
||||
private function _setVariable ( $r ) {
|
||||
$this->text[ $r ] = array_fill( 0, $this->numCols, TABLE_DEFAULT_CELL_VALUE );
|
||||
$this->cellsAttributes[ $r ] = array_fill( 0, $this->numCols, array() );
|
||||
$this->rowsAttributes[ $r ] = array();
|
||||
$this->hiddenRows[ $r ] = TABLE_DEFAULT_ROW_HIDDEN;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param int $r
|
||||
* @desc Unsets Default Variables for row $r.
|
||||
**/
|
||||
private function _unsetVariable ( $r ) {
|
||||
unset( $this->text[ $r ] );
|
||||
unset( $this->cellsAttributes[ $r ] );
|
||||
unset( $this->rowsAttributes[ $r ] );
|
||||
unset( $this->hiddenRows[ $r ] );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param string $tab
|
||||
* @desc Merge Function
|
||||
**/
|
||||
private function _sort_merge ( &$tab ) {
|
||||
if( count( $tab ) <= 1 ) return;
|
||||
else {
|
||||
$tab1 = array();
|
||||
$tab2 = array();
|
||||
|
||||
for( $i = 0; $i < count( $tab ); $i++) {
|
||||
if( $i < ( count( $tab ) ) / 2 )
|
||||
$tab1[] = $tab[ $i ];
|
||||
else
|
||||
$tab2[] = $tab[ $i ];
|
||||
}
|
||||
|
||||
$this->_sort_merge( $tab1 );
|
||||
$this->_sort_merge( $tab2 );
|
||||
|
||||
$this->_merge_all( $tab1, $tab2, $tab );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
* @param string $tab1
|
||||
* @param string $tab2
|
||||
* @param string $tab
|
||||
* @desc Merge Function
|
||||
**/
|
||||
private function _merge_all ( $tab1, $tab2, &$tab ) {
|
||||
$i = 0;
|
||||
$i1 = $i2 = 0;
|
||||
while( $i1 < count( $tab1 ) && $i2 < count( $tab2 ) ) {
|
||||
if( strcmp( $tab1[ $i1 ][ $this->temp_col ], $tab2[ $i2 ][ $this->temp_col ] ) == (($this->temp_ascending==TRUE)?-1:1) )
|
||||
$tab[ $i ] = $tab1[ $i1++ ];
|
||||
else
|
||||
$tab[ $i ] = $tab2[ $i2++ ];
|
||||
$i++;
|
||||
}
|
||||
|
||||
while( $i1 < count( $tab1 ) ) {
|
||||
$tab[ $i ] = $tab1[ $i1++ ];
|
||||
$i++;
|
||||
}
|
||||
while( $i2 < count( $tab2 ) ) {
|
||||
$tab[ $i ] = $tab2[ $i2++ ];
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
class tpl_LS {
|
||||
function __header ( $width, $title ) {
|
||||
echo '<table width="'.$width.'" border="0" cellpadding="0" cellspacing="0" align="center" bgcolor="#004163" class="tableline"><tr><th><u>'.$title.'</u>'."\n".'</th></tr><tr><td>'."\n".'<table width="100%" border="0" cellpadding="4" cellspacing="1" align="center">';
|
||||
}
|
||||
|
||||
function __footer ( $width, $title ) {
|
||||
echo '</table>'."\n".'</td></tr></table>'."\n";
|
||||
}
|
||||
|
||||
function __row_start ( $attributes ) {
|
||||
$code = '';
|
||||
$found_class = false;
|
||||
reset( $attributes );
|
||||
while( list( $key, $value ) = each( $attributes ) ) {
|
||||
$code .= ' '.$key.'="'.$value.'"';
|
||||
if( $key == 'class' )
|
||||
$found_class = true;
|
||||
}
|
||||
if( $found_class=== false )
|
||||
$code .= ' class="'.next_color().'"';
|
||||
echo '<tr'.$code.'>';
|
||||
}
|
||||
|
||||
function __row_stop ( $attributes ) {
|
||||
echo '</tr>';
|
||||
}
|
||||
|
||||
function __cell_start ( $text, $attributes ) {
|
||||
$code = '';
|
||||
reset( $attributes );
|
||||
while( list( $key, $value ) = each( $attributes ) )
|
||||
$code .= ' '.$key.'="'.$value.'"';
|
||||
echo '<td'.$code.'>'.$text;
|
||||
}
|
||||
|
||||
function __cell_stop ( $text, $attributes ) {
|
||||
echo '</td>';
|
||||
}
|
||||
}
|
||||
|
||||
class tpl_BLANK {
|
||||
function __header ( $width, $title ) {
|
||||
echo '<table width="'.$width.'" border="0" cellpadding="0" cellspacing="0" align="center">';
|
||||
}
|
||||
|
||||
function __footer ( $width, $title ) {
|
||||
echo '</table>';
|
||||
}
|
||||
|
||||
function __row_start ( $attributes ) {
|
||||
echo '<tr>';
|
||||
}
|
||||
|
||||
function __row_stop ( $attributes ) {
|
||||
echo '</tr>';
|
||||
}
|
||||
|
||||
function __cell_start ( $text, $attributes ) {
|
||||
$code = '';
|
||||
reset( $attributes );
|
||||
while( list( $key, $value ) = each( $attributes ) )
|
||||
$code .= ' '.$key.'="'.$value.'"';
|
||||
echo '<td'.$code.'>'.$text;
|
||||
}
|
||||
|
||||
function __cell_stop ( $text, $attributes ) {
|
||||
echo '</td>';
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,106 @@
|
||||
<?php
|
||||
if(!defined('IN_CB'))die('You are not allowed to access to this page.');
|
||||
|
||||
/**
|
||||
* codabar.php
|
||||
*--------------------------------------------------------------------
|
||||
*
|
||||
* Sub-Class - Codabar
|
||||
*
|
||||
*--------------------------------------------------------------------
|
||||
* Revision History
|
||||
* V1.00 17 jun 2004 Jean-Sebastien Goupil
|
||||
*--------------------------------------------------------------------
|
||||
* Copyright (C) Jean-Sebastien Goupil
|
||||
* http://other.lookstrike.com/barcode/
|
||||
*/
|
||||
class codabar extends BarCode {
|
||||
protected $keys = array(), $code = array();
|
||||
protected $text;
|
||||
protected $textfont;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param int $maxHeight
|
||||
* @param FColor $color1
|
||||
* @param FColor $color2
|
||||
* @param int $res
|
||||
* @param string $text
|
||||
* @param int $textfont
|
||||
*/
|
||||
public function __construct($maxHeight,FColor $color1,FColor $color2,$res,$text,$textfont) {
|
||||
BarCode::__construct($maxHeight,$color1,$color2,$res);
|
||||
$this->keys = array('0','1','2','3','4','5','6','7','8','9','-','$',':','/','.','+','A','B','C','D');
|
||||
$this->code = array( // 0 added to add an extra space
|
||||
'00000110', /* 0 */
|
||||
'00001100', /* 1 */
|
||||
'00010010', /* 2 */
|
||||
'11000000', /* 3 */
|
||||
'00100100', /* 4 */
|
||||
'10000100', /* 5 */
|
||||
'01000010', /* 6 */
|
||||
'01001000', /* 7 */
|
||||
'01100000', /* 8 */
|
||||
'10010000', /* 9 */
|
||||
'00011000', /* - */
|
||||
'00110000', /* $ */
|
||||
'10001010', /* : */
|
||||
'10100010', /* / */
|
||||
'10101000', /* . */
|
||||
'00111110', /* + */
|
||||
'00110100', /* A */
|
||||
'00010110', /* B */
|
||||
'01010010', /* C */
|
||||
'00011100' /* D */
|
||||
);
|
||||
$this->setText($text);
|
||||
$this->textfont = $textfont;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves Text
|
||||
*
|
||||
* @param string $text
|
||||
*/
|
||||
public function setText($text) {
|
||||
$this->text = strtoupper($text); // Only Capital Letters are Allowed
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the barcode
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
public function draw($im) {
|
||||
$error_stop = false;
|
||||
|
||||
// Checking if all chars are allowed
|
||||
for($i=0;$i<strlen($this->text);$i++) {
|
||||
if(!is_int(array_search($this->text[$i],$this->keys))) {
|
||||
$this->DrawError($im,'Char \''.$this->text[$i].'\' not allowed.');
|
||||
$error_stop = true;
|
||||
}
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// Must Start By A, B, C or D
|
||||
if($this->text[0] != 'A' && $this->text[0] != 'B' && $this->text[0] != 'C' && $this->text[0] != 'D') {
|
||||
$this->DrawError($im,'You must start by char A, B, C or D.');
|
||||
$error_stop = true;
|
||||
}
|
||||
// Must Over By A, B, C or D
|
||||
if($this->text[strlen($this->text)-1] != 'A' && $this->text[strlen($this->text)-1] != 'B' && $this->text[strlen($this->text)-1] != 'C' && $this->text[strlen($this->text)-1] != 'D') {
|
||||
$this->DrawError($im,'You must end by char A, B, C or D.');
|
||||
$error_stop = true;
|
||||
}
|
||||
if($error_stop == false) {
|
||||
for($i=0;$i<strlen($this->text);$i++)
|
||||
$this->DrawChar($im,$this->findCode($this->text[$i]),1);
|
||||
$this->lastX = $this->positionX;
|
||||
$this->lastY = $this->maxHeight;
|
||||
$this->DrawText($im);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
?>
|
||||
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
if(!defined('IN_CB'))die('You are not allowed to access to this page.');
|
||||
|
||||
/**
|
||||
* code11.php
|
||||
*--------------------------------------------------------------------
|
||||
*
|
||||
* Sub-Class - Code 11
|
||||
*
|
||||
*--------------------------------------------------------------------
|
||||
* Revision History
|
||||
* V1.00 17 jun 2004 Jean-Sebastien Goupil
|
||||
*--------------------------------------------------------------------
|
||||
* Copyright (C) Jean-Sebastien Goupil
|
||||
* http://other.lookstrike.com/barcode/
|
||||
*/
|
||||
class code11 extends BarCode {
|
||||
protected $keys = array(), $code = array();
|
||||
private $starting, $ending;
|
||||
protected $text;
|
||||
protected $textfont;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param int $maxHeight
|
||||
* @param FColor $color1
|
||||
* @param FColor $color2
|
||||
* @param int $res
|
||||
* @param string $text
|
||||
* @param int $textfont
|
||||
*/
|
||||
public function __construct($maxHeight,FColor $color1,FColor $color2,$res,$text,$textfont) {
|
||||
BarCode::__construct($maxHeight,$color1,$color2,$res);
|
||||
$this->starting = $this->ending = 47;
|
||||
$this->keys = array('0','1','2','3','4','5','6','7','8','9','-');
|
||||
$this->code = array( // 0 added to add an extra space
|
||||
'000010', /* 0 */
|
||||
'100010', /* 1 */
|
||||
'010010', /* 2 */
|
||||
'110000', /* 3 */
|
||||
'001010', /* 4 */
|
||||
'101000', /* 5 */
|
||||
'011000', /* 6 */
|
||||
'000110', /* 7 */
|
||||
'100100', /* 8 */
|
||||
'100000', /* 9 */
|
||||
'001000' /* - */
|
||||
);
|
||||
$this->setText($text);
|
||||
$this->textfont = $textfont;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves Text
|
||||
*
|
||||
* @param string $text
|
||||
*/
|
||||
public function setText($text) {
|
||||
$this->text = $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the barcode
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
public function draw($im) {
|
||||
$error_stop = false;
|
||||
|
||||
// Checking if all chars are allowed
|
||||
for($i=0;$i<strlen($this->text);$i++) {
|
||||
if(!is_int(array_search($this->text[$i],$this->keys))) {
|
||||
$this->DrawError($im,'Char \''.$this->text[$i].'\' not allowed.');
|
||||
$error_stop = true;
|
||||
}
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// Starting Code
|
||||
$this->DrawChar($im,'001100',1);
|
||||
// Chars
|
||||
for($i=0;$i<strlen($this->text);$i++)
|
||||
$this->DrawChar($im,$this->findCode($this->text[$i]),1);
|
||||
// Checksum
|
||||
// First CheckSUM "C"
|
||||
// The "C" checksum character is the modulo 11 remainder of the sum of the weighted
|
||||
// value of the data characters. The weighting value starts at "1" for the right-most
|
||||
// data character, 2 for the second to last, 3 for the third-to-last, and so on up to 20.
|
||||
// After 10, the sequence wraps around back to 1.
|
||||
|
||||
// Second CheckSUM "K"
|
||||
// Same as CheckSUM "C" but we count the CheckSum "C" at the end
|
||||
// After 9, the sequence wraps around back to 1.
|
||||
$sequence_multiplier = array(10,9);
|
||||
$temp_text = $this->text;
|
||||
for($z=0;$z<2;$z++) {
|
||||
// We don't display the K CheckSum if the original text had a length less than 10
|
||||
if(strlen($temp_text)<=10 && $z==1)
|
||||
break;
|
||||
$checksum = 0;
|
||||
for($i=strlen($temp_text),$j=0;$i>0;$i--,$j++) {
|
||||
$multiplier = $i % $sequence_multiplier[$z];
|
||||
if($multiplier==0)
|
||||
$multiplier=$sequence_multiplier[$z];
|
||||
$checksum += $this->findIndex($temp_text[$j]) * $multiplier;
|
||||
}
|
||||
$this->DrawChar($im,$this->findCode($checksum % 11),1);
|
||||
$temp_text .= $this->keys[$checksum % 11];
|
||||
}
|
||||
// Ending Code
|
||||
$this->DrawChar($im,'00110',1);
|
||||
$this->lastX = $this->positionX;
|
||||
$this->lastY = $this->maxHeight;
|
||||
$this->DrawText($im);
|
||||
}
|
||||
}
|
||||
};
|
||||
?>
|
||||
@@ -0,0 +1,306 @@
|
||||
<?php
|
||||
if(!defined('IN_CB'))die('You are not allowed to access to this page.');
|
||||
|
||||
/**
|
||||
* code128.php
|
||||
*--------------------------------------------------------------------
|
||||
*
|
||||
* Sub-Class - Code 128, A, B, C
|
||||
*
|
||||
* # Code C Working properly only on PHP4 or PHP5.0.3+ due to bug :
|
||||
* http://bugs.php.net/bug.php?id=28862
|
||||
*
|
||||
*--------------------------------------------------------------------
|
||||
* Revision History
|
||||
* V1.00 17 jun 2004 Jean-Sebastien Goupil
|
||||
*--------------------------------------------------------------------
|
||||
* Copyright (C) Jean-Sebastien Goupil
|
||||
* http://other.lookstrike.com/barcode/
|
||||
*/
|
||||
class code128 extends BarCode {
|
||||
protected $keys = array(), $keysA = array(), $keysB = array(), $keysC = array(), $code = array();
|
||||
private $starting, $ending, $starting_text;
|
||||
protected $text;
|
||||
protected $textfont;
|
||||
private $currentCode;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param int $maxHeight
|
||||
* @param FColor $color1
|
||||
* @param FColor $color2
|
||||
* @param int $res
|
||||
* @param string $text
|
||||
* @param int $textfont
|
||||
* @param char $start
|
||||
*/
|
||||
public function __construct($maxHeight,FColor $color1,FColor $color2,$res,$text,$textfont,$start='B') {
|
||||
BarCode::__construct($maxHeight,$color1,$color2,$res);
|
||||
if($start=='A')
|
||||
$this->starting = 103;
|
||||
elseif($start=='B')
|
||||
$this->starting = 104;
|
||||
elseif($start=='C')
|
||||
$this->starting = 105;
|
||||
$this->ending = 106;
|
||||
$this->currentCode = $start;
|
||||
/* CODE 128 A */
|
||||
$this->keysA = array(' ','!','"','#','$','%','&','\'','(',')','*','+',',','-','.','/','0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?','@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','[','\\',']','^','_','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',chr(128),chr(129));
|
||||
|
||||
/* CODE 128 B */
|
||||
$this->keysB = array(' ','!','"','#','$','%','&','\'','(',')','*','+',',','-','.','/','0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?','@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','[','\\',']','^','_','`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','{','|','}','~','','','','',chr(128),'',chr(130));
|
||||
|
||||
/* CODE 128 C */
|
||||
$this->keysC = array();
|
||||
for($i=0;$i<=99;$i++)
|
||||
$this->keysC[] = sprintf('%02d',$i);
|
||||
$this->keysC[] = chr(129);
|
||||
$this->keysC[] = chr(130);
|
||||
|
||||
$this->code = array(
|
||||
'101111', /* 00 */
|
||||
'111011', /* 01 */
|
||||
'111110', /* 02 */
|
||||
'010112', /* 03 */
|
||||
'010211', /* 04 */
|
||||
'020111', /* 05 */
|
||||
'011102', /* 06 */
|
||||
'011201', /* 07 */
|
||||
'021101', /* 08 */
|
||||
'110102', /* 09 */
|
||||
'110201', /* 10 */
|
||||
'120101', /* 11 */
|
||||
'001121', /* 12 */
|
||||
'011021', /* 13 */
|
||||
'011120', /* 14 */
|
||||
'002111', /* 15 */
|
||||
'012011', /* 16 */
|
||||
'012110', /* 17 */
|
||||
'112100', /* 18 */
|
||||
'110021', /* 19 */
|
||||
'110120', /* 20 */
|
||||
'102101', /* 21 */
|
||||
'112001', /* 22 */
|
||||
'201020', /* 23 */
|
||||
'200111', /* 24 */
|
||||
'210011', /* 25 */
|
||||
'210110', /* 26 */
|
||||
'201101', /* 27 */
|
||||
'211001', /* 28 */
|
||||
'211100', /* 29 */
|
||||
'101012', /* 30 */
|
||||
'101210', /* 31 */
|
||||
'121010', /* 32 */
|
||||
'000212', /* 33 */
|
||||
'020012', /* 34 */
|
||||
'020210', /* 35 */
|
||||
'001202', /* 36 */
|
||||
'021002', /* 37 */
|
||||
'021200', /* 38 */
|
||||
'100202', /* 39 */
|
||||
'120002', /* 40 */
|
||||
'120200', /* 41 */
|
||||
'001022', /* 42 */
|
||||
'001220', /* 43 */
|
||||
'021020', /* 44 */
|
||||
'002012', /* 45 */
|
||||
'002210', /* 46 */
|
||||
'022010', /* 47 */
|
||||
'202010', /* 48 */
|
||||
'100220', /* 49 */
|
||||
'120020', /* 50 */
|
||||
'102002', /* 51 */
|
||||
'102200', /* 52 */
|
||||
'102020', /* 53 */
|
||||
'200012', /* 54 */
|
||||
'200210', /* 55 */
|
||||
'220010', /* 56 */
|
||||
'201002', /* 57 */
|
||||
'201200', /* 58 */
|
||||
'221000', /* 59 */
|
||||
'203000', /* 60 */
|
||||
'110300', /* 61 */
|
||||
'320000', /* 62 */
|
||||
'000113', /* 63 */
|
||||
'000311', /* 64 */
|
||||
'010013', /* 65 */
|
||||
'010310', /* 66 */
|
||||
'030011', /* 67 */
|
||||
'030110', /* 68 */
|
||||
'001103', /* 69 */
|
||||
'001301', /* 70 */
|
||||
'011003', /* 71 */
|
||||
'011300', /* 72 */
|
||||
'031001', /* 73 */
|
||||
'031100', /* 74 */
|
||||
'130100', /* 75 */
|
||||
'110003', /* 76 */
|
||||
'302000', /* 77 */
|
||||
'130001', /* 78 */
|
||||
'023000', /* 79 */
|
||||
'000131', /* 80 */
|
||||
'010031', /* 81 */
|
||||
'010130', /* 82 */
|
||||
'003101', /* 83 */
|
||||
'013001', /* 84 */
|
||||
'013100', /* 85 */
|
||||
'300101', /* 86 */
|
||||
'310001', /* 87 */
|
||||
'310100', /* 88 */
|
||||
'101030', /* 89 */
|
||||
'103010', /* 90 */
|
||||
'301010', /* 91 */
|
||||
'000032', /* 92 */
|
||||
'000230', /* 93 */
|
||||
'020030', /* 94 */
|
||||
'003002', /* 95 */
|
||||
'003200', /* 96 */
|
||||
'300002', /* 97 */
|
||||
'300200', /* 98 */
|
||||
'002030', /* 99 */
|
||||
'003020', /* 100*/
|
||||
'200030', /* 101*/
|
||||
'300020', /* 102*/
|
||||
'100301', /* 103*/
|
||||
'100103', /* 104*/
|
||||
'100121', /* 105*/
|
||||
'122000' /*STOP*/
|
||||
);
|
||||
$this->setText($text);
|
||||
$this->textfont = $textfont;
|
||||
$this->usingCode($start);
|
||||
$this->starting_text = $start;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves Text
|
||||
*
|
||||
* @param string $text
|
||||
*/
|
||||
public function setText($text) {
|
||||
$this->text = $text;
|
||||
}
|
||||
|
||||
private function usingCode($code) {
|
||||
if($code=='A')
|
||||
$this->keys = $this->keysA;
|
||||
elseif($code=='B')
|
||||
$this->keys = $this->keysB;
|
||||
elseif($code=='C')
|
||||
$this->keys = $this->keysC;
|
||||
$this->currentCode = $code;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the barcode
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
public function draw($im) {
|
||||
$error_stop = false;
|
||||
|
||||
$this->usingCode($this->starting_text);
|
||||
// Checking if all chars are allowed
|
||||
for($i=0;$i<strlen($this->text);$i++) {
|
||||
if($this->currentCode=='C') {
|
||||
if(isset($this->text[$i+1]) && $this->check_int($this->text[$i+1])) {
|
||||
$value_test = array_search($this->text[$i].$this->text[$i+1],$this->keys);
|
||||
$i++;
|
||||
}
|
||||
else {
|
||||
$this->DrawError($im,'With Code C, you must provide always pair of two integers.');
|
||||
$error_stop = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
$value_test = array_search($this->text[$i],$this->keys);
|
||||
if(!is_int($value_test)) {
|
||||
$this->DrawError($im,'Char \''.$this->text[$i].'\' not allowed.');
|
||||
$error_stop = true;
|
||||
}
|
||||
if($this->findIndex($this->text[$i]) == 99 && $this->currentCode != 'C')
|
||||
$this->usingCode('C');
|
||||
elseif($this->findIndex($this->text[$i]) == 100 && $this->currentCode != 'B')
|
||||
$this->usingCode('B');
|
||||
elseif($this->findIndex($this->text[$i]) == 101 && $this->currentCode != 'A')
|
||||
$this->usingCode('A');
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// The START-A, START-B, START-C, STOP are not allowed
|
||||
if(is_int(strpos($this->text,chr(135))) || is_int(strpos($this->text,chr(136))) || is_int(strpos($this->text,chr(137))) || is_int(strpos($this->text,chr(138)))) {
|
||||
$this->DrawError($im,'Chars START-A, START-B, START-C, STOP not allowed.');
|
||||
$error_stop = true;
|
||||
}
|
||||
if($error_stop == false) {
|
||||
$this->usingCode($this->starting_text);
|
||||
// Starting Code
|
||||
$this->DrawChar($im,$this->code[$this->starting],1);
|
||||
// Chars
|
||||
for($i=0;$i<strlen($this->text);$i++) {
|
||||
if($this->currentCode=='C') {
|
||||
$this->DrawChar($im,$this->findCode($this->text[$i].$this->text[$i+1]),1);
|
||||
$i++;
|
||||
}
|
||||
else
|
||||
$this->DrawChar($im,$this->findCode($this->text[$i]),1);
|
||||
if($this->findIndex($this->text[$i]) == 99 && $this->currentCode != 'C')
|
||||
$this->usingCode('C');
|
||||
elseif($this->findIndex($this->text[$i]) == 100 && $this->currentCode != 'B')
|
||||
$this->usingCode('B');
|
||||
elseif($this->findIndex($this->text[$i]) == 101 && $this->currentCode != 'A')
|
||||
$this->usingCode('A');
|
||||
}
|
||||
// Checksum
|
||||
// First Char (START)
|
||||
// + Starting with the first data character following the start character,
|
||||
// take the value of the character (between 0 and 102, inclusive) multiply
|
||||
// it by its character position (1) and add that to the running checksum.
|
||||
// Modulated 103
|
||||
if($this->starting == 103)
|
||||
$this->usingCode('A');
|
||||
elseif($this->starting == 104)
|
||||
$this->usingCode('B');
|
||||
elseif($this->starting == 105)
|
||||
$this->usingCode('C');
|
||||
$checksum = 0;
|
||||
$checksum += $this->starting;
|
||||
for($position=1,$i=0;$i<strlen($this->text);$position++,$i++) {
|
||||
if($this->currentCode=='C') {
|
||||
$checksum += intval($this->text[$i].$this->text[$i+1]) * $position;
|
||||
$i++;
|
||||
}
|
||||
else
|
||||
$checksum += $this->findIndex($this->text[$i]) * $position;
|
||||
|
||||
if($this->findIndex($this->text[$i]) == 99 && $this->currentCode != 'C')
|
||||
$this->usingCode('C');
|
||||
elseif($this->findIndex($this->text[$i]) == 100 && $this->currentCode != 'B')
|
||||
$this->usingCode('B');
|
||||
elseif($this->findIndex($this->text[$i]) == 101 && $this->currentCode != 'A')
|
||||
$this->usingCode('A');
|
||||
}
|
||||
$this->DrawChar($im,$this->code[$checksum % 103],1);
|
||||
// Ending Code
|
||||
$this->DrawChar($im,$this->code[$this->ending],1);
|
||||
// Draw a Final Bar
|
||||
$this->DrawChar($im,'1',1);
|
||||
$this->lastX = $this->positionX;
|
||||
$this->lastY = $this->maxHeight;
|
||||
// Removing Special Code
|
||||
$this->text = ereg_replace(chr(128),'',$this->text);
|
||||
$this->text = ereg_replace(chr(129),'',$this->text);
|
||||
$this->text = ereg_replace(chr(130),'',$this->text);
|
||||
$this->DrawText($im);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function check_int($var) {
|
||||
if(intval($var)>=0 || intval($var)<=9)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
};
|
||||
?>
|
||||
@@ -0,0 +1,143 @@
|
||||
<?php
|
||||
if(!defined('IN_CB'))die('You are not allowed to access to this page.');
|
||||
|
||||
/**
|
||||
* code39.php
|
||||
*--------------------------------------------------------------------
|
||||
*
|
||||
* Sub-Class - Code 39
|
||||
*
|
||||
*--------------------------------------------------------------------
|
||||
* Revision History
|
||||
* v1.01 7 jul 2004 Jean-Sebastien Goupil Correction + Sign
|
||||
* V1.00 17 jun 2004 Jean-Sebastien Goupil
|
||||
*--------------------------------------------------------------------
|
||||
* Copyright (C) Jean-Sebastien Goupil
|
||||
* http://other.lookstrike.com/barcode/
|
||||
*/
|
||||
class code39 extends BarCode {
|
||||
protected $keys = array(), $code = array();
|
||||
private $starting, $ending;
|
||||
protected $text;
|
||||
protected $textfont;
|
||||
private $checksum;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param int $maxHeight
|
||||
* @param FColor $color1
|
||||
* @param FColor $color2
|
||||
* @param int $res
|
||||
* @param string $text
|
||||
* @param int $textfont
|
||||
* @param bool $checksum
|
||||
*/
|
||||
public function __construct($maxHeight,FColor $color1,FColor $color2,$res,$text,$textfont,$checksum=false) {
|
||||
BarCode::__construct($maxHeight,$color1,$color2,$res);
|
||||
$this->starting = $this->ending = 43;
|
||||
$this->keys = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','-','.',' ','$','/','+','%','*');
|
||||
$this->code = array( // 0 added to add an extra space
|
||||
'0001101000', /* 0 */
|
||||
'1001000010', /* 1 */
|
||||
'0011000010', /* 2 */
|
||||
'1011000000', /* 3 */
|
||||
'0001100010', /* 4 */
|
||||
'1001100000', /* 5 */
|
||||
'0011100000', /* 6 */
|
||||
'0001001010', /* 7 */
|
||||
'1001001000', /* 8 */
|
||||
'0011001000', /* 9 */
|
||||
'1000010010', /* A */
|
||||
'0010010010', /* B */
|
||||
'1010010000', /* C */
|
||||
'0000110010', /* D */
|
||||
'1000110000', /* E */
|
||||
'0010110000', /* F */
|
||||
'0000011010', /* G */
|
||||
'1000011000', /* H */
|
||||
'0010011000', /* I */
|
||||
'0000111000', /* J */
|
||||
'1000000110', /* K */
|
||||
'0010000110', /* L */
|
||||
'1010000100', /* M */
|
||||
'0000100110', /* N */
|
||||
'1000100100', /* O */
|
||||
'0010100100', /* P */
|
||||
'0000001110', /* Q */
|
||||
'1000001100', /* R */
|
||||
'0010001100', /* S */
|
||||
'0000101100', /* T */
|
||||
'1100000010', /* U */
|
||||
'0110000010', /* V */
|
||||
'1110000000', /* W */
|
||||
'0100100010', /* X */
|
||||
'1100100000', /* Y */
|
||||
'0110100000', /* Z */
|
||||
'0100001010', /* - */
|
||||
'1100001000', /* . */
|
||||
'0110001000', /* */
|
||||
'0101010000', /* $ */
|
||||
'0101000100', /* / */
|
||||
'0100010100', /* + */
|
||||
'0001010100', /* % */
|
||||
'0100101000' /* * */
|
||||
);
|
||||
$this->setText($text);
|
||||
$this->textfont = $textfont;
|
||||
$this->checksum = $checksum;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves Text
|
||||
*
|
||||
* @param string $text
|
||||
*/
|
||||
public function setText($text) {
|
||||
$this->text = strtoupper($text); // Only Capital Letters are Allowed
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the barcode
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
public function draw($im) {
|
||||
$error_stop = false;
|
||||
|
||||
// Checking if all chars are allowed
|
||||
for($i=0;$i<strlen($this->text);$i++) {
|
||||
if(!is_int(array_search($this->text[$i],$this->keys))) {
|
||||
$this->DrawError($im,'Char \''.$this->text[$i].'\' not allowed.');
|
||||
$error_stop = true;
|
||||
}
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// The * is not allowed
|
||||
if(is_int(strpos($this->text,'*'))) {
|
||||
$this->DrawError($im,'Char \'*\' not allowed.');
|
||||
$error_stop = true;
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// Starting *
|
||||
$this->DrawChar($im,$this->code[$this->starting],1);
|
||||
// Chars
|
||||
for($i=0;$i<strlen($this->text);$i++)
|
||||
$this->DrawChar($im,$this->findCode($this->text[$i]),1);
|
||||
// Checksum (rarely used)
|
||||
if($this->checksum == true) {
|
||||
$checksum = 0;
|
||||
for($i=0;$i<strlen($this->text);$i++)
|
||||
$checksum += $this->findIndex($this->text[$i]);
|
||||
$this->DrawChar($im,$this->code[$checksum % 43],1);
|
||||
}
|
||||
// Ending *
|
||||
$this->DrawChar($im,$this->code[$this->ending],1);
|
||||
$this->lastX = $this->positionX;
|
||||
$this->lastY = $this->maxHeight;
|
||||
$this->DrawText($im);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
?>
|
||||
@@ -0,0 +1,162 @@
|
||||
<?php
|
||||
if(!defined('IN_CB'))die('You are not allowed to access to this page.');
|
||||
|
||||
/**
|
||||
* code93.php
|
||||
*--------------------------------------------------------------------
|
||||
*
|
||||
* Sub-Class - Code 93
|
||||
*
|
||||
*--------------------------------------------------------------------
|
||||
* Revision History
|
||||
* V1.00 17 jun 2004 Jean-Sebastien Goupil
|
||||
*--------------------------------------------------------------------
|
||||
* Copyright (C) Jean-Sebastien Goupil
|
||||
* http://other.lookstrike.com/barcode/
|
||||
*/
|
||||
class code93 extends BarCode {
|
||||
protected $keys = array(), $code = array();
|
||||
private $starting, $ending;
|
||||
protected $text;
|
||||
protected $textfont;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param int $maxHeight
|
||||
* @param FColor $color1
|
||||
* @param FColor $color2
|
||||
* @param int $res
|
||||
* @param string $text
|
||||
* @param int $textfont
|
||||
*/
|
||||
public function __construct($maxHeight,FColor $color1,FColor $color2,$res,$text,$textfont) {
|
||||
BarCode::__construct($maxHeight,$color1,$color2,$res);
|
||||
$this->starting = $this->ending = 47;
|
||||
$this->keys = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','-','.',' ','$','/','+','%','($)','(%)','(/)','(+)','*');
|
||||
$this->code = array(
|
||||
'020001', /* 0 */
|
||||
'000102', /* 1 */
|
||||
'000201', /* 2 */
|
||||
'000300', /* 3 */
|
||||
'010002', /* 4 */
|
||||
'010101', /* 5 */
|
||||
'010200', /* 6 */
|
||||
'000003', /* 7 */
|
||||
'020100', /* 8 */
|
||||
'030000', /* 9 */
|
||||
'100002', /* A */
|
||||
'100101', /* B */
|
||||
'100200', /* C */
|
||||
'110001', /* D */
|
||||
'110100', /* E */
|
||||
'120000', /* F */
|
||||
'001002', /* G */
|
||||
'001101', /* H */
|
||||
'001200', /* I */
|
||||
'011001', /* J */
|
||||
'021000', /* K */
|
||||
'000012', /* L */
|
||||
'000111', /* M */
|
||||
'000210', /* N */
|
||||
'010011', /* O */
|
||||
'020010', /* P */
|
||||
'101001', /* Q */
|
||||
'101100', /* R */
|
||||
'100011', /* S */
|
||||
'100110', /* T */
|
||||
'110010', /* U */
|
||||
'111000', /* V */
|
||||
'001011', /* W */
|
||||
'001110', /* X */
|
||||
'011010', /* Y */
|
||||
'012000', /* Z */
|
||||
'010020', /* - */
|
||||
'200001', /* . */
|
||||
'200100', /* */
|
||||
'210000', /* $ */
|
||||
'001020', /* / */
|
||||
'002010', /* + */
|
||||
'100020', /* % */
|
||||
'010110', /*($)*/
|
||||
'201000', /*(%)*/
|
||||
'200010', /*(/)*/
|
||||
'011100', /*(+)*/
|
||||
'000030' /* * */
|
||||
);
|
||||
$this->setText($text);
|
||||
$this->textfont = $textfont;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves Text
|
||||
*
|
||||
* @param string $text
|
||||
*/
|
||||
public function setText($text) {
|
||||
$this->text = strtoupper($text); // Only Capital Letters are Allowed
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the barcode
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
public function draw($im) {
|
||||
$error_stop = false;
|
||||
|
||||
// Checking if all chars are allowed
|
||||
for($i=0;$i<strlen($this->text);$i++) {
|
||||
if(!is_int(array_search($this->text[$i],$this->keys))) {
|
||||
$this->DrawError($im,'Char \''.$this->text[$i].'\' not allowed.');
|
||||
$error_stop = true;
|
||||
}
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// The * is not allowed
|
||||
if(is_int(strpos($this->text,'*'))) {
|
||||
$this->DrawError($im,'Char \'*\' not allowed.');
|
||||
$error_stop = true;
|
||||
}
|
||||
|
||||
if($error_stop == false) {
|
||||
// Starting *
|
||||
$this->DrawChar($im,$this->code[$this->starting],1);
|
||||
// Chars
|
||||
for($i=0;$i<strlen($this->text);$i++)
|
||||
$this->DrawChar($im,$this->findCode($this->text[$i]),1);
|
||||
// Checksum
|
||||
// First CheckSUM "C"
|
||||
// The "C" checksum character is the modulo 47 remainder of the sum of the weighted
|
||||
// value of the data characters. The weighting value starts at "1" for the right-most
|
||||
// data character, 2 for the second to last, 3 for the third-to-last, and so on up to 20.
|
||||
// After 20, the sequence wraps around back to 1.
|
||||
|
||||
// Second CheckSUM "K"
|
||||
// Same as CheckSUM "C" but we count the CheckSum "C" at the end
|
||||
// After 15, the sequence wraps around back to 1.
|
||||
$sequence_multiplier = array(20,15);
|
||||
$temp_text = $this->text;
|
||||
for($z=0;$z<2;$z++) {
|
||||
$checksum = 0;
|
||||
for($i=strlen($temp_text),$j=0;$i>0;$i--,$j++) {
|
||||
$multiplier = $i % $sequence_multiplier[$z];
|
||||
if($multiplier==0)
|
||||
$multiplier = $sequence_multiplier[$z];
|
||||
$checksum += $this->findIndex($temp_text[$j]) * $multiplier;
|
||||
}
|
||||
$this->DrawChar($im,$this->code[$checksum % 47],1);
|
||||
$temp_text .= $this->keys[$checksum % 47];
|
||||
}
|
||||
// Ending *
|
||||
$this->DrawChar($im,$this->code[$this->ending],1);
|
||||
// Draw a Final Bar
|
||||
$this->DrawChar($im,'0',1);
|
||||
$this->lastX = $this->positionX;
|
||||
$this->lastY = $this->maxHeight;
|
||||
$this->DrawText($im);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
?>
|
||||
@@ -0,0 +1,208 @@
|
||||
<?php
|
||||
if(!defined('IN_CB'))die('You are not allowed to access to this page.');
|
||||
|
||||
/**
|
||||
* ean13.php
|
||||
*--------------------------------------------------------------------
|
||||
*
|
||||
* Sub-Class - EAN-13
|
||||
*
|
||||
* You can provide a ISBN code (without dash), the code will transform
|
||||
* it into a EAN13 format.
|
||||
* EAN-13 contains
|
||||
* - 2 system digits (1 not displayed but coded with parity)
|
||||
* - 5 manufacturer code digits
|
||||
* - 5 product digits
|
||||
* - 1 checksum digit
|
||||
*
|
||||
*--------------------------------------------------------------------
|
||||
* Revision History
|
||||
* V1.00 17 jun 2004 Jean-Sebastien Goupil
|
||||
*--------------------------------------------------------------------
|
||||
* Copyright (C) Jean-Sebastien Goupil
|
||||
* http://other.lookstrike.com/barcode/
|
||||
*/
|
||||
class ean13 extends BarCode {
|
||||
protected $keys = array(), $code = array(), $codeParity = array();
|
||||
private $text;
|
||||
private $textfont;
|
||||
private $book;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param int $maxHeight
|
||||
* @param FColor $color1
|
||||
* @param FColor $color2
|
||||
* @param int $res
|
||||
* @param string $text
|
||||
* @param int $textfont
|
||||
* @param bool $book
|
||||
*/
|
||||
public function __construct($maxHeight,FColor $color1,FColor $color2,$res,$text,$textfont,$book=false) {
|
||||
BarCode::__construct($maxHeight,$color1,$color2,$res);
|
||||
$this->keys = array('0','1','2','3','4','5','6','7','8','9');
|
||||
// Left-Hand Odd Parity starting with a space
|
||||
// Left-Hand Even Parity is the inverse (0=0012) starting with a space
|
||||
// Right-Hand is the same of Left-Hand starting with a bar
|
||||
$this->code = array(
|
||||
'2100', /* 0 */
|
||||
'1110', /* 1 */
|
||||
'1011', /* 2 */
|
||||
'0300', /* 3 */
|
||||
'0021', /* 4 */
|
||||
'0120', /* 5 */
|
||||
'0003', /* 6 */
|
||||
'0201', /* 7 */
|
||||
'0102', /* 8 */
|
||||
'2001' /* 9 */
|
||||
);
|
||||
// Parity, 0=Odd, 1=Even for manufacturer code. Depending on 1st System Digit
|
||||
$this->codeParity = array(
|
||||
array(0,0,0,0,0), /* 0 */
|
||||
array(0,1,0,1,1), /* 1 */
|
||||
array(0,1,1,0,1), /* 2 */
|
||||
array(0,1,1,1,0), /* 3 */
|
||||
array(1,0,0,1,1), /* 4 */
|
||||
array(1,1,0,0,1), /* 5 */
|
||||
array(1,1,1,0,0), /* 6 */
|
||||
array(1,0,1,0,1), /* 7 */
|
||||
array(1,0,1,1,0), /* 8 */
|
||||
array(1,1,0,1,0) /* 9 */
|
||||
);
|
||||
$this->setText($text);
|
||||
$this->textfont = $textfont;
|
||||
$this->book = $book;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves Text
|
||||
*
|
||||
* @param string $text
|
||||
*/
|
||||
public function setText($text){
|
||||
$this->text = $text;
|
||||
}
|
||||
|
||||
private function inverse($text,$inverse=1) {
|
||||
if($inverse == 1)
|
||||
$text = strrev($text);
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the barcode
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
public function draw($im) {
|
||||
$error_stop = false;
|
||||
|
||||
// Checking if all chars are allowed
|
||||
for($i=0;$i<strlen($this->text);$i++) {
|
||||
if(!is_int(array_search($this->text[$i],$this->keys))) {
|
||||
$this->DrawError($im,'Char \''.$this->text[$i].'\' not allowed.');
|
||||
$error_stop = true;
|
||||
}
|
||||
}
|
||||
if($error_stop == false) {
|
||||
if($this->book == true && strlen($this->text) != 10) {
|
||||
$this->DrawError($im,'Must contains 10 chars if ISBN is true.');
|
||||
$error_stop = true;
|
||||
}
|
||||
|
||||
// If it's a book, we change the code to the right one
|
||||
if($this->book==true && strlen($this->text)==10)
|
||||
$this->text = '978'.substr($this->text,0,strlen($this->text)-1);
|
||||
|
||||
// Must contains 12 chars
|
||||
if(strlen($this->text) != 12) {
|
||||
$this->DrawError($im,'Must contains 12 chars, the 13th digit is automatically added.');
|
||||
$error_stop = true;
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// Calculating Checksum
|
||||
// Consider the right-most digit of the message to be in an "odd" position,
|
||||
// and assign odd/even to each character moving from right to left
|
||||
// Odd Position = 3, Even Position = 1
|
||||
// Multiply it by the number
|
||||
// Add all of that and do 10-(?mod10)
|
||||
$odd = true;
|
||||
$checksum=0;
|
||||
for($i=strlen($this->text);$i>0;$i--) {
|
||||
if($odd==true) {
|
||||
$multiplier=3;
|
||||
$odd=false;
|
||||
}
|
||||
else {
|
||||
$multiplier=1;
|
||||
$odd=true;
|
||||
}
|
||||
$checksum += $this->keys[$this->text[$i - 1]] * $multiplier;
|
||||
}
|
||||
$checksum = 10 - $checksum % 10;
|
||||
$checksum = ($checksum == 10)?0:$checksum;
|
||||
$this->text .= $this->keys[$checksum];
|
||||
// If we have to write text, we move the barcode to the right to have space to put system digit
|
||||
$this->positionX = ($this->textfont == 0)?0:10;
|
||||
// Starting Code
|
||||
$this->DrawChar($im,'000',1);
|
||||
// Draw Second Code
|
||||
$this->DrawChar($im,$this->findCode($this->text[1]),2);
|
||||
// Draw Manufacturer Code
|
||||
for($i=0;$i<5;$i++)
|
||||
$this->DrawChar($im,$this->inverse($this->findCode($this->text[$i + 2]),$this->codeParity[$this->text[0]][$i]),2);
|
||||
// Draw Center Guard Bar
|
||||
$this->DrawChar($im,'00000',2);
|
||||
// Draw Product Code
|
||||
for($i=7;$i<13;$i++){
|
||||
$this->DrawChar($im,$this->findCode($this->text[$i]),1);
|
||||
}
|
||||
// Draw Right Guard Bar
|
||||
$this->DrawChar($im,'000',1);
|
||||
$this->lastX = $this->positionX;
|
||||
$this->lastY = $this->maxHeight;
|
||||
$this->DrawText($im);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Overloaded method for drawing special label
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
protected function DrawText($im) {
|
||||
if($this->textfont != 0) {
|
||||
$bar_color = (is_null($this->color1))?NULL:$this->color1->allocate($im);
|
||||
if(!is_null($bar_color)) {
|
||||
$rememberX = $this->positionX;
|
||||
$rememberH = $this->maxHeight;
|
||||
// We increase the bars
|
||||
$this->maxHeight = $this->maxHeight + 9;
|
||||
$this->positionX = 10;
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
$this->positionX += $this->res*2;
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
// Center Guard Bar
|
||||
$this->positionX += $this->res*44;
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
$this->positionX += $this->res*2;
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
// Last Bars
|
||||
$this->positionX += $this->res*44;
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
$this->positionX += $this->res*2;
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
|
||||
$this->positionX = $rememberX;
|
||||
$this->maxHeight = $rememberH;
|
||||
imagechar($im,$this->textfont,1,$this->maxHeight-(imagefontheight($this->textfont)/2),$this->text[0],$bar_color);
|
||||
imagestring($im,$this->textfont,10+(3*$this->res+48*$this->res)/2-imagefontwidth($this->textfont)*(6/2),$this->maxHeight+1,substr($this->text,1,6),$bar_color);
|
||||
imagestring($im,$this->textfont,10+46*$this->res+(3*$this->res+46*$this->res)/2-imagefontwidth($this->textfont)*(6/2),$this->maxHeight+1,substr($this->text,7,6),$bar_color);
|
||||
}
|
||||
$this->lastY = $this->maxHeight + imagefontheight($this->textfont);
|
||||
}
|
||||
}
|
||||
};
|
||||
?>
|
||||
@@ -0,0 +1,167 @@
|
||||
<?php
|
||||
if(!defined('IN_CB'))die('You are not allowed to access to this page.');
|
||||
|
||||
/**
|
||||
* ean8.php
|
||||
*--------------------------------------------------------------------
|
||||
*
|
||||
* Sub-Class - EAN-8
|
||||
*
|
||||
* EAN-8 contains
|
||||
* - 4 digits
|
||||
* - 3 digits
|
||||
* - 1 checksum
|
||||
*
|
||||
*--------------------------------------------------------------------
|
||||
* Revision History
|
||||
* V1.00 17 jun 2004 Jean-Sebastien Goupil
|
||||
*--------------------------------------------------------------------
|
||||
* Copyright (C) Jean-Sebastien Goupil
|
||||
* http://other.lookstrike.com/barcode/
|
||||
*/
|
||||
class ean8 extends BarCode {
|
||||
protected $keys = array(), $code = array();
|
||||
protected $text;
|
||||
protected $textfont;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param int $maxHeight
|
||||
* @param FColor $color1
|
||||
* @param FColor $color2
|
||||
* @param int $res
|
||||
* @param string $text
|
||||
* @param int $textfont
|
||||
*/
|
||||
public function __construct($maxHeight,FColor $color1,FColor $color2,$res,$text,$textfont) {
|
||||
BarCode::__construct($maxHeight,$color1,$color2,$res);
|
||||
$this->keys = array('0','1','2','3','4','5','6','7','8','9');
|
||||
// Left-Hand Odd Parity starting with a space
|
||||
// Right-Hand is the same of Left-Hand starting with a bar
|
||||
$this->code = array(
|
||||
'2100', /* 0 */
|
||||
'1110', /* 1 */
|
||||
'1011', /* 2 */
|
||||
'0300', /* 3 */
|
||||
'0021', /* 4 */
|
||||
'0120', /* 5 */
|
||||
'0003', /* 6 */
|
||||
'0201', /* 7 */
|
||||
'0102', /* 8 */
|
||||
'2001' /* 9 */
|
||||
);
|
||||
$this->setText($text);
|
||||
$this->textfont = $textfont;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves Text
|
||||
*
|
||||
* @param string $text
|
||||
*/
|
||||
public function setText($text) {
|
||||
$this->text = $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the barcode
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
public function draw($im) {
|
||||
$error_stop = false;
|
||||
|
||||
// Checking if all chars are allowed
|
||||
for($i=0;$i<strlen($this->text);$i++) {
|
||||
if(!is_int(array_search($this->text[$i],$this->keys))) {
|
||||
$this->DrawError($im,'Char \''.$this->text[$i].'\' not allowed.');
|
||||
$error_stop = true;
|
||||
}
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// Must contains 7 chars
|
||||
if(strlen($this->text) != 7) {
|
||||
$this->DrawError($im,'Must contains 7 chars, the 8th digit is automatically added.');
|
||||
$error_stop = true;
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// Calculating Checksum
|
||||
// Consider the right-most digit of the message to be in an "odd" position,
|
||||
// and assign odd/even to each character moving from right to left
|
||||
// Odd Position = 3, Even Position = 1
|
||||
// Multiply it by the number
|
||||
// Add all of that and do 10-(?mod10)
|
||||
$odd = true;
|
||||
$checksum=0;
|
||||
for($i=strlen($this->text);$i>0;$i--) {
|
||||
if($odd==true) {
|
||||
$multiplier=3;
|
||||
$odd=false;
|
||||
}
|
||||
else {
|
||||
$multiplier=1;
|
||||
$odd=true;
|
||||
}
|
||||
$checksum += $this->keys[$this->text[$i - 1]] * $multiplier;
|
||||
}
|
||||
$checksum = 10 - $checksum % 10;
|
||||
$checksum = ($checksum == 10)?0:$checksum;
|
||||
$this->text .= $this->keys[$checksum];
|
||||
// Starting Code
|
||||
$this->DrawChar($im,'000',1);
|
||||
// Draw First 4 Chars (Left-Hand)
|
||||
for($i=0;$i<4;$i++)
|
||||
$this->DrawChar($im,$this->findCode($this->text[$i]),2);
|
||||
// Draw Center Guard Bar
|
||||
$this->DrawChar($im,'00000',2);
|
||||
// Draw Last 4 Chars (Right-Hand)
|
||||
for($i=4;$i<8;$i++)
|
||||
$this->DrawChar($im,$this->findCode($this->text[$i]),1);
|
||||
// Draw Right Guard Bar
|
||||
$this->DrawChar($im,'000',1);
|
||||
$this->lastX = $this->positionX;
|
||||
$this->lastY = $this->maxHeight;
|
||||
$this->DrawText($im);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Overloaded method for drawing special label
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
protected function DrawText($im) {
|
||||
if($this->textfont != 0) {
|
||||
$bar_color = (is_null($this->color1))?NULL:$this->color1->allocate($im);
|
||||
if(!is_null($bar_color)) {
|
||||
$rememberX = $this->positionX;
|
||||
$rememberH = $this->maxHeight;
|
||||
// We increase the bars
|
||||
$this->maxHeight = $this->maxHeight + 9;
|
||||
$this->positionX = 0;
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
$this->positionX += $this->res*2;
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
// Center Guard Bar
|
||||
$this->positionX += $this->res*30;
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
$this->positionX += $this->res*2;
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
// Last Bars
|
||||
$this->positionX += $this->res*30;
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
$this->positionX += $this->res*2;
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
|
||||
$this->positionX = $rememberX;
|
||||
$this->maxHeight = $rememberH;
|
||||
imagestring($im,$this->textfont,(3*$this->res+34*$this->res)/2-imagefontwidth($this->textfont)*(4/2),$this->maxHeight+1,substr($this->text,0,4),$bar_color);
|
||||
imagestring($im,$this->textfont,32*$this->res+(3*$this->res+32*$this->res)/2-imagefontwidth($this->textfont)*(4/2),$this->maxHeight+1,substr($this->text,4,4),$bar_color);
|
||||
}
|
||||
$this->lastY = $this->maxHeight + imagefontheight($this->textfont);
|
||||
}
|
||||
}
|
||||
};
|
||||
?>
|
||||
@@ -0,0 +1,121 @@
|
||||
<?php
|
||||
if(!defined('IN_CB'))die('You are not allowed to access to this page.');
|
||||
|
||||
/**
|
||||
* i25.php
|
||||
*--------------------------------------------------------------------
|
||||
*
|
||||
* Sub-Class - Interleaved 2 of 5
|
||||
*
|
||||
*--------------------------------------------------------------------
|
||||
* Revision History
|
||||
* V1.00 17 jun 2004 Jean-Sebastien Goupil
|
||||
*--------------------------------------------------------------------
|
||||
* Copyright (C) Jean-Sebastien Goupil
|
||||
* http://other.lookstrike.com/barcode/
|
||||
*/
|
||||
class i25 extends BarCode {
|
||||
protected $keys = array(), $code = array();
|
||||
protected $text;
|
||||
protected $textfont;
|
||||
private $checksum;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param int $maxHeight
|
||||
* @param FColor $color1
|
||||
* @param FColor $color2
|
||||
* @param int $res
|
||||
* @param string $text
|
||||
* @param int $textfont
|
||||
* @param bool $checksum
|
||||
*/
|
||||
public function __construct($maxHeight,FColor $color1,FColor $color2,$res,$text,$textfont,$checksum=false) {
|
||||
BarCode::__construct($maxHeight,$color1,$color2,$res);
|
||||
$this->keys = array('0','1','2','3','4','5','6','7','8','9');
|
||||
$this->code = array(
|
||||
'00110', /* 0 */
|
||||
'10001', /* 1 */
|
||||
'01001', /* 2 */
|
||||
'11000', /* 3 */
|
||||
'00101', /* 4 */
|
||||
'10100', /* 5 */
|
||||
'01100', /* 6 */
|
||||
'00011', /* 7 */
|
||||
'10010', /* 8 */
|
||||
'01010' /* 9 */
|
||||
);
|
||||
$this->setText($text);
|
||||
$this->textfont = $textfont;
|
||||
$this->checksum = $checksum;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves Text
|
||||
*
|
||||
* @param string $text
|
||||
*/
|
||||
public function setText($text) {
|
||||
$this->text = $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the barcode
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
public function draw($im) {
|
||||
$error_stop = false;
|
||||
|
||||
// Checking if all chars are allowed
|
||||
for($i=0;$i<strlen($this->text);$i++) {
|
||||
if(!is_int(array_search($this->text[$i],$this->keys))) {
|
||||
$this->DrawError($im,'Char \''.$this->text[$i].'\' not allowed.');
|
||||
$error_stop = true;
|
||||
}
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// Must be even
|
||||
if(strlen($this->text) % 2 != 0 && $this->checksum == false) {
|
||||
$this->DrawError($im,'i25 must be even if checksum is false.');
|
||||
$error_stop = true;
|
||||
}
|
||||
elseif(strlen($this->text) % 2 == 0 && $this->checksum == true) {
|
||||
$this->DrawError($im,'i25 must be odd if checksum is true.');
|
||||
$error_stop = true;
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// We calculate checksum first
|
||||
// Odd Number has a weight of 1, even number has a weight of 3
|
||||
// Multiply to position
|
||||
// Sum all of that and mod 10
|
||||
if($this->checksum == true) {
|
||||
$checksum = 0;
|
||||
for($i=1;$i<=strlen($this->text);$i++) {
|
||||
$multiplier = (intval($this->text[$i-1])%2!=0)?1:3;
|
||||
$checksum += $i*$multiplier;
|
||||
}
|
||||
$this->text .= $this->keys[$checksum%10];
|
||||
}
|
||||
// Starting Code
|
||||
$this->DrawChar($im,'0000',1);
|
||||
// Chars
|
||||
for($i=0;$i<strlen($this->text);$i+=2) {
|
||||
$temp_bar = '';
|
||||
for($j=0;$j<strlen($this->findCode($this->text[$i]));$j++) {
|
||||
$temp_bar .= substr($this->findCode($this->text[$i]),$j,1);
|
||||
$temp_bar .= substr($this->findCode($this->text[$i + 1]),$j,1);
|
||||
}
|
||||
$this->DrawChar($im,$temp_bar,1);
|
||||
}
|
||||
// Ending Code
|
||||
$this->DrawChar($im,'100',1);
|
||||
$this->lastX = $this->positionX;
|
||||
$this->lastY = $this->maxHeight;
|
||||
$this->DrawText($im);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
?>
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// index.php
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
// Holding Constant
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
// Revision History
|
||||
// V1.02 8 mar 2005 Jean-Sebastien Goupil Spreading all Classes in single file
|
||||
// V1.00 17 jun 2004 Jean-Sebastien Goupil
|
||||
//--------------------------------------------------------------------
|
||||
// Copyright (C) Jean-Sebastien Goupil
|
||||
// http://other.lookstrike.com/barcode/
|
||||
//--------------------------------------------------------------------
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
if(!defined('IN_CB'))die('You are not allowed to access to this page.');
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Constants
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
define('IMG_FORMAT_PNG', 1);
|
||||
define('IMG_FORMAT_JPEG', 2);
|
||||
define('IMG_FORMAT_WBMP', 4);
|
||||
define('IMG_FORMAT_GIF', 8);
|
||||
?>
|
||||
@@ -0,0 +1,127 @@
|
||||
<?php
|
||||
if(!defined('IN_CB'))die('You are not allowed to access to this page.');
|
||||
|
||||
/**
|
||||
* msi.php
|
||||
*--------------------------------------------------------------------
|
||||
*
|
||||
* Sub-Class - MSI Plessey
|
||||
*
|
||||
*--------------------------------------------------------------------
|
||||
* Revision History
|
||||
* V1.00 17 jun 2004 Jean-Sebastien Goupil
|
||||
*--------------------------------------------------------------------
|
||||
* Copyright (C) Jean-Sebastien Goupil
|
||||
* http://other.lookstrike.com/barcode/
|
||||
*/
|
||||
class msi extends BarCode {
|
||||
protected $keys = array(), $code = array();
|
||||
protected $text;
|
||||
protected $textfont;
|
||||
private $checksum;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param int $maxHeight
|
||||
* @param FColor $color1
|
||||
* @param FColor $color2
|
||||
* @param int $res
|
||||
* @param string $text
|
||||
* @param int $textfont
|
||||
* @param int $checksum
|
||||
*/
|
||||
public function __construct($maxHeight,FColor $color1,FColor $color2,$res,$text,$textfont,$checksum=0) {
|
||||
BarCode::__construct($maxHeight,$color1,$color2,$res);
|
||||
$this->keys = array('0','1','2','3','4','5','6','7','8','9');
|
||||
$this->code = array(
|
||||
'01010101', /* 0 */
|
||||
'01010110', /* 1 */
|
||||
'01011001', /* 2 */
|
||||
'01011010', /* 3 */
|
||||
'01100101', /* 4 */
|
||||
'01100110', /* 5 */
|
||||
'01101001', /* 6 */
|
||||
'01101010', /* 7 */
|
||||
'10010101', /* 8 */
|
||||
'10010110' /* 9 */
|
||||
);
|
||||
$this->setText($text);
|
||||
$this->textfont = $textfont;
|
||||
$this->checksum = $checksum;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves Text
|
||||
*
|
||||
* @param string $text
|
||||
*/
|
||||
public function setText($text) {
|
||||
$this->text = $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the barcode
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
public function draw($im) {
|
||||
$error_stop = false;
|
||||
|
||||
// Checking if all chars are allowed
|
||||
for($i=0;$i<strlen($this->text);$i++) {
|
||||
if(!is_int(array_search($this->text[$i],$this->keys))) {
|
||||
$this->DrawError($im,'Char \''.$this->text[$i].'\' not allowed.');
|
||||
$error_stop = true;
|
||||
}
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// We calculate checksum first
|
||||
// Forming a new number
|
||||
// If the original number is even, we take all even position
|
||||
// If the original number is odd, we take all odd position
|
||||
// 123456 = 246
|
||||
// 12345 = 135
|
||||
// Multiply by 2
|
||||
// Add up all the digit in the result (270 : 2+7+0)
|
||||
// Add up other digit not used.
|
||||
// 10 - (? Modulo 10). If result = 10, change to 0
|
||||
$last_checksum = $this->checksum;
|
||||
$last_text = $this->text;
|
||||
$checksum = array();
|
||||
for($i=0;$i<$last_checksum;$i++){
|
||||
$new_text = '';
|
||||
$new_number = 0;
|
||||
if(strlen($last_text) % 2 == 0) // Even
|
||||
$starting = 1;
|
||||
else
|
||||
$starting = 0;
|
||||
for($j=$starting;$j<strlen($last_text);$j+=2)
|
||||
$new_text .= $last_text[$j];
|
||||
$new_text = strval(intval($new_text)*2);
|
||||
for($j=0;$j<strlen($new_text);$j++)
|
||||
$new_number += intval($new_text[$j]);
|
||||
for($j=($starting==0)?1:0;$j<strlen($last_text);$j+=2){
|
||||
$new_number += intval($last_text[$j]);
|
||||
}
|
||||
$new_number = 10 - $new_number % 10;
|
||||
$new_number = ($new_number == 10)?0:$new_number;
|
||||
$checksum[] = $new_number;
|
||||
$last_text .= $new_number;
|
||||
}
|
||||
// Starting Code
|
||||
$this->DrawChar($im,'10',1);
|
||||
// Chars
|
||||
for($i=0;$i<strlen($this->text);$i++)
|
||||
$this->DrawChar($im,$this->findCode($this->text[$i]),1);
|
||||
for($i=0;$i<count($checksum);$i++)
|
||||
$this->DrawChar($im,$this->findCode($checksum[$i]),1);
|
||||
// Ending Code
|
||||
$this->DrawChar($im,'010',1);
|
||||
$this->lastX = $this->positionX;
|
||||
$this->lastY = $this->maxHeight;
|
||||
$this->DrawText($im);
|
||||
}
|
||||
}
|
||||
};
|
||||
?>
|
||||
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
if(!defined('IN_CB'))die('You are not allowed to access to this page.');
|
||||
|
||||
/**
|
||||
* othercode.php
|
||||
*--------------------------------------------------------------------
|
||||
*
|
||||
* Sub-Class - othercode
|
||||
*
|
||||
* Other Codes
|
||||
* Starting with a bar and altern to space, bar, ...
|
||||
* 0 is the smallest
|
||||
*
|
||||
*--------------------------------------------------------------------
|
||||
* Revision History
|
||||
* V1.00 17 jun 2004 Jean-Sebastien Goupil
|
||||
*--------------------------------------------------------------------
|
||||
* Copyright (C) Jean-Sebastien Goupil
|
||||
* http://other.lookstrike.com/barcode/
|
||||
*/
|
||||
class othercode extends BarCode {
|
||||
protected $text;
|
||||
protected $textfont;
|
||||
private $a1;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param int $maxHeight
|
||||
* @param FColor $color1
|
||||
* @param FColor $color2
|
||||
* @param int $res
|
||||
* @param string $text
|
||||
* @param int $textfont
|
||||
* @param string $a1
|
||||
*/
|
||||
public function __construct($maxHeight,FColor $color1,FColor $color2,$res,$text,$textfont,$a1='') {
|
||||
BarCode::__construct($maxHeight,$color1,$color2,$res);
|
||||
$this->setText($text);
|
||||
$this->textfont = $textfont;
|
||||
$this->a1 = $a1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves Text
|
||||
*
|
||||
* @param string $text
|
||||
*/
|
||||
public function setText($text) {
|
||||
$this->text = $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the barcode
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
public function draw($im) {
|
||||
$this->DrawChar($im,$this->text,1);
|
||||
$this->lastX = $this->positionX;
|
||||
$this->lastY = $this->maxHeight;
|
||||
$this->DrawText($im);
|
||||
}
|
||||
|
||||
/**
|
||||
* Overloaded method for drawing special label
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
protected function DrawText($im) {
|
||||
if($this->textfont != 0 && $this->a1!='') {
|
||||
$bar_color = (is_null($this->color1))?NULL:$this->color1->allocate($im);
|
||||
if(!is_null($bar_color)) {
|
||||
$xPosition = ($this->positionX / 2) - (strlen($this->a1)/2)*imagefontwidth($this->textfont);
|
||||
$text_color = (is_null($this->color1))?NULL:$this->color1->allocate($im);
|
||||
imagestring($im,$this->textfont,$xPosition,$this->maxHeight,$this->a1,$text_color);
|
||||
}
|
||||
$this->lastY = $this->maxHeight + imagefontheight($this->textfont);
|
||||
}
|
||||
}
|
||||
};
|
||||
?>
|
||||
@@ -0,0 +1,139 @@
|
||||
<?php
|
||||
if(!defined('IN_CB'))die('You are not allowed to access to this page.');
|
||||
|
||||
/**
|
||||
* postnet.php
|
||||
*--------------------------------------------------------------------
|
||||
*
|
||||
* Sub-Class - PostNet
|
||||
*
|
||||
* ################ NOT TESTED ################
|
||||
*
|
||||
*--------------------------------------------------------------------
|
||||
* Revision History
|
||||
* V1.00 17 jun 2004 Jean-Sebastien Goupil
|
||||
*--------------------------------------------------------------------
|
||||
* Copyright (C) Jean-Sebastien Goupil
|
||||
* http://other.lookstrike.com/barcode/
|
||||
*/
|
||||
class postnet extends BarCode {
|
||||
protected $keys = array(), $code = array();
|
||||
private $starting, $ending;
|
||||
protected $text;
|
||||
protected $textfont;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param int $maxHeight
|
||||
* @param FColor $color1
|
||||
* @param FColor $color2
|
||||
* @param int $res
|
||||
* @param string $text
|
||||
* @param int $textfont
|
||||
*/
|
||||
public function __construct($maxHeight,FColor $color1,FColor $color2,$res,$text,$textfont) {
|
||||
BarCode::__construct($maxHeight,$color1,$color2,$res);
|
||||
$this->keys = array('0','1','2','3','4','5','6','7','8','9');
|
||||
$this->code = array(
|
||||
'11000', /* 0 */
|
||||
'00011', /* 1 */
|
||||
'00101', /* 2 */
|
||||
'00110', /* 3 */
|
||||
'01001', /* 4 */
|
||||
'01010', /* 5 */
|
||||
'01100', /* 6 */
|
||||
'10001', /* 7 */
|
||||
'10010', /* 8 */
|
||||
'10100' /* 9 */
|
||||
);
|
||||
$this->setText($text);
|
||||
$this->textfont = $textfont;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves Text
|
||||
*
|
||||
* @param string $text
|
||||
*/
|
||||
public function setText($text){
|
||||
$this->text = $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the barcode
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
public function draw($im) {
|
||||
$error_stop = false;
|
||||
|
||||
// Checking if all chars are allowed
|
||||
for($i=0;$i<strlen($this->text);$i++) {
|
||||
if(!is_int(array_search($this->text[$i],$this->keys))) {
|
||||
$this->DrawError($im,'Char \''.$this->text[$i].'\' not allowed.');
|
||||
$error_stop = true;
|
||||
}
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// Must contains 5, 9 or 11 chars
|
||||
if(strlen($this->text) != 5 && strlen($this->text) != 9 && strlen($this->text) != 11) {
|
||||
$this->DrawError($im,'Must contains 5, 9 or 11 chars.');
|
||||
$error_stop = true;
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// Checksum
|
||||
$checksum = 0;
|
||||
for($i=0;$i<strlen($this->text);$i++)
|
||||
$checksum += intval($this->text[$i]);
|
||||
$checksum = 10-($checksum % 10);
|
||||
|
||||
// Starting Code
|
||||
$this->DrawChar($im,'1',0);
|
||||
// Code
|
||||
for($i=0;$i<strlen($this->text);$i++)
|
||||
$this->DrawChar($im,$this->findCode($this->text[$i]),0);
|
||||
// Checksum
|
||||
$this->DrawChar($im,$this->findCode($checksum),0);
|
||||
//Ending Code
|
||||
$this->DrawChar($im,'1',1);
|
||||
$this->lastX = $this->positionX;
|
||||
$this->lastY = $this->maxHeight;
|
||||
$this->DrawText($im);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Overloaded method for drawing special barcode
|
||||
*
|
||||
* @param ressource $im
|
||||
* @param string $code
|
||||
* @param int $last
|
||||
*/
|
||||
protected function DrawChar($im,$code,$last=0) {
|
||||
$first_posY = $this->positionY;
|
||||
$bar_color = (is_null($this->color1))?NULL:$this->color1->allocate($im);
|
||||
if(!is_null($bar_color)){
|
||||
for($i=0;$i<strlen($code);$i++){
|
||||
if($code[$i] == '0') {
|
||||
$this->positionY = ($first_posY+$this->maxHeight)/2;
|
||||
$height = $this->positionY+($first_posY+$this->maxHeight)/2;
|
||||
}
|
||||
else {
|
||||
$this->positionY = $first_posY;
|
||||
$height = $first_posY+$this->maxHeight;
|
||||
}
|
||||
|
||||
for($j=0;$j<$this->res;$j++)
|
||||
for($z=0;$z<$this->res;$z++)
|
||||
imageline($im,$this->positionX+$j+$z,$this->positionY,$this->positionX+$j+$z,$height,$bar_color);
|
||||
|
||||
for($j=0;$j<(2*$this->res);$j++)
|
||||
$this->nextX();
|
||||
}
|
||||
$this->positionY = $first_posY;
|
||||
}
|
||||
}
|
||||
};
|
||||
?>
|
||||
@@ -0,0 +1,117 @@
|
||||
<?php
|
||||
if(!defined('IN_CB'))die('You are not allowed to access to this page.');
|
||||
|
||||
/**
|
||||
* s25.php
|
||||
*--------------------------------------------------------------------
|
||||
*
|
||||
* Sub-Class - Standard 2 of 5
|
||||
*
|
||||
* NOTE: It is really tough to read this barcode !
|
||||
*
|
||||
*--------------------------------------------------------------------
|
||||
* Revision History
|
||||
* V1.00 17 jun 2004 Jean-Sebastien Goupil
|
||||
*--------------------------------------------------------------------
|
||||
* Copyright (C) Jean-Sebastien Goupil
|
||||
* http://other.lookstrike.com/barcode/
|
||||
*/
|
||||
class s25 extends BarCode {
|
||||
protected $keys = array(), $code = array();
|
||||
protected $text;
|
||||
protected $textfont;
|
||||
private $checksum;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param int $maxHeight
|
||||
* @param FColor $color1
|
||||
* @param FColor $color2
|
||||
* @param int $res
|
||||
* @param string $text
|
||||
* @param int $textfont
|
||||
* @param bool $checksum
|
||||
*/
|
||||
public function __construct($maxHeight,FColor $color1,FColor $color2,$res,$text,$textfont,$checksum=false) {
|
||||
BarCode::__construct($maxHeight,$color1,$color2,$res);
|
||||
$this->keys = array('0','1','2','3','4','5','6','7','8','9');
|
||||
$this->code = array(
|
||||
'0000202000', /* 0 */
|
||||
'2000000020', /* 1 */
|
||||
'0020000020', /* 2 */
|
||||
'2020000000', /* 3 */
|
||||
'0000200020', /* 4 */
|
||||
'2000200000', /* 5 */
|
||||
'0020200000', /* 6 */
|
||||
'0000002020', /* 7 */
|
||||
'2000002000', /* 8 */
|
||||
'0020002000' /* 9 */
|
||||
);
|
||||
$this->setText($text);
|
||||
$this->textfont = $textfont;
|
||||
$this->checksum = $checksum;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves Text
|
||||
*
|
||||
* @param string $text
|
||||
*/
|
||||
public function setText($text) {
|
||||
$this->text = $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the barcode
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
public function draw($im) {
|
||||
$error_stop = false;
|
||||
|
||||
// Checking if all chars are allowed
|
||||
for($i=0;$i<strlen($this->text);$i++) {
|
||||
if(!is_int(array_search($this->text[$i],$this->keys))) {
|
||||
$this->DrawError($im,'Char \''.$this->text[$i].'\' not allowed.');
|
||||
$error_stop = true;
|
||||
}
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// Must be even
|
||||
if(strlen($this->text) % 2 != 0 && $this->checksum == false) {
|
||||
$this->DrawError($im,'s25 must be even if checksum is false.');
|
||||
$error_stop = true;
|
||||
}
|
||||
elseif(strlen($this->text) % 2 == 0 && $this->checksum == true) {
|
||||
$this->DrawError($im,'s25 must be odd if checksum is true.');
|
||||
$error_stop = true;
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// We calculate checksum first
|
||||
// Odd Position has a weight of 1, Even Position has a weight of 3
|
||||
// Multiply to position
|
||||
// Sum all of that and mod 10
|
||||
if($this->checksum == true) {
|
||||
$checksum = 0;
|
||||
for($i=1;$i<=strlen($this->text);$i++) {
|
||||
$multiplier = (($i-1) % 2 != 0)?1:3;
|
||||
$checksum += $i*$multiplier;
|
||||
}
|
||||
$this->text .= $this->keys[$checksum % 10];
|
||||
}
|
||||
// Starting Code
|
||||
$this->DrawChar($im,'101000',1);
|
||||
// Chars
|
||||
for($i=0;$i<strlen($this->text);$i++)
|
||||
$this->DrawChar($im,$this->findCode($this->text[$i]),1);
|
||||
// Ending Code
|
||||
$this->DrawChar($im,'10001',1);
|
||||
$this->lastX = $this->positionX;
|
||||
$this->lastY = $this->maxHeight;
|
||||
$this->DrawText($im);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
?>
|
||||
@@ -0,0 +1,212 @@
|
||||
<?php
|
||||
if(!defined('IN_CB'))die('You are not allowed to access to this page.');
|
||||
|
||||
/**
|
||||
* upca.php
|
||||
*--------------------------------------------------------------------
|
||||
*
|
||||
* Sub-Class - UPC-A
|
||||
*
|
||||
* UPC-A contains
|
||||
* - 2 system digits (1 not provided, a 0 is added automatically)
|
||||
* - 5 manufacturer code digits
|
||||
* - 5 product digits
|
||||
* - 1 checksum digit
|
||||
*
|
||||
*--------------------------------------------------------------------
|
||||
* Revision History
|
||||
* V1.00 17 jun 2004 Jean-Sebastien Goupil
|
||||
*--------------------------------------------------------------------
|
||||
* Copyright (C) Jean-Sebastien Goupil
|
||||
* http://other.lookstrike.com/barcode/
|
||||
*/
|
||||
class upca extends BarCode {
|
||||
protected $keys = array(), $code = array(), $codeParity = array();
|
||||
protected $text;
|
||||
protected $textfont;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param int $maxHeight
|
||||
* @param FColor $color1
|
||||
* @param FColor $color2
|
||||
* @param int $res
|
||||
* @param string $text
|
||||
* @param int $textfont
|
||||
*/
|
||||
public function __construct($maxHeight,FColor $color1,FColor $color2,$res,$text,$textfont) {
|
||||
BarCode::__construct($maxHeight,$color1,$color2,$res);
|
||||
$this->keys = array('0','1','2','3','4','5','6','7','8','9');
|
||||
// Left-Hand Odd Parity starting with a space
|
||||
// Left-Hand Even Parity is the inverse (0=0012) starting with a space
|
||||
// Right-Hand is the same of Left-Hand starting with a bar
|
||||
$this->code = array(
|
||||
'2100', /* 0 */
|
||||
'1110', /* 1 */
|
||||
'1011', /* 2 */
|
||||
'0300', /* 3 */
|
||||
'0021', /* 4 */
|
||||
'0120', /* 5 */
|
||||
'0003', /* 6 */
|
||||
'0201', /* 7 */
|
||||
'0102', /* 8 */
|
||||
'2001' /* 9 */
|
||||
);
|
||||
// Parity, 0=Odd, 1=Even for manufacturer code. Depending on 1st System Digit
|
||||
$this->codeParity = array(
|
||||
array(0,0,0,0,0), /* 0 */
|
||||
array(0,1,0,1,1), /* 1 */
|
||||
array(0,1,1,0,1), /* 2 */
|
||||
array(0,1,1,1,0), /* 3 */
|
||||
array(1,0,0,1,1), /* 4 */
|
||||
array(1,1,0,0,1), /* 5 */
|
||||
array(1,1,1,0,0), /* 6 */
|
||||
array(1,0,1,0,1), /* 7 */
|
||||
array(1,0,1,1,0), /* 8 */
|
||||
array(1,1,0,1,0) /* 9 */
|
||||
);
|
||||
$this->setText($text);
|
||||
$this->textfont = $textfont;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves Text
|
||||
*
|
||||
* @param string $text
|
||||
*/
|
||||
public function setText($text) {
|
||||
$this->text = $text;
|
||||
}
|
||||
|
||||
private function inverse($text,$inverse=1) {
|
||||
if($inverse == 1)
|
||||
$text = strrev($text);
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the barcode
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
public function draw($im) {
|
||||
$error_stop = false;
|
||||
|
||||
// Checking if all chars are allowed
|
||||
for($i=0;$i<strlen($this->text);$i++) {
|
||||
if(!is_int(array_search($this->text[$i],$this->keys))) {
|
||||
$this->DrawError($im,'Char \''.$this->text[$i].'\' not allowed.');
|
||||
$error_stop = true;
|
||||
}
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// Must contains 11 chars
|
||||
if(strlen($this->text) != 11) {
|
||||
$this->DrawError($im,'Must contains 11 chars, the 12th digit is automatically added.');
|
||||
$error_stop = true;
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// The following code is exactly the same as EAN13. We just add a 0 in front of the code !
|
||||
$this->text = '0'.$this->text;
|
||||
|
||||
// Calculating Checksum
|
||||
// Consider the right-most digit of the message to be in an "odd" position,
|
||||
// and assign odd/even to each character moving from right to left
|
||||
// Odd Position = 3, Even Position = 1
|
||||
// Multiply it by the number
|
||||
// Add all of that and do 10-(?mod10)
|
||||
$odd = true;
|
||||
$checksum=0;
|
||||
for($i=strlen($this->text);$i>0;$i--) {
|
||||
if($odd==true) {
|
||||
$multiplier=3;
|
||||
$odd=false;
|
||||
}
|
||||
else {
|
||||
$multiplier=1;
|
||||
$odd=true;
|
||||
}
|
||||
$checksum += $this->keys[$this->text[$i - 1]] * $multiplier;
|
||||
}
|
||||
$checksum = 10 - $checksum % 10;
|
||||
$checksum = ($checksum == 10)?0:$checksum;
|
||||
$this->text .= $this->keys[$checksum];
|
||||
// If we have to write text, we move the barcode to the right to have space to put system digit
|
||||
$this->positionX = ($this->textfont == 0)?0:10;
|
||||
// Starting Code
|
||||
$this->DrawChar($im,'000',1);
|
||||
// Draw Second Code
|
||||
$this->DrawChar($im,$this->findCode($this->text[1]),2);
|
||||
// Draw Manufacturer Code
|
||||
for($i=0;$i<5;$i++)
|
||||
$this->DrawChar($im,$this->inverse($this->findCode($this->text[$i + 2]),$this->codeParity[$this->text[0]][$i]),2);
|
||||
// Draw Center Guard Bar
|
||||
$this->DrawChar($im,'00000',2);
|
||||
// Draw Product Code
|
||||
for($i=7;$i<13;$i++)
|
||||
$this->DrawChar($im,$this->findCode($this->text[$i]),1);
|
||||
// Draw Right Guard Bar
|
||||
$this->DrawChar($im,'000',1);
|
||||
$this->lastX = $this->positionX;
|
||||
$this->lastY = $this->maxHeight;
|
||||
$this->DrawText($im);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Overloaded method for drawing special label
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
protected function DrawText($im) {
|
||||
if($this->textfont != 0) {
|
||||
$bar_color = (is_null($this->color1))?NULL:$this->color1->allocate($im);
|
||||
if(!is_null($bar_color)) {
|
||||
$rememberX = $this->positionX;
|
||||
$rememberH = $this->maxHeight;
|
||||
// We increase the bars
|
||||
|
||||
// First 2 Bars
|
||||
$this->maxHeight = $this->maxHeight + 9;
|
||||
$this->positionX = 10;
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
$this->positionX += $this->res*2;
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
|
||||
// Attemping to increase the 2 following bars
|
||||
$this->positionX += $this->res;
|
||||
$temp_value = $this->findCode($this->text[1]);
|
||||
$this->DrawChar($im,$temp_value,2);
|
||||
|
||||
// Center Guard Bar
|
||||
$this->positionX += $this->res*38;
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
$this->positionX += $this->res*2;
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
|
||||
// Attemping to increase the 2 last bars
|
||||
$this->positionX += $this->res*35;
|
||||
$temp_value = $this->findCode($this->text[12]);
|
||||
$this->DrawChar($im,$temp_value,1);
|
||||
|
||||
// Completly last bars
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
$this->positionX += $this->res*2;
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
|
||||
|
||||
$this->positionX = $rememberX;
|
||||
$this->maxHeight = $rememberH;
|
||||
imagechar($im,$this->textfont,1,$this->maxHeight-(imagefontheight($this->textfont)/2),$this->text[1],$bar_color);
|
||||
imagestring($im,$this->textfont,10+(10*$this->res+48*$this->res)/2-imagefontwidth($this->textfont)*(5/2),$this->maxHeight+1,substr($this->text,2,5),$bar_color);
|
||||
imagestring($im,$this->textfont,10+46*$this->res+(3*$this->res+42*$this->res)/2-imagefontwidth($this->textfont)*(5/2),$this->maxHeight+1,substr($this->text,7,5),$bar_color);
|
||||
imagechar($im,$this->textfont,1+10+(46+48+3)*$this->res,$this->maxHeight-(imagefontheight($this->textfont)/2),$this->text[12],$bar_color);
|
||||
}
|
||||
$this->lastY = $this->maxHeight + imagefontheight($this->textfont);
|
||||
$this->lastX += 2+imagefontwidth($this->textfont);
|
||||
}
|
||||
}
|
||||
};
|
||||
?>
|
||||
@@ -0,0 +1,259 @@
|
||||
<?php
|
||||
if(!defined('IN_CB'))die('You are not allowed to access to this page.');
|
||||
|
||||
/**
|
||||
* upce.php
|
||||
*--------------------------------------------------------------------
|
||||
*
|
||||
* Sub-Class - UPC-E
|
||||
*
|
||||
* You can provide a UPC-A code (without dash), the code will transform
|
||||
* it into a UPC-E format if it's possible.
|
||||
* UPC-E contains
|
||||
* - 1 system digits (not displayed but coded with parity)
|
||||
* - 6 digits
|
||||
* - 1 checksum digit (not displayed but coded with parity)
|
||||
*
|
||||
*--------------------------------------------------------------------
|
||||
* Revision History
|
||||
* V1.00 17 jun 2004 Jean-Sebastien Goupil
|
||||
*--------------------------------------------------------------------
|
||||
* Copyright (C) Jean-Sebastien Goupil
|
||||
* http://other.lookstrike.com/barcode/
|
||||
*/
|
||||
class upce extends BarCode {
|
||||
protected $keys = array(), $code = array(), $codeParity = array();
|
||||
protected $text;
|
||||
protected $textfont;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param int $maxHeight
|
||||
* @param FColor $color1
|
||||
* @param FColor $color2
|
||||
* @param int $res
|
||||
* @param string $text
|
||||
* @param int $textfont
|
||||
*/
|
||||
public function __construct($maxHeight,FColor $color1,FColor $color2,$res,$text,$textfont) {
|
||||
BarCode::__construct($maxHeight,$color1,$color2,$res);
|
||||
$this->keys = array('0','1','2','3','4','5','6','7','8','9');
|
||||
// Odd Parity starting with a space
|
||||
// Even Parity is the inverse (0=0012) starting with a space
|
||||
$this->code = array(
|
||||
'2100', /* 0 */
|
||||
'1110', /* 1 */
|
||||
'1011', /* 2 */
|
||||
'0300', /* 3 */
|
||||
'0021', /* 4 */
|
||||
'0120', /* 5 */
|
||||
'0003', /* 6 */
|
||||
'0201', /* 7 */
|
||||
'0102', /* 8 */
|
||||
'2001' /* 9 */
|
||||
);
|
||||
// Parity, 0=Odd, 1=Even for manufacturer code. Depending on 1st System Digit and Checksum
|
||||
$this->codeParity = array(
|
||||
array(
|
||||
array(1,1,1,0,0,0), /* 0,0 */
|
||||
array(1,1,0,1,0,0), /* 0,1 */
|
||||
array(1,1,0,0,1,0), /* 0,2 */
|
||||
array(1,1,0,0,0,1), /* 0,3 */
|
||||
array(1,0,1,1,0,0), /* 0,4 */
|
||||
array(1,0,0,1,1,0), /* 0,5 */
|
||||
array(1,0,0,0,1,1), /* 0,6 */
|
||||
array(1,0,1,0,1,0), /* 0,7 */
|
||||
array(1,0,1,0,0,1), /* 0,8 */
|
||||
array(1,0,0,1,0,1) /* 0,9 */
|
||||
),
|
||||
array(
|
||||
array(0,0,0,1,1,1), /* 0,0 */
|
||||
array(0,0,1,0,1,1), /* 0,1 */
|
||||
array(0,0,1,1,0,1), /* 0,2 */
|
||||
array(0,0,1,1,1,0), /* 0,3 */
|
||||
array(0,1,0,0,1,1), /* 0,4 */
|
||||
array(0,1,1,0,0,1), /* 0,5 */
|
||||
array(0,1,1,1,0,0), /* 0,6 */
|
||||
array(0,1,0,1,0,1), /* 0,7 */
|
||||
array(0,1,0,1,1,0), /* 0,8 */
|
||||
array(0,1,1,0,1,0) /* 0,9 */
|
||||
)
|
||||
);
|
||||
$this->setText($text);
|
||||
$this->textfont = $textfont;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves Text
|
||||
*
|
||||
* @param string $text
|
||||
*/
|
||||
public function setText($text) {
|
||||
$this->text = $text;
|
||||
}
|
||||
|
||||
private function inverse($text,$inverse=1) {
|
||||
if($inverse==true)
|
||||
$text = strrev($text);
|
||||
return $text;
|
||||
}
|
||||
|
||||
private function checksum($text) {
|
||||
$odd = true;
|
||||
$checksum=0;
|
||||
for($i=strlen($this->text);$i>0;$i--) {
|
||||
if($odd==true){
|
||||
$multiplier=3;
|
||||
$odd=false;
|
||||
}
|
||||
else{
|
||||
$multiplier=1;
|
||||
$odd=true;
|
||||
}
|
||||
$checksum += $this->keys[$this->text[$i - 1]] * $multiplier;
|
||||
}
|
||||
$checksum = 10 - $checksum % 10;
|
||||
$checksum = ($checksum == 10)?0:$checksum;
|
||||
return $checksum;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the barcode
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
public function draw($im) {
|
||||
$error_stop = false;
|
||||
|
||||
// Checking if all chars are allowed
|
||||
for($i=0;$i<strlen($this->text);$i++) {
|
||||
if(!is_int(array_search($this->text[$i],$this->keys))) {
|
||||
$this->DrawError($im,'Char \''.$this->text[$i].'\' not allowed.');
|
||||
$error_stop = true;
|
||||
}
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// Must contains 11 chars
|
||||
// Must contains 8 chars (if starting with upce directly)
|
||||
// First Chars must be 0 or 1
|
||||
if(strlen($this->text) != 11 && strlen($this->text) != 6) {
|
||||
$this->DrawError($im,'Provide an UPC-A (11 chars) or');
|
||||
$this->DrawError($im,'You can also provide UPC-E directly (6 chars).');
|
||||
$error_stop = true;
|
||||
}
|
||||
elseif($this->text[0] != '0' && $this->text[0] != '1' && strlen($this->text) != 6) {
|
||||
$this->DrawError($im,'Must starts with 0 or 1.');
|
||||
$error_stop = true;
|
||||
}
|
||||
|
||||
if($error_stop == false) {
|
||||
if(strlen($this->text) != 6) {
|
||||
// Checking if UPC-A is convertible
|
||||
$upce = '';
|
||||
if(substr($this->text,3,3) == '000' || substr($this->text,3,3) == '100' || substr($this->text,3,3) == '200') { // manufacturer code ends with 100,200 or 300
|
||||
if(substr($this->text,6,2) == '00') // Product must start with 00
|
||||
$upce = substr($this->text,1,2).substr($this->text,8,3).substr($this->text,3,1);
|
||||
else
|
||||
$error_stop = true;
|
||||
}
|
||||
elseif(substr($this->text,4,2) == '00') { // manufacturer code ends with 00
|
||||
if(substr($this->text,6,3) == '000') // Product must start with 000
|
||||
$upce = substr($this->text,1,3).substr($this->text,9,2).'3';
|
||||
else
|
||||
$error_stop = true;
|
||||
}
|
||||
elseif(substr($this->text,5,1) == '0') { // manufacturer code ends with 0
|
||||
if(substr($this->text,6,4) == '0000') // Product must start with 0000
|
||||
$upce = substr($this->text,1,4).substr($this->text,10,1).'4';
|
||||
else
|
||||
$error_stop = true;
|
||||
}
|
||||
else{ // No zero leading at manufacturer code
|
||||
if(substr($this->text,6,4) == '0000' && intval(substr($this->text,10,1)) >= 5 && intval(substr($this->text,10,1)) <= 9) // Product must start with 0000 and must over by 5,6,7,8 or 9
|
||||
$upce = substr($this->text,1,5).substr($this->text,10,1);
|
||||
else
|
||||
$error_stop = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
$upce = $this->text;
|
||||
|
||||
if($error_stop == false) {
|
||||
// Calculating Checksum
|
||||
// Consider the right-most digit of the message to be in an "odd" position,
|
||||
// and assign odd/even to each character moving from right to left
|
||||
// Odd Position = 3, Even Position = 1
|
||||
// Multiply it by the number
|
||||
// Add all of that and do 10-(?mod10)
|
||||
if(strlen($this->text) != 6)
|
||||
$checksum = $this->checksum($this->text);
|
||||
else {
|
||||
// We convert UPC-E to UPC-A to find the checksum
|
||||
if($this->text[5] == '0' || $this->text[5] == '1' || $this->text[5] == '2')
|
||||
$upca = substr($this->text,0,2).$this->text[5].'0000'.substr($this->text,2,3);
|
||||
elseif($this->text[5] == '3')
|
||||
$upca = substr($this->text,0,3).'00000'.substr($this->text,3,2);
|
||||
elseif($this->text[5] == '4')
|
||||
$upca = substr($this->text,0,4).'00000'.$this->text[4];
|
||||
else
|
||||
$upca = substr($this->text,0,5).'0000'.$this->text[5];
|
||||
$this->text = '0'.$upca;
|
||||
$checksum = $this->checksum($this->text);
|
||||
}
|
||||
// If we have to write text, we move the barcode to the right to have space to put system digit
|
||||
$this->positionX = ($this->textfont == 0)?0:10;
|
||||
// Starting Code
|
||||
$this->DrawChar($im,'000',1);
|
||||
for($i=0;$i<strlen($upce);$i++)
|
||||
$this->DrawChar($im,$this->inverse($this->findCode($upce[$i]),$this->codeParity[$this->text[0]][$checksum][$i]),2);
|
||||
// Draw Center Guard Bar
|
||||
$this->DrawChar($im,'00000',2);
|
||||
// Draw Right Bar
|
||||
$this->DrawChar($im,'0',1);
|
||||
$this->lastX = $this->positionX;
|
||||
$this->lastY = $this->maxHeight;
|
||||
$this->text = $this->text[0].$upce.$checksum;
|
||||
$this->DrawText($im);
|
||||
}
|
||||
else
|
||||
$this->DrawError($im,'Your UPC-A can\'t be converted to UPC-E.');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Overloaded method for drawing special label
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
protected function DrawText($im) {
|
||||
if($this->textfont != 0) {
|
||||
$bar_color = (is_null($this->color1))?NULL:$this->color1->allocate($im);
|
||||
if(!is_null($bar_color)) {
|
||||
$rememberX = $this->positionX;
|
||||
$rememberH = $this->maxHeight;
|
||||
// We increase the bars
|
||||
$this->maxHeight = $this->maxHeight + 9;
|
||||
$this->positionX = 10;
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
$this->positionX += $this->res*2;
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
// Last Bars
|
||||
$this->positionX += $this->res*46;
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
$this->positionX += $this->res*2;
|
||||
$this->DrawSingleBar($im,$this->color1);
|
||||
|
||||
$this->positionX = $rememberX;
|
||||
$this->maxHeight = $rememberH;
|
||||
imagechar($im,$this->textfont,1,$this->maxHeight-(imagefontheight($this->textfont)/2),$this->text[0],$bar_color);
|
||||
imagestring($im,$this->textfont,10+(4*$this->res+48*$this->res)/2-imagefontwidth($this->textfont)*(6/2),$this->maxHeight+1,substr($this->text,1,6),$bar_color);
|
||||
imagechar($im,$this->textfont,2+10+(48+4)*$this->res,$this->maxHeight-(imagefontheight($this->textfont)/2),$this->text[7],$bar_color);
|
||||
}
|
||||
$this->lastY = $this->maxHeight + imagefontheight($this->textfont);
|
||||
$this->lastX += 2 + imagefontwidth($this->textfont);
|
||||
}
|
||||
}
|
||||
};
|
||||
?>
|
||||
@@ -0,0 +1,131 @@
|
||||
<?php
|
||||
if(!defined('IN_CB'))die('You are not allowed to access to this page.');
|
||||
|
||||
/**
|
||||
* upcext2.php
|
||||
*--------------------------------------------------------------------
|
||||
*
|
||||
* Sub-Class - UPC Supplemental Barcode 2 digits
|
||||
*
|
||||
* Working with UPC-A, UPC-E, EAN-13, EAN-8
|
||||
* This includes 2 digits (normaly for publications)
|
||||
* Must be placed next to UPC or EAN Code
|
||||
*
|
||||
*--------------------------------------------------------------------
|
||||
* Revision History
|
||||
* V1.00 17 jun 2004 Jean-Sebastien Goupil
|
||||
*--------------------------------------------------------------------
|
||||
* Copyright (C) Jean-Sebastien Goupil
|
||||
* http://other.lookstrike.com/barcode/
|
||||
*/
|
||||
class upcext2 extends BarCode {
|
||||
protected $keys = array(), $code = array(), $codeParity = array();
|
||||
private $starting, $ending;
|
||||
protected $text;
|
||||
protected $textfont;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param int $maxHeight
|
||||
* @param FColor $color1
|
||||
* @param FColor $color2
|
||||
* @param int $res
|
||||
* @param string $text
|
||||
* @param int $textfont
|
||||
*/
|
||||
public function __construct($maxHeight,FColor $color1,FColor $color2,$res,$text,$textfont) {
|
||||
BarCode::__construct($maxHeight,$color1,$color2,$res);
|
||||
$this->keys = array('0','1','2','3','4','5','6','7','8','9');
|
||||
$this->code = array(
|
||||
'2100', /* 0 */
|
||||
'1110', /* 1 */
|
||||
'1011', /* 2 */
|
||||
'0300', /* 3 */
|
||||
'0021', /* 4 */
|
||||
'0120', /* 5 */
|
||||
'0003', /* 6 */
|
||||
'0201', /* 7 */
|
||||
'0102', /* 8 */
|
||||
'2001' /* 9 */
|
||||
);
|
||||
// Parity, 0=Odd, 1=Even. Depending on ?%4
|
||||
$this->codeParity = array(
|
||||
array(0,0), /* 0 */
|
||||
array(0,1), /* 1 */
|
||||
array(1,0), /* 2 */
|
||||
array(1,1) /* 3 */
|
||||
);
|
||||
$this->setText($text);
|
||||
$this->textfont = $textfont;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves Text
|
||||
*
|
||||
* @param string $text
|
||||
*/
|
||||
public function setText($text){
|
||||
$this->text = $text;
|
||||
}
|
||||
|
||||
private function inverse($text,$inverse=1) {
|
||||
if($inverse == 1)
|
||||
$text = strrev($text);
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the barcode
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
public function draw($im) {
|
||||
$error_stop = false;
|
||||
|
||||
// Checking if all chars are allowed
|
||||
for($i=0;$i<strlen($this->text);$i++) {
|
||||
if(!is_int(array_search($this->text[$i],$this->keys))) {
|
||||
$this->DrawError($im,'Char \''.$this->text[$i].'\' not allowed.');
|
||||
$error_stop = true;
|
||||
}
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// Must contains 2 chars
|
||||
if(strlen($this->text) != 2) {
|
||||
$this->DrawError($im,'Must contains 2 chars.');
|
||||
$error_stop = true;
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// If we have to write text, we move the barcode to the bottom to put text
|
||||
$this->positionY = ($this->textfont == 0)?0:15;
|
||||
// Starting Code
|
||||
$this->DrawChar($im,'001',1);
|
||||
// Code
|
||||
for($i=0;$i<2;$i++){
|
||||
$this->DrawChar($im,$this->inverse($this->findCode($this->text[$i]),$this->codeParity[intval($this->text%4)][$i]),2);
|
||||
if($i == 0)
|
||||
$this->DrawChar($im,'00',2); // Inter-char
|
||||
}
|
||||
$this->lastX = $this->positionX;
|
||||
$this->lastY = $this->maxHeight;
|
||||
$this->DrawText($im);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Overloaded method for drawing special label
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
protected function DrawText($im) {
|
||||
if($this->textfont != 0) {
|
||||
$bar_color = (is_null($this->color1))?NULL:$this->color1->allocate($im);
|
||||
if(!is_null($bar_color))
|
||||
imagestring($im,$this->textfont,$this->positionX/2-imagefontwidth($this->textfont)*(strlen($this->text)/2),1,$this->text,$bar_color);
|
||||
$this->lastY += 15;
|
||||
}
|
||||
}
|
||||
};
|
||||
?>
|
||||
@@ -0,0 +1,163 @@
|
||||
<?php
|
||||
if(!defined('IN_CB'))die('You are not allowed to access to this page.');
|
||||
|
||||
/**
|
||||
* upcext5.php
|
||||
*--------------------------------------------------------------------
|
||||
*
|
||||
* Sub-Class - UPC Supplemental Barcode 2 digits
|
||||
*
|
||||
* Working with UPC-A, UPC-E, EAN-13, EAN-8
|
||||
* This includes 5 digits (normaly for suggested retail price)
|
||||
* Must be placed next to UPC or EAN Code
|
||||
* If 90000 -> No suggested Retail Price
|
||||
* If 99991 -> Book Complimentary (normally free)
|
||||
* If 90001 to 98999 -> Internal Purpose of Publisher
|
||||
* If 99990 -> Used by the National Association of College Stores to mark used books
|
||||
* If 0xxxx -> Price Expressed in British Pounds (xx.xx)
|
||||
* If 5xxxx -> Price Expressed in U.S. dollars (US$xx.xx)
|
||||
*
|
||||
*--------------------------------------------------------------------
|
||||
* Revision History
|
||||
* V1.00 17 jun 2004 Jean-Sebastien Goupil
|
||||
*--------------------------------------------------------------------
|
||||
* Copyright (C) Jean-Sebastien Goupil
|
||||
* http://other.lookstrike.com/barcode/
|
||||
*/
|
||||
class upcext5 extends BarCode {
|
||||
protected $keys = array(), $code = array(), $codeParity = array();
|
||||
private $starting, $ending;
|
||||
protected $text;
|
||||
protected $textfont;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param int $maxHeight
|
||||
* @param FColor $color1
|
||||
* @param FColor $color2
|
||||
* @param int $res
|
||||
* @param string $text
|
||||
* @param int $textfont
|
||||
*/
|
||||
public function __construct($maxHeight,FColor $color1,FColor $color2,$res,$text,$textfont) {
|
||||
BarCode::__construct($maxHeight,$color1,$color2,$res);
|
||||
$this->keys = array('0','1','2','3','4','5','6','7','8','9');
|
||||
$this->code = array(
|
||||
'2100', /* 0 */
|
||||
'1110', /* 1 */
|
||||
'1011', /* 2 */
|
||||
'0300', /* 3 */
|
||||
'0021', /* 4 */
|
||||
'0120', /* 5 */
|
||||
'0003', /* 6 */
|
||||
'0201', /* 7 */
|
||||
'0102', /* 8 */
|
||||
'2001' /* 9 */
|
||||
);
|
||||
// Parity, 0=Odd, 1=Even. Depending Checksum
|
||||
$this->codeParity = array(
|
||||
array(1,1,0,0,0), /* 0 */
|
||||
array(1,0,1,0,0), /* 1 */
|
||||
array(1,0,0,1,0), /* 2 */
|
||||
array(1,0,0,0,1), /* 3 */
|
||||
array(0,1,1,0,0), /* 4 */
|
||||
array(0,0,1,1,0), /* 5 */
|
||||
array(0,0,0,1,1), /* 6 */
|
||||
array(0,1,0,1,0), /* 7 */
|
||||
array(0,1,0,0,1), /* 8 */
|
||||
array(0,0,1,0,1) /* 9 */
|
||||
);
|
||||
$this->setText($text);
|
||||
$this->textfont = $textfont;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves Text
|
||||
*
|
||||
* @param string $text
|
||||
*/
|
||||
public function setText($text){
|
||||
$this->text = $text;
|
||||
}
|
||||
|
||||
private function inverse($text,$inverse=1) {
|
||||
if($inverse == 1)
|
||||
$text = strrev($text);
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the barcode
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
public function draw($im) {
|
||||
$error_stop = false;
|
||||
|
||||
// Checking if all chars are allowed
|
||||
for($i=0;$i<strlen($this->text);$i++) {
|
||||
if(!is_int(array_search($this->text[$i],$this->keys))) {
|
||||
$this->DrawError($im,'Char \''.$this->text[$i].'\' not allowed.');
|
||||
$error_stop = true;
|
||||
}
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// Must contains 5 chars
|
||||
if(strlen($this->text) != 5) {
|
||||
$this->DrawError($im,'Must contains 5 chars.');
|
||||
$error_stop = true;
|
||||
}
|
||||
if($error_stop == false) {
|
||||
// Calculating Checksum
|
||||
// Consider the right-most digit of the message to be in an "odd" position,
|
||||
// and assign odd/even to each character moving from right to left
|
||||
// Odd Position = 3, Even Position = 9
|
||||
// Multiply it by the number
|
||||
// Add all of that and do 10-(?mod10)
|
||||
$odd = true;
|
||||
$checksum=0;
|
||||
for($i=strlen($this->text);$i>0;$i--) {
|
||||
if($odd==true) {
|
||||
$multiplier=3;
|
||||
$odd=false;
|
||||
}
|
||||
else {
|
||||
$multiplier=9;
|
||||
$odd=true;
|
||||
}
|
||||
$checksum += $this->keys[$this->text[$i - 1]] * $multiplier;
|
||||
}
|
||||
$checksum = intval(substr(strval($checksum),strlen(strval($checksum))-1,1));
|
||||
// If we have to write text, we move the barcode to the bottom to put text
|
||||
$this->positionY = ($this->textfont == 0)?0:15;
|
||||
// Starting Code
|
||||
$this->DrawChar($im,'001',1);
|
||||
// Code
|
||||
for($i=0;$i<5;$i++){
|
||||
$this->DrawChar($im,$this->inverse($this->findCode($this->text[$i]),$this->codeParity[$checksum][$i]),2);
|
||||
if($i < 4)
|
||||
$this->DrawChar($im,'00',2); // Inter-char
|
||||
}
|
||||
$this->lastX = $this->positionX;
|
||||
$this->lastY = $this->maxHeight;
|
||||
$this->DrawText($im);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Overloaded method for drawing special label
|
||||
*
|
||||
* @param ressource $im
|
||||
*/
|
||||
protected function DrawText($im) {
|
||||
if($this->textfont != 0) {
|
||||
$bar_color = (is_null($this->color1))?NULL:$this->color1->allocate($im);
|
||||
if(!is_null($bar_color))
|
||||
imagestring($im,$this->textfont,$this->positionX/2-imagefontwidth($this->textfont)*(strlen($this->text)/2),1,$this->text,$bar_color);
|
||||
$this->lastY += 15;
|
||||
}
|
||||
}
|
||||
};
|
||||
?>
|
||||
@@ -0,0 +1,136 @@
|
||||
// script.aculo.us builder.js v1.8.1, Thu Jan 03 22:07:12 -0500 2008
|
||||
|
||||
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
|
||||
//
|
||||
// script.aculo.us is freely distributable under the terms of an MIT-style license.
|
||||
// For details, see the script.aculo.us web site: http://script.aculo.us/
|
||||
|
||||
var Builder = {
|
||||
NODEMAP: {
|
||||
AREA: 'map',
|
||||
CAPTION: 'table',
|
||||
COL: 'table',
|
||||
COLGROUP: 'table',
|
||||
LEGEND: 'fieldset',
|
||||
OPTGROUP: 'select',
|
||||
OPTION: 'select',
|
||||
PARAM: 'object',
|
||||
TBODY: 'table',
|
||||
TD: 'table',
|
||||
TFOOT: 'table',
|
||||
TH: 'table',
|
||||
THEAD: 'table',
|
||||
TR: 'table'
|
||||
},
|
||||
// note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
|
||||
// due to a Firefox bug
|
||||
node: function(elementName) {
|
||||
elementName = elementName.toUpperCase();
|
||||
|
||||
// try innerHTML approach
|
||||
var parentTag = this.NODEMAP[elementName] || 'div';
|
||||
var parentElement = document.createElement(parentTag);
|
||||
try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
|
||||
parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
|
||||
} catch(e) {}
|
||||
var element = parentElement.firstChild || null;
|
||||
|
||||
// see if browser added wrapping tags
|
||||
if(element && (element.tagName.toUpperCase() != elementName))
|
||||
element = element.getElementsByTagName(elementName)[0];
|
||||
|
||||
// fallback to createElement approach
|
||||
if(!element) element = document.createElement(elementName);
|
||||
|
||||
// abort if nothing could be created
|
||||
if(!element) return;
|
||||
|
||||
// attributes (or text)
|
||||
if(arguments[1])
|
||||
if(this._isStringOrNumber(arguments[1]) ||
|
||||
(arguments[1] instanceof Array) ||
|
||||
arguments[1].tagName) {
|
||||
this._children(element, arguments[1]);
|
||||
} else {
|
||||
var attrs = this._attributes(arguments[1]);
|
||||
if(attrs.length) {
|
||||
try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
|
||||
parentElement.innerHTML = "<" +elementName + " " +
|
||||
attrs + "></" + elementName + ">";
|
||||
} catch(e) {}
|
||||
element = parentElement.firstChild || null;
|
||||
// workaround firefox 1.0.X bug
|
||||
if(!element) {
|
||||
element = document.createElement(elementName);
|
||||
for(attr in arguments[1])
|
||||
element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
|
||||
}
|
||||
if(element.tagName.toUpperCase() != elementName)
|
||||
element = parentElement.getElementsByTagName(elementName)[0];
|
||||
}
|
||||
}
|
||||
|
||||
// text, or array of children
|
||||
if(arguments[2])
|
||||
this._children(element, arguments[2]);
|
||||
|
||||
return element;
|
||||
},
|
||||
_text: function(text) {
|
||||
return document.createTextNode(text);
|
||||
},
|
||||
|
||||
ATTR_MAP: {
|
||||
'className': 'class',
|
||||
'htmlFor': 'for'
|
||||
},
|
||||
|
||||
_attributes: function(attributes) {
|
||||
var attrs = [];
|
||||
for(attribute in attributes)
|
||||
attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
|
||||
'="' + attributes[attribute].toString().escapeHTML().gsub(/"/,'"') + '"');
|
||||
return attrs.join(" ");
|
||||
},
|
||||
_children: function(element, children) {
|
||||
if(children.tagName) {
|
||||
element.appendChild(children);
|
||||
return;
|
||||
}
|
||||
if(typeof children=='object') { // array can hold nodes and text
|
||||
children.flatten().each( function(e) {
|
||||
if(typeof e=='object')
|
||||
element.appendChild(e)
|
||||
else
|
||||
if(Builder._isStringOrNumber(e))
|
||||
element.appendChild(Builder._text(e));
|
||||
});
|
||||
} else
|
||||
if(Builder._isStringOrNumber(children))
|
||||
element.appendChild(Builder._text(children));
|
||||
},
|
||||
_isStringOrNumber: function(param) {
|
||||
return(typeof param=='string' || typeof param=='number');
|
||||
},
|
||||
build: function(html) {
|
||||
var element = this.node('div');
|
||||
$(element).update(html.strip());
|
||||
return element.down();
|
||||
},
|
||||
dump: function(scope) {
|
||||
if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope
|
||||
|
||||
var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
|
||||
"BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
|
||||
"FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
|
||||
"KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
|
||||
"PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
|
||||
"TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);
|
||||
|
||||
tags.each( function(tag){
|
||||
scope[tag] = function() {
|
||||
return Builder.node.apply(Builder, [tag].concat($A(arguments)));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,410 @@
|
||||
<?php
|
||||
/*~ class.pop3.php
|
||||
.---------------------------------------------------------------------------.
|
||||
| Software: PHPMailer - PHP email class |
|
||||
| Version: 5.2.1 |
|
||||
| Site: https://code.google.com/a/apache-extras.org/p/phpmailer/ |
|
||||
| ------------------------------------------------------------------------- |
|
||||
| Admin: Jim Jagielski (project admininistrator) |
|
||||
| Authors: Andy Prevost (codeworxtech) codeworxtech@users.sourceforge.net |
|
||||
| : Marcus Bointon (coolbru) coolbru@users.sourceforge.net |
|
||||
| : Jim Jagielski (jimjag) jimjag@gmail.com |
|
||||
| Founder: Brent R. Matzelle (original founder) |
|
||||
| Copyright (c) 2010-2012, Jim Jagielski. All Rights Reserved. |
|
||||
| Copyright (c) 2004-2009, Andy Prevost. All Rights Reserved. |
|
||||
| Copyright (c) 2001-2003, Brent R. Matzelle |
|
||||
| ------------------------------------------------------------------------- |
|
||||
| License: Distributed under the Lesser General Public License (LGPL) |
|
||||
| http://www.gnu.org/copyleft/lesser.html |
|
||||
| This program is distributed in the hope that it will be useful - WITHOUT |
|
||||
| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
||||
| FITNESS FOR A PARTICULAR PURPOSE. |
|
||||
'---------------------------------------------------------------------------'
|
||||
*/
|
||||
|
||||
/**
|
||||
* PHPMailer - PHP POP Before SMTP Authentication Class
|
||||
* NOTE: Designed for use with PHP version 5 and up
|
||||
* @package PHPMailer
|
||||
* @author Andy Prevost
|
||||
* @author Marcus Bointon
|
||||
* @author Jim Jagielski
|
||||
* @copyright 2010 - 2012 Jim Jagielski
|
||||
* @copyright 2004 - 2009 Andy Prevost
|
||||
* @license http://www.gnu.org/copyleft/lesser.html Distributed under the Lesser General Public License (LGPL)
|
||||
* @version $Id: class.pop3.php 450 2010-06-23 16:46:33Z coolbru $
|
||||
*/
|
||||
|
||||
/**
|
||||
* POP Before SMTP Authentication Class
|
||||
* Version 5.2.1
|
||||
*
|
||||
* Author: Richard Davey (rich@corephp.co.uk)
|
||||
* Modifications: Andy Prevost
|
||||
* License: LGPL, see PHPMailer License
|
||||
*
|
||||
* Specifically for PHPMailer to allow POP before SMTP authentication.
|
||||
* Does not yet work with APOP - if you have an APOP account, contact Richard Davey
|
||||
* and we can test changes to this script.
|
||||
*
|
||||
* This class is based on the structure of the SMTP class originally authored by Chris Ryan
|
||||
*
|
||||
* This class is rfc 1939 compliant and implements all the commands
|
||||
* required for POP3 connection, authentication and disconnection.
|
||||
*
|
||||
* @package PHPMailer
|
||||
* @author Richard Davey
|
||||
*/
|
||||
|
||||
class POP3 {
|
||||
/**
|
||||
* Default POP3 port
|
||||
* @var int
|
||||
*/
|
||||
public $POP3_PORT = 110;
|
||||
|
||||
/**
|
||||
* Default Timeout
|
||||
* @var int
|
||||
*/
|
||||
public $POP3_TIMEOUT = 30;
|
||||
|
||||
/**
|
||||
* POP3 Carriage Return + Line Feed
|
||||
* @var string
|
||||
*/
|
||||
public $CRLF = "\r\n";
|
||||
|
||||
/**
|
||||
* Displaying Debug warnings? (0 = now, 1+ = yes)
|
||||
* @var int
|
||||
*/
|
||||
public $do_debug = 2;
|
||||
|
||||
/**
|
||||
* POP3 Mail Server
|
||||
* @var string
|
||||
*/
|
||||
public $host;
|
||||
|
||||
/**
|
||||
* POP3 Port
|
||||
* @var int
|
||||
*/
|
||||
public $port;
|
||||
|
||||
/**
|
||||
* POP3 Timeout Value
|
||||
* @var int
|
||||
*/
|
||||
public $tval;
|
||||
|
||||
/**
|
||||
* POP3 Username
|
||||
* @var string
|
||||
*/
|
||||
public $username;
|
||||
|
||||
/**
|
||||
* POP3 Password
|
||||
* @var string
|
||||
*/
|
||||
public $password;
|
||||
|
||||
/**
|
||||
* Sets the POP3 PHPMailer Version number
|
||||
* @var string
|
||||
*/
|
||||
public $Version = '5.2.1';
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// PROPERTIES, PRIVATE AND PROTECTED
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
private $pop_conn;
|
||||
private $connected;
|
||||
private $error; // Error log array
|
||||
|
||||
/**
|
||||
* Constructor, sets the initial values
|
||||
* @access public
|
||||
* @return POP3
|
||||
*/
|
||||
public function __construct() {
|
||||
$this->pop_conn = 0;
|
||||
$this->connected = false;
|
||||
$this->error = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Combination of public events - connect, login, disconnect
|
||||
* @access public
|
||||
* @param string $host
|
||||
* @param integer $port
|
||||
* @param integer $tval
|
||||
* @param string $username
|
||||
* @param string $password
|
||||
*/
|
||||
public function Authorise ($host, $port = false, $tval = false, $username = "", $password = "", $debug_level = 0) {
|
||||
$this->host = $host;
|
||||
|
||||
// If no port value is passed, retrieve it
|
||||
if ($port == false) {
|
||||
$this->port = $this->POP3_PORT;
|
||||
} else {
|
||||
$this->port = $port;
|
||||
}
|
||||
|
||||
// If no port value is passed, retrieve it
|
||||
if ($tval == false) {
|
||||
$this->tval = $this->POP3_TIMEOUT;
|
||||
} else {
|
||||
$this->tval = $tval;
|
||||
}
|
||||
|
||||
$this->do_debug = $debug_level;
|
||||
$this->username = $username;
|
||||
$this->password = $password;
|
||||
|
||||
// Refresh the error log
|
||||
$this->error = null;
|
||||
|
||||
// Connect
|
||||
$result = $this->Connect($this->host, $this->port, $this->tval);
|
||||
|
||||
if ($result) {
|
||||
$login_result = $this->Login($this->username, $this->password);
|
||||
|
||||
if ($login_result) {
|
||||
$this->Disconnect();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// We need to disconnect regardless if the login succeeded
|
||||
$this->Disconnect();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Connect to the POP3 server
|
||||
* @access public
|
||||
* @param string $host
|
||||
* @param integer $port
|
||||
* @param integer $tval
|
||||
* @return boolean
|
||||
*/
|
||||
public function Connect ($host, $port = false, $tval = 30) {
|
||||
// Are we already connected?
|
||||
if ($this->connected) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
On Windows this will raise a PHP Warning error if the hostname doesn't exist.
|
||||
Rather than supress it with @fsockopen, let's capture it cleanly instead
|
||||
*/
|
||||
|
||||
set_error_handler(array(&$this, 'catchWarning'));
|
||||
|
||||
// Connect to the POP3 server
|
||||
$this->pop_conn = fsockopen($host, // POP3 Host
|
||||
$port, // Port #
|
||||
$errno, // Error Number
|
||||
$errstr, // Error Message
|
||||
$tval); // Timeout (seconds)
|
||||
|
||||
// Restore the error handler
|
||||
restore_error_handler();
|
||||
|
||||
// Does the Error Log now contain anything?
|
||||
if ($this->error && $this->do_debug >= 1) {
|
||||
$this->displayErrors();
|
||||
}
|
||||
|
||||
// Did we connect?
|
||||
if ($this->pop_conn == false) {
|
||||
// It would appear not...
|
||||
$this->error = array(
|
||||
'error' => "Failed to connect to server $host on port $port",
|
||||
'errno' => $errno,
|
||||
'errstr' => $errstr
|
||||
);
|
||||
|
||||
if ($this->do_debug >= 1) {
|
||||
$this->displayErrors();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Increase the stream time-out
|
||||
|
||||
// Check for PHP 4.3.0 or later
|
||||
if (version_compare(phpversion(), '5.0.0', 'ge')) {
|
||||
stream_set_timeout($this->pop_conn, $tval, 0);
|
||||
} else {
|
||||
// Does not work on Windows
|
||||
if (substr(PHP_OS, 0, 3) !== 'WIN') {
|
||||
socket_set_timeout($this->pop_conn, $tval, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// Get the POP3 server response
|
||||
$pop3_response = $this->getResponse();
|
||||
|
||||
// Check for the +OK
|
||||
if ($this->checkResponse($pop3_response)) {
|
||||
// The connection is established and the POP3 server is talking
|
||||
$this->connected = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Login to the POP3 server (does not support APOP yet)
|
||||
* @access public
|
||||
* @param string $username
|
||||
* @param string $password
|
||||
* @return boolean
|
||||
*/
|
||||
public function Login ($username = '', $password = '') {
|
||||
if ($this->connected == false) {
|
||||
$this->error = 'Not connected to POP3 server';
|
||||
|
||||
if ($this->do_debug >= 1) {
|
||||
$this->displayErrors();
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($username)) {
|
||||
$username = $this->username;
|
||||
}
|
||||
|
||||
if (empty($password)) {
|
||||
$password = $this->password;
|
||||
}
|
||||
|
||||
$pop_username = "USER $username" . $this->CRLF;
|
||||
$pop_password = "PASS $password" . $this->CRLF;
|
||||
|
||||
// Send the Username
|
||||
$this->sendString($pop_username);
|
||||
$pop3_response = $this->getResponse();
|
||||
|
||||
if ($this->checkResponse($pop3_response)) {
|
||||
// Send the Password
|
||||
$this->sendString($pop_password);
|
||||
$pop3_response = $this->getResponse();
|
||||
|
||||
if ($this->checkResponse($pop3_response)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Disconnect from the POP3 server
|
||||
* @access public
|
||||
*/
|
||||
public function Disconnect () {
|
||||
$this->sendString('QUIT');
|
||||
|
||||
fclose($this->pop_conn);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// Private Methods
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* Get the socket response back.
|
||||
* $size is the maximum number of bytes to retrieve
|
||||
* @access private
|
||||
* @param integer $size
|
||||
* @return string
|
||||
*/
|
||||
private function getResponse ($size = 128) {
|
||||
$pop3_response = fgets($this->pop_conn, $size);
|
||||
|
||||
return $pop3_response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a string down the open socket connection to the POP3 server
|
||||
* @access private
|
||||
* @param string $string
|
||||
* @return integer
|
||||
*/
|
||||
private function sendString ($string) {
|
||||
$bytes_sent = fwrite($this->pop_conn, $string, strlen($string));
|
||||
|
||||
return $bytes_sent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the POP3 server response for +OK or -ERR
|
||||
* @access private
|
||||
* @param string $string
|
||||
* @return boolean
|
||||
*/
|
||||
private function checkResponse ($string) {
|
||||
if (substr($string, 0, 3) !== '+OK') {
|
||||
$this->error = array(
|
||||
'error' => "Server reported an error: $string",
|
||||
'errno' => 0,
|
||||
'errstr' => ''
|
||||
);
|
||||
|
||||
if ($this->do_debug >= 1) {
|
||||
$this->displayErrors();
|
||||
}
|
||||
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* If debug is enabled, display the error message array
|
||||
* @access private
|
||||
*/
|
||||
private function displayErrors () {
|
||||
echo '<pre>';
|
||||
|
||||
foreach ($this->error as $single_error) {
|
||||
print_r($single_error);
|
||||
}
|
||||
|
||||
echo '</pre>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Takes over from PHP for the socket warning handler
|
||||
* @access private
|
||||
* @param integer $errno
|
||||
* @param string $errstr
|
||||
* @param string $errfile
|
||||
* @param integer $errline
|
||||
*/
|
||||
private function catchWarning ($errno, $errstr, $errfile, $errline) {
|
||||
$this->error[] = array(
|
||||
'error' => "Connecting to the POP3 server raised a PHP warning: ",
|
||||
'errno' => $errno,
|
||||
'errstr' => $errstr
|
||||
);
|
||||
}
|
||||
|
||||
// End of class
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,818 @@
|
||||
<?php
|
||||
/*~ class.smtp.php
|
||||
.---------------------------------------------------------------------------.
|
||||
| Software: PHPMailer - PHP email class |
|
||||
| Version: 5.2.1 |
|
||||
| Site: https://code.google.com/a/apache-extras.org/p/phpmailer/ |
|
||||
| ------------------------------------------------------------------------- |
|
||||
| Admin: Jim Jagielski (project admininistrator) |
|
||||
| Authors: Andy Prevost (codeworxtech) codeworxtech@users.sourceforge.net |
|
||||
| : Marcus Bointon (coolbru) coolbru@users.sourceforge.net |
|
||||
| : Jim Jagielski (jimjag) jimjag@gmail.com |
|
||||
| Founder: Brent R. Matzelle (original founder) |
|
||||
| Copyright (c) 2010-2012, Jim Jagielski. All Rights Reserved. |
|
||||
| Copyright (c) 2004-2009, Andy Prevost. All Rights Reserved. |
|
||||
| Copyright (c) 2001-2003, Brent R. Matzelle |
|
||||
| ------------------------------------------------------------------------- |
|
||||
| License: Distributed under the Lesser General Public License (LGPL) |
|
||||
| http://www.gnu.org/copyleft/lesser.html |
|
||||
| This program is distributed in the hope that it will be useful - WITHOUT |
|
||||
| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
||||
| FITNESS FOR A PARTICULAR PURPOSE. |
|
||||
'---------------------------------------------------------------------------'
|
||||
*/
|
||||
|
||||
/**
|
||||
* PHPMailer - PHP SMTP email transport class
|
||||
* NOTE: Designed for use with PHP version 5 and up
|
||||
* @package PHPMailer
|
||||
* @author Andy Prevost
|
||||
* @author Marcus Bointon
|
||||
* @copyright 2004 - 2008 Andy Prevost
|
||||
* @author Jim Jagielski
|
||||
* @copyright 2010 - 2012 Jim Jagielski
|
||||
* @license http://www.gnu.org/copyleft/lesser.html Distributed under the Lesser General Public License (LGPL)
|
||||
* @version $Id: class.smtp.php 450 2010-06-23 16:46:33Z coolbru $
|
||||
*/
|
||||
|
||||
/**
|
||||
* SMTP is rfc 821 compliant and implements all the rfc 821 SMTP
|
||||
* commands except TURN which will always return a not implemented
|
||||
* error. SMTP also provides some utility methods for sending mail
|
||||
* to an SMTP server.
|
||||
* original author: Chris Ryan
|
||||
*/
|
||||
|
||||
class SMTP {
|
||||
/**
|
||||
* SMTP server port
|
||||
* @var int
|
||||
*/
|
||||
public $SMTP_PORT = 25;
|
||||
|
||||
/**
|
||||
* SMTP reply line ending
|
||||
* @var string
|
||||
*/
|
||||
public $CRLF = "\r\n";
|
||||
|
||||
/**
|
||||
* Sets whether debugging is turned on
|
||||
* @var bool
|
||||
*/
|
||||
public $do_debug; // the level of debug to perform
|
||||
|
||||
/**
|
||||
* Sets VERP use on/off (default is off)
|
||||
* @var bool
|
||||
*/
|
||||
public $do_verp = false;
|
||||
|
||||
/**
|
||||
* Sets the SMTP PHPMailer Version number
|
||||
* @var string
|
||||
*/
|
||||
public $Version = '5.2.1';
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// PROPERTIES, PRIVATE AND PROTECTED
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
private $smtp_conn; // the socket to the server
|
||||
private $error; // error if any on the last call
|
||||
private $helo_rply; // the reply the server sent to us for HELO
|
||||
|
||||
/**
|
||||
* Initialize the class so that the data is in a known state.
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function __construct() {
|
||||
$this->smtp_conn = 0;
|
||||
$this->error = null;
|
||||
$this->helo_rply = null;
|
||||
|
||||
$this->do_debug = 0;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// CONNECTION FUNCTIONS
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* Connect to the server specified on the port specified.
|
||||
* If the port is not specified use the default SMTP_PORT.
|
||||
* If tval is specified then a connection will try and be
|
||||
* established with the server for that number of seconds.
|
||||
* If tval is not specified the default is 30 seconds to
|
||||
* try on the connection.
|
||||
*
|
||||
* SMTP CODE SUCCESS: 220
|
||||
* SMTP CODE FAILURE: 421
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function Connect($host, $port = 0, $tval = 30) {
|
||||
// set the error val to null so there is no confusion
|
||||
$this->error = null;
|
||||
|
||||
// make sure we are __not__ connected
|
||||
if($this->connected()) {
|
||||
// already connected, generate error
|
||||
$this->error = array("error" => "Already connected to a server");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(empty($port)) {
|
||||
$port = $this->SMTP_PORT;
|
||||
}
|
||||
|
||||
// connect to the smtp server
|
||||
$this->smtp_conn = @fsockopen($host, // the host of the server
|
||||
$port, // the port to use
|
||||
$errno, // error number if any
|
||||
$errstr, // error message if any
|
||||
$tval); // give up after ? secs
|
||||
// verify we connected properly
|
||||
if(empty($this->smtp_conn)) {
|
||||
$this->error = array("error" => "Failed to connect to server",
|
||||
"errno" => $errno,
|
||||
"errstr" => $errstr);
|
||||
if($this->do_debug >= 1) {
|
||||
echo "SMTP -> ERROR: " . $this->error["error"] . ": $errstr ($errno)" . $this->CRLF . '<br>';
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// SMTP server can take longer to respond, give longer timeout for first read
|
||||
// Windows does not have support for this timeout function
|
||||
if(substr(PHP_OS, 0, 3) != "WIN")
|
||||
socket_set_timeout($this->smtp_conn, $tval, 0);
|
||||
|
||||
// get any announcement
|
||||
$announce = $this->get_lines();
|
||||
|
||||
if($this->do_debug >= 2) {
|
||||
echo "SMTP -> FROM SERVER:" . $announce . $this->CRLF . '<br>';
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initiate a TLS communication with the server.
|
||||
*
|
||||
* SMTP CODE 220 Ready to start TLS
|
||||
* SMTP CODE 501 Syntax error (no parameters allowed)
|
||||
* SMTP CODE 454 TLS not available due to temporary reason
|
||||
* @access public
|
||||
* @return bool success
|
||||
*/
|
||||
public function StartTLS() {
|
||||
$this->error = null; # to avoid confusion
|
||||
|
||||
if(!$this->connected()) {
|
||||
$this->error = array("error" => "Called StartTLS() without being connected");
|
||||
return false;
|
||||
}
|
||||
|
||||
fputs($this->smtp_conn,"STARTTLS" . $this->CRLF);
|
||||
|
||||
$rply = $this->get_lines();
|
||||
$code = substr($rply,0,3);
|
||||
|
||||
if($this->do_debug >= 2) {
|
||||
echo "SMTP -> FROM SERVER:" . $rply . $this->CRLF . '<br>';
|
||||
}
|
||||
|
||||
if($code != 220) {
|
||||
$this->error =
|
||||
array("error" => "STARTTLS not accepted from server",
|
||||
"smtp_code" => $code,
|
||||
"smtp_msg" => substr($rply,4));
|
||||
if($this->do_debug >= 1) {
|
||||
echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br>';
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Begin encrypted connection
|
||||
if(!stream_socket_enable_crypto($this->smtp_conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs SMTP authentication. Must be run after running the
|
||||
* Hello() method. Returns true if successfully authenticated.
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function Authenticate($username, $password) {
|
||||
// Start authentication
|
||||
fputs($this->smtp_conn,"AUTH LOGIN" . $this->CRLF);
|
||||
|
||||
$rply = $this->get_lines();
|
||||
$code = substr($rply,0,3);
|
||||
|
||||
if($code != 334) {
|
||||
$this->error =
|
||||
array("error" => "AUTH not accepted from server",
|
||||
"smtp_code" => $code,
|
||||
"smtp_msg" => substr($rply,4));
|
||||
if($this->do_debug >= 1) {
|
||||
echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br>';
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Send encoded username
|
||||
fputs($this->smtp_conn, base64_encode($username) . $this->CRLF);
|
||||
|
||||
$rply = $this->get_lines();
|
||||
$code = substr($rply,0,3);
|
||||
|
||||
if($code != 334) {
|
||||
$this->error =
|
||||
array("error" => "Username not accepted from server",
|
||||
"smtp_code" => $code,
|
||||
"smtp_msg" => substr($rply,4));
|
||||
if($this->do_debug >= 1) {
|
||||
echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br>';
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Send encoded password
|
||||
fputs($this->smtp_conn, base64_encode($password) . $this->CRLF);
|
||||
|
||||
$rply = $this->get_lines();
|
||||
$code = substr($rply,0,3);
|
||||
|
||||
if($code != 235) {
|
||||
$this->error =
|
||||
array("error" => "Password not accepted from server",
|
||||
"smtp_code" => $code,
|
||||
"smtp_msg" => substr($rply,4));
|
||||
if($this->do_debug >= 1) {
|
||||
echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br>';
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if connected to a server otherwise false
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function Connected() {
|
||||
if(!empty($this->smtp_conn)) {
|
||||
$sock_status = socket_get_status($this->smtp_conn);
|
||||
if($sock_status["eof"]) {
|
||||
// the socket is valid but we are not connected
|
||||
if($this->do_debug >= 1) {
|
||||
echo "SMTP -> NOTICE:" . $this->CRLF . "EOF caught while checking if connected";
|
||||
}
|
||||
$this->Close();
|
||||
return false;
|
||||
}
|
||||
return true; // everything looks good
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Closes the socket and cleans up the state of the class.
|
||||
* It is not considered good to use this function without
|
||||
* first trying to use QUIT.
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function Close() {
|
||||
$this->error = null; // so there is no confusion
|
||||
$this->helo_rply = null;
|
||||
if(!empty($this->smtp_conn)) {
|
||||
// close the connection and cleanup
|
||||
fclose($this->smtp_conn);
|
||||
$this->smtp_conn = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// SMTP COMMANDS
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* Issues a data command and sends the msg_data to the server
|
||||
* finializing the mail transaction. $msg_data is the message
|
||||
* that is to be send with the headers. Each header needs to be
|
||||
* on a single line followed by a <CRLF> with the message headers
|
||||
* and the message body being seperated by and additional <CRLF>.
|
||||
*
|
||||
* Implements rfc 821: DATA <CRLF>
|
||||
*
|
||||
* SMTP CODE INTERMEDIATE: 354
|
||||
* [data]
|
||||
* <CRLF>.<CRLF>
|
||||
* SMTP CODE SUCCESS: 250
|
||||
* SMTP CODE FAILURE: 552,554,451,452
|
||||
* SMTP CODE FAILURE: 451,554
|
||||
* SMTP CODE ERROR : 500,501,503,421
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function Data($msg_data) {
|
||||
$this->error = null; // so no confusion is caused
|
||||
|
||||
if(!$this->connected()) {
|
||||
$this->error = array(
|
||||
"error" => "Called Data() without being connected");
|
||||
return false;
|
||||
}
|
||||
|
||||
fputs($this->smtp_conn,"DATA" . $this->CRLF);
|
||||
|
||||
$rply = $this->get_lines();
|
||||
$code = substr($rply,0,3);
|
||||
|
||||
if($this->do_debug >= 2) {
|
||||
echo "SMTP -> FROM SERVER:" . $rply . $this->CRLF . '<br>';
|
||||
}
|
||||
|
||||
if($code != 354) {
|
||||
$this->error =
|
||||
array("error" => "DATA command not accepted from server",
|
||||
"smtp_code" => $code,
|
||||
"smtp_msg" => substr($rply,4));
|
||||
if($this->do_debug >= 1) {
|
||||
echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br>';
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/* the server is ready to accept data!
|
||||
* according to rfc 821 we should not send more than 1000
|
||||
* including the CRLF
|
||||
* characters on a single line so we will break the data up
|
||||
* into lines by \r and/or \n then if needed we will break
|
||||
* each of those into smaller lines to fit within the limit.
|
||||
* in addition we will be looking for lines that start with
|
||||
* a period '.' and append and additional period '.' to that
|
||||
* line. NOTE: this does not count towards limit.
|
||||
*/
|
||||
|
||||
// normalize the line breaks so we know the explode works
|
||||
$msg_data = str_replace("\r\n","\n",$msg_data);
|
||||
$msg_data = str_replace("\r","\n",$msg_data);
|
||||
$lines = explode("\n",$msg_data);
|
||||
|
||||
/* we need to find a good way to determine is headers are
|
||||
* in the msg_data or if it is a straight msg body
|
||||
* currently I am assuming rfc 822 definitions of msg headers
|
||||
* and if the first field of the first line (':' sperated)
|
||||
* does not contain a space then it _should_ be a header
|
||||
* and we can process all lines before a blank "" line as
|
||||
* headers.
|
||||
*/
|
||||
|
||||
$field = substr($lines[0],0,strpos($lines[0],":"));
|
||||
$in_headers = false;
|
||||
if(!empty($field) && !strstr($field," ")) {
|
||||
$in_headers = true;
|
||||
}
|
||||
|
||||
$max_line_length = 998; // used below; set here for ease in change
|
||||
|
||||
while(list(,$line) = @each($lines)) {
|
||||
$lines_out = null;
|
||||
if($line == "" && $in_headers) {
|
||||
$in_headers = false;
|
||||
}
|
||||
// ok we need to break this line up into several smaller lines
|
||||
while(strlen($line) > $max_line_length) {
|
||||
$pos = strrpos(substr($line,0,$max_line_length)," ");
|
||||
|
||||
// Patch to fix DOS attack
|
||||
if(!$pos) {
|
||||
$pos = $max_line_length - 1;
|
||||
$lines_out[] = substr($line,0,$pos);
|
||||
$line = substr($line,$pos);
|
||||
} else {
|
||||
$lines_out[] = substr($line,0,$pos);
|
||||
$line = substr($line,$pos + 1);
|
||||
}
|
||||
|
||||
/* if processing headers add a LWSP-char to the front of new line
|
||||
* rfc 822 on long msg headers
|
||||
*/
|
||||
if($in_headers) {
|
||||
$line = "\t" . $line;
|
||||
}
|
||||
}
|
||||
$lines_out[] = $line;
|
||||
|
||||
// send the lines to the server
|
||||
while(list(,$line_out) = @each($lines_out)) {
|
||||
if(strlen($line_out) > 0)
|
||||
{
|
||||
if(substr($line_out, 0, 1) == ".") {
|
||||
$line_out = "." . $line_out;
|
||||
}
|
||||
}
|
||||
fputs($this->smtp_conn,$line_out . $this->CRLF);
|
||||
}
|
||||
}
|
||||
|
||||
// message data has been sent
|
||||
fputs($this->smtp_conn, $this->CRLF . "." . $this->CRLF);
|
||||
|
||||
$rply = $this->get_lines();
|
||||
$code = substr($rply,0,3);
|
||||
|
||||
if($this->do_debug >= 2) {
|
||||
echo "SMTP -> FROM SERVER:" . $rply . $this->CRLF . '<br>';
|
||||
}
|
||||
|
||||
if($code != 250) {
|
||||
$this->error =
|
||||
array("error" => "DATA not accepted from server",
|
||||
"smtp_code" => $code,
|
||||
"smtp_msg" => substr($rply,4));
|
||||
if($this->do_debug >= 1) {
|
||||
echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br>';
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends the HELO command to the smtp server.
|
||||
* This makes sure that we and the server are in
|
||||
* the same known state.
|
||||
*
|
||||
* Implements from rfc 821: HELO <SP> <domain> <CRLF>
|
||||
*
|
||||
* SMTP CODE SUCCESS: 250
|
||||
* SMTP CODE ERROR : 500, 501, 504, 421
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function Hello($host = '') {
|
||||
$this->error = null; // so no confusion is caused
|
||||
|
||||
if(!$this->connected()) {
|
||||
$this->error = array(
|
||||
"error" => "Called Hello() without being connected");
|
||||
return false;
|
||||
}
|
||||
|
||||
// if hostname for HELO was not specified send default
|
||||
if(empty($host)) {
|
||||
// determine appropriate default to send to server
|
||||
$host = "localhost";
|
||||
}
|
||||
|
||||
// Send extended hello first (RFC 2821)
|
||||
if(!$this->SendHello("EHLO", $host)) {
|
||||
if(!$this->SendHello("HELO", $host)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a HELO/EHLO command.
|
||||
* @access private
|
||||
* @return bool
|
||||
*/
|
||||
private function SendHello($hello, $host) {
|
||||
fputs($this->smtp_conn, $hello . " " . $host . $this->CRLF);
|
||||
|
||||
$rply = $this->get_lines();
|
||||
$code = substr($rply,0,3);
|
||||
|
||||
if($this->do_debug >= 2) {
|
||||
echo "SMTP -> FROM SERVER: " . $rply . $this->CRLF . '<br>';
|
||||
}
|
||||
|
||||
if($code != 250) {
|
||||
$this->error =
|
||||
array("error" => $hello . " not accepted from server",
|
||||
"smtp_code" => $code,
|
||||
"smtp_msg" => substr($rply,4));
|
||||
if($this->do_debug >= 1) {
|
||||
echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br>';
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->helo_rply = $rply;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts a mail transaction from the email address specified in
|
||||
* $from. Returns true if successful or false otherwise. If True
|
||||
* the mail transaction is started and then one or more Recipient
|
||||
* commands may be called followed by a Data command.
|
||||
*
|
||||
* Implements rfc 821: MAIL <SP> FROM:<reverse-path> <CRLF>
|
||||
*
|
||||
* SMTP CODE SUCCESS: 250
|
||||
* SMTP CODE SUCCESS: 552,451,452
|
||||
* SMTP CODE SUCCESS: 500,501,421
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function Mail($from) {
|
||||
$this->error = null; // so no confusion is caused
|
||||
|
||||
if(!$this->connected()) {
|
||||
$this->error = array(
|
||||
"error" => "Called Mail() without being connected");
|
||||
return false;
|
||||
}
|
||||
|
||||
$useVerp = ($this->do_verp ? "XVERP" : "");
|
||||
fputs($this->smtp_conn,"MAIL FROM:<" . $from . ">" . $useVerp . $this->CRLF);
|
||||
|
||||
$rply = $this->get_lines();
|
||||
$code = substr($rply,0,3);
|
||||
|
||||
if($this->do_debug >= 2) {
|
||||
echo "SMTP -> FROM SERVER:" . $rply . $this->CRLF . '<br>';
|
||||
}
|
||||
|
||||
if($code != 250) {
|
||||
$this->error =
|
||||
array("error" => "MAIL not accepted from server",
|
||||
"smtp_code" => $code,
|
||||
"smtp_msg" => substr($rply,4));
|
||||
if($this->do_debug >= 1) {
|
||||
echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br>';
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends the quit command to the server and then closes the socket
|
||||
* if there is no error or the $close_on_error argument is true.
|
||||
*
|
||||
* Implements from rfc 821: QUIT <CRLF>
|
||||
*
|
||||
* SMTP CODE SUCCESS: 221
|
||||
* SMTP CODE ERROR : 500
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function Quit($close_on_error = true) {
|
||||
$this->error = null; // so there is no confusion
|
||||
|
||||
if(!$this->connected()) {
|
||||
$this->error = array(
|
||||
"error" => "Called Quit() without being connected");
|
||||
return false;
|
||||
}
|
||||
|
||||
// send the quit command to the server
|
||||
fputs($this->smtp_conn,"quit" . $this->CRLF);
|
||||
|
||||
// get any good-bye messages
|
||||
$byemsg = $this->get_lines();
|
||||
|
||||
if($this->do_debug >= 2) {
|
||||
echo "SMTP -> FROM SERVER:" . $byemsg . $this->CRLF . '<br>';
|
||||
}
|
||||
|
||||
$rval = true;
|
||||
$e = null;
|
||||
|
||||
$code = substr($byemsg,0,3);
|
||||
if($code != 221) {
|
||||
// use e as a tmp var cause Close will overwrite $this->error
|
||||
$e = array("error" => "SMTP server rejected quit command",
|
||||
"smtp_code" => $code,
|
||||
"smtp_rply" => substr($byemsg,4));
|
||||
$rval = false;
|
||||
if($this->do_debug >= 1) {
|
||||
echo "SMTP -> ERROR: " . $e["error"] . ": " . $byemsg . $this->CRLF . '<br>';
|
||||
}
|
||||
}
|
||||
|
||||
if(empty($e) || $close_on_error) {
|
||||
$this->Close();
|
||||
}
|
||||
|
||||
return $rval;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends the command RCPT to the SMTP server with the TO: argument of $to.
|
||||
* Returns true if the recipient was accepted false if it was rejected.
|
||||
*
|
||||
* Implements from rfc 821: RCPT <SP> TO:<forward-path> <CRLF>
|
||||
*
|
||||
* SMTP CODE SUCCESS: 250,251
|
||||
* SMTP CODE FAILURE: 550,551,552,553,450,451,452
|
||||
* SMTP CODE ERROR : 500,501,503,421
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function Recipient($to) {
|
||||
$this->error = null; // so no confusion is caused
|
||||
|
||||
if(!$this->connected()) {
|
||||
$this->error = array(
|
||||
"error" => "Called Recipient() without being connected");
|
||||
return false;
|
||||
}
|
||||
|
||||
fputs($this->smtp_conn,"RCPT TO:<" . $to . ">" . $this->CRLF);
|
||||
|
||||
$rply = $this->get_lines();
|
||||
$code = substr($rply,0,3);
|
||||
|
||||
if($this->do_debug >= 2) {
|
||||
echo "SMTP -> FROM SERVER:" . $rply . $this->CRLF . '<br>';
|
||||
}
|
||||
|
||||
if($code != 250 && $code != 251) {
|
||||
$this->error =
|
||||
array("error" => "RCPT not accepted from server",
|
||||
"smtp_code" => $code,
|
||||
"smtp_msg" => substr($rply,4));
|
||||
if($this->do_debug >= 1) {
|
||||
echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br>';
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends the RSET command to abort and transaction that is
|
||||
* currently in progress. Returns true if successful false
|
||||
* otherwise.
|
||||
*
|
||||
* Implements rfc 821: RSET <CRLF>
|
||||
*
|
||||
* SMTP CODE SUCCESS: 250
|
||||
* SMTP CODE ERROR : 500,501,504,421
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function Reset() {
|
||||
$this->error = null; // so no confusion is caused
|
||||
|
||||
if(!$this->connected()) {
|
||||
$this->error = array(
|
||||
"error" => "Called Reset() without being connected");
|
||||
return false;
|
||||
}
|
||||
|
||||
fputs($this->smtp_conn,"RSET" . $this->CRLF);
|
||||
|
||||
$rply = $this->get_lines();
|
||||
$code = substr($rply,0,3);
|
||||
|
||||
if($this->do_debug >= 2) {
|
||||
echo "SMTP -> FROM SERVER:" . $rply . $this->CRLF . '<br>';
|
||||
}
|
||||
|
||||
if($code != 250) {
|
||||
$this->error =
|
||||
array("error" => "RSET failed",
|
||||
"smtp_code" => $code,
|
||||
"smtp_msg" => substr($rply,4));
|
||||
if($this->do_debug >= 1) {
|
||||
echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br>';
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts a mail transaction from the email address specified in
|
||||
* $from. Returns true if successful or false otherwise. If True
|
||||
* the mail transaction is started and then one or more Recipient
|
||||
* commands may be called followed by a Data command. This command
|
||||
* will send the message to the users terminal if they are logged
|
||||
* in and send them an email.
|
||||
*
|
||||
* Implements rfc 821: SAML <SP> FROM:<reverse-path> <CRLF>
|
||||
*
|
||||
* SMTP CODE SUCCESS: 250
|
||||
* SMTP CODE SUCCESS: 552,451,452
|
||||
* SMTP CODE SUCCESS: 500,501,502,421
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function SendAndMail($from) {
|
||||
$this->error = null; // so no confusion is caused
|
||||
|
||||
if(!$this->connected()) {
|
||||
$this->error = array(
|
||||
"error" => "Called SendAndMail() without being connected");
|
||||
return false;
|
||||
}
|
||||
|
||||
fputs($this->smtp_conn,"SAML FROM:" . $from . $this->CRLF);
|
||||
|
||||
$rply = $this->get_lines();
|
||||
$code = substr($rply,0,3);
|
||||
|
||||
if($this->do_debug >= 2) {
|
||||
echo "SMTP -> FROM SERVER:" . $rply . $this->CRLF . '<br>';
|
||||
}
|
||||
|
||||
if($code != 250) {
|
||||
$this->error =
|
||||
array("error" => "SAML not accepted from server",
|
||||
"smtp_code" => $code,
|
||||
"smtp_msg" => substr($rply,4));
|
||||
if($this->do_debug >= 1) {
|
||||
echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '<br>';
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is an optional command for SMTP that this class does not
|
||||
* support. This method is here to make the RFC821 Definition
|
||||
* complete for this class and __may__ be implimented in the future
|
||||
*
|
||||
* Implements from rfc 821: TURN <CRLF>
|
||||
*
|
||||
* SMTP CODE SUCCESS: 250
|
||||
* SMTP CODE FAILURE: 502
|
||||
* SMTP CODE ERROR : 500, 503
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function Turn() {
|
||||
$this->error = array("error" => "This method, TURN, of the SMTP ".
|
||||
"is not implemented");
|
||||
if($this->do_debug >= 1) {
|
||||
echo "SMTP -> NOTICE: " . $this->error["error"] . $this->CRLF . '<br>';
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current error
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getError() {
|
||||
return $this->error;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// INTERNAL FUNCTIONS
|
||||
/////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* Read in as many lines as possible
|
||||
* either before eof or socket timeout occurs on the operation.
|
||||
* With SMTP we can tell if we have more lines to read if the
|
||||
* 4th character is '-' symbol. If it is a space then we don't
|
||||
* need to read anything else.
|
||||
* @access private
|
||||
* @return string
|
||||
*/
|
||||
private function get_lines() {
|
||||
$data = "";
|
||||
while(!feof($this->smtp_conn)) {
|
||||
$str = @fgets($this->smtp_conn,515);
|
||||
if($this->do_debug >= 4) {
|
||||
echo "SMTP -> get_lines(): \$data was \"$data\"" . $this->CRLF . '<br>';
|
||||
echo "SMTP -> get_lines(): \$str is \"$str\"" . $this->CRLF . '<br>';
|
||||
}
|
||||
$data .= $str;
|
||||
if($this->do_debug >= 4) {
|
||||
echo "SMTP -> get_lines(): \$data is \"$data\"" . $this->CRLF . '<br>';
|
||||
}
|
||||
// if 4th character is a space, we are done reading, break the loop
|
||||
if(substr($str,3,1) == " ") { break; }
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,336 @@
|
||||
<?php
|
||||
//
|
||||
// Set the current Database Mode
|
||||
//
|
||||
|
||||
// Override DB mode based on SESSION variable
|
||||
if (isset($_SESSION) && array_key_exists('db_mode', $_SESSION) && strlen($_SESSION['db_mode'])) {
|
||||
$currentDBMode = $_SESSION['db_mode'];
|
||||
// writeLog("config.php: currentDBMode: $currentDBMode");
|
||||
}
|
||||
|
||||
if (!isset($currentDBMode) || $currentDBMode == '') $currentDBMode = "Current";
|
||||
if ($currentDBMode == 'Standard') $currentDBMode = "Current";
|
||||
|
||||
|
||||
//
|
||||
// Determine the current URL
|
||||
//
|
||||
if (isset($_SERVER['HTTP_HOST']) && strlen($_SERVER['HTTP_HOST'])) {
|
||||
$prefix = "http://";
|
||||
if (array_key_exists('HTTPS', $_SERVER)) $prefix = "https://";
|
||||
$currentHOST = $prefix . strtolower($_SERVER['HTTP_HOST']);
|
||||
|
||||
$currentURL = strtolower($_SERVER['HTTP_HOST']);
|
||||
$http_host = preg_replace("/^www\./","",$currentURL);
|
||||
|
||||
if (preg_match("/^backup-/",$http_host)) {
|
||||
$currentDBMode = "Backup";
|
||||
$currentURL = preg_replace("/^backup-/","",$currentURL);
|
||||
}
|
||||
|
||||
if (preg_match("/^prev-/",$http_host)) {
|
||||
$currentDBMode = "Previous";
|
||||
$currentURL = preg_replace("/^prev-/","",$currentURL);
|
||||
}
|
||||
|
||||
if (preg_match("/^prev2-/",$http_host)) {
|
||||
$currentDBMode = "Previous2";
|
||||
$currentURL = preg_replace("/^prev2-/","",$currentURL);
|
||||
}
|
||||
|
||||
if (preg_match("/^prev3-/",$http_host)) {
|
||||
$currentDBMode = "Previous3";
|
||||
$currentURL = preg_replace("/^prev3-/","",$currentURL);
|
||||
}
|
||||
|
||||
if (preg_match("/^prev4-/",$http_host)) {
|
||||
$currentDBMode = "Previous4";
|
||||
$currentURL = preg_replace("/^prev4-/","",$currentURL);
|
||||
}
|
||||
|
||||
if (preg_match("/^prev5-/",$http_host)) {
|
||||
$currentDBMode = "Previous5";
|
||||
$currentURL = preg_replace("/^prev5-/","",$currentURL);
|
||||
}
|
||||
|
||||
if (preg_match("/^demo-/",$http_host)) {
|
||||
$currentDBMode = "Demo";
|
||||
$currentURL = preg_replace("/^demo-/","",$currentURL);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Argument override of DB mode
|
||||
if (array_key_exists('db_mode', $_GET) && strlen($_GET['db_mode'])) {
|
||||
$currentDBMode = $_GET['db_mode'];
|
||||
$_SESSION['db_mode'] = $currentDBMode;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Get set of current databases on server
|
||||
//
|
||||
if (isset($_SESSION['UserInfo']['userid']) && $_SESSION['UserInfo']['userid'] == 'superuser') {
|
||||
$DBS = array();
|
||||
$fp = fopen("/m/data1/app.hotlunches.net/current-dbs.txt","r");
|
||||
while (! feof($fp)) {
|
||||
$entry = trim(fgets($fp, 1000));
|
||||
$DBS[$entry] = $entry;
|
||||
}
|
||||
fclose($fp);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// MySQL Database Settings
|
||||
//
|
||||
$log_agent = false;
|
||||
$currentDBTitle = $currentDBMode;
|
||||
switch ($currentDBMode) {
|
||||
case 'Current':
|
||||
$db_host = 'localhost';
|
||||
$db_uname = 'ezssoftwaredb';
|
||||
$db_pass = 'EZsoftware7785422700@@';
|
||||
$db_dbname = 'hotlunch';
|
||||
$log_agent = true;
|
||||
|
||||
if (isset($DBS) && is_array($DBS)) {
|
||||
if ($currentDBMode != 'hotlunch' && $currentDBMode != 'Current') {
|
||||
if ($DBS[$currentDBMode] == $currentDBMode) {
|
||||
$db_dbname = $currentDBMode;
|
||||
$log_agent = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'Development':
|
||||
$db_host = 'localhost';
|
||||
$db_dbname = 'hotlunch';
|
||||
$db_uname = 'ezssoftwaredb';
|
||||
$db_pass = 'EZsoftware7785422700@@';
|
||||
break;
|
||||
|
||||
case 'Backup':
|
||||
$db_host = 'localhost';
|
||||
$db_dbname = 'hotlunch_backup';
|
||||
$db_uname = 'ezssoftwaredb';
|
||||
$db_pass = 'EZsoftware7785422700@@';
|
||||
break;
|
||||
|
||||
case 'Demo':
|
||||
$db_host = 'localhost';
|
||||
$db_dbname = 'hotlunch_demo';
|
||||
$db_uname = 'ezssoftwaredb';
|
||||
$db_pass = 'EZsoftware7785422700@@';
|
||||
break;
|
||||
|
||||
case 'Previous':
|
||||
$PrevTime = time() - 60 * 60 * 25;
|
||||
$currentDBTitle = date("F j, Y",$PrevTime);
|
||||
|
||||
$db_host = 'localhost';
|
||||
$db_dbname = "hotlunch_" . date("Ymd",$PrevTime);
|
||||
$db_uname = 'ezssoftwaredb';
|
||||
$db_pass = 'EZsoftware7785422700@@';
|
||||
$log_agent = true;
|
||||
break;
|
||||
|
||||
case 'Previous2':
|
||||
$PrevTime = time() - 60 * 60 * (24 * 2 + 1);
|
||||
$currentDBTitle = date("F j, Y",$PrevTime);
|
||||
|
||||
$db_host = 'localhost';
|
||||
$db_dbname = "hotlunch_" . date("Ymd",$PrevTime);
|
||||
$db_uname = 'ezssoftwaredb';
|
||||
$db_pass = 'EZsoftware7785422700@@';
|
||||
$log_agent = true;
|
||||
break;
|
||||
|
||||
case 'Previous3':
|
||||
$PrevTime = time() - 60 * 60 * (24 * 3 + 1);
|
||||
$currentDBTitle = date("F j, Y",$PrevTime);
|
||||
|
||||
$db_host = 'localhost';
|
||||
$db_dbname = "hotlunch_" . date("Ymd",$PrevTime);
|
||||
$db_uname = 'ezssoftwaredb';
|
||||
$db_pass = 'EZsoftware7785422700@@';
|
||||
$log_agent = true;
|
||||
break;
|
||||
|
||||
case 'Previous4':
|
||||
$PrevTime = time() - 60 * 60 * (24 * 4 + 1);
|
||||
$currentDBTitle = date("F j, Y",$PrevTime);
|
||||
|
||||
$db_host = 'localhost';
|
||||
$db_dbname = "hotlunch_" . date("Ymd",$PrevTime);
|
||||
$db_uname = 'ezssoftwaredb';
|
||||
$db_pass = 'EZsoftware7785422700@@';
|
||||
$log_agent = true;
|
||||
break;
|
||||
|
||||
case 'Previous5':
|
||||
$PrevTime = time() - 60 * 60 * (24 * 5 + 1);
|
||||
$currentDBTitle = date("F j, Y",$PrevTime);
|
||||
|
||||
$db_host = 'localhost';
|
||||
$db_dbname = "hotlunch_" . date("Ymd",$PrevTime);
|
||||
$db_uname = 'ezssoftwaredb';
|
||||
$db_pass = 'EZsoftware7785422700@@';
|
||||
$log_agent = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
$db_host = 'localhost';
|
||||
$db_dbname = "hotlunch_$currentDBMode";
|
||||
$db_uname = 'ezssoftwaredb';
|
||||
$db_pass = 'EZsoftware7785422700@@';
|
||||
$log_agent = false;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
if (!is_file("databases/$db_dbname")) {
|
||||
$db_dbname = "hotlunch";
|
||||
$error_message = "Database Not Available";
|
||||
}
|
||||
|
||||
$_SESSION['db_dbname'] = $db_dbname;
|
||||
$usersTable = 'users';
|
||||
$userSALT = '$1$ezssoftw$';
|
||||
|
||||
$AdminUserTypes = array('SuperUser','System Administrator','Application Administrator','Administration Team');
|
||||
$AllAdminUserTypes = array('SuperUser','System Administrator','Application Administrator','Communications Administrator','Administration Team','Schedule Team','Financial','Financial Team');
|
||||
|
||||
|
||||
//
|
||||
// Session and Cookie Settings
|
||||
// - session timeout 30 minutes
|
||||
//
|
||||
$sessionName = 'hotlunch';
|
||||
$sessionTimeout = 60 * 60;
|
||||
$cookiePath = '/';
|
||||
|
||||
|
||||
if (session_status() !== PHP_SESSION_ACTIVE) {
|
||||
session_name($sessionName);
|
||||
session_start();
|
||||
}
|
||||
|
||||
|
||||
$QueueDelay = 0;
|
||||
|
||||
|
||||
//
|
||||
// Form processing
|
||||
//
|
||||
$FormTarget = "/";
|
||||
|
||||
|
||||
$aliasesDIR = "/etc/exim/domains";
|
||||
$currentTemplate = "default.html";
|
||||
|
||||
|
||||
//
|
||||
// Other parameters
|
||||
//
|
||||
$default_table_width = '98%';
|
||||
$default_data_width = '98%';
|
||||
$default_form_width = '90%';
|
||||
$recordsPerPage = 50;
|
||||
$numberOfPageLinks = 30;
|
||||
|
||||
$maxImageDimension = 300;
|
||||
$maxThumbDimension = 50;
|
||||
$maxGalleryImageDimension = 600;
|
||||
$maxGalleryThumbDimension = 150;
|
||||
|
||||
$otipHDR = "<table cellpadding='1' cellspacing='1' border='0'>";
|
||||
$otipROWB = "<tr><td align='right' valign='top'>";
|
||||
$otipROWM = "</td><td align='left' valign='top'><b>";
|
||||
$otipROWE = "</b></td></tr>";
|
||||
$otipFTR = "</table>";
|
||||
|
||||
$otipTABLE = "<table cellpadding='1' cellspacing='1' border='0'>";
|
||||
$otipTABLE300 = "<table width='400' cellpadding='1' cellspacing='1' border='0'>";
|
||||
$otipTABLE400 = "<table width='400' cellpadding='1' cellspacing='1' border='0'>";
|
||||
$otipTABLE500 = "<table width='400' cellpadding='1' cellspacing='1' border='0'>";
|
||||
$otipTABLE600 = "<table width='600' cellpadding='1' cellspacing='1' border='0'>";
|
||||
$otipTABLE700 = "<table width='700' cellpadding='1' cellspacing='1' border='0'>";
|
||||
$otipWideTABLE = "<table width='400' cellpadding='1' cellspacing='1' border='0'>";
|
||||
$otipROW1 = "<tr><td align='%s'>%s</td></tr>";
|
||||
$otipROW2 = "<tr><td align='right' valign='top'>%s</td><td align='left' valign='top'><b>%s</b></td></tr>";
|
||||
$otipROW2nb = "<tr><td align='right' valign='top'>%s</td><td align='left' valign='top'>%s</td></tr>";
|
||||
$otipROW2w = "<tr><td align='right' width='300' valign='top'>%s</td><td align='left' width='400' valign='top'><b>%s</b></td></tr>";
|
||||
$otipROW21 = "<tr><td align='%s' colspan='2'>%s</td></tr>";
|
||||
$otipROW21hr = "<tr><td align='center' colspan='2'><hr width='80%'></td></tr>";
|
||||
$otipCELL = "<td align='%s'>%s</td>";
|
||||
|
||||
$otipIMG = "<table cellpadding='1' border='0'><tr><td align='center'><img src='%s' height='%d' width='%d' border='1'></td></tr><tr><td align='center'><b>%s</b></td></tr></table>";
|
||||
$otipNUTRITION = "<table width='450' cellpadding='2' cellspacing='2' border='0'><tr><td align='center' class='heading'><b>Information</b></td></tr><tr><td>%s</td></tr></table>";
|
||||
|
||||
|
||||
// Character normalization
|
||||
$normalizeChars = array(chr(192) => 'A', chr(193) => 'A', chr(194) => 'A', chr(195) => 'A', chr(196) => 'A', chr(197) => 'A', chr(198) => 'AE',
|
||||
chr(199) => 'C', chr(200) => 'E', chr(201) => 'E', chr(202) => 'E', chr(203) => 'E', chr(204) => 'I', chr(205) => 'I',
|
||||
chr(206) => 'I', chr(207) => 'I', chr(208) => 'D', chr(209) => 'N', chr(210) => 'O', chr(211) => 'O', chr(212) => 'O',
|
||||
chr(213) => 'O', chr(214) => 'O', chr(215) => '', chr(216) => 'O', chr(217) => 'U', chr(218) => 'U', chr(219) => 'U',
|
||||
chr(220) => 'U', chr(221) => 'Y', chr(222) => 'p', chr(223) => 'B', chr(224) => 'a', chr(225) => 'a', chr(226) => 'a',
|
||||
chr(227) => 'a', chr(228) => 'a', chr(229) => 'a', chr(230) => 'ae', chr(231) => 'c', chr(232) => 'e', chr(233) => 'e',
|
||||
chr(234) => 'e', chr(235) => 'e', chr(236) => 'i', chr(237) => 'i', chr(238) => 'i', chr(239) => 'i', chr(240) => 'o',
|
||||
chr(241) => 'n', chr(242) => 'o', chr(243) => 'o', chr(244) => 'o', chr(245) => 'o', chr(246) => 'o', chr(247) => '',
|
||||
chr(248) => 'o', chr(249) => 'u', chr(250) => 'u', chr(251) => 'u', chr(252) => 'u', chr(253) => 'y', chr(254) => 'p',
|
||||
chr(255) => 'y'
|
||||
);
|
||||
|
||||
|
||||
//
|
||||
// Default icon definitions
|
||||
//
|
||||
$edit_icon = "<img src='images/icons/edit16.png' alt='Edit' border='0'>";
|
||||
$delete_icon = "<img src='images/icons/delete16.png' alt='Delete' border='0'>";
|
||||
$print_icon = "<img src='images/icons/printer16.png' alt='Print' border='0'>";
|
||||
$filedownload_icon = "<img src='images/icons/filedownload16.png' alt='Download' border='0'>";
|
||||
$labels_icon = "<img src='images/icons/textfile-bw16.png' alt='Labels' border='0'>";
|
||||
$view_icon = "<img src='images/icons/find16.png' alt='View' border='0'>";
|
||||
$accept_icon = "<img src='images/icons/accept16.png' alt='Accept' border='0'>";
|
||||
$change_icon = "<img src='images/icons/refresh16.png' alt='Change' border='0'>";
|
||||
$money_icon = "<img src='images/icons/money16.png' alt='Account' border='0'>";
|
||||
$students_icon = "<img src='images/icons/groupofusers16.png' alt='Manage Students' border='0'>";
|
||||
$reminder_icon = "<img src='images/icons/mailsend16.png' alt='Send Account Login Reminder Email' border='0'>";
|
||||
$email_icon = "<img src='images/icons/mailsend16.png' alt='Send Email' border='0'>";
|
||||
$contact_icon = "<img src='images/icons/userid16.png' alt='View Contact Information' border='0'>";
|
||||
$clock_icon = "<img src='images/icons/clock16.png' alt='Login Log' border='0'>";
|
||||
$info_icon = "<img src='images/icons/infoabout16.png' alt='Information' border='0'>";
|
||||
$open_icon = "<img src='images/icons/folderopenb16.png' alt='Open Folder' border='0'>";
|
||||
$filesearch_icon = "<img src='images/icons/filesearch16.png' alt='Detail' border='0'>";
|
||||
|
||||
|
||||
$edit_icon_small = "<img src='images/icons/edit16.png' alt='Edit' border='0'>";
|
||||
$delete_icon_small = "<img src='images/icons/delete16.png' alt='Delete' border='0'>";
|
||||
$print_icon_small = "<img src='images/icons/printer16.png' alt='Print' border='0'>";
|
||||
$filedownload_icon_small = "<img src='images/icons/filedownload16.png' alt='Download' border='0'>";
|
||||
$labels_icon_small = "<img src='images/icons/textfile-bw16.png' alt='Labels' border='0'>";
|
||||
$view_icon_small = "<img src='images/icons/find16.png' alt='View' border='0'>";
|
||||
$accept_icon_small = "<img src='images/icons/accept16.png' alt='Accept' border='0'>";
|
||||
$change_icon_small = "<img src='images/icons/refresh16.png' alt='Change' border='0'>";
|
||||
$money_icon_small = "<img src='images/icons/money16.png' alt='Account' border='0'>";
|
||||
$students_icon_small = "<img src='images/icons/groupofusers16.png' alt='Manage Students' border='0'>";
|
||||
$reminder_icon_small = "<img src='images/icons/mailsend16.png' alt='Send Account Login Reminder Email' border='0'>";
|
||||
$email_icon_small = "<img src='images/icons/mailsend16.png' alt='Send Email' border='0'>";
|
||||
$contact_icon_small = "<img src='images/icons/userid16.png' alt='View Contact Information' border='0'>";
|
||||
$clock_icon_small = "<img src='images/icons/clock16.png' alt='Login Log' border='0'>";
|
||||
$info_icon_small = "<img src='images/icons/infoabout16.png' alt='Information' border='0'>";
|
||||
$open_icon_small = "<img src='images/icons/folderopenb16.png' alt='Open Folder' border='0'>";
|
||||
$filesearch_icon_small = "<img src='images/icons/filesearch16.png' alt='Detail' border='0'>";
|
||||
$file_icon_small = "<img src='images/icons/textfile16.png' alt='Form' border='0'>";
|
||||
$users_icon_small = "<img src='images/icons/groupofusers16.png' alt='Manage Users' border='0'>";
|
||||
$order_icon_small = "<img src='images/icons/textfile16.png' alt='View Order' border='0'>";
|
||||
|
||||
|
||||
if (array_key_exists('REMOTE_ADDR',$_SERVER)) $user_ip = $_SERVER["REMOTE_ADDR"];
|
||||
$markIP = "187.191.8.250";
|
||||
|
||||
?>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 83 B |
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
//
|
||||
// Handle current language selection
|
||||
//
|
||||
$currLanguage = $school_record['default_language'];
|
||||
if (isset($_COOKIE['language_cookie']) && strlen($_COOKIE['language_cookie']) > 0) $currLanguage = $_COOKIE['language_cookie'];
|
||||
if (isset($_SESSION['UserInfo']['language'])) $currLanguage = $_SESSION['UserInfo']['language'];
|
||||
if (isset($_GET['selected_language']) && strlen($_GET['selected_language']) > 0) $currLanguage = $_GET['selected_language'];
|
||||
$_SESSION['UserInfo']['language'] = $currLanguage;
|
||||
setcookie('language_cookie', $currLanguage, time()+60*60*24*120, $cookiePath);
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,180 @@
|
||||
<?php
|
||||
|
||||
if (!isset($db_host) || strlen($db_host) == 0) return;
|
||||
if (!isset($db_uname) || strlen($db_uname) == 0) return;
|
||||
if (!isset($db_pass) || strlen($db_pass) == 0) return;
|
||||
if (!isset($db_dbname) || strlen($db_dbname) == 0) return;
|
||||
|
||||
|
||||
// Connect to the database, and return any errors
|
||||
$_DB = mysql_connect($db_host, $db_uname, $db_pass)
|
||||
or die("Cannot connect to database host: " . mysql_error());
|
||||
mysql_select_db($db_dbname)
|
||||
or die("The \"$db_dbname\" database does not exist: " . mysql_error());
|
||||
mysql_query("SET AUTOCOMMIT=1");
|
||||
|
||||
// Define error-handling sql-query function
|
||||
if (!function_exists('db_query')) {
|
||||
function db_query($query) {
|
||||
$r = mysql_query($query);
|
||||
if (is_resource($r)) {
|
||||
// mysql_query("COMMIT");
|
||||
return($r);
|
||||
}
|
||||
if (!$r) {
|
||||
$SQLlog = fopen("sql_error.log","a");
|
||||
$date = date("Y-m-d H:i:s",time());
|
||||
$file = $_SERVER["SCRIPT_FILENAME"];
|
||||
|
||||
$msg = "";
|
||||
$msg .= "$date: $query\n";
|
||||
$msg .= "$date: " . mysql_error() . "\n";
|
||||
$msg .= "$date: $file\n";
|
||||
|
||||
if (isset($GLOBALS['action'])) $msg .= "$date: action - " . $GLOBALS['action'] . "\n";
|
||||
if (isset($GLOBALS['naction'])) $msg .= "$date: naction - " . $GLOBALS['naction'] . "\n";
|
||||
|
||||
if (isset($_SERVER['HTTP_HOST']) && strlen($_SERVER['HTTP_HOST'])) {
|
||||
$msg .= "$date: Host - " . $_SERVER['HTTP_HOST'] . "\n";
|
||||
$msg .= "\n";
|
||||
fwrite($SQLlog,$msg);
|
||||
|
||||
if (function_exists('getLanguageText')) $error_message = getLanguageText('ERRORMSG-DATABASE-ERROR') . " - $date";
|
||||
else $error_message = "DB Error - $date";
|
||||
header("Location: /?error_message=".urlencode($error_message));
|
||||
exit;
|
||||
}
|
||||
else {
|
||||
$msg .= "\n";
|
||||
fwrite($SQLlog,$msg);
|
||||
echo("DB ERROR - $date\n");
|
||||
}
|
||||
exit;
|
||||
}
|
||||
return(true);
|
||||
}
|
||||
}
|
||||
|
||||
// sql query function to return a single row
|
||||
if (!function_exists('db_getVal')) {
|
||||
function db_getVal($query) {
|
||||
$r = db_query($query);
|
||||
if ($r && is_resource($r) && mysql_num_rows($r) == 1) {
|
||||
$data = mysql_fetch_array($r,MYSQL_ASSOC);
|
||||
if (count($data) == 1) $data = implode($data);
|
||||
}
|
||||
else {
|
||||
$data = '';
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('db_fetch_assoc')) {
|
||||
function db_fetch_assoc($results) {
|
||||
return(mysql_fetch_array($results,MYSQL_ASSOC));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_fetch_array')) {
|
||||
function db_fetch_array($results) {
|
||||
return(mysql_fetch_array($results));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_num_rows')) {
|
||||
function db_num_rows($results) {
|
||||
return(mysql_num_rows($results));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_escape_string')) {
|
||||
function db_escape_string($string) {
|
||||
return(mysql_real_escape_string($string));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_affected_rows')) {
|
||||
function db_affected_rows() {
|
||||
return(mysql_affected_rows());
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('db_insert_id')) {
|
||||
function db_insert_id() {
|
||||
return(mysql_insert_id());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_error')) {
|
||||
function db_error() {
|
||||
return(mysql_error());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// check if table exists
|
||||
if (!function_exists('db_tableExists')) {
|
||||
function db_tableExists($table) {
|
||||
$r = db_query("SHOW TABLES LIKE '$table'");
|
||||
if (db_num_rows($r) == 1) return(true);
|
||||
else return(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_close')) {
|
||||
function db_close() {
|
||||
global $_DB;
|
||||
return(mysql_close($_DB));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Define query logging function
|
||||
if (!function_exists('db_query_log')) {
|
||||
function db_query_log($query,$id) {
|
||||
$GLOBALS['userID'] = $_SESSION['UserInfo']['userid'];
|
||||
$GLOBALS['userNUM'] = $_SESSION['UserInfo']['record_num'];
|
||||
$GLOBALS['userIP'] = $_SESSION['UserInfo']['user_ip'];
|
||||
$GLOBALS['activityTIME'] = time();
|
||||
$GLOBALS['activityDATE'] = date("Y-m-d H:i:s",$activity_time);
|
||||
$GLOBALS['queryID'] = $id;
|
||||
|
||||
extract($GLOBALS);
|
||||
|
||||
$q = "";
|
||||
$table = new Table("query_log");
|
||||
$q = $table->BuildInsert();
|
||||
db_query($q);
|
||||
$r = mysql_insert_id();
|
||||
|
||||
db_query("UPDATE query_log SET q = '" . mysql_real_escape_string($q) . "' WHERE record_num = $r");
|
||||
}
|
||||
}
|
||||
|
||||
// sql function to get/set config values
|
||||
if (!function_exists('db_getConfig')) {
|
||||
function db_getConfig($config) {
|
||||
return db_getVal("SELECT value FROM configs WHERE name='$config' LIMIT 1");
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('db_setConfig')) {
|
||||
function db_setConfig($config, $value) {
|
||||
$config = mysql_escape_string($config);
|
||||
$value = mysql_escape_string($value);
|
||||
db_query("REPLACE INTO configs SET name='{$config}', value='{$value}'");
|
||||
}
|
||||
}
|
||||
|
||||
// Set collation
|
||||
db_query("SET NAMES 'utf8'");
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,249 @@
|
||||
<?php
|
||||
|
||||
if (!isset($db_host)) exit;
|
||||
if (!isset($db_uname)) exit;
|
||||
if (!isset($db_pass)) exit;
|
||||
if (!isset($db_dbname)) exit;
|
||||
|
||||
$SQLlog = NULL;
|
||||
|
||||
|
||||
// sql query function to write to the error log
|
||||
if (!function_exists('db_writeLog')) {
|
||||
function db_writeLog($eMessage, $localMessage = '', $query = '') {
|
||||
if (!isset($SQLlog) || !is_resource($SQLlog)) {
|
||||
$SQLlog = fopen("sql_error.log","a");
|
||||
}
|
||||
|
||||
fwrite($SQLlog,"==========================================\n");
|
||||
|
||||
$date = date("Y-m-d H:i:s",time());
|
||||
fwrite($SQLlog,"$date\n");
|
||||
|
||||
fwrite($SQLlog,$eMessage."\n");
|
||||
|
||||
if (strlen($localMessage)) {
|
||||
fwrite($SQLlog,$localMessage."\n");
|
||||
}
|
||||
|
||||
if (strlen($query)) {
|
||||
fwrite($SQLlog,$query."\n");
|
||||
}
|
||||
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//connect to the database..
|
||||
if (!function_exists('db_connect')) {
|
||||
function db_connect($db_host,$db_uname,$db_pass,$db_dbname) {
|
||||
global $_DB;
|
||||
|
||||
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
|
||||
|
||||
try {
|
||||
$_DB = new mysqli($db_host,$db_uname,$db_pass,$db_dbname);
|
||||
}
|
||||
catch (mysqli_sql_exception $e) {
|
||||
$eMessage = $e->getMessage();
|
||||
$localMessage = "Cannot connect to database host: $db_host :: $db_dbname";
|
||||
db_writeLog($eMessage, $localMessage);
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($_DB->connect_errno) {
|
||||
$eMessage = $_DB->connect_error;
|
||||
$localMessage = "Cannot connect to database host: $db_host :: $db_dbname";
|
||||
db_writeLog($eMessage, $localMessage);
|
||||
exit;
|
||||
}
|
||||
|
||||
$res = $_DB->set_charset("utf8");
|
||||
if (!$res) {
|
||||
$eMessage = "Cannot set character set: " . $_DB->error;
|
||||
printf($eMessage);
|
||||
db_writeLog($eMessage);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// execute database connect
|
||||
db_connect($db_host,$db_uname,$db_pass,$db_dbname);
|
||||
|
||||
|
||||
|
||||
// Define error-handling sql-query function
|
||||
if (!function_exists('db_query')) {
|
||||
function db_query($query) {
|
||||
global $_DB;
|
||||
|
||||
if (!is_object($_DB)) return;
|
||||
if (strlen($query) == 0) return(-1);
|
||||
|
||||
try {
|
||||
$r = $_DB->query($query);
|
||||
} catch (mysqli_sql_exception $e) {
|
||||
$Script = "";
|
||||
if (is_array($_SERVER) && array_key_exists('PHP_SELF',$_SERVER)) $Script = $_SERVER['PHP_SELF'];
|
||||
if (strlen($Script)) $Script = " ($Script)";
|
||||
$eMessage = $e->getMessage();
|
||||
$localMessage = "SQL Query Error$Script";
|
||||
db_writeLog($eMessage, $localMessage, $query);
|
||||
}
|
||||
|
||||
if (isset($r) && is_object($r)) return($r);
|
||||
if (!isset($r) || !$r) {
|
||||
|
||||
$date = date("Y-m-d H:i:s",time());
|
||||
$msg = "";
|
||||
$msg .= "$date: $query\n";
|
||||
$msg .= "$date: " . $_DB->error . "\n";
|
||||
|
||||
$file = basename($_SERVER['SCRIPT_FILENAME']);
|
||||
$msg .= "$date: $file\n";
|
||||
|
||||
if (isset($GLOBALS['action'])) $msg .= "$date: action - " . $GLOBALS['action'] . "\n";
|
||||
if (isset($GLOBALS['naction'])) $msg .= "$date: naction - " . $GLOBALS['naction'] . "\n";
|
||||
|
||||
if (isset($_SERVER['HTTP_HOST']) && strlen($_SERVER['HTTP_HOST'])) {
|
||||
$msg .= "$date: Host - " . $_SERVER['HTTP_HOST'] . "\n";
|
||||
$msg .= "\n";
|
||||
db_writeLog($msg, '', $query);
|
||||
|
||||
header("Location: /?action=&error_message=".urlencode("Database Error"));
|
||||
}
|
||||
else {
|
||||
$msg .= "\n";
|
||||
db_writeLog($msg, '', $query);
|
||||
echo("DB ERROR - $date\n");
|
||||
echo("$msg\n");
|
||||
}
|
||||
exit;
|
||||
}
|
||||
return(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// sql query function to return a single row
|
||||
if (!function_exists('db_getVal')) {
|
||||
function db_getVal($query) {
|
||||
global $_DB;
|
||||
|
||||
if (!is_object($_DB)) return;
|
||||
|
||||
$r = db_query($query);
|
||||
if (is_object($r) && db_num_rows($r) == 1) {
|
||||
$data = db_fetch_assoc($r);
|
||||
if (count($data) == 1) $data = implode($data);
|
||||
}
|
||||
else {
|
||||
$data = '';
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_fetch_assoc')) {
|
||||
function db_fetch_assoc($results) {
|
||||
if (!is_object($results)) return(null);
|
||||
return($results->fetch_assoc());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_fetch_array')) {
|
||||
function db_fetch_array($results) {
|
||||
if (!is_object($results)) return(null);
|
||||
return($results->fetch_array(MYSQLI_BOTH));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_num_rows')) {
|
||||
function db_num_rows($results) {
|
||||
if (!is_object($results)) return(0);
|
||||
return($results->num_rows);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_escape_string')) {
|
||||
function db_escape_string($string) {
|
||||
global $_DB;
|
||||
|
||||
if (!is_object($_DB)) return;
|
||||
return($_DB->real_escape_string($string));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_affected_rows')) {
|
||||
function db_affected_rows() {
|
||||
global $_DB;
|
||||
|
||||
if (!is_object($_DB)) return;
|
||||
return($_DB->affected_rows);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_insert_id')) {
|
||||
function db_insert_id() {
|
||||
global $_DB;
|
||||
|
||||
if (!is_object($_DB)) return;
|
||||
return($_DB->insert_id);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_error')) {
|
||||
function db_error() {
|
||||
global $_DB;
|
||||
|
||||
if (!is_object($_DB)) return;
|
||||
return($_DB->error);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// check if table exists
|
||||
if (!function_exists('db_tableExists')) {
|
||||
function db_tableExists($table) {
|
||||
$r = db_query("SHOW TABLES LIKE '$table'");
|
||||
if (db_num_rows($r) == 1) return(true);
|
||||
else return(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_columnExists')) {
|
||||
function db_columnExists($table,$column) {
|
||||
$r = db_query("SHOW COLUMNS FROM $table LIKE '$column'");
|
||||
return((db_num_rows($r))?TRUE:FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_close')) {
|
||||
function db_close() {
|
||||
global $_DB;
|
||||
|
||||
if (!is_object($_DB)) return;
|
||||
$r = $_DB->close();
|
||||
return($r);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Set collation
|
||||
db_query("SET NAMES utf8");
|
||||
db_query("SET CHARACTER SET utf8");
|
||||
$_DB->set_charset('utf8');
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,298 @@
|
||||
<?php
|
||||
|
||||
if (!isset($db_host)) exit();
|
||||
if (!isset($db_uname)) exit();
|
||||
if (!isset($db_pass)) exit();
|
||||
if (!isset($db_dbname)) exit();
|
||||
|
||||
$SQLlog = NULL;
|
||||
$queryLog = NULL;
|
||||
|
||||
|
||||
// sql query function to write to the sql log
|
||||
if (!function_exists('db_logQuery')) {
|
||||
function db_logQuery($query = '') {
|
||||
if (!isset($queryLog) || !is_resource($SQLlog)) {
|
||||
$queryLog = fopen("/m/data1/app.hotlunches.net/sql_query.log","a");
|
||||
}
|
||||
|
||||
fwrite($queryLog,"==========================================\n");
|
||||
|
||||
$date = date("Y-m-d H:i:s",time());
|
||||
fwrite($queryLog,"$date\n");
|
||||
|
||||
if (strlen($query)) {
|
||||
fwrite($queryLog,$query."\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// sql query function to write to the error log
|
||||
if (!function_exists('db_writeLog')) {
|
||||
function db_writeLog($eMessage, $localMessage = '', $query = '') {
|
||||
global $db_dbname;
|
||||
|
||||
if (!isset($SQLlog) || !is_resource($SQLlog)) {
|
||||
$SQLlog = fopen("/m/data1/app.hotlunches.net/sql_error.log","a");
|
||||
}
|
||||
|
||||
fwrite($SQLlog,"==========================================\n");
|
||||
|
||||
$date = date("Y-m-d H:i:s",time());
|
||||
fwrite($SQLlog,"$date\n");
|
||||
|
||||
fwrite($SQLlog,"DB: $db_dbname\n");
|
||||
|
||||
fwrite($SQLlog,$eMessage."\n");
|
||||
|
||||
if (strlen($localMessage)) {
|
||||
fwrite($SQLlog,$localMessage."\n");
|
||||
}
|
||||
|
||||
if (strlen($query)) {
|
||||
fwrite($SQLlog,$query."\n");
|
||||
}
|
||||
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//connect to the database..
|
||||
if (!function_exists('db_connect')) {
|
||||
function db_connect($db_host,$db_uname,$db_pass,$db_dbname) {
|
||||
global $_DB;
|
||||
|
||||
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
|
||||
|
||||
try {
|
||||
$_DB = new mysqli($db_host,$db_uname,$db_pass,$db_dbname);
|
||||
}
|
||||
catch (mysqli_sql_exception $e) {
|
||||
$eMessage = $e->getMessage();
|
||||
$localMessage = "Cannot connect to database host: $db_host :: $db_dbname";
|
||||
db_writeLog($eMessage, $localMessage);
|
||||
exit();
|
||||
}
|
||||
|
||||
if ($_DB->connect_errno) {
|
||||
$eMessage = $_DB->connect_error;
|
||||
$localMessage = "Cannot connect to database host: $db_host :: $db_dbname";
|
||||
db_writeLog($eMessage, $localMessage);
|
||||
exit();
|
||||
}
|
||||
|
||||
$res = $_DB->set_charset("utf8");
|
||||
if (!$res) {
|
||||
$eMessage = "Cannot set character set: " . $_DB->error;
|
||||
printf($eMessage);
|
||||
db_writeLog($eMessage);
|
||||
exit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// execute database connect
|
||||
db_connect($db_host,$db_uname,$db_pass,$db_dbname);
|
||||
|
||||
|
||||
|
||||
// Define error-handling sql-query function
|
||||
if (!function_exists('db_query')) {
|
||||
function db_query($query) {
|
||||
global $_DB, $school_num;
|
||||
|
||||
if (!is_object($_DB)) return;
|
||||
if (strlen($query) == 0) return(-1);
|
||||
// db_logQuery($query);
|
||||
|
||||
try {
|
||||
$r = $_DB->query($query);
|
||||
} catch (mysqli_sql_exception $e) {
|
||||
$Script = "";
|
||||
if (is_array($_SERVER) && array_key_exists('PHP_SELF',$_SERVER)) $Script = $_SERVER['PHP_SELF'];
|
||||
if (strlen($Script)) $Script = " ($Script)";
|
||||
if (array_key_exists('action', $GLOBALS)) $Script .= ' '.$GLOBALS['action'];
|
||||
if (array_key_exists('naction', $GLOBALS)) $Script .= ' / '.$GLOBALS['naction'];
|
||||
|
||||
$eMessage = $e->getMessage();
|
||||
$localMessage = "SQL Query Error$Script";
|
||||
db_writeLog($eMessage, $localMessage, $query);
|
||||
}
|
||||
|
||||
if (isset($r) && is_object($r)) return($r);
|
||||
if (!isset($r) || !$r) {
|
||||
|
||||
$date = date("Y-m-d H:i:s",time());
|
||||
$msg = "";
|
||||
$msg .= "$date: $query\n";
|
||||
$msg .= "$date: " . $_DB->error . "\n";
|
||||
|
||||
$file = basename($_SERVER['SCRIPT_FILENAME']);
|
||||
$msg .= "$date: $file\n";
|
||||
|
||||
if (isset($GLOBALS['action'])) $msg .= "$date: action - " . $GLOBALS['action'] . "\n";
|
||||
if (isset($GLOBALS['naction'])) $msg .= "$date: naction - " . $GLOBALS['naction'] . "\n";
|
||||
|
||||
if (isset($_SERVER['HTTP_HOST']) && strlen($_SERVER['HTTP_HOST'])) {
|
||||
$msg .= "$date: Host - " . $_SERVER['HTTP_HOST'] . "\n";
|
||||
$msg .= "\n";
|
||||
db_writeLog($msg, '', $query);
|
||||
|
||||
header("Location: /?action=&error_message=".urlencode("Database Error"));
|
||||
}
|
||||
else {
|
||||
$msg .= "\n";
|
||||
db_writeLog($msg, '', $query);
|
||||
writeLog("DB ERROR - $date\n");
|
||||
writeLog("$msg\n");
|
||||
}
|
||||
exit();
|
||||
}
|
||||
return(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// sql query function to return a single row (numeric indices)
|
||||
if (!function_exists('db_getVal')) {
|
||||
function db_getVal($query) {
|
||||
global $_DB;
|
||||
|
||||
if (!is_object($_DB)) return;
|
||||
|
||||
$r = db_query($query);
|
||||
if (is_object($r) && db_num_rows($r) == 1) {
|
||||
// $data = $r->fetch_array(MYSQLI_NUM);
|
||||
$data = db_fetch_assoc($r);
|
||||
if (count($data) == 1) $data = implode($data);
|
||||
}
|
||||
else {
|
||||
$data = '';
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// sql query function to return a single row (associative indices)
|
||||
if (!function_exists('db_getArray')) {
|
||||
function db_getArray($query) {
|
||||
global $_DB;
|
||||
|
||||
if (!is_object($_DB)) return;
|
||||
|
||||
$r = db_query($query);
|
||||
if (is_object($r) && db_num_rows($r) == 1) {
|
||||
$data = $r->fetch_array(MYSQLI_ASSOC);
|
||||
if (count($data) == 1) $data = implode($data);
|
||||
}
|
||||
else {
|
||||
$data = '';
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_fetch_assoc')) {
|
||||
function db_fetch_assoc($results) {
|
||||
if (!is_object($results)) return(null);
|
||||
return($results->fetch_assoc());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_fetch_array')) {
|
||||
function db_fetch_array($results) {
|
||||
if (!is_object($results)) return(null);
|
||||
return($results->fetch_array(MYSQLI_BOTH));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_num_rows')) {
|
||||
function db_num_rows($results) {
|
||||
if (!is_object($results)) return(0);
|
||||
return($results->num_rows);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_escape_string')) {
|
||||
function db_escape_string($string) {
|
||||
global $_DB;
|
||||
|
||||
if (!is_object($_DB)) return;
|
||||
return($_DB->real_escape_string($string));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_affected_rows')) {
|
||||
function db_affected_rows() {
|
||||
global $_DB;
|
||||
|
||||
if (!is_object($_DB)) return;
|
||||
return($_DB->affected_rows);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_insert_id')) {
|
||||
function db_insert_id() {
|
||||
global $_DB;
|
||||
|
||||
if (!is_object($_DB)) return;
|
||||
return($_DB->insert_id);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_error')) {
|
||||
function db_error() {
|
||||
global $_DB;
|
||||
|
||||
if (!is_object($_DB)) return;
|
||||
return($_DB->error);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// check if table exists
|
||||
if (!function_exists('db_tableExists')) {
|
||||
function db_tableExists($table) {
|
||||
$r = db_query("SHOW TABLES LIKE '$table'");
|
||||
if (db_num_rows($r) == 1) return(true);
|
||||
else return(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_columnExists')) {
|
||||
function db_columnExists($table,$column) {
|
||||
$r = db_query("SHOW COLUMNS FROM $table LIKE '$column'");
|
||||
return((db_num_rows($r))?TRUE:FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!function_exists('db_close')) {
|
||||
function db_close() {
|
||||
global $_DB;
|
||||
|
||||
if (!is_object($_DB)) return;
|
||||
$r = $_DB->close();
|
||||
return($r);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Set collation
|
||||
db_query("SET NAMES utf8");
|
||||
db_query("SET CHARACTER SET utf8");
|
||||
// $_DB->set_charset('utf8');
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,230 @@
|
||||
<?php
|
||||
// writeLog("date-time.php");
|
||||
|
||||
|
||||
// Date and Time processing functions
|
||||
|
||||
//
|
||||
// mapTimeZone to convert invalid Time Zone entries to valid ones
|
||||
//
|
||||
function mapTimeZone($tz) {
|
||||
switch ($tz) {
|
||||
case 'Canada/Pacific':
|
||||
$timezone = "America/Vancouver";
|
||||
break;
|
||||
|
||||
case 'Canada/Mountain':
|
||||
$timezone = "America/Edmonton";
|
||||
break;
|
||||
|
||||
case 'Canada/Central':
|
||||
$timezone = "America/Winnipeg";
|
||||
break;
|
||||
|
||||
case 'Canada/Eastern':
|
||||
$timezone = "America/Toronto";
|
||||
break;
|
||||
|
||||
default:
|
||||
$timezone = $tz;
|
||||
break;
|
||||
}
|
||||
|
||||
return($timezone);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Get date text
|
||||
//
|
||||
function dateString($fmt='',$time=0) {
|
||||
|
||||
global $school_record;
|
||||
global $currLanguage;
|
||||
|
||||
// Set the current timezone
|
||||
$timezone = mapTimeZone($school_record['timezone']);
|
||||
date_default_timezone_set($timezone);
|
||||
|
||||
if ($time == 0) $time = time();
|
||||
|
||||
if (strlen($fmt) == 0) $fmt = 'date';
|
||||
if ($fmt == 'datetime') $fmt = 'defaulttime';
|
||||
|
||||
// Get the mapping of the month name
|
||||
$monthText = date("F",$time);
|
||||
$monthCode = "MONTH-" . strtoupper($monthText);
|
||||
$month = getLanguageText($monthCode);
|
||||
|
||||
// Get the mapping of the short month name
|
||||
$monText = date("M",$time);
|
||||
$monCode = "MONTH-ABBR-" . strtoupper($monthText);
|
||||
$mon = getLanguageText($monCode);
|
||||
|
||||
// Get the mapping of the day of the week
|
||||
$dowText = date("l",$time);
|
||||
$dowCode = "TEXT-" . strtoupper($dowText);
|
||||
$dow = getLanguageText($dowCode);
|
||||
|
||||
// Format the date
|
||||
switch ($fmt) {
|
||||
case 'mon':
|
||||
$date_string = $mon;
|
||||
break;
|
||||
|
||||
case 'month':
|
||||
$date_string = $month;
|
||||
break;
|
||||
|
||||
case 'mon-year':
|
||||
$date_string = $mon . "-" . date("Y",time);
|
||||
break;
|
||||
|
||||
case 'month-year':
|
||||
$date_string = $month . "-" . date("Y",time);
|
||||
break;
|
||||
|
||||
case 'shortdate':
|
||||
case 'shortdatetime':
|
||||
case 'shortdate@time':
|
||||
if (!array_key_exists('short_date_format',$school_record) || strlen($school_record['short_date_format']) == 0) $dateFormat = "M j";
|
||||
else $dateFormat = $school_record['short_date_format'];
|
||||
|
||||
if (strlen($school_record['time_format']) == 0) $timeFormat = "g:ia";
|
||||
else $timeFormat = $school_record['time_format'];
|
||||
|
||||
$date_string = date($dateFormat,$time);
|
||||
$date_string = str_replace($monthText,$month,$date_string);
|
||||
$date_string = str_replace($dowText,$dow,$date_string);
|
||||
|
||||
if ($fmt == 'shortdatetime') $date_string .= " " . date($timeFormat,$time);
|
||||
if ($fmt == 'shortdate@time') $date_string .= " @ " . date($timeFormat,$time);
|
||||
break;
|
||||
|
||||
default:
|
||||
case 'date':
|
||||
case 'datetime':
|
||||
case 'date@time':
|
||||
case 'default':
|
||||
case 'defaulttime':
|
||||
if (strlen($school_record['date_format']) == 0) $dateFormat = "F j, Y";
|
||||
else $dateFormat = $school_record['date_format'];
|
||||
|
||||
if (strlen($school_record['time_format']) == 0) $timeFormat = "g:ia";
|
||||
else $timeFormat = $school_record['time_format'];
|
||||
|
||||
$date_string = date($dateFormat,$time);
|
||||
$date_string = str_replace($dowText,$dow,$date_string);
|
||||
|
||||
if (strpos($date_string, $monthText) !== false) {
|
||||
// writeLog("monthText: $monthText");
|
||||
// writeLog("month: $month");
|
||||
// writeLog("date_string: $date_string");
|
||||
$date_string = str_replace($monthText,$month,$date_string);
|
||||
}
|
||||
else {
|
||||
// writeLog("monText: $monText");
|
||||
// writeLog("mon: $mon");
|
||||
// writeLog("date_string: $date_string");
|
||||
$date_string = str_replace($monText,$mon,$date_string);
|
||||
}
|
||||
|
||||
if ($fmt == 'datetime') $date_string .= " " . date($timeFormat,$time);
|
||||
if ($fmt == 'defaulttime') $date_string .= " " . date($timeFormat,$time);
|
||||
if ($fmt == 'date@time') $date_string .= " @ " . date($timeFormat,$time);
|
||||
break;
|
||||
|
||||
case 'date-cal':
|
||||
// Get the mapping of the short month name
|
||||
$monText = date("F",$time);
|
||||
$monCode = "MONTH-ABBR-" . strtoupper($monText);
|
||||
$monText = date("M",$time);
|
||||
$mon = getLanguageText($monCode);
|
||||
|
||||
// Get the mapping of the day of the week
|
||||
$dowText = date("D",$time);
|
||||
$dowCode = "TEXT-" . strtoupper($dowText);
|
||||
$dow = getLanguageText($dowCode);
|
||||
|
||||
$date_string = date("D M j",$time);
|
||||
$date_string = str_replace($monText,$mon,$date_string);
|
||||
$date_string = str_replace($dowText,$dow,$date_string);
|
||||
break;
|
||||
|
||||
case 'day':
|
||||
// Get the mapping of the day of the week
|
||||
$dowText = date("D",$time);
|
||||
$dowCode = "TEXT-" . strtoupper($dowText);
|
||||
$dow = getLanguageText($dowCode);
|
||||
$date_string = $dow;
|
||||
break;
|
||||
|
||||
case 'time':
|
||||
if (strlen($school_record['time_format']) == 0) $timeFormat = "g:ia";
|
||||
else $timeFormat = $school_record['time_format'];
|
||||
|
||||
$date_string = date($timeFormat,$time);
|
||||
break;
|
||||
}
|
||||
|
||||
return($date_string);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Get default date time
|
||||
//
|
||||
function dateFormat($time=0) {
|
||||
return(dateString('datetime',$time));
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Reformat date field based on a format string
|
||||
//
|
||||
function formatDate($date,$date_format) {
|
||||
switch($date_format) {
|
||||
case 'YYYY-MM-DD':
|
||||
return($date);
|
||||
break;
|
||||
|
||||
case 'YYYY/MM/DD':
|
||||
case 'YY/MM/DD':
|
||||
list($yr,$mo,$dy) = explode('/',$date);
|
||||
break;
|
||||
|
||||
case 'YY-MM-DD':
|
||||
list($yr,$mo,$dy) = explode('-',$date);
|
||||
break;
|
||||
|
||||
case 'DD-MM-YYYY':
|
||||
case 'DD-MM-YY':
|
||||
list($dy,$mo,$yr) = explode('-',$date);
|
||||
break;
|
||||
|
||||
case 'DD/MM/YYYY':
|
||||
case 'DD/MM/YY':
|
||||
list($dy,$mo,$yr) = explode('/',$date);
|
||||
break;
|
||||
|
||||
case 'MM-DD-YYYY':
|
||||
case 'MM-DD-YY':
|
||||
list($mo,$dy,$yr) = explode('-',$date);
|
||||
break;
|
||||
|
||||
case 'MM/DD/YYYY':
|
||||
case 'MM/DD/YY':
|
||||
list($mo,$dy,$yr) = explode('/',$date);
|
||||
break;
|
||||
}
|
||||
|
||||
if (strlen($yr) == 2) {
|
||||
if ($yr <= date("y",time())) $yr = "20$yr";
|
||||
else $yr = "19$yr";
|
||||
}
|
||||
$date = sprintf("%4d-%02d-%02d",$yr,$mo,$dy);
|
||||
|
||||
return($date);
|
||||
}
|
||||
|
||||
?>
|
||||
+335
@@ -0,0 +1,335 @@
|
||||
// ===================================================================
|
||||
// Author: Matt Kruse <matt@mattkruse.com>
|
||||
// WWW: http://www.mattkruse.com/
|
||||
//
|
||||
// NOTICE: You may use this code for any purpose, commercial or
|
||||
// private, without any further permission from the author. You may
|
||||
// remove this notice from your final code if you wish, however it is
|
||||
// appreciated by the author if at least my web site address is kept.
|
||||
//
|
||||
// You may *NOT* re-distribute this code in any way except through its
|
||||
// use. That means, you can include it in your product, or your web
|
||||
// site, or any other form where the code is actually being used. You
|
||||
// may not put the plain javascript up on your site for download or
|
||||
// include it in your javascript libraries for download.
|
||||
// If you wish to share this code with others, please just point them
|
||||
// to the URL instead.
|
||||
// Please DO NOT link directly to my .js files from your site. Copy
|
||||
// the files to your server and use them there. Thank you.
|
||||
// ===================================================================
|
||||
|
||||
// HISTORY
|
||||
// ------------------------------------------------------------------
|
||||
// May 17, 2003: Fixed bug in parseDate() for dates <1970
|
||||
// March 11, 2003: Added parseDate() function
|
||||
// March 11, 2003: Added "NNN" formatting option. Doesn't match up
|
||||
// perfectly with SimpleDateFormat formats, but
|
||||
// backwards-compatability was required.
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
// These functions use the same 'format' strings as the
|
||||
// java.text.SimpleDateFormat class, with minor exceptions.
|
||||
// The format string consists of the following abbreviations:
|
||||
//
|
||||
// Field | Full Form | Short Form
|
||||
// -------------+--------------------+-----------------------
|
||||
// Year | yyyy (4 digits) | yy (2 digits), y (2 or 4 digits)
|
||||
// Month | MMM (name or abbr.)| MM (2 digits), M (1 or 2 digits)
|
||||
// | NNN (abbr.) |
|
||||
// Day of Month | dd (2 digits) | d (1 or 2 digits)
|
||||
// Day of Week | EE (name) | E (abbr)
|
||||
// Hour (1-12) | hh (2 digits) | h (1 or 2 digits)
|
||||
// Hour (0-23) | HH (2 digits) | H (1 or 2 digits)
|
||||
// Hour (0-11) | KK (2 digits) | K (1 or 2 digits)
|
||||
// Hour (1-24) | kk (2 digits) | k (1 or 2 digits)
|
||||
// Minute | mm (2 digits) | m (1 or 2 digits)
|
||||
// Second | ss (2 digits) | s (1 or 2 digits)
|
||||
// AM/PM | a |
|
||||
//
|
||||
// NOTE THE DIFFERENCE BETWEEN MM and mm! Month=MM, not mm!
|
||||
// Examples:
|
||||
// "MMM d, y" matches: January 01, 2000
|
||||
// Dec 1, 1900
|
||||
// Nov 20, 00
|
||||
// "M/d/yy" matches: 01/20/00
|
||||
// 9/2/00
|
||||
// "MMM dd, yyyy hh:mm:ssa" matches: "January 01, 2000 12:30:45AM"
|
||||
// ------------------------------------------------------------------
|
||||
|
||||
var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
|
||||
var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');
|
||||
function LZ(x) {return(x<0||x>9?"":"0")+x}
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
// isDate ( date_string, format_string )
|
||||
// Returns true if date string matches format of format string and
|
||||
// is a valid date. Else returns false.
|
||||
// It is recommended that you trim whitespace around the value before
|
||||
// passing it to this function, as whitespace is NOT ignored!
|
||||
// ------------------------------------------------------------------
|
||||
function isDate(val,format) {
|
||||
var date=getDateFromFormat(val,format);
|
||||
if (date==0) { return false; }
|
||||
return true;
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// compareDates(date1,date1format,date2,date2format)
|
||||
// Compare two date strings to see which is greater.
|
||||
// Returns:
|
||||
// 1 if date1 is greater than date2
|
||||
// 0 if date2 is greater than date1 of if they are the same
|
||||
// -1 if either of the dates is in an invalid format
|
||||
// -------------------------------------------------------------------
|
||||
function compareDates(date1,dateformat1,date2,dateformat2) {
|
||||
var d1=getDateFromFormat(date1,dateformat1);
|
||||
var d2=getDateFromFormat(date2,dateformat2);
|
||||
if (d1==0 || d2==0) {
|
||||
return -1;
|
||||
}
|
||||
else if (d1 > d2) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
// formatDate (date_object, format)
|
||||
// Returns a date in the output format specified.
|
||||
// The format string uses the same abbreviations as in getDateFromFormat()
|
||||
// ------------------------------------------------------------------
|
||||
function formatDate(date,format) {
|
||||
format=format+"";
|
||||
var result="";
|
||||
var i_format=0;
|
||||
var c="";
|
||||
var token="";
|
||||
var y=date.getYear()+"";
|
||||
var M=date.getMonth()+1;
|
||||
var d=date.getDate();
|
||||
var E=date.getDay();
|
||||
var H=date.getHours();
|
||||
var m=date.getMinutes();
|
||||
var s=date.getSeconds();
|
||||
var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;
|
||||
// Convert real date parts into formatted versions
|
||||
var value=new Object();
|
||||
if (y.length < 4) {y=""+(y-0+1900);}
|
||||
value["y"]=""+y;
|
||||
value["yyyy"]=y;
|
||||
value["yy"]=y.substring(2,4);
|
||||
value["M"]=M;
|
||||
value["MM"]=LZ(M);
|
||||
value["MMM"]=MONTH_NAMES[M-1];
|
||||
value["NNN"]=MONTH_NAMES[M+11];
|
||||
value["d"]=d;
|
||||
value["dd"]=LZ(d);
|
||||
value["E"]=DAY_NAMES[E+7];
|
||||
value["EE"]=DAY_NAMES[E];
|
||||
value["H"]=H;
|
||||
value["HH"]=LZ(H);
|
||||
if (H==0){value["h"]=12;}
|
||||
else if (H>12){value["h"]=H-12;}
|
||||
else {value["h"]=H;}
|
||||
value["hh"]=LZ(value["h"]);
|
||||
if (H>11){value["K"]=H-12;} else {value["K"]=H;}
|
||||
value["k"]=H+1;
|
||||
value["KK"]=LZ(value["K"]);
|
||||
value["kk"]=LZ(value["k"]);
|
||||
if (H > 11) { value["a"]="PM"; }
|
||||
else { value["a"]="AM"; }
|
||||
value["m"]=m;
|
||||
value["mm"]=LZ(m);
|
||||
value["s"]=s;
|
||||
value["ss"]=LZ(s);
|
||||
while (i_format < format.length) {
|
||||
c=format.charAt(i_format);
|
||||
token="";
|
||||
while ((format.charAt(i_format)==c) && (i_format < format.length)) {
|
||||
token += format.charAt(i_format++);
|
||||
}
|
||||
if (value[token] != null) { result=result + value[token]; }
|
||||
else { result=result + token; }
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
// Utility functions for parsing in getDateFromFormat()
|
||||
// ------------------------------------------------------------------
|
||||
function _isInteger(val) {
|
||||
var digits="1234567890";
|
||||
for (var i=0; i < val.length; i++) {
|
||||
if (digits.indexOf(val.charAt(i))==-1) { return false; }
|
||||
}
|
||||
return true;
|
||||
}
|
||||
function _getInt(str,i,minlength,maxlength) {
|
||||
for (var x=maxlength; x>=minlength; x--) {
|
||||
var token=str.substring(i,i+x);
|
||||
if (token.length < minlength) { return null; }
|
||||
if (_isInteger(token)) { return token; }
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
// getDateFromFormat( date_string , format_string )
|
||||
//
|
||||
// This function takes a date string and a format string. It matches
|
||||
// If the date string matches the format string, it returns the
|
||||
// getTime() of the date. If it does not match, it returns 0.
|
||||
// ------------------------------------------------------------------
|
||||
function getDateFromFormat(val,format) {
|
||||
val=val+"";
|
||||
format=format+"";
|
||||
var i_val=0;
|
||||
var i_format=0;
|
||||
var c="";
|
||||
var token="";
|
||||
var token2="";
|
||||
var x,y;
|
||||
var now=new Date();
|
||||
var year=now.getYear();
|
||||
var month=now.getMonth()+1;
|
||||
var date=1;
|
||||
var hh=now.getHours();
|
||||
var mm=now.getMinutes();
|
||||
var ss=now.getSeconds();
|
||||
var ampm="";
|
||||
|
||||
while (i_format < format.length) {
|
||||
// Get next token from format string
|
||||
c=format.charAt(i_format);
|
||||
token="";
|
||||
while ((format.charAt(i_format)==c) && (i_format < format.length)) {
|
||||
token += format.charAt(i_format++);
|
||||
}
|
||||
// Extract contents of value based on format token
|
||||
if (token=="yyyy" || token=="yy" || token=="y") {
|
||||
if (token=="yyyy") { x=4;y=4; }
|
||||
if (token=="yy") { x=2;y=2; }
|
||||
if (token=="y") { x=2;y=4; }
|
||||
year=_getInt(val,i_val,x,y);
|
||||
if (year==null) { return 0; }
|
||||
i_val += year.length;
|
||||
if (year.length==2) {
|
||||
if (year > 70) { year=1900+(year-0); }
|
||||
else { year=2000+(year-0); }
|
||||
}
|
||||
}
|
||||
else if (token=="MMM"||token=="NNN"){
|
||||
month=0;
|
||||
for (var i=0; i<MONTH_NAMES.length; i++) {
|
||||
var month_name=MONTH_NAMES[i];
|
||||
if (val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()) {
|
||||
if (token=="MMM"||(token=="NNN"&&i>11)) {
|
||||
month=i+1;
|
||||
if (month>12) { month -= 12; }
|
||||
i_val += month_name.length;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((month < 1)||(month>12)){return 0;}
|
||||
}
|
||||
else if (token=="EE"||token=="E"){
|
||||
for (var i=0; i<DAY_NAMES.length; i++) {
|
||||
var day_name=DAY_NAMES[i];
|
||||
if (val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()) {
|
||||
i_val += day_name.length;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (token=="MM"||token=="M") {
|
||||
month=_getInt(val,i_val,token.length,2);
|
||||
if(month==null||(month<1)||(month>12)){return 0;}
|
||||
i_val+=month.length;}
|
||||
else if (token=="dd"||token=="d") {
|
||||
date=_getInt(val,i_val,token.length,2);
|
||||
if(date==null||(date<1)||(date>31)){return 0;}
|
||||
i_val+=date.length;}
|
||||
else if (token=="hh"||token=="h") {
|
||||
hh=_getInt(val,i_val,token.length,2);
|
||||
if(hh==null||(hh<1)||(hh>12)){return 0;}
|
||||
i_val+=hh.length;}
|
||||
else if (token=="HH"||token=="H") {
|
||||
hh=_getInt(val,i_val,token.length,2);
|
||||
if(hh==null||(hh<0)||(hh>23)){return 0;}
|
||||
i_val+=hh.length;}
|
||||
else if (token=="KK"||token=="K") {
|
||||
hh=_getInt(val,i_val,token.length,2);
|
||||
if(hh==null||(hh<0)||(hh>11)){return 0;}
|
||||
i_val+=hh.length;}
|
||||
else if (token=="kk"||token=="k") {
|
||||
hh=_getInt(val,i_val,token.length,2);
|
||||
if(hh==null||(hh<1)||(hh>24)){return 0;}
|
||||
i_val+=hh.length;hh--;}
|
||||
else if (token=="mm"||token=="m") {
|
||||
mm=_getInt(val,i_val,token.length,2);
|
||||
if(mm==null||(mm<0)||(mm>59)){return 0;}
|
||||
i_val+=mm.length;}
|
||||
else if (token=="ss"||token=="s") {
|
||||
ss=_getInt(val,i_val,token.length,2);
|
||||
if(ss==null||(ss<0)||(ss>59)){return 0;}
|
||||
i_val+=ss.length;}
|
||||
else if (token=="a") {
|
||||
if (val.substring(i_val,i_val+2).toLowerCase()=="am") {ampm="AM";}
|
||||
else if (val.substring(i_val,i_val+2).toLowerCase()=="pm") {ampm="PM";}
|
||||
else {return 0;}
|
||||
i_val+=2;}
|
||||
else {
|
||||
if (val.substring(i_val,i_val+token.length)!=token) {return 0;}
|
||||
else {i_val+=token.length;}
|
||||
}
|
||||
}
|
||||
// If there are any trailing characters left in the value, it doesn't match
|
||||
if (i_val != val.length) { return 0; }
|
||||
// Is date valid for month?
|
||||
if (month==2) {
|
||||
// Check for leap year
|
||||
if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { // leap year
|
||||
if (date > 29){ return 0; }
|
||||
}
|
||||
else { if (date > 28) { return 0; } }
|
||||
}
|
||||
if ((month==4)||(month==6)||(month==9)||(month==11)) {
|
||||
if (date > 30) { return 0; }
|
||||
}
|
||||
// Correct hours value
|
||||
if (hh<12 && ampm=="PM") { hh=hh-0+12; }
|
||||
else if (hh>11 && ampm=="AM") { hh-=12; }
|
||||
var newdate=new Date(year,month-1,date,hh,mm,ss);
|
||||
return newdate.getTime();
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
// parseDate( date_string [, prefer_euro_format] )
|
||||
//
|
||||
// This function takes a date string and tries to match it to a
|
||||
// number of possible date formats to get the value. It will try to
|
||||
// match against the following international formats, in this order:
|
||||
// y-M-d MMM d, y MMM d,y y-MMM-d d-MMM-y MMM d
|
||||
// M/d/y M-d-y M.d.y MMM-d M/d M-d
|
||||
// d/M/y d-M-y d.M.y d-MMM d/M d-M
|
||||
// A second argument may be passed to instruct the method to search
|
||||
// for formats like d/M/y (european format) before M/d/y (American).
|
||||
// Returns a Date object or null if no patterns match.
|
||||
// ------------------------------------------------------------------
|
||||
function parseDate(val) {
|
||||
var preferEuro=(arguments.length==2)?arguments[1]:false;
|
||||
generalFormats=new Array('y-M-d','MMM d, y','MMM d,y','y-MMM-d','d-MMM-y','MMM d');
|
||||
monthFirst=new Array('M/d/y','M-d-y','M.d.y','MMM-d','M/d','M-d');
|
||||
dateFirst =new Array('d/M/y','d-M-y','d.M.y','d-MMM','d/M','d-M');
|
||||
var checkList=new Array('generalFormats',preferEuro?'dateFirst':'monthFirst',preferEuro?'monthFirst':'dateFirst');
|
||||
var d=null;
|
||||
for (var i=0; i<checkList.length; i++) {
|
||||
var l=window[checkList[i]];
|
||||
for (var j=0; j<l.length; j++) {
|
||||
d=getDateFromFormat(val,l[j]);
|
||||
if (d!=0) { return new Date(d); }
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
//
|
||||
// Reformat date field based on a format string
|
||||
//
|
||||
function formatDate($date,$date_format) {
|
||||
switch($date_format) {
|
||||
case 'YYYY-MM-DD':
|
||||
break;
|
||||
|
||||
case 'YY-MM-DD':
|
||||
$yr = substr($date,0,2);
|
||||
$mo = substr($date,3,2);
|
||||
$dy = substr($date,6,2);
|
||||
if ($yr <= date("y",time())) $yr = "20$yr";
|
||||
else $yr = "19$yr";
|
||||
$date = "$yr-$mo-$dy";
|
||||
break;
|
||||
|
||||
case 'YYYY/MM/DD':
|
||||
$yr = substr($date,0,4);
|
||||
$mo = substr($date,5,2);
|
||||
$dy = substr($date,8,2);
|
||||
$date = "$yr-$mo-$dy";
|
||||
break;
|
||||
|
||||
case 'DD/MM/YYYY':
|
||||
$yr = substr($date,6,4);
|
||||
$mo = substr($date,3,2);
|
||||
$dy = substr($date,0,2);
|
||||
$date = "$yr-$mo-$dy";
|
||||
break;
|
||||
|
||||
case 'DD/MM/YY':
|
||||
$yr = substr($date,6,2);
|
||||
$mo = substr($date,3,2);
|
||||
$dy = substr($date,0,2);
|
||||
if ($yr <= date("y",time())) $yr = "20$yr";
|
||||
else $yr = "19$yr";
|
||||
$date = "$yr-$mo-$dy";
|
||||
break;
|
||||
|
||||
case 'MM/DD/YYYY':
|
||||
$yr = substr($date,6,4);
|
||||
$mo = substr($date,0,2);
|
||||
$dy = substr($date,3,2);
|
||||
$date = "$yr-$mo-$dy";
|
||||
break;
|
||||
|
||||
case 'MM/DD/YY':
|
||||
$yr = substr($date,6,2);
|
||||
$mo = substr($date,0,2);
|
||||
$dy = substr($date,3,2);
|
||||
if ($yr <= date("y",time())) $yr = "20$yr";
|
||||
else $yr = "19$yr";
|
||||
$date = "$yr-$mo-$dy";
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
define('FPDF_FONTPATH','font/');
|
||||
require('fpdi.php');
|
||||
|
||||
$pdf= new fpdi();
|
||||
$pagecount = $pdf->setSourceFile("pdfdoc.pdf");
|
||||
|
||||
$tplidx = $pdf->ImportPage(1);
|
||||
|
||||
$pdf->addPage();
|
||||
$pdf->useTemplate($tplidx,10,10,90);
|
||||
|
||||
$pdf->Output("newpdf.pdf","I");
|
||||
?>
|
||||
@@ -0,0 +1,386 @@
|
||||
// -------------------------------------------------------------------
|
||||
// DHTML Window Widget- By Dynamic Drive, available at: http://www.dynamicdrive.com
|
||||
// v1.0: Script created Feb 15th, 07'
|
||||
// v1.01: Feb 21th, 07' (see changelog.txt)
|
||||
// v1.02: March 26th, 07' (see changelog.txt)
|
||||
// v1.03: May 5th, 07' (see changelog.txt)
|
||||
// v1.1: Oct 29th, 07' (see changelog.txt)
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
var dhtmlwindow={
|
||||
imagefiles:['help-images/min.gif', 'help-images/close.gif', 'help-images/restore.gif', 'help-images/resize.gif'], //Path to 4 images used by script, in that order
|
||||
ajaxbustcache: true, //Bust caching when fetching a file via Ajax?
|
||||
ajaxloadinghtml: '<b>Loading Page. Please wait...</b>', //HTML to show while window fetches Ajax Content?
|
||||
|
||||
minimizeorder: 0,
|
||||
zIndexvalue:100,
|
||||
tobjects: [], //object to contain references to dhtml window divs, for cleanup purposes
|
||||
lastactivet: {}, //reference to last active DHTML window
|
||||
|
||||
init:function(t){
|
||||
var domwindow=document.createElement("div") //create dhtml window div
|
||||
domwindow.id=t
|
||||
domwindow.className="dhtmlwindow"
|
||||
var domwindowdata=''
|
||||
domwindowdata='<div class="drag-handle">'
|
||||
domwindowdata+='DHTML Window <div class="drag-controls"><img src="'+this.imagefiles[0]+'" title="Minimize" /><img src="'+this.imagefiles[1]+'" title="Close" /></div>'
|
||||
domwindowdata+='</div>'
|
||||
domwindowdata+='<div class="drag-contentarea"></div>'
|
||||
domwindowdata+='<div class="drag-statusarea"><div class="drag-resizearea" style="background: transparent url('+this.imagefiles[3]+') top right no-repeat;"> </div></div>'
|
||||
domwindowdata+='</div>'
|
||||
domwindow.innerHTML=domwindowdata
|
||||
document.getElementById("dhtmlwindowholder").appendChild(domwindow)
|
||||
//this.zIndexvalue=(this.zIndexvalue)? this.zIndexvalue+1 : 100 //z-index value for DHTML window: starts at 0, increments whenever a window has focus
|
||||
var t=document.getElementById(t)
|
||||
var divs=t.getElementsByTagName("div")
|
||||
for (var i=0; i<divs.length; i++){ //go through divs inside dhtml window and extract all those with class="drag-" prefix
|
||||
if (/drag-/.test(divs[i].className))
|
||||
t[divs[i].className.replace(/drag-/, "")]=divs[i] //take out the "drag-" prefix for shorter access by name
|
||||
}
|
||||
//t.style.zIndex=this.zIndexvalue //set z-index of this dhtml window
|
||||
t.handle._parent=t //store back reference to dhtml window
|
||||
t.resizearea._parent=t //same
|
||||
t.controls._parent=t //same
|
||||
t.onclose=function(){return true} //custom event handler "onclose"
|
||||
t.onmousedown=function(){dhtmlwindow.setfocus(this)} //Increase z-index of window when focus is on it
|
||||
t.handle.onmousedown=dhtmlwindow.setupdrag //set up drag behavior when mouse down on handle div
|
||||
t.resizearea.onmousedown=dhtmlwindow.setupdrag //set up drag behavior when mouse down on resize div
|
||||
t.controls.onclick=dhtmlwindow.enablecontrols
|
||||
t.show=function(){dhtmlwindow.show(this)} //public function for showing dhtml window
|
||||
t.hide=function(){dhtmlwindow.hide(this)} //public function for hiding dhtml window
|
||||
t.close=function(){dhtmlwindow.close(this)} //public function for closing dhtml window (also empties DHTML window content)
|
||||
t.setSize=function(w, h){dhtmlwindow.setSize(this, w, h)} //public function for setting window dimensions
|
||||
t.moveTo=function(x, y){dhtmlwindow.moveTo(this, x, y)} //public function for moving dhtml window (relative to viewpoint)
|
||||
t.isResize=function(bol){dhtmlwindow.isResize(this, bol)} //public function for specifying if window is resizable
|
||||
t.isScrolling=function(bol){dhtmlwindow.isScrolling(this, bol)} //public function for specifying if window content contains scrollbars
|
||||
t.load=function(contenttype, contentsource, title){dhtmlwindow.load(this, contenttype, contentsource, title)} //public function for loading content into window
|
||||
this.tobjects[this.tobjects.length]=t
|
||||
return t //return reference to dhtml window div
|
||||
},
|
||||
|
||||
open:function(t, contenttype, contentsource, title, attr, recalonload){
|
||||
var d=dhtmlwindow //reference dhtml window object
|
||||
function getValue(Name){
|
||||
var config=new RegExp(Name+"=([^,]+)", "i") //get name/value config pair (ie: width=400px,)
|
||||
return (config.test(attr))? parseInt(RegExp.$1) : 0 //return value portion (int), or 0 (false) if none found
|
||||
}
|
||||
if (document.getElementById(t)==null) //if window doesn't exist yet, create it
|
||||
t=this.init(t) //return reference to dhtml window div
|
||||
else
|
||||
t=document.getElementById(t)
|
||||
this.setfocus(t)
|
||||
t.setSize(getValue(("width")), (getValue("height"))) //Set dimensions of window
|
||||
var xpos=getValue("center")? "middle" : getValue("left") //Get x coord of window
|
||||
var ypos=getValue("center")? "middle" : getValue("top") //Get y coord of window
|
||||
//t.moveTo(xpos, ypos) //Position window
|
||||
if (typeof recalonload!="undefined" && recalonload=="recal" && this.scroll_top==0){ //reposition window when page fully loads with updated window viewpoints?
|
||||
if (window.attachEvent && !window.opera) //In IE, add another 400 milisecs on page load (viewpoint properties may return 0 b4 then)
|
||||
this.addEvent(window, function(){setTimeout(function(){t.moveTo(xpos, ypos)}, 400)}, "load")
|
||||
else
|
||||
this.addEvent(window, function(){t.moveTo(xpos, ypos)}, "load")
|
||||
}
|
||||
t.isResize(getValue("resize")) //Set whether window is resizable
|
||||
t.isScrolling(getValue("scrolling")) //Set whether window should contain scrollbars
|
||||
t.style.visibility="visible"
|
||||
t.style.display="block"
|
||||
t.contentarea.style.display="block"
|
||||
t.moveTo(xpos, ypos) //Position window
|
||||
t.load(contenttype, contentsource, title)
|
||||
if (t.state=="minimized" && t.controls.firstChild.title=="Restore"){ //If window exists and is currently minimized?
|
||||
t.controls.firstChild.setAttribute("src", dhtmlwindow.imagefiles[0]) //Change "restore" icon within window interface to "minimize" icon
|
||||
t.controls.firstChild.setAttribute("title", "Minimize")
|
||||
t.state="fullview" //indicate the state of the window as being "fullview"
|
||||
}
|
||||
|
||||
// Disable minimize button - Mark Fester
|
||||
t.controls.firstChild.style.display="none"
|
||||
return t
|
||||
},
|
||||
|
||||
setSize:function(t, w, h){ //set window size (min is 150px wide by 100px tall)
|
||||
t.style.width=Math.max(parseInt(w), 150)+"px"
|
||||
t.contentarea.style.height=Math.max(parseInt(h), 100)+"px"
|
||||
},
|
||||
|
||||
moveTo:function(t, x, y){ //move window. Position includes current viewpoint of document
|
||||
this.getviewpoint() //Get current viewpoint numbers
|
||||
t.style.left=(x=="middle")? this.scroll_left+(this.docwidth-t.offsetWidth)/2+"px" : this.scroll_left+parseInt(x)+"px"
|
||||
t.style.top=(y=="middle")? this.scroll_top+(this.docheight-t.offsetHeight)/2+"px" : this.scroll_top+parseInt(y)+"px"
|
||||
},
|
||||
|
||||
isResize:function(t, bol){ //show or hide resize inteface (part of the status bar)
|
||||
t.statusarea.style.display=(bol)? "block" : "none"
|
||||
t.resizeBool=(bol)? 1 : 0
|
||||
},
|
||||
|
||||
isScrolling:function(t, bol){ //set whether loaded content contains scrollbars
|
||||
t.contentarea.style.overflow=(bol)? "auto" : "hidden"
|
||||
},
|
||||
|
||||
load:function(t, contenttype, contentsource, title){ //loads content into window plus set its title (3 content types: "inline", "iframe", or "ajax")
|
||||
if (t.isClosed){
|
||||
alert("DHTML Window has been closed, so no window to load contents into. Open/Create the window again.")
|
||||
return
|
||||
}
|
||||
var contenttype=contenttype.toLowerCase() //convert string to lower case
|
||||
if (typeof title!="undefined")
|
||||
t.handle.firstChild.nodeValue=title
|
||||
if (contenttype=="inline")
|
||||
t.contentarea.innerHTML=contentsource
|
||||
else if (contenttype=="div"){
|
||||
var inlinedivref=document.getElementById(contentsource)
|
||||
t.contentarea.innerHTML=(inlinedivref.defaultHTML || inlinedivref.innerHTML) //Populate window with contents of inline div on page
|
||||
if (!inlinedivref.defaultHTML)
|
||||
inlinedivref.defaultHTML=inlinedivref.innerHTML //save HTML within inline DIV
|
||||
inlinedivref.innerHTML="" //then, remove HTML within inline DIV (to prevent duplicate IDs, NAME attributes etc in contents of DHTML window
|
||||
inlinedivref.style.display="none" //hide that div
|
||||
}
|
||||
else if (contenttype=="iframe"){
|
||||
t.contentarea.style.overflow="hidden" //disable window scrollbars, as iframe already contains scrollbars
|
||||
if (!t.contentarea.firstChild || t.contentarea.firstChild.tagName!="IFRAME") //If iframe tag doesn't exist already, create it first
|
||||
t.contentarea.innerHTML='<iframe src="" style="margin:0; padding:0; width:100%; height: 100%" name="_iframe-'+t.id+'"></iframe>'
|
||||
window.frames["_iframe-"+t.id].location.replace(contentsource) //set location of iframe window to specified URL
|
||||
}
|
||||
else if (contenttype=="ajax"){
|
||||
this.ajax_connect(contentsource, t) //populate window with external contents fetched via Ajax
|
||||
}
|
||||
t.contentarea.datatype=contenttype //store contenttype of current window for future reference
|
||||
},
|
||||
|
||||
setupdrag:function(e){
|
||||
var d=dhtmlwindow //reference dhtml window object
|
||||
var t=this._parent //reference dhtml window div
|
||||
d.etarget=this //remember div mouse is currently held down on ("handle" or "resize" div)
|
||||
var e=window.event || e
|
||||
d.initmousex=e.clientX //store x position of mouse onmousedown
|
||||
d.initmousey=e.clientY
|
||||
d.initx=parseInt(t.offsetLeft) //store offset x of window div onmousedown
|
||||
d.inity=parseInt(t.offsetTop)
|
||||
d.width=parseInt(t.offsetWidth) //store width of window div
|
||||
d.contentheight=parseInt(t.contentarea.offsetHeight) //store height of window div's content div
|
||||
if (t.contentarea.datatype=="iframe"){ //if content of this window div is "iframe"
|
||||
t.style.backgroundColor="#F8F8F8" //colorize and hide content div (while window is being dragged)
|
||||
t.contentarea.style.visibility="hidden"
|
||||
}
|
||||
document.onmousemove=d.getdistance //get distance travelled by mouse as it moves
|
||||
document.onmouseup=function(){
|
||||
if (t.contentarea.datatype=="iframe"){ //restore color and visibility of content div onmouseup
|
||||
t.contentarea.style.backgroundColor="white"
|
||||
t.contentarea.style.visibility="visible"
|
||||
}
|
||||
d.stop()
|
||||
}
|
||||
return false
|
||||
},
|
||||
|
||||
getdistance:function(e){
|
||||
var d=dhtmlwindow
|
||||
var etarget=d.etarget
|
||||
var e=window.event || e
|
||||
d.distancex=e.clientX-d.initmousex //horizontal distance travelled relative to starting point
|
||||
d.distancey=e.clientY-d.initmousey
|
||||
if (etarget.className=="drag-handle") //if target element is "handle" div
|
||||
d.move(etarget._parent, e)
|
||||
else if (etarget.className=="drag-resizearea") //if target element is "resize" div
|
||||
d.resize(etarget._parent, e)
|
||||
return false //cancel default dragging behavior
|
||||
},
|
||||
|
||||
getviewpoint:function(){ //get window viewpoint numbers
|
||||
var ie=document.all && !window.opera
|
||||
var domclientWidth=document.documentElement && parseInt(document.documentElement.clientWidth) || 100000 //Preliminary doc width in non IE browsers
|
||||
this.standardbody=(document.compatMode=="CSS1Compat")? document.documentElement : document.body //create reference to common "body" across doctypes
|
||||
this.scroll_top=(ie)? this.standardbody.scrollTop : window.pageYOffset
|
||||
this.scroll_left=(ie)? this.standardbody.scrollLeft : window.pageXOffset
|
||||
this.docwidth=(ie)? this.standardbody.clientWidth : (/Safari/i.test(navigator.userAgent))? window.innerWidth : Math.min(domclientWidth, window.innerWidth-16)
|
||||
this.docheight=(ie)? this.standardbody.clientHeight: window.innerHeight
|
||||
},
|
||||
|
||||
rememberattrs:function(t){ //remember certain attributes of the window when it's minimized or closed, such as dimensions, position on page
|
||||
this.getviewpoint() //Get current window viewpoint numbers
|
||||
t.lastx=parseInt((t.style.left || t.offsetLeft))-dhtmlwindow.scroll_left //store last known x coord of window just before minimizing
|
||||
t.lasty=parseInt((t.style.top || t.offsetTop))-dhtmlwindow.scroll_top
|
||||
t.lastwidth=parseInt(t.style.width) //store last known width of window just before minimizing/ closing
|
||||
},
|
||||
|
||||
move:function(t, e){
|
||||
t.style.left=dhtmlwindow.distancex+dhtmlwindow.initx+"px"
|
||||
t.style.top=dhtmlwindow.distancey+dhtmlwindow.inity+"px"
|
||||
},
|
||||
|
||||
resize:function(t, e){
|
||||
t.style.width=Math.max(dhtmlwindow.width+dhtmlwindow.distancex, 150)+"px"
|
||||
t.contentarea.style.height=Math.max(dhtmlwindow.contentheight+dhtmlwindow.distancey, 100)+"px"
|
||||
},
|
||||
|
||||
enablecontrols:function(e){
|
||||
var d=dhtmlwindow
|
||||
var sourceobj=window.event? window.event.srcElement : e.target //Get element within "handle" div mouse is currently on (the controls)
|
||||
if (/Minimize/i.test(sourceobj.getAttribute("title"))) //if this is the "minimize" control
|
||||
d.minimize(sourceobj, this._parent)
|
||||
else if (/Restore/i.test(sourceobj.getAttribute("title"))) //if this is the "restore" control
|
||||
d.restore(sourceobj, this._parent)
|
||||
else if (/Close/i.test(sourceobj.getAttribute("title"))) //if this is the "close" control
|
||||
d.close(this._parent)
|
||||
return false
|
||||
},
|
||||
|
||||
minimize:function(button, t){
|
||||
dhtmlwindow.rememberattrs(t)
|
||||
button.setAttribute("src", dhtmlwindow.imagefiles[2])
|
||||
button.setAttribute("title", "Restore")
|
||||
t.state="minimized" //indicate the state of the window as being "minimized"
|
||||
t.contentarea.style.display="none"
|
||||
t.statusarea.style.display="none"
|
||||
if (typeof t.minimizeorder=="undefined"){ //stack order of minmized window on screen relative to any other minimized windows
|
||||
dhtmlwindow.minimizeorder++ //increment order
|
||||
t.minimizeorder=dhtmlwindow.minimizeorder
|
||||
}
|
||||
t.style.left="10px" //left coord of minmized window
|
||||
t.style.width="200px"
|
||||
var windowspacing=t.minimizeorder*10 //spacing (gap) between each minmized window(s)
|
||||
t.style.top=dhtmlwindow.scroll_top+dhtmlwindow.docheight-(t.handle.offsetHeight*t.minimizeorder)-windowspacing+"px"
|
||||
},
|
||||
|
||||
restore:function(button, t){
|
||||
dhtmlwindow.getviewpoint()
|
||||
button.setAttribute("src", dhtmlwindow.imagefiles[0])
|
||||
button.setAttribute("title", "Minimize")
|
||||
t.state="fullview" //indicate the state of the window as being "fullview"
|
||||
t.style.display="block"
|
||||
t.contentarea.style.display="block"
|
||||
if (t.resizeBool) //if this window is resizable, enable the resize icon
|
||||
t.statusarea.style.display="block"
|
||||
t.style.left=parseInt(t.lastx)+dhtmlwindow.scroll_left+"px" //position window to last known x coord just before minimizing
|
||||
t.style.top=parseInt(t.lasty)+dhtmlwindow.scroll_top+"px"
|
||||
t.style.width=parseInt(t.lastwidth)+"px"
|
||||
},
|
||||
|
||||
|
||||
close:function(t){
|
||||
try{
|
||||
var closewinbol=t.onclose()
|
||||
}
|
||||
catch(err){ //In non IE browsers, all errors are caught, so just run the below
|
||||
var closewinbol=true
|
||||
}
|
||||
finally{ //In IE, not all errors are caught, so check if variable isn't defined in IE in those cases
|
||||
if (typeof closewinbol=="undefined"){
|
||||
alert("An error has occured somwhere inside your \"onclose\" event handler")
|
||||
var closewinbol=true
|
||||
}
|
||||
}
|
||||
if (closewinbol){ //if custom event handler function returns true
|
||||
if (t.state!="minimized") //if this window isn't currently minimized
|
||||
dhtmlwindow.rememberattrs(t) //remember window's dimensions/position on the page before closing
|
||||
if (window.frames["_iframe-"+t.id]) //if this is an IFRAME DHTML window
|
||||
window.frames["_iframe-"+t.id].location.replace("about:blank")
|
||||
else
|
||||
t.contentarea.innerHTML=""
|
||||
t.style.display="none"
|
||||
t.isClosed=true //tell script this window is closed (for detection in t.show())
|
||||
}
|
||||
return closewinbol
|
||||
},
|
||||
|
||||
|
||||
setopacity:function(targetobject, value){ //Sets the opacity of targetobject based on the passed in value setting (0 to 1 and in between)
|
||||
if (!targetobject)
|
||||
return
|
||||
if (targetobject.filters && targetobject.filters[0]){ //IE syntax
|
||||
if (typeof targetobject.filters[0].opacity=="number") //IE6
|
||||
targetobject.filters[0].opacity=value*100
|
||||
else //IE 5.5
|
||||
targetobject.style.filter="alpha(opacity="+value*100+")"
|
||||
}
|
||||
else if (typeof targetobject.style.MozOpacity!="undefined") //Old Mozilla syntax
|
||||
targetobject.style.MozOpacity=value
|
||||
else if (typeof targetobject.style.opacity!="undefined") //Standard opacity syntax
|
||||
targetobject.style.opacity=value
|
||||
},
|
||||
|
||||
setfocus:function(t){ //Sets focus to the currently active window
|
||||
this.zIndexvalue++
|
||||
t.style.zIndex=this.zIndexvalue
|
||||
t.isClosed=false //tell script this window isn't closed (for detection in t.show())
|
||||
this.setopacity(this.lastactivet.handle, 0.5) //unfocus last active window
|
||||
this.setopacity(t.handle, 1) //focus currently active window
|
||||
this.lastactivet=t //remember last active window
|
||||
},
|
||||
|
||||
|
||||
show:function(t){
|
||||
if (t.isClosed){
|
||||
alert("DHTML Window has been closed, so nothing to show. Open/Create the window again.")
|
||||
return
|
||||
}
|
||||
if (t.lastx) //If there exists previously stored information such as last x position on window attributes (meaning it's been minimized or closed)
|
||||
dhtmlwindow.restore(t.controls.firstChild, t) //restore the window using that info
|
||||
else
|
||||
t.style.display="block"
|
||||
this.setfocus(t)
|
||||
t.state="fullview" //indicate the state of the window as being "fullview"
|
||||
},
|
||||
|
||||
hide:function(t){
|
||||
t.style.display="none"
|
||||
},
|
||||
|
||||
ajax_connect:function(url, t){
|
||||
var page_request = false
|
||||
var bustcacheparameter=""
|
||||
if (window.XMLHttpRequest) // if Mozilla, IE7, Safari etc
|
||||
page_request = new XMLHttpRequest()
|
||||
else if (window.ActiveXObject){ // if IE6 or below
|
||||
try {
|
||||
page_request = new ActiveXObject("Msxml2.XMLHTTP")
|
||||
}
|
||||
catch (e){
|
||||
try{
|
||||
page_request = new ActiveXObject("Microsoft.XMLHTTP")
|
||||
}
|
||||
catch (e){}
|
||||
}
|
||||
}
|
||||
else
|
||||
return false
|
||||
t.contentarea.innerHTML=this.ajaxloadinghtml
|
||||
page_request.onreadystatechange=function(){dhtmlwindow.ajax_loadpage(page_request, t)}
|
||||
if (this.ajaxbustcache) //if bust caching of external page
|
||||
bustcacheparameter=(url.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
|
||||
page_request.open('GET', url+bustcacheparameter, true)
|
||||
page_request.send(null)
|
||||
},
|
||||
|
||||
ajax_loadpage:function(page_request, t){
|
||||
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1)){
|
||||
t.contentarea.innerHTML=page_request.responseText
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
stop:function(){
|
||||
dhtmlwindow.etarget=null //clean up
|
||||
document.onmousemove=null
|
||||
document.onmouseup=null
|
||||
},
|
||||
|
||||
addEvent:function(target, functionref, tasktype){ //assign a function to execute to an event handler (ie: onunload)
|
||||
var tasktype=(window.addEventListener)? tasktype : "on"+tasktype
|
||||
if (target.addEventListener)
|
||||
target.addEventListener(tasktype, functionref, false)
|
||||
else if (target.attachEvent)
|
||||
target.attachEvent(tasktype, functionref)
|
||||
},
|
||||
|
||||
cleanup:function(){
|
||||
for (var i=0; i<dhtmlwindow.tobjects.length; i++){
|
||||
dhtmlwindow.tobjects[i].handle._parent=dhtmlwindow.tobjects[i].resizearea._parent=dhtmlwindow.tobjects[i].controls._parent=null
|
||||
}
|
||||
window.onload=null
|
||||
}
|
||||
|
||||
} //End dhtmlwindow object
|
||||
|
||||
document.write('<div id="dhtmlwindowholder"><span style="display:none">.</span></div>') //container that holds all dhtml window divs on page
|
||||
window.onunload=dhtmlwindow.cleanup
|
||||
@@ -0,0 +1,39 @@
|
||||
<script type="text/javascript">
|
||||
var table = document.getElementById('data-table');
|
||||
var tableDnD = new TableDnD();
|
||||
tableDnD.init(table);
|
||||
|
||||
// Redefine the onDrop so that we can display something
|
||||
tableDnD.onDrop = function(table, row) {
|
||||
var rows = this.table.tBodies[0].rows;
|
||||
var row_sequence = '';
|
||||
for (var i=1; i<rows.length; i++) {
|
||||
row_sequence += rows[i].id+',';
|
||||
var currRow = document.getElementById(rows[i].id);
|
||||
|
||||
<?php
|
||||
for ($i = 0; $i < $numberOfColumns; $i++) {
|
||||
echo(" var cell$i = document.getElementById(rows[i].id+'.$i');\n");
|
||||
}
|
||||
?>
|
||||
|
||||
if (i%2 == 0) {
|
||||
<?php
|
||||
for ($i = 0; $i < $numberOfColumns; $i++) {
|
||||
echo(" cell$i.className = 'data-even';\n");
|
||||
}
|
||||
?>
|
||||
}
|
||||
else {
|
||||
<?php
|
||||
for ($i = 0; $i < $numberOfColumns; $i++) {
|
||||
echo(" cell$i.className = 'data-odd';\n");
|
||||
}
|
||||
?>
|
||||
}
|
||||
}
|
||||
document.getElementById('row_sequence_id').value = row_sequence;
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
Vendored
+1122
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
$params = "";
|
||||
|
||||
// Handle action parameters if user is not logged in
|
||||
if (SessionActive() != 1 || ! UserLoggedIn()) {
|
||||
if (isset($_GET['action'])) $params .= "&action=" . $_GET['action'];
|
||||
if (isset($_POST['action'])) $params .= "&action=" . $_POST['action'];
|
||||
|
||||
if (isset($_GET['naction'])) $params .= "&naction=" . $_GET['naction'];
|
||||
if (isset($_POST['naction'])) $params .= "&naction=" . $_POST['naction'];
|
||||
}
|
||||
else {
|
||||
$params = "";
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<?php
|
||||
$fp = fopen("languages.txt","r");
|
||||
$selected_languages = array();
|
||||
while (!feof($fp)) {
|
||||
$record = trim(fgets($fp, 1000));
|
||||
echo("<!-- $record -->\n");
|
||||
if (strlen($record)) $selected_languages[] = explode(':', $record, 2);
|
||||
}
|
||||
|
||||
?>
|
||||
<br>
|
||||
<table cellspacing='0' cellpadding='0' border='0'>
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td align='left'>
|
||||
<?php displayLanguageText('TEXT-SELECT-PREFERRED-LANGUAGE'); ?>:<br>
|
||||
<select name='selected_language' id='selected_language' class='language-selection select-width200'>
|
||||
<?php
|
||||
if (!isset($currLanguage)) $currLanguage = $_SESSION['UserInfo']['language'];
|
||||
for ($i = 0; $i < count($selected_languages); $i++) {
|
||||
$selected = "";
|
||||
if (strtolower($selected_languages[$i][0]) == strtolower($currLanguage)) $selected = " selected='selected'";
|
||||
$lang = $selected_languages[$i][0];
|
||||
$text = $selected_languages[$i][1];
|
||||
$msg = $text;
|
||||
$code = "TEXT-".str_replace(' ','-',strtoupper($text));
|
||||
$text = getLanguageText($code,$lang);
|
||||
if (strlen($text) == 0) $text = $selected_languages[$i][1];
|
||||
echo(" <option value='".strtolower($selected_languages[$i][0])."'$selected>".$text." ($msg)</option>\n");
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
<button id='change-selected-language' class='btn btn--secondary btn--xsmall'> <?php displayLanguageText('TEXT-SET-LANGUAGE'); ?> </button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$("#selected_language").change(function() {
|
||||
var language = $("#selected_language").val();
|
||||
window.location = "/?selected_language="+language;
|
||||
});
|
||||
|
||||
$("#change-selected-language").click(function(e) {
|
||||
e.preventDefault();
|
||||
var language = $("#selected_language").val();
|
||||
window.location = "/?selected_language="+language;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
for($i=0;$i<=255;$i++)
|
||||
$fpdf_charwidths['courier'][chr($i)]=600;
|
||||
$fpdf_charwidths['courierB']=$fpdf_charwidths['courier'];
|
||||
$fpdf_charwidths['courierI']=$fpdf_charwidths['courier'];
|
||||
$fpdf_charwidths['courierBI']=$fpdf_charwidths['courier'];
|
||||
?>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['helvetica']=array(
|
||||
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
|
||||
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
|
||||
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
|
||||
'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
|
||||
'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
|
||||
'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
|
||||
chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
|
||||
chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
|
||||
?>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['helveticaB']=array(
|
||||
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
|
||||
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
|
||||
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
|
||||
'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
|
||||
'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
|
||||
'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
|
||||
chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
|
||||
chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
|
||||
?>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['helveticaBI']=array(
|
||||
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
|
||||
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
|
||||
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
|
||||
'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
|
||||
'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
|
||||
'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
|
||||
chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
|
||||
chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
|
||||
?>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['helveticaI']=array(
|
||||
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
|
||||
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
|
||||
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
|
||||
'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
|
||||
'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
|
||||
'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
|
||||
chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
|
||||
chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
|
||||
?>
|
||||
@@ -0,0 +1,251 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!82 U+201A quotesinglbase
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!89 U+2030 perthousand
|
||||
!8A U+0160 Scaron
|
||||
!8B U+2039 guilsinglleft
|
||||
!8C U+015A Sacute
|
||||
!8D U+0164 Tcaron
|
||||
!8E U+017D Zcaron
|
||||
!8F U+0179 Zacute
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!99 U+2122 trademark
|
||||
!9A U+0161 scaron
|
||||
!9B U+203A guilsinglright
|
||||
!9C U+015B sacute
|
||||
!9D U+0165 tcaron
|
||||
!9E U+017E zcaron
|
||||
!9F U+017A zacute
|
||||
!A0 U+00A0 space
|
||||
!A1 U+02C7 caron
|
||||
!A2 U+02D8 breve
|
||||
!A3 U+0141 Lslash
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+0104 Aogonek
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+015E Scedilla
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+017B Zdotaccent
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+02DB ogonek
|
||||
!B3 U+0142 lslash
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+0105 aogonek
|
||||
!BA U+015F scedilla
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+013D Lcaron
|
||||
!BD U+02DD hungarumlaut
|
||||
!BE U+013E lcaron
|
||||
!BF U+017C zdotaccent
|
||||
!C0 U+0154 Racute
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+0102 Abreve
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+0139 Lacute
|
||||
!C6 U+0106 Cacute
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+010C Ccaron
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+0118 Eogonek
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+011A Ecaron
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+010E Dcaron
|
||||
!D0 U+0110 Dcroat
|
||||
!D1 U+0143 Nacute
|
||||
!D2 U+0147 Ncaron
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+0150 Ohungarumlaut
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+0158 Rcaron
|
||||
!D9 U+016E Uring
|
||||
!DA U+00DA Uacute
|
||||
!DB U+0170 Uhungarumlaut
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+00DD Yacute
|
||||
!DE U+0162 Tcommaaccent
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+0155 racute
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+0103 abreve
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+013A lacute
|
||||
!E6 U+0107 cacute
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+010D ccaron
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+0119 eogonek
|
||||
!EB U+00EB edieresis
|
||||
!EC U+011B ecaron
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+010F dcaron
|
||||
!F0 U+0111 dcroat
|
||||
!F1 U+0144 nacute
|
||||
!F2 U+0148 ncaron
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+0151 ohungarumlaut
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+0159 rcaron
|
||||
!F9 U+016F uring
|
||||
!FA U+00FA uacute
|
||||
!FB U+0171 uhungarumlaut
|
||||
!FC U+00FC udieresis
|
||||
!FD U+00FD yacute
|
||||
!FE U+0163 tcommaaccent
|
||||
!FF U+02D9 dotaccent
|
||||
@@ -0,0 +1,255 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0402 afii10051
|
||||
!81 U+0403 afii10052
|
||||
!82 U+201A quotesinglbase
|
||||
!83 U+0453 afii10100
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!88 U+20AC Euro
|
||||
!89 U+2030 perthousand
|
||||
!8A U+0409 afii10058
|
||||
!8B U+2039 guilsinglleft
|
||||
!8C U+040A afii10059
|
||||
!8D U+040C afii10061
|
||||
!8E U+040B afii10060
|
||||
!8F U+040F afii10145
|
||||
!90 U+0452 afii10099
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!99 U+2122 trademark
|
||||
!9A U+0459 afii10106
|
||||
!9B U+203A guilsinglright
|
||||
!9C U+045A afii10107
|
||||
!9D U+045C afii10109
|
||||
!9E U+045B afii10108
|
||||
!9F U+045F afii10193
|
||||
!A0 U+00A0 space
|
||||
!A1 U+040E afii10062
|
||||
!A2 U+045E afii10110
|
||||
!A3 U+0408 afii10057
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+0490 afii10050
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+0401 afii10023
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+0404 afii10053
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+0407 afii10056
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+0406 afii10055
|
||||
!B3 U+0456 afii10103
|
||||
!B4 U+0491 afii10098
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+0451 afii10071
|
||||
!B9 U+2116 afii61352
|
||||
!BA U+0454 afii10101
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+0458 afii10105
|
||||
!BD U+0405 afii10054
|
||||
!BE U+0455 afii10102
|
||||
!BF U+0457 afii10104
|
||||
!C0 U+0410 afii10017
|
||||
!C1 U+0411 afii10018
|
||||
!C2 U+0412 afii10019
|
||||
!C3 U+0413 afii10020
|
||||
!C4 U+0414 afii10021
|
||||
!C5 U+0415 afii10022
|
||||
!C6 U+0416 afii10024
|
||||
!C7 U+0417 afii10025
|
||||
!C8 U+0418 afii10026
|
||||
!C9 U+0419 afii10027
|
||||
!CA U+041A afii10028
|
||||
!CB U+041B afii10029
|
||||
!CC U+041C afii10030
|
||||
!CD U+041D afii10031
|
||||
!CE U+041E afii10032
|
||||
!CF U+041F afii10033
|
||||
!D0 U+0420 afii10034
|
||||
!D1 U+0421 afii10035
|
||||
!D2 U+0422 afii10036
|
||||
!D3 U+0423 afii10037
|
||||
!D4 U+0424 afii10038
|
||||
!D5 U+0425 afii10039
|
||||
!D6 U+0426 afii10040
|
||||
!D7 U+0427 afii10041
|
||||
!D8 U+0428 afii10042
|
||||
!D9 U+0429 afii10043
|
||||
!DA U+042A afii10044
|
||||
!DB U+042B afii10045
|
||||
!DC U+042C afii10046
|
||||
!DD U+042D afii10047
|
||||
!DE U+042E afii10048
|
||||
!DF U+042F afii10049
|
||||
!E0 U+0430 afii10065
|
||||
!E1 U+0431 afii10066
|
||||
!E2 U+0432 afii10067
|
||||
!E3 U+0433 afii10068
|
||||
!E4 U+0434 afii10069
|
||||
!E5 U+0435 afii10070
|
||||
!E6 U+0436 afii10072
|
||||
!E7 U+0437 afii10073
|
||||
!E8 U+0438 afii10074
|
||||
!E9 U+0439 afii10075
|
||||
!EA U+043A afii10076
|
||||
!EB U+043B afii10077
|
||||
!EC U+043C afii10078
|
||||
!ED U+043D afii10079
|
||||
!EE U+043E afii10080
|
||||
!EF U+043F afii10081
|
||||
!F0 U+0440 afii10082
|
||||
!F1 U+0441 afii10083
|
||||
!F2 U+0442 afii10084
|
||||
!F3 U+0443 afii10085
|
||||
!F4 U+0444 afii10086
|
||||
!F5 U+0445 afii10087
|
||||
!F6 U+0446 afii10088
|
||||
!F7 U+0447 afii10089
|
||||
!F8 U+0448 afii10090
|
||||
!F9 U+0449 afii10091
|
||||
!FA U+044A afii10092
|
||||
!FB U+044B afii10093
|
||||
!FC U+044C afii10094
|
||||
!FD U+044D afii10095
|
||||
!FE U+044E afii10096
|
||||
!FF U+044F afii10097
|
||||
@@ -0,0 +1,251 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!82 U+201A quotesinglbase
|
||||
!83 U+0192 florin
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!88 U+02C6 circumflex
|
||||
!89 U+2030 perthousand
|
||||
!8A U+0160 Scaron
|
||||
!8B U+2039 guilsinglleft
|
||||
!8C U+0152 OE
|
||||
!8E U+017D Zcaron
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!98 U+02DC tilde
|
||||
!99 U+2122 trademark
|
||||
!9A U+0161 scaron
|
||||
!9B U+203A guilsinglright
|
||||
!9C U+0153 oe
|
||||
!9E U+017E zcaron
|
||||
!9F U+0178 Ydieresis
|
||||
!A0 U+00A0 space
|
||||
!A1 U+00A1 exclamdown
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+00AA ordfeminine
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+00BA ordmasculine
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+00BC onequarter
|
||||
!BD U+00BD onehalf
|
||||
!BE U+00BE threequarters
|
||||
!BF U+00BF questiondown
|
||||
!C0 U+00C0 Agrave
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+00C3 Atilde
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+00C8 Egrave
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+00CA Ecircumflex
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+00CC Igrave
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+00CF Idieresis
|
||||
!D0 U+00D0 Eth
|
||||
!D1 U+00D1 Ntilde
|
||||
!D2 U+00D2 Ograve
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+00D5 Otilde
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+00D8 Oslash
|
||||
!D9 U+00D9 Ugrave
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+00DD Yacute
|
||||
!DE U+00DE Thorn
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+00E0 agrave
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+00E3 atilde
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+00E8 egrave
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+00EA ecircumflex
|
||||
!EB U+00EB edieresis
|
||||
!EC U+00EC igrave
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+00EF idieresis
|
||||
!F0 U+00F0 eth
|
||||
!F1 U+00F1 ntilde
|
||||
!F2 U+00F2 ograve
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+00F5 otilde
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+00F8 oslash
|
||||
!F9 U+00F9 ugrave
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+00FD yacute
|
||||
!FE U+00FE thorn
|
||||
!FF U+00FF ydieresis
|
||||
@@ -0,0 +1,239 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!82 U+201A quotesinglbase
|
||||
!83 U+0192 florin
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!89 U+2030 perthousand
|
||||
!8B U+2039 guilsinglleft
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!99 U+2122 trademark
|
||||
!9B U+203A guilsinglright
|
||||
!A0 U+00A0 space
|
||||
!A1 U+0385 dieresistonos
|
||||
!A2 U+0386 Alphatonos
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+2015 afii00208
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+0384 tonos
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+0388 Epsilontonos
|
||||
!B9 U+0389 Etatonos
|
||||
!BA U+038A Iotatonos
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+038C Omicrontonos
|
||||
!BD U+00BD onehalf
|
||||
!BE U+038E Upsilontonos
|
||||
!BF U+038F Omegatonos
|
||||
!C0 U+0390 iotadieresistonos
|
||||
!C1 U+0391 Alpha
|
||||
!C2 U+0392 Beta
|
||||
!C3 U+0393 Gamma
|
||||
!C4 U+0394 Delta
|
||||
!C5 U+0395 Epsilon
|
||||
!C6 U+0396 Zeta
|
||||
!C7 U+0397 Eta
|
||||
!C8 U+0398 Theta
|
||||
!C9 U+0399 Iota
|
||||
!CA U+039A Kappa
|
||||
!CB U+039B Lambda
|
||||
!CC U+039C Mu
|
||||
!CD U+039D Nu
|
||||
!CE U+039E Xi
|
||||
!CF U+039F Omicron
|
||||
!D0 U+03A0 Pi
|
||||
!D1 U+03A1 Rho
|
||||
!D3 U+03A3 Sigma
|
||||
!D4 U+03A4 Tau
|
||||
!D5 U+03A5 Upsilon
|
||||
!D6 U+03A6 Phi
|
||||
!D7 U+03A7 Chi
|
||||
!D8 U+03A8 Psi
|
||||
!D9 U+03A9 Omega
|
||||
!DA U+03AA Iotadieresis
|
||||
!DB U+03AB Upsilondieresis
|
||||
!DC U+03AC alphatonos
|
||||
!DD U+03AD epsilontonos
|
||||
!DE U+03AE etatonos
|
||||
!DF U+03AF iotatonos
|
||||
!E0 U+03B0 upsilondieresistonos
|
||||
!E1 U+03B1 alpha
|
||||
!E2 U+03B2 beta
|
||||
!E3 U+03B3 gamma
|
||||
!E4 U+03B4 delta
|
||||
!E5 U+03B5 epsilon
|
||||
!E6 U+03B6 zeta
|
||||
!E7 U+03B7 eta
|
||||
!E8 U+03B8 theta
|
||||
!E9 U+03B9 iota
|
||||
!EA U+03BA kappa
|
||||
!EB U+03BB lambda
|
||||
!EC U+03BC mu
|
||||
!ED U+03BD nu
|
||||
!EE U+03BE xi
|
||||
!EF U+03BF omicron
|
||||
!F0 U+03C0 pi
|
||||
!F1 U+03C1 rho
|
||||
!F2 U+03C2 sigma1
|
||||
!F3 U+03C3 sigma
|
||||
!F4 U+03C4 tau
|
||||
!F5 U+03C5 upsilon
|
||||
!F6 U+03C6 phi
|
||||
!F7 U+03C7 chi
|
||||
!F8 U+03C8 psi
|
||||
!F9 U+03C9 omega
|
||||
!FA U+03CA iotadieresis
|
||||
!FB U+03CB upsilondieresis
|
||||
!FC U+03CC omicrontonos
|
||||
!FD U+03CD upsilontonos
|
||||
!FE U+03CE omegatonos
|
||||
@@ -0,0 +1,249 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!82 U+201A quotesinglbase
|
||||
!83 U+0192 florin
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!88 U+02C6 circumflex
|
||||
!89 U+2030 perthousand
|
||||
!8A U+0160 Scaron
|
||||
!8B U+2039 guilsinglleft
|
||||
!8C U+0152 OE
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!98 U+02DC tilde
|
||||
!99 U+2122 trademark
|
||||
!9A U+0161 scaron
|
||||
!9B U+203A guilsinglright
|
||||
!9C U+0153 oe
|
||||
!9F U+0178 Ydieresis
|
||||
!A0 U+00A0 space
|
||||
!A1 U+00A1 exclamdown
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+00AA ordfeminine
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+00BA ordmasculine
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+00BC onequarter
|
||||
!BD U+00BD onehalf
|
||||
!BE U+00BE threequarters
|
||||
!BF U+00BF questiondown
|
||||
!C0 U+00C0 Agrave
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+00C3 Atilde
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+00C8 Egrave
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+00CA Ecircumflex
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+00CC Igrave
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+00CF Idieresis
|
||||
!D0 U+011E Gbreve
|
||||
!D1 U+00D1 Ntilde
|
||||
!D2 U+00D2 Ograve
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+00D5 Otilde
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+00D8 Oslash
|
||||
!D9 U+00D9 Ugrave
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+0130 Idotaccent
|
||||
!DE U+015E Scedilla
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+00E0 agrave
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+00E3 atilde
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+00E8 egrave
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+00EA ecircumflex
|
||||
!EB U+00EB edieresis
|
||||
!EC U+00EC igrave
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+00EF idieresis
|
||||
!F0 U+011F gbreve
|
||||
!F1 U+00F1 ntilde
|
||||
!F2 U+00F2 ograve
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+00F5 otilde
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+00F8 oslash
|
||||
!F9 U+00F9 ugrave
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+0131 dotlessi
|
||||
!FE U+015F scedilla
|
||||
!FF U+00FF ydieresis
|
||||
@@ -0,0 +1,233 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!82 U+201A quotesinglbase
|
||||
!83 U+0192 florin
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!88 U+02C6 circumflex
|
||||
!89 U+2030 perthousand
|
||||
!8B U+2039 guilsinglleft
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!98 U+02DC tilde
|
||||
!99 U+2122 trademark
|
||||
!9B U+203A guilsinglright
|
||||
!A0 U+00A0 space
|
||||
!A1 U+00A1 exclamdown
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+20AA afii57636
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+00D7 multiply
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD sfthyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 middot
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+00F7 divide
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+00BC onequarter
|
||||
!BD U+00BD onehalf
|
||||
!BE U+00BE threequarters
|
||||
!BF U+00BF questiondown
|
||||
!C0 U+05B0 afii57799
|
||||
!C1 U+05B1 afii57801
|
||||
!C2 U+05B2 afii57800
|
||||
!C3 U+05B3 afii57802
|
||||
!C4 U+05B4 afii57793
|
||||
!C5 U+05B5 afii57794
|
||||
!C6 U+05B6 afii57795
|
||||
!C7 U+05B7 afii57798
|
||||
!C8 U+05B8 afii57797
|
||||
!C9 U+05B9 afii57806
|
||||
!CB U+05BB afii57796
|
||||
!CC U+05BC afii57807
|
||||
!CD U+05BD afii57839
|
||||
!CE U+05BE afii57645
|
||||
!CF U+05BF afii57841
|
||||
!D0 U+05C0 afii57842
|
||||
!D1 U+05C1 afii57804
|
||||
!D2 U+05C2 afii57803
|
||||
!D3 U+05C3 afii57658
|
||||
!D4 U+05F0 afii57716
|
||||
!D5 U+05F1 afii57717
|
||||
!D6 U+05F2 afii57718
|
||||
!D7 U+05F3 gereshhebrew
|
||||
!D8 U+05F4 gershayimhebrew
|
||||
!E0 U+05D0 afii57664
|
||||
!E1 U+05D1 afii57665
|
||||
!E2 U+05D2 afii57666
|
||||
!E3 U+05D3 afii57667
|
||||
!E4 U+05D4 afii57668
|
||||
!E5 U+05D5 afii57669
|
||||
!E6 U+05D6 afii57670
|
||||
!E7 U+05D7 afii57671
|
||||
!E8 U+05D8 afii57672
|
||||
!E9 U+05D9 afii57673
|
||||
!EA U+05DA afii57674
|
||||
!EB U+05DB afii57675
|
||||
!EC U+05DC afii57676
|
||||
!ED U+05DD afii57677
|
||||
!EE U+05DE afii57678
|
||||
!EF U+05DF afii57679
|
||||
!F0 U+05E0 afii57680
|
||||
!F1 U+05E1 afii57681
|
||||
!F2 U+05E2 afii57682
|
||||
!F3 U+05E3 afii57683
|
||||
!F4 U+05E4 afii57684
|
||||
!F5 U+05E5 afii57685
|
||||
!F6 U+05E6 afii57686
|
||||
!F7 U+05E7 afii57687
|
||||
!F8 U+05E8 afii57688
|
||||
!F9 U+05E9 afii57689
|
||||
!FA U+05EA afii57690
|
||||
!FD U+200E afii299
|
||||
!FE U+200F afii300
|
||||
@@ -0,0 +1,244 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!82 U+201A quotesinglbase
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!89 U+2030 perthousand
|
||||
!8B U+2039 guilsinglleft
|
||||
!8D U+00A8 dieresis
|
||||
!8E U+02C7 caron
|
||||
!8F U+00B8 cedilla
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!99 U+2122 trademark
|
||||
!9B U+203A guilsinglright
|
||||
!9D U+00AF macron
|
||||
!9E U+02DB ogonek
|
||||
!A0 U+00A0 space
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+00A4 currency
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00D8 Oslash
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+0156 Rcommaaccent
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00C6 AE
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+00F8 oslash
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+0157 rcommaaccent
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+00BC onequarter
|
||||
!BD U+00BD onehalf
|
||||
!BE U+00BE threequarters
|
||||
!BF U+00E6 ae
|
||||
!C0 U+0104 Aogonek
|
||||
!C1 U+012E Iogonek
|
||||
!C2 U+0100 Amacron
|
||||
!C3 U+0106 Cacute
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+0118 Eogonek
|
||||
!C7 U+0112 Emacron
|
||||
!C8 U+010C Ccaron
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+0179 Zacute
|
||||
!CB U+0116 Edotaccent
|
||||
!CC U+0122 Gcommaaccent
|
||||
!CD U+0136 Kcommaaccent
|
||||
!CE U+012A Imacron
|
||||
!CF U+013B Lcommaaccent
|
||||
!D0 U+0160 Scaron
|
||||
!D1 U+0143 Nacute
|
||||
!D2 U+0145 Ncommaaccent
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+014C Omacron
|
||||
!D5 U+00D5 Otilde
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+0172 Uogonek
|
||||
!D9 U+0141 Lslash
|
||||
!DA U+015A Sacute
|
||||
!DB U+016A Umacron
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+017B Zdotaccent
|
||||
!DE U+017D Zcaron
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+0105 aogonek
|
||||
!E1 U+012F iogonek
|
||||
!E2 U+0101 amacron
|
||||
!E3 U+0107 cacute
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+0119 eogonek
|
||||
!E7 U+0113 emacron
|
||||
!E8 U+010D ccaron
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+017A zacute
|
||||
!EB U+0117 edotaccent
|
||||
!EC U+0123 gcommaaccent
|
||||
!ED U+0137 kcommaaccent
|
||||
!EE U+012B imacron
|
||||
!EF U+013C lcommaaccent
|
||||
!F0 U+0161 scaron
|
||||
!F1 U+0144 nacute
|
||||
!F2 U+0146 ncommaaccent
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+014D omacron
|
||||
!F5 U+00F5 otilde
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+0173 uogonek
|
||||
!F9 U+0142 lslash
|
||||
!FA U+015B sacute
|
||||
!FB U+016B umacron
|
||||
!FC U+00FC udieresis
|
||||
!FD U+017C zdotaccent
|
||||
!FE U+017E zcaron
|
||||
!FF U+02D9 dotaccent
|
||||
@@ -0,0 +1,247 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!82 U+201A quotesinglbase
|
||||
!83 U+0192 florin
|
||||
!84 U+201E quotedblbase
|
||||
!85 U+2026 ellipsis
|
||||
!86 U+2020 dagger
|
||||
!87 U+2021 daggerdbl
|
||||
!88 U+02C6 circumflex
|
||||
!89 U+2030 perthousand
|
||||
!8B U+2039 guilsinglleft
|
||||
!8C U+0152 OE
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!98 U+02DC tilde
|
||||
!99 U+2122 trademark
|
||||
!9B U+203A guilsinglright
|
||||
!9C U+0153 oe
|
||||
!9F U+0178 Ydieresis
|
||||
!A0 U+00A0 space
|
||||
!A1 U+00A1 exclamdown
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+00AA ordfeminine
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+00BA ordmasculine
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+00BC onequarter
|
||||
!BD U+00BD onehalf
|
||||
!BE U+00BE threequarters
|
||||
!BF U+00BF questiondown
|
||||
!C0 U+00C0 Agrave
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+0102 Abreve
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+00C8 Egrave
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+00CA Ecircumflex
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+0300 gravecomb
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+00CF Idieresis
|
||||
!D0 U+0110 Dcroat
|
||||
!D1 U+00D1 Ntilde
|
||||
!D2 U+0309 hookabovecomb
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+01A0 Ohorn
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+00D8 Oslash
|
||||
!D9 U+00D9 Ugrave
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+01AF Uhorn
|
||||
!DE U+0303 tildecomb
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+00E0 agrave
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+0103 abreve
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+00E8 egrave
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+00EA ecircumflex
|
||||
!EB U+00EB edieresis
|
||||
!EC U+0301 acutecomb
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+00EF idieresis
|
||||
!F0 U+0111 dcroat
|
||||
!F1 U+00F1 ntilde
|
||||
!F2 U+0323 dotbelowcomb
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+01A1 ohorn
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+00F8 oslash
|
||||
!F9 U+00F9 ugrave
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+01B0 uhorn
|
||||
!FE U+20AB dong
|
||||
!FF U+00FF ydieresis
|
||||
@@ -0,0 +1,225 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+20AC Euro
|
||||
!85 U+2026 ellipsis
|
||||
!91 U+2018 quoteleft
|
||||
!92 U+2019 quoteright
|
||||
!93 U+201C quotedblleft
|
||||
!94 U+201D quotedblright
|
||||
!95 U+2022 bullet
|
||||
!96 U+2013 endash
|
||||
!97 U+2014 emdash
|
||||
!A0 U+00A0 space
|
||||
!A1 U+0E01 kokaithai
|
||||
!A2 U+0E02 khokhaithai
|
||||
!A3 U+0E03 khokhuatthai
|
||||
!A4 U+0E04 khokhwaithai
|
||||
!A5 U+0E05 khokhonthai
|
||||
!A6 U+0E06 khorakhangthai
|
||||
!A7 U+0E07 ngonguthai
|
||||
!A8 U+0E08 chochanthai
|
||||
!A9 U+0E09 chochingthai
|
||||
!AA U+0E0A chochangthai
|
||||
!AB U+0E0B sosothai
|
||||
!AC U+0E0C chochoethai
|
||||
!AD U+0E0D yoyingthai
|
||||
!AE U+0E0E dochadathai
|
||||
!AF U+0E0F topatakthai
|
||||
!B0 U+0E10 thothanthai
|
||||
!B1 U+0E11 thonangmonthothai
|
||||
!B2 U+0E12 thophuthaothai
|
||||
!B3 U+0E13 nonenthai
|
||||
!B4 U+0E14 dodekthai
|
||||
!B5 U+0E15 totaothai
|
||||
!B6 U+0E16 thothungthai
|
||||
!B7 U+0E17 thothahanthai
|
||||
!B8 U+0E18 thothongthai
|
||||
!B9 U+0E19 nonuthai
|
||||
!BA U+0E1A bobaimaithai
|
||||
!BB U+0E1B poplathai
|
||||
!BC U+0E1C phophungthai
|
||||
!BD U+0E1D fofathai
|
||||
!BE U+0E1E phophanthai
|
||||
!BF U+0E1F fofanthai
|
||||
!C0 U+0E20 phosamphaothai
|
||||
!C1 U+0E21 momathai
|
||||
!C2 U+0E22 yoyakthai
|
||||
!C3 U+0E23 roruathai
|
||||
!C4 U+0E24 ruthai
|
||||
!C5 U+0E25 lolingthai
|
||||
!C6 U+0E26 luthai
|
||||
!C7 U+0E27 wowaenthai
|
||||
!C8 U+0E28 sosalathai
|
||||
!C9 U+0E29 sorusithai
|
||||
!CA U+0E2A sosuathai
|
||||
!CB U+0E2B hohipthai
|
||||
!CC U+0E2C lochulathai
|
||||
!CD U+0E2D oangthai
|
||||
!CE U+0E2E honokhukthai
|
||||
!CF U+0E2F paiyannoithai
|
||||
!D0 U+0E30 saraathai
|
||||
!D1 U+0E31 maihanakatthai
|
||||
!D2 U+0E32 saraaathai
|
||||
!D3 U+0E33 saraamthai
|
||||
!D4 U+0E34 saraithai
|
||||
!D5 U+0E35 saraiithai
|
||||
!D6 U+0E36 sarauethai
|
||||
!D7 U+0E37 saraueethai
|
||||
!D8 U+0E38 sarauthai
|
||||
!D9 U+0E39 sarauuthai
|
||||
!DA U+0E3A phinthuthai
|
||||
!DF U+0E3F bahtthai
|
||||
!E0 U+0E40 saraethai
|
||||
!E1 U+0E41 saraaethai
|
||||
!E2 U+0E42 saraothai
|
||||
!E3 U+0E43 saraaimaimuanthai
|
||||
!E4 U+0E44 saraaimaimalaithai
|
||||
!E5 U+0E45 lakkhangyaothai
|
||||
!E6 U+0E46 maiyamokthai
|
||||
!E7 U+0E47 maitaikhuthai
|
||||
!E8 U+0E48 maiekthai
|
||||
!E9 U+0E49 maithothai
|
||||
!EA U+0E4A maitrithai
|
||||
!EB U+0E4B maichattawathai
|
||||
!EC U+0E4C thanthakhatthai
|
||||
!ED U+0E4D nikhahitthai
|
||||
!EE U+0E4E yamakkanthai
|
||||
!EF U+0E4F fongmanthai
|
||||
!F0 U+0E50 zerothai
|
||||
!F1 U+0E51 onethai
|
||||
!F2 U+0E52 twothai
|
||||
!F3 U+0E53 threethai
|
||||
!F4 U+0E54 fourthai
|
||||
!F5 U+0E55 fivethai
|
||||
!F6 U+0E56 sixthai
|
||||
!F7 U+0E57 seventhai
|
||||
!F8 U+0E58 eightthai
|
||||
!F9 U+0E59 ninethai
|
||||
!FA U+0E5A angkhankhuthai
|
||||
!FB U+0E5B khomutthai
|
||||
@@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+00A1 exclamdown
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+00AA ordfeminine
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+00BA ordmasculine
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+00BC onequarter
|
||||
!BD U+00BD onehalf
|
||||
!BE U+00BE threequarters
|
||||
!BF U+00BF questiondown
|
||||
!C0 U+00C0 Agrave
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+00C3 Atilde
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+00C8 Egrave
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+00CA Ecircumflex
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+00CC Igrave
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+00CF Idieresis
|
||||
!D0 U+00D0 Eth
|
||||
!D1 U+00D1 Ntilde
|
||||
!D2 U+00D2 Ograve
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+00D5 Otilde
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+00D8 Oslash
|
||||
!D9 U+00D9 Ugrave
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+00DD Yacute
|
||||
!DE U+00DE Thorn
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+00E0 agrave
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+00E3 atilde
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+00E8 egrave
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+00EA ecircumflex
|
||||
!EB U+00EB edieresis
|
||||
!EC U+00EC igrave
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+00EF idieresis
|
||||
!F0 U+00F0 eth
|
||||
!F1 U+00F1 ntilde
|
||||
!F2 U+00F2 ograve
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+00F5 otilde
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+00F8 oslash
|
||||
!F9 U+00F9 ugrave
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+00FD yacute
|
||||
!FE U+00FE thorn
|
||||
!FF U+00FF ydieresis
|
||||
@@ -0,0 +1,248 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+0E01 kokaithai
|
||||
!A2 U+0E02 khokhaithai
|
||||
!A3 U+0E03 khokhuatthai
|
||||
!A4 U+0E04 khokhwaithai
|
||||
!A5 U+0E05 khokhonthai
|
||||
!A6 U+0E06 khorakhangthai
|
||||
!A7 U+0E07 ngonguthai
|
||||
!A8 U+0E08 chochanthai
|
||||
!A9 U+0E09 chochingthai
|
||||
!AA U+0E0A chochangthai
|
||||
!AB U+0E0B sosothai
|
||||
!AC U+0E0C chochoethai
|
||||
!AD U+0E0D yoyingthai
|
||||
!AE U+0E0E dochadathai
|
||||
!AF U+0E0F topatakthai
|
||||
!B0 U+0E10 thothanthai
|
||||
!B1 U+0E11 thonangmonthothai
|
||||
!B2 U+0E12 thophuthaothai
|
||||
!B3 U+0E13 nonenthai
|
||||
!B4 U+0E14 dodekthai
|
||||
!B5 U+0E15 totaothai
|
||||
!B6 U+0E16 thothungthai
|
||||
!B7 U+0E17 thothahanthai
|
||||
!B8 U+0E18 thothongthai
|
||||
!B9 U+0E19 nonuthai
|
||||
!BA U+0E1A bobaimaithai
|
||||
!BB U+0E1B poplathai
|
||||
!BC U+0E1C phophungthai
|
||||
!BD U+0E1D fofathai
|
||||
!BE U+0E1E phophanthai
|
||||
!BF U+0E1F fofanthai
|
||||
!C0 U+0E20 phosamphaothai
|
||||
!C1 U+0E21 momathai
|
||||
!C2 U+0E22 yoyakthai
|
||||
!C3 U+0E23 roruathai
|
||||
!C4 U+0E24 ruthai
|
||||
!C5 U+0E25 lolingthai
|
||||
!C6 U+0E26 luthai
|
||||
!C7 U+0E27 wowaenthai
|
||||
!C8 U+0E28 sosalathai
|
||||
!C9 U+0E29 sorusithai
|
||||
!CA U+0E2A sosuathai
|
||||
!CB U+0E2B hohipthai
|
||||
!CC U+0E2C lochulathai
|
||||
!CD U+0E2D oangthai
|
||||
!CE U+0E2E honokhukthai
|
||||
!CF U+0E2F paiyannoithai
|
||||
!D0 U+0E30 saraathai
|
||||
!D1 U+0E31 maihanakatthai
|
||||
!D2 U+0E32 saraaathai
|
||||
!D3 U+0E33 saraamthai
|
||||
!D4 U+0E34 saraithai
|
||||
!D5 U+0E35 saraiithai
|
||||
!D6 U+0E36 sarauethai
|
||||
!D7 U+0E37 saraueethai
|
||||
!D8 U+0E38 sarauthai
|
||||
!D9 U+0E39 sarauuthai
|
||||
!DA U+0E3A phinthuthai
|
||||
!DF U+0E3F bahtthai
|
||||
!E0 U+0E40 saraethai
|
||||
!E1 U+0E41 saraaethai
|
||||
!E2 U+0E42 saraothai
|
||||
!E3 U+0E43 saraaimaimuanthai
|
||||
!E4 U+0E44 saraaimaimalaithai
|
||||
!E5 U+0E45 lakkhangyaothai
|
||||
!E6 U+0E46 maiyamokthai
|
||||
!E7 U+0E47 maitaikhuthai
|
||||
!E8 U+0E48 maiekthai
|
||||
!E9 U+0E49 maithothai
|
||||
!EA U+0E4A maitrithai
|
||||
!EB U+0E4B maichattawathai
|
||||
!EC U+0E4C thanthakhatthai
|
||||
!ED U+0E4D nikhahitthai
|
||||
!EE U+0E4E yamakkanthai
|
||||
!EF U+0E4F fongmanthai
|
||||
!F0 U+0E50 zerothai
|
||||
!F1 U+0E51 onethai
|
||||
!F2 U+0E52 twothai
|
||||
!F3 U+0E53 threethai
|
||||
!F4 U+0E54 fourthai
|
||||
!F5 U+0E55 fivethai
|
||||
!F6 U+0E56 sixthai
|
||||
!F7 U+0E57 seventhai
|
||||
!F8 U+0E58 eightthai
|
||||
!F9 U+0E59 ninethai
|
||||
!FA U+0E5A angkhankhuthai
|
||||
!FB U+0E5B khomutthai
|
||||
@@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+00A1 exclamdown
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+20AC Euro
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+0160 Scaron
|
||||
!A7 U+00A7 section
|
||||
!A8 U+0161 scaron
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+00AA ordfeminine
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+017D Zcaron
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+017E zcaron
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+00BA ordmasculine
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+0152 OE
|
||||
!BD U+0153 oe
|
||||
!BE U+0178 Ydieresis
|
||||
!BF U+00BF questiondown
|
||||
!C0 U+00C0 Agrave
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+00C3 Atilde
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+00C8 Egrave
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+00CA Ecircumflex
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+00CC Igrave
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+00CF Idieresis
|
||||
!D0 U+00D0 Eth
|
||||
!D1 U+00D1 Ntilde
|
||||
!D2 U+00D2 Ograve
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+00D5 Otilde
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+00D8 Oslash
|
||||
!D9 U+00D9 Ugrave
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+00DD Yacute
|
||||
!DE U+00DE Thorn
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+00E0 agrave
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+00E3 atilde
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+00E8 egrave
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+00EA ecircumflex
|
||||
!EB U+00EB edieresis
|
||||
!EC U+00EC igrave
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+00EF idieresis
|
||||
!F0 U+00F0 eth
|
||||
!F1 U+00F1 ntilde
|
||||
!F2 U+00F2 ograve
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+00F5 otilde
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+00F8 oslash
|
||||
!F9 U+00F9 ugrave
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+00FD yacute
|
||||
!FE U+00FE thorn
|
||||
!FF U+00FF ydieresis
|
||||
@@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+0104 Aogonek
|
||||
!A2 U+0105 aogonek
|
||||
!A3 U+0141 Lslash
|
||||
!A4 U+20AC Euro
|
||||
!A5 U+201E quotedblbase
|
||||
!A6 U+0160 Scaron
|
||||
!A7 U+00A7 section
|
||||
!A8 U+0161 scaron
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+0218 Scommaaccent
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+0179 Zacute
|
||||
!AD U+00AD hyphen
|
||||
!AE U+017A zacute
|
||||
!AF U+017B Zdotaccent
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+010C Ccaron
|
||||
!B3 U+0142 lslash
|
||||
!B4 U+017D Zcaron
|
||||
!B5 U+201D quotedblright
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+017E zcaron
|
||||
!B9 U+010D ccaron
|
||||
!BA U+0219 scommaaccent
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+0152 OE
|
||||
!BD U+0153 oe
|
||||
!BE U+0178 Ydieresis
|
||||
!BF U+017C zdotaccent
|
||||
!C0 U+00C0 Agrave
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+0102 Abreve
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+0106 Cacute
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+00C8 Egrave
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+00CA Ecircumflex
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+00CC Igrave
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+00CF Idieresis
|
||||
!D0 U+0110 Dcroat
|
||||
!D1 U+0143 Nacute
|
||||
!D2 U+00D2 Ograve
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+0150 Ohungarumlaut
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+015A Sacute
|
||||
!D8 U+0170 Uhungarumlaut
|
||||
!D9 U+00D9 Ugrave
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+0118 Eogonek
|
||||
!DE U+021A Tcommaaccent
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+00E0 agrave
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+0103 abreve
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+0107 cacute
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+00E8 egrave
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+00EA ecircumflex
|
||||
!EB U+00EB edieresis
|
||||
!EC U+00EC igrave
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+00EF idieresis
|
||||
!F0 U+0111 dcroat
|
||||
!F1 U+0144 nacute
|
||||
!F2 U+00F2 ograve
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+0151 ohungarumlaut
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+015B sacute
|
||||
!F8 U+0171 uhungarumlaut
|
||||
!F9 U+00F9 ugrave
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+0119 eogonek
|
||||
!FE U+021B tcommaaccent
|
||||
!FF U+00FF ydieresis
|
||||
@@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+0104 Aogonek
|
||||
!A2 U+02D8 breve
|
||||
!A3 U+0141 Lslash
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+013D Lcaron
|
||||
!A6 U+015A Sacute
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+0160 Scaron
|
||||
!AA U+015E Scedilla
|
||||
!AB U+0164 Tcaron
|
||||
!AC U+0179 Zacute
|
||||
!AD U+00AD hyphen
|
||||
!AE U+017D Zcaron
|
||||
!AF U+017B Zdotaccent
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+0105 aogonek
|
||||
!B2 U+02DB ogonek
|
||||
!B3 U+0142 lslash
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+013E lcaron
|
||||
!B6 U+015B sacute
|
||||
!B7 U+02C7 caron
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+0161 scaron
|
||||
!BA U+015F scedilla
|
||||
!BB U+0165 tcaron
|
||||
!BC U+017A zacute
|
||||
!BD U+02DD hungarumlaut
|
||||
!BE U+017E zcaron
|
||||
!BF U+017C zdotaccent
|
||||
!C0 U+0154 Racute
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+0102 Abreve
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+0139 Lacute
|
||||
!C6 U+0106 Cacute
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+010C Ccaron
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+0118 Eogonek
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+011A Ecaron
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+010E Dcaron
|
||||
!D0 U+0110 Dcroat
|
||||
!D1 U+0143 Nacute
|
||||
!D2 U+0147 Ncaron
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+0150 Ohungarumlaut
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+0158 Rcaron
|
||||
!D9 U+016E Uring
|
||||
!DA U+00DA Uacute
|
||||
!DB U+0170 Uhungarumlaut
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+00DD Yacute
|
||||
!DE U+0162 Tcommaaccent
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+0155 racute
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+0103 abreve
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+013A lacute
|
||||
!E6 U+0107 cacute
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+010D ccaron
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+0119 eogonek
|
||||
!EB U+00EB edieresis
|
||||
!EC U+011B ecaron
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+010F dcaron
|
||||
!F0 U+0111 dcroat
|
||||
!F1 U+0144 nacute
|
||||
!F2 U+0148 ncaron
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+0151 ohungarumlaut
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+0159 rcaron
|
||||
!F9 U+016F uring
|
||||
!FA U+00FA uacute
|
||||
!FB U+0171 uhungarumlaut
|
||||
!FC U+00FC udieresis
|
||||
!FD U+00FD yacute
|
||||
!FE U+0163 tcommaaccent
|
||||
!FF U+02D9 dotaccent
|
||||
@@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+0104 Aogonek
|
||||
!A2 U+0138 kgreenlandic
|
||||
!A3 U+0156 Rcommaaccent
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+0128 Itilde
|
||||
!A6 U+013B Lcommaaccent
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+0160 Scaron
|
||||
!AA U+0112 Emacron
|
||||
!AB U+0122 Gcommaaccent
|
||||
!AC U+0166 Tbar
|
||||
!AD U+00AD hyphen
|
||||
!AE U+017D Zcaron
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+0105 aogonek
|
||||
!B2 U+02DB ogonek
|
||||
!B3 U+0157 rcommaaccent
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+0129 itilde
|
||||
!B6 U+013C lcommaaccent
|
||||
!B7 U+02C7 caron
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+0161 scaron
|
||||
!BA U+0113 emacron
|
||||
!BB U+0123 gcommaaccent
|
||||
!BC U+0167 tbar
|
||||
!BD U+014A Eng
|
||||
!BE U+017E zcaron
|
||||
!BF U+014B eng
|
||||
!C0 U+0100 Amacron
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+00C3 Atilde
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+012E Iogonek
|
||||
!C8 U+010C Ccaron
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+0118 Eogonek
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+0116 Edotaccent
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+012A Imacron
|
||||
!D0 U+0110 Dcroat
|
||||
!D1 U+0145 Ncommaaccent
|
||||
!D2 U+014C Omacron
|
||||
!D3 U+0136 Kcommaaccent
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+00D5 Otilde
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+00D8 Oslash
|
||||
!D9 U+0172 Uogonek
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+0168 Utilde
|
||||
!DE U+016A Umacron
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+0101 amacron
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+00E3 atilde
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+012F iogonek
|
||||
!E8 U+010D ccaron
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+0119 eogonek
|
||||
!EB U+00EB edieresis
|
||||
!EC U+0117 edotaccent
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+012B imacron
|
||||
!F0 U+0111 dcroat
|
||||
!F1 U+0146 ncommaaccent
|
||||
!F2 U+014D omacron
|
||||
!F3 U+0137 kcommaaccent
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+00F5 otilde
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+00F8 oslash
|
||||
!F9 U+0173 uogonek
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+0169 utilde
|
||||
!FE U+016B umacron
|
||||
!FF U+02D9 dotaccent
|
||||
@@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+0401 afii10023
|
||||
!A2 U+0402 afii10051
|
||||
!A3 U+0403 afii10052
|
||||
!A4 U+0404 afii10053
|
||||
!A5 U+0405 afii10054
|
||||
!A6 U+0406 afii10055
|
||||
!A7 U+0407 afii10056
|
||||
!A8 U+0408 afii10057
|
||||
!A9 U+0409 afii10058
|
||||
!AA U+040A afii10059
|
||||
!AB U+040B afii10060
|
||||
!AC U+040C afii10061
|
||||
!AD U+00AD hyphen
|
||||
!AE U+040E afii10062
|
||||
!AF U+040F afii10145
|
||||
!B0 U+0410 afii10017
|
||||
!B1 U+0411 afii10018
|
||||
!B2 U+0412 afii10019
|
||||
!B3 U+0413 afii10020
|
||||
!B4 U+0414 afii10021
|
||||
!B5 U+0415 afii10022
|
||||
!B6 U+0416 afii10024
|
||||
!B7 U+0417 afii10025
|
||||
!B8 U+0418 afii10026
|
||||
!B9 U+0419 afii10027
|
||||
!BA U+041A afii10028
|
||||
!BB U+041B afii10029
|
||||
!BC U+041C afii10030
|
||||
!BD U+041D afii10031
|
||||
!BE U+041E afii10032
|
||||
!BF U+041F afii10033
|
||||
!C0 U+0420 afii10034
|
||||
!C1 U+0421 afii10035
|
||||
!C2 U+0422 afii10036
|
||||
!C3 U+0423 afii10037
|
||||
!C4 U+0424 afii10038
|
||||
!C5 U+0425 afii10039
|
||||
!C6 U+0426 afii10040
|
||||
!C7 U+0427 afii10041
|
||||
!C8 U+0428 afii10042
|
||||
!C9 U+0429 afii10043
|
||||
!CA U+042A afii10044
|
||||
!CB U+042B afii10045
|
||||
!CC U+042C afii10046
|
||||
!CD U+042D afii10047
|
||||
!CE U+042E afii10048
|
||||
!CF U+042F afii10049
|
||||
!D0 U+0430 afii10065
|
||||
!D1 U+0431 afii10066
|
||||
!D2 U+0432 afii10067
|
||||
!D3 U+0433 afii10068
|
||||
!D4 U+0434 afii10069
|
||||
!D5 U+0435 afii10070
|
||||
!D6 U+0436 afii10072
|
||||
!D7 U+0437 afii10073
|
||||
!D8 U+0438 afii10074
|
||||
!D9 U+0439 afii10075
|
||||
!DA U+043A afii10076
|
||||
!DB U+043B afii10077
|
||||
!DC U+043C afii10078
|
||||
!DD U+043D afii10079
|
||||
!DE U+043E afii10080
|
||||
!DF U+043F afii10081
|
||||
!E0 U+0440 afii10082
|
||||
!E1 U+0441 afii10083
|
||||
!E2 U+0442 afii10084
|
||||
!E3 U+0443 afii10085
|
||||
!E4 U+0444 afii10086
|
||||
!E5 U+0445 afii10087
|
||||
!E6 U+0446 afii10088
|
||||
!E7 U+0447 afii10089
|
||||
!E8 U+0448 afii10090
|
||||
!E9 U+0449 afii10091
|
||||
!EA U+044A afii10092
|
||||
!EB U+044B afii10093
|
||||
!EC U+044C afii10094
|
||||
!ED U+044D afii10095
|
||||
!EE U+044E afii10096
|
||||
!EF U+044F afii10097
|
||||
!F0 U+2116 afii61352
|
||||
!F1 U+0451 afii10071
|
||||
!F2 U+0452 afii10099
|
||||
!F3 U+0453 afii10100
|
||||
!F4 U+0454 afii10101
|
||||
!F5 U+0455 afii10102
|
||||
!F6 U+0456 afii10103
|
||||
!F7 U+0457 afii10104
|
||||
!F8 U+0458 afii10105
|
||||
!F9 U+0459 afii10106
|
||||
!FA U+045A afii10107
|
||||
!FB U+045B afii10108
|
||||
!FC U+045C afii10109
|
||||
!FD U+00A7 section
|
||||
!FE U+045E afii10110
|
||||
!FF U+045F afii10193
|
||||
@@ -0,0 +1,250 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+2018 quoteleft
|
||||
!A2 U+2019 quoteright
|
||||
!A3 U+00A3 sterling
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AF U+2015 afii00208
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+0384 tonos
|
||||
!B5 U+0385 dieresistonos
|
||||
!B6 U+0386 Alphatonos
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+0388 Epsilontonos
|
||||
!B9 U+0389 Etatonos
|
||||
!BA U+038A Iotatonos
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+038C Omicrontonos
|
||||
!BD U+00BD onehalf
|
||||
!BE U+038E Upsilontonos
|
||||
!BF U+038F Omegatonos
|
||||
!C0 U+0390 iotadieresistonos
|
||||
!C1 U+0391 Alpha
|
||||
!C2 U+0392 Beta
|
||||
!C3 U+0393 Gamma
|
||||
!C4 U+0394 Delta
|
||||
!C5 U+0395 Epsilon
|
||||
!C6 U+0396 Zeta
|
||||
!C7 U+0397 Eta
|
||||
!C8 U+0398 Theta
|
||||
!C9 U+0399 Iota
|
||||
!CA U+039A Kappa
|
||||
!CB U+039B Lambda
|
||||
!CC U+039C Mu
|
||||
!CD U+039D Nu
|
||||
!CE U+039E Xi
|
||||
!CF U+039F Omicron
|
||||
!D0 U+03A0 Pi
|
||||
!D1 U+03A1 Rho
|
||||
!D3 U+03A3 Sigma
|
||||
!D4 U+03A4 Tau
|
||||
!D5 U+03A5 Upsilon
|
||||
!D6 U+03A6 Phi
|
||||
!D7 U+03A7 Chi
|
||||
!D8 U+03A8 Psi
|
||||
!D9 U+03A9 Omega
|
||||
!DA U+03AA Iotadieresis
|
||||
!DB U+03AB Upsilondieresis
|
||||
!DC U+03AC alphatonos
|
||||
!DD U+03AD epsilontonos
|
||||
!DE U+03AE etatonos
|
||||
!DF U+03AF iotatonos
|
||||
!E0 U+03B0 upsilondieresistonos
|
||||
!E1 U+03B1 alpha
|
||||
!E2 U+03B2 beta
|
||||
!E3 U+03B3 gamma
|
||||
!E4 U+03B4 delta
|
||||
!E5 U+03B5 epsilon
|
||||
!E6 U+03B6 zeta
|
||||
!E7 U+03B7 eta
|
||||
!E8 U+03B8 theta
|
||||
!E9 U+03B9 iota
|
||||
!EA U+03BA kappa
|
||||
!EB U+03BB lambda
|
||||
!EC U+03BC mu
|
||||
!ED U+03BD nu
|
||||
!EE U+03BE xi
|
||||
!EF U+03BF omicron
|
||||
!F0 U+03C0 pi
|
||||
!F1 U+03C1 rho
|
||||
!F2 U+03C2 sigma1
|
||||
!F3 U+03C3 sigma
|
||||
!F4 U+03C4 tau
|
||||
!F5 U+03C5 upsilon
|
||||
!F6 U+03C6 phi
|
||||
!F7 U+03C7 chi
|
||||
!F8 U+03C8 psi
|
||||
!F9 U+03C9 omega
|
||||
!FA U+03CA iotadieresis
|
||||
!FB U+03CB upsilondieresis
|
||||
!FC U+03CC omicrontonos
|
||||
!FD U+03CD upsilontonos
|
||||
!FE U+03CE omegatonos
|
||||
@@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+0080 .notdef
|
||||
!81 U+0081 .notdef
|
||||
!82 U+0082 .notdef
|
||||
!83 U+0083 .notdef
|
||||
!84 U+0084 .notdef
|
||||
!85 U+0085 .notdef
|
||||
!86 U+0086 .notdef
|
||||
!87 U+0087 .notdef
|
||||
!88 U+0088 .notdef
|
||||
!89 U+0089 .notdef
|
||||
!8A U+008A .notdef
|
||||
!8B U+008B .notdef
|
||||
!8C U+008C .notdef
|
||||
!8D U+008D .notdef
|
||||
!8E U+008E .notdef
|
||||
!8F U+008F .notdef
|
||||
!90 U+0090 .notdef
|
||||
!91 U+0091 .notdef
|
||||
!92 U+0092 .notdef
|
||||
!93 U+0093 .notdef
|
||||
!94 U+0094 .notdef
|
||||
!95 U+0095 .notdef
|
||||
!96 U+0096 .notdef
|
||||
!97 U+0097 .notdef
|
||||
!98 U+0098 .notdef
|
||||
!99 U+0099 .notdef
|
||||
!9A U+009A .notdef
|
||||
!9B U+009B .notdef
|
||||
!9C U+009C .notdef
|
||||
!9D U+009D .notdef
|
||||
!9E U+009E .notdef
|
||||
!9F U+009F .notdef
|
||||
!A0 U+00A0 space
|
||||
!A1 U+00A1 exclamdown
|
||||
!A2 U+00A2 cent
|
||||
!A3 U+00A3 sterling
|
||||
!A4 U+00A4 currency
|
||||
!A5 U+00A5 yen
|
||||
!A6 U+00A6 brokenbar
|
||||
!A7 U+00A7 section
|
||||
!A8 U+00A8 dieresis
|
||||
!A9 U+00A9 copyright
|
||||
!AA U+00AA ordfeminine
|
||||
!AB U+00AB guillemotleft
|
||||
!AC U+00AC logicalnot
|
||||
!AD U+00AD hyphen
|
||||
!AE U+00AE registered
|
||||
!AF U+00AF macron
|
||||
!B0 U+00B0 degree
|
||||
!B1 U+00B1 plusminus
|
||||
!B2 U+00B2 twosuperior
|
||||
!B3 U+00B3 threesuperior
|
||||
!B4 U+00B4 acute
|
||||
!B5 U+00B5 mu
|
||||
!B6 U+00B6 paragraph
|
||||
!B7 U+00B7 periodcentered
|
||||
!B8 U+00B8 cedilla
|
||||
!B9 U+00B9 onesuperior
|
||||
!BA U+00BA ordmasculine
|
||||
!BB U+00BB guillemotright
|
||||
!BC U+00BC onequarter
|
||||
!BD U+00BD onehalf
|
||||
!BE U+00BE threequarters
|
||||
!BF U+00BF questiondown
|
||||
!C0 U+00C0 Agrave
|
||||
!C1 U+00C1 Aacute
|
||||
!C2 U+00C2 Acircumflex
|
||||
!C3 U+00C3 Atilde
|
||||
!C4 U+00C4 Adieresis
|
||||
!C5 U+00C5 Aring
|
||||
!C6 U+00C6 AE
|
||||
!C7 U+00C7 Ccedilla
|
||||
!C8 U+00C8 Egrave
|
||||
!C9 U+00C9 Eacute
|
||||
!CA U+00CA Ecircumflex
|
||||
!CB U+00CB Edieresis
|
||||
!CC U+00CC Igrave
|
||||
!CD U+00CD Iacute
|
||||
!CE U+00CE Icircumflex
|
||||
!CF U+00CF Idieresis
|
||||
!D0 U+011E Gbreve
|
||||
!D1 U+00D1 Ntilde
|
||||
!D2 U+00D2 Ograve
|
||||
!D3 U+00D3 Oacute
|
||||
!D4 U+00D4 Ocircumflex
|
||||
!D5 U+00D5 Otilde
|
||||
!D6 U+00D6 Odieresis
|
||||
!D7 U+00D7 multiply
|
||||
!D8 U+00D8 Oslash
|
||||
!D9 U+00D9 Ugrave
|
||||
!DA U+00DA Uacute
|
||||
!DB U+00DB Ucircumflex
|
||||
!DC U+00DC Udieresis
|
||||
!DD U+0130 Idotaccent
|
||||
!DE U+015E Scedilla
|
||||
!DF U+00DF germandbls
|
||||
!E0 U+00E0 agrave
|
||||
!E1 U+00E1 aacute
|
||||
!E2 U+00E2 acircumflex
|
||||
!E3 U+00E3 atilde
|
||||
!E4 U+00E4 adieresis
|
||||
!E5 U+00E5 aring
|
||||
!E6 U+00E6 ae
|
||||
!E7 U+00E7 ccedilla
|
||||
!E8 U+00E8 egrave
|
||||
!E9 U+00E9 eacute
|
||||
!EA U+00EA ecircumflex
|
||||
!EB U+00EB edieresis
|
||||
!EC U+00EC igrave
|
||||
!ED U+00ED iacute
|
||||
!EE U+00EE icircumflex
|
||||
!EF U+00EF idieresis
|
||||
!F0 U+011F gbreve
|
||||
!F1 U+00F1 ntilde
|
||||
!F2 U+00F2 ograve
|
||||
!F3 U+00F3 oacute
|
||||
!F4 U+00F4 ocircumflex
|
||||
!F5 U+00F5 otilde
|
||||
!F6 U+00F6 odieresis
|
||||
!F7 U+00F7 divide
|
||||
!F8 U+00F8 oslash
|
||||
!F9 U+00F9 ugrave
|
||||
!FA U+00FA uacute
|
||||
!FB U+00FB ucircumflex
|
||||
!FC U+00FC udieresis
|
||||
!FD U+0131 dotlessi
|
||||
!FE U+015F scedilla
|
||||
!FF U+00FF ydieresis
|
||||
@@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+2500 SF100000
|
||||
!81 U+2502 SF110000
|
||||
!82 U+250C SF010000
|
||||
!83 U+2510 SF030000
|
||||
!84 U+2514 SF020000
|
||||
!85 U+2518 SF040000
|
||||
!86 U+251C SF080000
|
||||
!87 U+2524 SF090000
|
||||
!88 U+252C SF060000
|
||||
!89 U+2534 SF070000
|
||||
!8A U+253C SF050000
|
||||
!8B U+2580 upblock
|
||||
!8C U+2584 dnblock
|
||||
!8D U+2588 block
|
||||
!8E U+258C lfblock
|
||||
!8F U+2590 rtblock
|
||||
!90 U+2591 ltshade
|
||||
!91 U+2592 shade
|
||||
!92 U+2593 dkshade
|
||||
!93 U+2320 integraltp
|
||||
!94 U+25A0 filledbox
|
||||
!95 U+2219 periodcentered
|
||||
!96 U+221A radical
|
||||
!97 U+2248 approxequal
|
||||
!98 U+2264 lessequal
|
||||
!99 U+2265 greaterequal
|
||||
!9A U+00A0 space
|
||||
!9B U+2321 integralbt
|
||||
!9C U+00B0 degree
|
||||
!9D U+00B2 twosuperior
|
||||
!9E U+00B7 periodcentered
|
||||
!9F U+00F7 divide
|
||||
!A0 U+2550 SF430000
|
||||
!A1 U+2551 SF240000
|
||||
!A2 U+2552 SF510000
|
||||
!A3 U+0451 afii10071
|
||||
!A4 U+2553 SF520000
|
||||
!A5 U+2554 SF390000
|
||||
!A6 U+2555 SF220000
|
||||
!A7 U+2556 SF210000
|
||||
!A8 U+2557 SF250000
|
||||
!A9 U+2558 SF500000
|
||||
!AA U+2559 SF490000
|
||||
!AB U+255A SF380000
|
||||
!AC U+255B SF280000
|
||||
!AD U+255C SF270000
|
||||
!AE U+255D SF260000
|
||||
!AF U+255E SF360000
|
||||
!B0 U+255F SF370000
|
||||
!B1 U+2560 SF420000
|
||||
!B2 U+2561 SF190000
|
||||
!B3 U+0401 afii10023
|
||||
!B4 U+2562 SF200000
|
||||
!B5 U+2563 SF230000
|
||||
!B6 U+2564 SF470000
|
||||
!B7 U+2565 SF480000
|
||||
!B8 U+2566 SF410000
|
||||
!B9 U+2567 SF450000
|
||||
!BA U+2568 SF460000
|
||||
!BB U+2569 SF400000
|
||||
!BC U+256A SF540000
|
||||
!BD U+256B SF530000
|
||||
!BE U+256C SF440000
|
||||
!BF U+00A9 copyright
|
||||
!C0 U+044E afii10096
|
||||
!C1 U+0430 afii10065
|
||||
!C2 U+0431 afii10066
|
||||
!C3 U+0446 afii10088
|
||||
!C4 U+0434 afii10069
|
||||
!C5 U+0435 afii10070
|
||||
!C6 U+0444 afii10086
|
||||
!C7 U+0433 afii10068
|
||||
!C8 U+0445 afii10087
|
||||
!C9 U+0438 afii10074
|
||||
!CA U+0439 afii10075
|
||||
!CB U+043A afii10076
|
||||
!CC U+043B afii10077
|
||||
!CD U+043C afii10078
|
||||
!CE U+043D afii10079
|
||||
!CF U+043E afii10080
|
||||
!D0 U+043F afii10081
|
||||
!D1 U+044F afii10097
|
||||
!D2 U+0440 afii10082
|
||||
!D3 U+0441 afii10083
|
||||
!D4 U+0442 afii10084
|
||||
!D5 U+0443 afii10085
|
||||
!D6 U+0436 afii10072
|
||||
!D7 U+0432 afii10067
|
||||
!D8 U+044C afii10094
|
||||
!D9 U+044B afii10093
|
||||
!DA U+0437 afii10073
|
||||
!DB U+0448 afii10090
|
||||
!DC U+044D afii10095
|
||||
!DD U+0449 afii10091
|
||||
!DE U+0447 afii10089
|
||||
!DF U+044A afii10092
|
||||
!E0 U+042E afii10048
|
||||
!E1 U+0410 afii10017
|
||||
!E2 U+0411 afii10018
|
||||
!E3 U+0426 afii10040
|
||||
!E4 U+0414 afii10021
|
||||
!E5 U+0415 afii10022
|
||||
!E6 U+0424 afii10038
|
||||
!E7 U+0413 afii10020
|
||||
!E8 U+0425 afii10039
|
||||
!E9 U+0418 afii10026
|
||||
!EA U+0419 afii10027
|
||||
!EB U+041A afii10028
|
||||
!EC U+041B afii10029
|
||||
!ED U+041C afii10030
|
||||
!EE U+041D afii10031
|
||||
!EF U+041E afii10032
|
||||
!F0 U+041F afii10033
|
||||
!F1 U+042F afii10049
|
||||
!F2 U+0420 afii10034
|
||||
!F3 U+0421 afii10035
|
||||
!F4 U+0422 afii10036
|
||||
!F5 U+0423 afii10037
|
||||
!F6 U+0416 afii10024
|
||||
!F7 U+0412 afii10019
|
||||
!F8 U+042C afii10046
|
||||
!F9 U+042B afii10045
|
||||
!FA U+0417 afii10025
|
||||
!FB U+0428 afii10042
|
||||
!FC U+042D afii10047
|
||||
!FD U+0429 afii10043
|
||||
!FE U+0427 afii10041
|
||||
!FF U+042A afii10044
|
||||
@@ -0,0 +1,256 @@
|
||||
!00 U+0000 .notdef
|
||||
!01 U+0001 .notdef
|
||||
!02 U+0002 .notdef
|
||||
!03 U+0003 .notdef
|
||||
!04 U+0004 .notdef
|
||||
!05 U+0005 .notdef
|
||||
!06 U+0006 .notdef
|
||||
!07 U+0007 .notdef
|
||||
!08 U+0008 .notdef
|
||||
!09 U+0009 .notdef
|
||||
!0A U+000A .notdef
|
||||
!0B U+000B .notdef
|
||||
!0C U+000C .notdef
|
||||
!0D U+000D .notdef
|
||||
!0E U+000E .notdef
|
||||
!0F U+000F .notdef
|
||||
!10 U+0010 .notdef
|
||||
!11 U+0011 .notdef
|
||||
!12 U+0012 .notdef
|
||||
!13 U+0013 .notdef
|
||||
!14 U+0014 .notdef
|
||||
!15 U+0015 .notdef
|
||||
!16 U+0016 .notdef
|
||||
!17 U+0017 .notdef
|
||||
!18 U+0018 .notdef
|
||||
!19 U+0019 .notdef
|
||||
!1A U+001A .notdef
|
||||
!1B U+001B .notdef
|
||||
!1C U+001C .notdef
|
||||
!1D U+001D .notdef
|
||||
!1E U+001E .notdef
|
||||
!1F U+001F .notdef
|
||||
!20 U+0020 space
|
||||
!21 U+0021 exclam
|
||||
!22 U+0022 quotedbl
|
||||
!23 U+0023 numbersign
|
||||
!24 U+0024 dollar
|
||||
!25 U+0025 percent
|
||||
!26 U+0026 ampersand
|
||||
!27 U+0027 quotesingle
|
||||
!28 U+0028 parenleft
|
||||
!29 U+0029 parenright
|
||||
!2A U+002A asterisk
|
||||
!2B U+002B plus
|
||||
!2C U+002C comma
|
||||
!2D U+002D hyphen
|
||||
!2E U+002E period
|
||||
!2F U+002F slash
|
||||
!30 U+0030 zero
|
||||
!31 U+0031 one
|
||||
!32 U+0032 two
|
||||
!33 U+0033 three
|
||||
!34 U+0034 four
|
||||
!35 U+0035 five
|
||||
!36 U+0036 six
|
||||
!37 U+0037 seven
|
||||
!38 U+0038 eight
|
||||
!39 U+0039 nine
|
||||
!3A U+003A colon
|
||||
!3B U+003B semicolon
|
||||
!3C U+003C less
|
||||
!3D U+003D equal
|
||||
!3E U+003E greater
|
||||
!3F U+003F question
|
||||
!40 U+0040 at
|
||||
!41 U+0041 A
|
||||
!42 U+0042 B
|
||||
!43 U+0043 C
|
||||
!44 U+0044 D
|
||||
!45 U+0045 E
|
||||
!46 U+0046 F
|
||||
!47 U+0047 G
|
||||
!48 U+0048 H
|
||||
!49 U+0049 I
|
||||
!4A U+004A J
|
||||
!4B U+004B K
|
||||
!4C U+004C L
|
||||
!4D U+004D M
|
||||
!4E U+004E N
|
||||
!4F U+004F O
|
||||
!50 U+0050 P
|
||||
!51 U+0051 Q
|
||||
!52 U+0052 R
|
||||
!53 U+0053 S
|
||||
!54 U+0054 T
|
||||
!55 U+0055 U
|
||||
!56 U+0056 V
|
||||
!57 U+0057 W
|
||||
!58 U+0058 X
|
||||
!59 U+0059 Y
|
||||
!5A U+005A Z
|
||||
!5B U+005B bracketleft
|
||||
!5C U+005C backslash
|
||||
!5D U+005D bracketright
|
||||
!5E U+005E asciicircum
|
||||
!5F U+005F underscore
|
||||
!60 U+0060 grave
|
||||
!61 U+0061 a
|
||||
!62 U+0062 b
|
||||
!63 U+0063 c
|
||||
!64 U+0064 d
|
||||
!65 U+0065 e
|
||||
!66 U+0066 f
|
||||
!67 U+0067 g
|
||||
!68 U+0068 h
|
||||
!69 U+0069 i
|
||||
!6A U+006A j
|
||||
!6B U+006B k
|
||||
!6C U+006C l
|
||||
!6D U+006D m
|
||||
!6E U+006E n
|
||||
!6F U+006F o
|
||||
!70 U+0070 p
|
||||
!71 U+0071 q
|
||||
!72 U+0072 r
|
||||
!73 U+0073 s
|
||||
!74 U+0074 t
|
||||
!75 U+0075 u
|
||||
!76 U+0076 v
|
||||
!77 U+0077 w
|
||||
!78 U+0078 x
|
||||
!79 U+0079 y
|
||||
!7A U+007A z
|
||||
!7B U+007B braceleft
|
||||
!7C U+007C bar
|
||||
!7D U+007D braceright
|
||||
!7E U+007E asciitilde
|
||||
!7F U+007F .notdef
|
||||
!80 U+2500 SF100000
|
||||
!81 U+2502 SF110000
|
||||
!82 U+250C SF010000
|
||||
!83 U+2510 SF030000
|
||||
!84 U+2514 SF020000
|
||||
!85 U+2518 SF040000
|
||||
!86 U+251C SF080000
|
||||
!87 U+2524 SF090000
|
||||
!88 U+252C SF060000
|
||||
!89 U+2534 SF070000
|
||||
!8A U+253C SF050000
|
||||
!8B U+2580 upblock
|
||||
!8C U+2584 dnblock
|
||||
!8D U+2588 block
|
||||
!8E U+258C lfblock
|
||||
!8F U+2590 rtblock
|
||||
!90 U+2591 ltshade
|
||||
!91 U+2592 shade
|
||||
!92 U+2593 dkshade
|
||||
!93 U+2320 integraltp
|
||||
!94 U+25A0 filledbox
|
||||
!95 U+2022 bullet
|
||||
!96 U+221A radical
|
||||
!97 U+2248 approxequal
|
||||
!98 U+2264 lessequal
|
||||
!99 U+2265 greaterequal
|
||||
!9A U+00A0 space
|
||||
!9B U+2321 integralbt
|
||||
!9C U+00B0 degree
|
||||
!9D U+00B2 twosuperior
|
||||
!9E U+00B7 periodcentered
|
||||
!9F U+00F7 divide
|
||||
!A0 U+2550 SF430000
|
||||
!A1 U+2551 SF240000
|
||||
!A2 U+2552 SF510000
|
||||
!A3 U+0451 afii10071
|
||||
!A4 U+0454 afii10101
|
||||
!A5 U+2554 SF390000
|
||||
!A6 U+0456 afii10103
|
||||
!A7 U+0457 afii10104
|
||||
!A8 U+2557 SF250000
|
||||
!A9 U+2558 SF500000
|
||||
!AA U+2559 SF490000
|
||||
!AB U+255A SF380000
|
||||
!AC U+255B SF280000
|
||||
!AD U+0491 afii10098
|
||||
!AE U+255D SF260000
|
||||
!AF U+255E SF360000
|
||||
!B0 U+255F SF370000
|
||||
!B1 U+2560 SF420000
|
||||
!B2 U+2561 SF190000
|
||||
!B3 U+0401 afii10023
|
||||
!B4 U+0404 afii10053
|
||||
!B5 U+2563 SF230000
|
||||
!B6 U+0406 afii10055
|
||||
!B7 U+0407 afii10056
|
||||
!B8 U+2566 SF410000
|
||||
!B9 U+2567 SF450000
|
||||
!BA U+2568 SF460000
|
||||
!BB U+2569 SF400000
|
||||
!BC U+256A SF540000
|
||||
!BD U+0490 afii10050
|
||||
!BE U+256C SF440000
|
||||
!BF U+00A9 copyright
|
||||
!C0 U+044E afii10096
|
||||
!C1 U+0430 afii10065
|
||||
!C2 U+0431 afii10066
|
||||
!C3 U+0446 afii10088
|
||||
!C4 U+0434 afii10069
|
||||
!C5 U+0435 afii10070
|
||||
!C6 U+0444 afii10086
|
||||
!C7 U+0433 afii10068
|
||||
!C8 U+0445 afii10087
|
||||
!C9 U+0438 afii10074
|
||||
!CA U+0439 afii10075
|
||||
!CB U+043A afii10076
|
||||
!CC U+043B afii10077
|
||||
!CD U+043C afii10078
|
||||
!CE U+043D afii10079
|
||||
!CF U+043E afii10080
|
||||
!D0 U+043F afii10081
|
||||
!D1 U+044F afii10097
|
||||
!D2 U+0440 afii10082
|
||||
!D3 U+0441 afii10083
|
||||
!D4 U+0442 afii10084
|
||||
!D5 U+0443 afii10085
|
||||
!D6 U+0436 afii10072
|
||||
!D7 U+0432 afii10067
|
||||
!D8 U+044C afii10094
|
||||
!D9 U+044B afii10093
|
||||
!DA U+0437 afii10073
|
||||
!DB U+0448 afii10090
|
||||
!DC U+044D afii10095
|
||||
!DD U+0449 afii10091
|
||||
!DE U+0447 afii10089
|
||||
!DF U+044A afii10092
|
||||
!E0 U+042E afii10048
|
||||
!E1 U+0410 afii10017
|
||||
!E2 U+0411 afii10018
|
||||
!E3 U+0426 afii10040
|
||||
!E4 U+0414 afii10021
|
||||
!E5 U+0415 afii10022
|
||||
!E6 U+0424 afii10038
|
||||
!E7 U+0413 afii10020
|
||||
!E8 U+0425 afii10039
|
||||
!E9 U+0418 afii10026
|
||||
!EA U+0419 afii10027
|
||||
!EB U+041A afii10028
|
||||
!EC U+041B afii10029
|
||||
!ED U+041C afii10030
|
||||
!EE U+041D afii10031
|
||||
!EF U+041E afii10032
|
||||
!F0 U+041F afii10033
|
||||
!F1 U+042F afii10049
|
||||
!F2 U+0420 afii10034
|
||||
!F3 U+0421 afii10035
|
||||
!F4 U+0422 afii10036
|
||||
!F5 U+0423 afii10037
|
||||
!F6 U+0416 afii10024
|
||||
!F7 U+0412 afii10019
|
||||
!F8 U+042C afii10046
|
||||
!F9 U+042B afii10045
|
||||
!FA U+0417 afii10025
|
||||
!FB U+0428 afii10042
|
||||
!FC U+042D afii10047
|
||||
!FD U+0429 afii10043
|
||||
!FE U+0427 afii10041
|
||||
!FF U+042A afii10044
|
||||
@@ -0,0 +1,400 @@
|
||||
<?php
|
||||
/*******************************************************************************
|
||||
* Utility to generate font definition files *
|
||||
* Version: 1.12 *
|
||||
* Date: 2003-12-30 *
|
||||
*******************************************************************************/
|
||||
|
||||
function ReadMap($enc)
|
||||
{
|
||||
//Read a map file
|
||||
$file=dirname(__FILE__).'/'.strtolower($enc).'.map';
|
||||
$a=file($file);
|
||||
if(empty($a))
|
||||
die('<B>Error:</B> encoding not found: '.$enc);
|
||||
$cc2gn=array();
|
||||
foreach($a as $l)
|
||||
{
|
||||
if($l{0}=='!')
|
||||
{
|
||||
$e=preg_split('/[ \\t]+/',chop($l));
|
||||
$cc=hexdec(substr($e[0],1));
|
||||
$gn=$e[2];
|
||||
$cc2gn[$cc]=$gn;
|
||||
}
|
||||
}
|
||||
for($i=0;$i<=255;$i++)
|
||||
if(!isset($cc2gn[$i]))
|
||||
$cc2gn[$i]='.notdef';
|
||||
return $cc2gn;
|
||||
}
|
||||
|
||||
function ReadAFM($file,&$map)
|
||||
{
|
||||
//Read a font metric file
|
||||
$a=file($file);
|
||||
if(empty($a))
|
||||
die('File not found');
|
||||
$widths=array();
|
||||
$fm=array();
|
||||
$fix=array('Edot'=>'Edotaccent','edot'=>'edotaccent','Idot'=>'Idotaccent','Zdot'=>'Zdotaccent','zdot'=>'zdotaccent',
|
||||
'Odblacute'=>'Ohungarumlaut','odblacute'=>'ohungarumlaut','Udblacute'=>'Uhungarumlaut','udblacute'=>'uhungarumlaut',
|
||||
'Gcedilla'=>'Gcommaaccent','gcedilla'=>'gcommaaccent','Kcedilla'=>'Kcommaaccent','kcedilla'=>'kcommaaccent',
|
||||
'Lcedilla'=>'Lcommaaccent','lcedilla'=>'lcommaaccent','Ncedilla'=>'Ncommaaccent','ncedilla'=>'ncommaaccent',
|
||||
'Rcedilla'=>'Rcommaaccent','rcedilla'=>'rcommaaccent','Scedilla'=>'Scommaaccent','scedilla'=>'scommaaccent',
|
||||
'Tcedilla'=>'Tcommaaccent','tcedilla'=>'tcommaaccent','Dslash'=>'Dcroat','dslash'=>'dcroat','Dmacron'=>'Dcroat','dmacron'=>'dcroat',
|
||||
'combininggraveaccent'=>'gravecomb','combininghookabove'=>'hookabovecomb','combiningtildeaccent'=>'tildecomb',
|
||||
'combiningacuteaccent'=>'acutecomb','combiningdotbelow'=>'dotbelowcomb','dongsign'=>'dong');
|
||||
foreach($a as $l)
|
||||
{
|
||||
$e=explode(' ',chop($l));
|
||||
if(count($e)<2)
|
||||
continue;
|
||||
$code=$e[0];
|
||||
$param=$e[1];
|
||||
if($code=='C')
|
||||
{
|
||||
//Character metrics
|
||||
$cc=(int)$e[1];
|
||||
$w=$e[4];
|
||||
$gn=$e[7];
|
||||
if(substr($gn,-4)=='20AC')
|
||||
$gn='Euro';
|
||||
if(isset($fix[$gn]))
|
||||
{
|
||||
//Fix incorrect glyph name
|
||||
foreach($map as $c=>$n)
|
||||
if($n==$fix[$gn])
|
||||
$map[$c]=$gn;
|
||||
}
|
||||
if(empty($map))
|
||||
{
|
||||
//Symbolic font: use built-in encoding
|
||||
$widths[$cc]=$w;
|
||||
}
|
||||
else
|
||||
{
|
||||
$widths[$gn]=$w;
|
||||
if($gn=='X')
|
||||
$fm['CapXHeight']=$e[13];
|
||||
}
|
||||
if($gn=='.notdef')
|
||||
$fm['MissingWidth']=$w;
|
||||
}
|
||||
elseif($code=='FontName')
|
||||
$fm['FontName']=$param;
|
||||
elseif($code=='Weight')
|
||||
$fm['Weight']=$param;
|
||||
elseif($code=='ItalicAngle')
|
||||
$fm['ItalicAngle']=(double)$param;
|
||||
elseif($code=='Ascender')
|
||||
$fm['Ascender']=(int)$param;
|
||||
elseif($code=='Descender')
|
||||
$fm['Descender']=(int)$param;
|
||||
elseif($code=='UnderlineThickness')
|
||||
$fm['UnderlineThickness']=(int)$param;
|
||||
elseif($code=='UnderlinePosition')
|
||||
$fm['UnderlinePosition']=(int)$param;
|
||||
elseif($code=='IsFixedPitch')
|
||||
$fm['IsFixedPitch']=($param=='true');
|
||||
elseif($code=='FontBBox')
|
||||
$fm['FontBBox']=array($e[1],$e[2],$e[3],$e[4]);
|
||||
elseif($code=='CapHeight')
|
||||
$fm['CapHeight']=(int)$param;
|
||||
elseif($code=='StdVW')
|
||||
$fm['StdVW']=(int)$param;
|
||||
}
|
||||
if(!isset($fm['FontName']))
|
||||
die('FontName not found');
|
||||
if(!empty($map))
|
||||
{
|
||||
if(!isset($widths['.notdef']))
|
||||
$widths['.notdef']=600;
|
||||
if(!isset($widths['Delta']) and isset($widths['increment']))
|
||||
$widths['Delta']=$widths['increment'];
|
||||
//Order widths according to map
|
||||
for($i=0;$i<=255;$i++)
|
||||
{
|
||||
if(!isset($widths[$map[$i]]))
|
||||
{
|
||||
echo '<B>Warning:</B> character '.$map[$i].' is missing<BR>';
|
||||
$widths[$i]=$widths['.notdef'];
|
||||
}
|
||||
else
|
||||
$widths[$i]=$widths[$map[$i]];
|
||||
}
|
||||
}
|
||||
$fm['Widths']=$widths;
|
||||
return $fm;
|
||||
}
|
||||
|
||||
function MakeFontDescriptor($fm,$symbolic)
|
||||
{
|
||||
//Ascent
|
||||
$asc=(isset($fm['Ascender']) ? $fm['Ascender'] : 1000);
|
||||
$fd="array('Ascent'=>".$asc;
|
||||
//Descent
|
||||
$desc=(isset($fm['Descender']) ? $fm['Descender'] : -200);
|
||||
$fd.=",'Descent'=>".$desc;
|
||||
//CapHeight
|
||||
if(isset($fm['CapHeight']))
|
||||
$ch=$fm['CapHeight'];
|
||||
elseif(isset($fm['CapXHeight']))
|
||||
$ch=$fm['CapXHeight'];
|
||||
else
|
||||
$ch=$asc;
|
||||
$fd.=",'CapHeight'=>".$ch;
|
||||
//Flags
|
||||
$flags=0;
|
||||
if(isset($fm['IsFixedPitch']) and $fm['IsFixedPitch'])
|
||||
$flags+=1<<0;
|
||||
if($symbolic)
|
||||
$flags+=1<<2;
|
||||
if(!$symbolic)
|
||||
$flags+=1<<5;
|
||||
if(isset($fm['ItalicAngle']) and $fm['ItalicAngle']!=0)
|
||||
$flags+=1<<6;
|
||||
$fd.=",'Flags'=>".$flags;
|
||||
//FontBBox
|
||||
if(isset($fm['FontBBox']))
|
||||
$fbb=$fm['FontBBox'];
|
||||
else
|
||||
$fbb=array(0,$des-100,1000,$asc+100);
|
||||
$fd.=",'FontBBox'=>'[".$fbb[0].' '.$fbb[1].' '.$fbb[2].' '.$fbb[3]."]'";
|
||||
//ItalicAngle
|
||||
$ia=(isset($fm['ItalicAngle']) ? $fm['ItalicAngle'] : 0);
|
||||
$fd.=",'ItalicAngle'=>".$ia;
|
||||
//StemV
|
||||
if(isset($fm['StdVW']))
|
||||
$stemv=$fm['StdVW'];
|
||||
elseif(isset($fm['Weight']) and eregi('(bold|black)',$fm['Weight']))
|
||||
$stemv=120;
|
||||
else
|
||||
$stemv=70;
|
||||
$fd.=",'StemV'=>".$stemv;
|
||||
//MissingWidth
|
||||
if(isset($fm['MissingWidth']))
|
||||
$fd.=",'MissingWidth'=>".$fm['MissingWidth'];
|
||||
$fd.=')';
|
||||
return $fd;
|
||||
}
|
||||
|
||||
function MakeWidthArray($fm)
|
||||
{
|
||||
//Make character width array
|
||||
$s="array(\n\t";
|
||||
$cw=$fm['Widths'];
|
||||
for($i=0;$i<=255;$i++)
|
||||
{
|
||||
if(chr($i)=="'")
|
||||
$s.="'\\''";
|
||||
elseif(chr($i)=="\\")
|
||||
$s.="'\\\\'";
|
||||
elseif($i>=32 and $i<=126)
|
||||
$s.="'".chr($i)."'";
|
||||
else
|
||||
$s.="chr($i)";
|
||||
$s.='=>'.$fm['Widths'][$i];
|
||||
if($i<255)
|
||||
$s.=',';
|
||||
if(($i+1)%22==0)
|
||||
$s.="\n\t";
|
||||
}
|
||||
$s.=')';
|
||||
return $s;
|
||||
}
|
||||
|
||||
function MakeFontEncoding($map)
|
||||
{
|
||||
//Build differences from reference encoding
|
||||
$ref=ReadMap('cp1252');
|
||||
$s='';
|
||||
$last=0;
|
||||
for($i=32;$i<=255;$i++)
|
||||
{
|
||||
if($map[$i]!=$ref[$i])
|
||||
{
|
||||
if($i!=$last+1)
|
||||
$s.=$i.' ';
|
||||
$last=$i;
|
||||
$s.='/'.$map[$i].' ';
|
||||
}
|
||||
}
|
||||
return chop($s);
|
||||
}
|
||||
|
||||
function SaveToFile($file,$s,$mode='t')
|
||||
{
|
||||
$f=fopen($file,'w'.$mode);
|
||||
if(!$f)
|
||||
die('Can\'t write to file '.$file);
|
||||
fwrite($f,$s,strlen($s));
|
||||
fclose($f);
|
||||
}
|
||||
|
||||
function ReadShort($f)
|
||||
{
|
||||
$a=unpack('n1n',fread($f,2));
|
||||
return $a['n'];
|
||||
}
|
||||
|
||||
function ReadLong($f)
|
||||
{
|
||||
$a=unpack('N1N',fread($f,4));
|
||||
return $a['N'];
|
||||
}
|
||||
|
||||
function CheckTTF($file)
|
||||
{
|
||||
//Check if font license allows embedding
|
||||
$f=fopen($file,'rb');
|
||||
if(!$f)
|
||||
die('<B>Error:</B> Can\'t open '.$file);
|
||||
//Extract number of tables
|
||||
fseek($f,4,SEEK_CUR);
|
||||
$nb=ReadShort($f);
|
||||
fseek($f,6,SEEK_CUR);
|
||||
//Seek OS/2 table
|
||||
$found=false;
|
||||
for($i=0;$i<$nb;$i++)
|
||||
{
|
||||
if(fread($f,4)=='OS/2')
|
||||
{
|
||||
$found=true;
|
||||
break;
|
||||
}
|
||||
fseek($f,12,SEEK_CUR);
|
||||
}
|
||||
if(!$found)
|
||||
{
|
||||
fclose($f);
|
||||
return;
|
||||
}
|
||||
fseek($f,4,SEEK_CUR);
|
||||
$offset=ReadLong($f);
|
||||
fseek($f,$offset,SEEK_SET);
|
||||
//Extract fsType flags
|
||||
fseek($f,8,SEEK_CUR);
|
||||
$fsType=ReadShort($f);
|
||||
$rl=($fsType & 0x02)!=0;
|
||||
$pp=($fsType & 0x04)!=0;
|
||||
$e=($fsType & 0x08)!=0;
|
||||
fclose($f);
|
||||
if($rl and !$pp and !$e)
|
||||
echo '<B>Warning:</B> font license does not allow embedding';
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* $fontfile: path to TTF file (or empty string if not to be embedded) *
|
||||
* $afmfile: path to AFM file *
|
||||
* $enc: font encoding (or empty string for symbolic fonts) *
|
||||
* $patch: optional patch for encoding *
|
||||
* $type : font type if $fontfile is empty *
|
||||
*******************************************************************************/
|
||||
function MakeFont($fontfile,$afmfile,$enc='cp1252',$patch=array(),$type='TrueType')
|
||||
{
|
||||
//Generate a font definition file
|
||||
set_magic_quotes_runtime(0);
|
||||
if($enc)
|
||||
{
|
||||
$map=ReadMap($enc);
|
||||
foreach($patch as $cc=>$gn)
|
||||
$map[$cc]=$gn;
|
||||
}
|
||||
else
|
||||
$map=array();
|
||||
if(!file_exists($afmfile))
|
||||
die('<B>Error:</B> AFM file not found: '.$afmfile);
|
||||
$fm=ReadAFM($afmfile,$map);
|
||||
if($enc)
|
||||
$diff=MakeFontEncoding($map);
|
||||
else
|
||||
$diff='';
|
||||
$fd=MakeFontDescriptor($fm,empty($map));
|
||||
//Find font type
|
||||
if($fontfile)
|
||||
{
|
||||
$ext=strtolower(substr($fontfile,-3));
|
||||
if($ext=='ttf')
|
||||
$type='TrueType';
|
||||
elseif($ext=='pfb')
|
||||
$type='Type1';
|
||||
else
|
||||
die('<B>Error:</B> unrecognized font file extension: '.$ext);
|
||||
}
|
||||
else
|
||||
{
|
||||
if($type!='TrueType' and $type!='Type1')
|
||||
die('<B>Error:</B> incorrect font type: '.$type);
|
||||
}
|
||||
//Start generation
|
||||
$s='<?php'."\n";
|
||||
$s.='$type=\''.$type."';\n";
|
||||
$s.='$name=\''.$fm['FontName']."';\n";
|
||||
$s.='$desc='.$fd.";\n";
|
||||
if(!isset($fm['UnderlinePosition']))
|
||||
$fm['UnderlinePosition']=-100;
|
||||
if(!isset($fm['UnderlineThickness']))
|
||||
$fm['UnderlineThickness']=50;
|
||||
$s.='$up='.$fm['UnderlinePosition'].";\n";
|
||||
$s.='$ut='.$fm['UnderlineThickness'].";\n";
|
||||
$w=MakeWidthArray($fm);
|
||||
$s.='$cw='.$w.";\n";
|
||||
$s.='$enc=\''.$enc."';\n";
|
||||
$s.='$diff=\''.$diff."';\n";
|
||||
$basename=substr(basename($afmfile),0,-4);
|
||||
if($fontfile)
|
||||
{
|
||||
//Embedded font
|
||||
if(!file_exists($fontfile))
|
||||
die('<B>Error:</B> font file not found: '.$fontfile);
|
||||
if($type=='TrueType')
|
||||
CheckTTF($fontfile);
|
||||
$f=fopen($fontfile,'rb');
|
||||
if(!$f)
|
||||
die('<B>Error:</B> Can\'t open '.$fontfile);
|
||||
$file=fread($f,filesize($fontfile));
|
||||
fclose($f);
|
||||
if($type=='Type1')
|
||||
{
|
||||
//Find first two sections and discard third one
|
||||
$pos=strpos($file,'eexec');
|
||||
if(!$pos)
|
||||
die('<B>Error:</B> font file does not seem to be valid Type1');
|
||||
$size1=$pos+6;
|
||||
$pos=strpos($file,'00000000');
|
||||
if(!$pos)
|
||||
die('<B>Error:</B> font file does not seem to be valid Type1');
|
||||
$size2=$pos-$size1;
|
||||
$file=substr($file,0,$size1+$size2);
|
||||
}
|
||||
if(function_exists('gzcompress'))
|
||||
{
|
||||
$cmp=$basename.'.z';
|
||||
SaveToFile($cmp,gzcompress($file),'b');
|
||||
$s.='$file=\''.$cmp."';\n";
|
||||
echo 'Font file compressed ('.$cmp.')<BR>';
|
||||
}
|
||||
else
|
||||
{
|
||||
$s.='$file=\''.basename($fontfile)."';\n";
|
||||
echo '<B>Notice:</B> font file could not be compressed (gzcompress not available)<BR>';
|
||||
}
|
||||
if($type=='Type1')
|
||||
{
|
||||
$s.='$size1='.$size1.";\n";
|
||||
$s.='$size2='.$size2.";\n";
|
||||
}
|
||||
else
|
||||
$s.='$originalsize='.filesize($fontfile).";\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
//Not embedded font
|
||||
$s.='$file='."'';\n";
|
||||
}
|
||||
$s.="?>\n";
|
||||
SaveToFile($basename.'.php',$s);
|
||||
echo 'Font definition file generated ('.$basename.'.php'.')<BR>';
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['symbol']=array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>713,'#'=>500,'$'=>549,'%'=>833,'&'=>778,'\''=>439,'('=>333,')'=>333,'*'=>500,'+'=>549,
|
||||
','=>250,'-'=>549,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>549,'='=>549,'>'=>549,'?'=>444,'@'=>549,'A'=>722,
|
||||
'B'=>667,'C'=>722,'D'=>612,'E'=>611,'F'=>763,'G'=>603,'H'=>722,'I'=>333,'J'=>631,'K'=>722,'L'=>686,'M'=>889,'N'=>722,'O'=>722,'P'=>768,'Q'=>741,'R'=>556,'S'=>592,'T'=>611,'U'=>690,'V'=>439,'W'=>768,
|
||||
'X'=>645,'Y'=>795,'Z'=>611,'['=>333,'\\'=>863,']'=>333,'^'=>658,'_'=>500,'`'=>500,'a'=>631,'b'=>549,'c'=>549,'d'=>494,'e'=>439,'f'=>521,'g'=>411,'h'=>603,'i'=>329,'j'=>603,'k'=>549,'l'=>549,'m'=>576,
|
||||
'n'=>521,'o'=>549,'p'=>549,'q'=>521,'r'=>549,'s'=>603,'t'=>439,'u'=>576,'v'=>713,'w'=>686,'x'=>493,'y'=>686,'z'=>494,'{'=>480,'|'=>200,'}'=>480,'~'=>549,chr(127)=>0,chr(128)=>0,chr(129)=>0,chr(130)=>0,chr(131)=>0,
|
||||
chr(132)=>0,chr(133)=>0,chr(134)=>0,chr(135)=>0,chr(136)=>0,chr(137)=>0,chr(138)=>0,chr(139)=>0,chr(140)=>0,chr(141)=>0,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
|
||||
chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>750,chr(161)=>620,chr(162)=>247,chr(163)=>549,chr(164)=>167,chr(165)=>713,chr(166)=>500,chr(167)=>753,chr(168)=>753,chr(169)=>753,chr(170)=>753,chr(171)=>1042,chr(172)=>987,chr(173)=>603,chr(174)=>987,chr(175)=>603,
|
||||
chr(176)=>400,chr(177)=>549,chr(178)=>411,chr(179)=>549,chr(180)=>549,chr(181)=>713,chr(182)=>494,chr(183)=>460,chr(184)=>549,chr(185)=>549,chr(186)=>549,chr(187)=>549,chr(188)=>1000,chr(189)=>603,chr(190)=>1000,chr(191)=>658,chr(192)=>823,chr(193)=>686,chr(194)=>795,chr(195)=>987,chr(196)=>768,chr(197)=>768,
|
||||
chr(198)=>823,chr(199)=>768,chr(200)=>768,chr(201)=>713,chr(202)=>713,chr(203)=>713,chr(204)=>713,chr(205)=>713,chr(206)=>713,chr(207)=>713,chr(208)=>768,chr(209)=>713,chr(210)=>790,chr(211)=>790,chr(212)=>890,chr(213)=>823,chr(214)=>549,chr(215)=>250,chr(216)=>713,chr(217)=>603,chr(218)=>603,chr(219)=>1042,
|
||||
chr(220)=>987,chr(221)=>603,chr(222)=>987,chr(223)=>603,chr(224)=>494,chr(225)=>329,chr(226)=>790,chr(227)=>790,chr(228)=>786,chr(229)=>713,chr(230)=>384,chr(231)=>384,chr(232)=>384,chr(233)=>384,chr(234)=>384,chr(235)=>384,chr(236)=>494,chr(237)=>494,chr(238)=>494,chr(239)=>494,chr(240)=>0,chr(241)=>329,
|
||||
chr(242)=>274,chr(243)=>686,chr(244)=>686,chr(245)=>686,chr(246)=>384,chr(247)=>384,chr(248)=>384,chr(249)=>384,chr(250)=>384,chr(251)=>384,chr(252)=>494,chr(253)=>494,chr(254)=>494,chr(255)=>0);
|
||||
?>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['times']=array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564,
|
||||
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722,
|
||||
'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944,
|
||||
'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
|
||||
'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
|
||||
chr(132)=>444,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>889,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>444,chr(148)=>444,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>980,
|
||||
chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>200,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>564,chr(173)=>333,chr(174)=>760,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>564,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>453,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>444,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
|
||||
chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
|
||||
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500);
|
||||
?>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['timesB']=array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>555,'#'=>500,'$'=>500,'%'=>1000,'&'=>833,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
|
||||
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>930,'A'=>722,
|
||||
'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>778,'I'=>389,'J'=>500,'K'=>778,'L'=>667,'M'=>944,'N'=>722,'O'=>778,'P'=>611,'Q'=>778,'R'=>722,'S'=>556,'T'=>667,'U'=>722,'V'=>722,'W'=>1000,
|
||||
'X'=>722,'Y'=>722,'Z'=>667,'['=>333,'\\'=>278,']'=>333,'^'=>581,'_'=>500,'`'=>333,'a'=>500,'b'=>556,'c'=>444,'d'=>556,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>333,'k'=>556,'l'=>278,'m'=>833,
|
||||
'n'=>556,'o'=>500,'p'=>556,'q'=>556,'r'=>444,'s'=>389,'t'=>333,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>394,'|'=>220,'}'=>394,'~'=>520,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
|
||||
chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>667,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>300,chr(171)=>500,chr(172)=>570,chr(173)=>333,chr(174)=>747,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>556,chr(182)=>540,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>330,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>570,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>722,chr(222)=>611,chr(223)=>556,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
|
||||
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
|
||||
?>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['timesBI']=array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>389,'"'=>555,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
|
||||
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>832,'A'=>667,
|
||||
'B'=>667,'C'=>667,'D'=>722,'E'=>667,'F'=>667,'G'=>722,'H'=>778,'I'=>389,'J'=>500,'K'=>667,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>611,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>667,'W'=>889,
|
||||
'X'=>667,'Y'=>611,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>570,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
|
||||
'n'=>556,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>556,'v'=>444,'w'=>667,'x'=>500,'y'=>444,'z'=>389,'{'=>348,'|'=>220,'}'=>348,'~'=>570,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
|
||||
chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>389,chr(159)=>611,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>266,chr(171)=>500,chr(172)=>606,chr(173)=>333,chr(174)=>747,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>576,chr(182)=>500,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>300,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
|
||||
chr(198)=>944,chr(199)=>667,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>570,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>611,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
|
||||
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>444,chr(254)=>500,chr(255)=>444);
|
||||
?>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['timesI']=array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>420,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>214,'('=>333,')'=>333,'*'=>500,'+'=>675,
|
||||
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>675,'='=>675,'>'=>675,'?'=>500,'@'=>920,'A'=>611,
|
||||
'B'=>611,'C'=>667,'D'=>722,'E'=>611,'F'=>611,'G'=>722,'H'=>722,'I'=>333,'J'=>444,'K'=>667,'L'=>556,'M'=>833,'N'=>667,'O'=>722,'P'=>611,'Q'=>722,'R'=>611,'S'=>500,'T'=>556,'U'=>722,'V'=>611,'W'=>833,
|
||||
'X'=>611,'Y'=>556,'Z'=>556,'['=>389,'\\'=>278,']'=>389,'^'=>422,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>278,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>444,'l'=>278,'m'=>722,
|
||||
'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>500,'v'=>444,'w'=>667,'x'=>444,'y'=>444,'z'=>389,'{'=>400,'|'=>275,'}'=>400,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
|
||||
chr(132)=>556,chr(133)=>889,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>500,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>556,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>556,chr(148)=>556,chr(149)=>350,chr(150)=>500,chr(151)=>889,chr(152)=>333,chr(153)=>980,
|
||||
chr(154)=>389,chr(155)=>333,chr(156)=>667,chr(157)=>350,chr(158)=>389,chr(159)=>556,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>275,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>675,chr(173)=>333,chr(174)=>760,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>675,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>523,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>611,chr(193)=>611,chr(194)=>611,chr(195)=>611,chr(196)=>611,chr(197)=>611,
|
||||
chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>667,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>675,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>556,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
|
||||
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>675,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>444,chr(254)=>500,chr(255)=>444);
|
||||
?>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['zapfdingbats']=array(
|
||||
chr(0)=>0,chr(1)=>0,chr(2)=>0,chr(3)=>0,chr(4)=>0,chr(5)=>0,chr(6)=>0,chr(7)=>0,chr(8)=>0,chr(9)=>0,chr(10)=>0,chr(11)=>0,chr(12)=>0,chr(13)=>0,chr(14)=>0,chr(15)=>0,chr(16)=>0,chr(17)=>0,chr(18)=>0,chr(19)=>0,chr(20)=>0,chr(21)=>0,
|
||||
chr(22)=>0,chr(23)=>0,chr(24)=>0,chr(25)=>0,chr(26)=>0,chr(27)=>0,chr(28)=>0,chr(29)=>0,chr(30)=>0,chr(31)=>0,' '=>278,'!'=>974,'"'=>961,'#'=>974,'$'=>980,'%'=>719,'&'=>789,'\''=>790,'('=>791,')'=>690,'*'=>960,'+'=>939,
|
||||
','=>549,'-'=>855,'.'=>911,'/'=>933,'0'=>911,'1'=>945,'2'=>974,'3'=>755,'4'=>846,'5'=>762,'6'=>761,'7'=>571,'8'=>677,'9'=>763,':'=>760,';'=>759,'<'=>754,'='=>494,'>'=>552,'?'=>537,'@'=>577,'A'=>692,
|
||||
'B'=>786,'C'=>788,'D'=>788,'E'=>790,'F'=>793,'G'=>794,'H'=>816,'I'=>823,'J'=>789,'K'=>841,'L'=>823,'M'=>833,'N'=>816,'O'=>831,'P'=>923,'Q'=>744,'R'=>723,'S'=>749,'T'=>790,'U'=>792,'V'=>695,'W'=>776,
|
||||
'X'=>768,'Y'=>792,'Z'=>759,'['=>707,'\\'=>708,']'=>682,'^'=>701,'_'=>826,'`'=>815,'a'=>789,'b'=>789,'c'=>707,'d'=>687,'e'=>696,'f'=>689,'g'=>786,'h'=>787,'i'=>713,'j'=>791,'k'=>785,'l'=>791,'m'=>873,
|
||||
'n'=>761,'o'=>762,'p'=>762,'q'=>759,'r'=>759,'s'=>892,'t'=>892,'u'=>788,'v'=>784,'w'=>438,'x'=>138,'y'=>277,'z'=>415,'{'=>392,'|'=>392,'}'=>668,'~'=>668,chr(127)=>0,chr(128)=>390,chr(129)=>390,chr(130)=>317,chr(131)=>317,
|
||||
chr(132)=>276,chr(133)=>276,chr(134)=>509,chr(135)=>509,chr(136)=>410,chr(137)=>410,chr(138)=>234,chr(139)=>234,chr(140)=>334,chr(141)=>334,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
|
||||
chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>0,chr(161)=>732,chr(162)=>544,chr(163)=>544,chr(164)=>910,chr(165)=>667,chr(166)=>760,chr(167)=>760,chr(168)=>776,chr(169)=>595,chr(170)=>694,chr(171)=>626,chr(172)=>788,chr(173)=>788,chr(174)=>788,chr(175)=>788,
|
||||
chr(176)=>788,chr(177)=>788,chr(178)=>788,chr(179)=>788,chr(180)=>788,chr(181)=>788,chr(182)=>788,chr(183)=>788,chr(184)=>788,chr(185)=>788,chr(186)=>788,chr(187)=>788,chr(188)=>788,chr(189)=>788,chr(190)=>788,chr(191)=>788,chr(192)=>788,chr(193)=>788,chr(194)=>788,chr(195)=>788,chr(196)=>788,chr(197)=>788,
|
||||
chr(198)=>788,chr(199)=>788,chr(200)=>788,chr(201)=>788,chr(202)=>788,chr(203)=>788,chr(204)=>788,chr(205)=>788,chr(206)=>788,chr(207)=>788,chr(208)=>788,chr(209)=>788,chr(210)=>788,chr(211)=>788,chr(212)=>894,chr(213)=>838,chr(214)=>1016,chr(215)=>458,chr(216)=>748,chr(217)=>924,chr(218)=>748,chr(219)=>918,
|
||||
chr(220)=>927,chr(221)=>928,chr(222)=>928,chr(223)=>834,chr(224)=>873,chr(225)=>828,chr(226)=>924,chr(227)=>924,chr(228)=>917,chr(229)=>930,chr(230)=>931,chr(231)=>463,chr(232)=>883,chr(233)=>836,chr(234)=>836,chr(235)=>867,chr(236)=>867,chr(237)=>696,chr(238)=>696,chr(239)=>874,chr(240)=>0,chr(241)=>874,
|
||||
chr(242)=>760,chr(243)=>946,chr(244)=>771,chr(245)=>865,chr(246)=>771,chr(247)=>888,chr(248)=>967,chr(249)=>888,chr(250)=>831,chr(251)=>873,chr(252)=>927,chr(253)=>970,chr(254)=>918,chr(255)=>0);
|
||||
?>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php include "flags.php" ?>
|
||||
<?php $user_ip = $_SERVER["REMOTE_ADDR"]; ?>
|
||||
<span class='footer-text'>Powered by Hot Lunches On-Line - <a href='http://www.hotlunches.net'>www.hotlunches.net</a> - <?php echo($user_ip) ?>
|
||||
<?php
|
||||
date_default_timezone_set($school_record['timezone']);
|
||||
echo(" - " . date($school_record['date_format'].' '.$school_record['time_format'],time()));
|
||||
echo(" - DB: $currentDBMode");
|
||||
?>
|
||||
<a href='?db_mode=Current&display_content=No'><?php echo($school_num) ?></a>
|
||||
<?php echo(" -- Server: " . $_SERVER['SERVER_ADDR']); ?>
|
||||
</span><br>
|
||||
<?php if ($school_record['display_facebook'] != 'N' && isset($showFacebook) && $showFacebook == 'Y') { ?>
|
||||
<div class="fb-like" data-href="https://www.facebook.com/HotLunchesOnline" data-layout="button_count" data-action="like" data-show-faces="false" data-share="true"></div>
|
||||
<?php } ?>
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php if (!isset($school_record)) exit(); ?>
|
||||
<?php $user_ip = $_SERVER["REMOTE_ADDR"]; ?>
|
||||
<span class='footer-text'>Powered by Hot Lunches On-Line - <a href='http://www.hotlunches.net'>www.hotlunches.net</a> - <?php echo($user_ip) ?>
|
||||
<?php
|
||||
date_default_timezone_set($school_record['timezone']);
|
||||
echo("<br>\n" . date($school_record['date_format'].' '.$school_record['time_format'],time()));
|
||||
?>
|
||||
<?php echo(" -- Server: " . $_SERVER['SERVER_ADDR'] . " -- $school_num $base_school_num --") ?>
|
||||
</span>
|
||||
<br>
|
||||
<?php echo("\n<!-- $currentHOST " . strtolower($_SERVER['HTTP_HOST']) . " $currentDBMode -->\n") ?>
|
||||
<a href='?db_mode=Current&display_content=No'><?php echo($school_num) ?></a>
|
||||
<?php echo("<!-- " . $school_record['linked_sites'] . " -->\n") ?>
|
||||
@@ -0,0 +1,366 @@
|
||||
<?php
|
||||
|
||||
//
|
||||
// Functions to process custom forms
|
||||
//
|
||||
|
||||
// BuildForm - create the form
|
||||
function BuildForm($form_num,$action="process") {
|
||||
global $school_num, $school_record, $webdir, $phpdir, $authCode, $FormTarget;
|
||||
|
||||
$returnText = "";
|
||||
|
||||
//
|
||||
// Setup form mode based on user type and action
|
||||
//
|
||||
$mode = "process";
|
||||
$border = "";
|
||||
|
||||
$userType = $_SESSION['UserInfo']['type'];
|
||||
if ($userType == 'Admin' || $userType == 'SuperUser') {
|
||||
$mode = "edit";
|
||||
$border = "div-border";
|
||||
}
|
||||
if ($_GET['mode'] == 'process') {
|
||||
$mode = "process";
|
||||
$border = "";
|
||||
}
|
||||
|
||||
|
||||
// Get the form definition
|
||||
$query = "SELECT * FROM custom_form WHERE school_num = $school_num AND record_num = $form_num";
|
||||
$results = db_query($query);
|
||||
if (db_num_rows($results) == 0) return(0);
|
||||
$form = db_fetch_assoc($results);
|
||||
|
||||
$form_width = intval($form['form_width']);
|
||||
$returnText .= "<form method='post' name='custom-form' id='custom-form'>\n";
|
||||
$returnText .= "<table width='$form_width' border='0' cellpadding='0' cellspacing='0'>\n<tr>\n<td>\n";
|
||||
|
||||
if ($mode == "edit") {
|
||||
$returnText .= "<a href='#' class='add-field btn btn--primary'> " . getLanguageText('TEXT-ADD-FIELD') . " </a>\n";
|
||||
}
|
||||
|
||||
// Show form header
|
||||
if (strlen($form['form_title'])) {
|
||||
$form_title = nl2br($form['form_title']);
|
||||
$returnText .= "<div class='custom-form-header'>$form_title</div>\n";
|
||||
}
|
||||
|
||||
// Show form description
|
||||
if (strlen($form['form_description'])) {
|
||||
$form_description = nl2br($form['form_description']);
|
||||
$returnText .= "<div class='custom-form-description'>$form_description</div>\n";
|
||||
}
|
||||
|
||||
|
||||
// Get form fields
|
||||
$query = "SELECT * FROM custom_form_field WHERE school_num = $school_num AND form_num = $form_num ORDER BY sequence";
|
||||
$fields = db_query($query);
|
||||
|
||||
if (db_num_rows($fields)) {
|
||||
if ($mode == "edit") $returnText .= "<ul id='dynamic-form-list' class='dynamic-form-list'>\n";
|
||||
$count = 0;
|
||||
while ($field = db_fetch_assoc($fields)) {
|
||||
extract($field);
|
||||
$field_num = $record_num;
|
||||
|
||||
// Format field tooltip
|
||||
$title = "";
|
||||
if ($field_type != 'Form-Description' && strlen($field_tooltip) || $field_required == 'Y') {
|
||||
$field_title = "$field_prompt:<br>";
|
||||
$field_tooltip = str_replace('"',""",$field_tooltip);
|
||||
if ($field_required == 'Y') {
|
||||
if (strlen($field_tooltip)) $field_tooltip .= "<br>\n - ";
|
||||
$field_tooltip .= "<span class='required-tip'>" . getLanguageText('TEXT-REQUIRED') . "</span>";
|
||||
}
|
||||
$title = "title=\"$field_title$field_tooltip\"";
|
||||
}
|
||||
|
||||
// Clear the required_flag
|
||||
$required_flag = "";
|
||||
|
||||
if ($mode == "edit") $returnText .= "<li id='row_$record_num'>\n";
|
||||
|
||||
$field_name = preg_replace("/[^a-z_-]/",'',strtolower(str_replace(' ','_',$field_prompt)));
|
||||
$field_prompt = "<span id='field_prompt_$record_num'>$field_prompt</span>";
|
||||
|
||||
switch ($field_type) {
|
||||
case 'Text':
|
||||
default:
|
||||
$classes = "form-field text-field";
|
||||
if ($field_required == 'Y') {
|
||||
$classes .= " text-required";
|
||||
$required_flag = "<span class='required-field'>*</span>";
|
||||
}
|
||||
|
||||
$returnText .= "<div id='div$count' class='dynamic-form-div $border text-field-div' $title>";
|
||||
if ($mode == 'edit') {
|
||||
$returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
|
||||
$returnText .= "<img src='images/icons/edit16.png' class='edit-text-field' rnum='$record_num' align='right'>";
|
||||
}
|
||||
$returnText .= "<label for='$field_name' class='dynamic-form-label'>$field_prompt:</label><br>\n";
|
||||
$returnText .= "<input type='text' name='$field_name' id='$field_name' size='$field_size' class='$classes'>$required_flag\n";
|
||||
$returnText .= "</div>\n";
|
||||
break;
|
||||
|
||||
|
||||
case 'Date':
|
||||
$classes = "form-field date-field";
|
||||
if ($field_required == 'Y') {
|
||||
$classes .= " text-required";
|
||||
$required_flag = "<span class='required-field'>*</span>";
|
||||
}
|
||||
|
||||
$returnText .= "<div id='div$count' class='dynamic-form-div $border text-field-div' $title>";
|
||||
if ($mode == 'edit') $returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
|
||||
$returnText .= "<label for='$field_name' class='dynamic-form-label'>$field_prompt:</label><br>\n";
|
||||
$returnText .= "<input type='text' name='$field_name' id='$field_name' size='12' class='$classes'>$required_flag\n";
|
||||
$returnText .= "</div>\n";
|
||||
break;
|
||||
|
||||
|
||||
case 'Date-Picker':
|
||||
$classes = "form-field date-monthyear-field";
|
||||
if ($field_required == 'Y') {
|
||||
$classes .= " text-required";
|
||||
$required_flag = "<span class='required-field'>*</span>";
|
||||
}
|
||||
|
||||
$returnText .= "<div id='div$count' class='dynamic-form-div $border text-field-div' $title>";
|
||||
if ($mode == 'edit') $returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
|
||||
$returnText .= "<label for='$field_name' class='dynamic-form-label'>$field_prompt:</label><br>\n";
|
||||
$returnText .= "<input type='text' name='$field_name' id='$field_name' size='12' class='$classes'>$required_flag\n";
|
||||
$returnText .= "</div>\n";
|
||||
break;
|
||||
|
||||
|
||||
case 'Datetime':
|
||||
$classes = "form-field datetime-field";
|
||||
if ($field_required == 'Y') {
|
||||
$classes .= " text-required";
|
||||
$required_flag = "<span class='required-field'>*</span>";
|
||||
}
|
||||
|
||||
$returnText .= "<div id='div$count' class='dynamic-form-div $border text-field-div' $title>";
|
||||
if ($mode == 'edit') $returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
|
||||
$returnText .= "<label for='$field_name' class='dynamic-form-label'>$field_prompt:</label><br>\n";
|
||||
$returnText .= "<input type='text' name='$field_name' id='$field_name' size='12' class='$classes'>$required_flag\n";
|
||||
$returnText .= "</div>\n";
|
||||
break;
|
||||
|
||||
|
||||
case 'Textarea':
|
||||
$classes = "form-field textarea-field";
|
||||
|
||||
$returnText .= "<div id='div$count' class='dynamic-form-div $border textrea-field-div' $title>";
|
||||
if ($mode == 'edit') $returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
|
||||
$returnText .= "<label for='$field_name'>$field_prompt:</label><br>\n";
|
||||
$returnText .= "<textarea name='$field_name' id='$field_name' rows='3' cols='$field_size' class='$classes'></textarea>\n";
|
||||
$returnText .= "</div>\n";
|
||||
break;
|
||||
|
||||
|
||||
case 'Radio':
|
||||
case 'RadioYN':
|
||||
$classes = "form-field radio-field";
|
||||
|
||||
// Setup options for radio buttons
|
||||
if ($field_type == 'RadioYN') $options = array('Yes','No');
|
||||
else {
|
||||
$options = array();
|
||||
$query = "SELECT option_text FROM custom_form_field_option " .
|
||||
"WHERE school_num = $school_num AND form_num = $form_num AND field_num = $field_num ORDER BY sequence";
|
||||
$results = db_query($query);
|
||||
while ($row = db_fetch_assoc($results)) {
|
||||
$options[] = $row['option_text'];
|
||||
}
|
||||
}
|
||||
|
||||
$returnText .= "<div id='div$count' class='dynamic-form-div $border radio-field-div' $title>";
|
||||
if ($mode == 'edit') $returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
|
||||
$returnText .= "<label>$field_prompt:</label><br>\n";
|
||||
|
||||
for ($i = 0; $i < count($options); $i++) {
|
||||
$field_option = $options[$i];
|
||||
|
||||
// Format the prompt attribute
|
||||
$attr = str_replace('"',""",$field_prompt);
|
||||
$field_id = $field_name . "_" . str_replace(' ','_',$field_option);
|
||||
|
||||
$checked = "";
|
||||
if ($field_default == $field_option) $checked = "checked='checked'";
|
||||
|
||||
$returnText .= " <input type='radio' name='$field_name' id='$field_id' value='$field_option' class='$classes' $checked>";
|
||||
$returnText .= " <label for='$field_id'>$field_option</label> ";
|
||||
}
|
||||
|
||||
$returnText .= "</div>\n";
|
||||
break;
|
||||
|
||||
|
||||
case 'Checkbox':
|
||||
$classes = "form-field checkbox-field";
|
||||
|
||||
$returnText .= "<div id='div$count' class='dynamic-form-div $border checkbox-field-div' $title>";
|
||||
if ($mode == 'edit') $returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
|
||||
$returnText .= "<input type='checkbox' name='$field_name' id='$field_name' class='$classes'>";
|
||||
$returnText .= " <label for='$field_name'>$field_prompt</label>";
|
||||
$returnText .= "</div>\n";
|
||||
break;
|
||||
|
||||
|
||||
case 'Select':
|
||||
$classes = "form-field select-field";
|
||||
|
||||
// Get options for select box
|
||||
$options = array();
|
||||
$query = "SELECT option_text FROM custom_form_field_option " .
|
||||
"WHERE school_num = $school_num AND form_num = $form_num AND field_num = $field_num ORDER BY sequence";
|
||||
$results = db_query($query);
|
||||
while ($row = db_fetch_assoc($results)) {
|
||||
$options[] = $row['option_text'];
|
||||
}
|
||||
|
||||
$returnText .= "<div id='div$count' class='dynamic-form-div $border select-field-div' $title>";
|
||||
if ($mode == 'edit') $returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
|
||||
$returnText .= "<label for='$field_name'>$field_prompt:</label><br>\n";
|
||||
$returnText .= "<select name='$field_name' id='$field_name' class='$classes'>\n";
|
||||
|
||||
if ($field_required != 'Y') {
|
||||
$returnText .= " <option value=''></option>\n";
|
||||
}
|
||||
|
||||
for ($i = 0; $i < count($options); $i++) {
|
||||
$option = $options[$i];
|
||||
$returnText .= " <option value='$option'>$option</option>\n";
|
||||
}
|
||||
|
||||
$returnText .= "</select>\n";
|
||||
$returnText .= "</div>\n";
|
||||
break;
|
||||
|
||||
|
||||
case 'Select-Range':
|
||||
$classes = "form-field select-field";
|
||||
|
||||
// Get options for select box
|
||||
$options = array();
|
||||
if ($number1 < $number2) {
|
||||
for ($i = $number1; $i <= $number2; $i++) $options[] = $i;
|
||||
}
|
||||
else {
|
||||
for ($i = $number1; $i >= $number2; $i--) $options[] = $i;
|
||||
}
|
||||
|
||||
$returnText .= "<div id='div$count' class='dynamic-form-div $border select-field-div' $title>";
|
||||
if ($mode == 'edit') $returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
|
||||
$returnText .= "<label for='$field_name'>$field_prompt:</label><br>\n";
|
||||
$returnText .= "<select name='$field_name' id='$field_name' class='$classes'>\n";
|
||||
|
||||
if ($field_required != 'Y') {
|
||||
$returnText .= " <option value=''></option>\n";
|
||||
}
|
||||
|
||||
for ($i = 0; $i < count($options); $i++) {
|
||||
$option = $options[$i];
|
||||
$returnText .= " <option value='$option'>$option</option>\n";
|
||||
}
|
||||
|
||||
$returnText .= "</select>\n";
|
||||
$returnText .= "</div>\n";
|
||||
break;
|
||||
|
||||
|
||||
case 'Form-Spacer':
|
||||
$returnText .= "<div id='div$count' class='dynamic-form-div $border spacer-div'>";
|
||||
if ($mode == "edit") {
|
||||
$returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
|
||||
$returnText .= getLanguageText('TEXT-FORM-SPACER');
|
||||
}
|
||||
$returnText .= "</div>\n";
|
||||
break;
|
||||
|
||||
|
||||
case 'Form-Title':
|
||||
$returnText .= "<div id='div$count' class='dynamic-form-div $border title-div'>";
|
||||
if ($mode == 'edit') $returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
|
||||
$returnText .= "<h1>$field_prompt</h1>\n";
|
||||
$returnText .= "</div>\n";
|
||||
break;
|
||||
|
||||
|
||||
case 'Form-Description':
|
||||
$returnText .= "<div id='div$count' class='dynamic-form-div $border description-div'>";
|
||||
if ($mode == 'edit') $returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
|
||||
$returnText .= "<p>$field_tooltip</p>\n";
|
||||
$returnText .= "</div>\n";
|
||||
break;
|
||||
|
||||
|
||||
case 'Form-Start-Fieldset':
|
||||
if ($mode == "edit") {
|
||||
$returnText .= "<div id='div$count' class='dynamic-form-div $border fieldset-div'>";
|
||||
$returnText .= "<img src='images/icons/delete16.png' class='delete-field' rnum='$record_num' align='right'>";
|
||||
$returnText .= "<img src='images/icons/edit16.png' class='edit-fieldset' rnum='$record_num' align='right'>";
|
||||
$returnText .= getLanguageText('TEXT-START-FORM-FIELDSET') . ": <b><span id='fieldset_title_$record_num'>$field_prompt</span></b>";
|
||||
$returnText .= "</div>\n";
|
||||
}
|
||||
|
||||
if ($mode == "process") {
|
||||
$returnText .= "<fieldset class='dynamic-form-fieldset'>";
|
||||
$returnText .= "<legend>$field_prompt:</legend>\n";
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case 'Form-End-Fieldset':
|
||||
if ($mode == "edit") {
|
||||
$parent_title = db_getVal("SELECT field_prompt FROM custom_form_field WHERE school_num = $school_num AND record_num = $child_of_num");
|
||||
$returnText .= "<div id='div$count' class='dynamic-form-div $border parent-$child_of_num fieldset-div' rnum='$record_num'>";
|
||||
$returnText .= getLanguageText('TEXT-END-FORM-FIELDSET') . ": <b>$parent_title</b>";
|
||||
$returnText .= "</div>\n";
|
||||
}
|
||||
|
||||
if ($mode == "process") {
|
||||
$returnText .= "</fieldset>";
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
if ($mode == "edit") $returnText .= "</li>\n";
|
||||
$count++;
|
||||
}
|
||||
$returnText .= "</ul>\n";
|
||||
}
|
||||
|
||||
|
||||
// Display form submit button
|
||||
$returnText .= "<center>\n";
|
||||
$returnText .= "<br>\n";
|
||||
$returnText .= "<input type='submit' class='formButton' id='submit-form-btn' value='" . getLanguageText('TEXT-SAVE') . "'>\n";
|
||||
$returnText .= "</center>\n";
|
||||
|
||||
// Show form footer
|
||||
$form_footer = "";
|
||||
if (strlen($form['form_footer'])) {
|
||||
$form_footer = nl2br($form['form_footer']);
|
||||
$returnText .= "<div class='custom-form-footer'>$form_footer</div>\n";
|
||||
}
|
||||
|
||||
|
||||
if ($mode == "edit") {
|
||||
$returnText .= "<a href='#' class='add-field btn btn--primary'> " . getLanguageText('TEXT-ADD-FIELD') . " </a>\n";
|
||||
}
|
||||
|
||||
|
||||
$returnText .= "</td>\n</tr>\n</table>\n";
|
||||
$returnText .= "</form>\n";
|
||||
|
||||
include "$webdir/include/jquery.dynamic-forms.php";
|
||||
|
||||
return($returnText);
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
+1613
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,446 @@
|
||||
<?php
|
||||
//
|
||||
// fpdf_tpl - Version 1.0
|
||||
//
|
||||
// Copyright 2004 Setasign - Jan Slabon
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
require_once("fpdf.php");
|
||||
|
||||
class fpdf_tpl extends fpdf {
|
||||
/**
|
||||
* Array of Tpl-Data
|
||||
* @var array
|
||||
*/
|
||||
var $tpls = array();
|
||||
|
||||
/**
|
||||
* Current Template-ID
|
||||
* @var int
|
||||
*/
|
||||
var $tpl = 0;
|
||||
|
||||
/**
|
||||
* "In Template"-Flag
|
||||
* @var boolean
|
||||
*/
|
||||
var $intpl = false;
|
||||
|
||||
/**
|
||||
* Nameprefix of Templates used in Resources-Dictonary
|
||||
* @var string A String defining the Prefix used as Template-Object-Names. Have to beginn with an /
|
||||
*/
|
||||
var $tplprefix = "/TPL";
|
||||
|
||||
/**
|
||||
* Nameprefix of Fonts used in Resources-Dictonary
|
||||
* (not realy needed, but for future versions with import-function needed)
|
||||
* @var string
|
||||
*/
|
||||
var $fontprefix = "/F";
|
||||
|
||||
/**
|
||||
* Resources used By Templates and Pages
|
||||
* @var array
|
||||
*/
|
||||
var $res = array();
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* See FPDF-Documentation
|
||||
* @param string $orientation
|
||||
* @param string $unit
|
||||
* @param mixed $format
|
||||
*/
|
||||
function __construct($orientation='P',$unit='mm',$format='A4') {
|
||||
parent::__construct($orientation,$unit,$format);
|
||||
}
|
||||
|
||||
/**
|
||||
* Start a Template
|
||||
*
|
||||
* This method starts a template. You can give own coordinates to build an own sized
|
||||
* Template. Pay attention, that the margins are adapted to the new templatesize.
|
||||
* If you want to write outside the template, for example to build a clipped Template,
|
||||
* you have to set the Margins and "Cursor"-Position manual after beginTemplate-Call.
|
||||
*
|
||||
* If no parameter is given, the template uses the current page-size.
|
||||
* The Method returns an ID of the current Template. This ID is used later for using this template.
|
||||
* Warning: A created Template is used in PDF at all events. Still if you don't use it after creation!
|
||||
*
|
||||
* @param int $x The x-coordinate given in user-unit
|
||||
* @param int $y The y-coordinate given in user-unit
|
||||
* @param int $w The width given in user-unit
|
||||
* @param int $h The height given in user-unit
|
||||
* @return int The ID of new created Template
|
||||
*/
|
||||
function beginTemplate($x=null,$y=null,$w=null,$h=null) {
|
||||
if ($this->page <= 0)
|
||||
$this->error("You have to add a page to fpdf first!");
|
||||
|
||||
// Save settings
|
||||
$this->tpl++;
|
||||
$this->tpls[$this->tpl]['o_x'] = $this->x;
|
||||
$this->tpls[$this->tpl]['o_y'] = $this->y;
|
||||
$this->tpls[$this->tpl]['o_AutoPageBreak'] = $this->AutoPageBreak;
|
||||
$this->tpls[$this->tpl]['o_bMargin'] = $this->bMargin;
|
||||
$this->tpls[$this->tpl]['o_tMargin'] = $this->tMargin;
|
||||
$this->tpls[$this->tpl]['o_lMargin'] = $this->lMargin;
|
||||
$this->tpls[$this->tpl]['o_rMargin'] = $this->rMargin;
|
||||
$this->tpls[$this->tpl]['o_h'] = $this->h;
|
||||
$this->tpls[$this->tpl]['o_w'] = $this->w;
|
||||
|
||||
$this->SetAutoPageBreak(false);
|
||||
|
||||
if ($x == null)
|
||||
$x = 0;
|
||||
if ($y == null)
|
||||
$y = 0;
|
||||
if ($w == null)
|
||||
$w = $this->w;
|
||||
if ($h == null)
|
||||
$h = $this->h;
|
||||
|
||||
// Define own high and width to calculate possitions correct
|
||||
$this->h = $h;
|
||||
$this->w = $w;
|
||||
|
||||
$this->tpls[$this->tpl]['buffer'] = "";
|
||||
$this->tpls[$this->tpl]['x'] = $x;
|
||||
$this->tpls[$this->tpl]['y'] = $y;
|
||||
$this->tpls[$this->tpl]['w'] = $w;
|
||||
$this->tpls[$this->tpl]['h'] = $h;
|
||||
|
||||
$this->intpl = true;
|
||||
$this->SetXY($x+$this->lMargin,$y+$this->tMargin);
|
||||
$this->SetRightMargin($this->w-$w+$this->rMargin);
|
||||
|
||||
return $this->tpl;
|
||||
}
|
||||
|
||||
/**
|
||||
* End Template
|
||||
*
|
||||
* This method ends a template and reset initiated variables on beginTemplate.
|
||||
*
|
||||
* @return mixed If a template is opened, the ID is returned. If not a false is returned.
|
||||
*/
|
||||
function endTemplate() {
|
||||
if ($this->intpl) {
|
||||
$this->intpl = false;
|
||||
$this->SetAutoPageBreak($this->tpls[$this->tpl]['o_AutoPageBreak'],$this->tpls[$this->tpl]['o_bMargin']);
|
||||
$this->SetXY($this->tpls[$this->tpl]['o_x'],$this->tpls[$this->tpl]['o_y']);
|
||||
$this->tMargin = $this->tpls[$this->tpl]['o_tMargin'];
|
||||
$this->lMargin = $this->tpls[$this->tpl]['o_lMargin'];
|
||||
$this->rMargin = $this->tpls[$this->tpl]['o_rMargin'];
|
||||
$this->h = $this->tpls[$this->tpl]['o_h'];
|
||||
$this->w = $this->tpls[$this->tpl]['o_w'];
|
||||
return $this->tpl;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Use a Template in current Page or other Template
|
||||
*
|
||||
* You can use a template in a page or in another template.
|
||||
* You can give the used template a new size like you use the Image()-method.
|
||||
* All parameters are optional. The width or height is calculated automaticaly
|
||||
* if one is given. If no parameter is given the origin size as defined in
|
||||
* beginTemplate() is used.
|
||||
* The calculated or used width and height are returned as an array.
|
||||
*
|
||||
* @param int $tplidx A valid template-Id
|
||||
* @param int $_x The x-position
|
||||
* @param int $_y The y-position
|
||||
* @param int $_w The new width of the template
|
||||
* @param int $_h The new height of the template
|
||||
* @retrun array The height and width of the template
|
||||
*/
|
||||
function useTemplate($tplidx, $_x=null, $_y=null, $_w=0, $_h=0) {
|
||||
if ($this->page <= 0)
|
||||
$this->error("You have to add a page to fpdf first!");
|
||||
|
||||
if (!$this->tpls[$tplidx])
|
||||
$this->error("Template does not exist!");
|
||||
|
||||
if ($this->intpl) {
|
||||
$this->res['tpl'][$this->tpl]['tpls'][$tplidx] =& $this->tpls[$tplidx];
|
||||
}
|
||||
extract($this->tpls[$tplidx]);
|
||||
|
||||
if ($_x == null)
|
||||
$_x = $x;
|
||||
if ($_y == null)
|
||||
$_y = $y;
|
||||
$wh = $this->getTemplateSize($tplidx,$_w,$_h);
|
||||
$_w = $wh['w'];
|
||||
$_h = $wh['h'];
|
||||
|
||||
$this->_out(sprintf("q %.4f 0 0 %.4f %.2f %.2f cm", ($_w/$w), ($_h/$h), $_x*$this->k, ($this->h-($_y+$_h))*$this->k)); // Translate
|
||||
$this->_out($this->tplprefix.$tplidx." Do Q");
|
||||
|
||||
return array("w" => $_w, "h" => $_h);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get The calculated Size of a Template
|
||||
*
|
||||
* If one size is given, this method calculates the other one.
|
||||
*
|
||||
* @param int $tplidx A valid template-Id
|
||||
* @param int $_w The width of the template
|
||||
* @param int $_h The height of the template
|
||||
* @return array The height and width of the template
|
||||
*/
|
||||
function getTemplateSize($tplidx, $_w=0, $_h=0) {
|
||||
if (!$this->tpls[$tplidx])
|
||||
return false;
|
||||
|
||||
extract($this->tpls[$tplidx]);
|
||||
if ($_w == 0 and $_h == 0) {
|
||||
$_w = $w;
|
||||
$_h = $h;
|
||||
}
|
||||
|
||||
if($_w==0)
|
||||
$_w=$_h*$w/$h;
|
||||
if($_h==0)
|
||||
$_h=$_w*$h/$w;
|
||||
|
||||
return array("w" => $_w, "h" => $_h);
|
||||
}
|
||||
|
||||
/**
|
||||
* See FPDF-Documentation ;-)
|
||||
*/
|
||||
function SetFont($family,$style='',$size=0) {
|
||||
//Select a font; size given in points
|
||||
global $fpdf_charwidths;
|
||||
|
||||
$family=strtolower($family);
|
||||
if($family=='')
|
||||
$family=$this->FontFamily;
|
||||
if($family=='arial')
|
||||
$family='helvetica';
|
||||
elseif($family=='symbol' or $family=='zapfdingbats')
|
||||
$style='';
|
||||
$style=strtoupper($style);
|
||||
if(is_int(strpos($style,'U')))
|
||||
{
|
||||
$this->underline=true;
|
||||
$style=str_replace('U','',$style);
|
||||
}
|
||||
else
|
||||
$this->underline=false;
|
||||
if($style=='IB')
|
||||
$style='BI';
|
||||
if($size==0)
|
||||
$size=$this->FontSizePt;
|
||||
//Test if font is already selected
|
||||
if($this->FontFamily==$family and $this->FontStyle==$style and $this->FontSizePt==$size and !$this->intpl)
|
||||
return;
|
||||
//Test if used for the first time
|
||||
$fontkey=$family.$style;
|
||||
if(!isset($this->fonts[$fontkey]))
|
||||
{
|
||||
//Check if one of the standard fonts
|
||||
if(isset($this->CoreFonts[$fontkey]))
|
||||
{
|
||||
if(!isset($fpdf_charwidths[$fontkey]))
|
||||
{
|
||||
//Load metric file
|
||||
$file=$family;
|
||||
if($family=='times' or $family=='helvetica')
|
||||
$file.=strtolower($style);
|
||||
$file.='.php';
|
||||
if(defined('FPDF_FONTPATH'))
|
||||
$file=FPDF_FONTPATH.$file;
|
||||
include($file);
|
||||
if(!isset($fpdf_charwidths[$fontkey]))
|
||||
$this->Error('Could not include font metric file');
|
||||
}
|
||||
$i = $this->findNextAvailFont();
|
||||
$this->fonts[$fontkey]=array('i'=>$i,'type'=>'core','name'=>$this->CoreFonts[$fontkey],'up'=>-100,'ut'=>50,'cw'=>$fpdf_charwidths[$fontkey]);
|
||||
}
|
||||
else
|
||||
$this->Error('Undefined font: '.$family.' '.$style);
|
||||
}
|
||||
//Select it
|
||||
$this->FontFamily=$family;
|
||||
$this->FontStyle=$style;
|
||||
$this->FontSizePt=$size;
|
||||
$this->FontSize=$size/$this->k;
|
||||
$this->CurrentFont=&$this->fonts[$fontkey];
|
||||
if($this->page>0)
|
||||
$this->_out(sprintf('BT '.$this->fontprefix.'%d %.2f Tf ET',$this->CurrentFont['i'],$this->FontSizePt));
|
||||
|
||||
|
||||
if ($this->intpl) {
|
||||
$this->res['tpl'][$this->tpl]['fonts'][$fontkey] =& $this->fonts[$fontkey];
|
||||
} else {
|
||||
$this->res['page'][$this->page]['fonts'][$fontkey] =& $this->fonts[$fontkey];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the next available Font-No.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
function findNextAvailFont() {
|
||||
return count($this->fonts)+1;
|
||||
}
|
||||
|
||||
/**
|
||||
* See FPDF-Documentation ;-)
|
||||
*/
|
||||
function Image($file,$x,$y,$w=0,$h=0,$type='',$link='') {
|
||||
parent::Image($file,$x,$y,$w,$h,$type,$link);
|
||||
if ($this->intpl) {
|
||||
$this->res['tpl'][$this->tpl]['images'][$file] =& $this->images[$file];
|
||||
} else {
|
||||
$this->res['page'][$this->page]['images'][$file] =& $this->images[$file];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* See FPDF-Documentation ;-)
|
||||
*
|
||||
* AddPage is not available when you're "in" a template.
|
||||
*/
|
||||
function AddPage($orientation='') {
|
||||
if ($this->intpl)
|
||||
$this->Error('Adding pages in templates isn\'t possible!');
|
||||
parent::AddPage($orientation);
|
||||
}
|
||||
|
||||
/**
|
||||
* Preserve adding Links in Templates ...won't work
|
||||
*/
|
||||
function Link($x,$y,$w,$h,$link) {
|
||||
if ($this->intpl)
|
||||
$this->Error('Using links in templates aren\'t possible!');
|
||||
parent::Link($x,$y,$w,$h,$link);
|
||||
}
|
||||
|
||||
function AddLink() {
|
||||
if ($this->intpl)
|
||||
$this->Error('Adding links in templates aren\'t possible!');
|
||||
return parent::AddLink();
|
||||
}
|
||||
|
||||
function SetLink($link,$y=0,$page=-1) {
|
||||
if ($this->intpl)
|
||||
$this->Error('Setting links in templates aren\'t possible!');
|
||||
parent::SetLink($link,$y=0,$page=-1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Private Method that writes the Resources-Objects
|
||||
*/
|
||||
function _puttemplates() {
|
||||
$filter=($this->compress) ? '/Filter /FlateDecode ' : '';
|
||||
reset($this->tpls);
|
||||
foreach($this->tpls AS $tplidx => $tpl) {
|
||||
|
||||
$p=($this->compress) ? gzcompress($tpl['buffer']) : $tpl['buffer'];
|
||||
$this->_newobj();
|
||||
$this->tpls[$tplidx]['n'] = $this->n;
|
||||
$this->_out('<<'.$filter.'/Type /XObject');
|
||||
$this->_out('/Subtype /Form');
|
||||
$this->_out('/FormType 1');
|
||||
$this->_out(sprintf('/BBox [%.2f %.2f %.2f %.2f]',$tpl['x']*$this->k, ($tpl['h']-$tpl['y'])*$this->k, $tpl['w']*$this->k, ($tpl['h']-$tpl['y']-$tpl['h'])*$this->k)); // ($this->h-$tpl['y'])*$this->k
|
||||
$this->_out('/Resources ');
|
||||
|
||||
$this->_out('<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
|
||||
if (count($this->res['tpl'][$tplidx]['fonts'])) {
|
||||
$this->_out('/Font <<');
|
||||
foreach($this->res['tpl'][$tplidx]['fonts'] as $font)
|
||||
$this->_out($this->fontprefix.$font['i'].' '.$font['n'].' 0 R');
|
||||
$this->_out('>>');
|
||||
}
|
||||
if(count($this->res['tpl'][$tplidx]['images']) || count($this->res['tpl'][$tplidx]['tpls']))
|
||||
{
|
||||
$this->_out('/XObject <<');
|
||||
if (count($this->res['tpl'][$tplidx]['images'])) {
|
||||
foreach($this->res['tpl'][$tplidx]['images'] as $image)
|
||||
$this->_out('/I'.$image['i'].' '.$image['n'].' 0 R');
|
||||
}
|
||||
if (count($this->res['tpl'][$tplidx]['tpls'])) {
|
||||
foreach($this->res['tpl'][$tplidx]['tpls'] as $i => $tpl)
|
||||
$this->_out($this->tplprefix.$i.' '.$tpl['n'].' 0 R');
|
||||
}
|
||||
$this->_out('>>');
|
||||
}
|
||||
$this->_out('>>');
|
||||
|
||||
$this->_out('/Length '.strlen($p).' >>');
|
||||
$this->_putstream($p);
|
||||
$this->_out('endobj');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Private Method
|
||||
*/
|
||||
function _putresources() {
|
||||
$this->_putfonts();
|
||||
$this->_putimages();
|
||||
$this->_puttemplates();
|
||||
//Resource dictionary
|
||||
$this->offsets[2]=strlen($this->buffer);
|
||||
$this->_out('2 0 obj');
|
||||
$this->_out('<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
|
||||
$this->_out('/Font <<');
|
||||
foreach($this->fonts as $font)
|
||||
$this->_out($this->fontprefix.$font['i'].' '.$font['n'].' 0 R');
|
||||
$this->_out('>>');
|
||||
if(count($this->images) || count($this->tpls))
|
||||
{
|
||||
$this->_out('/XObject <<');
|
||||
if (count($this->images)) {
|
||||
foreach($this->images as $image)
|
||||
$this->_out('/I'.$image['i'].' '.$image['n'].' 0 R');
|
||||
}
|
||||
if (count($this->tpls)) {
|
||||
foreach($this->tpls as $tplidx => $tpl)
|
||||
$this->_out($this->tplprefix.$tplidx.' '.$tpl['n'].' 0 R');
|
||||
}
|
||||
$this->_out('>>');
|
||||
}
|
||||
$this->_out('>>');
|
||||
$this->_out('endobj');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Private Method
|
||||
*/
|
||||
function _out($s) {
|
||||
//Add a line to the document
|
||||
if ($this->state==2) {
|
||||
if (!$this->intpl)
|
||||
$this->pages[$this->page].=$s."\n";
|
||||
else
|
||||
$this->tpls[$this->tpl]['buffer'] .= $s."\n";
|
||||
} else {
|
||||
$this->buffer.=$s."\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,369 @@
|
||||
<?php
|
||||
//
|
||||
// FPDI - Version 1.01
|
||||
//
|
||||
// Copyright 2004 Setasign - Jan Slabon
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
define ('PDF_TYPE_NULL', 0);
|
||||
define ('PDF_TYPE_NUMERIC', 1);
|
||||
define ('PDF_TYPE_TOKEN', 2);
|
||||
define ('PDF_TYPE_HEX', 3);
|
||||
define ('PDF_TYPE_STRING', 4);
|
||||
define ('PDF_TYPE_DICTIONARY', 5);
|
||||
define ('PDF_TYPE_ARRAY', 6);
|
||||
define ('PDF_TYPE_OBJDEC', 7);
|
||||
define ('PDF_TYPE_OBJREF', 8);
|
||||
define ('PDF_TYPE_OBJECT', 9);
|
||||
define ('PDF_TYPE_STREAM', 10);
|
||||
|
||||
if (PHP_VERSION_ID < 80100) {
|
||||
@ini_set('auto_detect_line_endings',1); // Strongly required (removed in PHP 8.1)
|
||||
}
|
||||
|
||||
require_once("fpdf_tpl.php");
|
||||
require_once("pdf_parser.php");
|
||||
|
||||
class fpdi extends fpdf_tpl {
|
||||
/**
|
||||
* Actual filename
|
||||
* @var string
|
||||
*/
|
||||
var $current_filename;
|
||||
|
||||
/**
|
||||
* Parser-Objects
|
||||
* @var array
|
||||
*/
|
||||
var $parsers;
|
||||
|
||||
/**
|
||||
* Current parser
|
||||
* @var object
|
||||
*/
|
||||
var $current_parser;
|
||||
|
||||
/**
|
||||
* FPDF/FPDI - PDF-Version
|
||||
* @var double
|
||||
*/
|
||||
var $pdfVersion = 1.3;
|
||||
|
||||
/**
|
||||
* Highest version of imported PDF
|
||||
* @var double
|
||||
*/
|
||||
var $importVersion;
|
||||
|
||||
/**
|
||||
* object stack
|
||||
* @var array
|
||||
*/
|
||||
var $don_obj_stack;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* See FPDF-Manual
|
||||
*/
|
||||
function __construct($orientation='P',$unit='mm',$format='A4') {
|
||||
parent::__construct($orientation,$unit,$format);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a source-file
|
||||
*
|
||||
* @param string $filename a valid filename
|
||||
* @return int number of available pages
|
||||
*/
|
||||
function setSourceFile($filename) {
|
||||
$this->current_filename = $filename;
|
||||
$fn =& $this->current_filename;
|
||||
|
||||
$this->parsers[$fn] = new pdf_parser($fn,$this);
|
||||
$this->current_parser =& $this->parsers[$fn];
|
||||
|
||||
return $this->parsers[$fn]->getPageCount();
|
||||
}
|
||||
|
||||
/**
|
||||
* Import a page
|
||||
*
|
||||
* @param int $pageno pagenumber
|
||||
* @return int Index of imported page - to use with fpdf_tpl::useTemplate()
|
||||
*/
|
||||
function ImportPage($pageno) {
|
||||
$fn =& $this->current_filename;
|
||||
|
||||
$this->parsers[$fn]->setPageno($pageno);
|
||||
|
||||
$this->tpl++;
|
||||
$this->tpls[$this->tpl] = array();
|
||||
$this->tpls[$this->tpl]['parser'] =& $this->parsers[$fn];
|
||||
$this->tpls[$this->tpl]['resources'] = $this->parsers[$fn]->getPageResources();
|
||||
$this->tpls[$this->tpl]['buffer'] = $this->parsers[$fn]->getContent();
|
||||
// $mediabox holds the dimensions of the source page
|
||||
$mediabox = $this->parsers[$fn]->getPageMediaBox($pageno);
|
||||
|
||||
// To build array that can used by pdf_tpl::useTemplate()
|
||||
$this->tpls[$this->tpl] = array_merge($this->tpls[$this->tpl],$mediabox);
|
||||
|
||||
return $this->tpl;
|
||||
}
|
||||
|
||||
/**
|
||||
* Private method, that rebuilds all needed objects of source files
|
||||
*/
|
||||
function _putOobjects() {
|
||||
if (is_array($this->parsers) && count($this->parsers) > 0) {
|
||||
foreach($this->parsers AS $filename => $p) {
|
||||
$this->current_parser =& $this->parsers[$filename];
|
||||
if (is_array($this->obj_stack[$filename])) {
|
||||
while($n = key($this->obj_stack[$filename])) {
|
||||
$nObj = $this->current_parser->pdf_resolve_object($this->current_parser->c,$this->obj_stack[$filename][$n][1]);
|
||||
$this->_newobj($this->obj_stack[$filename][$n][0]);
|
||||
if ($nObj[0] == PDF_TYPE_STREAM)
|
||||
$this->pdf_write_value ($nObj);
|
||||
else
|
||||
$this->pdf_write_value ($nObj[1]);
|
||||
|
||||
$this->_out('endobj');
|
||||
unset($this->obj_stack[$filename][$n]);
|
||||
reset($this->obj_stack[$filename]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Rewritten for handling own defined PDF-Versions
|
||||
*/
|
||||
function _begindoc() {
|
||||
//Start document
|
||||
$this->state=1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the PDF Version to the highest of imported documents
|
||||
*/
|
||||
function setVersion() {
|
||||
if ($this->importVersion > $this->pdfVersion)
|
||||
$this->pdfVersion = $this->importVersion;
|
||||
|
||||
$this->buffer = '%PDF-'.$this->pdfVersion."\n".$this->buffer;
|
||||
}
|
||||
|
||||
/**
|
||||
* rewritten for handling higher PDF Versions
|
||||
*/
|
||||
function _enddoc() {
|
||||
$this->setVersion();
|
||||
parent::_enddoc();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Put resources
|
||||
*/
|
||||
function _putresources() {
|
||||
$this->_putfonts();
|
||||
$this->_putimages();
|
||||
$this->_puttemplates();
|
||||
$this->_putOobjects();
|
||||
|
||||
//Resource dictionary
|
||||
$this->offsets[2]=strlen($this->buffer);
|
||||
$this->_out('2 0 obj');
|
||||
$this->_out('<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
|
||||
$this->_out('/Font <<');
|
||||
foreach($this->fonts as $font)
|
||||
$this->_out($this->fontprefix.$font['i'].' '.$font['n'].' 0 R');
|
||||
$this->_out('>>');
|
||||
if(count($this->images) || count($this->tpls))
|
||||
{
|
||||
$this->_out('/XObject <<');
|
||||
if (count($this->images)) {
|
||||
foreach($this->images as $image)
|
||||
$this->_out('/I'.$image['i'].' '.$image['n'].' 0 R');
|
||||
}
|
||||
if (count($this->tpls)) {
|
||||
foreach($this->tpls as $tplidx => $tpl)
|
||||
$this->_out($this->tplprefix.$tplidx.' '.$tpl['n'].' 0 R');
|
||||
}
|
||||
$this->_out('>>');
|
||||
}
|
||||
$this->_out('>>');
|
||||
$this->_out('endobj');
|
||||
}
|
||||
|
||||
/**
|
||||
* Private Method that writes /XObjects - "Templates"
|
||||
*/
|
||||
function _puttemplates() {
|
||||
$filter=($this->compress) ? '/Filter /FlateDecode ' : '';
|
||||
reset($this->tpls);
|
||||
foreach($this->tpls AS $tplidx => $tpl) {
|
||||
|
||||
$p=($this->compress) ? gzcompress($tpl['buffer']) : $tpl['buffer'];
|
||||
$this->_newobj();
|
||||
$this->tpls[$tplidx]['n'] = $this->n;
|
||||
$this->_out('<<'.$filter.'/Type /XObject');
|
||||
$this->_out('/Subtype /Form');
|
||||
$this->_out('/FormType 1');
|
||||
$this->_out(sprintf('/BBox [%.2f %.2f %.2f %.2f]',$tpl['x']*$this->k, ($tpl['h']-$tpl['y'])*$this->k, $tpl['w']*$this->k, ($tpl['h']-$tpl['y']-$tpl['h'])*$this->k));
|
||||
$this->_out('/Resources ');
|
||||
|
||||
if ($tpl['resources']) {
|
||||
$this->current_parser =& $tpl['parser'];
|
||||
$this->pdf_write_value($tpl['resources']);
|
||||
} else {
|
||||
$this->_out('<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
|
||||
if (count($this->res['tpl'][$tplidx]['fonts'])) {
|
||||
$this->_out('/Font <<');
|
||||
foreach($this->res['tpl'][$tplidx]['fonts'] as $font)
|
||||
$this->_out($this->fontprefix.$font['i'].' '.$font['n'].' 0 R');
|
||||
$this->_out('>>');
|
||||
}
|
||||
if(count($this->res['tpl'][$tplidx]['images']) || count($this->res['tpl'][$tplidx]['tpls']))
|
||||
{
|
||||
$this->_out('/XObject <<');
|
||||
if (count($this->res['tpl'][$tplidx]['images'])) {
|
||||
foreach($this->res['tpl'][$tplidx]['images'] as $image)
|
||||
$this->_out('/I'.$image['i'].' '.$image['n'].' 0 R');
|
||||
}
|
||||
if (count($this->res['tpl'][$tplidx]['tpls'])) {
|
||||
foreach($this->res['tpl'][$tplidx]['tpls'] as $i => $tpl)
|
||||
$this->_out($this->tplprefix.$i.' '.$tpl['n'].' 0 R');
|
||||
}
|
||||
$this->_out('>>');
|
||||
}
|
||||
$this->_out('>>');
|
||||
}
|
||||
|
||||
$this->_out('/Length '.strlen($p).' >>');
|
||||
$this->_putstream($p);
|
||||
$this->_out('endobj');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Rewritten to handle existing own defined objects
|
||||
*/
|
||||
function _newobj($obj_id=false,$onlynewobj=false) {
|
||||
if (!$obj_id) {
|
||||
$obj_id = ++$this->n;
|
||||
}
|
||||
|
||||
//Begin a new object
|
||||
if (!$onlynewobj) {
|
||||
$this->offsets[$obj_id]=strlen($this->buffer);
|
||||
$this->_out($obj_id.' 0 obj');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes a value
|
||||
* Needed to rebuild the source document
|
||||
*
|
||||
* @param mixed $value A PDF-Value. Structure of values see cases in this method
|
||||
*/
|
||||
function pdf_write_value(&$value)
|
||||
{
|
||||
|
||||
switch ($value[0]) {
|
||||
|
||||
case PDF_TYPE_NUMERIC :
|
||||
case PDF_TYPE_TOKEN :
|
||||
// A numeric value or a token.
|
||||
// Simply output them
|
||||
$this->_out($value[1]);
|
||||
break;
|
||||
|
||||
case PDF_TYPE_ARRAY :
|
||||
|
||||
// An array. Output the proper
|
||||
// structure and move on.
|
||||
|
||||
$this->_out("[");
|
||||
for ($i = 0; $i < count($value[1]); $i++) {
|
||||
$this->pdf_write_value($value[1][$i]);
|
||||
$this->_out(' ');
|
||||
}
|
||||
|
||||
$this->_out("]");
|
||||
break;
|
||||
|
||||
case PDF_TYPE_DICTIONARY :
|
||||
|
||||
// A dictionary.
|
||||
$this->_out("<<");
|
||||
|
||||
foreach ($value[1] as $k => $v) {
|
||||
$this->_out($k . " ");
|
||||
$this->pdf_write_value($v);
|
||||
}
|
||||
|
||||
$this->_out(">>");
|
||||
break;
|
||||
|
||||
case PDF_TYPE_OBJREF :
|
||||
|
||||
// An indirect object reference
|
||||
// Fill the object stack if needed
|
||||
if (!isset($this->don_obj_stack[$this->current_parser->filename][$value[1]])) {
|
||||
$this->_newobj(false,true);
|
||||
$this->obj_stack[$this->current_parser->filename][$value[1]] = array($this->n,$value);
|
||||
$this->don_obj_stack[$this->current_parser->filename][$value[1]] = array($this->n,$value);
|
||||
}
|
||||
$objid = $this->don_obj_stack[$this->current_parser->filename][$value[1]][0];
|
||||
|
||||
$this->_out("{$objid} {$value[2]} R");
|
||||
break;
|
||||
|
||||
case PDF_TYPE_STRING :
|
||||
|
||||
// A string.
|
||||
$this->_out('(' . $value[1] . ')');
|
||||
|
||||
break;
|
||||
|
||||
case PDF_TYPE_STREAM :
|
||||
|
||||
// A stream. First, output the
|
||||
// stream dictionary, then the
|
||||
// stream data itself.
|
||||
$this->pdf_write_value($value[1]);
|
||||
$this->_out("stream");
|
||||
$this->_out($value[2][1]);
|
||||
$this->_out("endstream");
|
||||
break;
|
||||
case PDF_TYPE_HEX :
|
||||
|
||||
$this->_out("<");
|
||||
$this->_out($value[1]);
|
||||
$this->_out(">");
|
||||
break;
|
||||
|
||||
case PDF_TYPE_NULL :
|
||||
// The null object.
|
||||
|
||||
$this->_out("null");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
Loaded 100 of 11877 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user