[{"data":1,"prerenderedAt":883},["ShallowReactive",2],{"blog-post-\u002Fblog\u002Fcloudflare-turnstile-on-netlify-instead-of-netlify-forms-recaptcha":3,"blog-nav-posts":21},{"id":4,"title":5,"author":6,"body":6,"content":7,"description":6,"extension":8,"image":6,"legacyUrl":6,"markdown":9,"meta":10,"navigation":9,"path":11,"publishedAt":12,"seo":13,"seoDescription":14,"slug":6,"stem":15,"tags":16,"updatedAt":19,"__hash__":20},"blog\u002Fblog\u002Fcloudflare-turnstile-on-netlify-instead-of-netlify-forms-recaptcha.json","Cloudflare Turnstile on Netlify: replacing the Netlify Forms reCAPTCHA",null,"Netlify Forms only supports reCAPTCHA v2 (`data-netlify-recaptcha=\"true\"`). There is no Turnstile option. To use Cloudflare Turnstile you drop Netlify Forms for that form and verify the token yourself in a Netlify Function, which then emails you the submission.\n\nWorks with any framework. Nuxt notes are at the end.\n\n## 1. Create the Turnstile widget\n\nYour DNS does not need to be on Cloudflare.\n\nWe never opened the dashboard for this. [`cf`](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcf\u002F), Cloudflare's new CLI for the whole public API, created the widget in one command, and that was genuinely cool:\n\n```bash\nnpm install --global cf\ncf auth login\ncf turnstile widgets create --body '{\"name\":\"contact-form\",\"mode\":\"invisible\",\"domains\":[\"example.com\",\"www.example.com\",\"localhost\"]}'\n```\n\nThe JSON it returns has both keys. The widget mode goes in `--body` because `cf` already uses `--mode` as a global flag, so there is no separate flag for it. Add `--dry-run` first if you want to see the exact API request before it runs.\n\nPrefer clicking? Cloudflare dashboard, Turnstile, Add widget gets you the same widget. Either way:\n\n- **Mode:** Invisible if you never want a checkbox. Managed if you're fine with one occasionally.\n- **Hostnames:** your domain, `www.` if you use it, and `localhost` (any port works).\n\nCopy the site key (public, goes in your page) and the secret key (server only).\n\n## 2. Add the function\n\nCreate `netlify\u002Ffunctions\u002Fcontact.mts`. Netlify deploys anything in that folder automatically, even on a static site. This one uses Resend to send the email. Swap that `fetch` for any other sender.\n\n```ts\nconst SITEVERIFY_URL = \"https:\u002F\u002Fchallenges.cloudflare.com\u002Fturnstile\u002Fv0\u002Fsiteverify\";\nconst EMAIL_RE = \u002F^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\u002F;\nconst ALLOWED_HOSTNAMES = new Set([\"example.com\", \"www.example.com\"]);\n\ntype TurnstileResult = {\n  success: boolean;\n  hostname?: string;\n  \"error-codes\"?: string[];\n};\n\nfunction json(status: number, body: Record\u003Cstring, unknown>): Response {\n  return new Response(JSON.stringify(body), {\n    status,\n    headers: { \"Content-Type\": \"application\u002Fjson\", \"Cache-Control\": \"no-store\" },\n  });\n}\n\nfunction escapeHtml(value: string): string {\n  return value\n    .replace(\u002F&\u002Fg, \"&amp;\")\n    .replace(\u002F\u003C\u002Fg, \"&lt;\")\n    .replace(\u002F>\u002Fg, \"&gt;\")\n    .replace(\u002F\"\u002Fg, \"&quot;\");\n}\n\nfunction field(form: FormData, name: string, maxLength: number): string {\n  return String(form.get(name) ?? \"\").trim().slice(0, maxLength);\n}\n\nasync function verifyTurnstile(token: string, secret: string, ip?: string): Promise\u003CTurnstileResult> {\n  const params = new URLSearchParams({ secret, response: token });\n  if (ip) {\n    params.set(\"remoteip\", ip);\n  }\n  const response = await fetch(SITEVERIFY_URL, { method: \"POST\", body: params });\n  if (!response.ok) {\n    return { success: false, \"error-codes\": [`siteverify-http-${response.status}`] };\n  }\n  return (await response.json()) as TurnstileResult;\n}\n\nexport default async (req: Request, context: { ip?: string }) => {\n  if (req.method !== \"POST\") {\n    return json(405, { ok: false, error: \"Method not allowed.\" });\n  }\n\n  const secret = process.env.TURNSTILE_SECRET_KEY;\n  const resendKey = process.env.RESEND_API_KEY;\n  const to = process.env.CONTACT_TO_EMAIL;\n  if (!secret || !resendKey || !to) {\n    console.error(\"[contact] Missing TURNSTILE_SECRET_KEY, RESEND_API_KEY or CONTACT_TO_EMAIL\");\n    return json(500, { ok: false, error: \"The contact form is not configured.\" });\n  }\n\n  let form: FormData;\n  try {\n    form = await req.formData();\n  } catch {\n    return json(400, { ok: false, error: \"Invalid submission.\" });\n  }\n\n  \u002F\u002F Honeypot: report success so the bot learns nothing.\n  if (field(form, \"bot-field\", 200)) {\n    return json(200, { ok: true });\n  }\n\n  const token = field(form, \"cf-turnstile-response\", 2048);\n  if (!token) {\n    return json(400, { ok: false, error: \"Verification did not complete. Please try again.\" });\n  }\n\n  const result = await verifyTurnstile(token, secret, context?.ip);\n  if (!result.success) {\n    console.warn(\"[contact] Turnstile rejected:\", result[\"error-codes\"]);\n    return json(403, { ok: false, error: \"Verification failed. Please refresh the page and try again.\" });\n  }\n\n  \u002F\u002F `netlify dev` sets NETLIFY_DEV, so localhost tokens only pass locally.\n  const allowLocalhost = process.env.NETLIFY_DEV === \"true\" && result.hostname === \"localhost\";\n  if (result.hostname && !allowLocalhost && !ALLOWED_HOSTNAMES.has(result.hostname)) {\n    return json(403, { ok: false, error: \"Verification failed.\" });\n  }\n\n  const name = field(form, \"name\", 200);\n  const email = field(form, \"email\", 320);\n  const message = field(form, \"message\", 10000);\n  if (name.length \u003C 2 || !EMAIL_RE.test(email) || message.length \u003C 10) {\n    return json(400, { ok: false, error: \"Please complete all required fields correctly.\" });\n  }\n\n  const sent = await fetch(\"https:\u002F\u002Fapi.resend.com\u002Femails\", {\n    method: \"POST\",\n    headers: {\n      Authorization: `Bearer ${resendKey}`,\n      \"Content-Type\": \"application\u002Fjson\",\n    },\n    body: JSON.stringify({\n      from: \"Contact Form \u003Ccontact@example.com>\",\n      to: [to],\n      reply_to: email,\n      subject: `Contact form: ${name.replace(\u002F[\\r\\n]+\u002Fg, \" \")}`,\n      text: `Name: ${name}\\nEmail: ${email}\\n\\n${message}`,\n      html: `\u003Cp>\u003Cstrong>Name:\u003C\u002Fstrong> ${escapeHtml(name)}\u003Cbr>\u003Cstrong>Email:\u003C\u002Fstrong> ${escapeHtml(email)}\u003C\u002Fp>\n             \u003Cp style=\"white-space:pre-wrap\">${escapeHtml(message)}\u003C\u002Fp>`,\n    }),\n  });\n\n  if (!sent.ok) {\n    console.error(\"[contact] Resend failed:\", sent.status, await sent.text());\n    return json(502, { ok: false, error: \"Your message could not be sent. Please try again shortly.\" });\n  }\n\n  return json(200, { ok: true });\n};\n```\n\nChange `ALLOWED_HOSTNAMES` and the `from` address to yours. The `from` domain must be verified in Resend.\n\n## 3. Set the environment variables\n\nNetlify, Site configuration, Environment variables:\n\n- `TURNSTILE_SECRET_KEY`\n- `RESEND_API_KEY`\n- `CONTACT_TO_EMAIL`\n\nInclude the Local development context if you want to test with `netlify dev`.\n\n## 4. Update the form\n\nRemove `data-netlify`, `data-netlify-recaptcha` and `netlify-honeypot` from the form. If you leave them, Netlify keeps accepting direct POSTs that never touch Turnstile.\n\nThen render the widget and post to the function:\n\n```html\n\u003Cform id=\"contact\">\n  \u003Cinput name=\"name\" required \u002F>\n  \u003Cinput name=\"email\" type=\"email\" required \u002F>\n  \u003Ctextarea name=\"message\" required>\u003C\u002Ftextarea>\n  \u003Cinput name=\"bot-field\" style=\"display:none\" tabindex=\"-1\" autocomplete=\"off\" \u002F>\n  \u003Cdiv id=\"turnstile\">\u003C\u002Fdiv>\n  \u003Cbutton type=\"submit\">Send\u003C\u002Fbutton>\n  \u003Cp id=\"status\">\u003C\u002Fp>\n\u003C\u002Fform>\n\n\u003Cscript>\n  let token = \"\";\n  let widgetId = null;\n\n  window.onTurnstileLoad = () => {\n    widgetId = turnstile.render(\"#turnstile\", {\n      sitekey: \"YOUR_SITE_KEY\",\n      action: \"contact\",\n      \"refresh-expired\": \"auto\",\n      callback: (t) => {\n        token = t;\n      },\n      \"expired-callback\": () => {\n        token = \"\";\n      },\n      \"error-callback\": () => {\n        token = \"\";\n      },\n    });\n  };\n\n  function waitForToken(timeoutMs = 10000) {\n    const started = Date.now();\n    return new Promise((resolve) => {\n      const check = () => {\n        if (token) {\n          resolve(token);\n        } else if (Date.now() - started > timeoutMs) {\n          resolve(\"\");\n        } else {\n          setTimeout(check, 200);\n        }\n      };\n      check();\n    });\n  }\n\n  document.getElementById(\"contact\").addEventListener(\"submit\", async (e) => {\n    e.preventDefault();\n    const status = document.getElementById(\"status\");\n\n    const t = await waitForToken();\n    if (!t) {\n      status.textContent = \"Spam protection could not verify this browser. Refresh and try again.\";\n      return;\n    }\n\n    const body = new URLSearchParams(new FormData(e.target));\n    body.set(\"cf-turnstile-response\", t);\n\n    try {\n      const res = await fetch(\"\u002F.netlify\u002Ffunctions\u002Fcontact\", { method: \"POST\", body });\n      const result = await res.json().catch(() => ({}));\n      if (res.ok && result.ok) {\n        status.textContent = \"Thanks, your message is on its way.\";\n        e.target.reset();\n      } else {\n        status.textContent = typeof result.error === \"string\" ? result.error : \"Something went wrong. Please try again.\";\n      }\n    } finally {\n      token = \"\";\n      turnstile.reset(widgetId);\n    }\n  });\n\u003C\u002Fscript>\n\u003Cscript src=\"https:\u002F\u002Fchallenges.cloudflare.com\u002Fturnstile\u002Fv0\u002Fapi.js?render=explicit&onload=onTurnstileLoad\" async defer>\u003C\u002Fscript>\n```\n\n## 5. Test locally\n\n`nuxt dev`, `vite` and friends don't run Netlify Functions, so the POST 404s. Use the Netlify CLI instead:\n\n```bash\nnpx netlify-cli link\nnpx netlify-cli dev\n```\n\n`link` lets `dev` pull your environment variables from Netlify, so you don't need a local `.env`. Open `http:\u002F\u002Flocalhost:8888` in your normal browser and send a message.\n\nDon't test with an automated browser (Playwright and the like). Turnstile detects it and returns `XXXX.DUMMY.TOKEN.XXXX` or nothing.\n\n## 6. Check production\n\nAfter deploying, a forged token should get a 403:\n\n```bash\ncurl -X POST -d \"name=x\" https:\u002F\u002Fexample.com\u002F.netlify\u002Ffunctions\u002Fcontact\n# {\"ok\":false,\"error\":\"Verification did not complete. Please try again.\"}\n\ncurl -X POST \\\n  -d \"name=Probe&email=a@b.co&message=forged token probe&cf-turnstile-response=XXXX.DUMMY.TOKEN.XXXX\" \\\n  https:\u002F\u002Fexample.com\u002F.netlify\u002Ffunctions\u002Fcontact\n# HTTP 403 {\"ok\":false,\"error\":\"Verification failed. Please refresh the page and try again.\"}\n```\n\nIf the second call returns success, your function isn't calling siteverify.\n\n## Nuxt notes\n\nOnly the site key goes in `runtimeConfig.public`. Everything there ships to the browser, so a secret in there is a published secret. The function reads the secret from `process.env`.\n\n```ts\nruntimeConfig: {\n  public: {\n    TURNSTILE_SITE_KEY: process.env.TURNSTILE_SITE_KEY || \"\",\n  },\n},\n```\n\n`netlify dev` needs to know where Nuxt runs. Add a `netlify.toml`:\n\n```toml\n[dev]\n  command = \"npm run dev\"\n  targetPort = 3000\n  port = 8888\n  framework = \"#custom\"\n```\n\nA `server\u002Fapi` route won't work on a static `nuxt generate` deploy, which is why the handler is a Netlify Function.\n\n## Gotchas\n\n- **Tokens are single use and last 300 seconds.** Call `turnstile.reset()` after every submit, including failures, or retries always fail.\n- **Check the hostname.** Your widget allows `localhost`, so anyone can mint a valid token locally. The function rejects tokens from any other hostname except under `netlify dev`.\n- **Wait for the token.** A fast submitter can click Send before the invisible widget finishes. The client waits up to 10 seconds, then tells the user instead of failing silently.\n- **Only show your own error strings.** A platform 404 can return JSON with `error: true`, and your error box will literally say \"true\".\n- **You lose the Netlify Forms tab.** Submissions arrive by email instead. Resend's log is your record.\n","json",true,{},"\u002Fblog\u002Fcloudflare-turnstile-on-netlify-instead-of-netlify-forms-recaptcha","2026-10-01T16:00:00",{"title":5},"Netlify Forms only supports reCAPTCHA v2. How to put invisible Cloudflare Turnstile on a Netlify site with a Netlify Function, siteverify and Resend.","blog\u002Fcloudflare-turnstile-on-netlify-instead-of-netlify-forms-recaptcha",[17,18],"Tutorial","VueJs","2026-10-01T16:00:00.0000000Z","UdAyLL2WpW2-HNrQno3zQdoFL2ZIZI1sDAKdv1Ra_r0",[22,24,32,37,42,47,52,57,62,67,72,77,82,87,92,97,102,107,112,118,123,129,134,140,145,150,155,160,165,170,175,180,185,190,195,200,205,211,216,221,226,231,236,241,246,251,256,261,267,272,277,282,287,292,297,302,307,312,317,322,327,332,337,342,347,352,357,362,367,372,377,382,387,392,397,402,407,412,417,422,427,432,437,442,447,452,457,462,467,472,477,482,487,492,497,502,507,512,517,522,527,532,537,542,547,552,557,562,567,572,577,582,587,592,597,602,607,612,617,622,627,632,637,642,647,652,657,662,667,672,677,682,687,692,697,703,708,713,718,723,728,733,738,743,748,753,758,763,768,773,778,783,788,793,798,803,808,813,818,823,828,833,838,843,848,853,858,863,868,873,878],{"path":11,"title":5,"publishedAt":12,"tags":23},[17,18],{"path":25,"title":26,"publishedAt":27,"tags":28},"\u002Fblog\u002Ffixing-the-sitefinity-page-editor-drag-and-drop-experience","Why the Sitefinity page editor jumps when you drag a widget","2026-08-05T10:45:00",[17,29,30,31],"Fixes","Sitefinity","Rants",{"path":33,"title":34,"publishedAt":35,"tags":36},"\u002Fblog\u002Fsitefinity-search-not-finding-text-inside-pdf-powerpoint-excel","Sitefinity search can't find the words inside your PDFs, PowerPoints or spreadsheets","2026-07-14T09:20:00",[17,29,30],{"path":38,"title":39,"publishedAt":40,"tags":41},"\u002Fblog\u002Fvue-3-vite-8-tailwind-css-v4-on-sitefinity-cms-complete-setup-guide-with-code-splitting","Vue 3 + Vite 8 + Tailwind CSS v4 on Sitefinity CMS: Complete Setup Guide with Code Splitting","2026-03-19T19:44:00",[17,18],{"path":43,"title":44,"publishedAt":45,"tags":46},"\u002Fblog\u002Fsitefinity-mcp-server-ai-tools-for-your-cms","I Built an MCP Server for Sitefinity","2026-02-12T10:00:00.000Z",[17,30],{"path":48,"title":49,"publishedAt":50,"tags":51},"\u002Fblog\u002Fsitefinity-discover-formresponse-metafields-for-custom-export","Sitefinity Discover FormResponse MetaFields for custom export","2026-01-16T09:12:00.000Z",[17,30],{"path":53,"title":54,"publishedAt":55,"tags":56},"\u002Fblog\u002Fdirect-sql-access-to-sitefinity-dynamic-content-for-easy-poco-mapping","Direct SQL Access to Sitefinity Dynamic Content for Easy POCO Mapping","2025-08-15T14:28:00",[30],{"path":58,"title":59,"publishedAt":60,"tags":61},"\u002Fblog\u002Fkendoui-pricing-is-disjointed-from-reality-and-other-things","KendoUI pricing is disjointed from reality, and other things","2025-08-05T14:59:00",[31],{"path":63,"title":64,"publishedAt":65,"tags":66},"\u002Fblog\u002Fautomatically-correcting-semantic-headings-for-cms-content","Automatically Correcting Semantic Headings for CMS Content","2025-07-18T09:00:00",[],{"path":68,"title":69,"publishedAt":70,"tags":71},"\u002Fblog\u002Feasier-faster-sitefinity-contentlocations-api","Easier, Sitefinity ContentLocations API","2025-06-03T10:32:00",[17,30],{"path":73,"title":74,"publishedAt":75,"tags":76},"\u002Fblog\u002Fshowing-instructions-sitefinity-autogenerated-designers","Instructions for Sitefinity Autogenerated Designers","2025-03-10T12:04:58.788Z",[17,30],{"path":78,"title":79,"publishedAt":80,"tags":81},"\u002Fblog\u002Fnativescript-ios-simulator-laravel-api-error-the-certificate-for-this-server-is-invalid","Nativescript iOS Simulator Laravel API Error: The certificate for this server is invalid","2024-12-19T14:26:15.640Z",[17,29],{"path":83,"title":84,"publishedAt":85,"tags":86},"\u002Fblog\u002Finstall-unsupported-visual-studio-2022-extension-into-vs2022-arm","This extension is not installable on any currently installed products Visual Studio 2022 ARM","2024-02-29T00:52:53.302Z",[17,29],{"path":88,"title":89,"publishedAt":90,"tags":91},"\u002Fblog\u002Frunning-sitefinity-on-apple-silicon-with-parallels","Running Sitefinity on Apple Silicon with Parallels","2023-11-23T14:59:55.098Z",[17],{"path":93,"title":94,"publishedAt":95,"tags":96},"\u002Fblog\u002Fdefining-which-controller-action-or-json-route-to-post-to-when-theres-more-than-one-on-the-page","Defining which Controller Action or Json route to POST to when there's more than one on the page","2023-08-11T18:56:52.701Z",[17,30,29],{"path":98,"title":99,"publishedAt":100,"tags":101},"\u002Fblog\u002Ftimezone-conversion-from-sitefinity-odata-event-api-service","Timezone conversion from Sitefinity OData Event API Service","2023-04-13T19:08:48.349Z",[17,30],{"path":103,"title":104,"publishedAt":105,"tags":106},"\u002Fblog\u002Fhow-to-get-the-saved-controller-properties-for-a-widget-on-a-page","How to get the saved Controller properties for a widget on a page","2023-04-04T16:01:53.545Z",[17,30],{"path":108,"title":109,"publishedAt":110,"tags":111},"\u002Fblog\u002Funable-to-directly-link-to-a-backend-advanced-configuration-section","Unable to directly link to a backend Advanced Configuration Section","2023-03-17T16:44:12.109Z",[17,30],{"path":113,"title":114,"publishedAt":115,"tags":116},"\u002Fblog\u002Fhow-to-join-a-party-with-xbox-xcloud-and-not-get-the-ms-xbl-multiplayer-link-error","How to join a party with XBox xCloud and not get the ms-xbl-multiplayer link error","2022-12-27T21:48:01.644Z",[17,117],"Other",{"path":119,"title":120,"publishedAt":121,"tags":122},"\u002Fblog\u002Fauditing-page-permissions","Auditing page permissions","2022-11-16T14:07:18.061Z",[17,30],{"path":124,"title":125,"publishedAt":126,"tags":127},"\u002Fblog\u002Flaravel-is-better-than-sitefinity-for-small-projects","Laravel is better than Sitefinity for small projects","2022-08-19T14:20:29.093Z",[128,30],"Reviews",{"path":130,"title":131,"publishedAt":132,"tags":133},"\u002Fblog\u002Fadding-a-class-to-the-body-tag-when-a-widget-is-on-the-page","Adding a class to HTML when a custom widget is on the page","2022-04-07T11:42:59.789Z",[17,30],{"path":135,"title":136,"publishedAt":137,"tags":138},"\u002Fblog\u002Fcustom-function-validation-in-kendoui-spreadsheet","Custom Function Validation in KendoUI Spreadsheet","2021-12-08T14:20:23.396Z",[17,139],"KendoUI",{"path":141,"title":142,"publishedAt":143,"tags":144},"\u002Fblog\u002Fadding-telerik-reporting-v15-to-sitefinity-in-2021","Adding Telerik Reporting v15+ to Sitefinity in 2021","2021-11-26T16:36:51.711Z",[17,30,18,139],{"path":146,"title":147,"publishedAt":148,"tags":149},"\u002Fblog\u002Fuse-vuejs-with-sitefinity","Use VueJs with Sitefinity","2021-11-16T14:15:04.251Z",[17,18,30],{"path":151,"title":152,"publishedAt":153,"tags":154},"\u002Fblog\u002Fvuejs-upload-input-though-a-regular-form-postback","VueJs Upload Input though a regular form postback","2021-09-09T12:14:01.621Z",[17,18],{"path":156,"title":157,"publishedAt":158,"tags":159},"\u002Fblog\u002Fdownloading-a-file-through-a-login-page","Downloading a file through a login page","2021-08-05T14:27:59.581Z",[17,30],{"path":161,"title":162,"publishedAt":163,"tags":164},"\u002Fblog\u002Fsitefinity-anonymous-form-submissions","Sitefinity anonymous form submissions","2021-06-15T19:10:54.296Z",[17,30],{"path":166,"title":167,"publishedAt":168,"tags":169},"\u002Fblog\u002Fadding-metaproperties-like-opengraph-to-sitefinity-actionresult-routes","Adding MetaProperties like OpenGraph to ActionResult routes","2021-04-06T12:40:46.905Z",[17,30],{"path":171,"title":172,"publishedAt":173,"tags":174},"\u002Fblog\u002Fviewing-whats-in-your-sitefinity-sitemap","Viewing what's in your Sitefinity Sitemap","2021-03-25T13:41:01.367Z",[17,30],{"path":176,"title":177,"publishedAt":178,"tags":179},"\u002Fblog\u002Fsitefinity-controller-actionresult-not-routing-properly","Sitefinity Controller ActionResult not routing properly","2021-03-19T18:03:13.041Z",[29,30],{"path":181,"title":182,"publishedAt":183,"tags":184},"\u002Fblog\u002Fblocking-bottraffic-or-trafficbot-url-requests-from-jacking-up-your-google-analytics","Blocking bottraffic or trafficbot url requests from jacking up your Google Analytics","2021-02-04T19:15:06.784Z",[17,30],{"path":186,"title":187,"publishedAt":188,"tags":189},"\u002Fblog\u002Fcreate-a-scheduled-task-cron-job-in-sitefinity","Create a Scheduled Task\\Cron job in Sitefinity","2021-01-22T15:05:14.948Z",[17,30],{"path":191,"title":192,"publishedAt":193,"tags":194},"\u002Fblog\u002Fsitefinity-signing-certificate-not-configured","Sitefinity Signing certificate not configured","2021-01-08T13:44:06.598Z",[17,30],{"path":196,"title":197,"publishedAt":198,"tags":199},"\u002Fblog\u002Fbinding-sitefinity-form-field-to-remote-data","Populating a Sitefinity Form Field from a remote API","2020-09-29T18:03:07.941Z",[17,30],{"path":201,"title":202,"publishedAt":203,"tags":204},"\u002Fblog\u002Fexclude-pages-from-netlifys-sitemap-plugin","Exclude pages from netlifys sitemap plugin","2020-08-19T23:01:18.599Z",[17,18],{"path":206,"title":207,"publishedAt":208,"tags":209},"\u002Fblog\u002Ftailwindcss-current-responsive-size","Showing your Tailwindcss Responsive Breakpoint","2020-08-05T09:35:32.000Z",[17,210],"TailwindCss",{"path":212,"title":213,"publishedAt":214,"tags":215},"\u002Fblog\u002Fsitefinity-saml2-login","Configure Sitefinity with SAML2 Authentication","2020-07-06T23:27:17.9000000Z",[17],{"path":217,"title":218,"publishedAt":219,"tags":220},"\u002Fblog\u002Fdynamically-navigate-content-from-list-to-detail","Navigating from List to Detail no hardcoded routes","2020-06-23T19:43:37.8430000Z",[17,30],{"path":222,"title":223,"publishedAt":224,"tags":225},"\u002Fblog\u002Fswapping-sitefinity-page-for-a-new-version","Replacing a Sitefinity Page with a new version","2020-06-16T21:42:27.6300000Z",[17],{"path":227,"title":228,"publishedAt":229,"tags":230},"\u002Fblog\u002Fwhy-isnt-sitefinity-serving-me-new-versions-of-an-updated-file","Sitefinity serving old versions of files","2020-06-16T16:07:49.1170000Z",[17,29,30],{"path":232,"title":233,"publishedAt":234,"tags":235},"\u002Fblog\u002Fopen-facebook-app-to-someones-profile-nativescript","Open facebook app to someones profile","2020-05-12T19:22:56.8530000Z",[17,29],{"path":237,"title":238,"publishedAt":239,"tags":240},"\u002Fblog\u002Fsitefinity-12.2-performance-review","Sitefinity 12.2 Performance Review","2019-11-06T18:09:20.4800000Z",[128,30],{"path":242,"title":243,"publishedAt":244,"tags":245},"\u002Fblog\u002Femailtextfield-for-authenticated-users","EmailTextField for Authenticated users","2019-10-30T19:31:38.8500000Z",[17,30,29],{"path":247,"title":248,"publishedAt":249,"tags":250},"\u002Fblog\u002Fcustomize-toolbox-widget-icons","Changing the look of toolbox widget icons","2019-06-11T17:31:14.4030000Z",[17,30],{"path":252,"title":253,"publishedAt":254,"tags":255},"\u002Fblog\u002Fpersonalization-issues-with-sitefinity-api","Personalization Problems with the Sitefinity API","2019-05-22T18:10:36.7270000Z",[31],{"path":257,"title":258,"publishedAt":259,"tags":260},"\u002Fblog\u002Ffiguring-out-the-logged-in-users-identity-provider","Finding out which provider a user logged in with","2019-03-29T17:43:26.0230000Z",[17,30],{"path":262,"title":263,"publishedAt":264,"tags":265},"\u002Fblog\u002Fnew-sitefinity-twitter-feed-widget-service","New Sitefinity Twitter Feed\\Widget\\Service","2018-12-19T16:10:43.5300000Z",[30,266],"News",{"path":268,"title":269,"publishedAt":270,"tags":271},"\u002Fblog\u002Fmacbook-stuck-keys-or-laggy-mouse","Macbook stuck keys or laggy mouse","2018-09-19T16:18:09.4530000Z",[31],{"path":273,"title":274,"publishedAt":275,"tags":276},"\u002Fblog\u002Ftesting-functionality-with-cypress-io","Testing functionality with cypress.io","2018-07-20T18:26:08.8030000Z",[128],{"path":278,"title":279,"publishedAt":280,"tags":281},"\u002Fblog\u002Fduplicate-urlname-popup","Duplicate urlname popup fix using custom script","2018-03-01T16:26:25.7600000Z",[17,30,29],{"path":283,"title":284,"publishedAt":285,"tags":286},"\u002Fblog\u002Ffinding-sitefinity-widgets-on-a-page","Finding sitefinity widgets on a page","2018-02-27T20:10:07.0070000Z",[17,30],{"path":288,"title":289,"publishedAt":290,"tags":291},"\u002Fblog\u002Fangular-widgets-in-sitefinity","Angular widgets in Sitefinity","2018-01-31T15:15:17.5970000Z",[17,30],{"path":293,"title":294,"publishedAt":295,"tags":296},"\u002Fblog\u002Fsocial-logout-in-sitefinity","Social Logout in Sitefinity","2017-12-20T20:16:51.7770000Z",[17,30],{"path":298,"title":299,"publishedAt":300,"tags":301},"\u002Fblog\u002Ffree-ssl-in-sitefinity-with-letsencrypt","Free SSL in Sitefinity with LetsEncrypt","2017-11-21T19:29:32.9030000Z",[17,30],{"path":303,"title":304,"publishedAt":305,"tags":306},"\u002Fblog\u002Fsupercharge-sitefinity-load-times-with-roslyn","Supercharge Sitefinity load times with Roslyn","2017-10-01T03:41:15.0500000Z",[17,30],{"path":308,"title":309,"publishedAt":310,"tags":311},"\u002Fblog\u002Fsitefinity-forms-popup-template","Sitefinity forms popup template","2017-09-08T15:40:50.8700000Z",[17,30],{"path":313,"title":314,"publishedAt":315,"tags":316},"\u002Fblog\u002Fhelp-my-pageeditor-is-broken","Help! My PageEditor is broken!","2017-08-25T15:59:40.1370000Z",[17,30,29],{"path":318,"title":319,"publishedAt":320,"tags":321},"\u002Fblog\u002Fsitefinity-10.1-and-development-load-times","Sitefinity 10.1 and Development Load times","2017-07-18T13:47:11.4130000Z",[17,30],{"path":323,"title":324,"publishedAt":325,"tags":326},"\u002Fblog\u002Fremote-certificate-is-invalid","Remote certificate is invalid error, self sign a cert","2017-05-15T17:00:49.7670000Z",[17,30],{"path":328,"title":329,"publishedAt":330,"tags":331},"\u002Fblog\u002Ffeather-mvc-bootstrap-dropdown-navigation-template","Feather MVC bootstrap dropdown navigation template","2017-03-20T14:41:07.4270000Z",[17,30],{"path":333,"title":334,"publishedAt":335,"tags":336},"\u002Fblog\u002Fkendo-grid-update-cannot-read-property-data-of-undefined","Kendo Grid: cannot read property data of undefined","2017-01-27T15:17:03.1300000Z",[29,139,17],{"path":338,"title":339,"publishedAt":340,"tags":341},"\u002Fblog\u002Fsanitize-pasted-content-sitefinity-editor","Sanitize pasted content in the Sitefinity Editor","2017-01-09T18:08:14.8200000Z",[17,30,139],{"path":343,"title":344,"publishedAt":345,"tags":346},"\u002Fblog\u002Fhardcoded-taxa-content-filtering-assumptions","Sitefinity Taxa Filtering hardcoded to only use AND","2016-11-15T20:59:39.7570000Z",[17,31,30],{"path":348,"title":349,"publishedAt":350,"tags":351},"\u002Fblog\u002Fdefine-markup-for-content-linked-in-the-wysiwyg-editors","Set rendered html for images and docs in the editor","2016-11-05T23:17:07.0200000Z",[17,30,139,29],{"path":353,"title":354,"publishedAt":355,"tags":356},"\u002Fblog\u002Fcustomizing-forms-column-names-with-feather-mvc-forms","Customizing Sitefinity MVC Form Column Names","2016-10-04T14:39:51.8670000Z",[17,30,29],{"path":358,"title":359,"publishedAt":360,"tags":361},"\u002Fblog\u002Feasy-css-setup-for-tablet-and-phone-nativescript","Easy Css Setup for Tablet and Phone NativeScript","2016-07-12T23:11:14.4400000Z",[17],{"path":363,"title":364,"publishedAt":365,"tags":366},"\u002Fblog\u002Fnew-widget-document-folder-list","New Widget - Document Folder List","2016-05-27T18:03:10.6400000Z",[266,30],{"path":368,"title":369,"publishedAt":370,"tags":371},"\u002Fblog\u002Ffinding-mvc-widgets-in-your-page-designer","Finding MVC widgets in your page designer","2016-05-19T18:31:34.6800000Z",[17,30],{"path":373,"title":374,"publishedAt":375,"tags":376},"\u002Fblog\u002Ffixing-cached-ldap-roles","Fixing Cached Ldap Roles","2016-03-03T17:28:53.9230000Z",[17,30,31],{"path":378,"title":379,"publishedAt":380,"tags":381},"\u002Fblog\u002Fdetect-indexing-in-your-feather-view","Detect Indexing in your feather view","2015-10-14T15:15:38.4170000Z",[17,30],{"path":383,"title":384,"publishedAt":385,"tags":386},"\u002Fblog\u002Fhybrid-feather-resource-package-loading","Loading a specific Feather Template in Hybrid Mode","2015-10-07T18:46:30.0970000Z",[30,17],{"path":388,"title":389,"publishedAt":390,"tags":391},"\u002Fblog\u002Fsitefinity-8-2-beta-announcement","Sitefinity 8.2 Beta Announcement","2015-09-25T15:07:32.1470000Z",[266,30],{"path":393,"title":394,"publishedAt":395,"tags":396},"\u002Fblog\u002Forganizing-mvc-feather-widgets-in-your-toolbox","Organizing widgets in your Sitefinity Page Editor","2015-03-27T18:21:23.3530000Z",[17,30],{"path":398,"title":399,"publishedAt":400,"tags":401},"\u002Fblog\u002Fhow-to-stop-radlistview-bloating-your-page","Prevent RadListView bloating your page with HTML","2015-03-05T16:43:55.1670000Z",[17,30],{"path":403,"title":404,"publishedAt":405,"tags":406},"\u002Fblog\u002Fsitefinity-feather-gets-list-mode-right","Sitefinity Feather gets list mode right","2015-02-06T18:07:09.5700000Z",[128,30],{"path":408,"title":409,"publishedAt":410,"tags":411},"\u002Fblog\u002Fwrite-fast-javascript-on-your-live-site","Rapidly write and debug javascript in a page","2014-12-22T17:12:32.9500000Z",[17],{"path":413,"title":414,"publishedAt":415,"tags":416},"\u002Fblog\u002Fis-sitefinity-not-evangalizable","Is Sitefinity not evangalizable?","2014-11-17T19:13:59.5470000Z",[31,30],{"path":418,"title":419,"publishedAt":420,"tags":421},"\u002Fblog\u002Fallow-users-to-download-media-through-login-without-a-401","Redirect to protected document after login","2014-11-11T13:31:31.6000000Z",[17,30],{"path":423,"title":424,"publishedAt":425,"tags":426},"\u002Fblog\u002Fsingle-hierarchical-to-new-multi-widget-system","Sitefinity 7.1s new multi-widget module system","2014-08-15T18:37:43.6870000Z",[17,30],{"path":428,"title":429,"publishedAt":430,"tags":431},"\u002Fblog\u002Fexport-html-or-content-to-pdf-word-etc-with-sitefinity","Export Sitefinity Content to Pdf or MSWord","2014-07-30T14:57:17.5270000Z",[17,30],{"path":433,"title":434,"publishedAt":435,"tags":436},"\u002Fblog\u002Fmvc-widgets-in-webforms-templates","MVC Widgets in your Sitefinity WebForms Templates","2014-05-16T17:40:16.2670000Z",[17,30],{"path":438,"title":439,"publishedAt":440,"tags":441},"\u002Fblog\u002Fappending-your-domain-or-sitename-to-the-page-title","Append text to a Sitefinity Page Title","2014-04-28T15:27:58.1000000Z",[17,30],{"path":443,"title":444,"publishedAt":445,"tags":446},"\u002Fblog\u002Fkendoui-sortable-widget-with-mvvm","KendoUI Sortable Widget with MVVM","2014-04-22T14:56:38.5500000Z",[17,139],{"path":448,"title":449,"publishedAt":450,"tags":451},"\u002Fblog\u002Fwhy-i-dont-like-my-surface-2s","Why I don't like my Surface 2","2014-04-14T20:27:33.7100000Z",[128],{"path":453,"title":454,"publishedAt":455,"tags":456},"\u002Fblog\u002Fsitefinity-7-review","Sitefinity 7 Review","2014-04-10T19:30:03.7130000Z",[128,30],{"path":458,"title":459,"publishedAt":460,"tags":461},"\u002Fblog\u002Fcustomize-custom-sitefinity-toolbox-elements","Customize Custom Sitefinity Toolbox Elements","2014-01-26T18:49:52.6670000Z",[17,30],{"path":463,"title":464,"publishedAt":465,"tags":466},"\u002Fblog\u002Fsitefinity-cache","Sitefinity Cache","2014-01-07T11:55:17.3500000Z",[17,30],{"path":468,"title":469,"publishedAt":470,"tags":471},"\u002Fblog\u002Fmake-your-loginwidget-react-to-a-clientside-login","Make your LoginWidget react to a clientside login","2013-11-27T19:09:05.1370000Z",[30,17],{"path":473,"title":474,"publishedAt":475,"tags":476},"\u002Fblog\u002Fshow-alt-text-in-the-images-grid","Show Alt Text in the Sitefinity Images Module Grid","2013-11-25T21:09:22.6670000Z",[17,30],{"path":478,"title":479,"publishedAt":480,"tags":481},"\u002Fblog\u002Fdefouting-the-new-61-sitefinity-nav-menu","Defouting the new 6.1 Sitefinity Nav Menu","2013-08-08T14:48:59.7730000Z",[17,30,139,29],{"path":483,"title":484,"publishedAt":485,"tags":486},"\u002Fblog\u002Fhow-precompiled-templates-work","How PreCompiled templates work","2013-07-23T12:19:15.9430000Z",[17,30],{"path":488,"title":489,"publishedAt":490,"tags":491},"\u002Fblog\u002Fuse-sitefinity-layout-controls-without-drag-drop","Use Sitefinity Layout Controls without Drag\\Drop","2013-07-01T04:54:44.9700000Z",[17,30],{"path":493,"title":494,"publishedAt":495,"tags":496},"\u002Fblog\u002Fsitefinity-twitter-is-dead","Sitefinity Twitter is dead","2013-06-18T12:38:36.6230000Z",[266,30],{"path":498,"title":499,"publishedAt":500,"tags":501},"\u002Fblog\u002Fintroducing-the-scriptstyle-widget","Introducing the ScriptStyle Widget","2013-05-30T17:36:48.8200000Z",[30,17],{"path":503,"title":504,"publishedAt":505,"tags":506},"\u002Fblog\u002Fcontentview-master-detail-confusion","Sitefinitys ContentView can be an ass#$%@ sometimes","2013-04-23T15:25:51.2300000Z",[31,30],{"path":508,"title":509,"publishedAt":510,"tags":511},"\u002Fblog\u002Ffixing-ugly-hierarchical-dynamiccontent-urls","Fixing Ugly Hierarchical DynamicContent Urls","2013-04-02T17:51:04.4430000Z",[17,30],{"path":513,"title":514,"publishedAt":515,"tags":516},"\u002Fblog\u002Fmyth-of-the-sitefinity-jquery-double-load","Myth of the Sitefinity jQuery Double Load","2013-02-19T13:59:11.9570000Z",[31,30],{"path":518,"title":519,"publishedAt":520,"tags":521},"\u002Fblog\u002Fsitefinity-54-this-is-the-release-youve-been-waiting-for","Sitefinity 5.4 - The release you've been waiting for","2013-02-14T13:22:14.8100000Z",[128,30],{"path":523,"title":524,"publishedAt":525,"tags":526},"\u002Fblog\u002Fadd-custom-taxonomies-to-a-designer","Add Custom Taxonomies to a Designer","2013-01-02T14:58:44.9800000Z",[17,30],{"path":528,"title":529,"publishedAt":530,"tags":531},"\u002Fblog\u002Fpost-53-looking-to-54","Sitefinity 5.4 and beyond, more work to do","2012-12-18T17:51:07.9670000Z",[30,128,31],{"path":533,"title":534,"publishedAt":535,"tags":536},"\u002Fblog\u002Fsitefinity-context-management-explained-from-the-experts","Sitefinity ORM Context Management explained","2012-12-17T17:43:31.8230000Z",[17,30],{"path":538,"title":539,"publishedAt":540,"tags":541},"\u002Fblog\u002Fdisable-embedded-jquery-on-radcontrols","Disable RadControls embedded jQuery in Sitefinity","2012-12-10T17:48:44.9430000Z",[17,30],{"path":543,"title":544,"publishedAt":545,"tags":546},"\u002Fblog\u002Fmore-efficent-sitefinity-breadcrumb","More Efficent Sitefinity Breadcrumb","2012-11-26T04:57:00.5930000Z",[17,30],{"path":548,"title":549,"publishedAt":550,"tags":551},"\u002Fblog\u002Fsitefinity-dropbox-doesnt-work-the-way-you-think-it-does","Sitefinity Dropbox doesn't work the way you think it does","2012-11-20T16:12:23.7470000Z",[128,30],{"path":553,"title":554,"publishedAt":555,"tags":556},"\u002Fblog\u002Fsmall-thing-to-boost-performance","Loading Sitefinity faster on your dev box","2012-11-20T13:52:36.8000000Z",[17,30],{"path":558,"title":559,"publishedAt":560,"tags":561},"\u002Fblog\u002Fcustom-attributes-for-sitefinity-taxa","Custom attributes for Sitefinity Taxa","2012-11-01T16:19:24.1470000Z",[17,30],{"path":563,"title":564,"publishedAt":565,"tags":566},"\u002Fblog\u002Fwhats-new-in-sitefinity-52-webinar-qa-log","What's new in Sitefinity 5.2 Webinar QA Log","2012-10-25T16:00:16.5570000Z",[266,30],{"path":568,"title":569,"publishedAt":570,"tags":571},"\u002Fblog\u002Fsitefinity-53-planning-roadmap","Planning Roadmap for Sitefinity 5.3","2012-10-22T02:33:08.9000000Z",[266,30],{"path":573,"title":574,"publishedAt":575,"tags":576},"\u002Fblog\u002Fbetter-sitefinity-taxonomy-widget-you-should-use-this","Simplified no bloat html Sitefinity taxonomy widget","2012-09-15T21:02:57.9200000Z",[29,30,17],{"path":578,"title":579,"publishedAt":580,"tags":581},"\u002Fblog\u002Fwhats-new-in-sitefinity-51-webinar-qa-log","What's new in Sitefinity 5.1 Webinar QA Log","2012-07-19T16:24:33.7830000Z",[266],{"path":583,"title":584,"publishedAt":585,"tags":586},"\u002Fblog\u002Fintroducing-sitefinity-primer-nuget-101","Introducing Sitefinity Primer NuGet 1.0.1","2012-06-17T19:27:38.7000000Z",[266,30],{"path":588,"title":589,"publishedAt":590,"tags":591},"\u002Fblog\u002Ftime-to-disqus","Adding Disqus to your Sitefinity 4 site","2012-06-11T12:28:58.6930000Z",[266,30],{"path":593,"title":594,"publishedAt":595,"tags":596},"\u002Fblog\u002Fcould-not-load-file-or-assembly-system-data-sqlite","Could not load file or assembly System.Data.SQLite","2012-06-06T16:05:26.1230000Z",[29,30],{"path":598,"title":599,"publishedAt":600,"tags":601},"\u002Fblog\u002Fdecorate-your-sitefinity-forms-with-kendoui","Decorate your Sitefinity Forms with KendoUI","2012-05-30T01:55:21.5400000Z",[17,30,139],{"path":603,"title":604,"publishedAt":605,"tags":606},"\u002Fblog\u002Fjavascript-date-formatting","Javascript Date Formatting","2012-05-25T19:51:16.5500000Z",[17,139],{"path":608,"title":609,"publishedAt":610,"tags":611},"\u002Fblog\u002Fdebugging-a-kendo-template-loop","Debugging a Kendo Template Loop","2012-05-03T02:33:14.5230000Z",[17,139],{"path":613,"title":614,"publishedAt":615,"tags":616},"\u002Fblog\u002Favoid-version-errors-with-assembly-binding","Avoid Version errors with Assembly Binding","2012-03-25T15:09:00.0000000Z",[17,30,29],{"path":618,"title":619,"publishedAt":620,"tags":621},"\u002Fblog\u002Fsitefinity-how-to-list","How To List","2012-03-24T17:49:00.0000000Z",[17,30],{"path":623,"title":624,"publishedAt":625,"tags":626},"\u002Fblog\u002Fclientside-debugging-the-telerik-radcontrols","Clientside Debugging the Telerik RadControls","2012-03-23T17:28:00.0000000Z",[17],{"path":628,"title":629,"publishedAt":630,"tags":631},"\u002Fblog\u002Fsitefinity-validation-of-viewstate-mac-failed","Validation of viewstate MAC failed","2012-03-16T02:54:21.6930000Z",[17,30],{"path":633,"title":634,"publishedAt":635,"tags":636},"\u002Fblog\u002Fcontinuing-the-sitefinity-kendoui-posts","Continuing the Sitefinity KendoUI posts","2012-03-16T02:53:15.2370000Z",[17,139],{"path":638,"title":639,"publishedAt":640,"tags":641},"\u002Fblog\u002Fsimple-wcf-by-sitefinity","Simple WCF in Sitefinity","2012-03-16T02:52:46.9870000Z",[17,30],{"path":643,"title":644,"publishedAt":645,"tags":646},"\u002Fblog\u002Fjustcode-template-list","JustCode Template List","2012-03-16T02:51:10.3930000Z",[266,30],{"path":648,"title":649,"publishedAt":650,"tags":651},"\u002Fblog\u002Fcustomize-the-page-editing-experience-for-your-users","Customizing the Sitefinity Page Editor","2012-03-16T02:50:36.0070000Z",[17,30],{"path":653,"title":654,"publishedAt":655,"tags":656},"\u002Fblog\u002Fsitefinity-43-44-webinar-notes","Sitefinity 4.3-4.4 Webinar notes","2012-03-16T02:49:50.3930000Z",[266,30],{"path":658,"title":659,"publishedAt":660,"tags":661},"\u002Fblog\u002Frow-not-found-genericoid-error","Row not found: GenericOID Error","2012-03-16T02:47:56.4170000Z",[17],{"path":663,"title":664,"publishedAt":665,"tags":666},"\u002Fblog\u002Fsitefinity-embedding-a-google-wave-instance","Sitefinity: Embedding a Google Wave Instance","2012-03-16T02:45:05.6070000Z",[266,30],{"path":668,"title":669,"publishedAt":670,"tags":671},"\u002Fblog\u002Fusing-cufon-with-asp-net-and-telerik","Using Cufon with ASP.NET and Telerik","2012-03-16T02:43:59.4000000Z",[17],{"path":673,"title":674,"publishedAt":675,"tags":676},"\u002Fblog\u002Fopenaccess-nested-repeater-to-generic-list-property","OpenAccess Nested Repeater to Generic List Property","2012-03-16T02:40:36.0800000Z",[17],{"path":678,"title":679,"publishedAt":680,"tags":681},"\u002Fblog\u002Ftelerik-reporting-needsdatasource","Telerik Reporting: NeedsDataSource","2012-03-16T02:39:59.7370000Z",[17],{"path":683,"title":684,"publishedAt":685,"tags":686},"\u002Fblog\u002Finstalling-elmah-with-sitefinity","Installing ELMAH with Sitefinity","2012-03-16T02:38:52.7370000Z",[17,30],{"path":688,"title":689,"publishedAt":690,"tags":691},"\u002Fblog\u002Fbetter-sitefinity-file-page","Better Sitefinity File Page in Sitefinity 3.x","2012-03-16T02:37:36.6870000Z",[17,30,29],{"path":693,"title":694,"publishedAt":695,"tags":696},"\u002Fblog\u002Fmore-editing-options-for-your-generic-content","More tools for Generic Content in Sitefinity 3.x","2012-03-16T02:36:03.1070000Z",[17,30],{"path":698,"title":699,"publishedAt":700,"tags":701},"\u002Fblog\u002Fscreenshot-of-sitefinity-4-analytics","Screenshot of Sitefinity 4 Analytics","2012-03-16T02:35:05.9000000Z",[702,30],"Previews",{"path":704,"title":705,"publishedAt":706,"tags":707},"\u002Fblog\u002Fusing-button-selectors","Using Button Selectors with Sitefinity 3.x","2012-03-16T02:33:32.3270000Z",[17,30],{"path":709,"title":710,"publishedAt":711,"tags":712},"\u002Fblog\u002Fhyperlinks-in-external-templates","Hyperlinks in External Templates","2012-03-16T02:29:46.4530000Z",[17,30],{"path":714,"title":715,"publishedAt":716,"tags":717},"\u002Fblog\u002Fstored-procedure-for-obtaining-wf4-bookmarks","Stored Procedure for obtaining WF4 bookmarks","2012-03-16T02:28:54.9770000Z",[17],{"path":719,"title":720,"publishedAt":721,"tags":722},"\u002Fblog\u002Fpeople-make-your-radeditor-voices-heard","Voice your RadEditor frustrations","2012-03-16T02:27:16.6030000Z",[266],{"path":724,"title":725,"publishedAt":726,"tags":727},"\u002Fblog\u002Fnew-old-controls-jul-2010","New Old Controls Jul, 2010","2012-03-16T02:23:38.4600000Z",[266,30],{"path":729,"title":730,"publishedAt":731,"tags":732},"\u002Fblog\u002Fsitefinity-4","Sitefinity 4.0","2012-03-16T02:22:51.3000000Z",[266,30,128],{"path":734,"title":735,"publishedAt":736,"tags":737},"\u002Fblog\u002Fusing-webservices-with-telerik-openaccess","Using Webservices with Telerik OpenAccess","2012-03-16T02:17:37.4530000Z",[17],{"path":739,"title":740,"publishedAt":741,"tags":742},"\u002Fblog\u002Fsitefinity-radwindow-popup-styles","Sitefinity RadWindow popup styles","2012-03-16T02:15:35.4400000Z",[17,30],{"path":744,"title":745,"publishedAt":746,"tags":747},"\u002Fblog\u002Fchanging-the-look-of-controls-dropped-onto-your-page","Changing the look of controls dropped onto your page","2012-03-16T02:13:11.3030000Z",[17],{"path":749,"title":750,"publishedAt":751,"tags":752},"\u002Fblog\u002Fnew-control-background-image-content","Background Image Content Widget for Sitefinity 3","2012-03-16T02:10:52.1570000Z",[266,30],{"path":754,"title":755,"publishedAt":756,"tags":757},"\u002Fblog\u002Fquerying-telerik-openaccess-with-linqpad","Querying Telerik OpenAccess with LinqPad","2012-03-16T02:02:11.3400000Z",[17],{"path":759,"title":760,"publishedAt":761,"tags":762},"\u002Fblog\u002Ffix-sitefinity-edit-mode-style","Fix Sitefinity 3.x Edit Mode Style","2012-03-16T01:58:29.3300000Z",[17,30],{"path":764,"title":765,"publishedAt":766,"tags":767},"\u002Fblog\u002Ftelerik-reporting-export-on-button-click","Telerik Reporting: Export On Button Click","2012-03-16T01:57:18.1630000Z",[17],{"path":769,"title":770,"publishedAt":771,"tags":772},"\u002Fblog\u002Ftelerik-please-fix-charting","Telerik, Please fix charting!","2012-03-16T01:55:30.9600000Z",[31],{"path":774,"title":775,"publishedAt":776,"tags":777},"\u002Fblog\u002Fcompiling-controls-against-multiple-sitefinity-versions","Compiling Projects against multiple versions","2012-03-16T01:53:19.1770000Z",[17,30],{"path":779,"title":780,"publishedAt":781,"tags":782},"\u002Fblog\u002Frandom-site-controls-updates","Sitefinity v3 RandomSiteControls Release Notes","2012-03-16T01:52:09.7700000Z",[266],{"path":784,"title":785,"publishedAt":786,"tags":787},"\u002Fblog\u002Fmoving-the-sitefinity-logo","Moving the sitefinity logo","2012-03-16T01:49:13.2570000Z",[17,30],{"path":789,"title":790,"publishedAt":791,"tags":792},"\u002Fblog\u002Fleverage-radeditor-to-strip-html","Stripping HTML using the RadEditor","2012-03-16T01:48:27.0170000Z",[17,30],{"path":794,"title":795,"publishedAt":796,"tags":797},"\u002Fblog\u002Fdebugging-a-bad-webresource-axd-request","Debugging a bad WebResource.axd request","2012-03-16T01:45:40.6070000Z",[17,29],{"path":799,"title":800,"publishedAt":801,"tags":802},"\u002Fblog\u002Fcreating-extension-methods-with-openaccess","Extension Methods with OpenAccess","2012-03-16T01:44:26.8970000Z",[17,30],{"path":804,"title":805,"publishedAt":806,"tags":807},"\u002Fblog\u002Fwhy-pits-is-the-pits","Why PITS is the PITS","2012-03-16T01:42:38.1430000Z",[31,30],{"path":809,"title":810,"publishedAt":811,"tags":812},"\u002Fblog\u002Fdb-driven-scripting-and-styling-with-sf4","DB Driven Scripting and Styling with SF4","2012-03-16T01:42:03.1700000Z",[17,30],{"path":814,"title":815,"publishedAt":816,"tags":817},"\u002Fblog\u002Fmissing-from-sitefinity-4-release","What's Missing from Sitefinity 4 Release","2012-03-16T01:41:29.6100000Z",[128,30],{"path":819,"title":820,"publishedAt":821,"tags":822},"\u002Fblog\u002Fsitefinity-ecommerce-module-coming-soon","Sitefinity eCommerce module coming","2012-03-16T01:40:38.8470000Z",[266,30],{"path":824,"title":825,"publishedAt":826,"tags":827},"\u002Fblog\u002Fpreventing-content-popping-with-kendoui-splitter","Preventing Content Popping with KendoUI","2012-03-16T01:39:31.3930000Z",[17,139],{"path":829,"title":830,"publishedAt":831,"tags":832},"\u002Fblog\u002Fsitefinity-43-44-roadmap-review","Sitefinity 4.3-4.4 Roadmap Review","2012-03-16T01:34:23.2630000Z",[128,30],{"path":834,"title":835,"publishedAt":836,"tags":837},"\u002Fblog\u002Fadvanced-radxmlhttppanel","Advanced RadXmlHttpPanel","2012-03-16T01:30:57.2470000Z",[17,139],{"path":839,"title":840,"publishedAt":841,"tags":842},"\u002Fblog\u002Fcross-browser-css-gradients","Cross-Browser CSS Gradients","2012-03-16T01:27:43.2130000Z",[17,117],{"path":844,"title":845,"publishedAt":846,"tags":847},"\u002Fblog\u002Fpositioning-in-sitefinity-4","Positioning in Sitefinity 4","2012-03-16T01:26:31.2870000Z",[17],{"path":849,"title":850,"publishedAt":851,"tags":852},"\u002Fblog\u002Fspeed-up-your-site-on-the-cheap","Improve performance with Rackspace Cdn","2012-03-16T01:23:51.3100000Z",[128],{"path":854,"title":855,"publishedAt":856,"tags":857},"\u002Fblog\u002F4-1-update-issues","Update Issues for Sitefinity 4.1","2012-03-16T01:15:53.1970000Z",[128,30,29],{"path":859,"title":860,"publishedAt":861,"tags":862},"\u002Fblog\u002Fradnotification-peering-into-the-future","RadNotification...peering into the future?","2012-03-16T01:13:56.5370000Z",[128],{"path":864,"title":865,"publishedAt":866,"tags":867},"\u002Fblog\u002Fthe-best-stored-procedure-youll-ever-use-for-sitefinity","Search All Tables SQL Stored Procedure","2012-03-16T01:11:10.7070000Z",[17,30],{"path":869,"title":870,"publishedAt":871,"tags":872},"\u002Fblog\u002Fblog-post-title-images","Blog Post Title Images","2012-03-15T23:44:47.0830000Z",[17],{"path":874,"title":875,"publishedAt":876,"tags":877},"\u002Fblog\u002Fhidden-but-powerful-q3-2010-styling-features","Hidden but powerful Q3 2010 styling features","2012-03-15T23:27:27.5730000Z",[702,17],{"path":879,"title":880,"publishedAt":881,"tags":882},"\u002Fblog\u002F43-roadmap-wishlist","Sitefinity 4.3 Roadmap wishlist","2012-03-15T23:23:18.9230000Z",[702,30,31],1790885660432]