Per Nergård
Nov 17, 2010
  4563
(0 votes)

Custom properties with scripts made easy

If you do custom properties in my experience they often include some java scripting to accomplish what you want.

Doing JavaScript in code behind isn’t so much fun to say the least.

I sure have done my fair share of massive one liners that’s hard to maintain and if you touch them after 11pm you’re going to break them.

Splitting the scripts on several rows is more readable but messes up your code with endless lines of string concatenation.

So what to do? Virtual path providers and embedded resources is the solution.

Allan Thraen has done an excellent job with a single assembly self registrating virtual path provider which you can get here. It’s compiled for CMS5 but it works for CMS6 as well.

With this it’s a breeze to use embedded resources.

In this case add a new JavaScript file to your solution, right click and set it’s build action to embedded resource.

Now we have a nice place where we can place all our scripts nicely formatted and commented.

To read the script file contents you can use the following method. The only thing needed to change is the virtualpath variable which should should point to your resource. If unsure of the path check it out with reflector.

 

   1: protected virtual string LoadJavaScriptFunctions()
   2:         {
   3:             string virtualPath = "/App_Resource/Nergard.EPi.dll/Nergard.EPi.SpecializedPropertis.Scripts.CollapsableCMS6.js";
   4:             string input = string.Empty;
   5:             TextReader reader = null;
   6:             try
   7:             {
   8:                 reader = new StreamReader(VirtualPathProvider.OpenFile(virtualPath));
   9:                 input = reader.ReadToEnd();
  10:                 input = Regex.Replace(input, @"/\*[\w\W]+?\*/", string.Empty);
  11:                 input = "<script type=\"text/javascript\">\n" + input + "\n</script>";
  12:             }
  13:             catch (Exception exception)
  14:             {
  15:                 throw new Exception(string.Format("Error \"{0}\" when editor tried to read file \"{1}\"", exception.Message, virtualPath), exception);
  16:             }
  17:             finally
  18:             {
  19:                 if (reader != null)
  20:                 {
  21:                     reader.Close();
  22:                 }
  23:             }
  24:             return input;
  25:         }

Voila you now have a custom property with JavaScript that’s easy to maintain.

Nov 17, 2010

Comments

Nov 17, 2010 10:31 AM

Did you consider web resources as an alternative to this (http://support.microsoft.com/kb/910442)?

Nov 17, 2010 11:16 AM

No id didn't. My initial thought was single assembly custom properties. So that they are self contained and can be dropped adn used at different customers in any combination with no hassle.

If I'm not mistaken webresources needs some configuration for them to work and would then introduce som hassle wich I was trying to avoid.

Please login to comment.
Latest blogs
Optimizely For you Intranet

Having been at Optimizely and in the CMS industry for nearly 16 years I have seen clients’ intranet requirements go from a simple site just to hous...

Robert Folan | Sep 22, 2023

Vulnerability in EPiServer.GoogleAnalytics v3 and v4

Introduction A potential security vulnerability was detected for Optimizely Google Analytics addon (including EPiServer.GoogleAnalytics and...

Bien Nguyen | Sep 20, 2023

Overriding Optimizely’s Content Recommendations Block to Implement Custom Recommendations

Introduction The Content Recommendations add-on for Optimizely CMS dynamically recommends content from your site tailored to the interests of each...

abritt | Sep 13, 2023 | Syndicated blog

Developer contest! Install the AI Assistant and Win Bose QC45 Headphones!

We are thrilled to announce a developer contest where you have the chance to win a pair of Bose Headphones. The goal is to be the first developer t...

Luc Gosso (MVP) | Sep 7, 2023 | Syndicated blog

Send Optimizely notifications with SendGrid API, not SMTP

If your Optimizely site already sends transaction emails through an email platform API, why not do the same with Optimizely notification emails?

Stefan Holm Olsen | Sep 6, 2023 | Syndicated blog

Optimizely Configured Commerce Custom POST API

Introduction When creating custom API controllers for an Optimizely B2B project it’s possible you’ll want to create POST calls. Following the...

Dylan Barter | Sep 6, 2023