-- 这是聚光灯控制脚本，用lua 5.2.x语言编写。聚光灯介绍形式是枫传网络独创的软件介绍方式。通过将软件界面雾化为背景，并用聚光灯突显要介绍的部分，配合文字说明，对软件进行介绍。您可以按照提示修改此脚本。
-- 下面为文件信息，除CodePage外，其它项目请不要修改。
Application = "GTalkabout"
Version = "1.1"
ScriptType = "tutorial"
CodePage = 936	-- 简体中文，如果您将此脚本翻译为其他语种，请修改为该语种对应的代码页，否则，请不要修改。

-- 下面为介绍文字，是markdown格式文本。您可以将其翻译为其它语种或修改，请不要修改圆括号内的文字。
ProgBBS_text = [[
在极客网站讨论开源代码
===
讨论是通过在极客网站上收发普通消息，批注源代码的消息，以及带源代码补丁的消息实现的。  
这里说的**极客网站**专指可用极客讨论器做客户端，收发消息的网站，可以是博客，论坛，社区等等多种类型。  
我们用这个极客网站——[程序员记](http://www.progbbs.com)来举例，这是一个给程序员或业余编程爱好者提供的笔记类网站，它是用phpBB搭建的论坛型网站，和普通论坛的区别在于，它上面的帖子大多数是用极客讨论器创建的批注消息，既可以用浏览器阅读也可以用极客讨论器阅读，使用后者的话，这些消息可以成为源代码的注释、打开其它项目、在版本库中指出位置、或者指出修改、在函数地图中生成路标等等多种帮助您快速理解源代码的途径，以及提供查看源代码的例子、运行结果、找bug、修复bug等等功能。  

*仅开源项目才参与讨论，私有项目和商业项目因为代码不提供公共访问，不在这里提及的开放式讨论之列。*  
*为了提供良好的用户体验，程序员记上讨论的项目原则上都来自GitHub。*

请点击程序员记的Logo切换讨论平台……

[关闭向导](cancel_auto_load)
]]

GeekSite_text = [[
在极客网站讨论开源代码
===
现在选择了[程序员记](http://www.progbbs.com)作为讨论平台，这个网站为每个注册用户免费提供了一个版面，您可以以帖子的形式在您自己的版面保存您对开源代码的批注，也可以阅读别人的批注帖子，在他的版面里发帖或者回复。每个人都有自己版面的删帖权限。

在**新建配置**区域，有三种配置类型可供选择。因为在[程序员记](http://www.progbbs.com)里讨论的都是开源项目，因此请选择**第三方开源项目**……

*如果您是某开源项目的作者或者有提交权限，同样选择“第三方开源项目”，并取消版本库的“只读”设置即可。但是对于GitHub里的开源项目，并不建议您用极客讨论器作为提交代码的工具，毕竟它不是一个功能完备的git版本控制工具，建议您使用git的命令行工具，极客讨论器不会和其它任何版本控制工具相冲突。*

[关闭向导](cancel_auto_load)
]]

AboutConfig_text = [[
配置界面
===
服务器URL选择了[程序员记](http://www.progbbs.com)。这样在进入讨论界面后，会有讨论面板收发帖子。而您仅需配置您要引入讨论的源代码即可，其它配置可以保持缺省。请在左边的配置类别中选择**源代码**。
]]

Subversion_text = [[
源代码配置
===
[程序员记](http://www.progbbs.com)目前仅接收GitHub上的代码讨论，<font color=#f00>请确保代码在GitHub上</font>。请选择**git**标签页。
]]

Git_text = [[
源代码配置
===
请开启**使用git版本库**。
]]

GitURL_text = [[
源代码配置
===
请在项目主页找到https克隆地址 ![HTTPS clone URL](github_repository.png)，并输入到**版本库URL**中。

[下一步](check_git)
]]

GitURL_Error_text = [[
源代码配置
===
您输入的不是正确的GitHub版本库地址。

[下一步](check_git)
]]

Apply_text = [[
进入讨论界面
===
配置完成，点击**确定**开始讨论，建议您先**另存为**一个配置文件，以便下次使用。
]]

GTalkabout_LogGray_text = [[
下载代码
===
正在将版本库的代码检出到本地。以便您对源代码进行编译，调试，修改等。  
如果您不需要将源代码下载到本地而直接在线讨论，可以在**本地**配置页中取消**使用工作区**的选项。
]]

GTalkabout_Ungray_text = [[
讨论面板介绍
===
右边就是[程序员记](http://www.progbbs.com)的讨论面板，它是一个帖子浏览器。

要让发出的消息能批注代码，请先按下发帖区的![钉子按钮](phpbb_link_toolbutton.bmp)，这样可以将帖子和选中源代码位置关联，生成批注贴。  
*为了方便您编辑消息，按下![钉子按钮](phpbb_link_toolbutton.bmp)后，源代码窗口上的按键消息会自动转发到消息编辑框中。此时不能编辑源代码。*

[关闭向导](cancel_auto_load)
]]

DiscussPanel_text = [[
讨论面板介绍
===
在![下拉输入框](phpbb_topic_combobox.bmp)中输入要发帖的版面，或者要回复的主题。  
格式是类似于<font color=#f00>f=n</font>（版面），<font color=#f00>t=n</font>（主题），<font color=#f00>p=n</font>（帖子）。  
也可以直接浏览[论坛](http://www.progbbs.com)，把要发帖的版面或者要回复的主题的URL复制到![下拉输入框](phpbb_topic_combobox.bmp)中即可。

帖子浏览器下方是发帖区。  
[程序员记](http://www.progbbs.com)要求注册用户才能发帖，您可以先[注册用户](http://www.progbbs.com/ucp.php?mode=register)后并返回配置界面在服务器配置页输入用户信息。  
发帖区上小的输入框可以输入帖子的标题，只能输入文字。默认会将讨论位置作为标题。  
大的输入框输入帖子的正文。可以包含文字，图片等。  
按下发帖区的![钉子按钮](phpbb_link_toolbutton.bmp)可以将帖子和选中源代码位置关联，生成一个批注帖。  
按下![胶布按钮](phpbb_patch_toolbutton.bmp)可以将源代码位置包含的修改代码加入帖子中，生成一个补丁帖。  
**记录**和**发帖**按钮，分别用于将编辑好的消息记录在本地数据库中或者作为帖子发送。  
*发帖按钮在浏览帖的时候是回复正在浏览的帖，如果需要发新帖请在收帖区的下拉输入框中选择[新帖]。*

[关闭向导](cancel_auto_load)
]]

-- 下面为聚光灯流程控制，请不要修改！
function ControlValueIterator(ControlTable)
	local iIndex = 0

	return function()
		iIndex = iIndex + 1;
		local ControlValue = ControlTable[iIndex];

		if type(ControlValue) == "string" then
			return ControlValue, "";
		elseif type(ControlValue) == "table" then
			local Control, Value = ControlValue[1], ControlValue[2];

			if type(Control) == "string" then
				if type(Value) == "string" then
					return Control, Value;
				else
					return Control, "";
				end
			else
				return nil;
			end
		else
			return nil;
		end
	end
end

function ChangeSpotlights_check_git(Iter, ControlTable)
	local Control, Value = Iter();

	if Control == "git_url" then
		if string.match(Value, "https://.*github.com/.+/.+.git") then
			return ChangeSpotlights_apply(Iter, ControlTable);
		else
			return { {"git_url", 2} }, GitURL_Error_text;
		end
	end
	return { {"git_using", 1}, {"git_url", 2} }, GitURL_text;
end

function ChangeSpotlights_apply(Iter, ControlTable)
	return { {"category_tree", 0}, {"config_tab", 0}, {"save_as", 1}, {"apply", 1} }, Apply_text;
end

function ChangeSpotlights_about_config(Iter, ControlTable)
	return { {"config_tab", 1}, {"subversion_page", 0} }, Subversion_text;
end

function ChangeSpotlights_config(Iter, ControlTable)
	local Control, Value = Iter();

	if Control == "category_tree" and string.sub(Value, 1, 5) == "about" then
		return ChangeSpotlights_about_config(Iter, ControlTable);
	end
	return { {"category_tree", 1}, {"config_tab", 0} }, AboutConfig_text;
end

function ChangeSpotlights_git_tabpage(Iter, ControlTable)
	for Control, Value in Iter do
		if Control == "git_url" and string.match(Value, "https://.*github.com/.+/.+.git") then
			return ChangeSpotlights_apply(Iter, ControlTable);
		end
	end
	return { {"config_tab", 0}, {"git_using", 1} }, Git_text;
end

function ChangeSpotlights_gtalkabout_ungray(Iter, ControlTable)
	return { {"im_tab", 0}, {"instant_link", 1} }, GTalkabout_Ungray_text;
end

function ChangeSpotlights_gtalkabout_log_gray(Iter, ControlTable)
	return { {"log_gray", 1} }, GTalkabout_LogGray_text;
end

function ChangeSpotlights_gtalkabout_im(Iter, ControlTable)
	return { {"im_tab", 1} }, DiscussPanel_text;
end

function ChangeSpotlights(ControlTable)
	local Iter = ControlValueIterator(ControlTable);
	local Control, Value = Iter();

	if Control == "index" then
		return { {"certificate", 1} }, ProgBBS_text;
	elseif Control == "certificate" then
		if string.sub(Value, 1, 15) == "www.progbbs.com" then
			return { {"certificate", 1}, {"new_config", 0}, {"open_source", 1} }, GeekSite_text;
		else
			return { {"certificate", 1} }, ProgBBS_text;
		end
	elseif Control == "config" then
		return ChangeSpotlights_config(Iter, ControlTable);
	elseif Control == "check_git" then
		return ChangeSpotlights_check_git(Iter, ControlTable);
	elseif Control == "config_tab" and string.sub(Value, 1, 3) == "git" then
		return ChangeSpotlights_git_tabpage(Iter, ControlTable);
	elseif Control == "gray" and Value == "error" then
		return {}, "";
	elseif (Control == "gray" and Value == "false") or (Control == "return") then
		return ChangeSpotlights_gtalkabout_ungray(Iter, ControlTable);
	elseif Control == "gray" or Control == "log_gray" then
		return ChangeSpotlights_gtalkabout_log_gray(Iter, ControlTable);
	elseif Control == "instant_link" then
		if Value == "true" then
			return ChangeSpotlights_gtalkabout_im(Iter, ControlTable);
		else
			return ChangeSpotlights_gtalkabout_ungray(Iter, ControlTable);
		end
	elseif Control == "git_using" and Value == "true" then
		return { {"git_url", 2} }, GitURL_text;
	elseif Control == "close" or Control == "cancel_auto_load" then
		return {}, "";
	end
end

AutoLoad = 0