<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:thr="http://purl.org/syndication/thread/1.0">
    <title>TeamDesk Blog</title>
    
    
    <link rel="alternate" type="text/html" href="http://blog.teamdesk.net/" />
    <id>tag:typepad.com,2003:weblog-1401889</id>
    <updated>2011-12-15T08:59:08-06:00</updated>
    <subtitle>Current and future thoughts and behind-the-scene information</subtitle>
    <generator uri="http://www.typepad.com/">TypePad</generator>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/teamdesk" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="teamdesk" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://hubbub.api.typepad.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">teamdesk</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><entry>
        <title>API Usage and public attachments</title>
        <link rel="alternate" type="text/html" href="http://blog.teamdesk.net/2011/12/api-usage-and-public-attachments.html" />
        <link rel="replies" type="text/html" href="http://blog.teamdesk.net/2011/12/api-usage-and-public-attachments.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-6a00e54ee895e9883401675ecc3f15970b</id>
        <published>2011-12-15T08:59:08-06:00</published>
        <updated>2011-12-19T04:14:59-06:00</updated>
        <summary>Some of you use TeamDesk as a back-end data management solution while extracting the content via SOAP API from the database to present on an front-end site, such as online shop. By the way, it's a way TeamDesk promo site...</summary>
        <author>
            <name>Kirill Bondar</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Tips &amp; Tricks" />
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://blog.teamdesk.net/">
<div xmlns="http://www.w3.org/1999/xhtml"><p>Some of you use <a href="http://www.teamdesk.net">TeamDesk</a> as a back-end data management solution while extracting the content via SOAP API from the database to present on an front-end site, such as online shop. By the way, it's a way TeamDesk promo site works; the <a href="http://www.teamdesk.net/applications.html" target="_blank">list of applications</a> and their categories is managed via TeamDesk application, and the promo site utilizes the API to obtain the info.</p>  <p>Let's describe typical scenario: there is a Product table with Title, Description and Image columns; first two are a obviously a Text, and the last is Attachment.</p>  <p>To present the list of products with images in an HTML you typically need two pages. One will perform API's Login() call, then Query() to get the list of products and then render Title and Description texts and HTML &lt;img&gt; tag referring to the second page. Second page will again perform Login() and GetAttachment() API calls and serve the binary data obtained from latter call as an image.</p>  <p>Suppose your product list page displays 100 products at once. How many API requests it will generate? It's easy to calculate: there would be one Login()/Query() pair from the page itself and one Login()/GetAttachment() pair per product, resulting to 202 calls for each page view. Since each call generates network traffic and the network is a potential bottleneck, is there a way to reduce the number of calls?</p>  <p>Perhaps you can share API object between pages performing login once per session; this approach will cut the number of API requests in half; 102 requests exactly – one for first-time Login(), one Query() and 100 GetAttachment(). But is further optimization possible?</p>  <p>Let's check what typical website visitor does. She reads the list of products (102 requests), then clicks on a link to see more of some product details (this will generate some more requests we are not interested in at the moment). If she's not interested in the product she presses browser's back button or clicks a link to return to the product list to check another product – and this generates yet another 102 requests.</p>  <p>Perhaps you can optimize product list page logic to perform Query() only when list changes, but this requires some relatively sophisticated logic and advanced coding skills. It would be much easier to cut the number of calls to an image-serving page down, or, better to say, you have a chance to remove image-serving page at all.</p>  <p>As you probably know, some time ago we have enabled <a href="http://blog.teamdesk.net/2011/06/public-access-to-attachments.html" target="_blank">public access to attachment files</a>. If public access is enabled, the file is served to the user without a need to login. Our web page serving the file performs various browser cache checks and return file only if the browser does not have it cached or cached copy is out-of-date. And now you can utilize this page on your site.</p>  <p>If you include attachment column in your Query() call you'll get back the file name and some additional info separated by semicolon, e.g:</p>  <p><em>filename;revision;<strong>uniqueidentifier</strong></em></p>  <p>There are two pages in TeamDesk you can refer from your site:</p>  <p><u><font color="#0000ff">https://www.teamdesk.net/secure/db/&lt;app-id&gt;/attachment.aspx</font></u>  <br />and     <br /><font color="#0000ff"><u>https://www.teamdesk.net/secure/db/&lt;app-id&gt;/image.aspx</u></font></p>  <p>First serves attachment file as is, second assumes the file is image and produces the thumbnail of specified width and height</p>  <p>Both pages accept two parameters:</p>  <p><em>fid</em> is a number identifying the column. You can obtain this identified by visiting column's page in the setup section and capturing the number following the string column= in the browser's address bar.     <br /><em>guid</em> is an <strong>uniqueidentifier</strong>, the text after last semicolon in the  attachment string.</p>  <p>To generate the link to attachment file as-is that will be served directly from TeamDesk you'll need to provide an URL to:</p>  <p>https://www.teamdesk.net/secure/db/&lt;app-id&gt;/attachment.aspx?fid=&lt;column-id&gt;&amp;guid=&lt;uniqueidentifier&gt;</p>  <p>Image thumbnails are served in a similar way:</p>  <p>https://www.teamdesk.net/secure/db/&lt;app-id&gt;/image.aspx?fid=&lt;column-id&gt;&amp;guid=&lt;uniqueidentifier&gt;&amp;w=&lt;size&gt;</p>  <p>Last parameter specifies the size of the square box, in pixels, the image will be fit to. The aspect ratio of the image is preserved and resulting image will not exceed box dimensions; e.g. if you specify w=100 16x16 image will remain the same, 400x400 image will be downscaled to 100x100, 200x100 image will be downscaled to 100x50 and 100x200 image will be downscaled to 50x100.</p></div>
</content>



    </entry>
    <entry>
        <title>Setup search extension</title>
        <link rel="alternate" type="text/html" href="http://blog.teamdesk.net/2011/11/setup-search-extension.html" />
        <link rel="replies" type="text/html" href="http://blog.teamdesk.net/2011/11/setup-search-extension.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-6a00e54ee895e988340153937328a9970b</id>
        <published>2011-11-23T10:24:54-06:00</published>
        <updated>2011-11-23T10:24:54-06:00</updated>
        <summary>TeamDesk setup sidebar is now extended with Search Keywords box. This box allows you to search every table for an objects containing the search term in their name or formula. It is quite useful when the user reports a problem...</summary>
        <author>
            <name>Kirill Bondar</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="What's New" />
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://blog.teamdesk.net/">
<div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://www.teamdesk.net">TeamDesk</a> setup sidebar is now extended with Search Keywords box.</p>  <p align="left"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://foresoft.typepad.com/.a/6a00e54ee895e988340153937328a4970b-pi" width="404" height="255" /></p>  <p>This box allows you to search every table for an objects containing the search term in their name or formula. It is quite useful when the user reports a problem or asks for advice mentioning the view or column but forgetting about the table the object is contained. Also, you can now quickly check whether and where some function is used in the formulas. For example if your are planning to upgrade to user property table it is worth searching for <em>Role(, UserToName(, UserToEmail(</em> to gradually replace these calls with role references or references to user property table's columns.</p></div>
</content>



    </entry>
    <entry>
        <title>User Properties Feature</title>
        <link rel="alternate" type="text/html" href="http://blog.teamdesk.net/2011/11/user-properties-feature.html" />
        <link rel="replies" type="text/html" href="http://blog.teamdesk.net/2011/11/user-properties-feature.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-6a00e54ee895e98834015436b82b33970c</id>
        <published>2011-11-08T08:59:32-06:00</published>
        <updated>2011-11-13T14:31:01-06:00</updated>
        <summary>How often you need to add the additional information such as salary or department to your application users' records? Usually you can do it by creating a table (say, User Properties table) with column of User type as a key...</summary>
        <author>
            <name>Kirill Bondar</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="What's New" />
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://blog.teamdesk.net/">
<div xmlns="http://www.w3.org/1999/xhtml"><p>How often you need to add the additional information such as salary or department to your application users' records?</p>  <p>Usually you can do it by creating a table (say, User Properties table) with column of User type as a key and adding necessary additional properties as columns of this table. Whenever you need this info for the user recorded in some other table you can relate two tables and extract all necessary information via lookups.</p>  <p>The problem arises when you need to extract this information for the current user, typically when defining access rights such as "Allow view records related to the people from my department". Before you would need a formula column calculating User() formula and a relationship to user property table and a column to extract the value. But situation gets worse since you need to do it for every table you need this information in.</p>  <p>With "native" support for User Property table it's all much easier now.</p>  <p>First, enable User Property Table feature under Setup &gt; Labs. Once enabled, visit Setup &gt; Sharing / Roles &gt; Set User Property table. <a href="http://www.teamdesk.net">TeamDesk</a> will propose you to select existing table having a User column as a key column, or create a new one:</p>  <p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://foresoft.typepad.com/.a/6a00e54ee895e98834015392e4db09970b-pi" width="366" height="63" /></p>  <p>Once user table is selected, it will be extended with E-Mail, First Name, Last Name, Screen Name, Role, Default Set, External Customer and Last Access read only columns containing live snapshot from the information found in setup section.</p>  <p>Also you'll have couple of new options.</p>  <p>* For any column of user type you can create lookups to the information stored in user tables right from the column's view screen:</p>  <p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://foresoft.typepad.com/.a/6a00e54ee895e98834015392e4db38970b-pi" width="464" height="339" /></p>  <p>* Wherever you need an information from User Properties related to current user, you can simply refer to the column of User Properties table by its name.</p>  <p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://foresoft.typepad.com/.a/6a00e54ee895e98834015436b82b1f970c-pi" width="481" height="265" /></p>  <p>* Setup's Manage Users page is extended with button to edit corresponding record in User Property table.</p>  <p><img style="background-image: none; border-right-width: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://foresoft.typepad.com/.a/6a00e54ee895e98834015392e4db53970b-pi" width="503" height="152" /></p>    <p>Obviously users just invited do not have a record in User Properties. For such users the button is named "Add User Property" and creates new record with user's dropdown pre-selected.</p></div>
</content>



    </entry>
    <entry>
        <title>Relationship Management Simplified</title>
        <link rel="alternate" type="text/html" href="http://blog.teamdesk.net/2011/11/relationship-management-simplified.html" />
        <link rel="replies" type="text/html" href="http://blog.teamdesk.net/2011/11/relationship-management-simplified.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-6a00e54ee895e988340162fc3995de970d</id>
        <published>2011-11-08T07:14:43-06:00</published>
        <updated>2011-11-08T07:14:43-06:00</updated>
        <summary>We added a number of shortcuts to manage relation-related settings in TeamDesk. First of all, there are two new items under Columns section of table's setup menu: Create new lookup column and Create new summary column. Each one leads to...</summary>
        <author>
            <name>Kirill Bondar</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="What's New" />
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://blog.teamdesk.net/">
<div xmlns="http://www.w3.org/1999/xhtml"><p>We added a number of shortcuts to manage relation-related settings in <a href="http://www.teamdesk.net">TeamDesk</a>.</p>  <p>First of all, there are two new items under Columns section of table's setup menu: Create new lookup column and Create new summary column.</p>  <p><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://foresoft.typepad.com/.a/6a00e54ee895e988340162fc399427970d-pi" width="244" height="223" /></p>  <p>Each one leads to a subset of general Manage Relations page, focusing on selected functionality.</p>  <p><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://foresoft.typepad.com/.a/6a00e54ee895e988340162fc3994d3970d-pi" width="468" height="237" /></p>  <p>Above is a screenshot from Manage Relations page. Since lookups are relevant for master tables only, Create new lookup page displays only References section:</p>  <p><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://foresoft.typepad.com/.a/6a00e54ee895e98834015392e46359970b-pi" width="468" height="98" /></p>  <p>while Create new summary displays Selections section:</p>  <p><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://foresoft.typepad.com/.a/6a00e54ee895e98834015392e463cc970b-pi" width="467" height="140" /></p>  <p>Column list now sports New Lookup and New Reference buttons to replicate setup links' functionality.</p>  <p><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://foresoft.typepad.com/.a/6a00e54ee895e988340162fc399527970d-pi" width="488" height="126" /></p>  <p>Columns participating in relationships as reference columns now report the table(s) they refer to:</p>  <p><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://foresoft.typepad.com/.a/6a00e54ee895e988340162fc399596970d-pi" width="458" height="78" /></p>  <p>Column's view screen displays the information about associated relationship:</p>  <p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://foresoft.typepad.com/.a/6a00e54ee895e98834015392e46445970b-pi" width="493" height="470" /></p>  <p>Also, relationship's basic properties are edited together with column.</p>  <p>Enjoy!</p></div>
</content>



    </entry>
    <entry>
        <title>Merge Template to Your Application</title>
        <link rel="alternate" type="text/html" href="http://blog.teamdesk.net/2011/10/merge-template-to-your-application.html" />
        <link rel="replies" type="text/html" href="http://blog.teamdesk.net/2011/10/merge-template-to-your-application.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-6a00e54ee895e988340162fc0a641d970d</id>
        <published>2011-10-31T08:35:22-05:00</published>
        <updated>2011-10-31T08:35:22-05:00</updated>
        <summary>Now, after selecting a template from the application library we are prompting you to either create a new application or to merge the template with any existing application you own. This will allow you to build application by combining simple...</summary>
        <author>
            <name>Kirill Bondar</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="What's New" />
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://blog.teamdesk.net/">
<div xmlns="http://www.w3.org/1999/xhtml"><p>Now, after selecting a template from the application library we are prompting you to either create a new application or to merge the template with any existing application you own.</p>  <p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://foresoft.typepad.com/.a/6a00e54ee895e98834015392b51449970b-pi" width="439" height="370" /></p>  <p>This will allow you to build application by combining simple templates together.</p></div>
</content>



    </entry>
    <entry>
        <title>DOCX generation improvements</title>
        <link rel="alternate" type="text/html" href="http://blog.teamdesk.net/2011/10/docx-generation-improvements.html" />
        <link rel="replies" type="text/html" href="http://blog.teamdesk.net/2011/10/docx-generation-improvements.html" thr:count="2" thr:updated="2011-10-20T07:20:23-05:00" />
        <id>tag:typepad.com,2003:post-6a00e54ee895e9883401539239eb60970b</id>
        <published>2011-10-11T10:34:38-05:00</published>
        <updated>2011-10-11T10:34:38-05:00</updated>
        <summary>Recently we encountered some issues with DOCX templates created in Word 2010. Unlike its predecessor Word 2010 uses more complicated constructs for merge fields we use for placeholders and we did not recognize such definitions properly. We revised merge fields...</summary>
        <author>
            <name>Kirill Bondar</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="What's New" />
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://blog.teamdesk.net/">
<div xmlns="http://www.w3.org/1999/xhtml"><p><em>Recently we encountered some issues with DOCX templates created in Word 2010. </em><em>Unlike its predecessor Word 2010 uses more complicated constructs for merge fields we use for placeholders and we did not recognize such definitions properly. We revised merge fields identification algorithm, fixed few other issues by the way and step by step ended up with completely new document generation algorithm.</em></p>  <p>Our old client-side .DOC generation module used Word Automation to expand the template. When we started working on server-side code, we simply replicated old algorithm with all the quirks – this helped us to ensure that movement from old to new technology will produce (nearly) identical results.</p>  <p>Yet, one part definitely needed improvement: the detail records generation. Due to lack of suitable methods in the automation our code had somehow sophisticated algorithm that tracked row and column index of each placeholder in the detail table and performed replacement of whole cells, not just the placeholders. This caused some formatting and layout restrictions, for example, the font and color should be defined for the cell as whole, not for the content of the cell; nested tables were not allowed.</p>  <p>Now, generator works more straightforward from user's perspective. First we replace all master-level placeholder in the document wherever they are placed. Next, we generate detail tables one by one. Here we have to repeat some part of template for each detail record. Due to lack of non-visual markers in a Word documents and for backward compatibility we define repeatable item the table row. We find and locate all the placeholder for detail table and find innermost table row they have in common. This row will be repeatable block. For each record we clone the row with all placeholders, replace the placeholders and insert now-expanded content back into the table. Here are illustrations:</p>  <table border="1" cellspacing="1" cellpadding="2" width="500"><tbody>     <tr>       <td valign="top" width="120"><strong>Column 1</strong></td>        <td valign="top" width="212"><strong>Column 2 * Column 3</strong></td>     </tr>      <tr bgcolor="#cccccc">       <td valign="top" width="120">«Detail/Column 1»</td>        <td valign="top" width="212">«Detail/Column 2» <strong>some text </strong>«Detail/Column 3»</td>     </tr>   </tbody></table>  <p>The row marked gray will be repeatable block since it's a common row for all detail placeholders. Since we now operate on a field level, single table cell can contain several placeholders and/or text around the placeholders.</p>  <p>Now, more complicated layout:</p>  <table border="1" cellspacing="1" cellpadding="2" width="499"><tbody>     <tr>       <td valign="top" width="120"><strong>Master Info</strong></td>        <td valign="top" width="374"><strong>Detail</strong></td>     </tr>      <tr>       <td valign="top" width="120">«Master Info»</td>        <td valign="top" width="374">         <table border="1" cellspacing="1" cellpadding="2" width="373"><tbody>             <tr>               <td valign="top" width="166"><strong>Column 1</strong></td>                <td valign="top" width="202"><strong>Column 2</strong></td>             </tr>              <tr bgcolor="#cccccc">               <td valign="top" width="166">«Detail/Column 1»</td>                <td valign="top" width="202">«Detail/Column 2»</td>             </tr>           </tbody></table>       </td>     </tr>   </tbody></table>  <p>Here we nest detail table into another table. The repeatable block is the row in the inner table since this one is <strong>innermost</strong> common to both detail placeholders. And now even more complicated:</p>  <table border="1" cellspacing="1" cellpadding="2" width="500"><tbody>     <tr>       <td valign="top" width="136"><strong>Column 1</strong></td>        <td valign="top" width="364"><strong>Mixed Content</strong></td>     </tr>      <tr bgcolor="#cccccc">       <td valign="top" width="136">«Detail/Column 1»</td>        <td valign="top" width="364">         <table border="1" cellspacing="1" cellpadding="2" width="359"><tbody>             <tr>               <td valign="top" width="176"><strong>Master Info</strong></td>                <td valign="top" width="178"><strong>Column 2</strong></td>             </tr>              <tr>               <td valign="top" width="176">«Master Info»</td>                <td valign="top" width="178">«Detail/Column 2»</td>             </tr>           </tbody></table>       </td>     </tr>   </tbody></table>  <p>Here, the row in outer table will be repeated since it's common for both detail placeholders. There is no problem for inner table to contain master information – it will be simply repeated for each row in the detail table.</p>  <p>We are trying to preserve the text formatting wherever possible, but formatting should be applied to placeholder as a whole. Many Word's formatting commands apply to a word the cursor placed on. As we replace the placeholder completely, we do not preserve the styling defined within the placeholder. Moreover, if multiple styles are defined for placeholder content, it's not clear what style to use for content. For example, what font, size, style and color we should use when replacing this?</p>  <p>«<font size="5" face="Times New Roman"><em><strong>Master</strong></em></font> <font style="background-color: #ffff00" size="4"><strong>Info</strong></font>»</p>  <p>As a bonus, we've added column usage information for the documents. Make any change in your app, save and columns will start to report their usage in the DOCX documents.</p></div>
</content>



    </entry>
    <entry>
        <title>New form layout: migration plan</title>
        <link rel="alternate" type="text/html" href="http://blog.teamdesk.net/2011/10/new-form-layout-migration-plan.html" />
        <link rel="replies" type="text/html" href="http://blog.teamdesk.net/2011/10/new-form-layout-migration-plan.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-6a00e54ee895e98834014e8c2439de970d</id>
        <published>2011-10-09T19:53:34-05:00</published>
        <updated>2011-10-09T19:53:34-05:00</updated>
        <summary>In this post we'll try to outline the steps you'll need to do to migrate to a new form layout from your existing applications. It's not only the change in a way the form appears on the screen. TeamDesk has...</summary>
        <author>
            <name>Kirill Bondar</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Tips &amp; Tricks" />
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://blog.teamdesk.net/">
<div xmlns="http://www.w3.org/1999/xhtml"><p><em>In this post we'll try to outline the steps you'll need to do to migrate to a new form layout from your existing applications. It's not only the change in a way the form appears on the screen. </em><a href="http://www.teamdesk.net"><em>TeamDesk</em></a><em> has developed over the years and many times new features supersede old ones. With new layout we are trying to fold various settings into one consolidated thing.</em></p>  <p>* In old layout Default Form was displayed in a single-column with order of the columns as defined in a table, without sections, and text blocks. In a new layout, Default Form is a fully featured form with sections, text blocks and columns' order separated from the columns' order defined in the table. If you have single custom form associated with all roles and actions you are few clicks away from successful migration.</p>  <p>* In old layout you were able to define multiple forms per table and associate various forms for different roles and actions. In a new layout we are defining a single form per table; multiple forms are dropped in favor of using form behaviors to specify what columns should be hidden from the form; with behaviors you can emulate role-based differences plus achieve a lot more.</p>  <p>* New layout affects Default Forms only, custom forms are not affected. To see which users will be affected, please check what roles in what tables in your application are associated with Default Form via Setup mode &gt; table's tab &gt; Forms &gt; Associate Forms with Roles and Actions. If your have found the roles you do not want to enable new feature ]instantly, make a copy of Default Form and associate a copy of the form with the role(s).</p>  <p>* To enable new form layout you need to go to Setup mode &gt; Setup tab &gt; Tools section &gt; Labs and enable Grid Form Layout. You can enable or disable this feature anytime.</p>  <p>Once you enable the feature, Forms menu will be reorganized. Old one contained:</p>  <ul>   <li>Customize Form Behavior</li>    <li>Create New Form</li>    <li>Customize Existing Form</li>    <li>Associate Forms with Roles and Actions</li> </ul>  <p>New one is shortened to:</p>  <ul>   <li>Customize Form Layout</li>    <li>Customize Form Behavior</li>    <li>Generate Web-to-Record Form</li> </ul>  <p>If you had custom forms defined for a table you can still have access to them; the link to old functionality is moved under Rules section &gt; Custom Forms link.</p>  <p>* If you have single custom form for all roles and actions, view the form and click "Copy to Default Form" button. This will copy all the columns, sections and text blocks to a new layout's Default Form. Then change form associations to set Default Form for roles and actions you want to enable new functionality to. If you are satisfied with results, change the association for remaining roles and actions.</p>  <p>* If you have multiple custom forms associated with various roles and actions start with the form most suitable for migration (containing most of the columns for example). Then adjust the columns' visibility as necessary via form behaviors:</p>  <ol>   <li>To differentiate between Add and Edit mode you can use      <br />RecordId()='0' behavior's filter condition.</li>    <li>To differentiate between roles you can simply address the role name enclosed in square brackets in the filter, for example [My Role].</li> </ol>  <p>The Preview button found under Customize Form Layout can help you to play with behaviors and roles without actually deploying the form.</p>  <p>* Web-To-Record (W2R) functionality is also slightly affected. While old W2R forms exist, they will work unchanged. Yet if you decide to migrate completely, please note that there will be a single W2R gateway URL per table.</p>  <p>Enable all the columns from all of your W2R forms. Save. Capture &lt;form&gt;'s action URL from generated HTML code and use updated URL on your site forms.</p>  <p>* Once you complete the migration you can delete all of your custom forms to hide Rules &gt; Custom Forms item.</p></div>
</content>



    </entry>
    <entry>
        <title>Anatomy of new form layout</title>
        <link rel="alternate" type="text/html" href="http://blog.teamdesk.net/2011/10/anatomy-of-new-form-layout.html" />
        <link rel="replies" type="text/html" href="http://blog.teamdesk.net/2011/10/anatomy-of-new-form-layout.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-6a00e54ee895e988340153922fbe04970b</id>
        <published>2011-10-09T18:21:35-05:00</published>
        <updated>2011-10-10T08:50:33-05:00</updated>
        <summary>* Few months ago we started experimenting with new form layout. The development is finished now and new layout is enabled in new applications by default. This post describes design decisions we've made during the development and the outcome. We'll...</summary>
        <author>
            <name>Kirill Bondar</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="What's New" />
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://blog.teamdesk.net/">
<div xmlns="http://www.w3.org/1999/xhtml"><p><em>* Few months ago we started experimenting with <a href="http://teamdesk.crmdesk.com/answer.aspx?aid=13364" target="_blank">new form layout</a>. The development is finished now and new layout is enabled in new applications by default. This post describes design decisions we've made during the development and the outcome. We'll describe the migration plan for existing customers in the next post.</em></p>  <p><em>* In TeamDesk we call database tables record properties' columns. Some databases call it fields. Here we'll speak mostly about HTML layouts that consist of rows and columns. To avoid mixing up definitions we'll refer to the content of HTML tables as rows and columns and to TeamDesk database columns as fields.</em></p>  <p>Traditionally <a href="http://www.teamdesk.net">TeamDesk</a> used tables for forms. When we started developing the product in 2005 this was perhaps the only truly cross-browser way for making multi-column layouts.</p>  <p>Many things changed since then. Many web standards reached recommendation stage. Browser vendors switching to rapid development to support latest web specifications. Smartphones and tablets arose. We've added many nice features such as dynamic recalculations and form behaviors to TeamDesk.</p>  <p>In tables intersections of rows and columns form cells. In TeamDesk each field were occupying two cells: one for column label and another, next to the label, to display the value or provide an editor. The browser is responsible for the table layout, determining optimal size for each row and column, but the browser will never break a row if its content exceeds the screen width. This is good for tabular data, but in case of forms it is a big problem to render the layout for devices with narrow screens.</p>  <p>Suppose, you have the form laid out in four columns (two fields in a row, each field occupies two columns). Suppose we have long labels and wide-enough content, so each column does not exceed 320px.</p>  <p>This is what we had:</p>  <table border="0" cellspacing="1" cellpadding="2" width="500"><tbody>     <tr>       <td bgcolor="#cccccc" valign="top" width="125" align="right">Field 1: </td>        <td bgcolor="#eeeeee" valign="top" width="125">Value 1</td>        <td bgcolor="#cccccc" valign="top" width="125" align="right">Field 2: </td>        <td bgcolor="#eeeeee" valign="top" width="125">Value 2</td>     </tr>   </tbody></table>  <p>While, in theory, narrow screen can be detected and four columns could be broken in four rows (label above the value below, field after field), the browser will never do that:</p>  <table border="0" cellspacing="1" cellpadding="2" width="187"><tbody>     <tr>       <td valign="top" width="183"><strong>Field 1:</strong></td>     </tr>      <tr>       <td valign="top" width="183">Value1</td>     </tr>      <tr>       <td valign="top" width="183"><strong>Field 2:</strong></td>     </tr>      <tr>       <td valign="top" width="183">Value 2</td>     </tr>   </tbody></table>  <p>This was the first problem to solve. Another was also caused by table layout. See, what's wrong here?</p>  <table border="0" cellspacing="1" cellpadding="2" width="500"><tbody>     <tr>       <td valign="top" width="125" align="right"> </td>        <td valign="top" width="125" align="right"> </td>        <td bgcolor="#cccccc" valign="top" width="125" align="right">Field 2: </td>        <td bgcolor="#eeeeee" valign="top" width="125">Value 2</td>     </tr>      <tr>       <td bgcolor="#cccccc" valign="top" width="125" align="right">Field 3: </td>        <td bgcolor="#eeeeee" valign="top" width="125">Value 3</td>        <td bgcolor="#cccccc" valign="top" width="125" align="right">Field 4: </td>        <td bgcolor="#eeeeee" valign="top" width="125">Value 4</td>     </tr>   </tbody></table>  <p>Field 1 was hidden by either column access right or by form behavior. But, despite what you may expect Field 2 is not shifted to the left (or Field 3 is not shifted up.) In table layout hiding the cell is identical to hiding its content, the space occupied by the cell is not "freed."</p>  <p>In addition to changed web landscape we had a number of various layout improvement ideas from our customers. So we decided to take on new form layout.</p>  <p>First of all, widely used browsers have decent support for latest cascading style sheet standard. From this standard, two things were of our interest: <a href="http://www.w3schools.com/css/css_float.asp" target="_blank">CSS floats</a> to allow grid-like layout without sticking to tables; and <a href="http://www.w3.org/TR/css3-mediaqueries/" target="_blank">CSS media queries</a> to provide additional layout hints for smartphones and tablet devices. So we ended up with the following rules:</p>  <ol>   <li>The form is divided into four equally sized virtual "columns"; </li>    <li>The width is always expressed in number of columns; </li>    <li>The field can occupy one to four virtual columns (Width1 - Width4). You can instruct the field to occupy new row (hard break), or to be displayed next to preceding field. If the total width of the fields in a row exceeds 4, the field exceeding the width will be displayed in a new row (soft break); </li>    <li>     <div align="left">You can provide alternative label to a field;</div>   </li>    <li>     <div align="left">You can specify whether to display the label to the left of the value or above it;</div>      <ol><!--EndFragment--></ol>   </li>    <li>The field contained in the section. If there is no section defined explicitly we define unnamed one; </li>    <li>The width of the section is defined by the sum of fields' widths in  row but does not exceed 4; </li>    <li>Sections are laid out the same way as columns.</li>    <li>You can apply behaviors to every form item including sections and text blocks.</li> </ol>  <p>Perhaps these rules need some explanations:</p>  <p>Why 4 columns? Customers asked us to have a possibility to define 3 fields in a row. Yet, 4 columns give more options to have a form look like  a grid: you can define 1x4 or 2x2 or 4x1, plus combinations of 3+1, 1+3, 2+1+1 1+2+1, 1+1+2. Below is an example of the form from Leads Management application laid out with new features:</p>  <p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://foresoft.typepad.com/.a/6a00e54ee895e98834014e8c276b8f970d-pi" width="500" height="259" /></p>  <p>Default layout is optimized to work well on a 1280px screen which we believe is a standard for most desktops and does not depend on browser's standard support level. With sidebar hidden, it should work as well on a 1024px screen which is a standard for netbooks and tablet devices in a landscape mode. </p>  <p>For narrower screens we'll provide additional layout hints. For example we can force the layout in two columns or always display label above to free more space to display the value. Yet, this is still the work in progress.</p>  <p>Hard and soft breaks start playing when fields and sections are dynamically shown and hidden. Hard breaks are always respected. Soft breaks are not: when you hide preceding field next field is shifted to the left. If there is enough of free space in a row we'll try to fit the field from the next row. Preview button will give you an idea how the form will look like with various combinations of View/Edit modes, roles and behavior rules in effect.</p>  <p>Displaying the label above makes sense when you have either narrow section (Width1) to make more room for content or wide content by definition such as multiline text. We tried to experiment with some automated decisions, yet finally decided for default layout to leave it up to user's consent.</p>  <p>But hey, tables are not gone! Some e-mail clients have limited HTML rendering capabilities, so in e-mail notifications we are still using tables to make sure our layout can be read correctly.</p></div>
</content>



    </entry>
    <entry>
        <title>Autocompletion in type-in record picker</title>
        <link rel="alternate" type="text/html" href="http://blog.teamdesk.net/2011/09/autocompletion-in-type-in-record-picker.html" />
        <link rel="replies" type="text/html" href="http://blog.teamdesk.net/2011/09/autocompletion-in-type-in-record-picker.html" thr:count="4" thr:updated="2011-09-22T20:45:15-05:00" />
        <id>tag:typepad.com,2003:post-6a00e54ee895e98834015391b99c4f970b</id>
        <published>2011-09-19T10:09:06-05:00</published>
        <updated>2011-09-19T10:09:06-05:00</updated>
        <summary>Previously, you needed to type some text into the type-in picker and move input focus out of control to have your search query resolved to particular record. Yet, there were no clear indication if there is no records matching your...</summary>
        <author>
            <name>Kirill Bondar</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="What's New" />
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://blog.teamdesk.net/">
<div xmlns="http://www.w3.org/1999/xhtml"><p>Previously, you needed to type some text into the type-in picker and move input focus out of control to have your search query resolved to particular record. Yet, there were no clear indication if there is no records matching your query or there is multiple records; <a href="http://www.teamdesk.net">TeamDesk</a> leaves your text unchanged and error message appears only when you click Save button.</p>  <p>With latest release we have added auto completion functionality to type-in pickers. Starting from second letter you've typed TeamDesk sends your text to the application and gets back the list of top 20 matched records. </p>  <p><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://foresoft.typepad.com/.a/6a00e54ee895e98834015391b99c47970b-pi" width="413" height="146" /></p>  <p>These records are displayed in the dropdown under input box allowing you to choose one. Search logic was modified to implicitly add a star (*) wildcard to the end of your query.</p></div>
</content>



    </entry>
    <entry>
        <title>Nuts and bolts: JS and CSS minified</title>
        <link rel="alternate" type="text/html" href="http://blog.teamdesk.net/2011/09/nuts-and-bolts-js-and-css-minified.html" />
        <link rel="replies" type="text/html" href="http://blog.teamdesk.net/2011/09/nuts-and-bolts-js-and-css-minified.html" thr:count="1" thr:updated="2011-09-15T17:27:49-05:00" />
        <id>tag:typepad.com,2003:post-6a00e54ee895e988340154356f338c970c</id>
        <published>2011-09-14T19:12:16-05:00</published>
        <updated>2011-09-15T04:06:05-05:00</updated>
        <summary>Using Microsoft Ajax Minifier (AjaxMin) to compress JavaScript and CSS in Visual Studio</summary>
        <author>
            <name>Kirill Bondar</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Behind the Scenes" />
        <category scheme="http://www.sixapart.com/ns/types#category" term="Tips &amp; Tricks" />
        
        <category scheme="http://sixapart.com/ns/types#tag" term="compression" />
        <category scheme="http://sixapart.com/ns/types#tag" term="css" />
        <category scheme="http://sixapart.com/ns/types#tag" term="HTML" />
        <category scheme="http://sixapart.com/ns/types#tag" term="javascript" />
        <category scheme="http://sixapart.com/ns/types#tag" term="minification" />
        <category scheme="http://sixapart.com/ns/types#tag" term="MSBuild" />
        <category scheme="http://sixapart.com/ns/types#tag" term="Visual Studio" />
        
