├── .gitignore ├── .travis.yml ├── CHANGELOG.rst ├── LICENSE ├── MANIFEST.in ├── Makefile ├── README.rst ├── bin └── daisydiff │ ├── LICENSE.txt │ ├── NOTICE.txt │ ├── README.txt │ └── daisydiff.jar ├── conftest.py ├── demo ├── __init__.py ├── demo_url │ ├── __init__.py │ ├── models.py │ ├── urls.py │ └── views.py ├── demo_widgets │ ├── __init__.py │ ├── migrations │ │ ├── 0001_initial.py │ │ └── __init__.py │ ├── models.py │ ├── static │ │ └── widgy │ │ │ └── demo_widgets │ │ │ └── slideshow.js │ └── templates │ │ └── widgy │ │ └── demo_widgets │ │ ├── box │ │ └── render.html │ │ ├── boxes │ │ └── render.html │ │ ├── homelayout │ │ └── render.html │ │ ├── slide │ │ └── render.html │ │ ├── slideshow │ │ └── render.html │ │ └── twocontentlayout │ │ └── render.html ├── media │ └── .gitkeep ├── public │ ├── .gitkeep │ ├── css │ │ ├── common.scss │ │ ├── demo.scss │ │ └── reset.css │ ├── img │ │ ├── bg.jpg │ │ ├── favicon.ico │ │ ├── grunge.jpg │ │ ├── logo-frame.png │ │ └── logo-white.png │ └── js │ │ ├── demo.js │ │ ├── jquery.min.js │ │ └── underscore-min.js ├── requirements.txt ├── settings.py ├── sqlite_database ├── static │ └── .gitkeep ├── templates │ ├── 404.html │ ├── 500.html │ ├── base.html │ ├── blog │ │ ├── blog_post_detail.html │ │ ├── blog_post_list.html │ │ └── includes │ │ │ └── filter_panel.html │ ├── mail │ │ └── base.html │ ├── pages │ │ ├── index.html │ │ ├── menus │ │ │ └── footer.html │ │ ├── page.html │ │ └── urlconfincludepage.html │ ├── robots.txt │ └── widgy │ │ └── page_builder │ │ └── defaultlayout │ │ └── render.html ├── urls.py ├── widgysite.py └── wsgi.py ├── docs ├── .gitignore ├── Makefile ├── _ext │ └── djangodocs.py ├── _images │ ├── new-save-flow_after.png │ └── new-save-flow_before.png ├── _themes │ └── kr │ │ ├── LICENSE │ │ ├── layout.html │ │ ├── relations.html │ │ ├── static │ │ ├── flasky.css_t │ │ └── small_flask.css │ │ └── theme.conf ├── api │ ├── index.rst │ ├── links.rst │ ├── models.rst │ ├── site.rst │ └── template-tags.rst ├── changelog.rst ├── conf.py ├── contrib │ ├── form-builder │ │ └── index.rst │ ├── index.rst │ ├── page-builder │ │ └── index.rst │ ├── review-queue │ │ └── index.rst │ └── widgy-mezzanine │ │ └── index.rst ├── design │ ├── _images │ │ ├── form-builder-example.png │ │ └── interface-example.png │ ├── data-model.rst │ ├── index.rst │ ├── javascript.rst │ ├── owners.rst │ ├── site.rst │ └── versioning.rst ├── index.rst ├── roadmap.md └── tutorials │ ├── first-widget.rst │ ├── index.rst │ ├── proxy-widget.rst │ ├── require-optimizer.rst │ └── widgy-mezzanine-tutorial.rst ├── js_tests ├── README.md ├── package.json └── tests │ ├── setup.js │ ├── test_geometry.js │ ├── test_node.js │ ├── test_nodeview.js │ ├── test_widget_component.js │ └── test_widgy.backbone.js ├── manage.py ├── pytest.ini ├── requirements-test.txt ├── setup.py ├── tests ├── .coveragerc ├── __init__.py ├── core_tests │ ├── __init__.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20150701_1654.py │ │ ├── 0003_compressorwidget.py │ │ └── __init__.py │ ├── models.py │ ├── static │ │ └── widgy │ │ │ └── core_tests │ │ │ ├── admin.scss │ │ │ ├── rawtextwidget.admin.scss │ │ │ ├── rawtextwidget.js │ │ │ └── rawtextwidget.scss │ ├── templates │ │ └── widgy │ │ │ └── core_tests │ │ │ └── compressorwidget │ │ │ └── render.html │ ├── tests │ │ ├── __init__.py │ │ ├── base.py │ │ ├── test_api.py │ │ ├── test_core.py │ │ ├── test_fields.py │ │ ├── test_forms.py │ │ ├── test_links.py │ │ ├── test_reviewqueue.py │ │ └── test_templates.py │ ├── urls.py │ └── widgy_config.py ├── settings.py ├── settings_contrib.py ├── urls.py └── utilstests │ ├── __init__.py │ ├── models.py │ └── tests.py ├── tox.ini ├── travis └── my.cnf └── widgy ├── __init__.py ├── admin.py ├── cats.py ├── contrib ├── __init__.py ├── form_builder │ ├── __init__.py │ ├── admin.py │ ├── forms.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20150311_2118.py │ │ ├── 0003_auto_20150730_1401.py │ │ ├── 0004_auto_20171117_2056.py │ │ ├── 0005_auto_20180425_2149.py │ │ └── __init__.py │ ├── models.py │ ├── static │ │ └── widgy │ │ │ └── form_builder │ │ │ ├── admin.scss │ │ │ ├── forminput.js │ │ │ └── forminput.scss │ ├── templates │ │ ├── admin │ │ │ └── form_builder │ │ │ │ └── form │ │ │ │ └── change_form.html │ │ └── widgy │ │ │ └── form_builder │ │ │ ├── form │ │ │ ├── preview.html │ │ │ └── render.html │ │ │ ├── form_email.html │ │ │ ├── formfield │ │ │ └── render.html │ │ │ ├── forminput │ │ │ └── render.html │ │ │ ├── submitbutton │ │ │ └── render.html │ │ │ └── uncaptcha │ │ │ └── render.html │ ├── tests.py │ └── views.py ├── page_builder │ ├── __init__.py │ ├── admin.py │ ├── db │ │ ├── __init__.py │ │ └── fields.py │ ├── forms │ │ └── __init__.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_add_site_to_callout.py │ │ ├── 0003_auto_20160325_0914.py │ │ └── __init__.py │ ├── models.py │ ├── static │ │ └── widgy │ │ │ ├── js │ │ │ └── components │ │ │ │ ├── markdown │ │ │ │ ├── component.js │ │ │ │ └── lib │ │ │ │ │ ├── Markdown.Converter.js │ │ │ │ │ ├── Markdown.Editor.js │ │ │ │ │ ├── Markdown.Sanitizer.js │ │ │ │ │ ├── pagedown.css │ │ │ │ │ └── wmd-buttons.png │ │ │ │ ├── table │ │ │ │ └── component.js │ │ │ │ └── tableheader │ │ │ │ └── component.js │ │ │ └── page_builder │ │ │ ├── accordion.js │ │ │ ├── accordion.scss │ │ │ ├── admin.scss │ │ │ ├── figure.scss │ │ │ ├── googlemap.scss │ │ │ ├── html.admin.scss │ │ │ ├── html.scss │ │ │ ├── image.admin.scss │ │ │ ├── table-theme.admin.scss │ │ │ ├── table.admin.scss │ │ │ ├── tabs.js │ │ │ ├── tabs.scss │ │ │ └── video.scss │ ├── templates │ │ ├── page_builder │ │ │ ├── ckeditor_widget.html │ │ │ └── datetime_widget.html │ │ └── widgy │ │ │ └── page_builder │ │ │ ├── accordion │ │ │ └── render.html │ │ │ ├── bucket │ │ │ └── render.html │ │ │ ├── button │ │ │ └── render.html │ │ │ ├── calloutwidget │ │ │ └── render.html │ │ │ ├── defaultlayout │ │ │ └── render.html │ │ │ ├── figure │ │ │ ├── preview.html │ │ │ └── render.html │ │ │ ├── googlemap │ │ │ ├── preview.html │ │ │ └── render.html │ │ │ ├── html │ │ │ ├── preview.html │ │ │ └── render.html │ │ │ ├── image │ │ │ ├── preview.html │ │ │ └── render.html │ │ │ ├── markdown │ │ │ ├── preview.html │ │ │ └── render.html │ │ │ ├── section │ │ │ └── render.html │ │ │ ├── tableelement │ │ │ └── render.html │ │ │ ├── tableheader │ │ │ └── render.html │ │ │ ├── tabs │ │ │ └── render.html │ │ │ ├── unsafehtml │ │ │ └── render.html │ │ │ └── video │ │ │ └── render.html │ ├── templatetags │ │ ├── __init__.py │ │ └── thumbnail_libs.py │ └── tests.py ├── review_queue │ ├── __init__.py │ ├── admin.py │ ├── forms.py │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ └── populate_review_queue.py │ ├── migrations │ │ ├── 0001_initial.py │ │ └── __init__.py │ ├── models.py │ ├── site.py │ ├── templates │ │ ├── admin │ │ │ └── review_queue │ │ │ │ └── reviewedversioncommit │ │ │ │ ├── change_list.html │ │ │ │ └── change_list_results.html │ │ └── review_queue │ │ │ ├── _commit_form.html │ │ │ ├── commit.html │ │ │ ├── commit_preview.html │ │ │ ├── history.html │ │ │ ├── revert.html │ │ │ └── undoform.html │ ├── templatetags │ │ ├── __init__.py │ │ └── review_queue_admin_tags.py │ └── views.py ├── urlconf_include │ ├── __init__.py │ ├── admin.py │ ├── middleware.py │ ├── migrations │ │ ├── 0001_initial.py │ │ └── __init__.py │ ├── models.py │ ├── signalhandlers.py │ └── tests.py ├── widgy_i18n │ ├── __init__.py │ ├── migrations │ │ ├── 0001_initial.py │ │ └── __init__.py │ ├── models.py │ └── tests.py └── widgy_mezzanine │ ├── __init__.py │ ├── admin.py │ ├── forms.py │ ├── migrations │ ├── 0001_initial.py │ ├── 0002_create_widgycalloutwidget.py │ ├── 0003_auto_20170206_1124.py │ └── __init__.py │ ├── models.py │ ├── search_indexes.py │ ├── signals.py │ ├── site.py │ ├── static │ └── widgy │ │ └── widgy_mezzanine │ │ └── admin.scss │ ├── templates │ ├── pages │ │ ├── menus │ │ │ ├── dropdown.html │ │ │ └── leftnav.html │ │ ├── widgypage.html │ │ └── widgypage_base.html │ └── widgy │ │ ├── mezzanine_base.html │ │ └── widgy_mezzanine │ │ ├── clone_success.html │ │ ├── unpublish.html │ │ ├── versioned_widgy_field.html │ │ ├── widgypage_change_form.html │ │ └── widgypage_clone_form.html │ ├── tests │ ├── __init__.py │ ├── test_core.py │ └── test_multisite.py │ ├── urls.py │ └── views.py ├── db ├── __init__.py └── fields.py ├── debugtoolbar ├── __init__.py └── templates.py ├── exceptions.py ├── forms.py ├── generic ├── __init__.py └── models.py ├── locale └── de │ └── LC_MESSAGES │ ├── django.mo │ └── django.po ├── management ├── __init__.py └── commands │ ├── __init__.py │ └── delete_orphan_versiontrackers.py ├── middleware.py ├── migrations ├── 0001_initial.py └── __init__.py ├── models ├── __init__.py ├── base.py ├── links.py ├── mixins.py └── versioning.py ├── signals.py ├── site.py ├── static ├── admin │ └── js │ │ └── collapse.js ├── daisydiff │ ├── LICENSE.txt │ ├── NOTICE.txt │ ├── README.txt │ └── css │ │ └── diff.css └── widgy │ ├── css │ ├── common.scss │ ├── font-awesome.css │ ├── history.scss │ ├── layout_select.scss │ ├── popup.scss │ ├── unapproved_commits.scss │ ├── widgy.scss │ ├── widgy_common.scss │ ├── widgy_layout.scss │ ├── widgy_theme_default.scss │ └── widgy_theme_lofi.scss │ ├── fancybox │ ├── blank.gif │ ├── fancy_close.png │ ├── fancy_loading.png │ ├── fancy_nav_left.png │ ├── fancy_nav_right.png │ ├── fancy_shadow_e.png │ ├── fancy_shadow_n.png │ ├── fancy_shadow_ne.png │ ├── fancy_shadow_nw.png │ ├── fancy_shadow_s.png │ ├── fancy_shadow_se.png │ ├── fancy_shadow_sw.png │ ├── fancy_shadow_w.png │ ├── fancy_title_left.png │ ├── fancy_title_main.png │ ├── fancy_title_over.png │ ├── fancy_title_right.png │ ├── fancybox-x.png │ ├── fancybox-y.png │ ├── fancybox.png │ ├── jquery.fancybox-1.3.4.css │ └── jquery.fancybox-1.3.4.js │ ├── font │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.svg │ ├── fontawesome-webfont.ttf │ ├── fontawesome-webfont.woff │ └── fontawesome-webfont.woff2 │ ├── image │ ├── layout-sprite.png │ ├── loading.gif │ ├── page-layout-2-column.gif │ ├── widget-accordion.png │ ├── widget-brand-list.png │ ├── widget-bucket.png │ ├── widget-button.png │ ├── widget-calendar.png │ ├── widget-callout.png │ ├── widget-chart.png │ ├── widget-checkbox.png │ ├── widget-code.gif │ ├── widget-email.gif │ ├── widget-figure.png │ ├── widget-form.gif │ ├── widget-google-map.png │ ├── widget-hidden-field.png │ ├── widget-html.png │ ├── widget-icon-mapped-field.png │ ├── widget-image-bucket.png │ ├── widget-image.gif │ ├── widget-list.png │ ├── widget-miniboxes.gif │ ├── widget-news.png │ ├── widget-ok-button.png │ ├── widget-product-bucket.png │ ├── widget-product-list.png │ ├── widget-radio.png │ ├── widget-salesforce.png │ ├── widget-save-data.png │ ├── widget-section.png │ ├── widget-skull-and-crossbones.png │ ├── widget-slide.png │ ├── widget-submit.png │ ├── widget-tab.png │ ├── widget-table.gif │ ├── widget-tablecolumn.png │ ├── widget-tablerow.png │ ├── widget-textarea.gif │ ├── widget-uncaptcha.png │ └── widget-video.gif │ ├── js │ ├── app.html │ ├── components │ │ ├── tabbed │ │ │ └── component.js │ │ └── widget │ │ │ └── component.js │ ├── form.js │ ├── geometry.js │ ├── jquery-private.js │ ├── lib │ │ ├── backbone.js │ │ ├── ckeditor │ │ │ ├── CHANGES.md │ │ │ ├── LICENSE.md │ │ │ ├── README.md │ │ │ ├── adapters │ │ │ │ └── jquery.js │ │ │ ├── build-config.js │ │ │ ├── ckeditor.js │ │ │ ├── config.js │ │ │ ├── contents.css │ │ │ ├── lang │ │ │ │ ├── af.js │ │ │ │ ├── ar.js │ │ │ │ ├── bg.js │ │ │ │ ├── bn.js │ │ │ │ ├── bs.js │ │ │ │ ├── ca.js │ │ │ │ ├── cs.js │ │ │ │ ├── cy.js │ │ │ │ ├── da.js │ │ │ │ ├── de.js │ │ │ │ ├── el.js │ │ │ │ ├── en-au.js │ │ │ │ ├── en-ca.js │ │ │ │ ├── en-gb.js │ │ │ │ ├── en.js │ │ │ │ ├── eo.js │ │ │ │ ├── es.js │ │ │ │ ├── et.js │ │ │ │ ├── eu.js │ │ │ │ ├── fa.js │ │ │ │ ├── fi.js │ │ │ │ ├── fo.js │ │ │ │ ├── fr-ca.js │ │ │ │ ├── fr.js │ │ │ │ ├── gl.js │ │ │ │ ├── gu.js │ │ │ │ ├── he.js │ │ │ │ ├── hi.js │ │ │ │ ├── hr.js │ │ │ │ ├── hu.js │ │ │ │ ├── id.js │ │ │ │ ├── is.js │ │ │ │ ├── it.js │ │ │ │ ├── ja.js │ │ │ │ ├── ka.js │ │ │ │ ├── km.js │ │ │ │ ├── ko.js │ │ │ │ ├── ku.js │ │ │ │ ├── lt.js │ │ │ │ ├── lv.js │ │ │ │ ├── mk.js │ │ │ │ ├── mn.js │ │ │ │ ├── ms.js │ │ │ │ ├── nb.js │ │ │ │ ├── nl.js │ │ │ │ ├── no.js │ │ │ │ ├── pl.js │ │ │ │ ├── pt-br.js │ │ │ │ ├── pt.js │ │ │ │ ├── ro.js │ │ │ │ ├── ru.js │ │ │ │ ├── si.js │ │ │ │ ├── sk.js │ │ │ │ ├── sl.js │ │ │ │ ├── sq.js │ │ │ │ ├── sr-latn.js │ │ │ │ ├── sr.js │ │ │ │ ├── sv.js │ │ │ │ ├── th.js │ │ │ │ ├── tr.js │ │ │ │ ├── ug.js │ │ │ │ ├── uk.js │ │ │ │ ├── vi.js │ │ │ │ ├── zh-cn.js │ │ │ │ └── zh.js │ │ │ ├── plugins │ │ │ │ ├── a11yhelp │ │ │ │ │ └── dialogs │ │ │ │ │ │ ├── a11yhelp.js │ │ │ │ │ │ └── lang │ │ │ │ │ │ ├── _translationstatus.txt │ │ │ │ │ │ ├── ar.js │ │ │ │ │ │ ├── bg.js │ │ │ │ │ │ ├── ca.js │ │ │ │ │ │ ├── cs.js │ │ │ │ │ │ ├── cy.js │ │ │ │ │ │ ├── da.js │ │ │ │ │ │ ├── de.js │ │ │ │ │ │ ├── el.js │ │ │ │ │ │ ├── en-gb.js │ │ │ │ │ │ ├── en.js │ │ │ │ │ │ ├── eo.js │ │ │ │ │ │ ├── es.js │ │ │ │ │ │ ├── et.js │ │ │ │ │ │ ├── fa.js │ │ │ │ │ │ ├── fi.js │ │ │ │ │ │ ├── fr-ca.js │ │ │ │ │ │ ├── fr.js │ │ │ │ │ │ ├── gl.js │ │ │ │ │ │ ├── gu.js │ │ │ │ │ │ ├── he.js │ │ │ │ │ │ ├── hi.js │ │ │ │ │ │ ├── hr.js │ │ │ │ │ │ ├── hu.js │ │ │ │ │ │ ├── id.js │ │ │ │ │ │ ├── it.js │ │ │ │ │ │ ├── ja.js │ │ │ │ │ │ ├── km.js │ │ │ │ │ │ ├── ko.js │ │ │ │ │ │ ├── ku.js │ │ │ │ │ │ ├── lt.js │ │ │ │ │ │ ├── lv.js │ │ │ │ │ │ ├── mk.js │ │ │ │ │ │ ├── mn.js │ │ │ │ │ │ ├── nb.js │ │ │ │ │ │ ├── nl.js │ │ │ │ │ │ ├── no.js │ │ │ │ │ │ ├── pl.js │ │ │ │ │ │ ├── pt-br.js │ │ │ │ │ │ ├── pt.js │ │ │ │ │ │ ├── ro.js │ │ │ │ │ │ ├── ru.js │ │ │ │ │ │ ├── si.js │ │ │ │ │ │ ├── sk.js │ │ │ │ │ │ ├── sl.js │ │ │ │ │ │ ├── sq.js │ │ │ │ │ │ ├── sr-latn.js │ │ │ │ │ │ ├── sr.js │ │ │ │ │ │ ├── sv.js │ │ │ │ │ │ ├── th.js │ │ │ │ │ │ ├── tr.js │ │ │ │ │ │ ├── ug.js │ │ │ │ │ │ ├── uk.js │ │ │ │ │ │ ├── vi.js │ │ │ │ │ │ ├── zh-cn.js │ │ │ │ │ │ └── zh.js │ │ │ │ ├── about │ │ │ │ │ └── dialogs │ │ │ │ │ │ ├── about.js │ │ │ │ │ │ ├── hidpi │ │ │ │ │ │ └── logo_ckeditor.png │ │ │ │ │ │ └── logo_ckeditor.png │ │ │ │ ├── clipboard │ │ │ │ │ └── dialogs │ │ │ │ │ │ └── paste.js │ │ │ │ ├── dialog │ │ │ │ │ └── dialogDefinition.js │ │ │ │ ├── fakeobjects │ │ │ │ │ └── images │ │ │ │ │ │ └── spacer.gif │ │ │ │ ├── icons.png │ │ │ │ ├── icons_hidpi.png │ │ │ │ ├── image │ │ │ │ │ ├── dialogs │ │ │ │ │ │ └── image.js │ │ │ │ │ └── images │ │ │ │ │ │ └── noimage.png │ │ │ │ ├── justify │ │ │ │ │ ├── icons │ │ │ │ │ │ ├── hidpi │ │ │ │ │ │ │ ├── justifyblock.png │ │ │ │ │ │ │ ├── justifycenter.png │ │ │ │ │ │ │ ├── justifyleft.png │ │ │ │ │ │ │ └── justifyright.png │ │ │ │ │ │ ├── justifyblock.png │ │ │ │ │ │ ├── justifycenter.png │ │ │ │ │ │ ├── justifyleft.png │ │ │ │ │ │ └── justifyright.png │ │ │ │ │ ├── lang │ │ │ │ │ │ ├── af.js │ │ │ │ │ │ ├── ar.js │ │ │ │ │ │ ├── bg.js │ │ │ │ │ │ ├── bn.js │ │ │ │ │ │ ├── bs.js │ │ │ │ │ │ ├── ca.js │ │ │ │ │ │ ├── cs.js │ │ │ │ │ │ ├── cy.js │ │ │ │ │ │ ├── da.js │ │ │ │ │ │ ├── de.js │ │ │ │ │ │ ├── el.js │ │ │ │ │ │ ├── en-au.js │ │ │ │ │ │ ├── en-ca.js │ │ │ │ │ │ ├── en-gb.js │ │ │ │ │ │ ├── en.js │ │ │ │ │ │ ├── eo.js │ │ │ │ │ │ ├── es.js │ │ │ │ │ │ ├── et.js │ │ │ │ │ │ ├── eu.js │ │ │ │ │ │ ├── fa.js │ │ │ │ │ │ ├── fi.js │ │ │ │ │ │ ├── fo.js │ │ │ │ │ │ ├── fr-ca.js │ │ │ │ │ │ ├── fr.js │ │ │ │ │ │ ├── gl.js │ │ │ │ │ │ ├── gu.js │ │ │ │ │ │ ├── he.js │ │ │ │ │ │ ├── hi.js │ │ │ │ │ │ ├── hr.js │ │ │ │ │ │ ├── hu.js │ │ │ │ │ │ ├── id.js │ │ │ │ │ │ ├── is.js │ │ │ │ │ │ ├── it.js │ │ │ │ │ │ ├── ja.js │ │ │ │ │ │ ├── ka.js │ │ │ │ │ │ ├── km.js │ │ │ │ │ │ ├── ko.js │ │ │ │ │ │ ├── ku.js │ │ │ │ │ │ ├── lt.js │ │ │ │ │ │ ├── lv.js │ │ │ │ │ │ ├── mk.js │ │ │ │ │ │ ├── mn.js │ │ │ │ │ │ ├── ms.js │ │ │ │ │ │ ├── nb.js │ │ │ │ │ │ ├── nl.js │ │ │ │ │ │ ├── no.js │ │ │ │ │ │ ├── pl.js │ │ │ │ │ │ ├── pt-br.js │ │ │ │ │ │ ├── pt.js │ │ │ │ │ │ ├── ro.js │ │ │ │ │ │ ├── ru.js │ │ │ │ │ │ ├── si.js │ │ │ │ │ │ ├── sk.js │ │ │ │ │ │ ├── sl.js │ │ │ │ │ │ ├── sq.js │ │ │ │ │ │ ├── sr-latn.js │ │ │ │ │ │ ├── sr.js │ │ │ │ │ │ ├── sv.js │ │ │ │ │ │ ├── th.js │ │ │ │ │ │ ├── tr.js │ │ │ │ │ │ ├── ug.js │ │ │ │ │ │ ├── uk.js │ │ │ │ │ │ ├── vi.js │ │ │ │ │ │ ├── zh-cn.js │ │ │ │ │ │ └── zh.js │ │ │ │ │ └── plugin.js │ │ │ │ ├── link │ │ │ │ │ ├── dialogs │ │ │ │ │ │ ├── anchor.js │ │ │ │ │ │ └── link.js │ │ │ │ │ └── images │ │ │ │ │ │ ├── anchor.png │ │ │ │ │ │ └── hidpi │ │ │ │ │ │ └── anchor.png │ │ │ │ ├── magicline │ │ │ │ │ └── images │ │ │ │ │ │ ├── hidpi │ │ │ │ │ │ └── icon.png │ │ │ │ │ │ └── icon.png │ │ │ │ ├── pastefromword │ │ │ │ │ └── filter │ │ │ │ │ │ └── default.js │ │ │ │ ├── scayt │ │ │ │ │ ├── LICENSE.md │ │ │ │ │ ├── README.md │ │ │ │ │ └── dialogs │ │ │ │ │ │ ├── options.js │ │ │ │ │ │ └── toolbar.css │ │ │ │ ├── specialchar │ │ │ │ │ └── dialogs │ │ │ │ │ │ ├── lang │ │ │ │ │ │ ├── _translationstatus.txt │ │ │ │ │ │ ├── ar.js │ │ │ │ │ │ ├── bg.js │ │ │ │ │ │ ├── ca.js │ │ │ │ │ │ ├── cs.js │ │ │ │ │ │ ├── cy.js │ │ │ │ │ │ ├── de.js │ │ │ │ │ │ ├── el.js │ │ │ │ │ │ ├── en-gb.js │ │ │ │ │ │ ├── en.js │ │ │ │ │ │ ├── eo.js │ │ │ │ │ │ ├── es.js │ │ │ │ │ │ ├── et.js │ │ │ │ │ │ ├── fa.js │ │ │ │ │ │ ├── fi.js │ │ │ │ │ │ ├── fr-ca.js │ │ │ │ │ │ ├── fr.js │ │ │ │ │ │ ├── gl.js │ │ │ │ │ │ ├── he.js │ │ │ │ │ │ ├── hr.js │ │ │ │ │ │ ├── hu.js │ │ │ │ │ │ ├── id.js │ │ │ │ │ │ ├── it.js │ │ │ │ │ │ ├── ja.js │ │ │ │ │ │ ├── km.js │ │ │ │ │ │ ├── ku.js │ │ │ │ │ │ ├── lv.js │ │ │ │ │ │ ├── nb.js │ │ │ │ │ │ ├── nl.js │ │ │ │ │ │ ├── no.js │ │ │ │ │ │ ├── pl.js │ │ │ │ │ │ ├── pt-br.js │ │ │ │ │ │ ├── pt.js │ │ │ │ │ │ ├── ru.js │ │ │ │ │ │ ├── si.js │ │ │ │ │ │ ├── sk.js │ │ │ │ │ │ ├── sl.js │ │ │ │ │ │ ├── sq.js │ │ │ │ │ │ ├── sv.js │ │ │ │ │ │ ├── th.js │ │ │ │ │ │ ├── tr.js │ │ │ │ │ │ ├── ug.js │ │ │ │ │ │ ├── uk.js │ │ │ │ │ │ ├── vi.js │ │ │ │ │ │ ├── zh-cn.js │ │ │ │ │ │ └── zh.js │ │ │ │ │ │ └── specialchar.js │ │ │ │ ├── table │ │ │ │ │ └── dialogs │ │ │ │ │ │ └── table.js │ │ │ │ ├── tabletools │ │ │ │ │ └── dialogs │ │ │ │ │ │ └── tableCell.js │ │ │ │ └── wsc │ │ │ │ │ ├── LICENSE.md │ │ │ │ │ ├── README.md │ │ │ │ │ └── dialogs │ │ │ │ │ ├── ciframe.html │ │ │ │ │ ├── tmp.html │ │ │ │ │ ├── tmpFrameset.html │ │ │ │ │ ├── wsc.css │ │ │ │ │ ├── wsc.js │ │ │ │ │ └── wsc_ie.js │ │ │ ├── skins │ │ │ │ └── moono │ │ │ │ │ ├── dialog.css │ │ │ │ │ ├── dialog_ie.css │ │ │ │ │ ├── dialog_ie7.css │ │ │ │ │ ├── dialog_ie8.css │ │ │ │ │ ├── dialog_iequirks.css │ │ │ │ │ ├── dialog_opera.css │ │ │ │ │ ├── editor.css │ │ │ │ │ ├── editor_gecko.css │ │ │ │ │ ├── editor_ie.css │ │ │ │ │ ├── editor_ie7.css │ │ │ │ │ ├── editor_ie8.css │ │ │ │ │ ├── editor_iequirks.css │ │ │ │ │ ├── icons.png │ │ │ │ │ ├── icons_hidpi.png │ │ │ │ │ ├── images │ │ │ │ │ ├── arrow.png │ │ │ │ │ ├── close.png │ │ │ │ │ ├── hidpi │ │ │ │ │ │ ├── close.png │ │ │ │ │ │ ├── lock-open.png │ │ │ │ │ │ ├── lock.png │ │ │ │ │ │ └── refresh.png │ │ │ │ │ ├── lock-open.png │ │ │ │ │ ├── lock.png │ │ │ │ │ └── refresh.png │ │ │ │ │ └── readme.md │ │ │ └── styles.js │ │ ├── csrf.js │ │ ├── fixto.js │ │ ├── jquery.form.js │ │ ├── jquery.js │ │ ├── mustache.js │ │ ├── q.js │ │ └── underscore.js │ ├── modal │ │ ├── modal.html │ │ └── modal.js │ ├── nodes │ │ ├── base.js │ │ ├── drop_target.html │ │ ├── models.js │ │ ├── nodes.js │ │ ├── popped_out.html │ │ └── preview.html │ ├── popup.js │ ├── require │ │ ├── cs.js │ │ ├── depend.js │ │ ├── require.js │ │ └── text.js │ ├── shelves │ │ ├── shelf.html │ │ └── shelves.js │ ├── templates.js │ ├── widgets │ │ └── widget.html │ ├── widgy-main.js │ ├── widgy.admin.js │ ├── widgy.backbone.js │ ├── widgy.build.js │ ├── widgy.contents.js │ └── widgy.js │ └── mixins │ ├── tabbed-theme.admin.scss │ └── tabbed.admin.scss ├── templates ├── layout_base.html └── widgy │ ├── _commit_form.html │ ├── commit.html │ ├── commit_success.html │ ├── debugtoolbar │ └── templates.html │ ├── diff.html │ ├── edit.html │ ├── field_as_div.html │ ├── forms │ └── widgets │ │ ├── contenttyperadioselect.html │ │ └── contenttyperadioselect_option.html │ ├── history.html │ ├── mixins │ ├── invisible │ │ └── preview.html │ └── tabbed │ │ └── preview.html │ ├── popup_base.html │ ├── preview.html │ ├── reset.html │ ├── reset_success.html │ ├── revert.html │ ├── versioned_widgy_field_base.html │ ├── views │ ├── README │ └── edit_node.html │ ├── widgy │ └── unknownwidget │ │ └── preview.html │ └── widgy_field.html ├── templatetags ├── __init__.py └── widgy_tags.py ├── utils.py ├── views ├── __init__.py ├── api.py ├── base.py └── versioning.py └── widgets.py /.gitignore: -------------------------------------------------------------------------------- 1 | /sqlite_database 2 | *.pyc 3 | /src/ 4 | /static/* 5 | /demo/static/* 6 | /media/* 7 | /demo/media/* 8 | !.gitkeep 9 | /.sass-cache/ 10 | /tmp/ 11 | settings_local.py 12 | /build/ 13 | /tags 14 | /dist/ 15 | *.egg-info/ 16 | *.egg/ 17 | /.cache 18 | /CACHE/ 19 | /.tox/ 20 | /.coverage 21 | /htmlcov/ 22 | js_tests/node_modules 23 | .pytest_cache/ 24 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | 3 | python: 4 | - "2.7" 5 | 6 | cache: pip 7 | 8 | sudo: false 9 | 10 | matrix: 11 | include: 12 | - env: TOX_ENV=py27-dj111-sqlite 13 | - env: TOX_ENV=py27-dj111-mysql 14 | - env: TOX_ENV=py27-dj111-postgres 15 | - env: TOX_ENV=py34-dj111-sqlite 16 | - env: TOX_ENV=py34-dj111-mysql 17 | - env: TOX_ENV=py34-dj111-postgres 18 | - env: TOX_ENV=py27-dj111-contrib-sqlite 19 | - env: TOX_ENV=py27-dj111-contrib-mysql 20 | - env: TOX_ENV=py27-dj111-contrib-postgres 21 | - env: TOX_ENV=py34-dj111-contrib-sqlite 22 | - env: TOX_ENV=py34-dj111-contrib-mysql 23 | - env: TOX_ENV=py34-dj111-contrib-postgres 24 | - language: node_js 25 | node_js: "0.10.40" 26 | script: make test-js 27 | install: echo "nothing to install" 28 | 29 | before_install: 30 | - cat "$TRAVIS_BUILD_DIR/travis/my.cnf" | sudo tee -a /etc/mysql/my.cnf 31 | - sudo service mysql restart 32 | 33 | install: 34 | - pip install --upgrade pip 35 | - pip install tox 36 | 37 | before_script: 38 | - psql -c 'create database widgy;' -U postgres 39 | - mysql -e 'create database widgy;' 40 | 41 | script: 42 | - tox -e $TOX_ENV 43 | 44 | after_script: 45 | - cat .tox/$TOX_ENV/log/*.log 46 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include README.rst CHANGELOG.rst LICENSE Makefile tox.ini 2 | recursive-include widgy * 3 | recursive-include tests *.py 4 | recursive-include docs * 5 | recursive-include bin/daisydiff * 6 | prune docs/_build 7 | global-exclude *.pyc 8 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | JS_FILES?=`find ./js_tests/tests -type f -name '*.js'` 2 | DJANGO_SETTINGS_MODULE?=tests.settings_contrib 3 | 4 | test: test-py test-js 5 | 6 | test-py: 7 | DJANGO_SETTINGS_MODULE=$(DJANGO_SETTINGS_MODULE) py.test $(PYTEST_OPTIONS) 8 | 9 | coverage: 10 | +make test-py PYTEST_OPTIONS='--cov widgy' 11 | coverage html --omit='widgy/*migrations/*,widgy/contrib/*/*migrations/*,' 12 | 13 | browser: coverage 14 | sensible-browser ./htmlcov/index.html 15 | 16 | js_tests/node_modules: js_tests/package.json 17 | cd js_tests && npm install . 18 | 19 | test-js: js_tests/node_modules 20 | node -v 21 | ./js_tests/node_modules/mocha/bin/mocha \ 22 | -s 5 \ 23 | --reporter spec \ 24 | $(JS_FILES) 25 | 26 | widgy/locale/en/LC_MESSAGES/django.po: $(shell find . -type f -iregex '.*\.\(html\|py\|md\)$$' | grep -v .tox) 27 | 28 | cd widgy && django-admin.py makemessages -l en 29 | 30 | widgy/locale/xx_pseudo/LC_MESSAGES/django.po: widgy/locale/en/LC_MESSAGES/django.po 31 | -rm -r "`dirname $@`" 32 | potpie $< $@ 33 | 34 | widgy/locale/xx_pseudo/LC_MESSAGES/django.mo: widgy/locale/xx_pseudo/LC_MESSAGES/django.po 35 | cd widgy && django-admin.py compilemessages 36 | 37 | t10n: widgy/locale/xx_pseudo/LC_MESSAGES/django.mo 38 | 39 | docs: 40 | cd docs && $(MAKE) html 41 | 42 | 43 | .PHONY: test coverage browser test-py test-js docs 44 | -------------------------------------------------------------------------------- /bin/daisydiff/NOTICE.txt: -------------------------------------------------------------------------------- 1 | NOTICE: Only our own original work is licensed under the terms of the Apache 2 | License Version 2.0. The licenses of some libraries might impose different 3 | redistribution or general licensing terms than those stated in the Apache 4 | License. Users and redistributors are hereby requested to verify these 5 | conditions and agree upon them. 6 | 7 | This product includes software developed by 8 | The Apache Software Foundation (http://www.apache.org/). 9 | -------------------------------------------------------------------------------- /bin/daisydiff/daisydiff.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/bin/daisydiff/daisydiff.jar -------------------------------------------------------------------------------- /conftest.py: -------------------------------------------------------------------------------- 1 | import shutil 2 | import os 3 | 4 | import pytest 5 | import six 6 | 7 | # This is here instead of pytest.ini because it can't be overridden from the 8 | # environ if specified there. 9 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tests.settings') 10 | 11 | from django.conf import settings 12 | 13 | 14 | def teardown_assets_directory(): 15 | # Removing the temporary TEMP_DIR. Ensure we pass in unicode 16 | # so that it will successfully remove temp trees containing 17 | # non-ASCII filenames on Windows. (We're assuming the temp dir 18 | # name itself does not contain non-ASCII characters.) 19 | shutil.rmtree(six.text_type(settings.TEMP_DIR)) 20 | 21 | 22 | @pytest.fixture(scope="session", autouse=True) 23 | def assets_directory(request): 24 | request.addfinalizer(teardown_assets_directory) 25 | 26 | 27 | def get_collect_ignore(): 28 | mapping = { 29 | 'widgy.contrib.widgy_mezzanine': ['widgy/contrib/widgy_mezzanine/'], 30 | 'widgy.contrib.form_builder': ['widgy/contrib/form_builder/'], 31 | 'widgy.contrib.page_builder': ['widgy/contrib/page_builder/'], 32 | 'widgy.contrib.urlconf_include': ['widgy/contrib/urlconf_include/'], 33 | 'widgy.contrib.widgy_i18n': ['widgy/contrib/urlconf_include/'], 34 | } 35 | 36 | 37 | acc = [] 38 | for app, path_list in mapping.items(): 39 | if app not in settings.INSTALLED_APPS: 40 | acc.extend(path_list) 41 | return acc 42 | 43 | collect_ignore = get_collect_ignore() 44 | -------------------------------------------------------------------------------- /demo/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/demo/__init__.py -------------------------------------------------------------------------------- /demo/demo_url/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/demo/demo_url/__init__.py -------------------------------------------------------------------------------- /demo/demo_url/models.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/demo/demo_url/models.py -------------------------------------------------------------------------------- /demo/demo_url/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import patterns, include, url 2 | from django.views.generic import RedirectView 3 | 4 | from . import views 5 | 6 | urlpatterns = patterns('', 7 | (r'^$', RedirectView.as_view(url='hello/')), 8 | (r'^hello/', views.hello), 9 | ) 10 | -------------------------------------------------------------------------------- /demo/demo_url/views.py: -------------------------------------------------------------------------------- 1 | from django.http import HttpResponse 2 | 3 | def hello(request): 4 | return HttpResponse( 5 | '' 6 | 'Demo url

Hello!' 7 | ) 8 | -------------------------------------------------------------------------------- /demo/demo_widgets/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/demo/demo_widgets/__init__.py -------------------------------------------------------------------------------- /demo/demo_widgets/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/demo/demo_widgets/migrations/__init__.py -------------------------------------------------------------------------------- /demo/demo_widgets/templates/widgy/demo_widgets/box/render.html: -------------------------------------------------------------------------------- 1 | {% load widgy_tags %} 2 |

3 |

{{ self.title }}

4 | 5 | {% for child in self.get_children %} 6 | {% render child %} 7 | {% endfor %} 8 |
9 | -------------------------------------------------------------------------------- /demo/demo_widgets/templates/widgy/demo_widgets/boxes/render.html: -------------------------------------------------------------------------------- 1 | {% load widgy_tags %} 2 |
3 | {% for child in self.get_children %} 4 | {% render child %} 5 | {% endfor %} 6 |
7 | -------------------------------------------------------------------------------- /demo/demo_widgets/templates/widgy/demo_widgets/homelayout/render.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/page_builder/defaultlayout/render.html" %} 2 | 3 | {% load widgy_tags %} 4 | 5 | {% block bodyClass %}home{% endblock %} 6 | 7 | {% block leftnav %} 8 | {% endblock %} 9 | 10 | {% block content %} 11 | {% for child in self.get_children %} 12 | {% render child %} 13 | {% endfor %} 14 | {% endblock %} 15 | 16 | {% block sidebar %} 17 | {% endblock %} 18 | -------------------------------------------------------------------------------- /demo/demo_widgets/templates/widgy/demo_widgets/slide/render.html: -------------------------------------------------------------------------------- 1 | {% load thumbnail_libs %} 2 | {% load widgy_tags %} 3 | 4 |
5 | 6 |

{{ self.tagline }}

7 | 8 | {% for child in self.get_children %} 9 | {% render child %} 10 | {% endfor %} 11 |
12 | -------------------------------------------------------------------------------- /demo/demo_widgets/templates/widgy/demo_widgets/slideshow/render.html: -------------------------------------------------------------------------------- 1 | {% load widgy_tags %} 2 |
3 | {% for child in self.get_children %} 4 | {% render child %} 5 | {% endfor %} 6 |
7 | -------------------------------------------------------------------------------- /demo/demo_widgets/templates/widgy/demo_widgets/twocontentlayout/render.html: -------------------------------------------------------------------------------- 1 | {% load widgy_tags %} 2 | 3 |
4 |

{{ page.title }}

5 | 6 | {% render self.get_children.0 %} 7 |
8 | 9 |
10 | {% render self.get_children.1 %} 11 |
12 | -------------------------------------------------------------------------------- /demo/media/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/demo/media/.gitkeep -------------------------------------------------------------------------------- /demo/public/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/demo/public/.gitkeep -------------------------------------------------------------------------------- /demo/public/img/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/demo/public/img/bg.jpg -------------------------------------------------------------------------------- /demo/public/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/demo/public/img/favicon.ico -------------------------------------------------------------------------------- /demo/public/img/grunge.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/demo/public/img/grunge.jpg -------------------------------------------------------------------------------- /demo/public/img/logo-frame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/demo/public/img/logo-frame.png -------------------------------------------------------------------------------- /demo/public/img/logo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/demo/public/img/logo-white.png -------------------------------------------------------------------------------- /demo/public/js/demo.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function(){ 2 | 3 | //| 4 | //| Scroll-Based Functions 5 | //| 6 | var headerHeight = $("header").height(); 7 | var arbitrarySpacer = 300; 8 | 9 | function runAtScrollPosition() { 10 | var distanceFromTop = $(window).scrollTop(); 11 | 12 | // if we've scrolled past the header 13 | if (distanceFromTop >= headerHeight - 25) { 14 | $("body").addClass("bop-it"); 15 | } 16 | else { 17 | $("body").removeClass("bop-it"); 18 | } 19 | } 20 | 21 | var throttled = _.throttle(runAtScrollPosition, 100); 22 | $(window).delay(3000).scroll(throttled); 23 | 24 | //| 25 | //| Mobile Slide-Left Nav 26 | //| 27 | $("section.mobile a").bind("touchstart, click", function(event){ 28 | $("body").toggleClass("shift"); 29 | event.preventDefault(); 30 | }); 31 | 32 | }); -------------------------------------------------------------------------------- /demo/requirements.txt: -------------------------------------------------------------------------------- 1 | Django>=1.11 2 | Werkzeug 3 | django-debug-toolbar>=1.0.0 4 | django-extensions 5 | django-require 6 | pyScss>=1.2.0 7 | Sphinx==1.2.2 8 | Mezzanine>=3.1.10 9 | mock==1.0.1 10 | # not ours, but really mezzanine's 11 | django-contrib-comments 12 | -------------------------------------------------------------------------------- /demo/sqlite_database: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/demo/sqlite_database -------------------------------------------------------------------------------- /demo/static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/demo/static/.gitkeep -------------------------------------------------------------------------------- /demo/templates/404.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 |

404

4 | {% endblock %} 5 | -------------------------------------------------------------------------------- /demo/templates/500.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 |

500

4 | {% endblock %} 5 | -------------------------------------------------------------------------------- /demo/templates/mail/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{ content }} 5 | 6 | 7 | -------------------------------------------------------------------------------- /demo/templates/pages/index.html: -------------------------------------------------------------------------------- 1 | {% extends "pages/widgypage.html" %} 2 | -------------------------------------------------------------------------------- /demo/templates/pages/menus/footer.html: -------------------------------------------------------------------------------- 1 | {% load pages_tags %} 2 | 3 | {% for page in page_branch %} 4 | {% if page.in_menu %} 5 | {{ page.title }} 6 | {% endif %} 7 | {% page_menu page %} 8 | {% endfor %} 9 | -------------------------------------------------------------------------------- /demo/templates/pages/page.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %}{{ block.super }} - {{ page.title }}{% endblock %} 4 | 5 | {% block seo_description %}{{ page.keywords_string }}{% endblock %} 6 | {% block seo_keywords %}{{ page.description }}{% endblock %} 7 | 8 | {% block content %} 9 |

{{ page.title }}

10 | {{ page.get_content_model.content|safe }} 11 | {% endblock %} 12 | -------------------------------------------------------------------------------- /demo/templates/pages/urlconfincludepage.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/demo/templates/pages/urlconfincludepage.html -------------------------------------------------------------------------------- /demo/templates/robots.txt: -------------------------------------------------------------------------------- 1 | # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file 2 | # 3 | # robots.txt for Google 4 | User-Agent: * 5 | Allow: / 6 | Allow: /image/ 7 | Allow: /static/image/ 8 | Allow: /doc/ 9 | Allow: /pdf/ 10 | Allow: /img/ 11 | Disallow: /static/js/ 12 | Disallow: /static/css/ 13 | Disallow: /js/ 14 | Disallow: /css/ 15 | Disallow: /flv/ 16 | Disallow: /swf/ 17 | 18 | # robots.txt for Google Image Search 19 | User-Agent: Googlebot-Image 20 | Allow: /image/ 21 | Allow: /img/ 22 | 23 | sitemap: /sitemap.xml 24 | -------------------------------------------------------------------------------- /demo/templates/widgy/page_builder/defaultlayout/render.html: -------------------------------------------------------------------------------- 1 | {% extends widgy.owner.base_template|default:"layout_base.html" %} 2 | {% load widgy_tags %} 3 | 4 | {% block content %} 5 |
6 | {# I had to overwrite the h1 #} 7 |

{{ widgy.owner.title }}

8 | 9 | {% render self.get_children.0 %} 10 |
11 | 12 | 15 | {% endblock %} 16 | -------------------------------------------------------------------------------- /demo/widgysite.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | 3 | from widgy.contrib.review_queue.site import ReviewedWidgySite 4 | 5 | 6 | class DemoWidgySite(ReviewedWidgySite): 7 | pass 8 | 9 | 10 | widgy_site = DemoWidgySite() 11 | -------------------------------------------------------------------------------- /demo/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for demo project. 3 | 4 | This module contains the WSGI application used by Django's development server 5 | and any production WSGI deployments. It should expose a module-level variable 6 | named ``application``. Django's ``runserver`` and ``runfcgi`` commands discover 7 | this application via the ``WSGI_APPLICATION`` setting. 8 | 9 | Usually you will have the standard Django WSGI application here, but it also 10 | might make sense to replace the whole Django WSGI application with a custom one 11 | that later delegates to the Django one. For example, you could introduce WSGI 12 | middleware here, or combine a Django application with an application of another 13 | framework. 14 | 15 | """ 16 | import os 17 | 18 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "demo.settings") 19 | 20 | # This application object is used by any WSGI server configured to use this 21 | # file. This includes Django's development server, if the WSGI_APPLICATION 22 | # setting points here. 23 | from django.core.wsgi import get_wsgi_application 24 | application = get_wsgi_application() 25 | 26 | # Apply WSGI middleware here. 27 | # from helloworld.wsgi import HelloWorldApplication 28 | # application = HelloWorldApplication(application) 29 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | _build/ 2 | -------------------------------------------------------------------------------- /docs/_ext/djangodocs.py: -------------------------------------------------------------------------------- 1 | def setup(app): 2 | app.add_crossref_type( 3 | directivename="setting", 4 | rolename="setting", 5 | indextemplate="pair: %s; setting", 6 | ) 7 | 8 | app.add_crossref_type( 9 | directivename="django-admin", 10 | rolename="djadmin", 11 | ) 12 | 13 | app.add_crossref_type( 14 | directivename = "templatetag", 15 | rolename = "ttag", 16 | indextemplate = "pair: %s; template tag" 17 | ) 18 | -------------------------------------------------------------------------------- /docs/_images/new-save-flow_after.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/docs/_images/new-save-flow_after.png -------------------------------------------------------------------------------- /docs/_images/new-save-flow_before.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/docs/_images/new-save-flow_before.png -------------------------------------------------------------------------------- /docs/_themes/kr/layout.html: -------------------------------------------------------------------------------- 1 | {%- extends "basic/layout.html" %} 2 | {%- block extrahead %} 3 | {{ super() }} 4 | {% if theme_touch_icon %} 5 | 6 | {% endif %} 7 | 9 | 10 | {% endblock %} 11 | {%- block relbar2 %}{% endblock %} 12 | {%- block footer %} 13 | 16 | 17 | Fork me on GitHub 18 | 19 | {%- endblock %} 20 | -------------------------------------------------------------------------------- /docs/_themes/kr/relations.html: -------------------------------------------------------------------------------- 1 |

Related Topics

2 | 20 | -------------------------------------------------------------------------------- /docs/_themes/kr/static/small_flask.css: -------------------------------------------------------------------------------- 1 | /* 2 | * small_flask.css_t 3 | * ~~~~~~~~~~~~~~~~~ 4 | * 5 | * :copyright: Copyright 2010 by Armin Ronacher. 6 | * :license: Flask Design License, see LICENSE for details. 7 | */ 8 | 9 | body { 10 | margin: 0; 11 | padding: 20px 30px; 12 | } 13 | 14 | div.documentwrapper { 15 | float: none; 16 | background: white; 17 | } 18 | 19 | div.sphinxsidebar { 20 | display: block; 21 | float: none; 22 | width: 102.5%; 23 | margin: 50px -30px -20px -30px; 24 | padding: 10px 20px; 25 | background: #333; 26 | color: white; 27 | } 28 | 29 | div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, 30 | div.sphinxsidebar h3 a { 31 | color: white; 32 | } 33 | 34 | div.sphinxsidebar a { 35 | color: #aaa; 36 | } 37 | 38 | div.sphinxsidebar p.logo { 39 | display: none; 40 | } 41 | 42 | div.document { 43 | width: 100%; 44 | margin: 0; 45 | } 46 | 47 | div.related { 48 | display: block; 49 | margin: 0; 50 | padding: 10px 0 20px 0; 51 | } 52 | 53 | div.related ul, 54 | div.related ul li { 55 | margin: 0; 56 | padding: 0; 57 | } 58 | 59 | div.footer { 60 | display: none; 61 | } 62 | 63 | div.bodywrapper { 64 | margin: 0; 65 | } 66 | 67 | div.body { 68 | min-height: 0; 69 | padding: 0; 70 | } 71 | 72 | .rtd_doc_footer { 73 | display: none; 74 | } 75 | 76 | .document { 77 | width: auto; 78 | } 79 | 80 | .footer { 81 | width: auto; 82 | } 83 | 84 | .footer { 85 | width: auto; 86 | } 87 | 88 | .github { 89 | display: none; 90 | } -------------------------------------------------------------------------------- /docs/_themes/kr/theme.conf: -------------------------------------------------------------------------------- 1 | [theme] 2 | inherit = basic 3 | stylesheet = flasky.css 4 | pygments_style = flask_theme_support.FlaskyStyle 5 | 6 | [options] 7 | touch_icon = 8 | -------------------------------------------------------------------------------- /docs/api/index.rst: -------------------------------------------------------------------------------- 1 | API Reference 2 | ============= 3 | 4 | .. toctree:: 5 | :maxdepth: 1 6 | 7 | models 8 | fields 9 | forms 10 | site 11 | links 12 | template-tags 13 | -------------------------------------------------------------------------------- /docs/changelog.rst: -------------------------------------------------------------------------------- 1 | :tocdepth: 1 2 | 3 | .. _changes: 4 | 5 | .. include:: ../CHANGELOG.rst 6 | -------------------------------------------------------------------------------- /docs/contrib/index.rst: -------------------------------------------------------------------------------- 1 | Contrib Packages 2 | ================ 3 | 4 | Here is where we keep the batteries. These packages are Django apps that add 5 | functionality or widgets to Widgy. 6 | 7 | .. toctree:: 8 | :maxdepth: 1 9 | 10 | page-builder/index 11 | form-builder/index 12 | widgy-mezzanine/index 13 | review-queue/index 14 | -------------------------------------------------------------------------------- /docs/design/_images/form-builder-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/docs/design/_images/form-builder-example.png -------------------------------------------------------------------------------- /docs/design/_images/interface-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/docs/design/_images/interface-example.png -------------------------------------------------------------------------------- /docs/design/data-model.rst: -------------------------------------------------------------------------------- 1 | Data Model 2 | ========== 3 | 4 | Central to Widgy are Nodes, Contents, and Widgets. :class:`~widgy.models.Node` 5 | is a subclass of Treebeard's :class:`~treebeard:treebeard.mp_tree.MP_Node`. 6 | Nodes concern themselves with the tree structure. Each Node is associated with 7 | an instance of :class:`~widgy.models.Content` subclass. A Node + Content 8 | combination is called a Widget. 9 | 10 | Storing all the structure data in Node and having that point to any subclass of 11 | Content allows us to have all the benefits of a tree, but also the flexibility 12 | to store very different data within a tree. 13 | 14 | :class:`Nodes ` are associated with their 15 | :class:`~widgy.models.Content` through a 16 | :class:`~django:django.contrib.contenttypes.generic.GenericForeignKey`. 17 | 18 | This is what a hypothetical Widgy tree might look like.:: 19 | 20 | Node (TwoColumnLayout) 21 | | 22 | +-- Node (MainBucket) 23 | | | 24 | | +-- Node (Text) 25 | | | 26 | | +-- Node (Image) 27 | | | 28 | | +-- Node (Form) 29 | | | 30 | | +-- Node (Input) 31 | | | 32 | | +-- Node (Checkboxes) 33 | | | 34 | | +-- Node (SubmitButton) 35 | | 36 | +-- Node (SidebarBucket) 37 | | 38 | +-- Node (CallToAction) 39 | -------------------------------------------------------------------------------- /docs/design/index.rst: -------------------------------------------------------------------------------- 1 | Design 2 | ====== 3 | 4 | django-widgy is a heterogeneous tree editor for Django. It enables you to 5 | combine models of different types into a tree structure. 6 | 7 | The django-widgy project is split into two main pieces. Widgy core provides 8 | :class:`~widgy.models.Node`, the :class:`~widgy.models.Content` abstract class, 9 | versioning models, views, configuration helpers, and the JavaScript editor 10 | code. Much like in Django, django-widgy has many contrib packages that provide 11 | the batteries. 12 | 13 | .. toctree:: 14 | :maxdepth: 1 15 | 16 | data-model 17 | versioning 18 | site 19 | owners 20 | javascript 21 | -------------------------------------------------------------------------------- /docs/design/javascript.rst: -------------------------------------------------------------------------------- 1 | Editor 2 | ====== 3 | 4 | Widgy provides a drag and drop JavaScript editor interface to the tree in the 5 | form of a Django formfield. 6 | 7 | .. figure:: _images/interface-example.png 8 | :scale: 50 % 9 | :alt: Interface example 10 | 11 | The editor is built on Backbone.js and RequireJS to provide a modular and 12 | customizable interface. 13 | 14 | .. figure:: _images/form-builder-example.png 15 | :scale: 50 % 16 | :alt: Form Builder example 17 | -------------------------------------------------------------------------------- /docs/design/site.rst: -------------------------------------------------------------------------------- 1 | Customization 2 | ============= 3 | 4 | .. outline customization options here, mention proxying 5 | 6 | 7 | There are two main ways to customize the behavior of Widgy and existing widgets. 8 | The first is through the :class:`~widgy.site.WidgySite`. 9 | :class:`~widgy.site.WidgySite` is a centralized source of configuration for 10 | a Widgy instance, much like Django's 11 | :class:`~django:django.contrib.admin.AdminSite`. You can also configure each 12 | widget's behavior by subclassing it with a proxy. 13 | 14 | 15 | WidgySite 16 | --------- 17 | 18 | - tracks installed widgets 19 | - stores URLs 20 | - provides authorization 21 | - allows centralized overriding of compatibility between components 22 | - accomodates for multiple instances of widgy 23 | 24 | Proxying a Widget 25 | ----------------- 26 | 27 | Widgy uses a special subclass of 28 | :class:`~django.contrib.contenttypes.generic.GenericForeignKey` that supports 29 | retrieving proxy models. Subclassing a model as a proxy is a lightweight method 30 | for providing custom behavior for widgets that you don't control. 31 | A more in-depth tutorial on proxying widgets can be found at the 32 | :doc:`../tutorials/proxy-widget`. 33 | -------------------------------------------------------------------------------- /docs/design/versioning.rst: -------------------------------------------------------------------------------- 1 | Versioning 2 | ========== 3 | 4 | Widgy comes with an optional but powerful versioning system inspired 5 | by Git. Versioning works by putting another model called a version 6 | tracker between the owner and the root node. Just like in Git, each 7 | :class:`~widgy.models.VersionTracker` has a reference to a current 8 | working copy and then a list of commits. A 9 | :class:`~widgy.models.VersionCommit` is a frozen snapshot of the 10 | tree. 11 | 12 | Versioning also supports delayed publishing of commits. Normally 13 | commits will be visible immediately, but it is possible to set a 14 | publish time for a commit that allows a user to future publish content. 15 | 16 | To enable versioning, all you need to do is use 17 | :class:`widgy.db.fields.VersionedWidgyfield` instead of 18 | :class:`widgy.db.fields.WidgyField`. 19 | 20 | 21 | .. todo:: 22 | 23 | diagram 24 | -------------------------------------------------------------------------------- /docs/index.rst: -------------------------------------------------------------------------------- 1 | django-widgy 2 | ============ 3 | 4 | django-widgy is a heterogeneous tree editor for Django that is 5 | well-suited for use as a CMS. A heterogeneous tree is a tree where 6 | each node can be a different type---just like HTML. Widgy provides 7 | the representation for heterogeneous trees as well as an interactive 8 | JavaScript editor for them. Widgy supports Django 1.4+. 9 | 10 | Widgy was originally created for powerful content management, but it can 11 | have many different uses. 12 | 13 | .. toctree:: 14 | :maxdepth: 2 15 | 16 | design/index 17 | contrib/index 18 | api/index 19 | tutorials/index 20 | changelog 21 | 22 | 23 | Development 24 | ----------- 25 | 26 | You can follow and contribute to Widgy's development on GitHub_. There is a 27 | developers mailing list available at `widgy@fusionbox.com 28 | `_ 29 | 30 | 31 | .. image:: https://travis-ci.org/fusionbox/django-widgy.png?branch=master 32 | :target: http://travis-ci.org/fusionbox/django-widgy 33 | :alt: Build Status 34 | 35 | .. _GitHub: https://github.com/fusionbox/django-widgy 36 | -------------------------------------------------------------------------------- /docs/roadmap.md: -------------------------------------------------------------------------------- 1 | Design 2 | 3 | Data Model 4 | Base Model structure 5 | Versioning 6 | WidgySite (rationale) 7 | Owner Contract 8 | JavaScript (low priority) 9 | 10 | Contrib Packages 11 | 12 | Page Builder (list of widgets) 13 | Form Builder 14 | - installation (HandleFormMixin) 15 | - list of widgets 16 | - Form API 17 | - success handlers 18 | Widgy Mezzanine 19 | - installation 20 | Review Queue 21 | - installation / permissions 22 | 23 | API Reference 24 | 25 | Model Fields 26 | Forms/Formfields 27 | Node API 28 | Content API 29 | WidgySite (API) 30 | Links API 31 | 32 | 33 | Tutorials 34 | 35 | Tutorial with Widgy Mezzanine 36 | - start at startproject 37 | - install Mezzanine 38 | - end at creating your own widget. 39 | Creating your first Widget 40 | Creating a custom widgy owner 41 | - views 42 | Creating a component (low priority) 43 | -------------------------------------------------------------------------------- /docs/tutorials/index.rst: -------------------------------------------------------------------------------- 1 | Tutorials 2 | ========= 3 | 4 | 5 | .. toctree:: 6 | :maxdepth: 1 7 | 8 | widgy-mezzanine-tutorial 9 | require-optimizer 10 | first-widget 11 | proxy-widget 12 | custom-owner 13 | -------------------------------------------------------------------------------- /docs/tutorials/require-optimizer.rst: -------------------------------------------------------------------------------- 1 | Building Widgy's JavaScript With RequireJS 2 | ========================================== 3 | 4 | Widgy's editing interface uses RequireJS to handle dependency management 5 | and to encourage code modularity. This is convenient for development, 6 | but might be slow in production due to the many small JavaScript files. 7 | Widgy supports building its JavaScript with the `RequireJS optimizer`_ 8 | to remedy this. This is entirely optional and only necessary if the 9 | performance of loading many small JavaScript and template files bothers 10 | you. 11 | 12 | To build the JavaScript, 13 | 14 | - Install ``django-require``:: 15 | 16 | pip install django-require 17 | 18 | - Add the settings for django-require:: 19 | 20 | REQUIRE_BUILD_PROFILE = 'widgy.build.js' 21 | REQUIRE_BASE_URL = 'widgy/js' 22 | STATICFILES_STORAGE = 'require.storage.OptimizedStaticFilesStorage' 23 | 24 | - Install ``node`` or ``rhino`` to run ``r.js``. django-require will 25 | detect which one you installed. ``rhino`` is nice because you can 26 | apt-get it:: 27 | 28 | apt-get install rhino 29 | 30 | Now the JavaScript will automatically built during 31 | :django:djadmin:`collectstatic`. 32 | 33 | 34 | .. _RequireJS optimizer: http://requirejs.org/docs/optimization.html 35 | -------------------------------------------------------------------------------- /js_tests/README.md: -------------------------------------------------------------------------------- 1 | # Test Framework 2 | -------------------------------------------------------------------------------- /js_tests/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test_js", 3 | "version": "0.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "directories": { 7 | "test": "tests" 8 | }, 9 | "dependencies": { 10 | "jsdom": "~1.0.0", 11 | "requirejs": "~2.1.4", 12 | "chai": "~1.4.2", 13 | "sinon": "~1.7.1" 14 | }, 15 | "devDependencies": { 16 | "mocha": "~1.8.1", 17 | "mocha-as-promised": "~1.2.1" 18 | }, 19 | "scripts": { 20 | "test": "mocha" 21 | }, 22 | "repository": "", 23 | "author": "", 24 | "license": "BSD", 25 | "readmeFilename": "README.md" 26 | } 27 | -------------------------------------------------------------------------------- /js_tests/tests/setup.js: -------------------------------------------------------------------------------- 1 | var path = require('path'), 2 | requirejs = require('requirejs'), 3 | jsdom = require('jsdom').jsdom; 4 | 5 | require('mocha-as-promised')(); 6 | 7 | global.document = global.document || jsdom(); 8 | global.window = global.window = global.document.parentWindow; 9 | 10 | requirejs.config({ 11 | baseUrl: path.join(__dirname, "../../widgy/static/widgy/js/"), 12 | paths: { 13 | 'jquery': './lib/jquery', 14 | 'underscore': './lib/underscore', 15 | 'backbone': './lib/backbone', 16 | 'text': 'require/text' 17 | } 18 | }); 19 | 20 | // Backbone expects window.jQuery to be set. 21 | var Backbone = requirejs('lib/backbone'), 22 | jQuery = requirejs('lib/jquery'); 23 | 24 | Backbone.$ = jQuery; 25 | 26 | // Does this matter? Backbone needs this set 27 | global.location = { 28 | href: '//127.0.0.1' 29 | }; 30 | 31 | test = { 32 | create: function(){ 33 | document.innerHTML = ''; 34 | }, 35 | 36 | destroy: function(){ 37 | document.innerHTML = ''; 38 | } 39 | }; 40 | 41 | requirejs.define('components/testcomponent/component', ['widgy.contents'], function(contents) { 42 | var TestContent = contents.Model.extend(); 43 | var EditorView = contents.EditorView.extend(); 44 | 45 | var WidgetView = contents.View.extend({ 46 | editorClass: EditorView 47 | }); 48 | 49 | return _.extend({}, contents, { 50 | Model: TestContent, 51 | View: WidgetView 52 | }); 53 | }); 54 | 55 | module.exports = { 56 | test: test 57 | }; 58 | -------------------------------------------------------------------------------- /js_tests/tests/test_nodeview.js: -------------------------------------------------------------------------------- 1 | var test = require('./setup').test, 2 | requirejs = require('requirejs'), 3 | assert = require('chai').assert, 4 | sinon = require('sinon'); 5 | 6 | var nodes = requirejs('nodes/nodes'), 7 | shelves = requirejs('shelves/shelves'), 8 | _ = requirejs('underscore'), 9 | Q = requirejs('lib/q'); 10 | 11 | 12 | describe('ShelfView', function() { 13 | beforeEach(function() { 14 | this.node = new nodes.Node({ 15 | content: { 16 | component: 'testcomponent', 17 | shelf: true 18 | } 19 | }); 20 | }); 21 | 22 | it('bubbles ShelfItemView events', function() { 23 | return this.node.ready(function(node) { 24 | var node_view = new nodes.NodeView({model: node}), 25 | callback = sinon.spy(), 26 | // this would happen in renderShelf 27 | shelf = node_view.makeShelf(); 28 | 29 | shelf.collection.add({}); 30 | var shelf_item = shelf.list.at(0); 31 | 32 | shelf.on('foo', callback); 33 | assert.isFalse(callback.called); 34 | shelf_item.trigger('foo'); 35 | assert.isTrue(callback.called); 36 | }); 37 | }); 38 | }); 39 | -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os, sys 3 | 4 | if __name__ == "__main__": 5 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "demo.settings") 6 | 7 | from django.core.management import execute_from_command_line 8 | 9 | execute_from_command_line(sys.argv) 10 | -------------------------------------------------------------------------------- /pytest.ini: -------------------------------------------------------------------------------- 1 | [pytest] 2 | python_files = test_*.py tests.py 3 | -------------------------------------------------------------------------------- /requirements-test.txt: -------------------------------------------------------------------------------- 1 | mock 2 | dj-database-url 3 | tox>=1.8.0 4 | pytest 5 | pytest-cov 6 | pytest-django 7 | py 8 | -------------------------------------------------------------------------------- /tests/.coveragerc: -------------------------------------------------------------------------------- 1 | [run] 2 | omit = runtests,test_sqlite,regressiontests*,modeltests*,*/django/contrib/*/tests*,*/django/utils/unittest*,*/django/utils/simplejson*,*/django/utils/importlib.py,*/django/test/_doctest.py,*/django/core/servers/fastcgi.py,*/django/utils/autoreload.py,*/django/utils/dictconfig.py 3 | 4 | [html] 5 | directory = coverage_html 6 | -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/tests/__init__.py -------------------------------------------------------------------------------- /tests/core_tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/tests/core_tests/__init__.py -------------------------------------------------------------------------------- /tests/core_tests/migrations/0002_auto_20150701_1654.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.db import models, migrations 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('core_tests', '0001_initial'), 11 | ] 12 | 13 | operations = [ 14 | migrations.CreateModel( 15 | name='ManyToManyWidget', 16 | fields=[ 17 | ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), 18 | ], 19 | ), 20 | migrations.CreateModel( 21 | name='Tag', 22 | fields=[ 23 | ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), 24 | ('name', models.CharField(unique=True, max_length=100)), 25 | ], 26 | ), 27 | migrations.AddField( 28 | model_name='manytomanywidget', 29 | name='tags', 30 | field=models.ManyToManyField(to='core_tests.Tag'), 31 | ), 32 | ] 33 | -------------------------------------------------------------------------------- /tests/core_tests/migrations/0003_compressorwidget.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.5 on 2017-02-03 17:07 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('core_tests', '0002_auto_20150701_1654'), 12 | ] 13 | 14 | operations = [ 15 | migrations.CreateModel( 16 | name='CompressorWidget', 17 | fields=[ 18 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 19 | ('text', models.CharField(max_length=100)), 20 | ], 21 | options={ 22 | 'abstract': False, 23 | }, 24 | ), 25 | ] 26 | -------------------------------------------------------------------------------- /tests/core_tests/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/tests/core_tests/migrations/__init__.py -------------------------------------------------------------------------------- /tests/core_tests/static/widgy/core_tests/admin.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/tests/core_tests/static/widgy/core_tests/admin.scss -------------------------------------------------------------------------------- /tests/core_tests/static/widgy/core_tests/rawtextwidget.admin.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/tests/core_tests/static/widgy/core_tests/rawtextwidget.admin.scss -------------------------------------------------------------------------------- /tests/core_tests/static/widgy/core_tests/rawtextwidget.js: -------------------------------------------------------------------------------- 1 | // exists for tests 2 | -------------------------------------------------------------------------------- /tests/core_tests/static/widgy/core_tests/rawtextwidget.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/tests/core_tests/static/widgy/core_tests/rawtextwidget.scss -------------------------------------------------------------------------------- /tests/core_tests/templates/widgy/core_tests/compressorwidget/render.html: -------------------------------------------------------------------------------- 1 | {% load compress %} 2 | {% compress css %} 3 | 5 | {% endcompress %} 6 | {{ self.text }} 7 | -------------------------------------------------------------------------------- /tests/core_tests/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/tests/core_tests/tests/__init__.py -------------------------------------------------------------------------------- /tests/core_tests/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import url, include 2 | 3 | from .widgy_config import widgy_site 4 | 5 | urlpatterns = [ 6 | url('', include(widgy_site.urls)), 7 | ] 8 | -------------------------------------------------------------------------------- /tests/core_tests/widgy_config.py: -------------------------------------------------------------------------------- 1 | from widgy.site import WidgySite 2 | from widgy.db.fields import VersionedWidgyField, WidgyField 3 | 4 | 5 | widgy_site = WidgySite() 6 | 7 | # This emulates importing models from a site file. It must come after 8 | # widgy_site is defined, because widgy doesn't exist yet without the 9 | # site. 10 | # We have to be able to import models from the site file to use when 11 | # checking compatibility. 12 | VersionedWidgyField(site='tests.core_tests.widgy_config.widgy_site') 13 | WidgyField(site='tests.core_tests.widgy_config.widgy_site') 14 | -------------------------------------------------------------------------------- /tests/settings_contrib.py: -------------------------------------------------------------------------------- 1 | from .settings import * 2 | 3 | 4 | PACKAGE_NAME_FILEBROWSER = "filebrowser_safe" 5 | PACKAGE_NAME_GRAPPELLI = "grappelli_safe" 6 | GRAPPELLI_INSTALLED = True 7 | 8 | INSTALLED_APPS += [ 9 | 'django.contrib.redirects', 10 | 'mezzanine.conf', 11 | 'mezzanine.core', 12 | 'mezzanine.generic', 13 | 'mezzanine.pages', 14 | 'mezzanine.forms', 15 | 'filebrowser_safe', 16 | 'grappelli_safe', 17 | 'filer', 18 | 'easy_thumbnails', 19 | 'widgy.contrib.widgy_mezzanine', 20 | 'widgy.contrib.form_builder', 21 | 'widgy.contrib.page_builder', 22 | 'widgy.contrib.urlconf_include', 23 | 'widgy.contrib.widgy_i18n', 24 | ] 25 | 26 | # XXX Mezzanine insists on having some version of django comments installed. 27 | try: 28 | import django_comments 29 | except ImportError: 30 | INSTALLED_APPS.append('django.contrib.comments') 31 | else: 32 | INSTALLED_APPS.append('django_comments') 33 | 34 | 35 | TEMPLATES[0]['OPTIONS']['context_processors'] += [ 36 | "mezzanine.conf.context_processors.settings", 37 | "mezzanine.pages.context_processors.page", 38 | ] 39 | 40 | ALLOWED_HOSTS = ['*'] 41 | -------------------------------------------------------------------------------- /tests/urls.py: -------------------------------------------------------------------------------- 1 | import django 2 | from django.conf.urls import include, url 3 | from django.conf import settings 4 | from django.contrib import admin 5 | 6 | if django.VERSION < (1, 7): 7 | admin.autodiscover() 8 | 9 | 10 | def dummy_view(*args, **kwargs): 11 | pass 12 | 13 | 14 | urlpatterns = [ 15 | url('^core_tests/', include('tests.core_tests.urls')), 16 | url("^admin/", include(admin.site.urls)), 17 | # mezzanine.pages.views.page reverses the 'home' url. 18 | url('^$', dummy_view, name='home'), 19 | ] 20 | 21 | if 'widgy.contrib.widgy_mezzanine' in settings.INSTALLED_APPS: 22 | urlpatterns += [ 23 | url('^widgy-mezzanine/', include('widgy.contrib.widgy_mezzanine.urls')), 24 | url('^mezzanine/', include('mezzanine.urls')), 25 | ] 26 | -------------------------------------------------------------------------------- /tests/utilstests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/tests/utilstests/__init__.py -------------------------------------------------------------------------------- /tests/utilstests/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | 4 | class Base(models.Model): 5 | foo = models.AutoField(primary_key=True) 6 | 7 | class Child(Base): 8 | pass 9 | -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- 1 | [tox] 2 | envlist= 3 | # core python/django/database 4 | py{27,34}-dj{111}-{sqlite,mysql,postgres}, 5 | # contrib 6 | py{27,34}-dj{111}-contrib-{sqlite,mysql,postgres}, 7 | # javascript 8 | javascript 9 | [testenv] 10 | basepython= 11 | py27: python2.7 12 | py34: python3.4 13 | commands= 14 | contrib: pip install -e .[page_builder,widgy_mezzanine,form_builder] --log-file {envdir}/pip-extras-require-log.log 15 | py.test {posargs} 16 | setenv= 17 | DJANGO_SETTINGS_MODULE=tests.settings 18 | sqlite: DATABASE_URL=sqlite:///test_db.sqlite3 19 | postgres: DATABASE_URL=postgres://postgres:@127.0.0.1:5432/widgy 20 | mysql: DATABASE_URL=mysql://root:@127.0.0.1:3306/widgy 21 | contrib: DJANGO_SETTINGS_MODULE=tests.settings_contrib 22 | install_command = pip install {packages} 23 | deps= 24 | dj111: Django>=1.11,<1.12 25 | mysql: mysqlclient 26 | postgres: psycopg2 27 | # Intentionaly no space between -r{toxinidir} because tox falls over if there is a space. 28 | -r{toxinidir}/requirements-test.txt 29 | whitelist_externals= 30 | env 31 | make 32 | 33 | [testenv:javascript] 34 | basepython=python2.7 35 | commands= 36 | /usr/bin/env 37 | make test-js 38 | setenv= 39 | # Needed by node-gyp, a dependency of contextify from jsdom. 40 | # Development files for node addons are downloaded to $HOME/.node-gyp. 41 | # https://github.com/TooTallNate/node-gyp/issues/21 42 | HOME=/home/travis 43 | skipsdist=true 44 | deps= 45 | -------------------------------------------------------------------------------- /travis/my.cnf: -------------------------------------------------------------------------------- 1 | [mysqld] 2 | character-set-server=utf8 3 | collation-server=utf8_general_ci 4 | -------------------------------------------------------------------------------- /widgy/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib.admin import ModelAdmin 2 | from django.core.exceptions import PermissionDenied 3 | 4 | from widgy.forms import WidgyForm 5 | 6 | 7 | class AuthorizedAdminMixin(object): 8 | def _has_permission(self, request, obj=None): 9 | try: 10 | self.get_site().authorize_view(request, self) 11 | return True 12 | except PermissionDenied: 13 | return False 14 | 15 | def has_add_permission(self, request, obj=None): 16 | return super(AuthorizedAdminMixin, self).has_add_permission(request, obj) and self._has_permission(request, obj) 17 | 18 | def has_change_permission(self, request, obj=None): 19 | return super(AuthorizedAdminMixin, self).has_change_permission(request, obj) and self._has_permission(request, obj) 20 | 21 | def has_delete_permission(self, request, obj=None): 22 | return super(AuthorizedAdminMixin, self).has_delete_permission(request, obj) and self._has_permission(request, obj) 23 | 24 | 25 | class WidgyAdmin(ModelAdmin): 26 | """ 27 | Base class for ModelAdmins whose models contain WidgyFields. 28 | """ 29 | form = WidgyForm 30 | -------------------------------------------------------------------------------- /widgy/contrib/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/contrib/__init__.py -------------------------------------------------------------------------------- /widgy/contrib/form_builder/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/contrib/form_builder/__init__.py -------------------------------------------------------------------------------- /widgy/contrib/form_builder/migrations/0002_auto_20150311_2118.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.db import models, migrations 5 | import widgy.contrib.form_builder.models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('form_builder', '0001_initial'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AlterField( 16 | model_name='form', 17 | name='name', 18 | field=models.CharField(default=widgy.contrib.form_builder.models.untitled_form, help_text='A name to help identify this form. Only admins see this.', max_length=255, verbose_name='Name'), 19 | preserve_default=True, 20 | ), 21 | ] 22 | -------------------------------------------------------------------------------- /widgy/contrib/form_builder/migrations/0003_auto_20150730_1401.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.db import models, migrations 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('form_builder', '0002_auto_20150311_2118'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='emailsuccesshandler', 16 | name='to', 17 | field=models.EmailField(max_length=254, verbose_name='to'), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /widgy/contrib/form_builder/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/contrib/form_builder/migrations/__init__.py -------------------------------------------------------------------------------- /widgy/contrib/form_builder/static/widgy/form_builder/admin.scss: -------------------------------------------------------------------------------- 1 | @import "/widgy/css/widgy_common.scss"; 2 | 3 | li.node, 4 | li.shelfItem { 5 | @include node-icon("form_builder.choicefield", "widgy/image/widget-radio.png"); 6 | @include node-icon("form_builder.emailsuccesshandler", "widgy/image/widget-email.png"); 7 | @include node-icon("form_builder.emailuserhandler", "widgy/image/widget-email.png"); 8 | @include node-icon("form_builder.form", "widgy/image/widget-form.gif"); 9 | @include node-icon("form_builder.forminput", "widgy/image/widget-form.gif"); 10 | @include node-icon("form_builder.multiplechoicefield", "widgy/image/widget-checkbox.png"); 11 | @include node-icon("form_builder.savedatahandler", "widgy/image/widget-save-data.png"); 12 | @include node-icon("form_builder.submitbutton", "widgy/image/widget-button.png"); 13 | @include node-icon("form_builder.textarea", "widgy/image/widget-textarea.png"); 14 | @include node-icon("form_builder.uncaptcha", "widgy/image/widget-hidden-field.png"); 15 | @include node-icon("form_builder.webtoleadmapperhandler", "widgy/image/widget-salesforce.png"); 16 | @include node-icon("form_builder.fieldmappingvalue", "widgy/image/widget-icon-mapped-field.png"); 17 | } 18 | -------------------------------------------------------------------------------- /widgy/contrib/form_builder/templates/admin/form_builder/form/change_form.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/change_form.html" %} 2 | 3 | {% load i18n %} 4 | 5 | {% block content %} 6 |
7 | {% block object-tools %} 8 | 11 | {% endblock %} 12 | 13 | 14 | 15 | 16 | {% for ident, header in headers.items %} 17 | 18 | {% endfor %} 19 | 20 | 21 | 22 | {% for row in rows %} 23 | 24 | {% for ident, value in row.items %} 25 | 26 | {% endfor %} 27 | 28 | {% endfor %} 29 | 30 |
{{ header }}
{{ value }}
31 |
32 | {% endblock %} 33 | -------------------------------------------------------------------------------- /widgy/contrib/form_builder/templates/widgy/form_builder/form/preview.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/mixins/tabbed/preview.html" %} 2 | {% load i18n %} 3 | {% block title %} 4 | {{ block.super }} 5 | {% if self.submission_count %} 6 | {% trans 'view submissions' %} 7 | {% endif %} 8 | {% endblock %} 9 | -------------------------------------------------------------------------------- /widgy/contrib/form_builder/templates/widgy/form_builder/form/render.html: -------------------------------------------------------------------------------- 1 | {% load widgy_tags %} 2 | 3 | {% if success %} 4 | {% render self.children.meta.children.message %} 5 | {% else %} 6 |
7 | {% csrf_token %} 8 | {% render self.children.fields %} 9 |
10 | {% endif %} 11 | -------------------------------------------------------------------------------- /widgy/contrib/form_builder/templates/widgy/form_builder/form_email.html: -------------------------------------------------------------------------------- 1 | {{ self.content|safe }} 2 | {% if self.include_form_data %} 3 |

Form Data

4 | 5 | 6 | {% for label, value in data %} 7 | 8 | 9 | 10 | 11 | {% endfor %} 12 |
{{ label }}{{ value|linebreaksbr }}
13 | {% endif %} 14 | -------------------------------------------------------------------------------- /widgy/contrib/form_builder/templates/widgy/form_builder/formfield/render.html: -------------------------------------------------------------------------------- 1 | {% if field.is_hidden %}{{ field }}{% else %} 2 |
3 | {{field.label_tag}} 4 | {{field}} 5 | {% if field.help_text %} 6 |
{{ field.help_text|safe }}
7 | {% endif %}{{field.errors}} 8 |
9 | {% endif %} 10 | -------------------------------------------------------------------------------- /widgy/contrib/form_builder/templates/widgy/form_builder/forminput/render.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/form_builder/formfield/render.html" %} 2 | 3 | {% block formField_classes %}{{ self.type }}-field {{ block.super }}{% endblock %} 4 | -------------------------------------------------------------------------------- /widgy/contrib/form_builder/templates/widgy/form_builder/submitbutton/render.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /widgy/contrib/form_builder/templates/widgy/form_builder/uncaptcha/render.html: -------------------------------------------------------------------------------- 1 | {% load argonauts i18n %}{{ field.errors }} 2 |
3 | 4 | 5 |
{% blocktrans %}Please copy "{{ csrf_token }}" into the field labeled "Uncaptcha".{% endblocktrans %}
6 |
7 | 17 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/contrib/page_builder/__init__.py -------------------------------------------------------------------------------- /widgy/contrib/page_builder/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from widgy.admin import WidgyAdmin 4 | from widgy.contrib.page_builder.models import Callout 5 | 6 | 7 | class CalloutAdmin(WidgyAdmin): 8 | fields = ('name', 'root_node', ) 9 | 10 | admin.site.register(Callout, CalloutAdmin) 11 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/db/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/contrib/page_builder/db/__init__.py -------------------------------------------------------------------------------- /widgy/contrib/page_builder/migrations/0002_add_site_to_callout.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.db import models, migrations 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('sites', '0001_initial'), 11 | ('page_builder', '0001_initial'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AddField( 16 | model_name='callout', 17 | name='site', 18 | field=models.ForeignKey(blank=True, to='sites.Site', null=True), 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/migrations/0003_auto_20160325_0914.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.9.3.dev20160222232741 on 2016-03-25 15:14 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | import django.db.models.deletion 7 | import filer.fields.image 8 | 9 | 10 | class Migration(migrations.Migration): 11 | 12 | dependencies = [ 13 | ('page_builder', '0002_add_site_to_callout'), 14 | ] 15 | 16 | operations = [ 17 | migrations.AlterField( 18 | model_name='image', 19 | name='image', 20 | field=filer.fields.image.FilerImageField(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='filer.Image', verbose_name='image'), 21 | ), 22 | ] 23 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/contrib/page_builder/migrations/__init__.py -------------------------------------------------------------------------------- /widgy/contrib/page_builder/static/widgy/js/components/markdown/component.js: -------------------------------------------------------------------------------- 1 | require.config({ 2 | shim: { 3 | 'pagedown': { 4 | deps: ['pagedown-converter', 'pagedown-sanitizer'], 5 | exports: 'Markdown' 6 | }, 7 | 'pagedown-sanitizer': { 8 | deps: ['pagedown-converter'] 9 | } 10 | }, 11 | paths: { 12 | 'pagedown': 'components/markdown/lib/Markdown.Editor', 13 | 'pagedown-converter': 'components/markdown/lib/Markdown.Converter', 14 | 'pagedown-sanitizer': 'components/markdown/lib/Markdown.Sanitizer' 15 | } 16 | }); 17 | 18 | define([ 'underscore', 'components/widget/component', 'pagedown' ], function(_, widget, Markdown) { 19 | 20 | var idPostfix = 1; 21 | 22 | var MarkdownEditorView = widget.EditorView.extend({ 23 | renderHTML: function() { 24 | widget.EditorView.prototype.renderHTML.apply(this, arguments); 25 | 26 | var textarea = this.$('textarea[name=' + this.getPrefixedFieldName('content') + ']')[0], 27 | preview = this.$('.pagedown-preview')[0], 28 | buttonBar = this.$('.pagedown-buttonbar')[0], 29 | converter = Markdown.getSanitizingConverter(); 30 | 31 | var editor = new Markdown.Editor(converter, textarea, preview, buttonBar, { 32 | idPostfix: idPostfix++ 33 | }); 34 | 35 | editor.run(); 36 | 37 | return this; 38 | } 39 | }); 40 | 41 | var MarkdownView = widget.View.extend({ 42 | editorClass: MarkdownEditorView 43 | }); 44 | 45 | return _.extend({}, widget, { 46 | View: MarkdownView 47 | }); 48 | }); 49 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/static/widgy/js/components/markdown/lib/wmd-buttons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/contrib/page_builder/static/widgy/js/components/markdown/lib/wmd-buttons.png -------------------------------------------------------------------------------- /widgy/contrib/page_builder/static/widgy/js/components/table/component.js: -------------------------------------------------------------------------------- 1 | define([ 'underscore', 'jquery', 'components/widget/component' ], function(_, $, widget) { 2 | 3 | var TableView = widget.View.extend({ 4 | initialize: function() { 5 | widget.View.prototype.initialize.apply(this, arguments); 6 | 7 | _.bindAll(this, 8 | 'block', 9 | 'unblock', 10 | 'refresh' 11 | ); 12 | }, 13 | 14 | block: function() { 15 | if ( ! this.overlay ) 16 | this.overlay = $('
').appendTo(this.el); 17 | }, 18 | 19 | unblock: function() { 20 | if ( this.overlay ) { 21 | this.overlay.remove(); 22 | delete this.overlay; 23 | } 24 | }, 25 | 26 | refresh: function(options) { 27 | this.node.fetch(_.extend({ 28 | app: this.app, 29 | success: this.unblock 30 | }, options)); 31 | } 32 | }); 33 | 34 | return _.extend({}, widget, { 35 | View: TableView 36 | }); 37 | }); 38 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/static/widgy/js/components/tableheader/component.js: -------------------------------------------------------------------------------- 1 | define([ 'underscore', 'lib/q', 'components/widget/component' ], function(_, Q, widget) { 2 | 3 | var TableHeaderView = widget.View.extend({ 4 | initialize: function() { 5 | widget.View.prototype.initialize.apply(this, arguments); 6 | 7 | this 8 | .listenTo(this.collection, 'destroy_child', this.parent.block) 9 | .listenTo(this.collection, 'destroy', this.parent.refresh) 10 | .listenTo(this.collection, 'receive_child', this.parent.block) 11 | .listenTo(this.collection, 'sort', this.moveColumn); 12 | }, 13 | 14 | moveColumn: function(collection, options) { 15 | // Avoid recursion. 16 | if ( options && options.moveColumn ) 17 | return; 18 | 19 | this.parent.refresh({moveColumn: true, resort: true}); 20 | }, 21 | 22 | addChild: function() { 23 | var parent = this, 24 | table = this.parent, 25 | promise = this.addChildPromise.apply(this, arguments); 26 | 27 | if ( promise ) { 28 | promise.then(function(node_view) { 29 | return Q(table.refresh({sort_silently: true})).then(function() { 30 | parent.resortChildren(); 31 | }); 32 | }).done(); 33 | } 34 | 35 | return promise; 36 | } 37 | }); 38 | 39 | return _.extend({}, widget, { 40 | View: TableHeaderView 41 | }); 42 | }); 43 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/static/widgy/page_builder/accordion.js: -------------------------------------------------------------------------------- 1 | /* adapted from 2 | * http://zogovic.com/post/21784525226/simple-html5-details-polyfill 3 | */ 4 | jQuery(function($) { 5 | var supported = 'open' in document.createElement('details'); 6 | 7 | if ( ! supported ) { 8 | $(document.body).addClass('no-details'); 9 | $('summary').on('click', function(event) { 10 | var $details = $(this).closest('details'); 11 | if ( $details.attr('open') || $details.hasClass('open') ) 12 | $details.removeAttr('open').removeClass('open'); 13 | else 14 | $details.attr('open', true).addClass('open'); 15 | }); 16 | return false; 17 | } 18 | }); 19 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/static/widgy/page_builder/accordion.scss: -------------------------------------------------------------------------------- 1 | .no-details details { 2 | > * { 3 | position: absolute; 4 | visibility: hidden; 5 | } 6 | 7 | > summary, &[open] > * { 8 | position: static; 9 | visibility: visible; 10 | } 11 | 12 | 13 | > summary { 14 | display: block; 15 | &:before { 16 | content: "\25ba"; // BLACK RIGHT-POINTING TRIANGLE 17 | padding-right: 5px; 18 | } 19 | } 20 | 21 | &[open] > summary:before { 22 | content:"\25bc"; // BLACK DOWN-POINTING TRIANGLE 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/static/widgy/page_builder/admin.scss: -------------------------------------------------------------------------------- 1 | @import "/widgy/css/widgy_common.scss"; 2 | 3 | li.node, 4 | li.shelfItem { 5 | @include node-icon("page_builder.accordion", "widgy/image/widget-accordion.png"); 6 | @include node-icon("page_builder.buttonwidget", "widgy/image/widget-button.png"); 7 | @include node-icon("page_builder.calloutwidget", "widgy/image/widget-callout.png"); 8 | @include node-icon("page_builder.figure", "widgy/image/widget-figure.png"); 9 | @include node-icon("page_builder.googlemap", "widgy/image/widget-google-map.png"); 10 | @include node-icon("page_builder.html", "widgy/image/widget-html.png"); 11 | @include node-icon("page_builder.image", "widgy/image/widget-image.gif"); 12 | @include node-icon("page_builder.markdown", "widgy/image/widget-code.gif"); 13 | @include node-icon("page_builder.section", "widgy/image/widget-section.png"); 14 | @include node-icon("page_builder.tableheaderdata", "widgy/image/widget-tablecolumn.png"); 15 | @include node-icon("page_builder.table", "widgy/image/widget-table.gif"); 16 | @include node-icon("page_builder.tablerow", "widgy/image/widget-tablerow.png"); 17 | @include node-icon("page_builder.tabs", "widgy/image/widget-tab.png"); 18 | @include node-icon("page_builder.video", "widgy/image/widget-video.gif"); 19 | @include node-icon("page_builder.unsafehtml", "widgy/image/widget-skull-and-crossbones.png"); 20 | } 21 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/static/widgy/page_builder/figure.scss: -------------------------------------------------------------------------------- 1 | figure { 2 | display: block; 3 | 4 | &.left { 5 | display: inline; 6 | float: left; 7 | } 8 | &.right { 9 | display: inline; 10 | float: right; 11 | } 12 | &.center { 13 | margin: 0 auto; 14 | float: none; 15 | } 16 | figcaption { 17 | text-align: center; 18 | .title { 19 | display: block; 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/static/widgy/page_builder/googlemap.scss: -------------------------------------------------------------------------------- 1 | .googleMap { 2 | iframe { 3 | display: block; 4 | width: 100%; 5 | height: 400px; 6 | } 7 | 8 | a { 9 | color: #0000ff; 10 | font-size: 75%; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/static/widgy/page_builder/html.admin.scss: -------------------------------------------------------------------------------- 1 | @import "/widgy/css/widgy_common.scss"; 2 | 3 | .widgy .node.html { 4 | .htmlOutput { 5 | @include html; 6 | display: block !important; 7 | float: none !important; 8 | width: auto !important; 9 | 10 | code { 11 | font-family: monospace; 12 | } 13 | 14 | ul { 15 | list-style: disc; 16 | padding: 0px 0px 0px 30px !important; 17 | 18 | li { 19 | list-style-type: disc; 20 | } 21 | 22 | ol, ol li { 23 | list-style-type: decimal; 24 | } 25 | } 26 | 27 | ol { 28 | list-style: decimal; 29 | padding: 0px 0px 0px 30px !important; 30 | 31 | li { 32 | list-style-type: decimal; 33 | } 34 | 35 | ul, ul li { 36 | list-style-type: disc; 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/static/widgy/page_builder/html.scss: -------------------------------------------------------------------------------- 1 | .cke_editable, .htmlOutput { 2 | @each $i in left center right justify { 3 | .align-#{$i} { 4 | text-align: $i; 5 | } 6 | } 7 | 8 | @for $i from 1 through 5 { 9 | .text-indent-#{$i} { text-indent: 10px * $i; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/static/widgy/page_builder/image.admin.scss: -------------------------------------------------------------------------------- 1 | .widgy .node.image { 2 | .widget_editor { 3 | .formField.image { 4 | position: relative; 5 | 6 | label { 7 | display: none; 8 | } 9 | 10 | a { 11 | img { 12 | float: left; 13 | margin-right: 10px; 14 | } 15 | } 16 | 17 | span { 18 | float: left; 19 | 20 | } 21 | 22 | a.related-lookup { 23 | position: absolute; 24 | height: 10px; 25 | left: 53px; 26 | top: 25px; 27 | } 28 | 29 | input { 30 | float: left; 31 | margin-top: 6px; 32 | width: 86%; 33 | } 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/static/widgy/page_builder/table.admin.scss: -------------------------------------------------------------------------------- 1 | @import "/widgy/css/widgy_common.scss"; 2 | 3 | $table-cell-min-width: 120px; 4 | 5 | // Layout 6 | .widgy { 7 | .table { 8 | overflow: visible; 9 | 10 | > .widget > .nodeChildren { 11 | overflow-x: auto; 12 | overflow-y: hidden; 13 | } 14 | } 15 | 16 | .node.tableheader, .node.tablerow { 17 | @extend %horizontalChildren; 18 | } 19 | 20 | .tableheaderdata, .tabledata { 21 | min-width: $table-cell-min-width; 22 | 23 | .nodeChildren { 24 | width: auto !important; 25 | } 26 | } 27 | } 28 | 29 | @import "table-theme.admin.scss"; 30 | 31 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/static/widgy/page_builder/tabs.js: -------------------------------------------------------------------------------- 1 | jQuery(function($) { 2 | $('.tabify .tabs a').bind('click', function() { 3 | var href = $(this).attr('href'), 4 | tabify = $(this).closest('.tabify'), 5 | tabContent = tabify.find(href).first(); 6 | tabify.children('.tabs').find('a').removeClass('active'); // clear the active tabs 7 | tabify.children('.tabs').find('a[href="' + href + '"]').addClass('active'); // activate the clicked tab 8 | tabify.children('.tabContent').removeClass('active'); // clear the active content 9 | tabContent.addClass('active'); // show the clicked content 10 | // Change the hash without scrolling 11 | tabContent.attr('id', ''); 12 | window.location.hash = href; 13 | tabContent.attr('id', href.substr(1)); // remove the sharp 14 | return false; 15 | }); 16 | 17 | //| 18 | //| If there's a #tab in the URL, CLICK ON THAT TAB!!! 19 | //| 20 | if(window.location.hash) { 21 | $('.tabs a[href="' + window.location.hash + '"]').click(); 22 | } 23 | }); 24 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/static/widgy/page_builder/tabs.scss: -------------------------------------------------------------------------------- 1 | .tabify { 2 | .tabContent { 3 | display: none; 4 | padding: 10px 10px; 5 | 6 | &.active { 7 | display: block; 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/static/widgy/page_builder/video.scss: -------------------------------------------------------------------------------- 1 | iframe.video { 2 | width: 560px; 3 | height: 315px; 4 | } 5 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/page_builder/ckeditor_widget.html: -------------------------------------------------------------------------------- 1 | {% load argonauts %} 2 | 3 | {{ textarea }} 4 | 5 | 21 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/page_builder/datetime_widget.html: -------------------------------------------------------------------------------- 1 | {{ widget }} 2 | 15 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/widgy/page_builder/accordion/render.html: -------------------------------------------------------------------------------- 1 | {% load widgy_tags %} 2 | 3 |
4 | {% with section_behavior='accordion' %} 5 | {% for child in self.get_children %} 6 | {% render child %} 7 | {% endfor %} 8 | {% endwith %} 9 |
10 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/widgy/page_builder/bucket/render.html: -------------------------------------------------------------------------------- 1 | {% load widgy_tags %} 2 | 3 | {% for child in self.get_children %} 4 | {% render child %} 5 | {% endfor %} 6 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/widgy/page_builder/button/render.html: -------------------------------------------------------------------------------- 1 | {{ self.text }} 2 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/widgy/page_builder/calloutwidget/render.html: -------------------------------------------------------------------------------- 1 | {% load widgy_tags %} 2 | 3 | {% if self.callout %} 4 |
5 | {% render_root self.callout 'root_node' %} 6 |
7 | {% endif %} 8 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/widgy/page_builder/defaultlayout/render.html: -------------------------------------------------------------------------------- 1 | {% extends widgy.owner.base_template|default:"layout_base.html" %} 2 | {% load widgy_tags %} 3 | 4 | {% block content %} 5 |
6 |

{{ widgy.owner }}

7 | 8 | {% render self.get_children.0 %} 9 |
10 | 11 | 14 | {% endblock %} 15 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/widgy/page_builder/figure/preview.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/preview.html" %} 2 | {% load i18n %} 3 | {% block content %} 4 |

{% trans "Title" %}: {{ self.title|default:"" }}

5 |

{% trans "Caption" %}: {{ self.caption|default:"" }}

6 | {% endblock %} 7 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/widgy/page_builder/figure/render.html: -------------------------------------------------------------------------------- 1 | {% load widgy_tags %} 2 |
3 | {% for child in self.get_children %} 4 | {% render child %} 5 | {% endfor %} 6 | {% if self.title or self.caption %} 7 |
8 | {% if self.title %} 9 | {{ self.title }} 10 | {% endif %} 11 | {{ self.caption }} 12 |
13 | {% endif %} 14 |
15 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/widgy/page_builder/googlemap/preview.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/preview.html" %} 2 | 3 | {% block content %}{% spaceless %} 4 | {% if self.address %} 5 | 6 | {% endif %} 7 | {% endspaceless %}{% endblock %} 8 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/widgy/page_builder/googlemap/render.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | 6 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/widgy/page_builder/html/preview.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/preview.html" %} 2 | {% block content %} 3 |
4 | {{ self.content|safe|truncatewords_html:50 }} 5 |
6 | {% endblock %} 7 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/widgy/page_builder/html/render.html: -------------------------------------------------------------------------------- 1 |
2 | {{ self.content|safe }} 3 |
4 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/widgy/page_builder/image/preview.html: -------------------------------------------------------------------------------- 1 | {% extends 'widgy/preview.html' %} 2 | {% load thumbnail_libs %} 3 | 4 | {% block content %} 5 | {% if self.image %} 6 | {% easy_thumbnail self.image.file "100x100" as im %} 7 | 8 | {% else %} 9 |
10 | {% endif %} 11 | {% endblock %} 12 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/widgy/page_builder/image/render.html: -------------------------------------------------------------------------------- 1 | {% load thumbnail_libs %} 2 | 3 | {% sorl_thumbnail self.image.file.name "1200x1200" upscale=False as im %} 4 | {{ self.image.default_alt_text }} 5 | {% endthumbnail %} 6 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/widgy/page_builder/markdown/preview.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/preview.html" %} 2 | {% load widgy_tags %} 3 | {% block content %} 4 |
5 | {{ self.content|markdown|truncatewords_html:50 }} 6 |
7 | {% endblock %} 8 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/widgy/page_builder/markdown/render.html: -------------------------------------------------------------------------------- 1 | {% load widgy_tags %} 2 | 3 | {{ self.content|markdown }} 4 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/widgy/page_builder/section/render.html: -------------------------------------------------------------------------------- 1 | {% load widgy_tags %} 2 | 3 | {% if section_behavior == 'tabs' %} 4 |

{{ self.title }}:

5 | 6 | {% for child in self.get_children %} 7 | {% render child %} 8 | {% endfor %} 9 | {% else %} 10 |
11 | {{ self.title }} 12 |
13 | {% for child in self.get_children %} 14 | {% render child %} 15 | {% endfor %} 16 |
17 |
18 | {% endif %} 19 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/widgy/page_builder/tableelement/render.html: -------------------------------------------------------------------------------- 1 | {% load widgy_tags %} 2 | <{{ self.tag_name }}> 3 | {% for child in self.get_children %} 4 | {% render child %} 5 | {% endfor %} 6 | 7 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/widgy/page_builder/tableheader/render.html: -------------------------------------------------------------------------------- 1 | {% load widgy_tags %} 2 | 3 | 4 | {% for child in self.get_children %} 5 | {% render child %} 6 | {% endfor %} 7 | 8 | 9 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/widgy/page_builder/tabs/render.html: -------------------------------------------------------------------------------- 1 | {% load widgy_tags %} 2 | 3 |
4 |
    5 | {% for tab in self.get_children %} 6 |
  • {{ tab }}
  • 7 | {% endfor %} 8 |
9 | 10 | 11 | {% with section_behavior='tabs' %} 12 | {% for tab in self.get_children %} 13 |
14 | {% render tab %} 15 |
16 | {% endfor %} 17 | {% endwith %} 18 |
19 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/widgy/page_builder/unsafehtml/render.html: -------------------------------------------------------------------------------- 1 | {{ self.content|safe }} 2 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templates/widgy/page_builder/video/render.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /widgy/contrib/page_builder/templatetags/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/contrib/page_builder/templatetags/__init__.py -------------------------------------------------------------------------------- /widgy/contrib/review_queue/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/contrib/review_queue/__init__.py -------------------------------------------------------------------------------- /widgy/contrib/review_queue/management/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/contrib/review_queue/management/__init__.py -------------------------------------------------------------------------------- /widgy/contrib/review_queue/management/commands/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/contrib/review_queue/management/commands/__init__.py -------------------------------------------------------------------------------- /widgy/contrib/review_queue/management/commands/populate_review_queue.py: -------------------------------------------------------------------------------- 1 | from django.core.management.base import BaseCommand 2 | 3 | 4 | class Command(BaseCommand): 5 | help = 'Creates the required ReviewedVersionCommit objects when migrating to a ReviewedWidgySite' 6 | 7 | def handle(self, *args, **options): 8 | # XXX: why doesn't this work at the top-level? 9 | from widgy.models.versioning import VersionCommit 10 | from widgy.contrib.review_queue.models import ReviewedVersionCommit 11 | 12 | for commit in VersionCommit.objects.filter(reviewedversioncommit=None): 13 | new_commit = ReviewedVersionCommit( 14 | versioncommit_ptr=commit, 15 | approved_at=commit.created_at, 16 | approved_by_id=commit.author_id, 17 | ) 18 | new_commit.__dict__.update(commit.__dict__) 19 | new_commit.save() 20 | -------------------------------------------------------------------------------- /widgy/contrib/review_queue/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.db import models, migrations 5 | import django.db.models.deletion 6 | from django.conf import settings 7 | 8 | 9 | class Migration(migrations.Migration): 10 | 11 | dependencies = [ 12 | migrations.swappable_dependency(settings.AUTH_USER_MODEL), 13 | ('widgy', '0001_initial'), 14 | ] 15 | 16 | operations = [ 17 | migrations.CreateModel( 18 | name='ReviewedVersionCommit', 19 | fields=[ 20 | ('versioncommit_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='widgy.VersionCommit')), 21 | ('approved_at', models.DateTimeField(default=None, null=True)), 22 | ('approved_by', models.ForeignKey(related_name='+', on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL, null=True)), 23 | ], 24 | options={ 25 | 'verbose_name': 'unapproved commit', 26 | 'verbose_name_plural': 'unapproved commits', 27 | }, 28 | bases=('widgy.versioncommit',), 29 | ), 30 | migrations.CreateModel( 31 | name='ReviewedVersionTracker', 32 | fields=[ 33 | ], 34 | options={ 35 | 'proxy': True, 36 | }, 37 | bases=('widgy.versiontracker',), 38 | ), 39 | ] 40 | -------------------------------------------------------------------------------- /widgy/contrib/review_queue/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/contrib/review_queue/migrations/__init__.py -------------------------------------------------------------------------------- /widgy/contrib/review_queue/templates/admin/review_queue/reviewedversioncommit/change_list.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/change_list.html" %} 2 | {% load review_queue_admin_tags %} 3 | 4 | {% block result_list %} 5 | {% if action_form and actions_on_top and cl.full_result_count %}{% admin_actions %}{% endif %} 6 | {% result_list cl %} 7 | {% if action_form and actions_on_bottom and cl.full_result_count %}{% admin_actions %}{% endif %} 8 | {% endblock %} 9 | -------------------------------------------------------------------------------- /widgy/contrib/review_queue/templates/review_queue/_commit_form.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/_commit_form.html" %} 2 | {% load i18n %} 3 | {% load widgy_tags %} 4 | 5 | {% block submit_row %} 6 | {% has_change_permission site site.get_version_tracker_model.commit_model as can_approve %} 7 | {% if can_approve %} 8 | 9 | {% endif %} 10 | {{ block.super }} 11 | {% endblock %} 12 | -------------------------------------------------------------------------------- /widgy/contrib/review_queue/templates/review_queue/commit.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/commit.html" %} 2 | 3 | {% block commit_form %} 4 | {% include "review_queue/_commit_form.html" with commit=object.working_copy action_url=commit_url %} 5 | {% endblock %} 6 | -------------------------------------------------------------------------------- /widgy/contrib/review_queue/templates/review_queue/commit_preview.html: -------------------------------------------------------------------------------- 1 | {% load compress staticfiles widgy_tags %} 2 | {% for owner in owners %} 3 | {% get_action_links owner node as links %} 4 | {% for link in links %} 5 | {% if link.type == 'preview' %} 6 | {{ link.text }} 7 | 8 | {% endif %} 9 | {% endfor %} 10 | {% endfor %} 11 | {% compress css %} 12 | 13 | {% endcompress %} 14 | -------------------------------------------------------------------------------- /widgy/contrib/review_queue/templates/review_queue/revert.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/revert.html" %} 2 | 3 | {% block popup-content %} 4 | {% include "review_queue/_commit_form.html" with commit=object.working_copy action_url=revert_url %} 5 | {% endblock %} 6 | -------------------------------------------------------------------------------- /widgy/contrib/review_queue/templates/review_queue/undoform.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | {% load widgy_tags %} 3 |
4 | {% for field in form %} 5 | {{ field }} 6 | {% endfor %} 7 | {% csrf_token %} 8 | 9 |
10 | -------------------------------------------------------------------------------- /widgy/contrib/review_queue/templatetags/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/contrib/review_queue/templatetags/__init__.py -------------------------------------------------------------------------------- /widgy/contrib/review_queue/templatetags/review_queue_admin_tags.py: -------------------------------------------------------------------------------- 1 | from django.template import Library 2 | from django.contrib.admin.templatetags.admin_list import ( 3 | result_list as result_list_orig, 4 | admin_actions as admin_actions_orig, 5 | ) 6 | 7 | register = Library() 8 | 9 | @register.inclusion_tag('admin/review_queue/reviewedversioncommit/change_list_results.html') 10 | def result_list(cl): 11 | ctx = result_list_orig(cl) 12 | # our template needs each result (a list of strings), along with the 13 | # actual commit object. 14 | ctx['cl_results'] = zip(ctx['cl'].result_list, ctx['results']) 15 | return ctx 16 | 17 | # This avoid importing admin_list tag which could conflict with result_list 18 | # This does exactly the same as django.contrib.admin.templatetags.admin_list.admin_actions 19 | @register.inclusion_tag('admin/actions.html', takes_context=True) 20 | def admin_actions(context): 21 | return admin_actions_orig(context) 22 | -------------------------------------------------------------------------------- /widgy/contrib/urlconf_include/__init__.py: -------------------------------------------------------------------------------- 1 | from . import signalhandlers 2 | -------------------------------------------------------------------------------- /widgy/contrib/urlconf_include/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from mezzanine.pages.admin import PageAdmin 4 | 5 | from .models import UrlconfIncludePage 6 | 7 | admin.site.register(UrlconfIncludePage, PageAdmin) 8 | -------------------------------------------------------------------------------- /widgy/contrib/urlconf_include/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.db import models, migrations 5 | from django.conf import settings 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('pages', '__first__'), 12 | ] 13 | 14 | operations = [ 15 | migrations.CreateModel( 16 | name='UrlconfIncludePage', 17 | fields=[ 18 | ('page_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='pages.Page')), 19 | ('urlconf_name', models.CharField(max_length=255, verbose_name='plugin name', choices=settings.URLCONF_INCLUDE_CHOICES)), 20 | ], 21 | options={ 22 | 'ordering': ('_order',), 23 | 'verbose_name': 'plugin', 24 | 'verbose_name_plural': 'plugins', 25 | }, 26 | bases=('pages.page',), 27 | ), 28 | ] 29 | -------------------------------------------------------------------------------- /widgy/contrib/urlconf_include/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/contrib/urlconf_include/migrations/__init__.py -------------------------------------------------------------------------------- /widgy/contrib/urlconf_include/signalhandlers.py: -------------------------------------------------------------------------------- 1 | from importlib import import_module 2 | 3 | from django.core.urlresolvers import set_urlconf 4 | from django.dispatch import receiver 5 | from django.conf import settings 6 | 7 | from widgy.signals import widgy_pre_index 8 | 9 | 10 | 11 | @receiver(widgy_pre_index) 12 | def patch_url_conf(sender, **kwargs): 13 | from .middleware import PatchUrlconfMiddleware 14 | root_urlconf = import_module(settings.ROOT_URLCONF) 15 | urlconf = PatchUrlconfMiddleware.get_urlconf(root_urlconf) 16 | set_urlconf(urlconf) 17 | -------------------------------------------------------------------------------- /widgy/contrib/widgy_i18n/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/contrib/widgy_i18n/__init__.py -------------------------------------------------------------------------------- /widgy/contrib/widgy_i18n/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/contrib/widgy_i18n/migrations/__init__.py -------------------------------------------------------------------------------- /widgy/contrib/widgy_i18n/tests.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/contrib/widgy_i18n/tests.py -------------------------------------------------------------------------------- /widgy/contrib/widgy_mezzanine/__init__.py: -------------------------------------------------------------------------------- 1 | def get_widgypage_model(): 2 | from django.conf import settings 3 | from django.apps import apps 4 | from django.core.exceptions import ImproperlyConfigured 5 | 6 | try: 7 | app_label, model_name = getattr(settings, 'WIDGY_MEZZANINE_PAGE_MODEL', 'widgy_mezzanine.WidgyPage').split('.') 8 | except ValueError: 9 | raise ImproperlyConfigured("WIDGY_MEZZANINE_PAGE_MODEL must be of the form 'app_label.model_name'") 10 | model = apps.get_model(app_label, model_name) 11 | if model is None: 12 | raise ImproperlyConfigured("WIDGY_MEZZANINE_PAGE_MODEL refers to model '%s' that has not been installed" % settings.WIDGY_MEZZANINE_PAGE_MODEL) 13 | return model 14 | -------------------------------------------------------------------------------- /widgy/contrib/widgy_mezzanine/forms.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/contrib/widgy_mezzanine/forms.py -------------------------------------------------------------------------------- /widgy/contrib/widgy_mezzanine/migrations/0002_create_widgycalloutwidget.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.db import models, migrations 5 | import django.db.models.deletion 6 | import widgy.db.fields 7 | 8 | 9 | class Migration(migrations.Migration): 10 | 11 | dependencies = [ 12 | ('page_builder', '0002_add_site_to_callout'), 13 | ('widgy_mezzanine', '0001_initial'), 14 | ] 15 | 16 | operations = [ 17 | migrations.CreateModel( 18 | name='MezzanineCalloutWidget', 19 | fields=[ 20 | ], 21 | options={ 22 | 'verbose_name': 'callout widget', 23 | 'verbose_name_plural': 'callout widgets', 24 | 'proxy': True, 25 | }, 26 | bases=('page_builder.calloutwidget',), 27 | ), 28 | ] 29 | -------------------------------------------------------------------------------- /widgy/contrib/widgy_mezzanine/migrations/0003_auto_20170206_1124.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.5 on 2017-02-06 18:24 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | import django.db.models.manager 7 | 8 | 9 | class Migration(migrations.Migration): 10 | 11 | dependencies = [ 12 | ('widgy_mezzanine', '0002_create_widgycalloutwidget'), 13 | ] 14 | 15 | operations = [ 16 | migrations.AlterModelManagers( 17 | name='widgypage', 18 | managers=[ 19 | ('select_related_manager', django.db.models.manager.Manager()), 20 | ], 21 | ), 22 | ] 23 | -------------------------------------------------------------------------------- /widgy/contrib/widgy_mezzanine/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/contrib/widgy_mezzanine/migrations/__init__.py -------------------------------------------------------------------------------- /widgy/contrib/widgy_mezzanine/signals.py: -------------------------------------------------------------------------------- 1 | import warnings 2 | 3 | from widgy.signals import widgy_pre_index 4 | 5 | 6 | warnings.warn( 7 | "widgy.contrib.widgy_mezzanine.signals.widgypage_pre_index is deprecated. " 8 | "Use widgy.signals.widgy_pre_index instead.", 9 | DeprecationWarning, 10 | ) 11 | 12 | widgypage_pre_index = widgy_pre_index 13 | -------------------------------------------------------------------------------- /widgy/contrib/widgy_mezzanine/site.py: -------------------------------------------------------------------------------- 1 | from mezzanine.utils.sites import current_site_id, has_site_permission 2 | from widgy.models import Content 3 | 4 | 5 | class MultiSitePermissionMixin(object): 6 | def _can_edit_content(self, request, obj): 7 | if isinstance(obj, Content): 8 | owners = obj.get_root().node.versiontracker_set.get().owners 9 | any_owner_in_current_site = any(current_site_id() == o.site_id for o in owners) 10 | return has_site_permission(request.user) and any_owner_in_current_site 11 | else: 12 | return True 13 | 14 | def has_add_permission(self, request, parent, created_obj_cls): 15 | if not self._can_edit_content(request, parent): 16 | return False 17 | return super(MultiSitePermissionMixin, self).has_add_permission( 18 | request, parent, created_obj_cls) 19 | 20 | def has_change_permission(self, request, obj_or_class): 21 | if not self._can_edit_content(request, obj_or_class): 22 | return False 23 | return super(MultiSitePermissionMixin, self).has_change_permission(request, obj_or_class) 24 | 25 | def has_delete_permission(self, request, obj_or_class): 26 | if not all(self._can_edit_content(request, o) for o in obj_or_class.depth_first_order()): 27 | return False 28 | return super(MultiSitePermissionMixin, self).has_delete_permission(request, obj_or_class) 29 | -------------------------------------------------------------------------------- /widgy/contrib/widgy_mezzanine/static/widgy/widgy_mezzanine/admin.scss: -------------------------------------------------------------------------------- 1 | @import "/widgy/css/widgy_common.scss"; 2 | 3 | li.node, 4 | li.shelfItem { 5 | @include node-icon("widgy_mezzanine.mezzaninecalloutwidget", "widgy/image/widget-callout.png"); 6 | } 7 | -------------------------------------------------------------------------------- /widgy/contrib/widgy_mezzanine/templates/pages/menus/dropdown.html: -------------------------------------------------------------------------------- 1 | {% load pages_tags %} 2 | 3 | {% if page_branch_in_menu %} 4 | 17 | {% endif %} 18 | -------------------------------------------------------------------------------- /widgy/contrib/widgy_mezzanine/templates/pages/menus/leftnav.html: -------------------------------------------------------------------------------- 1 | {% load i18n pages_tags %} 2 | 3 | {% if page_branch_in_menu %} 4 | {% for page in page_branch %} 5 | {% if page.branch_level == 0 %} 6 | {% if page.is_current_or_ascendant %} 7 | 21 | {% endif %} 22 | {% else %} 23 | {% if page.in_menu %} 24 | 25 | {{ page.title }} 26 | {% if page.has_children_in_menu and page.is_current_or_ascendant %} 27 |
    28 | {% page_menu page %} 29 |
30 | {% endif %} 31 | 32 | {% endif %} 33 | {% endif %} 34 | {% endfor %} 35 | {% endif %} 36 | -------------------------------------------------------------------------------- /widgy/contrib/widgy_mezzanine/templates/pages/widgypage.html: -------------------------------------------------------------------------------- 1 | {% load widgy_tags %}{% render_root page.get_content_model 'root_node' %} 2 | -------------------------------------------------------------------------------- /widgy/contrib/widgy_mezzanine/templates/pages/widgypage_base.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% comment %} 4 | Consider this deprecated. 5 | 6 | This is here for the sake of backwards compatibility with old-style 7 | defaultlayout templating. See https://github.com/fusionbox/django-widgy/pull/41 8 | {% endcomment %} 9 | 10 | {% load widgy_tags %} 11 | {% load pages_tags %} 12 | {% load compress %} 13 | {% load staticfiles %} 14 | 15 | {% block title %}{{ page.meta_title }} {{ block.super }}{% endblock %} 16 | {% block css %} 17 | {{ block.super }} 18 | {% compress css %} 19 | {% for scss_file in 'WIDGY_MEZZANINE_SITE'|scss_files %} 20 | 21 | {% endfor %} 22 | {% endcompress %} 23 | {% endblock %} 24 | 25 | {% block js %} 26 | {{ block.super }} 27 | {% compress js %} 28 | {% for js_file in 'WIDGY_MEZZANINE_SITE'|js_files %} 29 | 30 | {% endfor %} 31 | {% endcompress %} 32 | {% endblock %} 33 | 34 | {% block seo_description %}{{ page.description }}{% endblock %} 35 | {% block seo_keywords %}{{ page.keywords_string }}{% endblock %} 36 | 37 | {% block breadcrumb %} 38 |

39 | {% page_menu "pages/menus/breadcrumb.html" %} 40 |

41 | {% endblock %} 42 | 43 | {% block leftnav %} 44 | 47 | {% endblock %} 48 | 49 | {% block content %} 50 | {% render_root page.get_content_model 'root_node' %} 51 | {% endblock %} 52 | -------------------------------------------------------------------------------- /widgy/contrib/widgy_mezzanine/templates/widgy/mezzanine_base.html: -------------------------------------------------------------------------------- 1 | {% extends "layout_base.html" %} 2 | {% load pages_tags %} 3 | 4 | {% block metadata %} 5 | {{ page.meta_title }} 6 | 7 | 8 | {% endblock %} 9 | 10 | {% block leftnav %} 11 | {% page_menu 'pages/menus/leftnav.html' %} 12 | {% endblock %} 13 | 14 | {% block breadcrumb %} 15 | {{ block.super }} {% page_menu 'pages/menus/breadcrumb.html' %} 16 | {% endblock %} 17 | -------------------------------------------------------------------------------- /widgy/contrib/widgy_mezzanine/templates/widgy/widgy_mezzanine/clone_success.html: -------------------------------------------------------------------------------- 1 | 2 | {% load argonauts %} 3 | 4 | 8 | -------------------------------------------------------------------------------- /widgy/contrib/widgy_mezzanine/templates/widgy/widgy_mezzanine/unpublish.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/popup_base.html" %} 2 | {% load i18n %} 3 | 4 | {% block content %} 5 |

{% blocktrans with page_title=object.title %}Unpublishing {{ page_title }}{% endblocktrans %}

6 |

7 | {% blocktrans %} 8 | Unpublishing will cause this page to disappear from the live site. Users who 9 | go to this page will get a 404 (File Not Found) error page. Are you sure you 10 | want to unpublish this page? 11 | {% endblocktrans %} 12 |

13 |
14 | {% csrf_token %} 15 |
16 | 17 | 18 |
19 |
20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /widgy/contrib/widgy_mezzanine/templates/widgy/widgy_mezzanine/versioned_widgy_field.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/versioned_widgy_field_base.html" %} 2 | {% load i18n %} 3 | {% load staticfiles %} 4 | 5 | {% block widgy_tools %} 6 |
  • {% trans "Schedule changes" %}
  • 7 |
  • {% trans "Reset" %}
  • 8 | {% endblock %} 9 | -------------------------------------------------------------------------------- /widgy/contrib/widgy_mezzanine/templates/widgy/widgy_mezzanine/widgypage_clone_form.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/popup_base.html" %} 2 | 3 | {% block popup-content %} 4 |

    Cloning {{ object }}

    5 | 6 |
    7 | {% csrf_token %} 8 | {% for field in form %} 9 | {% include "widgy/field_as_div.html" %} 10 | {% endfor %} 11 |

    12 | 13 |

    14 |
    15 | {% endblock %} 16 | -------------------------------------------------------------------------------- /widgy/contrib/widgy_mezzanine/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/contrib/widgy_mezzanine/tests/__init__.py -------------------------------------------------------------------------------- /widgy/contrib/widgy_mezzanine/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import url 2 | 3 | import widgy.contrib.widgy_mezzanine.views 4 | 5 | urlpatterns = [ 6 | url('^preview/(?P[^/]+)/$', 7 | widgy.contrib.widgy_mezzanine.views.preview, 8 | name='widgy.contrib.widgy_mezzanine.views.preview'), # undelete 9 | url('^preview-page/(?P[^/]+)/(?P[^/]+)/$', 10 | widgy.contrib.widgy_mezzanine.views.preview, 11 | name='widgy.contrib.widgy_mezzanine.views.preview'), 12 | url('^form-page/(?P[^/]*)/(?P[^/]+)/$', 13 | widgy.contrib.widgy_mezzanine.views.handle_form, 14 | name='widgy.contrib.widgy_mezzanine.views.handle_form'), 15 | # deprecated urls for backwards compatibility with slug reversing 16 | url('^preview/(?P[^/]+)/(?P.+)/$', 17 | widgy.contrib.widgy_mezzanine.views.preview, 18 | name='widgy.contrib.widgy_mezzanine.views.preview'), 19 | url('^form/(?P[^/]*)/(?P.+)/$', 20 | widgy.contrib.widgy_mezzanine.views.handle_form, 21 | name='widgy.contrib.widgy_mezzanine.views.handle_form'), 22 | ] 23 | -------------------------------------------------------------------------------- /widgy/db/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/db/__init__.py -------------------------------------------------------------------------------- /widgy/debugtoolbar/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/debugtoolbar/__init__.py -------------------------------------------------------------------------------- /widgy/exceptions.py: -------------------------------------------------------------------------------- 1 | from django.core.exceptions import ValidationError 2 | 3 | 4 | class InvalidOperation(ValidationError): 5 | pass 6 | 7 | 8 | class InvalidTreeMovement(InvalidOperation): 9 | """ 10 | Inherits from ``django.core.exceptions.ValidationError``. 11 | 12 | Base exception for all erroneous node restructures. 13 | """ 14 | def __init__(self, message): 15 | # If we don't do this, there won't be a message_dict. 16 | super(InvalidTreeMovement, self).__init__({'message': [message]}) 17 | 18 | 19 | class RootDisplacementError(InvalidTreeMovement): 20 | """ 21 | Raise when trying to add siblings to a root node. 22 | """ 23 | 24 | 25 | class ParentChildRejection(InvalidTreeMovement): 26 | """ 27 | General exception for when a child rejects a parent or vice versa. 28 | """ 29 | 30 | 31 | class ParentWasRejected(ParentChildRejection): 32 | """ 33 | Raised by child to reject the requested parent. 34 | """ 35 | 36 | 37 | class ChildWasRejected(ParentChildRejection): 38 | """ 39 | Raised by parents to reject children that don't belong. 40 | """ 41 | 42 | 43 | class MutualRejection(ParentWasRejected, ChildWasRejected): 44 | """ 45 | For instances where both child and parent reject the movement request. 46 | """ 47 | -------------------------------------------------------------------------------- /widgy/generic/__init__.py: -------------------------------------------------------------------------------- 1 | from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation 2 | 3 | 4 | class ProxyGenericForeignKey(GenericForeignKey): 5 | def __init__(self, *args, **kwargs): 6 | kwargs['for_concrete_model'] = False 7 | super(ProxyGenericForeignKey, self).__init__(*args, **kwargs) 8 | 9 | 10 | class ProxyGenericRelation(GenericRelation): 11 | def __init__(self, *args, **kwargs): 12 | kwargs['for_concrete_model'] = False 13 | super(ProxyGenericRelation, self).__init__(*args, **kwargs) 14 | 15 | 16 | class WidgyGenericForeignKey(ProxyGenericForeignKey): 17 | def __get__(self, instance, instance_type=None): 18 | try: 19 | return super(WidgyGenericForeignKey, self).__get__(instance, instance_type) 20 | except AttributeError: 21 | # The model for this content type couldn't be loaded. Use an 22 | # UnknownWidget instead. 23 | from widgy.models import UnknownWidget 24 | ret = UnknownWidget(getattr(instance, self.ct_field), getattr(instance, self.fk_field), instance) 25 | ret.node = instance 26 | ret.warn() 27 | return ret 28 | -------------------------------------------------------------------------------- /widgy/generic/models.py: -------------------------------------------------------------------------------- 1 | import warnings 2 | 3 | # This module used to contain a backport of for_concrete_model, which is now in 4 | # all supported versions of django. This import remains for backwards 5 | # compatibility. 6 | from django.contrib.contenttypes.models import ContentType, ContentTypeManager # NOQA 7 | 8 | warnings.warn( 9 | "widgy.generic.models is deprecated. Use django.contrib.contentypes.models instead.", 10 | DeprecationWarning, 11 | stacklevel=2, 12 | ) 13 | -------------------------------------------------------------------------------- /widgy/locale/de/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/locale/de/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /widgy/management/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/management/__init__.py -------------------------------------------------------------------------------- /widgy/management/commands/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/management/commands/__init__.py -------------------------------------------------------------------------------- /widgy/middleware.py: -------------------------------------------------------------------------------- 1 | from widgy.models import Node 2 | 3 | class PreventProblemsMiddleware(object): 4 | """ 5 | Checks if there are any 'problems' (inconsitensies in the widgy tree) 6 | after every request. If used with TransactionMiddleware, it will 7 | prevent problems from being committed by raising an exception. Useful 8 | to turn on during development so you know right away if your code 9 | corrupts the tree. It does an absurd number of queries though, 10 | so probably not something to leave on all the time. 11 | """ 12 | 13 | def get_problems(self): 14 | return Node.find_problems() + Node.find_widgy_problems() 15 | 16 | def process_response(self, request, response): 17 | problems = self.get_problems() 18 | assert not any(problems), "There are some problems: %s" % (problems,) 19 | return response 20 | -------------------------------------------------------------------------------- /widgy/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/migrations/__init__.py -------------------------------------------------------------------------------- /widgy/models/__init__.py: -------------------------------------------------------------------------------- 1 | from widgy.models.base import Node, Content, UnknownWidget 2 | from widgy.models.versioning import VersionTracker, VersionCommit 3 | -------------------------------------------------------------------------------- /widgy/signals.py: -------------------------------------------------------------------------------- 1 | from django.dispatch import Signal 2 | 3 | 4 | pre_delete_widget = Signal(providing_args=['instance', 'raw']) 5 | widgy_pre_index = Signal() 6 | -------------------------------------------------------------------------------- /widgy/static/admin/js/collapse.js: -------------------------------------------------------------------------------- 1 | // noop 2 | // If we are using grappelli, the original code for this code just fails. So 3 | // let's just not do anything. 4 | -------------------------------------------------------------------------------- /widgy/static/daisydiff/NOTICE.txt: -------------------------------------------------------------------------------- 1 | NOTICE: Only our own original work is licensed under the terms of the Apache 2 | License Version 2.0. The licenses of some libraries might impose different 3 | redistribution or general licensing terms than those stated in the Apache 4 | License. Users and redistributors are hereby requested to verify these 5 | conditions and agree upon them. 6 | 7 | This product includes software developed by 8 | The Apache Software Foundation (http://www.apache.org/). 9 | -------------------------------------------------------------------------------- /widgy/static/widgy/css/layout_select.scss: -------------------------------------------------------------------------------- 1 | @import "widgy_common.scss"; 2 | 3 | .form-row .layoutSelect { 4 | display: inline; 5 | float: left; 6 | width: auto; 7 | 8 | ul { 9 | display: inline; 10 | float: left; 11 | list-style: none; 12 | margin: 0px; 13 | padding: 0px; 14 | width: auto; 15 | 16 | li { 17 | @include html; 18 | display: inline; 19 | float: left; 20 | height: auto; 21 | margin: 0px 10px 0px 0px; 22 | padding: 10px; 23 | text-align: center; 24 | width: 110px; 25 | 26 | label { 27 | display: block; 28 | float: none; 29 | margin: 0px; 30 | padding: 0px; 31 | width: auto; 32 | } 33 | 34 | div.previewImage { 35 | @include rounded(4px); 36 | background: url('/static/widgy/image/layout-sprite.png') no-repeat 0px -400px; 37 | border: 1px solid #cccccc; 38 | height: 100px; 39 | 40 | &.defaultlayout { 41 | background-position: 0px 0px; 42 | } 43 | } 44 | 45 | input { 46 | margin: 5px auto; 47 | } 48 | 49 | span.label { 50 | display: block; 51 | } 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /widgy/static/widgy/css/unapproved_commits.scss: -------------------------------------------------------------------------------- 1 | 2 | /* Commit Previews 3 | --------------------------------------------------*/ 4 | 5 | .form-row.preview { 6 | iframe { 7 | height: 600px; 8 | width: 980px; 9 | } 10 | } 11 | 12 | /* Version Commit Page Groups 13 | --------------------------------------------------*/ 14 | 15 | #changelist #result_list { 16 | tbody { 17 | > tr:first-child { 18 | > td, th { 19 | border-top: 2px solid #444444; 20 | } 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /widgy/static/widgy/css/widgy.scss: -------------------------------------------------------------------------------- 1 | @import "widgy_layout.scss"; 2 | @import "widgy_theme_default.scss"; 3 | -------------------------------------------------------------------------------- /widgy/static/widgy/css/widgy_theme_lofi.scss: -------------------------------------------------------------------------------- 1 | .widgy { 2 | .node { 3 | border: 1px solid black; 4 | } 5 | 6 | .node_drop_target { 7 | background-color: blue; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /widgy/static/widgy/fancybox/blank.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/fancybox/blank.gif -------------------------------------------------------------------------------- /widgy/static/widgy/fancybox/fancy_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/fancybox/fancy_close.png -------------------------------------------------------------------------------- /widgy/static/widgy/fancybox/fancy_loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/fancybox/fancy_loading.png -------------------------------------------------------------------------------- /widgy/static/widgy/fancybox/fancy_nav_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/fancybox/fancy_nav_left.png -------------------------------------------------------------------------------- /widgy/static/widgy/fancybox/fancy_nav_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/fancybox/fancy_nav_right.png -------------------------------------------------------------------------------- /widgy/static/widgy/fancybox/fancy_shadow_e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/fancybox/fancy_shadow_e.png -------------------------------------------------------------------------------- /widgy/static/widgy/fancybox/fancy_shadow_n.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/fancybox/fancy_shadow_n.png -------------------------------------------------------------------------------- /widgy/static/widgy/fancybox/fancy_shadow_ne.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/fancybox/fancy_shadow_ne.png -------------------------------------------------------------------------------- /widgy/static/widgy/fancybox/fancy_shadow_nw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/fancybox/fancy_shadow_nw.png -------------------------------------------------------------------------------- /widgy/static/widgy/fancybox/fancy_shadow_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/fancybox/fancy_shadow_s.png -------------------------------------------------------------------------------- /widgy/static/widgy/fancybox/fancy_shadow_se.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/fancybox/fancy_shadow_se.png -------------------------------------------------------------------------------- /widgy/static/widgy/fancybox/fancy_shadow_sw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/fancybox/fancy_shadow_sw.png -------------------------------------------------------------------------------- /widgy/static/widgy/fancybox/fancy_shadow_w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/fancybox/fancy_shadow_w.png -------------------------------------------------------------------------------- /widgy/static/widgy/fancybox/fancy_title_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/fancybox/fancy_title_left.png -------------------------------------------------------------------------------- /widgy/static/widgy/fancybox/fancy_title_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/fancybox/fancy_title_main.png -------------------------------------------------------------------------------- /widgy/static/widgy/fancybox/fancy_title_over.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/fancybox/fancy_title_over.png -------------------------------------------------------------------------------- /widgy/static/widgy/fancybox/fancy_title_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/fancybox/fancy_title_right.png -------------------------------------------------------------------------------- /widgy/static/widgy/fancybox/fancybox-x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/fancybox/fancybox-x.png -------------------------------------------------------------------------------- /widgy/static/widgy/fancybox/fancybox-y.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/fancybox/fancybox-y.png -------------------------------------------------------------------------------- /widgy/static/widgy/fancybox/fancybox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/fancybox/fancybox.png -------------------------------------------------------------------------------- /widgy/static/widgy/font/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/font/fontawesome-webfont.eot -------------------------------------------------------------------------------- /widgy/static/widgy/font/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/font/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /widgy/static/widgy/font/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/font/fontawesome-webfont.woff -------------------------------------------------------------------------------- /widgy/static/widgy/font/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/font/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /widgy/static/widgy/image/layout-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/layout-sprite.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/loading.gif -------------------------------------------------------------------------------- /widgy/static/widgy/image/page-layout-2-column.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/page-layout-2-column.gif -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-accordion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-accordion.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-brand-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-brand-list.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-bucket.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-button.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-calendar.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-callout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-callout.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-chart.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-checkbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-checkbox.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-code.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-code.gif -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-email.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-email.gif -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-figure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-figure.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-form.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-form.gif -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-google-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-google-map.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-hidden-field.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-hidden-field.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-html.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-html.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-icon-mapped-field.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-icon-mapped-field.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-image-bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-image-bucket.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-image.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-image.gif -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-list.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-miniboxes.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-miniboxes.gif -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-news.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-ok-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-ok-button.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-product-bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-product-bucket.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-product-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-product-list.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-radio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-radio.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-salesforce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-salesforce.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-save-data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-save-data.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-section.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-section.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-skull-and-crossbones.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-skull-and-crossbones.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-slide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-slide.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-submit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-submit.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-tab.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-table.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-table.gif -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-tablecolumn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-tablecolumn.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-tablerow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-tablerow.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-textarea.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-textarea.gif -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-uncaptcha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-uncaptcha.png -------------------------------------------------------------------------------- /widgy/static/widgy/image/widget-video.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/image/widget-video.gif -------------------------------------------------------------------------------- /widgy/static/widgy/js/app.html: -------------------------------------------------------------------------------- 1 |
    2 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/components/widget/component.js: -------------------------------------------------------------------------------- 1 | define(['widgy.contents'], function(contents) { 2 | return contents; 3 | }); 4 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/geometry.js: -------------------------------------------------------------------------------- 1 | define([], function() { 2 | return { 3 | /** 4 | * Returns the square of the distance between the point (px, py) and any 5 | * point in the rectangle bb (zero if the point is inside) 6 | */ 7 | calculateDistance: function (bb, px, py) { 8 | var dx, dy; 9 | dy = Math.max(Math.max(bb.top - py, py - bb.bottom), 0); 10 | dx = Math.max(Math.max(bb.left - px, px - bb.right), 0); 11 | return dx * dx + dy * dy; 12 | }, 13 | 14 | /** 15 | * Do the rectangles described by bb and obb overlap? The rectangles should 16 | * be in the format returned by Element.getBoundingClientRect. 17 | */ 18 | rectanglesOverlap: function(bb, obb) { 19 | return ( 20 | bb.left <= obb.right && bb.right >= obb.left && 21 | bb.top <= obb.bottom && bb.bottom >= obb.top 22 | ); 23 | } 24 | }; 25 | }); 26 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/jquery-private.js: -------------------------------------------------------------------------------- 1 | define(['jquery'], function (jq) { 2 | // http://requirejs.org/docs/jquery.html#noconflictmap 3 | return jq.noConflict( true ); 4 | }); 5 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/README.md: -------------------------------------------------------------------------------- 1 | CKEditor 4 2 | ========== 3 | 4 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 5 | http://ckeditor.com - See LICENSE.md for license information. 6 | 7 | CKEditor is a text editor to be used inside web pages. It's not a replacement 8 | for desktop text editors like Word or OpenOffice, but a component to be used as 9 | part of web applications and websites. 10 | 11 | ## Documentation 12 | 13 | The full editor documentation is available online at the following address: 14 | http://docs.ckeditor.com 15 | 16 | ## Installation 17 | 18 | Installing CKEditor is an easy task. Just follow these simple steps: 19 | 20 | 1. **Download** the latest version from the CKEditor website: 21 | http://ckeditor.com. You should have already completed this step, but be 22 | sure you have the very latest version. 23 | 2. **Extract** (decompress) the downloaded file into the root of your website. 24 | 25 | **Note:** CKEditor is by default installed in the `ckeditor` folder. You can 26 | place the files in whichever you want though. 27 | 28 | ## Checking Your Installation 29 | 30 | The editor comes with a few sample pages that can be used to verify that 31 | installation proceeded properly. Take a look at the `samples` directory. 32 | 33 | To test your installation, just call the following page at your website: 34 | 35 | http:////samples/index.html 36 | 37 | For example: 38 | 39 | http://www.example.com/ckeditor/samples/index.html 40 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | * For licensing, see LICENSE.html or http://ckeditor.com/license 4 | */ 5 | 6 | CKEDITOR.editorConfig = function( config ) { 7 | // Define changes to default configuration here. 8 | // For the complete reference: 9 | // http://docs.ckeditor.com/#!/api/CKEDITOR.config 10 | 11 | // The toolbar groups arrangement, optimized for two toolbar rows. 12 | config.toolbarGroups = [ 13 | { name: 'clipboard', groups: [ 'clipboard', 'undo' ] }, 14 | { name: 'editing', groups: [ 'find', 'selection', 'spellchecker' ] }, 15 | { name: 'links' }, 16 | { name: 'insert' }, 17 | { name: 'forms' }, 18 | { name: 'tools' }, 19 | { name: 'document', groups: [ 'mode', 'document', 'doctools' ] }, 20 | { name: 'others' }, 21 | '/', 22 | { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] }, 23 | { name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ] }, 24 | { name: 'styles' }, 25 | { name: 'colors' }, 26 | { name: 'about' } 27 | ]; 28 | 29 | // Remove some buttons, provided by the standard plugins, which we don't 30 | // need to have in the Standard(s) toolbar. 31 | config.removeButtons = 'Underline,Subscript,Superscript'; 32 | 33 | // Se the most common block elements. 34 | config.format_tags = 'p;h1;h2;h3;pre'; 35 | 36 | // Make dialogs simpler. 37 | config.removeDialogTabs = 'image:advanced;link:advanced'; 38 | }; 39 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 2 | For licensing, see LICENSE.md or http://ckeditor.com/license 3 | 4 | cs.js Found: 30 Missing: 0 5 | cy.js Found: 30 Missing: 0 6 | da.js Found: 12 Missing: 18 7 | de.js Found: 30 Missing: 0 8 | el.js Found: 25 Missing: 5 9 | eo.js Found: 30 Missing: 0 10 | fa.js Found: 30 Missing: 0 11 | fi.js Found: 30 Missing: 0 12 | fr.js Found: 30 Missing: 0 13 | gu.js Found: 12 Missing: 18 14 | he.js Found: 30 Missing: 0 15 | it.js Found: 30 Missing: 0 16 | mk.js Found: 5 Missing: 25 17 | nb.js Found: 30 Missing: 0 18 | nl.js Found: 30 Missing: 0 19 | no.js Found: 30 Missing: 0 20 | pt-br.js Found: 30 Missing: 0 21 | ro.js Found: 6 Missing: 24 22 | tr.js Found: 30 Missing: 0 23 | ug.js Found: 27 Missing: 3 24 | vi.js Found: 6 Missing: 24 25 | zh-cn.js Found: 30 Missing: 0 26 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/about/dialogs/logo_ckeditor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/plugins/about/dialogs/logo_ckeditor.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/dialog/dialogDefinition.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/fakeobjects/images/spacer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/plugins/fakeobjects/images/spacer.gif -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/plugins/icons.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/icons_hidpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/plugins/icons_hidpi.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/image/images/noimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/plugins/image/images/noimage.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/icons/hidpi/justifyblock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/plugins/justify/icons/hidpi/justifyblock.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/icons/hidpi/justifycenter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/plugins/justify/icons/hidpi/justifycenter.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/icons/hidpi/justifyleft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/plugins/justify/icons/hidpi/justifyleft.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/icons/hidpi/justifyright.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/plugins/justify/icons/hidpi/justifyright.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/icons/justifyblock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/plugins/justify/icons/justifyblock.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/icons/justifycenter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/plugins/justify/icons/justifycenter.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/icons/justifyleft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/plugins/justify/icons/justifyleft.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/icons/justifyright.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/plugins/justify/icons/justifyright.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/af.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'af', { 6 | block: 'Uitvul', 7 | center: 'Sentreer', 8 | left: 'Links oplyn', 9 | right: 'Regs oplyn' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/ar.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'ar', { 6 | block: 'ضبط', 7 | center: 'توسيط', 8 | left: 'محاذاة إلى اليسار', 9 | right: 'محاذاة إلى اليمين' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/bg.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'bg', { 6 | block: 'Двустранно подравняване', 7 | center: 'Център', 8 | left: 'Подравни в ляво', 9 | right: 'Подравни в дясно' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/bn.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'bn', { 6 | block: 'ব্লক জাস্টিফাই', 7 | center: 'মাঝ বরাবর ঘেষা', 8 | left: 'বা দিকে ঘেঁষা', 9 | right: 'ডান দিকে ঘেঁষা' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/bs.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'bs', { 6 | block: 'Puno poravnanje', 7 | center: 'Centralno poravnanje', 8 | left: 'Lijevo poravnanje', 9 | right: 'Desno poravnanje' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/ca.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'ca', { 6 | block: 'Justificat', 7 | center: 'Centrat', 8 | left: 'Alinea a l\'esquerra', 9 | right: 'Alinea a la dreta' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/cs.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'cs', { 6 | block: 'Zarovnat do bloku', 7 | center: 'Zarovnat na střed', 8 | left: 'Zarovnat vlevo', 9 | right: 'Zarovnat vpravo' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/cy.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'cy', { 6 | block: 'Unioni', 7 | center: 'Alinio i\'r Canol', 8 | left: 'Alinio i\'r Chwith', 9 | right: 'Alinio i\'r Dde' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/da.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'da', { 6 | block: 'Lige margener', 7 | center: 'Centreret', 8 | left: 'Venstrestillet', 9 | right: 'Højrestillet' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/de.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'de', { 6 | block: 'Blocksatz', 7 | center: 'Zentriert', 8 | left: 'Linksbündig', 9 | right: 'Rechtsbündig' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/el.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'el', { 6 | block: 'Πλήρης Στοίχιση', 7 | center: 'Στο Κέντρο', 8 | left: 'Στοίχιση Αριστερά', 9 | right: 'Στοίχιση Δεξιά' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/en-au.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'en-au', { 6 | block: 'Justify', 7 | center: 'Centre', 8 | left: 'Align Left', 9 | right: 'Align Right' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/en-ca.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'en-ca', { 6 | block: 'Justify', 7 | center: 'Centre', 8 | left: 'Align Left', 9 | right: 'Align Right' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/en-gb.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'en-gb', { 6 | block: 'Justify', 7 | center: 'Centre', 8 | left: 'Align Left', 9 | right: 'Align Right' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/en.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'en', { 6 | block: 'Justify', 7 | center: 'Center', 8 | left: 'Align Left', 9 | right: 'Align Right' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/eo.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'eo', { 6 | block: 'Ĝisrandigi Ambaŭflanke', 7 | center: 'Centrigi', 8 | left: 'Ĝisrandigi maldekstren', 9 | right: 'Ĝisrandigi dekstren' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/es.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'es', { 6 | block: 'Justificado', 7 | center: 'Centrar', 8 | left: 'Alinear a Izquierda', 9 | right: 'Alinear a Derecha' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/et.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'et', { 6 | block: 'Rööpjoondus', 7 | center: 'Keskjoondus', 8 | left: 'Vasakjoondus', 9 | right: 'Paremjoondus' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/eu.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'eu', { 6 | block: 'Justifikatu', 7 | center: 'Lerrokatu Erdian', 8 | left: 'Lerrokatu Ezkerrean', 9 | right: 'Lerrokatu Eskuman' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/fa.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'fa', { 6 | block: 'بلوک چین', 7 | center: 'میان چین', 8 | left: 'چپ چین', 9 | right: 'راست چین' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/fi.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'fi', { 6 | block: 'Tasaa molemmat reunat', 7 | center: 'Keskitä', 8 | left: 'Tasaa vasemmat reunat', 9 | right: 'Tasaa oikeat reunat' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/fo.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'fo', { 6 | block: 'Javnir tekstkantar', 7 | center: 'Miðsett', 8 | left: 'Vinstrasett', 9 | right: 'Høgrasett' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/fr-ca.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'fr-ca', { 6 | block: 'Justifié', 7 | center: 'Centré', 8 | left: 'Aligner à gauche', 9 | right: 'Aligner à Droite' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/fr.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'fr', { 6 | block: 'Justifier', 7 | center: 'Centrer', 8 | left: 'Aligner à gauche', 9 | right: 'Aligner à droite' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/gl.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'gl', { 6 | block: 'Xustificado', 7 | center: 'Centrado', 8 | left: 'Aliñar á esquerda', 9 | right: 'Aliñar á dereita' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/gu.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'gu', { 6 | block: 'બ્લૉક, અંતરાય જસ્ટિફાઇ', 7 | center: 'સંકેંદ્રણ/સેંટરિંગ', 8 | left: 'ડાબી બાજુએ/બાજુ તરફ', 9 | right: 'જમણી બાજુએ/બાજુ તરફ' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/he.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'he', { 6 | block: 'יישור לשוליים', 7 | center: 'מרכוז', 8 | left: 'יישור לשמאל', 9 | right: 'יישור לימין' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/hi.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'hi', { 6 | block: 'ब्लॉक जस्टीफ़ाई', 7 | center: 'बीच में', 8 | left: 'बायीं तरफ', 9 | right: 'दायीं तरफ' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/hr.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'hr', { 6 | block: 'Blok poravnanje', 7 | center: 'Središnje poravnanje', 8 | left: 'Lijevo poravnanje', 9 | right: 'Desno poravnanje' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/hu.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'hu', { 6 | block: 'Sorkizárt', 7 | center: 'Középre', 8 | left: 'Balra', 9 | right: 'Jobbra' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/id.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'id', { 6 | block: 'Rata kiri-kanan', 7 | center: 'Pusat', 8 | left: 'Align Left', // MISSING 9 | right: 'Align Right' // MISSING 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/is.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'is', { 6 | block: 'Jafna báðum megin', 7 | center: 'Miðja texta', 8 | left: 'Vinstrijöfnun', 9 | right: 'Hægrijöfnun' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/it.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'it', { 6 | block: 'Giustifica', 7 | center: 'Centra', 8 | left: 'Allinea a sinistra', 9 | right: 'Allinea a destra' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/ja.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'ja', { 6 | block: '両端揃え', 7 | center: '中央揃え', 8 | left: '左揃え', 9 | right: '右揃え' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/ka.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'ka', { 6 | block: 'გადასწორება', 7 | center: 'შუაში სწორება', 8 | left: 'მარცხნივ სწორება', 9 | right: 'მარჯვნივ სწორება' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/km.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'km', { 6 | block: 'តម្រឹម​ពេញ', 7 | center: 'កណ្ដាល', 8 | left: 'តម្រឹម​ឆ្វេង', 9 | right: 'តម្រឹម​ស្ដាំ' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/ko.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'ko', { 6 | block: '양쪽 맞춤', 7 | center: '가운데 정렬', 8 | left: '왼쪽 정렬', 9 | right: '오른쪽 정렬' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/ku.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'ku', { 6 | block: 'هاوستوونی', 7 | center: 'ناوەڕاست', 8 | left: 'بەهێڵ کردنی چەپ', 9 | right: 'بەهێڵ کردنی ڕاست' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/lt.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'lt', { 6 | block: 'Lygiuoti abi puses', 7 | center: 'Centruoti', 8 | left: 'Lygiuoti kairę', 9 | right: 'Lygiuoti dešinę' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/lv.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'lv', { 6 | block: 'Izlīdzināt malas', 7 | center: 'Izlīdzināt pret centru', 8 | left: 'Izlīdzināt pa kreisi', 9 | right: 'Izlīdzināt pa labi' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/mk.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'mk', { 6 | block: 'Justify', // MISSING 7 | center: 'Center', // MISSING 8 | left: 'Align Left', // MISSING 9 | right: 'Align Right' // MISSING 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/mn.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'mn', { 6 | block: 'Тэгшлэх', 7 | center: 'Голлуулах', 8 | left: 'Зүүн талд тулгах', 9 | right: 'Баруун талд тулгах' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/ms.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'ms', { 6 | block: 'Jajaran Blok', 7 | center: 'Jajaran Tengah', 8 | left: 'Jajaran Kiri', 9 | right: 'Jajaran Kanan' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/nb.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'nb', { 6 | block: 'Blokkjuster', 7 | center: 'Midtstill', 8 | left: 'Venstrejuster', 9 | right: 'Høyrejuster' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/nl.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'nl', { 6 | block: 'Uitvullen', 7 | center: 'Centreren', 8 | left: 'Links uitlijnen', 9 | right: 'Rechts uitlijnen' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/no.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'no', { 6 | block: 'Blokkjuster', 7 | center: 'Midtstill', 8 | left: 'Venstrejuster', 9 | right: 'Høyrejuster' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/pl.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'pl', { 6 | block: 'Wyjustuj', 7 | center: 'Wyśrodkuj', 8 | left: 'Wyrównaj do lewej', 9 | right: 'Wyrównaj do prawej' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/pt-br.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'pt-br', { 6 | block: 'Justificado', 7 | center: 'Centralizar', 8 | left: 'Alinhar Esquerda', 9 | right: 'Alinhar Direita' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/pt.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'pt', { 6 | block: 'Justificado', 7 | center: 'Alinhar ao Centro', 8 | left: 'Alinhar à Esquerda', 9 | right: 'Alinhar à Direita' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/ro.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'ro', { 6 | block: 'Aliniere în bloc (Block Justify)', 7 | center: 'Aliniere centrală', 8 | left: 'Aliniere la stânga', 9 | right: 'Aliniere la dreapta' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/ru.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'ru', { 6 | block: 'По ширине', 7 | center: 'По центру', 8 | left: 'По левому краю', 9 | right: 'По правому краю' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/si.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'si', { 6 | block: 'Justify', // MISSING 7 | center: 'මධ්‍ය', 8 | left: 'Align Left', // MISSING 9 | right: 'Align Right' // MISSING 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/sk.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'sk', { 6 | block: 'Zarovnať do bloku', 7 | center: 'Zarovnať na stred', 8 | left: 'Zarovnať vľavo', 9 | right: 'Zarovnať vpravo' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/sl.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'sl', { 6 | block: 'Obojestranska poravnava', 7 | center: 'Sredinska poravnava', 8 | left: 'Leva poravnava', 9 | right: 'Desna poravnava' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/sq.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'sq', { 6 | block: 'Zgjero', 7 | center: 'Qendër', 8 | left: 'Rreshto majtas', 9 | right: 'Rreshto Djathtas' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/sr-latn.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'sr-latn', { 6 | block: 'Obostrano ravnanje', 7 | center: 'Centriran tekst', 8 | left: 'Levo ravnanje', 9 | right: 'Desno ravnanje' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/sr.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'sr', { 6 | block: 'Обострано равнање', 7 | center: 'Центриран текст', 8 | left: 'Лево равнање', 9 | right: 'Десно равнање' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/sv.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'sv', { 6 | block: 'Justera till marginaler', 7 | center: 'Centrera', 8 | left: 'Vänsterjustera', 9 | right: 'Högerjustera' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/th.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'th', { 6 | block: 'จัดพอดีหน้ากระดาษ', 7 | center: 'จัดกึ่งกลาง', 8 | left: 'จัดชิดซ้าย', 9 | right: 'จัดชิดขวา' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/tr.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'tr', { 6 | block: 'İki Kenara Yaslanmış', 7 | center: 'Ortalanmış', 8 | left: 'Sola Dayalı', 9 | right: 'Sağa Dayalı' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/ug.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'ug', { 6 | block: 'ئىككى تەرەپتىن توغرىلا', 7 | center: 'ئوتتۇرىغا توغرىلا', 8 | left: 'سولغا توغرىلا', 9 | right: 'ئوڭغا توغرىلا' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/uk.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'uk', { 6 | block: 'По ширині', 7 | center: 'По центру', 8 | left: 'По лівому краю', 9 | right: 'По правому краю' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/vi.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'vi', { 6 | block: 'Canh đều', 7 | center: 'Canh giữa', 8 | left: 'Canh trái', 9 | right: 'Canh phải' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/zh-cn.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'zh-cn', { 6 | block: '两端对齐', 7 | center: '居中', 8 | left: '左对齐', 9 | right: '右对齐' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/justify/lang/zh.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 3 | For licensing, see LICENSE.md or http://ckeditor.com/license 4 | */ 5 | CKEDITOR.plugins.setLang( 'justify', 'zh', { 6 | block: '左右對齊', 7 | center: '置中', 8 | left: '靠左對齊', 9 | right: '靠右對齊' 10 | } ); 11 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/link/images/anchor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/plugins/link/images/anchor.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/link/images/hidpi/anchor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/plugins/link/images/hidpi/anchor.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/magicline/images/hidpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/plugins/magicline/images/hidpi/icon.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/magicline/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/plugins/magicline/images/icon.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/scayt/README.md: -------------------------------------------------------------------------------- 1 | CKEditor SCAYT Plugin 2 | ===================== 3 | 4 | This plugin brings Spell Check As You Type (SCAYT) into CKEditor. 5 | 6 | SCAYT is a "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. 7 | 8 | Installation 9 | ------------ 10 | 11 | 1. Clone/copy this repository contents in a new "plugins/scayt" folder in your CKEditor installation. 12 | 2. Enable the "scayt" plugin in the CKEditor configuration file (config.js): 13 | 14 | config.extraPlugins = 'scayt'; 15 | 16 | That's all. SCAYT will appear on the editor toolbar and will be ready to use. 17 | 18 | License 19 | ------- 20 | 21 | Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). 22 | 23 | See LICENSE.md for more information. 24 | 25 | Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). 26 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. 2 | For licensing, see LICENSE.md or http://ckeditor.com/license 3 | 4 | cs.js Found: 118 Missing: 0 5 | cy.js Found: 118 Missing: 0 6 | de.js Found: 118 Missing: 0 7 | el.js Found: 16 Missing: 102 8 | eo.js Found: 118 Missing: 0 9 | et.js Found: 31 Missing: 87 10 | fa.js Found: 24 Missing: 94 11 | fi.js Found: 23 Missing: 95 12 | fr.js Found: 118 Missing: 0 13 | hr.js Found: 23 Missing: 95 14 | it.js Found: 118 Missing: 0 15 | nb.js Found: 118 Missing: 0 16 | nl.js Found: 118 Missing: 0 17 | no.js Found: 118 Missing: 0 18 | tr.js Found: 118 Missing: 0 19 | ug.js Found: 39 Missing: 79 20 | zh-cn.js Found: 118 Missing: 0 21 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/plugins/wsc/README.md: -------------------------------------------------------------------------------- 1 | CKEditor WebSpellChecker Plugin 2 | =============================== 3 | 4 | This plugin brings Web Spell Checker (WSC) into CKEditor. 5 | 6 | WSC is "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution. 7 | 8 | Installation 9 | ------------ 10 | 11 | 1. Clone/copy this repository contents in a new "plugins/wsc" folder in your CKEditor installation. 12 | 2. Enable the "wsc" plugin in the CKEditor configuration file (config.js): 13 | 14 | config.extraPlugins = 'wsc'; 15 | 16 | That's all. WSC will appear on the editor toolbar and will be ready to use. 17 | 18 | License 19 | ------- 20 | 21 | Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). 22 | 23 | See LICENSE.md for more information. 24 | 25 | Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/). 26 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/skins/moono/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/skins/moono/icons.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/skins/moono/icons_hidpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/skins/moono/icons_hidpi.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/skins/moono/images/arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/skins/moono/images/arrow.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/skins/moono/images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/skins/moono/images/close.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/skins/moono/images/hidpi/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/skins/moono/images/hidpi/close.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/skins/moono/images/hidpi/lock-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/skins/moono/images/hidpi/lock-open.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/skins/moono/images/hidpi/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/skins/moono/images/hidpi/lock.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/skins/moono/images/hidpi/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/skins/moono/images/hidpi/refresh.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/skins/moono/images/lock-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/skins/moono/images/lock-open.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/skins/moono/images/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/skins/moono/images/lock.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/lib/ckeditor/skins/moono/images/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/static/widgy/js/lib/ckeditor/skins/moono/images/refresh.png -------------------------------------------------------------------------------- /widgy/static/widgy/js/modal/modal.html: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | 10 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/nodes/drop_target.html: -------------------------------------------------------------------------------- 1 | drop here? 2 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/nodes/popped_out.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/nodes/preview.html: -------------------------------------------------------------------------------- 1 | 2 | <% title %> 3 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/popup.js: -------------------------------------------------------------------------------- 1 | jQuery(function($) { 2 | // show/hide publish at calendar fields according to what the publish_radio 3 | // field dictates. 4 | var $publish_at = $('.publish_at_container'); 5 | function showHideCalendar() { 6 | var publish_now = $('[name=publish_radio]:checked').val() == 'now'; 7 | 8 | if ( publish_now ) { 9 | $publish_at.hide(); 10 | } else { 11 | $publish_at.show(); 12 | } 13 | } 14 | $('[name=publish_radio]').on('change', showHideCalendar); 15 | showHideCalendar(); 16 | 17 | // Loading spinner 18 | $('.popUp form [type=submit]').click(function() { 19 | $(this).addClass('loading'); 20 | }); 21 | $('.popUp form').submit(function() { 22 | var $form = $(this); 23 | var $submits = $form.find('[type=submit]'); 24 | if ( $form.find('.loading').length == 0 ) { 25 | // enter pressed 26 | $submits.first().addClass('loading'); 27 | } 28 | // We want to disable the submit buttons to prevent double-submission, but 29 | // we need the data from the submit button to be submitted, which won't 30 | // happen if it's disabled in this frame. 31 | setTimeout(function() { 32 | $submits.attr('disabled', true); 33 | }, 0); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/require/depend.js: -------------------------------------------------------------------------------- 1 | /** @license 2 | * Plugin to load JS files that have dependencies but aren't wrapped into 3 | * `define` calls. 4 | * Author: Miller Medeiros 5 | * Version: 0.1.0 (2011/12/13) 6 | * Released under the MIT license 7 | */ 8 | define(function () { 9 | 10 | var rParts = /^(.*)\[([^\]]*)\]$/; 11 | 12 | return { 13 | 14 | //example: depend!bar[jquery,lib/foo] 15 | load : function(name, req, onLoad, config){ 16 | var parts = rParts.exec(name); 17 | 18 | req(parts[2].split(','), function(){ 19 | req([parts[1]], function(mod){ 20 | onLoad(mod); 21 | }); 22 | }); 23 | } 24 | 25 | }; 26 | 27 | }); 28 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/shelves/shelf.html: -------------------------------------------------------------------------------- 1 |
    2 |

    Widgets

    3 | 4 |
      5 |
      6 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/templates.js: -------------------------------------------------------------------------------- 1 | define([ 2 | 'widgy.backbone', 3 | 'underscore', 4 | 'lib/q', 5 | 'modal/modal' 6 | ], function( 7 | Backbone, 8 | _, 9 | Q, 10 | modal 11 | ) { 12 | 13 | var Template = Backbone.Model.extend({ 14 | initialize: function() { 15 | Backbone.Model.prototype.initialize.apply(this, arguments); 16 | 17 | _.bindAll(this, 18 | 'render' 19 | ); 20 | }, 21 | 22 | render: function(type, context) { 23 | return Backbone.renderTemplate(this.get(type), context); 24 | } 25 | }); 26 | 27 | var getTemplate = function(template_id) { 28 | return Q(Backbone.ajax({url: template_id, cache: false})) 29 | .then(function(template) { 30 | var model = new Template(_.extend({url: template_id}, template)); 31 | return model; 32 | }) 33 | .fail(modal.ajaxError); 34 | }; 35 | 36 | return { 37 | getTemplate: getTemplate 38 | }; 39 | }); 40 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/widgets/widget.html: -------------------------------------------------------------------------------- 1 | {{{ yield }}} 2 | 3 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/widgy-main.js: -------------------------------------------------------------------------------- 1 | require(['widgy'], function() { 2 | // stub for loading compiled widgy bundle 3 | }); 4 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/widgy.admin.js: -------------------------------------------------------------------------------- 1 | jQuery(function($) { 2 | $('a.widgy-fancybox').fancybox({ 3 | width: 700, 4 | type: 'iframe', 5 | onComplete: function() { 6 | $.fancybox.showActivity(); 7 | $('#fancybox-frame').load(function(){ 8 | $.fancybox.hideActivity(); 9 | }); 10 | } 11 | }); 12 | window.closeFancybox = $.fancybox.close; 13 | }); 14 | 15 | if ( typeof window.console == 'undefined' ) 16 | { 17 | var $console = $('
        '); 18 | $(document.body).append($console); 19 | window.console = { 20 | log: function(what) { 21 | $console.append($('
      • ').text(what)); 22 | } 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /widgy/static/widgy/js/widgy.build.js: -------------------------------------------------------------------------------- 1 | ({ 2 | paths: { 3 | 'jquery': './lib/jquery', 4 | 'underscore': './lib/underscore', 5 | 'backbone': './lib/backbone', 6 | 'text': 'require/text', 7 | }, 8 | skipDirOptimize: true, 9 | modules: [ 10 | { 11 | name: 'widgy-main', 12 | // components get included dynamically, so they can't be detected. 13 | include: [ 14 | 'components/widget/component', 15 | 'components/tabbed/component', 16 | 'components/table/component', 17 | 'components/tableheader/component', 18 | ], 19 | } 20 | ], 21 | map: { 22 | // http://requirejs.org/docs/jquery.html#noconflictmap 23 | '*': { 'jquery': 'jquery-private' }, 24 | 'jquery-private': { 'jquery': 'jquery' } 25 | } 26 | }) 27 | -------------------------------------------------------------------------------- /widgy/static/widgy/mixins/tabbed.admin.scss: -------------------------------------------------------------------------------- 1 | @import "/widgy/css/widgy_common"; 2 | 3 | // Layout 4 | .widgy { 5 | .tabbed { 6 | > .widget > .nodeChildren { 7 | @include box-sizing(border-box); 8 | @include clearfix; 9 | width: 100% !important; 10 | 11 | > li { 12 | display: inline-block; 13 | float: left; 14 | 15 | // Only show the buttons if we are on the current tab. 16 | &:not(.active) { 17 | .edit, .delete { 18 | display: none; 19 | } 20 | } 21 | 22 | &.node_drop_target { 23 | margin-bottom: 0; 24 | width: 50px; 25 | 26 | &.active { 27 | width: 100px; 28 | } 29 | } 30 | 31 | .drag-row { 32 | @include cursor(pointer); 33 | } 34 | .draggable > .drag-row { 35 | @include cursor(grab, pointer); 36 | } 37 | &.being_dragged .drag-row { 38 | @include cursor(grabbing, pointer); 39 | } 40 | } 41 | } 42 | 43 | .current { 44 | clear: both; 45 | width: 100%; 46 | } 47 | } 48 | 49 | // if the tabs are at the root level make the current tab look 50 | // like a root level node. 51 | section.tabbed > .widget > .current { 52 | float: left; 53 | width: 63%; 54 | } 55 | } 56 | 57 | @import "tabbed-theme.admin.scss"; 58 | -------------------------------------------------------------------------------- /widgy/templates/layout_base.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | -------------------------------------------------------------------------------- /widgy/templates/widgy/_commit_form.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 | {% load widgy_tags %} 3 | 4 |
          5 | {% for owner in tracker.owners %} 6 | {% get_action_links owner tracker.working_copy as links %} 7 | {% for link in links %} 8 |
        • {{ link.text }}
        • 9 | {% endfor %} 10 | {% endfor %} 11 | {% for diff_url in diff_urls %} 12 |
        • {% trans "View Diff" %}
        • 13 | {% endfor %} 14 |
        15 | 16 |
        17 | {% csrf_token %} 18 | {{ form.media }} 19 | 20 | {% include "widgy/field_as_div.html" with field=form.message %} 21 | 22 |
        23 | {{ form.publish_at.label_tag }} 24 | {{ form.publish_radio }} 25 | 26 |
        27 | {{ form.publish_at }} 28 | {{ form.publish_at.errors }} 29 |
        30 | 31 | {% if form.publish_at.help_text %} 32 |

        {{ form.publish_at.help_text }}

        33 | {% endif %} 34 |
        35 | 36 |

        37 | {% block submit_row %} 38 | 39 | {% endblock %} 40 |

        41 |
        42 | -------------------------------------------------------------------------------- /widgy/templates/widgy/commit.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/popup_base.html" %} 2 | {% load i18n %} 3 | 4 | {% block popup-content %} 5 | {% if changed_anything %} 6 | {% block commit_form %} 7 | {% include "widgy/_commit_form.html" with commit=tracker.working_copy action_url=commit_url %} 8 | {% endblock %} 9 | {% else %} 10 |

        {% trans "Nothing has changed — no need to commit." %}

        11 | {% endif %} 12 | {% endblock %} 13 | -------------------------------------------------------------------------------- /widgy/templates/widgy/commit_success.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/popup_base.html" %} 2 | {% load i18n %} 3 | {% block popup-content %} 4 |

        {% trans "Change(s) successfully committed." %}

        5 | 8 | {% endblock %} 9 | -------------------------------------------------------------------------------- /widgy/templates/widgy/debugtoolbar/templates.html: -------------------------------------------------------------------------------- 1 |

        get_templates_hierarchy

        2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | {% for call in calls %} 11 | {% ifchanged call.templates %} 12 | 13 | 19 | {% endifchanged %} 20 | {% endfor %} 21 |
        ClassTemplatesUsed
        {{ call.cls_name }} 14 | {% for template in call.templates %} 15 | {{ template }}{% if not forloop.last %}, {% endif %} 16 | {% endfor %} 17 | {{ call.used }} 18 |
        22 | -------------------------------------------------------------------------------- /widgy/templates/widgy/diff.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %}{% load compress staticfiles %} 2 | {% block body %} 3 | {% compress css %} 4 | {# designers -- when you get to this, feel free to completely remove this #} 5 | {# css file and write your own #} 6 | 7 | {% endcompress %} 8 | 19 | {{ diff|safe }} 20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /widgy/templates/widgy/edit.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 |
        3 | {{ form.media }} 4 | {{ form.non_field_errors }} 5 | 6 | {% for field in form %} 7 | {% include "widgy/field_as_div.html" %} 8 | {% endfor %} 9 | 10 | {% block submit-row-outer %} 11 |
        12 | {% block submit-row-inner %} 13 | 14 | 15 | {% endblock %} 16 |
        17 | {% endblock %} 18 |
        19 | -------------------------------------------------------------------------------- /widgy/templates/widgy/field_as_div.html: -------------------------------------------------------------------------------- 1 | {% if field.is_hidden %} 2 | {{ field }} 3 | {% else %} 4 |
        5 | {{ field.label_tag }} 6 | {{ field }} 7 | {{ field.errors }} 8 | 9 | {% if field.help_text %} 10 |

        {{ field.help_text|safe }}

        11 | {% endif %} 12 |
        13 | {% endif %} 14 | -------------------------------------------------------------------------------- /widgy/templates/widgy/forms/widgets/contenttyperadioselect.html: -------------------------------------------------------------------------------- 1 | {% load compress static %} 2 |
        3 | {% include 'django/forms/widgets/radio.html' %} 4 |
        5 | {% compress css %} 6 | 7 | {% endcompress %} 8 | -------------------------------------------------------------------------------- /widgy/templates/widgy/forms/widgets/contenttyperadioselect_option.html: -------------------------------------------------------------------------------- 1 | {% load widgy_tags %} 2 | 7 | -------------------------------------------------------------------------------- /widgy/templates/widgy/mixins/invisible/preview.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/preview.html" %} 2 | 3 | {% block drag-row %}{% endblock %} 4 | -------------------------------------------------------------------------------- /widgy/templates/widgy/mixins/tabbed/preview.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/preview.html" %} 2 | {% load compress %} 3 | 4 | {% block children %} 5 | {{ block.super }} 6 |
        7 |
        8 | {% endblock %} 9 | -------------------------------------------------------------------------------- /widgy/templates/widgy/popup_base.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/base.html" %} 2 | {% load compress static %} 3 | 4 | {% block extrastyle %}{{ block.super }} 5 | {% compress css %} 6 | 7 | {% endcompress %} 8 | 9 | {% endblock %} 10 | 11 | {% block extrahead %}{{ block.super }} 12 | {% url 'admin:jsi18n' as jsi18nurl %} 13 | 14 | {% compress js %} 15 | 16 | 17 | 18 | 19 | 20 | {% endcompress %} 21 | 24 | {% endblock %} 25 | 26 | {% block breadcrumbs %}{% endblock %} 27 | 28 | {% block content %} 29 | 39 | {% endblock %} 40 | -------------------------------------------------------------------------------- /widgy/templates/widgy/preview.html: -------------------------------------------------------------------------------- 1 | {% load i18n %} 2 |
        3 | {% block drag-row %} 4 |

        5 | {% if self.draggable %} 6 | 7 | {% endif %} 8 | 9 | {% block title %} 10 | {{ self.display_name|capfirst }} 11 | {% endblock %} 12 | 13 | {% if self.deletable %} 14 | 15 | {% endif %} 16 | {% if self.editable %} 17 | 18 | {% endif %} 19 | {% if self.pop_out %} 20 | {% trans "pop out" %} 21 | {% endif %} 22 |

        23 | {% endblock %} 24 | 25 | {# This needs to have no newlines in order to be :empty #} 26 |
        {% block content %}{% endblock %}
        27 | 28 | {% block children %} 29 |
          30 | {% endblock %} 31 |
          32 | -------------------------------------------------------------------------------- /widgy/templates/widgy/reset.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/popup_base.html" %} 2 | {% load i18n %} 3 | 4 | {% block popup-content %} 5 | {% if not has_commits %} 6 |

          {% trans "There are no commits yet, nothing to reset to" %}

          7 | {% elif changed_anything %} 8 |

          {% trans "This will irrevocably destroy all uncommited changes. Are you sure?" %}

          9 |
          10 | {% csrf_token %} 11 |

          12 |
          13 | {% else %} 14 |

          {% trans "Nothing has changed — no need to reset." %}

          15 | {% endif %} 16 | {% endblock %} 17 | -------------------------------------------------------------------------------- /widgy/templates/widgy/reset_success.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/popup_base.html" %} 2 | {% load i18n %} 3 | 4 | {% block popup-content %} 5 |

          {% trans 'Your changes were successfully erased.' %}

          6 | 10 | {% endblock %} 11 | -------------------------------------------------------------------------------- /widgy/templates/widgy/revert.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/popup_base.html" %} 2 | {% load i18n %} 3 | 4 | {% block popup-content %} 5 | {% include "widgy/_commit_form.html" with commit=tracker.root_node action_url=revert_url %} 6 | {% endblock %} 7 | -------------------------------------------------------------------------------- /widgy/templates/widgy/versioned_widgy_field_base.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/widgy_field.html" %} 2 | {% load i18n %} 3 | 4 | {% block widgy_tools %} 5 |
        • {% trans "Commit" %}
        • 6 |
        • {% trans "Reset" %}
        • 7 |
        • {% trans "History" %}
        • 8 | {{ block.super }} 9 | {% endblock %} 10 | -------------------------------------------------------------------------------- /widgy/templates/widgy/views/README: -------------------------------------------------------------------------------- 1 | These templates are used internally by Widgy. They are unrelated to the 2 | templates for Content models. 3 | -------------------------------------------------------------------------------- /widgy/templates/widgy/views/edit_node.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Edit Node 5 | 6 | 7 | {% include "widgy/widgy_field.html" %} 8 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /widgy/templates/widgy/widgy/unknownwidget/preview.html: -------------------------------------------------------------------------------- 1 | {% extends "widgy/preview.html" %} 2 | {% block content %} 3 |

          4 | Unknown Widget Type: {{ self.content_type.app_label }}.{{ self.content_type.model }} 5 |

          6 | {% endblock %} 7 | -------------------------------------------------------------------------------- /widgy/templatetags/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fusionbox/django-widgy/a730bff31ce5a7c7cfd9fbbc0df98f4c22e8e2e5/widgy/templatetags/__init__.py -------------------------------------------------------------------------------- /widgy/views/__init__.py: -------------------------------------------------------------------------------- 1 | from widgy.views.api import * 2 | from widgy.views.versioning import * 3 | -------------------------------------------------------------------------------- /widgy/views/base.py: -------------------------------------------------------------------------------- 1 | from django.contrib.auth.views import redirect_to_login 2 | from django.core.exceptions import PermissionDenied 3 | 4 | 5 | class WidgyViewMixin(object): 6 | site = None 7 | 8 | def auth(self, request, *args, **kwargs): 9 | self.site.authorize_view(request, self) 10 | 11 | 12 | class AuthorizedMixin(WidgyViewMixin): 13 | """ 14 | Makes sure to call auth before doing anything. 15 | 16 | This class should not be used by RestView subclasses. RestView already 17 | makes the call to auth, but conveniently wraps the errors to return them in 18 | JSON-encoded responses. 19 | """ 20 | def dispatch(self, request, *args, **kwargs): 21 | try: 22 | self.auth(request, *args, **kwargs) 23 | except PermissionDenied: 24 | if request.user.is_authenticated(): 25 | raise 26 | else: 27 | return redirect_to_login(request.get_full_path()) 28 | else: 29 | return super(AuthorizedMixin, self).dispatch(request, *args, **kwargs) 30 | -------------------------------------------------------------------------------- /widgy/widgets.py: -------------------------------------------------------------------------------- 1 | from django.contrib.admin import widgets 2 | from django.template.loader import render_to_string 3 | 4 | 5 | class DateTimeMixin(object): 6 | class Media: 7 | extend = False 8 | js = tuple() 9 | 10 | def render(self, name, value, attrs=None): 11 | widget = super(DateTimeMixin, self).render(name, value, attrs) 12 | return render_to_string('page_builder/datetime_widget.html', { 13 | 'widget': widget, 14 | }) 15 | 16 | 17 | class DateTimeWidget(DateTimeMixin, widgets.AdminSplitDateTime): 18 | pass 19 | 20 | 21 | class DateWidget(DateTimeMixin, widgets.AdminDateWidget): 22 | pass 23 | 24 | 25 | class TimeWidget(DateTimeMixin, widgets.AdminTimeWidget): 26 | pass 27 | --------------------------------------------------------------------------------