{"version":3,"sources":["webpack:////tmp/build_822f4d71/app/assets/es6/icmib/votes.js","webpack:////tmp/build_822f4d71/app/assets/es6/icmib/ideas.js","webpack:////tmp/build_822f4d71/app/assets/es6/entries/ideaz.js"],"names":["watchVotes","parent","$","on","handleVoteClick","e","preventDefault","$this","this","toggleClass","find","changeVoteCount","ajax","url","href","success","data","attr","html","count","error","reverseVote","$parent","text","test","parseInt","hasClass","__webpack_require__","r","__webpack_exports__","d","init","$search_form","ICMIB","votes","watchFollows","searchHint","tooltip","delay","show","hide","initSearchAutocomplete","action","type","method","serialize","beforeSend","complete","handleAjaxSearchSuccess","initSingleIdea","$idea","initSearchPage","showSearchHint","hideSearchHint","removeClass","addClass","$search","length","require","window","fn","typeahead","ideas","Bloodhound","datumTokenizer","tokenizers","whitespace","name","queryTokenizer","prefetch","remote","wildcard","dupDetector","remoteMatch","localMatch","clearPrefetchCache","initialize","autoselect","displayKey","source","ttAdapter","closest","submit","bind","catch","oe","get","dataType","$results","$ideas","$reset","title","handleResetClick","hideIdeas","showResults","children","showApplicableResults","toggleVoteOrNew","watchVoteOrNew","append","uploader","findOrCreateUploader","initValidations","common","initTooltips","siblings","form","Promise","all","then","idea_validator","yafov","field","buildErrorMessage","removeErrorMessage","args","scrollTo","errors","position","top"],"mappings":"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","file":"75-ideas-2075230bcb55bd860979.js","sourcesContent":["export function watchVotes(parent) {\n if (parent != null) {\n return $(parent).on('click', '.vote_link', handleVoteClick);\n }\n return $('.vote_link').on('click', handleVoteClick);\n}\n\nfunction handleVoteClick(e) {\n e.preventDefault();\n const $this = $(this);\n $this\n .parent()\n .toggleClass('voted')\n .find('i')\n .toggleClass('upvote downvote');\n changeVoteCount($this);\n $.ajax({\n url: this.href,\n success(data) {\n $this.attr('href', data.href);\n return $this.find('i').html(data.count);\n },\n error() {\n return reverseVote($this);\n },\n });\n return false;\n}\n\nfunction changeVoteCount($this) {\n const $parent = $this.parent();\n let count = $this.find('i').text();\n if (!/^[\\d]+$/.test(count)) {\n return false;\n } // test to see if it's an integer\n count = parseInt(count);\n count = $parent.hasClass('voted') ? count + 1 : count - 1;\n return $this.find('i').text(count);\n}\n\nfunction reverseVote($this) {\n $this\n .parent()\n .toggleClass('voted')\n .find('i')\n .toggleClass('upvote downvote');\n return changeVoteCount($this);\n}\n","export function init() {\n ICMIB.votes.watchVotes('#ideas, #results');\n watchFollows('#ideas, #results');\n searchHint();\n initStatusTooltips();\n initSearchAutocomplete();\n initAjaxSearch();\n}\n\n// ideas/show\nexport function initSingleIdea() {\n const $idea = $('.idea');\n ICMIB.votes.watchVotes($idea);\n watchFollows($idea);\n}\n\n// ideas/search\nexport function initSearchPage() {\n ICMIB.votes.watchVotes('#results');\n watchFollows('#results');\n searchHint();\n initSearchAutocomplete();\n}\n\nfunction searchHint() {\n $('#search')\n .on('focus', showSearchHint)\n .on('blur', hideSearchHint);\n}\n\nfunction showSearchHint() {\n $('#search_hint').removeClass('disappear');\n}\nfunction hideSearchHint() {\n $('#search_hint').addClass('disappear');\n}\n\nfunction initSearchAutocomplete() {\n const $search = $('#search');\n if (!$search.length) {\n return false;\n }\n\n return require.ensure(\n [],\n function() {\n if (!window.$ || !window.$.fn.typeahead) {\n require('../vendor/typeahead');\n }\n\n const ideas = new window.Bloodhound({\n datumTokenizer(d) {\n return window.Bloodhound.tokenizers.whitespace(d.name);\n },\n queryTokenizer: window.Bloodhound.tokenizers.whitespace,\n prefetch: {\n url: $search.data('library-url'),\n },\n remote: {\n url: $search.data('url') + '?search=%QUERY',\n wildcard: '%QUERY',\n },\n dupDetector(remoteMatch, localMatch) {\n return remoteMatch.name === localMatch.name;\n },\n });\n\n ideas.clearPrefetchCache();\n ideas.initialize();\n\n const finder = $search.typeahead(\n { autoselect: true },\n {\n name: 'names',\n displayKey: 'name',\n source: ideas.ttAdapter(),\n }\n );\n\n return finder.on('typeahead:selected', () =>\n $search.closest('form').submit()\n );\n },\n\n 'typeahead'\n );\n}\n\nfunction watchFollows(parent) {\n return $(parent).on('click', '.follow', function(e) {\n e.preventDefault();\n $.get(this.href, { dataType: 'script' });\n return false;\n });\n}\n\nfunction initStatusTooltips() {\n return $('.tip-status').tooltip({ delay: { show: 500, hide: 100 } });\n}\n\n// Ajax search\n\nfunction initAjaxSearch() {\n const $search_form = $('#search_form');\n return $search_form.on('submit', function(e) {\n e.preventDefault();\n $.ajax({\n url: this.action,\n type: this.method,\n data: $search_form.serialize(),\n beforeSend() {},\n complete() {},\n success: handleAjaxSearchSuccess,\n error() {},\n });\n return false;\n });\n}\n\nfunction handleAjaxSearchSuccess(data) {\n const $results = $('#results');\n const $ideas = $('#ideas');\n const $reset = $('', { href: '#ideas', title: 'Reset' })\n .html('×')\n .addClass('close');\n $reset.on('click', handleResetClick);\n\n hideIdeas($ideas);\n\n return ICMIB.delay(250, function() {\n showResults($results, data);\n showApplicableResults($results);\n watchVoteOrNew($results);\n $results.find('.nav').append($reset);\n ICMIB.uploader.findOrCreateUploader($results.find('.mlt_upl'));\n initValidations($results.find('form'));\n return ICMIB.common.initTooltips($results.find('form'));\n });\n}\n\nfunction hideIdeas($ideas) {\n $ideas.addClass('disappear-m');\n return ICMIB.delay(200, () => $ideas.hide());\n}\n\nfunction showIdeas($ideas) {\n $ideas.show();\n return ICMIB.delay(10, () => $ideas.removeClass('disappear-m'));\n}\n\nfunction showResults($results, data) {\n if (data != null) {\n $results.html(data);\n }\n $results.show();\n return ICMIB.delay(10, () => $results.removeClass('disappear-m'));\n}\n\nfunction hideResults($results) {\n $results.addClass('disappear-m');\n return ICMIB.delay(200, () => $results.hide());\n}\n\nfunction watchVoteOrNew($results) {\n // careful with this. This will break if the html changes\n return $results.find('.nav').on('click', 'a:not(.login)', toggleVoteOrNew);\n}\n\nfunction toggleVoteOrNew(e) {\n e.preventDefault();\n const $this = $(this);\n const $hide_target = $(\n $this\n .closest('li')\n .addClass('active')\n .siblings()\n .removeClass('active')\n .find('a')\n .data('target')\n );\n $hide_target.hide();\n const $show_target = $($this.data('target'));\n $show_target.show();\n return false;\n}\n\n// If there are results, show only those. If no results, show only the form\nfunction showApplicableResults($results) {\n if ($results.find('#search-results-ideas').children().length > 0) {\n return $results.find('#new-form').hide();\n } else {\n $results.find('#search-results').hide();\n return $results.find('.box_idea_tabs li').toggleClass('active');\n }\n}\n\nfunction handleResetClick(e) {\n e.preventDefault();\n hideResults($('#results'));\n ICMIB.delay(200, () => showIdeas($('#ideas')));\n return false;\n}\n\n// VALIDATIONS\n\nexport function initValidations(form) {\n import('../legacyValidations').then(() => {\n const idea_validator = $(form).yafov();\n\n idea_validator.on('invalidfound', function(e, error) {\n // Skip validation on file fields\n if (error.field[0].type === 'file') {\n return true;\n }\n return ICMIB.buildErrorMessage(error);\n });\n\n idea_validator.on('validfound', function(e, error) {\n // Skip validation on file fields\n if (error.field[0].type === 'file') {\n return true;\n }\n return ICMIB.removeErrorMessage(error);\n });\n\n idea_validator.on('formvalid', function() {\n return this.submit();\n });\n\n return idea_validator.on('forminvalid', (e, args) =>\n window.scrollTo(0, args.errors[0].field.parent().position().top - 10)\n );\n });\n}\n","import * as votes from '../icmib/votes';\nimport * as ideas from '../icmib/ideas';\n\nICMIB.ideas = ideas;\nICMIB.votes = votes;\n"],"sourceRoot":""}