1d5a52cc2Sopenharmony_ci/* 2d5a52cc2Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3d5a52cc2Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4d5a52cc2Sopenharmony_ci * you may not use this file except in compliance with the License. 5d5a52cc2Sopenharmony_ci * You may obtain a copy of the License at 6d5a52cc2Sopenharmony_ci * 7d5a52cc2Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8d5a52cc2Sopenharmony_ci * 9d5a52cc2Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10d5a52cc2Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11d5a52cc2Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12d5a52cc2Sopenharmony_ci * See the License for the specific language governing permissions and 13d5a52cc2Sopenharmony_ci * limitations under the License. 14d5a52cc2Sopenharmony_ci */ 15d5a52cc2Sopenharmony_ci 16d5a52cc2Sopenharmony_ciimport DateUtil from '@ohos/utils/src/main/ets/default/baseUtil/DateUtil' 17d5a52cc2Sopenharmony_ciimport RdbStoreUtil from '@ohos/utils/src/main/ets/default/baseUtil/RdbStoreUtil' 18d5a52cc2Sopenharmony_ciimport FolderData from '@ohos/utils/src/main/ets/default/model/databaseModel/FolderData' 19d5a52cc2Sopenharmony_ciimport NoteData from '@ohos/utils/src/main/ets/default/model/databaseModel/NoteData' 20d5a52cc2Sopenharmony_ciimport util from '@ohos.util' 21d5a52cc2Sopenharmony_ciimport { 22d5a52cc2Sopenharmony_ci TableName, 23d5a52cc2Sopenharmony_ci NoteTableColumn, 24d5a52cc2Sopenharmony_ci SysDefFolderUuid, 25d5a52cc2Sopenharmony_ci Favorite, 26d5a52cc2Sopenharmony_ci Delete 27d5a52cc2Sopenharmony_ci} from '@ohos/utils/src/main/ets/default/model/databaseModel/EnumData' 28d5a52cc2Sopenharmony_ciimport StyleConstants from '@ohos/utils/src/main/ets/default/constants/StyleConstants' 29d5a52cc2Sopenharmony_ciimport { EditContentDialogPortrait, DeleteDialog, EditTitleDialog } from './CusDialogComp' 30d5a52cc2Sopenharmony_ciimport FolderUtil from '@ohos/utils/src/main/ets/default/baseUtil/FolderUtil' 31d5a52cc2Sopenharmony_ciimport NoteUtil from '@ohos/utils/src/main/ets/default/baseUtil/NoteUtil' 32d5a52cc2Sopenharmony_ciimport prompt from '@system.prompt' 33d5a52cc2Sopenharmony_ciimport { LogUtil } from '@ohos/utils/src/main/ets/default/baseUtil/LogUtil' 34d5a52cc2Sopenharmony_ciimport OperationUtils from '@ohos/utils/src/main/ets/default/baseUtil/OperationUtils' 35d5a52cc2Sopenharmony_ciimport router from '@system.router' 36d5a52cc2Sopenharmony_ciimport inputMethod from '@ohos.inputMethod'; 37d5a52cc2Sopenharmony_ciimport { folderTextMap } from '@ohos/utils/src/main/ets/default/model/NoteBaseData' 38d5a52cc2Sopenharmony_ciimport abilityAccessCtrl from '@ohos.abilityAccessCtrl'; 39d5a52cc2Sopenharmony_ci 40d5a52cc2Sopenharmony_civar time_id: number 41d5a52cc2Sopenharmony_ci 42d5a52cc2Sopenharmony_ciconst TAG = "NoteContentCompPortrait" 43d5a52cc2Sopenharmony_ci 44d5a52cc2Sopenharmony_ciasync function routePage() { 45d5a52cc2Sopenharmony_ci try { 46d5a52cc2Sopenharmony_ci await router.back() 47d5a52cc2Sopenharmony_ci } catch (err) { 48d5a52cc2Sopenharmony_ci LogUtil.info(TAG, "fail callback") 49d5a52cc2Sopenharmony_ci } 50d5a52cc2Sopenharmony_ci} 51d5a52cc2Sopenharmony_ci 52d5a52cc2Sopenharmony_ci// Note content component 53d5a52cc2Sopenharmony_ci@Component 54d5a52cc2Sopenharmony_ciexport struct NoteContentCompPortrait { 55d5a52cc2Sopenharmony_ci @Provide('SelectedNoteData') selectedNoteData: NoteData = AppStorage.Get('NewNote') 56d5a52cc2Sopenharmony_ci @Provide('SelectedFolderData') selectedFolderData: FolderData = AppStorage.Get("NewFolder") 57d5a52cc2Sopenharmony_ci @StorageLink('AllNoteArray') AllNoteArray: NoteData[] = AppStorage.Link('AllNoteArray') 58d5a52cc2Sopenharmony_ci @Provide('EditModel') editModel: boolean = false 59d5a52cc2Sopenharmony_ci @StorageLink('dpi') dpi: number = 240 60d5a52cc2Sopenharmony_ci controllerShow: WebviewController 61d5a52cc2Sopenharmony_ci private editContentFlag = false 62d5a52cc2Sopenharmony_ci private isClickBack: boolean = false 63d5a52cc2Sopenharmony_ci @StorageLink('ScrollTopPercent') scrollTopPercent: number = 0.0 64d5a52cc2Sopenharmony_ci editContentDialogCtl: CustomDialogController = new CustomDialogController({ 65d5a52cc2Sopenharmony_ci builder: EditContentDialogPortrait({ confirm: this.confirm.bind(this) }), 66d5a52cc2Sopenharmony_ci alignment: DialogAlignment.Bottom, 67d5a52cc2Sopenharmony_ci autoCancel: true, 68d5a52cc2Sopenharmony_ci customStyle: true, 69d5a52cc2Sopenharmony_ci }) 70d5a52cc2Sopenharmony_ci 71d5a52cc2Sopenharmony_ci confirm(excuteJs: string) { 72d5a52cc2Sopenharmony_ci this.controllerShow.runJavaScript(excuteJs) 73d5a52cc2Sopenharmony_ci } 74d5a52cc2Sopenharmony_ci 75d5a52cc2Sopenharmony_ci storeScrollTop(scrollTop: number) { 76d5a52cc2Sopenharmony_ci if (scrollTop < 0) { 77d5a52cc2Sopenharmony_ci return 78d5a52cc2Sopenharmony_ci } 79d5a52cc2Sopenharmony_ci AppStorage.SetOrCreate<number>('ScrollTopPercent', scrollTop / this.controllerShow.getPageHeight()) 80d5a52cc2Sopenharmony_ci } 81d5a52cc2Sopenharmony_ci 82d5a52cc2Sopenharmony_ci restoreScrollTop() { 83d5a52cc2Sopenharmony_ci try { 84d5a52cc2Sopenharmony_ci if (!AppStorage.Has('remoteScrollTopPercent')) { 85d5a52cc2Sopenharmony_ci return 86d5a52cc2Sopenharmony_ci } 87d5a52cc2Sopenharmony_ci var scrollTopPercent = AppStorage.Get<number>('remoteScrollTopPercent') 88d5a52cc2Sopenharmony_ci if (scrollTopPercent < 0) { 89d5a52cc2Sopenharmony_ci return 90d5a52cc2Sopenharmony_ci } 91d5a52cc2Sopenharmony_ci this.controllerShow.runJavaScript( 92d5a52cc2Sopenharmony_ci 'document.documentElement.scrollTop = ' + this.controllerShow.getPageHeight() * scrollTopPercent 93d5a52cc2Sopenharmony_ci ) 94d5a52cc2Sopenharmony_ci } catch (error) { 95d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'restoreScrollTop error') 96d5a52cc2Sopenharmony_ci } 97d5a52cc2Sopenharmony_ci 98d5a52cc2Sopenharmony_ci } 99d5a52cc2Sopenharmony_ci 100d5a52cc2Sopenharmony_ci restoreFocus() { 101d5a52cc2Sopenharmony_ci if (!AppStorage.Has('isRemoteFocusOnSearch')) { 102d5a52cc2Sopenharmony_ci return 103d5a52cc2Sopenharmony_ci } 104d5a52cc2Sopenharmony_ci let isRemoteFocusOnSearch = AppStorage.Get<boolean>('isRemoteFocusOnSearch') 105d5a52cc2Sopenharmony_ci if (isRemoteFocusOnSearch) { 106d5a52cc2Sopenharmony_ci focusControl.requestFocus('searchInput') 107d5a52cc2Sopenharmony_ci } 108d5a52cc2Sopenharmony_ci AppStorage.Delete('isRemoteFocusOnSearch') 109d5a52cc2Sopenharmony_ci } 110d5a52cc2Sopenharmony_ci 111d5a52cc2Sopenharmony_ci noteContent = { 112d5a52cc2Sopenharmony_ci callbackhtml: (html) => { 113d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'note uuid is:' + this.selectedNoteData?.uuid) 114d5a52cc2Sopenharmony_ci this.selectedNoteData.content_text = NoteUtil.contrastInitType(this.selectedNoteData.content_text); 115d5a52cc2Sopenharmony_ci if (this.selectedNoteData.content_text === html ) { 116d5a52cc2Sopenharmony_ci return; 117d5a52cc2Sopenharmony_ci }; 118d5a52cc2Sopenharmony_ci this.selectedNoteData.content_text = html 119d5a52cc2Sopenharmony_ci this.selectedNoteData.modified_time = new Date().getTime() 120d5a52cc2Sopenharmony_ci let predicates_note = RdbStoreUtil.getRdbPredicates(TableName.NoteTable) 121d5a52cc2Sopenharmony_ci predicates_note.equalTo(NoteTableColumn.Uuid, this.selectedNoteData?.uuid) 122d5a52cc2Sopenharmony_ci RdbStoreUtil.update(this.selectedNoteData?.toNoteObject(), predicates_note, null) 123d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'update note success:' + this.selectedNoteData?.uuid) 124d5a52cc2Sopenharmony_ci // save continue data 125d5a52cc2Sopenharmony_ci let continueNote: string = JSON.stringify(this.selectedNoteData?.toNoteObject()) 126d5a52cc2Sopenharmony_ci AppStorage.SetOrCreate<string>('ContinueNote', continueNote) 127d5a52cc2Sopenharmony_ci LogUtil.info(TAG, "callbackhtml, set continue note success") 128d5a52cc2Sopenharmony_ci }, 129d5a52cc2Sopenharmony_ci callbackImagePath: (imgName) => { 130d5a52cc2Sopenharmony_ci // updata note image 131d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'note imgName is:' + imgName) 132d5a52cc2Sopenharmony_ci this.selectedNoteData.content_img = imgName 133d5a52cc2Sopenharmony_ci }, 134d5a52cc2Sopenharmony_ci 135d5a52cc2Sopenharmony_ci callbackScheduledSave: (html) => { 136d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'callbackScheduledSave') 137d5a52cc2Sopenharmony_ci if (this.selectedNoteData?.content_text == html) { 138d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'callbackScheduledSave the same value return') 139d5a52cc2Sopenharmony_ci return; 140d5a52cc2Sopenharmony_ci } 141d5a52cc2Sopenharmony_ci this.selectedNoteData.content_text = html 142d5a52cc2Sopenharmony_ci this.selectedNoteData.modified_time = new Date().getTime() 143d5a52cc2Sopenharmony_ci let predicates_note = RdbStoreUtil.getRdbPredicates(TableName.NoteTable) 144d5a52cc2Sopenharmony_ci predicates_note.equalTo(NoteTableColumn.Uuid, this.selectedNoteData?.uuid) 145d5a52cc2Sopenharmony_ci RdbStoreUtil.update(this.selectedNoteData?.toNoteObject(), predicates_note, null) 146d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'callbackScheduledSave, update note success:' + this.selectedNoteData?.uuid) 147d5a52cc2Sopenharmony_ci // save continue data 148d5a52cc2Sopenharmony_ci let continueNote: string = JSON.stringify(this.selectedNoteData?.toNoteObject()) 149d5a52cc2Sopenharmony_ci AppStorage.SetOrCreate<string>('ContinueNote', continueNote) 150d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'callbackScheduledSave, set continue note success') 151d5a52cc2Sopenharmony_ci }, 152d5a52cc2Sopenharmony_ci callbackPasteImage: (html) => { 153d5a52cc2Sopenharmony_ci if (html) { 154d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'paste info' + html) 155d5a52cc2Sopenharmony_ci let realHtml = "" 156d5a52cc2Sopenharmony_ci let base64regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/ 157d5a52cc2Sopenharmony_ci if (html && html.indexOf("base64") > 0) { 158d5a52cc2Sopenharmony_ci LogUtil.info(TAG, " getSrcFromHtml, src[1] : " + html) 159d5a52cc2Sopenharmony_ci let imgData = html.split(',')[1]; 160d5a52cc2Sopenharmony_ci let imgType = 'png' 161d5a52cc2Sopenharmony_ci if (html.indexOf("jpeg") > 0) { 162d5a52cc2Sopenharmony_ci imgType = 'jpg' 163d5a52cc2Sopenharmony_ci } else if (html.indexOf("gif") > 0) { 164d5a52cc2Sopenharmony_ci imgType = 'gif' 165d5a52cc2Sopenharmony_ci } 166d5a52cc2Sopenharmony_ci let filePath = "" 167d5a52cc2Sopenharmony_ci if (base64regex.test(imgData)) { 168d5a52cc2Sopenharmony_ci let base64 = new util.Base64() 169d5a52cc2Sopenharmony_ci let decodeArr = base64.decodeSync(imgData) 170d5a52cc2Sopenharmony_ci filePath = OperationUtils.saveImageData(decodeArr, imgType) 171d5a52cc2Sopenharmony_ci } else { 172d5a52cc2Sopenharmony_ci filePath = OperationUtils.saveImage(imgData, imgType) 173d5a52cc2Sopenharmony_ci } 174d5a52cc2Sopenharmony_ci realHtml = "file://" + filePath 175d5a52cc2Sopenharmony_ci } 176d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'paste info11' + realHtml) 177d5a52cc2Sopenharmony_ci this.controllerShow.runJavaScript("javascript:RICH_EDITOR.insertImageHtml('" + realHtml + "')") 178d5a52cc2Sopenharmony_ci } else { 179d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'paste info22224') 180d5a52cc2Sopenharmony_ci } 181d5a52cc2Sopenharmony_ci }, 182d5a52cc2Sopenharmony_ci callbackGetSize: (fontSize) => { 183d5a52cc2Sopenharmony_ci if (fontSize === 16) { 184d5a52cc2Sopenharmony_ci this.selectedNoteData.slider_value = 0 185d5a52cc2Sopenharmony_ci } else if (fontSize === 18) { 186d5a52cc2Sopenharmony_ci this.selectedNoteData.slider_value = 4 187d5a52cc2Sopenharmony_ci } else if (fontSize === 24) { 188d5a52cc2Sopenharmony_ci this.selectedNoteData.slider_value = 8 189d5a52cc2Sopenharmony_ci } else if (fontSize === 32) { 190d5a52cc2Sopenharmony_ci this.selectedNoteData.slider_value = 12 191d5a52cc2Sopenharmony_ci } else if (fontSize === 48) { 192d5a52cc2Sopenharmony_ci this.selectedNoteData.slider_value = 16 193d5a52cc2Sopenharmony_ci } 194d5a52cc2Sopenharmony_ci }, 195d5a52cc2Sopenharmony_ci addToDo: () => { 196d5a52cc2Sopenharmony_ci // 清单 197d5a52cc2Sopenharmony_ci this.controllerShow.runJavaScript("javascript:RICH_EDITOR.setTodo()") 198d5a52cc2Sopenharmony_ci }, 199d5a52cc2Sopenharmony_ci chooseStyle: () => { 200d5a52cc2Sopenharmony_ci this.editContentDialogCtl.open() 201d5a52cc2Sopenharmony_ci }, 202d5a52cc2Sopenharmony_ci openAlbum: async () => { 203d5a52cc2Sopenharmony_ci let permissionList: Array<string> = [ 204d5a52cc2Sopenharmony_ci "ohos.permission.READ_IMAGEVIDEO", 205d5a52cc2Sopenharmony_ci "ohos.permission.WRITE_IMAGEVIDEO" 206d5a52cc2Sopenharmony_ci ] 207d5a52cc2Sopenharmony_ci let context: any = AppStorage.Get("context"); 208d5a52cc2Sopenharmony_ci let AtManager = abilityAccessCtrl.createAtManager(); 209d5a52cc2Sopenharmony_ci // @ts-ignore 210d5a52cc2Sopenharmony_ci await AtManager.requestPermissionsFromUser(context, permissionList).then((data) => { 211d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'data permissions : ' + data.permissions) 212d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'data result: ' + data.authResults) 213d5a52cc2Sopenharmony_ci let sum = 0 214d5a52cc2Sopenharmony_ci for (let i = 0; i < data.authResults.length; i++) { 215d5a52cc2Sopenharmony_ci sum += data.authResults[i] 216d5a52cc2Sopenharmony_ci } 217d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'request permissions sum: ' + sum) 218d5a52cc2Sopenharmony_ci }).catch((err) => { 219d5a52cc2Sopenharmony_ci LogUtil.warn(TAG, 'failed to requestPermissionsFromUser : ' + err.code); 220d5a52cc2Sopenharmony_ci }) 221d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'startAbility start') 222d5a52cc2Sopenharmony_ci await globalThis.noteContext.startAbilityForResult({ 223d5a52cc2Sopenharmony_ci parameters: { uri: "singleselect", filterMediaType: "FILTER_MEDIA_TYPE_IMAGE" }, 224d5a52cc2Sopenharmony_ci bundleName: "com.ohos.photos", 225d5a52cc2Sopenharmony_ci abilityName: "com.ohos.photos.MainAbility", 226d5a52cc2Sopenharmony_ci }).then(v => { 227d5a52cc2Sopenharmony_ci let want = v['want']; 228d5a52cc2Sopenharmony_ci if (want != null && want != undefined) { 229d5a52cc2Sopenharmony_ci let param = want['parameters']; 230d5a52cc2Sopenharmony_ci let imageUri = "" 231d5a52cc2Sopenharmony_ci if (param != null && param != undefined) { 232d5a52cc2Sopenharmony_ci let uri = param['select-item-list']; 233d5a52cc2Sopenharmony_ci imageUri = uri[0]; 234d5a52cc2Sopenharmony_ci } 235d5a52cc2Sopenharmony_ci LogUtil.info(TAG, "image url" + imageUri) 236d5a52cc2Sopenharmony_ci // 拷贝 237d5a52cc2Sopenharmony_ci if (imageUri != null && imageUri != "") { 238d5a52cc2Sopenharmony_ci OperationUtils.copy(imageUri).then((uriPath) => { 239d5a52cc2Sopenharmony_ci var path = "file://" + uriPath 240d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'image uri is:' + path) 241d5a52cc2Sopenharmony_ci this.controllerShow.runJavaScript("javascript:RICH_EDITOR.getFocus()") 242d5a52cc2Sopenharmony_ci this.controllerShow.runJavaScript("javascript:RICH_EDITOR.insertImage('" + path + "')") 243d5a52cc2Sopenharmony_ci }) 244d5a52cc2Sopenharmony_ci } 245d5a52cc2Sopenharmony_ci } 246d5a52cc2Sopenharmony_ci }); 247d5a52cc2Sopenharmony_ci }, 248d5a52cc2Sopenharmony_ci getBreakPoint: () => { 249d5a52cc2Sopenharmony_ci return AppStorage.Get('breakPoint'); 250d5a52cc2Sopenharmony_ci } 251d5a52cc2Sopenharmony_ci } 252d5a52cc2Sopenharmony_ci 253d5a52cc2Sopenharmony_ci build() { 254d5a52cc2Sopenharmony_ci Column() { 255d5a52cc2Sopenharmony_ci Flex({ direction: FlexDirection.Column, wrap: FlexWrap.NoWrap, 256d5a52cc2Sopenharmony_ci alignItems: ItemAlign.Start, alignContent: FlexAlign.SpaceAround }) { 257d5a52cc2Sopenharmony_ci Column() { 258d5a52cc2Sopenharmony_ci ToolBarComp({ controllerShow: this.controllerShow }) 259d5a52cc2Sopenharmony_ci NoteContentOverViewComp() 260d5a52cc2Sopenharmony_ci .enabled(this.selectedNoteData && this.selectedNoteData?.is_deleted == Delete.Yes ? false : true) 261d5a52cc2Sopenharmony_ci } 262d5a52cc2Sopenharmony_ci 263d5a52cc2Sopenharmony_ci Column() { 264d5a52cc2Sopenharmony_ci Web({ src: $rawfile('editor.html'), controller: this.controllerShow }) 265d5a52cc2Sopenharmony_ci .overviewModeAccess(false) 266d5a52cc2Sopenharmony_ci .javaScriptAccess(true) 267d5a52cc2Sopenharmony_ci .javaScriptProxy({ 268d5a52cc2Sopenharmony_ci object: this.noteContent, 269d5a52cc2Sopenharmony_ci name: "callBackToApp", // html--> name.method 270d5a52cc2Sopenharmony_ci methodList: ["callbackhtml", "callbackScheduledSave", "callbackPasteImage", "callbackImagePath", "addToDo", "chooseStyle", "openAlbum", "callbackGetSize", "getBreakPoint"], 271d5a52cc2Sopenharmony_ci controller: this.controllerShow 272d5a52cc2Sopenharmony_ci }) 273d5a52cc2Sopenharmony_ci .onPageEnd((e) => { 274d5a52cc2Sopenharmony_ci try { 275d5a52cc2Sopenharmony_ci if (this.dpi <= 240) { 276d5a52cc2Sopenharmony_ci this.controllerShow.runJavaScript("changeSizeToRk()") 277d5a52cc2Sopenharmony_ci } else if (this.dpi <= 320 && this.dpi > 240) { 278d5a52cc2Sopenharmony_ci this.controllerShow.runJavaScript("changeSizeToPhone()") 279d5a52cc2Sopenharmony_ci } else { 280d5a52cc2Sopenharmony_ci this.controllerShow.runJavaScript("changeSizeToTablet()") 281d5a52cc2Sopenharmony_ci } 282d5a52cc2Sopenharmony_ci LogUtil.info(TAG, "finish loadurl") 283d5a52cc2Sopenharmony_ci let self = this 284d5a52cc2Sopenharmony_ci this.controllerShow.runJavaScript( 285d5a52cc2Sopenharmony_ci "RICH_EDITOR.setHtml('" + this.selectedNoteData?.content_text + "')", 286d5a52cc2Sopenharmony_ci () => { 287d5a52cc2Sopenharmony_ci // wait for the image in the note to load 288d5a52cc2Sopenharmony_ci setTimeout(function () { 289d5a52cc2Sopenharmony_ci self.restoreScrollTop() 290d5a52cc2Sopenharmony_ci self.restoreFocus() 291d5a52cc2Sopenharmony_ci }, 100) 292d5a52cc2Sopenharmony_ci } 293d5a52cc2Sopenharmony_ci ) 294d5a52cc2Sopenharmony_ci } catch (error) { 295d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'onPageEnd error') 296d5a52cc2Sopenharmony_ci } 297d5a52cc2Sopenharmony_ci 298d5a52cc2Sopenharmony_ci }) 299d5a52cc2Sopenharmony_ci .imageAccess(true) 300d5a52cc2Sopenharmony_ci .onlineImageAccess(true) 301d5a52cc2Sopenharmony_ci .fileAccess(true) 302d5a52cc2Sopenharmony_ci .domStorageAccess(true) 303d5a52cc2Sopenharmony_ci .zoomAccess(false) 304d5a52cc2Sopenharmony_ci .height('100%') 305d5a52cc2Sopenharmony_ci .width('100%') 306d5a52cc2Sopenharmony_ci .onScroll((event) => { 307d5a52cc2Sopenharmony_ci this.storeScrollTop(event.yOffset) 308d5a52cc2Sopenharmony_ci }) 309d5a52cc2Sopenharmony_ci .onClick(() => { 310d5a52cc2Sopenharmony_ci if (time_id) { 311d5a52cc2Sopenharmony_ci clearInterval(time_id) 312d5a52cc2Sopenharmony_ci } 313d5a52cc2Sopenharmony_ci // 添加定时器:3s自动保存 314d5a52cc2Sopenharmony_ci time_id = setInterval(() => { 315d5a52cc2Sopenharmony_ci try { 316d5a52cc2Sopenharmony_ci if (!this.isClickBack) { 317d5a52cc2Sopenharmony_ci this.controllerShow.runJavaScript("scheduledSaveContent()") 318d5a52cc2Sopenharmony_ci } 319d5a52cc2Sopenharmony_ci } catch (error) { 320d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'setInterval error') 321d5a52cc2Sopenharmony_ci } 322d5a52cc2Sopenharmony_ci }, 3000) 323d5a52cc2Sopenharmony_ci LogUtil.info(TAG, "setInterval time_id : " + time_id) 324d5a52cc2Sopenharmony_ci this.editModel = true 325d5a52cc2Sopenharmony_ci }) 326d5a52cc2Sopenharmony_ci } 327d5a52cc2Sopenharmony_ci .height('100%') 328d5a52cc2Sopenharmony_ci .enabled(this.selectedNoteData && this.selectedNoteData?.is_deleted == Delete.Yes ? false : true) 329d5a52cc2Sopenharmony_ci .flexShrink(1) 330d5a52cc2Sopenharmony_ci .margin({ top: 16 }) 331d5a52cc2Sopenharmony_ci .width(StyleConstants.PERCENTAGE_100) 332d5a52cc2Sopenharmony_ci } 333d5a52cc2Sopenharmony_ci .flexShrink(1) 334d5a52cc2Sopenharmony_ci .padding({ left: 24, right: 24 }) 335d5a52cc2Sopenharmony_ci 336d5a52cc2Sopenharmony_ci DeleteNoteComp() 337d5a52cc2Sopenharmony_ci } 338d5a52cc2Sopenharmony_ci .expandSafeArea([SafeAreaType.KEYBOARD, SafeAreaType.SYSTEM]) 339d5a52cc2Sopenharmony_ci .height(StyleConstants.PERCENTAGE_100) 340d5a52cc2Sopenharmony_ci .width(StyleConstants.PERCENTAGE_100) 341d5a52cc2Sopenharmony_ci } 342d5a52cc2Sopenharmony_ci 343d5a52cc2Sopenharmony_ci aboutToAppear(): void { 344d5a52cc2Sopenharmony_ci this.isClickBack = false 345d5a52cc2Sopenharmony_ci LogUtil.info(TAG, "aboutToAppear") 346d5a52cc2Sopenharmony_ci } 347d5a52cc2Sopenharmony_ci 348d5a52cc2Sopenharmony_ci aboutToDisappear(): void { 349d5a52cc2Sopenharmony_ci this.isClickBack = true 350d5a52cc2Sopenharmony_ci clearInterval(time_id) 351d5a52cc2Sopenharmony_ci NoteUtil.refreshAll() 352d5a52cc2Sopenharmony_ci LogUtil.info(TAG, "aboutToDisappear") 353d5a52cc2Sopenharmony_ci this.editContentDialogCtl = null 354d5a52cc2Sopenharmony_ci } 355d5a52cc2Sopenharmony_ci} 356d5a52cc2Sopenharmony_ci 357d5a52cc2Sopenharmony_ci@Component 358d5a52cc2Sopenharmony_ciexport struct NoteContentOverViewComp { 359d5a52cc2Sopenharmony_ci @Consume('SelectedNoteData') selectedNoteData: NoteData 360d5a52cc2Sopenharmony_ci @StorageLink('AllFolderArray') AllFolderArray: FolderData[] = [] 361d5a52cc2Sopenharmony_ci @StorageLink('CheckedNoteArray') CheckedNoteArray: NoteData[] = [] 362d5a52cc2Sopenharmony_ci @StorageLink('isUpdate') isUpdate: boolean = false 363d5a52cc2Sopenharmony_ci NoteDataMoveArray: FolderData[] 364d5a52cc2Sopenharmony_ci editTitleDialogCtl: CustomDialogController = new CustomDialogController({ 365d5a52cc2Sopenharmony_ci builder: EditTitleDialog({ confirm: this.confirm.bind(this) }), 366d5a52cc2Sopenharmony_ci alignment: DialogAlignment.Center, 367d5a52cc2Sopenharmony_ci autoCancel: false, 368d5a52cc2Sopenharmony_ci customStyle: true, 369d5a52cc2Sopenharmony_ci }) 370d5a52cc2Sopenharmony_ci 371d5a52cc2Sopenharmony_ci aboutToAppear() { 372d5a52cc2Sopenharmony_ci this.NoteDataMoveArray = this.AllFolderArray.slice(2, this.AllFolderArray.length); 373d5a52cc2Sopenharmony_ci if (this.AllFolderArray[1] === undefined || this.AllFolderArray[1] === null) { 374d5a52cc2Sopenharmony_ci LogUtil.info(TAG, "this AllFolderArray[1] undefined") 375d5a52cc2Sopenharmony_ci return 376d5a52cc2Sopenharmony_ci } 377d5a52cc2Sopenharmony_ci this.NoteDataMoveArray.push(this.AllFolderArray[1]); 378d5a52cc2Sopenharmony_ci } 379d5a52cc2Sopenharmony_ci 380d5a52cc2Sopenharmony_ci aboutToDisappear() { 381d5a52cc2Sopenharmony_ci this.editTitleDialogCtl = null 382d5a52cc2Sopenharmony_ci } 383d5a52cc2Sopenharmony_ci 384d5a52cc2Sopenharmony_ci confirm(newTitle: string) { 385d5a52cc2Sopenharmony_ci this.selectedNoteData.title = newTitle 386d5a52cc2Sopenharmony_ci this.selectedNoteData.modified_time = new Date().getTime() 387d5a52cc2Sopenharmony_ci let predicates_note = RdbStoreUtil.getRdbPredicates(TableName.NoteTable) 388d5a52cc2Sopenharmony_ci predicates_note.equalTo(NoteTableColumn.Uuid, this.selectedNoteData?.uuid) 389d5a52cc2Sopenharmony_ci RdbStoreUtil.update(this.selectedNoteData?.toNoteObject(), predicates_note, null) 390d5a52cc2Sopenharmony_ci // save continue data 391d5a52cc2Sopenharmony_ci let continueNote: string = JSON.stringify(this.selectedNoteData?.toNoteObject()) 392d5a52cc2Sopenharmony_ci AppStorage.SetOrCreate<string>('ContinueNote', continueNote) 393d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'NoteContentOverViewComp, MenuBuilder, set continue note success') 394d5a52cc2Sopenharmony_ci NoteUtil.refreshAll() 395d5a52cc2Sopenharmony_ci } 396d5a52cc2Sopenharmony_ci 397d5a52cc2Sopenharmony_ci @Builder 398d5a52cc2Sopenharmony_ci MenuBuilder() { 399d5a52cc2Sopenharmony_ci Column() { 400d5a52cc2Sopenharmony_ci Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { 401d5a52cc2Sopenharmony_ci List() { 402d5a52cc2Sopenharmony_ci if (this.NoteDataMoveArray !== undefined && this.NoteDataMoveArray !== null && this.NoteDataMoveArray !== []) { 403d5a52cc2Sopenharmony_ci ForEach(this.NoteDataMoveArray, (item) => { 404d5a52cc2Sopenharmony_ci ListItem() { 405d5a52cc2Sopenharmony_ci NoteDataMoveItemCompMenu({ folderItem: item, uuid: this.selectedNoteData?.folder_uuid }) 406d5a52cc2Sopenharmony_ci } 407d5a52cc2Sopenharmony_ci .onClick(() => { 408d5a52cc2Sopenharmony_ci this.selectedNoteData.folder_uuid = item.uuid 409d5a52cc2Sopenharmony_ci let predicates_note = RdbStoreUtil.getRdbPredicates(TableName.NoteTable) 410d5a52cc2Sopenharmony_ci predicates_note.equalTo(NoteTableColumn.Uuid, this.selectedNoteData?.uuid) 411d5a52cc2Sopenharmony_ci RdbStoreUtil.update(this.selectedNoteData?.toNoteObject(), predicates_note, null) 412d5a52cc2Sopenharmony_ci // save continue data 413d5a52cc2Sopenharmony_ci let continueNote: string = JSON.stringify(this.selectedNoteData?.toNoteObject()) 414d5a52cc2Sopenharmony_ci AppStorage.SetOrCreate<string>('ContinueNote', continueNote) 415d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'MenuBuilder, set continue note success') 416d5a52cc2Sopenharmony_ci NoteUtil.refreshAll() 417d5a52cc2Sopenharmony_ci }) 418d5a52cc2Sopenharmony_ci }, noteItem => noteItem?.uuid) 419d5a52cc2Sopenharmony_ci } 420d5a52cc2Sopenharmony_ci } 421d5a52cc2Sopenharmony_ci .margin({ top: 4, bottom: 4 }) 422d5a52cc2Sopenharmony_ci .listDirection(Axis.Vertical) 423d5a52cc2Sopenharmony_ci .edgeEffect(EdgeEffect.Spring) 424d5a52cc2Sopenharmony_ci .height(this.AllFolderArray.length > 12 ? 504 : (this.AllFolderArray.length - 3) * 56) 425d5a52cc2Sopenharmony_ci } 426d5a52cc2Sopenharmony_ci .backgroundColor($r('app.color.folder_color_ffffff')) 427d5a52cc2Sopenharmony_ci .width(148) 428d5a52cc2Sopenharmony_ci .padding({ left: 24, right: 24 }) 429d5a52cc2Sopenharmony_ci } 430d5a52cc2Sopenharmony_ci } 431d5a52cc2Sopenharmony_ci 432d5a52cc2Sopenharmony_ci build() { 433d5a52cc2Sopenharmony_ci if (this.selectedNoteData) { 434d5a52cc2Sopenharmony_ci Flex({ direction: FlexDirection.Column, wrap: FlexWrap.NoWrap, 435d5a52cc2Sopenharmony_ci justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center }) { 436d5a52cc2Sopenharmony_ci Row() { 437d5a52cc2Sopenharmony_ci Text(this.selectedNoteData?.title) 438d5a52cc2Sopenharmony_ci .id(this.isUpdate + '') 439d5a52cc2Sopenharmony_ci .fontSize(30).fontWeight(FontWeight.Medium) 440d5a52cc2Sopenharmony_ci .onClick(() => { 441d5a52cc2Sopenharmony_ci clearInterval(time_id) 442d5a52cc2Sopenharmony_ci this.editTitleDialogCtl.open() 443d5a52cc2Sopenharmony_ci }) 444d5a52cc2Sopenharmony_ci }.height(40) 445d5a52cc2Sopenharmony_ci .width(StyleConstants.PERCENTAGE_100) 446d5a52cc2Sopenharmony_ci 447d5a52cc2Sopenharmony_ci Row() { 448d5a52cc2Sopenharmony_ci Text(DateUtil.formateDateForNoteContent(new Date(this.selectedNoteData?.modified_time))) 449d5a52cc2Sopenharmony_ci .id(this.isUpdate + '') 450d5a52cc2Sopenharmony_ci .fontSize(12) 451d5a52cc2Sopenharmony_ci .padding({ top: 4, bottom: 4 }) 452d5a52cc2Sopenharmony_ci .fontColor($r("app.color.modified_time_font_color")) 453d5a52cc2Sopenharmony_ci Row() { 454d5a52cc2Sopenharmony_ci Text(FolderUtil.getFolderText(FolderUtil.getFolderData(AppStorage.Get('AllFolderArray'), this.selectedNoteData?.folder_uuid)) == 455d5a52cc2Sopenharmony_ci folderTextMap["sys_def_myFavorites_uuid"] ? folderTextMap["sys_def_unClassified_uuid"] : 456d5a52cc2Sopenharmony_ci FolderUtil.getFolderText(FolderUtil.getFolderData(AppStorage.Get('AllFolderArray'), this.selectedNoteData?.folder_uuid))) 457d5a52cc2Sopenharmony_ci .id(this.isUpdate + '') 458d5a52cc2Sopenharmony_ci .fontColor($r('app.color.folder_color_99182431')) 459d5a52cc2Sopenharmony_ci .fontSize(12) 460d5a52cc2Sopenharmony_ci Image($r('app.media.triangle')) 461d5a52cc2Sopenharmony_ci .width(6) 462d5a52cc2Sopenharmony_ci .height(12) 463d5a52cc2Sopenharmony_ci .margin({ left: 4 }) 464d5a52cc2Sopenharmony_ci } 465d5a52cc2Sopenharmony_ci .id(this.isUpdate + '') 466d5a52cc2Sopenharmony_ci .padding({ left: 8, right: 8, top: 4, bottom: 4 }) 467d5a52cc2Sopenharmony_ci .margin({ left: 8 }) 468d5a52cc2Sopenharmony_ci .borderRadius(16) 469d5a52cc2Sopenharmony_ci .backgroundColor(NoteUtil.getNoteBgColor(AppStorage.Get('AllFolderArray'), this.selectedNoteData?.folder_uuid, SysDefFolderUuid.AllNotes, false)) 470d5a52cc2Sopenharmony_ci .bindMenu(this.MenuBuilder) 471d5a52cc2Sopenharmony_ci }.alignItems(VerticalAlign.Top).height(40).width(StyleConstants.PERCENTAGE_100) 472d5a52cc2Sopenharmony_ci } 473d5a52cc2Sopenharmony_ci .opacity(this.selectedNoteData?.is_deleted == Delete.Yes ? 0.4 : 1) 474d5a52cc2Sopenharmony_ci .width(StyleConstants.PERCENTAGE_100) 475d5a52cc2Sopenharmony_ci .height(82) 476d5a52cc2Sopenharmony_ci } 477d5a52cc2Sopenharmony_ci } 478d5a52cc2Sopenharmony_ci} 479d5a52cc2Sopenharmony_ci 480d5a52cc2Sopenharmony_ci@Component 481d5a52cc2Sopenharmony_ciexport struct ToolBarComp { 482d5a52cc2Sopenharmony_ci @Consume('SelectedNoteData') selectedNoteData: NoteData 483d5a52cc2Sopenharmony_ci @Consume('SelectedFolderData') selectedFolderData: FolderData 484d5a52cc2Sopenharmony_ci @Consume('EditModel') editModel: boolean 485d5a52cc2Sopenharmony_ci @StorageLink('AllNoteArray') AllNoteArray: NoteData[] = AppStorage.Link('AllNoteArray') 486d5a52cc2Sopenharmony_ci controllerShow: WebviewController 487d5a52cc2Sopenharmony_ci 488d5a52cc2Sopenharmony_ci onDeleteConfirm() { 489d5a52cc2Sopenharmony_ci if (this.selectedFolderData.uuid != SysDefFolderUuid.RecentDeletes) { 490d5a52cc2Sopenharmony_ci this.selectedNoteData.is_deleted = Delete.Yes 491d5a52cc2Sopenharmony_ci this.selectedNoteData.deleted_time = new Date().getTime() 492d5a52cc2Sopenharmony_ci // update note to db 493d5a52cc2Sopenharmony_ci let predicates_note = RdbStoreUtil.getRdbPredicates(TableName.NoteTable) 494d5a52cc2Sopenharmony_ci predicates_note.equalTo(NoteTableColumn.Uuid, this.selectedNoteData?.uuid) 495d5a52cc2Sopenharmony_ci RdbStoreUtil.update(this.selectedNoteData?.toNoteObject(), predicates_note, null) 496d5a52cc2Sopenharmony_ci routePage() 497d5a52cc2Sopenharmony_ci } else { 498d5a52cc2Sopenharmony_ci NoteUtil.removeNoteData(this.AllNoteArray, this.selectedNoteData?.uuid) 499d5a52cc2Sopenharmony_ci // delete note from db 500d5a52cc2Sopenharmony_ci let predicates_note = RdbStoreUtil.getRdbPredicates(TableName.NoteTable) 501d5a52cc2Sopenharmony_ci predicates_note.equalTo(NoteTableColumn.Uuid, this.selectedNoteData?.uuid) 502d5a52cc2Sopenharmony_ci RdbStoreUtil.delete(predicates_note, null) 503d5a52cc2Sopenharmony_ci routePage() 504d5a52cc2Sopenharmony_ci } 505d5a52cc2Sopenharmony_ci AppStorage.SetOrCreate('isUpdate', true) 506d5a52cc2Sopenharmony_ci } 507d5a52cc2Sopenharmony_ci 508d5a52cc2Sopenharmony_ci noteDataDeleteDialogCtl: CustomDialogController = new CustomDialogController({ 509d5a52cc2Sopenharmony_ci builder: DeleteDialog({ onConfirm: this.onDeleteConfirm.bind(this), multiSelect: true }), 510d5a52cc2Sopenharmony_ci alignment: DialogAlignment.Bottom, 511d5a52cc2Sopenharmony_ci autoCancel: false, 512d5a52cc2Sopenharmony_ci customStyle: true, 513d5a52cc2Sopenharmony_ci }) 514d5a52cc2Sopenharmony_ci 515d5a52cc2Sopenharmony_ci aboutToDisappear() { 516d5a52cc2Sopenharmony_ci this.noteDataDeleteDialogCtl = null 517d5a52cc2Sopenharmony_ci } 518d5a52cc2Sopenharmony_ci 519d5a52cc2Sopenharmony_ci build() { 520d5a52cc2Sopenharmony_ci Flex({ direction: FlexDirection.Row, wrap: FlexWrap.NoWrap, 521d5a52cc2Sopenharmony_ci justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center }) { 522d5a52cc2Sopenharmony_ci 523d5a52cc2Sopenharmony_ci Image($r('app.media.back')) 524d5a52cc2Sopenharmony_ci .height(24) 525d5a52cc2Sopenharmony_ci .width(24) 526d5a52cc2Sopenharmony_ci .responseRegion({ width: 54, height: 54 }) 527d5a52cc2Sopenharmony_ci .onClick(() => { 528d5a52cc2Sopenharmony_ci try { 529d5a52cc2Sopenharmony_ci this.controllerShow.runJavaScript("getHtmlContent()") 530d5a52cc2Sopenharmony_ci // 清除定时器 531d5a52cc2Sopenharmony_ci if (time_id != undefined) { 532d5a52cc2Sopenharmony_ci LogUtil.info(TAG, "back, clearInterval time_id : " + time_id) 533d5a52cc2Sopenharmony_ci clearInterval(time_id) 534d5a52cc2Sopenharmony_ci } 535d5a52cc2Sopenharmony_ci setTimeout(() => { 536d5a52cc2Sopenharmony_ci LogUtil.info(TAG, "wait save cotext") 537d5a52cc2Sopenharmony_ci router.back() 538d5a52cc2Sopenharmony_ci }, 50) 539d5a52cc2Sopenharmony_ci NoteUtil.refreshAll() 540d5a52cc2Sopenharmony_ci } catch (error) { 541d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'back error') 542d5a52cc2Sopenharmony_ci } 543d5a52cc2Sopenharmony_ci }) 544d5a52cc2Sopenharmony_ci 545d5a52cc2Sopenharmony_ci if (this.editModel == false) { 546d5a52cc2Sopenharmony_ci Row({ space: StyleConstants.SPACE_24 }) { 547d5a52cc2Sopenharmony_ci Image(this.selectedNoteData?.is_favorite == Favorite.Yes ? $r('app.media.favorite') : $r('app.media.favorite_cancel')) 548d5a52cc2Sopenharmony_ci .height(24).width(24) 549d5a52cc2Sopenharmony_ci .onClick(() => { 550d5a52cc2Sopenharmony_ci try { 551d5a52cc2Sopenharmony_ci this.selectedNoteData.is_favorite = (this.selectedNoteData?.is_favorite == Favorite.Yes ? Favorite.No : Favorite.Yes) 552d5a52cc2Sopenharmony_ci // update note to db 553d5a52cc2Sopenharmony_ci let predicates_note = RdbStoreUtil.getRdbPredicates(TableName.NoteTable) 554d5a52cc2Sopenharmony_ci predicates_note.equalTo(NoteTableColumn.Uuid, this.selectedNoteData?.uuid) 555d5a52cc2Sopenharmony_ci RdbStoreUtil.update(this.selectedNoteData?.toNoteObject(), predicates_note, null) 556d5a52cc2Sopenharmony_ci if (this.selectedFolderData?.uuid === SysDefFolderUuid.MyFavorites) { 557d5a52cc2Sopenharmony_ci this.selectedNoteData = NoteUtil.getFirstNoteData(AppStorage.Get('AllNoteArray'), SysDefFolderUuid.MyFavorites) 558d5a52cc2Sopenharmony_ci if (!this.selectedNoteData) { 559d5a52cc2Sopenharmony_ci routePage() 560d5a52cc2Sopenharmony_ci } 561d5a52cc2Sopenharmony_ci this.controllerShow.runJavaScript( 562d5a52cc2Sopenharmony_ci "RICH_EDITOR.setHtml('" + this.selectedNoteData.content_text + "')" 563d5a52cc2Sopenharmony_ci ) 564d5a52cc2Sopenharmony_ci // save continue data 565d5a52cc2Sopenharmony_ci let continueNote: string = JSON.stringify(this.selectedNoteData.toNoteObject()) 566d5a52cc2Sopenharmony_ci AppStorage.SetOrCreate<string>('ContinueNote', continueNote) 567d5a52cc2Sopenharmony_ci LogUtil.info(TAG, "ToolBarComp, set continue note success") 568d5a52cc2Sopenharmony_ci } 569d5a52cc2Sopenharmony_ci NoteUtil.refreshAll() 570d5a52cc2Sopenharmony_ci } catch (error) { 571d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'favorite error') 572d5a52cc2Sopenharmony_ci } 573d5a52cc2Sopenharmony_ci }) 574d5a52cc2Sopenharmony_ci Image($r('app.media.delete')).height(24).width(24) 575d5a52cc2Sopenharmony_ci .onClick(() => { 576d5a52cc2Sopenharmony_ci this.noteDataDeleteDialogCtl.open() 577d5a52cc2Sopenharmony_ci }) 578d5a52cc2Sopenharmony_ci }.width(72) 579d5a52cc2Sopenharmony_ci .visibility(this.selectedNoteData?.is_deleted == Delete.Yes ? Visibility.None : Visibility.Visible) 580d5a52cc2Sopenharmony_ci } else { 581d5a52cc2Sopenharmony_ci Row({ space: StyleConstants.SPACE_6 }) { 582d5a52cc2Sopenharmony_ci Button({ type: ButtonType.Normal, stateEffect: true }) { 583d5a52cc2Sopenharmony_ci Image($r('app.media.undo')).height(24).width(24) 584d5a52cc2Sopenharmony_ci .onClick(() => { 585d5a52cc2Sopenharmony_ci try { 586d5a52cc2Sopenharmony_ci // 退出键盘 587d5a52cc2Sopenharmony_ci // @ts-ignore 588d5a52cc2Sopenharmony_ci inputMethod.getController().stopInputSession(); 589d5a52cc2Sopenharmony_ci this.controllerShow.runJavaScript("javascript:RICH_EDITOR.undo()") 590d5a52cc2Sopenharmony_ci } catch (error) { 591d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'undo error') 592d5a52cc2Sopenharmony_ci } 593d5a52cc2Sopenharmony_ci }) 594d5a52cc2Sopenharmony_ci }.width(42) 595d5a52cc2Sopenharmony_ci .height(42) 596d5a52cc2Sopenharmony_ci .borderRadius(8) 597d5a52cc2Sopenharmony_ci .backgroundColor($r('app.color.color_fffffB')) 598d5a52cc2Sopenharmony_ci 599d5a52cc2Sopenharmony_ci Button({ type: ButtonType.Normal, stateEffect: true }) { 600d5a52cc2Sopenharmony_ci Image($r('app.media.todo')).height(24).width(24) 601d5a52cc2Sopenharmony_ci .onClick(() => { 602d5a52cc2Sopenharmony_ci try { 603d5a52cc2Sopenharmony_ci // 退出键盘 604d5a52cc2Sopenharmony_ci // @ts-ignore 605d5a52cc2Sopenharmony_ci inputMethod.getController().stopInputSession(); 606d5a52cc2Sopenharmony_ci this.controllerShow.runJavaScript("javascript:RICH_EDITOR.redo()") 607d5a52cc2Sopenharmony_ci } catch (error) { 608d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'todo error') 609d5a52cc2Sopenharmony_ci } 610d5a52cc2Sopenharmony_ci }) 611d5a52cc2Sopenharmony_ci }.width(42) 612d5a52cc2Sopenharmony_ci .height(42) 613d5a52cc2Sopenharmony_ci .borderRadius(8) 614d5a52cc2Sopenharmony_ci .backgroundColor($r('app.color.color_fffffB')) 615d5a52cc2Sopenharmony_ci 616d5a52cc2Sopenharmony_ci Button({ type: ButtonType.Normal, stateEffect: true }) { 617d5a52cc2Sopenharmony_ci Image($r('app.media.tick_thin')).height(24).width(24) 618d5a52cc2Sopenharmony_ci .onClick(() => { 619d5a52cc2Sopenharmony_ci try { 620d5a52cc2Sopenharmony_ci // 保存笔记信息到数据库 621d5a52cc2Sopenharmony_ci this.controllerShow.runJavaScript("getHtmlContent()") 622d5a52cc2Sopenharmony_ci this.editModel = false 623d5a52cc2Sopenharmony_ci this.controllerShow.runJavaScript("javascript:RICH_EDITOR.getBlur()") 624d5a52cc2Sopenharmony_ci } catch (error) { 625d5a52cc2Sopenharmony_ci LogUtil.info(TAG, 'tick_thin error') 626d5a52cc2Sopenharmony_ci } 627d5a52cc2Sopenharmony_ci }) 628d5a52cc2Sopenharmony_ci }.width(42) 629d5a52cc2Sopenharmony_ci .height(42) 630d5a52cc2Sopenharmony_ci .borderRadius(8) 631d5a52cc2Sopenharmony_ci .backgroundColor($r('app.color.color_fffffB')) 632d5a52cc2Sopenharmony_ci } 633d5a52cc2Sopenharmony_ci .width(130) 634d5a52cc2Sopenharmony_ci .visibility(this.selectedNoteData?.is_deleted == Delete.Yes ? Visibility.None : Visibility.Visible) 635d5a52cc2Sopenharmony_ci } 636d5a52cc2Sopenharmony_ci } 637d5a52cc2Sopenharmony_ci .width(StyleConstants.PERCENTAGE_100) 638d5a52cc2Sopenharmony_ci .height(40) 639d5a52cc2Sopenharmony_ci } 640d5a52cc2Sopenharmony_ci} 641d5a52cc2Sopenharmony_ci 642d5a52cc2Sopenharmony_ci@Component 643d5a52cc2Sopenharmony_ciexport struct DeleteNoteComp { 644d5a52cc2Sopenharmony_ci @StorageLink('CheckedNoteArray') CheckedNoteArray: NoteData[] = [] 645d5a52cc2Sopenharmony_ci @StorageLink('AllNoteArray') AllNoteArray: NoteData[] = AppStorage.Link('AllNoteArray') 646d5a52cc2Sopenharmony_ci @Consume('SelectedFolderData') selectedFolderData: FolderData 647d5a52cc2Sopenharmony_ci @Consume('RefreshFlag') refreshFlag: number 648d5a52cc2Sopenharmony_ci @Consume('SelectedNoteData') selectedNoteData: NoteData; 649d5a52cc2Sopenharmony_ci noteDataDeleteDialogCtlBottom: CustomDialogController = new CustomDialogController({ 650d5a52cc2Sopenharmony_ci builder: DeleteDialog({ onConfirm: this.onDeleteConfirm.bind(this), multiSelect: true }), 651d5a52cc2Sopenharmony_ci alignment: DialogAlignment.Bottom, 652d5a52cc2Sopenharmony_ci autoCancel: false, 653d5a52cc2Sopenharmony_ci customStyle: true, 654d5a52cc2Sopenharmony_ci }) 655d5a52cc2Sopenharmony_ci 656d5a52cc2Sopenharmony_ci aboutToDisappear() { 657d5a52cc2Sopenharmony_ci this.noteDataDeleteDialogCtlBottom = null 658d5a52cc2Sopenharmony_ci } 659d5a52cc2Sopenharmony_ci 660d5a52cc2Sopenharmony_ci onDeleteConfirm() { 661d5a52cc2Sopenharmony_ci if (this.selectedFolderData.uuid != SysDefFolderUuid.RecentDeletes) { 662d5a52cc2Sopenharmony_ci this.selectedNoteData.is_deleted = Delete.Yes 663d5a52cc2Sopenharmony_ci this.selectedNoteData.deleted_time = new Date().getTime() 664d5a52cc2Sopenharmony_ci // update note to db 665d5a52cc2Sopenharmony_ci let predicates_note = RdbStoreUtil.getRdbPredicates(TableName.NoteTable) 666d5a52cc2Sopenharmony_ci predicates_note.equalTo(NoteTableColumn.Uuid, this.selectedNoteData?.uuid) 667d5a52cc2Sopenharmony_ci RdbStoreUtil.update(this.selectedNoteData?.toNoteObject(), predicates_note, null) 668d5a52cc2Sopenharmony_ci routePage() 669d5a52cc2Sopenharmony_ci } else { 670d5a52cc2Sopenharmony_ci NoteUtil.removeNoteData(this.AllNoteArray, this.selectedNoteData?.uuid) 671d5a52cc2Sopenharmony_ci // delete note from db 672d5a52cc2Sopenharmony_ci let predicates_note = RdbStoreUtil.getRdbPredicates(TableName.NoteTable) 673d5a52cc2Sopenharmony_ci predicates_note.equalTo(NoteTableColumn.Uuid, this.selectedNoteData?.uuid) 674d5a52cc2Sopenharmony_ci RdbStoreUtil.delete(predicates_note, null) 675d5a52cc2Sopenharmony_ci NoteUtil.refreshAll() 676d5a52cc2Sopenharmony_ci routePage() 677d5a52cc2Sopenharmony_ci } 678d5a52cc2Sopenharmony_ci AppStorage.SetOrCreate('isUpdate', false) 679d5a52cc2Sopenharmony_ci } 680d5a52cc2Sopenharmony_ci 681d5a52cc2Sopenharmony_ci build() { 682d5a52cc2Sopenharmony_ci Flex({ direction: FlexDirection.Row, wrap: FlexWrap.Wrap, justifyContent: FlexAlign.SpaceBetween }) { 683d5a52cc2Sopenharmony_ci Column() { 684d5a52cc2Sopenharmony_ci Image($r('app.media.delete')) 685d5a52cc2Sopenharmony_ci .width(24) 686d5a52cc2Sopenharmony_ci .height(24) 687d5a52cc2Sopenharmony_ci .responseRegion({ x: -15.0, y: -15.0, width: 54, height: 54 }) 688d5a52cc2Sopenharmony_ci .onClick(() => { 689d5a52cc2Sopenharmony_ci this.noteDataDeleteDialogCtlBottom.open() 690d5a52cc2Sopenharmony_ci }) 691d5a52cc2Sopenharmony_ci Text($r("app.string.delete")) 692d5a52cc2Sopenharmony_ci .fontSize(10) 693d5a52cc2Sopenharmony_ci .fontColor($r('app.color.delete_font_color')) 694d5a52cc2Sopenharmony_ci .padding({ top: 5 }) 695d5a52cc2Sopenharmony_ci } 696d5a52cc2Sopenharmony_ci .height("100%") 697d5a52cc2Sopenharmony_ci .width(180) 698d5a52cc2Sopenharmony_ci .justifyContent(FlexAlign.Center) 699d5a52cc2Sopenharmony_ci .alignItems(HorizontalAlign.Center) 700d5a52cc2Sopenharmony_ci 701d5a52cc2Sopenharmony_ci Column() { 702d5a52cc2Sopenharmony_ci Image($r('app.media.recover')) 703d5a52cc2Sopenharmony_ci .width(24) 704d5a52cc2Sopenharmony_ci .height(24) 705d5a52cc2Sopenharmony_ci .responseRegion({ x: -15.0, y: -15.0, width: 54, height: 54 }) 706d5a52cc2Sopenharmony_ci .onClick(() => { 707d5a52cc2Sopenharmony_ci this.selectedNoteData.is_deleted = Delete.No 708d5a52cc2Sopenharmony_ci this.selectedNoteData.deleted_time = 0 709d5a52cc2Sopenharmony_ci let context: any = getContext(this) 710d5a52cc2Sopenharmony_ci let resource = { 711d5a52cc2Sopenharmony_ci bundleName: "com.ohos.note", 712d5a52cc2Sopenharmony_ci moduleName: "default", 713d5a52cc2Sopenharmony_ci id: $r('app.string.restore').id 714d5a52cc2Sopenharmony_ci }; 715d5a52cc2Sopenharmony_ci context.resourceManager.getString(resource, (error, value) => { 716d5a52cc2Sopenharmony_ci if (error != null) { 717d5a52cc2Sopenharmony_ci LogUtil.error(TAG, "error is " + error); 718d5a52cc2Sopenharmony_ci } else { 719d5a52cc2Sopenharmony_ci prompt.showToast({ message: value, duration: 2000 }); 720d5a52cc2Sopenharmony_ci } 721d5a52cc2Sopenharmony_ci }); 722d5a52cc2Sopenharmony_ci this.refreshFlag = (this.refreshFlag == 0 ? 1 : 0) 723d5a52cc2Sopenharmony_ci // update note to db 724d5a52cc2Sopenharmony_ci let predicates_note = RdbStoreUtil.getRdbPredicates(TableName.NoteTable) 725d5a52cc2Sopenharmony_ci predicates_note.equalTo(NoteTableColumn.Uuid, this.selectedNoteData?.uuid) 726d5a52cc2Sopenharmony_ci RdbStoreUtil.update(this.selectedNoteData?.toNoteObject(), predicates_note, null) 727d5a52cc2Sopenharmony_ci NoteUtil.refreshAll() 728d5a52cc2Sopenharmony_ci }) 729d5a52cc2Sopenharmony_ci Text($r("app.string.recover")) 730d5a52cc2Sopenharmony_ci .fontSize(10) 731d5a52cc2Sopenharmony_ci .fontColor($r('app.color.recover_font_color')) 732d5a52cc2Sopenharmony_ci .padding({ top: 5 }) 733d5a52cc2Sopenharmony_ci } 734d5a52cc2Sopenharmony_ci .height("100%") 735d5a52cc2Sopenharmony_ci .width(180) 736d5a52cc2Sopenharmony_ci .justifyContent(FlexAlign.Center) 737d5a52cc2Sopenharmony_ci .alignItems(HorizontalAlign.Center) 738d5a52cc2Sopenharmony_ci } 739d5a52cc2Sopenharmony_ci .width(360) 740d5a52cc2Sopenharmony_ci .height(56) 741d5a52cc2Sopenharmony_ci .visibility(this.selectedNoteData?.is_deleted == Delete.Yes ? 742d5a52cc2Sopenharmony_ci Visibility.Visible : Visibility.None) 743d5a52cc2Sopenharmony_ci } 744d5a52cc2Sopenharmony_ci} 745d5a52cc2Sopenharmony_ci 746d5a52cc2Sopenharmony_ci@Component 747d5a52cc2Sopenharmony_cistruct NoteDataMoveItemCompMenu { 748d5a52cc2Sopenharmony_ci @StorageLink('CheckedNoteArray') CheckedNoteArray: NoteData[] = [] 749d5a52cc2Sopenharmony_ci @StorageLink('AllFolderArray') AllFolderArray: FolderData[] = [] 750d5a52cc2Sopenharmony_ci @StorageLink('isUpdate') isUpdate: boolean = false 751d5a52cc2Sopenharmony_ci folderItem: FolderData 752d5a52cc2Sopenharmony_ci uuid: String 753d5a52cc2Sopenharmony_ci 754d5a52cc2Sopenharmony_ci build() { 755d5a52cc2Sopenharmony_ci Flex({ alignItems: ItemAlign.Center, wrap: FlexWrap.NoWrap, justifyContent: FlexAlign.Center }) { 756d5a52cc2Sopenharmony_ci Flex({ alignItems: ItemAlign.Center, wrap: FlexWrap.NoWrap }) { 757d5a52cc2Sopenharmony_ci Image(FolderUtil.getFolderIcon(this.folderItem.uuid)) 758d5a52cc2Sopenharmony_ci .id(this.isUpdate + '') 759d5a52cc2Sopenharmony_ci .objectFit(ImageFit.Fill) 760d5a52cc2Sopenharmony_ci .width(24) 761d5a52cc2Sopenharmony_ci .height(24) 762d5a52cc2Sopenharmony_ci .flexShrink(0) 763d5a52cc2Sopenharmony_ci .fillColor(FolderUtil.getFolderIconColor(this.AllFolderArray, this.folderItem.uuid, this.folderItem.uuid == this.uuid)) 764d5a52cc2Sopenharmony_ci } 765d5a52cc2Sopenharmony_ci .width(24) 766d5a52cc2Sopenharmony_ci 767d5a52cc2Sopenharmony_ci Column() { 768d5a52cc2Sopenharmony_ci Flex({ alignItems: ItemAlign.Center, wrap: FlexWrap.NoWrap, justifyContent: FlexAlign.SpaceBetween }) { 769d5a52cc2Sopenharmony_ci Text(FolderUtil.getFolderText(this.folderItem)) 770d5a52cc2Sopenharmony_ci .id(this.isUpdate + '') 771d5a52cc2Sopenharmony_ci .fontSize(16) 772d5a52cc2Sopenharmony_ci .fontColor(FolderUtil.getFolderIconColor(this.AllFolderArray, this.folderItem.uuid == this.uuid ? this.folderItem.uuid : '', this.folderItem.uuid == this.uuid)) 773d5a52cc2Sopenharmony_ci .textAlign(TextAlign.Center) 774d5a52cc2Sopenharmony_ci .maxLines(1) 775d5a52cc2Sopenharmony_ci .textOverflow({ overflow: TextOverflow.Ellipsis }) 776d5a52cc2Sopenharmony_ci .flexShrink(1) 777d5a52cc2Sopenharmony_ci } 778d5a52cc2Sopenharmony_ci .width('100%') 779d5a52cc2Sopenharmony_ci .height(55) 780d5a52cc2Sopenharmony_ci 781d5a52cc2Sopenharmony_ci if (this.folderItem.uuid != SysDefFolderUuid.UnClassified) { 782d5a52cc2Sopenharmony_ci Divider() 783d5a52cc2Sopenharmony_ci .color($r("app.color.divider_color_e4e4e4")) 784d5a52cc2Sopenharmony_ci .strokeWidth(1) 785d5a52cc2Sopenharmony_ci } 786d5a52cc2Sopenharmony_ci 787d5a52cc2Sopenharmony_ci } 788d5a52cc2Sopenharmony_ci .padding({ left: 16 }) 789d5a52cc2Sopenharmony_ci } 790d5a52cc2Sopenharmony_ci .id(this.isUpdate + '') 791d5a52cc2Sopenharmony_ci .width('100%') 792d5a52cc2Sopenharmony_ci .height(56) 793d5a52cc2Sopenharmony_ci .visibility(FolderUtil.isFolderMoveIn(this.folderItem) ? Visibility.Visible : Visibility.None) 794d5a52cc2Sopenharmony_ci } 795d5a52cc2Sopenharmony_ci} 796