{"version":3,"sources":["optionIcons.js"],"names":["_","$","document","ready","detect","selectors","lightbox","$placeholders","$vizContainer","isEventFired","fireEvent","get","on","setTimeout","window","print","changeLink","newHref","$self","this","selfHref","attr","href","firstStringSeparator","lastStringSeparator","firstString","lastString","urlIndex","titleIndex","indexOf","length","substring","encodeURIComponent","location","placeholder","ccc","botDetection","Detection","detectBot","multipleChildren","$link","$initialForm","$successForm","$waitingForm","$failureForm","$failureEmailP","$mainForm","$friendEmailAddressBody","components","ui","Colorbox","maxWidth","minWidth","percentageWidth","visibleClass","hiddenClass","onPostSuccess","i","children","eq","remove","createElement","val","each","css","blur","onPostFailure","success","html","Message","data","$inputs","all","input","valid","serialize","ajax","type","url","$addIcons","addClass","removeClass","$removeIcons","show","hide","submit","escape","vizTypeIdContent","parseJSON","vizType","postForm","click","$this","loadingClass","$error","isMap","toLowerCase","startsWith","fetch","then","response","ok","blob","Promise","reject","Error","fileName","navigator","msSaveOrOpenBlob","msSaveBlob","fileURL","URL","createObjectURL","tempLink","target","download","body","appendChild","removeChild"],"mappings":"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","file":"option-icons-generated.js","sourcesContent":["/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n\r\n(function(_) {\r\n \"use strict\";\r\n\r\n $(document).ready(function() {\r\n var detect,\r\n selectors,\r\n lightbox,\r\n $placeholders = $(\".emailLightbox input, .emailLightbox textarea\"),\r\n $vizContainer = $(\"#gmap-container, #data-table-container\"),\r\n isEventFired = false; // flag for manually checking if image download event has fired\r\n\r\n // for the moment, trigger the ondataavailable event for the sake of the IE image download\r\n $vizContainer.on(\"initial-render-complete\", function() {\r\n setTimeout(function() {\r\n fireEvent();\r\n }, 1500);\r\n });\r\n // fire the event in 10 seconds no matter what\r\n setTimeout(function() {\r\n fireEvent();\r\n }, 10000);\r\n\r\n function fireEvent() {\r\n if (isEventFired !== true) {\r\n // fireEvent only works for IE, hence WebBrowser control\r\n if ($vizContainer[0] && $vizContainer[0].fireEvent) {\r\n $vizContainer.get(0).fireEvent(\"ondataavailable\");\r\n }\r\n isEventFired = true;\r\n }\r\n }\r\n\r\n // set up the print button\r\n $(\"#printPage\").on(\"click\", function() {\r\n window.print();\r\n });\r\n\r\n // set up the twitter/FB buttons/links\r\n $(\r\n \".option-icon-link.sprites.icon-share, .option-icon-link.sprites.icon-tweet, .riskrank-tweet, .riskrank-share\"\r\n ).on(\"click mousedown\", function() {\r\n var $self = $(this),\r\n selfHref = $self.attr(\"href\"),\r\n changeLink,\r\n newHref;\r\n\r\n changeLink = function(href, firstStringSeparator, lastStringSeparator) {\r\n var firstString, lastString, urlIndex, titleIndex, stagedHref;\r\n\r\n urlIndex = href.indexOf(firstStringSeparator);\r\n titleIndex = lastStringSeparator\r\n ? href.indexOf(lastStringSeparator)\r\n : href.length;\r\n firstString = href.substring(0, urlIndex);\r\n lastString = href.substring(titleIndex, href.length);\r\n stagedHref =\r\n firstString +\r\n firstStringSeparator +\r\n encodeURIComponent(document.location) +\r\n lastString;\r\n\r\n return stagedHref;\r\n };\r\n\r\n if ($self.attr(\"class\").indexOf(\"share\") > 0) {\r\n // fb link\r\n //newHref = changeLink(selfHref, \"&p[url]=\", \"&p[title]=\");\n return;\r\n }\r\n else {\r\n //twitter link\r\n newHref = changeLink(selfHref, \"&url=\", \"&counturl=\");\r\n }\r\n\r\n $self.attr(\"href\", newHref);\r\n });\r\n\r\n //set up the IE placeholders\r\n $placeholders.placeholder();\r\n\r\n detect = new ccc.botDetection.Detection(\"NonShare\");\r\n detect.detectBot(3000);\r\n\r\n selectors = {\r\n $link: $(\"#emailLink\"),\r\n $initialForm: $(\"#initialEmailForm\"),\r\n $successForm: $(\"#successEmailForm\"),\r\n $waitingForm: $(\"#waitingEmailForm\"),\r\n $failureForm: $(\"#failureEmailForm\"),\r\n $failureEmailP: $(\"#failureEmailP\"),\r\n $mainForm: $(\"#shareEmailForm\"),\r\n $friendEmailAddressBody: $(\"#friendEmailAddressBody\")\r\n };\r\n\r\n // a placeholder flag to resolve conflicts between placeholder and validate plugins\r\n var multipleChildren = false;\r\n /**\r\n * A \"lambda\" that runs after a post is issued successfully.\r\n */\r\n var onPostSuccess = function() {\r\n var i;\r\n\r\n if (multipleChildren === false) {\r\n multipleChildren =\r\n selectors.$friendEmailAddressBody.children().length > 2;\r\n }\r\n\r\n // must manually reset the friends' detail section\r\n if (multipleChildren === true) {\r\n // remove all but the first two children of the tbody element friendEmailAddressBody\r\n for (\r\n i = selectors.$friendEmailAddressBody.children().length;\r\n i >= 2;\r\n i--\r\n ) {\r\n selectors.$friendEmailAddressBody\r\n .children()\r\n .eq(i)\r\n .remove();\r\n }\r\n }\r\n\r\n // make sure the remaining inputs are correctly \"placeholdered\"\r\n if (\r\n !(\"placeholder\" in document.createElement(\"input\")) &&\r\n multipleChildren === true\r\n ) {\r\n $(\"#friendEmailAddressBody input\")\r\n .val(\"\")\r\n .each(function() {\r\n var $self = $(this);\r\n\r\n if ($self.val().length === 0) {\r\n $self.css(\"color\", \"#A9A9BB\");\r\n }\r\n else {\r\n $self.css(\"color\", \"#000000\");\r\n }\r\n });\r\n }\r\n\r\n detect.detectBot(); // reset the detection after the form reset\r\n\r\n $placeholders.blur(); // activate the placeholder\r\n };\r\n /**\r\n * A \"lambda\" that runs after a post fails.\r\n */\r\n var onPostFailure = function(success) {\r\n selectors.$failureEmailP.html(success.Message);\r\n };\r\n\r\n /**\r\n * An instance of the lightbox object.\r\n */\r\n lightbox = new ccc.components.ui.Colorbox(\r\n selectors,\r\n { maxWidth: 800, minWidth: 580, percentageWidth: \"70%\" },\r\n { visibleClass: \"emailLightbox\", hiddenClass: \"no-display\" },\r\n { onPostSuccess: onPostSuccess, onPostFailure: onPostFailure }\r\n );\r\n\r\n // set up the email +/- buttons\r\n /**\r\n * Goes to the server to generate HTML for new friend addresses.\r\n */\r\n selectors.$mainForm.on(\"click\", \".emailLightboxAdd\", function() {\r\n var $inputs = $(\"#friendEmailAddressBody input[type=email]\"),\r\n data,\r\n areInputsValid;\r\n\r\n areInputsValid = _.all($inputs, function(input) {\r\n return $(input).valid();\r\n });\r\n\r\n if (areInputsValid && $inputs.length < 5) {\r\n data = selectors.$mainForm.serialize();\r\n $.ajax({\r\n type: \"POST\",\r\n url: \"/email/AddEmail\",\r\n data: data,\r\n success: function(success) {\r\n var $addIcons, $removeIcons;\r\n\r\n $(\"#friendEmailAddressBody\").html(success);\r\n\r\n // set up the placeholder for the new html\r\n $(\"#friendEmailAddressBody input\")\r\n .each(function() {\r\n $(this).placeholder();\r\n })\r\n .blur();\r\n\r\n if ($inputs.length === 4) {\r\n // make add icon inactive, since you can't add more than 5 friends\r\n $addIcons = $(\"#shareEmailForm .emailLightboxAdd\");\r\n $addIcons.attr(\"src\", \"/images/add_small_inactive.png\");\r\n $addIcons.addClass(\"inactive\");\r\n }\r\n $removeIcons = $(\"#shareEmailForm .emailLightboxRemove\");\r\n // set the src of the add icon to be active\r\n $removeIcons.each(function() {\r\n if ($(this).attr(\"src\") !== \"/images/minus_small.png\") {\r\n $(this).attr(\"src\", \"/images/minus_small.png\");\r\n $(this).removeClass(\"inactive\");\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n /**\r\n * Goes to the server to generate HTML for new friend addresses.\r\n */\r\n selectors.$mainForm.on(\"click\", \".emailLightboxRemove\", function() {\r\n var $inputs = $(\"#friendEmailAddressBody input[type=email]\"),\r\n data;\r\n\r\n if ($inputs.length > 1) {\r\n // something valid to remove\r\n data = selectors.$mainForm.serialize();\r\n $.ajax({\r\n type: \"POST\",\r\n url: \"/email/RemoveEmail\",\r\n data: data,\r\n success: function(success) {\r\n var $removeIcons, $addIcons;\r\n\r\n $(\"#friendEmailAddressBody\").html(success);\r\n\r\n // set up the placeholder for the new html\r\n $(\"#friendEmailAddressBody input\")\r\n .each(function() {\r\n $(this).placeholder();\r\n })\r\n .blur();\r\n\r\n if ($inputs.length === 2) {\r\n // make remove icon inactive again, since we're back down to one\r\n $removeIcons = $(\"#shareEmailForm .emailLightboxRemove\");\r\n $removeIcons.attr(\"src\", \"/images/minus_small_inactive.png\");\r\n $removeIcons.addClass(\"inactive\");\r\n }\r\n $addIcons = $(\"#shareEmailForm .emailLightboxAdd\");\r\n // set the src of the add icon to be active\r\n $addIcons.each(function() {\r\n if ($(this).attr(\"src\") !== \"/images/add_small.png\") {\r\n $(this).attr(\"src\", \"/images/add_small.png\");\r\n $(this).removeClass(\"inactive\");\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n\r\n lightbox.show(\"#emailForm\");\r\n\r\n //Clear data and error messages when closing the box.\r\n $(\"#cboxClose\").on(\"click\", function() {\r\n $(\".field-validation-error\").hide();\r\n $(\"#FullName\").val(\"\");\r\n $(\"#Email\").val(\"\");\r\n $(\"#Comments\").val(\"Check out this data!\");\r\n $(\"#EmailAddresses_0__Email\").val(\"\");\r\n });\r\n\r\n // handle the form submission\r\n selectors.$mainForm.submit(function() {\r\n var data, vizType;\r\n\r\n if ($(this).valid() === false) {\r\n return false;\r\n }\r\n\r\n // add the title of the page to the form data for the email sharing\r\n data =\r\n selectors.$mainForm.serialize() +\r\n \"&title=\" +\r\n $(document).attr(\"title\") +\r\n \"&address=\" +\r\n escape(document.location);\r\n\r\n var vizTypeIdContent = $(\"#vizTypeId\").html();\r\n\r\n if (vizTypeIdContent) {\r\n vizType = $.parseJSON(vizTypeIdContent).vizType;\r\n data += \"&vizType=\" + vizType;\r\n }\r\n\r\n lightbox.postForm(data, \"/email/shareEmail\");\r\n\r\n return false;\r\n });\r\n\r\n /**\r\n * Set up the download image button.\r\n */\r\n $(\"#downloadImage\").click(function() {\r\n var $this = $(this);\r\n var loadingClass = \"icon-download-image-loading\";\r\n $this.removeClass(loadingClass);\r\n $this.addClass(loadingClass);\r\n\r\n var $error = $(\".icon-download-image-error\");\r\n $error.hide();\r\n\r\n\r\n var vizTypeIdContent = $(\"#vizTypeId\").html();\r\n var isMap = false;\r\n if (vizTypeIdContent) {\r\n var vizType = $.parseJSON(vizTypeIdContent).vizType;\r\n if (vizType) {\r\n vizType = vizType.toLowerCase();\r\n isMap = (vizType && vizType.startsWith(\"map\"));\r\n }\r\n }\r\n\r\n var url =\r\n \"/image/generate?width=1200\" +\r\n (isMap ? \"&wait=true\" : \"\") +\r\n \"&url=\" +\r\n encodeURIComponent(window.location.href);\r\n\r\n fetch(url).then(function(response){\r\n $this.removeClass(loadingClass);\r\n if (!response.ok) {\r\n $error.show();\r\n return Promise.reject(new Error(\"Image download failed.\"));\r\n }\r\n\r\n return response.blob();\r\n }).then(function(blob){\r\n var fileName = \"CCC-Image.png\";\r\n if (window.navigator.msSaveOrOpenBlob) {\r\n window.navigator.msSaveBlob(blob, fileName);\r\n }\r\n else {\r\n //trick to download store a file having its URL\r\n var fileURL = URL.createObjectURL(blob);\r\n var tempLink = document.createElement(\"a\");\r\n tempLink.href = fileURL;\r\n tempLink.target = \"_blank\";\r\n tempLink.download = fileName;\r\n document.body.appendChild(tempLink);\r\n tempLink.click();\r\n document.body.removeChild(tempLink);\r\n }\r\n });\r\n });\r\n });\r\n})(_);\r\n"]}