|
|
Line 1: |
Line 1: |
− | local p = {}
| |
| | | |
− | local utils = require('Module:Utils')
| |
− | local HtmlBuilder = require('Module:HtmlBuilder')
| |
− |
| |
− | function p.viewer(frame)
| |
− | local args = utils.get_args(frame)
| |
− | local startframe = utils.processArg(args['startframe'])
| |
− | local image = utils.processArg(args['image'])
| |
− | local image_0 = utils.processArg(args['image-0'])
| |
− | local fallback = utils.processArg(args['fallback'])
| |
− | local startframe_class
| |
− | if startframe ~= '' then
| |
− | startframe_class = mw.text.trim(startframe)
| |
− | else
| |
− | startframe_class = utils.expandWikitext('{{File:' .. (image_0 or image) .. ' 3D.jpg|startframe}}') -- Note: This initial image must not be team-colored.
| |
− | end
| |
− | local output_view = HtmlBuilder.create('div')
| |
− | .addClass('viewer-3d')
| |
− | .addClass('startframe-' .. startframe_class)
| |
− | .wikitext(fallback)
| |
− |
| |
− | for i = 0,10 do
| |
− | local image_n = utils.processArg(args['image-' .. i], '')
| |
− | if image_n ~= '' then
| |
− | span_image_url_n = output_view
| |
− | .tag('span')
| |
− | .addClass('viewer-3d-url-' .. i)
| |
− | .wikitext(utils.expandWikitext('{{File:' .. image_n .. '|url}}'))
| |
− |
| |
− | span_image_map_n = output_view
| |
− | .tag('span')
| |
− | .addClass('viewer-3d-map-' .. i)
| |
− | .wikitext(utils.expandWikitext('{{File:' .. image_n .. '|map}}'))
| |
− | end
| |
− | end
| |
− |
| |
− | local viewer_3d_frame = output_view
| |
− | .tag('div')
| |
− | .addClass('viewer-3d-frame')
| |
− |
| |
− | local switch_to_2d = output_view
| |
− | .tag('div')
| |
− | .attr('id', 'switch-to-2d')
| |
− |
| |
− | return tostring(output_view)
| |
− | end
| |
− |
| |
− | function p.viewer_new(frame)
| |
− | local args = utils.get_args(frame)
| |
− |
| |
− | -- button classes mapping
| |
− | local button_classes = {
| |
− | red = 'view-selector-red',
| |
− | blu = 'view-selector-blu',
| |
− | default_half = 'view-selector-default-',
| |
− | default_full = 'view-selector-default-full',
| |
− | default = 'view-selector-default-full'
| |
− | }
| |
− |
| |
− | -- create output container
| |
− | local output_view = HtmlBuilder.create('div')
| |
− | .addClass('viewer-3d-container')
| |
− |
| |
− | -- create container for viewer
| |
− | local startframe = args['3d-startframe'] or utils.expandWikitext('{{File:' .. utils.processArg(args['3d-image-0']) .. ' 3D.jpg|startframe}}')
| |
− | local viewer_container = output_view
| |
− | .tag('div')
| |
− | .addClass('viewer-3d')
| |
− | .addClass('startframe-' .. startframe)
| |
− |
| |
− | -- add 3D and 2D selectors
| |
− | local viewer_3d_frame = viewer_container
| |
− | .tag('div')
| |
− | .addClass('viewer-3d-frame')
| |
− |
| |
− | local switch_to_2d = viewer_container
| |
− | .tag('div')
| |
− | .attr('id', 'switch-to-2d')
| |
− |
| |
− | -- create container for model selector buttons
| |
− | local buttons_container = output_view
| |
− | .tag('ul')
| |
− | .addClass('buttons-container-3d')
| |
− |
| |
− | -- create container for 2D image
| |
− | local image_2d
| |
− | if args['image'] then
| |
− | image_2d = args['image']
| |
− | elseif args['team-colors'] == 'yes' then
| |
− | image_2d = 'RED ' .. mw.title.getCurrentTitle().baseText .. '.png'
| |
− | else
| |
− | image_2d = mw.title.getCurrentTitle().baseText .. '.png'
| |
− | end
| |
− | local viewer_2d_frame = output_view
| |
− | .tag('div')
| |
− | .wikitext(utils.expandWikitext('{{2D viewer|' .. image_2d .. '|' .. (args['imagewidth'] or '250px') .. '}}'))
| |
− |
| |
− | -- row button counter for half width buttons
| |
− | local current_row_count = 0
| |
− | local colored = 0
| |
− | local i = 0
| |
− | while utils.processArg(args['3d-image-' .. i]) ~= '' or colored == 1 do -- The "or colored == 1" ensures that if the last image pair is team-colored, it will still be processed.
| |
− | local image_postfix = ' 3D.jpg'
| |
− | local viewname_postfix = ''
| |
− | if colored == 1 then -- If we are the second half of a team-colored image, use the details from the first half.
| |
− | i = i - 1
| |
− | end
| |
− | local image_n = utils.processArg(args['3d-image-' .. i])
| |
− | local button_n = utils.processArg(args['3d-button-' .. i])
| |
− | local button_class = button_classes[button_n]
| |
− | local viewname_n = utils.processArg(args['3d-viewname-' .. i])
| |
− | if colored == 1 then
| |
− | i = i + 1
| |
− | colored = 0
| |
− | image_postfix = ' BLU 3D.jpg'
| |
− | viewname_postfix = ' BLU'
| |
− | button_class = 'view-selector-blu'
| |
− | elseif colored == 0 and button_n == 'colored' then
| |
− | colored = 1
| |
− | image_postfix = ' RED 3D.jpg'
| |
− | viewname_postfix = ' RED'
| |
− | button_class = 'view-selector-red'
| |
− | end
| |
− | if image_n ~= '' then
| |
− | span_image_url_n = viewer_container
| |
− | .tag('span')
| |
− | .addClass('viewer-3d-url-' .. i)
| |
− | .wikitext(utils.expandWikitext('{{File:' .. image_n .. image_postfix .. '|url}}'))
| |
− |
| |
− | span_image_map_n = viewer_container
| |
− | .tag('span')
| |
− | .addClass('viewer-3d-map-' .. i)
| |
− | .wikitext(utils.expandWikitext('{{File:' .. image_n .. image_postfix .. '|map}}'))
| |
− |
| |
− | -- add selector button for this model
| |
− | if button_n == 'default_half' then
| |
− | if current_row_count == 0 then
| |
− | button_class = button_class .. 'left'
| |
− | current_row_count = 1
| |
− | else
| |
− | button_class = button_class .. 'right'
| |
− | current_row_count = 0
| |
− | end
| |
− | end
| |
− | button_class = button_class .. ' selector-' .. i
| |
− |
| |
− | li_button_n = buttons_container
| |
− | .tag('li')
| |
− | .addClass(button_class)
| |
− | .wikitext(utils.expandWikitext('[[:File:' .. image_n .. image_postfix .. '|' .. viewname_n .. viewname_postfix .. ']]'))
| |
− | end
| |
− |
| |
− | i = i + 1
| |
− | end
| |
− |
| |
− | return tostring(output_view)
| |
− | end
| |
− |
| |
− | return p
| |