fix: 生物由来照会画面からのフィードバック。シングルクォート、ダブルクォートのエスケープ処理
This commit is contained in:
parent
739384febd
commit
e4674d69e5
@ -17,9 +17,21 @@ class UltmarcDoctorSearchViewModel(BaseModel):
|
||||
form_data: Optional[UltmarcDoctorSearchModel]
|
||||
|
||||
def ultmarc_data_json_str(self):
|
||||
"""アルトマーク医師データの検索結果を指定された件数ごとに分割しながら返す"""
|
||||
def date_handler(obj):
|
||||
"""json.dumpsの日付項目のフォーマットハンドラ"""
|
||||
return obj.isoformat() if hasattr(obj, 'isoformat') else obj
|
||||
return json.dumps([model.dict() for model in self.doctor_data], ensure_ascii=False, default=date_handler)
|
||||
|
||||
search_data_list = [model.dict() for model in self.doctor_data]
|
||||
search_data_len = len(search_data_list)
|
||||
# 呼び出し一回あたりの分割数
|
||||
part_size = 50
|
||||
for i in range(0, search_data_len, part_size):
|
||||
json_str = json.dumps(search_data_list[i:i + part_size], ensure_ascii=False, default=date_handler)
|
||||
# JavaScriptに埋め込むため、クォートをエスケープ
|
||||
json_str = json_str.replace("'", "\\'")
|
||||
json_str = json_str.replace('\\"', '\\\\"')
|
||||
yield json_str
|
||||
|
||||
# ページネーションのページ番号
|
||||
# 検索時は最初のページを表示する
|
||||
|
||||
@ -19,9 +19,21 @@ class UltmarcInstSearchViewModel(BaseModel):
|
||||
form_data: Optional[UltmarcInstSearchModel]
|
||||
|
||||
def ultmarc_data_json_str(self):
|
||||
"""アルトマーク施設データの検索結果を指定された件数ごとに分割しながら返す"""
|
||||
def date_handler(obj):
|
||||
"""json.dumpsの日付項目のフォーマットハンドラ"""
|
||||
return obj.isoformat() if hasattr(obj, 'isoformat') else obj
|
||||
return json.dumps([model.dict() for model in self.inst_data], ensure_ascii=False, default=date_handler)
|
||||
|
||||
search_data_list = [model.dict() for model in self.inst_data]
|
||||
search_data_len = len(search_data_list)
|
||||
# 呼び出し一回あたりの分割数
|
||||
part_size = 50
|
||||
for i in range(0, search_data_len, part_size):
|
||||
json_str = json.dumps(search_data_list[i:i + part_size], ensure_ascii=False, default=date_handler)
|
||||
# JavaScriptに埋め込むため、クォートをエスケープ
|
||||
json_str = json_str.replace("'", "\\'")
|
||||
json_str = json_str.replace('\\"', '\\\\"')
|
||||
yield json_str
|
||||
|
||||
# ページネーションのページ番号
|
||||
# 検索時は最初のページを表示する
|
||||
|
||||
@ -164,14 +164,8 @@
|
||||
<script type="text/javascript">
|
||||
// <! --ページネーションの作成-- >
|
||||
$(function() {
|
||||
let searchResultData = [];
|
||||
// {% if not ultmarc.is_data_overflow_max_length() and not ultmarc.is_data_empty() %}
|
||||
// スピナー出さない場合は以下、エスケープせず埋め込む
|
||||
// {% autoescape False%}
|
||||
const searchResultString = '{{ultmarc.ultmarc_data_json_str()}}';
|
||||
// {% endautoescape%}
|
||||
searchResultData = JSON.parse(searchResultString);
|
||||
// {% endif %}
|
||||
const searchResultData = generateSearchResult();
|
||||
if (searchResultData.length == 0) return;
|
||||
|
||||
// 検索条件をセッションに入れる
|
||||
sessionStorage.clear();
|
||||
@ -191,9 +185,7 @@
|
||||
let pagination_page_number = Number('{{ultmarc.init_pagination_page_number()}}');
|
||||
|
||||
$(".pagination").pagination({
|
||||
dataSource: function(done) {
|
||||
done(searchResultData)
|
||||
},
|
||||
dataSource: searchResultData,
|
||||
pageNumber: pagination_page_number, // 初期ページ番号
|
||||
pageSize: 50, //表示するコンテンツ数
|
||||
pageRange: 1, //選択されているページネーション番号の両隣に表示する個数
|
||||
@ -205,6 +197,21 @@
|
||||
callback: function(data, pagination) {
|
||||
sessionStorage.setItem('pagination_page_number',pagination.pageNumber);
|
||||
$('#result_data').html(pagination_content(data));
|
||||
$('.paginationjs-pages > ul > li').not('.disabled,.active').each(function(index, val) {
|
||||
// paginationにtabindexをつける
|
||||
$(val).attr('tabindex', '0')
|
||||
// Enterキー押下時に要素をクリックできるようにイベントを付加する
|
||||
$(val).on('keypress', function(e) {
|
||||
if (e.code === 'Enter') {
|
||||
$(e.target).click()
|
||||
$(val).off('keypress')
|
||||
return false
|
||||
}
|
||||
$(val).off('keypress')
|
||||
})
|
||||
})
|
||||
FixedMidashi.remove();
|
||||
FixedMidashi.create();
|
||||
}
|
||||
})
|
||||
});
|
||||
@ -247,6 +254,19 @@
|
||||
})
|
||||
}
|
||||
|
||||
function generateSearchResult(){
|
||||
const searchResultData = []
|
||||
// {% if ultmarc.is_form_submitted() and not (ultmarc.is_data_overflow_max_length() or ultmarc.is_data_empty()) %}
|
||||
// {% autoescape False%}
|
||||
// ジェネレータですこしずつ取得してリストに詰める
|
||||
// {% for ultmarc_data_json_str in ultmarc.ultmarc_data_json_str() %}
|
||||
searchResultData.push(...JSON.parse('{{ultmarc_data_json_str}}'))
|
||||
// {% endfor %}
|
||||
// {% endautoescape%}
|
||||
// {% endif %}
|
||||
return searchResultData
|
||||
}
|
||||
|
||||
// チェックボックスのチェックされている場合、医師情報ボタンを活性化させる
|
||||
function resultBtDisabled(){
|
||||
var checkboxes = $('input[name="data"]:checked').length;
|
||||
|
||||
@ -165,15 +165,8 @@
|
||||
// <! --ページネーションの作成-- >
|
||||
$(function() {
|
||||
|
||||
let searchResultData = [];
|
||||
// {% if not ultmarc.is_data_overflow_max_length() and not ultmarc.is_data_empty() %}
|
||||
// スピナー出さない場合は以下、エスケープせず埋め込む
|
||||
// {% autoescape False%}
|
||||
const searchResultString = '{{ultmarc.ultmarc_data_json_str()}}';
|
||||
// {% endautoescape%}
|
||||
searchResultData = JSON.parse(searchResultString);
|
||||
// {% endif %}
|
||||
|
||||
const searchResultData = generateSearchResult();
|
||||
if (searchResultData.length == 0) return;
|
||||
|
||||
// 検索条件をセッションに入れる
|
||||
sessionStorage.clear();
|
||||
@ -189,11 +182,8 @@
|
||||
|
||||
// ページネーションのページ番号取得
|
||||
let pagination_page_number = Number('{{ultmarc.init_pagination_page_number()}}');
|
||||
|
||||
$(".pagination").pagination({
|
||||
dataSource: function(done) {
|
||||
done(searchResultData)
|
||||
},
|
||||
dataSource: searchResultData,
|
||||
pageNumber: pagination_page_number, // 初期ページ番号
|
||||
pageSize: 50, //表示するコンテンツ数
|
||||
pageRange: 2, //選択されているページネーション番号の両隣に表示する個数
|
||||
@ -205,6 +195,19 @@
|
||||
callback: function(data, pagination) {
|
||||
sessionStorage.setItem('pagination_page_number',pagination.pageNumber);
|
||||
$('#result_data').html(pagination_content(data))
|
||||
$('.paginationjs-pages > ul > li').not('.disabled,.active').each(function(index, val) {
|
||||
// paginationにtabindexをつける
|
||||
$(val).attr('tabindex', '0')
|
||||
// Enterキー押下時に要素をクリックできるようにイベントを付加する
|
||||
$(val).on('keypress', function(e) {
|
||||
if (e.code === 'Enter') {
|
||||
$(e.target).click()
|
||||
$(val).off('keypress')
|
||||
return false
|
||||
}
|
||||
$(val).off('keypress')
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
});
|
||||
@ -243,6 +246,19 @@
|
||||
})
|
||||
}
|
||||
|
||||
function generateSearchResult(){
|
||||
const searchResultData = []
|
||||
// {% if ultmarc.is_form_submitted() and not (ultmarc.is_data_overflow_max_length() or ultmarc.is_data_empty()) %}
|
||||
// {% autoescape False%}
|
||||
// ジェネレータですこしずつ取得してリストに詰める
|
||||
// {% for ultmarc_data_json_str in ultmarc.ultmarc_data_json_str() %}
|
||||
searchResultData.push(...JSON.parse('{{ultmarc_data_json_str}}'))
|
||||
// {% endfor %}
|
||||
// {% endautoescape%}
|
||||
// {% endif %}
|
||||
return searchResultData
|
||||
}
|
||||
|
||||
// チェックボックスのチェックされている場合、施設情報ボタンを活性化させる
|
||||
function resultBtDisabled(){
|
||||
var checkboxes = $('input[name="data"]:checked').length;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user