OSDN Git Service

レス番号のコンテキストメニューから逆参照のレスアンカーを表示するメニューを追加
authorh677 <h677>
Sun, 13 Jul 2008 15:51:04 +0000 (15:51 +0000)
committerh677 <h677>
Sun, 13 Jul 2008 15:51:04 +0000 (15:51 +0000)
Giko.dfm
Giko.pas
GikoDataModule.dfm
GikoDataModule.pas
GikoSystem.pas

index 49d9510..5148a1a 100644 (file)
--- a/Giko.dfm
+++ b/Giko.dfm
@@ -8397,6 +8397,9 @@ object GikoForm: TGikoForm
     object ID1: TMenuItem
       Action = GikoDM.SameIDResAnchorAction
     end
+    object N83: TMenuItem
+      Action = GikoDM.DereferenceResAction
+    end
   end
   object BrowserTabPopupMenu: TPopupMenu
     Images = HotToobarImageList
index ab1627d..3ba0a37 100644 (file)
--- a/Giko.pas
+++ b/Giko.pas
@@ -419,6 +419,7 @@ type
     ResPopupClearTimer: TTimer;
     TaskTrayPopupMenu: TPopupMenu;
     Exit1: TMenuItem;
+    N83: TMenuItem;
                                procedure FormCreate(Sender: TObject);
                procedure FormDestroy(Sender: TObject);
                procedure BrowserStatusTextChange(Sender: TObject;
@@ -6870,7 +6871,7 @@ begin
             end
         end;
         FActiveContent.IDAnchorPopup(
-            GikoSys.CreateSameIDResAnchor(numbers, FActiveContent.Thread, limited));
+            GikoSys.CreateResAnchor(numbers, FActiveContent.Thread, limited));
     finally
         numbers.Free;
     end;
index 93d0a35..589305c 100644 (file)
@@ -1369,6 +1369,14 @@ object GikoDM: TGikoDM
       Hint = #12479#12502#19968#35239#34920#31034
       OnExecute = ShowTabListActionExecute
     end
+    object DereferenceResAction: TAction
+      Tag = 1
+      Category = #12473#12524#12483#12489
+      Caption = #12371#12398#12524#12473#12434#21442#29031#12375#12390#12356#12427#12524#12473#12450#12531#12459#12540#34920#31034
+      Hint = #12371#12398#12524#12473#12434#21442#29031#12375#12390#12356#12427#12524#12473#12450#12531#12459#12540#34920#31034
+      OnExecute = DereferenceResActionExecute
+      OnUpdate = DependActiveCntentLogActionUpdate
+    end
   end
   object ToobarImageList: TImageList
     Left = 44
index 42f953c..67576b3 100644 (file)
@@ -241,6 +241,7 @@ type
     AddIDtoNGWord1Action: TAction;
     ExtractSameIDAction: TAction;
     ShowTabListAction: TAction;
+    DereferenceResAction: TAction;
        procedure EditNGActionExecute(Sender: TObject);
        procedure ReloadActionExecute(Sender: TObject);
        procedure GoFowardActionExecute(Sender: TObject);
@@ -452,6 +453,7 @@ type
     procedure AddIDtoNGWord1ActionExecute(Sender: TObject);
     procedure ExtractSameIDActionExecute(Sender: TObject);
     procedure ShowTabListActionExecute(Sender: TObject);
+    procedure DereferenceResActionExecute(Sender: TObject);
   private
        { Private \90é\8c¾ }
        procedure ClearResFilter;
@@ -4399,7 +4401,7 @@ begin
                 // \83\8c\83X\82Ì\94Ô\8d\86\82ð\8dX\90V
                 if (Pos('menu:', url) > 0) then begin
                     index := StrToInt64Def(
-                        Copy(url, 5, Length(url)), index + 1
+                        Copy(url, 6, Length(url)), index + 1
                     );
                 end else begin
                     // \8aJ\8en\83\8c\83X\94Ô\8d\86\88È\8d~\82©\83`\83F\83b\83N
@@ -4494,5 +4496,72 @@ begin
     GikoForm.ListView.Items.EndUpdate;
     GikoForm.SetActiveList(BoardGroup.SpecialBoard);
 end;
