Documentation for this module may be created at Mòideal:FishRef/MSW/doc

local data = {}

data.MSW3 = {
    citeTemplate = "Cite book",
	citationArgs = {
		['editor1-last'] = "Wilson", ['editor1-first'] = "D.E.", ['editor1-link'] = ":en:w:Don E. Wilson",
		['editor2-last'] = "Reeder", ['editor2-first'] = "D.M.",
        year = 2005,
		title = "Mammal Species of the World: A Taxonomic and Geographic Reference", 
		
		edition = "3rd",
        publisher =  "Johns Hopkins University Press",
        isbn= "978-0-8018-8221-0",
        oclc= "62265494"
	},
	customArgs = { exclude="order,family, taxon,id,1",
	               baseURL = "http://www.departments.bucknell.edu/biology/resources/msw3/browse.asp",
	               defaultTitle = "Mammal Species of the World: A Taxonomic and Geographic Reference",
	               bookTitle = "redundant title",
	               googleBooksURL = "http://www.google.com/books?id=JgAMbNSt8ikC&pg=PA",
	               searchStr = "?id=",
	},
    chapters = {
    	Monotremata = {
    		id = 1030000,
    		last = "Groves", first = "C.P.", ['author-link'] = ":en:w:Colin Groves",
    		pages = "1–2", page = 1,
    	},
        Didelphimorphia = {
        	id = 10400001,
            last = "Gardner", first = "A.L.",
            pages = "3-18", page = 3,
        },
    	Paucituberculata = {
    		id = 10500001,
            last = "Gardner", first = "A.L.",
            pages = "19-20", page = 19,
    	},
    	Microbiotheria = {
    		id = 10600001,},
            last = "Gardner", first = "A.L.",
            pages = "21", page = 21,
	    Notoryctemorphia = {
	    	id = 10700001,
    		last = "Groves", first = "C.P.", ['author-link'] = ":en:w:Colin Groves",
    		pages = "22", page = 22,
	    },
	    Dasyuromorphia = {
	    	id = 10800001,
    		last = "Groves", first = "C.P.", ['author-link'] = ":en:w:Colin Groves",
    		pages = "23-37", page = 23,
	    },
	    Peramelemorphia = {
	    	id = 10900001,
    		last = "Groves", first = "C.P.", ['author-link'] = ":en:w:Colin Groves",
    		pages = "38-42", page = 38,
	    },
	    Diprotodontia = {
	    	id = 11000001,
    		last = "Groves", first = "C.P.", ['author-link'] = ":en:w:Colin Groves",
    		pages = "43-70", page = 43,
	    },
	    Afrosoricida = {
	    	id = 11100001,
	    	last = "Bronner", first = "G.N.",
	    	last2 = "Jenkins", first2 = "P.D.",
	    	pages = "71–81", page = 71,
	    },
	    Macroscelidea = {
	    	id = 11200001,
	    	last = "Schlitter", first = "D.A.",
	    	pages = "82–85", page = 82,
	    },
	    Tubulidentata = {
	    	id = 11300001,
	    	last = "Schlitter", first = "D.A.",
	    	pages = "86", page = 86,
	    },
	    Hyracoidea = {
	    	id = 11400001,
	    	last = "Shoshani", first = "J.", ['author-link'] = ":en:w:Jeheskel Shoshani",
	    	pages = "87-89", page = 87,
	    },
	    Proboscidea = {
	    	id = 11500001,
	    	last = "Shoshani", first = "J.", ['author-link'] = ":en:w:Jeheskel Shoshani",
	    	pages = "90-91", page = 90,
	    },
	    Sirenia = {
	    	id = 11600001,
	    	last = "Shoshani", first = "J.", ['author-link'] = ":en:w:Jeheskel Shoshani",
	    	pages = "92-93", page = 92,
	    },
	    Cingulata = {
	    	id = 11700001,
            last = "Gardner", first = "A.L.",
            pages = "94-99", page = 94,
	    	
	    },
    	Pilosa = {
    		id = 11800001,
            last = "Gardner", first = "A.L.",
            pages = "100-103", page = 100,
    	},
	    Scandentia = {
	    	id = 11900001,
	    	last = "Helgen", first = "K.M.",
	    	pages = "104-109", page = 104,
	    },
	    Dermoptera = {
	    	id = 12000001,
	    	last = "Stafford", first = "B.J.",
	    	pages = "104", pages = 104,
	    },
	    Primates = {
	    	id = 12100001,
    		last = "Groves", first = "C.P.", ['author-link'] = ":en:w:Colin Groves",
    		pages = "111-184", page = 111,
	    },
	    Rodentia = {
	    	id = 12200001,                        -- these increment by family   TODO
	    	--last = "Helgen", first = "K.M.",   -- various authors
	    	pages = "753-1600",
	    },    
	    Lagomorpha = {
	    	id = 13500001,
	    	last = "Hoffman", first = "R.S.",
	    	last2 = "Smith", first2 = "A.T.",
	    	pages = "185–211", page = 185,
	    },
	    Erinaceomorpha = {
	    	id = 13600001,
	        last = "Hutterer", first = "R.",
	        pages = "212–219", page = 212,
	    },
	    Soricomorpha = {
	    	id = 13700001,
	        last = "Hutterer", first = "R.",
	        pages = "220–311", page = 220,
	    },
	    Chiroptera = {
	    	id = 13800001,
	    	last = "Simmons", first = "N.B.",
	    	pages = "312–529",
	    },
	    Pholidota = {
	    	id = 13900001,
	    	last = "Schlitter", first = "D.A.",
	    	pages = "530-531", page = 530,
	    },
	    Carnivora = {
	    	id = 14000001,
	    	last = "Wozencraft", first = "W.C.",
	    	pages = "532–628", page = 532,
	    },
	    Perissodactyla = {
	        id = 14100001,
	        last = "Grubb", first = "P.", ['author-link'] = ":en:w:Peter Grubb (zoologist)", 
	        pages="629–636", page=629,
	    },
	    Artiodactyla = {
	        id = 14200001,
	        last = "Grubb", first = "P.", ['author-link'] = ":en:w:Peter Grubb (zoologist)", 
	        pages = "645–646", page =645,
	    },
	    Cetacea = {
	    	id = 14300001,
	    	last = "Mead", first = "J.G.",
	    	last2 = "Brownell", first2 = "R. L. Jr.",
	    	pages = "723–743", page=723,
	    },

    },   -- end orders
    rodents = {
    	Ctenodactylidae = {
    		id=13300001,
			last = "Dieterlen", first = "F.",
			pages = "1536–1537", page= 1536,
		},
        Hystricognathi = {
	        id=13400001,
	        last = "Woods", first = "C.A.",
	        last2 = "Kilpatrick", first2 = "C.W.", 
	        pages = "1538–1600", page = 1538,
        }
    }
}
data.MSW3.id = function(id)
	local chapterParams = {}
	--local page = data.MSW3.chapters[order]['page']  -- page for google books

	chapterParams['chapter'] = "Taxon ID: " .. id 
	chapterParams['chapter-url'] = data.MSW3.customArgs['baseURL']  .. data.MSW3.customArgs['searchStr']  ..  id 
	
	local url  = data.MSW3.customArgs['googleBooksURL'] --.. page 
	local title = data.MSW3.customArgs['defaultTitle'] -- the book title
	chapterParams['title'] = title
	
	return title, url, chapterParams
