From 3457b554dc84bdca171ad8458f428ca9587bcf24 Mon Sep 17 00:00:00 2001 From: Mike Rylander Date: Fri, 6 May 2011 16:53:17 -0400 Subject: [PATCH] Add some logic for fetching stored controlsets and switching amongst them --- Open-ILS/web/js/dojo/MARC/AuthorityControlSet.js | 629 +++++++++++++---------- 1 file changed, 368 insertions(+), 261 deletions(-) diff --git a/Open-ILS/web/js/dojo/MARC/AuthorityControlSet.js b/Open-ILS/web/js/dojo/MARC/AuthorityControlSet.js index 2b3bfa4a7b..9422d0eb2a 100644 --- a/Open-ILS/web/js/dojo/MARC/AuthorityControlSet.js +++ b/Open-ILS/web/js/dojo/MARC/AuthorityControlSet.js @@ -24,288 +24,395 @@ if(!dojo._hasResource["MARC.AuthorityControlSet"]) { dojo.provide("MARC.AuthorityControlSet"); dojo.declare('MARC.AuthorityControlSet', null, { - // static sorta-LoC setup ... to be overwritten with server data - _loc_authority_tag_map = { - 100 : [[100,500,700],100], - 700 : [[100,500,700],100], - 800 : [[100,500,700],100], - 110 : [[110,510,710],110], - 610 : [[110,510,710],110], - 710 : [[110,510,710],110], - 810 : [[110,510,710],110], - 111 : [[111,511,711],111], - 611 : [[111,511,711],111], - 711 : [[111,511,711],111], - 811 : [[111,511,711],111], - 240 : [[130,530,730],130], - 130 : [[130,530,730],130], - 730 : [[130,530,730],130], - 830 : [[130,530,730],130], - 600 : [[100,500,580,581,582,585,700,780,781,782,785],100], - 630 : [[130,530,730],130], - 648 : [[148,548],148], - 650 : [[150,550,580,581,582,585,750,780,781,782,785],150], - 651 : [[151,551,580,581,582,585,751,780,781,782,785],151], - 655 : [[155,555,580,581,582,585,755,780,781,782,785],155] + _controlset : -1, + + constructor : function(kwargs) { + + if (!MARC.AuthorityControlSet._remote_loaded) { + + // TODO -- push the raw tree into the oils cache for later reuse + + var pcrud = new openils.PermaCrud(); + var acs_list = pcrud.retrieveAll('acs'); + + // loop over each acs + dojo.forEach( acs_list, function (cs) { + MARC.AuthorityControlSet._controlsets[cs.id()] = { + id : cs.id(), + name : cs.name(), + description : cs.description(), + authority_tag_map : {}, + control_map : {}, + bib_fields : [], + raw : cs + }; + + // grab the authority fields + var acsaf_list = pcrud.search('acsaf', {control_set : cs.id()}); + MARC.AuthorityControlSet._controlsets[cs.name()].raw.authority_fields( acsaf_list ); + + // and loop over each + dojo.forEach( acsaf_list, function (csaf) { + // link the main entry if we're subordinate + if (csaf.main_entry()) { + csaf.main_entry( + dojo.filter(acsaf_list, function (x) { + return x.id() == csaf.main_entry(); + })[0] + ); + } + + // link the sub entries if we're main + csaf.sub_entries( + dojo.filter(acsaf_list, function (x) { + return x.main_entry() == csaf.id(); + })[0] + ); + + // now, bib fields + var acsbf_list = pcrud.search('acsbf', {authority_field : csaf.id()}); + csaf.bib_fields( acsbf_list ); + + MARC.AuthorityControlSet._controlsets[cs.name()].bib_fields = [].concat( + MARC.AuthorityControlSet._controlsets[cs.name()].bib_fields + acsbf_list + ); + + dojo.forEach( acsbf_list, function (csbf) { + // link the main entry if we're subordinate + if (csbf.authority_field()) { + csbf.authority_field( + dojo.filter(acsaf_list, function (x) { + return x.a() == csbf.authority_field(); + })[0] + ); + } + + }); + }); + + // build the authority_tag_map + dojo.forEach( MARC.AuthorityControlSet._controlsets[cs.name()].bib_fields, function (bf) { + MARC.AuthorityControlSet._controlsets[cs.name()].authority_tag_map[bf.tag()] = [/*XXX*/]; + MARC.AuthorityControlSet._controlsets[cs.name()].control_map[bf.tag()] = {/*XXX*/}; + }); + }); + + } + + if (kwargs.controlSet) { + this._controlset = kwargs.controlSet; + } }, - _loc_control_map = { - 100 : { - 'a' : { 100 : 'a' }, - 'd' : { 100 : 'd' }, - 'e' : { 100 : 'e' }, - 'q' : { 100 : 'q' } - }, - 110 : { - 'a' : { 110 : 'a' }, - 'd' : { 110 : 'd' } - }, - 111 : { - 'a' : { 111 : 'a' }, - 'd' : { 111 : 'd' } - }, - 130 : { - 'a' : { 130 : 'a' }, - 'd' : { 130 : 'd' } - }, - 240 : { - 'a' : { 130 : 'a' }, - 'd' : { 130 : 'd' } - }, - 400 : { - 'a' : { 100 : 'a' }, - 'd' : { 100 : 'd' } - }, - 410 : { - 'a' : { 110 : 'a' }, - 'd' : { 110 : 'd' } - }, - 411 : { - 'a' : { 111 : 'a' }, - 'd' : { 111 : 'd' } - }, - 440 : { - 'a' : { 130 : 'a' }, - 'n' : { 130 : 'n' }, - 'p' : { 130 : 'p' } - }, - 700 : { - 'a' : { 100 : 'a' }, - 'd' : { 100 : 'd' }, - 'q' : { 100 : 'q' }, - 't' : { 100 : 't' } - }, - 710 : { - 'a' : { 110 : 'a' }, - 'd' : { 110 : 'd' } - }, - 711 : { - 'a' : { 111 : 'a' }, - 'c' : { 111 : 'c' }, - 'd' : { 111 : 'd' } - }, - 730 : { - 'a' : { 130 : 'a' }, - 'd' : { 130 : 'd' } - }, - 800 : { - 'a' : { 100 : 'a' }, - 'd' : { 100 : 'd' } - }, - 810 : { - 'a' : { 110 : 'a' }, - 'd' : { 110 : 'd' } - }, - 811 : { - 'a' : { 111 : 'a' }, - 'd' : { 111 : 'd' } - }, - 830 : { - 'a' : { 130 : 'a' }, - 'd' : { 130 : 'd' } + controlSetId: function (x) { + if (x) this._controlset = x; + return this._controlset; + }, + + controlSet: function (x) { + return MARC.AuthorityControlSet._controlsets[this.controlSetId(x)]; + }, + + controlSetList : function () { + var l = []; + for (var i in MARC.AuthorityControlSet._controlsets) { + l.push(i); + } + return l; + } + + }); + + MARC.AuthorityControlSet._remote_loaded = false; + + MARC.AuthorityControlSet._controlsets = { + // static sorta-LoC setup ... to be overwritten with server data + -1 : { + id : -1, + name : 'Static LoC legacy mapping', + description : 'Legacy mapping provided as a default', + authority_tag_map : { + 100 : [[100,500,700],100], + 700 : [[100,500,700],100], + 800 : [[100,500,700],100], + 110 : [[110,510,710],110], + 610 : [[110,510,710],110], + 710 : [[110,510,710],110], + 810 : [[110,510,710],110], + 111 : [[111,511,711],111], + 611 : [[111,511,711],111], + 711 : [[111,511,711],111], + 811 : [[111,511,711],111], + 240 : [[130,530,730],130], + 130 : [[130,530,730],130], + 730 : [[130,530,730],130], + 830 : [[130,530,730],130], + 600 : [[100,500,580,581,582,585,700,780,781,782,785],100], + 630 : [[130,530,730],130], + 648 : [[148,548],148], + 650 : [[150,550,580,581,582,585,750,780,781,782,785],150], + 651 : [[151,551,580,581,582,585,751,780,781,782,785],151], + 655 : [[155,555,580,581,582,585,755,780,781,782,785],155] }, - 600 : { - 'a' : { 100 : 'a' }, - 'd' : { 100 : 'd' }, - 'q' : { 100 : 'q' }, - 't' : { 100 : 't' }, - 'v' : { 180 : 'v', - 100 : 'v', - 181 : 'v', - 182 : 'v', - 185 : 'v' + contorl_map : { + 100 : { + 'a' : { 100 : 'a' }, + 'd' : { 100 : 'd' }, + 'e' : { 100 : 'e' }, + 'q' : { 100 : 'q' } }, - 'x' : { 180 : 'x', - 100 : 'x', - 181 : 'x', - 182 : 'x', - 185 : 'x' + 110 : { + 'a' : { 110 : 'a' }, + 'd' : { 110 : 'd' } }, - 'y' : { 180 : 'y', - 100 : 'y', - 181 : 'y', - 182 : 'y', - 185 : 'y' + 111 : { + 'a' : { 111 : 'a' }, + 'd' : { 111 : 'd' } }, - 'z' : { 180 : 'z', - 100 : 'z', - 181 : 'z', - 182 : 'z', - 185 : 'z' - } - }, - 610 : { - 'a' : { 110 : 'a' }, - 'd' : { 110 : 'd' }, - 't' : { 110 : 't' }, - 'v' : { 180 : 'v', - 110 : 'v', - 181 : 'v', - 182 : 'v', - 185 : 'v' + 130 : { + 'a' : { 130 : 'a' }, + 'd' : { 130 : 'd' } }, - 'x' : { 180 : 'x', - 110 : 'x', - 181 : 'x', - 182 : 'x', - 185 : 'x' + 240 : { + 'a' : { 130 : 'a' }, + 'd' : { 130 : 'd' } }, - 'y' : { 180 : 'y', - 110 : 'y', - 181 : 'y', - 182 : 'y', - 185 : 'y' + 400 : { + 'a' : { 100 : 'a' }, + 'd' : { 100 : 'd' } }, - 'z' : { 180 : 'z', - 110 : 'z', - 181 : 'z', - 182 : 'z', - 185 : 'z' - } - }, - 611 : { - 'a' : { 111 : 'a' }, - 'd' : { 111 : 'd' }, - 't' : { 111 : 't' }, - 'v' : { 180 : 'v', - 111 : 'v', - 181 : 'v', - 182 : 'v', - 185 : 'v' + 410 : { + 'a' : { 110 : 'a' }, + 'd' : { 110 : 'd' } }, - 'x' : { 180 : 'x', - 111 : 'x', - 181 : 'x', - 182 : 'x', - 185 : 'x' + 411 : { + 'a' : { 111 : 'a' }, + 'd' : { 111 : 'd' } }, - 'y' : { 180 : 'y', - 111 : 'y', - 181 : 'y', - 182 : 'y', - 185 : 'y' + 440 : { + 'a' : { 130 : 'a' }, + 'n' : { 130 : 'n' }, + 'p' : { 130 : 'p' } }, - 'z' : { 180 : 'z', - 111 : 'z', - 181 : 'z', - 182 : 'z', - 185 : 'z' - } - }, - 630 : { - 'a' : { 130 : 'a' }, - 'd' : { 130 : 'd' } - }, - 648 : { - 'a' : { 148 : 'a' }, - 'v' : { 148 : 'v' }, - 'x' : { 148 : 'x' }, - 'y' : { 148 : 'y' }, - 'z' : { 148 : 'z' } - }, - 650 : { - 'a' : { 150 : 'a' }, - 'b' : { 150 : 'b' }, - 'v' : { 180 : 'v', - 150 : 'v', - 181 : 'v', - 182 : 'v', - 185 : 'v' + 700 : { + 'a' : { 100 : 'a' }, + 'd' : { 100 : 'd' }, + 'q' : { 100 : 'q' }, + 't' : { 100 : 't' } }, - 'x' : { 180 : 'x', - 150 : 'x', - 181 : 'x', - 182 : 'x', - 185 : 'x' + 710 : { + 'a' : { 110 : 'a' }, + 'd' : { 110 : 'd' } }, - 'y' : { 180 : 'y', - 150 : 'y', - 181 : 'y', - 182 : 'y', - 185 : 'y' + 711 : { + 'a' : { 111 : 'a' }, + 'c' : { 111 : 'c' }, + 'd' : { 111 : 'd' } }, - 'z' : { 180 : 'z', - 150 : 'z', - 181 : 'z', - 182 : 'z', - 185 : 'z' - } - }, - 651 : { - 'a' : { 151 : 'a' }, - 'v' : { 180 : 'v', - 151 : 'v', - 181 : 'v', - 182 : 'v', - 185 : 'v' + 730 : { + 'a' : { 130 : 'a' }, + 'd' : { 130 : 'd' } }, - 'x' : { 180 : 'x', - 151 : 'x', - 181 : 'x', - 182 : 'x', - 185 : 'x' + 800 : { + 'a' : { 100 : 'a' }, + 'd' : { 100 : 'd' } }, - 'y' : { 180 : 'y', - 151 : 'y', - 181 : 'y', - 182 : 'y', - 185 : 'y' + 810 : { + 'a' : { 110 : 'a' }, + 'd' : { 110 : 'd' } }, - 'z' : { 180 : 'z', - 151 : 'z', - 181 : 'z', - 182 : 'z', - 185 : 'z' - } - }, - 655 : { - 'a' : { 155 : 'a' }, - 'v' : { 180 : 'v', - 155 : 'v', - 181 : 'v', - 182 : 'v', - 185 : 'v' + 811 : { + 'a' : { 111 : 'a' }, + 'd' : { 111 : 'd' } + }, + 830 : { + 'a' : { 130 : 'a' }, + 'd' : { 130 : 'd' } }, - 'x' : { 180 : 'x', - 155 : 'x', - 181 : 'x', - 182 : 'x', - 185 : 'x' + 600 : { + 'a' : { 100 : 'a' }, + 'd' : { 100 : 'd' }, + 'q' : { 100 : 'q' }, + 't' : { 100 : 't' }, + 'v' : { 180 : 'v', + 100 : 'v', + 181 : 'v', + 182 : 'v', + 185 : 'v' + }, + 'x' : { 180 : 'x', + 100 : 'x', + 181 : 'x', + 182 : 'x', + 185 : 'x' + }, + 'y' : { 180 : 'y', + 100 : 'y', + 181 : 'y', + 182 : 'y', + 185 : 'y' + }, + 'z' : { 180 : 'z', + 100 : 'z', + 181 : 'z', + 182 : 'z', + 185 : 'z' + } }, - 'y' : { 180 : 'y', - 155 : 'y', - 181 : 'y', - 182 : 'y', - 185 : 'y' + 610 : { + 'a' : { 110 : 'a' }, + 'd' : { 110 : 'd' }, + 't' : { 110 : 't' }, + 'v' : { 180 : 'v', + 110 : 'v', + 181 : 'v', + 182 : 'v', + 185 : 'v' + }, + 'x' : { 180 : 'x', + 110 : 'x', + 181 : 'x', + 182 : 'x', + 185 : 'x' + }, + 'y' : { 180 : 'y', + 110 : 'y', + 181 : 'y', + 182 : 'y', + 185 : 'y' + }, + 'z' : { 180 : 'z', + 110 : 'z', + 181 : 'z', + 182 : 'z', + 185 : 'z' + } }, - 'z' : { 180 : 'z', - 155 : 'z', - 181 : 'z', - 182 : 'z', - 185 : 'z' + 611 : { + 'a' : { 111 : 'a' }, + 'd' : { 111 : 'd' }, + 't' : { 111 : 't' }, + 'v' : { 180 : 'v', + 111 : 'v', + 181 : 'v', + 182 : 'v', + 185 : 'v' + }, + 'x' : { 180 : 'x', + 111 : 'x', + 181 : 'x', + 182 : 'x', + 185 : 'x' + }, + 'y' : { 180 : 'y', + 111 : 'y', + 181 : 'y', + 182 : 'y', + 185 : 'y' + }, + 'z' : { 180 : 'z', + 111 : 'z', + 181 : 'z', + 182 : 'z', + 185 : 'z' + } + }, + 630 : { + 'a' : { 130 : 'a' }, + 'd' : { 130 : 'd' } + }, + 648 : { + 'a' : { 148 : 'a' }, + 'v' : { 148 : 'v' }, + 'x' : { 148 : 'x' }, + 'y' : { 148 : 'y' }, + 'z' : { 148 : 'z' } + }, + 650 : { + 'a' : { 150 : 'a' }, + 'b' : { 150 : 'b' }, + 'v' : { 180 : 'v', + 150 : 'v', + 181 : 'v', + 182 : 'v', + 185 : 'v' + }, + 'x' : { 180 : 'x', + 150 : 'x', + 181 : 'x', + 182 : 'x', + 185 : 'x' + }, + 'y' : { 180 : 'y', + 150 : 'y', + 181 : 'y', + 182 : 'y', + 185 : 'y' + }, + 'z' : { 180 : 'z', + 150 : 'z', + 181 : 'z', + 182 : 'z', + 185 : 'z' + } + }, + 651 : { + 'a' : { 151 : 'a' }, + 'v' : { 180 : 'v', + 151 : 'v', + 181 : 'v', + 182 : 'v', + 185 : 'v' + }, + 'x' : { 180 : 'x', + 151 : 'x', + 181 : 'x', + 182 : 'x', + 185 : 'x' + }, + 'y' : { 180 : 'y', + 151 : 'y', + 181 : 'y', + 182 : 'y', + 185 : 'y' + }, + 'z' : { 180 : 'z', + 151 : 'z', + 181 : 'z', + 182 : 'z', + 185 : 'z' + } + }, + 655 : { + 'a' : { 155 : 'a' }, + 'v' : { 180 : 'v', + 155 : 'v', + 181 : 'v', + 182 : 'v', + 185 : 'v' + }, + 'x' : { 180 : 'x', + 155 : 'x', + 181 : 'x', + 182 : 'x', + 185 : 'x' + }, + 'y' : { 180 : 'y', + 155 : 'y', + 181 : 'y', + 182 : 'y', + 185 : 'y' + }, + 'z' : { 180 : 'z', + 155 : 'z', + 181 : 'z', + 182 : 'z', + 185 : 'z' + } } } - }; - - }); + } + }; + } -- 2.11.0