Commit f779067b by Kim Peace

Merge branch 'refactoring/javascript_arrangement' into 'develop'

Refactoring/javascript arrangement

See merge request !192
parents d10b9423 2e76ee6a
...@@ -15,12 +15,6 @@ ...@@ -15,12 +15,6 @@
<link rel="stylesheet" href="./css/footer.css"> <link rel="stylesheet" href="./css/footer.css">
<link rel="stylesheet" href="./css/loading.css"> <link rel="stylesheet" href="./css/loading.css">
<link rel="stylesheet" href="./css/font-awesome.css"> <link rel="stylesheet" href="./css/font-awesome.css">
<script>
window.addEventListener('DOMContentLoaded', function() {
CHAT_UI.refreshArchiveScreen();
});
</script>
</head> </head>
<body> <body>
...@@ -50,9 +44,9 @@ ...@@ -50,9 +44,9 @@
<main id="archive"> <main id="archive">
<!-- 検索 --> <!-- 検索 -->
<div class="search_form"> <div class="search_form">
<input type="search" name="search" placeholder="検索" maxlength="50"> <input type="search" name="search" placeholder="検索" maxlength="50">
<span class="src_icon"></span> <span class="src_icon"></span>
<a href="#" class="cancel none">キャンセル</a> <a href="#" class="cancel none">キャンセル</a>
</div> </div>
<!-- アーカイブリスト --> <!-- アーカイブリスト -->
<div class="archive_list content"> <div class="archive_list content">
...@@ -91,76 +85,41 @@ ...@@ -91,76 +85,41 @@
</div> </div>
</footer> </footer>
<div id="loadingArea"></div> <div id="loadingArea"></div>
<script src="./js/libs/jquery-3.3.1.min.js"></script>
<script src="./js/libs/moment.js"></script>
<script src="./js/libs/bootstrap.min.js"></script>
<script src="./js/libs/jquery.mark.min.js"></script>
<script src="./js/libs/mustache.min.js"></script>
<script src="./js/archive.js"></script>
<script src="./js/common.js"></script>
<script src="./js/language.js"></script>
<script src="./js/language_ko.js" charset="UTF-8"></script>
<script src="./js/language_ja.js" charset="UTF-8"></script>
<script src="./js/language_en.js" charset="UTF-8"></script>
<script src="./js/constant.js"></script>
<script src="./js/chat.js"></script>
<script src="./js/chat-ui.js"></script>
<script src="./js/chat-util.js"></script>
<script src="./js/chat-db.js"></script>
<script src="./js/chat-db-foriOS.js"></script>
<script id="archive-template" type="text/template"> <!-- Library -->
<li class="d-flex align-items-center"> <script src="./js/libs/jquery-3.3.1.min.js"></script>
<a href="archive_detail.html?archiveId={{archiveId}}" class="w-100"> <script src="./js/libs/moment.js"></script>
<div class="archive_item d-flex flex-row align-items-center w-100"> <script src="./js/libs/locale/ko.js" charset="UTF-8"></script>
<div class="arhive_img"> <script src="./js/libs/locale/ja.js" charset="UTF-8"></script>
<div class="img_wrap bg_blue"> <script src="./js/libs/mustache.min.js"></script>
<img src="{{typeImage}}" alt="動画" /> <script src="./js/libs/bootstrap.min.js"></script>
</div> <script src="./js/libs/jquery.mark.min.js"></script>
</div> <!-- Language -->
<div class="archive_desc"> <script src="./js/languages/language.js"></script>
<div class="archive_name"> <script src="./js/languages/language_ko.js" charset="UTF-8"></script>
<span>{{fileName}}</span> <script src="./js/languages/language_ja.js" charset="UTF-8"></script>
</div> <script src="./js/languages/language_en.js" charset="UTF-8"></script>
<div class="archive_date"> <!-- Common -->
<span>{{insertDate}}</span> <script src="./js/common/constant.js"></script>
</div> <script src="./js/common/native-bridge-delegate.js"></script>
</div> <script src="./js/common/native-bridge-datasource.js"></script>
</div> <script src="./js/common/common.js"></script>
</a> <script src="./js/utils/chat-util.js"></script>
</li> <!-- Models -->
</script> <script src="./js/Models/deviceinfo.js"></script>
<script> <script src="./js/Models/serverinfo.js"></script>
String.prototype.replaceAll = function(org, dest) { <script src="./js/Models/userinfo.js"></script>
return this.split(org).join(dest); <!-- view -->
} <script src="./js/views/archive/archive.js"></script>
let CHAT_SERVER_URL = ''; <script>
let CMS_SERVER_URL = ''; $("#loadingArea").load("./loading.html");
let ASSET_PATH = './';
let PLATFORM = '';
let IS_MOBILE = true;
let IS_ONLINE = false;
$("#chatMenuModal").load("./modal_chat_menu.html");
$("#loadingArea").load("./loading.html");
if (typeof(android) != "undefined") {
android.getLoginParameter();
android.getGlobalParameter();
} else {
webkit.messageHandlers.loginInfoRequestMessageHandlerId.postMessage({});
webkit.messageHandlers.getGlobalParameter.postMessage({});
}
function getGlobalParam(chatServerUrl, cmsServerUrl, platform, isMobile, isOnline) { window.addEventListener('DOMContentLoaded', function () {
CHAT_SERVER_URL = chatServerUrl; ArchiveUI.refreshArchiveScreen();
CMS_SERVER_URL = cmsServerUrl; });
PLATFORM = platform; </script>
IS_MOBILE = isMobile;
IS_ONLINE = isOnline;
CHAT_UI.refreshArchiveScreen();
};
</script>
</body> </body>
</html> </html>
\ No newline at end of file
...@@ -17,21 +17,6 @@ ...@@ -17,21 +17,6 @@
<link rel="stylesheet" href="./css/font-awesome.css"> <link rel="stylesheet" href="./css/font-awesome.css">
</head> </head>
<script>
var archiveId;
window.addEventListener('DOMContentLoaded', function () {
var urlPrm = new Object;
var urlSearch = location.search.substring(1).split('&');
var kv = urlSearch[0].split('=');
urlPrm[kv[0]] = kv[1];
archiveId = urlPrm.archiveId
if (typeof (android) != "undefined") {
} else {
CHAT_UI.refreshArchiveDetailScreen(urlPrm.archiveId);
}
});
</script>
<body> <body>
<!-- ナビメニュー --> <!-- ナビメニュー -->
...@@ -65,6 +50,7 @@ ...@@ -65,6 +50,7 @@
<!-- ローディング --> <!-- ローディング -->
<div id="userProfileModal"></div> <div id="userProfileModal"></div>
<!-- Library -->
<script src="./js/libs/jquery-3.3.1.min.js"></script> <script src="./js/libs/jquery-3.3.1.min.js"></script>
<script src="./js/libs/moment.js"></script> <script src="./js/libs/moment.js"></script>
<script src="./js/libs/locale/ko.js" charset="UTF-8"></script> <script src="./js/libs/locale/ko.js" charset="UTF-8"></script>
...@@ -72,146 +58,36 @@ ...@@ -72,146 +58,36 @@
<script src="./js/libs/mustache.min.js"></script> <script src="./js/libs/mustache.min.js"></script>
<script src="./js/libs/bootstrap.min.js"></script> <script src="./js/libs/bootstrap.min.js"></script>
<script src="./js/libs/jquery.mark.min.js"></script> <script src="./js/libs/jquery.mark.min.js"></script>
<script src="./js/archive.js"></script> <!-- Language -->
<script src="./js/common.js"></script> <script src="./js/languages/language.js"></script>
<script src="./js/language.js"></script> <script src="./js/languages/language_ko.js" charset="UTF-8"></script>
<script src="./js/language_ko.js" charset="UTF-8"></script> <script src="./js/languages/language_ja.js" charset="UTF-8"></script>
<script src="./js/language_ja.js" charset="UTF-8"></script> <script src="./js/languages/language_en.js" charset="UTF-8"></script>
<script src="./js/language_en.js" charset="UTF-8"></script> <!-- Common -->
<script src="./js/constant.js"></script> <script src="./js/common/constant.js"></script>
<script src="./js/chat.js"></script> <script src="./js/common/native-bridge-delegate.js"></script>
<script src="./js/chat-ui.js"></script> <script src="./js/common/native-bridge-datasource.js"></script>
<script src="./js/chat-util.js"></script> <script src="./js/common/common.js"></script>
<script src="./js/chat-db.js"></script> <script src="./js/utils/chat-util.js"></script>
<script src="./js/chat-db-foriOS.js"></script> <!-- Models -->
<script src="./js/Models/deviceinfo.js"></script>
<script id="archive-detail-template" type="text/template"> <script src="./js/Models/serverinfo.js"></script>
<div id="archive_player" class="player"> <script src="./js/Models/userinfo.js"></script>
</div> <!-- view -->
<div class="archive_detail_desc"> <script src="./js/views/contact/namecard.js"></script>
<div class="archive_detail_fl_nm item"> <script src="./js/views/archive/archive.js"></script>
<h2 class="ttl" id="archiveFileName">FileName</h2>
<span>{{fileName}}</span>
</div>
<div class="archive_detail_sv_date item">
<h2 class="ttl" id="archiveInsertDate">InsertDate</h2>
<span>{{insertDate}}</span>
</div>
<div class="archive_detail_room_nm item">
<h2 class="ttl" id="archiveRoomName">ChatRoomName</h2>
<span class="archive_chat_room">{{chatRoomName}}</span>
<button id="joinChatRoom">
<img src="icon/icon_join_room.png" alt="">
</button>
</div>
<div class="archive_detail_sv_user item">
<h2 class="ttl" id="archiveSaveUser">SaveUser</h2>
<div class="d-flex flex-row">
<div class="d-flex flex-column">
<img src="{{profileImage}}" alt="プロフィール画像" onclick="CHAT_UI.makeNameCard({{userId}})" >
<p>{{userName}}</p>
</div>
</div>
</div>
<div class="archive_detail_user_list item">
<h2 class="ttl" id="archiveAttendUser">AttendUser</h2>
<ul class="d-flex flex-row" id="attendUser">
</ul>
</div>
</div>
</script>
<script id="archive-user-template" type="text/template">
<li class="archive_user">
<img src="{{profileImage}}" alt="">
<p>{{userName}}</p>
</li>
</script>
<script id="archive-namecard-template" type="text/template">
<div class="modal fade profile_modal" id="userNameCard" tabindex="-1" role="dialog" aria-labelledby="userNameCard" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header border-0">
<div class="profile_desc d-flex flex-row">
<img src="{{profileImage}}" onError="this.src='./img/noImage.png'"/>
<div class="profile_name d-flex justify-content-center align-items-center"><span>{{name}}</span></div>
</div>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
{{#groupPathList}}
<li style="display: block;">{{.}}</li>
{{/groupPathList}}
</div>
<div class="modal-footer border-0 justify-content-center">
{{#isFavorite}}
<button type="button" class="border-0 bg_navy" onclick="CHAT_UI.removeFavoriteUser({{shopMemberId}})">
<div class="d-flex flex-column">
<div class="img_wrap">
<img src="icon/icon_profile_favorite.png" alt="お気に入り">
</div>
<span>お気に入り解除</span>
</div>
</button>
{{/isFavorite}}
{{^isFavorite}}
<button type="button" class="border-0 bg_navy" onclick="CHAT_UI.insertFavoriteUser({{shopMemberId}})">
<div class="d-flex flex-column">
<div class="img_wrap">
<img src="icon/icon_profile_favorite_white.png" alt="お気に入り">
</div>
<span>お気に入り登録</span>
</div>
</button>
{{/isFavorite}}
<button type="button" class="border-0 bg_green" >
<div class="d-flex flex-column">
<div class="img_wrap">
<img src="icon/icon_profile_phone.png" alt="通話">
</div>
<span>通話</span>
</div>
</button>
<button type="button" class="border-0 bg_blue">
<div class="d-flex flex-column">
<div class="img_wrap">
<img src="icon/icon_profile_chat.png" alt="チャット">
</div>
<span>チャット</span>
</div>
</button>
</div>
</div>
</div>
</div>
</script>
<script> <script>
let CHAT_SERVER_URL = ''; var archiveId;
let CMS_SERVER_URL = '';
let ASSET_PATH = './';
let PLATFORM = '';
let IS_MOBILE = true;
let IS_ONLINE = false;
if (typeof (android) != "undefined") {
android.getLoginParameter();
android.getGlobalParameter();
} else {
webkit.messageHandlers.loginInfoRequestMessageHandlerId.postMessage({});
webkit.messageHandlers.getGlobalParameter.postMessage({});
}
function getGlobalParam(chatServerUrl, cmsServerUrl, platform, isMobile, isOnline) { window.addEventListener('DOMContentLoaded', function () {
CHAT_SERVER_URL = chatServerUrl; let urlPrm = new Object;
CMS_SERVER_URL = cmsServerUrl; const urlSearch = location.search.substring(1).split('&');
PLATFORM = platform; const kv = urlSearch[0].split('=');
IS_MOBILE = isMobile; urlPrm[kv[0]] = kv[1];
IS_ONLINE = isOnline; archiveId = urlPrm.archiveId
CHAT_UI.refreshArchiveDetailScreen(archiveId); ArchiveUI.refreshArchiveDetailScreen(urlPrm.archiveId);
}; });
</script> </script>
</body> </body>
......
...@@ -47,9 +47,9 @@ ...@@ -47,9 +47,9 @@
<main id="chat"> <main id="chat">
<!-- ユーザー検索 --> <!-- ユーザー検索 -->
<div class="search_form"> <div class="search_form">
<input type="search" name="search" placeholder="ルーム検索" maxlength="20"> <input type="search" name="search" placeholder="ルーム検索" maxlength="20">
<span class="src_icon"></span> <span class="src_icon"></span>
<a href="#" class="cancel none">キャンセル</a> <a href="#" class="cancel none">キャンセル</a>
</div> </div>
<!-- タブ --> <!-- タブ -->
<div class="content tabs"> <div class="content tabs">
...@@ -97,61 +97,48 @@ ...@@ -97,61 +97,48 @@
</div> </div>
</div> </div>
</footer> </footer>
<div id="loadingArea"></div> <div id="loadingArea"></div>
<script src="./js/libs/jquery-3.3.1.min.js"></script>
<script src="./js/libs/moment.js"></script> <!-- Library -->
<script src="./js/libs/locale/ko.js" charset="UTF-8"></script> <script src="./js/libs/jquery-3.3.1.min.js"></script>
<script src="./js/libs/locale/ja.js" charset="UTF-8"></script> <script src="./js/libs/moment.js"></script>
<script src="./js/libs/mustache.min.js"></script> <script src="./js/libs/locale/ko.js" charset="UTF-8"></script>
<script src="./js/libs/bootstrap.min.js"></script> <script src="./js/libs/locale/ja.js" charset="UTF-8"></script>
<script src="./js/libs/jquery.mark.min.js"></script> <script src="./js/libs/mustache.min.js"></script>
<script src="./js/common.js"></script> <script src="./js/libs/bootstrap.min.js"></script>
<script src="./js/language.js"></script> <script src="./js/libs/jquery.mark.min.js"></script>
<script src="./js/language_ko.js" charset="UTF-8"></script> <!-- Language -->
<script src="./js/language_ja.js" charset="UTF-8"></script> <script src="./js/languages/language.js"></script>
<script src="./js/language_en.js" charset="UTF-8"></script> <script src="./js/languages/language_ko.js" charset="UTF-8"></script>
<script src="./js/constant.js"></script> <script src="./js/languages/language_ja.js" charset="UTF-8"></script>
<script src="./js/chat.js"></script> <script src="./js/languages/language_en.js" charset="UTF-8"></script>
<script src="./js/chat-ui.js"></script> <!-- Common -->
<script src="./js/chat-util.js"></script> <script src="./js/common/constant.js"></script>
<script src="./js/chat-db.js"></script> <script src="./js/common/native-bridge-delegate.js"></script>
<script src="./js/chat-db-foriOS.js"></script> <script src="./js/common/native-bridge-datasource.js"></script>
<script> <script src="./js/common/common.js"></script>
String.prototype.replaceAll = function(org, dest) { <script src="./js/utils/chat-util.js"></script>
return this.split(org).join(dest); <!-- Models -->
} <script src="./js/Models/deviceinfo.js"></script>
let CHAT_SERVER_URL = ''; <script src="./js/Models/serverinfo.js"></script>
let CMS_SERVER_URL = ''; <script src="./js/Models/userinfo.js"></script>
let ASSET_PATH = './'; <!-- View -->
let PLATFORM = ''; <script src="./js/views/chats/chat-list.js"></script>
let IS_MOBILE = true;
let IS_ONLINE = false; <script>
$("#loadingArea").load("./loading.html"); $("#loadingArea").load("./loading.html");
if (typeof(android) != "undefined") {
android.getLoginParameter(); if (deviceInfo.isAndroid()) {
android.getGlobalParameter(); const needHostAlert = android.getExitHostAlert();
android.saveSelectedUserList(""); if (needHostAlert) {
} else { alert(getLocalizedString("inform_exit_host_collaboration"));
webkit.messageHandlers.loginInfoRequestMessageHandlerId.postMessage({});
webkit.messageHandlers.getGlobalParameter.postMessage({});
webkit.messageHandlers.saveSelectedUserList.postMessage("");
}
function getGlobalParam(chatServerUrl, cmsServerUrl, platform, isMobile, isOnline) {
CHAT_SERVER_URL = chatServerUrl;
CMS_SERVER_URL = cmsServerUrl;
PLATFORM = platform;
IS_MOBILE = isMobile;
IS_ONLINE = isOnline;
if (CHAT_UTIL.isAndroid()) {
var needHostAlert = android.getExitHostAlert();
if (needHostAlert) {
alert(getLocalizedString("inform_exit_host_collaboration"));
}
} }
CHAT_UI.refreshRoomList(ChatRoomType.GROUP); }
CHAT_UI.dismissLoadingIndicator(); ChatList.refreshRoomList(ChatRoomType.GROUP);
}; NativeBridgeDelegate.saveSelectedUserList("");
</script>
Common.dismissLoadingIndicator();
</script>
</body> </body>
</html> </html>
\ No newline at end of file
...@@ -18,172 +18,158 @@ ...@@ -18,172 +18,158 @@
</head> </head>
<body> <body>
<!-- ナビメニュー --> <!-- ナビメニュー -->
<nav> <nav>
<div class="row h-100 align-items-center"> <div class="row h-100 align-items-center">
<div class="col-4 pr-0"> <div class="col-4 pr-0">
<div class="nav-item"> <div class="nav-item">
<div class="nav_prev"> <div class="nav_prev">
<a href="chat_room.html"><span style="font-size: 13px;">ルーム</span></a> <a href="chat_room.html"><span style="font-size: 13px;">ルーム</span></a>
</div>
</div> </div>
</div> </div>
</div> <div class="col-4 p-0">
<div class="col-4 p-0"> <div class="nav-item p-0">
<div class="nav-item p-0"> <h1 class="nav-ttl" id="addUserTitle">ユーザー招待</h1>
<h1 class="nav-ttl" id="addUserTitle">ユーザー招待</h1> </div>
</div>
</div>
<div class="col-4 pl-0">
<div class="nav-item text-right">
</div> </div>
</div><!-- .col --> <div class="col-4 pl-0">
</div><!-- .row --> <div class="nav-item text-right">
</nav><!-- nav --> </div>
</div><!-- .col -->
</div><!-- .row -->
</nav><!-- nav -->
<!-- コンテンツ --> <!-- コンテンツ -->
<main id="chat_add_user"> <main id="chat_add_user">
<form id="addUserForm" action="chat_add_user_confirm.html" method="post"> <form id="addUserForm" action="chat_add_user_confirm.html" method="post">
<!-- ユーザー検索 --> <!-- ユーザー検索 -->
<div class="search_form my-2"> <div class="search_form my-2">
<input type="search" name="search" placeholder="ユーザー検索" maxlength="30"> <input type="search" name="search" placeholder="ユーザー検索" maxlength="30">
<span class="src_icon"></span> <span class="src_icon"></span>
<a href="#" class="cancel none">キャンセル</a> <a href="#" class="cancel none">キャンセル</a>
<input type="input" name="hidden_for_prevent_submit" hidden> <input type="input" name="hidden_for_prevent_submit" hidden>
</div> </div>
<!-- タブ --> <!-- タブ -->
<div class="content tabs"> <div class="content tabs">
<input id="tabMyGroupOnAddUser" type="radio" name="tab_item" checked> <input id="tabMyGroupOnAddUser" type="radio" name="tab_item" checked>
<label class="tab_item m-0" for="tabMyGroupOnAddUser">マイグループ</label> <label class="tab_item m-0" for="tabMyGroupOnAddUser">マイグループ</label>
<input id="tabAllGroupOnAddUser" type="radio" name="tab_item"> <input id="tabAllGroupOnAddUser" type="radio" name="tab_item">
<label class="tab_item m-0" for="tabAllGroupOnAddUser">全グループ</label> <label class="tab_item m-0" for="tabAllGroupOnAddUser">全グループ</label>
<div class="tab_content" id="tab1_content"> <div class="tab_content" id="tab1_content">
<div class="chat_list"> <div class="chat_list">
<!-- お気に入りグループ --> <!-- お気に入りグループ -->
<div class="category"><div class="category_name"><span>お気に入り</span></div></div> <div class="category">
<div id="favoriteListForMakeRoom"></div> <div class="category_name"><span>お気に入り</span></div>
<div id="myGroupListForMakeRoom"></div> </div>
<div id="favoriteListForMakeRoom"></div>
<div id="myGroupListForMakeRoom"></div>
</div>
</div> </div>
</div> <div class="tab_content" id="tab2_content">
<div class="tab_content" id="tab2_content"> <div class="breadcrumb" id="groupPathAreaForAddUser"></div>
<div class="breadcrumb" id="groupPathAreaForAddUser"></div> <div class="chat_list">
<div class="chat_list"> <!-- 全グループ -->
<!-- 全グループ --> <ul class="p-0 chat_make_room_list">
<ul class="p-0 chat_make_room_list"> <li class="d-flex align-items-center" id="rootGroupArea">
<li class="d-flex align-items-center" id="rootGroupArea"> <a href="#" class="w-100" id="rootGroupBtnForAddUser">
<a href="#" class="w-100" id="rootGroupBtnForAddUser"> <div class="chat_item d-flex flex-row align-items-center">
<div class="chat_item d-flex flex-row align-items-center"> <div class="chat_item_l">
<div class="chat_item_l"> <div class="thumbnail-icon">
<div class="thumbnail-icon"> <img src="icon/icon_prev_top.png" alt="トップグループに戻る" />
<img src="icon/icon_prev_top.png" alt="トップグループに戻る" /> </div>
</div> </div>
</div> <div class="chat_item_m px-0">
<div class="chat_item_m px-0"> <div class="d-flex flex-column">
<div class="d-flex flex-column"> <div class="chat_item_t">
<div class="chat_item_t"> <span class="chat_item_ttl">トップグループに戻る</span>
<span class="chat_item_ttl">トップグループに戻る</span> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </a>
</a> </li>
</li> <li class="d-flex align-items-center" id="parentGroupArea">
<li class="d-flex align-items-center" id="parentGroupArea"> <a href="#" class="w-100" id="parentGroupBtnForAddUser">
<a href="#" class="w-100" id="parentGroupBtnForAddUser"> <div class="chat_item d-flex flex-row align-items-center">
<div class="chat_item d-flex flex-row align-items-center"> <div class="chat_item_l">
<div class="chat_item_l"> <div class="thumbnail-icon">
<div class="thumbnail-icon"> <img src="icon/icon_prev.png" alt="上位グループに戻る" />
<img src="icon/icon_prev.png" alt="上位グループに戻る" /> </div>
</div> </div>
</div> <div class="chat_item_m px-0">
<div class="chat_item_m px-0"> <div class="d-flex flex-column">
<div class="d-flex flex-column"> <div class="chat_item_t">
<div class="chat_item_t"> <span class="chat_item_ttl">上位グループに戻る</span>
<span class="chat_item_ttl">上位グループに戻る</span> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </a>
</a> </li>
</li> <div id="childGroupListAreaForAddUser"></div>
<div id="childGroupListAreaForAddUser"></div> <div id="userInGroupListForAddUser"></div>
<div id="userInGroupListForAddUser"></div> </ul>
</ul> </div>
</div> </div>
</div> </div>
</div> <div class="chat_make_room">
<div class="chat_make_room"> <ul class="overlay_src_msg" style="padding-inline-start: 20px;">
<ul class="overlay_src_msg" style="padding-inline-start: 20px;"> </ul>
</ul> </div>
</div> <!-- ルーム解説ボタン -->
<!-- ルーム解説ボタン --> <div class="make_room_confirm_btn content" id="addUserConfirmBtn">
<div class="make_room_confirm_btn content" id="addUserConfirmBtn"> <button type="button" name="button">
<button type="button" name="button"> 確認<br>
確認<br> <span class="select_member_num"></span><span class="select_member">名 選択中</span></button>
<span class="select_member_num"></span><span class="select_member">名 選択中</span></button> </div>
</div> </form>
</form> </main>
</main>
<script src="./js/libs/jquery-3.3.1.min.js"></script> <!-- Library -->
<script src="./js/libs/moment.js"></script> <script src="./js/libs/jquery-3.3.1.min.js"></script>
<script src="./js/libs/locale/ko.js" charset="UTF-8"></script> <script src="./js/libs/moment.js"></script>
<script src="./js/libs/locale/ja.js" charset="UTF-8"></script> <script src="./js/libs/locale/ko.js" charset="UTF-8"></script>
<script src="./js/libs/mustache.min.js"></script> <script src="./js/libs/locale/ja.js" charset="UTF-8"></script>
<script src="./js/libs/bootstrap.min.js"></script> <script src="./js/libs/mustache.min.js"></script>
<script src="./js/libs/jquery.mark.min.js"></script> <script src="./js/libs/bootstrap.min.js"></script>
<script src="./js/common.js"></script> <script src="./js/libs/jquery.mark.min.js"></script>
<script src="./js/loading.js"></script> <!-- Language -->
<script src="./js/language.js"></script> <script src="./js/languages/language.js"></script>
<script src="./js/language_ko.js" charset="UTF-8"></script> <script src="./js/languages/language_ko.js" charset="UTF-8"></script>
<script src="./js/language_ja.js" charset="UTF-8"></script> <script src="./js/languages/language_ja.js" charset="UTF-8"></script>
<script src="./js/language_en.js" charset="UTF-8"></script> <script src="./js/languages/language_en.js" charset="UTF-8"></script>
<script src="./js/constant.js"></script> <!-- Common -->
<script src="./js/chat.js"></script> <script src="./js/common/constant.js"></script>
<script src="./js/chat-ui.js"></script> <script src="./js/common/native-bridge-delegate.js"></script>
<script src="./js/chat-util.js"></script> <script src="./js/common/native-bridge-datasource.js"></script>
<script src="./js/chat-db.js"></script> <script src="./js/common/common.js"></script>
<script src="./js/chat-db-foriOS.js"></script> <script src="./js/utils/chat-util.js"></script>
<script src="./js/chat-add-user.js"></script> <!-- Models -->
<script> <script src="./js/Models/deviceinfo.js"></script>
String.prototype.replaceAll = function(org, dest) { <script src="./js/Models/serverinfo.js"></script>
return this.split(org).join(dest); <script src="./js/Models/userinfo.js"></script>
} <!-- View -->
<script src="./js/views/chats/management/chat-management-common.js"></script>
<script src="./js/views/chats/management/chat-add-user.js"></script>
<script src="./js/common/loading.js"></script>
let CHAT_SERVER_URL = ''; <script>
let CMS_SERVER_URL = ''; const selectedUsers = NativeBridgeDataSource.loadSelectedUsers();
let ASSET_PATH = './'; if (selectedUsers != "") {
let PLATFORM = ''; selectedUsers.forEach(function (user) {
let IS_MOBILE = true; ChatManagementCommon.selectedUserList.push(user.shopMemberId);
let IS_ONLINE = false; })
};
if (typeof(android) != "undefined") { if (ChatManagementCommon.selectedUserList.length > 0) {
android.getLoginParameter(); $('.select_member_num').text(ChatManagementCommon.selectedUserList.length);
android.getGlobalParameter();
} else { } else {
webkit.messageHandlers.loginInfoRequestMessageHandlerId.postMessage({}); $('.select_member_num').text('0');
webkit.messageHandlers.getGlobalParameter.postMessage({});
} }
ChatAddUser.refreshMyGroupForAddUser();
function getGlobalParam(chatServerUrl, cmsServerUrl, platform, isMobile, isOnline) {
CHAT_SERVER_URL = chatServerUrl;
CMS_SERVER_URL = cmsServerUrl;
PLATFORM = platform;
IS_MOBILE = isMobile;
IS_ONLINE = isOnline;
if (CHAT_DB.loadSelectedUsers() != "") {
let selectedUsers = CHAT_DB.loadSelectedUsers();
selectedUsers.forEach(function(user) {
CHAT.globalSelectedUserList.push(user.shopMemberId);
})
};
if (CHAT.globalSelectedUserList.length > 0) {
$('.select_member_num').text(CHAT.globalSelectedUserList.length);
} else {
$('.select_member_num').text('0');
}
CHAT_UI.refreshMyGroupForAddUser();
};
</script> </script>
</body> </body>
......
...@@ -57,52 +57,35 @@ ...@@ -57,52 +57,35 @@
</form> </form>
</main> </main>
<!-- Library -->
<script src="./js/libs/jquery-3.3.1.min.js"></script> <script src="./js/libs/jquery-3.3.1.min.js"></script>
<script src="./js/language.js"></script>
<script src="./js/language_ko.js" charset="UTF-8"></script>
<script src="./js/language_ja.js" charset="UTF-8"></script>
<script src="./js/language_en.js" charset="UTF-8"></script>
<script src="./js/libs/moment.js"></script> <script src="./js/libs/moment.js"></script>
<script src="./js/libs/locale/ko.js" charset="UTF-8"></script> <script src="./js/libs/locale/ko.js" charset="UTF-8"></script>
<script src="./js/libs/locale/ja.js" charset="UTF-8"></script> <script src="./js/libs/locale/ja.js" charset="UTF-8"></script>
<script src="./js/libs/mustache.min.js"></script> <script src="./js/libs/mustache.min.js"></script>
<script src="./js/libs/bootstrap.min.js"></script> <script src="./js/libs/bootstrap.min.js"></script>
<script src="./js/libs/jquery.mark.min.js"></script> <script src="./js/libs/jquery.mark.min.js"></script>
<script src="./js/common.js"></script> <!-- Language -->
<script src="./js/loading.js"></script> <script src="./js/languages/language.js"></script>
<script src="./js/constant.js"></script> <script src="./js/languages/language_ko.js" charset="UTF-8"></script>
<script src="./js/chat.js"></script> <script src="./js/languages/language_ja.js" charset="UTF-8"></script>
<script src="./js/chat-ui.js"></script> <script src="./js/languages/language_en.js" charset="UTF-8"></script>
<script src="./js/chat-util.js"></script> <!-- Common -->
<script src="./js/chat-db.js"></script> <script src="./js/common/constant.js"></script>
<script src="./js/chat-db-foriOS.js"></script> <script src="./js/common/native-bridge-delegate.js"></script>
<script> <script src="./js/common/native-bridge-datasource.js"></script>
String.prototype.replaceAll = function(org, dest) { <script src="./js/common/common.js"></script>
return this.split(org).join(dest); <script src="./js/utils/chat-util.js"></script>
} <!-- Models -->
let CHAT_SERVER_URL = ''; <script src="./js/Models/deviceinfo.js"></script>
let CMS_SERVER_URL = ''; <script src="./js/Models/serverinfo.js"></script>
let ASSET_PATH = './'; <script src="./js/Models/userinfo.js"></script>
let PLATFORM = ''; <!-- View -->
let IS_MOBILE = true; <script src="./js/views/chats/management/chat-management-common.js"></script>
let IS_ONLINE = false; <script src="./js/common/loading.js"></script>
if (typeof(android) != "undefined") {
android.getLoginParameter();
android.getGlobalParameter();
} else {
webkit.messageHandlers.loginInfoRequestMessageHandlerId.postMessage({});
webkit.messageHandlers.getGlobalParameter.postMessage({});
}
function getGlobalParam(chatServerUrl, cmsServerUrl, platform, isMobile, isOnline) { <script>
CHAT_SERVER_URL = chatServerUrl; ChatManagementCommon.showAddUserConfirmView();
CMS_SERVER_URL = cmsServerUrl;
PLATFORM = platform;
IS_MOBILE = isMobile;
IS_ONLINE = isOnline;
//CHAT_UI.showMakeRoomConfirmView();
CHAT_UI.showAddUserConfirmView();
};
</script> </script>
</body> </body>
......
...@@ -56,56 +56,37 @@ ...@@ -56,56 +56,37 @@
</div> </div>
</main> </main>
<!-- Library -->
<script src="./js/libs/jquery-3.3.1.min.js"></script> <script src="./js/libs/jquery-3.3.1.min.js"></script>
<script src="./js/libs/socket.io.js"></script>
<script src="./js/libs/moment.js"></script> <script src="./js/libs/moment.js"></script>
<script src="./js/libs/locale/ko.js" charset="UTF-8"></script> <script src="./js/libs/locale/ko.js" charset="UTF-8"></script>
<script src="./js/libs/locale/ja.js" charset="UTF-8"></script> <script src="./js/libs/locale/ja.js" charset="UTF-8"></script>
<script src="./js/libs/mustache.min.js"></script> <script src="./js/libs/mustache.min.js"></script>
<script src="./js/libs/bootstrap.min.js"></script> <script src="./js/libs/bootstrap.min.js"></script>
<script src="./js/libs/jquery.mark.min.js"></script> <script src="./js/libs/jquery.mark.min.js"></script>
<script src="./js/common.js"></script> <!-- Language -->
<script src="./js/language.js"></script> <script src="./js/languages/language.js"></script>
<script src="./js/language_ko.js" charset="UTF-8"></script> <script src="./js/languages/language_ko.js" charset="UTF-8"></script>
<script src="./js/language_ja.js" charset="UTF-8"></script> <script src="./js/languages/language_ja.js" charset="UTF-8"></script>
<script src="./js/language_en.js" charset="UTF-8"></script> <script src="./js/languages/language_en.js" charset="UTF-8"></script>
<script src="./js/constant.js"></script> <!-- Common -->
<script src="./js/chat.js"></script> <script src="./js/common/constant.js"></script>
<script src="./js/chat-ui.js"></script> <script src="./js/common/native-bridge-delegate.js"></script>
<script src="./js/chat-util.js"></script> <script src="./js/common/native-bridge-datasource.js"></script>
<script src="./js/chat-db.js"></script> <script src="./js/common/common.js"></script>
<script src="./js/chat-db-foriOS.js"></script> <script src="./js/utils/chat-util.js"></script>
<script src="./js/chat-websocket.js"></script> <!-- Models -->
<script src="./js/chat-websocket-message.js"></script> <script src="./js/Models/deviceinfo.js"></script>
<script src="./js/chat-websocket-refresh-group-list.js"></script> <script src="./js/Models/serverinfo.js"></script>
<script src="./js/chat-websocket-refresh-user-list-in-group.js"></script> <script src="./js/Models/userinfo.js"></script>
<script src="./js/chat-room.js"></script> <!-- View -->
<script src="./js/views/chats/chat-room.js"></script>
<script src="./js/views/chats/chat-room-search.js"></script>
<script src="./js/views/chats/chat-room-message.js"></script>
<script src="./js/views/chats/management/chat-room-change.js"></script>
<script> <script>
String.prototype.replaceAll = function (org, dest) {
return this.split(org).join(dest);
}
let CHAT_SERVER_URL = '';
let CMS_SERVER_URL = '';
let ASSET_PATH = './';
let PLATFORM = '';
let IS_MOBILE = true;
let IS_ONLINE = false;
let roomId = 0; let roomId = 0;
if (typeof (android) != "undefined") {
android.getLoginParameter();
android.getGlobalParameter();
} else {
webkit.messageHandlers.loginInfoRequestMessageHandlerId.postMessage({});
webkit.messageHandlers.getGlobalParameter.postMessage({});
}
function getGlobalParam(chatServerUrl, cmsServerUrl, platform, isMobile, isOnline) {
CHAT_SERVER_URL = chatServerUrl;
CMS_SERVER_URL = cmsServerUrl;
PLATFORM = platform;
IS_MOBILE = isMobile;
IS_ONLINE = isOnline;
};
</script> </script>
</body> </body>
......
...@@ -60,7 +60,9 @@ ...@@ -60,7 +60,9 @@
<div class="tab_content" id="tab1_content"> <div class="tab_content" id="tab1_content">
<div class="chat_list"> <div class="chat_list">
<!-- お気に入りグループ --> <!-- お気に入りグループ -->
<div class="category"><div class="category_name"><span>お気に入り</span></div></div> <div class="category">
<div class="category_name"><span>お気に入り</span></div>
</div>
<div id="favoriteListForMakeRoom"></div> <div id="favoriteListForMakeRoom"></div>
<div id="myGroupListForMakeRoom"></div> <div id="myGroupListForMakeRoom"></div>
</div> </div>
...@@ -125,6 +127,8 @@ ...@@ -125,6 +127,8 @@
</div> </div>
</form> </form>
</main> </main>
<!-- Library -->
<script src="./js/libs/jquery-3.3.1.min.js"></script> <script src="./js/libs/jquery-3.3.1.min.js"></script>
<script src="./js/libs/moment.js"></script> <script src="./js/libs/moment.js"></script>
<script src="./js/libs/locale/ko.js" charset="UTF-8"></script> <script src="./js/libs/locale/ko.js" charset="UTF-8"></script>
...@@ -132,58 +136,40 @@ ...@@ -132,58 +136,40 @@
<script src="./js/libs/mustache.min.js"></script> <script src="./js/libs/mustache.min.js"></script>
<script src="./js/libs/bootstrap.min.js"></script> <script src="./js/libs/bootstrap.min.js"></script>
<script src="./js/libs/jquery.mark.min.js"></script> <script src="./js/libs/jquery.mark.min.js"></script>
<script src="./js/common.js"></script> <!-- Language -->
<script src="./js/loading.js"></script> <script src="./js/languages/language.js"></script>
<script src="./js/language.js"></script> <script src="./js/languages/language_ko.js" charset="UTF-8"></script>
<script src="./js/language_ko.js" charset="UTF-8"></script> <script src="./js/languages/language_ja.js" charset="UTF-8"></script>
<script src="./js/language_ja.js" charset="UTF-8"></script> <script src="./js/languages/language_en.js" charset="UTF-8"></script>
<script src="./js/language_en.js" charset="UTF-8"></script> <!-- Common -->
<script src="./js/constant.js"></script> <script src="./js/common/constant.js"></script>
<script src="./js/chatMakeRoom.js"></script> <script src="./js/common/native-bridge-delegate.js"></script>
<script src="./js/chat.js"></script> <script src="./js/common/native-bridge-datasource.js"></script>
<script src="./js/chat-ui.js"></script> <script src="./js/common/common.js"></script>
<script src="./js/chat-util.js"></script> <script src="./js/utils/chat-util.js"></script>
<script src="./js/chat-db.js"></script> <!-- Models -->
<script src="./js/chat-db-foriOS.js"></script> <script src="./js/Models/deviceinfo.js"></script>
<script src="./js/Models/serverinfo.js"></script>
<script src="./js/Models/userinfo.js"></script>
<!-- View -->
<script src="./js/views/chats/management/chat-management-common.js"></script>
<script src="./js/views/chats/management/chat-make-room.js"></script>
<script src="./js/common/loading.js"></script>
<script> <script>
String.prototype.replaceAll = function(org, dest) { if (NativeBridgeDataSource.loadSelectedUsers() != "") {
return this.split(org).join(dest); let selectedUsers = NativeBridgeDataSource.loadSelectedUsers();
} selectedUsers.forEach(function (user) {
ChatManagementCommon.selectedUserList.push(user.shopMemberId);
})
};
let CHAT_SERVER_URL = ''; if (ChatManagementCommon.selectedUserList.length > 0) {
let CMS_SERVER_URL = ''; $('.select_member_num').text(ChatManagementCommon.selectedUserList.length);
let ASSET_PATH = './';
let PLATFORM = '';
let IS_MOBILE = true;
let IS_ONLINE = false;
if (typeof(android) != "undefined") {
android.getLoginParameter();
android.getGlobalParameter();
} else { } else {
webkit.messageHandlers.loginInfoRequestMessageHandlerId.postMessage({}); $('.select_member_num').text('0');
webkit.messageHandlers.getGlobalParameter.postMessage({});
} }
ChatMakeRoom.refreshMyGroupForMakeRoom();
function getGlobalParam(chatServerUrl, cmsServerUrl, platform, isMobile, isOnline) {
CHAT_SERVER_URL = chatServerUrl;
CMS_SERVER_URL = cmsServerUrl;
PLATFORM = platform;
IS_MOBILE = isMobile;
IS_ONLINE = isOnline;
if (CHAT_DB.loadSelectedUsers() != "") {
let selectedUsers = CHAT_DB.loadSelectedUsers();
selectedUsers.forEach(function(user) {
CHAT.globalSelectedUserList.push(user.shopMemberId);
})
};
if (CHAT.globalSelectedUserList.length > 0) {
$('.select_member_num').text(CHAT.globalSelectedUserList.length);
} else {
$('.select_member_num').text('0');
}
CHAT_UI.refreshMyGroupForMakeRoom();
};
</script> </script>
</body> </body>
......
...@@ -41,27 +41,30 @@ ...@@ -41,27 +41,30 @@
<!-- コンテンツ --> <!-- コンテンツ -->
<main id="chat_make_room_confirm"> <main id="chat_make_room_confirm">
<!-- ルーム名入力 --> <!-- ルーム名入力 -->
<div class="room_name"> <div class="room_name">
<label><h2>ルーム名</h2></label> <label>
<input type="text" class="input_name_room" name="room_name" id="newRoomName" placeholder="ルーム名を入力してください" maxlength="20"> <h2>ルーム名</h2>
</div> </label>
<input type="text" class="input_name_room" name="room_name" id="newRoomName" placeholder="ルーム名を入力してください"
maxlength="20">
</div>
<!-- 参加者一覧 --> <!-- 参加者一覧 -->
<div class="chat_list"> <div class="chat_list">
<h2>参加者</h2> <h2>参加者</h2>
<ul class="p-0 chat_make_room_list"> <ul class="p-0 chat_make_room_list">
<div id="selectedUserList"></div> <div id="selectedUserList"></div>
</ul> </ul>
</div> </div>
<!-- ルーム解説ボタン --> <!-- ルーム解説ボタン -->
<div class="make_room_btn" id="makeRoomBtn"> <div class="make_room_btn" id="makeRoomBtn">
<button type="button" name="button"> <button type="button" name="button">
チャット開始</button> チャット開始</button>
</div> </div>
</main> </main>
<!-- Library -->
<script src="./js/libs/jquery-3.3.1.min.js"></script> <script src="./js/libs/jquery-3.3.1.min.js"></script>
<script src="./js/libs/moment.js"></script> <script src="./js/libs/moment.js"></script>
<script src="./js/libs/locale/ko.js" charset="UTF-8"></script> <script src="./js/libs/locale/ko.js" charset="UTF-8"></script>
...@@ -69,46 +72,29 @@ ...@@ -69,46 +72,29 @@
<script src="./js/libs/mustache.min.js"></script> <script src="./js/libs/mustache.min.js"></script>
<script src="./js/libs/bootstrap.min.js"></script> <script src="./js/libs/bootstrap.min.js"></script>
<script src="./js/libs/jquery.mark.min.js"></script> <script src="./js/libs/jquery.mark.min.js"></script>
<script src="./js/common.js"></script> <!-- Language -->
<script src="./js/loading.js"></script> <script src="./js/languages/language.js"></script>
<script src="./js/language.js"></script> <script src="./js/languages/language_ko.js" charset="UTF-8"></script>
<script src="./js/language_ko.js" charset="UTF-8"></script> <script src="./js/languages/language_ja.js" charset="UTF-8"></script>
<script src="./js/language_ja.js" charset="UTF-8"></script> <script src="./js/languages/language_en.js" charset="UTF-8"></script>
<script src="./js/language_en.js" charset="UTF-8"></script> <!-- Common -->
<script src="./js/constant.js"></script> <script src="./js/common/constant.js"></script>
<script src="./js/chat.js"></script> <script src="./js/common/native-bridge-delegate.js"></script>
<script src="./js/chat-ui.js"></script> <script src="./js/common/native-bridge-datasource.js"></script>
<script src="./js/chat-util.js"></script> <script src="./js/common/common.js"></script>
<script src="./js/chat-db.js"></script> <script src="./js/utils/chat-util.js"></script>
<script src="./js/chat-db-foriOS.js"></script> <!-- Models -->
<script> <script src="./js/Models/deviceinfo.js"></script>
String.prototype.replaceAll = function(org, dest) { <script src="./js/Models/serverinfo.js"></script>
return this.split(org).join(dest); <script src="./js/Models/userinfo.js"></script>
} <!-- View -->
<script src="./js/views/chats/management/chat-management-common.js"></script>
<script src="./js/common/loading.js"></script>
let CHAT_SERVER_URL = ''; <script>
let CMS_SERVER_URL = ''; ChatManagementCommon.showMakeRoomConfirmView();
let ASSET_PATH = './';
let PLATFORM = '';
let IS_MOBILE = true;
let IS_ONLINE = false;
if (typeof(android) != "undefined") {
android.getLoginParameter();
android.getGlobalParameter();
} else {
webkit.messageHandlers.loginInfoRequestMessageHandlerId.postMessage({});
webkit.messageHandlers.getGlobalParameter.postMessage({});
}
function getGlobalParam(chatServerUrl, cmsServerUrl, platform, isMobile, isOnline) { $("#newRoomName").attr("placeholder", getLocalizedString("newRoomName"));
CHAT_SERVER_URL = chatServerUrl;
CMS_SERVER_URL = cmsServerUrl;
PLATFORM = platform;
IS_MOBILE = isMobile;
IS_ONLINE = isOnline;
CHAT_UI.showMakeRoomConfirmView();
};
</script> </script>
</body> </body>
......
...@@ -53,18 +53,13 @@ ...@@ -53,18 +53,13 @@
<!-- コンテンツ --> <!-- コンテンツ -->
<main id="chat_room"> <main id="chat_room">
<div id="user_list" class="user_list d-flex flex-row"> <div id="user_list" class="user_list d-flex flex-row"> </div>
</div>
<!-- フィルター --> <!-- フィルター -->
<div id="filter" class="user_list filter d-flex flex-row none"></div> <div id="filter" class="user_list filter d-flex flex-row none"></div>
<div class="chat_list none" id="searchList"> <div class="chat_list none" id="searchList">
<ul class="overlay_src_msg"> <ul class="overlay_src_msg">
</ul> </ul>
</div> </div>
<!-- チャット内容 --> <!-- チャット内容 -->
<div class="room_container"> <div class="room_container">
<div class="room_contents scroll"> <div class="room_contents scroll">
...@@ -72,7 +67,6 @@ ...@@ -72,7 +67,6 @@
</div> </div>
</div> </div>
</main> </main>
<!-- フッター --> <!-- フッター -->
<footer class="chat_room_footer"> <footer class="chat_room_footer">
<!-- フッター上 --> <!-- フッター上 -->
...@@ -98,39 +92,39 @@ ...@@ -98,39 +92,39 @@
<input type="text" name="message" class="message_input_form" id="messageInput" placeholder="メッセージを入力してください" <input type="text" name="message" class="message_input_form" id="messageInput" placeholder="メッセージを入力してください"
maxlength="600"> maxlength="600">
<button type="button" name="button" class="message_input_send none" id="messageSend" <button type="button" name="button" class="message_input_send none" id="messageSend"
onclick="CHAT_UI.sendMessage(this);">送信</button> onclick="ChatRoom.sendMessage(this);">送信</button>
</div> </div>
</div> </div>
<!-- フッター下 --> <!-- フッター下 -->
<div class="footer_content_b"> <div class="footer_content_b">
<div class="d-flex flex-row justify-content-around h-100"> <div class="d-flex flex-row justify-content-around h-100">
<div class="footer_item"> <div class="footer_item">
<a href="javascript:CHAT_UI.startCollaboration(COLLABORATION_TYPE.AUDIO);"> <a href="javascript:ChatRoom.startCollaboration(COLLABORATION_TYPE.AUDIO);">
<img src="icon/icon_phone.png" alt="通話アイコン"> <img src="icon/icon_phone.png" alt="通話アイコン">
<p>通話</p> <p>通話</p>
</a> </a>
</div> </div>
<div class="footer_item"> <div class="footer_item">
<a href="javascript:CHAT_UI.startCollaboration(COLLABORATION_TYPE.DOCUMENT);"> <a href="javascript:ChatRoom.startCollaboration(COLLABORATION_TYPE.DOCUMENT);">
<img src="icon/icon_paste.png" alt="文書アイコン"> <img src="icon/icon_paste.png" alt="文書アイコン">
<p>文書</p> <p>文書</p>
</a> </a>
</div> </div>
<div class="footer_item"> <div class="footer_item">
<a href="javascript:CHAT_UI.startCollaboration(COLLABORATION_TYPE.CAMERA);"> <a href="javascript:ChatRoom.startCollaboration(COLLABORATION_TYPE.CAMERA);">
<img src="icon/icon_photo.png" alt="画像アイコン"> <img src="icon/icon_photo.png" alt="画像アイコン">
<p>画像</p> <p>画像</p>
</a> </a>
</div> </div>
<div class="footer_item"> <div class="footer_item">
<a href="javascript:CHAT_UI.startCollaboration(COLLABORATION_TYPE.VIDEO);"> <a href="javascript:ChatRoom.startCollaboration(COLLABORATION_TYPE.VIDEO);">
<img src="icon/icon_movie.png" alt="動画アイコン"> <img src="icon/icon_movie.png" alt="動画アイコン">
<p>動画</p> <p>動画</p>
</a> </a>
</div> </div>
<!--リリース後開発予定--> <!--リリース後開発予定-->
<div class="footer_item"> <div class="footer_item">
<a href="javascript:CHAT_UI.startCollaboration(COLLABORATION_TYPE.BOARD);"> <a href="javascript:ChatRoom.startCollaboration(COLLABORATION_TYPE.BOARD);">
<img src="icon/icon_whiteboard_gray.png" alt="ホワイトボードアイコン"> <img src="icon/icon_whiteboard_gray.png" alt="ホワイトボードアイコン">
<p>ボード</p> <p>ボード</p>
</a> </a>
...@@ -144,78 +138,63 @@ ...@@ -144,78 +138,63 @@
<div id="chatMenuModal"></div> <div id="chatMenuModal"></div>
<div id="pictureModal"></div> <div id="pictureModal"></div>
<!-- Library -->
<script src="./js/libs/jquery-3.3.1.min.js"></script> <script src="./js/libs/jquery-3.3.1.min.js"></script>
<script src="./js/libs/socket.io.js"></script>
<script src="./js/libs/moment.js"></script> <script src="./js/libs/moment.js"></script>
<script src="./js/libs/locale/ko.js" charset="UTF-8"></script> <script src="./js/libs/locale/ko.js" charset="UTF-8"></script>
<script src="./js/libs/locale/ja.js" charset="UTF-8"></script> <script src="./js/libs/locale/ja.js" charset="UTF-8"></script>
<script src="./js/libs/mustache.min.js"></script> <script src="./js/libs/mustache.min.js"></script>
<script src="./js/libs/bootstrap.min.js"></script> <script src="./js/libs/bootstrap.min.js"></script>
<script src="./js/libs/jquery.mark.min.js"></script> <script src="./js/libs/jquery.mark.min.js"></script>
<script src="./js/common.js"></script> <script src="./js/libs/socket.io.js"></script>
<script src="./js/language.js"></script> <!-- Language -->
<script src="./js/loading.js"></script> <script src="./js/languages/language.js"></script>
<script src="./js/language_ko.js" charset="UTF-8"></script> <script src="./js/languages/language_ko.js" charset="UTF-8"></script>
<script src="./js/language_ja.js" charset="UTF-8"></script> <script src="./js/languages/language_ja.js" charset="UTF-8"></script>
<script src="./js/language_en.js" charset="UTF-8"></script> <script src="./js/languages/language_en.js" charset="UTF-8"></script>
<script src="./js/constant.js"></script> <!-- Common -->
<script src="./js/chat.js"></script> <script src="./js/common/constant.js"></script>
<script src="./js/chat-ui.js"></script> <script src="./js/common/native-bridge-delegate.js"></script>
<script src="./js/chat-util.js"></script> <script src="./js/common/native-bridge-datasource.js"></script>
<script src="./js/chat-db.js"></script> <script src="./js/common/common.js"></script>
<script src="./js/chat-db-foriOS.js"></script> <script src="./js/utils/chat-util.js"></script>
<script src="./js/chat-websocket.js"></script> <!-- Models -->
<script src="./js/chat-websocket-message.js"></script> <script src="./js/Models/deviceinfo.js"></script>
<script src="./js/chat-websocket-refresh-group-list.js"></script> <script src="./js/Models/serverinfo.js"></script>
<script src="./js/chat-websocket-refresh-user-list-in-group.js"></script> <script src="./js/Models/userinfo.js"></script>
<script src="./js/chat-room.js"></script> <script src="./js/Models/roominfo.js"></script>
<script src="./js/Models/socket-joininfo.js"></script>
<!-- Socket -->
<script src="./js/sockets/chat-websocket.js"></script>
<script src="./js/sockets/chat-websocket-message.js"></script>
<!-- View -->
<script src="./js/utils/chat-media-handler.js"></script>
<script src="./js/views/chats/chat-room.js"></script>
<script src="./js/views/chats/chat-room-search.js"></script>
<script src="./js/views/chats/chat-room-message.js"></script>
<script src="./js/views/contact/namecard.js"></script>
<script src="./js/common/loading.js"></script>
<script> <script>
function imageModal(image) { function imageModal(image) {
$('#modal_image').attr('src', image.src); $('#modal_image').attr('src', image.src);
$('#pictureModalCenter').modal('show'); $('#pictureModalCenter').modal('show');
} }
String.prototype.replaceAll = function (org, dest) {
return this.split(org).join(dest);
}
let CHAT_SERVER_URL = '';
let CMS_SERVER_URL = '';
let ASSET_PATH = './';
let PLATFORM = '';
let IS_MOBILE = true;
let IS_ONLINE = false;
let androidVersion = 0;
let roomName;
$("#pictureModal").load("./modal_chat_picture.html"); $("#pictureModal").load("./modal_chat_picture.html");
$("#chatMenuModal").load("./modal_chat_menu.html"); $("#chatMenuModal").load("./modal_chat_menu.html");
$("#loadingArea").load("./loading.html"); $("#loadingArea").load("./loading.html");
if (typeof (android) != "undefined") { if (deviceInfo.isAndroid()) {
android.getLoginParameter(); const needHostAlert = android.getExitHostAlert();
android.getGlobalParameter(); if (needHostAlert) {
android.saveSelectedUserList(""); alert(getLocalizedString("inform_exit_host_collaboration"));
androidVersion = android.getAndroidVersion(); }
} else {
webkit.messageHandlers.loginInfoRequestMessageHandlerId.postMessage({});
webkit.messageHandlers.getGlobalParameter.postMessage({});
webkit.messageHandlers.saveSelectedUserList.postMessage("");
} }
ChatRoom.loadMessages(roomInfo.roomID, roomInfo.roomName);
NativeBridgeDelegate.saveSelectedUserList("");
function getGlobalParam(chatServerUrl, cmsServerUrl, platform, isMobile, isOnline) {
CHAT_SERVER_URL = chatServerUrl;
CMS_SERVER_URL = cmsServerUrl;
PLATFORM = platform;
IS_MOBILE = isMobile;
IS_ONLINE = isOnline;
if (CHAT_UTIL.isAndroid()) {
var needHostAlert = android.getExitHostAlert();
if (needHostAlert) {
alert(getLocalizedString("inform_exit_host_collaboration"));
}
}
CHAT_UI.loadMessages(CHAT.globalLoginParameter.roomId, CHAT.globalLoginParameter.roomName);
};
</script> </script>
</body> </body>
......
...@@ -38,15 +38,14 @@ ...@@ -38,15 +38,14 @@
</div> </div>
<div class="collabo_nav_r"> <div class="collabo_nav_r">
<div class="text-right d-flex align-items-center"> <div class="text-right d-flex align-items-center">
<button type="button" name="button" <button type="button" name="button" class="btn user_btn"></button>
class="btn user_btn"></button>
<button type="button" name="button" class="btn add_user_btn none"></button> <button type="button" name="button" class="btn add_user_btn none"></button>
<div class="menu-icon menu_btn host_contents" onclick="this.classList.toggle('hover');"> <div class="menu-icon menu_btn host_contents" onclick="this.classList.toggle('hover');">
<div class="menu-bar menu-bar1"></div> <div class="menu-bar menu-bar1"></div>
<div class="menu-bar menu-bar2"></div> <div class="menu-bar menu-bar2"></div>
<div class="menu-bar menu-bar3"></div> <div class="menu-bar menu-bar3"></div>
</div> </div>
<!-- <button type="button" name="button" class="btn exit_btn" onclick="Coview_exitCollaboration();"></button> --> <!-- <button type="button" name="button" class="btn exit_btn" onclick="CoviewBridge.exitCollaboration();"></button> -->
</div> </div>
</div> </div>
</div> </div>
...@@ -57,37 +56,31 @@ ...@@ -57,37 +56,31 @@
<!-- コンテンツ --> <!-- コンテンツ -->
<main id="collabo_main" class="none"> <main id="collabo_main" class="none">
<div class="document_wrap"> <div class="document_wrap">
<!-- 音声共有 --> <!-- 音声共有 -->
<div class="talking_area icon_talking_wrap d-flex flex-column justify-content-center align-items-center h-100 collaboration_contents voice_contents none"> <div
class="talking_area icon_talking_wrap d-flex flex-column justify-content-center align-items-center h-100 collaboration_contents voice_contents none">
<div class="talking_img_wrap"> <div class="talking_img_wrap">
<img src="icon/icon_talking_white.png" alt="通話中"> <img src="icon/icon_talking_white.png" alt="通話中">
</div> </div>
<span class="text-white mt-4">通話中</span> <span class="text-white mt-4">通話中</span>
</div> </div>
<!-- 文書共有 --> <!-- 文書共有 -->
<div class="start_pip_area d-flex flex-column justify-content-center align-items-center h-100 collaboration_contents document_contents none"> <div
<div class="start_pip_img_wrap"> class="start_pip_area d-flex flex-column justify-content-center align-items-center h-100 collaboration_contents document_contents none">
<a href="javascript:startPipMode();"> <div class="start_pip_img_wrap">
<img src="icon/icon_start_pip.png" alt="文書共有"> <a href="javascript:NativeBridgeDelegate.startPIPMode();">
</a> <img src="icon/icon_start_pip.png" alt="文書共有">
</div> </a>
<span class="text-white mt-2">共有する</span>
</div> </div>
<span class="text-white mt-2">共有する</span>
</div>
<div class="coview_share_body coview_share_area" id="coviewShare" style="z-index: 1;"> <div class="coview_share_body coview_share_area" id="coviewShare" style="z-index: 1;">
</div> </div>
</div> </div>
</main> </main>
<div class="coview_share_photo_select_bubble none">
<button id="coviewSharePhotoCamera" class="coview_share_photo_select_bubble_in_button cam">
</button>
<BR>
<button id="coviewSharePhotoGallery" class="coview_share_photo_select_bubble_in_button gal">
</button>
</div>
<!-- ユーザー追加オーバーレイ --> <!-- ユーザー追加オーバーレイ -->
<div id="add_user_list"></div> <div id="add_user_list"></div>
<div id="modal_add_user_confirm"></div> <div id="modal_add_user_confirm"></div>
...@@ -112,7 +105,7 @@ ...@@ -112,7 +105,7 @@
<!-- フッター --> <!-- フッター -->
<div id="footer_collabo"></div> <div id="footer_collabo"></div>
<div id="loadingArea"></div> <div id="loadingArea"></div>
<div class="pip_indicator none" onclick="finishPipMode();"> <div class="pip_indicator none" onclick="NativeBridgeDelegate.finishPIPMode();">
<div style="vertical-align: middle;display: table-cell;"> <div style="vertical-align: middle;display: table-cell;">
<img src="icon/icon_end_pip.png" alt="文書共有" style="width: 30px;height: 30px;"> <img src="icon/icon_end_pip.png" alt="文書共有" style="width: 30px;height: 30px;">
<span style="font-size: 20px;vertical-align: middle;">戻る</span> <span style="font-size: 20px;vertical-align: middle;">戻る</span>
...@@ -123,32 +116,49 @@ ...@@ -123,32 +116,49 @@
<div class="sp sp-circle"></div> <div class="sp sp-circle"></div>
</div> </div>
</div> </div>
<!-- Library -->
<script src="./js/libs/jquery-3.3.1.min.js"></script> <script src="./js/libs/jquery-3.3.1.min.js"></script>
<script src="./js/libs/socket.io.js"></script>
<script src="./js/libs/moment.js"></script> <script src="./js/libs/moment.js"></script>
<script src="./js/libs/locale/ko.js" charset="UTF-8"></script> <script src="./js/libs/locale/ko.js" charset="UTF-8"></script>
<script src="./js/libs/locale/ja.js" charset="UTF-8"></script> <script src="./js/libs/locale/ja.js" charset="UTF-8"></script>
<script src="./js/libs/mustache.min.js"></script> <script src="./js/libs/mustache.min.js"></script>
<script src="./js/libs/bootstrap.min.js"></script> <script src="./js/libs/bootstrap.min.js"></script>
<script src="./js/libs/jquery.mark.min.js"></script> <script src="./js/libs/jquery.mark.min.js"></script>
<script src="./js/constant.js"></script> <script src="./js/libs/socket.io.js"></script>
<script src="./js/collaboration.js"></script> <!-- Language -->
<script src="./js/common.js"></script> <script src="./js/languages/language.js"></script>
<script src="./js/chat.js"></script> <script src="./js/languages/language_ko.js" charset="UTF-8"></script>
<script src="./js/chat-ui.js"></script> <script src="./js/languages/language_ja.js" charset="UTF-8"></script>
<script src="./js/chat-util.js"></script> <script src="./js/languages/language_en.js" charset="UTF-8"></script>
<script src="./js/chat-db.js"></script> <!-- Common -->
<script src="./js/chat-db-foriOS.js"></script> <script src="./js/common/constant.js"></script>
<script src="./js/language.js"></script> <script src="./js/common/native-bridge-delegate.js"></script>
<script src="./js/language_ko.js" charset="UTF-8"></script> <script src="./js/common/native-bridge-datasource.js"></script>
<script src="./js/language_ja.js" charset="UTF-8"></script> <script src="./js/common/common.js"></script>
<script src="./js/language_en.js" charset="UTF-8"></script> <script src="./js/utils/chat-util.js"></script>
<script src="./js/chat-websocket.js"></script> <!-- Models -->
<script src="./js/chat-websocket-message.js"></script> <script src="./js/Models/deviceinfo.js"></script>
<script src="./js/chat-websocket-refresh-group-list.js"></script> <script src="./js/Models/serverinfo.js"></script>
<script src="./js/chat-websocket-refresh-user-list-in-group.js"></script> <script src="./js/Models/userinfo.js"></script>
<script src="./js/Models/roominfo.js"></script>
<script src="./js/Models/socket-joininfo.js"></script>
<script src="./js/Models/coview-userinfo.js"></script>
<!-- Socket -->
<script src="./js/sockets/chat-websocket.js"></script>
<script src="./js/sockets/chat-websocket-message.js"></script>
<!-- View -->
<script src="./js/views/chats/management/chat-management-common.js"></script>
<script src="./js/views/collaboration/collaboration.js"></script>
<script src="./js/views/collaboration/collaboration-add-user.js"></script>
<script src="https://biztaskyell.abookcloud.com/coview_api.js"></script> <script src="https://biztaskyell.abookcloud.com/coview_api.js"></script>
<script src="./js/share.js"></script> <script src="./js/views/collaboration/share.js"></script>
<script src="./js/views/collaboration/fermi-web-socket-message-handler.js"></script>
<script src="./js/views/collaboration/fermi-web-socket-bridge.js"></script>
<script src="./js/views/collaboration/share-bind-button-action.js"></script>
<script src="./js/views/collaboration/share-event-listener.js"></script>
<script src="./js/views/contact/namecard.js"></script>
<script> <script>
$("#footer_collabo").load("./footer_collabo.html"); $("#footer_collabo").load("./footer_collabo.html");
$("#modal_collabo_host_request").load("./modal_collabo_host_request.html"); $("#modal_collabo_host_request").load("./modal_collabo_host_request.html");
...@@ -159,78 +169,22 @@ ...@@ -159,78 +169,22 @@
$("#add_user_list").load("./modal_add_user_list.html"); $("#add_user_list").load("./modal_add_user_list.html");
$("#zoom").load("./zoom.html"); $("#zoom").load("./zoom.html");
$("#loadingArea").load("./loading.html"); $("#loadingArea").load("./loading.html");
let CHAT_SERVER_URL = '';
let CMS_SERVER_URL = '';
let ASSET_PATH = './';
let PLATFORM = '';
let IS_MOBILE = true;
let IS_ONLINE = false;
let collaborationJoinFlg = 0;
let isInvited = 0;
let roomType;
let joinCollaborationType = 0;
let joinMeetingId = 0;
let androidVersion = 0;
if (typeof (android) != "undefined") {
android.getLoginParameter();
android.getGlobalParameter();
roomType = android.getRoomType();
} else {
webkit.messageHandlers.loginInfoRequestMessageHandlerId.postMessage({});
webkit.messageHandlers.getGlobalParameter.postMessage({});
roomType = CHAT_DB.getRoomType();
}
if (roomType == ChatRoomType.DM) { if (deviceInfo.isAndroid()) {
$('.add_user_btn').removeClass('none'); if (
} globalUserInfo.collaborationType.type == COLLABORATION_TYPE.DOCUMENT
&& deviceInfo.androidVersion < ANDROID_SDK_VERSION.O
function startPipMode() { ) {
if (typeof (android) != "undefined") { alert(getLocalizedString('not_support_version'));
android.startPipMode(); if (typeof android != "undefined") {
} else { NativeBridgeDelegate.openCommunicationHome();
webkit.messageHandlers.startPipMode.postMessage({}); }
}
}
function finishPipMode() {
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.finishPipMode.postMessage({});
} }
} }
String.prototype.replaceAll = function (org, dest) { if (globalUserInfo.joinType != COLLABORATION_JOIN_TYPE.INVITED) {
return this.split(org).join(dest); CHAT_SOCKET.initialJoin();
} }
async function getGlobalParam(chatServerUrl, cmsServerUrl, platform, isMobile, isOnline) {
CHAT_SERVER_URL = chatServerUrl;
CMS_SERVER_URL = cmsServerUrl;
PLATFORM = platform;
IS_MOBILE = isMobile;
IS_ONLINE = isOnline;
if (CHAT_UTIL.isIOS()) {
joinCollaborationType = CHAT_DB.getJoinCollaborationType();
collaborationJoinFlg = CHAT_DB.getCollaborationJoinFlg();
} else if (CHAT_UTIL.isAndroid()) {
joinCollaborationType = android.getJoinCollaborationType();
collaborationJoinFlg = android.getCollaborationJoinFlg();
androidVersion = android.getAndroidVersion();
if (joinCollaborationType == COLLABORATION_TYPE.DOCUMENT && androidVersion < ANDROID_SDK_VERSION.O) {
alert(getLocalizedString('not_support_version'));
android.openCommunicationHome();
}
}
initCollaborationUI(joinCollaborationType);
globalUserInfo.coWorkType = CHAT_UTIL.getCoviewTypeFromCollaborationType(joinCollaborationType);
if (collaborationJoinFlg != '2') {
CHAT_SOCKET.connectSocket();
socket.emit('join', CHAT.globalLoginParameter, function () {
});
}
};
</script> </script>
</body> </body>
......
...@@ -29,7 +29,8 @@ ...@@ -29,7 +29,8 @@
<div class="text-right d-flex align-items-center"> <div class="text-right d-flex align-items-center">
<button type="button" name="button" class="btn add_user_btn"></button> <button type="button" name="button" class="btn add_user_btn"></button>
<button type="button" name="button" class="btn menu_btn"></button> <button type="button" name="button" class="btn menu_btn"></button>
<button type="button" name="button" class="btn start_pip_btn" onclick="startPipMode();"></button> <button type="button" name="button" class="btn start_pip_btn"
onclick="NativeBridgeDelegate.startPIPMode();"></button>
</div> </div>
</div> </div>
</div> </div>
...@@ -64,37 +65,45 @@ ...@@ -64,37 +65,45 @@
<!-- フッター --> <!-- フッター -->
<div id="footer_collabo"></div> <div id="footer_collabo"></div>
<div id="loadingArea"></div> <div id="loadingArea"></div>
<div class="pip_indicator none" onclick="finishPipMode();"> <div class="pip_indicator none" onclick="NativeBridgeDelegate.finishPIPMode();">
<div style="vertical-align: middle;display: table-cell;">協業中 <div style="vertical-align: middle;display: table-cell;">協業中</div>
</div>
</div> </div>
<!-- Library -->
<script src="./js/libs/jquery-3.3.1.min.js"></script> <script src="./js/libs/jquery-3.3.1.min.js"></script>
<script src="./js/libs/socket.io.js"></script>
<script src="./js/libs/moment.js"></script> <script src="./js/libs/moment.js"></script>
<script src="./js/libs/locale/ko.js" charset="UTF-8"></script> <script src="./js/libs/locale/ko.js" charset="UTF-8"></script>
<script src="./js/libs/locale/ja.js" charset="UTF-8"></script> <script src="./js/libs/locale/ja.js" charset="UTF-8"></script>
<script src="./js/libs/mustache.min.js"></script> <script src="./js/libs/mustache.min.js"></script>
<script src="./js/libs/bootstrap.min.js"></script> <script src="./js/libs/bootstrap.min.js"></script>
<script src="./js/libs/jquery.mark.min.js"></script> <script src="./js/libs/jquery.mark.min.js"></script>
<script src="./js/constant.js"></script> <script src="./js/libs/socket.io.js"></script>
<script src="./js/collaboration.js"></script> <!-- Language -->
<script src="./js/common.js"></script> <script src="./js/languages/language.js"></script>
<script src="./js/loading.js"></script> <script src="./js/languages/language_ko.js" charset="UTF-8"></script>
<script src="./js/chat.js"></script> <script src="./js/languages/language_ja.js" charset="UTF-8"></script>
<script src="./js/chat-ui.js"></script> <script src="./js/languages/language_en.js" charset="UTF-8"></script>
<script src="./js/chat-util.js"></script> <!-- Common -->
<script src="./js/chat-db.js"></script> <script src="./js/common/constant.js"></script>
<script src="./js/chat-db-foriOS.js"></script> <script src="./js/common/native-bridge-delegate.js"></script>
<script src="./js/language.js"></script> <script src="./js/common/native-bridge-datasource.js"></script>
<script src="./js/language_ko.js" charset="UTF-8"></script> <script src="./js/common/common.js"></script>
<script src="./js/language_ja.js" charset="UTF-8"></script> <script src="./js/utils/chat-util.js"></script>
<script src="./js/language_en.js" charset="UTF-8"></script> <!-- Models -->
<script src="./js/chat-websocket.js"></script> <script src="./js/Models/deviceinfo.js"></script>
<script src="./js/chat-websocket-message.js"></script> <script src="./js/Models/serverinfo.js"></script>
<script src="./js/chat-websocket-refresh-group-list.js"></script> <script src="./js/Models/userinfo.js"></script>
<script src="./js/chat-websocket-refresh-user-list-in-group.js"></script> <script src="./js/Models/socket-joininfo.js"></script>
<script src="https://biztaskyell.abookcloud.com/coview_api.js"></script> <!-- Socket -->
<script src="./js/share.js"></script> <script src="./js/sockets/chat-websocket.js"></script>
<script src="./js/sockets/chat-websocket-message.js"></script>
<!-- View -->
<script src="./js/views/chats/management/chat-management-common.js"></script>
<script src="./js/views/collaboration/collaboration.js"></script>
<script src="./js/views/collaboration/collaboration-add-user.js"></script>
<script src="./js/common/loading.js"></script>
<script src="./js/views/contact/namecard.js"></script>
<script> <script>
$("#footer_collabo").load("./footer_collabo.html"); $("#footer_collabo").load("./footer_collabo.html");
$("#modal_collabo_host_request").load("./modal_collabo_host_request.html"); $("#modal_collabo_host_request").load("./modal_collabo_host_request.html");
...@@ -105,55 +114,14 @@ ...@@ -105,55 +114,14 @@
$("#collaboration_voice_overlay_menu").load("./collaboration_voice_overlay_menu.html"); $("#collaboration_voice_overlay_menu").load("./collaboration_voice_overlay_menu.html");
$("#add_user_list").load("./modal_add_user_list.html"); $("#add_user_list").load("./modal_add_user_list.html");
let CHAT_SERVER_URL = ''; globalUserInfo.collaborationType = COLLABORATION_TYPE.DOCUMENT;
let CMS_SERVER_URL = '';
let ASSET_PATH = './';
let PLATFORM = '';
let IS_MOBILE = true;
let IS_ONLINE = false;
let collaborationJoinFlg = 0;
if (typeof (android) != "undefined") {
android.getLoginParameter();
android.getGlobalParameter();
} else {
webkit.messageHandlers.loginInfoRequestMessageHandlerId.postMessage({});
webkit.messageHandlers.getGlobalParameter.postMessage({});
}
function startPipMode() {
if (typeof (android) != "undefined") {
android.startPipMode();
} else if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.startPipMode.postMessage({});
}
}
CHAT_SOCKET.initialJoin();
function finishPipMode() { function finishPipMode() {
if (CHAT_UTIL.isIOS()) { NativeBridgeDelegate.finishPIPMode();
webkit.messageHandlers.finishPipMode.postMessage({});
}
} }
async function getGlobalParam(chatServerUrl, cmsServerUrl, platform, isMobile, isOnline) {
CHAT_SERVER_URL = chatServerUrl;
CMS_SERVER_URL = cmsServerUrl;
PLATFORM = platform;
IS_MOBILE = isMobile;
IS_ONLINE = isOnline;
if (CHAT_UTIL.isIOS()) {
collaborationJoinFlg = CHAT_DB.getCollaborationJoinFlg();
} else if (CHAT_UTIL.isAndroid()) {
collaborationJoinFlg = android.getCollaborationJoinFlg();
}
globalUserInfo.coWorkType = CollaborationTypeKey.DOCUMENT;
CHAT_SOCKET.connectSocket();
socket.emit('join', CHAT.globalLoginParameter, function () {
});
};
</script> </script>
</body> </body>
</html> </html>
\ No newline at end of file
...@@ -2,7 +2,8 @@ ...@@ -2,7 +2,8 @@
<div class="user_list d-flex flex-wrap"> <div class="user_list d-flex flex-wrap">
{{#joinedUserList}} {{#joinedUserList}}
<div class="user_item " id="collaboration_user_{{loginId}}"> <div class="user_item " id="collaboration_user_{{loginId}}">
<a href="#" data-toggle="modal" data-target="#profileModal1" onclick="CHAT_UI.makeNameCardInCollaboration({{shopMemberId}})"> <a href="#" data-toggle="modal" data-target="#profileModal1"
onclick="CollaborationUI.makeNameCard({{shopMemberId}})">
<div class="img_wrap"><img src="{{profileUrl}}" alt="this.src='./img/noImage.png'" /></div> <div class="img_wrap"><img src="{{profileUrl}}" alt="this.src='./img/noImage.png'" /></div>
<span class="name">{{shopMemberName}}</span> <span class="name">{{shopMemberName}}</span>
</a> </a>
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
<button type="button" name="button" class="btn user_btn"></button> <button type="button" name="button" class="btn user_btn"></button>
<button type="button" name="button" class="btn menu_btn"></button> <button type="button" name="button" class="btn menu_btn"></button>
<button type="button" name="button" class="btn add_user_btn none"></button> <button type="button" name="button" class="btn add_user_btn none"></button>
<!-- <button type="button" name="button" class="btn exit_btn" onclick="Coview_exitCollaboration();"></button> --> <!-- <button type="button" name="button" class="btn exit_btn" onclick="CoviewBridge.exitCollaboration();"></button> -->
</div> </div>
</div> </div>
</div> </div>
...@@ -45,14 +45,6 @@ ...@@ -45,14 +45,6 @@
</div> </div>
</main> </main>
<div class="coview_share_photo_select_bubble none">
<button id="coviewSharePhotoCamera" class="coview_share_photo_select_bubble_in_button cam">
</button>
<BR>
<button id="coviewSharePhotoGallery" class="coview_share_photo_select_bubble_in_button gal">
</button>
</div>
<!-- ユーザー追加オーバーレイ --> <!-- ユーザー追加オーバーレイ -->
<div id="add_user_list"></div> <div id="add_user_list"></div>
<div id="modal_add_user_confirm"></div> <div id="modal_add_user_confirm"></div>
...@@ -129,32 +121,47 @@ ...@@ -129,32 +121,47 @@
<!-- フッター --> <!-- フッター -->
<div id="footer_collabo"></div> <div id="footer_collabo"></div>
<!-- Library -->
<script src="./js/libs/jquery-3.3.1.min.js"></script> <script src="./js/libs/jquery-3.3.1.min.js"></script>
<script src="./js/libs/socket.io.js"></script>
<script src="./js/libs/moment.js"></script> <script src="./js/libs/moment.js"></script>
<script src="./js/libs/locale/ko.js" charset="UTF-8"></script> <script src="./js/libs/locale/ko.js" charset="UTF-8"></script>
<script src="./js/libs/locale/ja.js" charset="UTF-8"></script> <script src="./js/libs/locale/ja.js" charset="UTF-8"></script>
<script src="./js/libs/mustache.min.js"></script> <script src="./js/libs/mustache.min.js"></script>
<script src="./js/libs/bootstrap.min.js"></script> <script src="./js/libs/bootstrap.min.js"></script>
<script src="./js/libs/jquery.mark.min.js"></script> <script src="./js/libs/jquery.mark.min.js"></script>
<script src="./js/constant.js"></script> <script src="./js/libs/socket.io.js"></script>
<script src="./js/collaboration.js"></script> <!-- Language -->
<script src="./js/common.js"></script> <script src="./js/languages/language.js"></script>
<script src="./js/chat.js"></script> <script src="./js/languages/language_ko.js" charset="UTF-8"></script>
<script src="./js/chat-ui.js"></script> <script src="./js/languages/language_ja.js" charset="UTF-8"></script>
<script src="./js/chat-util.js"></script> <script src="./js/languages/language_en.js" charset="UTF-8"></script>
<script src="./js/chat-db.js"></script> <!-- Common -->
<script src="./js/chat-db-foriOS.js"></script> <script src="./js/common/constant.js"></script>
<script src="./js/language.js"></script> <script src="./js/common/native-bridge-delegate.js"></script>
<script src="./js/language_ko.js" charset="UTF-8"></script> <script src="./js/common/native-bridge-datasource.js"></script>
<script src="./js/language_ja.js" charset="UTF-8"></script> <script src="./js/common/common.js"></script>
<script src="./js/language_en.js" charset="UTF-8"></script> <script src="./js/utils/chat-util.js"></script>
<script src="./js/chat-websocket.js"></script> <!-- Models -->
<script src="./js/chat-websocket-message.js"></script> <script src="./js/Models/deviceinfo.js"></script>
<script src="./js/chat-websocket-refresh-group-list.js"></script> <script src="./js/Models/serverinfo.js"></script>
<script src="./js/chat-websocket-refresh-user-list-in-group.js"></script> <script src="./js/Models/userinfo.js"></script>
<script src="./js/Models/roominfo.js"></script>
<script src="./js/Models/socket-joininfo.js"></script>
<!-- Socket -->
<script src="./js/sockets/chat-websocket.js"></script>
<script src="./js/sockets/chat-websocket-message.js"></script>
<!-- View -->
<script src="./js/views/chats/management/chat-management-common.js"></script>
<script src="./js/views/collaboration/collaboration.js"></script>
<script src="./js/views/collaboration/collaboration-add-user.js"></script>
<script src="https://biztaskyell.abookcloud.com/coview_api.js"></script> <script src="https://biztaskyell.abookcloud.com/coview_api.js"></script>
<script src="./js/share.js"></script> <script src="./js/views/collaboration/share.js"></script>
<script src="./js/views/collaboration/fermi-web-socket-message-handler.js"></script>
<script src="./js/views/collaboration/fermi-web-socket-bridge.js"></script>
<script src="./js/views/collaboration/share-bind-button-action.js"></script>
<script src="./js/views/collaboration/share-event-listener.js"></script>
<script src="./js/views/contact/namecard.js"></script>
<script> <script>
$("#footer_collabo").load("./footer_collabo.html"); $("#footer_collabo").load("./footer_collabo.html");
$("#modal_collabo_host_request").load("./modal_collabo_host_request.html"); $("#modal_collabo_host_request").load("./modal_collabo_host_request.html");
...@@ -165,48 +172,10 @@ ...@@ -165,48 +172,10 @@
$("#add_user_list").load("./modal_add_user_list.html"); $("#add_user_list").load("./modal_add_user_list.html");
$("#zoom").load("./zoom.html"); $("#zoom").load("./zoom.html");
let CHAT_SERVER_URL = ''; globalUserInfo.collaborationType = COLLABORATION_TYPE.CAMERA;
let CMS_SERVER_URL = ''; if (globalUserInfo.joinType != COLLABORATION_JOIN_TYPE.INVITED) {
let ASSET_PATH = './'; CHAT_SOCKET.initialJoin();
let PLATFORM = '';
let IS_MOBILE = true;
let IS_ONLINE = false;
let collaborationJoinFlg = 0;
let roomType;
if (typeof (android) != "undefined") {
android.getLoginParameter();
android.getGlobalParameter();
roomType = android.getRoomType();
} else {
webkit.messageHandlers.loginInfoRequestMessageHandlerId.postMessage({});
webkit.messageHandlers.getGlobalParameter.postMessage({});
roomType = CHAT_DB.getRoomType();
}
if (roomType == ChatRoomType.DM) {
$('.add_user_btn').removeClass('none');
} }
async function getGlobalParam(chatServerUrl, cmsServerUrl, platform, isMobile, isOnline) {
CHAT_SERVER_URL = chatServerUrl;
CMS_SERVER_URL = cmsServerUrl;
PLATFORM = platform;
IS_MOBILE = isMobile;
IS_ONLINE = isOnline;
if (CHAT_UTIL.isIOS()) {
collaborationJoinFlg = CHAT_DB.getCollaborationJoinFlg();
} else if (CHAT_UTIL.isAndroid()) {
collaborationJoinFlg = android.getCollaborationJoinFlg();
console.log(collaborationJoinFlg);
}
globalUserInfo.coWorkType = CollaborationTypeKey.CAMERA;
if (collaborationJoinFlg != '2') {
CHAT_SOCKET.connectSocket();
socket.emit('join', CHAT.globalLoginParameter, function () {
});
}
};
</script> </script>
</body> </body>
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
<div class="menu-bar menu-bar2"></div> <div class="menu-bar menu-bar2"></div>
<div class="menu-bar menu-bar3"></div> <div class="menu-bar menu-bar3"></div>
</div> </div>
<!-- <button type="button" name="button" class="btn exit_btn" onclick="Coview_exitCollaboration();"></button> --> <!-- <button type="button" name="button" class="btn exit_btn" onclick="CoviewBridge.exitCollaboration();"></button> -->
</div> </div>
</div> </div>
</div> </div>
...@@ -48,14 +48,6 @@ ...@@ -48,14 +48,6 @@
</div> </div>
</main> </main>
<div class="coview_share_photo_select_bubble none">
<button id="coviewSharePhotoCamera" class="coview_share_photo_select_bubble_in_button cam">
</button>
<BR>
<button id="coviewSharePhotoGallery" class="coview_share_photo_select_bubble_in_button gal">
</button>
</div>
<!-- ユーザー追加オーバーレイ --> <!-- ユーザー追加オーバーレイ -->
<div id="add_user_list"></div> <div id="add_user_list"></div>
<div id="modal_add_user_confirm"></div> <div id="modal_add_user_confirm"></div>
...@@ -119,32 +111,47 @@ ...@@ -119,32 +111,47 @@
<!-- フッター --> <!-- フッター -->
<div id="footer_collabo"></div> <div id="footer_collabo"></div>
<!-- Library -->
<script src="./js/libs/jquery-3.3.1.min.js"></script> <script src="./js/libs/jquery-3.3.1.min.js"></script>
<script src="./js/libs/socket.io.js"></script>
<script src="./js/libs/moment.js"></script> <script src="./js/libs/moment.js"></script>
<script src="./js/libs/locale/ko.js" charset="UTF-8"></script> <script src="./js/libs/locale/ko.js" charset="UTF-8"></script>
<script src="./js/libs/locale/ja.js" charset="UTF-8"></script> <script src="./js/libs/locale/ja.js" charset="UTF-8"></script>
<script src="./js/libs/mustache.min.js"></script> <script src="./js/libs/mustache.min.js"></script>
<script src="./js/libs/bootstrap.min.js"></script> <script src="./js/libs/bootstrap.min.js"></script>
<script src="./js/libs/jquery.mark.min.js"></script> <script src="./js/libs/jquery.mark.min.js"></script>
<script src="./js/constant.js"></script> <script src="./js/libs/socket.io.js"></script>
<script src="./js/collaboration.js"></script> <!-- Language -->
<script src="./js/common.js"></script> <script src="./js/languages/language.js"></script>
<script src="./js/chat.js"></script> <script src="./js/languages/language_ko.js" charset="UTF-8"></script>
<script src="./js/chat-ui.js"></script> <script src="./js/languages/language_ja.js" charset="UTF-8"></script>
<script src="./js/chat-util.js"></script> <script src="./js/languages/language_en.js" charset="UTF-8"></script>
<script src="./js/chat-db.js"></script> <!-- Common -->
<script src="./js/chat-db-foriOS.js"></script> <script src="./js/common/constant.js"></script>
<script src="./js/language.js"></script> <script src="./js/common/native-bridge-delegate.js"></script>
<script src="./js/language_ko.js" charset="UTF-8"></script> <script src="./js/common/native-bridge-datasource.js"></script>
<script src="./js/language_ja.js" charset="UTF-8"></script> <script src="./js/common/common.js"></script>
<script src="./js/language_en.js" charset="UTF-8"></script> <script src="./js/utils/chat-util.js"></script>
<script src="./js/chat-websocket.js"></script> <!-- Models -->
<script src="./js/chat-websocket-message.js"></script> <script src="./js/Models/deviceinfo.js"></script>
<script src="./js/chat-websocket-refresh-group-list.js"></script> <script src="./js/Models/serverinfo.js"></script>
<script src="./js/chat-websocket-refresh-user-list-in-group.js"></script> <script src="./js/Models/userinfo.js"></script>
<script src="./js/Models/roominfo.js"></script>
<script src="./js/Models/socket-joininfo.js"></script>
<!-- Socket -->
<script src="./js/sockets/chat-websocket.js"></script>
<script src="./js/sockets/chat-websocket-message.js"></script>
<!-- View -->
<script src="./js/views/chats/management/chat-management-common.js"></script>
<script src="./js/views/collaboration/collaboration.js"></script>
<script src="./js/views/collaboration/collaboration-add-user.js"></script>
<script src="https://biztaskyell.abookcloud.com/coview_api.js"></script> <script src="https://biztaskyell.abookcloud.com/coview_api.js"></script>
<script src="./js/share.js"></script> <script src="./js/views/collaboration/share.js"></script>
<script src="./js/views/collaboration/fermi-web-socket-message-handler.js"></script>
<script src="./js/views/collaboration/fermi-web-socket-bridge.js"></script>
<script src="./js/views/collaboration/share-bind-button-action.js"></script>
<script src="./js/views/collaboration/share-event-listener.js"></script>
<script src="./js/views/contact/namecard.js"></script>
</body> </body>
<script> <script>
$("#footer_collabo").load("./footer_collabo.html"); $("#footer_collabo").load("./footer_collabo.html");
...@@ -156,48 +163,12 @@ ...@@ -156,48 +163,12 @@
$("#add_user_list").load("./modal_add_user_list.html"); $("#add_user_list").load("./modal_add_user_list.html");
$("#zoom").load("./zoom.html"); $("#zoom").load("./zoom.html");
let CHAT_SERVER_URL = '';
let CMS_SERVER_URL = ''; globalUserInfo.collaborationType = COLLABORATION_TYPE.VIDEO;
let ASSET_PATH = './'; if (globalUserInfo.joinType != COLLABORATION_JOIN_TYPE.INVITED) {
let PLATFORM = ''; CHAT_SOCKET.initialJoin();
let IS_MOBILE = true;
let IS_ONLINE = false;
let collaborationJoinFlg = 0;
let roomType;
if (typeof (android) != "undefined") {
android.getLoginParameter();
android.getGlobalParameter();
roomType = android.getRoomType();
} else {
webkit.messageHandlers.loginInfoRequestMessageHandlerId.postMessage({});
webkit.messageHandlers.getGlobalParameter.postMessage({});
roomType = CHAT_DB.getRoomType();
}
if (roomType == ChatRoomType.DM) {
$('.add_user_btn').removeClass('none');
} }
async function getGlobalParam(chatServerUrl, cmsServerUrl, platform, isMobile, isOnline) {
CHAT_SERVER_URL = chatServerUrl;
CMS_SERVER_URL = cmsServerUrl;
PLATFORM = platform;
IS_MOBILE = isMobile;
IS_ONLINE = isOnline;
if (CHAT_UTIL.isIOS()) {
collaborationJoinFlg = CHAT_DB.getCollaborationJoinFlg();
} else if (CHAT_UTIL.isAndroid()) {
collaborationJoinFlg = android.getCollaborationJoinFlg();
console.log(collaborationJoinFlg);
}
globalUserInfo.coWorkType = CollaborationTypeKey.VIDEO;
if (collaborationJoinFlg != '2') {
CHAT_SOCKET.connectSocket();
socket.emit('join', CHAT.globalLoginParameter, function () {
});
}
};
</script> </script>
</html> </html>
\ No newline at end of file
...@@ -63,32 +63,48 @@ ...@@ -63,32 +63,48 @@
<!-- フッター --> <!-- フッター -->
<div id="footer_collabo"></div> <div id="footer_collabo"></div>
<!-- Library -->
<script src="./js/libs/jquery-3.3.1.min.js"></script> <script src="./js/libs/jquery-3.3.1.min.js"></script>
<script src="./js/libs/socket.io.js"></script>
<script src="./js/libs/moment.js"></script> <script src="./js/libs/moment.js"></script>
<script src="./js/libs/locale/ko.js" charset="UTF-8"></script> <script src="./js/libs/locale/ko.js" charset="UTF-8"></script>
<script src="./js/libs/locale/ja.js" charset="UTF-8"></script> <script src="./js/libs/locale/ja.js" charset="UTF-8"></script>
<script src="./js/libs/mustache.min.js"></script> <script src="./js/libs/mustache.min.js"></script>
<script src="./js/libs/bootstrap.min.js"></script> <script src="./js/libs/bootstrap.min.js"></script>
<script src="./js/libs/jquery.mark.min.js"></script> <script src="./js/libs/jquery.mark.min.js"></script>
<script src="./js/constant.js"></script> <script src="./js/libs/socket.io.js"></script>
<script src="./js/collaboration.js"></script> <!-- Language -->
<script src="./js/common.js"></script> <script src="./js/languages/language.js"></script>
<script src="./js/chat.js"></script> <script src="./js/languages/language_ko.js" charset="UTF-8"></script>
<script src="./js/chat-ui.js"></script> <script src="./js/languages/language_ja.js" charset="UTF-8"></script>
<script src="./js/chat-util.js"></script> <script src="./js/languages/language_en.js" charset="UTF-8"></script>
<script src="./js/chat-db.js"></script> <!-- Common -->
<script src="./js/chat-db-foriOS.js"></script> <script src="./js/common/constant.js"></script>
<script src="./js/language.js"></script> <script src="./js/common/native-bridge-delegate.js"></script>
<script src="./js/language_ko.js" charset="UTF-8"></script> <script src="./js/common/native-bridge-datasource.js"></script>
<script src="./js/language_ja.js" charset="UTF-8"></script> <script src="./js/common/common.js"></script>
<script src="./js/language_en.js" charset="UTF-8"></script> <script src="./js/utils/chat-util.js"></script>
<script src="./js/chat-websocket.js"></script> <!-- Models -->
<script src="./js/chat-websocket-message.js"></script> <script src="./js/Models/deviceinfo.js"></script>
<script src="./js/chat-websocket-refresh-group-list.js"></script> <script src="./js/Models/serverinfo.js"></script>
<script src="./js/chat-websocket-refresh-user-list-in-group.js"></script> <script src="./js/Models/userinfo.js"></script>
<script src="./js/Models/roominfo.js"></script>
<script src="./js/Models/socket-joininfo.js"></script>
<!-- Socket -->
<script src="./js/sockets/chat-websocket.js"></script>
<script src="./js/sockets/chat-websocket-message.js"></script>
<!-- View -->
<script src="./js/views/chats/management/chat-management-common.js"></script>
<script src="./js/views/collaboration/collaboration.js"></script>
<script src="./js/views/collaboration/collaboration-add-user.js"></script>
<script src="https://biztaskyell.abookcloud.com/coview_api.js"></script> <script src="https://biztaskyell.abookcloud.com/coview_api.js"></script>
<script src="./js/share.js"></script> <script src="./js/views/collaboration/share.js"></script>
<script src="./js/views/collaboration/fermi-web-socket-message-handler.js"></script>
<script src="./js/views/collaboration/fermi-web-socket-bridge.js"></script>
<script src="./js/views/collaboration/share-bind-button-action.js"></script>
<script src="./js/views/collaboration/share-event-listener.js"></script>
<script src="./js/views/contact/namecard.js"></script>
<script> <script>
$("#footer_collabo").load("./footer_collabo.html"); $("#footer_collabo").load("./footer_collabo.html");
$("#modal_collabo_host_request").load("./modal_collabo_host_request.html"); $("#modal_collabo_host_request").load("./modal_collabo_host_request.html");
...@@ -98,48 +114,10 @@ ...@@ -98,48 +114,10 @@
$("#collaboration_voice_overlay_menu").load("./collaboration_voice_overlay_menu.html"); $("#collaboration_voice_overlay_menu").load("./collaboration_voice_overlay_menu.html");
$("#add_user_list").load("./modal_add_user_list.html"); $("#add_user_list").load("./modal_add_user_list.html");
let CHAT_SERVER_URL = ''; globalUserInfo.collaborationType = COLLABORATION_TYPE.AUDIO;
let CMS_SERVER_URL = ''; if (globalUserInfo.joinType != COLLABORATION_JOIN_TYPE.INVITED) {
let ASSET_PATH = './'; CHAT_SOCKET.initialJoin();
let PLATFORM = '';
let IS_MOBILE = true;
let IS_ONLINE = false;
let collaborationJoinFlg = 0;
let roomType;
if (typeof (android) != "undefined") {
android.getLoginParameter();
android.getGlobalParameter();
roomType = android.getRoomType();
} else {
webkit.messageHandlers.loginInfoRequestMessageHandlerId.postMessage({});
webkit.messageHandlers.getGlobalParameter.postMessage({});
roomType = CHAT_DB.getRoomType();
}
if (roomType == ChatRoomType.DM) {
$('.add_user_btn').removeClass('none');
} }
async function getGlobalParam(chatServerUrl, cmsServerUrl, platform, isMobile, isOnline) {
CHAT_SERVER_URL = chatServerUrl;
CMS_SERVER_URL = cmsServerUrl;
PLATFORM = platform;
IS_MOBILE = isMobile;
IS_ONLINE = isOnline;
if (CHAT_UTIL.isIOS()) {
collaborationJoinFlg = CHAT_DB.getCollaborationJoinFlg();
} else if (CHAT_UTIL.isAndroid()) {
collaborationJoinFlg = android.getCollaborationJoinFlg();
console.log(collaborationJoinFlg);
}
globalUserInfo.coWorkType = CollaborationTypeKey.AUDIO;
if (collaborationJoinFlg != '2') {
CHAT_SOCKET.connectSocket();
socket.emit('join', CHAT.globalLoginParameter, function () {
});
}
};
</script> </script>
</body> </body>
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
<button type="button" name="button" class="btn user_btn"></button> <button type="button" name="button" class="btn user_btn"></button>
<button type="button" name="button" class="btn add_user_btn none"></button> <button type="button" name="button" class="btn add_user_btn none"></button>
<button type="button" name="button" class="btn menu_btn"></button> <button type="button" name="button" class="btn menu_btn"></button>
<!-- <button type="button" name="button" class="btn exit_btn" onclick="Coview_exitCollaboration();"></button> --> <!-- <button type="button" name="button" class="btn exit_btn" onclick="CoviewBridge.exitCollaboration();"></button> -->
</div> </div>
</div> </div>
</div> </div>
...@@ -44,14 +44,6 @@ ...@@ -44,14 +44,6 @@
</div> </div>
</main> </main>
<div class="coview_share_photo_select_bubble none">
<button id="coviewSharePhotoCamera" class="coview_share_photo_select_bubble_in_button cam">
</button>
<BR>
<button id="coviewSharePhotoGallery" class="coview_share_photo_select_bubble_in_button gal">
</button>
</div>
<!-- ユーザー追加オーバーレイ --> <!-- ユーザー追加オーバーレイ -->
<div id="add_user_list"></div> <div id="add_user_list"></div>
<div id="modal_add_user_confirm"></div> <div id="modal_add_user_confirm"></div>
...@@ -121,32 +113,47 @@ ...@@ -121,32 +113,47 @@
<!-- フッター --> <!-- フッター -->
<div id="footer_collabo"></div> <div id="footer_collabo"></div>
<!-- Library -->
<script src="./js/libs/jquery-3.3.1.min.js"></script> <script src="./js/libs/jquery-3.3.1.min.js"></script>
<script src="./js/libs/socket.io.js"></script>
<script src="./js/libs/moment.js"></script> <script src="./js/libs/moment.js"></script>
<script src="./js/libs/locale/ko.js" charset="UTF-8"></script> <script src="./js/libs/locale/ko.js" charset="UTF-8"></script>
<script src="./js/libs/locale/ja.js" charset="UTF-8"></script> <script src="./js/libs/locale/ja.js" charset="UTF-8"></script>
<script src="./js/libs/mustache.min.js"></script> <script src="./js/libs/mustache.min.js"></script>
<script src="./js/libs/bootstrap.min.js"></script> <script src="./js/libs/bootstrap.min.js"></script>
<script src="./js/libs/jquery.mark.min.js"></script> <script src="./js/libs/jquery.mark.min.js"></script>
<script src="./js/constant.js"></script> <script src="./js/libs/socket.io.js"></script>
<script src="./js/collaboration.js"></script> <!-- Language -->
<script src="./js/common.js"></script> <script src="./js/languages/language.js"></script>
<script src="./js/chat.js"></script> <script src="./js/languages/language_ko.js" charset="UTF-8"></script>
<script src="./js/chat-ui.js"></script> <script src="./js/languages/language_ja.js" charset="UTF-8"></script>
<script src="./js/chat-util.js"></script> <script src="./js/languages/language_en.js" charset="UTF-8"></script>
<script src="./js/chat-db.js"></script> <!-- Common -->
<script src="./js/chat-db-foriOS.js"></script> <script src="./js/common/constant.js"></script>
<script src="./js/language.js"></script> <script src="./js/common/native-bridge-delegate.js"></script>
<script src="./js/language_ko.js" charset="UTF-8"></script> <script src="./js/common/native-bridge-datasource.js"></script>
<script src="./js/language_ja.js" charset="UTF-8"></script> <script src="./js/common/common.js"></script>
<script src="./js/language_en.js" charset="UTF-8"></script> <script src="./js/utils/chat-util.js"></script>
<script src="./js/chat-websocket.js"></script> <!-- Models -->
<script src="./js/chat-websocket-message.js"></script> <script src="./js/Models/deviceinfo.js"></script>
<script src="./js/chat-websocket-refresh-group-list.js"></script> <script src="./js/Models/serverinfo.js"></script>
<script src="./js/chat-websocket-refresh-user-list-in-group.js"></script> <script src="./js/Models/userinfo.js"></script>
<script src="./js/Models/roominfo.js"></script>
<script src="./js/Models/socket-joininfo.js"></script>
<!-- Socket -->
<script src="./js/sockets/chat-websocket.js"></script>
<script src="./js/sockets/chat-websocket-message.js"></script>
<!-- View -->
<script src="./js/views/chats/management/chat-management-common.js"></script>
<script src="./js/views/collaboration/collaboration.js"></script>
<script src="./js/views/collaboration/collaboration-add-user.js"></script>
<script src="https://biztaskyell.abookcloud.com/coview_api.js"></script> <script src="https://biztaskyell.abookcloud.com/coview_api.js"></script>
<script src="./js/share.js"></script> <script src="./js/views/collaboration/share.js"></script>
<script src="./js/views/collaboration/fermi-web-socket-message-handler.js"></script>
<script src="./js/views/collaboration/fermi-web-socket-bridge.js"></script>
<script src="./js/views/collaboration/share-bind-button-action.js"></script>
<script src="./js/views/collaboration/share-event-listener.js"></script>
<script src="./js/views/contact/namecard.js"></script>
<script> <script>
$("#footer_collabo").load("./footer_collabo.html"); $("#footer_collabo").load("./footer_collabo.html");
$("#modal_collabo_host_request").load("./modal_collabo_host_request.html"); $("#modal_collabo_host_request").load("./modal_collabo_host_request.html");
...@@ -157,47 +164,10 @@ ...@@ -157,47 +164,10 @@
$("#add_user_list").load("./modal_add_user_list.html"); $("#add_user_list").load("./modal_add_user_list.html");
$("#zoom").load("./zoom.html"); $("#zoom").load("./zoom.html");
let CHAT_SERVER_URL = ''; globalUserInfo.collaborationType = COLLABORATION_TYPE.BOARD;
let CMS_SERVER_URL = ''; if (globalUserInfo.joinType != COLLABORATION_JOIN_TYPE.INVITED) {
let ASSET_PATH = './'; CHAT_SOCKET.initialJoin();
let PLATFORM = '';
let IS_MOBILE = true;
let IS_ONLINE = false;
let collaborationJoinFlg = 0;
let roomType;
if (typeof (android) != "undefined") {
android.getLoginParameter();
android.getGlobalParameter();
roomType = android.getRoomType();
} else {
webkit.messageHandlers.loginInfoRequestMessageHandlerId.postMessage({});
webkit.messageHandlers.getGlobalParameter.postMessage({});
roomType = CHAT_DB.getRoomType();
}
if (roomType == ChatRoomType.DM) {
$('.add_user_btn').removeClass('none');
} }
async function getGlobalParam(chatServerUrl, cmsServerUrl, platform, isMobile, isOnline) {
CHAT_SERVER_URL = chatServerUrl;
CMS_SERVER_URL = cmsServerUrl;
PLATFORM = platform;
IS_MOBILE = isMobile;
IS_ONLINE = isOnline;
if (CHAT_UTIL.isIOS()) {
collaborationJoinFlg = CHAT_DB.getCollaborationJoinFlg();
} else if (CHAT_UTIL.isAndroid()) {
collaborationJoinFlg = android.getCollaborationJoinFlg();
}
globalUserInfo.coWorkType = CollaborationTypeKey.BOARD;
if (collaborationJoinFlg != '2') {
CHAT_SOCKET.connectSocket();
socket.emit('join', CHAT.globalLoginParameter, function () {
});
}
};
</script> </script>
</body> </body>
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
</div> </div>
<div class="col-4 p-0"> <div class="col-4 p-0">
<div class="nav-item p-0"> <div class="nav-item p-0">
<h1 class="nav-ttl" id="title" >コンタクト</h1> <h1 class="nav-ttl" id="title">コンタクト</h1>
</div> </div>
</div> </div>
<div class="col-4 pl-0"> <div class="col-4 pl-0">
...@@ -45,9 +45,9 @@ ...@@ -45,9 +45,9 @@
<main id="contact"> <main id="contact">
<!-- ユーザー検索 --> <!-- ユーザー検索 -->
<div class="search_form"> <div class="search_form">
<input type="search" name="search" id="contactSearch" placeholder="ユーザー検索" maxlength="30"> <input type="search" name="search" id="contactSearch" placeholder="ユーザー検索" maxlength="30">
<span class="src_icon"></span> <span class="src_icon"></span>
<a href="#" class="cancel none">キャンセル</a> <a href="#" class="cancel none">キャンセル</a>
</div> </div>
<div class="content tabs"> <div class="content tabs">
...@@ -65,7 +65,8 @@ ...@@ -65,7 +65,8 @@
<div class="chat_item d-flex flex-row align-items-center" style="background: none !important;"> <div class="chat_item d-flex flex-row align-items-center" style="background: none !important;">
<div class="chat_item_l"> <div class="chat_item_l">
<div class="thumbnail"> <div class="thumbnail">
<div class="img_wrap"><img id="myImg" src="img/noImage.png" onError="this.src='./img/noImage.png'" /></div> <div class="img_wrap"><img id="myImg" src="img/noImage.png"
onError="this.src='./img/noImage.png'" /></div>
</div> </div>
</div> </div>
<div class="chat_item_m px-0"> <div class="chat_item_m px-0">
...@@ -82,7 +83,9 @@ ...@@ -82,7 +83,9 @@
</div> </div>
<div class="chat_list" id="myContactList"> <div class="chat_list" id="myContactList">
<!-- お気に入りグループ --> <!-- お気に入りグループ -->
<div class="category"><div class="category_name"><span>お気に入り</span></div></div> <div class="category">
<div class="category_name"><span>お気に入り</span></div>
</div>
<div id="favoriteList"></div> <div id="favoriteList"></div>
<div id="myGroupList"></div> <div id="myGroupList"></div>
...@@ -172,6 +175,8 @@ ...@@ -172,6 +175,8 @@
<div id="loadingArea"></div> <div id="loadingArea"></div>
<div id="myProfileModal"></div> <div id="myProfileModal"></div>
<div id="userProfileModal"></div> <div id="userProfileModal"></div>
<!-- Library -->
<script src="./js/libs/jquery-3.3.1.min.js"></script> <script src="./js/libs/jquery-3.3.1.min.js"></script>
<script src="./js/libs/moment.js"></script> <script src="./js/libs/moment.js"></script>
<script src="./js/libs/locale/ko.js" charset="UTF-8"></script> <script src="./js/libs/locale/ko.js" charset="UTF-8"></script>
...@@ -179,63 +184,38 @@ ...@@ -179,63 +184,38 @@
<script src="./js/libs/mustache.min.js"></script> <script src="./js/libs/mustache.min.js"></script>
<script src="./js/libs/bootstrap.min.js"></script> <script src="./js/libs/bootstrap.min.js"></script>
<script src="./js/libs/jquery.mark.min.js"></script> <script src="./js/libs/jquery.mark.min.js"></script>
<script src="./js/contact.js"></script> <!-- Language -->
<script src="./js/common.js"></script> <script src="./js/languages/language.js"></script>
<script src="./js/loading.js"></script> <script src="./js/languages/language_ko.js" charset="UTF-8"></script>
<script src="./js/language.js"></script> <script src="./js/languages/language_ja.js" charset="UTF-8"></script>
<script src="./js/language_ko.js" charset="UTF-8"></script> <script src="./js/languages/language_en.js" charset="UTF-8"></script>
<script src="./js/language_ja.js" charset="UTF-8"></script> <!-- Common -->
<script src="./js/language_en.js" charset="UTF-8"></script> <script src="./js/common/constant.js"></script>
<script src="./js/constant.js"></script> <script src="./js/common/native-bridge-delegate.js"></script>
<script src="./js/chat.js"></script> <script src="./js/common/native-bridge-datasource.js"></script>
<script src="./js/chat-ui.js"></script> <script src="./js/common/common.js"></script>
<script src="./js/chat-util.js"></script> <script src="./js/utils/chat-util.js"></script>
<script src="./js/chat-db.js"></script> <!-- Models -->
<script src="./js/chat-db-foriOS.js"></script> <script src="./js/Models/deviceinfo.js"></script>
<script> <script src="./js/Models/serverinfo.js"></script>
String.prototype.replaceAll = function(org, dest) { <script src="./js/Models/userinfo.js"></script>
return this.split(org).join(dest); <!-- View -->
} <script src="./js/views/contact/contact.js"></script>
<script src="./js/views/contact/namecard.js"></script>
<script src="./js/common/loading.js"></script>
let CHAT_SERVER_URL = ''; <script>
let CMS_SERVER_URL = '';
let ASSET_PATH = './';
let PLATFORM = '';
let IS_MOBILE = true;
let IS_ONLINE = false;
$("#loadingArea").load("./loading.html"); $("#loadingArea").load("./loading.html");
if (typeof(android) != "undefined") { const groupID = NativeBridgeDataSource.getToMoveGroupId();
android.getLoginParameter();
android.getGlobalParameter(); if (groupID != "" && groupID != undefined) {
Contact.refreshAllGroupSearch(groupID);
NativeBridgeDelegate.setToMoveGroupId("");
} else { } else {
webkit.messageHandlers.loginInfoRequestMessageHandlerId.postMessage({}); Contact.refreshContactScreen();
webkit.messageHandlers.getGlobalParameter.postMessage({});
} }
function getGlobalParam(chatServerUrl, cmsServerUrl, platform, isMobile, isOnline) {
CHAT_SERVER_URL = chatServerUrl;
CMS_SERVER_URL = cmsServerUrl;
PLATFORM = platform;
IS_MOBILE = isMobile;
IS_ONLINE = isOnline;
let groupId;
if (typeof(android) != "undefined") {
groupId = android.getToMoveGroupId();
} else {
groupId = CHAT_DB.getToMoveGroupId();
}
if (groupId != "" && groupId != undefined) {
CHAT_UI.refreshAllGroupSearch(groupId);
if (typeof(android) != "undefined") {
android.setToMoveGroupId("");
} else {
webkit.messageHandlers.setToMoveGroupId.postMessage("");
}
} else {
CHAT_UI.refreshContactScreen();
}
};
</script> </script>
</body> </body>
......
#coviewShareMainBtn{
padding-top: 9px;
}
.white_board #canvasRemote { .white_board #canvasRemote {
background-color: white !important; background-color: white !important;
...@@ -32,34 +30,6 @@ ...@@ -32,34 +30,6 @@
display: none !important; display: none !important;
} }
.coview_share_dropdown_bar{
display: none;
list-style: none;
padding: unset;
margin: unset;
/* padding-top: 58px; */
background: #000;
position: absolute;
width: 100%;
top: 57px;
left: 0px;
padding-top: 10px;
}
.coview_share_dropdown_bar ul{
list-style: none;
padding: unset;
margin: unset;
}
.coview_share_dropdown_bar li{
display: inline-block;
width: 24%;
height: 75px;
line-height: 52px;
margin: unset;
padding: unset;
background: #000;
text-align: center;
}
.coview_share_dropdown_btn{ .coview_share_dropdown_btn{
background: transparent; background: transparent;
border: none; border: none;
...@@ -92,51 +62,7 @@ ...@@ -92,51 +62,7 @@
margin-top: 4px; margin-top: 4px;
color: #fff; color: #fff;
} }
.coview_share_title_name{
display: inline-block;
height: 58px;
line-height: 58px;
padding: 0;
margin: 0;
color: #fff;
}
.coview_share_photo_select_bubble{
display: none;
position: absolute;
padding: 2px;
background: #3e3e3e;
border-radius: 5px;
margin-top: 156px;
margin-left: 117px;
font-size: 12px;
}
.coview_share_photo_select_bubble:after{
border-top: 0 solid transparent;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-bottom: 10px solid #3e3e3e;
content: "";
position: absolute;
top: -10px;
left: 22px;
}
.coview_share_photo_select_bubble_in_button{
width: 106px;
height: 39px;
border: none;
text-align: left;
}
.coview_share_photo_select_bubble_in_button.cam{
border-top-left-radius: 5px;
border-top-right-radius: 5px;
}
.coview_share_photo_select_bubble_in_button.gal{
border-bottom-left-radius: 5px;
border-bottom-right-radius: 5px;
border-top: solid 0.7px #000;
}
.coview_share_photo_select_bubble_in_button_img{ .coview_share_photo_select_bubble_in_button_img{
width: 27%; width: 27%;
} }
...@@ -144,15 +70,6 @@ ...@@ -144,15 +70,6 @@
margin-left: 5px; margin-left: 5px;
} }
.coview_share_request{
width: 100%;
height: 4em;
background-image: linear-gradient(to top, #82b127, #30c8d2);
color: #fff;
border: none;
border-radius: 5px;
}
.coview_on_screen_btn_area { .coview_on_screen_btn_area {
display: none !important; display: none !important;
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div class="footer-wrap"> <div class="footer-wrap">
<div class="d-flex justify-content-around h-100"> <div class="d-flex justify-content-around h-100">
<div class="footer_item mx-md-3 photo_select_button collaboration_contents picture_contents"> <div class="footer_item mx-md-3 photo_select_button collaboration_contents picture_contents">
<a href="javascript:photo_open_place_holderToggle();"> <a href="javascript:togglePhotoOpenPlaceHolder();">
<div class="d-flex flex-column justify-content-center" id="photo_open_place_holder"> <div class="d-flex flex-column justify-content-center" id="photo_open_place_holder">
<div class="t-icon picture my-0"></div> <div class="t-icon picture my-0"></div>
<span class="text-white txt">ピクチャ</span> <span class="text-white txt">ピクチャ</span>
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
</a> </a>
</div> </div>
<div class="footer_item mx-md-3 collaboration_contents picture_contents video_contents document_contents board_contents"> <div class="footer_item mx-md-3 collaboration_contents picture_contents video_contents document_contents board_contents">
<a href="javascript:penToggle();"> <a href="javascript:togglePen();">
<div class="d-flex flex-column justify-content-center" id="penBtn"> <div class="d-flex flex-column justify-content-center" id="penBtn">
<div class="t-icon pen disable my-0"></div> <div class="t-icon pen disable my-0"></div>
<span class="text-white txt">ペン</span> <span class="text-white txt">ペン</span>
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
</a> </a>
</div> </div>
<div class="footer_item mx-md-3 collaboration_contents picture_contents video_contents document_contents board_contents"> <div class="footer_item mx-md-3 collaboration_contents picture_contents video_contents document_contents board_contents">
<a href="javascript:eraserToggle();"> <a href="javascript:toggleEraser();">
<div class="d-flex flex-column justify-content-center" id="eraserBtn"> <div class="d-flex flex-column justify-content-center" id="eraserBtn">
<div class="t-icon delete my-0"></div> <div class="t-icon delete my-0"></div>
<span class="text-white txt">削除</span> <span class="text-white txt">削除</span>
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
</a> </a>
</div> </div>
<div class="footer_item mx-md-3 collaboration_contents video_contents_host"> <div class="footer_item mx-md-3 collaboration_contents video_contents_host">
<a href="javascript:captureToggle();"> <a href="javascript:toggleCapture();">
<div class="d-flex flex-column justify-content-center" id="captureBtn"> <div class="d-flex flex-column justify-content-center" id="captureBtn">
<div class="t-icon capture my-0"></div> <div class="t-icon capture my-0"></div>
<span class="text-white txt">キャプチャ</span> <span class="text-white txt">キャプチャ</span>
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
</a> </a>
</div> </div>
<div class="footer_item mx-md-3 collaboration_contents video_contents_user"> <div class="footer_item mx-md-3 collaboration_contents video_contents_user">
<a href="javascript:captureRequestToggle();"> <a href="javascript:toggleCaptureRequest();">
<div class="d-flex flex-column justify-content-center" id="captureRequestBtn"> <div class="d-flex flex-column justify-content-center" id="captureRequestBtn">
<div class="t-icon capture my-0"></div> <div class="t-icon capture my-0"></div>
<span class="text-white txt">キャプチャリクエスト</span> <span class="text-white txt">キャプチャリクエスト</span>
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
</a> </a>
</div> </div>
<div class="footer_item mx-md-3"> <div class="footer_item mx-md-3">
<a href="javascript:micTogle();"> <a href="javascript:toggleMic();">
<div class="d-flex flex-column justify-content-center" id="micBtn"> <div class="d-flex flex-column justify-content-center" id="micBtn">
<div class="t-icon voice my-0"></div> <div class="t-icon voice my-0"></div>
<span class="text-white txt">マイク</span> <span class="text-white txt">マイク</span>
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
</a> </a>
</div> </div>
<div class="footer_item mx-md-3 none host_contents"> <div class="footer_item mx-md-3 none host_contents">
<a href="javascript:recordTogle();"> <a href="javascript:toggleRecord();">
<div class="d-flex flex-column justify-content-center" id="recordBtn"> <div class="d-flex flex-column justify-content-center" id="recordBtn">
<div class="t-icon record my-0"></div> <div class="t-icon record my-0"></div>
<span class="text-white txt">録音</span> <span class="text-white txt">録音</span>
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
</a> </a>
</div> </div>
<div class="footer_item mx-md-3"> <div class="footer_item mx-md-3">
<a href="javascript:Coview_exitCollaboration(isDocument);"> <a href="javascript:CoviewBridge.exitCollaboration();">
<div class="img_wrap bg_red mx-1"> <div class="img_wrap bg_red mx-1">
<img src="icon/icon_close_white.png" alt="閉じる"> <img src="icon/icon_close_white.png" alt="閉じる">
</div> </div>
......
NativeBridgeDataSource.getCollaborationJoinFlg = function () {
if (typeof android != "undefined") {
return android.getCollaborationJoinFlg();
} else {
return callNativeApp(NATIVE_KEY_IOS.getCollaborationJoinFlg, {});
}
};
var CoviewUserInfo = class {
sid;
loginId;
roomId;
shopName;
collaborationType;
joinType;
isLeaved;
meetingID;
constructor(sid, loginId, roomId, shopName) {
this.sid = sid;
this.loginId = loginId;
this.roomId = roomId;
this.shopName = shopName;
const unwrappedType = NativeBridgeDataSource.getJoinCollaborationType();
this.collaborationType = this.parseNumberToCoworkType(unwrappedType);
this.joinType = NativeBridgeDataSource.getCollaborationJoinFlg();
this.isLeaved = false;
this.meetingID = 0;
}
get coWorkType() {
switch (this.collaborationType) {
case COLLABORATION_TYPE.AUDIO:
return COLLABORATION_TYPE.AUDIO;
case COLLABORATION_TYPE.CAMERA:
return COLLABORATION_TYPE.CAMERA;
case COLLABORATION_TYPE.VIDEO:
return COLLABORATION_TYPE.VIDEO;
case COLLABORATION_TYPE.DOCUMENT:
return COLLABORATION_TYPE.AUDIO;
case COLLABORATION_TYPE.BOARD:
return COLLABORATION_TYPE.AUDIO;
}
}
isInvited() {
this.joinType == COLLABORATION_JOIN_TYPE.INVITED;
}
parseNumberToCoworkType(type) {
switch (type) {
case COLLABORATION_TYPE_NUMBER.AUDIO:
return COLLABORATION_TYPE.AUDIO;
case COLLABORATION_TYPE_NUMBER.CAMERA:
return COLLABORATION_TYPE.CAMERA;
case COLLABORATION_TYPE_NUMBER.VIDEO:
return COLLABORATION_TYPE.VIDEO;
case COLLABORATION_TYPE_NUMBER.DOCUMENT:
return COLLABORATION_TYPE.DOCUMENT;
case COLLABORATION_TYPE_NUMBER.BOARD:
return COLLABORATION_TYPE.BOARD;
default:
return 0;
}
}
getCollaborarionTypeAsNumber() {
return this.parseCoworkTypeToNumber(this.collaborationType);
}
parseCoworkTypeToNumber(type) {
switch (type) {
case COLLABORATION_TYPE.AUDIO:
return COLLABORATION_TYPE_NUMBER.AUDIO;
case COLLABORATION_TYPE.CAMERA:
return COLLABORATION_TYPE_NUMBER.CAMERA;
case COLLABORATION_TYPE.VIDEO:
return COLLABORATION_TYPE_NUMBER.VIDEO;
case COLLABORATION_TYPE.DOCUMENT:
return COLLABORATION_TYPE_NUMBER.DOCUMENT;
case COLLABORATION_TYPE.BOARD:
return COLLABORATION_TYPE_NUMBER.BOARD;
default:
return 0;
}
}
};
// variable name for legacy connection to agent_app.js in coview library
var globalUserInfo = new CoviewUserInfo(
currentUserInfo.sid,
currentUserInfo.loginID,
roomInfo.roomID,
currentUserInfo.shopName
);
NativeBridgeDataSource.getDeviceInfo = function () {
if (typeof android != "undefined") {
return JSON.parse(android.getDeviceInfo());
} else {
return JSON.parse(callNativeApp(NATIVE_KEY_IOS.getDeviceInfo, {}));
}
};
var DeviceInfo = class {
isMoble; // iphone or iPad
platform; // ios or android
androidVersion;
constructor(deviceInfo) {
this.isMoble = deviceInfo.isMoble;
this.platform = deviceInfo.platform;
if (typeof android != "undefined") {
this.androidVersion = android.getAndroidVersion();
}
}
isiOS() {
return this.platform == "ios";
}
isAndroid() {
return this.platform == "android";
}
isMobile() {
return this.isMoble == "true";
}
};
var deviceInfo = new DeviceInfo(NativeBridgeDataSource.getDeviceInfo());
// WARN:: this variable is only for use in coview. and should request not to use this.
var isIos = deviceInfo.isiOS();
NativeBridgeDataSource.getRoomInfo = function () {
if (typeof android != "undefined") {
return JSON.parse(android.getRoomInfo());
} else {
return JSON.parse(callNativeApp(NATIVE_KEY_IOS.getRoomInfo, {}));
}
};
var RoomInfo = class {
roomID;
roomName;
roomType;
constructor(roomInfo) {
this.roomID = roomInfo.roomID;
this.roomName = roomInfo.roomName;
this.roomType = roomInfo.roomType;
}
};
var roomInfo = new RoomInfo(NativeBridgeDataSource.getRoomInfo());
NativeBridgeDataSource.getServerInfo = function () {
if (typeof android != "undefined") {
return JSON.parse(android.getServerInfo());
} else {
return JSON.parse(callNativeApp(NATIVE_KEY_IOS.getServerInfo, {}));
}
};
var ServerInfo = class {
chatURL;
cmsURL;
isOnline;
constructor(serverInfo) {
this.chatURL = serverInfo.chatURL;
this.cmsURL = serverInfo.cmsURL;
this.isOnline = serverInfo.isOnline;
}
};
var serverInfo = new ServerInfo(NativeBridgeDataSource.getServerInfo());
var JoinInfo = class {
sid;
loginId;
shopName;
roomId;
roomName;
shopMemberId;
constructor(sid, loginId, shopName, roomId, roomName, shopMemberId) {
this.sid = sid;
this.loginId = loginId;
this.shopName = shopName;
this.roomId = roomId;
this.roomName = roomName;
this.shopMemberId = shopMemberId;
}
};
NativeBridgeDataSource.getMyUserInfo = function () {
if (typeof android != "undefined") {
return JSON.parse(android.removeFavoriteGroup(groupID));
} else {
return JSON.parse(callNativeApp(NATIVE_KEY_IOS.currentUserInfo, {}));
}
};
var CurrentUserInfo = class {
sid;
loginID;
shopName;
shopMemberID;
languageCode;
constructor(userInfo) {
this.sid = userInfo.sid;
this.loginID = userInfo.loginId;
this.shopName = userInfo.shopName;
this.shopMemberID = userInfo.shopMemberId;
if (userInfo.languageCode == undefined) {
userInfo.languageCode = "jp";
}
this.languageCode = userInfo.languageCode;
}
configureLanguage(languageCode = undefined) {
if (languageCode == undefined) {
languageCode = this.languageCode;
}
moment.locale(languageCode);
setLanguage(languageCode);
}
};
var currentUserInfo = new CurrentUserInfo(
NativeBridgeDataSource.getMyUserInfo()
);
currentUserInfo.configureLanguage();
// 名前空間
var ARCHIVE_UI = {};
document.addEventListener("DOMContentLoaded", function () {
// アーカイブ検索
bindArchiveSearch();
// iOSキーボード変換検知用
bindiOSKeyBoardEvent();
});
ARCHIVE_UI.refreshSearchScreen = function (keyword) {
const archiveList = CHAT_DB.getArchiveByName(keyword);
const typeImage = getArchiveTypeIconURL(archive.archiveType);
getArchiveTemplate().then(function (archiveTemplate) {
archiveList.forEach(function (archive) {
let html = renderArchiveTemplate(
archiveTemplate,
archive.archiveId,
archive.archiveName,
archive.archiveDate,
typeImage
);
let obj = jQuery.parseHTML(html);
$(".overlay_src_msg").append(obj);
});
});
};
//* UTILS *//
const ARCHIVE_TYPE = {
PICTURE: 0,
VIDEO: 1,
VOICE: 2,
DOCUMENT: 3,
};
var getArchiveTypeIconURL = function (type) {
switch (type) {
case ARCHIVE_TYPE.PICTURE:
return "icon/icon_collabo_picture.png";
case ARCHIVE_TYPE.VIDEO:
return "icon/icon_collabo_videocam.png";
case ARCHIVE_TYPE.VOICE:
return "icon/icon_collabo_headset.png";
case ARCHIVE_TYPE.DOCUMENT:
return "icon/icon_collabo_document.png";
default:
return "";
}
};
var getArchiveTemplate = function () {
return new Promise(function (resolve, reject) {
$.get({ url: TemplateURL.ARCHIVE_LIST, async: false }, function (text) {
resolve(text);
});
});
};
var bindArchiveSearch = function () {
const searchInput = $('#archive .search_form input[type="search"]');
searchInput.keyup(function (e) {
var keyword = searchInput.val();
const enterKeyPressed = e.KeyCode == 13 || e.key == "Enter";
const keywordEmpty = keyword == "" || keyword.length < 2;
const keywordNotEmpty = keyword.length != 0 && keyword != "";
if (enterKeyPressed) {
if (keywordNotEmpty) {
searchInput.blur();
return;
}
} else if (keywordEmpty) {
$(".overlay_src_msg").empty();
return;
}
$(".overlay_src_msg").empty();
ARCHIVE_UI.refreshSearchScreen(keyword);
if (enterKeyPressed) {
searchInput.blur();
return;
}
// 検索結果を表示
});
};
var bindiOSKeyBoardEvent = function () {
const searchInput = $('#archive .search_form input[type="search"]');
searchInput.on("compositionend", function () {
if (CHAT_UTIL.isIOS()) {
var keyword = searchInput.val();
$(".overlay_src_msg").empty();
ARCHIVE_UI.refreshSearchScreen(keyword);
}
});
};
var renderArchiveTemplate = function (
html,
archiveId,
archiveName,
archiveDate,
typeImageURL
) {
return Mustache.render(html, {
archiveId: archiveId,
fileName: archiveName,
insertDate: archiveDate,
typeImage: typeImageURL,
});
};
// 名前空間
var CHAT_ADD_USER = {};
document.addEventListener("DOMContentLoaded", function () {
// メンバー検索
bindMemberSearch();
// iOSキーボード変換検知用
bindiOSKeyBoardEvent();
});
// ユーザー検索
CHAT_ADD_USER.searchUser = function (keyword) {
const isAllGroup = $("#tabAllGroupOnAddUser").is(":checked");
const overlayMessage = $(".overlay_src_msg");
let hasNoData = false;
overlayMessage.empty();
//全グループ検索画面
if (isAllGroup) {
//グループデータ検索
const groupList = CHAT_DB.getGroupByName(keyword);
searchGroupData(groupList, overlayMessage);
//ユーザデータ検索
var userList = CHAT_DB.getAllGroupShopMemberNotInRoomByName(keyword);
searchUserData(userList, overlayMessage);
hasNoData = userList.length == 0 && groupList.length == 0;
//連絡先画面
} else {
var userList = CHAT_DB.getMyGroupShopMemberNotInRoomByName(keyword);
searchUserData(userList, overlayMessage);
hasNoData = userList.length == 0;
}
// Set NoResult
if (hasNoData) {
const noResultMessage = getNoResultMessage();
overlayMessage.append(noResultMessage);
}
};
/** UTILS */
var bindMemberSearch = function () {
const searchInput = $('#chat_add_user .search_form input[type="search"]');
searchInput.click(function (e) {
//画面タイトル設定
let contactListTitle = getLocalizedString("userSearch");
$("#addUserTitle").text(contactListTitle);
});
searchInput.keyup(function (e) {
const keyword = searchInput.val();
const enterKeyPressed = e.key == "Enter" || e.KeyCode == 13;
const keywordNotEmpty = keyword != "" && keyword.length != 0;
const keywordEmpty = keyword == "" || keyword.length < 2;
if (enterKeyPressed) {
if (keywordNotEmpty) {
searchInput.blur();
return false;
}
} else if (keywordEmpty) {
$(".overlay_src_msg").empty();
return false;
}
CHAT_ADD_USER.searchUser(keyword);
if (enterKeyPressed) {
searchInput.blur();
return;
}
});
};
var bindiOSKeyBoardEvent = function () {
const searchInput = $('#chat_add_user .search_form input[type="search"]');
searchInput.on("compositionend", function () {
if (CHAT_UTIL.isIOS()) {
var keyword = searchInput.val();
CHAT_ADD_USER.searchUser(keyword);
}
});
};
var searchGroupData = function (groupList, overlayMessage) {
const groupTemplate = getTemplate(TemplateURL.MAKE_ROOM_GROUP_LIST);
groupList.forEach(function (group) {
let html = renderGroupTemplate(
groupTemplate,
group.groupName,
group.groupId
);
let obj = jQuery.parseHTML(html);
overlayMessage.append(obj);
});
};
var renderGroupTemplate = function (groupTemplate, groupName, groupID) {
return Mustache.render(groupTemplate, {
name: groupName,
id: groupID,
});
};
var searchUserData = function (userList, overlayMessage) {
const userTemplate = getTemplate(TemplateURL.MAKE_ROOM_USER_LIST);
userList.forEach(function (user) {
setUserProfile(user);
checkUser(user);
});
let html = renderUserTemplate(userTemplate, userList);
let obj = jQuery.parseHTML(html);
overlayMessage.append(obj);
};
var setUserProfile = function (user) {
user.profileUrl = CHAT.getProfileImgUrl(user.profileUrl);
};
var checkUser = function (user) {
let findObj = CHAT.globalSelectedUserList.find(function (shopMemberId) {
return shopMemberId == user.shopMemberId;
});
if (findObj) {
user.checked = "checked";
}
};
var renderUserTemplate = function (userTemplate, userList) {
return Mustache.render(userTemplate, {
userList: userList,
});
};
// ios用
function callNativeApp(iosKey, jsonData) {
console.log("callNativeApp called");
var result;
try {
var key = iosKey;
var data = jsonData;
var payload = { key: key, data: data };
// payloadの形 {"type":"SJbridge","data":{"name":"abc","role":"dev"}}
// resにObjective-cからのレスポンスが返る
result = prompt(JSON.stringify(payload));
console.log(result);
} catch (err) {
console.log("The native context does not exist yet");
}
return result;
}
CHAT_DB.getBeforeRoomType = function () {
// Androidは実装不要
if (CHAT_UTIL.isIOS()) {
return callNativeApp(NATIVE_KEY_IOS.getBeforeRoomType, {});
}
};
CHAT_DB.getRoomType = function () {
// Androidは実装不要
if (CHAT_UTIL.isIOS()) {
return parseInt(callNativeApp(NATIVE_KEY_IOS.getRoomType, {}), 10);
}
};
CHAT_DB.removeFavoriteUser = function (shopMemberId) {
// Androidは実装不要
if (CHAT_UTIL.isIOS()) {
var result = callNativeApp(NATIVE_KEY_IOS.removeFavoriteUser, {
shopMemberId: shopMemberId,
});
if (result == "true") {
return true;
} else {
return false;
}
}
};
CHAT_DB.addFavoriteUser = function (shopMemberId) {
// Androidは実装不要
if (CHAT_UTIL.isIOS()) {
var result = callNativeApp(NATIVE_KEY_IOS.addFavoriteUser, {
shopMemberId: shopMemberId,
});
if (result == "true") {
return true;
} else {
return false;
}
}
};
CHAT_DB.removeFavoriteGroup = function (groupId) {
// Androidは実装不要
if (CHAT_UTIL.isIOS()) {
var result = callNativeApp(NATIVE_KEY_IOS.removeFavoriteGroup, {
groupId: groupId,
});
if (result == "true") {
return true;
} else {
return false;
}
}
};
CHAT_DB.addFavoriteGroup = function (groupId) {
// Androidは実装不要
if (CHAT_UTIL.isIOS()) {
var result = callNativeApp(NATIVE_KEY_IOS.addFavoriteGroup, {
groupId: groupId,
});
if (result == "true") {
return true;
} else {
return false;
}
}
};
CHAT_DB.getCollaborationJoinFlg = function () {
// Androidは実装不要
if (CHAT_UTIL.isIOS()) {
return callNativeApp(NATIVE_KEY_IOS.getCollaborationJoinFlg, {});
}
};
CHAT_DB.getUserInfoList = function (shopMemberId) {
// Androidは実装不要
if (CHAT_UTIL.isIOS()) {
return callNativeApp(NATIVE_KEY_IOS.getUserInfoList, {
shopMemberId: shopMemberId,
});
}
};
CHAT_DB.createContentView = function () {
// Androidは実装不要
if (CHAT_UTIL.isIOS()) {
return parseInt(callNativeApp(NATIVE_KEY_IOS.createContentView, {}));
}
};
CHAT_DB.getToMoveGroupId = function () {
// Androidは実装不要
if (CHAT_UTIL.isIOS()) {
return callNativeApp(NATIVE_KEY_IOS.getToMoveGroupId, {});
}
};
CHAT_DB.getJoinCollaborationType = function () {
// Androidは実装不要
if (CHAT_UTIL.isIOS()) {
return parseInt(
callNativeApp(NATIVE_KEY_IOS.getJoinCollaborationType, {}),
10
);
}
};
CHAT_DB.getHostRequestFlg = function () {
// Androidは実装不要
if (CHAT_UTIL.isIOS()) {
return parseInt(callNativeApp(NATIVE_KEY_IOS.getHostRequestFlg, {}), 10);
}
};
// 名前空間
var CHAT_DB = {};
includeJs("./js/chat-db-foriOS.js");
//ロカールDBからルーム一覧情報を取得
CHAT_DB.getRoomList = function (roomType, keyWord) {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getRoomList, {
roomType: roomType,
keyWord: keyWord,
})
);
} else if (CHAT_UTIL.isAndroid()) {
return JSON.parse(android.getRoomList(roomType, keyWord));
}
};
CHAT_DB.callGetRoomList = function (roomType) {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getRoomList, { roomType: roomType })
);
} else if (CHAT_UTIL.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getRoomList(roomType));
}
};
//ロカールDBからログインしたユーザのデータを取得する。
CHAT_DB.getMyInfo = function () {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(callNativeApp(NATIVE_KEY_IOS.getMyInfo, {}));
} else if (CHAT_UTIL.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getMyInfo());
}
};
CHAT_DB.getMessages = function (roomId) {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getMessages, { roomId: roomId })
);
} else if (CHAT_UTIL.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getMessageList(roomId));
}
};
CHAT_DB.getMessagesWithMessageId = function (messageId) {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getMessageListFromMessageId, {
messageId: messageId
})
);
} else if (CHAT_UTIL.isAndroid()) {
return JSON.parse(android.getMessageListFromMessageId(messageId));
}
};
CHAT_DB.getFavoriteUsersNotInRoom = function () {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getFavoriteUsersNotInRoom, {})
);
} else if (CHAT_UTIL.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getFavoriteUsersNotInRoom());
}
};
CHAT_DB.getFavoriteUsers = function () {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(callNativeApp(NATIVE_KEY_IOS.getFavoriteUsers, {}));
} else if (CHAT_UTIL.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getFavoriteUsers());
}
};
CHAT_DB.getFavoriteGroups = function () {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(callNativeApp(NATIVE_KEY_IOS.getFavoriteGroups, {}));
} else if (CHAT_UTIL.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getFavoriteGroups());
}
};
CHAT_DB.getMyGroupUsers = function () {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(callNativeApp(NATIVE_KEY_IOS.getMyGroupUsers, {}));
} else if (CHAT_UTIL.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getMyGroupUsers());
}
};
CHAT_DB.getGroupInfo = function (groupId) {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getGroupInfo, { groupId: groupId })
);
} else if (CHAT_UTIL.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getGroupInfo(groupId));
}
};
CHAT_DB.getGroupInfoForAddUser = function (groupId) {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getGroupInfoForAddUser, { groupId: groupId })
);
} else if (CHAT_UTIL.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getGroupInfoForAddUser(groupId));
}
};
CHAT_DB.loadSelectedUsers = function () {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(callNativeApp(NATIVE_KEY_IOS.getSelectedUserList, {}));
} else if (CHAT_UTIL.isAndroid()) {
//String形式をJsonに変更してReturn
console.log(JSON.parse(android.getSelectedUserList()));
return JSON.parse(android.getSelectedUserList());
}
};
CHAT_DB.getNameCardData = function (shopMemberId) {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getNameCardData, {
shopMemberId: shopMemberId,
})
);
} else if (CHAT_UTIL.isAndroid()) {
return JSON.parse(android.getNameCardData(shopMemberId));
}
};
CHAT_DB.getMyGroupShopMemberByName = function (shopMemberName) {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getMyGroupShopMemberByName, {
shopMemberName: shopMemberName,
})
);
} else if (CHAT_UTIL.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getMyGroupShopMemberByName(shopMemberName));
}
};
CHAT_DB.getMyGroupShopMemberNotInRoomByName = function (shopMemberName) {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getMyGroupShopMemberNotInRoomByName, {
shopMemberName: shopMemberName,
})
);
} else if (CHAT_UTIL.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(
android.getMyGroupShopMemberNotInRoomByName(shopMemberName)
);
}
};
CHAT_DB.getAllGroupShopMemberByName = function (shopMemberName) {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getAllGroupShopMemberByName, {
shopMemberName: shopMemberName,
})
);
} else if (CHAT_UTIL.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getAllGroupShopMemberByName(shopMemberName));
}
};
CHAT_DB.getAllGroupShopMemberNotInRoomByName = function (shopMemberName) {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getAllGroupShopMemberNotInRoomByName, {
shopMemberName: shopMemberName,
})
);
} else if (CHAT_UTIL.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(
android.getAllGroupShopMemberNotInRoomByName(shopMemberName)
);
}
};
CHAT_DB.getGroupByName = function (groupName) {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getGroupByName, { groupName: groupName })
);
} else if (CHAT_UTIL.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getGroupByName(groupName));
}
};
CHAT_DB.getUsersInRoom = function (roomId) {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getUsersInRoom, { roomId: roomId })
);
} else if (CHAT_UTIL.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getUsersInRoom(roomId));
}
};
// アーカイブ一覧
CHAT_DB.getArchiveList = function () {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(callNativeApp(NATIVE_KEY_IOS.getArchiveList, {}));
} else if (CHAT_UTIL.isAndroid()) {
return JSON.parse(android.getArchiveList());
}
};
CHAT_DB.updateArchiveList = function () {
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.updateArchiveList.postMessage({});
} else if (CHAT_UTIL.isAndroid()) {
android.updateArchiveList();
}
};
// アーカイブ一覧検索
CHAT_DB.getArchiveByName = function (archiveName) {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getArchiveByName, {
archiveName: archiveName,
})
);
} else if (CHAT_UTIL.isAndroid()) {
return JSON.parse(android.getArchiveListByName(archiveName));
}
};
// アーカイブ詳細
CHAT_DB.getArchiveDetail = function (archiveId) {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getArchiveDetail, { archiveId: archiveId })
);
} else if (CHAT_UTIL.isAndroid()) {
return JSON.parse(android.getArchiveDetail(archiveId));
}
};
CHAT_DB.updateArchiveDetail = function (archiveId) {
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.updateArchiveDetail.postMessage(archiveId);
} else if (CHAT_UTIL.isAndroid()) {
android.updateArchiveDetail(archiveId);
}
};
CHAT_DB.searchMessages = function (keyword, userList) {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.searchMessages, {
keyWord: keyword,
userList: userList,
})
);
} else if (CHAT_UTIL.isAndroid()) {
return JSON.parse(android.searchMessages(keyword, userList));
}
};
CHAT_DB.getMyGroupUsersNotInRoom = function () {
if (CHAT_UTIL.isIOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getMyGroupUsersNotInRoom, {})
);
} else if (CHAT_UTIL.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getMyGroupUsersNotInRoom());
}
};
CHAT_DB.getUserInfo = function (shopMemberId) {
if (shopMemberId == "") {
return;
}
if (CHAT_UTIL.isIOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getUserInfo, { shopMemberId: shopMemberId })
);
} else if (CHAT_UTIL.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getUserInfo(shopMemberId));
}
};
CHAT_DB.getUserListByLoginId = function (loginIdList) {
console.log(loginIdList);
if (CHAT_UTIL.isIOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getUserListByLoginId, {
loginIdList: loginIdList.join(","),
})
);
} else if (CHAT_UTIL.isAndroid()) {
return JSON.parse(android.getUserListByLoginId(loginIdList.join(",")));
}
};
jQuery("#homeButton").on("click", function () {
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.goHome.postMessage({});
} else if (CHAT_UTIL.isAndroid()) {
android.goHome();
}
});
jQuery("#reloadButton").on("click", function () {
if (CHAT_UTIL.isIOS()) {
//TODO IOS処理追加必要。
} else if (CHAT_UTIL.isAndroid()) {
android.reload();
}
});
var lastscrollvalue;
window.onscroll = function () {
if (beforeScroll == window.scrollY) {
return;
}
beforeScroll = window.scrollY;
const beforeHeight = $(".room_container").height();
messageCount = $(".chat_message").length;
if ($(this).scrollTop() === 0 && messageCount >= PagingSize.MESSAGE) {
if (!$("#chatLoader").is(":visible")) {
let loader = $(
'<div id="chatLoader" class="text-center"><div class="spinner-grow spinner-grow-sm" role="status" /></div>'
);
$("#messages").prepend(loader);
const messageId = $($(".chat_message").get(0)).data("messageid");
let messages;
if (typeof android != "undefined") {
if (IS_ONLINE == "true") {
android.updatePreMessage(messageId);
}
} else {
// 追加メッセージUpdate、get
webkit.messageHandlers.updatePreMessage.postMessage({ messageId: messageId });
}
messages = CHAT_DB.getMessagesWithMessageId(messageId);
CHAT_UI.prependMessage(messages);
loader.remove();
var afterHeight = $(".room_container").height();
window.scroll(0, afterHeight - beforeHeight);
}
}
};
$("#roomNameChangeBtn").click(function () {
var changeRoomName = $("#roomNameInput").val();
var trimmedRoomName = $("#roomNameInput").val().trim();
if (trimmedRoomName.length == 0) {
alert(getLocalizedString("error_empty_room_name"));
return;
}
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.changeRoomName.postMessage(changeRoomName);
} else if (CHAT_UTIL.isAndroid()) {
android.changeRoomName(changeRoomName);
}
});
/*
$('#messages').scroll(function() {
console.log('messagescroll');
if ($(this).scrollTop() === 0) {
if (!$('#chatLoader').is(':visible')) {
// 現在、メッセージの個数以前をメッセージを読み込む
// ローディングアイコンを追加する
let loader = $('<div id="chatLoader" class="text-center"><div class="spinner-grow spinner-grow-sm" role="status" /></div>')
$('#messages').prepend(loader)
loader.remove();
// socket.emit('getMessages', $(this).children().length, function() {
// // ローディングアイコンを削除する
// loader.remove();
// });
}
}
});*/
// New Room
// チャットルーム生成ボタン処理
$("#createChatRoom").on("click", function () {
//loadingIndicatorを表示
CHAT_UI.showLoadingIndicator();
let isInvite = false;
CHAT.globalIsInvite = isInvite;
socket.emit("getGroupList", isInvite);
});
// Room Delete
// チャットルーム削除ボタン処理
$("#roomDeleteButton").on("click", function (e) {
if ($(".deleteBox").is(":visible")) {
// チャットルーム削除アイコンが表示されている時、ブラインド処理を行う
$(".deleteBox")
.finish()
.show()
.fadeTo("slow", 0, function () {
$(this).hide();
});
// チャットリストについてクリックイベントを与える
$(".chat_list").off("click");
$(".chat_list:not(.active_chat)").on("click", function (e) {
//loadingIndicatorを表示
CHAT_UI.showLoadingIndicator();
let roomId = $(this).data("roomId");
let roomName = $(this).data("roomname");
socket.emit("joinRoom", roomId, roomName, function () {
$("#messages").html("");
$(".titleRoomName").text(roomName).data("roomName", roomName);
$("#pills-chat-tab").tab("show");
$("#message-search").attr(
"placeholder",
getLocalizedString("chat_search_placeholder")
);
});
});
let roomListTitle = getLocalizedString("roomListTitle");
$(".titleRoomName").text(roomListTitle);
$(".chat_list.active_chat").on("click", function (e) {
$("#pills-chat-tab").tab("show");
});
} else {
// チャットルーム削除アイコンが表示されていない場合、表示する
$(".deleteBox").finish().hide().fadeTo("slow", 1).show();
// #36129に対応
let deleteRoomTitle = getLocalizedString("deleteRoomTitle");
$(".titleRoomName").text(deleteRoomTitle);
// 重複処理を防ぐためにチャットリストのクリックイベントを消す
$(".chat_list").off("click");
// チャットルームの削除アイコンにクリックイベントを与える
$(".deleteBox").off("click");
$(".deleteBox").on("click", function (e) {
// #36174
let roomId = $(this).data("roomId");
let activeRoom = $(this).data("activeRoom");
$("#roomDeleteTitle").text(getLocalizedString("roomDeleteTitle"));
$("#roomDelete").text(getLocalizedString("roomDelete"));
$("#cancelTitle").text(getLocalizedString("cancelTitle"));
// #36128
$("#roomDeleteConfirm")
.appendTo("body")
.modal({
backdrop: "static",
keyboard: false,
})
.on("click", "#roomDelete", function (e) {
//loadingIndicatorを表示
CHAT_UI.showLoadingIndicator();
// 現在接続されているチャットルームを離れるとメッセージテップを初期化する
if (activeRoom) {
$("#messages").html("");
CHAT.saveRoomInfo("", "");
}
// チャットルームから退場する
socket.emit("exitRoom", roomId);
// #36129に対応
let roomListTitle = getLocalizedString("roomListTitle");
$(".titleRoomName").text(roomListTitle);
});
});
}
});
$("#room-search").on("input", function (event) {
if ($("#room-search").val().length > 0) {
// 検索結果が有る場合、結果を表示する
socket.emit("roomSearch", encodeURIComponent($("#room-search").val()));
} else {
if (IS_ONLINE == "true") {
if (typeof android != "undefined") {
android.updateRoomList();
} else {
webkit.messageHandlers.updateRoomList.postMessage({});
}
CHAT_UI.refreshRoomList(ChatRoomType.DM);
CHAT_UI.dismissLoadingIndicator();
}
}
});
//メッセージ送信
$("#messageInput").on("keypress", function (event) {
if (event.which == 13) {
// Enterキーの処理
$("#messageSend").click();
}
});
// 写真アップロード
$("#imageInputButton").on("click", function () {
$("#imageInputTag").click();
});
// 動画アップロード
$("#videoUploadButton").on("click", function () {
$("#videoInputTag").click();
});
$("#imageInputTag").on("change", function () {
$("#image-form").submit();
// reset the value of form
$("#imageInputTag").val("");
});
$("#videoInputTag").on("change", function () {
$("#video-form").submit();
// reset the value of form
$("#videoInputTag").val("");
});
$("#image-form").on("submit", function (e) {
e.preventDefault();
const imageInputTag = $("#imageInputTag");
const file = imageInputTag.prop("files")[0];
if (file) {
$(".overlay").addClass("active undismissable");
$(".loader").addClass("active");
CHAT_UI.showLoadingIndicator();
var fd = new FormData($(this)[0]);
console.log($(this)[0]);
//画像の大きさが500pixelより大きかったら、thumbnailを生成
CHAT.createThumbnailAndUpload(
file,
function (resizeFile, thumbnailCreated) {
if (resizeFile && thumbnailCreated) {
//ただ、画像の大きさが500pixel以下の場合はthumbnailは生成されない
fd.append("thumb", resizeFile);
}
// イメージをアップロード
CHAT.uploadImage(fd);
}
);
}
});
$("#video-form").on("submit", function (e) {
e.preventDefault();
const videoInputTag = $("#videoInputTag");
const file = videoInputTag.prop("files")[0];
if (file) {
$(".overlay").addClass("active undismissable");
$(".loader").addClass("active");
CHAT_UI.showLoadingIndicator();
var fd = new FormData($(this)[0]);
if (!file.type.includes("image")) {
// video 保存
// CHAT.createVideoThumbnailAndUpload(file, function(resizeFile, thumbnailCreated) {
// if(resizeFile && thumbnailCreated) {
// //ただ、画像の大きさが500pixel以下の場合はthumbnailは生成されない
// fd.append('thumb', resizeFile)
// }
// CHAT.uploadImage(fd);
// })
CHAT.uploadImage(fd);
return;
}
}
});
$("#message-search").on("input", function (event) {
// チャットキーワードを入力するとページ内にある単語をハイライトする。(mark.js 使用)
if ($(this).val()) {
$(".message_content").unmark();
$(".message_content").mark($(this).val());
if ($("[data-markjs=true]").length > 0) {
// マーキングされている単語があった場合、最後の単語にスクロールを移動する。
CHAT_UI.scrollToLastMarkedUnseen($(this).val());
} else {
// マーキングされている単語がない場合、下段にスクロールする。
CHAT_UI.scrollToBottom();
}
} else {
// チャットキーワードが空欄になるとマーキングを解除し、下段にスクロールする。
$(".message_content").unmark();
CHAT_UI.scrollToBottom();
}
});
//次のマーキングされた単語にスクロールを移動する。
$("#pre-search").on("click", function (event) {
CHAT_UI.scrollToLastMarkedUnseen(jQuery("#message-search").val());
});
// Exit Room
$("#exitRoom").on("click", function (event) {
// 36174
$("#exitRoomTitle").text(getLocalizedString("exitRoomTitle"));
$("#exitRoomOk").text(getLocalizedString("yesTitle"));
$("#noExit").text(getLocalizedString("cancelTitle"));
$("#exitRoomConfirm")
.appendTo("body")
.modal({
backdrop: "static",
keyboard: false,
})
.on("click", "#exitRoomOk", function (e) {
//loadingIndicatorを表示
CHAT_UI.showLoadingIndicator();
// チャットルームから退場する
socket.emit("exitRoom");
$("#dismiss").click();
CHAT.saveRoomInfo("", "");
});
});
// Side Bar
$("#sidebarCollapse").on("click", function () {
// open sidebar
$("#sidebar").addClass("active");
// fade in the overlay
$(".overlay").addClass("active");
$(".collapse.in").toggleClass("in");
$("a[aria-expanded=true]").attr("aria-expanded", "false");
});
$("#dismiss, .overlay").on("click", function () {
// hide sidebar
$("#sidebar").removeClass("active");
// hide overlay if dismissable
$(".overlay:not(.undismissable)").removeClass("active");
});
//Invite User
//招待ボタンを押すとグループリストを持ってくる。(ボタンを動的に追加して微動作中)
$("#addUser").on("click", function (event) {
//loadingIndicatorを表示
CHAT_UI.showLoadingIndicator();
let isInvite = true;
CHAT.globalIsInvite = isInvite;
socket.emit("getGroupList", isInvite);
});
//グループ画面での検索
$("#groupListKeyword").on("input", function (event) {
// data-name値で当該キーワードが入っているグループのみを表示する。
if ($(this).val()) {
$('.group_list:not([data-name*="' + $(this).val() + '" i])').hide();
$('.group_list[data-name*="' + $(this).val() + '" i]').show();
} else {
$(".group_list").show();
}
});
$("#userListKeyword").on("input", function (event) {
// data-name値で当該キーワードが入っているユーザーのみを表示する。
if ($(this).val()) {
$('.user_list:not([data-name*="' + $(this).val() + '" i])').hide();
$('.user_list[data-name*="' + $(this).val() + '" i]').show();
} else {
$(".user_list").show();
}
});
$("#selectListKeyword").on("input", function (event) {
if ($(this).val()) {
$('.select_user_list:not([data-name*="' + $(this).val() + '" i])').hide();
$('.select_user_list[data-name*="' + $(this).val() + '" i]').show();
} else {
$(".select_user_list").show();
}
});
$("#contactButton").on("click", function (event) {
CHAT_UI.refreshContactScreen();
});
$("#chatButton").on("click", function (event) {
CHAT_UI.refreshRoomList(ChatRoomType.DM);
});
$("#tabDM").on("click", function (e) {
CHAT_UI.refreshRoomList(ChatRoomType.DM);
});
$("#tabGroup").on("click", function (e) {
CHAT_UI.refreshRoomList(ChatRoomType.GROUP);
});
$("#tabAllGroup").on("click", function (e) {
CHAT_UI.refreshAllGroupSearch("0");
});
$("#tabMyGroup").on("click", function (e) {
$("#contactSearch").attr("placeholder", getLocalizedString("userSearch"));
CHAT_UI.refreshContactScreen();
});
$("#tabMyGroupOnMakeRoom").on("click", function (e) {
CHAT_UI.refreshMyGroupForMakeRoom();
});
$("#tabAllGroupOnMakeRoom").on("click", function (e) {
CHAT_UI.refreshAllGroupForMakeRoom("0");
});
$("#tabMyGroupOnAddUser").on("click", function (e) {
CHAT_UI.refreshMyGroupForAddUser();
});
$("#tabAllGroupOnAddUser").on("click", function (e) {
CHAT_UI.refreshAllGroupForAddUser("0");
});
$("#tabMyGroupOnAddUserInCollaboration").on("click", function (e) {
CHAT_UI.refreshMyGroupForAddUserInCollaboration();
});
$("#tabAllGroupOnAddUserInCollaboration").on("click", function (e) {
CHAT_UI.refreshAllGroupForAddUserInCollaboration("0");
});
$("#makeRoomConfirmBtn").on("click", function (e) {
if (typeof android != "undefined") {
android.saveSelectedUserList(CHAT.globalSelectedUserList.join(","));
} else {
webkit.messageHandlers.saveSelectedUserList.postMessage(
CHAT.globalSelectedUserList.join(",")
);
}
$("#makeRoomForm").submit();
});
$("#addUserConfirmBtn").on("click", function (e) {
if (typeof android != "undefined") {
android.saveSelectedUserList(CHAT.globalSelectedUserList.join(","));
} else {
webkit.messageHandlers.saveSelectedUserList.postMessage(
CHAT.globalSelectedUserList.join(",")
);
}
$("#addUserForm").submit();
});
CHAT_UI.joinCollaboration = function (collaborationType, meetingId = 0) {
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.joinCollaboration.postMessage({
collaborationType: collaborationType,
meetingId: meetingId,
});
} else if (CHAT_UTIL.isAndroid()) {
if (
collaborationType == COLLABORATION_TYPE.DOCUMENT &&
androidVersion < ANDROID_SDK_VERSION.O
) {
alert(getLocalizedString("not_support_version"));
return;
}
android.joinCollaboration(collaborationType, meetingId);
}
};
CHAT_UI.startCollaboration = function (collaborationType) {
if (CHAT_UTIL.isAndroid()) {
if (
collaborationType == COLLABORATION_TYPE.DOCUMENT &&
androidVersion < ANDROID_SDK_VERSION.O
) {
alert(getLocalizedString("not_support_version"));
return;
}
}
if ($(".collabo_area.start").length != 0) {
if (!confirm(getLocalizedString("already_exist_collaboration"))) {
CHAT_UI.dismissLoadingIndicator();
return;
}
socket.emit(
"createMessage",
{
text: DATA_MESSAGE_SCHEME + FINISH_ALL_COLLABORATION_SIGNAL,
},
0
);
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.finishAllCollaboration.postMessage({});
} else if (CHAT_UTIL.isAndroid()) {
android.finishAllCollaboration();
}
}
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.startCollaboration.postMessage(collaborationType);
} else if (CHAT_UTIL.isAndroid()) {
android.startCollaboration(collaborationType);
}
};
CHAT_UI.refreshJoinedCollaboration = function (loginIdList) {
for (var count = 0; count < loginIdList.length; count++) {
loginIdList[count] = loginIdList[count].replaceAll(
globalUserInfo.shopName + "_",
""
);
}
CHAT_UI.showLoadingIndicator();
$("#collaboration_overlay_user_list").html("");
var joinedUserListTemplate;
$.get(
{ url: "./collaboration_overlay_user_list.html", async: false },
function (text) {
joinedUserListTemplate = text;
}
);
var joinedUserList = CHAT_DB.getUserListByLoginId(loginIdList);
var sortedUserList = new Array();
loginIdList.forEach(function (userId) {
joinedUserList.forEach(function (user) {
if (userId == user.loginId) {
sortedUserList.push(user);
}
});
});
sortedUserList.forEach(function (user) {
user.profileUrl = CHAT.getProfileImgUrl(user.profileUrl);
});
let html = Mustache.render(joinedUserListTemplate, {
joinedUserList: sortedUserList,
});
let obj = jQuery.parseHTML(html);
$("#collaboration_overlay_user_list").append(obj);
CHAT_UI.dismissLoadingIndicator();
};
CHAT_UI.refreshMyGroupForAddUserInCollaboration = function () {
if (CHAT.globalSelectedUserList.length > 0) {
$(".select_member_num").text(CHAT.globalSelectedUserList.length);
} else {
$(".select_member_num").text("0");
}
$("#favoriteListForAddUserInCollaboration").html("");
$("#myGroupListForAddUserInCollaboration").html("");
$("#tabMyGroupOnAddUserInCollaboration").prop("checked", true);
// グループの様式を読み込む
var groupTemplate = getTemplate(
TemplateURL.ADD_USER_GROUP_LIST_IN_COLLABORATION
);
// ユーザの様式を読み込む
var userTemplate = getTemplate(
TemplateURL.ADD_USER_USER_LIST_IN_COLLABORATION
);
var groupUserTemplate = getTemplate(
TemplateURL.ADD_USER_GROUP_USER_LIST_IN_COLLABORATION
);
if (IS_ONLINE == "true") {
if (typeof android != "undefined") {
android.updateMyInfo();
android.updateGroupUser();
android.updateFavorite();
} else {
webkit.messageHandlers.updateGroupInfo.postMessage("0");
webkit.messageHandlers.updateMyInfo.postMessage({});
webkit.messageHandlers.updateGroupUser.postMessage({});
webkit.messageHandlers.updateFavorite.postMessage({});
}
}
//お気に入りグループ取得。
var favoriteGroupList = CHAT_DB.getFavoriteGroups();
favoriteGroupList.forEach(function (favoriteGroup) {
let html = Mustache.render(groupTemplate, {
name: favoriteGroup.groupName,
id: favoriteGroup.groupId,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#favoriteListForAddUserInCollaboration").append(obj);
});
//お気に入りユーザ取得。
var favoriteUserList = CHAT_DB.getFavoriteUsersNotInRoom();
favoriteUserList.forEach(function (favoriteUser) {
favoriteUser.profileUrl = CHAT.getProfileImgUrl(favoriteUser.profileUrl);
let findObj = CHAT.globalSelectedUserList.find(function (shopMemberId) {
return shopMemberId == favoriteUser.shopMemberId;
});
if (findObj) {
favoriteUser.checked = "checked";
}
});
let html = Mustache.render(userTemplate, {
userList: favoriteUserList,
});
let obj = jQuery.parseHTML(html);
$("#favoriteListForAddUserInCollaboration").append(obj);
var myGroupList = CHAT_DB.getMyGroupUsersNotInRoom();
myGroupList.forEach(function (myGroup) {
myGroup.groupUserList.forEach(function (groupUser) {
groupUser.profileUrl = CHAT.getProfileImgUrl(groupUser.profileUrl);
let findObj = CHAT.globalSelectedUserList.find(function (shopMemberId) {
return shopMemberId == groupUser.shopMemberId;
});
if (findObj) {
groupUser.checked = "checked";
}
});
let html = Mustache.render(groupUserTemplate, {
groupName: myGroup.groupName,
groupUserList: myGroup.groupUserList,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#myGroupListForAddUserInCollaboration").append(obj);
});
$("#addUserInCollaboration").modal("show");
CHAT_UI.dismissLoadingIndicator();
};
CHAT_UI.refreshAllGroupForAddUserInCollaboration = function (paramGroupId) {
var groupId = paramGroupId;
$(".content").removeClass("none");
$("#tabAllGroupOnAddUserInCollaboration").prop("checked", true);
//オンライン状態であればサーバから情報更新。
if (IS_ONLINE == "true") {
if (typeof android != "undefined") {
android.updateGroupUser();
} else {
webkit.messageHandlers.updateGroupInfo.postMessage(groupId);
}
}
//画面エリアを初期化。
$("#parentGroupBtnForAddUserInCollaboration").off();
$("#rootGroupBtnForAddUserInCollaboration").off();
$("#childGroupListAreaForAddUserInCollaboration").html("");
$("#userInGroupListForAddUserInCollaboration").html("");
$("#groupPathAreaForAddUserInCollaboration").html("");
//DBからグループ情報を取得。
var result = CHAT_DB.getGroupInfoForAddUser(groupId);
//上位グループ、トップグループ遷移ボタンのイベント追加。
if (typeof result.parentGroupId !== "undefined") {
$("#parentGroupBtnForAddUserInCollaboration").on("click", function () {
CHAT_UI.refreshAllGroupForAddUserInCollaboration(result.parentGroupId);
});
}
if (typeof result.rootGroupId !== "undefined") {
if (paramGroupId == 0) {
groupId = result.rootGroupId;
}
$("#rootGroupBtnForAddUserInCollaboration").on("click", function () {
CHAT_UI.refreshAllGroupForAddUserInCollaboration(result.rootGroupId);
});
}
if (groupId == result.rootGroupId || paramGroupId == "0") {
$("#rootGroupAreaInCollaboration").addClass("none");
$("#parentGroupAreaInCollaboration").addClass("none");
} else {
$("#rootGroupAreaInCollaboration").removeClass("none");
$("#parentGroupAreaInCollaboration").removeClass("none");
}
//該当グループのパースを表示。
var groupPathTemplate = getTemplate(
TemplateURL.ADD_USER_GROUP_PATH_IN_COLLABORATION
);
var groupPathCount = 0;
result.groupPathList.forEach(function (groupPath) {
if (!(groupPathCount < result.groupPathList.length - 3)) {
let html = Mustache.render(groupPathTemplate, {
name: groupPath.groupName,
id: groupPath.groupId,
});
let obj = jQuery.parseHTML(html);
$("#groupPathAreaForAddUserInCollaboration").append(obj);
}
groupPathCount++;
});
//該当グループの下位グループ表示。
var groupTemplate = getTemplate(
TemplateURL.ADD_USER_GROUP_LIST_IN_COLLABORATION
);
result.childGroupList.forEach(function (childGroup) {
let html = Mustache.render(groupTemplate, {
name: childGroup.groupName,
id: childGroup.groupId,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#childGroupListAreaForAddUserInCollaboration").append(obj);
});
//該当グループの所属ユーザを表示。
var userTemplate = getTemplate(
TemplateURL.ADD_USER_USER_LIST_IN_COLLABORATION
);
result.groupUserList.forEach(function (groupUser) {
groupUser.profileUrl = CHAT.getProfileImgUrl(groupUser.profileUrl);
let findObj = CHAT.globalSelectedUserList.find(function (shopMemberId) {
return shopMemberId == groupUser.shopMemberId;
});
if (findObj) {
groupUser.checked = "checked";
}
});
let html = Mustache.render(userTemplate, {
userList: result.groupUserList,
});
let obj = jQuery.parseHTML(html);
$("#userInGroupListForAddUserInCollaboration").append(obj);
};
CHAT_UI.makeNameCardInCollaboration = function (shopMemberId) {
if (CHAT.globalLoginParameter.shopMemberId == shopMemberId) {
return;
}
var nameCardInfo = CHAT_DB.getNameCardData(shopMemberId);
var namecardTemplate;
var changeHostTemplate;
$.get({ url: "./modal_collabo_profile.html", async: false }, function (text) {
namecardTemplate = text;
});
let isCollaborationHost = coview_api.getRoomUsers();
nameCardInfo.profileUrl = CHAT.getProfileImgUrl(nameCardInfo.profileUrl);
let whosHost = $("#collaboration_user_" + nameCardInfo.loginId).hasClass(
"host"
);
let namecardHtml = Mustache.render(namecardTemplate, {
shopMemberId: nameCardInfo.shopMemberId,
profileUrl: nameCardInfo.profileUrl,
loginId: nameCardInfo.loginId,
name: nameCardInfo.shopMemberName,
groupPathList: nameCardInfo.groupPathList,
isFavorite: nameCardInfo.isFavorite,
isHost: isCollaborationHost,
whosHost: whosHost,
});
let namecardObj = $(jQuery.parseHTML(namecardHtml)).on(
"click",
function () {}
);
$("#userProfileModalInCollaboration").html(namecardObj);
$("#userNameCardInCollaboration").modal("show");
};
CHAT_UI.removeFavoriteUserInCollaboration = function (shopMemberId) {
CHAT_UI.showLoadingIndicator();
$("#userNameCardInCollaboration").modal("hide");
var result;
if (typeof android != "undefined") {
result = android.removeFavoriteUser(shopMemberId);
} else {
result = CHAT_DB.removeFavoriteUser(shopMemberId);
}
CHAT_UI.dismissLoadingIndicator();
};
CHAT_UI.insertFavoriteUserInCollaboration = function (shopMemberId) {
$("#userNameCardInCollaboration").modal("hide");
var result;
if (typeof android != "undefined") {
result = android.addFavoriteUser(shopMemberId);
} else {
result = CHAT_DB.addFavoriteUser(shopMemberId);
}
CHAT_UI.dismissLoadingIndicator();
};
CHAT_UI.confirmInviteUserListInCollaboration = function () {
var selectedUsers = CHAT_DB.loadSelectedUsers();
if (selectedUsers != "") {
$("#selectedUserListinCollaboration").html("");
var selectedUserList = CHAT_DB.loadSelectedUsers();
selectedUserList.forEach(function (user) {
user.profileUrl = CHAT.getProfileImgUrl(user.profileUrl);
});
var modalTemplate;
$.get(
{ url: "./modal_add_user_confirm.html", async: false },
function (text) {
modalTemplate = text;
}
);
let html = Mustache.render(modalTemplate, {
userList: selectedUserList,
});
let obj = jQuery.parseHTML(html);
$("#modal_add_user_confirm").html(obj);
$("#modalAddUserConfirm").modal("show");
} else {
}
$("#cancelAddUserBtn")
.off()
.on("click", function () {
console.log("cancelClick");
$("#modalAddUserConfirm").modal("hide");
$("#addUserInCollaboration").modal("show");
});
$("#addUserBtn")
.off()
.on("click", function () {
CHAT_UI.showLoadingIndicator();
let userIdList = new Array();
selectedUserList.forEach(function (user) {
userIdList.push(user.shopMemberId);
});
if (typeof android != "undefined") {
android.inviteCollaboration(
userIdList.join(","),
CHAT_UTIL.getCollaborationType(globalUserInfo.coWorkType)
);
} else {
webkit.messageHandlers.inviteCollaboration.postMessage({
userIdList: userIdList.join(","),
collaborationType: CHAT_UTIL.getCollaborationType(
globalUserInfo.coWorkType
),
});
}
CHAT_UI.dismissLoadingIndicator();
$("#modalAddUserConfirm").modal("hide");
});
};
// 名前空間
var CHAT_UI = {};
includeJs("./js/chat-ui-clickEvents.js");
includeJs("./js/chat-ui-collaboration.js");
// Rotate
$(window).on("resize", function () {
if (CHAT_UTIL.isMobile()) {
return;
}
console.log(`width : ${$(this).width()}`);
console.log(`height : ${$(this).height()}`);
if (CHAT_UTIL.isIOS()) {
if (isLandscape == true) {
$(".mesgs").addClass("landscape_mesgs");
} else if (isLandscape == false) {
$(".mesgs").removeClass("landscape_mesgs");
}
}
});
//上にスクロールすると新しいメッセージを呼ぶ処理。
$("#messages").scroll(function () {
if ($(this).scrollTop() === 0) {
if (!$("#chatLoader").is(":visible")) {
// 現在、メッセージの個数以前をメッセージを読み込む
// ローディングアイコンを追加する
let loader = $(
'<div id="chatLoader" class="text-center"><div class="spinner-grow spinner-grow-sm" role="status" /></div>'
);
$("#messages").prepend(loader);
loader.remove();
// socket.emit('getMessages', $(this).children().length, function() {
// // ローディングアイコンを削除する
// loader.remove();
// });
}
}
});
// UIの位置調整(キーボード出現時)
$("#message-form").on("focus", function () {
if (CHAT_UTIL.isIOS()) {
// メッセージ入力欄の位置指定
document.querySelector(".fixed-bottom").style.bottom = 10000 + "px";
setTimeout(function () {
document.querySelector(".fixed-bottom").style.bottom = 0 + "px";
}, 200);
}
});
CHAT_UI.setNavigationPosition = function (y) {
if (document.activeElement.id == "message-form") {
$(".navbar").css("position", "absolute");
$(".navbar").css("top", y + "px");
$(".tab-pane").css("margin-top", y + "px");
var height = document
.getElementById("messages")
.getBoundingClientRect().height;
$(".msg_history").css("height", height - y + "px");
} else if (document.activeElement.id == "message-search") {
$(".msg_history").css("height", "");
}
};
CHAT_UI.resetNavigationPosition = function () {
$(".navbar").css("position", "");
$(".navbar").css("top", "");
$(".tab-pane").css("margin-top", "");
$(".msg_history").css("height", "");
};
// 端末の向きを記録(キーボード出現時にLandscapeModeと判定する対策)
var isLandscape;
CHAT_UI.setOrientation = function (isLandscapeMode) {
if (isLandscapeMode == "false") {
$(".mesgs").removeClass("landscape_mesgs");
isLandscape = false;
} else {
$(".mesgs").addClass("landscape_mesgs");
isLandscape = true;
}
};
CHAT_UI.sendMessage = function (e) {
const messageTextBox = $("#messageInput");
const message =
messageTextBox.val().length > 0
? encodeURIComponent(messageTextBox.val())
: "";
messageTextBox.val("");
if (message.length > 0) {
socket.emit(
"createMessage",
{ text: message + messageSeperator + MessageType.TEXT },
0
);
}
$(".message_input_form").focus();
};
/* ---------------------------------------------------------------------- */
/* */
/* Etc */
/* */
/* ---------------------------------------------------------------------- */
// Tab Open/Shown Event
$('a[data-toggle="pill"]').on("show.bs.tab", function (e) {
var target = $(e.target).attr("href"); // e.target : activated tab
switch (target) {
case "#pills-chat":
if (CHAT_UI.isLandscapeMode()) {
$(".mesgs").addClass("landscape_mesgs");
} else {
$(".mesgs").removeClass("landscape_mesgs");
}
CHAT.globalIsInvite = true;
$(".chatRoomIcon, .titleRoomName, #backButton").show();
$(
".roomListIcon, #userSelectionConfirmBtn, #newRoomName, #userSelectionDeleteBtn"
).hide();
$("#homeButton").hide();
$(".titleRoomName").text($(".titleRoomName").data("roomName"));
$("#newRoomName").val("");
$("#userSelectionLength").text("");
CHAT.globalSelectedUserList = [];
$("#bottomNav").hide();
$("#backButton")
.off()
.on("click", function () {
//loadingIndicatorを表示
CHAT_UI.showLoadingIndicator();
CHAT.saveRoomInfo();
if (IS_ONLINE == "true") {
socket.emit("leaveRoom", function () {
if (typeof android != "undefined") {
android.updateRoomList();
} else {
webkit.messageHandlers.updateRoomList.postMessage({
groupId: "0",
});
}
});
}
CHAT_UI.refreshRoomList(ChatRoomType.DM);
CHAT_UI.dismissLoadingIndicator();
});
//loadingIndicatorを表示しない
CHAT_UI.dismissLoadingIndicator();
break;
case "#pills-chatlist":
$(".titleRoomName, #backButton").show();
$(
".chatRoomIcon, #backButton, #userSelectionConfirmBtn, #newRoomName, #userSelectionDeleteBtn"
).hide();
$("#homeButton").show();
$("#room-search").val("");
$("#room-search").show();
$("#room_list").show();
// set Title
let roomListTitle = getLocalizedString("roomListTitle");
$("#bottomNav").show();
$(".titleRoomName").text(roomListTitle);
$("#newRoomName").val("");
$("#userSelectionLength").text("");
CHAT.globalSelectedUserList = [];
break;
case "#pills-contact":
$("#myNamecard").html("");
$("#homeButton").show();
$("#backButton").hide();
$(".titleRoomName").show();
$("#myGroupArea").show();
$("#allGroupArea").hide();
$("#my_info").show();
$("#bottomNav").show();
break;
case "#pills-user":
$("#backButton").show();
$("#userSelectionDeleteBtn").hide();
$("#homeButton").hide();
$("#bottomNav").hide();
//loadingIndicatorを表示しない
CHAT_UI.dismissLoadingIndicator();
break;
case "#pills-group":
$("#backButton").show();
$("#userSelectionDeleteBtn").hide();
$("#homeButton").hide();
$("#bottomNav").hide();
//loadingIndicatorを表示しない
CHAT_UI.dismissLoadingIndicator();
break;
case "#pills-confirm":
$("#backButton").show();
//loadingIndicatorを表示しない
CHAT_UI.dismissLoadingIndicator();
$("#homeButton").hide();
$("#bottomNav").hide();
$(".user_people").css("paddingLeft", "0px");
break;
case "#pills-communication": // コミュニケーションのタブ
case "#pills-setting": // 設定のタブ
case "#pills-profile": // ユーザプロファイルのタブ
$("#bottomNav").hide();
$(".titleRoomName").show();
$(
".roomListIcon, .chatRoomIcon, #userSelectionConfirmBtn, #newRoomName, #userSelectionDeleteBtn"
).hide();
$("#backButton").hide();
break;
default:
$(".titleRoomName").show();
$(
".roomListIcon, .chatRoomIcon, #userSelectionConfirmBtn, #newRoomName, #userSelectionDeleteBtn"
).hide();
$("#backButton").hide();
break;
}
});
// Tab Close/Hidden Event
$('a[data-toggle="pill"]').on("hide.bs.tab", function (e) {
var target = $(e.target).attr("href"); // e.target : activated tab
switch (target) {
case "#pills-chat":
$("#message-search").val("");
break;
case "#pills-chatlist":
$("#room-search").val("");
$("#room-search").show();
break;
case "#pills-group":
$("#groupListKeyword").val("");
break;
case "#pills-contact":
break;
case "#pills-user":
$("#userListKeyword").val("");
break;
case "#pills-confirm":
$("#select_user_list").html("");
$("#selectUserListKeyword").val("");
$(".titleRoomName").show();
$(".user_people").css("paddingLeft", "12%");
break;
case "#pills-communication":
case "#pills-setting":
case "#pills-profile":
break;
default:
break;
}
});
$("#pills-chat-tab").on("shown.bs.tab", function (e) {
CHAT_UI.scrollToBottom();
});
$("#pills-user-tab").on("shown.bs.tab", function (e) {
$("#userSelectionConfirmBtn").show();
});
$("#pills-confirm-tab").on("shown.bs.tab", function (e) {
$("#userSelectionConfirmBtn").show();
$("#userSelectionLength").text("");
$("#userSelectionDeleteBtn").hide();
});
CHAT_UI.scrollToBottom = function () {
const messages = $(".room_contents");
const scrollHeight = messages.prop("scrollHeight");
//messages.scrollTop(scrollHeight);
$("html, body").animate(
{
scrollTop: scrollHeight,
},
100
);
};
CHAT_UI.scrollToLastMarkedUnseen = function (value) {
let target = $("[data-markjs=true]:not([data-seen=true])").last();
let messages = $("#messages");
if (target.length > 0) {
messages.scrollTop(
target.prop("offsetTop") -
target.prop("offsetHeight") -
messages.prop("offsetHeight") +
target.parent().parent().height()
);
target.attr("data-seen", true);
} else {
messages.scrollTop(0);
$(".message_content").unmark();
$(".message_content").mark(value);
}
};
//loadingIndicatorを表示
CHAT_UI.showLoadingIndicator = function () {
var h = $(window).height();
$("#loader-bg ,#loader").height(h).css("display", "block");
};
//loadingIndicatorを表示しない
CHAT_UI.dismissLoadingIndicator = function () {
var h = $(window).height();
$("#loader-bg ,#loader").height(h).css("display", "none");
};
//画面の方向をcheck
CHAT_UI.isLandscapeMode = function () {
if (CHAT_UTIL.isMobile()) {
return false;
}
return $(window).width() > $(window).height();
};
CHAT_UI.setConfirmButtonEvent = function (isInvite) {
let titleText = isInvite
? getLocalizedString("inviteUsersSubtitle")
: getLocalizedString("createRoomSubtitle");
let invitedUserText = getLocalizedString("invitedUser");
if (!isInvite) {
$("#newRoomName").show();
}
$("#userSelectionConfirmBtn")
.off()
.on("click", function (event) {
//loadingIndicatorを表示
CHAT_UI.showLoadingIndicator();
CHAT_UI.showConfirmView(isInvite);
});
CHAT_UI.showConfirmView(isInvite);
$("#inviteStatus").text(titleText);
$("#invitedUsers").text(invitedUserText);
$("#pills-confirm-tab").tab("show");
};
//ConfirmView initialize
CHAT_UI.showConfirmView = function (isInvite) {
const template = $("#user-template").html();
$("#select_user_list").html("");
CHAT.globalSelectedUserList.forEach(function (user) {
let html = Mustache.render(template, {
id: user.shopMemberId,
profileImage: user.profileImagePath,
name: user.loginId,
});
// TODO 次のコミットに参考事項
// チャットルーム開設画面で参加ユーザー削除用チェックロジックが残っているので
// 影響テスト後、削除予定。 kang-dh
let obj = $(jQuery.parseHTML(html)).on("click", function () {
$(this).find(".userCheckBox").toggleClass("active");
});
$("#select_user_list").append(obj);
});
let roomListTitle = getLocalizedString("createRoomTitle");
$(".titleRoomName").text(roomListTitle);
// Rotate
if (CHAT_UI.isLandscapeMode()) {
$(".user_list").addClass("col-6").removeClass("col-12");
$(".squareBoxContent span").addClass("landscape_span");
}
$("#backButton")
.off()
.on("click", function () {
//loadingIndicatorを表示
CHAT_UI.showLoadingIndicator();
socket.emit("getGroupList", isInvite);
});
$("#userSelectionConfirmBtn")
.off()
.on("click", function () {
if (isInvite) {
let userIdList = jQuery
.makeArray($("#select_user_list .user_list").find(".userCheckBox"))
.map(function (e) {
return e.dataset.id;
});
// ユーザーの名前(login id)リスト。
let loginIdList = jQuery
.makeArray($("#select_user_list .user_list").find(".userCheckBox"))
.map(function (e) {
return e.dataset.name;
});
if (userIdList.length > 0 && loginIdList.length > 0) {
//loadingIndicatorを表示
CHAT_UI.showLoadingIndicator();
socket.emit("inviteUsers", userIdList, loginIdList, function () {
$("#userSelectionDeleteBtn").hide();
$("#pills-chat-tab").tab("show");
});
}
} else {
if (
$("#select_user_list .user_list").find(".userCheckBox").length > 0
) {
// #36130に対応
const trimmedRoomName = $("#newRoomName").val().trim();
if (trimmedRoomName.length == 0) {
// loadingIndicatorを表示
CHAT_UI.showLoadingIndicator();
let userIdList = jQuery
.makeArray(
$("#select_user_list .user_list").find(".userCheckBox")
)
.map(function (e) {
return e.dataset.id;
});
let userNameList = jQuery
.makeArray(
$("#select_user_list .user_list").find(".userCheckBox")
)
.map(function (e) {
return e.dataset.name;
});
//TODO DB作業が終わったら自分のユーザ名を表示するかを判断し、修正予定。
// 参加ユーザ名でルーム名を生成
let newRoomName =
CHAT.globalLoginParameter.loginId + "," + userNameList.join(",");
// ルーム名のURIencodingを行う
//const encodedRoomName = encodeURIComponent(newRoomName);
//todo android create room api
createChatRoom(
ChatRoomType.DM,
userIdList,
newRoomName,
MakeRoomFlag.MAKE_ROOM,
false
);
} else if (
trimmedRoomName.includes(";") ||
trimmedRoomName.includes("/") ||
trimmedRoomName.includes("?") ||
trimmedRoomName.includes(":") ||
trimmedRoomName.includes("@") ||
trimmedRoomName.includes("&") ||
trimmedRoomName.includes("=") ||
trimmedRoomName.includes("+") ||
trimmedRoomName.includes("$") ||
trimmedRoomName.includes(",") ||
trimmedRoomName.includes("-") ||
trimmedRoomName.includes("_") ||
trimmedRoomName.includes(".") ||
trimmedRoomName.includes("!") ||
trimmedRoomName.includes("~") ||
trimmedRoomName.includes("*") ||
trimmedRoomName.includes("'") ||
trimmedRoomName.includes("(") ||
trimmedRoomName.includes(")") ||
trimmedRoomName.includes("#") ||
trimmedRoomName.includes("\\") ||
trimmedRoomName.includes('"') ||
trimmedRoomName.includes("`")
) {
// #36147
// #36174
$("#customAlertTitle").text(getLocalizedString("invalidCharacter"));
$("#customAlertOk").text(getLocalizedString("yesTitle"));
$("#customAlert")
.appendTo("body")
.modal({
backdrop: "static",
keyboard: false,
})
.on("click", "#customAlertOk", function (e) {});
} else if (trimmedRoomName.length > 20) {
// #36142
var inputText = $("#newRoomName").val().trim(); // #36142 文字列の前又は後の空白文字列を削除
// #36174
$("#customAlertTitle").text(getLocalizedString("nameTooLong"));
$("#customAlertOk").text(getLocalizedString("yesTitle"));
$("#customAlert")
.appendTo("body")
.modal({
backdrop: "static",
keyboard: false,
})
.on("click", "#customAlertOk", function (e) {
$("#newRoomName").val(
inputText.substr(0, $("#newRoomName").prop("maxlength"))
);
});
} else {
//loadingIndicatorを表示
CHAT_UI.showLoadingIndicator();
let userIdList = jQuery
.makeArray(
$("#select_user_list .user_list").find(".userCheckBox")
)
.map(function (e) {
return e.dataset.id;
});
// ルーム名のtrimmingした後、URIencodingを行う
const encodedRoomName = encodeURIComponent(trimmedRoomName);
createChatRoom(
ChatRoomType.DM,
userIdList,
encodedRoomName,
MakeRoomFlag.MAKE_ROOM,
false
);
}
}
}
});
$("#userSelectionDeleteBtn").hide();
$("#userSelectionDeleteBtn")
.off()
.on("click", function () {
// #36174
$("#customConfirmTitle").text(getLocalizedString("memberDeleteTitle"));
$("#customConfirmOk").text(getLocalizedString("roomDelete"));
$("#customAlertCancel").text(getLocalizedString("cancelTitle"));
$("#customConfirm")
.appendTo("body")
.modal({
backdrop: "static",
keyboard: false,
})
.on("click", "#customConfirmOk", function (e) {
CHAT_UI.deleteButtonAction(isInvite);
});
});
};
CHAT_UI.deleteButtonAction = function (isInvite) {
//配列の整理
jQuery
.makeArray($("#select_user_list .user_list").find(".userCheckBox.active"))
.map(function (e) {
CHAT.globalSelectedUserList = CHAT.globalSelectedUserList.filter(
function (element) {
return e.dataset.name != element.loginId;
}
);
});
CHAT_UI.showConfirmView(isInvite);
$("#select_user_list .user_list").find(".userCheckBox").show();
};
var GetFileBlobUsingURL = function (url, convertBlob) {
var xhr = new XMLHttpRequest();
xhr.open("GET", url);
xhr.responseType = "blob";
xhr.addEventListener("load", function () {
console.log(xhr.response);
convertBlob(xhr.response);
});
xhr.send();
};
var blobToFile = function (blob, name) {
blob.lastModifiedDate = new Date();
blob.name = name;
return blob;
};
var GetFileObjectFromURL = function (filePathOrUrl, convertBlob) {
GetFileBlobUsingURL(filePathOrUrl, function (blob) {
convertBlob(blobToFile(blob, "testFile.mp4"));
});
};
CHAT_UI.videoEncodeFail = function () {
alert(getLocalizedString("error_send_video"));
CHAT_UI.dismissLoadingIndicator();
};
CHAT_UI.videoEncodeEnd = function (encodedUri) {
var fileName = encodedUri.split("/")[encodedUri.split("/").length - 1];
var fileURL = "file:" + encodedUri;
var xhr = new XMLHttpRequest();
xhr.open("GET", fileURL);
xhr.responseType = "blob";
xhr.addEventListener("load", function () {
var formData = new FormData();
formData.append("image", xhr.response, fileName);
formData.append("sid", CHAT.globalLoginParameter.sid);
formData.append("roomId", CHAT.globalLoginParameter.roomId);
jQuery
.ajax({
async: true,
url: CMS_SERVER_URL + "/chatapi/file/upload",
type: "post",
data: formData,
contentType: false,
processData: false,
error: function () {
alert(getLocalizedString("error_send_video"));
CHAT_UI.dismissLoadingIndicator();
},
})
.done(function (res) {
if (CHAT_UTIL.isAndroid()) {
android.removeEncodedVideo(encodedUri);
}
var imgPath =
CMS_SERVER_URL +
"/chatapi/file/getImage?fileName=" +
res.fileName +
"&roomId=" +
CHAT.globalLoginParameter.roomId;
var imageName = res.fileName;
// uploadFileの判断
var extension = imageName
.substr(imageName.lastIndexOf(".") + 1)
.toLowerCase();
if (res.thumbnailPath && res.thumbnailPath.length > 0) {
imgPath =
CMS_SERVER_URL +
"/chatapi/file/getImage?fileName=" +
res.thumbImageFileName +
"&roomId=" +
CHAT.globalLoginParameter.roomId;
}
let downloadPath =
CMS_SERVER_URL +
"/chatapi/file/download?fileName=" +
imageName +
"&roomId=" +
CHAT.globalLoginParameter.roomId;
var videoSrc =
CMS_SERVER_URL +
"/chatapi/file/getImage?fileName=" +
res.fileName +
"&roomId=" +
CHAT.globalLoginParameter.roomId;
const totalDiv = $("<div/>", { id: "attachedImages" });
const videoTag = $("<video/>", {
controls: "true",
width: "auto",
style: "max-width:100%",
});
const source = $("<source/>", { src: videoSrc });
const downloadIcon = $("<a/>", {
href: downloadPath,
class: "fa fa-download",
download: res.fileName,
});
videoTag.append(source);
totalDiv.append(videoTag);
totalDiv.append(downloadIcon);
let text = totalDiv.prop("outerHTML");
let encodedText;
try {
encodedText = encodeURIComponent(text);
} catch (e) {
encodedText = text;
}
socket.emit(
"createMessage",
{
text: encodedText + messageSeperator + MessageType.VIDEO,
},
1
);
$(".overlay").removeClass("active undismissable");
$(".loader").removeClass("active");
CHAT_UI.dismissLoadingIndicator();
});
});
xhr.send();
};
CHAT_UI.htmlElementTextInitialize = function (languageCode) {
moment.locale(languageCode);
setLanguage(languageCode);
$(".titleRoomName").text(getLocalizedString("roomListTitle"));
$("#message-form").attr(
"placeholder",
getLocalizedString("chat_placeholder")
);
$("#message-search").attr(
"placeholder",
getLocalizedString("chat_search_placeholder")
);
$("#exitRoom")
.text(getLocalizedString("exitRoom"))
.append("<i class='fas fa-door-open'></i>");
$("#participants").text(getLocalizedString("participants"));
//$("#fileUploadButton").text(getLocalizedString("photo"))
//$("#fileUploadButton2").text(getLocalizedString("video"))
$("#okayLabel").text(getLocalizedString("okayLabel"));
$("#completeLabel").text(getLocalizedString("completeLabel"));
$("#thankLabel").text(getLocalizedString("thankLabel"));
$("#startToWorkLabel").text(getLocalizedString("startToWorkLabel"));
$("#groupListKeyword").attr("placeholder", getLocalizedString("groupSearch"));
$("#contactListKeyword").attr(
"placeholder",
getLocalizedString("contactSearch")
);
$("#room-search").attr(
"placeholder",
$("#room-search").attr("placeholder") +
getLocalizedString("room_search_placeholder")
);
$("#userListKeyword").attr("placeholder", getLocalizedString("userSearch"));
$("#newRoomName").attr("placeholder", getLocalizedString("newRoomName"));
$("#dmBtn").text(getLocalizedString("directMessageChatRoom"));
$("#groupBtn").text(getLocalizedString("groupChatRoom"));
$("#myGroupBtn").text(getLocalizedString("myGroup"));
$("#allGroupBtn").text(getLocalizedString("allGroup"));
//$("#groupPathSeperator").text(getLocalizedString("groupPath"))
//$("#moveBtnSeperator").text(getLocalizedString("quickBtn"))
//$("#rootGroupBtn").text(getLocalizedString("returnToRootGroup"))
//$("#parentGroupBtn").text(getLocalizedString("returnToParentGroup"))
//$("#childGroupSeperator").text(getLocalizedString("childGroup"))
//$("#groupUserSeperator").text(getLocalizedString("groupUser"))
$("#favorite-seperator").text(getLocalizedString("favorite"));
$("#mygroup-seperator").text(getLocalizedString("mygroup"));
$(".ttl_archive").text(getLocalizedString("archive"));
$(".ttl_detail").text(getLocalizedString("detail"));
$("#archiveFileName").text(getLocalizedString("archiveFileName"));
$("#archiveInsertDate").text(getLocalizedString("archiveInsertDate"));
$("#archiveRoomName").text(getLocalizedString("archiveRoomName"));
$("#archiveSaveUser").text(getLocalizedString("archiveSaveUser"));
$("#archiveAttendUser").text(getLocalizedString("archiveAttendUser"));
};
// 画像の読み込みが全て終わったタイミングでコールバック実行
// FIXME 追加読み込みの場合は差分の画像のみ監視すべきだが、現状新規入室時にしか対応出来ていない。
CHAT_UI.waitForLoadingVideo = function (div, callback) {
CHAT_UI.showLoadingIndicator();
// var imgs = document.getElementsByTagName("video");
var video = div.find("video");
var count = video.length;
if (count == 0) callback();
var loaded = 0;
video.each(function () {
this.addEventListener("loadeddata", function (e) {
loaded++;
if (loaded === count) {
callback();
CHAT_UI.dismissLoadingIndicator();
}
});
});
};
CHAT_UI.waitForLoadingImage = function (div, callback) {
var imgs = div.find("img");
var count = imgs.length;
if (count == 0) callback();
var loaded = 0;
imgs
.one("load", function (e) {
// イメージが読み込まれた
loaded++;
if (loaded === count) {
callback();
}
})
.each(function () {
if (this.complete || this.readyState === readyState.COMPLETED) {
$(this).trigger("load");
}
});
};
CHAT_UI.refreshContactScreen = function () {
CHAT_UI.showLoadingIndicator();
$("#userNameCard").modal("hide");
$("#favoriteList").html("");
$("#myGroupList").html("");
//画面タイトル設定
let contactListTitle = getLocalizedString("contactListTitle");
$("#title").text(contactListTitle);
// グループの様式を読み込む
const groupTemplate = getTemplate(TemplateURL.GROUP_LIST);
// ユーザの様式を読み込む
var userTemplate = getTemplate(TemplateURL.USER_LIST);
var myNamecardTemplate = getTemplate(TemplateURL.MY_NAME_CARD);
var groupUserTemplate = getTemplate(TemplateURL.GROUP_USER_LIST);
updateContactInfo();
var myInfo = CHAT_DB.getMyInfo();
myInfo.profileImagePath = CHAT.getProfileImgUrl(myInfo.profileUrl);
let myNamecardHtml = Mustache.render(myNamecardTemplate, {
loginId: myInfo.shopMemberId,
profileImage: myInfo.profileImagePath,
name: myInfo.shopMemberName,
groupPathList: myInfo.groupPathList,
});
let myNamecardObj = $(jQuery.parseHTML(myNamecardHtml)).on(
"click",
function () {}
);
$("#myProfileModal").html(myNamecardObj);
$("#myName").text(myInfo.shopMemberName);
$("#myImg").attr("src", myInfo.profileImagePath);
//お気に入りグループ取得。
var favoriteGroupList = CHAT_DB.getFavoriteGroups();
favoriteGroupList.forEach(function (favoriteGroup) {
let html = Mustache.render(groupTemplate, {
name: favoriteGroup.groupName,
id: favoriteGroup.groupId,
isFavorite: true,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#favoriteList").append(obj);
});
//お気に入りユーザ取得。
var favoriteUserList = CHAT_DB.getFavoriteUsers();
favoriteUserList.forEach(function (favoriteUser) {
favoriteUser.profileUrl = CHAT.getProfileImgUrl(favoriteUser.profileUrl);
favoriteUser.isFavorite = true;
});
let html = Mustache.render(userTemplate, {
userList: favoriteUserList,
});
let obj = jQuery.parseHTML(html);
$("#favoriteList").append(obj);
var myGroupList = CHAT_DB.getMyGroupUsers();
myGroupList.forEach(function (myGroup) {
myGroup.groupUserList.forEach(function (groupUser) {
groupUser.profileUrl = CHAT.getProfileImgUrl(groupUser.profileUrl);
});
let html = Mustache.render(groupUserTemplate, {
groupName: myGroup.groupName,
groupUserList: myGroup.groupUserList,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#myGroupList").append(obj);
});
CHAT_UI.dismissLoadingIndicator();
};
CHAT_UI.refreshRoomList = function (roomType) {
if (IS_ONLINE == "true") {
CHAT_UI.refreshForOnline();
} else {
CHAT_UI.refreshForOffline();
}
var beforeRoomType;
if (typeof android != "undefined") {
beforeRoomType = android.getBeforeRoomType();
} else {
beforeRoomType = CHAT_DB.getBeforeRoomType();
}
if (beforeRoomType != null) {
roomType = beforeRoomType;
if (typeof android != "undefined") {
android.clearBeforeRoomType();
} else {
webkit.messageHandlers.clearBeforeRoomType.postMessage({});
}
}
CHAT_UI.showLoadingIndicator();
if (roomType == ChatRoomType.DM) {
$("#tabDM").prop("checked", true);
} else {
$("#tabGroup").prop("checked", true);
}
if (IS_ONLINE == "true") {
if (typeof android != "undefined") {
android.updateRoomList();
} else {
webkit.messageHandlers.updateRoomList.postMessage({});
}
}
var rooms = CHAT_DB.getRoomList(roomType, null);
CHAT.globalIsInvite = false;
// #36146に対応
$("#groupChatList").empty();
$("#dmChatList").empty();
let roomListTitle = getLocalizedString("roomListTitle");
$("#chatTitle").text(roomListTitle);
if (rooms.length === 0) {
// 検索結果がない場合のメッセージを追加
let emptyListString = getLocalizedString("roomListEmptyString");
switch (roomType) {
case ChatRoomType.GROUP:
$("#groupChatList").append(
`<center class="text-secondary">${emptyListString}</center>`
);
break;
case ChatRoomType.DM:
$("#dmChatList").append(
`<center class="text-secondary">${emptyListString}</center>`
);
break;
default:
}
}
var template = getTemplate(TemplateURL.ROOM_LIST);
rooms.forEach(function (room) {
room.profileImagePath = ASSET_PATH + "images/user-profile.png";
if (room.message) {
room.message = room.message.toString();
} else {
room.message = getLocalizedString("noMessages");
}
var displayMsg;
//TODO 協業の場合処理追加必要
switch (room.messageType) {
case MessageType.TEXT:
displayMsg = room.message;
break;
case MessageType.IMAGE:
displayMsg = getLocalizedString("image");
break;
case MessageType.VIDEO:
displayMsg = getLocalizedString("video");
break;
case MessageType.COMMUNICATIONSTART:
displayMsg = getLocalizedString("collaboration_start");
break;
case MessageType.COMMUNICATIONEND:
displayMsg = getLocalizedString("collaboration_end");
break;
default:
break;
}
var attendUserName = [];
room.attendUsers.forEach(function (user) {
user.profileUrl = CHAT.getProfileImgUrl(user.profileUrl);
attendUserName.push(user.shopMemberName);
});
var thumbnailCount =
room.attendUsers.length > 4 ? 4 : room.attendUsers.length;
if (room.chatRoomName == "") {
room.chatRoomName = attendUserName.join(", ");
}
var unreadMessageCount = room.unreadCount == 0 ? "" : room.unreadCount;
if (unreadMessageCount > 999) {
unreadMessageCount = "999+";
}
let html = Mustache.render(template, {
thumbnailCount: thumbnailCount,
roomName: room.chatRoomName,
roomId: room.chatRoomId,
profileImage: room.profileImagePath,
lastMessage: displayMsg,
time: room.insertDate
? CHAT_UTIL.formatDate(room.insertDate).createdAt
: "",
unreadMsgCnt: unreadMessageCount,
userCnt: room.attendUsers.length + 1,
attendUsers: room.attendUsers,
});
// Click event
let obj = $(jQuery.parseHTML(html)).on("click", function () {
/* let roomId = $(this).data('roomId');
let roomName = $(this).data('roomname');
CHAT_UI.joinRoom(roomId,roomName);*/
//TODO ルームに入る処理追加必要
});
// ルームグループごとに追加。
switch (roomType) {
case ChatRoomType.GROUP:
$("#groupChatList").append(obj);
break;
case ChatRoomType.DM:
$("#dmChatList").append(obj);
break;
default:
}
});
console.log("DONE");
CHAT_UI.dismissLoadingIndicator();
};
CHAT_UI.joinRoom = function (roomId, roomName) {
//native側に入場対象のroomId,roomNameを保存。(ルーム詳細画面初期化の時に使用。)
if (typeof android != "undefined") {
try {
android.joinRoom(roomId, roomName);
} catch {
alert(getLocalizedString("err_not_exist_room"));
}
} else {
webkit.messageHandlers.joinRoom.postMessage({
roomId: roomId,
roomName: roomName,
});
}
};
CHAT_UI.loadMessages = function (roomId, joinRoomName) {
roomName = joinRoomName;
var now = new Date();
if (IS_ONLINE == "true") {
CHAT_UI.refreshForOnline();
if (typeof android != "undefined") {
android.updateMessages(roomId);
} else {
webkit.messageHandlers.updateMessages.postMessage(roomId);
}
} else {
CHAT_UI.refreshForOffline();
}
var roomType;
if (typeof android != "undefined") {
roomType = android.getRoomType();
} else {
roomType = CHAT_DB.getRoomType();
}
if (roomType == ChatRoomType.DM) {
$("#roomMenu").removeClass("none");
}
var messages = CHAT_DB.getMessages(roomId);
var usersInRoom = CHAT_DB.getUsersInRoom(roomId);
$("#roomTitle").text(roomName).data("roomName", roomName);
let jQueryMessages = $("#messages");
// スクロールの変化を防ぐため以前画面の高さを保存する
let beforeHeight = jQueryMessages.prop("scrollHeight");
var userTemplate = getTemplate(TemplateURL.USER_LIST);
var topUserListTemplate = getTemplate(TemplateURL.CHATROOM_USER_LIST);
var filterUserListTemplate = getTemplate(
TemplateURL.CHATROOM_USER_FILTER_LIST
);
usersInRoom.forEach(function (user) {
user.profileUrl = CHAT.getProfileImgUrl(user.profileUrl);
});
let html = Mustache.render(topUserListTemplate, {
userList: usersInRoom,
});
let obj = jQuery.parseHTML(html);
$("#user_list").append(obj);
let filterHtml = Mustache.render(filterUserListTemplate, {
userList: usersInRoom,
});
let filterObj = jQuery.parseHTML(filterHtml);
$("#filter").append(filterObj);
CHAT_UI.prependMessage(messages);
CHAT_UI.waitForLoadingImage(jQueryMessages, CHAT_UI.scrollToBottom);
CHAT_UI.waitForLoadingVideo(jQueryMessages, CHAT_UI.scrollToBottom);
// ユーザ削除ボタン表示しない
$("#userSelectionDeleteBtn").hide();
if (CHAT_UTIL.isIOS()) {
$(window).on('load', function() {
CHAT_UI.scrollToBottom();
});
}
};
CHAT_UI.prependMessage = function(messages) {
var now = new Date();
let jQueryMessages = $("#messages");
// スクロールの変化を防ぐため以前画面の高さを保存する
let beforeHeight = jQueryMessages.prop("scrollHeight");
// メッセージ文字列の生成
let workVal = "";
var userTemplate = getTemplate(TemplateURL.USER_LIST);
var userMessageTemplate = getTemplate(TemplateURL.USER_MESSAGE);
var myMessageTemplate = getTemplate(TemplateURL.MY_MESSAGE);
var systemMessageTemplate = getTemplate(TemplateURL.SYSTEM_MESSAGE);
var openCollaborationMessageTemplate = getTemplate(
TemplateURL.OPEN_COLLABORATION_MESSAGE
);
var checkBeforeDate = "";
var beforeDate = "";
messages.forEach(function (message) {
let template = userMessageTemplate;
if (message.shopMemberId == CHAT.globalLoginParameter.shopMemberId) {
template = myMessageTemplate;
}
if (message.messageType == MessageType.SYSTEM) {
template = systemMessageTemplate;
}
if (
message.messageType == MessageType.COMMUNICATIONSTART ||
message.messageType == MessageType.COMMUNICATIONEND
) {
template = openCollaborationMessageTemplate;
}
let messageTime = CHAT_UTIL.formatDate(message.insertDate);
// ユーザの様式を読み込む
if (message.profileUrl) {
message.profileUrl = CHAT.getProfileImgUrl(message.profileUrl);
} else {
message.profileUrl = CHAT.getProfileImgUrl("");
}
// #36147
message.message = message.message.toString();
var replacePath = message.message;
replacePath = replacePath.replaceAll(
"?fileName=",
"?sid=" + CHAT.globalLoginParameter.sid + "&fileName="
);
message.message = replacePath;
/* if (message.message contain) {
}*/
var isOtherYear = false;
var isToday = false;
if (messageTime.createdAt.includes(":")) {
isToday = true;
}
if (now.getFullYear() != message.insertDate.substring(0, 4)) {
isOtherYear = true;
}
if (messageTime.createdAtDay != checkBeforeDate && checkBeforeDate != "") {
let messageDay = CHAT_UTIL.systemDay(beforeDate);
let html = Mustache.render(systemMessageTemplate, {
year: messageDay.year + getLocalizedString("year"),
month: messageDay.month + getLocalizedString("month"),
day: messageDay.day + getLocalizedString("day"),
dow: CHAT_UTIL.findDow(messageDay.dow),
});
workVal = html + workVal;
}
checkBeforeDate = messageTime.createdAtDay;
beforeDate = message.insertDate;
if (
message.messageType == MessageType.COMMUNICATIONSTART ||
message.messageType == MessageType.COMMUNICATIONEND
) {
var collaborationInfo;
var userInCollaboration;
if (CHAT_UTIL.isIOS()) {
collaborationInfo = JSON.parse(message.message);
userInCollaboration = JSON.parse(
CHAT_DB.getUserInfoList(collaborationInfo.userList)
);
} else if (CHAT_UTIL.isAndroid()) {
collaborationInfo = JSON.parse(message.message);
userInCollaboration = JSON.parse(
android.getUserInfoList(collaborationInfo.userList)
);
}
var meetingId = 0;
if (typeof collaborationInfo.meetingId != "undefined") {
meetingId = collaborationInfo.meetingId;
}
userInCollaboration.forEach(function (user) {
user.profileUrl = CHAT.getProfileImgUrl(user.profileUrl);
});
let html = Mustache.render(template, {
messageId: message.messageId,
roomName: roomName,
userCount: userInCollaboration.length,
userList:
userInCollaboration.length > 3
? userInCollaboration.slice(0, 3)
: userInCollaboration,
insertDate: message.insertDate,
collaborationType: collaborationInfo.collaborationType,
meetingId: meetingId,
isToday: isToday,
createdAtDay: messageTime.createdAtDay,
createdAtTime: messageTime.createdAtTime,
createdAtYear:
message.insertDate.substring(0, 4) + getLocalizedString("year") + " ",
isOtherYear: isOtherYear,
isEnded:
message.messageType == MessageType.COMMUNICATIONEND ? true : false,
});
html =
message.message.includes("attachedImages") ||
message.message.includes("attachedVideos")
? CHAT_UTIL.htmlDecode(html)
: html;
workVal = html + workVal;
} else {
let html = Mustache.render(template, {
text: message.message,
from: message.loginId,
messageId: message.messageId,
shopMemberId: message.shopMemberId,
profileImage: message.profileUrl,
createdAtDay: messageTime.createdAtDay,
createdAtTime: messageTime.createdAtTime,
createdAtYear:
message.insertDate.substring(0, 4) + getLocalizedString("year") + " ",
unreadCount: message.unreadCount,
isOtherYear: isOtherYear,
isToday: isToday,
});
html =
message.message.includes("attachedImages") ||
message.message.includes("attachedVideos")
? CHAT_UTIL.htmlDecode(html)
: html;
workVal = html + workVal;
}
});
// メッセージの画面描画
jQueryMessages.prepend(workVal);
}
CHAT_UI.roomDisplayOff = function () {
if (typeof android != "undefined") {
android.roomDisplayOff();
} else {
webkit.messageHandlers.roomDisplayOff.postMessage({});
}
};
CHAT_UI.favoriteUserChange = function (shopMemberId, star) {
if ($(star).hasClass("active")) {
CHAT_UI.removeFavoriteUser(shopMemberId);
} else if ($(star).hasClass("disable")) {
CHAT_UI.insertFavoriteUser(shopMemberId);
}
};
CHAT_UI.favoriteGroupChange = function (groupId, star) {
if ($(star).hasClass("active")) {
CHAT_UI.removeFavoriteGroup(groupId);
} else if ($(star).hasClass("disable")) {
CHAT_UI.insertFavoriteGroup(groupId);
}
};
CHAT_UI.removeFavoriteUser = function (shopMemberId) {
CHAT_UI.showLoadingIndicator();
$("#userNameCard").modal("hide");
$("#myNameCard").modal("hide");
var result;
if (typeof android != "undefined") {
result = android.removeFavoriteUser(shopMemberId);
} else {
result = CHAT_DB.removeFavoriteUser(shopMemberId);
}
if (!result) {
$(".shopmember_" + shopMemberId).addClass("active");
$(".shopmember_" + shopMemberId).removeClass("disable");
} else {
$(".shopmember_" + shopMemberId).removeClass("active");
$(".shopmember_" + shopMemberId).addClass("disable");
}
CHAT_UI.dismissLoadingIndicator();
};
CHAT_UI.insertFavoriteUser = function (shopMemberId) {
$("#userNameCard").modal("hide");
$("#myNameCard").modal("hide");
var result;
if (typeof android != "undefined") {
result = android.addFavoriteUser(shopMemberId);
} else {
result = CHAT_DB.addFavoriteUser(shopMemberId);
}
if (!result) {
$(".shopmember_" + shopMemberId).addClass("disable");
$(".shopmember_" + shopMemberId).removeClass("active");
CHAT_UI.dismissLoadingIndicator();
return;
} else {
$(".shopmember_" + shopMemberId).removeClass("disable");
$(".shopmember_" + shopMemberId).addClass("active");
}
CHAT_UI.dismissLoadingIndicator();
};
CHAT_UI.removeFavoriteGroup = function (groupId) {
CHAT_UI.showLoadingIndicator();
var result;
if (typeof android != "undefined") {
result = android.removeFavoriteGroup(groupId);
} else {
result = CHAT_DB.removeFavoriteGroup(groupId);
}
if (!result) {
$(".group_" + groupId).addClass("active");
$(".group_" + groupId).removeClass("disable");
} else {
$(".group_" + groupId).removeClass("active");
$(".group_" + groupId).addClass("disable");
}
CHAT_UI.dismissLoadingIndicator();
};
CHAT_UI.insertFavoriteGroup = function (groupId) {
CHAT_UI.showLoadingIndicator();
var result;
if (typeof android != "undefined") {
result = android.addFavoriteGroup(groupId);
} else {
result = CHAT_DB.addFavoriteGroup(groupId);
}
if (!result) {
$(".group_" + groupId).addClass("disable");
$(".group_" + groupId).removeClass("active");
} else {
$(".group_" + groupId).removeClass("disable");
$(".group_" + groupId).addClass("active");
}
CHAT_UI.dismissLoadingIndicator();
};
//全グループ検索画面表示。
CHAT_UI.refreshAllGroupSearch = function (paramGroupId) {
var groupId = paramGroupId;
if (window.location.pathname.includes("chat_room")) {
if (groupId == "") return;
if (typeof android != "undefined") {
android.setToMoveGroupId(groupId);
} else {
webkit.messageHandlers.setToMoveGroupId.postMessage(groupId);
}
window.location.href = "contact.html";
}
CHAT_UI.showLoadingIndicator();
$("#userNameCard").modal("hide");
$(".cancel").addClass("none");
$(".search_form input").removeClass("focus");
$(".search_form input").val("");
$(".search_form form").removeClass();
$(".content").removeClass("none");
$(".overlay_src_msg").empty();
$("#contactSearch").attr(
"placeholder",
getLocalizedString("searchUserAndGroup")
);
$("#tabAllGroup").prop("checked", true);
//オンライン状態であればサーバから情報更新。
updateGroupInfo(groupId);
//画面エリアを初期化。
$("#rootGroupBtn").off();
$("#parentGroupBtn").off();
$("#childGroupListArea").html("");
$("#userInGroupList").html("");
$("#groupPathArea").html("");
//DBからグループ情報を取得。
var result = CHAT_DB.getGroupInfo(groupId);
//上位グループ、トップグループ遷移ボタンのイベント追加。
if (typeof result.parentGroupId !== "undefined") {
$("#parentGroupBtn").on("click", function () {
CHAT_UI.refreshAllGroupSearch(result.parentGroupId);
});
}
if (typeof result.rootGroupId !== "undefined") {
if (paramGroupId == 0) {
groupId = result.rootGroupId;
}
$("#rootGroupBtn").on("click", function () {
CHAT_UI.refreshAllGroupSearch(result.rootGroupId);
});
}
if (groupId == result.rootGroupId || paramGroupId == "0") {
$("#rootGroupArea").addClass("none");
$("#parentGroupArea").addClass("none");
} else {
$("#rootGroupArea").removeClass("none");
$("#parentGroupArea").removeClass("none");
}
//該当グループのパースを表示。
const groupPathTemplate = getTemplate(TemplateURL.GROUP_PATH);
result.groupPathList.forEach(function (groupPath) {
let html = Mustache.render(groupPathTemplate, {
name: groupPath.groupName,
id: groupPath.groupId,
});
let obj = jQuery.parseHTML(html);
$("#groupPathArea").append(obj);
});
//該当グループの下位グループ表示。
const groupTemplate = getTemplate(TemplateURL.GROUP_LIST);
result.childGroupList.forEach(function (childGroup) {
let html = Mustache.render(groupTemplate, {
name: childGroup.groupName,
id: childGroup.groupId,
isFavorite: childGroup.isFavorite,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#childGroupListArea").append(obj);
});
//該当グループの所属ユーザを表示。
const userTemplate = getTemplate(TemplateURL.USER_LIST);
result.groupUserList.forEach(function (groupUser) {
groupUser.profileUrl = CHAT.getProfileImgUrl(groupUser.profileUrl);
});
let html = Mustache.render(userTemplate, {
userList: result.groupUserList,
});
let obj = jQuery.parseHTML(html);
$("#userInGroupList").append(obj);
CHAT_UI.dismissLoadingIndicator();
};
CHAT_UI.startChat = function (userShopMemberId, userName) {
CHAT_UI.showLoadingIndicator();
var userIdList = [];
userIdList.push(userShopMemberId);
// 参加ユーザ名でルーム名を生成
let newRoomName = CHAT.globalLoginParameter.loginId + "," + userName;
createChatRoom(
ChatRoomType.DM,
userIdList,
newRoomName,
MakeRoomFlag.NAME_CARD,
false
);
};
CHAT_UI.startVoice = function (userShopMemberId, userName) {
CHAT_UI.showLoadingIndicator();
var userIdList = [];
userIdList.push(userShopMemberId);
// 参加ユーザ名でルーム名を生成
let newRoomName = CHAT.globalLoginParameter.loginId + "," + userName;
createChatRoom(
ChatRoomType.DM,
userIdList,
newRoomName,
MakeRoomFlag.NAME_CARD,
true
);
};
CHAT_UI.makeNameCard = function (shopMemberId) {
if (CHAT.globalLoginParameter.shopMemberId == shopMemberId) {
return;
}
var nameCardInfo = CHAT_DB.getNameCardData(shopMemberId);
var namecardTemplate = getTemplate(TemplateURL.USER_NAME_CARD);
nameCardInfo.profileUrl = CHAT.getProfileImgUrl(nameCardInfo.profileUrl);
let namecardHtml = Mustache.render(namecardTemplate, {
shopMemberId: nameCardInfo.shopMemberId,
profileUrl: nameCardInfo.profileUrl,
name: nameCardInfo.shopMemberName,
groupPathList: nameCardInfo.groupPathList,
chat: getLocalizedString("chat"),
voice: getLocalizedString("voice"),
favorite: getLocalizedString("addFavorite"),
isFavorite: nameCardInfo.isFavorite,
});
let namecardObj = $(jQuery.parseHTML(namecardHtml)).on(
"click",
function () {}
);
$("#userProfileModal").html(namecardObj);
$("#userNameCard").modal("show");
};
CHAT_UI.toggleCategory = function (category) {
$(category).toggleClass("open");
$(category).next().slideToggle();
};
// アーカイブ詳細
CHAT_UI.refreshArchiveDetailScreen = function (archiveId) {
// loadingIndicatorを表示
CHAT_UI.showLoadingIndicator();
// 初期化
$("#archiveDetail").html("");
// アーカイブ詳細の様式を読み込む
const archiveDetailTemplate = $("#archive-detail-template").html();
if (IS_ONLINE == "true") {
CHAT_DB.updateArchiveDetail(archiveId);
}
// アーカイブ詳細取得
const archive = CHAT_DB.getArchiveDetail(archiveId);
// 保存ユーザ情報を取得
const userInfo = CHAT_DB.getUserInfo(archive.saveUserId);
userInfo.profileUrl = CHAT.getProfileImgUrl(userInfo.profileUrl);
// アーカイブ情報を表示
const html = Mustache.render(archiveDetailTemplate, {
fileName: archive.archiveName,
insertDate: archive.archiveDate,
chatRoomName: archive.roomName,
chatRoomId: archive.roomId,
profileImage: userInfo.profileUrl,
userName: userInfo.shopMemberName,
userId: userInfo.shopMemberId,
});
var obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#archiveDetail").append(obj);
// プレイヤーの切り替え
const archiveFilePath = CHAT.createGetDataUrl(archive.filePath, archive.roomId);
switch (archive.archiveType) {
case "0": // 画像
case 0:
$("#archive_player").prepend(
'<img class="archive_player" src="' + archiveFilePath + '" />'
);
break;
case "1": // 動画
case 1:
if (CHAT_UTIL.isIOS()) {
$("#archive_player").prepend(
'<video class="archive_player" controls autoplay muted playsinline controlsList="nodownload"><source src="' +
archiveFilePath +
'" type="video/mp4"><source src="' +
archiveFilePath +
'" type="video/ogv"><source src="' +
archiveFilePath +
'" type="video/webm"></video>'
);
} else {
$("#archive_player").prepend(
'<video class="archive_player" src=' +
archiveFilePath +
' controls autoplay muted playsinline controlsList="nodownload"></video>'
);
}
break;
case "2": // 音声
case 2:
if (CHAT_UTIL.isIOS()) {
$("#archive_player").prepend(
'<audio class="archive_audio_player" controls controlsList="nodownload"><source src="' +
archiveFilePath +
'" type="audio/wav"><source src="' +
archiveFilePath +
'" type="audio/ogg"></audio>'
);
} else {
$("#archive_player").prepend(
'<audio class="archive_audio_player" src=' +
archiveFilePath +
' controls controlsList="nodownload"></audio>'
);
}
$("#archive_player").prepend(
'<img class="archive_player" src=' + "./img/capture.png" + " />"
);
break;
case "3": // 文書
case 3:
// リリースに文書とその他は含めないため今回は非表示
break;
default:
// リリースに文書とその他は含めないため今回は非表示
}
// ユーザの様式を読み込む
const archiveUserTemplate = $("#archive-user-template").html();
// 参加ユーザ情報を表示
let attendUserList = archive.attendUserIds;
if (typeof android != "undefined") {
// ios実装不要
attendUserList = JSON.parse(archive.attendUserIds);
}
attendUserList.forEach(function (user) {
if (user == "") { return; }
var userInfo = CHAT_DB.getUserInfo(user);
userInfo.profileUrl = CHAT.getProfileImgUrl(userInfo.profileUrl);
const html = Mustache.render(archiveUserTemplate, {
profileImage: userInfo.profileUrl,
userName: userInfo.shopMemberName,
});
const obj = $(jQuery.parseHTML(html)).on("click", function () {
// ネームカード表示
CHAT_UI.makeNameCard(user);
});
$("#attendUser").append(obj);
});
CHAT_UI.htmlElementTextInitialize(navigator.language);
// チャットルームへのリンク付け
document.getElementById("joinChatRoom").onclick = function () {
CHAT_UI.joinRoom(archive.roomId, archive.roomName);
};
// loadingIndicatorを非表示
CHAT_UI.dismissLoadingIndicator();
};
CHAT_UI.refreshMyGroupForMakeRoom = function () {
$(".modal-backdrop").remove();
$("#favoriteListForMakeRoom").html("");
$("#myGroupListForMakeRoom").html("");
//画面タイトル設定
let contactListTitle = getLocalizedString("userSearch");
$("#title").text(contactListTitle);
// グループの様式を読み込む
var groupTemplate = getTemplate(TemplateURL.MAKE_ROOM_GROUP_LIST);
// ユーザの様式を読み込む
var userTemplate = getTemplate(TemplateURL.MAKE_ROOM_USER_LIST);
var groupUserTemplate = getTemplate(TemplateURL.MAKE_ROOM_GROUP_USER_LIST);
updateContactInfo();
//お気に入りグループ取得。
var favoriteGroupList = CHAT_DB.getFavoriteGroups();
favoriteGroupList.forEach(function (favoriteGroup) {
let html = Mustache.render(groupTemplate, {
name: favoriteGroup.groupName,
id: favoriteGroup.groupId,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#favoriteListForMakeRoom").append(obj);
});
//お気に入りユーザ取得。
var favoriteUserList = CHAT_DB.getFavoriteUsers();
favoriteUserList.forEach(function (favoriteUser) {
favoriteUser.profileUrl = CHAT.getProfileImgUrl(favoriteUser.profileUrl);
let findObj = CHAT.globalSelectedUserList.find(function (shopMemberId) {
return shopMemberId == favoriteUser.shopMemberId;
});
if (findObj) {
favoriteUser.checked = "checked";
}
});
let html = Mustache.render(userTemplate, {
userList: favoriteUserList,
});
let obj = jQuery.parseHTML(html);
$("#favoriteListForMakeRoom").append(obj);
var myGroupList = CHAT_DB.getMyGroupUsers();
myGroupList.forEach(function (myGroup) {
myGroup.groupUserList.forEach(function (groupUser) {
groupUser.profileUrl = CHAT.getProfileImgUrl(groupUser.profileUrl);
let findObj = CHAT.globalSelectedUserList.find(function (shopMemberId) {
return shopMemberId == groupUser.shopMemberId;
});
if (findObj) {
groupUser.checked = "checked";
}
});
let html = Mustache.render(groupUserTemplate, {
groupName: myGroup.groupName,
groupUserList: myGroup.groupUserList,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#myGroupListForMakeRoom").append(obj);
});
};
CHAT_UI.refreshAllGroupForMakeRoom = function (paramGroupId) {
var groupId = paramGroupId;
$(".cancel").addClass("none");
$(".search_form input").removeClass("focus");
$(".search_form input").val("");
$(".search_form form").removeClass();
$(".content").removeClass("none");
$(".overlay_src_msg").empty();
$("#tabAllGroupOnMakeRoom").prop("checked", true);
//オンライン状態であればサーバから情報更新。
updateGroupInfo(groupId);
//画面エリアを初期化。
$("#parentGroupBtnForMakeRoom").off();
$("#rootGroupBtnForMakeRoom").off();
$("#childGroupListAreaForMakeRoom").html("");
$("#userInGroupListForMakeRoom").html("");
$("#groupPathAreaForMakeRoom").html("");
//DBからグループ情報を取得。
var result = CHAT_DB.getGroupInfo(groupId);
//上位グループ、トップグループ遷移ボタンのイベント追加。
if (typeof result.parentGroupId !== "undefined") {
$("#parentGroupBtnForMakeRoom").on("click", function () {
CHAT_UI.refreshAllGroupForMakeRoom(result.parentGroupId);
});
}
if (typeof result.rootGroupId !== "undefined") {
if (paramGroupId == 0) {
groupId = result.rootGroupId;
}
$("#rootGroupBtnForMakeRoom").on("click", function () {
CHAT_UI.refreshAllGroupForMakeRoom(result.rootGroupId);
});
}
if (groupId == result.rootGroupId || paramGroupId == "0") {
$("#rootGroupArea").addClass("none");
$("#parentGroupArea").addClass("none");
} else {
$("#rootGroupArea").removeClass("none");
$("#parentGroupArea").removeClass("none");
}
//該当グループのパースを表示。
var groupPathTemplate = getTemplate(TemplateURL.MAKE_ROOM_GROUP_PATH);
var groupPathCount = 0;
result.groupPathList.forEach(function (groupPath) {
if (!(groupPathCount < result.groupPathList.length - 3)) {
let html = Mustache.render(groupPathTemplate, {
name: groupPath.groupName,
id: groupPath.groupId,
});
let obj = jQuery.parseHTML(html);
$("#groupPathAreaForMakeRoom").append(obj);
}
groupPathCount++;
});
//該当グループの下位グループ表示。
var groupTemplate = getTemplate(TemplateURL.MAKE_ROOM_GROUP_LIST);
result.childGroupList.forEach(function (childGroup) {
let html = Mustache.render(groupTemplate, {
name: childGroup.groupName,
id: childGroup.groupId,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#childGroupListAreaForMakeRoom").append(obj);
});
//該当グループの所属ユーザを表示。
var userTemplate = getTemplate(TemplateURL.MAKE_ROOM_USER_LIST);
result.groupUserList.forEach(function (groupUser) {
groupUser.profileUrl = CHAT.getProfileImgUrl(groupUser.profileUrl);
let findObj = CHAT.globalSelectedUserList.find(function (shopMemberId) {
return shopMemberId == groupUser.shopMemberId;
});
if (findObj) {
groupUser.checked = "checked";
}
});
let html = Mustache.render(userTemplate, {
userList: result.groupUserList,
});
let obj = jQuery.parseHTML(html);
$("#userInGroupListForMakeRoom").append(obj);
};
CHAT_UI.checkForMakeChat = function (checkMemberId) {
let findObj = CHAT.globalSelectedUserList.find(function (shopMemberId) {
return shopMemberId == checkMemberId;
});
if (findObj) {
// remove
CHAT.globalSelectedUserList = CHAT.globalSelectedUserList.filter(function (
shopMemberId
) {
return checkMemberId != shopMemberId;
});
$(".checkbox" + checkMemberId)
.prop("checked", false)
.trigger("change");
} else {
// add
CHAT.globalSelectedUserList.push(checkMemberId);
$(".checkbox" + checkMemberId)
.prop("checked", true)
.trigger("change");
}
let cnt = CHAT.globalSelectedUserList.length;
if (CHAT.globalSelectedUserList.length > 0) {
$(".select_member_num").text(cnt);
} else {
$(".select_member_num").text("0");
}
};
// アーカイブ一覧
CHAT_UI.refreshArchiveScreen = function () {
// loadingIndicatorを表示
CHAT_UI.showLoadingIndicator();
// 初期化
$("#archiveList").html("");
// アーカイブの様式を読み込む
const archiveTemplate = $("#archive-template").html();
// アーカイブ一覧取得
if (IS_ONLINE == "true") {
CHAT_DB.updateArchiveList();
}
// ローカルDBのデータを表示
var archiveList = CHAT_DB.getArchiveList();
if (typeof archiveList == "undefined") {
CHAT_UI.dismissLoadingIndicator();
return;
}
archiveList.forEach(function (archive) {
var typeImage = "";
switch (archive.archiveType) {
case 0: // 画像
typeImage = "icon/icon_collabo_picture.png";
break;
case 1: // 動画
typeImage = "icon/icon_collabo_videocam.png";
break;
case 2: // 音声
typeImage = "icon/icon_collabo_headset.png";
break;
case 3: // 文書
typeImage = "icon/icon_collabo_document.png";
break;
default:
// その他
typeImage = "";
}
let html = Mustache.render(archiveTemplate, {
archiveId: archive.archiveId,
fileName: archive.archiveName,
insertDate: archive.archiveDate,
typeImage: typeImage,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#archiveList").append(obj);
});
// loadingIndicatorを非表示
CHAT_UI.dismissLoadingIndicator();
};
CHAT_UI.showMakeRoomConfirmView = function () {
$("#selectedUserList").html("");
var userTemplate = getTemplate(TemplateURL.MAKE_ROOM_CONFIRM_USER_LIST);
var selectedUserList = CHAT_DB.loadSelectedUsers();
selectedUserList.forEach(function (user) {
let html = Mustache.render(userTemplate, {
id: user.shopMemberId,
profileImage: CHAT.getProfileImgUrl(user.profileUrl),
name: user.shopMemberName,
});
let obj = jQuery.parseHTML(html);
$("#selectedUserList").append(obj);
});
$("#makeRoomBtn")
.off()
.on("click", function () {
// #36130に対応
const trimmedRoomName = $("#newRoomName").val().trim();
if (trimmedRoomName.length == 0) {
// loadingIndicatorを表示
CHAT_UI.showLoadingIndicator();
let userIdList = new Array();
let userNameList = new Array();
selectedUserList.forEach(function (user) {
userIdList.push(user.shopMemberId);
userNameList.push(user.shopMemberName);
});
// 参加ユーザ名でルーム名を生成
let newRoomName =
CHAT.globalLoginParameter.loginId + "," + userNameList.join(",");
createChatRoom(
ChatRoomType.DM,
userIdList,
newRoomName,
MakeRoomFlag.MAKE_ROOM,
false
);
} else if (
trimmedRoomName.includes(";") ||
trimmedRoomName.includes("/") ||
trimmedRoomName.includes("?") ||
trimmedRoomName.includes(":") ||
trimmedRoomName.includes("@") ||
trimmedRoomName.includes("&") ||
trimmedRoomName.includes("=") ||
trimmedRoomName.includes("+") ||
trimmedRoomName.includes("$") ||
trimmedRoomName.includes(",") ||
trimmedRoomName.includes("-") ||
trimmedRoomName.includes("_") ||
trimmedRoomName.includes(".") ||
trimmedRoomName.includes("!") ||
trimmedRoomName.includes("~") ||
trimmedRoomName.includes("*") ||
trimmedRoomName.includes("'") ||
trimmedRoomName.includes("(") ||
trimmedRoomName.includes(")") ||
trimmedRoomName.includes("#") ||
trimmedRoomName.includes("\\") ||
trimmedRoomName.includes('"') ||
trimmedRoomName.includes("`")
) {
// #36147
// #36174
$("#customAlertTitle").text(getLocalizedString("invalidCharacter"));
$("#customAlertOk").text(getLocalizedString("yesTitle"));
$("#customAlert")
.appendTo("body")
.modal({
backdrop: "static",
keyboard: false,
})
.on("click", "#customAlertOk", function (e) {});
} else if (trimmedRoomName.length > 20) {
// #36142
var inputText = $("#newRoomName").val().trim(); // #36142 文字列の前又は後の空白文字列を削除
// #36174
$("#customAlertTitle").text(getLocalizedString("nameTooLong"));
$("#customAlertOk").text(getLocalizedString("yesTitle"));
$("#customAlert")
.appendTo("body")
.modal({
backdrop: "static",
keyboard: false,
})
.on("click", "#customAlertOk", function (e) {
$("#newRoomName").val(
inputText.substr(0, $("#newRoomName").prop("maxlength"))
);
});
} else {
//loadingIndicatorを表示
CHAT_UI.showLoadingIndicator();
let userIdList = new Array();
selectedUserList.forEach(function (user) {
userIdList.push(user.shopMemberId);
});
// TODO: check why here using trimmedroomname instead of encodedRoomName
// ルーム名のtrimmingした後、URIencodingを行う
const encodedRoomName = encodeURIComponent(trimmedRoomName);
createChatRoom(
ChatRoomType.DM,
userIdList,
trimmedRoomName,
MakeRoomFlag.MAKE_ROOM,
false
);
}
});
};
CHAT_UI.showAddUserConfirmView = function () {
$("#selectedUserList").html("");
var userTemplate = getTemplate(TemplateURL.ADD_USER_CONFIRM_USER_LIST);
var selectedUserList = CHAT_DB.loadSelectedUsers();
selectedUserList.forEach(function (user) {
let html = Mustache.render(userTemplate, {
id: user.shopMemberId,
profileImage: CHAT.getProfileImgUrl(user.profileUrl),
name: user.shopMemberName,
});
let obj = jQuery.parseHTML(html);
$("#selectedUserList").append(obj);
});
$("#addUserBtn")
.off()
.on("click", function () {
CHAT_UI.showLoadingIndicator();
let userIdList = new Array();
selectedUserList.forEach(function (user) {
userIdList.push(user.shopMemberId);
});
if (typeof android != "undefined") {
android.inviteUsers(userIdList.join(","), false);
} else {
webkit.messageHandlers.inviteUsers.postMessage({
userIdList: userIdList.join(","),
});
}
});
};
CHAT_UI.refreshMyGroupForAddUser = function () {
$(".modal-backdrop").remove();
$("#favoriteListForMakeRoom").html("");
$("#myGroupListForMakeRoom").html("");
//画面タイトル設定
let contactListTitle = getLocalizedString("userSearch");
$("#title").text(contactListTitle);
// グループの様式を読み込む
var groupTemplate = getTemplate(TemplateURL.ADD_USER_GROUP_LIST);
// ユーザの様式を読み込む
var userTemplate = getTemplate(TemplateURL.ADD_USER_USER_LIST);
var groupUserTemplate = getTemplate(TemplateURL.ADD_USER_GROUP_USER_LIST);
updateContactInfo();
//お気に入りグループ取得。
var favoriteGroupList = CHAT_DB.getFavoriteGroups();
favoriteGroupList.forEach(function (favoriteGroup) {
let html = Mustache.render(groupTemplate, {
name: favoriteGroup.groupName,
id: favoriteGroup.groupId,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#favoriteListForMakeRoom").append(obj);
});
//お気に入りユーザ取得。
var favoriteUserList = CHAT_DB.getFavoriteUsersNotInRoom();
favoriteUserList.forEach(function (favoriteUser) {
favoriteUser.profileUrl = CHAT.getProfileImgUrl(favoriteUser.profileUrl);
let findObj = CHAT.globalSelectedUserList.find(function (shopMemberId) {
return shopMemberId == favoriteUser.shopMemberId;
});
if (findObj) {
favoriteUser.checked = "checked";
}
});
let html = Mustache.render(userTemplate, {
userList: favoriteUserList,
});
let obj = jQuery.parseHTML(html);
$("#favoriteListForMakeRoom").append(obj);
var myGroupList = CHAT_DB.getMyGroupUsersNotInRoom();
myGroupList.forEach(function (myGroup) {
myGroup.groupUserList.forEach(function (groupUser) {
groupUser.profileUrl = CHAT.getProfileImgUrl(groupUser.profileUrl);
let findObj = CHAT.globalSelectedUserList.find(function (shopMemberId) {
return shopMemberId == groupUser.shopMemberId;
});
if (findObj) {
groupUser.checked = "checked";
}
});
let html = Mustache.render(groupUserTemplate, {
groupName: myGroup.groupName,
groupUserList: myGroup.groupUserList,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#myGroupListForMakeRoom").append(obj);
});
};
CHAT_UI.refreshAllGroupForAddUser = function (paramGroupId) {
var groupId = paramGroupId;
$(".cancel").addClass("none");
$(".search_form input").removeClass("focus");
$(".search_form input").val("");
$(".search_form form").removeClass();
$(".content").removeClass("none");
$(".overlay_src_msg").empty();
$("#tabAllGroupOnAddUser").prop("checked", true);
//オンライン状態であればサーバから情報更新。
updateGroupInfo(groupId);
//画面エリアを初期化。
$("#parentGroupBtnForAddUser").off();
$("#rootGroupBtnForAddUser").off();
$("#childGroupListAreaForAddUser").html("");
$("#userInGroupListForAddUser").html("");
$("#groupPathAreaForAddUser").html("");
//DBからグループ情報を取得。
var result = CHAT_DB.getGroupInfoForAddUser(groupId);
//上位グループ、トップグループ遷移ボタンのイベント追加。
if (typeof result.parentGroupId !== "undefined") {
$("#parentGroupBtnForAddUser").on("click", function () {
CHAT_UI.refreshAllGroupForAddUser(result.parentGroupId);
});
}
if (typeof result.rootGroupId !== "undefined") {
if (paramGroupId == 0) {
groupId = result.rootGroupId;
}
$("#rootGroupBtnForAddUser").on("click", function () {
CHAT_UI.refreshAllGroupForAddUser(result.rootGroupId);
});
}
if (groupId == result.rootGroupId || paramGroupId == "0") {
$("#rootGroupArea").addClass("none");
$("#parentGroupArea").addClass("none");
} else {
$("#rootGroupArea").removeClass("none");
$("#parentGroupArea").removeClass("none");
}
//該当グループのパースを表示。
var groupPathTemplate = getTemplate(TemplateURL.ADD_USER_GROUP_PATH);
var groupPathCount = 0;
result.groupPathList.forEach(function (groupPath) {
if (!(groupPathCount < result.groupPathList.length - 3)) {
let html = Mustache.render(groupPathTemplate, {
name: groupPath.groupName,
id: groupPath.groupId,
});
let obj = jQuery.parseHTML(html);
$("#groupPathAreaForAddUser").append(obj);
}
groupPathCount++;
});
//該当グループの下位グループ表示。
var groupTemplate = getTemplate(TemplateURL.ADD_USER_GROUP_LIST);
result.childGroupList.forEach(function (childGroup) {
let html = Mustache.render(groupTemplate, {
name: childGroup.groupName,
id: childGroup.groupId,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#childGroupListAreaForAddUser").append(obj);
});
//該当グループの所属ユーザを表示。
const userTemplate = getTemplate(TemplateURL.ADD_USER_USER_LIST);
result.groupUserList.forEach(function (groupUser) {
groupUser.profileUrl = CHAT.getProfileImgUrl(groupUser.profileUrl);
let findObj = CHAT.globalSelectedUserList.find(function (shopMemberId) {
return shopMemberId == groupUser.shopMemberId;
});
if (findObj) {
groupUser.checked = "checked";
}
});
let html = Mustache.render(userTemplate, {
userList: result.groupUserList,
});
let obj = jQuery.parseHTML(html);
$("#userInGroupListForAddUser").append(obj);
};
CHAT_UI.refreshForOnline = function () {
IS_ONLINE = "true";
$(".craeteRoomButton").off("click", CHAT_UI.offlineHandler);
$(".craeteRoomButton").css("opacity", "1.0");
$(".footer_item a").removeClass("ui-state-disabled");
$("#videoUploadButton").removeClass("ui-state-disabled");
$("#imageInputButton").removeClass("ui-state-disabled");
$("#messageSend").prop("disabled", false);
$("#messageInput").prop("disabled", false);
$("#messageInput").prop("placeholder", "メッセージを入力してください");
$("#favoriteButton").prop("disabled", false);
$("#room_name_change_button").removeClass("ui-state-disabled");
$("#add_user_button").removeClass("ui-state-disabled");
$(".fa-download").show();
if (typeof $("#roomTitle").val() != "undefined") {
CHAT_SOCKET.connectSocket();
socket.emit("join", CHAT.globalLoginParameter, function () {});
}
};
CHAT_UI.refreshForOffline = function () {
IS_ONLINE = "false";
$(".craeteRoomButton").on("click", CHAT_UI.offlineHandler);
$(".craeteRoomButton").css("opacity", "0.3");
$(".footer_item a").addClass("ui-state-disabled");
$("#videoUploadButton").addClass("ui-state-disabled");
$("#imageInputButton").addClass("ui-state-disabled");
$("#messageSend").prop("disabled", true);
$("#messageInput").prop("disabled", true);
$("#messageInput").prop("placeholder", "");
$("#favoriteButton").prop("disabled", true);
$("#room_name_change_button").addClass("ui-state-disabled");
$("#add_user_button").addClass("ui-state-disabled");
$(".fa-download").hide();
if (typeof coview_api == "undefined") {
return;
}
var alertString = "";
if (g_isMainMan) {
alertString = getLocalizedString("err_weak_network_exit_collaboration");
} else {
alertString = getLocalizedString("err_weak_network_exit_collaboration");
}
alert(alertString);
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.finishCollaboration.postMessage({});
}
if (collaborationJoinFlg != "2") {
CHAT_UI.joinRoom(
CHAT.globalLoginParameter.roomId,
CHAT.globalLoginParameter.name
);
} else {
if (typeof android != "undefined") {
android.openCommunicationHome();
} else {
webkit.messageHandlers.openCommunicationHome.postMessage({});
}
}
};
CHAT_UI.offlineHandler = function (e) {
e.preventDefault();
};
CHAT_UI.displayExistRoom = function (roomId) {
if (confirm("error_already_exist_same_user")) {
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.joinRoom.postMessage({ roomId: roomId });
} else if (CHAT_UTIL.isAndroid()) {
android.joinRoom(roomId, "");
}
}
return;
};
var createChatRoom = function (
chatRoomType,
userIDList,
newRoomName,
screenFlag,
isVoice
) {
//todo android create room api
if (typeof android != "undefined") {
android.createChatRoom(
chatRoomType,
userIDList.join(","),
newRoomName,
screenFlag,
isVoice
);
} else {
webkit.messageHandlers.createChatRoom.postMessage({
roomType: chatRoomType,
userIdList: userIDList.join(","),
roomName: newRoomName,
screenFlag: screenFlag,
isVoice: isVoice,
});
}
};
var updateContactInfo = function () {
if (IS_ONLINE == "true") {
if (typeof android != "undefined") {
android.updateMyInfo();
android.updateGroupUser();
android.updateFavorite();
} else {
webkit.messageHandlers.updateGroupInfo.postMessage("0");
webkit.messageHandlers.updateMyInfo.postMessage({});
webkit.messageHandlers.updateGroupUser.postMessage({});
webkit.messageHandlers.updateFavorite.postMessage({});
}
}
};
var updateGroupInfo = function (groupID) {
if (IS_ONLINE == "true") {
if (typeof android != "undefined") {
android.updateGroupUser();
} else {
webkit.messageHandlers.updateGroupInfo.postMessage(groupID);
}
}
};
var bindOnRefreshGroupList = function () {
// Update Group List(Invite)
socket.on(SOCKET_KEY.REFRESH_GROUPLIST, function (groups, isInvite) {
const groupListElement = $("#group_list");
groupListElement.html("");
const template = $("#group-template").html();
if (groups.length === 0) {
groupListElement.append(
'<center class="text-secondary">' +
getLocalizedString(everyoneIsHere) +
"</center>"
);
}
addGroupNameAndNumberOfUsers(groups);
// Rotate
handleRotate();
updateTopBar();
// Set Title
updateTopBar(isInvite);
updateUserSelectionLength();
setupBackButton();
});
};
var addGroupNameAndNumberOfUsers = function (groups) {
// グループ名と人数を表記する。
groups.forEach(function (group) {
let html = Mustache.render(template, {
name: group.groupName,
info: group.memberCnt + getLocalizedString("people"),
});
// グループをクリックすると、該当グループのユーザーリストを読み込むようにイベントを与える
let obj = $(jQuery.parseHTML(html)).on("click", function () {
// loadingIndicatorを表示
CHAT_UI.showLoadingIndicator();
socket.emit("getUserListInGroup", group.groupId, isInvite);
$("#groupName").text(group.groupName);
});
groupListElement.append(obj);
});
};
var handleRotate = function () {
if (CHAT_UI.isLandscapeMode()) {
$(".group_list").addClass("col-6").removeClass("col-12");
}
};
var setupBackButton = function () {
const backButton = $("#backButton");
backButton.show();
backButton.off().on("click", function () {
// loadingIndicatorを表示
CHAT_UI.showLoadingIndicator();
if (isInvite) {
$("#pills-chat-tab").tab("show");
} else {
if (IS_ONLINE == "true") {
android.updateRoomList();
CHAT_UI.refreshRoomList(ChatRoomType.DM);
CHAT_UI.dismissLoadingIndicator();
}
}
});
};
var updateUserSelectionLength = function () {
const userSelectionLength = $("#userSelectionLength");
if (CHAT.globalSelectedUserList.length > 0) {
userSelectionLength.text(CHAT.globalSelectedUserList.length);
} else {
userSelectionLength.text("");
}
};
var updateTopBar = function (isInvite) {
// Set Title
let memberSelectTitle = getLocalizedString("groupSearch");
$("#pills-group-tab").tab("show");
const titleRoomName = $(".titleRoomName");
const userSelectionConfirmButton = $("#userSelectionConfirmBtn");
titleRoomName.text(memberSelectTitle);
if (isInvite) {
$("#newRoomName, .roomListIcon, .chatRoomIcon").hide();
} else {
$(".roomListIcon, .chatRoomIcon, #newRoomName").hide();
}
userSelectionConfirmButton.show();
userSelectionConfirmButton.off().on("click", function () {
CHAT_UI.setConfirmButtonEvent(isInvite);
});
};
var bindOnRefreshUserListInGroup = function () {
// Update User List(Invite)
// #36170
socket.on(
SOCKET_KEY.REFRESH_USERLIST_INGROUP,
function (users, groupId, isInvite) {
$("#user_list").html("");
// Set Title
updateTitle();
addUserList(users);
// Rotate
handleRotateOnUserListInGroup();
setupBackButtonOnUserListInGroup(isInvite);
setupUserSelectionConfirmButton(isInvite);
updateUIOnUserListInGroup();
}
);
};
var updateTitle = function () {
let memberSelectTitle = getLocalizedString("userSearch");
$(".titleRoomName").text(memberSelectTitle);
};
var addUserList = function (users) {
users.forEach(function (user) {
// loadingIndicatorを表示
CHAT_UI.showLoadingIndicator();
user.profileImagePath = CHAT.getProfileImgUrl(user.profileImagePath);
// クリックするとactive クラスを与え、チェック表示を出させる。
let obj = activateCheckUser(
user.loginId,
user.shopMemberId,
user.profileImagePath
);
let findObj = CHAT.globalSelectedUserList.find(function (selectedUser) {
return selectedUser.loginId == user.loginId;
});
if (findObj) {
$(obj).find(".userCheckBox").toggleClass("active");
}
$("#user_list").append(obj);
});
};
var renderUser = function (template, userID, profileImagePath, userName) {
return Mustache.render(template, {
id: userID,
profileImage: profileImagePath,
name: userName,
});
};
var activateCheckUser = function (loginID, shopMemberID, profileImagePath) {
const template = $("#user-template").html();
let html = renderUser(template, shopMemberID, profileImagePath, loginID);
return $(jQuery.parseHTML(html)).on("click", function () {
if ($(this).find(".userCheckBox.active").length > 0) {
// remove
CHAT.globalSelectedUserList = filterRemovedUser(loginID);
} else {
// add
addSelectedUser(loginID, shopMemberID, profileImagePath);
}
$(this).find(".userCheckBox").toggleClass("active");
updateUserSelectionLength();
});
};
var filterRemovedUser = function (userID) {
return CHAT.globalSelectedUserList.filter(function (element) {
return userID != element.loginId;
});
};
var addSelectedUser = function (loginID, shopMemberID, profileImagePath) {
CHAT.globalSelectedUserList.push({
loginId: loginID,
shopMemberId: shopMemberID,
profileImagePath: profileImagePath,
});
};
var handleRotateOnUserListInGroup = function () {
if (CHAT_UI.isLandscapeMode()) {
$(".user_list").addClass("col-6").removeClass("col-12");
$(".squareBoxContent span").addClass("landscape_span");
}
};
var setupBackButtonOnUserListInGroup = function (isInvite) {
const backButton = $("#backButton");
backButton.off().on("click", function () {
// loadingIndicatorを表示
CHAT_UI.showLoadingIndicator();
socket.emit("getGroupList", isInvite);
});
backButton.show();
};
var setupUserSelectionConfirmButton = function (isInvite) {
const userSelectionConfirmButton = $("#userSelectionConfirmBtn");
userSelectionConfirmButton.off().on("click", function () {
// loadingIndicatorを表示
CHAT_UI.showLoadingIndicator();
CHAT_UI.setConfirmButtonEvent(isInvite);
});
userSelectionConfirmButton.show();
};
var updateUIOnUserListInGroup = function () {
$(".roomListIcon, .chatRoomIcon").hide();
$(".userCheckBox").show();
$("#pills-user-tab").tab("show");
};
// 名前空間
var CHAT = {};
//招待するメンバーを保存する変数
CHAT.globalSelectedUserList = new Array();
CHAT.globalIsInvite = false;
//ログイン中の部屋情報を保存する変数
CHAT.globalLoginParameter;
// fermi coview share
let globalUserInfo = new Object();
var beforeHeight = window.innerHeight;
var beforeWidth = window.innerWidth;
var beforeScroll;
CHAT.saveRoomInfo = function (roomId, roomName) {
CHAT.globalLoginParameter.roomId = roomId;
CHAT.globalLoginParameter.roomName = roomName;
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.roomInfosaveMessageHandlerId.postMessage({
roomId: roomId,
roomName: roomName,
});
} else if (CHAT_UTIL.isAndroid()) {
if (roomId == undefined && roomName == undefined) {
android.saveVisitRoomInfo("", "");
} else {
android.saveVisitRoomInfo(roomId, roomName);
}
}
};
// #36170 画像パスが存在しない場合はデフォルトの画像を返す
// 存在する場合はプロフィール画像取得用APIのURLを生成して返す
CHAT.getProfileImgUrl = function (path) {
if (path == undefined || path == "") {
return ASSET_PATH + "img/noImage.png";
} else {
if (path.includes("/mnt")) {
var userInfo = path.split("/").reverse();
return (
CMS_SERVER_URL +
"/chatapi/user?profileFileName=" +
userInfo[0] +
"&profileGetLoginId=" +
userInfo[1] +
"&sid=" +
CHAT.globalLoginParameter.sid +
"&cmd=12"
);
} else {
return path;
}
}
};
// Video のサムネイルファイル生成する
CHAT.createVideoThumbnailAndUpload = function (sourceImage, callback) {
var fileReader = new FileReader();
fileReader.onload = function () {
var blob = new Blob([fileReader.result], { type: sourceImage.type });
var url = URL.createObjectURL(blob);
var video = document.createElement("video");
var timeupdate = function () {
if (snapImage()) {
video.removeEventListener("timeupdate", timeupdate);
video.pause();
}
};
video.addEventListener("loadeddata", function () {
if (snapImage()) {
video.removeEventListener("timeupdate", timeupdate);
}
});
var snapImage = function () {
var canvas = document.createElement("canvas");
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
canvas
.getContext("2d")
.drawImage(video, 0, 0, canvas.width, canvas.height);
fetch(canvas.toDataURL("image/jpeg"))
.then(function (res) {
return res.arrayBuffer();
})
.then(function (buf) {
// 回転された画像をFormDataに保存
const newFile = new File([buf], sourceImage.name, {
type: "image/jpeg",
});
callback(newFile, true);
// ajax End
})
.catch((error) => {
// fetch Error catch Block
if (error) {
console.log(error);
}
});
return true;
};
video.addEventListener("timeupdate", timeupdate);
video.preload = "metadata";
video.src = url;
// Load video in Safari / IE11
video.muted = true;
video.playsInline = true;
video.pause();
};
fileReader.readAsArrayBuffer(sourceImage);
};
// Ajaxでイメージをアップロードする
CHAT.uploadImage = function (formData) {
formData.append("roomId", CHAT.globalLoginParameter.roomId);
formData.append("sid", CHAT.globalLoginParameter.sid);
jQuery
.ajax({
async: true,
url: CMS_SERVER_URL + "/chatapi/file/upload",
type: "post",
data: formData,
contentType: false,
processData: false,
error: function () {
alert("読み込み失敗");
CHAT_UI.dismissLoadingIndicator();
},
})
.done(function (res) {
var imgPath =
CMS_SERVER_URL +
"/chatapi/file/getImage?fileName=" +
res.fileName +
"&roomId=" +
CHAT.globalLoginParameter.roomId;
var imageName = res.fileName;
// uploadFileの判断
var extension = imageName
.substr(imageName.lastIndexOf(".") + 1)
.toLowerCase();
// 画像の処理
if (
res.fileType == "jpeg" ||
res.fileType == "jpg" ||
res.fileType == "png"
) {
if (res.thumbnailPath && res.thumbnailPath.length > 0) {
imgPath =
CMS_SERVER_URL +
"/chatapi/file/getImage?fileName=" +
res.thumbImageFileName +
"&roomId=" +
CHAT.globalLoginParameter.roomId;
imageName = res.thumbImageFileName;
}
let downloadPath =
CMS_SERVER_URL +
"/chatapi/file/download?fileName=" +
imageName +
"&roomId=" +
CHAT.globalLoginParameter.roomId;
// アップロードが終了した後ローディング画面から離れてメッセージをメッセージを転送する
const lightbox = $("<a/>", {
"data-lightbox": "attachedImages",
"data-title": imageName,
});
const image = $("<img/>", {
src: imgPath,
width: "auto",
style: "max-width:100%",
"data-toggle": "modal",
onclick: "imageModal(this);",
});
const downloadIcon = $("<a/>", {
href: downloadPath,
class: "fa fa-download",
download: res.fileName,
});
lightbox.append(image);
lightbox.append(downloadIcon);
let text = lightbox.prop("outerHTML");
let encodedText;
try {
encodedText = encodeURIComponent(text);
} catch (e) {
encodedText = text;
}
socket.emit(
"createMessage",
{
text: encodedText + messageSeperator + MessageType.IMAGE,
},
1
);
} else {
// 動画の処理
if (res.thumbnailPath && res.thumbnailPath.length > 0) {
imgPath =
CMS_SERVER_URL +
"/chatapi/file/getImage?fileName=" +
res.thumbImageFileName +
"&roomId=" +
CHAT.globalLoginParameter.roomId;
}
let downloadPath =
CMS_SERVER_URL +
"/chatapi/file/download?fileName=" +
imageName +
"&roomId=" +
CHAT.globalLoginParameter.roomId;
var videoSrc =
CMS_SERVER_URL +
"/chatapi/file/getImage?fileName=" +
res.fileName +
"&roomId=" +
CHAT.globalLoginParameter.roomId;
const totalDiv = $("<div/>", { id: "attachedImages" });
const videoTag = $("<video/>", {
controls: "true",
width: "auto",
style: "max-width:100%",
});
const source = $("<source/>", { src: videoSrc });
const downloadIcon = $("<a/>", {
href: downloadPath,
class: "fa fa-download",
download: res.fileName,
});
videoTag.append(source);
totalDiv.append(videoTag);
totalDiv.append(downloadIcon);
let text = totalDiv.prop("outerHTML");
let encodedText;
try {
encodedText = encodeURIComponent(text);
} catch (e) {
encodedText = text;
}
socket.emit(
"createMessage",
{
text: encodedText + messageSeperator + MessageType.VIDEO,
},
1
);
}
$(".overlay").removeClass("active undismissable");
$(".loader").removeClass("active");
CHAT_UI.dismissLoadingIndicator();
});
};
CHAT.createGetDataUrl = function (fileName, roomId) {
var filePath =
CMS_SERVER_URL +
"/chatapi/file/getImage?sid=" +
CHAT.globalLoginParameter.sid +
"&fileName=" +
fileName +
"&roomId=" +
roomId;
return filePath;
};
// Thumbnailのファイルを生成する。
CHAT.createThumbnailAndUpload = function (sourceImage, callback) {
const fileReader = new FileReader();
const img = new Image();
fileReader.onloadend = function () {
img.src = fileReader.result;
};
img.onload = function () {
const elem = document.createElement("canvas");
var rate;
var width = img.width;
var height = img.height;
if (img.width <= 500 && img.height <= 500) {
callback(undefined, false);
return;
}
if (img.width > img.height) {
rate = 500 / img.width;
} else {
rate = 500 / img.height;
}
elem.width = width * rate;
elem.height = height * rate;
const ctx = elem.getContext("2d");
ctx.drawImage(
img,
0,
0,
img.width,
img.height,
0,
0,
elem.width,
elem.height
);
// ctx.drawImage(img, 0, 0, width, height);
fetch(elem.toDataURL("image/jpeg"))
.then(function (res) {
return res.arrayBuffer();
})
.then(function (buf) {
const newFile = new File([buf], sourceImage.name, {
type: "image/jpeg",
});
callback(newFile, true);
})
.catch((error) => {
// fetch Error catch Block
if (error) {
console.log(error);
}
});
};
fileReader.readAsDataURL(sourceImage);
};
// 該当チャットルームに参加するためログイン情報をサーバに渡す
getLoginParameter = function (
sid,
loginId,
shopName,
roomId = undefined,
roomName = undefined,
languageCode,
shopMemberId
) {
var loginParam = new Object();
loginParam.sid = sid;
loginParam.loginId = loginId;
loginParam.shopName = shopName;
loginParam.roomId = roomId;
loginParam.roomName = roomName;
loginParam.shopMemberId = shopMemberId;
CHAT.globalLoginParameter = loginParam;
if (!languageCode) {
languageCode = "en";
}
// fermi coview share
globalUserInfo.sid = sid;
globalUserInfo.loginId = shopName + "_" + loginId;
globalUserInfo.shopName = shopName;
globalUserInfo.roomId = roomId;
globalUserInfo.roomName = roomName;
globalUserInfo.languageCode = languageCode;
CHAT_UI.htmlElementTextInitialize(languageCode);
CHAT_UI.dismissLoadingIndicator();
};
// for android native call
CHAT.leaveRoom = function () {
socket.emit("leaveRoom", function () {});
};
document.addEventListener("DOMContentLoaded", function () {
// ルーム名変更イベント
$(".change_room_name_btn button").click(function () {
$("form").submit();
});
// 検索アイコン押下イベント
$(".nav_item_wrap .search_menu").click(function () {
$(".nav_item_wrap").addClass("none");
$(".footer-wrap").addClass("none");
$(".chat_room_src_form").removeClass("none");
$(".room_container").addClass("none");
$(".overlay_src_msg").removeClass("none");
// フィルタ表示
$("#filter").removeClass("none");
$("#user_list").addClass("none");
$('.chat_room_src_form input[type="search"]').focus();
$("#searchMessage").addClass("onfocus");
$(".chat_list").removeClass("none");
});
$(".chat_room_src_form .cancel").click(function () {
$(".nav_item_wrap").removeClass("none");
$(".footer-wrap").removeClass("none");
$(".chat_room_src_form").addClass("none");
$(".chat_room_src_form input").val("");
$(".room_container").removeClass("none");
$(".overlay_src_msg").empty();
// ユーザーリスト表示
$("#filter").addClass("none");
$("#user_list").removeClass("none");
$('.chat_room_src_form input[type="search"]').blur();
$("#searchMessage").removeClass("onfocus");
$(".chat_list").addClass("none");
CHAT_UI.scrollToBottom();
});
$('.chat_room_src_form input[type="search"]').click(function () {
if ($("#searchMessage").hasClass("onfocus")) {
$("#searchMessage").removeClass("onfocus");
$("#searchMessage").blur();
} else {
$("#searchMessage").addClass("onfocus");
$("#searchMessage").focus();
}
});
$("#searchMessage").blur(function () {
$("#searchMessage").removeClass("onfocus");
});
// フィルタ選択イベント
$(document).on("click", "#filter .img_wrap", function (event) {
// チェックアイコン追加
$(this).toggleClass("filter");
});
$('#chat .search_form input[type="search"]').click(function () {
let roomListTitle = getLocalizedString("room_search_placeholder");
$("#chatTitle").text(roomListTitle);
});
$("#chat .search_form .cancel").click(function () {
let roomListTitle = getLocalizedString("roomListTitle");
$("#chatTitle").text(roomListTitle);
});
$("#chat_add_user .search_form .cancel").click(function () {
let roomListTitle = getLocalizedString("inviteUsersSubtitle");
$("#addUserTitle").text(roomListTitle);
});
$("#chatMakeRoom .search_form .cancel").click(function () {
let roomListTitle = getLocalizedString("createRoomTitle");
$("#makeRoomTitle").text(roomListTitle);
});
// チャットメンバー検索
$('#chat .search_form input[type="search"]').keyup(function (e) {
var rooms;
var keyword = $('#chat .search_form input[type="search"]').val();
if (e.KeyCode == 13 || e.key == "Enter") {
if (keyword.length != 0 && keyword != "") {
$('#chat .search_form input[type="search"]').blur();
return;
}
} else if (keyword == "" || keyword.length < 2) {
$(".overlay_src_msg").empty();
return;
}
CHAT.searchRoom(keyword, rooms);
if (e.KeyCode == 13 || e.key == "Enter") {
$('#chat .search_form input[type="search"]').blur();
return;
}
});
// iOSキーボード変換検知用
$('#chat .search_form input[type="search"]').on(
"compositionend",
function () {
if (CHAT_UTIL.isIOS()) {
var rooms;
var keyword = $('#chat .search_form input[type="search"]').val();
CHAT.searchRoom(keyword, rooms);
}
}
);
var footerHeight = $(".footer-wrap").height();
window.addEventListener("resize", function () {
var afterHeight = window.innerHeight;
var afterWidth = window.innerWidth;
var moreScroll = beforeHeight - afterHeight;
if (beforeHeight > afterHeight && beforeHeight - afterHeight > 50) {
if (CHAT_UTIL.isIOS()) {
window.scrollTo(0, beforeScroll + moreScroll);
} else if (beforeWidth == afterWidth) {
//キーボード表示時
$(".room_container").css("margin-bottom", 0);
window.scrollTo(
0,
beforeScroll + moreScroll - $(".footer_content_b").height()
);
} else {
//画面回転時
window.scrollTo(
0,
beforeScroll + moreScroll * 2 - $(".footer_content_b").height()
);
}
} else if (beforeHeight < afterHeight) {
$(".room_container").css("margin-bottom", footerHeight);
if (CHAT_UTIL.isIOS()) {
window.scrollTo(0, beforeScroll + moreScroll);
} else if (beforeWidth == afterWidth) {
//キーボード非表示
window.scrollTo(
0,
beforeScroll + moreScroll + $(".footer_content_b").height()
);
} else {
//画面回転時
window.scrollTo(
0,
beforeScroll + moreScroll * 2 + $(".footer_content_b").height()
);
}
}
beforeHeight = window.innerHeight;
beforeWidth = window.innerWidth;
});
$("#messageInput").focusin(function (e) {
beforeHeight = window.innerHeight;
beforeWidth = window.innerWidth;
beforeScroll = window.scrollY;
});
// チャットルーム
// メッセージ検索イベント
$('.chat_room_src_form input[type="search"]').keyup(function (e) {
let workVal = "";
var keyword = $('.chat_room_src_form input[type="search"]').val();
if (e.key == "Enter" || e.KeyCode == 13) {
if (keyword != "" && keyword.length != 0) {
$('.chat_room_src_form input[type="search"]').blur();
return;
}
} else if (keyword == "" || keyword.length < 2) {
$(".overlay_src_msg").empty();
return;
}
CHAT.searchMessage(keyword, workVal);
if (e.key == "Enter" || e.KeyCode == 13) {
$("#searchMessage").removeClass("onfocus");
$('.chat_room_src_form input[type="search"]').blur();
return;
}
});
// iOSキーボード変換検知用
$('.chat_room_src_form input[type="search"]').on(
"compositionend",
function () {
if (CHAT_UTIL.isIOS()) {
let workVal = "";
var keyword = $('.chat_room_src_form input[type="search"]').val();
CHAT.searchMessage(keyword, workVal);
}
}
);
$(document).on("click", ".filter_img", function (event) {
let workVal = "";
var keyword = $('.chat_room_src_form input[type="search"]').val();
$(".overlay_src_msg").empty();
let checkedUserList = getCheckedUserList();
if (keyword.length == 1) {
return;
}
const messages = CHAT_DB.searchMessages(keyword, checkedUserList.join(","));
var userMessageTemplate = getTemplate(TemplateURL.USER_MESSAGE);
var myMessageTemplate = getTemplate(TemplateURL.MY_MESSAGE);
let jQueryMessages = $(".overlay_src_msg");
messages.forEach(function (message) {
let template = userMessageTemplate;
if (message.shopMemberId == CHAT.globalLoginParameter.shopMemberId) {
template = myMessageTemplate;
}
if (message.messageType == MessageType.SYSTEM) {
template = systemMessageTemplate;
}
let messageTime = CHAT_UTIL.formatDate(message.insertDate);
// ユーザの様式を読み込む
if (message.profileUrl) {
message.profileUrl = CHAT.getProfileImgUrl(message.profileUrl);
} else {
message.profileUrl = CHAT.getProfileImgUrl("");
}
message.message = message.message.toString();
var replacePath = message.message;
replacePath = replacePath.replaceAll(
"?fileName=",
"?sid=" + CHAT.globalLoginParameter.sid + "&fileName="
);
message.message = replacePath;
let html = Mustache.render(template, {
text: message.message,
from: message.loginId,
shopMemberId: message.shopMemberId,
profileImage: message.profileUrl,
createdAtDay: messageTime.createdAtDay,
createdAtTime: messageTime.createdAtTime,
});
html =
message.message.includes("attachedImages") ||
message.message.includes("attachedVideos")
? CHAT_UTIL.htmlDecode(html)
: html;
workVal = html + workVal;
});
jQueryMessages.prepend(workVal);
});
});
var getCheckedUserList = function () {
let checkedUserList = [];
$(".img_wrap.filter").each(function (user) {
const selectedUser = $(".img_wrap.filter")[user];
checkedUserList.push($(selectedUser).data("user-id"));
});
return checkedUserList;
};
// チャットルーム検索
CHAT.searchRoom = function (keyword, rooms) {
const overlayMessage = $(".overlay_src_msg");
overlayMessage.empty();
rooms = CHAT_DB.getRoomList(ChatRoomType.ALL, keyword);
let roomListTitle = getLocalizedString("room_search_placeholder");
$("#chatTitle").text(roomListTitle);
var template = getTemplate(TemplateURL.ROOM_LIST);
rooms.forEach(function (room) {
room.profileImagePath = ASSET_PATH + "images/user-profile.png";
const roomMessage = getRoomMessage(room.message);
const displayMessage = getDisplayMessage(room.messageType, roomMessage);
let html = renderRoom(template, room, displayMessage);
// Click event
let obj = jQuery.parseHTML(html);
overlayMessage.append(obj);
});
if (rooms.length == 0) {
const noResultMsg = getNoResultMessage();
overlayMessage.append(noResultMsg);
}
};
var getRoomMessage = function (message) {
if (message) {
return message.toString();
} else {
return getLocalizedString("noMessages");
}
};
var getDisplayMessage = function (messageType, roomMessage) {
switch (messageType) {
case MessageType.TEXT:
return roomMessage;
case MessageType.SYSTEM:
return roomMessage;
case MessageType.IMAGE:
return getLocalizedString("image");
case MessageType.VIDEO:
return getLocalizedString("video");
case MessageType.COMMUNICATIONSTART:
return getLocalizedString("collaboration_start");
case MessageType.COMMUNICATIONEND:
return getLocalizedString("collaboration_end");
default:
return "";
}
};
var renderRoom = function (template, room, displayMessage) {
var attendUserName = [];
room.attendUsers.forEach(function (user) {
user.profileUrl = CHAT.getProfileImgUrl(user.profileUrl);
attendUserName.push(user.shopMemberName);
});
const thumbnailCount =
room.attendUsers.length > 4 ? 4 : room.attendUsers.length;
const time = room.insertDate
? CHAT_UTIL.formatDate(room.insertDate).createdAt
: "";
if (room.chatRoomName == "") {
room.chatRoomName = attendUserName.join(", ");
}
return Mustache.render(template, {
thumbnailCount: thumbnailCount,
roomName: room.chatRoomName,
roomId: room.chatRoomId,
profileImage: room.profileImagePath,
lastMessage: displayMessage,
time: time,
unreadMsgCnt: room.unreadCount == 0 ? "" : room.unreadCount,
userCnt: room.attendUsers.length + 1,
attendUsers: room.attendUsers,
});
};
// メッセージ検索
CHAT.searchMessage = function (keyword, workVal) {
$(".overlay_src_msg").empty();
var checkedUserList = [];
$(".img_wrap.filter").each(function (user) {
const selectedUser = $(".img_wrap.filter")[user];
checkedUserList.push($(selectedUser).data("user-id"));
});
var messages = CHAT_DB.searchMessages(keyword, checkedUserList.join(","));
var userMessageTemplate = getTemplate(TemplateURL.USER_MESSAGE);
var myMessageTemplate = getTemplate(TemplateURL.MY_MESSAGE);
let jQueryMessages = $(".overlay_src_msg");
messages.forEach(function (message) {
let template = userMessageTemplate;
if (message.shopMemberId == CHAT.globalLoginParameter.shopMemberId) {
template = myMessageTemplate;
}
if (message.messageType == MessageType.SYSTEM) {
template = systemMessageTemplate;
}
let messageTime = CHAT_UTIL.formatDate(message.insertDate);
if (message.profileUrl) {
message.profileUrl = CHAT.getProfileImgUrl(message.profileUrl);
} else {
message.profileUrl = CHAT.getProfileImgUrl("");
}
message.message = message.message.toString();
var replacePath = message.message;
replacePath = replacePath.replaceAll(
"?fileName=",
"?sid=" + CHAT.globalLoginParameter.sid + "&fileName="
);
message.message = replacePath;
let html = Mustache.render(template, {
text: message.message,
from: message.loginId,
shopMemberId: message.shopMemberId,
profileImage: message.profileUrl,
createdAtDay: messageTime.createdAtDay,
createdAtTime: messageTime.createdAtTime,
});
html =
message.message.includes("attachedImages") ||
message.message.includes("attachedVideos")
? CHAT_UTIL.htmlDecode(html)
: html;
workVal = html + workVal;
});
jQueryMessages.prepend(workVal);
if (messages.length == 0) {
const noResultMsg = getNoResultMessage();
jQueryMessages.append(noResultMsg);
}
};
// 下スクロールでユーザーリストを非表示
var startPos = 0,winScrollTop = 0;
$(window).on('scroll',function(){
winScrollTop = $(this).scrollTop();
if (winScrollTop >= startPos) {
if(winScrollTop >= 200){
$('#chat_room .user_list').addClass('hide');
}
} else {
$('#chat_room .user_list').removeClass('hide');
}
startPos = winScrollTop;
});
// 名前空間
var CHAT_MAKE_ROOM = {};
document.addEventListener("DOMContentLoaded", function () {
// メンバー検索
searchMember();
// iOSキーボード変換検知用
bindiOSKeyBoardEvent();
});
// メンバー検索
CHAT_MAKE_ROOM.searchUser = function (keyword) {
const overlayMessage = $(".overlay_src_msg");
const isAllGroup = $("#tabAllGroupOnMakeRoom").is(":checked");
let hasNoData = false;
overlayMessage.empty();
//全グループ検索画面
if (isAllGroup) {
//グループデータ検索
var groupList = CHAT_DB.getGroupByName(keyword);
var groupTemplate = getTemplate(TemplateURL.MAKE_ROOM_GROUP_LIST);
groupList.forEach(function (group) {
let html = renderRoomList(groupTemplate, group.groupName, group.groupId);
let obj = jQuery.parseHTML(html);
overlayMessage.append(obj);
});
//ユーザデータ検索
var userList = CHAT_DB.getAllGroupShopMemberByName(keyword);
searchUserData(userList);
var userTemplate = getTemplate(TemplateURL.MAKE_ROOM_USER_LIST);
let html = renderUser(userTemplate, userList);
let obj = jQuery.parseHTML(html);
overlayMessage.append(obj);
hasNoData = groupList.length == 0 && userList.length == 0;
//連絡先画面
} else {
const userList = CHAT_DB.getMyGroupShopMemberByName(keyword);
searchUserData(userList);
var userTemplate = getTemplate(TemplateURL.MAKE_ROOM_USER_LIST);
let html = renderUser(userTemplate, userList);
let obj = jQuery.parseHTML(html);
$(".overlay_src_msg").html(obj);
hasNoData = userList.length == 0;
}
if (hasNoData) {
const noResultMsg = getNoResultMessage();
overlayMessage.append(noResultMsg);
}
};
/** UTIL */
var searchMember = function () {
const searchInput = $('#chatMakeRoom .search_form input[type="search"]');
searchInput.click(function (e) {
let contactListTitle = getLocalizedString("userSearch");
$("#makeRoomTitle").text(contactListTitle);
});
searchInput.keyup(function (e) {
var keyword = searchInput.val();
const enterKeyPressed = e.KeyCode == 13 || e.key == "Enter";
const keywordEmpty = keyword == "" || keyword.length < 2;
const keywordNotEmpty = keyword != "" && keyword.length != 0;
//画面タイトル設定
if (enterKeyPressed) {
if (keywordNotEmpty) {
searchInput.blur();
return false;
}
} else if (keywordEmpty) {
$(".overlay_src_msg").empty();
return false;
}
CHAT_MAKE_ROOM.searchUser(keyword);
if (enterKeyPressed) {
searchInput.blur();
return;
}
});
};
var bindiOSKeyBoardEvent = function () {
const searchInput = $('#chatMakeRoom .search_form input[type="search"]');
searchInput.on("compositionend", function () {
if (CHAT_UTIL.isIOS()) {
var keyword = searchInput.val();
CHAT_MAKE_ROOM.searchUser(keyword);
}
});
};
var renderRoomList = function (url, groupName, groupID) {
return Mustache.render(url, {
name: groupName,
id: groupID,
});
};
var searchUserData = function (userList) {
userList.forEach(function (user) {
user.profileUrl = CHAT.getProfileImgUrl(user.profileUrl);
let findObj = CHAT.globalSelectedUserList.find(function (shopMemberId) {
return shopMemberId == user.shopMemberId;
});
if (findObj) {
user.checked = "checked";
}
});
};
var renderUser = function (url, userList) {
return Mustache.render(url, {
userList: userList,
});
};
document.addEventListener("DOMContentLoaded", function () {
no_scroll();
// メニューオーバーレイ表示
$(".menu_btn").click(function () {
var w = $(this).width();
$(this).toggleClass("hide");
$('#overlay_menu .item').toggleClass('hide');
});
// ユーザーリストオーバーレイ表示
$(".user_btn").click(function () {
var w = $(this).width();
$(this).toggleClass("hide");
$("#overlay_user_list.overlay")
.toggleClass("slidein")
.css({ transform: "translateX(" & -w & ")" });
if($(this).hasClass('hide')){
return_scroll();
}else{
scrollTo(0, 0);
no_scroll();
}
});
// モーダルonモーダル(前のモーダルを非表示に)
// ホスト変更ボタン押下イベント
$(".ch_host_btn").click(function () {
var target = $(this).val();
changeModal(target, "changeHostModal");
});
/* モーダルの切り替え */
function changeModal(beforeModal, afterModal) {
$(beforeModal).modal("hide");
$(afterModal).modal("show");
}
// 閉じるイベント
$(".close_btn").click(function () {
$("#overlay_add_user_list").addClass("none");
no_scroll();
});
// ユーザー追加イベント
$(".inv_btn").click(function () {
$("#overlay_add_user_list").addClass("none");
});
// ユーザー招待メンバー検索
$(".add_user_btn").click(function () {
return_scroll();
CHAT_UI.showLoadingIndicator();
CHAT.globalSelectedUserList = [];
CHAT_UI.refreshMyGroupForAddUserInCollaboration();
$("#addUserConfirmBtnInCollaboration")
.off()
.on("click", function () {
$("#addUserInCollaboration").modal("hide");
if (typeof android != "undefined") {
android.saveSelectedUserList(CHAT.globalSelectedUserList.join(","));
} else {
webkit.messageHandlers.saveSelectedUserList.postMessage(
CHAT.globalSelectedUserList.join(",")
);
}
CHAT_UI.confirmInviteUserListInCollaboration();
});
});
});
function penOff() {
if (!$("#penBtn .pen").hasClass("disable")) {
$("#coviewPenCtrBtn").click();
$("#penBtn .pen").addClass("disable");
}
}
function no_scroll() {
document.addEventListener("mousewheel", scroll_control, { passive: false });
document.addEventListener("touchmove", scroll_control, { passive: false });
}
// スクロール禁止解除
function return_scroll() {
document.removeEventListener("mousewheel", scroll_control, { passive: false });
document.removeEventListener('touchmove', scroll_control, { passive: false });
}
function scroll_control(event) {
if(event.cancelable){
event.preventDefault();
}
}
\ No newline at end of file
String.prototype.replaceAll = function (org, dest) {
return this.split(org).join(dest);
}
function includeJs(jsFilePath) { function includeJs(jsFilePath) {
var js = document.createElement("script"); var js = document.createElement("script");
...@@ -31,11 +35,7 @@ $(".category").on("click", function () { ...@@ -31,11 +35,7 @@ $(".category").on("click", function () {
}); });
$(".home_btn").on("click", function () { $(".home_btn").on("click", function () {
if (CHAT_UTIL.isAndroid()) { NativeBridgeDelegate.goHome();
android.goHome();
} else if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.goHome.postMessage({});
}
}); });
document.addEventListener("DOMContentLoaded", function () { document.addEventListener("DOMContentLoaded", function () {
...@@ -72,24 +72,71 @@ document.addEventListener("DOMContentLoaded", function () { ...@@ -72,24 +72,71 @@ document.addEventListener("DOMContentLoaded", function () {
$(".overlay_src_msg").empty(); $(".overlay_src_msg").empty();
$(".craeteRoomButton").removeClass("none"); $(".craeteRoomButton").removeClass("none");
}); });
});
$(".message_input_form").on("focus", function (e) { var Common = {};
setTimeout(function () {
$(".message_input_send").removeClass("none");
$(".attach_file").addClass("none");
$(".footer_content_b").addClass("none");
}, 10);
});
$(".message_input_form").on("focusout", function (e) { //loadingIndicatorを表示
setTimeout(function () { Common.showLoadingIndicator = function () {
if ($(e.relatedTarget).hasClass("message_input_send")) { const h = $(window).height();
CHAT_UI.sendMessage(); $("#loader-bg ,#loader").height(h).css("display", "block");
} else { };
$(".message_input_send").addClass("none");
$(".attach_file").removeClass("none"); //loadingIndicatorを表示しない
$(".footer_content_b").removeClass("none"); Common.dismissLoadingIndicator = function () {
} const h = $(window).height();
}, 10); $("#loader-bg ,#loader").height(h).css("display", "none");
}); };
});
Common.refreshForOnline = function () {
serverInfo.isOnline = "true";
$(".footer_item a").removeClass("ui-state-disabled");
if (typeof ChatList != "undefined") {
ChatList.refreshForOnline();
}
if (typeof ChatRoom != "undefined") {
ChatRoom.refreshForOnline();
}
if (typeof Namecard != "undefined") {
Namecard.refreshForOnline();
}
};
Common.refreshForOffline = function () {
serverInfo.isOnline = "false";
$(".footer_item a").addClass("ui-state-disabled");
if (typeof ChatList != "undefined") {
ChatList.refreshForOffline();
}
if (typeof ChatRoom != "undefined") {
ChatRoom.refreshForOffline();
}
if (typeof CollaborationUI != "undefined") {
CollaborationUI.refreshForOffline();
}
if (typeof Namecard != "undefined") {
Namecard.refreshForOffline();
}
};
// #36170 画像パスが存在しない場合はデフォルトの画像を返す
// 存在する場合はプロフィール画像取得用APIのURLを生成して返す
Common.getProfileImgUrl = function (path) {
if (path == undefined || path == "") {
return "./img/noImage.png";
} else if (path.includes("/mnt")) {
const userInfo = path.split("/").reverse();
return (
serverInfo.cmsURL +
"/chatapi/user?profileFileName=" +
userInfo[0] +
"&profileGetLoginId=" +
userInfo[1] +
"&sid=" +
currentUserInfo.sid +
"&cmd=12"
);
} else {
return path;
}
};
...@@ -24,7 +24,7 @@ const ChatRoomType = { ...@@ -24,7 +24,7 @@ const ChatRoomType = {
ALL: "2", ALL: "2",
}; };
const CollaborationTypeKey = { const COLLABORATION_TYPE = {
AUDIO: "audio", AUDIO: "audio",
CAMERA: "camera", CAMERA: "camera",
VIDEO: "video", VIDEO: "video",
...@@ -32,7 +32,7 @@ const CollaborationTypeKey = { ...@@ -32,7 +32,7 @@ const CollaborationTypeKey = {
BOARD: "board", BOARD: "board",
}; };
const COLLABORATION_TYPE = { const COLLABORATION_TYPE_NUMBER = {
AUDIO: 0, AUDIO: 0,
CAMERA: 2, CAMERA: 2,
VIDEO: 3, VIDEO: 3,
...@@ -55,7 +55,7 @@ const HostRequestFlag = { ...@@ -55,7 +55,7 @@ const HostRequestFlag = {
}; };
const PagingSize = { const PagingSize = {
MESSAGE: 100 MESSAGE: 100,
}; };
const InvitedFlag = { const InvitedFlag = {
...@@ -63,6 +63,19 @@ const InvitedFlag = { ...@@ -63,6 +63,19 @@ const InvitedFlag = {
INVITED: 1, INVITED: 1,
}; };
const COLLABORATION_JOIN_TYPE = {
HOST: "0",
ATTENDEE: "1",
INVITED: "2",
};
const ARCHIVE_TYPE = {
PICTURE: 0,
VIDEO: 1,
VOICE: 2,
DOCUMENT: 3,
};
const messageSeperator = "<::split>"; const messageSeperator = "<::split>";
const DATA_MESSAGE_SCHEME = "::NOT_MESSAGE"; const DATA_MESSAGE_SCHEME = "::NOT_MESSAGE";
const FINISH_ALL_COLLABORATION_SIGNAL = "::ALL_COLLABORATION_END"; const FINISH_ALL_COLLABORATION_SIGNAL = "::ALL_COLLABORATION_END";
...@@ -78,6 +91,9 @@ const TemplateURL = { ...@@ -78,6 +91,9 @@ const TemplateURL = {
USER_LIST: "./template/template_user_list.html", USER_LIST: "./template/template_user_list.html",
USER_NAME_CARD: "./template/template_user_name_card.html", USER_NAME_CARD: "./template/template_user_name_card.html",
USER_MESSAGE: "./template/template_user_message.html", USER_MESSAGE: "./template/template_user_message.html",
ARCHIVE: "./template/template_archive.html",
ARCHIVE_DETAIL: "./template/template_archive_detail.html",
ARCHIVE_USER: "./template/template_archive_user.html",
MY_NAME_CARD: "./template/template_my_name_card.html", MY_NAME_CARD: "./template/template_my_name_card.html",
MY_MESSAGE: "./template/template_my_message.html", MY_MESSAGE: "./template/template_my_message.html",
OPEN_COLLABORATION_MESSAGE: OPEN_COLLABORATION_MESSAGE:
...@@ -105,6 +121,9 @@ const TemplateURL = { ...@@ -105,6 +121,9 @@ const TemplateURL = {
"./template/template_add_user_group_user_list_in_collaboration.html", "./template/template_add_user_group_user_list_in_collaboration.html",
ADD_USER_GROUP_PATH_IN_COLLABORATION: ADD_USER_GROUP_PATH_IN_COLLABORATION:
"./template/template_add_user_group_path_in_collaboration.html", "./template/template_add_user_group_path_in_collaboration.html",
COLLABORATION_PROFILE: "./modal_collabo_profile.html",
COLLABORATION_OVERLAY_USER_LIST: "collaboration_overlay_user_list.html",
MODAL_ADD_USER_CONFIRM: "./modal_add_user_confirm.html",
}; };
const SOCKET_KEY = { const SOCKET_KEY = {
...@@ -118,9 +137,16 @@ const SOCKET_KEY = { ...@@ -118,9 +137,16 @@ const SOCKET_KEY = {
SHOW_SERVER_ERROR: "showServerError", SHOW_SERVER_ERROR: "showServerError",
RETRY_JOIN_PROCESS: "retryJoinProcess", RETRY_JOIN_PROCESS: "retryJoinProcess",
JOIN: "join", JOIN: "join",
CREATE_MESSAGE: "createMessage",
GET_GROUP_LIST: "getGroupList",
LEAVE_ROOM: "leaveRoom",
}; };
const NATIVE_KEY_IOS = { const NATIVE_KEY_IOS = {
currentUserInfo: "currentUserInfo",
getDeviceInfo: "getDeviceInfo",
getServerInfo: "getServerInfo",
getRoomInfo: "getRoomInfo",
getBeforeRoomType: "getBeforeRoomType", getBeforeRoomType: "getBeforeRoomType",
getRoomType: "getRoomType", getRoomType: "getRoomType",
removeFavoriteUser: "removeFavoriteUser", removeFavoriteUser: "removeFavoriteUser",
...@@ -160,3 +186,5 @@ const NATIVE_KEY_IOS = { ...@@ -160,3 +186,5 @@ const NATIVE_KEY_IOS = {
getMessageListFromMessageId: "getMessageListFromMessageId", getMessageListFromMessageId: "getMessageListFromMessageId",
updatePreMessage: "updatePreMessage", updatePreMessage: "updatePreMessage",
}; };
const BIZ_TASK_YELL_URL = "https://biztaskyell.abookcloud.com";
\ No newline at end of file
// ios用
function callNativeApp(iosKey, jsonData) {
console.debug("callNativeApp called: " + iosKey);
var result;
try {
var key = iosKey;
var data = jsonData;
var payload = { key: key, data: data };
// payloadの形 {"type":"SJbridge","data":{"name":"abc","role":"dev"}}
// resにObjective-cからのレスポンスが返る
result = prompt(JSON.stringify(payload));
} catch (err) {
console.debug("The native context does not exist yet");
}
return result;
}
var NativeBridgeDataSource = {};
NativeBridgeDataSource.removeFavoriteGroup = function (groupID) {
if (deviceInfo.isiOS()) {
const result = callNativeApp(NATIVE_KEY_IOS.removeFavoriteGroup, {
groupId: groupID,
});
return result == "true" ? true : false;
} else {
return android.removeFavoriteGroup(groupID);
}
};
NativeBridgeDataSource.addFavoriteGroup = function (groupID) {
if (typeof android != "undefined") {
return android.addFavoriteGroup(groupID);
} else {
const result = callNativeApp(NATIVE_KEY_IOS.addFavoriteGroup, {
groupId: groupID,
});
if (result == "true") {
return true;
} else {
return false;
}
}
};
NativeBridgeDataSource.getRoomType = function () {
if (typeof android != "undefined") {
return android.getRoomType();
} else {
return parseInt(callNativeApp(NATIVE_KEY_IOS.getRoomType, {}), 10);
}
};
//ロカールDBからルーム一覧情報を取得
NativeBridgeDataSource.getRoomList = function (roomType, keyWord) {
if (deviceInfo.isiOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getRoomList, {
roomType: roomType,
keyWord: keyWord,
})
);
} else if (deviceInfo.isAndroid()) {
return JSON.parse(android.getRoomList(roomType, keyWord));
}
};
//ロカールDBからログインしたユーザのデータを取得する。
NativeBridgeDataSource.getMyInfo = function () {
if (deviceInfo.isiOS()) {
return JSON.parse(callNativeApp(NATIVE_KEY_IOS.getMyInfo, {}));
} else if (deviceInfo.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getMyInfo());
}
};
NativeBridgeDataSource.getMessagesByRoomID = function (roomID) {
if (deviceInfo.isiOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getMessages, { roomId: roomID })
);
} else if (deviceInfo.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getMessageList(roomID));
}
};
NativeBridgeDataSource.getMessagesByMessageID = function (messageID) {
if (deviceInfo.isiOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getMessageListFromMessageId, {
messageId: messageID,
})
);
} else if (deviceInfo.isAndroid()) {
return JSON.parse(android.getMessageListFromMessageId(messageID));
}
};
NativeBridgeDataSource.getFavoriteUsersNotInRoom = function () {
if (deviceInfo.isiOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getFavoriteUsersNotInRoom, {})
);
} else if (deviceInfo.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getFavoriteUsersNotInRoom());
}
};
NativeBridgeDataSource.getFavoriteUsers = function () {
if (deviceInfo.isiOS()) {
return JSON.parse(callNativeApp(NATIVE_KEY_IOS.getFavoriteUsers, {}));
} else if (deviceInfo.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getFavoriteUsers());
}
};
NativeBridgeDataSource.getFavoriteGroups = function () {
if (deviceInfo.isiOS()) {
return JSON.parse(callNativeApp(NATIVE_KEY_IOS.getFavoriteGroups, {}));
} else if (deviceInfo.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getFavoriteGroups());
}
};
NativeBridgeDataSource.getMyGroupUsers = function () {
if (deviceInfo.isiOS()) {
return JSON.parse(callNativeApp(NATIVE_KEY_IOS.getMyGroupUsers, {}));
} else if (deviceInfo.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getMyGroupUsers());
}
};
NativeBridgeDataSource.getGroupInfo = function (groupId) {
if (deviceInfo.isiOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getGroupInfo, { groupId: groupId })
);
} else if (deviceInfo.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getGroupInfo(groupId));
}
};
NativeBridgeDataSource.getGroupInfoForAddUser = function (groupId) {
if (deviceInfo.isiOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getGroupInfoForAddUser, { groupId: groupId })
);
} else if (deviceInfo.isAndroid()) {
return JSON.parse(android.getGroupInfoForAddUser(groupId));
}
};
NativeBridgeDataSource.loadSelectedUsers = function () {
if (deviceInfo.isiOS()) {
return JSON.parse(callNativeApp(NATIVE_KEY_IOS.getSelectedUserList, {}));
} else if (deviceInfo.isAndroid()) {
return JSON.parse(android.getSelectedUserList());
}
};
NativeBridgeDataSource.getNameCardData = function (shopMemberId) {
if (deviceInfo.isiOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getNameCardData, {
shopMemberId: shopMemberId,
})
);
} else if (deviceInfo.isAndroid()) {
return JSON.parse(android.getNameCardData(shopMemberId));
}
};
NativeBridgeDataSource.getMyGroupShopMemberByName = function (shopMemberName) {
if (deviceInfo.isiOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getMyGroupShopMemberByName, {
shopMemberName: shopMemberName,
})
);
} else if (deviceInfo.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getMyGroupShopMemberByName(shopMemberName));
}
};
NativeBridgeDataSource.getMyGroupShopMemberNotInRoomByName = function (
shopMemberName
) {
if (deviceInfo.isiOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getMyGroupShopMemberNotInRoomByName, {
shopMemberName: shopMemberName,
})
);
} else if (deviceInfo.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(
android.getMyGroupShopMemberNotInRoomByName(shopMemberName)
);
}
};
NativeBridgeDataSource.getAllGroupShopMemberByName = function (shopMemberName) {
if (deviceInfo.isiOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getAllGroupShopMemberByName, {
shopMemberName: shopMemberName,
})
);
} else if (deviceInfo.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getAllGroupShopMemberByName(shopMemberName));
}
};
NativeBridgeDataSource.getAllGroupShopMemberNotInRoomByName = function (
shopMemberName
) {
if (deviceInfo.isiOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getAllGroupShopMemberNotInRoomByName, {
shopMemberName: shopMemberName,
})
);
} else if (deviceInfo.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(
android.getAllGroupShopMemberNotInRoomByName(shopMemberName)
);
}
};
NativeBridgeDataSource.getGroupByName = function (groupName) {
if (deviceInfo.isiOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getGroupByName, { groupName: groupName })
);
} else if (deviceInfo.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getGroupByName(groupName));
}
};
NativeBridgeDataSource.getUsersInRoom = function (roomID) {
if (deviceInfo.isiOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getUsersInRoom, { roomId: roomID })
);
} else if (deviceInfo.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getUsersInRoom(roomID));
}
};
// アーカイブ一覧
NativeBridgeDataSource.getArchiveList = function () {
if (deviceInfo.isiOS()) {
return JSON.parse(callNativeApp(NATIVE_KEY_IOS.getArchiveList, {}));
} else if (deviceInfo.isAndroid()) {
return JSON.parse(android.getArchiveList());
}
};
// アーカイブ一覧検索
NativeBridgeDataSource.getArchiveByName = function (archiveName) {
if (deviceInfo.isiOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getArchiveByName, {
archiveName: archiveName,
})
);
} else if (deviceInfo.isAndroid()) {
return JSON.parse(android.getArchiveListByName(archiveName));
}
};
// アーカイブ詳細
NativeBridgeDataSource.getArchiveDetail = function (archiveId) {
if (deviceInfo.isiOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getArchiveDetail, { archiveId: archiveId })
);
} else if (deviceInfo.isAndroid()) {
return JSON.parse(android.getArchiveDetail(archiveId));
}
};
NativeBridgeDataSource.searchMessages = function (keyword, userList) {
if (deviceInfo.isiOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.searchMessages, {
keyWord: keyword,
userList: userList,
})
);
} else if (deviceInfo.isAndroid()) {
return JSON.parse(android.searchMessages(keyword, userList));
}
};
NativeBridgeDataSource.getMyGroupUsersNotInRoom = function () {
if (deviceInfo.isiOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getMyGroupUsersNotInRoom, {})
);
} else if (deviceInfo.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getMyGroupUsersNotInRoom());
}
};
NativeBridgeDataSource.getUserInfo = function (shopMemberId) {
if (shopMemberId == "") {
return;
}
if (deviceInfo.isiOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getUserInfo, { shopMemberId: shopMemberId })
);
} else if (deviceInfo.isAndroid()) {
//String形式をJsonに変更してReturn
return JSON.parse(android.getUserInfo(shopMemberId));
}
};
NativeBridgeDataSource.getUserListByLoginId = function (loginIdList) {
if (deviceInfo.isiOS()) {
return JSON.parse(
callNativeApp(NATIVE_KEY_IOS.getUserListByLoginId, {
loginIdList: loginIdList.join(","),
})
);
} else if (deviceInfo.isAndroid()) {
return JSON.parse(android.getUserListByLoginId(loginIdList.join(",")));
}
};
NativeBridgeDataSource.getBeforeRoomType = function () {
if (deviceInfo.isiOS()) {
return callNativeApp(NATIVE_KEY_IOS.getBeforeRoomType, {});
} else {
return android.getBeforeRoomType();
}
};
NativeBridgeDataSource.removeFavoriteUser = function (shopMemberId) {
if (deviceInfo.isiOS()) {
var result = callNativeApp(NATIVE_KEY_IOS.removeFavoriteUser, {
shopMemberId: shopMemberId,
});
if (result == "true") {
return true;
} else {
return false;
}
} else {
return android.removeFavoriteUser(shopMemberId);
}
};
NativeBridgeDataSource.addFavoriteUser = function (shopMemberId) {
if (deviceInfo.isiOS()) {
var result = callNativeApp(NATIVE_KEY_IOS.addFavoriteUser, {
shopMemberId: shopMemberId,
});
if (result == "true") {
return true;
} else {
return false;
}
} else {
return android.addFavoriteUser(shopMemberId);
}
};
NativeBridgeDataSource.getJoinCollaborationType = function () {
if (deviceInfo.isiOS()) {
return parseInt(
callNativeApp(NATIVE_KEY_IOS.getJoinCollaborationType, {}),
10
);
} else {
return android.getJoinCollaborationType();
}
};
NativeBridgeDataSource.getUserInfoList = function (shopMemberId) {
if (deviceInfo.isiOS()) {
return callNativeApp(NATIVE_KEY_IOS.getUserInfoList, {
shopMemberId: shopMemberId,
});
} else {
return android.getUserInfoList(shopMemberId);
}
};
NativeBridgeDataSource.createContentView = function () {
if (deviceInfo.isiOS()) {
return parseInt(callNativeApp(NATIVE_KEY_IOS.createContentView, {}));
} else {
return android.createContentView();
}
};
NativeBridgeDataSource.getToMoveGroupId = function () {
if (deviceInfo.isiOS()) {
return callNativeApp(NATIVE_KEY_IOS.getToMoveGroupId, {});
} else {
return android.getToMoveGroupId();
}
};
NativeBridgeDataSource.getHostRequestFlg = function () {
if (deviceInfo.isiOS()) {
return parseInt(callNativeApp(NATIVE_KEY_IOS.getHostRequestFlg, {}), 10);
} else {
return android.getHostRequestFlg();
}
};
var NativeBridgeDelegate = {};
NativeBridgeDelegate.updateRoomList = function () {
if (typeof android != "undefined") {
android.updateRoomList();
} else {
webkit.messageHandlers.updateRoomList.postMessage({});
}
};
NativeBridgeDelegate.roomDisplayOff = function () {
if (typeof android != "undefined") {
android.roomDisplayOff();
} else {
webkit.messageHandlers.roomDisplayOff.postMessage({});
}
};
NativeBridgeDelegate.openCommunicationHome = function () {
if (typeof android != "undefined") {
android.openCommunicationHome();
} else {
webkit.messageHandlers.openCommunicationHome.postMessage({});
}
};
NativeBridgeDelegate.joinRoom = function (roomID, roomName = "") {
if (typeof android != "undefined") {
try {
android.joinRoom(roomID, roomName);
} catch {
alert(getLocalizedString("err_not_exist_room"));
}
} else {
webkit.messageHandlers.joinRoom.postMessage({
roomId: roomID,
roomName: roomName,
});
}
};
NativeBridgeDelegate.createChatRoom = function (
chatRoomType,
userIDList,
newRoomName,
screenFlag,
isVoice
) {
if (typeof android != "undefined") {
android.createChatRoom(
chatRoomType,
userIDList,
newRoomName,
screenFlag,
isVoice
);
} else {
webkit.messageHandlers.createChatRoom.postMessage({
roomType: chatRoomType,
userIdList: userIDList,
roomName: newRoomName,
screenFlag: screenFlag,
isVoice: isVoice,
});
}
};
NativeBridgeDelegate.updateContactInfo = function () {
if (serverInfo.isOnline != "true") {
return;
}
NativeBridgeDelegate.updateGroupInfo("0");
if (typeof android != "undefined") {
android.updateMyInfo();
// android.updateGroupUser(); ? is this method included in update group info?
android.updateFavorite();
} else {
webkit.messageHandlers.updateMyInfo.postMessage({});
webkit.messageHandlers.updateGroupUser.postMessage({});
webkit.messageHandlers.updateFavorite.postMessage({});
}
};
NativeBridgeDelegate.updateGroupInfo = function (groupID) {
if (serverInfo.isOnline == "true") {
if (typeof android != "undefined") {
// TODO: peacekim:: check this method is right or not
android.updateGroupUser();
} else {
webkit.messageHandlers.updateGroupInfo.postMessage(groupID);
}
}
};
NativeBridgeDelegate.joinCollaboration = function (
collaborationType,
meetingID = 0
) {
const collaborationTypeNumber =
CHAT_UTIL.getCollaborationTypeNumber(collaborationType);
if (deviceInfo.isiOS()) {
webkit.messageHandlers.joinCollaboration.postMessage({
collaborationType: collaborationTypeNumber,
meetingId: meetingID,
});
} else if (deviceInfo.isAndroid()) {
if (
collaborationType == COLLABORATION_TYPE.DOCUMENT &&
deviceInfo.androidVersion < ANDROID_SDK_VERSION.O
) {
alert(getLocalizedString("not_support_version"));
return;
}
android.joinCollaboration(collaborationTypeNumber, meetingID);
}
};
NativeBridgeDelegate.inviteUsers = function (userIDList) {
if (typeof android != "undefined") {
android.inviteUsers(userIDList, false);
} else {
webkit.messageHandlers.inviteUsers.postMessage({
userIdList: userIDList,
});
}
};
NativeBridgeDelegate.saveSelectedUserList = function (selectedUserList) {
if (typeof android != "undefined") {
android.saveSelectedUserList(selectedUserList);
} else {
webkit.messageHandlers.saveSelectedUserList.postMessage(selectedUserList);
}
};
NativeBridgeDelegate.startPIPMode = function () {
if (typeof android != "undefined") {
android.startPipMode();
} else if (deviceInfo.isiOS()) {
webkit.messageHandlers.startPipMode.postMessage({});
}
};
NativeBridgeDelegate.finishPIPMode = function (needsAndroid = false) {
// not for android
if (deviceInfo.isiOS()) {
webkit.messageHandlers.finishPipMode.postMessage({});
} else if (needsAndroid && typeof android != "undefined") {
android.finishPip();
}
};
NativeBridgeDelegate.setHostRequestFlg = function (hostRequestFlag) {
if (deviceInfo.isAndroid()) {
android.setHostRequestFlg(hostRequestFlag);
} else {
webkit.messageHandlers.setHostRequestFlg.postMessage(hostRequestFlag);
}
};
NativeBridgeDelegate.setToMoveGroupId = function (groupID) {
if (typeof android != "undefined") {
android.setToMoveGroupId(groupID);
} else {
webkit.messageHandlers.setToMoveGroupId.postMessage(groupID);
}
};
NativeBridgeDelegate.updateArchiveList = function () {
if (deviceInfo.isiOS()) {
webkit.messageHandlers.updateArchiveList.postMessage({});
} else if (deviceInfo.isAndroid()) {
android.updateArchiveList();
}
};
NativeBridgeDelegate.updateArchiveDetail = function (archiveId) {
if (deviceInfo.isiOS()) {
webkit.messageHandlers.updateArchiveDetail.postMessage(archiveId);
} else if (deviceInfo.isAndroid()) {
android.updateArchiveDetail(archiveId);
}
};
NativeBridgeDelegate.goHome = function () {
if (deviceInfo.isAndroid()) {
android.goHome();
} else if (deviceInfo.isiOS()) {
webkit.messageHandlers.goHome.postMessage({});
}
};
NativeBridgeDelegate.updatePreMessage = function (messageID) {
if (typeof android != "undefined") {
if (serverInfo.isOnline == "true") {
android.updatePreMessage(messageID);
}
} else {
// 追加メッセージUpdate、get
webkit.messageHandlers.updatePreMessage.postMessage({
messageId: messageID,
});
}
};
NativeBridgeDelegate.changeRoomName = function (newRoomName) {
if (deviceInfo.isiOS()) {
webkit.messageHandlers.changeRoomName.postMessage(newRoomName);
} else if (deviceInfo.isAndroid()) {
android.changeRoomName(newRoomName);
}
};
NativeBridgeDelegate.startCollaboration = function (type) {
const collaborationNumber = CHAT_UTIL.getCollaborationTypeNumber(type);
if (deviceInfo.isiOS()) {
webkit.messageHandlers.startCollaboration.postMessage(collaborationNumber);
} else if (deviceInfo.isAndroid()) {
android.startCollaboration(collaborationNumber);
}
};
NativeBridgeDelegate.finishCollaboration = function (needsAndroid = false) {
if (deviceInfo.isiOS()) {
webkit.messageHandlers.finishCollaboration.postMessage({});
} else if (needsAndroid) {
android.finishCollaboration();
}
};
NativeBridgeDelegate.finishAllCollaboration = function () {
if (deviceInfo.isiOS()) {
webkit.messageHandlers.finishAllCollaboration.postMessage({});
} else if (deviceInfo.isAndroid()) {
android.finishAllCollaboration();
}
};
NativeBridgeDelegate.inviteCollaboration = function (
userIDList,
collaborationType
) {
const collaborationNumber =
CHAT_UTIL.getCollaborationTypeNumber(collaborationType);
if (typeof android != "undefined") {
android.inviteCollaboration(userIDList, collaborationNumber);
} else {
webkit.messageHandlers.inviteCollaboration.postMessage({
userIdList: userIDList,
collaborationType: collaborationNumber,
});
}
};
NativeBridgeDelegate.clearBeforeRoomType = function () {
if (typeof android != "undefined") {
android.clearBeforeRoomType();
} else {
webkit.messageHandlers.clearBeforeRoomType.postMessage({});
}
};
NativeBridgeDelegate.updateMessages = function (roomID) {
if (typeof android != "undefined") {
android.updateMessages(roomID);
} else {
webkit.messageHandlers.updateMessages.postMessage(roomID);
}
};
NativeBridgeDelegate.saveVisitRoomInfo = function (roomID = "", roomName = "") {
if (deviceInfo.isiOS()) {
webkit.messageHandlers.roomInfosaveMessageHandlerId.postMessage({
roomId: roomID,
roomName: roomName,
});
} else if (deviceInfo.isAndroid()) {
if (roomId == undefined && roomName == undefined) {
android.saveVisitRoomInfo("", "");
} else {
android.saveVisitRoomInfo(roomID, roomName);
}
}
};
NativeBridgeDelegate.exitMeetingRoom = function () {
if (deviceInfo.isiOS()) {
webkit.messageHandlers.exitMeetingRoom.postMessage({});
} else if (deviceInfo.isAndroid()) {
android.exitMeetingRoom();
}
};
NativeBridgeDelegate.joinChangedCollaboration = function (
collaborationType,
meetingID
) {
const collaborationNumber =
CHAT_UTIL.getCollaborationTypeNumber(collaborationType);
if (deviceInfo.isiOS()) {
webkit.messageHandlers.joinChangedCollaboration.postMessage({
joinCollaborationType: collaborationNumber,
meetingId: meetingID,
});
} else if (deviceInfo.isAndroid()) {
android.joinChangedCollaboration(collaborationNumber, meetingID);
}
};
NativeBridgeDelegate.joinMeetingRoom = function (meetingID) {
if (deviceInfo.isiOS()) {
webkit.messageHandlers.joinMeetingRoom.postMessage(meetingID);
} else if (deviceInfo.isAndroid()) {
android.joinMeetingRoom(meetingID);
}
};
NativeBridgeDelegate.setJoinCollaborationType = function (type) {
const collaborationNumber = CHAT_UTIL.getCollaborationTypeNumber(type);
if (deviceInfo.isiOS()) {
webkit.messageHandlers.setJoinCollaborationType.postMessage(
collaborationNumber
);
} else if (deviceInfo.isAndroid()) {
if (
type == COLLABORATION_TYPE.DOCUMENT &&
deviceInfo.androidVersion < ANDROID_SDK_VERSION.O
) {
alert(getLocalizedString("not_support_version"));
return;
}
android.setJoinCollaborationType(collaborationNumber);
}
};
NativeBridgeDelegate.showExitHostAlert = function () {
if (deviceInfo.isiOS()) {
webkit.messageHandlers.showExitHostAlert.postMessage({});
}
// TODO: peacekim:: check not to need this method for android
};
NativeBridgeDelegate.startContentView = function () {
if (deviceInfo.isiOS()) {
webkit.messageHandlers.startContentView.postMessage({});
} else if (deviceInfo.isAndroid()) {
android.startContentView();
}
};
NativeBridgeDelegate.changeCollaboration = function (
collaborationType,
meetingID
) {
const collaborationNumber =
CHAT_UTIL.getCollaborationTypeNumber(collaborationType);
if (deviceInfo.isiOS()) {
webkit.messageHandlers.changeCollaboration.postMessage({
changeCollaborationType: collaborationNumber,
meetingId: meetingID,
});
} else if (deviceInfo.isAndroid()) {
android.changeCollaboration(collaborationNumber, meetingID);
}
};
var ReverseDelegate = {};
/* reverse delegates */
// for android native call
ReverseDelegate.leaveRoom = function () {
CHAT_SOCKET.emitLeaveRoom();
};
// for android call
ReverseDelegate.displayExistRoom = function (roomId) {
if (confirm("error_already_exist_same_user")) {
NativeBridgeDelegate.joinRoom(roomId);
}
return;
};
// 名前空間
var CONTACT = {};
document.addEventListener("DOMContentLoaded", function () {
// メンバー検索
bindMemeberSearch();
// iOSキーボード変換検知用
bindiOSKeyBoardEvent();
});
// ユーザー検索
CONTACT.searchUser = function (keyword) {
const overlayMessage = $(".overlay_src_msg");
const isAllGroup = $("#tabAllGroup").is(":checked");
let hasNoData = false;
overlayMessage.empty();
//全グループ検索画面
if (isAllGroup) {
//グループデータ検索
const groupList = CHAT_DB.getGroupByName(keyword);
groupDataSearch(groupList);
//ユーザデータ検索
const userList = CHAT_DB.getAllGroupShopMemberByName(keyword);
userDataSearch(userList);
hasNoData = userList.length == 0 && groupList.length == 0;
//連絡先画面
} else {
const userList = CHAT_DB.getMyGroupShopMemberByName(keyword);
userDataSearch(userList);
hasNoData = userList.length == 0;
}
if (hasNoData) {
const noResultMsg = getNoResultMessage();
overlayMessage.append(noResultMsg);
}
};
/** UTILS */
var bindiOSKeyBoardEvent = function () {
const searchInput = $('#contact .search_form input[type="search"]');
searchInput.on("compositionend", function () {
if (CHAT_UTIL.isIOS()) {
var keyword = searchInput.val();
CONTACT.searchUser(keyword);
}
});
};
var bindMemeberSearch = function () {
const searchInput = $('#contact .search_form input[type="search"]');
searchInput.keyup(function (e) {
const keyword = searchInput.val();
const enterKeyPressed = e.key == "Enter" || e.KeyCode == 13;
const keywordEmpty = keyword == "" || keyword.length < 2;
const keywordNotEmpty = keyword != "" && keyword.length != 0;
if (enterKeyPressed) {
if (keywordNotEmpty) {
searchInput.blur();
return;
}
} else if (keywordEmpty) {
$(".overlay_src_msg").empty();
return;
}
CONTACT.searchUser(keyword);
if (enterKeyPressed) {
searchInput.blur();
return;
}
});
};
var groupDataSearch = function (groupList) {
const groupTemplate = getTemplate(TemplateURL.GROUP_LIST);
groupList.forEach(function (group) {
let html = renderGroupList(
groupTemplate,
group.groupName,
group.groupId,
group.isFavorite
);
let obj = jQuery.parseHTML(html);
$(".overlay_src_msg").append(obj);
});
};
var renderGroupList = function (url, groupName, groupID, isFavorite) {
return Mustache.render(url, {
name: groupName,
id: groupID,
isFavorite: isFavorite,
});
};
var userDataSearch = function (userList) {
userList.forEach(function (user) {
user.profileUrl = CHAT.getProfileImgUrl(user.profileUrl);
});
var userTemplate = getTemplate(TemplateURL.USER_LIST);
let html = renderUserList(userTemplate, userList);
let obj = jQuery.parseHTML(html);
$(".overlay_src_msg").append(obj);
};
var renderUserList = function (url, userList) {
return Mustache.render(url, {
userList: userList,
});
};
\ No newline at end of file
...@@ -2,8 +2,6 @@ $.lang.en = { ...@@ -2,8 +2,6 @@ $.lang.en = {
"chat_placeholder":"Type message", "chat_placeholder":"Type message",
"chat_search_placeholder":" Search Message", "chat_search_placeholder":" Search Message",
"room_search_placeholder":" Search Room", "room_search_placeholder":" Search Room",
"participants":"Member List",
"exitRoom":"Exit ",
"roomListTitle":"Room List", "roomListTitle":"Room List",
"deleteRoomTitle":"Delete Room", "deleteRoomTitle":"Delete Room",
"inviteUsersButton":"invite", "inviteUsersButton":"invite",
...@@ -21,18 +19,12 @@ $.lang.en = { ...@@ -21,18 +19,12 @@ $.lang.en = {
"orderByTime":"OrderByTime", "orderByTime":"OrderByTime",
"orderByUnread":"OrderByUnread", "orderByUnread":"OrderByUnread",
"roomKeywordPlaceHolder":"Search", "roomKeywordPlaceHolder":"Search",
"okayLabel":"Okay!",
"completeLabel":"Complete.",
"thankLabel":"Thank you",
"startToWorkLabel":"Start to work",
"groupListKeyword":"Search",
"userSearch":"User Search", "userSearch":"User Search",
"groupSearch":"Group Search", "groupSearch":"Group Search",
"groupPageSubtitle":"Groups", "groupPageSubtitle":"Groups",
"noMessages":"No Messages", "noMessages":"No Messages",
"image":"Image", "image":"Image",
"chatKeyword":"Search", "chatKeyword":"Search",
"userListKeyword":"Search",
"newRoomName":"Please input Room Name", "newRoomName":"Please input Room Name",
"everyoneIsHere":"Everyone is in the chat.", "everyoneIsHere":"Everyone is in the chat.",
"people":"people", "people":"people",
......
...@@ -2,8 +2,6 @@ $.lang.ja = { ...@@ -2,8 +2,6 @@ $.lang.ja = {
"chat_placeholder":"メッセージを入力", "chat_placeholder":"メッセージを入力",
"chat_search_placeholder":" メッセージ検索", "chat_search_placeholder":" メッセージ検索",
"room_search_placeholder":" ルーム検索", "room_search_placeholder":" ルーム検索",
"participants":"メンバーリスト",
"exitRoom":"退出 ",
"roomListTitle":"チャット", "roomListTitle":"チャット",
"deleteRoomTitle":"ルーム削除", "deleteRoomTitle":"ルーム削除",
"inviteUsersButton":"招待", "inviteUsersButton":"招待",
...@@ -20,18 +18,12 @@ $.lang.ja = { ...@@ -20,18 +18,12 @@ $.lang.ja = {
"orderByTime":"新着順", "orderByTime":"新着順",
"orderByUnread":"未読優先", "orderByUnread":"未読優先",
"roomKeywordPlaceHolder":"検索", "roomKeywordPlaceHolder":"検索",
"okayLabel":"了解しました。",
"completeLabel":"完了しました。",
"thankLabel":"ありがとうございます。",
"startToWorkLabel":"作業開始します。",
"userSearch":"ユーザー検索", "userSearch":"ユーザー検索",
"groupSearch":"グループ検索", "groupSearch":"グループ検索",
"groupListKeyword":"検索",
"groupPageSubtitle":"グループ", "groupPageSubtitle":"グループ",
"noMessages":"メッセージがありません。", "noMessages":"メッセージがありません。",
"image":"画像", "image":"画像",
"chatKeyword":"検索", "chatKeyword":"検索",
"userListKeyword":"検索",
"invitedUser":"参加者", "invitedUser":"参加者",
"newRoomName":"ルーム名を入力してください", "newRoomName":"ルーム名を入力してください",
"everyoneIsHere":"招待可能なメンバーがいません。", "everyoneIsHere":"招待可能なメンバーがいません。",
......
...@@ -2,8 +2,6 @@ $.lang.ko = { ...@@ -2,8 +2,6 @@ $.lang.ko = {
"chat_placeholder":"메시지를 입력하세요.", "chat_placeholder":"메시지를 입력하세요.",
"chat_search_placeholder":" 메세지검색", "chat_search_placeholder":" 메세지검색",
"room_search_placeholder":" 채팅방 검색", "room_search_placeholder":" 채팅방 검색",
"participants":"멤버 리스트",
"exitRoom":"나가기 ",
"roomListTitle":"채팅 리스트", "roomListTitle":"채팅 리스트",
"deleteRoomTitle":"채팅방 삭제", "deleteRoomTitle":"채팅방 삭제",
"inviteUsersButton":"유저 초대", "inviteUsersButton":"유저 초대",
...@@ -21,18 +19,12 @@ $.lang.ko = { ...@@ -21,18 +19,12 @@ $.lang.ko = {
"orderByTime":"최신순", "orderByTime":"최신순",
"orderByUnread":"안 읽은 순", "orderByUnread":"안 읽은 순",
"roomKeywordPlaceHolder":"검색", "roomKeywordPlaceHolder":"검색",
"okayLabel":"알겠습니다.",
"completeLabel":"작업이 끝났습니다.",
"thankLabel":"감사합니다.",
"startToWorkLabel":"작업을 시작합니다.",
"groupListKeyword":"검색",
"userSearch":"유저 검색", "userSearch":"유저 검색",
"groupSearch":"그룹 검색", "groupSearch":"그룹 검색",
"groupPageSubtitle":"그룹", "groupPageSubtitle":"그룹",
"noMessages":"메시지가 없습니다.", "noMessages":"메시지가 없습니다.",
"image":"이미지", "image":"이미지",
"chatKeyword":"검색", "chatKeyword":"검색",
"userListKeyword":"검색",
"newRoomName":"방 이름을 입력해주세요.", "newRoomName":"방 이름을 입력해주세요.",
"everyoneIsHere":"초대가능한 유저가 없습니다.", "everyoneIsHere":"초대가능한 유저가 없습니다.",
"people":"명", "people":"명",
......
/* --------------------------------------------------- */
/* Functions */
/* --------------------------------------------------- */
let coview_api = new CoviewApi();
var isDocument = false;
var isBoard = false;
let isLeaved = false;
let timeInterval = null;
var backgroundFileName;
var isIos;
document.addEventListener("DOMContentLoaded", function () {
var coviewApiActive = coview_api.Init({
testSTRParam: "param1",
testNUMParam: 77,
testBOOLParam: false,
coview_api_srv_addr: "https://biztaskyell.abookcloud.com",
coview_wrap_id: "coviewShare",
coview_api_key: "8dda7092c5820d663",
});
// special button IN Chat ui
$("#coviewShareMainBtn").on("click", function (e) {
e.stopPropagation();
if ($(".coview_share_dropdown_bar").is(":visible") == true) {
Coview_shareDropdownHide();
if ($(".coview_share_photo_select_bubble").is(":visible") == true) {
$(".coview_share_photo_select_bubble").slideUp();
}
} else {
$(".coview_share_dropdown_bar").slideDown();
}
});
$("#coviewShareCloseButton").on("click", function (e) {
coview_api.LeaveRoom();
$(".coview_share_area").hide();
});
$("body").on("click", function () {
Coview_shareDropdownHide();
if ($(".coview_share_photo_select_bubble").is(":visible") == true) {
$(".coview_share_photo_select_bubble").slideUp();
} else {
$(".coview_share_dropdown_bar").slideDown();
}
});
$(document).on("click", ".coview_share_request", function () {
console.log("globalUserInfo", globalUserInfo);
if ($(this).hasClass(CollaborationTypeKey.VIDEO) == true) {
globalUserInfo.coWorkType = CollaborationTypeKey.VIDEO;
$(".coview_share_title_name").text("LIVE");
} else if ($(this).hasClass(CollaborationTypeKey.CAMERA) == true) {
globalUserInfo.coWorkType = CollaborationTypeKey.CAMERA;
$(".coview_share_title_name").text("ライブラリ");
} else if ($(this).hasClass(CollaborationTypeKey.AUDIO) == true) {
globalUserInfo.coWorkType = CollaborationTypeKey.AUDIO;
$(".coview_share_title_name").text("音声通話");
}
coview_api.JoinRoom(globalUserInfo.roomId, globalUserInfo.coWorkType);
Coview_moveToVideoShareArea();
});
/* --------------------------------------------------- */
/* Video, photo, chat, doc */
/* --------------------------------------------------- */
$("#coviewShareChat").on("click", function () {
console.log("ON click coviewShareChat");
});
$("#coviewSharePhoto").on("click", function (e) {
e.stopPropagation();
console.log("ON click coviewSharePhoto");
if ($(".coview_share_photo_select_bubble").is(":visible") == true) {
$(".coview_share_photo_select_bubble").slideUp();
} else {
$(".coview_share_photo_select_bubble").slideDown();
}
});
$("#coviewSharePhotoCamera").on("click", function () {
$(".coview_share_photo_select_bubble").hide();
globalUserInfo.coWorkType = CollaborationTypeKey.CAMERA;
coview_api.CreateRoom(globalUserInfo.roomId, globalUserInfo.coWorkType);
Coview_moveToVideoShareArea();
$(".coview_share_title_name").text("カメラ");
});
$("#coviewSharePhotoGallery").on("click", function () {
$(".coview_share_photo_select_bubble").hide();
globalUserInfo.coWorkType = "gallery";
coview_api.CreateRoom(globalUserInfo.roomId, globalUserInfo.coWorkType);
Coview_moveToVideoShareArea();
$(".coview_share_title_name").text("ライブラリ");
});
$("#coviewShareAudio").on("click", function () {
Coview_connect_audio_collaboration();
});
$("#coviewShareLive").on("click", function () {
console.log("ON click coviewShareLive");
globalUserInfo.coWorkType = "video";
console.log("globalUserInfo", globalUserInfo);
coview_api.CreateRoom(globalUserInfo.roomId, globalUserInfo.coWorkType);
Coview_moveToVideoShareArea();
$(".coview_share_title_name").text("LIVE");
});
coview_api.addEventListener("ready", function () {
console.log("=============> READY : ready for coview api");
Coview_addLoginId(globalUserInfo.loginId);
coview_api.Login(globalUserInfo.loginId);
initCollaborationUI(joinCollaborationType);
if (CHAT_UTIL.isAndroid()) {
android.setHostRequestFlg(HostRequestFlag.DONE);
} else {
webkit.messageHandlers.setHostRequestFlg.postMessage(
HostRequestFlag.DONE
);
}
fw.socket.on("message", async function (data) {
console.log("====> message::data: ", data);
if (data.type === "CHANGE_COLLABORATION") {
if (joinCollaborationType == COLLABORATION_TYPE.DOCUMENT) {
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.exitMeetingRoom.postMessage({});
webkit.messageHandlers.finishPipMode.postMessage({});
} else if (CHAT_UTIL.isAndroid()) {
android.exitMeetingRoom();
android.finishPip();
$(".pip_indicator").addClass("none");
}
await new Promise(done => setTimeout(() => done(), 500));
updateCanvasSize();
}
if (
CHAT_UTIL.isAndroid() &&
data.payload.collaborationType == COLLABORATION_TYPE.DOCUMENT &&
androidVersion < ANDROID_SDK_VERSION.O
) {
coview_api.HeartBeatUser(globalUserInfo.loginId);
alert(getLocalizedString("not_support_version"));
joinCollaborationType = COLLABORATION_TYPE.CAMERA;
} else {
joinCollaborationType = data.payload.collaborationType;
}
joinMeetingId = data.payload.newMeetingId;
initCollaborationUI(joinCollaborationType);
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.joinChangedCollaboration.postMessage({
joinCollaborationType: joinCollaborationType,
meetingId: data.payload.newMeetingId,
});
if (joinCollaborationType == COLLABORATION_TYPE.DOCUMENT) {
webkit.messageHandlers.joinMeetingRoom.postMessage(
data.payload.newMeetingId
);
}
} else if (CHAT_UTIL.isAndroid()) {
android.joinChangedCollaboration(
joinCollaborationType,
data.payload.newMeetingId
);
if (joinCollaborationType == COLLABORATION_TYPE.DOCUMENT) {
android.joinMeetingRoom(data.payload.newMeetingId);
}
}
} else if (data.type === "SHARE_FILE") {
if (joinCollaborationType != COLLABORATION_TYPE.CAMERA) {
initCollaborationUI(COLLABORATION_TYPE.CAMERA);
joinCollaborationType = COLLABORATION_TYPE.CAMERA;
fw.sendToMsg("others", "SHARE_FILE_HOST", {
collaborationType: COLLABORATION_TYPE.CAMERA,
});
}
} else if (data.type === "SHARE_FILE_HOST") {
if (joinCollaborationType != COLLABORATION_TYPE.CAMERA && g_isMainMan) {
initCollaborationUI(COLLABORATION_TYPE.CAMERA);
joinCollaborationType = COLLABORATION_TYPE.CAMERA;
}
} else if (data.type === "CAPTURE_REQUEST" && g_isMainMan) {
if (
confirm(data.payload.name + getLocalizedString("request_capture"))
) {
if ($("#recordBtn .record").hasClass("disable")) {
screenLock();
recordStop(function () {
$("#screenLock").remove();
captureAndShareImage(
CMS_SERVER_URL + "/chatapi/file/uploadArchive",
data.payload.name
);
});
} else {
captureAndShareImage(
CMS_SERVER_URL + "/chatapi/file/uploadArchive",
data.payload.name
);
}
}
} else if (data.type === "HOST_CHANGE_REQUEST") {
if (data.payload.loginId == globalUserInfo.loginId) {
fw.sendToMsg("others", "HOST_CHANGE_RESPONSE", {
isAndroid: CHAT_UTIL.isAndroid(),
isAble: androidVersion >= ANDROID_SDK_VERSION.O,
loginId: CHAT.globalLoginParameter.loginId,
});
}
} else if (data.type === "HOST_CHANGE_RESPONSE") {
var isAndroid = data.payload.isAndroid;
var isAble = data.payload.isAble;
if (
g_isMainMan &&
isAndroid &&
!isAble &&
joinCollaborationType == COLLABORATION_TYPE.DOCUMENT
) {
coview_api.HeartBeatUser(globalUserInfo.loginId);
alert(getLocalizedString("err_target_android_version_not_support"));
} else if (g_isMainMan) {
fw.sendToMsg("others", "PIP_END_REQUEST", {
loginId: getFermiLoginId(data.payload.loginId),
});
await new Promise(done => setTimeout(() => done(), 500));
Coview_changeHost(getFermiLoginId(data.payload.loginId));
}
} else if (data.type === "PIP_END_REQUEST") {
if (data.payload.loginId == globalUserInfo.loginId && joinCollaborationType == COLLABORATION_TYPE.DOCUMENT) {
if (CHAT_UTIL.isAndroid()) {
android.finishPip();
$(".pip_indicator").addClass("none");
} else {
webkit.messageHandlers.finishPipMode.postMessage({});
}
}
} else if (data.type === "API_SEND_OWNER_CHANGE_COMPLETE") {
penOff();
if ($("#recordBtn .record").hasClass("disable")) {
recordStop(function () {
console.log("ホスト変更によりレコードを終了しました");
});
}
if ($("#micBtn .voice").hasClass("disable")) {
micOff();
} else {
micOn();
}
} else if (data.type === "API_SEND_OWNER_CHANGE_CONFIRM") {
if (joinCollaborationType == COLLABORATION_TYPE.CAMERA) {
await new Promise(done => setTimeout(() => done(), 500));
removeOldLocalVideo(g_localStream);
}
} else if (data.type === "CHANGE_HOST_APPLY") {
if (g_isMainMan) {
coview_api.HeartBeatUser(globalUserInfo.loginId);
if (CHAT_UTIL.isAndroid()) {
$(".pip_indicator").addClass("none");
android.finishPip();
} else {
webkit.messageHandlers.finishPipMode.postMessage({});
}
}
if (CHAT_UTIL.isAndroid()) {
android.setHostRequestFlg(HostRequestFlag.DOING);
} else {
webkit.messageHandlers.setHostRequestFlg.postMessage(
HostRequestFlag.DOING
);
}
await new Promise(done => setTimeout(() => done(), 500));
if (g_isMainMan) {
if (
confirm(
getLocalizedString(
"norify_request_host_change",
data.payload.hostId
)
)
) {
Coview_changeHost(getFermiLoginId(data.payload.hostId));
if (CHAT_UTIL.isAndroid()) {
android.setHostRequestFlg(HostRequestFlag.DONE);
} else {
webkit.messageHandlers.setHostRequestFlg.postMessage(
HostRequestFlag.DONE
);
}
} else {
fw.sendToMsg("others", "HOST_REQUEST_REJECT", {
hostId: data.payload.hostId,
});
}
fw.sendToMsg("others", "HOST_REQUEST_DONE", {
hostId: data.payload.hostId,
});
}
} else if (data.type === "HOST_REQUEST_DONE") {
if (CHAT_UTIL.isAndroid()) {
android.setHostRequestFlg(HostRequestFlag.DONE);
} else {
webkit.messageHandlers.setHostRequestFlg.postMessage(
HostRequestFlag.DONE
);
}
} else if (data.type === "HOST_REQUEST_REJECT") {
if (data.payload.hostId == CHAT.globalLoginParameter.loginId) {
alert("REJECT for owner user");
}
if (CHAT_UTIL.isAndroid()) {
android.setHostRequestFlg(HostRequestFlag.DONE);
} else {
webkit.messageHandlers.setHostRequestFlg.postMessage(
HostRequestFlag.DONE
);
}
} else if (data.type === "GET_COLLABORATION_TYPE" && g_isMainMan) {
fw.sendToMsg("others", "GET_COLLABORATION_TYPE_RESPONSE", {
loginId: data.payload.loginId,
collaborationType: joinCollaborationType,
newMeetingId: joinMeetingId,
});
} else if (data.type === "GET_COLLABORATION_TYPE_RESPONSE") {
console.log(data.payload.newMeetingId);
if (data.payload.loginId == globalUserInfo.loginId) {
if (
CHAT_UTIL.isAndroid() &&
data.payload.collaborationType == COLLABORATION_TYPE.DOCUMENT &&
androidVersion < ANDROID_SDK_VERSION.O
) {
coview_api.HeartBeatUser(globalUserInfo.loginId);
alert(getLocalizedString("not_support_version"));
joinCollaborationType = COLLABORATION_TYPE.CAMERA;
} else {
joinCollaborationType = data.payload.collaborationType;
}
joinMeetingId = data.payload.newMeetingId;
initCollaborationUI(joinCollaborationType);
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.joinChangedCollaboration.postMessage({
joinCollaborationType: joinCollaborationType,
meetingId: data.payload.newMeetingId,
});
if (joinCollaborationType == COLLABORATION_TYPE.DOCUMENT) {
webkit.messageHandlers.joinMeetingRoom.postMessage(
data.payload.newMeetingId
);
}
} else if (CHAT_UTIL.isAndroid()) {
android.joinChangedCollaboration(
joinCollaborationType,
data.payload.newMeetingId
);
if (joinCollaborationType == COLLABORATION_TYPE.DOCUMENT) {
android.joinMeetingRoom(data.payload.newMeetingId);
}
}
}
} else if (data.type === "API_WELCOME") {
if (collaborationJoinFlg == "2") {
fw.sendToMsg("others", "GET_COLLABORATION_TYPE", {
loginId: globalUserInfo.loginId,
});
collaborationJoinFlg = "1";
isInvited = InvitedFlag.INVITED;
}
}
});
});
coview_api.addEventListener("start", function () {
console.log("=============> START : share start");
scrollLockON();
$("#loadingIndicator").removeClass("full_active");
});
coview_api.addEventListener("allbye", function () {
requestCollaborationFinish();
var isDocument = false;
if (joinCollaborationType == COLLABORATION_TYPE.DOCUMENT) {
isDocument = true;
}
if (CHAT_UTIL.isAndroid()) {
android.setExitHostAlert();
}
if (isDocument) {
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.exitMeetingRoom.postMessage({});
} else if (CHAT_UTIL.isAndroid()) {
android.exitMeetingRoom();
}
}
if (isInvited == InvitedFlag.NONE) {
CHAT_UI.joinRoom(
CHAT.globalLoginParameter.roomId,
CHAT.globalLoginParameter.name
);
} else {
if (typeof android != "undefined") {
android.openCommunicationHome();
} else {
webkit.messageHandlers.openCommunicationHome.postMessage({});
}
}
console.log("=============> HOST BYE : share hostbye");
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.showExitHostAlert.postMessage({});
return;
}
$("#loadingIndicator").removeClass("full_active");
});
coview_api.addEventListener("guestbye", function () {
console.log("=============> GUEST BYE : share guestbye");
$("#loadingIndicator").removeClass("full_active");
});
coview_api.addEventListener("destroy", function () {
requestCollaborationFinish();
console.log("=============> DESTROY : share destroy");
alert(getLocalizedString("inform_exit_host_collaboration"));
var isDocument = false;
if (joinCollaborationType == COLLABORATION_TYPE.DOCUMENT) {
isDocument = true;
}
Coview_exitCollaboration(isDocument);
$("#loadingIndicator").removeClass("full_active");
});
var meetingId;
coview_api.addEventListener("message", async function (event, json) {
console.log("+++ addEventListener", json);
console.log("processMessage api = ", json.api);
if (isLeaved) return;
let loginIdList = new Array();
switch (json.api) {
case "LoginResponse":
if (globalUserInfo.coWorkType == CollaborationTypeKey.DOCUMENT) {
isDocument = true;
globalUserInfo.coWorkType = CollaborationTypeKey.AUDIO;
}
if (globalUserInfo.coWorkType == CollaborationTypeKey.BOARD) {
isBoard = true;
globalUserInfo.coWorkType = CollaborationTypeKey.AUDIO;
}
hostSearchInterval();
if (collaborationJoinFlg == "1") {
coview_api.JoinRoom(globalUserInfo.roomId, globalUserInfo.coWorkType);
if (isDocument) {
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.startContentView.postMessage({});
} else if (CHAT_UTIL.isAndroid()) {
android.startContentView();
}
}
} else if (collaborationJoinFlg == "0") {
let deleteRoomResult = JSON.parse(await deleteRoomApi(globalUserInfo.roomId));
if (deleteRoomResult.resultCode == 200) {
await new Promise(done => setTimeout(() => done(), 3000));
}
coview_api.CreateRoom(
globalUserInfo.roomId,
globalUserInfo.coWorkType
);
if (isDocument) {
if (CHAT_UTIL.isIOS()) {
meetingId = CHAT_DB.createContentView();
} else if (CHAT_UTIL.isAndroid()) {
meetingId = android.createContentView();
}
joinMeetingId = meetingId;
}
} else if (collaborationJoinFlg == "2") {
isInvited = InvitedFlag.INVITED;
coview_api.JoinRoom(globalUserInfo.roomId, globalUserInfo.coWorkType);
}
Coview_moveToVideoShareArea();
break;
case "CreateRoomResponse":
if (json.resultCode == 200) {
var coviewInviteMessage;
if (isDocument) {
coviewInviteMessage =
"" +
messageSeperator +
MessageType.COMMUNICATIONSTART +
messageSeperator +
CHAT_UTIL.getCollaborationType(CollaborationTypeKey.DOCUMENT) +
messageSeperator +
meetingId;
} else if (isBoard) {
coviewInviteMessage =
"" +
messageSeperator +
MessageType.COMMUNICATIONSTART +
messageSeperator +
COLLABORATION_TYPE.BOARD;
} else {
coviewInviteMessage =
"" +
messageSeperator +
MessageType.COMMUNICATIONSTART +
messageSeperator +
CHAT_UTIL.getCollaborationType(globalUserInfo.coWorkType);
}
socket.emit(
"createMessage",
{
text: coviewInviteMessage,
},
0
);
} else {
}
break;
case "joinRoomInfoResponse":
if (json.resultCode == 200) {
} else {
alert(getLocalizedString("not_exist_sharing_call"));
coview_api.LeaveRoom();
$(".coview_share_area").hide();
$("#loadingIndicator").removeClass("full_active");
CHAT_UI.joinRoom(
CHAT.globalLoginParameter.roomId,
CHAT.globalLoginParameter.name
);
}
break;
case "JoinRoomResponse":
if (json.resultCode == 200) {
hostSearchInterval();
for (let key in g_participants) {
loginIdList.push(key);
}
CHAT_UI.refreshJoinedCollaboration(loginIdList);
} else {
}
break;
case "RoomMemberJoinedEvent":
for (let key in g_participants) {
loginIdList.push(key);
}
CHAT_UI.refreshJoinedCollaboration(loginIdList);
break;
case "RoomMemberLeavedEvent":
for (let key in g_participants) {
loginIdList.push(key);
}
CHAT_UI.refreshJoinedCollaboration(loginIdList);
break;
case "HostRequest":
// to be called by
// wc_api.dispatchEvent (new Event ("message"), {"HostRequest":"userID"});
console.log("consoleLog", json);
break;
case "fileChange":
if (joinCollaborationType != COLLABORATION_TYPE.CAMERA) {
break;
}
LoadMobileShareFile(json.fileName);
backgroundFileName = json.fileName;
console.log("fileChange", json);
break;
case "ReceiveMediaResponse":
if (isBoard && g_isMainMan) {
wc_api.dispatchEvent(new Event("message"), {
api: "fileChange",
fileName: backgroundFileName,
});
}
break;
default:
console.log("Unrecognized api", json);
break;
}
});
});
function Coview_shareDropdownHide() {
$(".coview_share_dropdown_bar").slideUp();
$(".coview_share_photo_select_bubble").slideUp();
}
function Coview_moveToVideoShareArea() {
$("#loadingIndicator").addClass("full_active");
$(".coview_share_area").show();
$("#collabo_main").removeClass("none");
}
function Coview_moveToAudioShareArea() {
$(".coview_share_area").addClass("none");
$("#collabo_main").removeClass("none");
$(".talking_area").removeClass("none");
}
function changeCollaboration(changeCollaborationType) {
recordStop(function () {
var newMeetingId = 0;
if (joinCollaborationType == COLLABORATION_TYPE.DOCUMENT) {
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.exitMeetingRoom.postMessage({});
} else if (CHAT_UTIL.isAndroid()) {
android.exitMeetingRoom();
}
}
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.setJoinCollaborationType.postMessage(
changeCollaborationType
);
} else if (CHAT_UTIL.isAndroid()) {
if (
changeCollaborationType == COLLABORATION_TYPE.DOCUMENT &&
androidVersion < ANDROID_SDK_VERSION.O
) {
alert(getLocalizedString("not_support_version"));
return;
}
android.setJoinCollaborationType(changeCollaborationType);
}
joinCollaborationType = changeCollaborationType;
initCollaborationUI(changeCollaborationType);
switch (changeCollaborationType) {
case COLLABORATION_TYPE.AUDIO:
coview_api.ChangeCollaboration("audio");
break;
case COLLABORATION_TYPE.CAMERA:
removeOldLocalVideo(g_localStream);
coview_api.ChangeCollaboration("image");
break;
case COLLABORATION_TYPE.VIDEO:
coview_api.ChangeCollaboration("video");
break;
case COLLABORATION_TYPE.DOCUMENT:
coview_api.ChangeCollaboration("audio");
if (CHAT_UTIL.isIOS()) {
newMeetingId = CHAT_DB.createContentView();
} else if (CHAT_UTIL.isAndroid()) {
newMeetingId = android.createContentView();
console.log("newMeetingId = " + newMeetingId);
}
break;
case COLLABORATION_TYPE.BOARD:
coview_api.ChangeCollaboration("audio");
break;
}
if ($("#micBtn .voice").hasClass("disable")) {
micOff();
} else {
micOn();
}
penOff();
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.changeCollaboration.postMessage({
changeCollaborationType: changeCollaborationType,
meetingId: newMeetingId,
});
} else if (CHAT_UTIL.isAndroid()) {
android.changeCollaboration(changeCollaborationType, newMeetingId);
}
joinMeetingId = newMeetingId;
fw.sendToMsg("others", "CHANGE_COLLABORATION", {
collaborationType: changeCollaborationType,
newMeetingId: newMeetingId,
});
});
}
var scrollLock = function (e) {
if (CHAT_UTIL.isIOS()) {
if (
$(e.target).closest(".add_user_modal").length > 0 ||
$(e.target).closest("#overlay_user_list").length > 0 ||
$(e.target).closest(".pip_indicator").length > 0
) {
e.stopPropagation();
} else {
e.preventDefault();
}
}
};
let collaboScreen = document.getElementById("collabo_main");
function scrollLockON() {
collaboScreen.addEventListener("touchmove", scrollLock, { passive: false });
}
function scrollLockOFF() {
collaboScreen.removeEventListener("touchmove", scrollLock, {
passive: false,
});
}
async function initCollaborationUI(changeCollaborationType) {
$("#coviewEraserCtrBtn").click();
if ($(".user_btn").hasClass("hide")) {
$(".user_btn").click();
}
if ($(".menu_btn").hasClass("hide")) {
$(".menu_btn").click();
}
if (CHAT_UTIL.isIOS) {
roomType = CHAT_DB.getRoomType();
if (roomType == ChatRoomType.DM) {
$(".add_user_btn").removeClass("none");
}
}
$("link[href='./css/collaboration_board.css']").remove();
penOff();
switch (changeCollaborationType) {
case COLLABORATION_TYPE.AUDIO:
$(".collaboration_contents").addClass("none");
$(".voice_contents").removeClass("none");
break;
case COLLABORATION_TYPE.CAMERA:
$(".collaboration_contents").addClass("none");
$(".picture_contents").removeClass("none");
break;
case COLLABORATION_TYPE.VIDEO:
$(".collaboration_contents").addClass("none");
$(".video_contents").removeClass("none");
break;
case COLLABORATION_TYPE.DOCUMENT:
$(".collaboration_contents").addClass("none");
$(".document_contents").removeClass("none");
break;
case COLLABORATION_TYPE.BOARD:
$(".collaboration_contents").addClass("none");
$(".board_contents").removeClass("none");
$("head").append(
'<link rel="stylesheet" href="./css/collaboration_board.css">'
);
break;
}
await waitMillisecond(1000);
$(".before_loading_indicator").addClass("none");
}
function Coview_exitCollaboration(isDocument = false) {
scrollLockOFF();
if (g_isMainMan) {
requestCollaborationFinish();
}
if (isDocument) {
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.exitMeetingRoom.postMessage({});
} else if (CHAT_UTIL.isAndroid()) {
android.exitMeetingRoom();
}
}
if ($("#recordBtn .record").hasClass("disable")) {
recordStop(Coview_finishCollaboration);
} else {
Coview_finishCollaboration();
}
}
function Coview_finishCollaboration() {
clearInterval(timeInterval);
coview_api.LeaveRoom();
if (coview_api.getRoomUsers()) {
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.finishCollaboration.postMessage({});
} else if (CHAT_UTIL.isAndroid()) {
android.finishCollaboration();
}
}
isLeaved = true;
if (isInvited == InvitedFlag.NONE) {
CHAT_UI.joinRoom(
CHAT.globalLoginParameter.roomId,
CHAT.globalLoginParameter.name
);
} else {
if (typeof android != "undefined") {
android.openCommunicationHome();
} else {
webkit.messageHandlers.openCommunicationHome.postMessage({});
}
}
}
function Coview_changeHost(userId) {
console.log("Change Host To " + userId);
changeOwnerSend(userId);
}
function Coview_addLoginId(loginId) {
console.log("addUser loginId = " + loginId);
var url = "https://biztaskyell.abookcloud.com/auth/getuser";
$.ajax({
url: url,
method: "post",
data: {
id: loginId,
},
success: function (result) {
console.log("result", result);
if (result.statusCode != 200) {
coview_api.addUser(loginId);
}
},
error: function (err) {
console.log(err.toString());
},
});
}
function applyForHostChange() {
if (
joinCollaborationType == COLLABORATION_TYPE.DOCUMENT &&
androidVersion < ANDROID_SDK_VERSION.O &&
CHAT_UTIL.isAndroid()
) {
alert(getLocalizedString("not_support_version"));
return;
}
var hostRequestFlg = 0;
if (CHAT_UTIL.isAndroid()) {
hostRequestFlg = android.getHostRequestFlg();
} else {
hostRequestFlg = CHAT_DB.getHostRequestFlg();
}
if (hostRequestFlg == HostRequestFlag.DOING) {
alert(getLocalizedString("already_processing_host_request"));
return;
}
if (CHAT_UTIL.isAndroid()) {
android.setHostRequestFlg(HostRequestFlag.DOING);
} else {
webkit.messageHandlers.setHostRequestFlg.postMessage(HostRequestFlag.DOING);
}
fw.sendToMsg("others", "CHANGE_HOST_APPLY", {
hostId: CHAT.globalLoginParameter.loginId,
});
}
function Coview_connect_audio_collaboration() {
globalUserInfo.coWorkType = CollaborationTypeKey.AUDIO;
coview_api.deleteRoom(globalUserInfo.roomId);
coview_api.CreateRoom(globalUserInfo.roomId, globalUserInfo.coWorkType);
Coview_moveToVideoShareArea();
Coview_moveToAudioShareArea();
$(".coview_share_title_name").text("音声通話");
}
function hostSearchInterval() {
let hostName = "";
function hostSearch() {
if (g_isMainMan) {
$("#collaboration_user_" + CHAT.globalLoginParameter.loginId).addClass(
"host"
);
$(".host_contents").removeClass("none");
if (joinCollaborationType == COLLABORATION_TYPE.CAMERA) {
$(".photo_select_button").removeClass("none");
}
if (joinCollaborationType == COLLABORATION_TYPE.VIDEO) {
$(".video_contents_host").removeClass("none");
$(".video_contents_user").addClass("none");
}
if (CHAT_UTIL.isIOS()) isIos = true;
} else {
$("#collaboration_user_" + CHAT.globalLoginParameter.loginId).removeClass(
"host"
);
$(".host_contents").addClass("none");
if (joinCollaborationType == COLLABORATION_TYPE.CAMERA) {
$(".photo_select_button").addClass("none");
}
if (joinCollaborationType == COLLABORATION_TYPE.VIDEO) {
$(".video_contents_user").removeClass("none");
$(".video_contents_host").addClass("none");
}
}
if (hostName != g_isMainManUsername) {
if (hostName != "") {
$("#collaboration_user_" + getReplacedLoginId(hostName)).removeClass(
"host"
);
}
$(
"#collaboration_user_" + getReplacedLoginId(g_isMainManUsername)
).addClass("host");
hostName = g_isMainManUsername;
} else {
if (hostName == "") {
if (
!$(
"#collaboration_user_" + CHAT.globalLoginParameter.loginId
).hasClass("host") &&
coview_api.getRoomUsers()
) {
$(
"#collaboration_user_" + CHAT.globalLoginParameter.loginId
).addClass("host");
}
} else {
if (
!$("#collaboration_user_" + getReplacedLoginId(hostName)).hasClass(
"host"
)
) {
$("#collaboration_user_" + getReplacedLoginId(hostName)).addClass(
"host"
);
}
}
}
}
timeInterval = setInterval(hostSearch, 2000);
}
function hostChangeRequest(loginId) {
fw.sendToMsg("others", "HOST_CHANGE_REQUEST", {
loginId: getFermiLoginId(loginId),
});
}
function getFermiLoginId(loginId) {
return globalUserInfo.shopName + "_" + loginId;
}
function getReplacedLoginId(loginId) {
return loginId.replaceAll(globalUserInfo.shopName + "_", "");
}
function captureAndShareImage(urls, changeHostName) {
addCaptureEffect();
$(this).removeClass("on");
var w, h;
var video = document.getElementById("localVideo");
var canvas = document.createElement("canvas");
if (clientOrientaionState == 1) {
canvas.width = w = 680;
canvas.height = h = 515;
} else {
canvas.width = w = 386;
canvas.height = h = 515;
}
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
ctx.drawImage(video, 0, 0, w, h);
ctx.drawImage(document.getElementById("canvasRemote"), 0, 0, w, h);
}
canvas.toBlob(function (blob) {
var newImg = document.createElement("img");
var url = URL.createObjectURL(blob);
canvasRemote.style.backgroundImage =
"url('" + URL.createObjectURL(blob) + "')";
canvasRemote.style.backgroundSize = "contain";
$(canvasRemote).attr(
"height",
$(snapshots[cpatureViewIndex]).attr("height")
);
$(canvasRemote).attr("width", $(snapshots[cpatureViewIndex]).attr("width"));
console.log("url", URL.createObjectURL(blob));
if (
$(".canvas_wrap").css("width").replace("px", "") /
$(".canvas_wrap").css("height").replace("px", "") <
$(canvas).attr("width") / $(canvas).attr("height")
) {
var h =
$(".canvas_wrap").css("width").replace("px", "") *
($(canvas).attr("height") / $(canvas).attr("width"));
var w = $(".canvas_wrap").css("width").replace("px", "");
$(canvasRemote).css("height", h);
$(canvasRemote).css("width", w);
$(canvasRemote).css("margin-top", -h / 2);
$(canvasRemote).css("margin-left", -w / 2);
} else {
var h = $(".canvas_wrap").css("height").replace("px", "");
var w =
$(".canvas_wrap").css("height").replace("px", "") /
($(canvas).attr("height") / $(canvas).attr("width"));
$(canvasRemote).css("height", h);
$(canvasRemote).css("width", w);
$(canvasRemote).css("margin-top", -h / 2);
$(canvasRemote).css("margin-left", -w / 2);
}
$(".canvas_wrap").css("background-color", "#000");
$(".clear_img").show();
SetShareMenuState("on");
WithImageShareBtnState("on");
//Fermi側にイメージ保存。
var formData = new FormData();
var uploadFileName =
"capture_share_" + g_webroom + "_" + g_shareCount + ".png";
g_shareCount++;
formData.append("imgFile", blob, uploadFileName);
var uploadUrl =
location.protocol +
"//" +
location.hostname +
":" +
location.port +
"/upload/create";
if (!location.port) {
uploadUrl =
location.protocol + "//" + location.hostname + "/upload/create";
}
$.ajax({
type: "post",
url: g_coviewapiserverADDR + "/upload/create",
data: formData,
processData: false,
contentType: false,
success: function (res) {
setTimeout(function () {
SendFileShare(uploadFileName);
$("#coviewCaptureCtrBtn").hide();
$("#coviewRecCtrBtn").hide();
$(".coview_share_title_name").text("LIVE(CAPTURE IMAGE)");
$(".coview_on_media_btn_back").show();
//アーカイブ保存。
ArchiveFileManage(blob, uploadFileName, urls);
}, 1500);
},
error: function (err) {
console.log(err);
},
});
});
}
function toolToggle(){
if($("#collabo_footer_menu").hasClass('hide')){
$("#collabo_footer_menu").removeClass('hide');
}else{
$("#collabo_footer_menu").addClass('hide');
}
}
function micOn() {
coview_api.MicMuteControl("off");
$("#micBtn .voice").removeClass("disable");
}
function micOff() {
coview_api.MicMuteControl("on");
$("#micBtn .voice").addClass("disable");
}
function micTogle() {
if ($("#micBtn .voice").hasClass("disable")) {
micOn();
} else {
micOff();
}
}
function recordStart() {
console.log("レコードを開始しました");
MainManRecord("on");
$("#recordBtn .record").addClass("disable");
$('.flash-txt').addClass('on');
}
function recordFinished() {
$("#recordBtn .record").removeClass("disable");
$('.flash-txt').removeClass('on');
// ロック画面の削除
delete_dom_obj("screenLock");
}
function recordTogle() {
if (!$("#recordBtn .record").hasClass("disable")) {
recordStart();
} else {
recordStop(function () {
console.log("レコードを終了しました");
});
}
}
function recordStop(callback) {
if (!$("#recordBtn .record").hasClass("disable")) {
callback();
return;
}
CHAT_UI.showLoadingIndicator();
// アーカイブ保存中は画面操作不可(協業終了,協業切り替え防止)
screenLock();
// アーカイブ保存処理
MainManRecordWithCollaboration(
"stop",
CMS_SERVER_URL + "/chatapi/file/uploadArchive",
callback
);
}
function MainManRecordWithCollaboration(action, url, callback) {
try {
mediaRecorder.stop();
} catch(exeption) {
console.log("Record fail");
callback();
}
console.log("Recorded Blobs: ", recordedBlobs);
setTimeout(function () {
console.log("Recoding File upload..");
const blob = new Blob(recordedBlobs, { type: "video/webm" });
console.log(blob);
var uploadFileName = "record_" + g_webroom + "_" + g_shareCount + ".webm";
g_shareCount++;
var formData = new FormData();
formData.append("fileData", blob, uploadFileName);
formData.append("sid", globalUserInfo.sid);
formData.append("roomId", globalUserInfo.roomId);
if (joinCollaborationType == COLLABORATION_TYPE.VIDEO) {
formData.append("archiveType", 1);
} else {
formData.append("archiveType", 2);
}
console.log(uploadFileName);
$.ajax({
type: "post",
url,
data: formData,
contentType: false,
processData: false,
success: function (res) {
recordFinished();
CHAT_UI.dismissLoadingIndicator();
console.log(res);
callback();
},
error: function (err) {
recordFinished();
CHAT_UI.dismissLoadingIndicator();
console.log(err);
callback();
},
});
}, 1000);
}
function screenLock() {
// ロック用のdivを生成
var element = document.createElement("div");
element.id = "screenLock";
// ロック用のスタイル
element.style.height = "100%";
element.style.left = "0px";
element.style.position = "fixed";
element.style.top = "0px";
element.style.width = "100%";
element.style.zIndex = "9999";
element.style.opacity = "0";
var objBody = document.getElementsByTagName("body").item(0);
objBody.appendChild(element);
}
// div削除関数
function delete_dom_obj(id_name) {
var dom_obj = document.getElementById(id_name);
var dom_obj_parent = dom_obj.parentNode;
dom_obj_parent.removeChild(dom_obj);
}
function requestCollaborationFinish() {
if (socket != null && socket.connected) {
socket.emit(
"createMessage",
{
text: DATA_MESSAGE_SCHEME + FINISH_ALL_COLLABORATION_SIGNAL,
},
0
);
}
}
async function waitMillisecond(millesecond) {
await new Promise(done => setTimeout(() => done(), millesecond));
}
function penToggle() {
$("#coviewPenCtrBtn").click();
if ($("#penBtn .pen").hasClass("disable")) {
$("#penBtn .pen").removeClass("disable");
} else {
$("#penBtn .pen").addClass("disable");
}
}
function photo_open_place_holderToggle() {
$("#open_file_upload").trigger("click");
}
function eraserToggle() {
$("#coviewEraserCtrBtn").click();
}
function captureToggle() {
if ($("#recordBtn").hasClass("bg_red")) {
screenLock();
recordStop(function () {
$("#screenLock").remove();
coview_api.Capture(CMS_SERVER_URL + "/chatapi/file/uploadArchive");
});
} else {
coview_api.Capture(CMS_SERVER_URL + "/chatapi/file/uploadArchive");
}
}
function captureRequestToggle() {
fw.sendToMsg("others", "CAPTURE_REQUEST", {
name: CHAT.globalLoginParameter.loginId,
});
}
\ No newline at end of file
var bindOnNewMessage = function () { var bindOnNewMessage = function () {
// New Message // New Message
// #36170 // #36170
socket.on(SOCKET_KEY.NEW_MESSAGE, function (message, roomId, roomName) { socket.on(SOCKET_KEY.NEW_MESSAGE, function (message, roomID, roomName) {
console.log(message);
const systemMessageTemplate = getTemplate(TemplateURL.SYSTEM_MESSAGE); const systemMessageTemplate = getTemplate(TemplateURL.SYSTEM_MESSAGE);
const unwrappedMessageInfo = decodeMessage(message.text); const unwrappedMessageInfo = decodeMessage(message.text);
...@@ -35,10 +34,12 @@ var bindOnNewMessage = function () { ...@@ -35,10 +34,12 @@ var bindOnNewMessage = function () {
} }
} }
// 画像、動画の描画を待ってからスクロール if (typeof ChatRoom !== "undefined") {
setTimeout(function () { // 画像、動画の描画を待ってからスクロール
CHAT_UI.scrollToBottom(); setTimeout(function () {
}, 300); ChatRoom.scrollToBottom();
}, 300);
}
}); });
}; };
...@@ -57,12 +58,14 @@ var addCollaborationMessage = function ( ...@@ -57,12 +58,14 @@ var addCollaborationMessage = function (
insertDate, insertDate,
createdAt createdAt
) { ) {
const collaborationType = messageInfo[2]; const collaborationType = CHAT_UTIL.getCollaborationType(messageInfo[2]);
const meetingID = getMeetingID(collaborationType, messageInfo); const meetingID = getMeetingID(collaborationType, messageInfo);
const userInCollaboration = getUserInfoList(userID); const userInCollaboration = JSON.parse(
NativeBridgeDataSource.getUserInfoList(userID)
);
userInCollaboration.forEach(function (user) { userInCollaboration.forEach(function (user) {
user.profileUrl = CHAT.getProfileImgUrl(user.profileUrl); user.profileUrl = Common.getProfileImgUrl(user.profileUrl);
}); });
const openCollaborationMessageTemplate = getTemplate( const openCollaborationMessageTemplate = getTemplate(
...@@ -83,10 +86,7 @@ var addCollaborationMessage = function ( ...@@ -83,10 +86,7 @@ var addCollaborationMessage = function (
}; };
var getMeetingID = function (collaborationType, messageInfo) { var getMeetingID = function (collaborationType, messageInfo) {
if ( if (collaborationType == COLLABORATION_TYPE.DOCUMENT) {
collaborationType ==
CHAT_UTIL.getCollaborationType(CollaborationTypeKey.DOCUMENT)
) {
return messageInfo[3]; return messageInfo[3];
} else { } else {
return 0; return 0;
...@@ -120,10 +120,12 @@ var renderCollaborationMessage = function ( ...@@ -120,10 +120,12 @@ var renderCollaborationMessage = function (
var addTextMessage = function (messageText, message, socketID) { var addTextMessage = function (messageText, message, socketID) {
const messageTextWithSID = insertSID(messageText); const messageTextWithSID = insertSID(messageText);
const messageSender = getUserInfoList(message.userId); const messageSender = JSON.parse(
NativeBridgeDataSource.getUserInfoList(message.userId)
);
const shopMemberName = messageSender[0].shopMemberName; const shopMemberName = messageSender[0].shopMemberName;
const textMessageTemplate = getTextMessageTemplate(message.id === socketID); const textMessageTemplate = getTextMessageTemplate(message.id === socketID);
const profileImagePath = CHAT.getProfileImgUrl(message.profileImagePath); const profileImagePath = Common.getProfileImgUrl(message.profileImagePath);
const html = renderTextMessage( const html = renderTextMessage(
textMessageTemplate, textMessageTemplate,
messageTextWithSID, messageTextWithSID,
...@@ -164,11 +166,7 @@ var renderTextMessage = function ( ...@@ -164,11 +166,7 @@ var renderTextMessage = function (
}; };
var getUserInfoList = function (userID) { var getUserInfoList = function (userID) {
if (CHAT_UTIL.isIOS()) { return JSON.parse(NativeBridgeDataSource.getUserInfoList(userID));
return JSON.parse(CHAT_DB.getUserInfoList(userID));
} else if (CHAT_UTIL.isAndroid()) {
return JSON.parse(android.getUserInfoList(userID));
}
}; };
var cleanUpCollaborationMessage = function () { var cleanUpCollaborationMessage = function () {
...@@ -189,7 +187,7 @@ var insertSID = function (text) { ...@@ -189,7 +187,7 @@ var insertSID = function (text) {
let replacePath = text; let replacePath = text;
replacePath = replacePath.replaceAll( replacePath = replacePath.replaceAll(
"?fileName=", "?fileName=",
"?sid=" + CHAT.globalLoginParameter.sid + "&fileName=" "?sid=" + currentUserInfo.sid + "&fileName="
); );
return replacePath; return replacePath;
}; };
......
...@@ -3,10 +3,6 @@ var socket; ...@@ -3,10 +3,6 @@ var socket;
// 名前空間 // 名前空間
var CHAT_SOCKET = {}; var CHAT_SOCKET = {};
includeJs("./js/chat-websocket-message.js");
includeJs("./js/chat-websocket-refresh-group-list.js");
includeJs("./js/chat-websocket-refresh-user-list-in-group.js");
CHAT_SOCKET.socketCheck = function () { CHAT_SOCKET.socketCheck = function () {
if (socket == null || socket.disconnected) { if (socket == null || socket.disconnected) {
window.location.reload(); window.location.reload();
...@@ -14,14 +10,14 @@ CHAT_SOCKET.socketCheck = function () { ...@@ -14,14 +10,14 @@ CHAT_SOCKET.socketCheck = function () {
}; };
CHAT_SOCKET.connectSocket = function () { CHAT_SOCKET.connectSocket = function () {
if (IS_ONLINE == "true") { if (serverInfo.isOnline == "true") {
socket = io(CHAT_SERVER_URL); socket = io(serverInfo.chatURL);
setSocketAction(); setSocketAction();
} else { } else {
//オフラインの場合、DBからルーム一覧を表示。 //オフラインの場合、DBからルーム一覧を表示。
if (CHAT_UTIL.isIOS()) { if (deviceInfo.isiOS()) {
//TODO IOSの場合 //TODO IOSの場合
} else if (CHAT_UTIL.isAndroid()) { } else if (deviceInfo.isAndroid()) {
} }
} }
}; };
...@@ -53,33 +49,20 @@ var bindOnConnect = function () { ...@@ -53,33 +49,20 @@ var bindOnConnect = function () {
socket.on(SOCKET_KEY.CONNECT, function () { socket.on(SOCKET_KEY.CONNECT, function () {
// socketが接続されたらチャット画面で画面を更新する // socketが接続されたらチャット画面で画面を更新する
$(".overlay").removeClass("active undismissable"); $(".overlay").removeClass("active undismissable");
// loadingIndicatorを表示
CHAT_UI.showLoadingIndicator();
requestLoginInfo();
CHAT_UI.dismissLoadingIndicator();
}); });
}; };
var requestLoginInfo = function () {
// チャットルームに入場する際、sid, loginId, shopName, roomId, roomNameの情報を取得しNodeJsに渡す
if (CHAT_UTIL.isIOS()) {
webkit.messageHandlers.loginInfoRequestMessageHandlerId.postMessage({});
} else if (CHAT_UTIL.isAndroid()) {
android.getLoginParameter();
}
};
var bindOnDisconnect = function () { var bindOnDisconnect = function () {
socket.on(SOCKET_KEY.DISCONNECT, function () { socket.on(SOCKET_KEY.DISCONNECT, function () {
//socketが切断されたら黒画面で画面を更新する //socketが切断されたら黒画面で画面を更新する
$(".overlay").addClass("active undismissable"); $(".overlay").addClass("active undismissable");
CHAT_UI.dismissLoadingIndicator(); Common.dismissLoadingIndicator();
}); });
}; };
var bindOnConnectError = function () { var bindOnConnectError = function () {
socket.on(SOCKET_KEY.CONNECT_ERROR, function () { socket.on(SOCKET_KEY.CONNECT_ERROR, function () {
CHAT_UI.dismissLoadingIndicator(); Common.dismissLoadingIndicator();
}); });
}; };
...@@ -97,6 +80,24 @@ var bindOnNewNotification = function () { ...@@ -97,6 +80,24 @@ var bindOnNewNotification = function () {
}); });
}; };
var bindOnRefreshGroupList = function () {
// Update Group List(Invite)
socket.on(SOCKET_KEY.REFRESH_GROUPLIST, function (groups, isInvite) {
const groupListElement = $("#group_list");
groupListElement.html("");
if (groups.length === 0) {
groupListElement.append(
'<center class="text-secondary">' +
getLocalizedString(everyoneIsHere) +
"</center>"
);
}
$("#newRoomName").hide();
});
};
var bindOnShowServerError = function () { var bindOnShowServerError = function () {
socket.on(SOCKET_KEY.SHOW_SERVER_ERROR, function (message) { socket.on(SOCKET_KEY.SHOW_SERVER_ERROR, function (message) {
// #36215 // #36215
...@@ -120,41 +121,42 @@ var bindOnShowServerError = function () { ...@@ -120,41 +121,42 @@ var bindOnShowServerError = function () {
keyboard: false, keyboard: false,
}) })
.on("click", "#customAlertOk", function (e) {}); .on("click", "#customAlertOk", function (e) {});
CHAT_UI.dismissLoadingIndicator(); Common.dismissLoadingIndicator();
if (message == "Room not found") { if (message == "Room not found") {
CHAT.saveRoomInfo(); CHAT_SOCKET.saveRoomInfo();
} }
}); });
}; };
var bindOnRetryJoinProcess = function () { var bindOnRetryJoinProcess = function () {
socket.on(SOCKET_KEY.RETRY_JOIN_PROCESS, function () { socket.on(SOCKET_KEY.RETRY_JOIN_PROCESS, function () {
var ua = window.navigator.userAgent.toLowerCase(); currentUserInfo.configureLanguage();
if (CHAT_UTIL.isIOS()) { // webでのsocket connect
webkit.messageHandlers.loginInfoRequestMessageHandlerId.postMessage({}); CHAT_SOCKET.emitJoin(params, true, true);
} else if (CHAT_UTIL.isAndroid()) {
android.getLoginParameter();
} else {
CHAT_UI.htmlElementTextInitialize("ko");
// webでのsocket connect
emitJoin();
}
}); });
}; };
var emitJoin = function () { CHAT_SOCKET.emitJoin = function (
socket.emit(SOCKET_KEY.JOIN, params, function (err) { joinInfo,
needsDismissLoadingIndicator,
needsHandlingError
) {
socket.emit(SOCKET_KEY.JOIN, joinInfo, function (err) {
if (err) { if (err) {
errorHandlingForEmitJoin(); if (needsHandlingError) {
CHAT_UI.dismissLoadingIndicator(); errorHandlingForEmitJoin();
}
if (needsDismissLoadingIndicator) {
Common.dismissLoadingIndicator();
}
return; return;
} }
updateRoomName(params.roomName); if (needsDismissLoadingIndicator) {
// loadingIndicatorを表示しない
// loadingIndicatorを表示しない Common.dismissLoadingIndicator();
CHAT_UI.dismissLoadingIndicator(); }
}); });
}; };
...@@ -173,12 +175,54 @@ var errorHandlingForEmitJoin = function () { ...@@ -173,12 +175,54 @@ var errorHandlingForEmitJoin = function () {
.on("click", "#customAlertOk", function (e) {}); .on("click", "#customAlertOk", function (e) {});
}; };
var updateRoomName = function (roomName) { var bindOnRefreshUserListInGroup = function () {
const titleRoomName = $(".titleRoomName"); // Update User List(Invite)
if (roomName != undefined) { // #36170
titleRoomName.text(roomName).data("roomName", roomName); socket.on(
} else { SOCKET_KEY.REFRESH_USERLIST_INGROUP,
let roomListTitle = getLocalizedString("roomListTitle"); function (users, groupId, isInvite) {
titleRoomName.text(roomListTitle); console.debug(
SOCKET_KEY.REFRESH_USERLIST_INGROUP +
"message received but it does nothing."
);
}
);
};
CHAT_SOCKET.emitCreateMessage = function (sendData, offset) {
socket.emit(SOCKET_KEY.CREATE_MESSAGE, { text: sendData }, offset);
};
CHAT_SOCKET.emitCollaborationFinishMessage = function () {
if (socket != null && socket.connected) {
const sendData = DATA_MESSAGE_SCHEME + FINISH_ALL_COLLABORATION_SIGNAL;
CHAT_SOCKET.emitCreateMessage(sendData, 0);
} }
}
CHAT_SOCKET.emitGetGroupList = function (isInvite) {
socket.emit(SOCKET_KEY.GET_GROUP_LIST, isInvite);
};
CHAT_SOCKET.emitLeaveRoom = function () {
socket.emit(SOCKET_KEY.LEAVE_ROOM, function () {});
};
CHAT_SOCKET.saveRoomInfo = function (roomID, roomName) {
roomInfo.roomID = roomID;
roomInfo.roomName = roomName;
NativeBridgeDelegate.saveVisitRoomInfo(roomID, roomName);
};
CHAT_SOCKET.initialJoin = function () {
CHAT_SOCKET.connectSocket();
const joinInfo = new JoinInfo(
currentUserInfo.sid,
currentUserInfo.loginID,
currentUserInfo.shopName,
roomInfo.roomID,
roomInfo.roomName,
currentUserInfo.shopMemberID
);
CHAT_SOCKET.emitJoin(joinInfo, false, false);
}; };
var ChatMediaHandler = {};
/**
* Image Upload
**/
// 写真アップロード
$("#imageInputButton").on("click", function () {
$("#imageInputTag").click();
});
$("#imageInputTag").on("change", function () {
$("#image-form").submit();
// reset the value of form
$("#imageInputTag").val("");
});
$("#image-form").on("submit", function (e) {
e.preventDefault();
const imageInputTag = $("#imageInputTag");
const file = imageInputTag.prop("files")[0];
if (file) {
$(".overlay").addClass("active undismissable");
$(".loader").addClass("active");
Common.showLoadingIndicator();
let fd = new FormData($(this)[0]);
//画像の大きさが500pixelより大きかったら、thumbnailを生成
ChatMediaHandler.createThumbnailAndUpload(
file,
function (resizeFile, thumbnailCreated) {
if (resizeFile && thumbnailCreated) {
//ただ、画像の大きさが500pixel以下の場合はthumbnailは生成されない
fd.append("thumb", resizeFile);
}
// イメージをアップロード
ChatMediaHandler.uploadImage(fd);
}
);
}
});
/**
* Video Upload
**/
// 動画アップロード
$("#videoUploadButton").on("click", function () {
$("#videoInputTag").click();
});
$("#videoInputTag").on("change", function () {
$("#video-form").submit();
// reset the value of form
$("#videoInputTag").val("");
});
$("#video-form").on("submit", function (e) {
e.preventDefault();
const videoInputTag = $("#videoInputTag");
const file = videoInputTag.prop("files")[0];
if (file) {
$(".overlay").addClass("active undismissable");
$(".loader").addClass("active");
Common.showLoadingIndicator();
var fd = new FormData($(this)[0]);
if (!file.type.includes("image")) {
// video 保存
// ChatMediaHandler.createVideoThumbnailAndUpload(file, function(resizeFile, thumbnailCreated) {
// if(resizeFile && thumbnailCreated) {
// //ただ、画像の大きさが500pixel以下の場合はthumbnailは生成されない
// fd.append('thumb', resizeFile)
// }
// ChatMediaHandler.uploadImage(fd);
// })
ChatMediaHandler.uploadImage(fd);
return;
}
}
});
// this method call from android only for now
ChatMediaHandler.videoEncodeFail = function () {
alert(getLocalizedString("error_send_video"));
Common.dismissLoadingIndicator();
};
// this method call from android only for now
ChatMediaHandler.videoEncodeEnd = function (encodedUri) {
var fileName = encodedUri.split("/")[encodedUri.split("/").length - 1];
var fileURL = "file:" + encodedUri;
var xhr = new XMLHttpRequest();
xhr.open("GET", fileURL);
xhr.responseType = "blob";
xhr.addEventListener("load", function () {
var formData = new FormData();
formData.append("image", xhr.response, fileName);
formData.append("sid", currentUserInfo.sid);
formData.append("roomId", roomInfo.roomID);
jQuery
.ajax({
async: true,
url: serverInfo.cmsURL + "/chatapi/file/upload",
type: "post",
data: formData,
contentType: false,
processData: false,
error: function () {
alert(getLocalizedString("error_send_video"));
Common.dismissLoadingIndicator();
},
})
.done(function (res) {
if (deviceInfo.isAndroid()) {
android.removeEncodedVideo(encodedUri);
}
var imgPath =
serverInfo.cmsURL +
"/chatapi/file/getImage?fileName=" +
res.fileName +
"&roomId=" +
roomInfo.roomID;
var imageName = res.fileName;
// uploadFileの判断
var extension = imageName
.substr(imageName.lastIndexOf(".") + 1)
.toLowerCase();
if (res.thumbnailPath && res.thumbnailPath.length > 0) {
imgPath =
serverInfo.cmsURL +
"/chatapi/file/getImage?fileName=" +
res.thumbImageFileName +
"&roomId=" +
roomInfo.roomID;
}
let downloadPath =
serverInfo.cmsURL +
"/chatapi/file/download?fileName=" +
imageName +
"&roomId=" +
roomInfo.roomID;
var videoSrc =
serverInfo.cmsURL +
"/chatapi/file/getImage?fileName=" +
res.fileName +
"&roomId=" +
roomInfo.roomID;
const totalDiv = $("<div/>", { id: "attachedImages" });
const videoTag = $("<video/>", {
controls: "true",
width: "auto",
style: "max-width:100%",
});
const source = $("<source/>", { src: videoSrc });
const downloadIcon = $("<a/>", {
href: downloadPath,
class: "fa fa-download",
download: res.fileName,
});
videoTag.append(source);
totalDiv.append(videoTag);
totalDiv.append(downloadIcon);
let text = totalDiv.prop("outerHTML");
let encodedText;
try {
encodedText = encodeURIComponent(text);
} catch (e) {
encodedText = text;
}
const sendData = encodedText + messageSeperator + MessageType.VIDEO;
CHAT_SOCKET.emitCreateMessage(sendData, 1);
$(".overlay").removeClass("active undismissable");
$(".loader").removeClass("active");
Common.dismissLoadingIndicator();
});
});
xhr.send();
};
// Video のサムネイルファイル生成する
ChatMediaHandler.createVideoThumbnailAndUpload = function (
sourceImage,
callback
) {
var fileReader = new FileReader();
fileReader.onload = function () {
var blob = new Blob([fileReader.result], { type: sourceImage.type });
var url = URL.createObjectURL(blob);
var video = document.createElement("video");
var timeupdate = function () {
if (snapImage()) {
video.removeEventListener("timeupdate", timeupdate);
video.pause();
}
};
video.addEventListener("loadeddata", function () {
if (snapImage()) {
video.removeEventListener("timeupdate", timeupdate);
}
});
var snapImage = function () {
var canvas = document.createElement("canvas");
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
canvas
.getContext("2d")
.drawImage(video, 0, 0, canvas.width, canvas.height);
fetch(canvas.toDataURL("image/jpeg"))
.then(function (res) {
return res.arrayBuffer();
})
.then(function (buf) {
// 回転された画像をFormDataに保存
const newFile = new File([buf], sourceImage.name, {
type: "image/jpeg",
});
callback(newFile, true);
// ajax End
})
.catch((error) => {
// fetch Error catch Block
if (error) {
console.error(error);
}
});
return true;
};
video.addEventListener("timeupdate", timeupdate);
video.preload = "metadata";
video.src = url;
// Load video in Safari / IE11
video.muted = true;
video.playsInline = true;
video.pause();
};
fileReader.readAsArrayBuffer(sourceImage);
};
// Ajaxでイメージをアップロードする
ChatMediaHandler.uploadImage = function (formData) {
formData.append("roomId", roomInfo.roomID);
formData.append("sid", currentUserInfo.sid);
jQuery
.ajax({
async: true,
url: serverInfo.cmsURL + "/chatapi/file/upload",
type: "post",
data: formData,
contentType: false,
processData: false,
error: function () {
alert("読み込み失敗");
Common.dismissLoadingIndicator();
},
})
.done(function (res) {
var imgPath =
serverInfo.cmsURL +
"/chatapi/file/getImage?fileName=" +
res.fileName +
"&roomId=" +
roomInfo.roomID;
var imageName = res.fileName;
// uploadFileの判断
var extension = imageName
.substr(imageName.lastIndexOf(".") + 1)
.toLowerCase();
// 画像の処理
if (
res.fileType == "jpeg" ||
res.fileType == "jpg" ||
res.fileType == "png"
) {
if (res.thumbnailPath && res.thumbnailPath.length > 0) {
imgPath =
serverInfo.cmsURL +
"/chatapi/file/getImage?fileName=" +
res.thumbImageFileName +
"&roomId=" +
roomInfo.roomID;
imageName = res.thumbImageFileName;
}
let downloadPath =
serverInfo.cmsURL +
"/chatapi/file/download?fileName=" +
imageName +
"&roomId=" +
roomInfo.roomID;
// アップロードが終了した後ローディング画面から離れてメッセージをメッセージを転送する
const lightbox = $("<a/>", {
"data-lightbox": "attachedImages",
"data-title": imageName,
});
const image = $("<img/>", {
src: imgPath,
width: "auto",
style: "max-width:100%",
"data-toggle": "modal",
onclick: "imageModal(this);",
});
const downloadIcon = $("<a/>", {
href: downloadPath,
class: "fa fa-download",
download: res.fileName,
});
lightbox.append(image);
lightbox.append(downloadIcon);
let text = lightbox.prop("outerHTML");
let encodedText;
try {
encodedText = encodeURIComponent(text);
} catch (e) {
encodedText = text;
}
const sendData = encodedText + messageSeperator + MessageType.IMAGE;
CHAT_SOCKET.emitCreateMessage(sendData, 1);
} else {
// 動画の処理
if (res.thumbnailPath && res.thumbnailPath.length > 0) {
imgPath =
serverInfo.cmsURL +
"/chatapi/file/getImage?fileName=" +
res.thumbImageFileName +
"&roomId=" +
roomInfo.roomID;
}
let downloadPath =
serverInfo.cmsURL +
"/chatapi/file/download?fileName=" +
imageName +
"&roomId=" +
roomInfo.roomID;
var videoSrc =
serverInfo.cmsURL +
"/chatapi/file/getImage?fileName=" +
res.fileName +
"&roomId=" +
roomInfo.roomID;
const totalDiv = $("<div/>", { id: "attachedImages" });
const videoTag = $("<video/>", {
controls: "true",
width: "auto",
style: "max-width:100%",
});
const source = $("<source/>", { src: videoSrc });
const downloadIcon = $("<a/>", {
href: downloadPath,
class: "fa fa-download",
download: res.fileName,
});
videoTag.append(source);
totalDiv.append(videoTag);
totalDiv.append(downloadIcon);
let text = totalDiv.prop("outerHTML");
let encodedText;
try {
encodedText = encodeURIComponent(text);
} catch (e) {
encodedText = text;
}
const sendData = encodedText + messageSeperator + MessageType.VIDEO;
CHAT_SOCKET.emitCreateMessage(sendData, 1);
}
$(".overlay").removeClass("active undismissable");
$(".loader").removeClass("active");
Common.dismissLoadingIndicator();
});
};
// Thumbnailのファイルを生成する。
ChatMediaHandler.createThumbnailAndUpload = function (sourceImage, callback) {
const fileReader = new FileReader();
const img = new Image();
fileReader.onloadend = function () {
img.src = fileReader.result;
};
img.onload = function () {
const elem = document.createElement("canvas");
var rate;
var width = img.width;
var height = img.height;
if (img.width <= 500 && img.height <= 500) {
callback(undefined, false);
return;
}
if (img.width > img.height) {
rate = 500 / img.width;
} else {
rate = 500 / img.height;
}
elem.width = width * rate;
elem.height = height * rate;
const ctx = elem.getContext("2d");
ctx.drawImage(
img,
0,
0,
img.width,
img.height,
0,
0,
elem.width,
elem.height
);
// ctx.drawImage(img, 0, 0, width, height);
fetch(elem.toDataURL("image/jpeg"))
.then(function (res) {
return res.arrayBuffer();
})
.then(function (buf) {
const newFile = new File([buf], sourceImage.name, {
type: "image/jpeg",
});
callback(newFile, true);
})
.catch((error) => {
// fetch Error catch Block
if (error) {
console.error(error);
}
});
};
fileReader.readAsDataURL(sourceImage);
};
// 名前空間 // 名前空間
var CHAT_UTIL = {}; var CHAT_UTIL = {};
CHAT_UTIL.isAndroid = function () {
return PLATFORM == "android";
};
CHAT_UTIL.isIOS = function () {
return PLATFORM == "ios";
};
CHAT_UTIL.isMobile = function () {
return IS_MOBILE == "true";
};
CHAT_UTIL.formatDate = function (date) { CHAT_UTIL.formatDate = function (date) {
const REFERENCE = moment(); const REFERENCE = moment();
const TODAY = REFERENCE.clone().startOf("day"); const TODAY = REFERENCE.clone().startOf("day");
...@@ -120,37 +108,40 @@ function updateDuration() { ...@@ -120,37 +108,40 @@ function updateDuration() {
}); });
} }
CHAT_UTIL.getCollaborationType = function (key) { CHAT_UTIL.getCollaborationType = function (collaborationNumber) {
switch (key) { switch (collaborationNumber) {
case CollaborationTypeKey.AUDIO: case COLLABORATION_TYPE_NUMBER.AUDIO: // fall through
case COLLABORATION_TYPE_NUMBER.AUDIO.toString():
return COLLABORATION_TYPE.AUDIO; return COLLABORATION_TYPE.AUDIO;
case CollaborationTypeKey.CAMERA: case COLLABORATION_TYPE_NUMBER.CAMERA:
case COLLABORATION_TYPE_NUMBER.CAMERA.toString(): // fall through
return COLLABORATION_TYPE.CAMERA; return COLLABORATION_TYPE.CAMERA;
case CollaborationTypeKey.VIDEO: case COLLABORATION_TYPE_NUMBER.VIDEO:
case COLLABORATION_TYPE_NUMBER.VIDEO.toString(): // fall through
return COLLABORATION_TYPE.VIDEO; return COLLABORATION_TYPE.VIDEO;
case CollaborationTypeKey.DOCUMENT: case COLLABORATION_TYPE_NUMBER.DOCUMENT:
case COLLABORATION_TYPE_NUMBER.DOCUMENT.toString(): // fall through
return COLLABORATION_TYPE.DOCUMENT; return COLLABORATION_TYPE.DOCUMENT;
case COLLABORATION_TYPE_NUMBER.BOARD:
case COLLABORATION_TYPE_NUMBER.BOARD.toString(): // fall through
return COLLABORATION_TYPE.BOARD;
default: default:
return 0; return 0;
} }
}; };
CHAT_UTIL.getCoviewTypeFromCollaborationType = function ( CHAT_UTIL.getCollaborationTypeNumber = function (collaborationType) {
joinCollaborationType switch (collaborationType) {
) {
switch (joinCollaborationType) {
case COLLABORATION_TYPE.AUDIO: case COLLABORATION_TYPE.AUDIO:
console.log(CollaborationTypeKey.AUDIO); return COLLABORATION_TYPE_NUMBER.AUDIO;
return CollaborationTypeKey.AUDIO;
case COLLABORATION_TYPE.CAMERA: case COLLABORATION_TYPE.CAMERA:
console.log(CollaborationTypeKey.CAMERA); return COLLABORATION_TYPE_NUMBER.CAMERA;
return CollaborationTypeKey.CAMERA;
case COLLABORATION_TYPE.VIDEO: case COLLABORATION_TYPE.VIDEO:
return CollaborationTypeKey.VIDEO; return COLLABORATION_TYPE_NUMBER.VIDEO;
case COLLABORATION_TYPE.DOCUMENT: case COLLABORATION_TYPE.DOCUMENT:
return CollaborationTypeKey.DOCUMENT; return COLLABORATION_TYPE_NUMBER.DOCUMENT;
case COLLABORATION_TYPE.BOARD: case COLLABORATION_TYPE.BOARD:
return CollaborationTypeKey.BOARD; return COLLABORATION_TYPE_NUMBER.BOARD;
default: default:
return 0; return 0;
} }
......
// 名前空間
var ArchiveUI = {};
document.addEventListener("DOMContentLoaded", function () {
// アーカイブ検索
ArchiveUI.bindArchiveSearch();
// iOSキーボード変換検知用
ArchiveUI.bindiOSKeyBoardEvent();
});
ArchiveUI.refreshSearchScreen = function (keyword) {
const archiveList = NativeBridgeDataSource.getArchiveByName(keyword);
const typeImage = ArchiveUI.getArchiveTypeIconURL(archive.archiveType);
ArchiveUI.getArchiveTemplate().then(function (archiveTemplate) {
archiveList.forEach(function (archive) {
let html = ArchiveUI.renderArchiveTemplate(
archiveTemplate,
archive.archiveId,
archive.archiveName,
archive.archiveDate,
typeImage
);
let obj = jQuery.parseHTML(html);
$(".overlay_src_msg").append(obj);
});
});
};
ArchiveUI.getArchiveTypeIconURL = function (type) {
switch (type) {
case ARCHIVE_TYPE.PICTURE:
return "icon/icon_collabo_picture.png";
case ARCHIVE_TYPE.VIDEO:
return "icon/icon_collabo_videocam.png";
case ARCHIVE_TYPE.VOICE:
return "icon/icon_collabo_headset.png";
case ARCHIVE_TYPE.DOCUMENT:
return "icon/icon_collabo_document.png";
default:
return "";
}
};
ArchiveUI.getArchiveTemplate = function () {
return new Promise(function (resolve, reject) {
$.get({ url: TemplateURL.ARCHIVE_LIST, async: false }, function (text) {
resolve(text);
});
});
};
ArchiveUI.bindArchiveSearch = function () {
const searchInput = $('#archive .search_form input[type="search"]');
searchInput.keyup(function (e) {
const keyword = searchInput.val();
const enterKeyPressed = e.KeyCode == 13 || e.key == "Enter";
const keywordEmpty = keyword == "" || keyword.length < 2;
const keywordNotEmpty = keyword.length != 0 && keyword != "";
if (enterKeyPressed) {
if (keywordNotEmpty) {
searchInput.blur();
return;
}
} else if (keywordEmpty) {
$(".overlay_src_msg").empty();
return;
}
$(".overlay_src_msg").empty();
ArchiveUI.refreshSearchScreen(keyword);
if (enterKeyPressed) {
searchInput.blur();
return;
}
// 検索結果を表示
});
};
ArchiveUI.bindiOSKeyBoardEvent = function () {
const searchInput = $('#archive .search_form input[type="search"]');
searchInput.on("compositionend", function () {
if (deviceInfo.isiOS()) {
const keyword = searchInput.val();
$(".overlay_src_msg").empty();
ArchiveUI.refreshSearchScreen(keyword);
}
});
};
ArchiveUI.renderArchiveTemplate = function (
html,
archiveId,
archiveName,
archiveDate,
typeImageURL
) {
return Mustache.render(html, {
archiveId: archiveId,
fileName: archiveName,
insertDate: archiveDate,
typeImage: typeImageURL,
});
};
/*****************
* アーカイブ詳細
****************/
ArchiveUI.refreshArchiveDetailScreen = function (archiveId) {
// loadingIndicatorを表示
Common.showLoadingIndicator();
// 初期化
$("#archiveDetail").html("");
if (serverInfo.isOnline == "true") {
NativeBridgeDelegate.updateArchiveDetail(archiveId);
}
// アーカイブ詳細取得
const archive = NativeBridgeDataSource.getArchiveDetail(archiveId);
// template archive detail
ArchiveUI.appendArchiveDetailScreen(archive);
// setup player
ArchiveUI.appendPlayer(archive);
// append attended users
ArchiveUI.appendAttendUsers(archive.attendUserIds);
// set languages
currentUserInfo.configureLanguage();
// TODO: peacekim:: check localization works or not
$(".ttl_detail").text(getLocalizedString("detail"));
$("#archiveFileName").text(getLocalizedString("archiveFileName"));
$("#archiveInsertDate").text(getLocalizedString("archiveInsertDate"));
$("#archiveRoomName").text(getLocalizedString("archiveRoomName"));
$("#archiveSaveUser").text(getLocalizedString("archiveSaveUser"));
$("#archiveAttendUser").text(getLocalizedString("archiveAttendUser"));
// チャットルームへのリンク付け
document.getElementById("joinChatRoom").onclick = function () {
NativeBridgeDelegate.joinRoom(archive.roomId, archive.roomName);
};
// loadingIndicatorを非表示
Common.dismissLoadingIndicator();
};
ArchiveUI.appendArchiveDetailScreen = function (archive) {
// 保存ユーザ情報を取得
const userInfo = NativeBridgeDataSource.getUserInfo(archive.saveUserId);
userInfo.profileUrl = Common.getProfileImgUrl(userInfo.profileUrl);
// アーカイブ詳細の様式を読み込む
const archiveDetailTemplate = getTemplate(TemplateURL.ARCHIVE_DETAIL);
// アーカイブ情報を表示
const html = Mustache.render(archiveDetailTemplate, {
fileName: archive.archiveName,
insertDate: archive.archiveDate,
chatRoomName: archive.roomName,
chatRoomId: archive.roomId,
profileImage: userInfo.profileUrl,
userName: userInfo.shopMemberName,
userId: userInfo.shopMemberId,
});
var obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#archiveDetail").append(obj);
};
ArchiveUI.appendPlayer = function (archive) {
// プレイヤーの切り替え
const archiveFilePath = ArchiveUI.createGetDataUrl(
archive.filePath,
archive.roomId
);
switch (archive.archiveType) {
case "0": // 画像
case 0:
ArchiveUI.appendImageTypePlayer(archiveFilePath);
break;
case "1": // 動画
case 1:
ArchiveUI.appendVideoTypePlayer(archiveFilePath);
break;
case "2": // 音声
case 2:
ArchiveUI.appendVoiceTypePlayer(archiveFilePath);
break;
case "3": // 文書
case 3:
// リリースに文書とその他は含めないため今回は非表示
break;
default:
// リリースに文書とその他は含めないため今回は非表示
}
};
ArchiveUI.appendImageTypePlayer = function (filePath) {
$("#archive_player").prepend(
'<img class="archive_player" src="' + filePath + '" />'
);
};
ArchiveUI.appendVideoTypePlayer = function (filePath) {
if (deviceInfo.isiOS()) {
$("#archive_player").prepend(
'<video class="archive_player" controls autoplay muted playsinline controlsList="nodownload"><source src="' +
filePath +
'" type="video/mp4"><source src="' +
filePath +
'" type="video/ogv"><source src="' +
filePath +
'" type="video/webm"></video>'
);
} else {
$("#archive_player").prepend(
'<video class="archive_player" src=' +
filePath +
' controls autoplay muted playsinline controlsList="nodownload"></video>'
);
}
};
ArchiveUI.appendVoiceTypePlayer = function (filePath) {
if (deviceInfo.isiOS()) {
$("#archive_player").prepend(
'<audio class="archive_audio_player" controls controlsList="nodownload"><source src="' +
filePath +
'" type="audio/wav"><source src="' +
filePath +
'" type="audio/ogg"></audio>'
);
} else {
$("#archive_player").prepend(
'<audio class="archive_audio_player" src=' +
filePath +
' controls controlsList="nodownload"></audio>'
);
}
$("#archive_player").prepend(
'<img class="archive_player" src=' + "./img/capture.png" + " />"
);
};
ArchiveUI.appendAttendUsers = function (attendedUserList) {
// ユーザの様式を読み込む
const archiveUserTemplate = getTemplate(TemplateURL.ARCHIVE_USER);
if (typeof android != "undefined") {
// ios実装不要
attendedUserList = JSON.parse(attendedUserList);
}
attendedUserList.forEach(function (user) {
if (user == "") {
return;
}
const userInfo = NativeBridgeDataSource.getUserInfo(user);
userInfo.profileUrl = Common.getProfileImgUrl(userInfo.profileUrl);
const html = Mustache.render(archiveUserTemplate, {
profileImage: userInfo.profileUrl,
userName: userInfo.shopMemberName,
});
const obj = $(jQuery.parseHTML(html)).on("click", function () {
// ネームカード表示
Namecard.makeNameCard(user);
});
$("#attendUser").append(obj);
});
};
ArchiveUI.createGetDataUrl = function (fileName, roomId) {
return (
serverInfo.cmsURL +
"/chatapi/file/getImage?sid=" +
currentUserInfo.sid +
"&fileName=" +
fileName +
"&roomId=" +
roomId
);
};
// アーカイブ一覧
ArchiveUI.refreshArchiveScreen = function () {
// loadingIndicatorを表示
Common.showLoadingIndicator();
// 初期化
$("#archiveList").html("");
// アーカイブの様式を読み込む
const archiveTemplate = getTemplate(TemplateURL.ARCHIVE);
// アーカイブ一覧取得
if (serverInfo.isOnline == "true") {
NativeBridgeDelegate.updateArchiveList();
}
// ローカルDBのデータを表示
const archiveList = NativeBridgeDataSource.getArchiveList();
if (typeof archiveList == "undefined") {
Common.dismissLoadingIndicator();
return;
}
archiveList.forEach(function (archive) {
var typeImage = "";
switch (archive.archiveType) {
case 0: // 画像
typeImage = "icon/icon_collabo_picture.png";
break;
case 1: // 動画
typeImage = "icon/icon_collabo_videocam.png";
break;
case 2: // 音声
typeImage = "icon/icon_collabo_headset.png";
break;
case 3: // 文書
typeImage = "icon/icon_collabo_document.png";
break;
default:
// その他
typeImage = "";
}
const html = Mustache.render(archiveTemplate, {
archiveId: archive.archiveId,
fileName: archive.archiveName,
insertDate: archive.archiveDate,
typeImage: typeImage,
});
const obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#archiveList").append(obj);
});
// loadingIndicatorを非表示
Common.dismissLoadingIndicator();
};
var ChatList = {};
$("#tabDM").on("click", function (e) {
ChatList.refreshRoomList(ChatRoomType.DM);
});
$("#tabGroup").on("click", function (e) {
ChatList.refreshRoomList(ChatRoomType.GROUP);
});
document.addEventListener("DOMContentLoaded", function () {
ChatList.bindChatSearch();
Common.dismissLoadingIndicator();
});
ChatList.bindChatSearch = function () {
const chatSearchInput = $('#chat .search_form input[type="search"]');
const chatSearchCancel = $("#chat .search_form .cancel");
chatSearchInput.click(function () {
let roomListTitle = getLocalizedString("room_search_placeholder");
$("#chatTitle").text(roomListTitle);
});
chatSearchCancel.click(function () {
let roomListTitle = getLocalizedString("roomListTitle");
$("#chatTitle").text(roomListTitle);
});
// チャットメンバー検索
chatSearchInput.keyup(function (e) {
var rooms;
var keyword = chatSearchInput.val();
const enterKeyPressed = e.KeyCode == 13 || e.key == "Enter";
if (enterKeyPressed) {
if (keyword.length != 0 && keyword != "") {
chatSearchInput.blur();
return;
}
} else if (keyword == "" || keyword.length < 2) {
$(".overlay_src_msg").empty();
return;
}
ChatList.searchRoom(keyword, rooms);
if (enterKeyPressed) {
chatSearchInput.blur();
return;
}
});
// iOSキーボード変換検知用
chatSearchInput.on("compositionend", function () {
if (deviceInfo.isIOS()) {
var rooms;
var keyword = chatSearchInput.val();
ChatList.searchRoom(keyword, rooms);
}
});
};
ChatList.refreshRoomList = function (roomType) {
if (serverInfo.isOnline == "true") {
Common.refreshForOnline();
} else {
Common.refreshForOffline();
}
const selectedRoomTypeInRoomList = NativeBridgeDataSource.getBeforeRoomType();
if (selectedRoomTypeInRoomList != null) {
roomType = selectedRoomTypeInRoomList;
NativeBridgeDelegate.clearBeforeRoomType();
}
Common.showLoadingIndicator();
// select tab as room type
ChatList.selectTab(roomType);
// update room info in native db
if (serverInfo.isOnline == "true") {
NativeBridgeDelegate.updateRoomList();
}
// get room list from native db
const rooms = NativeBridgeDataSource.getRoomList(roomType, null);
// Room list 初期化
ChatList.initializeRoomList();
// set room title
ChatList.setRoomTitle();
// メッセージがない時、最新メッセージにempty messageを追加
if (rooms.length === 0) {
ChatList.addEmptyRoomListLabel(roomType);
}
// リストにルームを追加
ChatList.appendRoomList(rooms);
Common.dismissLoadingIndicator();
};
ChatList.addEmptyRoomListLabel = function (roomType) {
// 検索結果がない場合のメッセージを追加
const emptyListString = getLocalizedString("roomListEmptyString");
switch (roomType) {
case ChatRoomType.GROUP:
$("#groupChatList").append(
`<center class="text-secondary">${emptyListString}</center>`
);
break;
case ChatRoomType.DM:
$("#dmChatList").append(
`<center class="text-secondary">${emptyListString}</center>`
);
break;
default:
}
};
ChatList.selectTab = function (roomType) {
if (roomType == ChatRoomType.DM) {
$("#tabDM").prop("checked", true);
} else {
$("#tabGroup").prop("checked", true);
}
};
ChatList.initializeRoomList = function () {
// #36146に対応
$("#groupChatList").empty();
$("#dmChatList").empty();
};
ChatList.setRoomTitle = function () {
let roomListTitle = getLocalizedString("roomListTitle");
$("#chatTitle").text(roomListTitle);
};
ChatList.appendRoomList = function (rooms) {
const template = getTemplate(TemplateURL.ROOM_LIST);
rooms.forEach(function (room) {
let html = ChatList.renderRoom(template, room);
let obj = jQuery.parseHTML(html);
if (room.type.toString() == ChatRoomType.GROUP) {
$("#groupChatList").append(obj);
} else if (room.type.toString() == ChatRoomType.DM) {
$("#dmChatList").append(obj);
}
});
};
ChatList.getDefaultChatRoomName = function (roomAttendUsers) {
let attendUserName = [];
roomAttendUsers.forEach(function (user) {
user.profileUrl = Common.getProfileImgUrl(user.profileUrl);
attendUserName.push(user.shopMemberName);
});
return attendUserName.join(", ");
};
ChatList.getUnreadCount = function (roomUnreadCount) {
if (roomUnreadCount == 0) {
return "";
} else if (roomUnreadCount > 999) {
return "999+";
}
return roomUnreadCount;
};
// チャットルーム検索
ChatList.searchRoom = function (keyword, rooms) {
const overlayMessage = $(".overlay_src_msg");
overlayMessage.empty();
rooms = NativeBridgeDataSource.getRoomList(ChatRoomType.ALL, keyword);
let roomListTitle = getLocalizedString("room_search_placeholder");
$("#chatTitle").text(roomListTitle);
const template = getTemplate(TemplateURL.ROOM_LIST);
rooms.forEach(function (room) {
let html = ChatList.renderRoom(template, room);
// Click event
let obj = jQuery.parseHTML(html);
overlayMessage.append(obj);
});
if (rooms.length == 0) {
const noResultMsg = getNoResultMessage();
overlayMessage.append(noResultMsg);
}
};
ChatList.getRoomMessage = function (message) {
if (message) {
return message.toString();
} else {
return getLocalizedString("noMessages");
}
};
ChatList.getDisplayMessage = function (messageType, roomMessage) {
switch (messageType) {
case MessageType.TEXT:
return roomMessage;
case MessageType.SYSTEM:
return roomMessage;
case MessageType.IMAGE:
return getLocalizedString("image");
case MessageType.VIDEO:
return getLocalizedString("video");
case MessageType.COMMUNICATIONSTART:
return getLocalizedString("collaboration_start");
case MessageType.COMMUNICATIONEND:
return getLocalizedString("collaboration_end");
default:
return roomMessage;
}
};
ChatList.renderRoom = function (template, room) {
// thumbnail counts
const thumbnailCount = Math.min(room.attendUsers.length, 4);
// set room name
if (room.chatRoomName == "") {
room.chatRoomName = ChatList.getDefaultChatRoomName(room.attendUsers);
}
// set profile images
room.profileImagePath = "./images/user-profile.png";
room.attendUsers.forEach(function (user) {
user.profileUrl = Common.getProfileImgUrl(user.profileUrl);
});
// set room messages
const roomMessage = ChatList.getRoomMessage(room.message);
const displayMessage = ChatList.getDisplayMessage(
room.messageType,
roomMessage
);
// set date string
const time = room.insertDate
? CHAT_UTIL.formatDate(room.insertDate).createdAt
: "";
const messageUnreadCount = ChatList.getUnreadCount(room.unreadCount);
return Mustache.render(template, {
thumbnailCount: thumbnailCount,
roomName: room.chatRoomName,
roomId: room.chatRoomId,
profileImage: room.profileImagePath,
lastMessage: displayMessage,
time: time,
unreadMsgCnt: messageUnreadCount,
userCnt: room.attendUsers.length + 1,
attendUsers: room.attendUsers.splice(0, thumbnailCount),
});
};
ChatList.refreshForOnline = function () {
$(".craeteRoomButton").off("click", ChatList.offlineHandler);
$(".craeteRoomButton").css("opacity", "1.0");
};
ChatList.refreshForOffline = function () {
$(".craeteRoomButton").on("click", ChatList.offlineHandler);
$(".craeteRoomButton").css("opacity", "0.3");
};
ChatList.offlineHandler = function (e) {
e.preventDefault();
};
const userMessageTemplate = getTemplate(TemplateURL.USER_MESSAGE);
const myMessageTemplate = getTemplate(TemplateURL.MY_MESSAGE);
const systemMessageTemplate = getTemplate(TemplateURL.SYSTEM_MESSAGE);
const collaborationMessageTemplate = getTemplate(
TemplateURL.OPEN_COLLABORATION_MESSAGE
);
/***********************
* Search Messages
***********************/
ChatRoom.appendSearchMessages = function (messages, unwrappedWorkVal = "") {
let workVal = unwrappedWorkVal;
messages.forEach(function (message) {
let html = ChatRoom.renderMessageForSearchMessage(message);
workVal = html + workVal;
});
$(".overlay_src_msg").prepend(workVal);
};
ChatRoom.renderMessageForSearchMessage = function (message) {
let template = ChatRoom.getChatMessageTemplate(
message.messageType,
message.shopMemberId
);
let messageTime = CHAT_UTIL.formatDate(message.insertDate);
message.profileUrl = ChatRoom.parseUserProfileURL(message.profileUrl);
message.message = message.message
.toString()
.replaceAll("?fileName=", "?sid=" + currentUserInfo.sid + "&fileName=");
let html = Mustache.render(template, {
text: message.message,
from: message.loginId,
shopMemberId: message.shopMemberId,
profileImage: message.profileUrl,
createdAtDay: messageTime.createdAtDay,
createdAtTime: messageTime.createdAtTime,
});
return message.message.includes("attachedImages") ||
message.message.includes("attachedVideos")
? CHAT_UTIL.htmlDecode(html)
: html;
};
/***********************
* Send Messages
***********************/
// Input recognize
$("#messageInput").on("keypress", function (event) {
if (event.which == 13) {
// Enterキーの処理
$("#messageSend").click();
}
});
ChatRoom.sendMessage = function (e) {
const messageTextBox = $("#messageInput");
const message =
messageTextBox.val().length > 0
? encodeURIComponent(messageTextBox.val())
: "";
messageTextBox.val("");
if (message.length > 0) {
const sendData = message + messageSeperator + MessageType.TEXT;
CHAT_SOCKET.emitCreateMessage(sendData, 0);
}
$(".message_input_form").focus();
};
/***********************
* Load Messages
***********************/
ChatRoom.loadMessages = function (joinRoomID, joinRoomName) {
let roomID = joinRoomID.replace(/['"]+/g, "");
roomName = joinRoomName;
// 画面更新
if (serverInfo.isOnline == "true") {
Common.refreshForOnline();
NativeBridgeDelegate.updateMessages(roomID);
} else {
Common.refreshForOffline();
}
// setup ルームタイトル
$("#roomTitle").text(roomName).data("roomName", roomName);
// ルームメニュー表示設定
ChatRoom.configureRoomMenu();
// ユーザー表示
ChatRoom.appendAttendedUsers(roomID);
// メッセージ表示
let messages = NativeBridgeDataSource.getMessagesByRoomID(roomID);
ChatRoom.prependMessage(messages);
// スクロール調整
let jQueryMessages = $("#messages");
ChatRoom.waitForLoadingImage(jQueryMessages, ChatRoom.scrollToBottom);
ChatRoom.waitForLoadingVideo(jQueryMessages, ChatRoom.scrollToBottom);
// iOS用スクロールoffset調整
if (deviceInfo.isiOS()) {
$(window).on("load", function () {
ChatRoom.scrollToBottom();
});
}
};
ChatRoom.configureRoomMenu = function () {
if (roomInfo.roomType == ChatRoomType.DM) {
$("#roomMenu").removeClass("none");
} else {
$("#roomMenu").addClass("none");
}
};
ChatRoom.appendAttendedUsers = function (roomID) {
const topUserListTemplate = getTemplate(TemplateURL.CHATROOM_USER_LIST);
const filterUserListTemplate = getTemplate(
TemplateURL.CHATROOM_USER_FILTER_LIST
);
const users = NativeBridgeDataSource.getUsersInRoom(roomID);
// ユーザーリスト表示
users.forEach(function (user) {
user.profileUrl = Common.getProfileImgUrl(user.profileUrl);
});
let html = Mustache.render(topUserListTemplate, {
userList: users,
});
let obj = jQuery.parseHTML(html);
$("#user_list").append(obj);
// フィルタリングユーザーリスト表示
let filterHtml = Mustache.render(filterUserListTemplate, {
userList: users,
});
let filterObj = jQuery.parseHTML(filterHtml);
$("#filter").append(filterObj);
};
ChatRoom.prependMessage = function (messages) {
const now = new Date();
// メッセージ文字列の生成
let workVal = "";
var checkBeforeDate = "";
var beforeDate = "";
messages.forEach(function (message) {
// プロフィールURL設定
message.profileUrl = ChatRoom.parseUserProfileURL(message.profileUrl);
const messageCreatedTime = CHAT_UTIL.formatDate(
message.insertDate
).createdAt;
// #36147
message.message = message.message
.toString()
.replaceAll("?fileName=", "?sid=" + currentUserInfo.sid + "&fileName=");
// 日付表示のため、今年なのか、本日なのかを判定
const isOtherYear = now.getFullYear() != message.insertDate.substring(0, 4);
const isToday = messageCreatedTime.includes(":") ? true : false;
// 日付ラーベル表示
if (messageCreatedTime != checkBeforeDate && checkBeforeDate != "") {
const html = ChatRoom.renderDateLabelMessage(
systemMessageTemplate,
beforeDate
);
workVal = html + workVal;
}
checkBeforeDate = messageCreatedTime;
beforeDate = message.insertDate;
const html = ChatRoom.renderMessage(message, isToday, isOtherYear);
workVal = html + workVal;
});
// メッセージの画面描画
$("#messages").prepend(workVal);
};
ChatRoom.renderDateLabelMessage = function (template, beforeDate) {
let messageDay = CHAT_UTIL.systemDay(beforeDate);
return Mustache.render(template, {
year: messageDay.year + getLocalizedString("year"),
month: messageDay.month + getLocalizedString("month"),
day: messageDay.day + getLocalizedString("day"),
dow: CHAT_UTIL.findDow(messageDay.dow),
});
};
ChatRoom.getChatMessageTemplate = function (messageType, senderID) {
if (senderID == currentUserInfo.shopMemberID) {
return myMessageTemplate;
} else if (messageType == MessageType.SYSTEM) {
return systemMessageTemplate;
} else {
return userMessageTemplate;
}
};
ChatRoom.parseUserProfileURL = function (profileURL) {
if (profileURL) {
return Common.getProfileImgUrl(profileURL);
} else {
return Common.getProfileImgUrl("");
}
};
ChatRoom.renderMessage = function (message, isToday, isOtherYear) {
if (
message.messageType == MessageType.COMMUNICATIONSTART ||
message.messageType == MessageType.COMMUNICATIONEND
) {
return ChatRoom.renderCollaborationMessage(message, isToday, isOtherYear);
} else {
return ChatRoom.renderChatMessage(message, isToday, isOtherYear);
}
};
ChatRoom.renderCollaborationMessage = function (message, isToday, isOtherYear) {
const collaborationInfo = JSON.parse(message.message);
const userInCollaboration = JSON.parse(
NativeBridgeDataSource.getUserInfoList(collaborationInfo.userList)
);
const displayUserList = ChatRoom.getDisplayUserList(userInCollaboration);
const meetingID = ChatRoom.getMeetingID(collaborationInfo.meetingId);
const messageTime = CHAT_UTIL.formatDate(message.insertDate);
const createdAtYear =
message.insertDate.substring(0, 4) + getLocalizedString("year") + " ";
const html = Mustache.render(collaborationMessageTemplate, {
messageId: message.messageId,
roomName: roomName,
userCount: userInCollaboration.length,
userList: displayUserList,
insertDate: message.insertDate,
// TODO: peacekim:: should check collaborationInfo.collaborationType is string or number
collaborationType: collaborationInfo.collaborationType,
meetingId: meetingID,
isToday: isToday,
createdAtDay: messageTime.createdAtDay,
createdAtTime: messageTime.createdAtTime,
createdAtYear: createdAtYear,
isOtherYear: isOtherYear,
isEnded: message.messageType == MessageType.COMMUNICATIONEND ? true : false,
});
return message.message.includes("attachedImages") ||
message.message.includes("attachedVideos")
? CHAT_UTIL.htmlDecode(html)
: html;
};
ChatRoom.getMeetingID = function (meetingID) {
if (typeof meetingID != "undefined") {
return meetingID;
} else {
return 0;
}
};
ChatRoom.getDisplayUserList = function (userList) {
userList.forEach(function (user) {
user.profileUrl = Common.getProfileImgUrl(user.profileUrl);
});
return userList.length > 3 ? userList.slice(0, 3) : userList;
};
ChatRoom.renderChatMessage = function (message, isToday, isOtherYear) {
const template = ChatRoom.getChatMessageTemplate(
message.messageType,
message.shopMemberId
);
const messageTime = CHAT_UTIL.formatDate(message.insertDate);
const createdAtYear =
message.insertDate.substring(0, 4) + getLocalizedString("year") + " ";
const html = Mustache.render(template, {
text: message.message,
from: message.loginId,
messageId: message.messageId,
shopMemberId: message.shopMemberId,
profileImage: message.profileUrl,
createdAtDay: messageTime.createdAtDay,
createdAtTime: messageTime.createdAtTime,
createdAtYear: createdAtYear,
unreadCount: message.unreadCount,
isOtherYear: isOtherYear,
isToday: isToday,
});
return message.message.includes("attachedImages") ||
message.message.includes("attachedVideos")
? CHAT_UTIL.htmlDecode(html)
: html;
};
ChatRoom.bindSearchUI = function () {
const chatSearchForm = $(".chat_room_src_form");
const chatSearchInput = $('.chat_room_src_form input[type="search"]');
const searchMessage = $("#searchMessage");
// 検索アイコン押下イベント
$(".nav_item_wrap .search_menu").click(function () {
$(".nav_item_wrap").addClass("none");
$(".footer-wrap").addClass("none");
chatSearchForm.removeClass("none");
$(".room_container").addClass("none");
$(".overlay_src_msg").removeClass("none");
// フィルタ表示
$("#filter").removeClass("none");
$("#user_list").addClass("none");
chatSearchInput.focus();
searchMessage.addClass("onfocus");
$(".chat_list").removeClass("none");
});
$(".chat_room_src_form .cancel").click(function () {
$(".nav_item_wrap").removeClass("none");
$(".footer-wrap").removeClass("none");
chatSearchForm.addClass("none");
$(".chat_room_src_form input").val("");
$(".room_container").removeClass("none");
$(".overlay_src_msg").empty();
// ユーザーリスト表示
$("#filter").addClass("none");
$("#user_list").removeClass("none");
chatSearchInput.blur();
searchMessage.removeClass("onfocus");
$(".chat_list").addClass("none");
ChatRoom.scrollToBottom();
});
chatSearchInput.click(function () {
if (searchMessage.hasClass("onfocus")) {
searchMessage.removeClass("onfocus");
searchMessage.blur();
} else {
searchMessage.addClass("onfocus");
searchMessage.focus();
}
});
searchMessage.blur(function () {
searchMessage.removeClass("onfocus");
});
// チャットルーム
// メッセージ検索イベント
chatSearchInput.keyup(function (e) {
let workVal = "";
const keyword = chatSearchInput.val();
const enterKeyPressed = e.key == "Enter" || e.KeyCode == 13;
if (enterKeyPressed) {
if (keyword != "" && keyword.length != 0) {
chatSearchInput.blur();
return;
}
} else if (keyword == "" || keyword.length < 2) {
$(".overlay_src_msg").empty();
return;
}
ChatRoom.searchMessage(keyword, workVal);
if (enterKeyPressed) {
searchMessage.removeClass("onfocus");
chatSearchInput.blur();
return;
}
});
// iOSキーボード変換検知用
chatSearchInput.on("compositionend", function () {
if (deviceInfo.isIOS()) {
let workVal = "";
var keyword = chatSearchInput.val();
ChatRoom.searchMessage(keyword, workVal);
}
});
ChatRoom.bindUserFilteredMessage();
// フィルタ選択イベント
$(document).on("click", "#filter .img_wrap", function (event) {
// チェックアイコン追加
$(this).toggleClass("filter");
});
};
ChatRoom.bindUserFilteredMessage = function () {
$(document).on("click", ".filter_img", function (event) {
const keyword = $('.chat_room_src_form input[type="search"]').val();
$(".overlay_src_msg").empty();
let checkedUserList = ChatRoom.getCheckedUserList();
if (keyword.length == 1) {
return;
}
const messages = NativeBridgeDataSource.searchMessages(
keyword,
checkedUserList.join(",")
);
ChatRoom.appendSearchMessages(messages);
});
};
// メッセージ検索
ChatRoom.searchMessage = function (keyword, workVal) {
$(".overlay_src_msg").empty();
let checkedUserList = ChatRoom.getCheckedUserList();
const messages = NativeBridgeDataSource.searchMessages(
keyword,
checkedUserList.join(",")
);
ChatRoom.appendSearchMessages(messages, workVal);
if (messages.length == 0) {
const noResultMsg = getNoResultMessage();
$(".overlay_src_msg").append(noResultMsg);
}
};
ChatRoom.getCheckedUserList = function () {
let checkedUserList = [];
$(".img_wrap.filter").each(function (user) {
const selectedUser = $(".img_wrap.filter")[user];
checkedUserList.push($(selectedUser).data("user-id"));
});
return checkedUserList;
};
var beforeHeight = window.innerHeight;
var beforeWidth = window.innerWidth;
var beforeScroll;
var roomName = "";
var ChatRoom = {};
window.onscroll = function () {
if (beforeScroll == window.scrollY) {
return;
}
beforeScroll = window.scrollY;
const beforeHeight = $(".room_container").height();
messageCount = $(".chat_message").length;
if ($(this).scrollTop() === 0 && messageCount >= PagingSize.MESSAGE) {
if (!$("#chatLoader").is(":visible")) {
let loader = $(
'<div id="chatLoader" class="text-center"><div class="spinner-grow spinner-grow-sm" role="status" /></div>'
);
$("#messages").prepend(loader);
const messageID = $($(".chat_message").get(0)).data("messageid");
NativeBridgeDelegate.updatePreMessage(messageID);
let messages = NativeBridgeDataSource.getMessagesByMessageID(messageID);
ChatRoom.prependMessage(messages);
loader.remove();
var afterHeight = $(".room_container").height();
window.scroll(0, afterHeight - beforeHeight);
}
}
};
document.addEventListener("DOMContentLoaded", function () {
// 検索イベントバインディング
ChatRoom.bindSearchUI();
// 画面サイズ変更イベントバインディング
ChatRoom.bindResize();
// メッセージ入力イベントバインディング
ChatRoom.bindMessageInput();
});
ChatRoom.bindResize = function () {
const footerHeight = $(".footer-wrap").height();
window.addEventListener("resize", function () {
var afterHeight = window.innerHeight;
var afterWidth = window.innerWidth;
var moreScroll = beforeHeight - afterHeight;
const footerBHeight = $(".footer_content_b").height();
if (beforeHeight > afterHeight && beforeHeight - afterHeight > 50) {
if (deviceInfo.isiOS()) {
window.scrollTo(0, beforeScroll + moreScroll);
} else if (beforeWidth == afterWidth) {
//キーボード表示時
$(".room_container").css("margin-bottom", 0);
window.scrollTo(0, beforeScroll + moreScroll - footerBHeight);
} else {
//画面回転時
window.scrollTo(0, beforeScroll + moreScroll * 2 - footerBHeight);
}
} else if (beforeHeight < afterHeight) {
$(".room_container").css("margin-bottom", footerHeight);
if (deviceInfo.isIOS()) {
window.scrollTo(0, beforeScroll + moreScroll);
} else if (beforeWidth == afterWidth) {
//キーボード非表示
window.scrollTo(0, beforeScroll + moreScroll + footerBHeight);
} else {
//画面回転時
window.scrollTo(0, beforeScroll + moreScroll * 2 + footerBHeight);
}
}
beforeHeight = window.innerHeight;
beforeWidth = window.innerWidth;
});
};
ChatRoom.bindMessageInput = function () {
$("#messageInput").focusin(function (e) {
beforeHeight = window.innerHeight;
beforeWidth = window.innerWidth;
beforeScroll = window.scrollY;
});
$(".message_input_form").on("focus", function (e) {
setTimeout(function () {
$(".message_input_send").removeClass("none");
$(".attach_file").addClass("none");
$(".footer_content_b").addClass("none");
}, 10);
});
$(".message_input_form").on("focusout", function (e) {
setTimeout(function () {
if ($(e.relatedTarget).hasClass("message_input_send")) {
ChatRoom.sendMessage();
} else {
$(".message_input_send").addClass("none");
$(".attach_file").removeClass("none");
$(".footer_content_b").removeClass("none");
}
}, 10);
});
};
// 下スクロールでユーザーリストを非表示
var startPos = 0;
var winScrollTop = 0;
$(window).on("scroll", function () {
winScrollTop = $(this).scrollTop();
if (winScrollTop >= startPos) {
if (winScrollTop >= 200) {
$("#chat_room .user_list").addClass("hide");
}
} else {
$("#chat_room .user_list").removeClass("hide");
}
startPos = winScrollTop;
});
//上にスクロールすると新しいメッセージを呼ぶ処理。
$("#messages").scroll(function () {
if ($(this).scrollTop() === 0) {
if (!$("#chatLoader").is(":visible")) {
// 現在、メッセージの個数以前をメッセージを読み込む
// ローディングアイコンを追加する
let loader = $(
'<div id="chatLoader" class="text-center"><div class="spinner-grow spinner-grow-sm" role="status" /></div>'
);
$("#messages").prepend(loader);
loader.remove();
}
}
});
ChatRoom.startCollaboration = function (collaborationType) {
if (deviceInfo.isAndroid()) {
if (
collaborationType == COLLABORATION_TYPE.DOCUMENT &&
deviceInfo.androidVersion < ANDROID_SDK_VERSION.O
) {
alert(getLocalizedString("not_support_version"));
return;
}
}
if ($(".collabo_area.start").length != 0) {
if (!confirm(getLocalizedString("already_exist_collaboration"))) {
Common.dismissLoadingIndicator();
return;
}
const sendData = DATA_MESSAGE_SCHEME + FINISH_ALL_COLLABORATION_SIGNAL;
CHAT_SOCKET.emitCreateMessage(sendData, 0);
NativeBridgeDelegate.finishAllCollaboration();
}
NativeBridgeDelegate.startCollaboration(collaborationType);
};
// 画像の読み込みが全て終わったタイミングでコールバック実行
// FIXME 追加読み込みの場合は差分の画像のみ監視すべきだが、現状新規入室時にしか対応出来ていない。
ChatRoom.waitForLoadingVideo = function (div, callback) {
Common.showLoadingIndicator();
// var imgs = document.getElementsByTagName("video");
let video = div.find("video");
let count = video.length;
if (count == 0) callback();
let loaded = 0;
video.each(function () {
this.addEventListener("loadeddata", function (e) {
loaded++;
if (loaded === count) {
callback();
Common.dismissLoadingIndicator();
}
});
});
};
ChatRoom.waitForLoadingImage = function (div, callback) {
let imgs = div.find("img");
let count = imgs.length;
if (count == 0) callback();
let loaded = 0;
imgs
.one("load", function (e) {
// イメージが読み込まれた
loaded++;
if (loaded === count) {
callback();
}
})
.each(function () {
if (this.complete || this.readyState === readyState.COMPLETED) {
$(this).trigger("load");
}
});
};
ChatRoom.scrollToBottom = function () {
const messages = $(".room_contents");
const scrollHeight = messages.prop("scrollHeight");
//messages.scrollTop(scrollHeight);
$("html, body").animate(
{
scrollTop: scrollHeight,
},
100
);
};
ChatRoom.refreshForOnline = function () {
$("#videoUploadButton").removeClass("ui-state-disabled");
$("#imageInputButton").removeClass("ui-state-disabled");
$("#messageSend").prop("disabled", false);
$("#messageInput").prop("disabled", false);
$("#messageInput").prop("placeholder", "メッセージを入力してください");
$("#room_name_change_button").removeClass("ui-state-disabled");
$("#add_user_button").removeClass("ui-state-disabled");
$(".fa-download").show();
if (typeof $("#roomTitle").val() != "undefined") {
CHAT_SOCKET.initialJoin();
}
};
ChatRoom.refreshForOffline = function () {
$("#videoUploadButton").addClass("ui-state-disabled");
$("#imageInputButton").addClass("ui-state-disabled");
$("#messageSend").prop("disabled", true);
$("#messageInput").prop("disabled", true);
$("#messageInput").prop("placeholder", "");
$("#room_name_change_button").addClass("ui-state-disabled");
$("#add_user_button").addClass("ui-state-disabled");
$(".fa-download").hide();
};
// 名前空間
var ChatAddUser = {};
document.addEventListener("DOMContentLoaded", function () {
// メンバー検索
ChatAddUser.bindMemberSearch();
// iOSキーボード変換検知用
ChatAddUser.bindiOSKeyBoardEvent();
$("#chat_add_user .search_form .cancel").click(function () {
let roomListTitle = getLocalizedString("inviteUsersSubtitle");
$("#addUserTitle").text(roomListTitle);
});
});
// ユーザー検索
ChatAddUser.searchUser = function (keyword) {
const isAllGroup = $("#tabAllGroupOnAddUser").is(":checked");
const overlayMessage = $(".overlay_src_msg");
let hasNoData = false;
overlayMessage.empty();
//全グループ検索画面
if (isAllGroup) {
//グループデータ検索
const groupList = NativeBridgeDataSource.getGroupByName(keyword);
ChatAddUser.searchGroupData(groupList, overlayMessage);
//ユーザデータ検索
const userList =
NativeBridgeDataSource.getAllGroupShopMemberNotInRoomByName(keyword);
ChatAddUser.searchUserData(userList, overlayMessage);
hasNoData = userList.length == 0 && groupList.length == 0;
//連絡先画面
} else {
const userList =
NativeBridgeDataSource.getMyGroupShopMemberNotInRoomByName(keyword);
searchUserData(userList, overlayMessage);
hasNoData = userList.length == 0;
}
// Set NoResult
if (hasNoData) {
const noResultMessage = getNoResultMessage();
overlayMessage.append(noResultMessage);
}
};
/** UTILS */
ChatAddUser.bindMemberSearch = function () {
const searchInput = $('#chat_add_user .search_form input[type="search"]');
searchInput.click(function (e) {
//画面タイトル設定
let contactListTitle = getLocalizedString("userSearch");
$("#addUserTitle").text(contactListTitle);
});
searchInput.keyup(function (e) {
const keyword = searchInput.val();
const enterKeyPressed = e.key == "Enter" || e.KeyCode == 13;
const keywordNotEmpty = keyword != "" && keyword.length != 0;
const keywordEmpty = keyword == "" || keyword.length < 2;
if (enterKeyPressed) {
if (keywordNotEmpty) {
searchInput.blur();
return false;
}
} else if (keywordEmpty) {
$(".overlay_src_msg").empty();
return false;
}
ChatAddUser.searchUser(keyword);
if (enterKeyPressed) {
searchInput.blur();
return;
}
});
};
ChatAddUser.bindiOSKeyBoardEvent = function () {
const searchInput = $('#chat_add_user .search_form input[type="search"]');
searchInput.on("compositionend", function () {
if (deviceInfo.isiOS()) {
var keyword = searchInput.val();
ChatAddUser.searchUser(keyword);
}
});
};
ChatAddUser.searchGroupData = function (groupList, overlayMessage) {
const groupTemplate = getTemplate(TemplateURL.MAKE_ROOM_GROUP_LIST);
groupList.forEach(function (group) {
let html = renderGroupTemplate(
groupTemplate,
group.groupName,
group.groupId
);
let obj = jQuery.parseHTML(html);
overlayMessage.append(obj);
});
};
ChatAddUser.renderGroupTemplate = function (groupTemplate, groupName, groupID) {
return Mustache.render(groupTemplate, {
name: groupName,
id: groupID,
});
};
ChatAddUser.searchUserData = function (userList, overlayMessage) {
const userTemplate = getTemplate(TemplateURL.MAKE_ROOM_USER_LIST);
userList.forEach(function (user) {
ChatAddUser.setUserProfile(user);
ChatAddUser.checkUser(user);
});
let html = ChatAddUser.renderUserTemplate(userTemplate, userList);
let obj = jQuery.parseHTML(html);
overlayMessage.append(obj);
};
ChatAddUser.setUserProfile = function (user) {
user.profileUrl = Common.getProfileImgUrl(user.profileUrl);
};
ChatAddUser.checkUser = function (user) {
let findObj = ChatManagementCommon.selectedUserList.find(function (
shopMemberID
) {
return shopMemberID == user.shopMemberId;
});
if (findObj) {
user.checked = "checked";
}
};
ChatAddUser.renderUserTemplate = function (userTemplate, userList) {
return Mustache.render(userTemplate, {
userList: userList,
});
};
$("#addUserConfirmBtn").on("click", function (e) {
const selectedUserList = ChatManagementCommon.selectedUserList.join(",");
NativeBridgeDelegate.saveSelectedUserList(selectedUserList);
$("#addUserForm").submit();
});
$("#tabAllGroupOnAddUser").on("click", function (e) {
ChatAddUser.refreshAllGroupForAddUser("0");
});
$("#tabMyGroupOnAddUser").on("click", function (e) {
ChatAddUser.refreshMyGroupForAddUser();
});
ChatAddUser.refreshMyGroupForAddUser = function () {
$(".modal-backdrop").remove();
$("#favoriteListForMakeRoom").html("");
$("#myGroupListForMakeRoom").html("");
//画面タイトル設定
let contactListTitle = getLocalizedString("userSearch");
$("#title").text(contactListTitle);
NativeBridgeDelegate.updateContactInfo();
// お気に入りグループ表示
ChatAddUser.appendFavoriteGroup();
// お気に入りユーザー表示
ChatAddUser.appendFavoriteUser();
// マイグループ表示
ChatAddUser.appendMyGroupList();
};
ChatAddUser.appendFavoriteGroup = function () {
// グループの様式を読み込む
const groupTemplate = getTemplate(TemplateURL.ADD_USER_GROUP_LIST);
// お気に入りグループ取得。
const favoriteGroupList = NativeBridgeDataSource.getFavoriteGroups();
favoriteGroupList.forEach(function (favoriteGroup) {
let html = Mustache.render(groupTemplate, {
name: favoriteGroup.groupName,
id: favoriteGroup.groupId,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#favoriteListForMakeRoom").append(obj);
});
};
ChatAddUser.appendFavoriteUser = function () {
// ユーザの様式を読み込む
const userTemplate = getTemplate(TemplateURL.ADD_USER_USER_LIST);
//お気に入りユーザ取得。
const favoriteUserList = NativeBridgeDataSource.getFavoriteUsersNotInRoom();
favoriteUserList.forEach(function (favoriteUser) {
favoriteUser.profileUrl = Common.getProfileImgUrl(favoriteUser.profileUrl);
let findObj = ChatManagementCommon.selectedUserList.find(function (
shopMemberId
) {
return shopMemberId == favoriteUser.shopMemberId;
});
if (findObj) {
favoriteUser.checked = "checked";
}
});
let html = Mustache.render(userTemplate, {
userList: favoriteUserList,
});
let obj = jQuery.parseHTML(html);
$("#favoriteListForMakeRoom").append(obj);
};
ChatAddUser.appendMyGroupList = function () {
const groupUserTemplate = getTemplate(TemplateURL.ADD_USER_GROUP_USER_LIST);
const myGroupList = NativeBridgeDataSource.getMyGroupUsersNotInRoom();
myGroupList.forEach(function (myGroup) {
myGroup.groupUserList.forEach(function (groupUser) {
groupUser.profileUrl = Common.getProfileImgUrl(groupUser.profileUrl);
let findObj = ChatManagementCommon.selectedUserList.find(function (
shopMemberId
) {
return shopMemberId == groupUser.shopMemberId;
});
if (findObj) {
groupUser.checked = "checked";
}
});
let html = Mustache.render(groupUserTemplate, {
groupName: myGroup.groupName,
groupUserList: myGroup.groupUserList,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#myGroupListForMakeRoom").append(obj);
});
};
ChatAddUser.refreshAllGroupForAddUser = function (paramGroupId) {
$(".cancel").addClass("none");
$(".search_form input").removeClass("focus");
$(".search_form input").val("");
$(".search_form form").removeClass();
$(".content").removeClass("none");
$(".overlay_src_msg").empty();
$("#tabAllGroupOnAddUser").prop("checked", true);
let groupId = paramGroupId;
//オンライン状態であればサーバから情報更新。
NativeBridgeDelegate.updateGroupInfo(groupId);
//画面エリアを初期化。
ChatAddUser.initialzScreen();
//DBからグループ情報を取得。
const result = NativeBridgeDataSource.getGroupInfoForAddUser(groupId);
//上位グループ、トップグループ遷移ボタンのイベント追加。
if (typeof result.parentGroupId !== "undefined") {
$("#parentGroupBtnForAddUser").on("click", function () {
ChatAddUser.refreshAllGroupForAddUser(result.parentGroupId);
});
}
if (typeof result.rootGroupId !== "undefined") {
if (paramGroupId == 0) {
groupId = result.rootGroupId;
}
$("#rootGroupBtnForAddUser").on("click", function () {
ChatAddUser.refreshAllGroupForAddUser(result.rootGroupId);
});
}
if (groupId == result.rootGroupId || paramGroupId == "0") {
$("#rootGroupArea").addClass("none");
$("#parentGroupArea").addClass("none");
} else {
$("#rootGroupArea").removeClass("none");
$("#parentGroupArea").removeClass("none");
}
//該当グループのパースを表示。
ChatAddUser.appendGroupPath(result.groupPathList);
//該当グループの下位グループ表示。
ChatAddUser.appendGroupInGroup(result.childGroupList);
//該当グループの所属ユーザを表示。
ChatAddUser.appendUserInGroup(result.groupUserList);
};
ChatAddUser.initialzScreen = function () {
$("#parentGroupBtnForAddUser").off();
$("#rootGroupBtnForAddUser").off();
$("#childGroupListAreaForAddUser").html("");
$("#userInGroupListForAddUser").html("");
$("#groupPathAreaForAddUser").html("");
};
ChatAddUser.appendGroupPath = function (groupPathList) {
const groupPathTemplate = getTemplate(TemplateURL.ADD_USER_GROUP_PATH);
let groupPathCount = 0;
groupPathList.forEach(function (groupPath) {
if (!(groupPathCount < groupPathList.length - 3)) {
let html = Mustache.render(groupPathTemplate, {
name: groupPath.groupName,
id: groupPath.groupId,
});
let obj = jQuery.parseHTML(html);
$("#groupPathAreaForAddUser").append(obj);
}
groupPathCount++;
});
};
ChatAddUser.appendGroupInGroup = function (childGroupList) {
const groupTemplate = getTemplate(TemplateURL.ADD_USER_GROUP_LIST);
childGroupList.forEach(function (childGroup) {
let html = Mustache.render(groupTemplate, {
name: childGroup.groupName,
id: childGroup.groupId,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#childGroupListAreaForAddUser").append(obj);
});
};
ChatAddUser.appendUserInGroup = function (groupUserList) {
const userTemplate = getTemplate(TemplateURL.ADD_USER_USER_LIST);
groupUserList.forEach(function (groupUser) {
groupUser.profileUrl = Common.getProfileImgUrl(groupUser.profileUrl);
let findObj = ChatManagementCommon.selectedUserList.find(function (
shopMemberID
) {
return shopMemberID == groupUser.shopMemberId;
});
if (findObj) {
groupUser.checked = "checked";
}
});
let html = Mustache.render(userTemplate, {
userList: groupUserList,
});
let obj = jQuery.parseHTML(html);
$("#userInGroupListForAddUser").append(obj);
};
// 名前空間
var ChatMakeRoom = {};
document.addEventListener("DOMContentLoaded", function () {
// メンバー検索
ChatMakeRoom.searchMember();
// iOSキーボード変換検知用
ChatMakeRoom.bindiOSKeyBoardEvent();
ChatMakeRoom.bindSearchCancel();
});
// メンバー検索
ChatMakeRoom.searchUser = function (keyword) {
const overlayMessage = $(".overlay_src_msg");
const isAllGroup = $("#tabAllGroupOnMakeRoom").is(":checked");
let hasNoData = false;
overlayMessage.empty();
//全グループ検索画面
if (isAllGroup) {
//グループデータ検索
const groupList = NativeBridgeDataSource.getGroupByName(keyword);
const groupTemplate = getTemplate(TemplateURL.MAKE_ROOM_GROUP_LIST);
groupList.forEach(function (group) {
let html = ChatMakeRoom.renderRoomList(
groupTemplate,
group.groupName,
group.groupId
);
let obj = jQuery.parseHTML(html);
overlayMessage.append(obj);
});
//ユーザデータ検索
const userList =
NativeBridgeDataSource.getAllGroupShopMemberByName(keyword);
ChatMakeRoom.searchUserData(userList);
const userTemplate = getTemplate(TemplateURL.MAKE_ROOM_USER_LIST);
const html = ChatMakeRoom.renderUser(userTemplate, userList);
const obj = jQuery.parseHTML(html);
overlayMessage.append(obj);
hasNoData = groupList.length == 0 && userList.length == 0;
} else {
// 連絡先画面
const userList = NativeBridgeDataSource.getMyGroupShopMemberByName(keyword);
ChatMakeRoom.searchUserData(userList);
var userTemplate = getTemplate(TemplateURL.MAKE_ROOM_USER_LIST);
let html = ChatMakeRoom.renderUser(userTemplate, userList);
let obj = jQuery.parseHTML(html);
overlayMessage.html(obj);
hasNoData = userList.length == 0;
}
if (hasNoData) {
const noResultMsg = getNoResultMessage();
overlayMessage.append(noResultMsg);
}
};
/** UTIL */
ChatMakeRoom.searchMember = function () {
const searchInput = $('#chatMakeRoom .search_form input[type="search"]');
searchInput.click(function (e) {
let contactListTitle = getLocalizedString("userSearch");
$("#makeRoomTitle").text(contactListTitle);
});
searchInput.keyup(function (e) {
const keyword = searchInput.val();
const enterKeyPressed = e.KeyCode == 13 || e.key == "Enter";
const keywordEmpty = keyword == "" || keyword.length < 2;
const keywordNotEmpty = keyword != "" && keyword.length != 0;
//画面タイトル設定
if (enterKeyPressed) {
if (keywordNotEmpty) {
searchInput.blur();
return false;
}
} else if (keywordEmpty) {
$(".overlay_src_msg").empty();
return false;
}
ChatMakeRoom.searchUser(keyword);
if (enterKeyPressed) {
searchInput.blur();
return;
}
});
};
ChatMakeRoom.bindiOSKeyBoardEvent = function () {
if (deviceInfo.isiOS()) {
const searchInput = $('#chatMakeRoom .search_form input[type="search"]');
searchInput.on("compositionend", function () {
var keyword = searchInput.val();
ChatMakeRoom.searchUser(keyword);
});
}
};
ChatMakeRoom.bindSearchCancel = function () {
$("#chatMakeRoom .search_form .cancel").click(function () {
let roomListTitle = getLocalizedString("createRoomTitle");
$("#makeRoomTitle").text(roomListTitle);
});
};
ChatMakeRoom.renderRoomList = function (url, groupName, groupID) {
return Mustache.render(url, {
name: groupName,
id: groupID,
});
};
ChatMakeRoom.searchUserData = function (userList) {
userList.forEach(function (user) {
user.profileUrl = Common.getProfileImgUrl(user.profileUrl);
let findObj = ChatManagementCommon.selectedUserList.find(function (
shopMemberId
) {
return shopMemberId == user.shopMemberId;
});
if (findObj) {
user.checked = "checked";
}
});
};
ChatMakeRoom.renderUser = function (url, userList) {
return Mustache.render(url, {
userList: userList,
});
};
$("#makeRoomConfirmBtn").on("click", function (e) {
const selectedUserList = ChatManagementCommon.selectedUserList.join(",");
NativeBridgeDelegate.saveSelectedUserList(selectedUserList);
$("#makeRoomForm").submit();
});
$("#tabAllGroupOnMakeRoom").on("click", function (e) {
ChatMakeRoom.refreshAllGroupForMakeRoom("0");
});
$("#tabMyGroupOnMakeRoom").on("click", function (e) {
ChatMakeRoom.refreshMyGroupForMakeRoom();
});
ChatMakeRoom.refreshMyGroupForMakeRoom = function () {
$(".modal-backdrop").remove();
$("#favoriteListForMakeRoom").html("");
$("#myGroupListForMakeRoom").html("");
//画面タイトル設定
let contactListTitle = getLocalizedString("userSearch");
$("#title").text(contactListTitle);
NativeBridgeDelegate.updateContactInfo();
ChatMakeRoom.appendFavoriteGroupList();
ChatMakeRoom.appendFavoriteUserList();
ChatMakeRoom.appendMyGroupList();
};
ChatMakeRoom.appendFavoriteGroupList = function () {
// グループの様式を読み込む
const groupTemplate = getTemplate(TemplateURL.MAKE_ROOM_GROUP_LIST);
//お気に入りグループ取得。
const favoriteGroupList = NativeBridgeDataSource.getFavoriteGroups();
favoriteGroupList.forEach(function (favoriteGroup) {
let html = Mustache.render(groupTemplate, {
name: favoriteGroup.groupName,
id: favoriteGroup.groupId,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#favoriteListForMakeRoom").append(obj);
});
};
ChatMakeRoom.appendFavoriteUserList = function () {
// ユーザの様式を読み込む
const userTemplate = getTemplate(TemplateURL.MAKE_ROOM_USER_LIST);
const favoriteUserList = NativeBridgeDataSource.getFavoriteUsers();
favoriteUserList.forEach(function (favoriteUser) {
favoriteUser.profileUrl = Common.getProfileImgUrl(favoriteUser.profileUrl);
let findObj = ChatManagementCommon.selectedUserList.find(function (
shopMemberID
) {
return shopMemberID == favoriteUser.shopMemberId;
});
if (findObj) {
favoriteUser.checked = "checked";
}
});
let html = Mustache.render(userTemplate, {
userList: favoriteUserList,
});
let obj = jQuery.parseHTML(html);
$("#favoriteListForMakeRoom").append(obj);
};
ChatMakeRoom.appendMyGroupList = function () {
const groupUserTemplate = getTemplate(TemplateURL.MAKE_ROOM_GROUP_USER_LIST);
const myGroupList = NativeBridgeDataSource.getMyGroupUsers();
myGroupList.forEach(function (myGroup) {
myGroup.groupUserList.forEach(function (groupUser) {
groupUser.profileUrl = Common.getProfileImgUrl(groupUser.profileUrl);
let findObj = ChatManagementCommon.selectedUserList.find(function (
shopMemberID
) {
return shopMemberID == groupUser.shopMemberId;
});
if (findObj) {
groupUser.checked = "checked";
}
});
let html = Mustache.render(groupUserTemplate, {
groupName: myGroup.groupName,
groupUserList: myGroup.groupUserList,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#myGroupListForMakeRoom").append(obj);
});
};
ChatMakeRoom.refreshAllGroupForMakeRoom = function (paramGroupId) {
let groupId = paramGroupId;
$(".cancel").addClass("none");
$(".search_form input").removeClass("focus");
$(".search_form input").val("");
$(".search_form form").removeClass();
$(".content").removeClass("none");
$(".overlay_src_msg").empty();
$("#tabAllGroupOnMakeRoom").prop("checked", true);
//オンライン状態であればサーバから情報更新。
NativeBridgeDelegate.updateGroupInfo(groupId);
//画面エリアを初期化。
$("#parentGroupBtnForMakeRoom").off();
$("#rootGroupBtnForMakeRoom").off();
$("#childGroupListAreaForMakeRoom").html("");
$("#userInGroupListForMakeRoom").html("");
$("#groupPathAreaForMakeRoom").html("");
//DBからグループ情報を取得。
var result = NativeBridgeDataSource.getGroupInfo(groupId);
//上位グループ、トップグループ遷移ボタンのイベント追加。
if (typeof result.parentGroupId !== "undefined") {
$("#parentGroupBtnForMakeRoom").on("click", function () {
ChatMakeRoom.refreshAllGroupForMakeRoom(result.parentGroupId);
});
}
if (typeof result.rootGroupId !== "undefined") {
if (paramGroupId == 0) {
groupId = result.rootGroupId;
}
$("#rootGroupBtnForMakeRoom").on("click", function () {
ChatMakeRoom.refreshAllGroupForMakeRoom(result.rootGroupId);
});
}
if (groupId == result.rootGroupId || paramGroupId == "0") {
$("#rootGroupArea").addClass("none");
$("#parentGroupArea").addClass("none");
} else {
$("#rootGroupArea").removeClass("none");
$("#parentGroupArea").removeClass("none");
}
//該当グループのパースを表示。
ChatMakeRoom.appendGroupPathList(result.groupPathList);
//該当グループの下位グループ表示。
ChatMakeRoom.appendGroupList(result.childGroupList);
//該当グループの所属ユーザを表示。
ChatMakeRoom.appendUsersInGroup(result.groupUserList);
};
ChatMakeRoom.appendGroupPathList = function (groupPathList) {
const groupPathTemplate = getTemplate(TemplateURL.MAKE_ROOM_GROUP_PATH);
let groupPathCount = 0;
groupPathList.forEach(function (groupPath) {
if (!(groupPathCount < groupPathList.length - 3)) {
let html = Mustache.render(groupPathTemplate, {
name: groupPath.groupName,
id: groupPath.groupId,
});
let obj = jQuery.parseHTML(html);
$("#groupPathAreaForMakeRoom").append(obj);
}
groupPathCount++;
});
};
ChatMakeRoom.appendGroupList = function (childGroupList) {
const groupTemplate = getTemplate(TemplateURL.MAKE_ROOM_GROUP_LIST);
childGroupList.forEach(function (childGroup) {
let html = Mustache.render(groupTemplate, {
name: childGroup.groupName,
id: childGroup.groupId,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#childGroupListAreaForMakeRoom").append(obj);
});
};
ChatMakeRoom.appendUsersInGroup = function (groupUserList) {
var userTemplate = getTemplate(TemplateURL.MAKE_ROOM_USER_LIST);
groupUserList.forEach(function (groupUser) {
groupUser.profileUrl = Common.getProfileImgUrl(groupUser.profileUrl);
let findObj = ChatManagementCommon.selectedUserList.find(function (
shopMemberID
) {
return shopMemberID == groupUser.shopMemberId;
});
if (findObj) {
groupUser.checked = "checked";
}
});
let html = Mustache.render(userTemplate, {
userList: groupUserList,
});
let obj = jQuery.parseHTML(html);
$("#userInGroupListForMakeRoom").append(obj);
};
var ChatManagementCommon = {};
//招待するメンバーを保存する変数
ChatManagementCommon.selectedUserList = new Array();
ChatManagementCommon.showMakeRoomConfirmView = function () {
$("#selectedUserList").html("");
const userTemplate = getTemplate(TemplateURL.MAKE_ROOM_CONFIRM_USER_LIST);
const selectedUserList = NativeBridgeDataSource.loadSelectedUsers();
selectedUserList.forEach(function (user) {
const html = Mustache.render(userTemplate, {
id: user.shopMemberId,
profileImage: Common.getProfileImgUrl(user.profileUrl),
name: user.shopMemberName,
});
const obj = jQuery.parseHTML(html);
$("#selectedUserList").append(obj);
});
$("#makeRoomBtn")
.off()
.on("click", function () {
// #36130に対応
const trimmedRoomName = $("#newRoomName").val().trim();
if (trimmedRoomName.length == 0) {
// loadingIndicatorを表示
Common.showLoadingIndicator();
let userIDList = new Array();
let userNameList = new Array();
selectedUserList.forEach(function (user) {
userIDList.push(user.shopMemberId);
userNameList.push(user.shopMemberName);
});
// 参加ユーザ名でルーム名を生成
let newRoomName =
currentUserInfo.loginID + "," + userNameList.join(",");
NativeBridgeDelegate.createChatRoom(
ChatRoomType.DM,
userIDList.join(","),
newRoomName,
MakeRoomFlag.MAKE_ROOM,
false
);
} else if (
trimmedRoomName.includes(";") ||
trimmedRoomName.includes("/") ||
trimmedRoomName.includes("?") ||
trimmedRoomName.includes(":") ||
trimmedRoomName.includes("@") ||
trimmedRoomName.includes("&") ||
trimmedRoomName.includes("=") ||
trimmedRoomName.includes("+") ||
trimmedRoomName.includes("$") ||
trimmedRoomName.includes(",") ||
trimmedRoomName.includes("-") ||
trimmedRoomName.includes("_") ||
trimmedRoomName.includes(".") ||
trimmedRoomName.includes("!") ||
trimmedRoomName.includes("~") ||
trimmedRoomName.includes("*") ||
trimmedRoomName.includes("'") ||
trimmedRoomName.includes("(") ||
trimmedRoomName.includes(")") ||
trimmedRoomName.includes("#") ||
trimmedRoomName.includes("\\") ||
trimmedRoomName.includes('"') ||
trimmedRoomName.includes("`")
) {
// #36147
// #36174
$("#customAlertTitle").text(getLocalizedString("invalidCharacter"));
$("#customAlertOk").text(getLocalizedString("yesTitle"));
$("#customAlert")
.appendTo("body")
.modal({
backdrop: "static",
keyboard: false,
})
.on("click", "#customAlertOk", function (e) {});
} else if (trimmedRoomName.length > 20) {
// #36142
var inputText = $("#newRoomName").val().trim(); // #36142 文字列の前又は後の空白文字列を削除
// #36174
$("#customAlertTitle").text(getLocalizedString("nameTooLong"));
$("#customAlertOk").text(getLocalizedString("yesTitle"));
$("#customAlert")
.appendTo("body")
.modal({
backdrop: "static",
keyboard: false,
})
.on("click", "#customAlertOk", function (e) {
$("#newRoomName").val(
inputText.substr(0, $("#newRoomName").prop("maxlength"))
);
});
} else {
//loadingIndicatorを表示
Common.showLoadingIndicator();
let userIdList = new Array();
selectedUserList.forEach(function (user) {
userIdList.push(user.shopMemberId);
});
// TODO: check why here using trimmedroomname instead of encodedRoomName
// ルーム名のtrimmingした後、URIencodingを行う
const encodedRoomName = encodeURIComponent(trimmedRoomName);
NativeBridgeDelegate.createChatRoom(
ChatRoomType.DM,
userIdList.join(","),
trimmedRoomName,
MakeRoomFlag.MAKE_ROOM,
false
);
}
});
$("#newRoomName").attr("placeholder", getLocalizedString("newRoomName"));
};
ChatManagementCommon.showAddUserConfirmView = function () {
$("#selectedUserList").html("");
const userTemplate = getTemplate(TemplateURL.ADD_USER_CONFIRM_USER_LIST);
const selectedUserList = NativeBridgeDataSource.loadSelectedUsers();
selectedUserList.forEach(function (user) {
let html = Mustache.render(userTemplate, {
id: user.shopMemberId,
profileImage: Common.getProfileImgUrl(user.profileUrl),
name: user.shopMemberName,
});
let obj = jQuery.parseHTML(html);
$("#selectedUserList").append(obj);
});
$("#addUserBtn")
.off()
.on("click", function () {
Common.showLoadingIndicator();
let userIdList = new Array();
selectedUserList.forEach(function (user) {
userIdList.push(user.shopMemberId);
});
NativeBridgeDelegate.inviteUsers(userIdList.join(","));
});
};
ChatManagementCommon.checkForMakeChat = function (checkMemberID) {
let findObj = ChatManagementCommon.selectedUserList.find(function (
shopMemberID
) {
return shopMemberID == checkMemberID;
});
if (findObj) {
// remove
ChatManagementCommon.selectedUserList =
ChatManagementCommon.selectedUserList.filter(function (shopMemberID) {
return checkMemberID != shopMemberID;
});
ChatManagementCommon.updateCheckBox(checkMemberID, false);
} else {
// add
ChatManagementCommon.selectedUserList.push(checkMemberID);
ChatManagementCommon.updateCheckBox(checkMemberID, true);
}
const cnt = ChatManagementCommon.selectedUserList.length;
if (ChatManagementCommon.selectedUserList.length > 0) {
$(".select_member_num").text(cnt);
} else {
$(".select_member_num").text("0");
}
};
ChatManagementCommon.updateCheckBox = function (checkMemberID, checked) {
$(".checkbox" + checkMemberID)
.prop("checked", checked)
.trigger("change");
};
var ChatRoomChange = {};
document.addEventListener("DOMContentLoaded", function () {
// ルーム名変更イベント
$(".change_room_name_btn button").click(function () {
$("form").submit();
});
});
$("#roomNameChangeBtn").click(function () {
var changeRoomName = $("#roomNameInput").val();
var trimmedRoomName = $("#roomNameInput").val().trim();
if (trimmedRoomName.length == 0) {
alert(getLocalizedString("error_empty_room_name"));
return;
}
NativeBridgeDelegate.changeRoomName(changeRoomName);
});
CollaborationUI.initialBindAddUserButton = function () {
// ユーザー招待メンバー検索
$(".add_user_btn").click(function () {
CollaborationUI.enableScroll();
Common.showLoadingIndicator();
ChatManagementCommon.selectedUserList = [];
CollaborationUI.refreshMyGroupForAddUserInCollaboration();
$("#addUserConfirmBtnInCollaboration")
.off()
.on("click", function () {
$("#addUserInCollaboration").modal("hide");
const selectedUserList =
ChatManagementCommon.selectedUserList.join(",");
NativeBridgeDelegate.saveSelectedUserList(selectedUserList);
CollaborationUI.confirmInviteUserListInCollaboration();
});
});
};
$("#tabMyGroupOnAddUserInCollaboration").on("click", function (e) {
CollaborationUI.refreshMyGroupForAddUserInCollaboration();
});
$("#tabAllGroupOnAddUserInCollaboration").on("click", function (e) {
CollaborationUI.refreshAllGroupForAddUserInCollaboration("0");
});
CollaborationUI.refreshMyGroupForAddUserInCollaboration = function () {
if (ChatManagementCommon.selectedUserList.length > 0) {
$(".select_member_num").text(ChatManagementCommon.selectedUserList.length);
} else {
$(".select_member_num").text("0");
}
$("#favoriteListForAddUserInCollaboration").html("");
$("#myGroupListForAddUserInCollaboration").html("");
$("#tabMyGroupOnAddUserInCollaboration").prop("checked", true);
NativeBridgeDelegate.updateContactInfo();
CollaborationUI.appendFavoriteGroupList();
CollaborationUI.appendFavoriteUserList();
CollaborationUI.appendMyGroupList();
$("#addUserInCollaboration").modal("show");
Common.dismissLoadingIndicator();
};
CollaborationUI.appendFavoriteGroupList = function () {
// グループの様式を読み込む
const groupTemplate = getTemplate(
TemplateURL.ADD_USER_GROUP_LIST_IN_COLLABORATION
);
//お気に入りグループ取得。
const favoriteGroupList = NativeBridgeDataSource.getFavoriteGroups();
favoriteGroupList.forEach(function (favoriteGroup) {
let html = Mustache.render(groupTemplate, {
name: favoriteGroup.groupName,
id: favoriteGroup.groupId,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#favoriteListForAddUserInCollaboration").append(obj);
});
};
CollaborationUI.appendFavoriteUserList = function () {
// ユーザの様式を読み込む
const userTemplate = getTemplate(
TemplateURL.ADD_USER_USER_LIST_IN_COLLABORATION
);
//お気に入りユーザ取得。
const favoriteUserList = NativeBridgeDataSource.getFavoriteUsersNotInRoom();
favoriteUserList.forEach(function (favoriteUser) {
favoriteUser.profileUrl = Common.getProfileImgUrl(favoriteUser.profileUrl);
let findObj = ChatManagementCommon.selectedUserList.find(function (
shopMemberId
) {
return shopMemberId == favoriteUser.shopMemberId;
});
if (findObj) {
favoriteUser.checked = "checked";
}
});
let html = Mustache.render(userTemplate, {
userList: favoriteUserList,
});
let obj = jQuery.parseHTML(html);
$("#favoriteListForAddUserInCollaboration").append(obj);
};
CollaborationUI.appendMyGroupList = function () {
const groupUserTemplate = getTemplate(
TemplateURL.ADD_USER_GROUP_USER_LIST_IN_COLLABORATION
);
const myGroupList = NativeBridgeDataSource.getMyGroupUsersNotInRoom();
myGroupList.forEach(function (myGroup) {
myGroup.groupUserList.forEach(function (groupUser) {
groupUser.profileUrl = Common.getProfileImgUrl(groupUser.profileUrl);
let findObj = ChatManagementCommon.selectedUserList.find(function (
shopMemberID
) {
return shopMemberID == groupUser.shopMemberId;
});
if (findObj) {
groupUser.checked = "checked";
}
});
let html = Mustache.render(groupUserTemplate, {
groupName: myGroup.groupName,
groupUserList: myGroup.groupUserList,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#myGroupListForAddUserInCollaboration").append(obj);
});
};
CollaborationUI.refreshAllGroupForAddUserInCollaboration = function (groupID) {
$(".content").removeClass("none");
$("#tabAllGroupOnAddUserInCollaboration").prop("checked", true);
NativeBridgeDelegate.updateGroupInfo(groupID);
//画面エリアを初期化。
$("#parentGroupBtnForAddUserInCollaboration").off();
$("#rootGroupBtnForAddUserInCollaboration").off();
$("#childGroupListAreaForAddUserInCollaboration").html("");
$("#userInGroupListForAddUserInCollaboration").html("");
$("#groupPathAreaForAddUserInCollaboration").html("");
//DBからグループ情報を取得。
const result = NativeBridgeDataSource.getGroupInfoForAddUser(groupID);
//上位グループ、トップグループ遷移ボタンのイベント追加。
CollaborationUI.appendRootGroupAndParentGroupIfNeeded(
result.rootGroupId,
result.parentGroupId,
groupID
);
//該当グループのパースを表示。
CollaborationUI.appendGroupPath(result.groupPathList);
//該当グループの下位グループ表示。
CollaborationUI.appendChildGroups(result.childGroupList);
//該当グループの所属ユーザを表示。
CollaborationUI.appendUsers();
};
CollaborationUI.bindOnClickParentGroup = function (parentGroupID) {
$("#parentGroupBtnForAddUserInCollaboration").on("click", function () {
CollaborationUI.refreshAllGroupForAddUserInCollaboration(parentGroupID);
});
};
CollaborationUI.bindOnClickRootGroup = function (rootGroupID) {
$("#rootGroupBtnForAddUserInCollaboration").on("click", function () {
CollaborationUI.refreshAllGroupForAddUserInCollaboration(rootGroupID);
});
};
CollaborationUI.displayRootGroupAndParentGroupIfNeeded = function (
rootGroupID,
groupID
) {
if (typeof rootGroupID !== "undefined" && paramGroupID == 0) {
groupID = rootGroupID;
}
if (groupID == rootGroupID || groupID == "0") {
$("#rootGroupAreaInCollaboration").addClass("none");
$("#parentGroupAreaInCollaboration").addClass("none");
} else {
$("#rootGroupAreaInCollaboration").removeClass("none");
$("#parentGroupAreaInCollaboration").removeClass("none");
}
};
CollaborationUI.appendGroupPath = function (groupPathList) {
const groupPathTemplate = getTemplate(
TemplateURL.ADD_USER_GROUP_PATH_IN_COLLABORATION
);
let groupPathCount = 0;
groupPathList.forEach(function (groupPath) {
if (!(groupPathCount < groupPathList.length - 3)) {
let html = Mustache.render(groupPathTemplate, {
name: groupPath.groupName,
id: groupPath.groupId,
});
let obj = jQuery.parseHTML(html);
$("#groupPathAreaForAddUserInCollaboration").append(obj);
}
groupPathCount++;
});
};
CollaborationUI.appendChildGroups = function (chidGroups) {
const groupTemplate = getTemplate(
TemplateURL.ADD_USER_GROUP_LIST_IN_COLLABORATION
);
chidGroups.forEach(function (childGroup) {
let html = Mustache.render(groupTemplate, {
name: childGroup.groupName,
id: childGroup.groupId,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#childGroupListAreaForAddUserInCollaboration").append(obj);
});
};
CollaborationUI.appendUsers = function (userList) {
const userTemplate = getTemplate(
TemplateURL.ADD_USER_USER_LIST_IN_COLLABORATION
);
userList.forEach(function (groupUser) {
groupUser.profileUrl = Common.getProfileImgUrl(groupUser.profileUrl);
let findObj = ChatManagementCommon.selectedUserList.find(function (
shopMemberID
) {
return shopMemberID == groupUser.shopMemberId;
});
if (findObj) {
groupUser.checked = "checked";
}
});
let html = Mustache.render(userTemplate, {
userList: userList,
});
let obj = jQuery.parseHTML(html);
$("#userInGroupListForAddUserInCollaboration").append(obj);
};
CollaborationUI.appendRootGroupAndParentGroupIfNeeded = function (
rootGroupID,
parentGroupID,
groupID
) {
if (typeof parentGroupID !== "undefined") {
CollaborationUI.bindOnClickParentGroup(parentGroupID);
}
if (typeof rootGroupID !== "undefined") {
CollaborationUI.bindOnClickRootGroup(rootGroupID);
}
CollaborationUI.displayRootGroupAndParentGroupIfNeeded(rootGroupID, groupID);
};
CollaborationUI.confirmInviteUserListInCollaboration = function () {
const selectedUsers = NativeBridgeDataSource.loadSelectedUsers();
if (selectedUsers != "") {
$("#selectedUserListinCollaboration").html("");
selectedUsers.forEach(function (user) {
user.profileUrl = Common.getProfileImgUrl(user.profileUrl);
});
const modalTemplate = getTemplate(TemplateURL.MODAL_ADD_USER_CONFIRM);
const html = Mustache.render(modalTemplate, {
userList: selectedUsers,
});
let obj = jQuery.parseHTML(html);
$("#modal_add_user_confirm").html(obj);
$("#modalAddUserConfirm").modal("show");
}
CollaborationUI.bindCancelAddUserButton();
CollaborationUI.bindAddUserButton(selectedUsers);
};
CollaborationUI.bindCancelAddUserButton = function () {
$("#cancelAddUserBtn")
.off()
.on("click", function () {
$("#modalAddUserConfirm").modal("hide");
$("#addUserInCollaboration").modal("show");
});
};
CollaborationUI.bindAddUserButton = function (selectedUsers) {
$("#addUserBtn")
.off()
.on("click", function () {
Common.showLoadingIndicator();
let userIDList = selectedUsers.map((user) => user.shopMemberId);
const commaJoinedUserIDList = userIDList.join(",");
const collaborationType = globalUserInfo.collaborationType;
NativeBridgeDelegate.inviteCollaboration(
commaJoinedUserIDList,
collaborationType
);
Common.dismissLoadingIndicator();
$("#modalAddUserConfirm").modal("hide");
});
};
CollaborationUI.toggleCategory = function (category) {
$(category).toggleClass("open");
$(category).next().slideToggle();
};
var CollaborationUI = {};
document.addEventListener("DOMContentLoaded", function () {
CollaborationUI.disableScroll();
// メニューオーバーレイ表示
CollaborationUI.bindMenuButton();
// ユーザーリストオーバーレイ表示
CollaborationUI.bindDisplayUsersButton();
// モーダルonモーダル(前のモーダルを非表示に)
// ホスト変更ボタン押下イベント
CollaborationUI.bindChangeHostButton();
// 閉じるイベント
CollaborationUI.bindCloseButton();
// ユーザー追加イベント
CollaborationUI.bindInviteButton();
CollaborationUI.initialBindAddUserButton();
});
/*********************************
* Buttons binding events
********************************/
CollaborationUI.bindMenuButton = function () {
$(".menu_btn").click(function () {
$(this).toggleClass("hide");
$("#overlay_menu .item").toggleClass("hide");
});
};
CollaborationUI.bindDisplayUsersButton = function () {
$(".user_btn").click(function () {
var w = $(this).width();
$(this).toggleClass("hide");
$("#overlay_user_list.overlay")
.toggleClass("slidein")
.css({ transform: "translateX(" & -w & ")" });
if ($(this).hasClass("hide")) {
CollaborationUI.enableScroll();
} else {
scrollTo(0, 0);
CollaborationUI.disableScroll();
}
});
};
CollaborationUI.bindChangeHostButton = function () {
$(".ch_host_btn").click(function () {
const target = $(this).val();
const beforeModal = $(target);
const afterModal = $("#changeHostModal");
/* モーダルの切り替え */
beforeModal.modal("hide");
afterModal.modal("show");
});
};
CollaborationUI.bindCloseButton = function () {
$(".close_btn").click(function () {
$("#overlay_add_user_list").addClass("none");
CollaborationUI.disableScroll();
});
};
CollaborationUI.bindInviteButton = function () {
$(".inv_btn").click(function () {
$("#overlay_add_user_list").addClass("none");
});
};
/*********************************
* Scroll Controls
********************************/
CollaborationUI.disableScroll = function () {
document.addEventListener("mousewheel", CollaborationUI.scrollControl, {
passive: false,
});
document.addEventListener("touchmove", CollaborationUI.scrollControl, {
passive: false,
});
};
// スクロール禁止解除
CollaborationUI.enableScroll = function () {
document.removeEventListener("mousewheel", CollaborationUI.scrollControl, {
passive: false,
});
document.removeEventListener("touchmove", CollaborationUI.scrollControl, {
passive: false,
});
};
CollaborationUI.scrollControl = function (event) {
if (event.cancelable) {
event.preventDefault();
}
};
/*********************************
* NameCard in Collaboration
********************************/
CollaborationUI.makeNameCard = function (shopMemberID) {
if (currentUserInfo.shopMemberID == shopMemberID) {
return;
}
const namecardTemplate = getTemplate(TemplateURL.COLLABORATION_PROFILE);
const nameCardInfo = NativeBridgeDataSource.getNameCardData(shopMemberID);
nameCardInfo.profileUrl = Common.getProfileImgUrl(nameCardInfo.profileUrl);
let isCollaborationHost = coview_api.getRoomUsers();
const whosHost = $("#collaboration_user_" + nameCardInfo.loginId).hasClass(
"host"
);
let namecardHTML = Mustache.render(namecardTemplate, {
shopMemberId: nameCardInfo.shopMemberId,
profileUrl: nameCardInfo.profileUrl,
loginId: nameCardInfo.loginId,
name: nameCardInfo.shopMemberName,
groupPathList: nameCardInfo.groupPathList,
isFavorite: nameCardInfo.isFavorite,
isHost: isCollaborationHost,
whosHost: whosHost,
});
let namecardObj = $(jQuery.parseHTML(namecardHTML)).on(
"click",
function () {}
);
$("#userProfileModalInCollaboration").html(namecardObj);
$("#userNameCardInCollaboration").modal("show");
};
CollaborationUI.removeFavoriteUserInCollaboration = function (shopMemberID) {
Common.showLoadingIndicator();
$("#userNameCardInCollaboration").modal("hide");
NativeBridgeDataSource.removeFavoriteUser(shopMemberID);
Common.dismissLoadingIndicator();
};
CollaborationUI.insertFavoriteUserInCollaboration = function (shopMemberID) {
$("#userNameCardInCollaboration").modal("hide");
NativeBridgeDataSource.addFavoriteUser(shopMemberID);
Common.dismissLoadingIndicator();
};
CollaborationUI.refreshForOffline = function () {
serverInfo.isOnline = "false";
if (typeof coview_api == "undefined") {
return;
}
const alertString = getLocalizedString("err_weak_network_exit_collaboration");
alert(alertString);
NativeBridgeDelegate.finishCollaboration();
if (globalUserInfo.joinType != COLLABORATION_JOIN_TYPE.INVITED) {
NativeBridgeDelegate.joinRoom(roomInfo.roomID, roomInfo.name);
} else {
NativeBridgeDelegate.openCommunicationHome();
}
};
CollaborationUI.showLoadingIndicator = function () {
$("#loadingIndicator").addClass("full_active");
};
CollaborationUI.hideLoadingIndicator = function () {
$("#loadingIndicator").removeClass("full_active");
};
CollaborationUI.displayAddUserButtonIfNeeded = function () {
if (roomInfo.roomType == ChatRoomType.DM) {
$(".add_user_btn").removeClass("none");
}
};
var FermiWebSocketBridge = {};
// call from modal_collabo_profile.html
FermiWebSocketBridge.requestHostChange = function (loginID) {
fw.sendToMsg("others", "HOST_CHANGE_REQUEST", {
loginId: getFermiLoginId(loginID),
});
};
FermiWebSocketBridge.shareFileHost = function (collaborationType) {
fw.sendToMsg("others", "SHARE_FILE_HOST", {
// TODO: Peacekim check collaboration type as coviewType
collaborationType: collaborationType,
});
};
FermiWebSocketBridge.hostChangeResponse = function () {
fw.sendToMsg("others", "HOST_CHANGE_RESPONSE", {
isAndroid: deviceInfo.isAndroid(),
isAble: deviceInfo.androidVersion >= ANDROID_SDK_VERSION.O,
loginId: currentUserInfo.loginID,
});
};
// PIP_END_REQUEST
FermiWebSocketBridge.pipEndRequest = function (loginID) {
fw.sendToMsg("others", "PIP_END_REQUEST", {
loginId: getFermiLoginId(loginID),
});
};
// HOST_REQUEST_REJECT
FermiWebSocketBridge.hostRequestReject = function (hostID) {
fw.sendToMsg("others", "HOST_REQUEST_REJECT", {
hostId: hostID,
});
};
// HOST_REQUEST_DONE
FermiWebSocketBridge.hostRequestDone = function (hostID) {
fw.sendToMsg("others", "HOST_REQUEST_DONE", {
hostId: hostID,
});
};
// GET_COLLABORATION_TYPE_RESPONSE
FermiWebSocketBridge.getCollaborationTypeResponse = function (loginID) {
fw.sendToMsg("others", "GET_COLLABORATION_TYPE_RESPONSE", {
loginId: loginID,
collaborationType: globalUserInfo.collaborationType,
newMeetingId: meetingID,
});
};
// GET_COLLABORATION_TYPE
FermiWebSocketBridge.getCollaborationType = function () {
fw.sendToMsg("others", "GET_COLLABORATION_TYPE", {
loginId: globalUserInfo.loginId,
});
};
// CAPTURE_REQUEST
FermiWebSocketBridge.captureRequest = function () {
// todo: peacekim:: check if it's okay for loginID
// instead of globalUserInfo.loginId
fw.sendToMsg("others", "CAPTURE_REQUEST", {
name: currentUserInfo.loginID,
});
};
// CHANGE_COLLABORATION
FermiWebSocketBridge.changeCollaboration = function (
collaborationType,
newMeetingID
) {
fw.sendToMsg("others", "CHANGE_COLLABORATION", {
collaborationType: collaborationType,
newMeetingId: newMeetingID,
});
};
// CHANGE_HOST_APPLY
FermiWebSocketBridge.changeHostApply = function () {
fw.sendToMsg("others", "CHANGE_HOST_APPLY", {
hostId: currentUserInfo.loginID,
});
};
var FermiWebSocketMessageHandler = {};
FermiWebSocketMessageHandler.bindWebSocketMessage = function () {
fw.socket.on("message", async function (data) {
if (g_isMainMan) {
FermiWebSocketMessageHandler.handleMessagesToHost(data);
} else if (data.payload.loginId == globalUserInfo.loginId) {
// 自分自身の場合
FermiWebSocketMessageHandler.handleMessagesToSelf(data);
} else {
// global messages
FermiWebSocketMessageHandler.handleMessagesToAll(data);
}
});
};
FermiWebSocketMessageHandler.handleMessagesToHost = function (data) {
// HOSTの場合
switch (data.type) {
case "CAPTURE_REQUEST":
FermiWebSocketMessageHandler.captureRequest(data);
break;
case "HOST_CHANGE_RESPONSE":
FermiWebSocketMessageHandler.hostChangeResponse(data);
break;
case "GET_COLLABORATION_TYPE":
FermiWebSocketMessageHandler.getCollaborationType(data);
break;
case "SHARE_FILE_HOST":
if (globalUserInfo.collaborationType != COLLABORATION_TYPE.CAMERA) {
FermiWebSocketMessageHandler.shareFileHost();
}
break;
case "CHANGE_HOST_APPLY":
FermiWebSocketMessageHandler.changeHostApplyForHost(data);
break;
default:
break;
}
};
FermiWebSocketMessageHandler.handleMessagesToSelf = function (data) {
// 自分自身の場合
switch (data.type) {
case "HOST_CHANGE_REQUEST":
FermiWebSocketMessageHandler.hostChangeRequest();
break;
case "PIP_END_REQUEST":
if (globalUserInfo.collaborationType == COLLABORATION_TYPE.DOCUMENT) {
FermiWebSocketMessageHandler.pipEndRequest();
}
break;
case "GET_COLLABORATION_TYPE_RESPONSE":
FermiWebSocketMessageHandler.getCollaborationTypeResponse(data);
break;
default:
break;
}
};
FermiWebSocketMessageHandler.handleMessagesToAll = function (data) {
switch (data.type) {
case "CHANGE_COLLABORATION":
FermiWebSocketMessageHandler.changeCollaboration(data);
break;
case "SHARE_FILE":
if (globalUserInfo.collaborationType != COLLABORATION_TYPE.CAMERA) {
FermiWebSocketMessageHandler.shareFile();
}
break;
case "API_SEND_OWNER_CHANGE_COMPLETE":
FermiWebSocketMessageHandler.apiSendOwnerChangeComplete();
break;
case "API_SEND_OWNER_CHANGE_CONFIRM":
if (globalUserInfo.collaborationType == COLLABORATION_TYPE.CAMERA) {
FermiWebSocketMessageHandler.apiSendOwnerChangeConfirm();
}
break;
case "CHANGE_HOST_APPLY":
FermiWebSocketMessageHandler.changeHostApplyForNotHost(data);
break;
case "HOST_REQUEST_DONE":
FermiWebSocketMessageHandler.hostRequestDone();
break;
case "HOST_REQUEST_REJECT":
FermiWebSocketMessageHandler.hostRequestReject(data);
break;
case "API_WELCOME":
if (globalUserInfo.joinType != COLLABORATION_JOIN_TYPE.INVITED) {
FermiWebSocketMessageHandler.apiWelcome();
}
break;
default:
break;
}
};
// CHANGE_COLLABORATION
FermiWebSocketMessageHandler.changeCollaboration = function (data) {
const newMeetingID = data.payload.newMeetingId;
if (globalUserInfo.collaborationType == COLLABORATION_TYPE.DOCUMENT) {
NativeBridgeDelegate.exitMeetingRoom();
NativeBridgeDelegate.finishPIPMode(true);
if (deviceInfo.isAndroid()) {
$(".pip_indicator").addClass("none");
}
waitMillisecond(500);
updateCanvasSize();
}
FermiWebSocketMessageHandler.updateJoinChangeCollaboration(
data.payload.collaborationType
);
globalUserInfo.meetingID = newMeetingID;
CollaborationUI.updateScreen(globalUserInfo.collaborationType);
NativeBridgeDelegate.joinChangedCollaboration(
globalUserInfo.collaborationType,
newMeetingID
);
if (globalUserInfo.collaborationType == COLLABORATION_TYPE.DOCUMENT) {
NativeBridgeDelegate.joinMeetingRoom(newMeetingID);
}
};
// SHARE_FILE
FermiWebSocketMessageHandler.shareFile = function () {
CollaborationUI.updateScreen(COLLABORATION_TYPE.CAMERA);
globalUserInfo.collaborationType = COLLABORATION_TYPE.CAMERA;
FermiWebSocketBridge.shareFileHost(COLLABORATION_TYPE.CAMERA);
};
// SHARE_FILE_HOST
FermiWebSocketMessageHandler.shareFileHost = function () {
CollaborationUI.updateScreen(COLLABORATION_TYPE.CAMERA);
globalUserInfo.collaborationType = COLLABORATION_TYPE.CAMERA;
};
// CAPTURE_REQUEST
FermiWebSocketMessageHandler.captureRequest = function (data) {
if (
confirm(data.payload.name + getLocalizedString("request_capture")) == false
) {
return;
}
if ($("#recordBtn .record").hasClass("disable")) {
screenLock();
recordStop(function () {
$("#screenLock").remove();
captureAndShareImage(
serverInfo.cmsURL + "/chatapi/file/uploadArchive",
data.payload.name
);
});
} else {
captureAndShareImage(
serverInfo.cmsURL + "/chatapi/file/uploadArchive",
data.payload.name
);
}
};
// HOST_CHANGE_REQUEST
FermiWebSocketMessageHandler.hostChangeRequest = function () {
FermiWebSocketBridge.hostChangeRequest();
};
// HOST_CHANGE_RESPONSE
FermiWebSocketMessageHandler.hostChangeResponse = function (data) {
const isAndroid = data.payload.isAndroid;
const isAble = data.payload.isAble;
if (
isAndroid &&
!isAble &&
globalUserInfo.collaborationType == COLLABORATION_TYPE.DOCUMENT
) {
coview_api.HeartBeatUser(globalUserInfo.loginId);
// 対象ユーザの端末バージョンでは文書協業が利用できません。
alert(getLocalizedString("err_target_android_version_not_support"));
} else {
FermiWebSocketBridge.pipEndRequest(data.payload.loginId);
waitMillisecond(500);
CoviewBridge.changeHost(getFermiLoginId(data.payload.loginId));
}
};
// PIP_END_REQUEST
FermiWebSocketMessageHandler.pipEndRequest = function () {
NativeBridgeDelegate.finishPIPMode(true);
if (deviceInfo.isAndroid()) {
$(".pip_indicator").addClass("none");
}
};
// API_SEND_OWNER_CHANGE_COMPLETE
FermiWebSocketMessageHandler.apiSendOwnerChangeComplete = function () {
penOff();
if ($("#recordBtn .record").hasClass("disable")) {
recordStop(function () {});
}
if ($("#micBtn .voice").hasClass("disable")) {
micOff();
} else {
micOn();
}
};
// API_SEND_OWNER_CHANGE_CONFIRM
FermiWebSocketMessageHandler.apiSendOwnerChangeConfirm = function () {
waitMillisecond(500);
removeOldLocalVideo(g_localStream);
};
// CHANGE_HOST_APPLY
FermiWebSocketMessageHandler.changeHostApplyForNotHost = function (data) {
NativeBridgeDelegate.setHostRequestFlg(HostRequestFlag.DOING);
waitMillisecond(500);
};
// CHANGE_HOST_APPLY
FermiWebSocketMessageHandler.changeHostApplyForHost = function (data) {
coview_api.HeartBeatUser(globalUserInfo.loginId);
NativeBridgeDelegate.finishPIPMode(true);
if (deviceInfo.isAndroid()) {
$(".pip_indicator").addClass("none");
}
NativeBridgeDelegate.setHostRequestFlg(HostRequestFlag.DOING);
waitMillisecond(500);
if (
confirm(
getLocalizedString("norify_request_host_change", data.payload.hostId)
)
) {
CoviewBridge.changeHost(getFermiLoginId(data.payload.hostId));
NativeBridgeDelegate.setHostRequestFlg(HostRequestFlag.DONE);
} else {
FermiWebSocketBridge.hostRequestReject(data.payload.hostId);
}
FermiWebSocketBridge.hostRequestDone(data.payload.hostId);
};
// HOST_REQUEST_DONE
FermiWebSocketMessageHandler.hostRequestDone = function () {
NativeBridgeDelegate.setHostRequestFlg(HostRequestFlag.DONE);
};
// HOST_REQUEST_REJECT
FermiWebSocketMessageHandler.hostRequestReject = function (data) {
if (data.payload.hostId == currentUserInfo.loginID) {
alert("REJECT for owner user");
}
NativeBridgeDelegate.setHostRequestFlg(HostRequestFlag.DONE);
};
// GET_COLLABORATION_TYPE
FermiWebSocketMessageHandler.getCollaborationType = function (data) {
FermiWebSocketBridge.getCollaborationTypeResponse(data.payload.loginId);
};
// GET_COLLABORATION_TYPE_RESPONSE
FermiWebSocketMessageHandler.getCollaborationTypeResponse = function (data) {
FermiWebSocketMessageHandler.updateJoinChangeCollaboration(
data.payload.collaborationType
);
globalUserInfo.meetingID = data.payload.newMeetingId;
CollaborationUI.updateScreen(globalUserInfo.collaborationType);
NativeBridgeDelegate.joinChangedCollaboration(
globalUserInfo.collaborationType,
data.payload.newMeetingId
);
if (globalUserInfo.collaborationType == COLLABORATION_TYPE.DOCUMENT) {
NativeBridgeDelegate.joinMeetingRoom(data.payload.newMeetingId);
}
};
// API_WELCOME
FermiWebSocketMessageHandler.apiWelcome = function () {
FermiWebSocketBridge.getCollaborationType();
globalUserInfo.joinType = COLLABORATION_JOIN_TYPE.ATTENDEE;
};
FermiWebSocketMessageHandler.updateJoinChangeCollaboration = function (
collaborationType
) {
if (
deviceInfo.isAndroid() &&
collaborationType == COLLABORATION_TYPE.DOCUMENT &&
deviceInfo.androidVersion < ANDROID_SDK_VERSION.O
) {
coview_api.HeartBeatUser(globalUserInfo.loginId);
alert(getLocalizedString("not_support_version"));
globalUserInfo.collaborationType = COLLABORATION_TYPE.CAMERA;
} else {
globalUserInfo.collaborationType = collaborationType;
}
};
/**************************
* Toggle Feature Buttons
**************************/
function togglePen() {
$("#coviewPenCtrBtn").click();
if ($("#penBtn .pen").hasClass("disable")) {
$("#penBtn .pen").removeClass("disable");
} else {
$("#penBtn .pen").addClass("disable");
}
}
function penOff() {
if (!$("#penBtn .pen").hasClass("disable")) {
$("#coviewPenCtrBtn").click();
$("#penBtn .pen").addClass("disable");
}
}
function togglePhotoOpenPlaceHolder() {
$("#open_file_upload").trigger("click");
}
function toggleEraser() {
$("#coviewEraserCtrBtn").click();
}
function toggleCapture() {
if ($("#recordBtn").hasClass("bg_red")) {
screenLock();
recordStop(function () {
$("#screenLock").remove();
coview_api.Capture(serverInfo.cmsURL + "/chatapi/file/uploadArchive");
});
} else {
coview_api.Capture(serverInfo.cmsURL + "/chatapi/file/uploadArchive");
}
}
function toggleCaptureRequest() {
FermiWebSocketBridge.captureRequest();
}
function micOn() {
coview_api.MicMuteControl("off");
$("#micBtn .voice").removeClass("disable");
}
function micOff() {
coview_api.MicMuteControl("on");
$("#micBtn .voice").addClass("disable");
}
function toggleMic() {
if ($("#micBtn .voice").hasClass("disable")) {
micOn();
} else {
micOff();
}
}
/*************
* レコード関連
*************/
function recordStart() {
MainManRecord("on");
$("#recordBtn .record").addClass("disable");
$(".flash-txt").addClass("on");
}
function recordFinished() {
$("#recordBtn .record").removeClass("disable");
$(".flash-txt").removeClass("on");
// ロック画面の削除
deleteDOMObject("screenLock");
}
function toggleRecord() {
if (!$("#recordBtn .record").hasClass("disable")) {
recordStart();
} else {
recordStop(function () {
console.info("Did record stop");
});
}
}
function recordStop(callback) {
if (!$("#recordBtn .record").hasClass("disable")) {
callback();
return;
}
Common.showLoadingIndicator();
// アーカイブ保存中は画面操作不可(協業終了,協業切り替え防止)
screenLock();
// アーカイブ保存処理
mainManRecordWithCollaboration(
"stop",
serverInfo.cmsURL + "/chatapi/file/uploadArchive",
callback
);
}
function mainManRecordWithCollaboration(action, url, callback) {
try {
mediaRecorder.stop();
} catch (exeption) {
console.error("Record failed");
callback();
}
setTimeout(function () {
const blob = new Blob(recordedBlobs, { type: "video/webm" });
const uploadFileName = "record_" + g_webroom + "_" + g_shareCount + ".webm";
g_shareCount++;
let formData = new FormData();
formData.append("fileData", blob, uploadFileName);
formData.append("sid", globalUserInfo.sid);
formData.append("roomId", globalUserInfo.roomId);
if (globalUserInfo.collaborationType == COLLABORATION_TYPE.VIDEO) {
formData.append("archiveType", 1);
} else {
formData.append("archiveType", 2);
}
$.ajax({
type: "post",
url,
data: formData,
contentType: false,
processData: false,
success: function (res) {
recordFinished();
Common.dismissLoadingIndicator();
callback();
},
error: function (err) {
recordFinished();
Common.dismissLoadingIndicator();
callback();
},
});
}, 1000);
}
function postRecords() {}
// div削除関数
function deleteDOMObject(id_name) {
const dom_obj = document.getElementById(id_name);
const dom_obj_parent = dom_obj.parentNode;
dom_obj_parent.removeChild(dom_obj);
}
var CoviewBridge = {};
var CollaborationFeature = {};
CoviewBridge.bindReadyEvent = function () {
coview_api.addEventListener("ready", function () {
CoviewBridge.bindFermiWebSocketOpenned();
// add login ID if not exist
CoviewBridge.addLoginID(globalUserInfo.loginId);
coview_api.Login(globalUserInfo.loginId);
CollaborationUI.updateScreen(globalUserInfo.collaborationType);
NativeBridgeDelegate.setHostRequestFlg(HostRequestFlag.DONE);
});
};
CoviewBridge.bindFermiWebSocketOpenned = function () {
wc_api.addEventListener("open", async function (event) {
FermiWebSocketMessageHandler.bindWebSocketMessage();
});
};
CoviewBridge.bindStartEvent = function () {
coview_api.addEventListener("start", function () {
CollaborationFeature.enableScrollLock();
CollaborationUI.hideLoadingIndicator();
});
};
/**************
* Scroll Lock
**************/
CollaborationFeature.scrollLock = function (e) {
if (deviceInfo.isiOS()) {
if (
$(e.target).closest(".add_user_modal").length > 0 ||
$(e.target).closest("#overlay_user_list").length > 0 ||
$(e.target).closest(".pip_indicator").length > 0
) {
e.stopPropagation();
} else {
e.preventDefault();
}
}
};
CollaborationFeature.enableScrollLock = function () {
document
.getElementById("collabo_main")
.addEventListener("touchmove", CollaborationFeature.scrollLock, {
passive: false,
});
};
CollaborationFeature.disableScrollLock = function () {
document
.getElementById("collabo_main")
.removeEventListener("touchmove", CollaborationFeature.scrollLock, {
passive: false,
});
};
CoviewBridge.bindAllByeEvent = function () {
coview_api.addEventListener("allbye", function () {
CHAT_SOCKET.emitCollaborationFinishMessage();
if (deviceInfo.isAndroid()) {
android.setExitHostAlert();
}
if (globalUserInfo.collaborationType == COLLABORATION_TYPE.DOCUMENT) {
NativeBridgeDelegate.exitMeetingRoom();
}
if (globalUserInfo.isInvited()) {
NativeBridgeDelegate.openCommunicationHome();
} else {
NativeBridgeDelegate.joinRoom(roomInfo.roomID, roomInfo.roomName);
}
// TODO: peacekim:: check not to need this method for android
if (deviceInfo.isiOS()) {
NativeBridgeDelegate.showExitHostAlert();
return;
}
CollaborationUI.hideLoadingIndicator();
});
};
CoviewBridge.bindGuestByeEvent = function () {
coview_api.addEventListener("guestbye", function () {
CollaborationUI.hideLoadingIndicator();
});
};
CoviewBridge.bindDestroyEvent = function () {
coview_api.addEventListener("destroy", function () {
CHAT_SOCKET.emitCollaborationFinishMessage();
alert(getLocalizedString("inform_exit_host_collaboration"));
CoviewBridge.exitCollaboration();
CollaborationUI.hideLoadingIndicator();
});
};
CoviewBridge.bindMessageEvent = function () {
coview_api.addEventListener("message", async function (event, json) {
if (globalUserInfo.isLeaved) {
return;
}
let loginIDList = new Array();
switch (json.api) {
case "LoginResponse":
CollaborationFeature.didReceiveLoginResponseMessage();
break;
case "CreateRoomResponse":
if (json.resultCode == 200) {
CollaborationFeature.didReceiveCreateRoomResponseMessage();
}
break;
case "joinRoomInfoResponse":
if (json.resultCode != 200) {
CollaborationFeature.didReceivedJoinRoomInfoResponseMessage();
}
break;
case "JoinRoomResponse":
if (json.resultCode != 200) {
break;
}
CollaborationFeature.searchHostIntervally();
// fall through
case "RoomMemberJoinedEvent":
// fall through
case "RoomMemberLeavedEvent":
for (let key in g_participants) {
loginIDList.push(key);
}
CollaborationUI.refreshJoinedCollaboration(loginIDList);
break;
case "HostRequest":
// to be called by
// wc_api.dispatchEvent (new Event ("message"), {"HostRequest":"userID"});
break;
case "fileChange":
if (globalUserInfo.collaborationType != COLLABORATION_TYPE.CAMERA) {
break;
}
LoadMobileShareFile(json.fileName);
backgroundFileName = json.fileName;
break;
case "ReceiveMediaResponse":
if (isBoard && g_isMainMan) {
wc_api.dispatchEvent(new Event("message"), {
api: "fileChange",
fileName: backgroundFileName,
});
}
break;
default:
console.debug("Unrecognized api", json);
break;
}
});
};
CollaborationFeature.didReceiveLoginResponseMessage = async function () {
CollaborationFeature.searchHostIntervally();
switch (globalUserInfo.joinType) {
case COLLABORATION_JOIN_TYPE.INVITED:
// fall through
case COLLABORATION_JOIN_TYPE.ATTENDEE:
coview_api.JoinRoom(globalUserInfo.roomId, globalUserInfo.coWorkType);
break;
case COLLABORATION_JOIN_TYPE.HOST:
let deleteRoomResult = JSON.parse(
await deleteRoom(globalUserInfo.roomId)
);
if (deleteRoomResult.resultCode == 200) {
waitMillisecond(3000);
}
coview_api.CreateRoom(globalUserInfo.roomId, globalUserInfo.coWorkType);
break;
default:
break;
}
const isDocument =
globalUserInfo.collaborationType == COLLABORATION_TYPE.DOCUMENT;
const isAttendee =
globalUserInfo.joinType == COLLABORATION_JOIN_TYPE.ATTENDEE;
const isHost = globalUserInfo.joinType == COLLABORATION_JOIN_TYPE.HOST;
if (isDocument) {
if (isAttendee) {
NativeBridgeDelegate.startContentView();
} else if (isHost) {
globalUserInfo.meetingID = NativeBridgeDataSource.createContentView();
}
}
CollaborationUI.moveToVideoShareArea();
};
CollaborationFeature.didReceiveCreateRoomResponseMessage = function () {
let coviewInviteMessage =
"" +
messageSeperator +
MessageType.COMMUNICATIONSTART +
messageSeperator +
CHAT_UTIL.getCollaborationTypeNumber(globalUserInfo.collaborationType);
if (globalUserInfo.collaborationType == COLLABORATION_TYPE.DOCUMENT) {
coviewInviteMessage += messageSeperator + globalUserInfo.meetingID;
}
CHAT_SOCKET.emitCreateMessage(coviewInviteMessage, 0);
};
CollaborationFeature.didReceivedJoinRoomInfoResponseMessage = function () {
alert(getLocalizedString("not_exist_sharing_call"));
coview_api.LeaveRoom();
$(".coview_share_area").hide();
CollaborationUI.hideLoadingIndicator();
NativeBridgeDelegate.joinRoom(roomInfo.roomID, roomInfo.roomName);
};
CoviewBridge.changeHost = function (userID) {
// call in agent_app.js
changeOwnerSend(userID);
};
CoviewBridge.addLoginID = function (loginID) {
const url = BIZ_TASK_YELL_URL + "/auth/getuser";
$.ajax({
url: url,
method: "post",
data: {
id: loginID,
},
success: function (result) {
if (result.statusCode != 200) {
coview_api.addUser(loginID);
}
},
error: function (err) {
console.error(err.toString());
},
});
};
CollaborationFeature.searchHostIntervally = function () {
let hostName = "";
function searchHost() {
if (g_isMainMan) {
CollaborationUI.showHostButtons();
} else {
CollaborationUI.hideHostButtons();
}
CollaborationUI.showHostMark(hostName);
if (hostName != g_isMainManUsername) {
hostName = g_isMainManUsername;
}
}
timeInterval = setInterval(searchHost, 2000);
};
CollaborationUI.showHostButtons = function () {
$("#collaboration_user_" + currentUserInfo.loginID).addClass("host");
$(".host_contents").removeClass("none");
if (globalUserInfo.collaborationType == COLLABORATION_TYPE.CAMERA) {
$(".photo_select_button").removeClass("none");
}
if (globalUserInfo.collaborationType == COLLABORATION_TYPE.VIDEO) {
$(".video_contents_host").removeClass("none");
$(".video_contents_user").addClass("none");
}
};
CollaborationUI.hideHostButtons = function () {
$("#collaboration_user_" + currentUserInfo.loginID).removeClass("host");
$(".host_contents").addClass("none");
if (globalUserInfo.collaborationType == COLLABORATION_TYPE.CAMERA) {
$(".photo_select_button").addClass("none");
}
if (globalUserInfo.collaborationType == COLLABORATION_TYPE.VIDEO) {
$(".video_contents_user").removeClass("none");
$(".video_contents_host").addClass("none");
}
};
CollaborationUI.showHostMark = function (hostName) {
const currentUserLoginIDDiv = $(
"#collaboration_user_" + currentUserInfo.loginID
);
const replaceHostIDDiv = $(
"#collaboration_user_" + getReplacedLoginId(hostName)
);
const replacedMainManUserID = $(
"#collaboration_user_" + getReplacedLoginId(g_isMainManUsername)
);
if (hostName != g_isMainManUsername) {
if (hostName != "") {
replaceHostIDDiv.removeClass("host");
}
replacedMainManUserID.addClass("host");
return;
}
if (hostName == "") {
if (!currentUserLoginIDDiv.hasClass("host") && coview_api.getRoomUsers()) {
currentUserLoginIDDiv.addClass("host");
}
} else {
if (!replaceHostIDDiv.hasClass("host")) {
replaceHostIDDiv.addClass("host");
}
}
};
function captureAndShareImage(urls, changeHostName) {
addCaptureEffect();
$(this).removeClass("on");
var w, h;
const video = document.getElementById("localVideo");
const canvas = document.createElement("canvas");
if (clientOrientaionState == 1) {
canvas.width = w = 680;
canvas.height = h = 515;
} else {
canvas.width = w = 386;
canvas.height = h = 515;
}
if (canvas.getContext) {
const ctx = canvas.getContext("2d");
ctx.drawImage(video, 0, 0, w, h);
ctx.drawImage(document.getElementById("canvasRemote"), 0, 0, w, h);
}
canvas.toBlob(function (blob) {
canvasRemote.style.backgroundImage =
"url('" + URL.createObjectURL(blob) + "')";
canvasRemote.style.backgroundSize = "contain";
$(canvasRemote).attr(
"height",
$(snapshots[cpatureViewIndex]).attr("height")
);
$(canvasRemote).attr("width", $(snapshots[cpatureViewIndex]).attr("width"));
CollaborationUI.configureCanvasSize($(canvas));
$(".canvas_wrap").css("background-color", "#000");
$(".clear_img").show();
SetShareMenuState("on");
WithImageShareBtnState("on");
//Fermi側にイメージ保存。
let formData = new FormData();
const uploadFileName =
"capture_share_" + g_webroom + "_" + g_shareCount + ".png";
g_shareCount++;
formData.append("imgFile", blob, uploadFileName);
$.ajax({
type: "post",
url: g_coviewapiserverADDR + "/upload/create",
data: formData,
processData: false,
contentType: false,
success: function (res) {
setTimeout(function () {
SendFileShare(uploadFileName);
$("#coviewCaptureCtrBtn").hide();
$("#coviewRecCtrBtn").hide();
$(".coview_on_media_btn_back").show();
//アーカイブ保存。
ArchiveFileManage(blob, uploadFileName, urls);
}, 1500);
},
error: function (err) {
console.error(err);
},
});
});
}
CollaborationUI.configureCanvasSize = function (canvas) {
const canvasWrap = $(".canvas_wrap");
const canvasWidth = $(canvas).attr("width");
const canvasHeight = $(canvas).attr("height");
const canvasRatio = canvasWidth / canvasHeight;
const reversedCanvasRatio = canvasHeight / canvasWidth;
const canvasWidthValue = canvasWrap.css("width").replace("px", "");
const canvasHeightValue = canvasWrap.css("height").replace("px", "");
let h;
let w;
if (canvasWidthValue / canvasHeightValue < canvasRatio) {
h = canvasWidthValue * reversedCanvasRatio;
w = canvasWidthValue;
} else {
h = canvasHeightValue;
w = canvasHeightValue / reversedCanvasRatio;
}
$(canvasRemote).css("height", h);
$(canvasRemote).css("width", w);
$(canvasRemote).css("margin-top", -h / 2);
$(canvasRemote).css("margin-left", -w / 2);
};
function getReplacedLoginId(loginId) {
return loginId.replaceAll(globalUserInfo.shopName + "_", "");
}
CoviewBridge.exitCollaboration = function () {
CollaborationFeature.disableScrollLock();
if (g_isMainMan) {
CHAT_SOCKET.emitCollaborationFinishMessage();
}
if (globalUserInfo.collaborationType == COLLABORATION_TYPE.DOCUMENT) {
NativeBridgeDelegate.exitMeetingRoom();
}
if ($("#recordBtn .record").hasClass("disable")) {
recordStop(CoviewBridge.finishCollaboration);
} else {
CoviewBridge.finishCollaboration();
}
};
CoviewBridge.finishCollaboration = function () {
clearInterval(timeInterval);
coview_api.LeaveRoom();
NativeBridgeDelegate.finishCollaboration(true);
if (coview_api.getRoomUsers()) {
NativeBridgeDelegate.finishCollaboration();
}
globalUserInfo.isLeaved = true;
if (globalUserInfo.isInvited()) {
NativeBridgeDelegate.openCommunicationHome();
} else {
NativeBridgeDelegate.joinRoom(roomInfo.roomID, roomInfo.roomName);
}
};
// Display User List
CollaborationUI.refreshJoinedCollaboration = function (loginIDList) {
for (var count = 0; count < loginIDList.length; count++) {
loginIDList[count] = loginIDList[count].replaceAll(
globalUserInfo.shopName + "_",
""
);
}
Common.showLoadingIndicator();
$("#collaboration_overlay_user_list").html("");
const joinedUserListTemplate = getTemplate(
TemplateURL.COLLABORATION_OVERLAY_USER_LIST
);
const joinedUserList =
NativeBridgeDataSource.getUserListByLoginId(loginIDList);
const sortedUserList = new Array();
loginIDList.forEach(function (userId) {
joinedUserList.forEach(function (user) {
if (userId == user.loginId) {
sortedUserList.push(user);
}
});
});
sortedUserList.forEach(function (user) {
user.profileUrl = Common.getProfileImgUrl(user.profileUrl);
});
let html = Mustache.render(joinedUserListTemplate, {
joinedUserList: sortedUserList,
});
let obj = jQuery.parseHTML(html);
$("#collaboration_overlay_user_list").append(obj);
Common.dismissLoadingIndicator();
};
CollaborationUI.moveToVideoShareArea = function () {
CollaborationUI.showLoadingIndicator();
$(".coview_share_area").show();
$("#collabo_main").removeClass("none");
};
/* --------------------------------------------------- */
/* Functions */
/* --------------------------------------------------- */
let coview_api = new CoviewApi();
var isBoard = false;
let timeInterval = null;
var backgroundFileName;
document.addEventListener("DOMContentLoaded", function () {
coview_api.Init({
coview_api_srv_addr: BIZ_TASK_YELL_URL,
coview_wrap_id: "coviewShare",
coview_api_key: "8dda7092c5820d663",
});
CoviewBridge.bindReadyEvent();
CoviewBridge.bindStartEvent();
CoviewBridge.bindAllByeEvent();
CoviewBridge.bindGuestByeEvent();
CoviewBridge.bindDestroyEvent();
CoviewBridge.bindMessageEvent();
});
// call from collaboration_overlay_menu.html and collaboration.html
function changeCollaboration(collaborationType) {
recordStop(function () {
var newMeetingID = 0;
if (globalUserInfo.collaborationType == COLLABORATION_TYPE.DOCUMENT) {
NativeBridgeDelegate.exitMeetingRoom();
}
NativeBridgeDelegate.setJoinCollaborationType(collaborationType);
globalUserInfo.collaborationType = collaborationType;
CollaborationUI.updateScreen(collaborationType);
switch (collaborationType) {
case COLLABORATION_TYPE.AUDIO:
coview_api.ChangeCollaboration("audio");
break;
case COLLABORATION_TYPE.CAMERA:
removeOldLocalVideo(g_localStream);
coview_api.ChangeCollaboration("image");
break;
case COLLABORATION_TYPE.VIDEO:
coview_api.ChangeCollaboration("video");
break;
case COLLABORATION_TYPE.DOCUMENT:
coview_api.ChangeCollaboration("audio");
newMeetingID = NativeBridgeDataSource.createContentView();
break;
case COLLABORATION_TYPE.BOARD:
coview_api.ChangeCollaboration("audio");
break;
}
if ($("#micBtn .voice").hasClass("disable")) {
micOff();
} else {
micOn();
}
globalUserInfo.meetingID = newMeetingID;
NativeBridgeDelegate.changeCollaboration(collaborationType, newMeetingID);
FermiWebSocketBridge.changeCollaboration(collaborationType, newMeetingID);
});
}
CollaborationUI.updateScreen = async function (collaborationType) {
$("#coviewEraserCtrBtn").click();
if ($(".user_btn").hasClass("hide")) {
$(".user_btn").click();
}
if ($(".menu_btn").hasClass("hide")) {
$(".menu_btn").click();
}
CollaborationUI.displayAddUserButtonIfNeeded();
$("link[href='./css/collaboration_board.css']").remove();
$(".collaboration_contents").addClass("none");
switch (collaborationType) {
case COLLABORATION_TYPE.AUDIO:
$(".voice_contents").removeClass("none");
break;
case COLLABORATION_TYPE.CAMERA:
$(".picture_contents").removeClass("none");
break;
case COLLABORATION_TYPE.VIDEO:
$(".video_contents").removeClass("none");
break;
case COLLABORATION_TYPE.DOCUMENT:
$(".document_contents").removeClass("none");
break;
case COLLABORATION_TYPE.BOARD:
$(".board_contents").removeClass("none");
$("head").append(
'<link rel="stylesheet" href="./css/collaboration_board.css">'
);
break;
}
await waitMillisecond(1000);
$(".before_loading_indicator").addClass("none");
};
// call from modal_collabo_host_request.html
function applyForHostChange() {
if (
globalUserInfo.collaborationType == COLLABORATION_TYPE.DOCUMENT &&
deviceInfo.androidVersion < ANDROID_SDK_VERSION.O &&
deviceInfo.isAndroid()
) {
alert(getLocalizedString("not_support_version"));
return;
}
const hostRequestFlg = NativeBridgeDataSource.getHostRequestFlg();
if (hostRequestFlg == HostRequestFlag.DOING) {
alert(getLocalizedString("already_processing_host_request"));
return;
}
NativeBridgeDelegate.setHostRequestFlg(HostRequestFlag.DOING);
FermiWebSocketBridge.changeHostApply();
}
function getFermiLoginId(loginId) {
return globalUserInfo.shopName + "_" + loginId;
}
function screenLock() {
// ロック用のdivを生成
const element = document.createElement("div");
element.id = "screenLock";
// ロック用のスタイル
element.style.height = "100%";
element.style.left = "0px";
element.style.position = "fixed";
element.style.top = "0px";
element.style.width = "100%";
element.style.zIndex = "9999";
element.style.opacity = "0";
document.getElementsByTagName("body").item(0).appendChild(element);
}
async function waitMillisecond(millesecond) {
await new Promise((done) => setTimeout(() => done(), millesecond));
}
// 名前空間
var Contact = {};
document.addEventListener("DOMContentLoaded", function () {
// メンバー検索
Contact.bindMemeberSearch();
// iOSキーボード変換検知用
Contact.bindiOSKeyBoardEvent();
});
// ユーザー検索
Contact.searchUser = function (keyword) {
const overlayMessage = $(".overlay_src_msg");
const isAllGroup = $("#tabAllGroup").is(":checked");
let hasNoData = false;
overlayMessage.empty();
//全グループ検索画面
if (isAllGroup) {
//グループデータ検索
const groupList = NativeBridgeDataSource.getGroupByName(keyword);
Contact.appendGroupList(groupList);
//ユーザデータ検索
const userList =
NativeBridgeDataSource.getAllGroupShopMemberByName(keyword);
Contact.appendUserList(userList);
hasNoData = userList.length == 0 && groupList.length == 0;
//連絡先画面
} else {
const userList = NativeBridgeDataSource.getMyGroupShopMemberByName(keyword);
Contact.appendUserList(userList);
hasNoData = userList.length == 0;
}
if (hasNoData) {
const noResultMsg = getNoResultMessage();
overlayMessage.append(noResultMsg);
}
};
/** UTILS */
Contact.bindiOSKeyBoardEvent = function () {
if (deviceInfo.isiOS()) {
const searchInput = $('#contact .search_form input[type="search"]');
searchInput.on("compositionend", function () {
const keyword = searchInput.val();
Contact.searchUser(keyword);
});
}
};
Contact.bindMemeberSearch = function () {
const searchInput = $('#contact .search_form input[type="search"]');
searchInput.keyup(function (e) {
const keyword = searchInput.val();
const enterKeyPressed = e.key == "Enter" || e.KeyCode == 13;
const keywordEmpty = keyword == "" || keyword.length < 2;
const keywordNotEmpty = keyword != "" && keyword.length != 0;
if (enterKeyPressed) {
if (keywordNotEmpty) {
searchInput.blur();
return;
}
} else if (keywordEmpty) {
$(".overlay_src_msg").empty();
return;
}
Contact.searchUser(keyword);
if (enterKeyPressed) {
searchInput.blur();
return;
}
});
};
Contact.appendGroupList = function (groupList) {
const groupTemplate = getTemplate(TemplateURL.GROUP_LIST);
groupList.forEach(function (group) {
const html = renderGroupList(
groupTemplate,
group.groupName,
group.groupId,
group.isFavorite
);
const obj = jQuery.parseHTML(html);
$(".overlay_src_msg").append(obj);
});
};
Contact.renderGroupList = function (url, groupName, groupID, isFavorite) {
return Mustache.render(url, {
name: groupName,
id: groupID,
isFavorite: isFavorite,
});
};
Contact.appendUserList = function (userList) {
userList.forEach(function (user) {
user.profileUrl = Common.getProfileImgUrl(user.profileUrl);
});
const userTemplate = getTemplate(TemplateURL.USER_LIST);
const html = Contact.renderUserList(userTemplate, userList);
const obj = jQuery.parseHTML(html);
$(".overlay_src_msg").append(obj);
};
Contact.renderUserList = function (url, userList) {
return Mustache.render(url, {
userList: userList,
});
};
$("#tabMyGroup").on("click", function (e) {
$("#contactSearch").attr("placeholder", getLocalizedString("userSearch"));
Contact.refreshContactScreen();
});
$("#tabAllGroup").on("click", function (e) {
Contact.refreshAllGroupSearch("0");
});
Contact.refreshContactScreen = function () {
Common.showLoadingIndicator();
$("#userNameCard").modal("hide");
$("#favoriteList").html("");
$("#myGroupList").html("");
//画面タイトル設定
let contactListTitle = getLocalizedString("contactListTitle");
$("#title").text(contactListTitle);
NativeBridgeDelegate.updateContactInfo();
Contact.appendMyNamecard();
Contact.appendFavoritGroupList();
Contact.appendFavoritUsers();
Contact.appendMyGroupList();
Common.dismissLoadingIndicator();
};
Contact.appendMyNamecard = function () {
const myInfo = NativeBridgeDataSource.getMyInfo();
myInfo.profileImagePath = Common.getProfileImgUrl(myInfo.profileUrl);
const myNamecardTemplate = getTemplate(TemplateURL.MY_NAME_CARD);
const myNamecardHtml = Mustache.render(myNamecardTemplate, {
loginId: myInfo.shopMemberId,
profileImage: myInfo.profileImagePath,
name: myInfo.shopMemberName,
groupPathList: myInfo.groupPathList,
});
const myNamecardObj = $(jQuery.parseHTML(myNamecardHtml)).on(
"click",
function () {}
);
$("#myProfileModal").html(myNamecardObj);
$("#myName").text(myInfo.shopMemberName);
$("#myImg").attr("src", myInfo.profileImagePath);
};
Contact.appendFavoritGroupList = function () {
// グループの様式を読み込む
const groupTemplate = getTemplate(TemplateURL.GROUP_LIST);
//お気に入りグループ取得。
const favoriteGroupList = NativeBridgeDataSource.getFavoriteGroups();
favoriteGroupList.forEach(function (favoriteGroup) {
const html = Mustache.render(groupTemplate, {
name: favoriteGroup.groupName,
id: favoriteGroup.groupId,
isFavorite: true,
});
const obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#favoriteList").append(obj);
});
};
Contact.appendFavoritUsers = function () {
const userTemplate = getTemplate(TemplateURL.USER_LIST);
const favoriteUserList = NativeBridgeDataSource.getFavoriteUsers();
favoriteUserList.forEach(function (favoriteUser) {
favoriteUser.profileUrl = Common.getProfileImgUrl(favoriteUser.profileUrl);
favoriteUser.isFavorite = true;
});
const html = Mustache.render(userTemplate, {
userList: favoriteUserList,
});
const obj = jQuery.parseHTML(html);
$("#favoriteList").append(obj);
};
Contact.appendMyGroupList = function () {
const groupUserTemplate = getTemplate(TemplateURL.GROUP_USER_LIST);
const myGroupList = NativeBridgeDataSource.getMyGroupUsers();
myGroupList.forEach(function (myGroup) {
myGroup.groupUserList.forEach(function (groupUser) {
groupUser.profileUrl = Common.getProfileImgUrl(groupUser.profileUrl);
});
let html = Mustache.render(groupUserTemplate, {
groupName: myGroup.groupName,
groupUserList: myGroup.groupUserList,
});
let obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#myGroupList").append(obj);
});
};
Contact.favoriteGroupChange = function (groupID, star) {
if ($(star).hasClass("active")) {
Contact.removeFavoriteGroup(groupID);
} else if ($(star).hasClass("disable")) {
Contact.insertFavoriteGroup(groupID);
}
};
Contact.removeFavoriteGroup = function (groupID) {
Common.showLoadingIndicator();
var result = NativeBridgeDataSource.removeFavoriteGroup(groupID);
if (result) {
$(".group_" + groupID).removeClass("active");
$(".group_" + groupID).addClass("disable");
} else {
$(".group_" + groupID).addClass("active");
$(".group_" + groupID).removeClass("disable");
}
Common.dismissLoadingIndicator();
};
Contact.insertFavoriteGroup = function (groupID) {
Common.showLoadingIndicator();
const result = NativeBridgeDataSource.addFavoriteGroup(groupID);
if (result) {
$(".group_" + groupID).removeClass("disable");
$(".group_" + groupID).addClass("active");
} else {
$(".group_" + groupID).addClass("disable");
$(".group_" + groupID).removeClass("active");
}
Common.dismissLoadingIndicator();
};
//全グループ検索画面表示。
Contact.refreshAllGroupSearch = function (paramGroupID) {
const groupID = paramGroupID;
if (window.location.pathname.includes("chat_room")) {
if (groupID == "") return;
NativeBridgeDelegate.setToMoveGroupId(groupID);
window.location.href = "contact.html";
}
Common.showLoadingIndicator();
Contact.initialzeForAllGroupSearch();
//オンライン状態であればサーバから情報更新。
NativeBridgeDelegate.updateGroupInfo(groupID);
//DBからグループ情報を取得。
const result = NativeBridgeDataSource.getGroupInfo(groupID);
Contact.bindGroupCellClick(
result.parentGroupId,
result.rootGroupId,
paramGroupID,
groupID
);
Contact.appendGroupPathList(result.groupPathList);
Contact.appendSubGroupsInGroup(result.childGroupList);
Contact.appendUsersInGroup(result.groupUserList);
Common.dismissLoadingIndicator();
};
Contact.initialzeForAllGroupSearch = function () {
$("#userNameCard").modal("hide");
$(".cancel").addClass("none");
$(".search_form input").removeClass("focus");
$(".search_form input").val("");
$(".search_form form").removeClass();
$(".content").removeClass("none");
$(".overlay_src_msg").empty();
$("#contactSearch").attr(
"placeholder",
getLocalizedString("searchUserAndGroup")
);
$("#tabAllGroup").prop("checked", true);
//画面エリアを初期化。
$("#rootGroupBtn").off();
$("#parentGroupBtn").off();
$("#childGroupListArea").html("");
$("#userInGroupList").html("");
$("#groupPathArea").html("");
};
Contact.bindGroupCellClick = function (
parentGroupID,
rootGroupID,
paramGroupID,
groupID
) {
//上位グループ、トップグループ遷移ボタンのイベント追加。
if (typeof parentGroupID !== "undefined") {
$("#parentGroupBtn").on("click", function () {
Contact.refreshAllGroupSearch(parentGroupID);
});
}
if (typeof rootGroupID !== "undefined") {
if (paramGroupID == 0) {
groupID = rootGroupID;
}
$("#rootGroupBtn").on("click", function () {
Contact.refreshAllGroupSearch(rootGroupID);
});
}
if (groupID == rootGroupID || paramGroupID == "0") {
$("#rootGroupArea").addClass("none");
$("#parentGroupArea").addClass("none");
} else {
$("#rootGroupArea").removeClass("none");
$("#parentGroupArea").removeClass("none");
}
};
Contact.appendGroupPathList = function (groupPathList) {
//該当グループのパースを表示。
const groupPathTemplate = getTemplate(TemplateURL.GROUP_PATH);
groupPathList.forEach(function (groupPath) {
let html = Mustache.render(groupPathTemplate, {
name: groupPath.groupName,
id: groupPath.groupId,
});
let obj = jQuery.parseHTML(html);
$("#groupPathArea").append(obj);
});
};
Contact.appendSubGroupsInGroup = function (groupList) {
//該当グループの下位グループ表示。
const groupTemplate = getTemplate(TemplateURL.GROUP_LIST);
groupList.forEach(function (childGroup) {
const html = Mustache.render(groupTemplate, {
name: childGroup.groupName,
id: childGroup.groupId,
isFavorite: childGroup.isFavorite,
});
const obj = $(jQuery.parseHTML(html)).on("click", function () {});
$("#childGroupListArea").append(obj);
});
};
Contact.appendUsersInGroup = function (userList) {
//該当グループの所属ユーザを表示。
const userTemplate = getTemplate(TemplateURL.USER_LIST);
userList.forEach(function (user) {
user.profileUrl = Common.getProfileImgUrl(user.profileUrl);
});
const html = Mustache.render(userTemplate, {
userList: userList,
});
const obj = jQuery.parseHTML(html);
$("#userInGroupList").append(obj);
};
var Namecard = {};
Namecard.makeNameCard = function (shopMemberID) {
if (currentUserInfo.shopMemberID == shopMemberID) {
return;
}
const nameCardInfo = NativeBridgeDataSource.getNameCardData(shopMemberID);
const namecardTemplate = getTemplate(TemplateURL.USER_NAME_CARD);
nameCardInfo.profileUrl = Common.getProfileImgUrl(nameCardInfo.profileUrl);
let namecardHTML = Mustache.render(namecardTemplate, {
shopMemberId: nameCardInfo.shopMemberId,
profileUrl: nameCardInfo.profileUrl,
name: nameCardInfo.shopMemberName,
groupPathList: nameCardInfo.groupPathList,
chat: getLocalizedString("chat"),
voice: getLocalizedString("voice"),
favorite: getLocalizedString("addFavorite"),
isFavorite: nameCardInfo.isFavorite,
});
let namecardObj = $(jQuery.parseHTML(namecardHTML)).on(
"click",
function () {}
);
$("#userProfileModal").html(namecardObj);
$("#userNameCard").modal("show");
};
// template_user_name_card.html
Namecard.startChat = function (userShopMemberID, userName) {
Common.showLoadingIndicator();
let userIDList = [];
userIDList.push(userShopMemberID);
// 参加ユーザ名でルーム名を生成
const newRoomName = currentUserInfo.loginID + "," + userName;
NativeBridgeDelegate.createChatRoom(
ChatRoomType.DM,
userIDList.join(","),
newRoomName,
MakeRoomFlag.NAME_CARD,
false
);
};
// template_user_name_card.html
Namecard.startVoice = function (userShopMemberID, userName) {
Common.showLoadingIndicator();
let userIDList = [];
userIDList.push(userShopMemberID);
// 参加ユーザ名でルーム名を生成
const newRoomName = currentUserInfo.loginID + "," + userName;
NativeBridgeDelegate.createChatRoom(
ChatRoomType.DM,
userIDList.join(","),
newRoomName,
MakeRoomFlag.NAME_CARD,
true
);
};
Namecard.favoriteUserChange = function (shopMemberID, star) {
if ($(star).hasClass("active")) {
Namecard.removeFavoriteUser(shopMemberID);
} else if ($(star).hasClass("disable")) {
Namecard.insertFavoriteUser(shopMemberID);
}
};
Namecard.removeFavoriteUser = function (shopMemberID) {
Common.showLoadingIndicator();
$("#userNameCard").modal("hide");
$("#myNameCard").modal("hide");
const result = NativeBridgeDataSource.removeFavoriteUser(shopMemberID);
if (result) {
$(".shopmember_" + shopMemberID).removeClass("active");
$(".shopmember_" + shopMemberID).addClass("disable");
} else {
$(".shopmember_" + shopMemberID).addClass("active");
$(".shopmember_" + shopMemberID).removeClass("disable");
}
Common.dismissLoadingIndicator();
};
Namecard.insertFavoriteUser = function (shopMemberID) {
$("#userNameCard").modal("hide");
$("#myNameCard").modal("hide");
const result = NativeBridgeDataSource.addFavoriteUser(shopMemberID);
if (result) {
$(".shopmember_" + shopMemberID).removeClass("disable");
$(".shopmember_" + shopMemberID).addClass("active");
} else {
$(".shopmember_" + shopMemberID).addClass("disable");
$(".shopmember_" + shopMemberID).removeClass("active");
}
Common.dismissLoadingIndicator();
};
Namecard.refreshForOnline = function () {
$("#favoriteButton").prop("disabled", false);
};
Namecard.refreshForOffline = function () {
$("#favoriteButton").prop("disabled", true);
};
...@@ -20,14 +20,14 @@ ...@@ -20,14 +20,14 @@
</div><!-- .row --> </div><!-- .row -->
</nav><!-- nav --> </nav><!-- nav -->
<div class="content tabs"> <div class="content tabs">
<input id="tabMyGroupOnAddUserInCollaboration" type="radio" name="tab_item" checked onclick="CHAT_UI.refreshMyGroupForAddUserInCollaboration();"> <input id="tabMyGroupOnAddUserInCollaboration" type="radio" name="tab_item" checked onclick="CollaborationUI.refreshMyGroupForAddUserInCollaboration();">
<label class="tab_item m-0" for="tabMyGroupOnAddUserInCollaboration">マイグループ</label> <label class="tab_item m-0" for="tabMyGroupOnAddUserInCollaboration">マイグループ</label>
<input id="tabAllGroupOnAddUserInCollaboration" type="radio" name="tab_item" onclick="CHAT_UI.refreshAllGroupForAddUserInCollaboration('0');"> <input id="tabAllGroupOnAddUserInCollaboration" type="radio" name="tab_item" onclick="CollaborationUI.refreshAllGroupForAddUserInCollaboration('0');">
<label class="tab_item m-0" for="tabAllGroupOnAddUserInCollaboration">全グループ</label> <label class="tab_item m-0" for="tabAllGroupOnAddUserInCollaboration">全グループ</label>
<div class="tab_content" id="tab1_content" style="height: 100vh; overflow:scroll;"> <div class="tab_content" id="tab1_content" style="height: 100vh; overflow:scroll;">
<div class="chat_list"> <div class="chat_list">
<!-- お気に入りグループ --> <!-- お気に入りグループ -->
<div class="category" onclick="CHAT_UI.toggleCategory(this);"><div class="category_name"><span>お気に入り</span></div></div> <div class="category" onclick="CollaborationUI.toggleCategory(this);"><div class="category_name"><span>お気に入り</span></div></div>
<div id="favoriteListForAddUserInCollaboration"></div> <div id="favoriteListForAddUserInCollaboration"></div>
<div id="myGroupListForAddUserInCollaboration"></div> <div id="myGroupListForAddUserInCollaboration"></div>
</div> </div>
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
<li><a id="room_name_change_button" href="chat_change_room_name.html"><img src="icon/icon_change_room_name.png" alt="ルーム名変更">ルーム名変更</a> <li><a id="room_name_change_button" href="chat_change_room_name.html"><img src="icon/icon_change_room_name.png" alt="ルーム名変更">ルーム名変更</a>
</li> </li>
<li><a id="add_user_button" href="chat_add_user.html"><img src="icon/icon_add_user.png" alt="ユーザー招待">ユーザー招待</a></li> <li><a id="add_user_button" href="chat_add_user.html"><img src="icon/icon_add_user.png" alt="ユーザー招待">ユーザー招待</a></li>
<li ><a id="display_off_button" href="javascript:return false;" onclick="CHAT_UI.roomDisplayOff();"><img src="icon/icon_display_off_chatroom.png" alt="ユーザー招待">部屋非表示</a></li> <li ><a id="display_off_button" href="javascript:return false;" onclick="NativeBridgeDelegate.roomDisplayOff();"><img src="icon/icon_display_off_chatroom.png" alt="ユーザー招待">部屋非表示</a></li>
</ul> </ul>
</div> </div>
</div> </div>
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<span>キャンセル</span> <span>キャンセル</span>
</div> </div>
</button> </button>
<button type="button" onclick="Coview_changeHost({{shopMemberId}});" class="profile_chat_btn border-0 bg_blue text_white"> <button type="button" onclick="CoviewBridge.changeHost({{shopMemberId}});" class="profile_chat_btn border-0 bg_blue text_white">
<div class="d-flex flex-column"> <div class="d-flex flex-column">
<span>引き渡し</span> <span>引き渡し</span>
</div> </div>
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
<div class="profile_desc_ d-flex flex-row"> <div class="profile_desc_ d-flex flex-row">
<img src="{{profileUrl}}" onError="this.src='./img/noImage.png'"/> <img src="{{profileUrl}}" onError="this.src='./img/noImage.png'" />
<div class="profile_name d-flex justify-content-center align-items-center"><span>{{name}}</span></div> <div class="profile_name d-flex justify-content-center align-items-center"><span>{{name}}</span></div>
</div> </div>
</div> </div>
...@@ -18,7 +18,8 @@ ...@@ -18,7 +18,8 @@
</div> </div>
<div class="modal-footer border-0 justify-content-center"> <div class="modal-footer border-0 justify-content-center">
{{#isFavorite}} {{#isFavorite}}
<button type="button" class="border-0 bg_navy" onclick="CHAT_UI.removeFavoriteUserInCollaboration({{shopMemberId}})" id="favoriteButton"> <button type="button" class="border-0 bg_navy"
onclick="CollaborationUI.removeFavoriteUserInCollaboration({{shopMemberId}})" id="favoriteButton">
<div class="d-flex flex-column"> <div class="d-flex flex-column">
<div class="img_wrap"> <div class="img_wrap">
<img src="icon/icon_profile_favorite.png" alt="お気に入り"> <img src="icon/icon_profile_favorite.png" alt="お気に入り">
...@@ -28,7 +29,8 @@ ...@@ -28,7 +29,8 @@
</button> </button>
{{/isFavorite}} {{/isFavorite}}
{{^isFavorite}} {{^isFavorite}}
<button type="button" class="border-0 bg_navy" onclick="CHAT_UI.insertFavoriteUserInCollaboration({{shopMemberId}})" id="favoriteButton"> <button type="button" class="border-0 bg_navy"
onclick="CollaborationUI.insertFavoriteUserInCollaboration({{shopMemberId}})" id="favoriteButton">
<div class="d-flex flex-column"> <div class="d-flex flex-column">
<div class="img_wrap"> <div class="img_wrap">
<img src="icon/icon_profile_favorite_white.png" alt="お気に入り"> <img src="icon/icon_profile_favorite_white.png" alt="お気に入り">
...@@ -38,7 +40,8 @@ ...@@ -38,7 +40,8 @@
</button> </button>
{{/isFavorite}} {{/isFavorite}}
{{#isHost}} {{#isHost}}
<button type="button" class="ch_host_btn border-0 bg_green text_white" onclick="hostChangeRequest('{{loginId}}');" > <button type="button" class="ch_host_btn border-0 bg_green text_white"
onclick="FermiWebSocketBridge.requestHostChange('{{loginId}}');">
<div class="d-flex flex-column"> <div class="d-flex flex-column">
<div class="img_wrap"> <div class="img_wrap">
<img src="icon/icon_change_host.png" alt="ホスト変更"> <img src="icon/icon_change_host.png" alt="ホスト変更">
...@@ -49,7 +52,8 @@ ...@@ -49,7 +52,8 @@
{{/isHost}} {{/isHost}}
{{^isHost}} {{^isHost}}
{{#whosHost}} {{#whosHost}}
<button type="button" class="ch_host_btn border-0 bg_blue text_white" data-toggle="modal" data-target="#hostRequestModal" value="#profileModal2"> <button type="button" class="ch_host_btn border-0 bg_blue text_white" data-toggle="modal"
data-target="#hostRequestModal" value="#profileModal2">
<div class="d-flex flex-column"> <div class="d-flex flex-column">
<div class="img_wrap"> <div class="img_wrap">
<img src="icon/icon_change_host.png" alt="ホスト変更"> <img src="icon/icon_change_host.png" alt="ホスト変更">
...@@ -59,7 +63,8 @@ ...@@ -59,7 +63,8 @@
</button> </button>
{{/whosHost}} {{/whosHost}}
{{^whosHost}} {{^whosHost}}
<button type="button" class="ch_host_btn border-0 bg_grey text_white" data-toggle="modal" data-target="#hostRequestModal" value="#profileModal2" disabled> <button type="button" class="ch_host_btn border-0 bg_grey text_white" data-toggle="modal"
data-target="#hostRequestModal" value="#profileModal2"  disabled>
<div class="d-flex flex-column"> <div class="d-flex flex-column">
<div class="img_wrap"> <div class="img_wrap">
<img src="icon/icon_change_host.png" alt="ホスト変更"> <img src="icon/icon_change_host.png" alt="ホスト変更">
......
<li class="d-flex align-items-center" style="border-bottom: 1px solid #e2e8f0;"> <li class="d-flex align-items-center" style="border-bottom: 1px solid #e2e8f0;">
<a href="#" class="w-100" onclick="CHAT_UI.refreshAllGroupForAddUser({{id}});"> <a href="#" class="w-100" onclick="ChatAddUser.refreshAllGroupForAddUser({{id}});">
<div class="chat_item d-flex flex-row align-items-center"> <div class="chat_item d-flex flex-row align-items-center">
<div class="chat_item_l"> <div class="chat_item_l">
<div class="thumbnail-icon"> <div class="thumbnail-icon">
......
<li class="d-flex align-items-center"> <li class="d-flex align-items-center">
<a href="#" class="w-100" onclick="CHAT_UI.refreshAllGroupForAddUserInCollaboration({{id}});"> <a href="#" class="w-100" onclick="CollaborationUI.refreshAllGroupForAddUserInCollaboration({{id}});">
<div class="chat_item d-flex flex-row align-items-center"> <div class="chat_item d-flex flex-row align-items-center">
<div class="chat_item_l"> <div class="chat_item_l">
<div class="thumbnail-icon"> <div class="thumbnail-icon">
......
<a href="#" class="breadcrumb_item" onclick="CHAT_UI.refreshAllGroupForAddUser({{id}});"><span>{{name}}</span></a> <a href="#" class="breadcrumb_item" onclick="ChatAddUser.refreshAllGroupForAddUser({{id}});"><span>{{name}}</span></a>
\ No newline at end of file \ No newline at end of file
<a href="#" class="breadcrumb_item" onclick="CHAT_UI.refreshAllGroupForAddUserInCollaboration({{id}});"><span>{{name}}</span></a> <a href="#" class="breadcrumb_item" onclick="CollaborationUI.refreshAllGroupForAddUserInCollaboration({{id}});"><span>{{name}}</span></a>
\ No newline at end of file \ No newline at end of file
<div class="category" onclick="CHAT_UI.toggleCategory(this);"><div class="category_name"><span>{{groupName}}</span></div></div> <div class="category" onclick="CollaborationUI.toggleCategory(this);">
<div class="category_name"><span>{{groupName}}</span></div>
</div>
<ul class="p-0 chat_make_room_list"> <ul class="p-0 chat_make_room_list">
{{#groupUserList}} {{#groupUserList}}
<li class="d-flex align-items-center"> <li class="d-flex align-items-center">
<div class="chat_item d-flex flex-row align-items-center w-100" onclick="CHAT_UI.checkForMakeChat({{shopMemberId}});" > <div class="chat_item d-flex flex-row align-items-center w-100"
onclick="ChatManagementCommon.checkForMakeChat({{shopMemberId}});">
<div class="chat_item_l_chk"> <div class="chat_item_l_chk">
<div class="checkbox"> <div class="checkbox">
<label> <label>
<input type="checkbox" id="checkbox{{shopMemberId}}" name="checkbox[]" class="checkbox-input checkbox{{shopMemberId}}" onclick="CHAT_UI.checkForMakeChat({{shopMemberId}});" {{checked}}> <input type="checkbox" id="checkbox{{shopMemberId}}" name="checkbox[]"
class="checkbox-input checkbox{{shopMemberId}}"
onclick="ChatManagementCommon.checkForMakeChat({{shopMemberId}});" {{checked}}>
<span class="checkbox-parts"></span> <span class="checkbox-parts"></span>
</label> </label>
</div> </div>
</div> </div>
<div class="chat_item_l"> <div class="chat_item_l">
<div class="thumbnail"> <div class="thumbnail">
<div class="img_wrap"><img src="{{profileUrl}}" onError="this.src='./img/noImage.png'"/></div> <div class="img_wrap"><img src="{{profileUrl}}" onError="this.src='./img/noImage.png'" /></div>
</div> </div>
</div> </div>
<div class="chat_item_m"> <div class="chat_item_m">
......
<div class="category" onclick="CHAT_UI.toggleCategory(this);"><div class="category_name"><span>{{groupName}}</span></div></div> <div class="category" onclick="CollaborationUI.toggleCategory(this);">
<div class="category_name"><span>{{groupName}}</span></div>
</div>
<ul class="p-0 chat_make_room_list"> <ul class="p-0 chat_make_room_list">
{{#groupUserList}} {{#groupUserList}}
<li class="d-flex align-items-center"> <li class="d-flex align-items-center">
<div class="chat_item d-flex flex-row align-items-center w-100" onclick="CHAT_UI.checkForMakeChat({{shopMemberId}});" > <div class="chat_item d-flex flex-row align-items-center w-100"
onclick="ChatManagementCommon.checkForMakeChat({{shopMemberId}});">
<div class="chat_item_l_chk"> <div class="chat_item_l_chk">
<div class="checkbox"> <div class="checkbox">
<label> <label>
<input type="checkbox" id="checkbox{{shopMemberId}}" name="checkbox[]" class="checkbox-input checkbox{{shopMemberId}}" onclick="CHAT_UI.checkForMakeChat({{shopMemberId}});" {{checked}}> <input type="checkbox" id="checkbox{{shopMemberId}}" name="checkbox[]"
class="checkbox-input checkbox{{shopMemberId}}"
onclick="ChatManagementCommon.checkForMakeChat({{shopMemberId}});" {{checked}}>
<span class="checkbox-parts"></span> <span class="checkbox-parts"></span>
</label> </label>
</div> </div>
</div> </div>
<div class="chat_item_l"> <div class="chat_item_l">
<div class="thumbnail"> <div class="thumbnail">
<div class="img_wrap"><img src="{{profileUrl}}" onError="this.src='./img/noImage.png'"/></div> <div class="img_wrap"><img src="{{profileUrl}}" onError="this.src='./img/noImage.png'" /></div>
</div> </div>
</div> </div>
<div class="chat_item_m"> <div class="chat_item_m">
......
<ul class="p-0 chat_make_room_list"> <ul class="p-0 chat_make_room_list">
{{#userList}} {{#userList}}
<li class="d-flex align-items-center"> <li class="d-flex align-items-center">
<div class="chat_item d-flex flex-row align-items-center w-100" onclick="CHAT_UI.checkForMakeChat({{shopMemberId}});" > <div class="chat_item d-flex flex-row align-items-center w-100"
onclick="ChatManagementCommon.checkForMakeChat({{shopMemberId}});">
<div class="chat_item_l_chk"> <div class="chat_item_l_chk">
<div class="checkbox"> <div class="checkbox">
<label> <label>
<input type="checkbox" id="checkbox{{shopMemberId}}" name="checkbox[]" class="checkbox-input checkbox{{shopMemberId}}" onclick="CHAT_UI.checkForMakeChat({{shopMemberId}});" {{checked}}> <input type="checkbox" id="checkbox{{shopMemberId}}" name="checkbox[]"
class="checkbox-input checkbox{{shopMemberId}}"
onclick="ChatManagementCommon.checkForMakeChat({{shopMemberId}});" {{checked}}>
<span class="checkbox-parts"></span> <span class="checkbox-parts"></span>
</label> </label>
</div> </div>
......
<ul class="p-0 chat_make_room_list"> <ul class="p-0 chat_make_room_list">
{{#userList}} {{#userList}}
<li class="d-flex align-items-center"> <li class="d-flex align-items-center">
<div class="chat_item d-flex flex-row align-items-center w-100" onclick="CHAT_UI.checkForMakeChat({{shopMemberId}});" > <div class="chat_item d-flex flex-row align-items-center w-100"
onclick="ChatManagementCommon.checkForMakeChat({{shopMemberId}});">
<div class="chat_item_l_chk"> <div class="chat_item_l_chk">
<div class="checkbox"> <div class="checkbox">
<label> <label>
<input type="checkbox" id="checkbox{{shopMemberId}}" name="checkbox[]" class="checkbox-input checkbox{{shopMemberId}}" onclick="CHAT_UI.checkForMakeChat({{shopMemberId}});" {{checked}}> <input type="checkbox" id="checkbox{{shopMemberId}}" name="checkbox[]"
class="checkbox-input checkbox{{shopMemberId}}"
onclick="ChatManagementCommon.checkForMakeChat({{shopMemberId}});" {{checked}}>
<span class="checkbox-parts"></span> <span class="checkbox-parts"></span>
</label> </label>
</div> </div>
......
<li class="d-flex align-items-center">
<a href="archive_detail.html?archiveId={{archiveId}}" class="w-100">
<div class="archive_item d-flex flex-row align-items-center w-100">
<div class="arhive_img">
<div class="img_wrap bg_blue">
<img src="{{typeImage}}" alt="動画" />
</div>
</div>
<div class="archive_desc">
<div class="archive_name">
<span>{{fileName}}</span>
</div>
<div class="archive_date">
<span>{{insertDate}}</span>
</div>
</div>
</div>
</a>
</li>
\ No newline at end of file
<div id="archive_player" class="player">
</div>
<div class="archive_detail_desc">
<div class="archive_detail_fl_nm item">
<h2 class="ttl" id="archiveFileName">FileName</h2>
<span>{{fileName}}</span>
</div>
<div class="archive_detail_sv_date item">
<h2 class="ttl" id="archiveInsertDate">InsertDate</h2>
<span>{{insertDate}}</span>
</div>
<div class="archive_detail_room_nm item">
<h2 class="ttl" id="archiveRoomName">ChatRoomName</h2>
<span class="archive_chat_room">{{chatRoomName}}</span>
<button id="joinChatRoom">
<img src="icon/icon_join_room.png" alt="">
</button>
</div>
<div class="archive_detail_sv_user item">
<h2 class="ttl" id="archiveSaveUser">SaveUser</h2>
<div class="d-flex flex-row">
<div class="d-flex flex-column">
<img src="{{profileImage}}" alt="プロフィール画像" onclick="Namecard.makeNameCard({{userId}})">
<p>{{userName}}</p>
</div>
</div>
</div>
<div class="archive_detail_user_list item">
<h2 class="ttl" id="archiveAttendUser">AttendUser</h2>
<ul class="d-flex flex-row" id="attendUser">
</ul>
</div>
</div>
\ No newline at end of file
<li class="archive_user">
<img src="{{profileImage}}" alt="">
<p>{{userName}}</p>
</li>
\ No newline at end of file
{{#userList}} {{#userList}}
<div class="user_item"> <div class="user_item">
<a href="javascript:return false;" onclick="CHAT_UI.makeNameCard({{shopMemberId}})"> <a href="javascript:return false;" onclick="Namecard.makeNameCard({{shopMemberId}})">
<div class="d-flex flex-column"> <div class="d-flex flex-column">
<div class="img_wrap"> <div class="img_wrap">
<img src="{{profileUrl}}" onError="this.src='./img/noImage.png'"> <img src="{{profileUrl}}" onError="this.src='./img/noImage.png'">
......
<li class="d-flex align-items-center" style="border-bottom: 1px solid #e2e8f0;"> <li class="d-flex align-items-center" style="border-bottom: 1px solid #e2e8f0;">
<a href="#" class="w-100" onclick="CHAT_UI.refreshAllGroupSearch({{id}});"> <a href="#" class="w-100" onclick="Contact.refreshAllGroupSearch({{id}});">
<div class="chat_item d-flex flex-row align-items-center"> <div class="chat_item d-flex flex-row align-items-center">
<div class="chat_item_l"> <div class="chat_item_l">
<div class="thumbnail-icon"> <div class="thumbnail-icon">
...@@ -18,10 +18,10 @@ ...@@ -18,10 +18,10 @@
<div class="chat_item_r"> <div class="chat_item_r">
<div class="d-flex flex-column"> <div class="d-flex flex-column">
{{#isFavorite}} {{#isFavorite}}
<span class="star active group_{{id}}" onclick="CHAT_UI.favoriteGroupChange({{id}},this)"></span> <span class="star active group_{{id}}" onclick="Contact.favoriteGroupChange({{id}},this)"></span>
{{/isFavorite}} {{/isFavorite}}
{{^isFavorite}} {{^isFavorite}}
<span class="star disable group_{{id}}" onclick="CHAT_UI.favoriteGroupChange({{id}},this)"></span> <span class="star disable group_{{id}}" onclick="Contact.favoriteGroupChange({{id}},this)"></span>
{{/isFavorite}} {{/isFavorite}}
</div> </div>
</div> </div>
......
<a href="#" class="breadcrumb_item" onclick="CHAT_UI.refreshAllGroupSearch({{id}});"><span>{{name}}</span></a> <a href="#" class="breadcrumb_item" onclick="Contact.refreshAllGroupSearch({{id}});"><span>{{name}}</span></a>
\ No newline at end of file \ No newline at end of file
<div class="category" onclick="CHAT_UI.toggleCategory(this);"><div class="category_name"><span>{{groupName}}</span></div></div> <div class="category" onclick="CollaborationUI.toggleCategory(this);"><div class="category_name"><span>{{groupName}}</span></div></div>
<ul class="p-0 chat_make_room_list"> <ul class="p-0 chat_make_room_list">
{{#groupUserList}} {{#groupUserList}}
<li class="d-flex align-items-center"> <li class="d-flex align-items-center">
<a href="javascript:return false;" onclick="CHAT_UI.makeNameCard({{shopMemberId}})" style="width: 100%;"> <a href="javascript:return false;" onclick="Namecard.makeNameCard({{shopMemberId}})" style="width: 100%;">
<div class="chat_item d-flex flex-row align-items-center"> <div class="chat_item d-flex flex-row align-items-center">
<div class="chat_item_l"> <div class="chat_item_l">
<div class="thumbnail"> <div class="thumbnail">
...@@ -21,10 +21,10 @@ ...@@ -21,10 +21,10 @@
<div class="chat_item_r"> <div class="chat_item_r">
<div class="d-flex flex-column"> <div class="d-flex flex-column">
{{#isFavorite}} {{#isFavorite}}
<span class="star active shopmember_{{shopMemberId}}" onclick="CHAT_UI.favoriteUserChange({{shopMemberId}},this)"></span> <span class="star active shopmember_{{shopMemberId}}" onclick="Namecard.favoriteUserChange({{shopMemberId}},this)"></span>
{{/isFavorite}} {{/isFavorite}}
{{^isFavorite}} {{^isFavorite}}
<span class="star disable shopmember_{{shopMemberId}}" onclick="CHAT_UI.favoriteUserChange({{shopMemberId}},this)"></span> <span class="star disable shopmember_{{shopMemberId}}" onclick="Namecard.favoriteUserChange({{shopMemberId}},this)"></span>
{{/isFavorite}} {{/isFavorite}}
</div> </div>
</div> </div>
......
<li class="d-flex align-items-center" style="border-bottom: 1px solid #e2e8f0;"> <li class="d-flex align-items-center" style="border-bottom: 1px solid #e2e8f0;">
<a href="#" class="w-100" onclick="CHAT_UI.refreshAllGroupForMakeRoom({{id}});"> <a href="#" class="w-100" onclick="ChatMakeRoom.refreshAllGroupForMakeRoom({{id}});">
<div class="chat_item d-flex flex-row align-items-center"> <div class="chat_item d-flex flex-row align-items-center">
<div class="chat_item_l"> <div class="chat_item_l">
<div class="thumbnail-icon"> <div class="thumbnail-icon">
......
<a href="#" class="breadcrumb_item" onclick="CHAT_UI.refreshAllGroupForMakeRoom({{id}});"><span>{{name}}</span></a> <a href="#" class="breadcrumb_item" onclick="ChatMakeRoom.refreshAllGroupForMakeRoom({{id}});"><span>{{name}}</span></a>
\ No newline at end of file \ No newline at end of file
<div class="category" onclick="CHAT_UI.toggleCategory(this);"><div class="category_name"><span>{{groupName}}</span></div></div> <div class="category" onclick="CollaborationUI.toggleCategory(this);">
<div class="category_name"><span>{{groupName}}</span></div>
</div>
<ul class="p-0 chat_make_room_list"> <ul class="p-0 chat_make_room_list">
{{#groupUserList}} {{#groupUserList}}
<li class="d-flex align-items-center"> <li class="d-flex align-items-center">
<div class="chat_item d-flex flex-row align-items-center w-100" onclick="CHAT_UI.checkForMakeChat({{shopMemberId}});" > <div class="chat_item d-flex flex-row align-items-center w-100"
onclick="ChatManagementCommon.checkForMakeChat({{shopMemberId}});">
<div class="chat_item_l_chk"> <div class="chat_item_l_chk">
<div class="checkbox"> <div class="checkbox">
<label> <label>
<input type="checkbox" id="checkbox{{shopMemberId}}" name="checkbox[]" class="checkbox-input checkbox{{shopMemberId}}" onclick="CHAT_UI.checkForMakeChat({{shopMemberId}});" {{checked}}> <input type="checkbox" id="checkbox{{shopMemberId}}" name="checkbox[]"
class="checkbox-input checkbox{{shopMemberId}}"
onclick="ChatManagementCommon.checkForMakeChat({{shopMemberId}});" {{checked}}>
<span class="checkbox-parts"></span> <span class="checkbox-parts"></span>
</label> </label>
</div> </div>
</div> </div>
<div class="chat_item_l"> <div class="chat_item_l">
<div class="thumbnail"> <div class="thumbnail">
<div class="img_wrap"><img src="{{profileUrl}}" onError="this.src='./img/noImage.png'"/></div> <div class="img_wrap"><img src="{{profileUrl}}" onError="this.src='./img/noImage.png'" /></div>
</div> </div>
</div> </div>
<div class="chat_item_m"> <div class="chat_item_m">
......
<ul class="p-0 chat_make_room_list"> <ul class="p-0 chat_make_room_list">
{{#userList}} {{#userList}}
<li class="d-flex align-items-center"> <li class="d-flex align-items-center">
<div class="chat_item d-flex flex-row align-items-center w-100" onclick="CHAT_UI.checkForMakeChat({{shopMemberId}});"> <div class="chat_item d-flex flex-row align-items-center w-100"
onclick="ChatManagementCommon.checkForMakeChat({{shopMemberId}});">
<div class="chat_item_l_chk"> <div class="chat_item_l_chk">
<div class="checkbox"> <div class="checkbox">
<label> <label>
<input type="checkbox" id="checkbox{{shopMemberId}}" name="checkbox[]" class="checkbox-input checkbox{{shopMemberId}}" onclick="CHAT_UI.checkForMakeChat({{shopMemberId}});" {{checked}}> <input type="checkbox" id="checkbox{{shopMemberId}}" name="checkbox[]"
class="checkbox-input checkbox{{shopMemberId}}"
onclick="ChatManagementCommon.checkForMakeChat({{shopMemberId}});" {{checked}}>
<span class="checkbox-parts"></span> <span class="checkbox-parts"></span>
</label> </label>
</div> </div>
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
</div> </div>
</div> </div>
<div class="collabo_btn"> <div class="collabo_btn">
<button class="collaboation_join_button" type="button" name="button" onclick="CHAT_UI.joinCollaboration({{collaborationType}}, {{meetingId}})" {{#isEnded}} disabled {{/isEnded}}> <button class="collaboation_join_button" type="button" name="button" onclick="NativeBridgeDelegate.joinCollaboration('{{collaborationType}}', {{meetingId}})" {{#isEnded}} disabled {{/isEnded}}>
<img src="icon/icon_profile_phone.png" alt="通話"> <img src="icon/icon_profile_phone.png" alt="通話">
{{#isEnded}} {{#isEnded}}
<span class="collaboration_join_message">終了しました</span> <span class="collaboration_join_message">終了しました</span>
......
<ul class="m-0"> <ul class="m-0">
<li class="d-flex align-items-center"> <li class="d-flex align-items-center">
<a href="#" class="w-100" onclick="CHAT_UI.joinRoom({{roomId}},'{{roomName}}');"> <a href="#" class="w-100" onclick="NativeBridgeDelegate.joinRoom({{roomId}},'{{roomName}}');">
<div class="chat_item d-flex flex-row align-items-center"> <div class="chat_item d-flex flex-row align-items-center">
<div class="chat_item_l"> <div class="chat_item_l">
<div class="thumbnail{{thumbnailCount}} thumbnail"> <div class="thumbnail{{thumbnailCount}} thumbnail">
......
<ul class="p-0 chat_make_room_list" style="margin-top: 0px !important;border-top: none !important;"> <ul class="p-0 chat_make_room_list" style="margin-top: 0px !important;border-top: none !important;">
{{#userList}} {{#userList}}
<li class="d-flex align-items-center"> <li class="d-flex align-items-center">
<a href="javascript:return false;" onclick="CHAT_UI.makeNameCard({{shopMemberId}})" style="width: 100%;"> <a href="javascript:return false;" onclick="Namecard.makeNameCard({{shopMemberId}})" style="width: 100%;">
<div class="chat_item d-flex flex-row align-items-center"> <div class="chat_item d-flex flex-row align-items-center">
<div class="chat_item_l"> <div class="chat_item_l">
<div class="thumbnail"> <div class="thumbnail">
...@@ -20,10 +20,10 @@ ...@@ -20,10 +20,10 @@
<div class="chat_item_r"> <div class="chat_item_r">
<div class="d-flex flex-column"> <div class="d-flex flex-column">
{{#isFavorite}} {{#isFavorite}}
<span class="star active shopmember_{{shopMemberId}}" onclick="CHAT_UI.favoriteUserChange({{shopMemberId}},this)"></span> <span class="star active shopmember_{{shopMemberId}}" onclick="Namecard.favoriteUserChange({{shopMemberId}},this)"></span>
{{/isFavorite}} {{/isFavorite}}
{{^isFavorite}} {{^isFavorite}}
<span class="star disable shopmember_{{shopMemberId}}" onclick="CHAT_UI.favoriteUserChange({{shopMemberId}},this)"></span> <span class="star disable shopmember_{{shopMemberId}}" onclick="Namecard.favoriteUserChange({{shopMemberId}},this)"></span>
{{/isFavorite}} {{/isFavorite}}
</div> </div>
</div> </div>
......
<div class="room_left chat_message" data-messageid="{{messageId}}"> <div class="room_left chat_message" data-messageid="{{messageId}}">
<figure> <figure>
<a href="#" data-toggle="modal" data-target="#profileModal1"> <a href="#" data-toggle="modal" data-target="#profileModal1">
<img src="{{profileImage}}" onError="this.src='./img/noImage.png'" onclick="CHAT_UI.makeNameCard({{shopMemberId}})"> <img src="{{profileImage}}" onError="this.src='./img/noImage.png'" onclick="Namecard.makeNameCard({{shopMemberId}})">
</a> </a>
</figure> </figure>
<div class="room_left-text"> <div class="room_left-text">
......
<div class="modal fade profile_modal" id="userNameCard" tabindex="-1" role="dialog" aria-labelledby="userNameCard" aria-hidden="true"> <div class="modal fade profile_modal" id="userNameCard" tabindex="-1" role="dialog" aria-labelledby="userNameCard"
aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document"> <div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header border-0"> <div class="modal-header border-0">
...@@ -6,18 +7,19 @@ ...@@ -6,18 +7,19 @@
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
<div class="profile_desc_ d-flex flex-row"> <div class="profile_desc_ d-flex flex-row">
<img src="{{profileUrl}}" onError="this.src='./img/noImage.png'"/> <img src="{{profileUrl}}" onError="this.src='./img/noImage.png'" />
<div class="profile_name d-flex justify-content-center align-items-center"><span>{{name}}</span></div> <div class="profile_name d-flex justify-content-center align-items-center"><span>{{name}}</span></div>
</div> </div>
</div> </div>
<div class="modal-body" id="userNameCard-scroll"> <div class="modal-body" id="userNameCard-scroll">
{{#groupPathList}} {{#groupPathList}}
<li onclick="CHAT_UI.refreshAllGroupSearch({{groupId}});"><b>{{groupPath}}</b></li> <li onclick="Contact.refreshAllGroupSearch({{groupId}});"><b>{{groupPath}}</b></li>
{{/groupPathList}} {{/groupPathList}}
</div> </div>
<div class="modal-footer border-0 justify-content-center"> <div class="modal-footer border-0 justify-content-center">
{{#isFavorite}} {{#isFavorite}}
<button type="button" class="border-0 bg_navy" onclick="CHAT_UI.removeFavoriteUser({{shopMemberId}})" id="favoriteButton"> <button type="button" class="border-0 bg_navy" onclick="Namecard.removeFavoriteUser({{shopMemberId}})"
id="favoriteButton">
<div class="d-flex flex-column"> <div class="d-flex flex-column">
<div class="img_wrap"> <div class="img_wrap">
<img src="icon/icon_profile_favorite.png" alt="お気に入り"> <img src="icon/icon_profile_favorite.png" alt="お気に入り">
...@@ -27,7 +29,8 @@ ...@@ -27,7 +29,8 @@
</button> </button>
{{/isFavorite}} {{/isFavorite}}
{{^isFavorite}} {{^isFavorite}}
<button type="button" class="border-0 bg_navy" onclick="CHAT_UI.insertFavoriteUser({{shopMemberId}})" id="favoriteButton"> <button type="button" class="border-0 bg_navy" onclick="Namecard.insertFavoriteUser({{shopMemberId}})"
id="favoriteButton">
<div class="d-flex flex-column"> <div class="d-flex flex-column">
<div class="img_wrap"> <div class="img_wrap">
<img src="icon/icon_profile_favorite_white.png" alt="お気に入り"> <img src="icon/icon_profile_favorite_white.png" alt="お気に入り">
...@@ -36,7 +39,7 @@ ...@@ -36,7 +39,7 @@
</div> </div>
</button> </button>
{{/isFavorite}} {{/isFavorite}}
<button type="button" class="border-0 bg_green" onclick="CHAT_UI.startVoice('{{shopMemberId}}','{{name}}');"> <button type="button" class="border-0 bg_green" onclick="Namecard.startVoice('{{shopMemberId}}','{{name}}');">
<div class="d-flex flex-column"> <div class="d-flex flex-column">
<div class="img_wrap"> <div class="img_wrap">
<img src="icon/icon_profile_phone.png" alt="通話"> <img src="icon/icon_profile_phone.png" alt="通話">
...@@ -44,7 +47,7 @@ ...@@ -44,7 +47,7 @@
<span>通話</span> <span>通話</span>
</div> </div>
</button> </button>
<button type="button" class="border-0 bg_blue" onclick="CHAT_UI.startChat('{{shopMemberId}}','{{name}}');"> <button type="button" class="border-0 bg_blue" onclick="Namecard.startChat('{{shopMemberId}}','{{name}}');">
<div class="d-flex flex-column"> <div class="d-flex flex-column">
<div class="img_wrap"> <div class="img_wrap">
<img src="icon/icon_profile_chat.png" alt="チャット"> <img src="icon/icon_profile_chat.png" alt="チャット">
...@@ -55,4 +58,4 @@ ...@@ -55,4 +58,4 @@
</div> </div>
</div> </div>
</div> </div>
</div> </div>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment