doctype html html(itemscope, itemtype='http://schema.org/Product') block vars head script(type="text/javscript"). // Stop superfish from loading window.similarproducts = true -if (typeof(gaExperiments) != "undefined") |!{gaExperiments} -if (typeof(title) == "undefined") title ShareLaTeX, the Online LaTeX Editor -else title= translate(title) + ' - ShareLaTeX, '+translate("online_latex_editor") link(rel="icon", href="/favicon.ico") link(rel='stylesheet', href='/stylesheets/style.css?fingerprint='+fingerprint('/stylesheets/style.css')) link(href="//netdna.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css",rel="stylesheet") if settings.i18n.subdomainLang each subdomainDetails in settings.i18n.subdomainLang link(rel="alternate", href=subdomainDetails.url+currentUrl, hreflang=subdomainDetails.lngCode) meta(itemprop="name", content="ShareLaTeX, the Online LaTeX Editor") -if (typeof(meta) == "undefined") meta(itemprop="description", name="description", content="An online LaTeX editor that's easy to use. No installation, real-time collaboration, version control, hundreds of LaTeX templates, and more.") -else meta(itemprop="description", name="description" , content=meta) meta(itemprop="image", name="image", content="https://www.sharelatex.com/favicon.ico") - if (typeof(gaToken) != "undefined") script(type='text/javascript'). (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', '#{gaToken}', 'sharelatex.com'); ga('send', 'pageview'); - else script(type='text/javascript'). window.ga = function() { console.log("Sending to GA", arguments) }; script(type="text/javascript"). window.csrfToken = "#{csrfToken}"; block scripts script(src="#{jsPath}libs/jquery-1.11.1.min.js") script(src="#{jsPath}libs/angular-1.3.0-beta.14.min.js") - if (typeof(sentrySrc) != "undefined") - if (sentrySrc.match(/^([a-z]+:)?\/\//i)) script(src="#{sentrySrc}") - else script(src="#{jsPath}libs/#{sentrySrc}") - if (typeof(sentrySrc) != "undefined") script(type="text/javascript"). if (typeof(Raven) != "undefined" && Raven.config) { Raven.config("#{sentryPublicDSN}", { // Ignore list based off: https://gist.github.com/1878283 ignoreErrors: [ 'DealPly', // Random plugins/extensions 'top.GLOBALS', // See: http://blog.errorception.com/2012/03/tale-of-unfindable-js-error.html 'originalCreateNotification', 'canvas.contentDocument', 'MyApp_RemoveAllHighlights', 'http://tt.epicplay.com', 'Can\'t find variable: ZiteReader', 'jigsaw is not defined', 'ComboSearch is not defined', 'http://loading.retry.widdit.com/', 'atomicFindClose', // Facebook borked 'fb_xd_fragment', // ISP optimizing proxy - `Cache-Control: no-transform` seems to reduce this. (thanks @acdha) // See http://stackoverflow.com/questions/4113268/how-to-stop-javascript-injection-from-vodafone-proxy 'bmi_SafeAddOnload', 'EBCallBackMessageReceived', // See http://toolbar.conduit.com/Developer/HtmlAndGadget/Methods/JSInjection.aspx 'conduitPage' ], ignoreUrls: [ // Facebook flakiness /graph\.facebook\.com/i, // Facebook blocked /connect\.facebook\.net\/en_US\/all\.js/i, // Woopra flakiness /eatdifferent\.com\.woopra-ns\.com/i, /static\.woopra\.com\/js\/woopra\.js/i, // Chrome extensions /extensions\//i, /^chrome:\/\//i, // Other plugins /127\.0\.0\.1:4001\/isrunning/i, // Cacaoweb /webappstoolbarba\.texthelp\.com\//i, /metrics\.itunes\.apple\.com\.edgesuite\.net\//i /a\.disquscdn\.com/i /platform\.twitter\.com/i ], shouldSendCallback: function(data) { // only send a fraction of errors var sampleRate = 1.00; return (Math.random() <= sampleRate); } // we highly recommend restricting exceptions to a domain in order to filter out clutter // whitelistUrls: ['example.com/scripts/'] }).install(); } - if (typeof(user) != "undefined" && typeof (user.email) != "undefined") script(type="text/javascript"). if (typeof(Raven) != "undefined" && Raven.setUserContext) { Raven.setUserContext({email: '#{user.email}'}); } script. window.sharelatex = { siteUrl: '#{settings.siteUrl}', jsPath: '#{jsPath}' }; window.systemMessages = !{JSON.stringify(systemMessages).replace(/\//g, '\\/')}; window.ab = {} - if (typeof(settings.algolia) != "undefined") script. window.sharelatex.algolia = { app_id:'#{settings.algolia.app_id}', api_key:'#{settings.algolia.read_only_api_key}', indexes:!{JSON.stringify(settings.algolia.indexes)} } - if (typeof(settings.templates) != "undefined") script. window.sharelatex.templates = { user_id : '!{settings.templates.user_id}', cdnDomain : '!{settings.templates.cdnDomain}', indexName : '!{settings.templates.indexName}' } body - if(typeof(suppressSystemMessages) == "undefined") .system-messages( ng-cloak ng-controller="SystemMessagesController" ) .system-message( ng-repeat="message in messages" ng-controller="SystemMessageController" ng-hide="hidden" ) a(href, ng-click="hide()").pull-right × .system-message-content(ng-bind-html="htmlContent") include translations/translation_message - if(typeof(suppressNavbar) == "undefined") include layout/navbar block content div(ng-controller="AbTestController") - if(typeof(suppressFooter) == "undefined") include layout/footer - if (typeof(lookingForScribtex) != "undefined" && lookingForScribtex) span(ng-controller="ScribtexPopupController") include scribtex-modal - if(typeof(suppressFooter) == "undefined") script(type='text/javascript'). window.requirejs = { "urlArgs" : "fingerprint=#{fingerprint(jsPath + 'main.js')}-#{fingerprint(jsPath + 'libs.js')}", "paths" : { "moment": "libs/moment-2.7.0" } }; script( data-main=jsPath+'main.js', baseurl=jsPath, src=jsPath+'libs/require.js?fingerprint='+fingerprint(jsPath + 'libs/require.js') ) - if (typeof(tenderUrl) != "undefined") script(src="https://#{tenderUrl}/tender_widget.js" ) script(type="text/javascript"). Tender = { hideToggle: true, widgetToggles: $(".js-tender-widget"), category: "questions" };