end
data.MSW3.order = function(order)
	local chapterParams = data.MSW3.chapters[order]
	local id = data.MSW3.chapters[order]['id']         -- chapter parameters
    local page = data.MSW3.chapters[order]['page']
--	local pages = data.MSW3.chapters[order]['pages']
	
	chapterParams['chapter']  = "Order " .. order
	local title  = data.MSW3.CustomArgs['defaultTitle']
	chapterParams['title'] = title
    
	local url  = data.MSW3.customArgs['googleBooksURL'] .. tostring(page)
	chapterParams['chapter-url']  = data.MSW3.customArgs['baseURL']  .. data.MSW3.customArgs['searchStr']  ..  id
	chapterParams['url'] = url 
	
	chapterParams.page=nil
	return title, url, chapterParams
end

data.MSW3_standalone = function(frame) 
	
	local data = require('Module:FishRef/MSW')
	initialise(frame, data.MSW3)
    local url = target.customArgs['baseURL'] 
    
    
    if templateArgs['title'] and templateArgs['id'] then
    	templateArgs['chapter-url']= url .. target.customArgs['searchStr']  ..  templateArgs['id'] 
    	templateArgs['chapter'] = templateArgs['title']
      
    	templateArgs['title'] = target.customArgs['bookTitle']
    	if templateArgs['page'] then
    		templateArgs['url'] = target.customArgs['googleBooksURL'] .. templateArgs['page'] 
		else
   	        --return "Page number for google books required"
    	end
    elseif templateArgs['order'] then
    	templateArgs['chapter'] =  "Order " .. templateArgs['order']
    	local chapter = target.chapters[templateArgs['order']]
    	for k,v in pairs(chapter) do   -- add chapter specific parameters
    		templateArgs[k] = v 
    	end
    	templateArgs['chapter-url']= url .. target.customArgs['searchStr']  ..  templateArgs['id']
    	templateArgs['url']= target.customArgs['googleBooksURL']  ..  templateArgs['page']
    	if templateArgs['pages'] and templateArgs['page'] then templateArgs['page'] = nil end
    else -- default output
    	templateArgs['url']= target.customArgs['googleBooksURL']  .. "1" -- default to book
    	templateArgs['url']= url 
    end
    -- using Cite book
	clearCustomArgs()--blank template parameters not for Cite web
	return frame:expandTemplate{ title = 'Cite book', args = templateArgs  }
