Friday 21 June 2013

jQuery: Highlighting the Menu Item for the Current Page

jQuery: Highlighting the Menu Item for the Current Page
---------------------------------------------------------------------------------------------
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
    $('#subnav a').each(function(index) {
        if(this.href.trim() == window.location)
            $(this).addClass("selected");
    });
});
</script>

<style>
.selected {
    background-color: red;
}
</style>

<body>
    <ul id="subnav">
        <li><a href="index.html">Home</a></li>
        <li><a href="about.html">About</a></li>
    </ul>
</body>
---------------------------------------------------------------------------------------------

Wednesday 5 June 2013

Cache technique in classic ASP

Cache Concept in ASP

Step1: Copy the below code into objPageCache.asp
<%
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Page: objPageCache.asp
'Copyright 2002 Joe Audette
'Last Modified: 3/17/2002
'
'You may use this code freely as long as you leave my copyright notice in the code.
'You may modify and extend this code to suit your needs as long as you indicate
'in your code that it is based on my copyrighted code.
'
'Summary: This file can be included on any dynamic page and will
' implement caching of the page for the configured time duration
' (24 hours by default).
' You can also manually force the cache to update by adding
' "cachecommand=create" to the query string. The cached
' version will be displayed until it expires and is
' re-created.
' To bypass the cached page and see the dynamic
' version, add "cachecommand=bypass" to the query string.
' To clear the cach for the current page add cachecommand=clear
' To clear the cach for ALL pages add cachecommand=clearall
' Note cachecommand=clearall only works when caching to files.
'
' To use this on a page that posts back to itself you must
' include an element within the form like this:
' <INPUT type="hidden" id="IsPostback" name="IsPostback" value="true">
' This will bypass the cache and let the dynamic page
' handle the post back.
'
' To set up caching on a page, include this file on the page
' and then use code something like this:
'
' Dim objCache
' Set objCache = New CPageCache
'
' **OPTIONAL*************************************
' if you don't set these properties the cache will
' expire in 24 hours
' objCache.CacheIntervalUnit = CI_MINUTES
' 'oter choices are CI_HOURS or CI_DAYS
' objCache.CacheIntervalLength = 10 'how many units
' ***********************************************
'

' objCache.AutoCacheToMemory() 'or objCache.AutoCacheToFile()
' Set objCache = Nothing
'
' You will also need an Application variable in the global.asa file
' called Application("CachedContentFolder"), indicating the path to
' a folder where the cached pages will be kept when you use AutoCacheToFile.
' For example you could put a line in the global.asa file like this:
' Application("CachedContentFolder") = "c:\CachedContent\"
' This folder must allow write permission to the IUSER_MACHINENAME user.
' For best practice this folder should be outside the web site folder
' structure.
'
' You will also need an application variable called Application("Root")
' indicating the root of your site. For example:
' Application("Root") = "http://myWEBServer"
' This helps the object figure out what page its on.
'
'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim objCache
Set objCache = New CPageCache
objCache.CacheIntervalUnit = CI_HOURS
objCache.CacheIntervalLength = 1
'objCache.AutoCacheToFile()
objCache.AutoCacheToMemory()

Const CI_MINUTES = 0
Const CI_HOURS = 1
Const CI_DAYS = 2

Class CPageCache

Private mstrCacheFileExt
Private mobjFSO 'FileSystem object
Private mstrCacheFileQualifiers
Private mstrCachedFileName
Private mstrScriptFileName
Private mstrScriptBaseName
Private mstrCachedMemoryName
Private mstrCreateMemoryTime
Private mstrCacheCommand
Private mstrCacheFolder
Private mstrDynURL
Private bIsPostBack
Private mintCacheIntervalUnit
Private mintCacheIntervalLength

Private Sub Class_Initialize()
On Error Resume Next

' Create File System Object
Set mobjFSO = CreateObject("Scripting.FileSystemObject")

'this determines whether to show the cached content or let the page render dynamically
mstrCacheCommand = Request("cachecommand")
'the default is to pass nothing, in which case the cached page is used

