Free Storyboarding Software — Online Storyboard Creator | StoryboardThat

Web Name: Free Storyboarding Software — Online Storyboard Creator | StoryboardThat

WebSite: http://www.storyboardthat.com

ID:257749

Keywords:

Software,Storyboarding,Free,Online

Description:


"; } else { try { body = await ajaxError.response.text(); } catch (err) { body = ""; } } responseDetails = stringifyAnyObject({ body: body, ok: ajaxError.response.ok, redirected: ajaxError.response.redirected, status: ajaxError.response.status, statusText: ajaxError.response.statusText, type: ajaxError.response.type, url: ajaxError.response.url }); } // If ajaxSettings is not a string, jsonify it. let ajaxSettings = { ...ajaxError.settings } ?? "{}"; // ensure ajaxSettings is defined // Convert body to just a bodySize field ajaxSettings.bodySize = ajaxSettings.body?.length ?? ajaxSettings.body?.size ?? 0; delete ajaxSettings.body; // Stringify the settings for the existing logging system :( if (!(typeof ajaxSettings === 'string' || ajaxSettings instanceof String)) { //delete ajaxSettings.data; // until we have something that can handle lots of data ajaxSettings = JSON.stringify(objectify(ajaxSettings)); } // Create the actual message object const ajaxErrorMessageObject = { ...ajaxError }; ajaxErrorMessageObject.requestDetails = ajaxSettings; ajaxErrorMessageObject.responseDetails = responseDetails; delete ajaxErrorMessageObject.settings; // If theres an innerexception, include that here. if (ajaxError.innerException != null) { ajaxErrorMessageObject.stack += "---caused by ---\n" + (ajaxError.innerException.message ?? "") + "\n" + ajaxError.innerException.stack; } var op = EscapeHTML(JSON.stringify(objectify(ajaxErrorMessageObject))); try { if (op.indexOf("User not logged in") >= 0) { return; } } catch (e) { } const header = "ajax: " + (ajaxError.settings?.caller ?? ajaxError.settings?.url ?? ""); try { var errorData = { message: (ajaxError.message ?? "Response not OK") + "\n" + op, stack: GetTrimmedCallStack(ajaxError.stack) }; if (errorData.message.indexOf('GetCharacterPositionsAsync') >= 0) { errorData.stack = JSON.parse(JSON.parse(errorData.message).responseDetails).status + ' ' + JSON.parse(JSON.parse(errorData.message).requestDetails).url; } this.logErrorMessage(header, errorData); } catch (e) { this.logErrorMessage(header + " failed to log error", e); } } catch (e) { console.trace("Log Ajax Error failed", e); } }; // Should be logErrorMessageAsync, for future refactoring // MUST NOT THROW. All errors must be caught and processed within. this.logErrorMessage = async function (method, error) { try { let errorForKey = error; if (errorForKey instanceof AjaxError) { delete errorForKey.uid; } var key = (method + JSON.stringify(objectify(errorForKey))).hashCode(); //console.log(method + " " + error) if (error == null) { error = new Object(); error.message = ""; error.stack = GetTrimmedCallStack(); } else if (typeof error == 'string' || error instanceof String) { let errorString = error; error = new Object(); error.message = errorString; error.stack = GetTrimmedCallStack(); } /*try { if (error.message != null && error.message.length > 1024) { error.message = error.message.substring(0, 1000); } } catch (e) { }*/ var prefix = ""; var href = window.location.hostname.toLowerCase(); try { if (href.indexOf("//www.storyboardthat.com") == -1) { var subdomain = href.match(/^(.*?).storyboardthat.com$/); prefix = "[" + subdomain[1] + "]"; } } catch (e) { console.trace("Warning: Failed to get client version", JSON.parse(JSON.stringify(objectify(e)))); prefix = "[" + (href || "") + "]"; // denotes its not prod, but there was an error figuring out what it was } method = prefix + "v" + SvnRevision + " - " + method; let memoryInfo = (window.performance?.memory == null) ? null : { jsHeapSizeLimit: window.performance.memory.jsHeapSizeLimit, totalJSHeapSize: window.performance.memory.totalJSHeapSize, usedJSHeapSize: window.performance.memory.usedJSHeapSize }; var errorMessage = error.message ?? ""; try { errorMessage += "\r\n Scripts: \r\n"; errorMessage += GetScripts(); errorMessage += "\r\n PageActive: " + (isPageActive() ?? "Unknown"); errorMessage += "\r\n Memory Estimate: " + (JSON.stringify(memoryInfo ?? "Unavailable")); } catch (e) { } var postData = new Object(); postData.Url = window.location.href; postData.correlationId = _correlationId; postData.browserCorrelationId = _browserCorrelationId; postData.Method = method; postData.ErrorMessage = errorMessage; postData.StackTrace = error.stack; _lastErrorMessage = JSON.stringify(objectify(postData)); if (IgnoreError(method, errorMessage, error.stack)) return; //var extraDebug = false; //if (window.ExtraDebug ) // Display on the console if we're not sending these to the server (or we're ExtraDebugging) if (!LogErrors || window.ExtraDebug == true) { let errorObj = JSON.parse(JSON.stringify(objectify(error))); errorObj.originalObject = error; let postDataObj = JSON.parse(JSON.stringify(objectify(postData))); postDataObj.originalObject = postData; console.error("Ajax Error:", errorObj, postDataObj); } // Don't send to the server if we've already done it before if (loggedErrors.hasOwnProperty(key)) { return; } // record the error so we do not duplicate sending it ot the server. loggedErrors[key] = true; // We don't need to log if api fails here, may end up creating accidental endless loop, being the logging method and all... try { return logFunctionAsync(SbtApiServer + "/logstoryboardjserror2", postData, null); } catch (e) { // Ignore logging errors } } catch (e) { console.trace("Log Error Message failed", e); } }; /// Private functions function GetScripts() { var scriptList = ""; var scripts = document.scripts; for (var i = 0; i < scripts.length; i++) { if (scripts[i].src.indexOf("storyboardthat.com") > 0 || scripts[i].src.indexOf("google-analytics.com") > 0 || scripts[i].src.indexOf("ajax.googleapis.com") > 0 || scripts[i].src.indexOf("jquery.com") > 0 ) { continue; } if (scripts[i].src == "") { continue; } else { scriptList += scripts[i].src + " " + scripts[i].crossOrigin + "\r\n"; } } return scriptList.trim(); } function IgnoreError(method, errorMessage, stack) { try { if (method != null && method.indexOf("IgnoreError") >= 0) return false; if (errorMessage != null) { errorMessage = errorMessage.toLowerCase(); // This is UGH-585 // Checking for "TypeError: Cannot set property 'install' of undefined at: 1: 84 at: 1: 91 // Means the user has adware and the adware is throwing an error if (errorMessage.indexOf("cannot set property 'install' of undefined") >= 0) { if (stack != null) { if (stack.indexOf("1:84") >= 0) return true; } } } } catch (e) { //if this goes bad, infinite loop this.logErrorMessage("IgnoreError", e); } return false; } async function logFunctionAsync(url, postData, failCallback) { // Do not log failures here; they will be propagated up. let body = new URLSearchParams(); for (let key in postData) { body.append(key, postData[key]); } let bodyString = body.toString(); // Don't post an empty body. if (bodyString == "") { return; } // If we're not logging errors, we're done, as beyond this point we're going to be sending the data to the server if (!LogErrors) { console.log("Logging disabled, but log would have looked like...[" + bodyString + "]"); return; } return new Ajax(url, { method: 'POST', body: bodyString, headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' } }) .logAjaxErrors(false) // do not log ajax errors while trying to log errors .asResponseAsync() .catch(err => { failCallback?.(err); }); } } }; let _browserCorrelationId = GetCookieParameterByName('BID'); if (_browserCorrelationId == null) { _browserCorrelationId = logger.generateCorrelationId(); SetCookie('BID', _browserCorrelationId, 365); } let _correlationId = logger.generateCorrelationId(); let _lastErrorMessage = ""; return logger;})();
Resources Pricing Create a Storyboard My Storyboards Log In Log Out Register