end

data.MSW3.main = function(frame, targs)

    local customArgs = data.MSW3.customArgs
    
    local chapter = targs['title'] or targs['chapter']  -- custom title from template parameters

    targs['title'] = customArgs ['defaultTitle'] -- the Cite book title/work is always the default title
  
    if chapter and targs['id'] then
    	targs['chapter-url']= customArgs['baseURL'] .. customArgs['searchStr']  ..  targs['id'] 
    	targs['chapter'] = chapter
    	if targs['page'] then 
    		targs['url'] = customArgs['googleBooksURL'] .. targs['page'] 
		else
   	        --return "Page number for google books required"
    	end
    	local order = targs['order']    -- get chapter author parameters
    	if order then
	    	local chapterArgs = data.MSW3.chapters[order]
	    	for k,v in pairs(chapterArgs) do   -- add chapter specific parameters
	    		if (k == 'page' or k == 'pages') and targs['page'] then
	    		    targs['pages'] = nil
	    		else
	    			targs[k] = v 
	    		end
	    	end
    	end
    elseif targs['order'] then
     	local chapterArgs = data.MSW3.chapters[targs['order']]
    	for k,v in pairs(chapterArgs) do   -- add chapter specific parameters
    		targs[k] = v 
    	end
     	targs['chapter'] =  "Order " .. targs['order']
    	targs['chapter-url']= customArgs['baseURL'] .. customArgs['searchStr']  ..  targs['id']
        targs['url'] = customArgs['googleBooksURL']  ..  targs['page']
    	if targs['pages'] and targs['page'] then targs['page'] = nil end
    else -- default output
    	targs['url'] = customArgs['baseURL'] .. data.MSW3.customArgs['searchStr']             -- default to web version
    	targs['url'] = customArgs['googleBooksURL']  .. "1"             -- default to book
    end    
 
    
    --clear stuff
    targs[1]=nil
    targs['order']=nil
    targs['id']=nil
    --return targs['title']
    --  use template:Cite book
	return frame:expandTemplate{ title = data.MSW3.citeTemplate, args = targs  }
end

return data