'Set the default cache interval
mintCacheIntervalUnit = CI_DAYS
mintCacheIntervalLength = 1

' This is the folder name where the cached content will be stored
mstrCacheFolder = Application("CachedContentFolder")

'thes next few lines initialize variables that will determine the cached file
'name based on the ASP page and any querystring params
mstrScriptFileName = server.MapPath(Request.ServerVariables("PATH_INFO"))
mstrScriptBaseName = mobjFSO.GetBaseName(mstrScriptFileName) & "_"
mstrCacheFileQualifiers = GetCacheFileQualifiers()
mstrCacheFileExt = ".html" 'this could be any extension

'determine name for output cache file
mstrCachedFileName = mstrCacheFolder & mstrScriptBaseName _
& mstrCacheFileQualifiers & mstrCacheFileExt
'determine the name for application variables to cache in memory
mstrCachedMemoryName = CStr(mstrScriptBaseName & mstrCacheFileQualifiers)
mstrCreateMemoryTime = mstrCachedMemoryName & "_Created"

'If this object is used on a form that posts back to itself
'include an element within the form like this:
'<INPUT type="hidden" id="IsPostback" name="IsPostback" value="true">
'This will bypass the cache and let the dynamic page
'handle the post back.
bIsPostBack = false
If Request("IsPostback") = "true" Then
bIsPostBack = true
End If
'get the URL for the current dynamic asp page
mstrDynURL = Application("Root") & CStr(Request.ServerVariables("URL"))
If Cstr(Request.QueryString) <> vbNullString Then
mstrDynURL = mstrDynURL & "?" & Cstr(Request.QueryString)
End If

End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Private Sub Class_Terminate()
On Error Resume Next
' Clean up module-level objects
If Not mobjFSO Is Nothing Then
Set mobjFSO = Nothing
End If

End Sub

' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' PRIVATE MEMBER METHODS
' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Private Function GetCacheFileQualifiers() 'As String
'this creates a unique file name portion for
'each unique query string passed to the ASP page
On Error Resume Next
Dim strResults
Dim var
Dim strSeparator
strResults = vbNullString
strSeparator = vbNullString
For Each var In Request.QueryString
If var <> "cachecommand" Then
strResults = strResults & strSeparator & var & "_" & Request.QueryString(var)
strSeparator = "_"
End If

Next

GetCacheFileQualifiers = strResults

End Function

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Private Function CachedFileExists() 'As Boolean
On Error Resume Next
CachedFileExists = mobjFSO.FileExists(mstrCachedFileName)
End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Private Function CacheExistsInMemory() 'As Boolean
On Error Resume Next

'Check to see if the application variable has been created.
If IsEmpty(Application(mstrCachedMemoryName)) OR IsNull(Application(mstrCachedMemoryName)) Then
CacheExistsInMemory = false
Else
CacheExistsInMemory = true
End If

If err.number <> 0 Then
'Response.Write err.Description & " CacheExistsInMemory2"
err.Clear
CacheExistsInMemory = false
End If

End Function

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Private Function CacheFileIsExpired() 'As Boolean
On Error Resume Next
Dim objFile
Dim strDate
Dim strUnit

'Get the modified date from the file.
Set objFile = mobjFSO.GetFile(mstrCachedFileName)
strDate = objFile.DateLastModified
Set objFile = nothing

'Determine the cache interval unit that was selected.
'and set the datediff unit of measurement.
Select Case mintCacheIntervalUnit
Case CI_MINUTES
strUnit = "n" 'minutes

Case CI_HOURS
strUnit = "h" 'hours

Case CI_DAYS
strUnit = "d" 'days
End Select

'Return the boolean from the comparison utilizing the datediff function.
CacheFileIsExpired = (DateDiff(strUnit,CDate(strDate), Now()) > mintCacheIntervalLength)

'Error checking
If err.Number <> 0 Then
err.Clear
CacheFileIsExpired = true
End If

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Private Function CacheInMemoryIsExpired() 'As Boolean
'On Error Resume Next

Dim strUnit
strUnit = "d" 'Default to days.