Education

Specialized Edition

Best Option for Teachers, Schools, & Districts

Designed for 21st Century Students

Over 3,000 Lesson Plans and ActivitiesSecure - FERPA, CCPA, COPPA, & GDPR CompliantCross-Curriculum Application

Storyboard That Supports Rostering


14-Day Free Trial

FREE TRIALLearn More

Personal

Edition

Best Option for Creating Storyboards for Small Projects

Designed for YOU

Graphic Novels and ComicsProjects and Planning Posters, Video Planning and More!

Try for Free

You can create two storyboards per week for free, or upgrade any time for more advanced features. (Learn More About Upgrading)

Create a StoryboardUnlock All Features (Buy)

Business

Specialized Edition

Best Option for Professional/Corporate Use (Especially with Teams)

Designed for Forward-Thinking Teams

Over 200 Templates and Business ResourcesSecure - Enterprise-Class File EncryptionCollaboration Within Multi-User Accounts

14-Day Free Trial

FREE TRIALLearn More

Pricing Options For Storyboard That

Free
Best for Light Usage
Try Now
For Fun
Best for Individual Use

Starting at $9.99

Buy Now!
For Teachers
Designed for Teachers, Schools, and Districts

Starting at $9.99

FREE TRIALLearn More
For Work
Business Edition

Starting at $24.99

FREE TRIALLearn More
Create a Storyboard
No Download, No Credit Card, and No Login Needed to Try!
Create a Storyboard

TAGS:Software Storyboarding Free Online

<<< Thank you for your visit >>>

Websites to related :
Free Website Monitoring (5 x 1-m

   PartnersContactLanguageLogin HomeMonitoringFeaturesHow It WorksMonitoring NetworkSMS & Email NotificationPush NotificationQuick TestSign UpPricingR

Webfluentia

   Influencers

QuickPages - Free Landing Page G

   QuickPages Toggle navigation

Mozenda - Scalable Web Data Extr

  Mozenda is now a Dexi brand. Click here to learn more. >>XMozendaSoftwareCloud-HostedOn-PremiseUse CasesIntegrationsServicesData HarvestingData Wrangl

Secure Video Conferencing Softwa

  Solutions ProductsVideo Conferencing Webinar IndustriesEducation HR / Interviews Telemedicine Health Care Lawfirms ClassroomFeatures Main Features Wh

ReviewTrackers | Online Reputati

   ReviewTrackers.com is intended for use with Javascript. Please consider enabling it for a smoother website experience. skip

LanderApp | Landing page softwar

   Products Landing pages A/B Testing Integrations Features Templates Product and Services Webinar and E

Inspyder | Web Crawling and SEO

  PRODUCTS Backlink MonitorInSiteOrFindPower SearchRank ReporterSitemap CreatorWeb2DiskBUNDLESFREE TOOLS HTTP Header ViewerSitemap ValidatorURL/HTML Enc

Dasheroo - Free Business Dashboa

   Skip to content HomeAboutPortfolioContact Navigation Menu Navigation Menu HomeAboutPortfolioContactDasheroo has merged with FreshL

Online file merger(Free & Secu

  .langImg {background-image: url(/lang/langImg.png);background-repeat: no-repeat;display: block;float: left;} Language العربية český Deutsc

ads

Hot Websites