204 |
205 | -
146 |
147 |
├── README
├── .gitignore
├── images
├── don.png
├── bottom.png
├── gear.png
├── logo16.png
├── logout.png
├── scroll.png
├── signup.png
├── loading.gif
├── logo_128.png
├── logo_64.png
├── logo_big.png
├── popup_bg.png
├── ajax-loader.gif
├── bottom_logo.png
├── button_bg.png
├── dashboard.png
├── ic_private.png
├── ic_public.png
├── logo16_anim.gif
├── logo_gray.png
├── logo_large.png
├── logo_small.png
├── popup_logo.png
├── popup_new.png
├── public_bage.png
├── separator.png
├── signup_bg.png
├── create_folder.png
├── generic_file.png
├── logo_anim_new.gif
├── logo_small_bw.png
├── more_content.png
├── upload_button.png
├── btn_camera_gray.png
├── edit_image_logo.png
├── edit_image_panel.png
├── logo_anim_sprite.png
├── take_screenshot.png
├── btn_camera_normal.png
├── choose_gallery_bg.png
├── choose_gallery_new.png
├── dropdown_arrow_up.png
├── dropdown_arrow_down.png
└── more_content_pressed.png
├── css
├── chosen-sprite.png
├── reset-min.css
├── options.css
├── reset-context-min.css
├── jquery.jscrollpane.css
├── page.css
├── popup.css
└── chosen.css
├── Makefile
├── js
├── minus_auth.js
├── canvas_animation.js
├── jquery.mousewheel.js
├── jquery.timeago.js
├── store.js
├── jquery.tmpl.min.js
├── portamento.js
├── content_script.js
├── popup.js
├── minus.js
├── chosen.jquery.min.js
└── background.js
├── config.xml
├── background.html
├── manifest.json
├── message_bridge.js
├── Info.plist
├── includes
└── opera.js
├── options.html
├── safari.js
├── popup.html
└── edit_image.html
/README:
--------------------------------------------------------------------------------
1 | Browser extension for Min.us
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *~
2 | *.sw*
3 | *sublime*
4 |
--------------------------------------------------------------------------------
/images/don.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/don.png
--------------------------------------------------------------------------------
/images/bottom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/bottom.png
--------------------------------------------------------------------------------
/images/gear.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/gear.png
--------------------------------------------------------------------------------
/images/logo16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/logo16.png
--------------------------------------------------------------------------------
/images/logout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/logout.png
--------------------------------------------------------------------------------
/images/scroll.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/scroll.png
--------------------------------------------------------------------------------
/images/signup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/signup.png
--------------------------------------------------------------------------------
/images/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/loading.gif
--------------------------------------------------------------------------------
/images/logo_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/logo_128.png
--------------------------------------------------------------------------------
/images/logo_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/logo_64.png
--------------------------------------------------------------------------------
/images/logo_big.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/logo_big.png
--------------------------------------------------------------------------------
/images/popup_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/popup_bg.png
--------------------------------------------------------------------------------
/css/chosen-sprite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/css/chosen-sprite.png
--------------------------------------------------------------------------------
/images/ajax-loader.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/ajax-loader.gif
--------------------------------------------------------------------------------
/images/bottom_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/bottom_logo.png
--------------------------------------------------------------------------------
/images/button_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/button_bg.png
--------------------------------------------------------------------------------
/images/dashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/dashboard.png
--------------------------------------------------------------------------------
/images/ic_private.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/ic_private.png
--------------------------------------------------------------------------------
/images/ic_public.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/ic_public.png
--------------------------------------------------------------------------------
/images/logo16_anim.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/logo16_anim.gif
--------------------------------------------------------------------------------
/images/logo_gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/logo_gray.png
--------------------------------------------------------------------------------
/images/logo_large.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/logo_large.png
--------------------------------------------------------------------------------
/images/logo_small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/logo_small.png
--------------------------------------------------------------------------------
/images/popup_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/popup_logo.png
--------------------------------------------------------------------------------
/images/popup_new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/popup_new.png
--------------------------------------------------------------------------------
/images/public_bage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/public_bage.png
--------------------------------------------------------------------------------
/images/separator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/separator.png
--------------------------------------------------------------------------------
/images/signup_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/signup_bg.png
--------------------------------------------------------------------------------
/images/create_folder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/create_folder.png
--------------------------------------------------------------------------------
/images/generic_file.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/generic_file.png
--------------------------------------------------------------------------------
/images/logo_anim_new.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/logo_anim_new.gif
--------------------------------------------------------------------------------
/images/logo_small_bw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/logo_small_bw.png
--------------------------------------------------------------------------------
/images/more_content.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/more_content.png
--------------------------------------------------------------------------------
/images/upload_button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/upload_button.png
--------------------------------------------------------------------------------
/images/btn_camera_gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/btn_camera_gray.png
--------------------------------------------------------------------------------
/images/edit_image_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/edit_image_logo.png
--------------------------------------------------------------------------------
/images/edit_image_panel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/edit_image_panel.png
--------------------------------------------------------------------------------
/images/logo_anim_sprite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/logo_anim_sprite.png
--------------------------------------------------------------------------------
/images/take_screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/take_screenshot.png
--------------------------------------------------------------------------------
/images/btn_camera_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/btn_camera_normal.png
--------------------------------------------------------------------------------
/images/choose_gallery_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/choose_gallery_bg.png
--------------------------------------------------------------------------------
/images/choose_gallery_new.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/choose_gallery_new.png
--------------------------------------------------------------------------------
/images/dropdown_arrow_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/dropdown_arrow_up.png
--------------------------------------------------------------------------------
/images/dropdown_arrow_down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/dropdown_arrow_down.png
--------------------------------------------------------------------------------
/images/more_content_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/buger/minus-extension/master/images/more_content_pressed.png
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | build:
2 | rm -f ext.zip | find . -type d -name .git -prune -o -type f -not \( -name "*.coffee" -o -name "*.less" -o -name "*.sublime*" -o -name ".gitignore" -o -name "*.zip" -o -name "Makefile" \) -print | zip -q ext -@
3 |
4 |
--------------------------------------------------------------------------------
/js/minus_auth.js:
--------------------------------------------------------------------------------
1 | browser.addMessageListener(function(){
2 |
3 | });
4 |
5 | try {
6 | var user = document.getElementById('nav_username_display').innerHTML;
7 | } catch(e) {
8 | var user = "";
9 | }
10 |
11 | browser.onReady(function(){
12 | browser.postMessage({ method: "setUsername", username: user })
13 | });
14 |
--------------------------------------------------------------------------------
/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
=0;i--)m(j[i]);m(k)}function m(j){var p,i=j,k,e,m;if(m=j.getAttribute(d)){while(i.parentNode&&(i=i.parentNode).nodeType===1&&!(p=i.getAttribute(d)));if(p!==m){i=i.parentNode?i.nodeType===11?0:i.getAttribute(d)||0:0;if(!(e=b[m])){e=f[m];e=g(e,b[i]||f[i],null,true);e.key=++h;b[h]=e}c&&o(m)}j.removeAttribute(d)}else if(c&&(e=a.data(j,"tmplItem"))){o(e.key);b[e.key]=e;i=a.data(j.parentNode,"tmplItem");i=i?i.key:0}if(e){k=e;while(k&&k.key!=i){k.nodes.push(j);k=k.parent}delete e._ctnt;delete e._wrap;a.data(j,"tmplItem",e)}function o(a){a=a+n;e=l[a]=l[a]||g(e,b[e.parent.key+n]||e.parent,null,true)}}}function u(a,d,c,b){if(!a)return l.pop();l.push({_:a,tmpl:d,item:this,data:c,options:b})}function w(d,c,b){return a.tmpl(a.template(d),c,b,this)}function x(b,d){var c=b.options||{};c.wrapped=d;return a.tmpl(a.template(b.tmpl),b.data,c,b.item)}function v(d,c){var b=this._wrap;return a.map(a(a.isArray(b)?b.join(""):b).filter(d||"*"),function(a){return c?a.innerText||a.textContent:a.outerHTML||s(a)})}function t(){var b=this.nodes;a.tmpl(null,null,null,this).insertBefore(b[0]);a(b).remove()}})(jQuery) -------------------------------------------------------------------------------- /popup.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 69 | 70 | 71 | 98 | 99 | 100 |
204 |
205 | =0||c.html.indexOf("[")===0){e=c.html.replace(/\[|\]/g,"").split(" ");if(e.length)for(o=0,q=e.length;o"+c.html.substr(k+i.length),l=l.substr(0,k)+""+l.substr(k)):l=c.html,a("#"+g).html!==l&&a("#"+g).html(l),this.result_activate(a("#"+g)),c.group_array_index!=null&&a("#"+this.results_data[c.group_array_index].dom_id).show()):(this.result_highlight&&g===this.result_highlight.attr("id")&&this.result_clear_highlight(),this.result_deactivate(a("#"+g)))}}return h<1&&i.length?this.no_results(i):this.winnow_results_set_highlight()},b.prototype.winnow_results_clear=function(){var b,c,d,e,f;this.search_field.val(""),c=this.search_results.find("li"),f=[];for(d=0,e=c.length;d
').appendTo(document.body)[0];
30 |
31 | function removeVScrollbar(imageData, callback) {
32 | var ctx = canvas.getContext('2d');
33 |
34 | image.src = imageData;
35 |
36 | image.onload = function(){
37 | canvas.width = image.naturalWidth - getScrollbarWidth();
38 | canvas.height = image.naturalHeight;
39 |
40 | ctx.drawImage(image, 0, 0,
41 | image.naturalWidth, image.naturalHeight);
42 |
43 | callback(canvas.toDataURL());
44 | }
45 | }
46 |
47 |
48 | var anim = new Animation(document.getElementById('img'), document.getElementById('canvas'), 11);
49 |
50 | browser.popupHeight = 400;
51 | browser.popupWidth = 400;
52 |
53 | function createGalleryClick(data) {
54 | anim.start();
55 |
56 | Minus.getFileHeader(data.srcUrl, function(headers){
57 | // Gif file editing is forbided
58 | if (store.get('edit_image') && headers.mime != "image/gif") {
59 | anim.stop();
60 |
61 | window.latest_screenshot = data.srcUrl;
62 | browser.tabs.create({ url: browser.extension.getURL('/edit_image.html?title='+data.srcUrl) });
63 | } else {
64 | uploadScreenshot(data.srcUrl, '', data.srcUrl);
65 | }
66 | });
67 | }
68 |
69 | function captureFromMenu(captureType) {
70 | listener({ method: 'takeScreenshot', captureType: captureType });
71 | }
72 |
73 | function listenForUsernameChange() {
74 | if (window.last_username != window.store.get('username')) {
75 | initContextMenu();
76 | }
77 |
78 | window.last_username = window.store.get('username');
79 | }
80 |
81 | setInterval(listenForUsernameChange, 5000);
82 |
83 | function initContextMenu() {
84 | if (browser.isChrome || browser.isFirefox) {
85 | chrome.contextMenus.removeAll(function(){
86 | if (window.store.get('username')) {
87 | browser.contextMenus.create({
88 | "title": "Upload to Minus",
89 | "onclick" : createGalleryClick,
90 | "contexts":["image"]
91 | });
92 |
93 | browser.contextMenus.create({
94 | "title": "Capture Visible Part of Page",
95 | "onclick" : function(){ captureFromMenu('visible') }
96 | });
97 |
98 | browser.contextMenus.create({
99 | "title": "Capture Selected Area",
100 | "onclick" : function(){ captureFromMenu('region') },
101 | "documentUrlPatterns": ["http://*/*"]
102 | });
103 |
104 | browser.contextMenus.create({
105 | "title": "Capture Entire Page",
106 | "onclick" : function(){ captureFromMenu('full') },
107 | "documentUrlPatterns": ["http://*/*"]
108 | });
109 | } else {
110 | browser.contextMenus.create({
111 | "title": "Not logged to Minus",
112 | "onclick" : function(){}
113 | });
114 | }
115 | });
116 |
117 |
118 | } else if(browser.isSafari) {
119 | function handleContextMenu(event) {
120 | if (event.userInfo.nodeName === "IMG") {
121 | event.contextMenu.appendContextMenuItem("context_menu_1", "Upload to Minus");
122 | }
123 | }
124 |
125 | safari.application.addEventListener("contextmenu", handleContextMenu, false);
126 |
127 | safari.application.addEventListener("command", function(event) {
128 | if (event.command == "context_menu_1") {
129 | createGalleryClick(event.userInfo);
130 | }
131 | }, false);
132 | }
133 | }
134 |
135 | function uploadItem(binaryData, gallery_id, title, onProgress){
136 | anim.start();
137 |
138 | if (!title) title = "Untitled";
139 |
140 | Minus.uploadItem(gallery_id, title.slice(0,50), "image/png", binaryData,
141 | function(resp){
142 | anim.stop();
143 |
144 | browser.toolbarItem.setText('');
145 |
146 | console.log('resp');
147 |
148 | if (!resp.error)
149 | browser.tabs.create({ url: "http://minus.com/m"+gallery_id });
150 |
151 | browser.postMessage({ method: "uploadComplete" });
152 | },
153 |
154 | onProgress
155 | );
156 | }
157 |
158 | function uploadScreenshot(base64Data, gallery_id, title) {
159 | Minus.setUser(window.store.get('username'));
160 | Minus.setToken(window.store.get('access_token'));
161 |
162 | var onProgress = function(progress) {
163 | console.log('updating progress');
164 |
165 | var percent = parseInt(progress)+'%';
166 | browser.toolbarItem.setText(percent);
167 |
168 | browser.postMessage({ method:"uploadProgress", progress: progress });
169 | }
170 |
171 | function upload() {
172 | var binaryData = atob(base64Data.replace(/^data\:image\/png\;base64\,/,''));
173 |
174 | if (!gallery_id) {
175 | Minus.createGallery(null, function(gallery) {
176 | uploadItem(binaryData, gallery.id, title, onProgress);
177 | });
178 | } else {
179 | uploadItem(binaryData, gallery_id, title, onProgress);
180 | }
181 | }
182 |
183 | if (base64Data.slice(0,4) == 'data') {
184 | upload();
185 | } else {
186 | anim.start();
187 |
188 | Minus.createGallery(null, function(gallery) {
189 | Minus.uploadItemFromURL(base64Data, gallery.id, function(resp){
190 | anim.stop();
191 |
192 | browser.toolbarItem.setText('');
193 |
194 | if (!resp.error)
195 | browser.tabs.create({ url: "http://minus.com/m"+gallery.id });
196 |
197 | browser.postMessage({ method: "uploadComplete" });
198 | }, onProgress);
199 | });
200 | }
201 | }
202 |
203 | function captureVisible(callback) {
204 | browser.tabs.captureVisibleTab(null, {format: 'png'}, function(dataUrl) {
205 | callback(dataUrl);
206 | });
207 | }
208 |
209 | function concatImages(image_data_array, callback) {
210 | if (!$.isArray(image_data_array))
211 | return false;
212 |
213 | var images = [],
214 | image,
215 | loaded_images = 0,
216 | total_height = 0,
217 | total_width = 0,
218 | concated_height = 0;
219 |
220 | var canvas = $('').appendTo(document.body);
221 |
222 | var imageLoaded = function() {
223 | total_width = this.naturalWidth;
224 | total_height = total_height + this.naturalHeight;
225 |
226 | loaded_images += 1;
227 |
228 | // All images loaded
229 | if (loaded_images == image_data_array.length) {
230 | canvas[0].width = total_width;
231 | canvas[0].height = total_height;
232 | ctx = canvas[0].getContext('2d');
233 |
234 | for (var i=0; i