~cszikszoy/do-plugins/fix-confluence

« back to all changes in this revision

Viewing changes to Cl.ickable/src/ClipAction.cs

  • Committer: David Siegel
  • Date: 2008-09-04 21:44:55 UTC
  • Revision ID: david@david-desktop-20080904214455-r1o7exxrj4oxll25
Added Cl.ickable plugin.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// ClipAction.cs
 
2
// 
 
3
// Copyright (C) 2008 Idealab
 
4
//
 
5
// This program is free software: you can redistribute it and/or modify
 
6
// it under the terms of the GNU General Public License as published by
 
7
// the Free Software Foundation, either version 3 of the License, or
 
8
// (at your option) any later version.
 
9
//
 
10
// This program is distributed in the hope that it will be useful,
 
11
// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
// GNU General Public License for more details.
 
14
//
 
15
// You should have received a copy of the GNU General Public License
 
16
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
17
//
 
18
 
 
19
using System;
 
20
using System.Web;
 
21
using System.Collections.Generic;
 
22
using Mono.Unix;
 
23
 
 
24
using Do.Addins;
 
25
using Do.Universe;
 
26
 
 
27
namespace Cl.ickable
 
28
{
 
29
        
 
30
        public class ClipAction : AbstractAction
 
31
        {
 
32
                const int MaxTitleLength = 80;
 
33
                const string ClipPostURL = "http://cl.ickable.com/cgi-bin/SaveClip.cgi";
 
34
                
 
35
            public override string Name {
 
36
                        get { return Catalog.GetString ("Clip"); }
 
37
                }
 
38
                
 
39
                public override string Description {
 
40
                        get { return Catalog.GetString ("Create a clip with Cl.ickable"); }
 
41
                }
 
42
                
 
43
                public override string Icon {
 
44
                        get { return "edit-cut"; }
 
45
                }
 
46
                
 
47
                public override Type[] SupportedItemTypes {
 
48
                        get {
 
49
                                return new Type[] {
 
50
                                        typeof (ITextItem),
 
51
                                };
 
52
                        }
 
53
                }
 
54
                
 
55
                public override bool ModifierItemsOptional {
 
56
                        get { return true; }
 
57
                }
 
58
                
 
59
                public override Type[] SupportedModifierItemTypes {
 
60
                        get {
 
61
                                return new Type[] {
 
62
                                        typeof (ITextItem),
 
63
                                };
 
64
                        }
 
65
                }
 
66
                
 
67
                protected static string AsParameterString (Dictionary<string, string> parameters)
 
68
                {
 
69
                        string s = "";
 
70
                        
 
71
                        foreach (KeyValuePair<string, string> kv in parameters) {
 
72
                                s += s.Length == 0 ? "?" : "&";
 
73
                                s += kv.Key + "=" + System.Web.HttpUtility.UrlEncode (kv.Value);
 
74
                        }
 
75
                        return s;
 
76
                }
 
77
                
 
78
                protected static string MakeOpenSafe (string s)
 
79
                {
 
80
                        return s
 
81
                                .Replace ("'", "")        // causes a heinous crash when passed to Util.Environment.Open
 
82
                        ;
 
83
                }
 
84
                
 
85
                public override IItem[] Perform (IItem[] items, IItem[] modItems)
 
86
                {
 
87
                        string text, title, url;
 
88
                        Dictionary<string, string> parameters;
 
89
                        
 
90
                        text = (items[0] as ITextItem).Text;
 
91
                        title = modItems.Length > 0 ?
 
92
                                (modItems[0] as ITextItem).Text :
 
93
                                text.Substring (0, Math.Min (text.Length, MaxTitleLength)) + "...";
 
94
                        
 
95
                        parameters = new Dictionary<string, string> ();
 
96
                        // "title" is the "human readable" title of the containing document, available in FF JS as document.title
 
97
                        parameters ["title"] = title;
 
98
                        // "content" is HTML content (it can be just text, of course).
 
99
                        parameters ["content"] = text;
 
100
                        // "location" is an absolute URL to the containing page ... available in Firefox JavaScript as document.location
 
101
                        parameters ["location"] = "";
 
102
                        // "base" is the "base URL" of the page ... available in Firefox JavaScript as document.baseURI
 
103
                        parameters ["base"] = "";
 
104
                        
 
105
                        url = ClipPostURL + AsParameterString (parameters);
 
106
                        Util.Environment.Open (MakeOpenSafe (url));
 
107
                        return null;
 
108
                }
 
109
        }
 
110
}