Silicon Hali | City | Halifax, Nova Scotia | THE COAST

Silicon Hali

There’s a digital world in our own backyard, so if you want to buy local, there’s an app for that. Here are the companies manufacturing games and software in Nova Scotia, bringing our tech touch to the global market.

Halifax is over 6,000 kilometres away from the Mecca of the technology world, Silicon Valley—found near San Jose, California. But that doesn't mean we don't produce some amazing digital products right here in the land of beer and boats.

Over the past decade, Nova Scotia has seen a boom of interactive digital media companies due to outside investment and local start-ups.

Jayson Hilchie, director of Information Technology and Interactive Media for Nova Scotia Business Inc., points out that the interactive entertainment industry globally is bigger than both music and the movie industries combined. He says that one factor for the sudden increase, especially in local start-up companies, has been Apple's iOS platform, found on devices such as the iPhone and iPad.

"It's so much easier to create a company where you're making games for iOS or for Android," Google's popular mobile user interface, Hilchie says. "You can create a game with way lower barriers to entry than what it would cost you to make a pure console game, which would take millions of dollars and 12 months to develop."


Silicon Hali
Co-owner Colleen Shannahan

Silverback Productions
Founded 2007
Co-owners Willie Stevenson and Colleen Shannahan
silverbackgames.com

Located in Halifax's north end, Silverback focuses on games for PC, Mac and iOS. Their first big hit, Empress of the Deep, garnered critical acclaim and has sold well on both of Apple's app stores (Mac and iOS). Their studio is expanding as they develop more projects, including a sequel to Empress and several other unique projects.

Silverback's games focus on a mixture of adventure and puzzle with rewarding point-and-click mechanics that harken back to a simpler time. Family-friendly and inexpensive, Silverback's games are fun and accessible.

Games available from Silverback Productions include Mr. Jones' Graveyard Shift (PC and Mac), Empress of the Deep (PC, Mac, iOS), Empress of the Deep 2 (PC, Mac, iOS) and Secrets of the Dragon Wheel (PC, Mac, iOS), with more on the way. 

Silverback's president, Willie Stevenson, says despite its current success, it hasn't always been this easy.

"We kind of fell on our face, and a bunch of really juicy deals we had with companies in California and Manhattan fell through at the last minute because of Lehman Brothers," Stevenson said. "It was a bad day, to put it mildly."

Stevenson says Silverback was able to dig itself out of a hole with the help of a distributor from Moncton called Gogii Games. "[They] said we should focus on these funny little casual games because they were relatively low risk and we could make one for maybe 300 grand and the profits are crazy."

Since then Silverback Productions has been doing extremely well, hiring more staff and expanding into new genres, "sometimes outselling the likes of Bejeweled and Angry Birds in terms of growth revenue," Stevenson says. "It's been awesome."

Software developers in Nova Scotia design video games, mobile applications and other digital products either for their own purposes, or to outside clients. These products are purchased and used both here and all over the world.

"What we're seeing with interactive media is pervasive growth with all of these different sub-sectors," says Hilchie. "You've got a bigger market now. As long as the industry is growing and we've got the talent we're going to see more companies grow here."

(And no offense to web design firms in Halifax—though this area is rich with fantastic designers doing great work—the scale of the industry deserves its own, separate treatment.)


Silicon Hali
L-R: Creative director James Rothenburg, CEO Andrew Wilson and senior project manager Kieran Gillett.

Raised Media
Founded 2005
President Mike Rizkalla, CEO Andrew Wilson
raisedmedia.com

Into social media, interactive websites, apps and more, Raised offers a wide range of products and promotional services for their clients. They focus on the conversation with customers, rather than shoving the brand down people's throats, according to president Mike Rizkalla.

"It's less about talking and more about listening," Rizkalla says. "It's more about cultivating and creating conversations that are not necessarily directly in front of you but just on the outskirts of your brand and product we're helping to promote."

