├── .gitignore ├── LICENSE ├── README.md ├── __tests__ ├── parse_profile_literals.test.js └── subject_editor.test.js ├── babel.config.js ├── dev_server.sh ├── manual └── videos │ ├── bfe2_edit_complex_lookup.webm │ ├── bfe2_edit_dupe_remove_switch.webm │ ├── bfe2_edit_general.webm │ ├── bfe2_edit_literal.webm │ ├── bfe2_edit_simple_lookup.webm │ └── bfe2_help_home_screens.webm ├── package-lock.json ├── package.json ├── public ├── favicon.ico ├── fonts │ ├── fontello.eot │ ├── fontello.svg │ ├── fontello.ttf │ ├── fontello.woff │ ├── fontello.woff2 │ ├── validation-icons.eot │ ├── validation-icons.svg │ ├── validation-icons.ttf │ ├── validation-icons.woff │ └── validation-icons.woff2 ├── index.html ├── profile_stage.json ├── starting.json └── tests │ ├── hubs │ └── 6a226bae-b08e-a7f8-fd54-dbef6017c702.idedit.rdf │ ├── instances │ ├── 12393608.editor-pkg.xml │ ├── 13392490.editor-pkg.xml │ ├── 19768691.editor-pkg.xml │ ├── 20898769.editor-pkg.xml │ ├── 20969670.editor-pkg.xml │ ├── 21210374.editor-pkg.xml │ ├── 21295922.editor-pkg.xml │ ├── 21340456.editor-pkg.xml │ ├── 21533302.editor-pkg.xml │ ├── 21923950.editor-pkg.xml │ ├── 22205817.editor-pkg.xml │ ├── 22228035.editor-pkg.xml │ ├── 22255785.editor-pkg (1).xml │ ├── 22255785.editor-pkg.xml │ ├── 22295832.editor-pkg.xml │ ├── 22395548.editor-pkg.xml │ ├── 22471751.editor-pkg.xml │ ├── 22519577.editor-pkg copy.xml │ ├── 22519577.editor-pkg.xml │ ├── 22812916.editor-pkg.xml │ ├── 22812924.editor-pkg.xml │ ├── 22835043.convertedit-pkg.xml │ ├── 4602142.editor-pkg.xml │ ├── 5720460.editor-pkg.xml │ ├── 5823055.editor-pkg.xml │ ├── 5823055_real.editor-pkg.xml │ ├── 8a61ac28-fc4a-4287-b038-beb17c2da6d8.editor-pkg.xml │ ├── c0010058400001.editor-pkg.xml │ ├── c0056343030001.editor-pkg.xml │ ├── c0122950980001.editor-pkg.xml │ ├── c0202249350001.editor-pkg.xml │ ├── c0207030850001.editor-pkg.xml │ ├── c0210643040001.editor-pkg.xml │ ├── c0214680420001.editor-pkg.xml │ ├── c0218930920001.editor-pkg.xml │ ├── e2324557043013562145333356239676927794980001.editor-pkg.xml │ └── string.xml │ └── works │ ├── c017943071.rdf │ ├── c021295478.rdf │ └── loc.natlib.works.e37922655107918597887531234370352861771.rdf ├── src ├── App.vue ├── assets │ ├── img │ │ ├── close.png │ │ ├── expand_icon.png │ │ ├── expand_icon_hover.png │ │ ├── icons │ │ │ ├── complex.png │ │ │ ├── np_conference_2048424_000000.png │ │ │ ├── np_conference_2048424_000000.svg │ │ │ ├── np_corporate-identity_684427_000000.png │ │ │ ├── np_corporate-identity_684427_000000.svg │ │ │ ├── np_family_3043280_000000.png │ │ │ ├── np_family_3043280_000000.svg │ │ │ ├── np_geography_1401167_000000.png │ │ │ ├── np_geography_1401167_000000.svg │ │ │ ├── np_person_2467522_000000.png │ │ │ ├── np_person_2467522_000000.svg │ │ │ ├── np_tag_249487_000000.png │ │ │ ├── np_tag_249487_000000.svg │ │ │ ├── np_title-page_387780_000000.png │ │ │ └── np_title-page_387780_000000.svg │ │ ├── input-icon-keyboard.png │ │ ├── input-icon-search.png │ │ ├── input-icon-switch │ │ ├── input-icon-switch.png │ │ ├── logo_source.svg │ │ ├── plus_icon.png │ │ ├── plus_icon_hover.png │ │ └── triangle.png │ ├── logo.png │ └── main.css ├── components │ ├── CompactEditComplexLookupComponent.vue │ ├── CompactEditLiteralComponent.vue │ ├── CompactEditMainComponent.vue │ ├── CompactEditSimpleLookupComponent.vue │ ├── CompactEditTemplateRefComponent.vue │ ├── EditAdminComponent.vue │ ├── EditComplexLookupComponent.vue │ ├── EditLabelDereference.vue │ ├── EditLabelRemark.vue │ ├── EditLiteralComponent.vue │ ├── EditLiteralEditor.vue │ ├── EditLiteralLanguage.vue │ ├── EditMainComponent.vue │ ├── EditMetaComponent.vue │ ├── EditNavLiteralDisplayOptions.vue │ ├── EditNavToolBar.vue │ ├── EditSimpleLookupComponent.vue │ ├── EditSubjectEditor.vue │ ├── EditTemplateRefComponent.vue │ ├── HomeAllRecordsComponent.vue │ ├── HomeHelpComponent.vue │ ├── HomeLoadComponent.vue │ ├── HomeMyRecordsComponent.vue │ ├── HomeNewComponent.vue │ ├── HomeRecordsComponent.vue │ ├── HomeSettingsAuthorityLookupComponent.vue │ ├── HomeSettingsComponent.vue │ ├── HomeSettingsDiacriticsComponent.vue │ ├── HomeUserTemplateList.vue │ ├── MiscLoaderAnimation.vue │ └── _blank_component_template.vue ├── lib │ ├── config.js │ ├── diacritics │ │ ├── diacritic_pack_voyager_macro_express.json │ │ └── diacritic_pack_voyager_native.json │ ├── exportXML.js │ ├── exportXMLWorker.js │ ├── labels.js │ ├── lookupUtil.js │ ├── parseBfdb.js │ ├── parseId.js │ ├── parseProfile.js │ ├── uiUtils.js │ └── validationUtil.js ├── main.js ├── router │ └── index.js ├── store │ └── index.js └── views │ ├── CompactEdit.vue │ ├── Edit.vue │ ├── EditMini.vue │ ├── Errors.vue │ ├── Home.vue │ ├── ScriptShifter.vue │ ├── TestEditMini.vue │ ├── TestLiteralEditor.vue │ ├── TestParseBfdb.vue │ ├── TestParseId.vue │ └── TestSubject.vue ├── tmp.env └── vue.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | public/profiles.json 5 | public/profiles_stage.json 6 | 7 | # local env files 8 | .env.local 9 | .env.*.local 10 | .env 11 | 12 | # Log files 13 | npm-debug.log* 14 | yarn-debug.log* 15 | yarn-error.log* 16 | pnpm-debug.log* 17 | 18 | # Editor directories and files 19 | .idea 20 | .vscode 21 | *.suo 22 | *.ntvs* 23 | *.njsproj 24 | *.sln 25 | *.sw? 26 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Creative Commons Legal Code 2 | 3 | CC0 1.0 Universal 4 | 5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE 6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN 7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS 8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES 9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS 10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM 11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED 12 | HEREUNDER. 13 | 14 | Statement of Purpose 15 | 16 | The laws of most jurisdictions throughout the world automatically confer 17 | exclusive Copyright and Related Rights (defined below) upon the creator 18 | and subsequent owner(s) (each and all, an "owner") of an original work of 19 | authorship and/or a database (each, a "Work"). 20 | 21 | Certain owners wish to permanently relinquish those rights to a Work for 22 | the purpose of contributing to a commons of creative, cultural and 23 | scientific works ("Commons") that the public can reliably and without fear 24 | of later claims of infringement build upon, modify, incorporate in other 25 | works, reuse and redistribute as freely as possible in any form whatsoever 26 | and for any purposes, including without limitation commercial purposes. 27 | These owners may contribute to the Commons to promote the ideal of a free 28 | culture and the further production of creative, cultural and scientific 29 | works, or to gain reputation or greater distribution for their Work in 30 | part through the use and efforts of others. 31 | 32 | For these and/or other purposes and motivations, and without any 33 | expectation of additional consideration or compensation, the person 34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she 35 | is an owner of Copyright and Related Rights in the Work, voluntarily 36 | elects to apply CC0 to the Work and publicly distribute the Work under its 37 | terms, with knowledge of his or her Copyright and Related Rights in the 38 | Work and the meaning and intended legal effect of CC0 on those rights. 39 | 40 | 1. Copyright and Related Rights. A Work made available under CC0 may be 41 | protected by copyright and related or neighboring rights ("Copyright and 42 | Related Rights"). Copyright and Related Rights include, but are not 43 | limited to, the following: 44 | 45 | i. the right to reproduce, adapt, distribute, perform, display, 46 | communicate, and translate a Work; 47 | ii. moral rights retained by the original author(s) and/or performer(s); 48 | iii. publicity and privacy rights pertaining to a person's image or 49 | likeness depicted in a Work; 50 | iv. rights protecting against unfair competition in regards to a Work, 51 | subject to the limitations in paragraph 4(a), below; 52 | v. rights protecting the extraction, dissemination, use and reuse of data 53 | in a Work; 54 | vi. database rights (such as those arising under Directive 96/9/EC of the 55 | European Parliament and of the Council of 11 March 1996 on the legal 56 | protection of databases, and under any national implementation 57 | thereof, including any amended or successor version of such 58 | directive); and 59 | vii. other similar, equivalent or corresponding rights throughout the 60 | world based on applicable law or treaty, and any national 61 | implementations thereof. 62 | 63 | 2. Waiver. To the greatest extent permitted by, but not in contravention 64 | of, applicable law, Affirmer hereby overtly, fully, permanently, 65 | irrevocably and unconditionally waives, abandons, and surrenders all of 66 | Affirmer's Copyright and Related Rights and associated claims and causes 67 | of action, whether now known or unknown (including existing as well as 68 | future claims and causes of action), in the Work (i) in all territories 69 | worldwide, (ii) for the maximum duration provided by applicable law or 70 | treaty (including future time extensions), (iii) in any current or future 71 | medium and for any number of copies, and (iv) for any purpose whatsoever, 72 | including without limitation commercial, advertising or promotional 73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each 74 | member of the public at large and to the detriment of Affirmer's heirs and 75 | successors, fully intending that such Waiver shall not be subject to 76 | revocation, rescission, cancellation, termination, or any other legal or 77 | equitable action to disrupt the quiet enjoyment of the Work by the public 78 | as contemplated by Affirmer's express Statement of Purpose. 79 | 80 | 3. Public License Fallback. Should any part of the Waiver for any reason 81 | be judged legally invalid or ineffective under applicable law, then the 82 | Waiver shall be preserved to the maximum extent permitted taking into 83 | account Affirmer's express Statement of Purpose. In addition, to the 84 | extent the Waiver is so judged Affirmer hereby grants to each affected 85 | person a royalty-free, non transferable, non sublicensable, non exclusive, 86 | irrevocable and unconditional license to exercise Affirmer's Copyright and 87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the 88 | maximum duration provided by applicable law or treaty (including future 89 | time extensions), (iii) in any current or future medium and for any number 90 | of copies, and (iv) for any purpose whatsoever, including without 91 | limitation commercial, advertising or promotional purposes (the 92 | "License"). The License shall be deemed effective as of the date CC0 was 93 | applied by Affirmer to the Work. Should any part of the License for any 94 | reason be judged legally invalid or ineffective under applicable law, such 95 | partial invalidity or ineffectiveness shall not invalidate the remainder 96 | of the License, and in such case Affirmer hereby affirms that he or she 97 | will not (i) exercise any of his or her remaining Copyright and Related 98 | Rights in the Work or (ii) assert any associated claims and causes of 99 | action with respect to the Work, in either case contrary to Affirmer's 100 | express Statement of Purpose. 101 | 102 | 4. Limitations and Disclaimers. 103 | 104 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 105 | surrendered, licensed or otherwise affected by this document. 106 | b. Affirmer offers the Work as-is and makes no representations or 107 | warranties of any kind concerning the Work, express, implied, 108 | statutory or otherwise, including without limitation warranties of 109 | title, merchantability, fitness for a particular purpose, non 110 | infringement, or the absence of latent or other defects, accuracy, or 111 | the present or absence of errors, whether or not discoverable, all to 112 | the greatest extent permissible under applicable law. 113 | c. Affirmer disclaims responsibility for clearing rights of other persons 114 | that may apply to the Work or any use thereof, including without 115 | limitation any person's Copyright and Related Rights in the Work. 116 | Further, Affirmer disclaims responsibility for obtaining any necessary 117 | consents, permissions or other rights required for any use of the 118 | Work. 119 | d. Affirmer understands and acknowledges that Creative Commons is not a 120 | party to this document and has no duty or obligation with respect to 121 | this CC0 or use of the Work. 122 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | > [!IMPORTANT] 2 | > A newer version of this tool is being developed at: https://github.com/lcnetdev/marva-quartz 3 | 4 | 5 | # Marva 6 | 7 | ## Project setup 8 | ``` 9 | npm install 10 | ``` 11 | 12 | ### Compiles and hot-reloads for development 13 | ``` 14 | npm run serve 15 | ``` 16 | 17 | ### Compiles and minifies for production 18 | ``` 19 | npm run build 20 | ``` 21 | 22 | ### Lints and fixes files 23 | ``` 24 | npm run lint 25 | ``` 26 | 27 | ### Customize configuration 28 | See [Configuration Reference](https://cli.vuejs.org/config/). 29 | -------------------------------------------------------------------------------- /__tests__/subject_editor.test.js: -------------------------------------------------------------------------------- 1 | // const lookupUtil = require('../src/lib/lookupUtil.js'); 2 | import lookupUtil from '../src/lib/lookupUtil.js' 3 | import 'isomorphic-fetch' 4 | 5 | test('temp', () => { 6 | expect(1).toBe(1) 7 | }) 8 | 9 | // test('complexAuthorized', async () => { 10 | // // There is an authorized complex heading 11 | // let complex = await lookupUtil.subjectLinkModeResolveLCSH('$aeffective teaching$zunited States') 12 | // expect(complex.hit.uri).toBe('http://id.loc.gov/authorities/subjects/sh2008102486'); 13 | // expect(complex.hit.heading.rdfType).toBe('http://www.loc.gov/mads/rdf/v1#Topic'); 14 | 15 | // }); 16 | 17 | // test('preCoord', async () => { 18 | // // There is an authorized complex heading 19 | // let toTest = await lookupUtil.subjectLinkModeResolveLCSH('$aEffective teaching$zIndonesia$vCongresses') 20 | // expect(toTest.hit[0].uri).toBe('http://id.loc.gov/authorities/subjects/sh95003618'); 21 | // expect(toTest.hit[1].uri).toBe('http://id.loc.gov/authorities/names/n80083633-781'); 22 | // expect(toTest.hit[2].uri).toBe('http://id.loc.gov/authorities/subjects/sh99001533'); 23 | // expect(toTest.hit[2].heading.rdfType).toBe('http://www.loc.gov/mads/rdf/v1#GenreForm'); 24 | // }); 25 | 26 | // test('indirectGeoPreCoord', async () => { 27 | // // There is an authorized complex heading 28 | // let toTest = await lookupUtil.subjectLinkModeResolveLCSH('$aEffective teaching$zIndonesia--Jakarta$vCongresses') 29 | // expect(toTest.hit[0].uri).toBe('http://id.loc.gov/authorities/subjects/sh95003618'); 30 | // expect(toTest.hit[1].uri).toBe('http://id.loc.gov/authorities/names/n80073867-781'); 31 | // expect(toTest.hit[2].uri).toBe('http://id.loc.gov/authorities/subjects/sh99001533'); 32 | // expect(toTest.hit[2].heading.rdfType).toBe('http://www.loc.gov/mads/rdf/v1#GenreForm'); 33 | // }); 34 | 35 | // test('indirectGeoPreCoordLCSH', async () => { 36 | // // There is an authorized complex heading 37 | // let toTest = await lookupUtil.subjectLinkModeResolveLCSH('$aEffective teaching$zKorea (South)--Honam Region$vCongresses') 38 | // expect(toTest.hit[0].uri).toBe('http://id.loc.gov/authorities/subjects/sh95003618'); 39 | // expect(toTest.hit[1].uri).toBe('http://id.loc.gov/authorities/subjects/sh87005734-781'); 40 | // expect(toTest.hit[2].uri).toBe('http://id.loc.gov/authorities/subjects/sh99001533'); 41 | // expect(toTest.hit[2].heading.rdfType).toBe('http://www.loc.gov/mads/rdf/v1#GenreForm'); 42 | // }); 43 | 44 | 45 | 46 | 47 | 48 | // test('GeoLCSHPreCoord', async () => { 49 | // // There is an authorized complex heading 50 | // let toTest = await lookupUtil.subjectLinkModeResolveLCSH('$aEffective teaching$zSepik River Valley (Indonesia and Papua New Guinea)$vCongresses') 51 | // expect(toTest.hit[0].uri).toBe('http://id.loc.gov/authorities/subjects/sh95003618'); 52 | // expect(toTest.hit[1].uri).toBe('http://id.loc.gov/authorities/subjects/sh96001008-781'); 53 | // expect(toTest.hit[2].uri).toBe('http://id.loc.gov/authorities/subjects/sh99001533'); 54 | // expect(toTest.hit[2].heading.rdfType).toBe('http://www.loc.gov/mads/rdf/v1#GenreForm'); 55 | // }); 56 | 57 | // test('GeneralSubdivsionTopicalPreCoord', async () => { 58 | // // There is an authorized complex heading 59 | // let toTest = await lookupUtil.subjectLinkModeResolveLCSH('$aOlder people$xEducation$vPeriodicals.') 60 | // expect(toTest.hit[0].uri).toBe('http://id.loc.gov/authorities/subjects/sh85002087'); 61 | // expect(toTest.hit[1].uri).toBe('http://id.loc.gov/authorities/subjects/sh99005758'); 62 | // expect(toTest.hit[2].uri).toBe('http://id.loc.gov/authorities/subjects/sh99001647'); 63 | // expect(toTest.hit[2].heading.rdfType).toBe('http://www.loc.gov/mads/rdf/v1#GenreForm'); 64 | // }); 65 | // // '‡aOlder people‡xEducation‡vPeriodicals.' 66 | 67 | 68 | // test('TemporalAuthorizedComplex', async () => { 69 | // // There is an authorized complex heading 70 | // let toTest = await lookupUtil.subjectLinkModeResolveLCSH('$aCivilization, Medieval$y14th century.') 71 | // expect(toTest.hit.uri).toBe('http://id.loc.gov/authorities/subjects/sh85026466'); 72 | // expect(toTest.hit.heading.rdfType).toBe('http://www.loc.gov/mads/rdf/v1#Topic'); 73 | // }); 74 | 75 | // test('GeoTopicalPreCoord', async () => { 76 | // // There is an authorized complex heading 77 | // let toTest = await lookupUtil.subjectLinkModeResolveLCSH('$a San Antonio (Tex.) $x History $y 18th century.') 78 | // expect(toTest.hit[0].uri).toBe('http://id.loc.gov/authorities/names/n79054641'); 79 | // expect(toTest.hit[1].uri).toBe('http://id.loc.gov/authorities/subjects/sh99005024'); 80 | // expect(toTest.hit[2].uri).toBe('http://id.loc.gov/authorities/subjects/sh2002012474'); 81 | // expect(toTest.hit[0].heading.rdfType).toBe('http://www.loc.gov/mads/rdf/v1#Geographic'); 82 | // }); 83 | 84 | 85 | // test('PunctTestingLiteralTemporal', async () => { 86 | // // There is an authorized complex heading 87 | // let toTest = await lookupUtil.subjectLinkModeResolveLCSH(' $a English language $y 1933-1945 $x Pronunciation') 88 | // expect(toTest.hit[0].uri).toBe('http://id.loc.gov/authorities/subjects/sh85043413'); 89 | // expect(toTest.hit[1].literal).toBe(true); 90 | // expect(toTest.hit[2].uri).toBe('http://id.loc.gov/authorities/subjects/sh99005091'); 91 | // expect(toTest.hit[1].heading.rdfType).toBe('http://www.loc.gov/mads/rdf/v1#Temporal'); 92 | // }); 93 | 94 | // test('BadWorkTitle', async () => { 95 | // // There is an authorized complex heading 96 | // let toTest = await lookupUtil.subjectLinkModeResolveLCSH('$aEducational opportunities of Greater Boston') 97 | // expect(toTest.hit[0].literal).toBe(true); 98 | // expect(toTest.hit[0].heading.rdfType).toBe('http://www.loc.gov/mads/rdf/v1#Topic'); 99 | // }); 100 | 101 | // test('PunctTopicalHistoryNotSubdivision', async () => { 102 | // // There is an authorized complex heading 103 | // let toTest = await lookupUtil.subjectLinkModeResolveLCSH('$aHistory.$zIndonesia$vCongresses') 104 | // expect(toTest.hit[0].uri).toBe('http://id.loc.gov/authorities/subjects/sh85061212'); 105 | // expect(toTest.hit[1].uri).toBe('http://id.loc.gov/authorities/names/n80083633-781'); 106 | // expect(toTest.hit[2].uri).toBe('http://id.loc.gov/authorities/subjects/sh99001533'); 107 | // expect(toTest.hit[1].heading.rdfType).toBe('http://www.loc.gov/mads/rdf/v1#Geographic'); 108 | // }); 109 | 110 | // test('PerosnalNameAsTopic', async () => { 111 | // // There is an authorized complex heading 112 | // let toTest = await lookupUtil.subjectLinkModeResolveLCSH('$aWoolf, Virginia, 1882-1941$vPeriodicals') 113 | // expect(toTest.hit[0].uri).toBe('http://id.loc.gov/authorities/names/n79041870'); 114 | // expect(toTest.hit[1].uri).toBe('http://id.loc.gov/authorities/subjects/sh99001647'); 115 | // expect(toTest.hit[0].heading.rdfType).toBe('http://www.loc.gov/mads/rdf/v1#PersonalName'); 116 | // }); 117 | 118 | 119 | // test('TitleauthorityAsTopic', async () => { 120 | // // There is an authorized complex heading 121 | // let toTest = await lookupUtil.subjectLinkModeResolveLCSH('$aQuennell, Peter, 1905-1993. letter to Mrs. Virginia Woolf$vCommentaries') 122 | // expect(toTest.hit[0].uri).toBe('http://id.loc.gov/resources/works/10160872'); 123 | // expect(toTest.hit[1].uri).toBe('http://id.loc.gov/authorities/subjects/sh99001404'); 124 | // expect(toTest.hit[0].heading.rdfType).toBe('http://www.loc.gov/mads/rdf/v1#Topic'); 125 | // }); 126 | 127 | 128 | // test('Only Geographic', async () => { 129 | // // There is an authorized complex heading 130 | // let toTest = await lookupUtil.subjectLinkModeResolveLCSH('$aIndonesia') 131 | // expect(toTest.hit[0].uri).toBe('http://id.loc.gov/authorities/names/n80083633'); 132 | // expect(toTest.hit[0].heading.rdfType).toBe('http://www.loc.gov/mads/rdf/v1#Geographic'); 133 | // }); 134 | 135 | // test('Only Coporate', async () => { 136 | // // There is an authorized complex heading 137 | // let toTest = await lookupUtil.subjectLinkModeResolveLCSH('$aIndonesia. Dewan Perwakilan Rakyat') 138 | // expect(toTest.hit[0].uri).toBe('http://id.loc.gov/authorities/names/n81132589'); 139 | // expect(toTest.hit[0].heading.rdfType).toBe('http://www.loc.gov/mads/rdf/v1#CorporateName'); 140 | // }); 141 | 142 | 143 | // test('Test returnRDFType 1', async () => { 144 | // // There is an authorized complex heading 145 | // let toTest = await lookupUtil.returnRDFType('https://id.loc.gov/authorities/subjects/sh2002012478') 146 | // expect(toTest).toBe('http://www.loc.gov/mads/rdf/v1#Temporal'); 147 | // }); 148 | 149 | // test('Test returnRDFType 2', async () => { 150 | // // There is an authorized complex heading 151 | // let toTest = await lookupUtil.returnRDFType('https://id.loc.gov/authorities/names/n81132589') 152 | // expect(toTest).toBe('http://www.loc.gov/mads/rdf/v1#CorporateName'); 153 | // }); 154 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/cli-plugin-babel/preset' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /dev_server.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | export NODE_ENV=local 4 | npm run serve -------------------------------------------------------------------------------- /manual/videos/bfe2_edit_complex_lookup.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/manual/videos/bfe2_edit_complex_lookup.webm -------------------------------------------------------------------------------- /manual/videos/bfe2_edit_dupe_remove_switch.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/manual/videos/bfe2_edit_dupe_remove_switch.webm -------------------------------------------------------------------------------- /manual/videos/bfe2_edit_general.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/manual/videos/bfe2_edit_general.webm -------------------------------------------------------------------------------- /manual/videos/bfe2_edit_literal.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/manual/videos/bfe2_edit_literal.webm -------------------------------------------------------------------------------- /manual/videos/bfe2_edit_simple_lookup.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/manual/videos/bfe2_edit_simple_lookup.webm -------------------------------------------------------------------------------- /manual/videos/bfe2_help_home_screens.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/manual/videos/bfe2_help_home_screens.webm -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BFE2", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve --host localhost", 7 | "build": "vue-cli-service build", 8 | "lint": "vue-cli-service lint", 9 | "test": "jest" 10 | }, 11 | "jest": { 12 | "testEnvironment": "jsdom", 13 | "transformIgnorePatterns": [ 14 | "/node_modules/(?!short-uuid/)" 15 | ] 16 | }, 17 | "dependencies": { 18 | "core-js": "^3.6.5", 19 | "inline-web-worker": "^1.1.0", 20 | "md5": "^2.3.0", 21 | "short-uuid": "^4.1.0", 22 | "vue": "^2.6.11", 23 | "vue-json-pretty": "^1.6.7", 24 | "vue-keypress": "^2.1.1", 25 | "vue-router": "^3.3.1", 26 | "vuedraggable": "^2.24.3", 27 | "vuex": "^3.4.0" 28 | }, 29 | "devDependencies": { 30 | "@testing-library/vue": "^5.8.3", 31 | "@vue/cli-plugin-babel": "~4.4.0", 32 | "@vue/cli-plugin-eslint": "~4.4.0", 33 | "@vue/cli-service": "~4.4.0", 34 | "babel-eslint": "^10.1.0", 35 | "eslint": "^6.7.2", 36 | "eslint-plugin-vue": "^6.2.2", 37 | "isomorphic-fetch": "^3.0.0", 38 | "jest": "^28.1.3", 39 | "jest-environment-jsdom": "^29.0.3", 40 | "jsdom": "17.0.0", 41 | "vue-template-compiler": "^2.6.11" 42 | }, 43 | "eslintConfig": { 44 | "root": true, 45 | "env": { 46 | "node": true 47 | }, 48 | "extends": [ 49 | "plugin:vue/essential", 50 | "eslint:recommended" 51 | ], 52 | "parserOptions": { 53 | "parser": "babel-eslint" 54 | }, 55 | "rules": {} 56 | }, 57 | "browserslist": [ 58 | "> 1%", 59 | "last 2 versions", 60 | "not dead" 61 | ] 62 | } 63 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/public/favicon.ico -------------------------------------------------------------------------------- /public/fonts/fontello.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/public/fonts/fontello.eot -------------------------------------------------------------------------------- /public/fonts/fontello.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Copyright (C) 2020 by original authors @ fontello.com 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /public/fonts/fontello.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/public/fonts/fontello.ttf -------------------------------------------------------------------------------- /public/fonts/fontello.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/public/fonts/fontello.woff -------------------------------------------------------------------------------- /public/fonts/fontello.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/public/fonts/fontello.woff2 -------------------------------------------------------------------------------- /public/fonts/validation-icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/public/fonts/validation-icons.eot -------------------------------------------------------------------------------- /public/fonts/validation-icons.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Copyright (C) 2021 by original authors @ fontello.com 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /public/fonts/validation-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/public/fonts/validation-icons.ttf -------------------------------------------------------------------------------- /public/fonts/validation-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/public/fonts/validation-icons.woff -------------------------------------------------------------------------------- /public/fonts/validation-icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/public/fonts/validation-icons.woff2 -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | <%= htmlWebpackPlugin.options.title %> 8 | 9 | 10 | 13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /public/starting.json: -------------------------------------------------------------------------------- 1 | [{"id":"d1ab69a1-fe18-40d6-b596-40039a1144ae","name":"config","configType":"startingPoints","json":[{"menuGroup":"Monograph","menuItems":[{"label":"Instance","type":["http://id.loc.gov/ontologies/bibframe/Instance"],"useResourceTemplates":["lc:RT:bf2:Monograph:Instance"]},{"label":"Work","type":["http://id.loc.gov/ontologies/bibframe/Work"],"useResourceTemplates":["lc:RT:bf2:Monograph:Work"]}]},{"menuGroup":"Monograph (Non-Latin)","menuItems":[{"label":"Instance","type":["http://id.loc.gov/ontologies/bibframe/Instance"],"useResourceTemplates":["lc:RT:bf2:MonographNR:Instance"]},{"label":"Work","type":["http://id.loc.gov/ontologies/bibframe/Work"],"useResourceTemplates":["lc:RT:bf2:MonographNR:Work"]}]},{"menuGroup":"Notated Music","menuItems":[{"label":"Create Work","type":["http://id.loc.gov/ontologies/bibframe/Work"],"useResourceTemplates":["lc:RT:bf2:NotatedMusic:Work"]},{"label":"Create Instance","type":["http://id.loc.gov/ontologies/bibframe/Instance"],"useResourceTemplates":["lc:RT:bf2:NotatedMusic:Instance"]}]},{"menuGroup":"Serial","menuItems":[{"label":"Instance","type":["http://id.loc.gov/ontologies/bibframe/Instance"],"useResourceTemplates":["lc:RT:bf2:Serial:Instance"]},{"label":"Work","type":["http://id.loc.gov/ontologies/bibframe/Work"],"useResourceTemplates":["lc:RT:bf2:Serial:Work"]}]},{"menuGroup":"Cartographic","menuItems":[{"label":"Instance","type":["http://id.loc.gov/ontologies/bibframe/Instance"],"useResourceTemplates":["lc:RT:bf2:Cartographic:Instance"]},{"label":"Work","type":["http://id.loc.gov/ontologies/bibframe/Work"],"useResourceTemplates":["lc:RT:bf2:Cartographic:Work"]}]},{"menuGroup":"Sound Recording: Audio CD","menuItems":[{"label":"Instance","type":["http://id.loc.gov/ontologies/bibframe/Instance"],"useResourceTemplates":["lc:RT:bf2:SoundRecording:Instance"]},{"label":"Work","type":["http://id.loc.gov/ontologies/bibframe/Work"],"useResourceTemplates":["lc:RT:bf2:SoundRecording:Work"]}]},{"menuGroup":"Sound Recording: Audio CD-R","menuItems":[{"label":"Instance","type":["http://id.loc.gov/ontologies/bibframe/Instance"],"useResourceTemplates":["lc:RT:bf2:SoundCDR:Instance"]},{"label":"Work","type":["http://id.loc.gov/ontologies/bibframe/Work"],"useResourceTemplates":["lc:RT:bf2:SoundCDR:Work"]}]},{"menuGroup":"Sound Recording: Analog","menuItems":[{"label":"Instance","type":["http://id.loc.gov/ontologies/bibframe/Instance"],"useResourceTemplates":["lc:RT:bf2:Analog:Instance"]},{"label":"Work","type":["http://id.loc.gov/ontologies/bibframe/Work"],"useResourceTemplates":["lc:RT:bf2:Analog:Work"]}]},{"menuGroup":"Sound Recording: Cassette","menuItems":[{"label":"Instance","type":["http://id.loc.gov/ontologies/bibframe/Instance"],"useResourceTemplates":["lc:RT:bf2:SoundCassette:Instance"]},{"label":"Work","type":["http://id.loc.gov/ontologies/bibframe/Work"],"useResourceTemplates":["lc:RT:bf2:SoundCassette:Work"]}]},{"menuGroup":"Moving Image: BluRay DVD","menuItems":[{"label":"Instance","type":["http://id.loc.gov/ontologies/bibframe/Instance"],"useResourceTemplates":["lc:RT:bf2:MIBluRayDVD:Instance"]},{"label":"Work","type":["http://id.loc.gov/ontologies/bibframe/Work"],"useResourceTemplates":["lc:RT:bf2:MIBluRayDVD:Work"]}]},{"menuGroup":"Moving Image: 35mm Feature Film","menuItems":[{"label":"Instance","type":["http://id.loc.gov/ontologies/bibframe/Instance"],"useResourceTemplates":["lc:RT:bf2:35mmFeatureFilm:Instance"]},{"label":"Work","type":["http://id.loc.gov/ontologies/bibframe/Work"],"useResourceTemplates":["lc:RT:bf2:35mmFeatureFilm:Work"]}]},{"menuGroup":"Rare Materials","menuItems":[{"label":"Instance","type":["http://id.loc.gov/ontologies/bibframe/Instance"],"useResourceTemplates":["lc:RT:bf2:RareMat:Instance"]},{"label":"Work","type":["http://id.loc.gov/ontologies/bibframe/Work"],"useResourceTemplates":["lc:RT:bf2:RareMat:Work"]}]},{"menuGroup":"Prints & Photographs","menuItems":[{"label":"Instance","type":["http://id.loc.gov/ontologies/bibframe/Instance"],"useResourceTemplates":["lc:RT:bf2:PrintPhoto:Instance"]},{"label":"Work","type":["http://id.loc.gov/ontologies/bibframe/Work"],"useResourceTemplates":["lc:RT:bf2:PrintPhoto:Work"]}]}],"metadata":{"createDate":"2019-04-11T17:08:14.983Z","updateDate":"2020-02-20T21:39:18.217Z","createUser":null,"updateUser":null},"created":"2019-04-11T17:08:14.983Z","modified":"2020-02-20T21:39:18.217Z"}] -------------------------------------------------------------------------------- /public/tests/hubs/6a226bae-b08e-a7f8-fd54-dbef6017c702.idedit.rdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Heller, Yom Tov Lipmann ben Nathan ha-Levi ben Wallerstein,‏ ‎ 1579-1654 12 | 13 | 14 | 15 | 16 | 17 | Contributor 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 2021-11-01T00:00:00 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /public/tests/instances/21295922.editor-pkg.xml: -------------------------------------------------------------------------------- 1 | 2 | 2019 20194546699789655409031024900506622danacodewb2019440133Ariʼel Piḳarאריאל פיקארBi-leshon bene adamבלשון בני אדםיסודות להתחדשות יהודית־ישראליתYerushalayimKarmel2019237 pages23 cmunmediatedvolumeParshanut ṿe-tarbutירושליםירושליםכרמלכרמל20192019DLC marc2bibframe2 v1.7.02022-04-04T01:30:12.555544-04:00changedpreliminaryisbd21295922DLC2022-04-03T13:25:022019-07-09=906 $a 0 $b ibc $c origres $d 2 $e ncip $f 20 $g y-nonroman=925 0 $a acquire $b 1 shelf copy $x policy default=955 $a ve01 2019-11-08 $b cd04 2020-01-24 telework added LCCN, HR, IR $a cd00 2020-01-24 to ASME-IJ ; $a cd08 2022-04-03 23 cm SC ;DLCrdapccPicard, Ariel Bi-leshon bene adam בלשון בני אדםpicardarielbileshonbeneadamבלשוןבניאדםtextPicard, ArielBi-leshon bene adamבלשון בני אדםIn human language: foundations for Jewish and Israeli renewaltextKarmel, NaʻomiIsrael--Jerusalem.IsraelJerusalemDLC marc2bibframe2 v1.7.02022-04-04T01:30:12.555544-04:00changedpreliminaryisbd21295922DLC2022-04-03T13:25:022019-07-09=906 $a 0 $b ibc $c origres $d 2 $e ncip $f 20 $g y-nonroman=925 0 $a acquire $b 1 shelf copy $x policy default=955 $a ve01 2019-11-08 $b cd04 2020-01-24 telework added LCCN, HR, IR $a cd00 2020-01-24 to ASME-IJ ; $a cd08 2022-04-03 23 cm SC ;DLCrdapcc 3 | -------------------------------------------------------------------------------- /public/tests/instances/22205817.editor-pkg.xml: -------------------------------------------------------------------------------- 1 | 2 | 2021 20204334169791130818023Taehan Min'guk ŭi chuhong kŭlcha : Kungmin Podo Yŏnmaeng kwa Kungmin Pangwigun sakŏnMun Ch'ang-jae대한 민국 의 주홍 글자 : 국민 보도 연맹 과 국민 방위군 사건문 창재Taehan Min'guk ŭi chuhong kŭlcha : Kungmin Podo Yŏnmaeng kwa Kungmin Pangwigun sakŏn대한 민국 의 주홍 글자 : 국민 보도 연맹 과 국민 방위군 사건Taehan Min'guk ŭi chuhong kŭlchaKungmin Podo Yŏnmaeng kwa Kungmin Pangwigun sakŏn대한 민국 의 주홍 글자국민 보도 연맹 과 국민 방위군 사건초판경기도 파주시푸른 사상2021경기도 파주시 : 푸른 사상, 2021.319 pages22 cmunmediatedvolumeDLC marc2bibframe2 v1.7.0-SNAPSHOT2021-09-15T09:32:06.769021-04:00corrected or revisedcpreliminaryisbd22205817DLC2021-09-15T09:30:162021-08-29=906 $a 0 $b ibc $c orignew $d 3 $e ncip $f 20 $g y-nonroman=925 0 $a acquire $b 1 shelf copy $x policy default=955 $a ve18 2021-08-31 TW Situational $b cf21 2021-09-15 TW SituationalDLCrdapccMun, Ch'ang-jae, Taehan Min'guk ŭi chuhong kŭlcha : Kungmin Podo Yŏnmaeng kwa Kungmin Pangwigun sakŏn 대한 민국 의 주홍 글자 : 국민 보도 연맹 과 국민 방위군 사건munch'angjaetaehanmin'gukŭichuhongkŭlcha:kungminpodoyŏnmaengkwakungminpangwigunsakŏn대한민국의주홍글자:국민보도연맹과국민방위군사건Mun, Ch'ang-jae,author.Taehan Min'guk ŭi chuhong kŭlcha : Kungmin Podo Yŏnmaeng kwa Kungmin Pangwigun sakŏn대한 민국 의 주홍 글자 : 국민 보도 연맹 과 국민 방위군 사건Taehan Min'guk ŭi chuhong kŭlcha : Kungmin Podo Yŏnmaeng kwa Kungmin Pangwigun sakŏn대한 민국 의 주홍 글자 : 국민 보도 연맹 과 국민 방위군 사건Taehan Min'guk ŭi chuhong kŭlcha : Kungmin Podo Yŏnmaeng kwa Kungmin Pangwigun sakŏn대한 민국 의 주홍 글자 : 국민 보도 연맹 과 국민 방위군 사건textIncludes bibliographical references (pages 313-315) and index.DLC marc2bibframe2 v1.7.0-SNAPSHOT2021-09-15T09:32:06.769021-04:00corrected or revisedcpreliminaryisbd22205817DLC2021-09-15T09:30:162021-08-29=906 $a 0 $b ibc $c orignew $d 3 $e ncip $f 20 $g y-nonroman=925 0 $a acquire $b 1 shelf copy $x policy default=955 $a ve18 2021-08-31 TW Situational $b cf21 2021-09-15 TW SituationalDLCrdapcc 3 | -------------------------------------------------------------------------------- /public/tests/instances/22255785.editor-pkg (1).xml: -------------------------------------------------------------------------------- 1 | 2 | 2021 20214228179791167420091O Chong-gap오 종갑Kugŏ pangŏn e panyŏng toen ŭmunnonjŏk pyŏnhwa국어 방언 에 반영 된 음운론적 변화Ch'op'an초판Sŏul-si서울시Yŏngnak역락20212021837 pagesmaps23 cmunmediatedvolumeIncludes bibliographical references (pages 787-789) and index.DLC marc2bibframe2 v1.7.02021-10-27T07:02:06.915113-04:00changedpreliminaryisbd22255785DLC2021-10-27T07:01:172021-09-28=906 $a 0 $b ibc $c orignew $d 3 $e ncip $f 20 $g y-nonroman=925 0 $a acquire $b 1 shelf copy $x policy default=955 $a ve18 2021-09-28 TW Situational $b cf21 2021-10-05 TW SituationalDLCrdapccO, Chong-gap, 1946- Kugŏ pangŏn e panyŏng toen ŭmunnonjŏk pyŏnhwa 국어 방언 에 반영 된 음운론적 변화ochonggap1946kugŏpangŏnepanyŏngtoenŭmunnonjŏkpyŏnhwa국어방언에반영된음운론적변화textmapsO, Chong-gap, 1946-authorKugŏ pangŏn e panyŏng toen ŭmunnonjŏk pyŏnhwa국어 방언 에 반영 된 음운론적 변화textDLC marc2bibframe2 v1.7.02021-10-27T07:02:06.915113-04:00changedpreliminaryisbd22255785DLC2021-10-27T07:01:172021-09-28=906 $a 0 $b ibc $c orignew $d 3 $e ncip $f 20 $g y-nonroman=925 0 $a acquire $b 1 shelf copy $x policy default=955 $a ve18 2021-09-28 TW Situational $b cf21 2021-10-05 TW SituationalDLCrdapcc 3 | -------------------------------------------------------------------------------- /public/tests/instances/22395548.editor-pkg.xml: -------------------------------------------------------------------------------- 1 | 2 | 2021 20223920879791197173547Min Kyŏng-u chiŭm민 경우 지음86-sedae minjujuŭiminjuhwa undong kwa chusap'a kwŏllyŏk ŭi kiwŏn86세대 민주주의민주화 운동 과 주사파 권력 의 기원Ch'op'an초판Sŏul서울Inmun Konggan인문 공간20212021276 pages22 cmunmediatedvolumeDLC marc2bibframe2 v1.7.02022-02-15T01:35:36.293074-05:00changedpreliminaryisbd22395548DLC2022-02-14T15:38:482022-01-24=906 $a 0 $b ibc $c orignew $d 3 $e ncip $f 20 $g y-nonroman=925 0 $a acquire $b 1 shelf copy $x SL 2021-10-05=955 $a ve18 2022-01-25 TW Situational $b cf21 2022-02-14 TW SituationalDLCrdapccMin, Kyŏng-u 86-sedae minjujuŭi 86세대 민주주의minkyŏngu86sedaeminjujuŭi86세대민주주의textMin, Kyŏng-uauthor86-sedae minjujuŭi86세대 민주주의textDLC marc2bibframe2 v1.7.02022-02-15T01:35:36.293074-05:00changedpreliminaryisbd22395548DLC2022-02-14T15:38:482022-01-24=906 $a 0 $b ibc $c orignew $d 3 $e ncip $f 20 $g y-nonroman=925 0 $a acquire $b 1 shelf copy $x SL 2021-10-05=955 $a ve18 2022-01-25 TW Situational $b cf21 2022-02-14 TW SituationalDLCrdapcc 3 | -------------------------------------------------------------------------------- /public/tests/instances/22519577.editor-pkg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | DLC marc2bibframe2 v1.7.0 10 | 2022-04-23T01:32:23.456119-04:00 11 | 12 | 13 | 14 | 15 | changed 16 | 17 | 18 | 19 | 20 | minimal 21 | 22 | 23 | 24 | 25 | isbd 26 | 27 | 28 | 29 | 30 | rda 31 | 32 | 33 | 34 | 35 | 22519577 36 | 37 | 38 | DLC 39 | 40 | 41 | 42 | 43 | 2022-04-22T14:36:29 44 | 2022-04-22 45 | =906 $a 7 $b cbc $c origres $d u $e ncip $f 20 $g y-movingim 46 | =955 $a qm19 2022-04-22 z-client $i qm19 2022-04-22 47 | 48 | 49 | DLC 50 | 51 | 52 | 53 | 54 | 55 | jjud 56 | update instance 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | Pioneer Productions 68 | 69 | 70 | 71 | 72 | Production company 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | Public Broadcasting Service (U.S.) 83 | 84 | 85 | 86 | 87 | Broadcaster 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | DLC marc2bibframe2 v1.7.0 98 | 2022-04-23T01:32:23.456119-04:00 99 | 100 | 101 | 102 | 103 | changed 104 | 105 | 106 | 107 | 108 | minimal 109 | 110 | 111 | 112 | 113 | isbd 114 | 115 | 116 | 117 | 118 | rda 119 | 120 | 121 | 122 | 123 | 22519577 124 | 125 | 126 | DLC 127 | 128 | 129 | 130 | 131 | 2022-04-22T14:36:29 132 | 2022-04-22 133 | =906 $a 7 $b cbc $c origres $d u $e ncip $f 20 $g y-movingim 134 | =955 $a qm19 2022-04-22 z-client $i qm19 2022-04-22 135 | 136 | 137 | DLC 138 | 139 | 140 | 141 | 142 | 143 | jjud 144 | update instance 145 | 146 | 147 | 148 | 149 | -------------------------------------------------------------------------------- /public/tests/instances/5823055_real.editor-pkg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | W.S. McAlpine Map Co McAlpine's Wayne County farm atlas, Michigan : also Ypsilanti township, Washtenaw County, adjoining on the west 5 | wsmcalpinemapcomcalpine'swaynecountyfarmatlasmichigan:alsoypsilantitownshipwashtenawcountyadjoiningonthewest 6 | 7 | 8 | 9 | cartographic image 10 | 11 | 12 | 13 | 14 | atlases 15 | 16 | 17 | 18 | 19 | color 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | linear scale 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | G1413.W3 37 | M35 1942 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | W.S. McAlpine Map Co 48 | 49 | 50 | 51 | 52 | cartographer 53 | 54 | 55 | 56 | 57 | 58 | 59 | McAlpine's Wayne County farm atlas, Michigan : also Ypsilanti township, Washtenaw County, adjoining on the west 60 | 61 | 62 | 63 | 64 | Scales differ 65 | 66 | 67 | 68 | 69 | cartographic image 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | Phillips 80 | 81 | 82 | 83 | 84 | 85 | 14832 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | Wayne County (Mich.)--Maps. 94 | Wayne County (Mich.)--Maps. 95 | 96 | 97 | 98 | Wayne County (Mich.) 99 | 100 | 101 | Maps 102 | 103 | 104 | waynecounty(mich)maps 105 | 106 | 107 | 108 | 109 | 110 | 111 | Real property--Michigan--Wayne County--Maps. 112 | Real property--Michigan--Wayne County--Maps. 113 | 114 | 115 | 116 | Real property 117 | 118 | 119 | Michigan 120 | 121 | 122 | Wayne County 123 | 124 | 125 | Maps 126 | 127 | 128 | realpropertymichiganwaynecountymaps 129 | 130 | 131 | 132 | 133 | 134 | 135 | Landowners--Michigan--Wayne County--Maps. 136 | Landowners--Michigan--Wayne County--Maps. 137 | 138 | 139 | 140 | Landowners 141 | 142 | 143 | Michigan 144 | 145 | 146 | Wayne County 147 | 148 | 149 | Maps 150 | 151 | 152 | landownersmichiganwaynecountymaps 153 | 154 | 155 | 156 | 157 | 158 | 159 | Atlases. 160 | 161 | 162 | lcgft 163 | 164 | 165 | Atlases. 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | DLC marc2bibframe2 v1.7.0 175 | 2021-11-04T01:30:08.706658-04:00 176 | 177 | 178 | 179 | 180 | changed 181 | 182 | 183 | 184 | 185 | full not examined 186 | 187 | 188 | 189 | 190 | isbd 191 | 192 | 193 | 194 | 195 | 5823055 196 | 197 | 198 | DLC 199 | 200 | 201 | 202 | 203 | 2021-11-03T09:29:41 204 | 1982-12-08 205 | =906 $a 7 $b cbc $c premver $d u $e ncip $f 19 $g y-geogmaps 206 | =925 0 $a acquire $b 1 shelf copy $x policy default 207 | =955 $i ga45 2020-12-16 NEW INPUT; $r ga45 2021-10-01 208 | 209 | 210 | DLC 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | rda 219 | 220 | 221 | 222 | 223 | 224 | -------------------------------------------------------------------------------- /public/tests/instances/c0218930920001.editor-pkg.xml: -------------------------------------------------------------------------------- 1 | 2 | Service manual. N14 CM876 N108B.Service manual. N14 CM876 N108B.Service manualN14 CM876 N108BN14 CM876 N108BN14 CM876 N108BXXXX/..Currently publishedunmediatedcomputerBulletinvolumecomputer discvolumesLatest issue consulted: 2019.description sourceService manual. N14 CM876 N108B.Columbus, Indiana : Cummins, Inc. 3 | 4 | 5 | 6 | DLC marc2bibframe2 v1.7.0-SNAPSHOT 7 | 2021-03-19T02:00:38-04:00 8 | 9 | 10 | 11 | 12 | corrected or revised 13 | c 14 | 15 | 16 | 17 | 18 | abbreviated 19 | 20 | 21 | 22 | 23 | isbd 24 | 25 | 26 | 27 | 28 | 21893092 29 | 30 | 31 | DLC 32 | 33 | 34 | 35 | 36 | 2021-03-18T12:03:08 37 | 2021-02-05 38 | 39 | 40 | metadata entry convention 41 | 0 - successive 42 | 43 | 44 | undefined 45 | 2021-05-27T15:01:36.680ZBFE2 v0.6.0Service manual. N14 CM876 N108B.Service manual. N14 CM876 N108B.Service manual.N14 CM876 N108BDiesel motor--Maintenance and repairLibrary of Congress subject headings Trucks--Motors (Diesel)--Maintenance and repairLibrary of Congress subject headings Handbooks, manuals, etc.62123textService manual. N14 CM876 N108B. 46 | 47 | 48 | 49 | DLC marc2bibframe2 v1.7.0-SNAPSHOT 50 | 2021-03-19T02:00:38-04:00 51 | 52 | 53 | 54 | 55 | corrected or revised 56 | c 57 | 58 | 59 | 60 | 61 | abbreviated 62 | 63 | 64 | 65 | 66 | isbd 67 | 68 | 69 | 70 | 71 | 21893092 72 | 73 | 74 | DLC 75 | 76 | 77 | 78 | 79 | 2021-03-18T12:03:08 80 | 2021-02-05 81 | 82 | 83 | metadata entry convention 84 | 0 - successive 85 | 86 | 87 | undefined 88 | 2021-05-27T15:01:36.674ZBFE2 v0.6.0 89 | -------------------------------------------------------------------------------- /public/tests/works/loc.natlib.works.e37922655107918597887531234370352861771.rdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | lessons for education and practice 5 | 6 | 7 | 8 | 9 | 10 | 23 11 | 12 | 13 | 361.3 14 | 15 | 16 | 17 | text 18 | 19 | 20 | 21 | 22 | 23 | Social service--Health aspects 24 | 25 | 26 | 27 | 28 | 29 | 30 | Social work and COVID 19 31 | Social work and COVID 19 32 | 33 | 34 | 35 | Illustrations 36 | 37 | 38 | 39 | HV40 40 | 41 | 42 | 43 | bibliography 44 | 45 | 46 | 47 | 48 | 49 | Editor 50 | 51 | 52 | 53 | 54 | Denise Turner 55 | 56 | 57 | 58 | 2021 59 | 60 | 61 | 62 | Publisher 63 | 64 | 65 | 66 | 67 | Critical Publishing 68 | 69 | 70 | 71 | 72 | 73 | index 74 | 75 | 76 | 77 | 78 | 2021-03-23T21:10:45 79 | lc:RT:bf2:Monograph:Work 80 | 81 | 2021-03-23 82 | 83 | create work 84 | 85 | 86 | 87 | 88 | 89 | St Albans 90 | 91 | 92 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 52 | 53 | 76 | 77 | 78 | 259 | -------------------------------------------------------------------------------- /src/assets/img/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/src/assets/img/close.png -------------------------------------------------------------------------------- /src/assets/img/expand_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/src/assets/img/expand_icon.png -------------------------------------------------------------------------------- /src/assets/img/expand_icon_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/src/assets/img/expand_icon_hover.png -------------------------------------------------------------------------------- /src/assets/img/icons/complex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/src/assets/img/icons/complex.png -------------------------------------------------------------------------------- /src/assets/img/icons/np_conference_2048424_000000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/src/assets/img/icons/np_conference_2048424_000000.png -------------------------------------------------------------------------------- /src/assets/img/icons/np_conference_2048424_000000.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/assets/img/icons/np_corporate-identity_684427_000000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/src/assets/img/icons/np_corporate-identity_684427_000000.png -------------------------------------------------------------------------------- /src/assets/img/icons/np_corporate-identity_684427_000000.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/img/icons/np_family_3043280_000000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/src/assets/img/icons/np_family_3043280_000000.png -------------------------------------------------------------------------------- /src/assets/img/icons/np_family_3043280_000000.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/img/icons/np_geography_1401167_000000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/src/assets/img/icons/np_geography_1401167_000000.png -------------------------------------------------------------------------------- /src/assets/img/icons/np_geography_1401167_000000.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/img/icons/np_person_2467522_000000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/src/assets/img/icons/np_person_2467522_000000.png -------------------------------------------------------------------------------- /src/assets/img/icons/np_person_2467522_000000.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/assets/img/icons/np_tag_249487_000000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/src/assets/img/icons/np_tag_249487_000000.png -------------------------------------------------------------------------------- /src/assets/img/icons/np_tag_249487_000000.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/assets/img/icons/np_title-page_387780_000000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/src/assets/img/icons/np_title-page_387780_000000.png -------------------------------------------------------------------------------- /src/assets/img/icons/np_title-page_387780_000000.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/assets/img/input-icon-keyboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/src/assets/img/input-icon-keyboard.png -------------------------------------------------------------------------------- /src/assets/img/input-icon-search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/src/assets/img/input-icon-search.png -------------------------------------------------------------------------------- /src/assets/img/input-icon-switch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/src/assets/img/input-icon-switch -------------------------------------------------------------------------------- /src/assets/img/input-icon-switch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/src/assets/img/input-icon-switch.png -------------------------------------------------------------------------------- /src/assets/img/logo_source.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/img/plus_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/src/assets/img/plus_icon.png -------------------------------------------------------------------------------- /src/assets/img/plus_icon_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/src/assets/img/plus_icon_hover.png -------------------------------------------------------------------------------- /src/assets/img/triangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/src/assets/img/triangle.png -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lcnetdev/marva-frontend/a2746623de4863adadee8d0152fd4b4fb0df518f/src/assets/logo.png -------------------------------------------------------------------------------- /src/components/CompactEditMainComponent.vue: -------------------------------------------------------------------------------- 1 | 45 | 46 | 235 | 236 | 237 | 259 | -------------------------------------------------------------------------------- /src/components/EditAdminComponent.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 73 | 74 | 75 | 76 | 77 | 100 | -------------------------------------------------------------------------------- /src/components/EditLabelDereference.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /src/components/EditLabelRemark.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 29 | 30 | -------------------------------------------------------------------------------- /src/components/EditMetaComponent.vue: -------------------------------------------------------------------------------- 1 | 69 | 70 | 247 | 248 | 249 | 250 | 251 | 274 | -------------------------------------------------------------------------------- /src/components/EditNavLiteralDisplayOptions.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 17 | 18 | 97 | -------------------------------------------------------------------------------- /src/components/HomeAllRecordsComponent.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 65 | 66 | 67 | 71 | -------------------------------------------------------------------------------- /src/components/HomeHelpComponent.vue: -------------------------------------------------------------------------------- 1 | 69 | 70 | 112 | 113 | 114 | 129 | -------------------------------------------------------------------------------- /src/components/HomeMyRecordsComponent.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 64 | 65 | 66 | 70 | -------------------------------------------------------------------------------- /src/components/HomeSettingsAuthorityLookupComponent.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 112 | 113 | 114 | 172 | -------------------------------------------------------------------------------- /src/components/HomeSettingsComponent.vue: -------------------------------------------------------------------------------- 1 | 43 | 44 | 99 | 100 | 101 | 116 | -------------------------------------------------------------------------------- /src/components/MiscLoaderAnimation.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 93 | 94 | 95 | 122 | -------------------------------------------------------------------------------- /src/components/_blank_component_template.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 21 | 22 | 85 | -------------------------------------------------------------------------------- /src/lib/labels.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | const labels = { 5 | 6 | 7 | // Tool Tips 8 | refComponentSwitchButton: 'Use [Left Arrow] and [Right Arrow] keys or click to switch', 9 | propertyDuplicateSymbol: '+', 10 | propertyRemoveSymbol: '-', 11 | propertyDuplicateTip: 'Click to duplicate this property or press [Crtl and SHIFT +]', 12 | 13 | } 14 | 15 | 16 | export default labels; -------------------------------------------------------------------------------- /src/lib/uiUtils.js: -------------------------------------------------------------------------------- 1 | 2 | import store from "../store"; 3 | 4 | 5 | const uiUtils = { 6 | 7 | globalMoveDown() { 8 | 9 | if (store.state.disableMacroKeyNav){ 10 | return false 11 | } 12 | 13 | var list = document.getElementsByClassName('selectable-input') 14 | 15 | if (store.state.workingOnMiniProfile){ 16 | list = document.getElementsByClassName('selectable-input-mini') 17 | } 18 | 19 | let activeInputIndex = -1 20 | for (let i = 0; i < list.length; i++) { 21 | if (list[i].id == this.activeInput){ 22 | activeInputIndex = i 23 | } 24 | } 25 | if (activeInputIndex != -1){ 26 | // see if there is a next input 27 | if (list[activeInputIndex+1]){ 28 | list[activeInputIndex+1].focus() 29 | } 30 | } 31 | }, 32 | globalMoveUp() { 33 | if (store.state.disableMacroKeyNav){ 34 | return false 35 | } 36 | var list = document.getElementsByClassName('selectable-input') 37 | if (store.state.workingOnMiniProfile){ 38 | list = document.getElementsByClassName('selectable-input-mini') 39 | } 40 | 41 | let activeInputIndex = -1 42 | for (let i = 0; i < list.length; i++) { 43 | if (list[i].id == this.activeInput){ 44 | activeInputIndex = i 45 | } 46 | } 47 | 48 | if (activeInputIndex != -1){ 49 | // see if there is a next input 50 | if (list[activeInputIndex-1]){ 51 | list[activeInputIndex-1].focus() 52 | } 53 | } 54 | 55 | 56 | }, 57 | 58 | 59 | // when they hit pageup/down just do it 5 times 60 | globalMovePageDown(event) { 61 | this.moveDown() 62 | this.moveDown() 63 | this.moveDown() 64 | this.moveDown() 65 | this.moveDown() 66 | event.event.preventDefault() 67 | return false 68 | }, 69 | globalMovePageUp(event) { 70 | this.moveUp() 71 | this.moveUp() 72 | this.moveUp() 73 | this.moveUp() 74 | this.moveUp() 75 | event.event.preventDefault() 76 | return false 77 | }, 78 | 79 | focusCurrentInput() { 80 | 81 | var list = document.getElementsByClassName('selectable-input') 82 | 83 | for (let i = 0; i < list.length; i++) { 84 | 85 | // the relace here is removing complex lookup modal window suffixes 86 | if (list[i].id == this.activeInput || list[i].id == this.activeInput.replace('switch','') || list[i].id == this.activeInput.replace('search','') ){ 87 | 88 | list[i].focus() 89 | } 90 | } 91 | 92 | 93 | 94 | }, 95 | 96 | 97 | focusSidebars(){ 98 | 99 | 100 | window.setTimeout(()=>{ 101 | 102 | 103 | if (document.getElementsByClassName('left-menu-list-item-active').length==0){ 104 | return false 105 | } 106 | 107 | // scroll those elements into view, the left and right 108 | document.getElementsByClassName('left-menu-list-item-active')[0].scrollIntoView({behavior: "smooth", block: "center", inline: "nearest"}) 109 | 110 | // not sure why, sometimes it doesn't tirgger 111 | // the class exists and it finds it in the dom but the above scroll doesn't work, sometimes it does 112 | // so wait a moment longer and set it again to make sure 113 | window.setTimeout(function() { 114 | document.getElementsByClassName('left-menu-list-item-active')[0].scrollIntoView({block: "center"}) 115 | }, 500); 116 | 117 | if (document.getElementsByClassName('opac-field-active').length>0){ 118 | 119 | document.getElementsByClassName('opac-field-active')[0].scrollIntoView({behavior: "smooth", block: "center", inline: "nearest"}) 120 | window.setTimeout(function() { 121 | document.getElementsByClassName('opac-field-active')[0].scrollIntoView({block: "center"}) 122 | }, 500); 123 | 124 | } 125 | 126 | 127 | },100) 128 | 129 | 130 | }, 131 | 132 | returnAuthIcon(rdfType){ 133 | 134 | const iconPersonal = '' 135 | const iconCoporate = '' 136 | const iconTitle = '' 137 | const iconNameTitle = ' + ' 138 | const iconConference = '' 139 | const iconGeographic = '' 140 | const iconGenre = '' 141 | const iconSubjectComplex = '' 142 | const iconSubjectTopic = '' 143 | 144 | 145 | 146 | 147 | if (rdfType && typeof rdfType === 'string'){ 148 | 149 | rdfType = rdfType.replace('http://www.loc.gov/mads/rdf/v1#','') 150 | 151 | if (rdfType == 'PersonalName') return iconPersonal 152 | if (rdfType == 'CorporateName') return iconCoporate 153 | if (rdfType == 'NameTitle') return iconNameTitle 154 | if (rdfType == 'Title') return iconTitle 155 | if (rdfType == 'ConferenceName') return iconConference 156 | if (rdfType == 'Geographic') return iconGeographic 157 | if (rdfType == 'GenreForm') return iconGenre 158 | if (rdfType == 'ComplexSubject') return iconSubjectComplex 159 | if (rdfType == 'Topic') return iconSubjectTopic 160 | 161 | 162 | if (rdfType == 'http://id.loc.gov/ontologies/bibframe/Person') return iconPersonal 163 | if (rdfType == 'http://id.loc.gov/ontologies/bibframe/Place') return iconGeographic 164 | if (rdfType == 'http://id.loc.gov/ontologies/bibframe/Topic') return iconSubjectTopic 165 | if (rdfType == 'http://id.loc.gov/ontologies/bibframe/Organization') return iconCoporate 166 | 167 | 168 | 169 | 170 | // if (result.label == 'xxxxxx') return iconPersonal 171 | // if (result.label == 'xxxxxx') return iconPersonal 172 | 173 | 174 | } 175 | 176 | 177 | return ' ' 178 | 179 | 180 | }, 181 | 182 | 183 | 184 | 185 | 186 | 187 | dupeProperty(){ 188 | 189 | 190 | if (document.getElementsByClassName('left-menu-list-item-active').length>0){ 191 | document.getElementsByClassName('left-menu-list-item-active')[0].getElementsByClassName('left-menu-button-dupe-blank')[0].click() 192 | } 193 | 194 | 195 | // let el = document.getElementById(this.activeInput).parentElement 196 | // while (el.classList.contains('component') === false){ 197 | // el=el.parentElement 198 | // } 199 | 200 | // el.getElementsByClassName('property-duplicate')[0].click() 201 | 202 | }, 203 | 204 | 205 | // keep a counter to make a unique ID for each uri+label combo, this is just to get a persistent ID 206 | assignID(structure){ 207 | let key = `${structure.propertyURI}|${structure.propertyLabel}` 208 | if (!store.state.activeProfileIdCounter[key]){ 209 | store.state.activeProfileIdCounter[key] = 0 210 | } 211 | store.state.activeProfileIdCounter[key]++ 212 | return `${structure.propertyURI}|${structure.propertyLabel}-${store.state.activeProfileIdCounter[key]}` 213 | }, 214 | 215 | 216 | renderBorders(refresh){ 217 | setTimeout(() => { // setTimeout to put this into event queue 218 | var divList = document.querySelectorAll('.component-container-input-container') 219 | for (let i = 0; i < divList.length; i++) { 220 | let inputs = divList[i].getElementsByClassName('component-container-fake-input') 221 | 222 | if (refresh){ 223 | for (let x = 0; x < inputs.length; x++) { 224 | inputs[x].classList.add("no-upper-right-border-radius"); 225 | inputs[x].classList.add("no-upper-border"); 226 | inputs[x].classList.add("no-lower-right-border-radius"); 227 | } 228 | } 229 | if (inputs.length>0){ 230 | inputs[0].classList.remove("no-upper-right-border-radius"); 231 | inputs[0].classList.remove("no-upper-border"); 232 | inputs[inputs.length - 1].classList.remove("no-lower-right-border-radius"); 233 | } 234 | } 235 | }, 0) 236 | }, 237 | 238 | 239 | prettifyXmlJS(xml, tab = '\t', nl = '\n'){ 240 | let formatted = '', indent = ''; 241 | const nodes = xml.slice(1, -1).split(/>\s*' + nl; 243 | for (let i = 0; i < nodes.length; i++) { 244 | const node = nodes[i]; 245 | if (node[0] == '/') indent = indent.slice(tab.length); // decrease indent 246 | formatted += indent + '<' + node + '>' + nl; 247 | if (node[0] != '/' && node[node.length - 1] != '/' && node.indexOf('', 260 | ' ', 261 | ' ', // change to just text() to strip space in text nodes 262 | ' ', 263 | ' ', 264 | ' ', 265 | ' ', 266 | ' ', 267 | ' ', 268 | '', 269 | ].join('\n'), 'application/xml'); 270 | 271 | var xsltProcessor = new XSLTProcessor(); 272 | xsltProcessor.importStylesheet(xsltDoc); 273 | var resultDoc = xsltProcessor.transformToDocument(xmlDoc); 274 | var resultXml = new XMLSerializer().serializeToString(resultDoc); 275 | return resultXml; 276 | 277 | }catch{ 278 | 279 | return "Because you are using Firefox or IE Edge I can't make this XML look nice, but here you go anyway:\n\n\n" + sourceXml 280 | 281 | } 282 | 283 | } 284 | 285 | 286 | } 287 | 288 | 289 | export default uiUtils; -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import App from "./App.vue"; 3 | import router from "./router"; 4 | import store from "./store"; 5 | 6 | 7 | import parseProfile from "./lib/parseProfile" 8 | import lookupUtil from "./lib/lookupUtil" 9 | 10 | import EditMainComponent from "@/components/EditMainComponent.vue"; 11 | 12 | 13 | import './assets/main.css'; 14 | 15 | Vue.config.productionTip = false; 16 | var app = new Vue({ // eslint-disable-line 17 | router, 18 | store, 19 | render: h => h(App) 20 | }).$mount("#app"); 21 | 22 | Vue.component('EditMainComponent', EditMainComponent) 23 | 24 | 25 | 26 | 27 | parseProfile.buildProfiles() 28 | .then(results => lookupUtil.fetchAllOntology(results)) 29 | 30 | 31 | if (localStorage.getItem('bfeDiacritics') === null){ 32 | localStorage.setItem('bfeDiacritics',JSON.stringify([{"letter":"ç","trigger":"c","keycode":99,"desc":"cedilla"},{"letter":"é","trigger":"e","keycode":101,"desc":"acute e"},{"letter":"â","trigger":"1","keycode":49,"desc":"circumflex a"},{"letter":"ê","trigger":"2","keycode":50,"desc":"circumflex e"},{"letter":"î","trigger":"3","keycode":51,"desc":"circumflex i"},{"letter":"ô","trigger":"4","keycode":52,"desc":"circumflex o"},{"letter":"û","trigger":"5","keycode":53,"desc":"circumflex u"},{"letter":"à","trigger":"6","keycode":54,"desc":"grave accent a"},{"letter":"è","trigger":"7","keycode":55,"desc":"grave accent e"},{"letter":"ì","trigger":"8","keycode":56,"desc":"grave accent i"},{"letter":"ò","trigger":"9","keycode":57,"desc":"grave accent o"},{"letter":"ù","trigger":"0","keycode":48,"desc":"grave accent u"},{"letter":"ë","trigger":"z","keycode":122,"desc":"trema e"},{"letter":"ï","trigger":"x","keycode":120,"desc":"trema i"},{"letter":"ü","trigger":"v","keycode":118,"desc":"trema u"}])) 33 | } 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import VueRouter from "vue-router"; 3 | import Home from "../views/Home.vue"; 4 | 5 | import Edit from "../views/Edit.vue"; 6 | import CompactEdit from "../views/CompactEdit.vue"; 7 | 8 | 9 | import TestParseId from "../views/TestParseId.vue"; 10 | import TestParseBfdb from "../views/TestParseBfdb.vue"; 11 | import TestSubject from "../views/TestSubject.vue"; 12 | import TestEditMini from "../views/TestEditMini.vue"; 13 | import TestLiteralEditor from "../views/TestLiteralEditor.vue"; 14 | 15 | 16 | import ScriptShifter from "../views/ScriptShifter.vue"; 17 | 18 | 19 | 20 | 21 | 22 | import Errors from "../views/Errors.vue"; 23 | 24 | 25 | 26 | 27 | 28 | Vue.use(VueRouter); 29 | 30 | const routes = [ 31 | { 32 | path: "/", 33 | name: "Home", 34 | component: Home 35 | }, 36 | 37 | { 38 | path: "/TestParseId", 39 | name: "TestParseId", 40 | component: TestParseId 41 | }, 42 | { 43 | path: "/TestParseBfdb", 44 | name: "TestParseBfdb", 45 | component: TestParseBfdb 46 | }, 47 | { 48 | path: "/TestSubject", 49 | name: "TestSubject", 50 | component: TestSubject 51 | }, 52 | { 53 | path: "/TestEditMini", 54 | name: "TestEditMini", 55 | component: TestEditMini 56 | }, 57 | { 58 | path: "/TestLiteralEditor", 59 | name: "TestLiteralEditor", 60 | component: TestLiteralEditor 61 | }, 62 | { 63 | path: "/ScriptShifter", 64 | name: "ScriptShifter", 65 | component: ScriptShifter 66 | }, 67 | 68 | 69 | 70 | 71 | 72 | 73 | { 74 | path: "/errors", 75 | name: "Errors", 76 | component: Errors 77 | }, 78 | 79 | { 80 | path: "/edit/:recordId", 81 | name: "Edit", 82 | component: Edit 83 | 84 | // route level code-splitting 85 | // this generates a separate chunk (about.[hash].js) for this route 86 | // which is lazy-loaded when the route is visited. 87 | //component: () => 88 | // import(/* webpackChunkName: "about" */ "../views/About.vue") 89 | }, 90 | { 91 | path: "/compactedit/:recordId", 92 | name: "CompactEdit", 93 | component: CompactEdit 94 | 95 | // route level code-splitting 96 | // this generates a separate chunk (about.[hash].js) for this route 97 | // which is lazy-loaded when the route is visited. 98 | //component: () => 99 | // import(/* webpackChunkName: "about" */ "../views/About.vue") 100 | }, 101 | 102 | // { 103 | // path: "/edit", 104 | // name: "Edit", 105 | // component: Edit 106 | 107 | // // route level code-splitting 108 | // // this generates a separate chunk (about.[hash].js) for this route 109 | // // which is lazy-loaded when the route is visited. 110 | // //component: () => 111 | // // import(/* webpackChunkName: "about" */ "../views/About.vue") 112 | // }, 113 | 114 | 115 | { 116 | path: "/settings/:action", 117 | name: "Home", 118 | component: Home 119 | }, 120 | 121 | 122 | 123 | { 124 | path: "/:action", 125 | name: "Home", 126 | component: Home 127 | }, 128 | // { 129 | // path: "/allrecords", 130 | // name: "Home", 131 | // component: Home 132 | // }, 133 | // { 134 | // path: "/new", 135 | // name: "Home", 136 | // component: Home 137 | // }, 138 | // { 139 | // path: "/load", 140 | // name: "Home", 141 | // component: Home 142 | // }, 143 | // { 144 | // path: "/myrecords", 145 | // name: "Home", 146 | // component: Home 147 | // }, 148 | 149 | 150 | ]; 151 | 152 | const router = new VueRouter({ 153 | mode: "history", 154 | base: process.env.BASE_URL, 155 | routes 156 | }); 157 | 158 | 159 | 160 | export default router; 161 | -------------------------------------------------------------------------------- /src/views/Errors.vue: -------------------------------------------------------------------------------- 1 | 32 | 33 | 34 | 104 | 201 | -------------------------------------------------------------------------------- /src/views/ScriptShifter.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 32 | 43 | 44 | 162 | -------------------------------------------------------------------------------- /src/views/TestEditMini.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 14 | 15 | 35 | -------------------------------------------------------------------------------- /src/views/TestLiteralEditor.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 12 | 13 | 33 | -------------------------------------------------------------------------------- /src/views/TestParseBfdb.vue: -------------------------------------------------------------------------------- 1 | 106 | 107 | 108 | 124 | 309 | -------------------------------------------------------------------------------- /src/views/TestParseId.vue: -------------------------------------------------------------------------------- 1 | 77 | 78 | 79 | 95 | 138 | -------------------------------------------------------------------------------- /src/views/TestSubject.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 12 | 13 | 33 | -------------------------------------------------------------------------------- /tmp.env: -------------------------------------------------------------------------------- 1 | VUE_APP_HOWDY=friend 2 | VUE_APP_ldpjs=https://preprod-3001.id.loc.gov/bfe2/api-staging/ 3 | VUE_APP_util=https://preprod-3001.id.loc.gov/bfe2/util/ 4 | VUE_APP_utilLang=https://editor.id.loc.gov/bfe2/util-lang/ 5 | VUE_APP_scriptshifter=https://editor.id.loc.gov/bfe2/scriptshifter/ 6 | VUE_APP_publish=https://preprod-3001.id.loc.gov/bfe2/util/publish/staging 7 | VUE_APP_bfdb=https://preprod-8230.id.loc.gov/ 8 | VUE_APP_profiles=https://preprod-3001.id.loc.gov/api/listconfigs?where=index.resourceType:profile 9 | VUE_APP_starting=https://preprod-3001.id.loc.gov/bfe2/util/profiles/starting/stage 10 | VUE_APP_id=https://preprod-8080.id.loc.gov/ 11 | VUE_APP_env=staging 12 | VUE_APP_displayLCOnlyFeatures=true -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | publicPath: process.env.NODE_ENV === 'local' 3 | ? '/bfe2/editor/' 4 | : '' 5 | } --------------------------------------------------------------------------------