I have an old Classic ASP application that I want to duplicate in parallel - that is, I want to configure another copy (talking to a different database) alongside the original.
So where I have //MyServer/MyApp1/, I will also soon have //MyServer/MyApp2/... so far so good.
Except that many URLs in the app are absolute (for example JS and CSS files), e.g. <script type="text/javascript" src="/MyApp1/menu.js"></script>.
I could search for references to /MyApp1/ and replace it with /MyApp2/, but it's an annoying task that I will have to repeat as I update the core application, and in the event of wanting other copies creating - a likelihood albeit temporary.
I could change these URLs to parent paths, but this means I need to refer to each resource differently, depending on where in the application folder structure I am. Again, it would work, but I don't like using parent paths for a number of reasons.
Given that there is no tilde (~) feature in Classic ASP (to refer to the application root), are there any alternatives that I can consider?
#CJM: I usually have a db.asp which contains the functions and subs that handle opening/closing database connections as the primary include on practically all of my pages. In this db.asp I would then define a appurl or absurl path which could, in your case, have /MyApp1, and then you can use <script type="text/javascript" src="<%=appurl %>/menu.js"></script> in your scripts.
The first time you do it, it'll be a bit of a search/replace mission, but once it's done, subsequent "duplicate" projects will just need that one variable updated.
In Classic ASP, You can use Server.MapPath("/") to get the root directory, or Server.MapPath(".") to get the current directory.
Related
I am designing a very big application now and i want to make good infrastructure for the future.
In Razor (MVC) there is an option to include javascript files in a view by using the function #Scripts.Render("~/Scripts/myscript.js") by specify a specific file or bundle item from BundleCollection which defined in BundleConfig.cs.
I am wondering, is there any added value to define a bundle item in the Scripts.Render function of only single file instead of specify the script file itself?
one of added value i found is that in the long run i will be able to add more files to the bundle as needed without changing the views that using it and i will enjoy the optimization. but i couldn't find added value for that while i am still using one js file in the "bundle".
There is a couple of benefits actually apart from the one you have mentioned:
Bundles are minified in release mode. When you add a file to the bundle (even a single file) and reference the bundle in the view the code will be minified. It's not the case when you reference the file directly. That's most probably what you're going for in production.
The framework generates and appends a random hash to the script with every new version of the bundle to invalidate the cache of the previous bundles. It looks something like this <script src="/bundles/myscript.js?v=CQJxkNd9QnrvutTyUG9mM-vD0FrbCc1"></script>. Your clients will thank you for this after every new release. And again - it doesn't happen if you reference the file directly unless you generate and append the versions manually.
So what I usually do, and I consider it a good practice until I'm proven wrong, I create a bundle for every page specific needs even if it consists of a single js file with a tiny module. For example Home page:
bundles.Add(new ScriptBundle("~/bundles/home").Include("~/Scripts/home.js"));
#Scripts.Render("~/bundles/home")
I always see these few files under the Scripts directory:
ai.0.22.9-buildXXXXX.js
ai.0.22.9-buildXXXXX.min.js
jquery-[version #].min.map
According to this answer, I can wipe out the Scripts folder. But I usually leave these 3 files alone, because I am afraid of bad consequences.
So What are the purposes of each file?
Microsoft Application Insights JavaScript SDK
Application Insights tells you about your app's performance and usage.
By adding a few lines of code to your web pages, you get data about
how many users you have, which pages are most popular, how fast pages
load, whether they throw exceptions, and more. And you can add code to
track more detailed user activity. ai.0.22.9-buildXXXXX.min.js can be
removed if you dont need to view site statics
For more details on how to use it
jquery-[version #].min.map
It is used for Source Mapping
Consider when you start debugging and you are on the particular line.
And you press (F11 or Click Step into Next Function Call), the
debugger tool will take you to jquery.min.js. And looking at jquery
minified version, it is impossible to find out the error. But with
source maps, you can let the browser’s debugger "map" the lines in the
compressed file into the uncompressed source. For Source map to work
successfully, two things are required.
1. Value of sourceMappingURL exists on your server or locally.
2. Browser Support
For further details
if you don't need it you can remove it
ai.*.js files are for Application Insights. Not required and can be removed, unless if using Application Insights.
*.map are for debugging purposes of JavaScript files. I doubt it will be necessary to debug the jQuery plugin. Not required and can be removed.
Hey there I' after publishing my project to azure I have used data comparison to transfer my database to the online server database but now My DateTimePicker does not work it now displayes in the top left corner and does not input data at all. When i ran the project again on the localversion it worked fine?
I found the followig errors in the console.
This has me fairly stumped. Has anyone seen anything like this before.
Azure View
Localhost View
Bundles file
file structure
As from the comments, the issue seemed to be originating from the scripts being included in an incorrect manner by the Bundle.
Trying with individual <Script src=""> tags explicitly will give you more control on the order of the scripts. And in this case seems to be solving the problem.
You can additionally also try splitting the js bundle into multiple bundles and try to add in order. Then check in the browser source if the ordering and result are appropriate even with the bundles. You can check the <script> tags generated by bundles and compare with your manual script tags, which work, and then alter the bundles.
For years I've put my application data files in c:\MyCompany\MyDataFileFolder\App where 'App' is my application name. I made this choice in the early days of Wild-West-Windows when Microsoft seemed to keep changing its own mind (My Documents, Documents, Program Data etc). As I've learnt more about how to do things correctly, and as Windows has now 'settled down' and is more picky about permissions I'd like to move my files. Users have got used to where they are though, and what I'd really like to do is to implement something like Windows does with 'special folders' where there are several synonymous names, thus in my legacy folder I'd like to put something in (or change a folder to) an alias for the real location which will now be something descended from Program Data. This way, the files are in a good place with the correct permissions and if we run a utility expecting or modifying files in the 'old' place this gets changed transparently to the 'new' place (thus a simple shortcut wont work).
Is this possible? Is there are recognised technique for this? I'm using Delphi XE2.
What you are looking for is either a Symbolic Link or a Reparse Point.
My situation is the following:
I have an index.html and some JavaScript that loads HTML snippets from the server. Inside these snippets, I have some URLs to images like
/some/folder/picture.jpg
Of course these do not work in PhoneGap. Weinre tells me that PhoneGap is trying to load the picture from
file:///some/folder/picture.jpg
Any ideas how to solve this? I was thinking about something like a base href, or some configuration in PhoneGap where one could specify a root path, but I did not find anything like that ...
Thanks,
Michael
I had the same problem especially when you have a lot of views (pages) and want to load one from a menu, yet you are at an unknown location.
The simple work around is to use the window.location object.
window.location.href.split('www')[0] + 'www'
This gives you the absolute URL to your 'base'. The www is the folder which is relevant for IOS and Android, so this also makes your app compatible in multiple platforms.
From this you can use a regular expression which passes the entire doc like jquery mobile does with data-* attributes to describe their elements. You simply replace the regular expression with the path returned. You'll want to do this during initialisation otherwise it will create a massive bottle neck.
Hope this helps and is along the lines of what you're looking for.
Cheers,
Sententia
You can't do that with a <base> because / is always host-relative — it can't be redefined to be in a subdirectory. You have two options:
rewrite your HTML to use fully relative paths like ../../some/folder/picture.jpg (or have something do the rewrite for you as a build step), or
alter the "browser" (PhoneGap's wrapper) so that it loads URLs differently.
I'm not familiar with PhoneGap so I can't comment on automatic options, but I personally would start using relative URLs.