They service clients—including major corporations such as Discovery Channel, HarperCollins and MTV—from a cool office, complete with Xbox 360, Rock Band and couches, located in the heart of Barrington Street.

Raised focuses on getting users to interact within the world of various products, for example, Little Debbie Snacks, which now has over 1 million likes on its Facebook page thanks in part to Raised Media's Million Smile Campaign.

 "It's not something that people would normally gravitate to in social media," Rizkalla says. "It's not a sports team or another person, it's just something you pick up at the grocery store." 

With 18 staff, give or take a few depending on the projects, Raised Media will "go where the people are," Rizkalla says. "If they're on their phones, their computers, in front of their televisions, that's where we are."


HB Studios
Founded 2000
CEO Jeremy Wellard
hb-studios.com 

Despite its location in picturesque Lunenburg—with a smaller office in Halifax—HB Studios has worldwide reach, a huge staff of programmers and deals with major publishers such as Electronic Arts and Atari.

Its first game, Cricket 2002, was made for Electronic Arts and established HB as a major player in the field. The company has developed many blockbuster games through the years, mostly in the sports department. 

Some of its recent games include Rugby: World Cup 2011 (PS3, 360), Madden NFL 12 (Wii, PSP, PS2), Backyard Sports: Rookie Rush (360, Wii, PC) and EA Sports FIFA 12 (Wii). With 33 titles so far and more on the way they have sold 18 million, according to their website.

"The primary company here is HB Studios," says Jayson Hilchie from NSBI. "It still stands as the largest video game studio in all of Canada, between the two studios about 120" people.

One of the ways that HB Studios attracts new hires is by highlighting the different pace of life in Nova Scotia on its website. Hilchie says it's great for staff members, because they enjoy the more relaxing lifestyle here along with the fast-paced work environment.


Xona Games
Founded 2008
Co-owners Jason and Matthew Doucette
xona.com

Independent, retro and just cool, Xona develops some of the most intense shoot-'em-up games available. Founded by brothers Jason and Matthew Doucette, the Yarmouth-based company is quickly building steam as their games continue to win awards and recognition from the industry.

Currently available games include Decimation X (Xbox Live Arcade Indie Games), Decimation X2 (Windows Phone 7), Decimation X3 (XBLA-IG) and Score Rush (XBLA-IG). The price is right, too, at 80 Microsoft points ($1US) a pop, and more are on the way soon.

So far all of Xona's games have won some form of award or recognition from the gaming industry and continue to sell well, especially in Japan.

"We are currently producing Duality ZF, which is scheduled to be released on Xbox Live Arcade, PlayStation Network and be distributed on the PC, likely via Steam or [other platforms]," Jason says. "None of this is set in stone, but that's what we're progressing towards. "


SheepDog Inc.
Founded 2007
CEO Julia Rivard
sheepdoginc.ca

SheepDog Inc. focuses on browser applications especially within the Google ecosystem. It collaborates with two other companies: Norex, which focuses on designing websites, and Dynamic Hosting, which manages web hosting features for companies. The three are located under one roof in Bayers Lake.

 "Whether it's a browser on a computer, or a browser on a smartphone or a native app, we do all of those," says Mark Long, director of custom application development. "About half of our work is local with Halifax companies, the other half is with other software companies mostly in the Silicon Valley area."

Although SheepDog Inc. couldn't disclose many of the apps they developed for their clients, they do have in-house apps they were happy to show off.

One such app is gTrax, a time-tracking tool for service companies. Maybe not as sexy as some applications out there, but certainly useful for businesses.

"We're a young company and we're growing quickly," Long says. "We had a really great year in 2011 and we're looking forward to keeping the train rolling in 2012. Since we started our team has basically doubled in size and continues to grow."

 Long says Halifax is a great place to develop applications because many of the costs are reduced when compared to major tech hubs. "Halifax has a really great talent pool, with programs at Dalhousie, NSCC and others that turn out really high-quality developers. Our team is constantly getting calls from firms in Toronto and even Silicon Valley with job offers."


