From cedebcd8835579bdcd047e9a5601455036144d43 Mon Sep 17 00:00:00 2001 From: Mike Rylander Date: Fri, 6 May 2011 15:29:38 -0400 Subject: [PATCH] Initial move of fixed-field manipulation out to the MARC Dojo module --- Open-ILS/web/js/dojo/MARC/FixedFields.js | 1575 ++++++++++++++++++++++ Open-ILS/xul/staff_client/server/cat/marcedit.js | 709 +--------- 2 files changed, 1614 insertions(+), 670 deletions(-) create mode 100644 Open-ILS/web/js/dojo/MARC/FixedFields.js diff --git a/Open-ILS/web/js/dojo/MARC/FixedFields.js b/Open-ILS/web/js/dojo/MARC/FixedFields.js new file mode 100644 index 0000000000..9a92c30c4e --- /dev/null +++ b/Open-ILS/web/js/dojo/MARC/FixedFields.js @@ -0,0 +1,1575 @@ +/* --------------------------------------------------------------------------- + * Copyright (C) 2011 Equinox Software, Inc. + * Mike Rylander + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * --------------------------------------------------------------------------- + */ + +if(!dojo._hasResource["MARC.FixedFields"]) { + + dojo.require('MARC.Record'); + + dojo._hasResource["MARC.FixedFields"] = true; + dojo.provide("MARC.FixedFields"); + + MARC.Record._recType = { + BKS : { Type : /[at]{1}/, BLvl : /[acdm]{1}/ }, + SER : { Type : /[a]{1}/, BLvl : /[bsi]{1}/ }, + VIS : { Type : /[gkro]{1}/, BLvl : /[abcdmsi]{1}/ }, + MIX : { Type : /[p]{1}/, BLvl : /[cdi]{1}/ }, + MAP : { Type : /[ef]{1}/, BLvl : /[abcdmsi]{1}/ }, + SCO : { Type : /[cd]{1}/, BLvl : /[abcdmsi]{1}/ }, + REC : { Type : /[ij]{1}/, BLvl : /[abcdmsi]{1}/ }, + COM : { Type : /[m]{1}/, BLvl : /[abcdmsi]{1}/ }, + AUT : { Type : /[z]{1}/, BLvl : /.{1}/ }, + MFHD : { Type : /[uvxy]{1}/, BLvl : /.{1}/ } + }; + + MARC.Record._ff_pos = { + Ctry : { + _8 : { + BKS : {start : 15, len : 3, def : ' ' }, + SER : {start : 15, len : 3, def : ' ' }, + VIS : {start : 15, len : 3, def : ' ' }, + MIX : {start : 15, len : 3, def : ' ' }, + MAP : {start : 15, len : 3, def : ' ' }, + SCO : {start : 15, len : 3, def : ' ' }, + REC : {start : 15, len : 3, def : ' ' }, + COM : {start : 15, len : 3, def : ' ' }, + } + }, + Lang : { + _8 : { + BKS : {start : 35, len : 3, def : ' ' }, + SER : {start : 35, len : 3, def : ' ' }, + VIS : {start : 35, len : 3, def : ' ' }, + MIX : {start : 35, len : 3, def : ' ' }, + MAP : {start : 35, len : 3, def : ' ' }, + SCO : {start : 35, len : 3, def : ' ' }, + REC : {start : 35, len : 3, def : ' ' }, + COM : {start : 35, len : 3, def : ' ' }, + } + }, + MRec : { + _8 : { + BKS : {start : 38, len : 1, def : ' ' }, + SER : {start : 38, len : 1, def : ' ' }, + VIS : {start : 38, len : 1, def : ' ' }, + MIX : {start : 38, len : 1, def : ' ' }, + MAP : {start : 38, len : 1, def : ' ' }, + SCO : {start : 38, len : 1, def : ' ' }, + REC : {start : 38, len : 1, def : ' ' }, + COM : {start : 38, len : 1, def : ' ' }, + } + }, + DtSt : { + _8 : { + BKS : {start : 6, len : 1, def : ' ' }, + SER : {start : 6, len : 1, def : 'c' }, + VIS : {start : 6, len : 1, def : ' ' }, + MIX : {start : 6, len : 1, def : ' ' }, + MAP : {start : 6, len : 1, def : ' ' }, + SCO : {start : 6, len : 1, def : ' ' }, + REC : {start : 6, len : 1, def : ' ' }, + COM : {start : 6, len : 1, def : ' ' }, + } + }, + Type : { + ldr : { + BKS : {start : 6, len : 1, def : 'a' }, + SER : {start : 6, len : 1, def : 'a' }, + VIS : {start : 6, len : 1, def : 'g' }, + MIX : {start : 6, len : 1, def : 'p' }, + MAP : {start : 6, len : 1, def : 'e' }, + SCO : {start : 6, len : 1, def : 'c' }, + REC : {start : 6, len : 1, def : 'i' }, + COM : {start : 6, len : 1, def : 'm' }, + AUT : {start : 6, len : 1, def : 'z' }, + MFHD : {start : 6, len : 1, def : 'y' } + + } + }, + Ctrl : { + ldr : { + BKS : {start : 8, len : 1, def : ' ' }, + SER : {start : 8, len : 1, def : ' ' }, + VIS : {start : 8, len : 1, def : ' ' }, + MIX : {start : 8, len : 1, def : ' ' }, + MAP : {start : 8, len : 1, def : ' ' }, + SCO : {start : 8, len : 1, def : ' ' }, + REC : {start : 8, len : 1, def : ' ' }, + COM : {start : 8, len : 1, def : ' ' }, + } + }, + BLvl : { + ldr : { + BKS : {start : 7, len : 1, def : 'm' }, + SER : {start : 7, len : 1, def : 's' }, + VIS : {start : 7, len : 1, def : 'm' }, + MIX : {start : 7, len : 1, def : 'c' }, + MAP : {start : 7, len : 1, def : 'm' }, + SCO : {start : 7, len : 1, def : 'm' }, + REC : {start : 7, len : 1, def : 'm' }, + COM : {start : 7, len : 1, def : 'm' }, + } + }, + Desc : { + ldr : { + BKS : {start : 18, len : 1, def : ' ' }, + SER : {start : 18, len : 1, def : ' ' }, + VIS : {start : 18, len : 1, def : ' ' }, + MIX : {start : 18, len : 1, def : ' ' }, + MAP : {start : 18, len : 1, def : ' ' }, + SCO : {start : 18, len : 1, def : ' ' }, + REC : {start : 18, len : 1, def : ' ' }, + COM : {start : 18, len : 1, def : ' ' }, + } + }, + Item : { + ldr : { + MFHD : {start : 18, len : 1, def : 'i' } + } + }, + ELvl : { + ldr : { + BKS : {start : 17, len : 1, def : ' ' }, + SER : {start : 17, len : 1, def : ' ' }, + VIS : {start : 17, len : 1, def : ' ' }, + MIX : {start : 17, len : 1, def : ' ' }, + MAP : {start : 17, len : 1, def : ' ' }, + SCO : {start : 17, len : 1, def : ' ' }, + REC : {start : 17, len : 1, def : ' ' }, + COM : {start : 17, len : 1, def : ' ' }, + AUT : {start : 17, len : 1, def : 'n' }, + MFHD : {start : 17, len : 1, def : 'u' } + } + }, + TMat : { + _8 : { + VIS : {start : 33, len : 1, def : ' ' }, + }, + _6 : { + VIS : {start : 16, len : 1, def : ' ' }, + } + }, + Indx : { + _8 : { + BKS : {start : 31, len : 1, def : '0' }, + MAP : {start : 31, len : 1, def : '0' }, + }, + _6 : { + BKS : {start : 14, len : 1, def : '0' }, + MAP : {start : 14, len : 1, def : '0' }, + } + }, + Date1 : { + _8 : { + BKS : {start : 7, len : 4, def : ' ' }, + SER : {start : 7, len : 4, def : ' ' }, + VIS : {start : 7, len : 4, def : ' ' }, + MIX : {start : 7, len : 4, def : ' ' }, + MAP : {start : 7, len : 4, def : ' ' }, + SCO : {start : 7, len : 4, def : ' ' }, + REC : {start : 7, len : 4, def : ' ' }, + COM : {start : 7, len : 4, def : ' ' }, + }, + }, + Date2 : { + _8 : { + BKS : {start : 11, len : 4, def : ' ' }, + SER : {start : 11, len : 4, def : '9' }, + VIS : {start : 11, len : 4, def : ' ' }, + MIX : {start : 11, len : 4, def : ' ' }, + MAP : {start : 11, len : 4, def : ' ' }, + SCO : {start : 11, len : 4, def : ' ' }, + REC : {start : 11, len : 4, def : ' ' }, + COM : {start : 11, len : 4, def : ' ' }, + }, + }, + LitF : { + _8 : { + BKS : {start : 33, len : 1, def : '0' }, + }, + _6 : { + BKS : {start : 16, len : 1, def : '0' }, + } + }, + Biog : { + _8 : { + BKS : {start : 34, len : 1, def : ' ' }, + }, + _6 : { + BKS : {start : 17, len : 1, def : ' ' }, + } + }, + Ills : { + _8 : { + BKS : {start : 18, len : 4, def : ' ' }, + }, + _6 : { + BKS : {start : 1, len : 4, def : ' ' }, + } + }, + Fest : { + _8 : { + BKS : {start : 30, len : 1, def : '0' }, + }, + _6 : { + BKS : {start : 13, len : 1, def : '0' }, + } + }, + Conf : { + _8 : { + BKS : {start : 24, len : 4, def : ' ' }, + SER : {start : 25, len : 3, def : ' ' }, + }, + _6 : { + BKS : {start : 7, len : 4, def : ' ' }, + SER : {start : 8, len : 3, def : ' ' }, + } + }, + GPub : { + _8 : { + BKS : {start : 28, len : 1, def : ' ' }, + SER : {start : 28, len : 1, def : ' ' }, + VIS : {start : 28, len : 1, def : ' ' }, + MAP : {start : 28, len : 1, def : ' ' }, + COM : {start : 28, len : 1, def : ' ' }, + }, + _6 : { + BKS : {start : 11, len : 1, def : ' ' }, + SER : {start : 11, len : 1, def : ' ' }, + VIS : {start : 11, len : 1, def : ' ' }, + MAP : {start : 11, len : 1, def : ' ' }, + COM : {start : 11, len : 1, def : ' ' }, + } + }, + Audn : { + _8 : { + BKS : {start : 22, len : 1, def : ' ' }, + SER : {start : 22, len : 1, def : ' ' }, + VIS : {start : 22, len : 1, def : ' ' }, + SCO : {start : 22, len : 1, def : ' ' }, + REC : {start : 22, len : 1, def : ' ' }, + COM : {start : 22, len : 1, def : ' ' }, + }, + _6 : { + BKS : {start : 5, len : 1, def : ' ' }, + SER : {start : 5, len : 1, def : ' ' }, + VIS : {start : 5, len : 1, def : ' ' }, + SCO : {start : 5, len : 1, def : ' ' }, + REC : {start : 5, len : 1, def : ' ' }, + COM : {start : 5, len : 1, def : ' ' }, + } + }, + Form : { + _8 : { + BKS : {start : 23, len : 1, def : ' ' }, + SER : {start : 23, len : 1, def : ' ' }, + VIS : {start : 29, len : 1, def : ' ' }, + MIX : {start : 23, len : 1, def : ' ' }, + MAP : {start : 29, len : 1, def : ' ' }, + SCO : {start : 23, len : 1, def : ' ' }, + REC : {start : 23, len : 1, def : ' ' }, + }, + _6 : { + BKS : {start : 6, len : 1, def : ' ' }, + SER : {start : 6, len : 1, def : ' ' }, + VIS : {start : 12, len : 1, def : ' ' }, + MIX : {start : 6, len : 1, def : ' ' }, + MAP : {start : 12, len : 1, def : ' ' }, + SCO : {start : 6, len : 1, def : ' ' }, + REC : {start : 6, len : 1, def : ' ' }, + } + }, + 'S/L' : { + _8 : { + SER : {start : 34, len : 1, def : '0' }, + }, + _6 : { + SER : {start : 17, len : 1, def : '0' }, + } + }, + 'Alph' : { + _8 : { + SER : {start : 33, len : 1, def : ' ' }, + }, + _6 : { + SER : {start : 16, len : 1, def : ' ' }, + } + }, + "GeoDiv" : { + "_8" : { + "AUT" : {"start" : 6, "len" : 1, "def" : ' ' } + } + }, + "Roman" : { + "_8" : { + "AUT" : {"start" : 7, "len" : 1, "def" : ' ' } + } + }, + "CatLang" : { + "_8" : { + "AUT" : {"start" : 8, "len" : 1, "def" : ' ' } + } + }, + "Kind" : { + "_8" : { + "AUT" : {"start" : 9, "len" : 1, "def" : ' ' } + } + }, + "Rules" : { + "_8" : { + "AUT" : {"start" : 10, "len" : 1, "def" : ' ' } + } + }, + "SHSys" : { + "_8" : { + "AUT" : {"start" : 11, "len" : 1, "def" : ' ' } + } + }, + "SerType" : { + "_8" : { + "AUT" : {"start" : 12, "len" : 1, "def" : ' ' } + } + }, + "SerNum" : { + "_8" : { + "AUT" : {"start" : 13, "len" : 1, "def" : ' ' } + } + }, + "HeadMain" : { + "_8" : { + "AUT" : {"start" : 14, "len" : 1, "def" : ' ' } + } + }, + "HeadSubj" : { + "_8" : { + "AUT" : {"start" : 15, "len" : 1, "def" : ' ' } + } + }, + "HeadSer" : { + "_8" : { + "AUT" : {"start" : 16, "len" : 1, "def" : ' ' } + } + }, + "TypeSubd" : { + "_8" : { + "AUT" : {"start" : 17, "len" : 1, "def" : ' ' } + } + }, + "TypeGov" : { + "_8" : { + "AUT" : {"start" : 28, "len" : 1, "def" : ' ' } + } + }, + "RefEval" : { + "_8" : { + "AUT" : {"start" : 29, "len" : 1, "def" : ' ' } + } + }, + "RecUpd" : { + "_8" : { + "AUT" : {"start" : 31, "len" : 1, "def" : ' ' } + } + }, + "NameDiff" : { + "_8" : { + "AUT" : {"start" : 32, "len" : 1, "def" : ' ' } + } + }, + "Level" : { + "_8" : { + "AUT" : {"start" : 33, "len" : 1, "def" : ' ' } + } + }, + "ModRec" : { + "_8" : { + "AUT" : {"start" : 38, "len" : 1, "def" : ' ' } + } + }, + "CatSrc" : { + "_8" : { + "AUT" : {"start" : 39, "len" : 1, "def" : ' ' } + } + } + }; + + MARC.Record._physical_characteristics = { + c : { + label : "Electronic Resource", + subfields : { + b : { start : 1, + len : 1, + label : "SMD", + values: { a : "Tape Cartridge", + b : "Chip cartridge", + c : "Computer optical disk cartridge", + f : "Tape cassette", + h : "Tape reel", + j : "Magnetic disk", + m : "Magneto-optical disk", + o : "Optical disk", + r : "Remote", + u : "Unspecified", + z : "Other", + }, + }, + d : { start : 3, + len : 1, + label : "Color", + values: { a : "One color", + b : "Black-and-white", + c : "Multicolored", + g : "Gray scale", + m : "Mixed", + n : "Not applicable", + u : "Unknown", + z : "Other", + }, + }, + e : { start : 4, + len : 1, + label : "Dimensions", + values: { a : "3 1/2 in.", + e : "12 in.", + g : "4 3/4 in. or 12 cm.", + i : "1 1/8 x 2 3/8 in.", + j : "3 7/8 x 2 1/2 in.", + n : "Not applicable", + o : "5 1/4 in.", + u : "Unknown", + v : "8 in.", + z : "Other", + }, + }, + f : { start : 5, + len : 1, + label : "Sound", + values: { ' ' : "No sound (Silent)", + a : "Sound", + u : "Unknown", + }, + }, + g : { start : 6, + len : 3, + label : "Image bit depth", + values: { mmm : "Multiple", + nnn : "Not applicable", + '---' : "Unknown", + }, + }, + h : { start : 9, + len : 1, + label : "File formats", + values: { a : "One file format", + m : "Multiple file formats", + u : "Unknown", + }, + }, + i : { start : 10, + len : 1, + label : "Quality assurance target(s)", + values: { a : "Absent", + n : "Not applicable", + p : "Present", + u : "Unknown", + }, + }, + j : { start : 11, + len : 1, + label : "Antecedent/Source", + values: { a : "File reproduced from original", + b : "File reproduced from microform", + c : "File reproduced from electronic resource", + d : "File reproduced from an intermediate (not microform)", + m : "Mixed", + n : "Not applicable", + u : "Unknown", + }, + }, + k : { start : 12, + len : 1, + label : "Level of compression", + values: { a : "Uncompressed", + b : "Lossless", + d : "Lossy", + m : "Mixed", + u : "Unknown", + }, + }, + l : { start : 13, + len : 1, + label : "Reformatting quality", + values: { a : "Access", + n : "Not applicable", + p : "Preservation", + r : "Replacement", + u : "Unknown", + }, + }, + }, + }, + d : { + label : "Globe", + subfields : { + b : { start : 1, + len : 1, + label : "SMD", + values: { a : "Celestial globe", + b : "Planetary or lunar globe", + c : "Terrestrial globe", + e : "Earth moon globe", + u : "Unspecified", + z : "Other", + }, + }, + d : { start : 3, + len : 1, + label : "Color", + values: { a : "One color", + c : "Multicolored", + }, + }, + e : { start : 4, + len : 1, + label : "Physical medium", + values: { a : "Paper", + b : "Wood", + c : "Stone", + d : "Metal", + e : "Synthetics", + f : "Skins", + g : "Textile", + p : "Plaster", + u : "Unknown", + z : "Other", + }, + }, + f : { start : 5, + len : 1, + label : "Type of reproduction", + values: { f : "Facsimile", + n : "Not applicable", + u : "Unknown", + z : "Other", + }, + }, + }, + }, + a : { + label : "Map", + subfields : { + b : { start : 1, + len : 1, + label : "SMD", + values: { d : "Atlas", + g : "Diagram", + j : "Map", + k : "Profile", + q : "Model", + r : "Remote-sensing image", + s : "Section", + u : "Unspecified", + y : "View", + z : "Other", + }, + }, + d : { start : 3, + len : 1, + label : "Color", + values: { a : "One color", + c : "Multicolored", + }, + }, + e : { start : 4, + len : 1, + label : "Physical medium", + values: { a : "Paper", + b : "Wood", + c : "Stone", + d : "Metal", + e : "Synthetics", + f : "Skins", + g : "Textile", + p : "Plaster", + q : "Flexible base photographic medium, positive", + r : "Flexible base photographic medium, negative", + s : "Non-flexible base photographic medium, positive", + t : "Non-flexible base photographic medium, negative", + u : "Unknown", + y : "Other photographic medium", + z : "Other", + }, + }, + f : { start : 5, + len : 1, + label : "Type of reproduction", + values: { f : "Facsimile", + n : "Not applicable", + u : "Unknown", + z : "Other", + }, + }, + g : { start : 6, + len : 1, + label : "Production/reproduction details", + values: { a : "Photocopy, blueline print", + b : "Photocopy", + c : "Pre-production", + d : "Film", + u : "Unknown", + z : "Other", + }, + }, + h : { start : 7, + len : 1, + label : "Positive/negative", + values: { a : "Positive", + b : "Negative", + m : "Mixed", + n : "Not applicable", + }, + }, + }, + }, + h : { + label : "Microform", + subfields : { + b : { start : 1, + len : 1, + label : "SMD", + values: { a : "Aperture card", + b : "Microfilm cartridge", + c : "Microfilm cassette", + d : "Microfilm reel", + e : "Microfiche", + f : "Microfiche cassette", + g : "Microopaque", + u : "Unspecified", + z : "Other", + }, + }, + d : { start : 3, + len : 1, + label : "Positive/negative", + values: { a : "Positive", + b : "Negative", + m : "Mixed", + u : "Unknown", + }, + }, + e : { start : 4, + len : 1, + label : "Dimensions", + values: { a : "8 mm.", + e : "16 mm.", + f : "35 mm.", + g : "70mm.", + h : "105 mm.", + l : "3 x 5 in. (8 x 13 cm.)", + m : "4 x 6 in. (11 x 15 cm.)", + o : "6 x 9 in. (16 x 23 cm.)", + p : "3 1/4 x 7 3/8 in. (9 x 19 cm.)", + u : "Unknown", + z : "Other", + }, + }, + f : { start : 5, + len : 4, + label : "Reduction ratio range/Reduction ratio", + values: { a : "Low (1-16x)", + b : "Normal (16-30x)", + c : "High (31-60x)", + d : "Very high (61-90x)", + e : "Ultra (90x-)", + u : "Unknown", + v : "Reduction ratio varies", + }, + }, + g : { start : 9, + len : 1, + label : "Color", + values: { b : "Black-and-white", + c : "Multicolored", + m : "Mixed", + u : "Unknown", + z : "Other", + }, + }, + h : { start : 10, + len : 1, + label : "Emulsion on film", + values: { a : "Silver halide", + b : "Diazo", + c : "Vesicular", + m : "Mixed", + n : "Not applicable", + u : "Unknown", + z : "Other", + }, + }, + i : { start : 11, + len : 1, + label : "Quality assurance target(s)", + values: { a : "1st gen. master", + b : "Printing master", + c : "Service copy", + m : "Mixed generation", + u : "Unknown", + }, + }, + j : { start : 12, + len : 1, + label : "Base of film", + values: { a : "Safety base, undetermined", + c : "Safety base, acetate undetermined", + d : "Safety base, diacetate", + l : "Nitrate base", + m : "Mixed base", + n : "Not applicable", + p : "Safety base, polyester", + r : "Safety base, mixed", + t : "Safety base, triacetate", + u : "Unknown", + z : "Other", + }, + }, + }, + }, + m : { + label : "Motion Picture", + subfields : { + b : { start : 1, + len : 1, + label : "SMD", + values: { a : "Film cartridge", + f : "Film cassette", + r : "Film reel", + u : "Unspecified", + z : "Other", + }, + }, + d : { start : 3, + len : 1, + label : "Color", + values: { b : "Black-and-white", + c : "Multicolored", + h : "Hand-colored", + m : "Mixed", + u : "Unknown", + z : "Other", + }, + }, + e : { start : 4, + len : 1, + label : "Motion picture presentation format", + values: { a : "Standard sound aperture, reduced frame", + b : "Nonanamorphic (wide-screen)", + c : "3D", + d : "Anamorphic (wide-screen)", + e : "Other-wide screen format", + f : "Standard. silent aperture, full frame", + u : "Unknown", + z : "Other", + }, + }, + f : { start : 5, + len : 1, + label : "Sound on medium or separate", + values: { a : "Sound on medium", + b : "Sound separate from medium", + u : "Unknown", + }, + }, + g : { start : 6, + len : 1, + label : "Medium for sound", + values: { a : "Optical sound track on motion picture film", + b : "Magnetic sound track on motion picture film", + c : "Magnetic audio tape in cartridge", + d : "Sound disc", + e : "Magnetic audio tape on reel", + f : "Magnetic audio tape in cassette", + g : "Optical and magnetic sound track on film", + h : "Videotape", + i : "Videodisc", + u : "Unknown", + z : "Other", + }, + }, + h : { start : 7, + len : 1, + label : "Dimensions", + values: { a : "Standard 8 mm.", + b : "Super 8 mm./single 8 mm.", + c : "9.5 mm.", + d : "16 mm.", + e : "28 mm.", + f : "35 mm.", + g : "70 mm.", + u : "Unknown", + z : "Other", + }, + }, + i : { start : 8, + len : 1, + label : "Configuration of playback channels", + values: { k : "Mixed", + m : "Monaural", + n : "Not applicable", + q : "Multichannel, surround or quadraphonic", + s : "Stereophonic", + u : "Unknown", + z : "Other", + }, + }, + j : { start : 9, + len : 1, + label : "Production elements", + values: { a : "Work print", + b : "Trims", + c : "Outtakes", + d : "Rushes", + e : "Mixing tracks", + f : "Title bands/inter-title rolls", + g : "Production rolls", + n : "Not applicable", + z : "Other", + }, + }, + }, + }, + k : { + label : "Non-projected Graphic", + subfields : { + b : { start : 1, + len : 1, + label : "SMD", + values: { c : "Collage", + d : "Drawing", + e : "Painting", + f : "Photo-mechanical print", + g : "Photonegative", + h : "Photoprint", + i : "Picture", + j : "Print", + l : "Technical drawing", + n : "Chart", + o : "Flash/activity card", + u : "Unspecified", + z : "Other", + }, + }, + d : { start : 3, + len : 1, + label : "Color", + values: { a : "One color", + b : "Black-and-white", + c : "Multicolored", + h : "Hand-colored", + m : "Mixed", + u : "Unknown", + z : "Other", + }, + }, + e : { start : 4, + len : 1, + label : "Primary support material", + values: { a : "Canvas", + b : "Bristol board", + c : "Cardboard/illustration board", + d : "Glass", + e : "Synthetics", + f : "Skins", + g : "Textile", + h : "Metal", + m : "Mixed collection", + o : "Paper", + p : "Plaster", + q : "Hardboard", + r : "Porcelain", + s : "Stone", + t : "Wood", + u : "Unknown", + z : "Other", + }, + }, + f : { start : 5, + len : 1, + label : "Secondary support material", + values: { a : "Canvas", + b : "Bristol board", + c : "Cardboard/illustration board", + d : "Glass", + e : "Synthetics", + f : "Skins", + g : "Textile", + h : "Metal", + m : "Mixed collection", + o : "Paper", + p : "Plaster", + q : "Hardboard", + r : "Porcelain", + s : "Stone", + t : "Wood", + u : "Unknown", + z : "Other", + }, + }, + }, + }, + g : { + label : "Projected Graphic", + subfields : { + b : { start : 1, + len : 1, + label : "SMD", + values: { c : "Film cartridge", + d : "Filmstrip", + f : "Film filmstrip type", + o : "Filmstrip roll", + s : "Slide", + t : "Transparency", + z : "Other", + }, + }, + d : { start : 3, + len : 1, + label : "Color", + values: { b : "Black-and-white", + c : "Multicolored", + h : "Hand-colored", + m : "Mixed", + n : "Not applicable", + u : "Unknown", + z : "Other", + }, + }, + e : { start : 4, + len : 1, + label : "Base of emulsion", + values: { d : "Glass", + e : "Synthetics", + j : "Safety film", + k : "Film base, other than safety film", + m : "Mixed collection", + o : "Paper", + u : "Unknown", + z : "Other", + }, + }, + f : { start : 5, + len : 1, + label : "Sound on medium or separate", + values: { a : "Sound on medium", + b : "Sound separate from medium", + u : "Unknown", + }, + }, + g : { start : 6, + len : 1, + label : "Medium for sound", + values: { a : "Optical sound track on motion picture film", + b : "Magnetic sound track on motion picture film", + c : "Magnetic audio tape in cartridge", + d : "Sound disc", + e : "Magnetic audio tape on reel", + f : "Magnetic audio tape in cassette", + g : "Optical and magnetic sound track on film", + h : "Videotape", + i : "Videodisc", + u : "Unknown", + z : "Other", + }, + }, + h : { start : 7, + len : 1, + label : "Dimensions", + values: { a : "Standard 8 mm.", + b : "Super 8 mm./single 8 mm.", + c : "9.5 mm.", + d : "16 mm.", + e : "28 mm.", + f : "35 mm.", + g : "70 mm.", + j : "2 x 2 in. (5 x 5 cm.)", + k : "2 1/4 x 2 1/4 in. (6 x 6 cm.)", + s : "4 x 5 in. (10 x 13 cm.)", + t : "5 x 7 in. (13 x 18 cm.)", + v : "8 x 10 in. (21 x 26 cm.)", + w : "9 x 9 in. (23 x 23 cm.)", + x : "10 x 10 in. (26 x 26 cm.)", + y : "7 x 7 in. (18 x 18 cm.)", + u : "Unknown", + z : "Other", + }, + }, + i : { start : 8, + len : 1, + label : "Secondary support material", + values: { c : "Cardboard", + d : "Glass", + e : "Synthetics", + h : "metal", + j : "Metal and glass", + k : "Synthetics and glass", + m : "Mixed collection", + u : "Unknown", + z : "Other", + }, + }, + }, + }, + r : { + label : "Remote-sensing Image", + subfields : { + b : { start : 1, + len : 1, + label : "SMD", + values: { u : "Unspecified" }, + }, + d : { start : 3, + len : 1, + label : "Altitude of sensor", + values: { a : "Surface", + b : "Airborne", + c : "Spaceborne", + n : "Not applicable", + u : "Unknown", + z : "Other", + }, + }, + e : { start : 4, + len : 1, + label : "Attitude of sensor", + values: { a : "Low oblique", + b : "High oblique", + c : "Vertical", + n : "Not applicable", + u : "Unknown", + }, + }, + f : { start : 5, + len : 1, + label : "Cloud cover", + values: { 0 : "0-09%", + 1 : "10-19%", + 2 : "20-29%", + 3 : "30-39%", + 4 : "40-49%", + 5 : "50-59%", + 6 : "60-69%", + 7 : "70-79%", + 8 : "80-89%", + 9 : "90-100%", + n : "Not applicable", + u : "Unknown", + }, + }, + g : { start : 6, + len : 1, + label : "Platform construction type", + values: { a : "Balloon", + b : "Aircraft-low altitude", + c : "Aircraft-medium altitude", + d : "Aircraft-high altitude", + e : "Manned spacecraft", + f : "Unmanned spacecraft", + g : "Land-based remote-sensing device", + h : "Water surface-based remote-sensing device", + i : "Submersible remote-sensing device", + n : "Not applicable", + u : "Unknown", + z : "Other", + }, + }, + h : { start : 7, + len : 1, + label : "Platform use category", + values: { a : "Meteorological", + b : "Surface observing", + c : "Space observing", + m : "Mixed uses", + n : "Not applicable", + u : "Unknown", + z : "Other", + }, + }, + i : { start : 8, + len : 1, + label : "Sensor type", + values: { a : "Active", + b : "Passive", + u : "Unknown", + z : "Other", + }, + }, + j : { start : 9, + len : 2, + label : "Data type", + values: { nn : "Not applicable", + uu : "Unknown", + zz : "Other", + aa : "Visible light", + da : "Near infrared", + db : "Middle infrared", + dc : "Far infrared", + dd : "Thermal infrared", + de : "Shortwave infrared (SWIR)", + df : "Reflective infrared", + dv : "Combinations", + dz : "Other infrared data", + ga : "Sidelooking airborne radar (SLAR)", + gb : "Synthetic aperture radar (SAR-single frequency)", + gc : "SAR-multi-frequency (multichannel)", + gd : "SAR-like polarization", + ge : "SAR-cross polarization", + gf : "Infometric SAR", + gg : "Polarmetric SAR", + gu : "Passive microwave mapping", + gz : "Other microwave data", + ja : "Far ultraviolet", + jb : "Middle ultraviolet", + jc : "Near ultraviolet", + jv : "Ultraviolet combinations", + jz : "Other ultraviolet data", + ma : "Multi-spectral, multidata", + mb : "Multi-temporal", + mm : "Combination of various data types", + pa : "Sonar-water depth", + pb : "Sonar-bottom topography images, sidescan", + pc : "Sonar-bottom topography, near-surface", + pd : "Sonar-bottom topography, near-bottom", + pe : "Seismic surveys", + pz : "Other acoustical data", + ra : "Gravity anomales (general)", + rb : "Free-air", + rc : "Bouger", + rd : "Isostatic", + sa : "Magnetic field", + ta : "Radiometric surveys", + }, + }, + }, + }, + s : { + label : "Sound Recording", + subfields : { + b : { start : 1, + len : 1, + label : "SMD", + values: { d : "Sound disc", + e : "Cylinder", + g : "Sound cartridge", + i : "Sound-track film", + q : "Roll", + s : "Sound cassette", + t : "Sound-tape reel", + u : "Unspecified", + w : "Wire recording", + z : "Other", + }, + }, + d : { start : 3, + len : 1, + label : "Speed", + values: { a : "16 rpm", + b : "33 1/3 rpm", + c : "45 rpm", + d : "78 rpm", + e : "8 rpm", + f : "1.4 mps", + h : "120 rpm", + i : "160 rpm", + k : "15/16 ips", + l : "1 7/8 ips", + m : "3 3/4 ips", + o : "7 1/2 ips", + p : "15 ips", + r : "30 ips", + u : "Unknown", + z : "Other", + }, + }, + e : { start : 4, + len : 1, + label : "Configuration of playback channels", + values: { m : "Monaural", + q : "Quadraphonic", + s : "Stereophonic", + u : "Unknown", + z : "Other", + }, + }, + f : { start : 5, + len : 1, + label : "Groove width or pitch", + values: { m : "Microgroove/fine", + n : "Not applicable", + s : "Coarse/standard", + u : "Unknown", + z : "Other", + }, + }, + g : { start : 6, + len : 1, + label : "Dimensions", + values: { a : "3 in.", + b : "5 in.", + c : "7 in.", + d : "10 in.", + e : "12 in.", + f : "16 in.", + g : "4 3/4 in. (12 cm.)", + j : "3 7/8 x 2 1/2 in.", + o : "5 1/4 x 3 7/8 in.", + s : "2 3/4 x 4 in.", + n : "Not applicable", + u : "Unknown", + z : "Other", + }, + }, + h : { start : 7, + len : 1, + label : "Tape width", + values: { l : "1/8 in.", + m : "1/4in.", + n : "Not applicable", + o : "1/2 in.", + p : "1 in.", + u : "Unknown", + z : "Other", + }, + }, + i : { start : 8, + len : 1, + label : "Tape configuration ", + values: { a : "Full (1) track", + b : "Half (2) track", + c : "Quarter (4) track", + d : "8 track", + e : "12 track", + f : "16 track", + n : "Not applicable", + u : "Unknown", + z : "Other", + }, + }, + m : { start : 12, + len : 1, + label : "Special playback", + values: { a : "NAB standard", + b : "CCIR standard", + c : "Dolby-B encoded, standard Dolby", + d : "dbx encoded", + e : "Digital recording", + f : "Dolby-A encoded", + g : "Dolby-C encoded", + h : "CX encoded", + n : "Not applicable", + u : "Unknown", + z : "Other", + }, + }, + n : { start : 13, + len : 1, + label : "Capture and storage", + values: { a : "Acoustical capture, direct storage", + b : "Direct storage, not acoustical", + d : "Digital storage", + e : "Analog electrical storage", + u : "Unknown", + z : "Other", + }, + }, + }, + }, + f : { + label : "Tactile Material", + subfields : { + b : { start : 1, + len : 1, + label : "SMD", + values: { a : "Moon", + b : "Braille", + c : "Combination", + d : "Tactile, with no writing system", + u : "Unspecified", + z : "Other", + }, + }, + d : { start : 3, + len : 2, + label : "Class of braille writing", + values: { a : "Literary braille", + b : "Format code braille", + c : "Mathematics and scientific braille", + d : "Computer braille", + e : "Music braille", + m : "Multiple braille types", + n : "Not applicable", + u : "Unknown", + z : "Other", + }, + }, + e : { start : 4, + len : 1, + label : "Level of contraction", + values: { a : "Uncontracted", + b : "Contracted", + m : "Combination", + n : "Not applicable", + u : "Unknown", + z : "Other", + }, + }, + f : { start : 6, + len : 3, + label : "Braille music format", + values: { a : "Bar over bar", + b : "Bar by bar", + c : "Line over line", + d : "Paragraph", + e : "Single line", + f : "Section by section", + g : "Line by line", + h : "Open score", + i : "Spanner short form scoring", + j : "Short form scoring", + k : "Outline", + l : "Vertical score", + n : "Not applicable", + u : "Unknown", + z : "Other", + }, + }, + g : { start : 9, + len : 1, + label : "Special physical characteristics", + values: { a : "Print/braille", + b : "Jumbo or enlarged braille", + n : "Not applicable", + u : "Unknown", + z : "Other", + }, + }, + }, + }, + v : { + label : "Videorecording", + subfields : { + b : { start : 1, + len : 1, + label : "SMD", + values: { c : "Videocartridge", + d : "Videodisc", + f : "Videocassette", + r : "Videoreel", + u : "Unspecified", + z : "Other", + }, + }, + d : { start : 3, + len : 1, + label : "Color", + values: { b : "Black-and-white", + c : "Multicolored", + m : "Mixed", + n : "Not applicable", + u : "Unknown", + z : "Other", + }, + }, + e : { start : 4, + len : 1, + label : "Videorecording format", + values: { a : "Beta", + b : "VHS", + c : "U-matic", + d : "EIAJ", + e : "Type C", + f : "Quadruplex", + g : "Laserdisc", + h : "CED", + i : "Betacam", + j : "Betacam SP", + k : "Super-VHS", + m : "M-II", + o : "D-2", + p : "8 mm.", + q : "Hi-8 mm.", + u : "Unknown", + v : "DVD", + z : "Other", + }, + }, + f : { start : 5, + len : 1, + label : "Sound on medium or separate", + values: { a : "Sound on medium", + b : "Sound separate from medium", + u : "Unknown", + }, + }, + g : { start : 6, + len : 1, + label : "Medium for sound", + values: { a : "Optical sound track on motion picture film", + b : "Magnetic sound track on motion picture film", + c : "Magnetic audio tape in cartridge", + d : "Sound disc", + e : "Magnetic audio tape on reel", + f : "Magnetic audio tape in cassette", + g : "Optical and magnetic sound track on motion picture film", + h : "Videotape", + i : "Videodisc", + u : "Unknown", + z : "Other", + }, + }, + h : { start : 7, + len : 1, + label : "Dimensions", + values: { a : "8 mm.", + m : "1/4 in.", + o : "1/2 in.", + p : "1 in.", + q : "2 in.", + r : "3/4 in.", + u : "Unknown", + z : "Other", + }, + }, + i : { start : 8, + len : 1, + label : "Configuration of playback channel", + values: { k : "Mixed", + m : "Monaural", + n : "Not applicable", + q : "Multichannel, surround or quadraphonic", + s : "Stereophonic", + u : "Unknown", + z : "Other", + }, + }, + }, + }, + }; + + MARC.Record.prototype.recordType = function () { + + var _t = this.leader.substr(MARC.Record._ff_pos.Type.ldr.BKS.start, MARC.Record._ff_pos.Type.ldr.BKS.len); + var _b = this.leader.substr(MARC.Record._ff_pos.BLvl.ldr.BKS.start, MARC.Record._ff_pos.BLvl.ldr.BKS.len); + + for (var t in MARC.Record._recType) { + if (_t.match(MARC.Record._recType[t].Type) && _b.match(MARC.Record._recType[t].BLvl)) { + return t; + } + } + return 'BKS'; // default + } + + MARC.Record.prototype.videorecordingFormatName = function () { + var _7 = this.field('007'); + + if (_7.match(/^v/)) { + var _v_e = _7.substr( + MARC.Record._physical_characteristics.v.subfields.e.start, + MARC.Record._physical_characteristics.v.subfields.e.len + ); + + return MARC.Record._physical_characteristics.v.subfields.e.values[ _v_e ]; + } + + return null; + } + + MARC.Record.prototype.videorecordingFormatCode = function () { + var _7 = this.field('007'); + + if (_7.match(/^v/)) { + return _7.substr( + MARC.Record._physical_characteristics.v.subfields.e.start, + MARC.Record._physical_characteristics.v.subfields.e.len + ); + } + + return null; + } + + MARC.Record.prototype.extractFixedField = function (field, dflt) { + + var _l = this.field('007'); + var _8 = this.field('008'); + var _6 = this.field('006'); + + var rtype = this.recordType(); + + var val; + + if (MARC.Record._ff_pos[field].ldr) { + if (MARC.Record._ff_pos[field].ldr[rtype]) { + val = _l.substr( + MARC.Record._ff_pos[field].ldr[rtype].start, + MARC.Record._ff_pos[field].ldr[rtype].len + ); + } + } else if (MARC.Record._ff_pos[field]._8) { + if (MARC.Record._ff_pos[field]._8[rtype]) { + val = _8.substr( + MARC.Record._ff_pos[field]._8[rtype].start, + MARC.Record._ff_pos[field]._8[rtype].len + ); + } + } + + if (!val && MARC.Record._ff_pos[field]._6) { + if (MARC.Record._ff_pos[field]._6[rtype]) { + val = _6.substr( + MARC.Record._ff_pos[field]._6[rtype].start, + MARC.Record._ff_pos[field]._6[rtype].len + ); + } + } + + if (!val && dflt) { + val = ''; + var d; + var p; + if (MARC.Record._ff_pos[name].ldr && MARC.Record._ff_pos[name].ldr[rtype]) { + d = MARC.Record._ff_pos[name].ldr[rtype].def; + p = 'ldr'; + } + + if (MARC.Record._ff_pos[name]._8 && MARC.Record._ff_pos[name]._8[rtype]) { + d = MARC.Record._ff_pos[name]._8[rtype].def; + p = '_8'; + } + + if (!val && MARC.Record._ff_pos[name]._6 && MARC.Record._ff_pos[name]._6[rtype]) { + d = MARC.Record._ff_pos[name]._6[rtype].def; + p = '_6'; + } + + if (p) { + for (var j = 0; j < MARC.Record._ff_pos[name][p][rtype].len; j++) { + val += d; + } + } else { + val = null; + } + } + + return val; + } +} diff --git a/Open-ILS/xul/staff_client/server/cat/marcedit.js b/Open-ILS/xul/staff_client/server/cat/marcedit.js index 9dc0137d79..b8b34603b4 100644 --- a/Open-ILS/xul/staff_client/server/cat/marcedit.js +++ b/Open-ILS/xul/staff_client/server/cat/marcedit.js @@ -112,8 +112,6 @@ function wrap_long_fields (node) { function set_flat_editor (useFlatText) { - dojo.require('MARC.Record'); - var xe = $('xul-editor'); var te = $('text-editor'); @@ -136,7 +134,8 @@ function set_flat_editor (useFlatText) { // reset the xml record and rerender it xml_record = new XML( xml_string ); - loadRecord(xml_record); + if (xml_record..record[0]) xml_record = xml_record..record[0]; + loadRecord(); } else { var xml_string = xml_record.toXMLString(); @@ -199,7 +198,7 @@ function my_init() { 'mangle_005(); ' + 'var xml_string = xml_escape_unicode( xml_record.toXMLString() ); ' + 'save_attempt( xml_string ); ' + - 'loadRecord(xml_record);' + 'loadRecord();' ); if (window.xulG.record.url) { @@ -347,7 +346,7 @@ function my_init() { } req.send(null); - loadRecord(xml_record); + loadRecord(); if (! xulG.fast_add_item) { document.getElementById('fastItemAdd_checkbox').hidden = true; @@ -367,6 +366,8 @@ function my_init() { buildBibSourceList(authtoken, xulG.record.id); } + dojo.require('MARC.FixedFields'); + } catch(E) { alert('FIXME, MARC Editor, my_init: ' + E); } @@ -680,13 +681,13 @@ function createMARCTextbox (element,attrs) { } } else if (event.keyCode == 64 && event.ctrlKey) { // ctrl + F6 createControlField('006',' '); - loadRecord(xml_record); + loadRecord(); } else if (event.keyCode == 65 && event.ctrlKey) { // ctrl + F7 createControlField('007',' '); - loadRecord(xml_record); + loadRecord(); } else if (event.keyCode == 66 && event.ctrlKey) { // ctrl + F8 createControlField('008',' '); - loadRecord(xml_record); + loadRecord(); } return true; @@ -745,7 +746,7 @@ function createMARCTextbox (element,attrs) { 'keyup', function () { if (element.localName() == 'controlfield') - eval('fillFixedFields(xml_record);'); + eval('fillFixedFields();'); }, true ); @@ -753,590 +754,6 @@ function createMARCTextbox (element,attrs) { return box; } -var rec_type = { - BKS : { Type : /[at]{1}/, BLvl : /[acdm]{1}/ }, - SER : { Type : /[a]{1}/, BLvl : /[bs]{1}/ }, - VIS : { Type : /[gkro]{1}/, BLvl : /[abcdms]{1}/ }, - MIX : { Type : /[p]{1}/, BLvl : /[cd]{1}/ }, - MAP : { Type : /[ef]{1}/, BLvl : /[abcdms]{1}/ }, - SCO : { Type : /[cd]{1}/, BLvl : /[abcdms]{1}/ }, - REC : { Type : /[ij]{1}/, BLvl : /[abcdms]{1}/ }, - COM : { Type : /[m]{1}/, BLvl : /[abcdms]{1}/ }, - AUT : { Type : /[z]{1}/, BLvl : /.{1}/ }, - MFHD : { Type : /[uvxy]{1}/, BLvl : /.{1}/ } -}; - -var ff_pos = { - TrAr : { - _8 : { - SCO : {start : 33, len : 1, def : ' ' }, - REC : {start : 33, len : 1, def : 'n' } - }, - _6 : { - SCO : {start : 16, len : 1, def : ' ' }, - REC : {start : 16, len : 1, def : 'n' } - } - }, - TMat : { - _8 : { - VIS : {start : 33, len : 1, def : ' ' } - }, - _6 : { - VIS : {start : 16, len : 1, def : ' ' } - } - }, - Time : { - _8 : { - VIS : {start : 18, len : 3, def : ' ' } - }, - _6 : { - VIS : {start : 1, len : 3, def : ' ' } - } - }, - Tech : { - _8 : { - VIS : {start : 34, len : 1, def : 'n' } - }, - _6 : { - VIS : {start : 17, len : 1, def : 'n' } - } - }, - SrTp : { - _8 : { - SER : {start : 21, len : 1, def : ' ' } - }, - _6 : { - SER : {start : 4, len : 1, def : ' ' } - } - }, - Srce : { - _8 : { - BKS : {start : 39, len : 1, def : 'd' }, - SER : {start : 39, len : 1, def : 'd' }, - VIS : {start : 39, len : 1, def : 'd' }, - MIX : {start : 39, len : 1, def : 'd' }, - MAP : {start : 39, len : 1, def : 'd' }, - SCO : {start : 39, len : 1, def : 'd' }, - REC : {start : 39, len : 1, def : 'd' }, - COM : {start : 39, len : 1, def : 'd' } - } - }, - SpFm : { - _8 : { - MAP : {start : 33, len : 2, def : ' ' } - }, - _6 : { - MAP : {start : 16, len : 2, def : ' ' } - } - }, - Relf : { - _8 : { - MAP : {start : 18, len : 4, def : ' ' } - }, - _6 : { - MAP : {start : 1, len : 4, def : ' ' } - } - }, - Regl : { - _8 : { - SER : {start : 19, len : 1, def : ' ' } - }, - _6 : { - SER : {start : 2, len : 1, def : ' ' } - } - }, - Proj : { - _8 : { - MAP : {start : 22, len : 2, def : ' ' } - }, - _6 : { - MAP : {start : 5, len : 2, def : ' ' } - } - }, - Part : { - _8 : { - SCO : {start : 21, len : 1, def : ' ' }, - REC : {start : 21, len : 1, def : 'n' } - }, - _6 : { - SCO : {start : 4, len : 1, def : ' ' }, - REC : {start : 4, len : 1, def : 'n' } - } - }, - Orig : { - _8 : { - SER : {start : 22, len : 1, def : ' ' } - }, - _6 : { - SER : {start : 5, len : 1, def : ' ' } - } - }, - LTxt : { - _8 : { - SCO : {start : 30, len : 2, def : ' ' }, - REC : {start : 30, len : 2, def : ' ' } - }, - _6 : { - SCO : {start : 13, len : 2, def : ' ' }, - REC : {start : 13, len : 2, def : ' ' } - } - }, - Freq : { - _8 : { - SER : {start : 18, len : 1, def : ' ' } - }, - _6 : { - SER : {start : 1, len : 1, def : ' ' } - } - }, - FMus : { - _8 : { - SCO : {start : 20, len : 1, def : ' ' }, - REC : {start : 20, len : 1, def : 'n' } - }, - _6 : { - SCO : {start : 3, len : 1, def : ' ' }, - REC : {start : 3, len : 1, def : 'n' } - } - }, - File : { - _8 : { - COM : {start : 26, len : 1, def : 'u' } - }, - _6 : { - COM : {start : 9, len : 1, def : 'u' } - } - }, - EntW : { - _8 : { - SER : {start : 24, len : 1, def : ' ' } - }, - _6 : { - SER : {start : 7, len : 1, def : ' ' } - } - }, - AccM : { - _8 : { - SCO : {start : 24, len : 6, def : ' ' }, - REC : {start : 24, len : 6, def : ' ' } - }, - _6 : { - SCO : {start : 7, len : 6, def : ' ' }, - REC : {start : 7, len : 6, def : ' ' } - } - }, - Comp : { - _8 : { - SCO : {start : 18, len : 2, def : ' ' }, - REC : {start : 18, len : 2, def : ' ' } - }, - _6 : { - SCO : {start : 1, len : 2, def : ' ' }, - REC : {start : 1, len : 2, def : ' ' } - } - }, - CrTp : { - _8 : { - MAP : {start : 25, len : 1, def : ' ' } - }, - _6 : { - MAP : {start : 8, len : 1, def : ' ' } - } - }, - Ctry : { - _8 : { - BKS : {start : 15, len : 3, def : ' ' }, - SER : {start : 15, len : 3, def : ' ' }, - VIS : {start : 15, len : 3, def : ' ' }, - MIX : {start : 15, len : 3, def : ' ' }, - MAP : {start : 15, len : 3, def : ' ' }, - SCO : {start : 15, len : 3, def : ' ' }, - REC : {start : 15, len : 3, def : ' ' }, - COM : {start : 15, len : 3, def : ' ' } - } - }, - Lang : { - _8 : { - BKS : {start : 35, len : 3, def : ' ' }, - SER : {start : 35, len : 3, def : ' ' }, - VIS : {start : 35, len : 3, def : ' ' }, - MIX : {start : 35, len : 3, def : ' ' }, - MAP : {start : 35, len : 3, def : ' ' }, - SCO : {start : 35, len : 3, def : ' ' }, - REC : {start : 35, len : 3, def : ' ' }, - COM : {start : 35, len : 3, def : ' ' } - } - }, - MRec : { - _8 : { - BKS : {start : 38, len : 1, def : ' ' }, - SER : {start : 38, len : 1, def : ' ' }, - VIS : {start : 38, len : 1, def : ' ' }, - MIX : {start : 38, len : 1, def : ' ' }, - MAP : {start : 38, len : 1, def : ' ' }, - SCO : {start : 38, len : 1, def : ' ' }, - REC : {start : 38, len : 1, def : ' ' }, - COM : {start : 38, len : 1, def : ' ' } - } - }, - DtSt : { - _8 : { - BKS : {start : 6, len : 1, def : ' ' }, - SER : {start : 6, len : 1, def : 'c' }, - VIS : {start : 6, len : 1, def : ' ' }, - MIX : {start : 6, len : 1, def : ' ' }, - MAP : {start : 6, len : 1, def : ' ' }, - SCO : {start : 6, len : 1, def : ' ' }, - REC : {start : 6, len : 1, def : ' ' }, - COM : {start : 6, len : 1, def : ' ' } - } - }, - Type : { - ldr : { - BKS : {start : 6, len : 1, def : 'a' }, - SER : {start : 6, len : 1, def : 'a' }, - VIS : {start : 6, len : 1, def : 'g' }, - MIX : {start : 6, len : 1, def : 'p' }, - MAP : {start : 6, len : 1, def : 'e' }, - SCO : {start : 6, len : 1, def : 'c' }, - REC : {start : 6, len : 1, def : 'i' }, - COM : {start : 6, len : 1, def : 'm' }, - AUT : {start : 6, len : 1, def : 'z' }, - MFHD : {start : 6, len : 1, def : 'y' } - } - }, - Ctrl : { - ldr : { - BKS : {start : 8, len : 1, def : ' ' }, - SER : {start : 8, len : 1, def : ' ' }, - VIS : {start : 8, len : 1, def : ' ' }, - MIX : {start : 8, len : 1, def : ' ' }, - MAP : {start : 8, len : 1, def : ' ' }, - SCO : {start : 8, len : 1, def : ' ' }, - REC : {start : 8, len : 1, def : ' ' }, - COM : {start : 8, len : 1, def : ' ' } - } - }, - BLvl : { - ldr : { - BKS : {start : 7, len : 1, def : 'm' }, - SER : {start : 7, len : 1, def : 's' }, - VIS : {start : 7, len : 1, def : 'm' }, - MIX : {start : 7, len : 1, def : 'c' }, - MAP : {start : 7, len : 1, def : 'm' }, - SCO : {start : 7, len : 1, def : 'm' }, - REC : {start : 7, len : 1, def : 'm' }, - COM : {start : 7, len : 1, def : 'm' } - } - }, - Desc : { - ldr : { - BKS : {start : 18, len : 1, def : ' ' }, - SER : {start : 18, len : 1, def : ' ' }, - VIS : {start : 18, len : 1, def : ' ' }, - MIX : {start : 18, len : 1, def : ' ' }, - MAP : {start : 18, len : 1, def : ' ' }, - SCO : {start : 18, len : 1, def : ' ' }, - REC : {start : 18, len : 1, def : ' ' }, - COM : {start : 18, len : 1, def : 'i' } - } - }, - Item : { - ldr : { - MFHD : {start : 18, len : 1, def : 'i' } - } - }, - ELvl : { - ldr : { - BKS : {start : 17, len : 1, def : ' ' }, - SER : {start : 17, len : 1, def : ' ' }, - VIS : {start : 17, len : 1, def : ' ' }, - MIX : {start : 17, len : 1, def : ' ' }, - MAP : {start : 17, len : 1, def : ' ' }, - SCO : {start : 17, len : 1, def : ' ' }, - REC : {start : 17, len : 1, def : ' ' }, - COM : {start : 17, len : 1, def : ' ' }, - AUT : {start : 17, len : 1, def : 'n' }, - MFHD : {start : 17, len : 1, def : 'u' } - } - }, - Indx : { - _8 : { - BKS : {start : 31, len : 1, def : '0' }, - MAP : {start : 31, len : 1, def : '0' } - }, - _6 : { - BKS : {start : 14, len : 1, def : '0' }, - MAP : {start : 14, len : 1, def : '0' } - } - }, - Date1 : { - _8 : { - BKS : {start : 7, len : 4, def : ' ' }, - SER : {start : 7, len : 4, def : ' ' }, - VIS : {start : 7, len : 4, def : ' ' }, - MIX : {start : 7, len : 4, def : ' ' }, - MAP : {start : 7, len : 4, def : ' ' }, - SCO : {start : 7, len : 4, def : ' ' }, - REC : {start : 7, len : 4, def : ' ' }, - COM : {start : 7, len : 4, def : ' ' } - } - }, - Date2 : { - _8 : { - BKS : {start : 11, len : 4, def : ' ' }, - SER : {start : 11, len : 4, def : '9' }, - VIS : {start : 11, len : 4, def : ' ' }, - MIX : {start : 11, len : 4, def : ' ' }, - MAP : {start : 11, len : 4, def : ' ' }, - SCO : {start : 11, len : 4, def : ' ' }, - REC : {start : 11, len : 4, def : ' ' }, - COM : {start : 11, len : 4, def : ' ' } - } - }, - LitF : { - _8 : { - BKS : {start : 33, len : 1, def : '0' } - }, - _6 : { - BKS : {start : 16, len : 1, def : '0' } - } - }, - Biog : { - _8 : { - BKS : {start : 34, len : 1, def : ' ' } - }, - _6 : { - BKS : {start : 17, len : 1, def : ' ' } - } - }, - Ills : { - _8 : { - BKS : {start : 18, len : 4, def : ' ' } - }, - _6 : { - BKS : {start : 1, len : 4, def : ' ' } - } - }, - Fest : { - _8 : { - BKS : {start : 30, len : 1, def : '0' } - }, - _6 : { - BKS : {start : 13, len : 1, def : '0' } - } - }, - Conf : { - _8 : { - BKS : {start : 29, len : 1, def : '0' }, - SER : {start : 29, len : 1, def : '0' } - }, - _6 : { - BKS : {start : 12, len : 1, def : '0' }, - SER : {start : 12, len : 1, def : '0' } - } - }, - Cont : { - _8 : { - BKS : {start : 24, len : 4, def : ' ' }, - SER : {start : 25, len : 3, def : ' ' } - }, - _6 : { - BKS : {start : 7, len : 4, def : ' ' }, - SER : {start : 8, len : 3, def : ' ' } - } - }, - GPub : { - _8 : { - BKS : {start : 28, len : 1, def : ' ' }, - SER : {start : 28, len : 1, def : ' ' }, - VIS : {start : 28, len : 1, def : ' ' }, - MAP : {start : 28, len : 1, def : ' ' }, - COM : {start : 28, len : 1, def : ' ' } - }, - _6 : { - BKS : {start : 11, len : 1, def : ' ' }, - SER : {start : 11, len : 1, def : ' ' }, - VIS : {start : 11, len : 1, def : ' ' }, - MAP : {start : 11, len : 1, def : ' ' }, - COM : {start : 11, len : 1, def : ' ' } - } - }, - Audn : { - _8 : { - BKS : {start : 22, len : 1, def : ' ' }, - SER : {start : 22, len : 1, def : ' ' }, - VIS : {start : 22, len : 1, def : ' ' }, - SCO : {start : 22, len : 1, def : ' ' }, - REC : {start : 22, len : 1, def : ' ' }, - COM : {start : 22, len : 1, def : ' ' } - }, - _6 : { - BKS : {start : 5, len : 1, def : ' ' }, - SER : {start : 5, len : 1, def : ' ' }, - VIS : {start : 5, len : 1, def : ' ' }, - SCO : {start : 5, len : 1, def : ' ' }, - REC : {start : 5, len : 1, def : ' ' }, - COM : {start : 5, len : 1, def : ' ' } - } - }, - Form : { - _8 : { - BKS : {start : 23, len : 1, def : ' ' }, - SER : {start : 23, len : 1, def : ' ' }, - VIS : {start : 29, len : 1, def : ' ' }, - MIX : {start : 23, len : 1, def : ' ' }, - MAP : {start : 29, len : 1, def : ' ' }, - SCO : {start : 23, len : 1, def : ' ' }, - REC : {start : 23, len : 1, def : ' ' } - }, - _6 : { - BKS : {start : 6, len : 1, def : ' ' }, - SER : {start : 6, len : 1, def : ' ' }, - VIS : {start : 12, len : 1, def : ' ' }, - MIX : {start : 6, len : 1, def : ' ' }, - MAP : {start : 12, len : 1, def : ' ' }, - SCO : {start : 6, len : 1, def : ' ' }, - REC : {start : 6, len : 1, def : ' ' } - } - }, - 'S/L' : { - _8 : { - SER : {start : 34, len : 1, def : '0' } - }, - _6 : { - SER : {start : 17, len : 1, def : '0' } - } - }, - 'Alph' : { - _8 : { - SER : {start : 33, len : 1, def : ' ' } - }, - _6 : { - SER : {start : 16, len : 1, def : ' ' } - } - }, - "GeoDiv" : { - "_8" : { - "AUT" : {"start" : 6, "len" : 1, "def" : ' ' } - } - }, - "Roman" : { - "_8" : { - "AUT" : {"start" : 7, "len" : 1, "def" : ' ' } - } - }, - "CatLang" : { - "_8" : { - "AUT" : {"start" : 8, "len" : 1, "def" : ' ' } - } - }, - "Kind" : { - "_8" : { - "AUT" : {"start" : 9, "len" : 1, "def" : ' ' } - } - }, - "Rules" : { - "_8" : { - "AUT" : {"start" : 10, "len" : 1, "def" : ' ' } - } - }, - "SHSys" : { - "_8" : { - "AUT" : {"start" : 11, "len" : 1, "def" : ' ' } - } - }, - "SerType" : { - "_8" : { - "AUT" : {"start" : 12, "len" : 1, "def" : ' ' } - } - }, - "SerNum" : { - "_8" : { - "AUT" : {"start" : 13, "len" : 1, "def" : ' ' } - } - }, - "HeadMain" : { - "_8" : { - "AUT" : {"start" : 14, "len" : 1, "def" : ' ' } - } - }, - "HeadSubj" : { - "_8" : { - "AUT" : {"start" : 15, "len" : 1, "def" : ' ' } - } - }, - "HeadSer" : { - "_8" : { - "AUT" : {"start" : 16, "len" : 1, "def" : ' ' } - } - }, - "TypeSubd" : { - "_8" : { - "AUT" : {"start" : 17, "len" : 1, "def" : ' ' } - } - }, - "TypeGov" : { - "_8" : { - "AUT" : {"start" : 28, "len" : 1, "def" : ' ' } - } - }, - "RefEval" : { - "_8" : { - "AUT" : {"start" : 29, "len" : 1, "def" : ' ' } - } - }, - "RecUpd" : { - "_8" : { - "AUT" : {"start" : 31, "len" : 1, "def" : ' ' } - } - }, - "NameDiff" : { - "_8" : { - "AUT" : {"start" : 32, "len" : 1, "def" : ' ' } - } - }, - "Level" : { - "_8" : { - "AUT" : {"start" : 33, "len" : 1, "def" : ' ' } - } - }, - "ModRec" : { - "_8" : { - "AUT" : {"start" : 38, "len" : 1, "def" : ' ' } - } - }, - "CatSrc" : { - "_8" : { - "AUT" : {"start" : 39, "len" : 1, "def" : ' ' } - } - } -}; - -function recordType (rec) { - try { - var _l = rec.leader.toString(); - - var _t = _l.substr(ff_pos.Type.ldr.BKS.start, ff_pos.Type.ldr.BKS.len); - var _b = _l.substr(ff_pos.BLvl.ldr.BKS.start, ff_pos.BLvl.ldr.BKS.len); - - for (var t in rec_type) { - if (_t.match(rec_type[t].Type) && _b.match(rec_type[t].BLvl)) { - document.getElementById('recordTypeLabel').value = t; - _record_type = t; - return t; - } - } - - // in case we don't have a valid record type ... - _record_type = 'BKS'; - return _record_type; - - } catch(E) { - alert('FIXME, MARC Editor, recordType: ' + E); - } -} - function toggleFFE () { var grid = document.getElementById('leaderGrid'); if (grid.hidden) { @@ -1362,16 +779,10 @@ function changeFFEditor (type) { } -function fillFixedFields (rec) { +function fillFixedFields () { try { var grid = document.getElementById('leaderGrid'); - - var rtype = _record_type; - - var _l = rec.leader.toString(); - var _6 = rec.controlfield.(@tag=='006').toString(); - var _7 = rec.controlfield.(@tag=='007').toString(); - var _8 = rec.controlfield.(@tag=='008').toString(); + var marc_rec = new MARC.Record ({ delimiter : '$', marcxml : xml_record.toXMLString() }); var list = []; var pre_list = grid.getElementsByTagName('label'); @@ -1383,52 +794,9 @@ function fillFixedFields (rec) { for (var i in list) { var name = list[i].getAttribute('name'); + var value = marc_rec.extractFixedField(name, true); - if (!ff_pos[name]) - continue; - - var value = ''; - if ( ff_pos[name].ldr && ff_pos[name].ldr[rtype] ) - value = _l.substr(ff_pos[name].ldr[rtype].start, ff_pos[name].ldr[rtype].len); - - if ( ff_pos[name]._8 && ff_pos[name]._8[rtype] ) - value = _8.substr(ff_pos[name]._8[rtype].start, ff_pos[name]._8[rtype].len); - - if ( !value && ff_pos[name]._6 && ff_pos[name]._6[rtype] ) - value = _6.substr(ff_pos[name]._6[rtype].start, ff_pos[name]._6[rtype].len); - - if ( ff_pos[name]._7 && ff_pos[name]._7[rtype] ) - value = _7.substr(ff_pos[name]._7[rtype].start, ff_pos[name]._7[rtype].len); - - if (!value) { - var d; - var p; - if (ff_pos[name].ldr && ff_pos[name].ldr[rtype]) { - d = ff_pos[name].ldr[rtype].def; - p = 'ldr'; - } - - if (ff_pos[name]._8 && ff_pos[name]._8[rtype]) { - d = ff_pos[name]._8[rtype].def; - p = '_8'; - } - - if (!value && ff_pos[name]._6 && ff_pos[name]._6[rtype]) { - d = ff_pos[name]._6[rtype].def; - p = '_6'; - } - - if (ff_pos[name]._7 && ff_pos[name]._7[rtype]) { - d = ff_pos[name]._7[rtype].def; - p = '_7'; - } - - if (p && !value) { - for (var j = 0; j < ff_pos[name][p][rtype].len; j++) { - value += d; - } - } - } + if (value === null) continue; list[i].nextSibling.value = value; } @@ -1442,21 +810,22 @@ function fillFixedFields (rec) { function updateFixedFields (element) { var grid = document.getElementById('leaderGrid'); var recGrid = document.getElementById('recGrid'); - - var rtype = _record_type; var new_value = element.value; + var marc_rec = new MARC.Record ({ delimiter : '$', marcxml : xml_record.toXMLString() }); + var rtype = marc_rec.recordType(); + var parts = { - ldr : _record.leader, - _6 : _record.controlfield.(@tag=='006'), - _7 : _record.controlfield.(@tag=='007'), - _8 : _record.controlfield.(@tag=='008') + ldr : marc_rec.leader(), + _6 : marc_rec.field('006'); + _7 : marc_rec.field('007'); + _8 : marc_rec.field('008'); }; var name = element.getAttribute('name'); - for (var i in ff_pos[name]) { + for (var i in MARC.Record._ff_pos[name]) { - if (!ff_pos[name][i][rtype]) continue; + if (!MARC.Record._ff_pos[name][i][rtype]) continue; if (!parts[i]) { // we're missing the required field. Add it now. @@ -1467,18 +836,17 @@ function updateFixedFields (element) { else continue; createControlField(newfield,' '); - parts[i] = _record.controlfield.(@tag==newfield); + parts[i] = xml_record.controlfield.(@tag==newfield).toString(); } - var before = parts[i].substr(0, ff_pos[name][i][rtype].start); - var after = parts[i].substr(ff_pos[name][i][rtype].start + ff_pos[name][i][rtype].len); + var before = parts[i].substr(0, MARC.Record._ff_pos[name][i][rtype].start); + var after = parts[i].substr(MARC.Record._ff_pos[name][i][rtype].start + MARC.Record._ff_pos[name][i][rtype].len); - for (var j = 0; new_value.length < ff_pos[name][i][rtype].len; j++) { - new_value += ff_pos[name][i][rtype].def; + for (var j = 0; new_value.length < MARC.Record._ff_pos[name][i][rtype].len; j++) { + new_value += MARC.Record._ff_pos[name][i][rtype].def; } - parts[i].setChildren( before + new_value + after ); - recGrid.getElementsByAttribute('tag',i)[0].lastChild.value = parts[i].toString(); + recGrid.getElementsByAttribute('tag',i)[0].lastChild.value = before + new_value + after; } return true; @@ -1720,26 +1088,27 @@ function marcSubfield (sf) { ); } -function loadRecord(rec) { +function loadRecord() { try { - _record = rec; var grid_rows = document.getElementById('recGrid').lastChild; while (grid_rows.firstChild) grid_rows.removeChild(grid_rows.firstChild); - grid_rows.appendChild( marcLeader( rec.leader ) ); + grid_rows.appendChild( marcLeader( xml_record.leader ) ); - for (var i in rec.controlfield) { - grid_rows.appendChild( marcControlfield( rec.controlfield[i] ) ); + for (var i in xml_record.controlfield) { + grid_rows.appendChild( marcControlfield( xml_record.controlfield[i] ) ); } - for (var i in rec.datafield) { - grid_rows.appendChild( marcDatafield( rec.datafield[i] ) ); + for (var i in xml_record.datafield) { + grid_rows.appendChild( marcDatafield( xml_record.datafield[i] ) ); } grid_rows.getElementsByAttribute('class','marcDatafieldRow')[0].firstChild.focus(); - changeFFEditor(recordType(rec)); - fillFixedFields(rec); + + var marc_rec = new MARC.Record ({ delimiter : '$', marcxml : xml_record.toXMLString() }); + changeFFEditor(marc_rec.recordType()); + fillFixedFields(); } catch(E) { alert('FIXME, MARC Editor, loadRecord: ' + E); } -- 2.11.0