+//! \8bt\8eQ\8fÆ\82µ\82Ä\82¢\82é\83\8c\83X\82ð\92Ç\89Á\82·\82é
+procedure TGikoDM.DereferenceResActionExecute(Sender: TObject);
+var
+       i, currentNo, No : Integer;
+    links : IHTMLElementCollection;
+    threadItem : TThreadItem;
+    item : IHTMLElement;
+    url, url2 : string;
+    resNo : TStringList;
+    alreadyExist : Boolean;
+       PathRec: TPathRec;
+begin
+       No := GikoForm.KokoPopupMenu.Tag;
+       if No = 0 then Exit;
+
+    ThreadItem := GikoForm.GetActiveContent;
+    // \83A\83N\83e\83B\83u\83^\83u\82©\82ç\91S\82Ä\82Ì\83\8a\83\93\83N\82ð\8eæ\93¾\82·\82é
+    links := GetActiveThreadLinks;
+    if (ThreadItem <> nil) and (links <> nil) then begin
+        resNo := TStringList.Create;
+        try
+            currentNo := 0;
+            alreadyExist := False;
+            // \83\8a\83\93\83N\82ð\91S\82Ä\91\96\8d¸\82·\82é
+            for i := 0 to links.length - 1 do begin
+                item := links.item(i, 0) as IHTMLElement;
+                if (item <> nil) then begin
+                    url := item.getAttribute('href', 0);
+                    // \83\8c\83X\82Ì\94Ô\8d\86\82ð\8dX\90V
+                    if (Pos('menu:', url) > 0) then begin
+                        currentNo := StrToInt64Def(
+                            Copy(url, 6, Length(url)), currentNo + 1
+                        );
+                        alreadyExist := False;
+                    end else if (currentNo <> -1) and (not alreadyExist) then begin
+                        // IE7\91Î\89\9e
+                        if Pos('about:..', url) = 1 then begin
+                            url := 'about:blank..' + Copy( url, Length('about:..')+1, Length(url) )
+                        end;
+                        // \8e©\95ª\82Ö\82Ì\83\8a\83\93\83N\82©\82ç\83\8c\83X\83|\83b\83v\97p\82Ì\94Ô\8d\86\8eæ\93¾
+                        if Pos('about:blank..', url) = 1 then begin
+                            // No \94Ô\82Ö\82Ì\83\8a\83\93\83N\82ª\82 \82ê\82Î\8eQ\8fÆ\82 \82è
+                            url2 := THTMLCreate.GetRespopupURL(url, ThreadItem.URL);
+                                       PathRec := Gikosys.Parse2chURL2(url2);
+                            if (not PathRec.FNoParam) then begin
+                                Gikosys.GetPopupResNumber(url2,PathRec.FSt,PathRec.FTo);
+                                       end;
+                            // \91Î\8fÛ\83\8c\83X\82à\82µ\82­\82Í\82»\82ê\82ð\8aÜ\82Þ\82È\82ç\8eQ\8fÆ\82 \82è\82Æ\82·\82é
+                            if (PathRec.FSt = No) or
+                                ((PathRec.FSt <= No) and (PathRec.FTo >= No))  then begin
+                                alreadyExist := True;
+                                resNo.Add(IntToStr(currentNo));
+                            end;
+                        end;
+                    end;
+                end;
+            end;
+            // \96³\90§\8cÀ\82È\82Ì\82Å-1\8cÅ\92è
+            GikoForm.ActiveContent.IDAnchorPopup(
+                GikoSys.CreateResAnchor(resNo, ThreadItem, -1));
+        finally
+            resNo.Clear;
+            resNo.Free;
+        end;
+    end;
+end;
+
 end.
 
index 4679f9f..d579b85 100644 (file)
@@ -213,7 +213,7 @@ type
                procedure GetPopupResNumber(URL : string; var stRes, endRes : Int64);
 
                property Bayesian : TGikoBayesian read FBayesian write FBayesian;
-        function CreateSameIDResAnchor(var Numbers: TStringList; ThreadItem: TThreadItem; limited: Integer):string;
+        function CreateResAnchor(var Numbers: TStringList; ThreadItem: TThreadItem; limited: Integer):string;
                procedure GetSameIDRes(const AID : string; ThreadItem: TThreadItem;var body: TStringList); overload;
                procedure GetSameIDRes(AIDNum : Integer; ThreadItem: TThreadItem;var body: TStringList); overload;
         function GetResID(AIDNum: Integer; ThreadItem: TThreadItem): String;
@@ -2770,7 +2770,7 @@ end;
 \param limited    \97ñ\8b\93\82·\82é\90\94\82ð\90§\8cÀ\82·\82é\82È\82ç1\88È\8fã
 \return           \97ñ\8b\93\82³\82ê\82½\83\8c\83X\83A\83\93\83J\81[
 }
-function TGikoSys.CreateSameIDResAnchor(
+function TGikoSys.CreateResAnchor(
     var Numbers: TStringList; ThreadItem: TThreadItem;
     limited: Integer):string;
 var