If IsEmpty(Application(mstrCreateMemoryTime)) OR IsNull(Application(mstrCreateMemoryTime)) _
OR Application(mstrCreateMemoryTime) = vbNullString Then
CacheInMemoryIsExpired = true
Else
Select Case mintCacheIntervalUnit
Case CI_MINUTES
strUnit = "n" 'minutes

Case CI_HOURS
strUnit = "h" 'hours

Case CI_DAYS
strUnit = "d" 'days
End Select

If CInt(DateDiff(strUnit,CDate(Application(mstrCreateMemoryTime)), Now())) > mintCacheIntervalLength Then
CacheInMemoryIsExpired = true
Else
CacheInMemoryIsExpired = false
End If
End If

If err.number <> 0 Then
err.Clear
CacheInMemoryIsExpired = true
End If
End Function

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Private Sub RenderCacheFromFile()
'On Error Resume Next
Dim objfile
Set objfile = mobjFSO.OpenTextFile(mstrCachedFileName,1,false,-1)

'If error happens the dynamic page will handle
'the request.
If err.number <> 0 Then
' Response.Write err.Description
Exit Sub
End If

'Write the cached file to the
'Response and end the response.
Response.write objfile.ReadAll
Response.end
Set objfile = nothing
End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Private Sub RenderCacheFromMemory()
Response.write(Application(mstrCachedMemoryName))
Response.end
End Sub


' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' PUBLIC METHODS
' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Public Sub AutoCacheToFile()
On Error Resume Next

If bIsPostBack Then
'let the dynamic page handle the postback.
Exit Sub
End If

Select Case mstrCacheCommand

Case vbNullString

If Not CachedFileExists() Or CacheFileIsExpired() Then
CreateCacheFile
End If
If err.number = 0 Then
RenderCacheFromFile
End If

Case "bypass"
'display dynamic page - do nothing

Case "clear"
ClearCache

Case "clearall"
ClearAllCachedFiles

Case "create"
'create and display cached page
CreateCacheFile
If err.number = 0 Then
RenderCacheFromFile
End If

End Select

End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Public Sub AutoCacheToMemory()
On Error Resume Next

If bIsPostBack Then
'let the dynamic page handle the postback.
Exit Sub
End If

Select Case mstrCacheCommand

Case vbNullString

If Not CacheExistsInMemory() Or CacheInMemoryIsExpired() Then
CreateCacheInMemory
End If

If err.number = 0 Then
RenderCacheFromMemory
Else
'Response.Write err.Description
'Response.end
Exit Sub
End If

Case "bypass"
'display dynamic page - do nothing

Case "clear"
Application(mstrCachedMemoryName) = Null

Case "create"
'create and display cached page
CreateCacheInMemory
If err.number = 0 Then
RenderCacheFromMemory
Else
'Response.Write err.Description
'Response.end
Exit Sub
End If

End Select
End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Public Sub CreateCacheFile()
On Error Resume Next

Dim strResponse
Dim objTextStream
Dim objHTTP
Dim strDynURL

'Get the URL of the current ASP request
strDynURL = mstrDynURL

'Add a querystring param that will bypass the cache
'forcing a dynamic rendering of the page
If Instr(1,strDynURL, "?") = 0 Then
strDynURL = strDynURL & "?cachecommand=bypass"
Else
strDynURL = strDynURL & "&cachecommand=bypass"
End If

'Instantiate an HTTP object to request the dynamic page
Set objHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP.4.0")

'Depending on your firewall/proxy environment you may need to
'configure proxy settings for the HTTP object
'If your webserver is behind a proxy uncomment the following line.
'objHTTP.setProxy  SXH_PROXY_SET_PRECONFIG
'You also need to the use WinHTTP Proxy configuration utility(proxycfg.exe)
'on the server (see the readme for more details)


'Request the dynamic ASP page
objHTTP.open "GET", strDynURL, false
objHTTP.send()

'Create a text file using the file system object
Set objTextStream = mobjFSO.CreateTextFile(mstrCachedFileName, true, true)

'Write the rendered content from the dynamic ASP page to the
'text file to create the cached content.
objTextStream.Write(objHTTP.responseText)
objTextStream.Close

