// Imageオブジェクト var img = new Image(); // イメージ関連 var no_image; // イメージ無しフラグ var imageWidth; // イメージ幅 var imageHeight; // イメージ高さ var imageDirection; // イメージの向き 1=横 2=縦 var imageAspectRatio; // イメージの比率 // CANVASサイズ 上限 var maxCanvasWidth = 450; var maxCanvasHeight = 300; // 詳細ダイアログ デフォルト var default_edge_type_id = 900; var default_correct_type_id = 900; var default_retouch_type_id = 900; var default_backing_type_id = 900; // 補正あり var correctPaperFlag = 0; var correct_on_id = 100; // 補正選択可能フラグ var correctSelectAcceptFlag = false; // 退避データ var save_photoName; var save_paperTypes; var save_paperSizes; var save_frameWidth; var save_frameHeight; var save_edgeTypes; var save_correctTypes; var save_retouchTypes; var save_quantity; var save_backingTypes; // ================================================================== // 一覧のクリック // ================================================================== $(document).on('click', '.imageList', function(){ // 行 //var row = $(this).closest('tr').index(); //alert('Row: ' + row); //var selRec = this; var selRec = $(this).parent("tr"); // Imageオブジェクトを生成 //var imgName = $(this).children("td").children(".imageDialog").attr('src'); var imgName = selRec.children("td").children(".imageDialog").attr('src'); img.src = imgName + "?" + new Date().getTime(); // 画像が読み込まれるのを待ってから処理を続行 img.onload = function() { var dialogTitle = "仕上がりイメージの編集"; // 管理者、確定注文の場合はタイトルを変更 if (adminFlg == ADMIN_YES || orderStatusId != PENDING){ dialogTitle = "仕上がりイメージ参照"; } // ダイアログ $("#imageDialog").dialog({ title : dialogTitle, // タイトル modal : true, // ダイアログの下にオーバレイを作成 show : "fade", // 開くアニメーション resizable : false, // サイズの変更 不可 width : "940", // ダイアログの幅 自動 height : "auto", // ダイアログの高さ 自動 open : function() { // ダイアログを変更可に初期化 setDialogDisabled(false); // 管理者、確定注文は登録ボタンを無効化 if (adminFlg == ADMIN_YES || orderStatusId != PENDING){ $('.dialog-regist').button("disable"); } // 詳細データの取得・表示 initDetail( selRec ); }, buttons :[ { text: "登録", class: "middle-button margin-left-small dialog-regist", click: function () { if (confirm('登録します。\nよろしいですか?',"登録")) { registDetail(); $(this).dialog('close'); } else { return false; } } }, { text: "閉じる", class: "middle-button margin-left-small", click: function () { $(this).dialog('close'); } } ], close : function() { // ダイアログ画像を初期化 $("#imageDiv").html(""); } }); } // 画像が読み込めなかった場合の処理 img.onerror = function() { // エラー alert('画像の読み込みが失敗しました!'); } }); // ================================================================== // トリミングサンプルの指定 // ================================================================== $(document).on('change', '#trimmingSample', function(){ // トリミングサンプルON if ($("#trimmingSample").prop('checked')) { // ------------------------ // データ保存 // ------------------------ save_photoName = $("#photoName" ).val(); save_paperTypes = $("#paperTypes" ).val(); save_paperSizes = $("#paperSizes" ).val(); save_frameWidth = $("#frameWidth" ).val(); save_frameHeight = $("#frameHeight" ).val(); save_edgeTypes = $("#edgeTypes" ).val(); save_correctTypes = $("#correctTypes").val(); save_retouchTypes = $("#retouchTypes").val(); save_quantity = $("#quantity" ).val(); save_backingTypes = $("#backingTypes").val(); // ------------------------ // 各タグの初期化 // ------------------------ $("#photoName" ).val("トリミング見本"); // 写真名をトリミング見本とする $("#paperTypes" ).prop('selectedIndex', 0); $("#paperSizes" ).prop('selectedIndex', 0); $("#frameWidth" ).val("0"); $("#frameHeight" ).val("0"); $("#edgeTypes" ).val(default_edge_type_id); //$("#correctTypes").val(default_correct_type_id); setCorrectTypesValue(default_correct_type_id); $("#retouchTypes").val(default_retouch_type_id); $("#quantity" ).val("1"); $("#backingTypes").val(default_backing_type_id); // ------------------------ // 各タグのDisable処理 // ------------------------ $(".enableClass1").attr("disabled", "disabled"); } // トリミングサンプルOFF else { // ------------------------ // データ復元 // ------------------------ $("#photoName" ).val(save_photoName ); $("#paperTypes" ).val(save_paperTypes ); $("#paperSizes" ).val(save_paperSizes ); $("#frameWidth" ).val(save_frameWidth ); $("#frameHeight" ).val(save_frameHeight ); $("#edgeTypes" ).val(save_edgeTypes ); //$("#correctTypes").val(save_correctTypes); setCorrectTypesValue(save_correctTypes); $("#retouchTypes").val(save_retouchTypes); $("#quantity" ).val(save_quantity ); $("#backingTypes").val(save_backingTypes); $("#paperTypes" ).val(save_paperTypes ); // ------------------------ // 各タグのenable処理 // ------------------------ // 各タグのenable処理 $(".enableClass1").not(".enableClass2").removeAttr("disabled"); // 用紙サイズが未選択 if ($('#paperSizes').val().split(",")[0] == 0) { // 各タグの初期化 $("#frameWidth" ).val("0"); $("#frameHeight" ).val("0"); $("#edgeTypes" ).val(default_edge_type_id); //$("#correctTypes").val(default_correct_type_id); setCorrectTypesValue(default_correct_type_id); $("#retouchTypes").val(default_retouch_type_id); $("#quantity" ).val("1"); $("#backingTypes").val(default_backing_type_id); // 各タグのDisable処理 $(".enableClass2").attr("disabled", "disabled"); } // 用紙サイズが選択されている else { // 各タグのenable処理 $(".enableClass2").removeAttr("disabled"); } } // ------------------------ // 画像とペーパー枠を表示 // ------------------------ showImageDialog("full"); // ------------------------ // 金額計算 // ------------------------ getPrice(); }); // ================================================================== // ペーパー種別の指定 // ================================================================== $(document).on('change', '#paperTypes', function(){ // 選択したペーパーのサイズ一覧を取得する getFormSizes( $('#paperTypes').val(), $('#paperSizes').val().split(",")[0], true ); }); // ================================================================== // ペーパーサイズの指定 // ================================================================== $(document).on('change', '#paperSizes', function(){ //actionTime = new Date().getTime(); //$('#msgDiv3').html(new Date().getTime() - actionTime); // 用紙サイズ未選択 if ($('#paperSizes').val().split(",")[0] == 0) { // 各タグの初期化 $("#frameWidth" ).val("0"); $("#frameHeight" ).val("0"); $("#edgeTypes" ).val(default_edge_type_id); //$("#correctTypes").val(default_correct_type_id); setCorrectTypesValue(default_correct_type_id); $("#retouchTypes").val(default_retouch_type_id); $("#quantity" ).val("1"); $("#backingTypes").val(default_backing_type_id); // 各タグのDisable処理 $(".enableClass2").attr("disabled", "disabled"); } else { // 各タグのenable処理 $(".enableClass2").removeAttr("disabled"); // 裏打ち・バックシート設定がない用紙サイズ if ($('#paperSizes').val().split(",")[4] == 0) { $("#backingTypes").val(default_backing_type_id); } // 補正あり用紙 if (correctPaperFlag == 1) { $("#correctTypes").val(correct_on_id); } } // 画像とペーパー枠を表示 showImageDialog("full"); // 金額計算 getPrice(); }); // ================================================================== // 料金計算のみのイベント // (補正の有無、レタッチデータ書込、裏打・バックシートの指定) // ================================================================== $(document).on('change', '.priceCalc', function(){ // ペーパーサイズが指定されている場合は金額計算する var paperSizeValue = $("#paperSizes").val(); if (paperSizeValue != null && paperSizeValue.length > 0 && paperSizeValue.split(",")[0] != 0) { // 金額計算 getPrice(); } }); // ================================================================== // 窓枠の指定 // ================================================================== $(document).on('keyup', '.frameClass', function(){ // 画像とペーパー枠を表示 showImageDialog("full"); }); // ================================================================== // 補正の指定 // ================================================================== $(document).on('change', '#correctTypes', function(){ if (correctPaperFlag == 1 || !correctSelectAcceptFlag) { $("#correctTypes").val(correct_on_id); } }); // ================================================================== // 裏打・バックシートの指定 // ================================================================== $(document).on('change', '#backingTypes', function(){ if ($('#paperSizes').val().split(",")[4] == 0) { $("#backingTypes").val(default_backing_type_id); } }); // ================================================================== // 枚数の指定 // ================================================================== $(document).on('change', '#quantity', function(){ // 金額計算 getPrice(); }); // ================================================================== // プリント内容詳細ダイアログ // ================================================================== $(document).ready(function(){ // ダイアログの非表示 $('#imageDialog').hide(); }); // ================================================================== // アップロード処理 // ================================================================== function fileUpload(files){ // お待ちください... $.blockUI({ message : '