Silicon Hali
MindSea's Reuben Hall

MindSea 
Founded 2007
Founder Bill Wilson
mindsea.com

Need to get your business on everybody's smartphone? MindSea might just be what you're looking for. Operating from offices on Barrington Street, the team has worked projects from local in-house apps (Transit To Go Halifax) to work for national corporations, including the PostMedia Network.

Reuben Hall works on the user interfaces for MindSea's applications. One of its most successful projects is Pocketbooth: "It's a photo app that emulates the old photo booth experience," he says. "It's a simple concept: four photos on a strip you can print out or share through social networks. We put a lot of effort into replicating the look and feel of the old photo booths using textures like wood grain and metal to make it feel real." 

He's not kidding. The app was featured by Apple in its Best of 2010: Hot Trends in the Photo and Video category. Although Hall could not give a specific number of downloads, he said Pocketbooth has been ranked in the top 25 apps for over a year. The app is available for 99 cents in the App Store.

Locally, MindSea is better known for developing the interactive application that acted like a handheld guide to last year's Nocturne art show. They also developed the Chronicle-Herald's news app.


Silicon Hali
L-R: OWNERS STEPHEN BROWN & DAVID MACULLOCH

Game Radiator 
Founded 2009
CEO Stephen Brown
gameradiator.com 

You may recall coverage of Game Radiator last year when the company launched its first game, Mouse Bros. They're still at it in 2012, with two games released for iOS last month and more to come.

"One is a holiday themed version of Mouse Bros. which we're hoping will help stimulate sales of the full game," says Stephen Brown, the president of Game Radiator. The second game is called Samurai vs. Ninjas, featuring waves of slicing and dicing.

 You can also check out their flagship game Mouse Bros. now on the app store for 99 cents, or if you just want to try it out there is a lite version available free of charge.

Although technically Brown is the president of Game Radiator, he says he feels awkward with the title. "When I'm filling out bank forms I am president," Brown says. "When I'm filling out more casual stuff like a convention registration, I often refer to myself as Code Monkey in the title slot."


Longtail Studios
Founded 2003
Founder Gerard Guillemot
longtailstudios.com 

With branches in Halifax, Charlottetown, Quebec City and New York, Longtail isn't strictly Nova Scotian, but we'll take it. Focusing more on casual/family-centric games, Longtail develops games for the major consoles, Nintendo's DS line and the popular iOS platform.

Founded by Gerard Guillemot, who previously co-founded Ubisoft (one of the largest publishers/developers in the industry), Longtail's vision is to develop strong character driven games.

A few of Longtail's games you can check out: Dance on Broadway (Wii), Gundead Defense (iOS), Best Friends Tonight (DS), and, yes, Grey's Anatomy: The Video Game.

Longtail's website features testimonials from employees to help entice more employees to the region. Testimonial on website includes this one from Dale: "I moved to Halifax from the other side of the country to work at Longtail. It's been a great adventure, and I count myself very lucky to be a part of such a passionate, agile team! I see big things in Longtail's future, and am excited to be a part of it. And being able to see the ocean from where I work ain't bad either!"

 

Colin Chisholm is a freelance journalist from Halifax. His obsession with technology and video games started at a young age, and The Coast continues to be an enabler.

') let lineHeight = jQuery('[line-height-check]').get(0).clientHeight; jQuery('[line-height-check]').remove() if (jQuery(element).prop('tagName').match(/HIDDEN/i) !== null) { jQuery(element).children('div').last().css({ marginBottom: `${lineHeight*2}px` }); } else { jQuery(element).css({ marginTop: `${lineHeight*2}px`, marginBottom: `${lineHeight}px` }); } // const insertionBlockClass = `fdn-paragraph-insertion-block`; const styleElementHook = `fdn-paragraph-insertion-styles`; jQuery(element).addClass(insertionBlockClass); if (jQuery(`[${styleElementHook}]`).length === 0) { jQuery('div.fdn-content-body, div #storyBody').append('
 
