'全タブのタイトルとURLをClipBoardにコピーする。
'Shift　キーを押しながら実行で「これより右」
'Ctrl　キーを押しながら実行で「これより左」に対応

Option Explicit

Dim luna,tabNumber,i,currentActiveIndex,useDmyTrident,tridentTabId
Dim kcheck,starttab,endtab,tabstep
Dim tutext,oclip,document,dcid,cltext,deftitle


Sub fin
	luna.Result = 0
	
	' クリップボードを利用するためにダミーの空Tridentを用意した場合は削除します
	If useDmyTrident = true Then
		' 作成したタブを削除
		luna.Close(luna.GetIndex(tridentTabId))
		' タブ削除時に表示が移ってしまうのですぐ戻す
		luna.ActiveIndex = currentActiveIndex
	End If
	
	Set oclip = Nothing
	Set document = Nothing
	Set luna = Nothing
	WScript.Quit
End Sub

' 一番最後に利用したdocument(=Tridentのdocumentオブジェクト)を利用してクリップボードに文字列をコピー
' Tridentタブが一つもなかった場合はダミーのタブを用意する
Sub clget(tutext)
	If document Is Nothing Then
		' 開いているオブジェクトの中にTridentがなかったのでクリップボード利用のため空のTridentタブを用意する
		tridentTabId = luna.OpenDocument("{248B8F5D-FAE2-4f0e-9EC9-3B408DBF0B2B}", "")
		luna.Navigate tridentTabId, "about:blank"
		useDmyTrident = true
		' WebKit利用時、新規タブ作成時に表示が移ってしまうのですぐ戻す
		luna.ActiveIndex = currentActiveIndex
		Set document = luna.GetDocumentObject(tridentTabId)
		If document Is Nothing Then
			Call luna.MessageBox("无法创建文档对象。")
			fin
		End If
	End If
	
	Set oclip = document.parentWindow.clipboardData
	cltext = oclip.getData("text")
	cltext = tutext
	oclip.setData "text",cltext
	
End Sub


Set luna = CreateObject("Lunascape2.LunascapeAPI")

luna.Result = luna.ShiftDown
luna.Result = luna.CtrlDown

tabNumber = luna.GetCount - 1

Luna.Result = 0

	If luna.ShiftDown = true Then luna.Result = 1
	If luna.CtrlDown = true Then luna.Result = 2

kcheck = luna.Result

	Select Case kcheck
		Case 1
			luna.MessageBox "复制当前网页标签右侧的所有URL和标题。"
		Case 2
			luna.MessageBox "复制当前网页标签左侧的所有URL和标题"
	End Select

	Select Case kcheck
		Case 0
			starttab = 0
			endtab = tabnumber
			tabstep = 1
		Case 1
			starttab = luna.ActiveIndex
			endtab = tabnumber
			tabstep = 1
		Case 2
			starttab = luna.ActiveIndex
			endtab = 0
			tabstep = -1
	End Select

	' Tridentのオブジェクトが見つからなかった場合はクリップボードの利用方法が異なるのでdocumentを明示的に初期化
	Set document = Nothing
	
	' 作業開始前のアクティブタブ
	currentActiveIndex = luna.ActiveIndex
	
	For i=starttab To endtab step tabstep

		luna.ActiveIndex(i)
		dcid = luna.GetDocumentID(i)

		If luna.EngineType(i) = "{248B8F5D-FAE2-4f0e-9EC9-3B408DBF0B2B}" Then
			' 現在開いているオブジェクトがTridentの場合はタイトル取得にGetDocumentObjectを利用します
			Set document = luna.GetDocumentObject(dcid)
			If document Is Nothing Then
				Call luna.MessageBox("无法创建文档对象。")
				fin
			End If
			
			On Error Resume Next
			' documentからタイトル取得
			deftitle = document.title
		Else
			' 現在開いているオブジェクトがTrident以外の場合はタイトル取得にDomを利用します
			' タイトルを取得するためアクティブなタブでJavaScriptを実行します。
			
			' BODYタグの内側先頭に必要な情報（ページタイトル）をElementで持たせたDIVタグを埋め込みます
			luna.ExecuteJavaScript dcid, "var element = document.createElement('div'); element.setAttribute('id','LunascapeDmyDiv'); var objBody = document.getElementsByTagName('body').item(0); objBody.appendChild(element);element.setAttribute('dmytitle', document.title);element.setAttribute('dmyflag', 'Embed');"

			' まだ埋め込みが終わっていないことがあるのでタブが切り替わらないように埋め込み終了を待つ
			Dim strEmbed,retryCount
			strEmbed = ""
			retryCount = 0
			Do While (strEmbed = "") and (retryCount < 100)
				' 埋め込んだダミーのDivタグから情報を抜きます
				strEmbed = luna.GetDOMElementAttribute(dcid, "LunascapeDmyDiv","dmyflag")
				retryCount = retryCount + 1
			Loop
			' 埋め込んだダミーのDivタグから情報を抜きます
			deftitle = luna.GetDOMElementAttribute(dcid, "LunascapeDmyDiv","dmytitle")
			
			' BODYタグのに埋め込んだダミータグを削除します
			luna.ExecuteJavaScript dcid, "var element = document.getElementById('LunascapeDmyDiv');var parent = element.parentNode;var len = parent.childNodes.length;for(var i = len-1; i >= 0; i--){ if(parent.childNodes[i].id == 'LunascapeDmyDiv'){parent.removeChild(parent.childNodes[i]);}}"
		End If

		
		' タイトルとURLでクリップボードにコピーする文字列を成形します
		If Err.Number = 0 Then 
			If deftitle = "" Then deftitle = "notitle"
			tutext =tutext & deftitle & " : " & luna.URL &chr(13)
		End If

	Next

clget(tutext)
' 表示していたタブに戻す
luna.ActiveIndex = currentActiveIndex
fin