<content type="xhtml" xml:lang="en-US" xml:base="http://blog.teamdesk.net/">
<div xmlns="http://www.w3.org/1999/xhtml"><p><em>While developing our products we use wide variety of technologies and tools. Some of those technologies are now obsolete and were superseded with new ones, some were improved over time and some still do the job.</em></p>
<p><em>With this series of articles we'll try to uplift the curtain and share our experience. It's not an ultimate HOWTO; it's an attempt to describe how WE do it. So, here we go!</em></p>
<p>Typical web site consist of static HTML pages, or HTML code generated dynamically and additional resources requested and loaded by HTML pages, such as images, style sheets (CSS) and JavaScript files. We'll speak about last two today.</p>
<p>Browser sends the request to the server and receives the response over the network. While some extra bytes does not seem significant, if you count the traffic generated by millions of requests you'll end up with megabytes of extra network load and hours of extra time. You can squeeze bytes by configuring your web server to compress the response. By why not squeeze few more bytes by removing letters and digits, spaces and punctuations that are not needed for web site operation? This is the goal number one.</p>
<p>Also, JavaScript and CSS are languages each with own syntax and rules. Normally they are interpreted when requested by the browser. Some browsers report syntax errors, some do not. Moreover obeying certain simple programming rules help to avoid common pitfalls and diagnose hard-to-find runtime errors – errors that pop up when the code is executed; but some code executed rarely. So, here is the goal number two: provide syntax check early in the development process, before deploying the files on web server.</p>
<p>There are number of tools to do this. <a href="http://ajaxmin.codeplex.com/">Microsoft's Ajax Minifier</a> aka AjaxMin, Yahoo's <a href="http://developer.yahoo.com/yui/compressor/">YUI Compressor</a>, Google's <a href="http://code.google.com/closure/compiler/">Closure Compiler</a>, <a href="http://www.jslint.com/">JSLint</a>, <a href="http://www.crockford.com/javascript/jsmin.html">JSMin</a> and many others; all of different quality, performance and feature set.</p>
<p>In terms of quality and feature set first three tools are winners – all of them provide a lot of checks and optimizations such as renaming local symbols, dead code elimination etc. Yet, to simplify build process configuration process we wanted to use single tool for both CSS and JavaScript syntax check and compression. This requirement narrowed the choice to first two as Closure Compiler does not support CSS validation and compression. As we are using Microsoft tool chain, <a href="http://en.wikipedia.org/wiki/MSBuild">MSBuild</a> in particular, we have chosen Ajax Minifier since it is packaged with extra goodies to make integration with build process easier – no surprise.</p>
<p>Now, to the build process: in production environment everything is built for efficiency. For developers it's easier to maintain multiple, smaller files than one big file, yet, each request to the file take some network resources, so you'll likely want your files to be minified and concatenated together to minimize the number of requests needed to load all necessary resources. Moreover while some tools allow performing minification on the fly upon request we would prefer to do it prior to deployment to reduce web server's load.</p>
<p>In the debug build you'll do not care about network, but you'll want to have your original source code intact: all modern browsers have debug console were errors are reported and in case of runtime error it's better to see your own code than some hyper-crunched nonsense.</p>
<p>Speaking of concatenation keep in mind that you may need to control the order files are appended to each other as former can define some rules, functions and variables used in latter.</p>
<p>To control the order of concatenation and set of files to concatenate we end up with creating a sort of "project files" with .cssproj extension for CSS output and .jsproj extension for JavaScript code. Each project file results to a single output file and lists one source file per line such as:</p>
<p><span style="font-family: Courier New;">compat.js      <br />jquery/jquery.js       <br />jquery/jquery-ui.js       <br />fs/fs.namespace.js       <br />fs/fs.datepicker.js       <br />fs/fs.colorpicker.js       <br />fs/fs.cssresize.js</span></p>
<p>In debug build each file should be validated and the output file contains "include" directives of original source files (via CSS @import directive or via document.write("&lt;script …&gt;") calls). To avoid filename clash, we name output file as "projectname.debug.js" (or.css, depending on project type). In production build the output files contain minified and concatenated content of each file listed in the project file, the output is "projectname.min.js". Site code is referencing either .debug or .min version of the output depending on build switches.</p>
<p>Ideally, in debug build any changed JS/CSS file should be re-validated. The output file should be re-generated only if the project file was changed, since output file does not contain source code content. In production build output file should be regenerated if the project file or any of the files listed in the project were changed. Yet, ideal implementation would require extra efforts. Since minification assumes validation as well, in a build process we do not differentiate between debug and production builds and produce both .debug and .min version of the files. Moreover, we trigger rebuild if ANY (not necessary those listed in the project) of .js or .css files were changed; we spend more time working on server code and few extra seconds of build time is the price we ready to pay.</p>
<p>Finally, while there is a special AjaxMin task for MSBuild we have decided to use command line version of the tool since it produces error reports in better format (as of version 4.23). Since there is nothing special about command line, with a little modification you can easily substitute AjaxMin with your favorite compression tools.</p>
<p>All build definitions are placed in a separate Minify.targets file.</p>
<div style="width: 500px; font: normal 10pt courier new, monospace; white-space: nowrap; overflow: scroll;">
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">Project</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">xmlns</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">http://schemas.microsoft.com/developer/msbuild/2003</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 1;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">ItemGroup</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Label</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">Minifiers</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">JsProject</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Include</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">**\*.jsproj</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;"> /&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">JsFiles</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Include</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">**\*.js</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Exclude</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">**\*.debug.js;**\*-vsdoc.js;**\*.min.js</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;">/&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">CssProject</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Include</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">**\*.cssproj</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;"> /&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">CssFiles</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Include</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">**\*.css</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Exclude</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">**\*.debug.css;**\*.min.css</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;">/&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 1;"><span> </span></span><span>&lt;/</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">ItemGroup</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 1;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">PropertyGroup</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">AjaxMinPath</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"$(MSBuildExtensionsPath32)\..\Microsoft\Microsoft Ajax Minifier\AjaxMin.exe"</span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">AjaxMinPath</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">AjaxMinJsOpts</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">-js</span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">AjaxMinJsOpts</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">AjaxMinCssOpts</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">-css</span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">AjaxMinCssOpts</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">AjaxMinOpts</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">-silent -clobber -term</span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">AjaxMinOpts</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">JsDebugSuffix</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">.debug.js</span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">JsDebugSuffix</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">JsReleaseSuffix</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">.min.js</span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">JsReleaseSuffix</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">CssDebugSuffix</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">.debug.css</span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">CssDebugSuffix</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">CssReleaseSuffix</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">.min.css</span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">CssReleaseSuffix</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 1;"><span> </span></span><span>&lt;/</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">PropertyGroup</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="text-align: left;"><span style="text-align: left; mso-tab-count: 1;"><span style="font-family: Consolas;"><span style="color: #0000ff;"> </span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 1;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">Target</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Name</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">CleanProjects</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">AfterTargets</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">Clean</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">Message</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Text</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">Cleaning .js and .css</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Importance</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">high</span></span><span style="color: #000000;">"</span></span><span style="color: #0000ff;"><span style="text-align: left;"><span><span style="text-align: left; mso-spacerun: yes;"> </span>/&gt;</span></span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">Delete</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Files</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">@(CssProject-&gt;'%(RelativeDir)%(Filename)$(CssDebugSuffix)');@(CssProject-&gt;'%(RelativeDir)%(Filename)$(CssReleaseSuffix)')</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;"> /&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">Delete</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Files</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">@(JsProject-&gt;'%(RelativeDir)%(Filename)$(JsDebugSuffix)');@(JsProject-&gt;'%(RelativeDir)%(Filename)$(JsReleaseSuffix)')</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;"> /&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 1;"><span> </span></span><span>&lt;/</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">Target</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="text-align: left;"><span style="font-family: Consolas;"><span style="color: #000000;"> </span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 1;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">Target</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Name</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">BuildCssProject</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">AfterTargets</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">Compile</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Inputs</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">@(CssProject);@(CssFiles)</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Outputs</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">%(CssProject.RelativeDir)%(CssProject.FileName)$(CssDebugSuffix);%(CssProject.RelativeDir)%(CssProject.FileName)$(CssReleaseSuffix)</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">ReadLinesFromFile</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">File</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">%(CssProject.Identity)</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 3;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">Output</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">TaskParameter</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">Lines</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">ItemName</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">CssLines</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;"> /&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;/</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">ReadLinesFromFile</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">PropertyGroup</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 3;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">CssProjPath0</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">%(CssProject.RelativeDir)</span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">CssProjPath0</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 3;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">CssProjPath</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">$(CssProjPath0)</span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">CssProjPath</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 3;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">CssOutFileName</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">$(CssProjPath)%(CssProject.Filename)</span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">CssOutFileName</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 3;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">CssDebugFile</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">$(CssOutFileName)$(CssDebugSuffix)</span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">CssDebugFile</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 3;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">CssReleaseFile</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">$(CssOutFileName)$(CssReleaseSuffix)</span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">CssReleaseFile</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 3;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">CssImports</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">@(CssLines-&gt;'@import </span><span style="text-align: left;"><span style="color: #ff0000;">&amp;quot;</span></span><span style="color: #000000;">%(Identity)</span><span style="text-align: left;"><span style="color: #ff0000;">&amp;quot;</span></span><span style="color: #000000;">%3B</span><span style="text-align: left;"><span style="color: #ff0000;">&amp;#13;&amp;#10;</span></span><span style="color: #000000;">','')</span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">CssImports</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 3;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">CssInFiles</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">@(CssLines-&gt;'$(CssProjPath)%(Identity)',' ')</span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">CssInFiles</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;/</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">PropertyGroup</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">Message</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Text</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">%(CssProject.Identity)</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Importance</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">high</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;">/&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">WriteLinesToFile</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">File</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">$(CssDebugFile)</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Lines</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">$(CssImports)</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Overwrite</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">true</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;"> /&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">Exec</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Command</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">$(AjaxMinPath) $(AjaxMinCssOpts) $(AjaxMinOpts) $(CssInFiles) -out $(CssReleaseFile)</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;"> /&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 1;"><span> </span></span><span>&lt;/</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">Target</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="text-align: left;"><span style="text-align: left; mso-tab-count: 1;"><span style="font-family: Consolas;"><span style="color: #0000ff;"> </span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 1;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">Target</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Name</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">BuildJsProject</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">AfterTargets</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">Compile</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Inputs</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">@(JsProject);@(JsFiles)</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Outputs</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">%(JsProject.RelativeDir)%(JsProject.FileName)$(JsDebugSuffix);%(JsProject.RelativeDir)%(JsProject.FileName)$(JsReleaseSuffix)</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">ReadLinesFromFile</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">File</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">%(JsProject.Identity)</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 3;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">Output</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">TaskParameter</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">Lines</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">ItemName</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">JsLines</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;"> /&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;/</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">ReadLinesFromFile</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">PropertyGroup</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 3;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">JsProjPath0</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">%(JsProject.RelativeDir)</span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">JsProjPath0</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 3;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">JsProjPath</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">$(JsProjPath0)</span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">JsProjPath</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 3;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">JsOutFileName</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">$(JsProjPath)%(JsProject.Filename)</span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">JsOutFileName</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 3;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">JsDebugFile</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">$(JsOutFileName)$(JsDebugSuffix)</span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">JsDebugFile</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 3;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">JsReleaseFile</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">$(JsOutFileName)$(JsReleaseSuffix)</span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">JsReleaseFile</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 3;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">JsImports</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">(function(d){</span><span style="text-align: left;"><span style="color: #ff0000;">&amp;#13;&amp;#10;</span></span><span style="color: #000000;">@(JsLines-&gt;'d.write(</span><span style="text-align: left;"><span style="color: #ff0000;">&amp;quot;&amp;lt;</span></span><span style="color: #000000;">script src=\</span><span style="text-align: left;"><span style="color: #ff0000;">&amp;quot;&amp;quot;</span></span><span style="color: #000000;">+gRootURL+</span><span style="text-align: left;"><span style="color: #ff0000;">&amp;quot;</span></span><span style="color: #000000;">/$(JsProjPath)/%(Identity)\</span><span style="text-align: left;"><span style="color: #ff0000;">&amp;quot;&amp;gt;&amp;lt;</span></span><span style="color: #000000;">\/script</span><span style="text-align: left;"><span style="color: #ff0000;">&amp;gt;&amp;quot;</span></span><span style="color: #000000;">)%3B','</span><span style="text-align: left;"><span style="color: #ff0000;">&amp;#13;&amp;#10;</span></span><span style="color: #000000;">')</span><span style="text-align: left;"><span style="color: #ff0000;">&amp;#13;&amp;#10;</span></span><span style="color: #000000;">})(document)%3B</span><span style="text-align: left;"><span style="color: #ff0000;">&amp;#13;&amp;#10;</span></span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">JsImports</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 3;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">JsInFiles</span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">@(JsLines-&gt;'$(JsProjPath)%(Identity)',' ')</span><span style="text-align: left;"><span style="color: #0000ff;">&lt;/</span></span><span style="text-align: left;"><span style="color: #a31515;">JsInFiles</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;/</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">PropertyGroup</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">Message</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Text</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">%(JsProject.Identity)</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Importance</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">high</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;">/&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">WriteLinesToFile</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">File</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">$(JsDebugFile)</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Lines</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">$(JsImports)</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Overwrite</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">true</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;"> /&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 2;"><span> </span></span><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">Exec</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Command</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">$(AjaxMinPath) $(AjaxMinJsOpts) $(AjaxMinOpts) $(JsInFiles) -out $(JsReleaseFile)</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;"> /&gt;</span></span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span style="text-align: left; mso-tab-count: 1;"><span> </span></span><span>&lt;/</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">Target</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span>&lt;/</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">Project</span></span></span><span style="text-align: left;"><span style="color: #0000ff;">&gt;</span></span></span></p>
</div>
<p>Import this file to your project file as</p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: Consolas;"><span style="text-align: left;"><span style="color: #0000ff;"><span>&lt;</span></span></span><span><span style="text-align: left;"><span style="color: #a31515;">Import</span></span><span style="text-align: left;"><span style="color: #0000ff;"> </span></span><span style="text-align: left;"><span style="color: #ff0000;">Project</span></span><span style="text-align: left;"><span style="color: #0000ff;">=</span></span></span><span style="text-align: left;"><span><span style="color: #000000;">"</span><span style="text-align: left;"><span style="color: #0000ff;">Properties/Minify.targets</span></span><span style="color: #000000;">"</span></span><span style="text-align: left;"><span style="color: #0000ff;"> /&gt;</span></span></span></span></p>
<p>and enjoy!</p></div>
</content>



    </entry>
 
</feed><!-- ph=1 -->

