$(function() {
$('a.photo_close').each(
function() {
$(this).click(
function() {
deletePicture(this);
return false;
}
);
}
);
});
function deletePicture(target) {
var id = $(target).attr('target');
$('#delete').hide();
$('#preview').hide();
if($('#picture').hasClass('pictureCommentPc')) {
$('#fileSelected').removeClass('incimg');
$('#divFileSelected').removeClass('file');
$('#ddFileSelected').addClass('file');
$('#picturePath'+id).val("");
}
if($('#picture').hasClass('pictureCommentSp')){
$('#divFileSelected').removeClass('kuchikomi_photo');
$('#divFileSelected').addClass('button_camera');
$('#iframe-content').removeClass('iframe-content-picture');
$('#iframe-content').addClass('iframe-content');
$('#photoimg').show();
$('#picture').show();
$('#picturePath'+id).val("");
}
if($('#picture').hasClass('pictureProfile')){
$('#picturePath'+id).val("/image/no_img_120user.png");
$('#preview'+id).attr('src', 'https://cookingschool.jp/image/no_img_120user.png');
thumbnailResize(id);
$('#preview'+id).show();
}
hidePictureEdit(id);
$('#temporaryPicture'+id).val(true);
}
var size = 0;
var angle = 0;
var targetId = "";
var targetform = "";
var context = "";
var progress = false;
$(document).ready(function() {
// プレビュー・編集を行うため画像をアップロード
$('.picture').bind('change', function() {
var file;
try {
file = this.files[0];
} catch(e) {
file = this.value; // ie8
}
if (!file) {
return;
}
targetId = $(this).attr('target');
targetform = $(this).attr('targetform');
size = parseInt($('#size'+targetId).val());
//画像回転時にプログレスor「処理中・・・」を切り替える
try{
if ($('#progress'+targetId).val() == 'true') {
progress = true;
}
} catch (e) {
}
//SPのコメント編集はプログレス表示する前に画像選択ボタンを隠す
if($('#picture'+targetId).hasClass('pictureCommentSp')){
$('#photoimg').hide();
}
// プログレス表示
showProgress($('#previewParent'+targetId));
// 選択画像の表示
$('#submitButton'+targetId).prop('disabled', true); // 途中でボタンを押されると画像パスがテンポラリのままになるめ
try {
$('#' + targetform).ajaxSubmit({
url: '/do/common/picture/upload',
type: 'POST',
dataType: 'json',
success: function(json) {
if (!json[0].temporaryPicturePath) {
alert('画像のアップロードでエラーが発生しました。もう一度アップロードして下さい。');
return;
}
try {
$('#picturePath'+targetId).val(context + json[0].temporaryPicturePath); // 商品画像にアップロードした画像のパスを指定
$('#temporaryPicture'+targetId).val(false); // 画像選択済み(保存対象)セット
resetPicture(json[0].temporaryPicturePath, targetId);
$('#preview'+targetId).show(); //削除されている場合がある為表示する
if($('#picture'+targetId).hasClass('pictureCommentPc')) {
//PCコメントフォーム 画像編集(回転)用のCalssに変更
$('#fileSelected').addClass('incimg');
$('#ddFileSelected').removeClass('file');
$('#divFileSelected').addClass('file');
}else if($('#picture'+targetId).hasClass('pictureCommentSp')){
//SPコメントフォーム 画像編集(回転)用のCalssに変更
$('#photoimg').hide();
$('#picture').hide();
$('#divFileSelected').removeClass('button_camera');
$('#divFileSelected').addClass('kuchikomi_photo');
$('#iframe-content').removeClass('iframe-content');
$('#iframe-content').addClass('iframe-content-picture');
}
$('#delete').show();
showPictureEdit(targetId);
} catch(e) {
sendErrorLog(e);
}
},
complete: function() {
var src = $('#preview'+targetId).attr('src');
$('#picture'+targetId).val(''); // 二度目に反応しないため
$('#preview'+targetId).attr('src', src);
$('#submitButton'+targetId).prop('disabled', false);
//$('#deletePicture'+targetId).remove();
hideProgress();
},
error: function(request, status, e) {
sendErrorLog(e);
}});
} catch (e) {
sendErrorLog(e);
}
});
// 画像回転処理
try {
$('#preview'+targetId).crossOrigin = "Anonymous";
// 回転クリックにより実行
$('.rotate').bind('click', function() {
//非活性時は処理しない
if($('.rotate').hasClass('disable')){
return false;
}
targetId = $(this).attr('target');
targetform = $(this).attr('targetform');
size = parseInt($('#size'+targetId).val());
$('#temporaryPicture'+targetId).val(false); // キャンセル時に画像回転した場合保存対象FLGをセット
if(progress){
showProgress($('#previewParent'+targetId));
}else{
showWait($('#previewParent'+targetId));
}
angle = parseInt($('#angle'+targetId).val());
var __angle = parseInt($(this).attr('angle'));
angle += __angle;
$('#angle'+targetId).val(angle);
//回転処理をタイマーで呼び出し(処理中を表示する為)
setTimeout('rotePicture(angle,targetId)',100);
return false;
});
} catch(e) {
//console.log(e);
}
});
//画像回転処理(処理中を表示する為タイマーで呼び出される)
function rotePicture(angle, targetId) {
if(progress){
showProgress($('#previewParent'+targetId));
}else{
showWait($('#previewParent'+targetId));
}
editPicture({
brightness: 0,
contrast: 0,
angle: angle,
targetId:targetId
});
}
//画像編集(回転)処理
var isEdit = false;
function editPicture(param) {
isEdit = true;
var path = $('#picturePath'+param.targetId).val();
if(path.indexOf(context)){
// コンテキスト未指定時は付与する
path = context + path;
}
// angleの指定は絶対値とする為、回転時は元(temp)画像で初期化する
$('#preview'+param.targetId).attr('src', path);
try {
var img = new Image();
img.src = document.getElementById('preview'+param.targetId).src;
//回転しない(360度の倍数)場合は、元画像を表示
if (param.angle % 360 == 0) {
if (!img) {
if(progress){
hideProgress();
}else{
removeWait();
}
return;
}
document.getElementById('preview'+param.targetId).src = img.src;
if(progress){
hideProgress();
}else{
removeWait();
}
thumbnailResize(param.targetId);
return;
}
//画像回転処理
Pixastic.process(
img,
"rotate",
{
angle: param.angle
},
function(res) {
if (!res) {
return;
}
document.getElementById('preview'+param.targetId).src = res.toDataURL();
thumbnailResize(param.targetId);
if(progress){
hideProgress();
}else{
removeWait();
}
}
);
} catch(e) {
//console.log(e);
}
}
//元画像表示処理
function resetPicture(imgSrc, targetId) {
$('#preview'+targetId).attr('src', context+imgSrc);
angle = 0;
$('#angle'+targetId).val(angle);
thumbnailResize(targetId);
}
//サムネイル画像のリサイズ処理
function thumbnailResize(targetId) {
var img = new Image();
img.src = $('#preview'+targetId).attr('src');
size = parseInt($('#size'+targetId).val());
// 回転するときにチラつくので非表示にする
$('#preview').css('opacity','0');
img.onload = function() {
var wdt = img.width;
var hgt = img.height;
var scaleX = wdt / size;
var scaleY = hgt / size;
// 画像の表示を戻す
$('#preview').css('opacity','1');
if (scaleX > 1 || scaleY > 1) {
var scale = (scaleX > scaleY) ? scaleX : scaleY;
$('#preview'+targetId).width(wdt / scale);
$('#preview'+targetId).height(hgt / scale);
//alert("4-3-3\n"+ "scaleX:" + scaleX + "/scaleY:" + scaleY + "/scale:" + scale + "/wdt:" + wdt + "/hgt:" + hgt );
}else{
$('#preview'+targetId).width(wdt);
$('#preview'+targetId).height(hgt);
}
}
}
//回転用編集フィールド表示
function showPictureEdit(targetId) {
if (!isCanvasSupporte()) {
return;
}
$('#pictureEdit'+targetId).fadeIn();
}
//回転用編集フィールド非表示
function hidePictureEdit(targetId) {
$('#pictureEdit'+targetId).hide();
}
//コメントサブミット時の画像保存処理(SP)
function onCommentSubmitSP(id, formid) {
targetId = id;
targetform = formid;
var val = $('#commentTextarea').val();
if(val.length==0){
alert('投稿内容を入力してください');
return false;
}
var result = onSubmit(id, formid);
return result;
}
//つくれぽ投稿サブミット時の画像保存処理(SP)
function onTsukurepoSubmit(id, formid) {
targetId = id;
targetform = formid;
var val = $('#commentTextarea').val();
if(val.length==0){
alert('テキストを入力してください');
return false;
}
var path = $('#picturePath').val();
if(path.length==0){
alert('投稿画像を設定してください');
return false;
}
var result = onSubmit(id, formid);
return result;
}
//サブミット時の画像保存処理
function onSubmit(id, formid) {
targetId = id;
targetform = formid;
var result = uploadPicture(
true,
targetId,
$('#temporaryPicture'+targetId).val(),
false,/*同期登録*/
function() {
$('#'+targetform).attr('onsubmit', '');
$('#'+targetform).submit();
return false;
}
);
if (!result) {
return true;
}
return false;
}
// 各種登録時に利用する画像をアップロード
function uploadPicture(hideProgress, targetId, temporaryPicture, sync, complete) {
if (!isCanvasSupporte()) {
return false;
}
if (temporaryPicture == 'true') {
return false;
}
try {
uploadPictureBase64(
$('#preview'+targetId),
targetId,
hideProgress,
sync,
function(picturePath) {
// ブラウザによっては確認ページで編集後の画像が表示されないため、画像パスを都度新しくする
$('#picturePath'+targetId).val(picturePath); // アップロードした画像のパスを指定
//バリデーションエラー後に、再度保存しない様に修正
$('#temporaryPicture'+targetId).val(true);
},
function() {
},
function() {
complete();
});
} catch (e) {
sendErrorLog(e);
}
// プログレスを表示するため、ajax処理が完了後にsubmitする
return true;
}
//画像をbase64でアップロード
function uploadPictureBase64(img, targetId, hide, sync, success, error, complete) {
if (!isCanvasSupporte()) {
throw new Error('Canvas is not supported');
}
showProgress();
var canvas = document.getElementById('canvas'+targetId);
//var canvas = document.createElement("canvas");
var newImg = new Image();
newImg.onload = function() {
canvas.width = newImg.width;
canvas.height = newImg.height;
var ctx = canvas.getContext('2d');
try {
var scaleX = canvas.width / 1024;
var scaleY = canvas.height / 1024;
if (scaleX > 1 || scaleY > 1) {
var scale = (scaleX > scaleY) ? scaleX : scaleY;
canvas.width = canvas.width / scale;
canvas.height = canvas.height / scale;
}
ctx.drawImage(newImg, 0, 0, newImg.width, newImg.height, 0, 0, canvas.width, canvas.height);
} catch (e) {
ctx.drawImage(newImg, 0, 0);
}
var dataUrl = canvas.toDataURL('image/jpeg');
$.ajax({
url: '/do/common/picture/uploadBase64',
type: 'POST',
data: {
temporaryPicturePath: $('#picturePath'+targetId).val(),
uploadDirectory:$('#uploadDirectory'+targetId).val(),
uniqueId:$('#uniqueId'+targetId).val(),
subUniqueId:$('#subUniqueId'+targetId).val(),
dirCorrection:$('#dirCorrection'+targetId).val(),
noneRename:$('#noneRename'+targetId).val(),
picture: dataUrl,
isEdit: isEdit
},
async: sync,
cache: false,
success: function(json) {
success(json[0].temporaryPicturePath);
},
complete: function() {
if(hide){
hideProgress();
}
complete();
}
});
}
newImg.src = img.attr('src');
}
// 「処理中・・・」表示
function showWait(target) {
removeWait();
if (!target) {
return;
}
target
.append(
$('
')
.attr('id', 'wait_img')
.attr('src', context + '/image/wait.png')
.css('position', 'absolute')
.css('top', (target.height() - 48) / 2 )
.css('left',(target.width()) / 2)
.css('width', 128)
.css('height', 48)
.css('z-index', 2)
.css('opacity', 1));
}
// 「処理中・・・」非表示
function removeWait() {
try {
$('#wait_img').remove();
} catch(e) {
}
}
// プログレス表示
function showProgress(target) {
removeProgress();
if (!target) {
showProgressBody();
return;
}
target
.append(
$('
')
.attr('id', 'progress_animation')
.attr('src', context + '/image/progress68.gif')
.css('position', 'absolute')
.css('top', (target.height() - 68) / 2)
.css('left', (target.width() - 68) / 2)
.css('width', 68)
.css('height', 68)
.css('z-index', 2)
.css('opacity', 1));
}
function showProgressBody() {
removeProgress();
$('body')
.append(
$('
')
.attr('id', 'progress_animation')
.attr('src', context + '/image/progress68.gif')
.css('position', 'absolute')
.css('top', jQuery(window).scrollTop() + (jQuery(window).height() - 68) / 2)
.css('left', (jQuery(window).width() - 68) / 2)
.css('width', 68)
.css('height', 68)
.css('z-index', 2)
.css('opacity', 1));
}
// プログレス非表示
function removeProgress() {
try {
$('#progress_animation').remove();
} catch(e) {
}
}
function hideProgress() {
try {
$('#progress_animation').fadeOut().queue(function(){
try {
this.remove()
} catch(e) {
}
});
} catch(e) {
}
}
// キャンバスのサポート状況を返す
// ie10以前は画像回転処理を行わない
function isCanvasSupporte() {
var canvas = document.getElementById('canvas');
if (!canvas || !canvas.getContext) {
return false;
}
var userAgent = window.navigator.userAgent.toLowerCase();
if (userAgent.indexOf('msie') != -1) {
return false;
}
return true;
}
function sendErrorLog(e) {
removeProgress();
alert("画像の取り込み中にエラーが発生しました。")
}