Set objHTTP = nothing
Set objTextStream = nothing

End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Public Sub CreateCacheInMemory()
On Error Resume Next

Dim objHTTP
Dim strDynURL

'Get the URL of the current ASP request
strDynURL = mstrDynURL

'Add a querystring param that will bypass the cache
'forcing a dynamic rendering of the page
If Instr(1,strDynURL, "?") = 0 Then
strDynURL = strDynURL & "?" & "cachecommand=bypass"
Else
strDynURL = strDynURL & "&cachecommand=bypass"
End If

'Instantiate an HTTP object to request the dynamic page
Set objHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP.4.0")

If err.number <> 0 Then
'Response.Write err.Description
Exit Sub
End If

'Depending on your firewall/proxy environment you may need to
'configure proxy settings for the HTTP object
'If your webserver is behind a proxy uncomment the following line.
'objHTTP.setProxy  SXH_PROXY_SET_PRECONFIG
'You also need to the use WinHTTP Proxy configuration utility(proxycfg.exe)
'on the server (see the readme for more details)

'Request the dynamic ASP page
objHTTP.open "GET", strDynURL, false
objHTTP.send()

If err.number <> 0 Then
' Response.Write err.Description & "1"
Exit Sub
End If

Application(mstrCachedMemoryName) = objHTTP.responseText

If err.number <> 0 Then
' Response.Write err.Description & "2"
Exit Sub
End If

Application(mstrCreateMemoryTime) = cstr(now())

If err.number <> 0 Then
' Response.Write err.Description
Exit Sub
End If
Set objHTTP = nothing
End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Public Sub ClearCache()
'Clears the current page from the cache
On Error Resume Next
If CachedFileExists() Then
mobjFSO.DeleteFile(mstrCachedFileName)
End If

End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Public Sub ClearAllCachedFiles()

On Error Resume Next
Dim objFolder
Dim colFiles
Dim objFile

'Get a reference to the folder containing cached content files
Set objFolder = mobjFSO.GetFolder(Application("CachedContentFolder"))
Set colFiles = objFolder.Files

'Delete ALL cached pages
For Each objFile In colFiles
objFile.Delete()
Next

Set colFiles = nothing
Set objFolder = nothing

End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Public Property Get CacheIntervalUnit()
CacheIntervalUnit = mintCacheIntervalUnit
End Property

Public Property Let CacheIntervalUnit(ByVal intNewValue)
mintCacheIntervalUnit = CInt(intNewValue)
End Property

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Public Property Get CacheIntervalLength()
CacheIntervalLength = mintCacheIntervalLength
End Property

Public Property Let CacheIntervalLength(ByVal intNewValue)
mintCacheIntervalLength = CInt(intNewValue)
End Property

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Public Property Get DynURL()
DynURL = mstrDynURL
End Property

Public Property Let DynURL(ByVal strNewValue)
mstrDynURL = CStr(strNewValue)
End Property

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Public Property Get StaticFileName()
CachedFileName = mstrCachedFileName
End Property

Public Property Let CachedFileName(ByVal strNewValue)
mstrCachedFileName = CStr(strNewValue)
End Property

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End Class
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
%>

Monday 3 June 2013

URL Slug in asp using regular Expression

URL Slug in ASP
-------------------------------------------------------------
<%
'Create Slug
Function CreateSlug(varCatSlug)
Dim Slug
'Everything to lower case
Slug = LCASE(varCatSlug)

' Replace - with empty space
Slug = Replace(Slug, "-", " ")

Dim re, re2
' Replace unwanted characters with space
Set re = New RegExp
re.Pattern = "[^a-z0-9\s-]"
re.Global = True
Slug = re.Replace(Slug, " ")

' Replace multple white spaces with single space
Set re2 = New RegExp
re2.Pattern = "\s+"
re2.Global = True
Slug = re2.Replace(Slug, " ")

Slug = Trim(Slug)

' Replace white space with -
Slug = Replace(Slug," ", "-")

CreateSlug = Slug
End Function
'End Create Slug

%>