aboutsummaryrefslogtreecommitdiffstats
path: root/conkeror/.conkerorrc/site-js/scuttle.js
blob: e6ab875b509490867fc9163d42a9bebd77e20238 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
define_hook('scuttle_bookmarked_hook');

define_variable("scuttle_username", null,
                "Username of te scuttle account.");
define_variable("scuttle_password", null,
                "Password of the scuttle account.");
define_variable("scuttle_url", null,
                "The URL where scuttle can be found.");

function scuttle_parse_xml(text)
{
    var parser = Components
            .classes["@mozilla.org/xmlextras/domparser;1"]
            .createInstance(Components.interfaces.nsIDOMParser);
    return parser.parseFromString(text, 'text/xml');
}

function scuttle_get_url(path)
{
    let url = make_uri(scuttle_url);

    if (scuttle_username != null)
        url.username = scuttle_username;
    if (scuttle_password != null)
        url.password = scuttle_password;

    url.path += '/api';

    return url.spec + '/' + path;
}

function scuttle_send_url(I, obj, default_name) {
    var postlinkurl;
    var uri_string = load_spec_uri_string(load_spec(obj));
    var panel = create_info_panel(
        I.window, 'scuttle-panel',
        [['scuttle-bookmarking', 'Sending URL to Scuttle: ', uri_string]]
    );

    try {
        let description = yield I.minibuffer.read(
            $prompt = "name (required): ",
            $initial_value = default_name
        );
        let tags = yield I.minibuffer.read(
            $prompt = "tags (space delimited): "
        );
        let extended = yield I.minibuffer.read(
            $prompt = "extended description: "
        );

        postlinkurl = scuttle_get_url(
            'posts_add.php?&url=' + escape(uri_string) +
                '&description=' + escape(description) +
                '&tags=' + escape(tags) +
                '&extended=' + escape(extended)
        );
    } finally {
        panel.destroy();
    }

    try {
        var content = yield send_http_request(
            load_spec({uri: postlinkurl}));
        var dom = scuttle_parse_xml(content.responseText);
        var result = dom.getElementsByTagName('result')[0];
        var code = result.getAttribute('code');
        I.window.minibuffer.message(code);

        if (code === 'done')
            scuttle_bookmarked_hook.run();
    } catch (e) { }
}

function scuttle_bookmarked_widget(window)
{
    this.class_name = 'scuttle-bookmark-widget';
    text_widget.call(this, window);
    this.add_hook('current_content_buffer_location_change_hook');
    this.add_hook('select_buffer_hook');
    this.add_hook('scuttle_bookmarked_hook');
}
scuttle_bookmarked_widget.prototype = {
    constructor: scuttle_bookmarked_widget,
    __proto__: text_widget.prototype,
    update: function () {
        var obj = this;
        function doit() {
            check_buffer(obj.window.buffers.current, content_buffer);
            let posturl = scuttle_get_url('is_bookmarked.php?url=' +
                                          encodeURIComponent(
                                              load_spec_uri_string(
                                                  load_spec(obj.window.buffers.current.top_frame)
                                              )
                                          ));

            try {
                let content = yield send_http_request(
                    load_spec({uri: posturl})
                );

                var dom = scuttle_parse_xml(content.responseText);
                var result = dom.getElementsByTagName('result')[0].innerHTML;

                obj.view.text = result == 'true'
                    ? "+" : "-";
            }
            catch (e) { }
        }
        co_call(doit());
    }
};

interactive("scuttle-post",
            "bookmark the page via scuttle",
            function (I) {
                check_buffer(I.buffer, content_buffer);
                co_call(scuttle_send_url(I, I.buffer.top_frame, I.buffer.title));
            });

interactive("scuttle-post-link",
            "bookmark the link via scuttle",
            function (I) {
                let bo = yield read_browser_object(I);
                check_buffer(I.buffer, content_buffer);
                co_call(scuttle_send_url(I, encodeURIComponent(bo), bo.textContent));
            }, $browser_object = browser_object_links);