') const paragraphLineHeight = jQuery('[line-height-check]').get(0).clientHeight; jQuery('[line-height-check]').remove() const styleElement = jQuery(``); const styleText = ` div.fdn-content-body br+.${insertionBlockClass}:not([hidden]), div #storyBody br+.${insertionBlockClass}:not([hidden]) { margin-top: ${paragraphLineHeight*2}px; margin-bottom: ${paragraphLineHeight}px; } div.fdn-content-body br+.${insertionBlockClass}[hidden] > div:last-of-type, div #storyBody br+.${insertionBlockClass}[hidden] > div:last-of-type { margin-bottom: ${paragraphLineHeight*2}px; } ` styleElement.text(styleText); jQuery('head').append(styleElement); } // } } jQuery(element).insertBefore(this.paragraphEndNodes[index]); } else { console.warn('Foundation.ParagraphTool.insertElemenAt: invalid insertion index', index); } } this.insertElemenAtEnd = function (element) { if (this.paragraphEndNodes.length) { let lastNode = this.getNodeAtIndex(this.paragraphEndNodes.length -1); if (this.isDoubleBrParagraphBreak(lastNode) || this.isBrParagraphBreakBeforeBlockElement(lastNode)) { if (jQuery(element).get(0).tagName.match(/SCRIPT/i) !== null) { jQuery('
').insertAfter(this.paragraphEndNodes[index]); jQuery('
').insertAfter(this.paragraphEndNodes[index]); } else { jQuery('div.fdn-content-body, div #storyBody').append('
 