please wait
', fadeIn : 200, fadeOut : 0, overlayCSS: { backgroundColor : '#000', color : '#fff', opacity : '0.6', cursor : 'wait' }, css: { backgroundColor : '#333', color : '#fff', padding : '2em', margin : '0', height : '4.5em', width : '16em', border : '1px solid #aaa', verticalAlign : 'middle', } }); // FormDataオブジェクトの作成 var formdata = new FormData(); // csrfTokenを追加 formdata.append( "_csrfToken", $('input[name="_csrfToken"]').val() ); // ファイル情報を追加 //var files = $("#upFile").get(0).files; // ファイル情報を取得 $.each(files, function() { formdata.append("upfile[]", this); }); // var formdata = new FormData($('#upForm').get(0)); $.ajax({ async: true, xhr : function() { XHR = $.ajaxSettings.xhr(); if (XHR.upload) { XHR.upload.addEventListener('progress',function(e) { var percent = (e.loaded / e.total) * 100; if (percent == 100) { $('#loading-msg').html("file exchange... please wait"); } else { $('#loading-msg').html(Math.round(percent) + "% uploaded... please wait"); } }, false); } return XHR; }, url : rootAddress + '/order/upload/fileUpload/', cache : false, type : 'POST', data : formdata, processData : false, contentType : false }).done(function(data){ data = $.parseJSON(data); $msg = ""; $error = ""; $.each(data, function() { if (this.STATUS > 0) { $msg += this.MESSAGE + "\n"; } if (this.STATUS < 0) { $error += this.MESSAGE + "\n"; } }); // リネーム if ($msg.length > 0) { alert($msg); } // 成功 if ($error.length < 1) { // エラー無し //alert('アップロード成功。'); } else { // エラー有り alert('アップロードに失敗しました。\n' + $error); } }).fail(function(data) { // 失敗 alert('アップロードに失敗しました。2'); }).always(function() { // 画面アンロック //$.unblockUI(); // ファイル要素クリア commonLogic.fileCrear('upFileSpan'); // 一覧表示 location.href = rootAddress + '/'; }); } // ================================================================== // 基準サイズを収まるサイズを求める // ================================================================== function sizeMaching(option, inWidth, inHeight, baseWidth, baseHeight) { var outWidth = 0; var outHeight = 0; if (option == 1) { // 通常 if (inWidth / inHeight > baseWidth / baseHeight) { outWidth = baseWidth; outHeight = inHeight * outWidth / inWidth; } else { outHeight = baseHeight; outWidth = inWidth * outHeight / inHeight; } } else { // フレーム(トリミング) if (inWidth / inHeight > baseWidth / baseHeight) { outHeight = baseHeight; outWidth = inWidth * outHeight / inHeight; } else { outWidth = baseWidth; outHeight = inHeight * outWidth / inWidth; } } return Array(outWidth, outHeight); } // ================================================================== // イメージダイアログの表示 // ================================================================== function showImageDialog(jobOption) { // ------------------------------------------------------------------ // トリミングサンプルのチェック // ------------------------------------------------------------------ var trimSampleFlag = 0; if ($("#trimmingSample").prop('checked')) { trimSampleFlag = 1; } // ------------------------------------------------------------------ // 用紙サイズ関連のデータ取得 // ------------------------------------------------------------------ // 選択したペーパーからトリミングフラグとアスペクト比を取得する。 // 未選択の場合はペーパー枠を表示しない。 var trimFlag = -1; var paperWidth = 0; var paperHeight = 0; var paperAspectRatio = ""; var backingFlag = 0; //裏打ち・バックシート var paperSizeValue = $("#paperSizes").val(); if (paperSizeValue != null && paperSizeValue.length > 0) { var paperAttr = paperSizeValue.split(","); if (paperAttr[0] != 0) { // 用紙サイズを選択している場合 trimFlag = paperAttr[1]; if (imageDirection == 2) { // 縦構図 paperWidth = paperAttr[2]; paperHeight = paperAttr[3]; } else { // 横構図 paperWidth = paperAttr[3]; paperHeight = paperAttr[2]; } paperAspectRatio = paperWidth / paperHeight; backingFlag = paperAttr[4]; } } // ------------------------------------------------------------------ // フレーム関連のデータ取得 // ------------------------------------------------------------------ var frameWidth = parseInt($('#frameWidth' ).val()); var frameHeight = parseInt($('#frameHeight').val()); var frameAspectRatio = frameWidth / frameHeight; // ------------------------ // フレームサイズが用紙サイズを超えた場合の処理 // ------------------------ // メッセージ var frameflag = 0; if (frameWidth > paperWidth || frameHeight> paperHeight) { $('#frameInfo').html('用紙サイズを超えています。'); frameflag = 1; } else { $('#frameInfo').html(""); } // 背景色を赤色にする if (frameWidth > paperWidth) { $("#frameWidth").css("background-color", "red"); } else { $("#frameWidth").css("background-color", "white"); } if (frameHeight > paperHeight) { $("#frameHeight").css("background-color", "red"); } else { $("#frameHeight").css("background-color", "white"); } // ------------------------------------------------------------------ // 備考の文字数チェック // ------------------------------------------------------------------ var noteflag = 0; if ($("#note").val().length > note_max) { $("#note").css("background-color", "red"); $("#note").height(66); $('#noteInfo').html('' + note_max + '文字以下で入力して下さい'); noteflag = 1; } else { $("#note").css("background-color", "white"); $("#note").height(84); $('#noteInfo').html(""); } // ------------------------ // 登録ボタンの可否 // ------------------------ if (trimSampleFlag == 1 || (trimFlag != -1 && frameflag != 1 && noteflag != 1)) { // 有効にするのは管理者以外か注文未確定 if (adminFlg != ADMIN_YES || orderStatusId == PENDING){ $("#imageDialog").siblings('.ui-dialog-buttonpane').find('button:eq(0)').button("enable"); } // $('#msgDiv1').html("enable trimSampleFlag=" + trimSampleFlag + " trimFlag=" + trimFlag); } else { $("#imageDialog").siblings('.ui-dialog-buttonpane').find('button:eq(0)').button("disable"); // $('#msgDiv1').html("disable trimSampleFlag=" + trimSampleFlag + " trimFlag=" + trimFlag); } // ------------------------------------------------------------------ // 備考は登録ボタンの可否まで(画像描画は行わない) // ------------------------------------------------------------------ if (jobOption == 'note') { return; } // canvasの表示モード var showMode = trimFlag; if (trimSampleFlag == 1 || trimFlag == -1 || no_image) { showMode = -1; } else if (trimFlag != -1 && frameWidth > 0 && frameHeight > 0){ showMode = parseInt(trimFlag) + 2; } // ------------------------ // イメージ描画 // ------------------------ // 用紙未選択 if (showMode == -1) { // 画像のアスペクト比1でCANVASを作成 var arr = sizeMaching(1, imageWidth, imageHeight, maxCanvasWidth, maxCanvasHeight); var canvasWidth = arr[0]; var canvasHeight = arr[1]; imgStr = ''; $("#imageDiv").html(imgStr); // チェック var canvas = document.getElementById('c1'); if ( ! canvas || ! canvas.getContext ) { return false; } var ctx = canvas.getContext('2d'); /* 画像を描画 */ var canvasImageWidth = canvasWidth; var canvasImageHeight = canvasHeight; ctx.drawImage(img, 0, 0, canvasImageWidth, canvasImageHeight); } // トリミングあり else if (showMode == 0) { // 画像のアスペクト比でCANVASを作成 var arr = sizeMaching(1, imageWidth, imageHeight, maxCanvasWidth, maxCanvasHeight); var canvasWidth = arr[0]; var canvasHeight = arr[1]; imgStr = ''; $("#imageDiv").html(imgStr); // チェック var canvas = document.getElementById('c1'); if ( ! canvas || ! canvas.getContext ) { return false; } var ctx = canvas.getContext('2d'); /* 画像を描画 */ var canvasImageWidth = canvasWidth; var canvasImageHeight = canvasHeight; ctx.drawImage(img, 0, 0, canvasImageWidth, canvasImageHeight); // ペーパー枠の描画 if (imageAspectRatio > paperAspectRatio) { // 画像のアスペクト比の方が大きい var canvasPaperWidth = canvasImageWidth / imageAspectRatio * paperAspectRatio; ctx.rect((canvasImageWidth - canvasPaperWidth) / 2, 00, canvasPaperWidth, canvasImageHeight); } else { // ペーパーのアスペクト比の方が大きい var canvasPaperHeight = canvasImageHeight * imageAspectRatio / paperAspectRatio; ctx.rect(00, (canvasImageHeight - canvasPaperHeight) / 2, canvasImageWidth, canvasPaperHeight); } ctx.lineWidth = 2; ctx.strokeStyle = "RED"; ctx.stroke(); } // ノートリミング else if (showMode == 1) { // ペーパーのアスペクト比でCANVASを作成 var arr = sizeMaching(1, maxCanvasWidth, maxCanvasWidth / paperAspectRatio, maxCanvasWidth, maxCanvasHeight); var canvasWidth = arr[0]; var canvasHeight = arr[1]; imgStr = ''; $("#imageDiv").html(imgStr); // チェック var canvas = document.getElementById('c1'); if ( ! canvas || ! canvas.getContext ) { return false; } var ctx = canvas.getContext('2d'); // 画像を描画 if (imageAspectRatio > paperAspectRatio) { // 画像のアスペクト比の方が大きい var canvasImageHeight = canvasHeight / imageAspectRatio * paperAspectRatio; ctx.drawImage(img, 0, (canvasHeight - canvasImageHeight) / 2, canvasWidth, canvasImageHeight); } else { // ペーパーのアスペクト比の方が大きい var canvasImageWidth = canvasWidth * imageAspectRatio / paperAspectRatio; ctx.drawImage(img, (canvasWidth - canvasImageWidth) / 2, 0, canvasImageWidth, canvasHeight); } // ペーパー枠の描画 ctx.lineWidth = 2; ctx.strokeStyle = "RED"; ctx.rect(00, 00, canvasWidth-1, canvasHeight); ctx.stroke(); } // 窓枠あり else { // ペーパーのアスペクト比でCANVASを作成 var arr = sizeMaching(1, maxCanvasWidth, maxCanvasWidth / paperAspectRatio, maxCanvasWidth, maxCanvasHeight); var canvasWidth = arr[0]; var canvasHeight = arr[1]; imgStr = ''; $("#imageDiv").html(imgStr); //$('#msgDiv1').html("canvasWidth=" + canvasWidth.toFixed(3) + "canvasHeight=" + canvasHeight.toFixed(3) + " paperWidth=" + paperWidth + " paperHeight=" + paperHeight); // チェック var canvas = document.getElementById('c1'); if ( ! canvas || ! canvas.getContext ) { return false; } var ctx = canvas.getContext('2d'); // 窓枠の計算 var hiritsu = paperWidth / canvasWidth; var canvasFrameWidth = frameWidth / hiritsu; var canvasFrameHeight = frameHeight / hiritsu; //$('#msgDiv2').html("hiritsu=" + hiritsu.toFixed(3) + " frameWidth=" + frameWidth.toFixed(3) + " frameHeight=" + frameHeight.toFixed(3)); /* 画像を描画 */ var arr = sizeMaching(parseInt(showMode) % 2, imageWidth, imageHeight, canvasFrameWidth, canvasFrameHeight); var canvasImageWidth = arr[0]; var canvasImageHeight = arr[1]; //$('#msgDiv3').html("imageWidth=" + imageWidth.toFixed(3) + " imageHeight=" + imageHeight.toFixed(3)); ctx.drawImage(img, (canvasWidth - canvasImageWidth) / 2, (canvasHeight - canvasImageHeight) / 2, canvasImageWidth, canvasImageHeight); // 窓枠の描画 ctx.lineWidth = 2; ctx.strokeStyle = "RED"; ctx.rect((canvasWidth - canvasFrameWidth) / 2, (canvasHeight - canvasFrameHeight) / 2, canvasFrameWidth, canvasFrameHeight); ctx.stroke(); // ペーパー枠の描画 ctx.lineWidth = 2; ctx.strokeStyle = "RED"; ctx.rect(00, 00, canvasWidth-1, canvasHeight); ctx.stroke(); } } // ================================================================== // 詳細データ取得 // ================================================================== function initDetail( selRec ){ // 画面ロック blockUI.block(); // ------------------------ // イメージ関連のデータ取得 // ------------------------ // イメージサイズ imageWidth = img.width; imageHeight = img.height; // 写真の向き 1=横 2=縦 imageDirection = 1; if (imageWidth < imageHeight) imageDirection = 2; // 写真の比率 imageAspectRatio = imageWidth / imageHeight; // ------------------------ // タグの初期化 // ------------------------ $("#imageDialogForm select").each(function() { this.selectedIndex = 0; }); $("#frameWidth" ).val(""); $("#frameHeight" ).val(""); $("#note" ).val(""); $("#price" ).val(""); // ------------------------ // 退避用変数に初期値をセット // ------------------------ save_photoName = ""; save_paperTypes = "0"; save_paperSizes = "0,0,0,0,0"; save_frameWidth = "0"; save_frameHeight = "0"; save_edgeTypes = default_edge_type_id; save_correctTypes = default_correct_type_id; save_retouchTypes = default_retouch_type_id; save_quantity = "1"; save_backingTypes = default_backing_type_id; var data=""; // 詳細データID imageId = $(selRec).attr("id"); $.ajax({ url : rootAddress + '/order/upload/getDetail/', //async : false, cache : false, type : 'GET', data : { "imageid": imageId } }).done(function(data){ data = $.parseJSON(data); if (!data.errors) { // 成功 // イメージ有無を取得 no_image = data.no_image; // データをフィールドにセット $("#imageId" ).val (data.id ); $('#imageNo' ).text($(selRec).children(".detail-no").text()); $('#fileName' ).text(data.raw_file_name ); $('#photoName' ).val (data.photo_name ); $('#paperTypes' ).val (data.m_form_type_id ); $('#frameWidth' ).val (data.inside_width ); $('#frameHeight' ).val (data.inside_height ); $('#edgeTypes' ).val (data.m_edge_type_id ); $('#correctTypes' ).val (data.m_correct_type_id ); $('#retouchTypes' ).val (data.m_retouch_type_id ); $('#backingTypes' ).val (data.m_backing_type_id ); $('#note' ).val (data.note ); $('#quantity' ).val (data.quantity ); // 補正選択不可拡張子の場合は、補正有りを設定して変更不可とする if (!setCorrectSelectAcceptFlag(data.raw_file_name)){ $('#correctTypes').val(correct_on_id); } // トリミングサンプル if (data.trimming_sample) { $("#trimmingSample").prop("checked",true ); $(".enableClass1").attr("disabled", "disabled"); } else { $("#trimmingSample").prop("checked",false); $(".enableClass1").removeAttr("disabled"); } // 用紙サイズ一覧を取得(用紙種別毎) getFormSizes( data.m_form_type_id, data.m_form_size_id, false ); } else { // エラー // リダイレクト指定が返った場合はリダイレクト if (data.errors.redirect) { window.location.href = rootAddress + data.errors.redirect; return; } // エラー有り alert('詳細データの取得に失敗しました。'); } }).fail(function(data, status, error){ // 失敗 alert('詳細データの取得に失敗しました。2'); }).always(function(){ // 画面アンロック $.unblockUI(); }); } // ================================================================== // 詳細データ取得 // paperType 用紙種別 // paperSize 用紙サイズID // ================================================================== function getFormSizes( paperType, paperSize, async ){ // 画面ロック blockUI.block(); var data=""; $.ajax({ url : rootAddress + '/order/upload/getFormSizes/', async : async, cache : false, type : 'GET', data : { "paperType": paperType } }).done(function(data){ data = $.parseJSON(data); if (!data.errors) { // 成功 // 補正あり用紙フラグ correctPaperFlag = data.correctPaperFlag; // 用紙サイズ $('#paperSizes').empty(); for (var prop in data.paperSizes) { $('#paperSizes').append($('