PageSourceSearch

https://autofocus.io/

html autofocus.io collected 2026-09-28 14:33:57 UTC 20,675 bytes, 372 lines download raw bytes

1<!doctype html>
2<html lang="en" ng-app="myApp" id="ng-app" ng-controller="StyleCtrl">
3
4<head>
5    <!--[if lte IE 7]>
6      
6<script src="js/vendor/json2.js"></script>
6
7    <![endif]-->
8    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
9    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
10    <meta http-equiv="cache-control" content="max-age=0">
11    <meta http-equiv="cache-control" content="no-cache">
12    <meta http-equiv="expires" content="0">
13    <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT">
14    <meta http-equiv="pragma" content="no-cache">
15    <meta name="viewport" content="width=device-width, initial-scale=1.0">
16    <title ng-bind="PageService.title()">
17    </title>
18    <meta name="description" content="{{PageService.metaDescription()}}">
19    <meta name="keywords" content="{{PageService.metaKeywords()}}">
20    <meta name="author" content="[email protected]">
21    <meta name="fragment" content="!">
22    <!-- Advanced SEO -->
23    <meta property="og:title" content="{{PageService.title()}}" />
24    <meta property="og:name" content="{{PageService.title()}}" />
25    <meta property="og:type" content="website" />
26    <meta property="og:description" content="{{PageService.metaDescription()}}" />
27    <meta property="og:keywords" content="{{PageService.metaKeywords()}}" />
28    <!-- <meta property="og:url" content="{{PageService.canonicalUrl()}}" /> -->
29    <meta property="og:image" content="{{PageService.image()}}" />
30    <meta property="og:picture" content="{{PageService.image()}}">
31    <meta property="og:image:width" content="400" />
32    <meta property="og:image:height" content="300" />
33    <!--     <meta name="robots" content="INDEX, FOLLOW">-->
34    <!-- Font awesome CSS -->
35    <link rel="stylesheet" href="//netdna.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.css">
36    <!-- Google fonts -->
37    <link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css?family=Lora:400,400italic'>
38    <link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css?family=Montserrat'>
39    <link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css?family=Muli'>
40    <link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css?family=Playfair+Display'>
41    <!-- Bootstrap core CSS -->
42    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
43    <!-- Favicon  -->
44    <link rel="shortcut icon" href="img/favicon.ico">
45    <link rel='image_src' href='{{PageService.image()}}' />
46    <!-- <link rel="canonical" href="{{PageService.canonicalUrl()}}" /> -->
47    <base href="/" />
48    <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.13.2/css/jquery.dataTables.css">
49
50    
50<script>
51    (function(c, a) {
52        if (!a.__SV) {
53            var b = window;
54            try { var d, m, j, k = b.location,
55                    f = k.hash;
56                d = function(a, b) { return (m = a.match(RegExp(b + "=([^&]*)"))) ? m[1] : null };
57                f && d(f, "state") && (j = JSON.parse(decodeURIComponent(d(f, "state"))), "mpeditor" === j.action && (b.sessionStorage.setItem("_mpcehash", f), history.replaceState(j.desiredHash || "", c.title, k.pathname + k.search))) } catch (n) {}
58            var l, h;
59            window.mixpanel = a;
60            a._i = [];
61            a.init = function(b, d, g) {
62                function c(b, i) {
63                    var a = i.split(".");
64                    2 == a.length && (b = b[a[0]], i = a[1]);
65                    b[i] = function() {
66                        b.push([i].concat(Array.prototype.slice.call(arguments,
67                            0)))
68                    }
69                }
70                var e = a;
71                "undefined" !== typeof g ? e = a[g] = [] : g = "mixpanel";
72                e.people = e.people || [];
73                e.toString = function(b) { var a = "mixpanel"; "mixpanel" !== g && (a += "." + g);
74                    b || (a += " (stub)"); return a };
75                e.people.toString = function() { return e.toString(1) + ".people (stub)" };
76                l = "disable time_event track track_pageview track_links track_forms track_with_groups add_group set_group remove_group register register_once alias unregister identify name_tag set_config reset opt_in_tracking opt_out_tracking has_opted_in_tracking has_opted_out_tracking clear_opt_in_out_tracking people.set people.set_once people.unset people.increment people.append people.union people.track_charge people.clear_charges people.delete_user people.remove".split(" ");
77                for (h = 0; h < l.length; h++) c(e, l[h]);
78                var f = "set set_once union unset remove delete".split(" ");
79                e.get_group = function() {
80                    function a(c) { b[c] = function() { call2_args = arguments;
81                            call2 = [c].concat(Array.prototype.slice.call(call2_args, 0));
82                            e.push([d, call2]) } } for (var b = {}, d = ["get_group"].concat(Array.prototype.slice.call(arguments, 0)), c = 0; c < f.length; c++) a(f[c]); return b };
83                a._i.push([b, d, g])
84            };
85            a.__SV = 1.2;
86            b = c.createElement("script");
87            b.type = "text/javascript";
88            b.async = !0;
89            b.src = "undefined" !== typeof MIXPANEL_CUSTOM_LIB_URL ?
90                MIXPANEL_CUSTOM_LIB_URL : "file:" === c.location.protocol && "//cdn4.mxpnl.com/libs/mixpanel-2-latest.min.js".match(/^\/\//) ? "https://cdn4.mxpnl.com/libs/mixpanel-2-latest.min.js" : "//cdn4.mxpnl.com/libs/mixpanel-2-latest.min.js";
91            d = c.getElementsByTagName("script")[0];
92            d.parentNode.insertBefore(b, d)
93        }
94    })(document, window.mixpanel || []);
95    mixpanel.init("f671b8cfd66dc49a4e64b0be38bb1826", { batch_requests: true });
96    </script>
96
97</head>
98
99<body id="page-top" data-spy="scroll" data-target=".navbar-custom" class="{{layout.skin}} {{(sidebarCollapse.current)?'sidebar-collapse':''}}">
100
101    <link rel="stylesheet" type='text/css' href="css/vendor/animate.min.css">
102    <link rel="stylesheet" type='text/css' href="css/vendor/devices.min.css">
103    <link rel="stylesheet" type='text/css' href="dist/notif-bd9babd118.css">
104
105    <link rel="stylesheet" type='text/css' href="dist/main-bbab9afb50.css" ng-if="rootState.state.current.name && (rootState.state.current.name.indexOf('galler') != 0)" >
106
107    <link rel="stylesheet" href="dist/login-2706b005a3.css" ng-if="rootState.state.current.name && (rootState.state.current.name.indexOf('login') >= 0)" type='text/css' />
108
109    <link rel="stylesheet" ng-if="layout.url" ng-href="{{layout.url}}" type="text/css" />
110    <link rel="stylesheet" ng-if="layout.skin" ng-href="{{layout.skinurl}}" type="text/css" />
111
112    <!-- {{rootState.state.current.name}} -->
113    <div ng-controller="LoginCtrl" class="wrapper">
114        <header class="main-header" ng-include src="'partials/components/header.html'"></header>
115        <aside class="main-sidebar" ng-include src="'partials/components/sidebar.html'">
116        </aside>
117        <resolve-loader></resolve-loader>
118        <div class="view-container content-wrapper" style="min-height:100vh;" id="main-container" name="main-container">
119            <div ui-view class="view-frame">
120            </div>
121        </div>
122    </div>
123    <div class="text-center col-lg-12" style="background-color: white;">
124        <p>
125            <small>
126                <br>
127                <small class="muted">©AutoFocus.io
128                    <a ng-hide="true" href="https://plus.google.com/+SophiaCui42?rel=author">sxc</a>
129                </small>
130            </small>
131        </p>
132    </div>
133    <div ng-include src="'partials/components/headerexists.html'"></div>
134    <div id="fb-root"></div>
135    <!--[if IE 8]>
136    
136<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
136
137    
137<script src="http://cdnjs.cloudflare.com/ajax/libs/es5-shim/3.4.0/es5-shim.min.js"></script>
137
138  <![endif]-->
139    
139<script type="text/javascript" src="https://checkout.stripe.com/checkout.js"></script>
139
140    
140<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
140
141    
141<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
141
142    
142<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script>
142
143    
143<script type="text/javascript" src="js/vendor/angular-ui-router.min.js"></script>
143
144    
144<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular-route.min.js"></script>
144
145    
145<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular-sanitize.min.js"></script>
145
146    
146<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular-animate.min.js"></script>
146
147    
147<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular-resource.min.js"></script>
147
148
149    
149<script type="text/javascript" src="partials/components/galleries/assets_tele/js/jquery.dropotron.min.js"></script>
149
150    
150<script type="text/javascript" src="partials/components/galleries/assets_tele/js/jquery.scrollex.min.js"></script>
150
151    
151<script type="text/javascript" src="partials/components/galleries/assets_tele/js/jquery.scrolly.min.js"></script>
151
152    
152<script type="text/javascript" src="partials/components/galleries/assets_tele/js/jquery.selectorr.min.js"></script>
152
153    
153<script type="text/javascript" src="partials/components/galleries/assets_tele/js/skel.min.js"></script>
153
154    
154<script type="text/javascript" src="partials/components/galleries/assets_tele/js/util.js?v=3"></script>
154
155
156    
156<script type="text/javascript" src="js/vendor/sortable.js"></script>
156
157    <!-- 
157<script type="text/javascript" src="js/vendor/angular-ui-tree.min.js"></script>
157 -->
158    
158<script type="text/javascript" src="js/vendor/ng-joyride.js"></script>
158
159    
159<script type="text/javascript" src="js/vendor/bootstrap-notify.min.js"></script>
159
160    
160<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/parse/1.11.1/parse.min.js"></script>
160
161    
161<script type="text/javascript" src="js/vendor/dropzone.js"></script>
161
162    <!-- 
162<script type="text/javascript" src="js/vendor/angularjs-nvd3-directives.min.js"></script>
162-->
163
164    
164<script type="text/javascript" src="dist/app-e07c689db0.js"></script>
164  
165    
165<script type="text/javascript" src="dist/services-2ba525acb495.js"></script>
165
166    
166<script type="text/javascript" src="dist/controllers-df56486b6894.js"></script>
166
167    
167<script type="text/javascript" src="dist/filters-e2a41913dd.js"></script>
167
168    
168<script type="text/javascript" src="dist/directives-8530a59fb5.js"></script>
168
169
170    <!-- Bootstrap -->
171    
171<script type="text/javascript" src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
171
172    <!-- Angular Bootstrap -->
173    
173<script type="text/javascript" src="js/vendor/ui-bootstrap-tpls-0.11.0.min.js"></script>
173
174    <!-- Paypal -->
175    
175<script type="text/javascript" src="https://www.paypalobjects.com/api/checkout.js"></script>
175
176    <!-- 
176<script type="text/javascript" src="//www.paypalobjects.com/api/checkout.js"></script>
176 -->
177    <!-- 
177<script type="text/javascript" src="https://www.paypalobjects.com/js/external/dg.js"></script>
177 -->
178    <!-- nice theme for scroll -->
179    <!-- 
179<script type="text/javascript" src="js/vendor/grayscale.js"></script>
179 -->
180    <!-- Lightbox blue imp gallery -->
181    
181<script type="text/javascript" src="js/vendor/jquery.blueimp-gallery.min.js"></script>
181
182    
182<script type="text/javascript" src="js/vendor/ng-table.min.js"></script>
182
183    
183<script type="text/javascript" src="js/vendor/classie.js"></script>
183
184    
184<script type="text/javascript" src="js/vendor/jquery.slimscroll.min.js"></script>
184
185    
185<script type="text/javascript" src="js/vendor/jquery.fullPage.min.js"></script>
185
186    <!-- 
186<script type="text/javascript" src="js/vendor/app.min.js" ></script>
186 -->
187    
187<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.7.0/underscore-min.js"></script>
187
188    
188<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.1/moment.min.js"></script>
188
189    
189<script type="text/javascript" src="js/vendor/html2canvas.js"></script>
189
190
191    
191<script type='text/javascript' src='partials/components/galleries/unite/js/unitegallery.min.js'></script>
191
192    
192<script type='text/javascript' src='partials/components/galleries/unite/themes/tiles/ug-theme-tiles.js'></script>
192
193    
193<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.4.1/jspdf.min.js"></script>
193
194
195    
195<script src="https://cdn.datatables.net/1.11.3/js/jquery.dataTables.min.js"></script>
195
196    
196<script src="https://cdn.datatables.net/buttons/2.0.1/js/dataTables.buttons.min.js"></script>
196
197    
197<script src="https://cdn.datatables.net/buttons/2.0.1/js/buttons.html5.min.js"></script>
197
198
199    
199<script type="text/javascript">
200    var userId = null;
201
202    $(document).on("click", "a, button", function() {
203        if (!userId) {
204            userId = $('#user_id_span').html();
205        }
206        mixpanel.identify(userId);
207        mixpanel.track("Click", {"user": userId});
208    });
209
210    </script>
210
211
212    
212<script type="text/javascript">
213    var getCanvas; // global variable
214    var doc;
215    function takeHighResScreenshot(srcEl, destIMG, scaleFactor) {
216        // Save original size of element
217        var originalWidth = srcEl.offsetWidth;
218        var originalHeight = srcEl.offsetHeight;
219        // Force px size (no %, EMs, etc)
220        srcEl.style.width = originalWidth + "px";
221        srcEl.style.height = originalHeight + "px";
222
223        // Position the element at the top left of the document because of bugs in html2canvas. The bug exists when supplying a custom canvas, and offsets the rendering on the custom canvas based on the offset of the source element on the page; thus the source element MUST be at 0, 0.
224        // See html2canvas issues #790, #820, #893, #922
225        srcEl.style.position = "absolute";
226        srcEl.style.top = "0";
227        srcEl.style.left = "0";
228
229        // Create scaled canvas
230        var scaledCanvas = document.createElement("canvas");
231        scaledCanvas.width = originalWidth * scaleFactor;
232        scaledCanvas.height = originalHeight * scaleFactor;
233        scaledCanvas.style.width = originalWidth + "px";
234        scaledCanvas.style.height = originalHeight + "px";
235        var scaledContext = scaledCanvas.getContext("2d");
236        scaledContext.scale(scaleFactor, scaleFactor);
237
238        html2canvas(srcEl, { canvas: scaledCanvas })
239        .then(function(canvas) {
240            destIMG.src = canvas.toDataURL("image/png");
241            srcEl.style.display = "none";
242        });
243    };
244
245    function downloadpdfbutton() {
246        var src = document.getElementById("invoice_id");
247        var img = document.getElementById("previewImage");
248        // takeHighResScreenshot(src, img, 2); // This time we provide desired scale factor directly, no more messing with DPI
249
250        var element = $("#invoice_id"); // global variable
251
252        var desired = $('#downloadpdfbutton').data('id').replace(/[^\w\s]/gi, '').replace(/ /g,"_");;
253        html2canvas(element, {
254            onrendered: function(canvas) {
255                $("#previewImage").append(canvas);
256                // getCanvas = canvas;
257                var imgageData = canvas.toDataURL("image/png");
258                var width = (canvas.width - 20) || 730;
259                var height = (canvas.height + 10) || 700;
260                // console.log(canvas.width + " " + canvas.height);
261                doc = new jsPDF('', 'mm', [width, height]);
262                // var imgWidth = 290;
263                // var imgHeight = canvas.height * imgWidth / canvas.width;
264
265                // var newData = imgageData.replace(/^data:image\/png/, "data:application/octet-stream");
266                // $("#previewpdfbutton").attr("download", "invoice.png").attr("href", newData);
267                doc.addImage(imgageData, 'png', 0, 0, width, height);
268                // doc.addImage(imgageData, 'PNG', 0, 0, imgWidth, imgHeight);
269                doc.save('Invoice_'+desired+'.pdf');
270            }
271        });
272    }
273
274    // function clickdownload() {
275    // }
276    </script>
276
277    <!--     
277<script type="text/javascript" src="js/vendor/imagesloaded.pkgd.min.js"></script>
277
278    
278<script type="text/javascript" src="js/vendor/masonry.pkgd.min.js"></script>
278
279 -->
280    <!--script type="text/javascript" src="js/vendor/bootstrap-image-gallery.min.js"></script>
280
281    
281<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script-->
282    <!-- Google analytics -->
283    
283<script type="text/javascript">
vendor: 477 bytes, lines 283-296
283
284    (function(i, s, o, g, r, a, m) {
285        i['GoogleAnalyticsObject'] = r;
286        i[r] = i[r] || function() {
287            (i[r].q = i[r].q || []).push(arguments)
288        }, i[r].l = 1 * new Date();
289        a = s.createElement(o),
290            m = s.getElementsByTagName(o)[0];
291        a.async = 1;
292        a.src = g;
293        m.parentNode.insertBefore(a, m)
294    })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
295
296    ga('create', '
296UA-54048602-2
vendor: 46 bytes, lines 296-298
296', 'auto');
297    ga('send', 'pageview');
298    
298</script>
298
299
300    <!-- Hotjar -->
301    
301<script>
vendor: 105 bytes, line 301
301 (function(h,o,t,j,a,r){ h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)}; h._hjSettings={hjid:
301817637
vendor: 222 bytes, line 301
301,hjsv:6}; a=o.getElementsByTagName('head')[0]; r=o.createElement('script');r.async=1; r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv; a.appendChild(r); })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv='); 
301</script>
301
302
303    
303<script type="text/javascript">
304    // Include the UserVoice JavaScript SDK (only needed once on a page)
305    UserVoice = window.UserVoice || [];
306    (function() {
307        var uv = document.createElement('script');
308        uv.type = 'text/javascript';
309        uv.async = true;
310        uv.src = '//widget.uservoice.com/6QFkfyUcgmAbe2fcJl3Yg.js';
311        var s = document.getElementsByTagName('script')[0];
312        s.parentNode.insertBefore(uv, s)
313    })();
314
315    //
316    // UserVoice Javascript SDK developer documentation:
317    // https://www.uservoice.com/o/javascript-sdk
318    //
319
320    // Set colors
321    UserVoice.push(['set', {
322        accent_color: '#808283',
323        trigger_color: 'white',
324        trigger_background_color: 'rgba(46, 49, 51, 0.6)'
325    }]);
326
327    // Identify the user and pass traits
328    // To enable, replace sample data with actual user traits and uncomment the line
329    UserVoice.push(['identify', {
330        //email:      '[email protected]', // User’s email address
331        //name:       'John Doe', // User’s real name
332        //created_at: 1364406966, // Unix timestamp for the date the user signed up
333        //id:         123, // Optional: Unique id of the user (if set, this should not change)
334        //type:       'Owner', // Optional: segment your users by type
335        //account: {
336        //  id:           123, // Optional: associate multiple users with a single account
337        //  name:         'Acme, Co.', // Account name
338        //  created_at:   1364406966, // Unix timestamp for the date the account was created
339        //  monthly_rate: 9.99, // Decimal; monthly rate of the account
340        //  ltv:          1495.00, // Decimal; lifetime value of the account
341        //  plan:         'Enhanced' // Plan name for the account
342        //}
343    }]);
344
345    // Add default trigger to the bottom-right corner of the window:
346    UserVoice.push(['addTrigger', {
347        mode: 'contact',
348        trigger_position: 'bottom-right'
349    }]);
350
351    // Or, use your own custom trigger:
352    //UserVoice.push(['addTrigger', '#id', { mode: 'contact' }]);
353
354    // Autoprompt for Satisfaction and SmartVote (only displayed under certain conditions)
355    UserVoice.push(['autoprompt', {}]);
356    </script>
356
357    
357<script type="text/javascript">
358        function setCookie(key, value) {
359            var expires = new Date();
360            expires.setTime(expires.getTime() + (365 * 24 * 60 * 60 * 1000));
361            document.cookie = key + '=' + value + ';expires=' + expires.toUTCString();
362        }
363
364        function getCookie(key) {
365            var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)');
366            return keyValue ? keyValue[2] : null;
367        }
368    </script>
368
369
370</body>
371
372</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.