') let lineHeight = jQuery('[line-height-check]').get(0).clientHeight; jQuery('[line-height-check]').remove() if (jQuery(element).prop('tagName').match(/HIDDEN/i) !== null) { jQuery(element).children('div').last().css({ marginBottom: `${lineHeight*2}px` }); } else { jQuery(element).css({ marginTop: `${lineHeight*2}px`, marginBottom: `${lineHeight}px` }); } } } } this.bodyContainer.append(element); } this.getNodeAtIndex = function (index) { return this.paragraphEndNodes[index]; } }
`); } var paragraphCount = myParagraphTool.getParagraphEndNodeCount(); // No need to insert if there aren't enough paragaphs if (paragraphCount >= parseInt(item.requiredCountToDisplay)) { // Matches specific paragraph insertion indexes if (item.insertPoint.match(/^\d+$/) !== null) { var insertIndex = parseInt(item.insertPoint) - 1; // Insert within content if (insertIndex { const insertionPointPlaceholder = jQuery(`
Insertion point ${index+1}
`) myParagraphTool.insertElemenAtIndex(insertionPointPlaceholder, index); }); return 'Paragraph insertion placeholders applied.'; }
Comments (8)
Add a Comment
'); } else if (jQuery(this).attr("id") == "sortSelect"){ jQuery("#comments [uk-spinner]").show(); } var url = "/news-opinion/silicon-hali-2855901"; var myStart = jQuery(this).attr("id") == "sortSelect" ? "1" : jQuery(this).attr("rel"); var showAllComments = jQuery(this).attr("id") == "showAllComments" ? "yes" : "no"; if (!myStart) var myStart = "1"; var mySort = jQuery("#sortSelect").val() || "desc"; /* commented out to prevent jacking up HTML / JS syntax highlighting */ var params = { sort: mySort, ajaxComponent: componentId, startIndex: myStart, cb: commentCB(), showAll: showAllComments }; jQuery.ajax({ url: commentComponentUrl, data: (params), dataType: 'json', success: function (data) { jQuery("#"+componentId+"_PaginationBottom").remove(); jQuery("#"+componentId+"_commentContent .brandNewComment").remove(); jQuery("#comments [uk-spinner]").hide(); if (data.nocomments == false) { jQuery('.fdn-comments-header-block').removeClass('uk-hidden') } if (myStart == "1") { jQuery("#"+componentId+"_commentContent") .html(data.html); } else { jQuery("#"+componentId+"_commentContent").append(data.html); } } }); }; function removeEdit(oid){ if (oid){ jQuery("#comments-comment-" + oid + " .brandNewComment .newCommentOptions") .fadeOut(function(){ jQuery(this).remove(); }) } } // function getComment(oid, commentLimit){ var url = "/news-opinion/silicon-hali-2855901"; var limitMsg = commentLimit ? "
\r\n\r\n \r\n \r\n Note: As a new member, we appreciate your patience while we review your comment \r\n for community standards before making it live. Thank you for your contribution!\r\n\r\n \r\n \r\n\r\n " : ''; var commentListWrapper = "
    " + ""; if (oid){ var params = { ajaxComponent: componentId, commentOid: oid, cb: commentCB() }; jQuery.ajax({ url: commentComponentUrl, data: (params), success: function (data) { jQuery('span.descriptionWordsLeft').text("0"+" words left.") jQuery('progress.postCommentTextProgress').attr('value','0') function insertNewComment () { // if (jQuery(commentListWrapperSel).length == 0){ jQuery("#"+componentId+"_commentContent") .append(commentListWrapper) } // jQuery(commentListWrapperSel) .append(limitMsg+data) .find(".brandNewComment") .fadeIn(); var reEditTime = 300000 var t=setTimeout(function(){removeEdit(oid)},reEditTime); var progressSel = '#' + componentId + '-comment-' + oid + ' [fdn-comment-edit-options] progress' var timerSel = '#' + componentId + '-comment-' + oid + ' [fdn-edit-timer]' jQuery(progressSel) .attr('max', reEditTime) .attr('value', 0) var countDown = setInterval(function(){ var val = parseInt(jQuery(progressSel).val()) || 0 val = Math.min(reEditTime, val + 1000) var minutes = Math.floor((reEditTime - val) / 1000 / 60 % 10) var seconds = Math.floor((reEditTime - val) / 1000 % 60) .toString().replace(/^\d$/, function(m) { return '0' + m }) jQuery(progressSel).val(val) jQuery(timerSel) .text(minutes + ':' + seconds) if(val >= reEditTime - 1000){ clearInterval(countDown) } },1000) var myTotal = parseInt(jQuery("#comments_total").text(), 10); myTotal++; updateCommentTotals(false,myTotal); } jQuery('.fdn-comments-header-block').removeClass('uk-hidden') insertNewComment() } }); } } function doLikeComment(e){ e.preventDefault(); if (!this.clicked){ var oid = jQuery(this).attr("data-commentOid"); jQuery("#comments #"+oid+"_likeLinks a").addClass("dimmed").css("opacity","0.4").each(function(){this.clicked = true;}); var myCurrentLikes = jQuery("#"+oid+"_rating_likes").html() || 0; var myCurrentDislikes = jQuery("#"+oid+"_rating_dislikes").html() || 0; var thisRating = jQuery(this).attr("rel"); if (thisRating == "Like"){ myCurrentLikes = parseFloat(myCurrentLikes)+1; } else { myCurrentDislikes = parseFloat(myCurrentDislikes)+1; } // var myNewLine = '' + myCurrentLikes + ' like'; // if (myCurrentLikes != 1) { // myNewLine += 's'; // } // myNewLine += ', ' + '' + myCurrentDislikes + ' dislike'; // if (myCurrentDislikes != 1) { // myNewLine += "s"; // } // jQuery("#"+oid+"_rating_sub").html(myNewLine); // jQuery("#"+oid+"_rating_sub").show(); var params = { oid: oid, rating: thisRating, cb: commentCB() }; jQuery.ajax({ url: "/gyrobase/Tools/AjaxLike", type: "POST", data: (params), dataType: 'json', success: function (data) { console.log(data) jQuery("#"+data.oid+"_rating_likes").html(data.rating.likes) jQuery("#"+data.oid+"_rating_dislikes").html(data.rating.dislikes) if (thisRating == "Like"){ jQuery("#comments #"+oid+"_likeLinks a.dislike").removeClass("dimmed").css("opacity","1").each(function(){this.clicked = false;}); } else { jQuery("#comments #"+oid+"_likeLinks a.like").removeClass("dimmed").css("opacity","1").each(function(){this.clicked = false;}); } } }); } } function reportComment(e){ e.preventDefault(); e.stopPropagation(); var oid = jQuery(this).attr("rel"); var elem = jQuery("#"+oid+"_report"); elem.click(function(e){e.stopPropagation();}) if (!elem.is(":visible")){ if (elem.is(":empty")){ var params = { // oid: oid, ajaxComponent: componentId, requestAction: "reportComment", cb: commentCB() }; jQuery.ajax({ url: commentComponentUrl, // componentURL, data: (params), dataType: 'json', success: function (data) { console.log(data) if(data.reportForm.html){ elem.html(data.reportForm.html); UIkit.modal(jQuery('#'+data.reportForm.oid+'_report_modal')) .show(); } } }); } else { UIkit.modal(jQuery('#'+oid+'_report_modal')).show(); } } } function submitReport(e){ var params = jQuery(e).closest("form").serialize()+"&ajaxComponent="+componentId+"&requestAction=reportComment"; jQuery.ajax({ url: commentComponentUrl, // componentURL, type: "POST", data: (params), dataType: 'json', success: function (data) { console.log(data) if(data.reportResult.html){ UIkit.modal(jQuery('#'+data.reportResult.oid+'_report_modal')) .hide(); jQuery('#'+data.reportResult.oid+'_report_result') .html(data.reportResult.html) UIkit.modal(jQuery('#'+data.reportResult.oid+'_report_success_modal')) .show(); setTimeout(function(){ UIkit.modal(jQuery('#'+data.reportResult.oid+'_report_success_modal')) .hide(); }, 2500); } } }) } (function($) { var subscribed=false; function showFollowPanel(e){ e.preventDefault(); myPanel = $(this).parent().next(".togglePanel"); myPanel.fadeIn("fast"); } function doSubscribe(obj){ var myPanel = obj.parent().next(".togglePanel"); myPanel.fadeIn("fast"); if (!subscribed){ var myLink = obj.parent(); var myLoader = myPanel.children(".loading"); var myUpdater = myPanel.children(".ajaxUpdater"); var params = { object: myPanel.attr("data-toolsoid"), macro: myPanel.attr("data-toolsajaxmacro"), url: window.location }; $.ajax({ url: "/gyrobase/Macros/ToolsAjax", data: (params), type: "POST", dataType: "html", success: function (data) { subscribed = true; if (myUpdater){ myUpdater.html(data); myLoader.fadeOut("fast", function(){ myUpdater.fadeIn("fast", function(){ setTimeout(function(){ myPanel.fadeOut("fast"); }, 3000); }); }); } else { myPanel.fadeOut("fast"); } } }); } } function activateSubscribe(e){ e.preventDefault(); var myObj = $(this); var isAuthenticated = Foundation.SessionManager.sharedSessionManager().isAuthenticated(); if (!isAuthenticated){ new Foundation.Login.Dialog({ "feelingShy": false, "callback": function(){doSubscribe(myObj);} }); return false; } else { // Proceed doSubscribe(myObj); } } function deleteComment(e){ e.preventDefault(); var thisComment = $(this); var params = { macro: "deleteComment", comment: thisComment.attr("data-comment") }; $.ajax({ url: "/gyrobase/Macros/ToolsAjax", data: (params), type: "POST", dataType: "html", success: function (data) { thisComment.closest(".brandNewComment").fadeOut("fast", function(){ $(this).remove(); var myTotal = parseInt(jQuery("#comments_total").text(), 10); myTotal--; updateCommentTotals(false,myTotal); }); } }); } function editComment(e){ e.preventDefault(); var thisComment = $(this); var commentCont = thisComment.closest(".brandNewComment").find(".description"); var commentTemp = thisComment.closest(".brandNewComment").find(".commentTemp"); var commentText = commentTemp.html(); var toolbar = thisComment.closest(".brandNewComment").find(".commentToolbar"); commentCont.next(".commentEditCont").remove(); commentCont.after(''); toolbar.fadeOut("fast"); commentCont.fadeOut("fast", function(){ commentCont.next(".commentEditCont").fadeIn("fast", function(){ $(".brandNewComment textarea.expandableBox").autoBoxResize(); $(".brandNewComment textarea.expandableBox").focus(); }); }); } function editCommentSave(e){ e.preventDefault(); var thisComment = $(this); var editCont = thisComment.closest(".commentEditCont"); var commentTemp = thisComment.closest(".brandNewComment").find(".commentTemp"); var newText = thisComment.prevAll("textarea").val(); var toolbar = thisComment.closest(".brandNewComment").find(".commentToolbar"); var params = { macro: "editComment", comment: thisComment.attr("data-comment"), commentText: newText }; $.ajax({ url: "/gyrobase/Macros/ToolsAjax", data: (params), type: "POST", success: function (data) { if (data.error){ $(".editErrorDisplay").html("
  1. "+data.error+"
").fadeIn("fast"); } else if (data.result){ editCont.fadeOut("fast", function(){ $(".editErrorDisplay").hide().html("
    "); editCont.prev(".description").html($.trim(data.result)); commentTemp.html(newText); editCont.prev(".description").fadeIn("fast"); toolbar.fadeIn("fast"); }); } } }); } function editCommentCancel(e){ e.preventDefault(); var editCont = $(this).closest(".commentEditCont"); var toolbar = $(this).closest(".brandNewComment").find(".commentToolbar"); editCont.fadeOut("fast", function(){ $(".editErrorDisplay").hide().html("
      "); editCont.prev(".description").fadeIn("fast"); toolbar.fadeIn("fast"); editCont.remove(); }); } $("#comments").on('click', ".bottomOptionBar a#doSubscribe", activateSubscribe); $("#comments").on('click', ".bottomOptionBar a.togglePanelClose", function(){$(this).parent().fadeOut("fast"); return false;}); $("#comments").on('click', ".brandNewComment a.commentDeleteLink", deleteComment); $("#comments").on('click', ".brandNewComment a.commentEditLink", editComment); $("#comments").on('click', ".brandNewComment a.doneEditLink", editCommentSave); $("#comments").on('click', ".brandNewComment a.cancelEditLink", editCommentCancel); })(jQuery); jQuery(function($){ // var commentWordLimit = 0 if(commentWordLimit > 0){ jQuery('textarea[name=comment]').on('input propertychange',function(){ var originalText = jQuery(this).prop('value') var wordList = originalText.trim().split(/\s+/) var wordsUsed = wordList[0] == "" ? 0 : wordList.length var wordsLeft = Math.max(0,commentWordLimit - wordsUsed) jQuery('span.descriptionWordsLeft').text(wordsLeft+" words left.") jQuery('progress.postCommentTextProgress').val(wordsUsed) if(wordsUsed > commentWordLimit){ // var shortenedMatch = new RegExp("^([^\\s]*\\s+){" + (commentWordLimit-1) + "}[^\\s]{1,10}","gi") var shortenedText = shortenedMatch.exec(originalText)[0] jQuery(this).prop('value', shortenedText) } if(wordsLeft