{"version":3,"sources":["webpack://ipfw/./app/javascript/packs/application.js","webpack://ipfw/./app/javascript/packs/common/message_attachment.js","webpack://ipfw/./app/javascript/packs/common/toastr.js","webpack://ipfw/./app/javascript/packs/order.js","webpack://ipfw/./app/javascript/packs/trademark.js"],"names":["Rails","Turbolinks","global","$","jQuery","document","on","datepicker","format","language","autoclose","maxViewMode","this","is","removeClass","addClass","change","formData","FormData","each","files","i","file","append","ajax","url","type","headers","attr","data","dataType","contentType","processData","success","res","content","toastr","require","btn","getElementById","addEventListener","e","error","errorMessages","val","push","alert","join","preventDefault","forms","submit","fileinput","showUpload","showBrowse","showRemove","showCaption","showPreview","allowedPreviewMimeTypes","previewFileType","allowedFileExtensions","browseOnZoneClick","fileActionSettings","showZoom","dropZoneTitle","dropZoneClickTitle","msgProcessing","msgPlaceholder","initialPreviewShowDelete","value","allTmClassesDivisions","console","log","JSON","stringify","renderCountAndTotal","selectedTmClassList","selectedTmDivisionList","totalCost","selectedClassCount","parseInt","length","selectedDivisionCount","selectedTmClassCountElement","querySelector","innerText","selectedTmDivisionCountElement","needResearch","selectedCount","additionalTotalCount","totalCostWithoutTax","calcTotalCost","tmClass","forEach","division","category","additionalTotal","additionalTmDivision","totalCostElement","toLocaleString","addDivisionElement","classElement","trademarkClass","click","nodes","querySelectorAll","divisionElement","tmDivision","name","setAttribute","id","removeListById","list","targetId","some","v","splice","checkedItem","isAlreadySelectedTmClass","tmClassListElement","tmDivisionListElement","parse","event","insertedItem","debug","getAttribute","_","category_index","removed_item","tmClassInput","tmClassId","clear_tm_division_checkbox","get_cache_tm_division","setTimeout","remove","allTmClasses","allTmDivisions","htmlText","filter","item","toString","find","isSelectTmDivision","selectedDvision","html","add_event_to_tm_division_checkbox","tmDivisionInput","checked","concat"],"mappings":"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","file":"js/application-9a77595ef9d08d1b47e3.js","sourcesContent":["import Rails from \"rails-ujs\";\nRails.start();\n\nimport Turbolinks from \"turbolinks\";\nTurbolinks.start();\nimport 'bootstrap-datepicker';\nimport 'bootstrap-datepicker/js/locales/bootstrap-datepicker.ja'\n\n// JS\nimport 'jquery';\nglobal.$ = global.jQuery = jQuery\nwindow.$ = window.jQuery = jQuery\n\n// CSS\nimport \"../src/application.scss\";\n\n// js\nimport './trademark';\nimport './order';\nimport './common/message_attachment';\n\n//\n// common behaviors\n//\nimport './common/toastr';\n\n// 日付選択フィールドでカレンダーを表示する\n$(document).on('turbolinks:load', function() {\n $('.form-control-datepicker').datepicker({\n format: \"yyyy-mm-dd\",\n language: 'ja',\n autoclose: true,\n maxViewMode: 'days'\n })\n})\n\n//\n// プロフィール編集画面でパスワードを変更するかどうかのチェックボックスで\n// 入力フォームの表示を切り替える\n//\n$(document).on(\"turbolinks:load\", function() {\n $(\".change-password\").on(\"change\", function() {\n if ($(this).is(\":checked\")) {\n $(\".form-group-password\").removeClass(\"d-none\");\n } else {\n $(\".form-group-password\").addClass(\"d-none\");\n }\n });\n});\n","$(document).on(\"turbolinks:load\", () => {\n\n // メッセージの添付とプレビュー(message_type = normal)\n $('#btn_upload_message_attachments.js_message_type_normal').change(function() {\n var formData;\n formData = new FormData();\n $.each(this.files, function(i, file) {\n return formData.append('attachments[]', file);\n });\n return $.ajax({\n url: '/message_attachments/upload',\n type: 'POST',\n headers: {\n 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content')\n },\n data: formData,\n dataType: \"JSON\",\n contentType: false,\n processData: false,\n success: function(res) {\n return $('#message_attachments_wrap.normal').append(res.content);\n }\n });\n });\n\n // メッセージの添付とプレビュー(message_type = internal_memo)\n $('#btn_upload_message_attachments.js_message_type_internal_memo').change(function() {\n var formData;\n formData = new FormData();\n $.each(this.files, function(i, file) {\n return formData.append('attachments[]', file);\n });\n return $.ajax({\n url: '/message_attachments/upload',\n type: 'POST',\n headers: {\n 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content')\n },\n data: formData,\n dataType: \"JSON\",\n contentType: false,\n processData: false,\n success: function(res) {\n return $('#message_attachments_wrap.internal_memo').append(res.content);\n }\n });\n });\n});\n","// toastr\nimport toastr from 'toastr';\ntoastr.options = {\n \"closeButton\": false,\n \"debug\": false,\n \"newestOnTop\": false,\n \"progressBar\": false,\n \"positionClass\": \"toast-top-center\",\n \"preventDuplicates\": false,\n \"onclick\": null,\n \"showDuration\": \"300\",\n \"hideDuration\": \"1000\",\n \"timeOut\": \"5000\",\n \"extendedTimeOut\": \"1000\",\n \"showEasing\": \"swing\",\n \"hideEasing\": \"linear\",\n \"showMethod\": \"fadeIn\",\n \"hideMethod\": \"fadeOut\"\n}\nglobal.toastr = toastr;\n","// JS\nrequire('jquery');\n\n//\n// ファイル選択フィールドをBootstrap風にする\n//\n$(document).on('turbolinks:load', () => {\n const btn = document.getElementById('order-payment-form-btn');\n if (!btn) return;\n\n // console.debug(`STRIPE_PUBLIC_KEY: ${btn.getAttribute('data-pubKey')}`);\n\n\t// const handler = StripeCheckout.configure({\n // //StripeのAPIキーを引っ張ってくる\n // key: btn.getAttribute('data-pubKey'),\n // locale: 'jp', //言語の設定(autoの場合、ユーザのブラウザ規定言語が呼び出される)\n // currency: 'jpy',\n // // image: \"images/logo/logo.gif\", // もしstripe checkoutのフォーム上部に画像を入れたい場合はここで指定する\n // panelLabel: \"{{amount}}のお支払い\", //checkoutボタンの表示文字、{{amount}}の中に金額が入る\n // allowRememberMe: true, //RememberMeを使いたい場合はここをtrueにする\n // token: function(token, arg) { //ここでstripeTokenとstripeEmailに値を入れてsubmitする\n // console.debug('token:', token);\n // console.debug('arg:', arg);\n\n // document.getElementById('stripe_token').value = token.id;\n\n // document.forms[0].submit();\n // }\n // });\n\n //Stripe Checkoutのフォームに表示される情報をここで指定する\n btn.addEventListener('click', function (e) {\n let error = false;\n let errorMessages = [];\n\n // modalのあとにsubmit(validation)が走ってしまうためjsで事前にvalidationチェックをする\n // 出願人チェック\n if($('select[id=order_applicant_id]').val() == ''){\n error = true;\n errorMessages.push('出願人を選択してください。');\n }\n\n // 契約書に同意チェック\n if(!$('input[id=order_agreement]').is(':checked')){\n error = true;\n errorMessages.push('契約書に同意してください。');\n }\n\n if(error) {\n alert(errorMessages.join('\\n'));\n e.preventDefault();\n return\n }\n\n // 請求書払いだったらstripe modalを表示しない\n const isBill = $(\"#order_payment_method_bill\").is(\":checked\")\n if (isBill) {\n e.preventDefault();\n document.forms[0].submit();\n return\n }\n\n // handler.open({\n // email: this.getAttribute('data-email'),\n // name: 'IP FORWARD商標出願サービス費用',\n // description: 'お支払いを完了してください',\n // amount: btn.getAttribute('data-amount'),\n // });\n\n // e.preventDefault();\n })\n})\n","// JS\nrequire('jquery');\nimport \"bootstrap/dist/js/bootstrap\";\nimport 'bootstrap-fileinput/js/fileinput';\nimport 'bootstrap-fileinput/js/locales/ja';\nimport '@nathanvda/cocoon';\n\n//\n// ファイル選択フィールドをBootstrap風にする\n//\n$(document).on('turbolinks:load', () => {\n $('input[type=\"file\"].custom_fileinput').fileinput({\n showUpload: false,\n showBrowse: false,\n showRemove: false,\n showCaption: false,\n showPreview: true,\n allowedPreviewMimeTypes: false,\n previewFileType: null,\n language: 'ja',\n allowedFileExtensions: ['gif', 'png', 'jpg', 'jpeg'],\n browseOnZoneClick: true,\n fileActionSettings: {\n showZoom: false,\n },\n dropZoneTitle: 'ここにファイルをドラッグ & ドロップ',\n dropZoneClickTitle: '
(もしくはクリックしてファイルを選択)',\n msgProcessing: 'ファイルを選択中',\n msgPlaceholder: '',\n initialPreviewShowDelete: false,\n })\n})\n\n$(document).on(\"turbolinks:load\", function() {\n // 在 Tab 切换时设置隐藏表单项目的值\n $(\".nav-tabs li a\").on(\"click\", function() {\n var tabId = $(this).attr(\"href\"); // 获取当前 Tab 的 ID\n var value = $(this).data(\"hidden-value\"); // 从 data 属性中获取需要设置的值\n // 设置隐藏表单项目的值\n $(\"#trademark-category\").val(value);\n });\n});\n\nlet allTmClassesDivisions = {}\nconst get_tm_classes_and_divisions = ()=>{\n return $.ajax({\n url: '/trademarks/get_tm_classes_and_divisions',\n type: 'GET',\n headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n // data: {\n // tmClassId: tmClassId,\n // selectedTmDivisionIds: selectedTmDivisionList.map(l => l['id'])\n // },\n success: function(res) {\n // console.log(`success: ${JSON.stringify(res)}`)\n allTmClassesDivisions = res\n // console.log(allTmDivisions)\n // // 生成されたtmDivisionチェックボックスにイベントを設定する\n // const tmDivisionInTmClassElement = document.querySelector(`.tm_division-in-tm_class_${tmClassId}`)\n // if (tmDivisionInTmClassElement) add_event_to_tm_division_checkbox(tmClassId)\n },\n error: function(res) {\n console.log(`error: ${JSON.stringify(res)}`)\n }\n });\n}\nget_tm_classes_and_divisions()\n\n// 出願目安金額 + 追加費用\nconst calcTotalCost = (selectedCount,additionalTotalCount,needResearch) => {\n if(selectedCount == 0) return 0\n\n // 調査費用: 20,000円\n const characterResearchCost = 20000 * selectedCount * (needResearch?1:0)\n\n // 出願費用(基礎): 40,000円\n const basicApplicationCost = 40000 * selectedCount\n\n // 実費(官費等): 6,000円\n const actualApplicationCost = 6000 * selectedCount\n\n // 追加費用(1商標1区分あたり、指定商品が11以上だったら11個目から1個ごとに640円)\n const additionalCost = 640 * additionalTotalCount\n\n // 小計(消費税以外)\n const totalCostWithoutTax = characterResearchCost + basicApplicationCost + actualApplicationCost + additionalCost\n\n // 消費税(10%):\n const consumptionTax = totalCostWithoutTax * 0.1\n\n // 小計(消費税込み)\n const totalCostIncludedTax = totalCostWithoutTax + consumptionTax\n\n return totalCostIncludedTax\n};\n\n/**\n * 追加費用のdivision情報数を計算する\n * @param {Array.} selectedTmDivisionList division情報が付加された配列\n */\nconst additionalTmDivision = (selectedTmDivisionList) => {\n let tmClass = {}\n selectedTmDivisionList.forEach((division)=>{\n if (division.category in tmClass){\n tmClass[division.category] = tmClass[division.category] + 1\n }else{\n tmClass[division.category] = 1\n }\n })\n let additionalTotal = 0\n for (let category in tmClass){\n let additionalCount = tmClass[category] -10 > 0 ? tmClass[category] -10 :0\n additionalTotal = additionalTotal + additionalCount\n }\n return additionalTotal\n}\n\n/**\n * 区分数/指定商品数と出願目安金額の表示\n * @param {Array.} selectedTmClassList class情報が付加された配列\n * @param {Array.} selectedTmDivisionList division情報が付加された配列\n */\nconst renderCountAndTotal = (selectedTmClassList, selectedTmDivisionList) => {\n let totalCost = 0\n const selectedClassCount = parseInt(selectedTmClassList.length, 10);\n const selectedDivisionCount = parseInt(selectedTmDivisionList.length, 10);\n\n // 区分数\n const selectedTmClassCountElement = document.querySelector('#selected_unique_tm_class_count')\n if (selectedTmClassCountElement) selectedTmClassCountElement.innerText = selectedClassCount\n\n // 指定商品数\n const selectedTmDivisionCountElement = document.querySelector('#selected_tm_division_count')\n if (selectedTmDivisionCountElement) selectedTmDivisionCountElement.innerText = selectedDivisionCount\n\n // 調査希望\n const needResearch = $(\"#need_research\").is(\":checked\");\n\n // 出願目安金額 + 追加費用\n let additionalTotalCount = additionalTmDivision(selectedTmDivisionList)\n totalCost = calcTotalCost(selectedClassCount,additionalTotalCount,needResearch)\n $(\"#trademark_total_cost\").attr(\"data-trademark-total-cost\", totalCost);\n const totalCostElement = document.querySelector('#trademark_total_cost')\n if (totalCostElement) totalCostElement.innerText = totalCost.toLocaleString();\n}\n\n/**\n * 指定商品の情報追加\n * @param {Element} classElement 追加するべき指定商品の上位にあるClass element\n * @param {Object} trademarkClass 追加情報の入ったObject\n */\nconst addDivisionElement = (classElement, trademarkClass) => {\n // class配下のdivisionのfieldを追加しておく\n classElement.querySelector('.trademark_division_add_fields').click();\n\n // 追加された最後のdivisionを取得\n const nodes = classElement.querySelectorAll('.nested-fields');\n const divisionElement = nodes[nodes.length- 1];\n\n // 各情報を追加\n divisionElement.querySelector('.tm-division-name').innerText = trademarkClass.tmDivision.name;\n divisionElement.setAttribute('data-record-division-id', `${trademarkClass.tmDivision.id}`);\n divisionElement.querySelector('.form-tm-division-id').value = trademarkClass.tmDivision.id;\n}\n\n/**\n * リストから指定されたIDの要素を削除する\n * @param {Array} list 対象のリスト\n * @param {Integer} targetId 削除するためのid\n */\nconst removeListById = (list, targetId) => {\n list.some((v, i) => {\n if (v.id == targetId) {\n list.splice(i,1);\n return true;\n }\n });\n}\n\nlet checkedItem = {};\nlet selectedTmClassList = []\nlet selectedTmDivisionList = []\nlet isAlreadySelectedTmClass = false // 既に選択済みclassか\n\n$(document).on(\"turbolinks:load\", () => {\n // 区分数(重複なし) / 指定商品と目安金額の算出\n const tmClassListElement = $(\"#selected_unique_tm_class_count\").attr(\"data-selected-unique-tm-class-list\")\n const tmDivisionListElement = $(\"#selected_tm_division_count\").attr(\"data-selected-tm-division-list\")\n if (tmClassListElement) selectedTmClassList = JSON.parse(tmClassListElement);\n if (tmDivisionListElement) selectedTmDivisionList = JSON.parse(tmDivisionListElement);\n renderCountAndTotal(selectedTmClassList, selectedTmDivisionList)\n\n $('#trademark-classes > :not(:has(#trademark-divisions))')\n .on('cocoon:before-insert', (event, insertedItem) => {\n console.debug('#trademark-classes cocoon:before-insert called');\n insertedItem[0].setAttribute('trademark-class', JSON.stringify(checkedItem));\n\n // 既に同classが選択されていたら新しいfieldは追加せず既存のfieldにdivisonを追加していく\n if (isAlreadySelectedTmClass) {\n event.preventDefault();\n const trademarkClass = JSON.parse(insertedItem[0].getAttribute('trademark-class'));\n const classElement = document.querySelector(`.nested-fields[data-record-class-id=\"${trademarkClass.tmClass.id}\"]:not([style*=\"display: none\"])`);\n\n // divisionの追加\n addDivisionElement(classElement, trademarkClass)\n }\n })\n .on('cocoon:after-insert', (_, insertedItem) => {\n console.debug('#trademark-classes cocoon:after-insert called');\n const trademarkClass = JSON.parse(insertedItem[0].getAttribute('trademark-class'));\n\n // JS経由で値が追加された場合に選択されたテキスト情報とform情報を反映\n insertedItem[0].querySelector('.tm-class-category-index').innerText = trademarkClass.tmClass.category_index;\n insertedItem[0].querySelector('.tm-class-name').innerText = trademarkClass.tmClass.name;\n insertedItem[0].setAttribute('data-record-class-id', `${trademarkClass.tmClass.id}`);\n insertedItem[0].querySelector('.form-tm-class-id').value = trademarkClass.tmClass.id;\n\n // divisionの追加\n addDivisionElement(insertedItem[0], trademarkClass)\n });\n\n $('#trademark-classes')\n .on('cocoon:after-remove', (e, removed_item) => {\n console.debug('#trademark-divisions cocoon:after-remove called');\n const classElement = document.querySelector(`.nested-fields[data-record-class-id=\"${checkedItem.tmClass.id}\"]:not([style*=\"display: none\"]`);\n if (classElement === null) return\n\n // 選択したdivisionも削除\n removeListById(selectedTmDivisionList, checkedItem.tmDivision.id)\n renderCountAndTotal(selectedTmClassList, selectedTmDivisionList)\n\n const divisionElement = classElement.querySelector('.nested-fields:not([style*=\"display: none\"])');\n if (divisionElement !== null) return\n\n // 全てのdivisionがなくなったらclassもremoveする\n classElement.querySelector('.trademark_class-close').click();\n\n // 選択したclassも削除\n removeListById(selectedTmClassList, checkedItem.tmClass.id)\n renderCountAndTotal(selectedTmClassList, selectedTmDivisionList)\n });\n\n document.querySelectorAll('.tm_class-check-input').forEach(tmClassInput => {\n // 区分を選択したときに\n tmClassInput.addEventListener('click', function() {\n const tmClassId = this.value;\n // console.log(`tmClassInput click: ${JSON.stringify(tmClassId)}`)\n clear_tm_division_checkbox()\n const success = get_cache_tm_division(tmClassId)\n if (!success){\n setTimeout(() => {\n get_cache_tm_division(tmClassId)\n }, 2000);\n }\n });\n });\n});\n\n// tmClassIdの区分以外のチェックボックスを要素ごと消す(d-noneを付与してもチェックボックス自体が多いと重い)\nconst clear_tm_division_checkbox = () => {\n document.querySelectorAll('.tm_division-wrapper:not(.d-none)').forEach(division => {\n division.remove()\n });\n}\n\n// 指定商品を区分ごとに読み込む(非同期処理)\nconst get_cache_tm_division = (tmClassId)=>{\n const allTmClasses = allTmClassesDivisions[\"tm_classes\"]\n const allTmDivisions = allTmClassesDivisions[\"tm_divisions\"]\n if (allTmDivisions && allTmDivisions.length > 0){\n const divisions = allTmDivisions.filter(item=>item[\"tm_class_id\"].toString()==tmClassId.toString())\n let htmlText = ''\n for (var division of divisions){\n const tmClass = allTmClasses.find((item)=>{\n return item[\"id\"].toString() == division[\"tm_class_id\"].toString()\n })\n const isSelectTmDivision = selectedTmDivisionList.find((selectedDvision)=>{\n return selectedDvision['id']==division['id']\n })\n const element = `
\\\n \\\n \\\n
`\n htmlText = htmlText + element\n }\n $(\"#js-tm_divisions\").html(htmlText)\n const tmDivisionInTmClassElement = document.querySelector(`.tm_division-in-tm_class_${tmClassId}`)\n if (tmDivisionInTmClassElement) add_event_to_tm_division_checkbox(tmClassId)\n return true\n }else{\n return false\n }\n}\n\nconst get_tm_division = (tmClassId) => {\n return $.ajax({\n url: '/trademarks/get_tm_divisions',\n type: 'GET',\n headers: { 'X-CSRF-Token': $('meta[name=\"csrf-token\"]').attr('content') },\n data: {\n tmClassId: tmClassId,\n selectedTmDivisionIds: selectedTmDivisionList.map(l => l['id'])\n },\n success: function(res) {\n // console.log(`success: ${res}`)\n // 生成されたtmDivisionチェックボックスにイベントを設定する\n const tmDivisionInTmClassElement = document.querySelector(`.tm_division-in-tm_class_${tmClassId}`)\n if (tmDivisionInTmClassElement) add_event_to_tm_division_checkbox(tmClassId)\n },\n error: function(res) {\n console.log(`error: ${JSON.stringify(res)}`)\n }\n });\n}\n\n// 指定商品のチェックボックスへのイベント設定\nconst add_event_to_tm_division_checkbox = (tmClassId) => {\n document.querySelectorAll(`.tm_division-check-input-in-tm_class_${tmClassId}`).forEach(tmDivisionInput => {\n // console.log(`tm_division-check-input-in-tm_class: ${JSON.stringify(tmClassId)}`)\n tmDivisionInput.addEventListener('click', function() {\n // 指定商品を選択したときに「選択した候補」に表示\n // console.debug('tmDivisionInput:', this.value, this.checked);\n const tmClass = JSON.parse(this.getAttribute('data-tm-class'))\n const tmDivision = JSON.parse(this.getAttribute('data-tm-division'))\n const item = {\n tmClass: tmClass,\n tmDivision: tmDivision,\n };\n checkedItem = { ...item };\n\n if (this.checked) {\n // 選択が追加されたときに「選択した候補」に追加\n // 既にclassが選択していたら追加しない(classは重複しない)\n isAlreadySelectedTmClass = selectedTmClassList.some((v, _) => v.id == item.tmClass.id )\n if (!isAlreadySelectedTmClass) selectedTmClassList = selectedTmClassList.concat(tmClass)\n selectedTmDivisionList = selectedTmDivisionList.concat(tmDivision)\n\n // class/divisionを追加(上記 cocoon:before-insert callbackを起動)\n document.querySelector('.trademark_class_add_fields').click();\n } else {\n // 選択が解除されたときに「選択した候補」から削除\n // divisionを削除(上記 cocoon:after-remove callbackを起動)\n document.querySelector(`.nested-fields[data-record-division-id=\"${item.tmDivision.id}\"]`).querySelector('.remove_fields').click();\n }\n\n renderCountAndTotal(selectedTmClassList, selectedTmDivisionList)\n });\n });\n}\n\n$(document).on(\"turbolinks:load\", function() {\n // 在 Tab 切换时设置隐藏表单项目的值\n $(\"#need_research\").on(\"change\", function(event) {\n renderCountAndTotal(selectedTmClassList, selectedTmDivisionList)\n });\n});\n\n\n"],"sourceRoot":""}