├── .bowerrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .travis.yml ├── README.md ├── bower.json ├── fonticons ├── MaterialIcons-Regular.eot ├── MaterialIcons-Regular.ijmap ├── MaterialIcons-Regular.svg ├── MaterialIcons-Regular.ttf ├── MaterialIcons-Regular.woff ├── MaterialIcons-Regular.woff2 ├── control │ ├── icomoon.eot │ ├── icomoon.svg │ ├── icomoon.ttf │ └── icomoon.woff ├── icomoon.eot ├── icomoon.svg ├── icomoon.ttf ├── icomoon.woff ├── icomoon.woff2 └── selection.json ├── fonts ├── Inter-Medium.otf ├── Inter-Medium.ttf ├── Inter-Medium.woff2 ├── Inter-Regular.otf ├── Inter-Regular.ttf ├── Inter-Regular.woff2 ├── apercu_bold.eot ├── apercu_bold.svg ├── apercu_bold.ttf ├── apercu_bold.woff ├── apercu_regular.eot ├── apercu_regular.svg ├── apercu_regular.ttf └── apercu_regular.woff ├── images ├── favicon-16x16.png └── favicon-32x32.png ├── index.html ├── karma.conf.js ├── package.json ├── pluginTester ├── app.js ├── app │ └── media │ │ ├── fb.png │ │ ├── googleplus.png │ │ └── twitter.png ├── images │ ├── avatar-2.png │ └── avatar.png ├── index.html ├── media │ ├── PoweredByGiphy.png │ ├── avatar.png │ ├── cover.png │ ├── fb.png │ ├── googleplus.png │ ├── ic_bookmark_empty.svg │ ├── logo_apple_b.png │ ├── logo_apple_w.png │ ├── logo_facebook.png │ ├── logo_google.png │ ├── logo_x_b.png │ └── logo_x_w.png ├── pages │ ├── controllers │ │ ├── apiKeysCtrl.js │ │ ├── appDatasourcesAPI.js │ │ ├── expressionsBuilderAPI.js │ │ ├── indexCtrl.js │ │ ├── languageSettingsCtrl.js │ │ ├── loginCtrl.js │ │ ├── pluginLayoutsCtrl.js │ │ ├── settingsCtrl.js │ │ ├── shellAppCtrl.js │ │ └── shellCtrl.js │ ├── services │ │ └── gdprService.js │ └── templates │ │ ├── apiKeys.html │ │ ├── datasources.html │ │ ├── expressionsBuilder.html │ │ ├── languageSettings.html │ │ ├── login.html │ │ ├── modal.html │ │ ├── pluginLayouts.html │ │ ├── settings.html │ │ └── shell.html ├── scripts │ ├── angular │ │ ├── 1.4 │ │ │ ├── angular.js │ │ │ ├── angular.min.js │ │ │ └── ui-bootstrap.min.js │ │ └── angular-color-picker.js │ ├── appContext.js │ ├── appOverrides.js │ ├── framework │ │ ├── app.min.js │ │ └── web.min.js │ ├── lib │ │ ├── ng-file-upload-shim.min.js │ │ ├── ng-file-upload.min.js │ │ ├── photoswipe-ui-default.min.js │ │ ├── photoswipe.js │ │ ├── scrollbooster.min.js │ │ ├── tinymce │ │ │ ├── changelog.txt │ │ │ └── js │ │ │ │ └── tinymce │ │ │ │ ├── icons │ │ │ │ └── default │ │ │ │ │ └── icons.min.js │ │ │ │ ├── jquery.tinymce.min.js │ │ │ │ ├── langs │ │ │ │ └── readme.md │ │ │ │ ├── license.txt │ │ │ │ ├── plugins │ │ │ │ ├── advlist │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── anchor │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── autolink │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── autoresize │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── autosave │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── bbcode │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── charmap │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── code │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── codesample │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── colorpicker │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── contextmenu │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── directionality │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── emoticons │ │ │ │ │ ├── js │ │ │ │ │ │ ├── emojiimages.js │ │ │ │ │ │ ├── emojiimages.min.js │ │ │ │ │ │ ├── emojis.js │ │ │ │ │ │ └── emojis.min.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── fullpage │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── fullscreen │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── help │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── hr │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── image │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── imagetools │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── importcss │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── insertdatetime │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── legacyoutput │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── link │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── lists │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── media │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── nonbreaking │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── noneditable │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── pagebreak │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── paste │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── preview │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── print │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── quickbars │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── save │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── searchreplace │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── spellchecker │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── tabfocus │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── table │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── template │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── textcolor │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── textpattern │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── toc │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── visualblocks │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── visualchars │ │ │ │ │ └── plugin.min.js │ │ │ │ └── wordcount │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── skins │ │ │ │ ├── content │ │ │ │ │ ├── dark │ │ │ │ │ │ └── content.min.css │ │ │ │ │ ├── default │ │ │ │ │ │ └── content.min.css │ │ │ │ │ ├── document │ │ │ │ │ │ └── content.min.css │ │ │ │ │ └── writer │ │ │ │ │ │ └── content.min.css │ │ │ │ └── ui │ │ │ │ │ ├── oxide-dark │ │ │ │ │ ├── content.inline.min.css │ │ │ │ │ ├── content.min.css │ │ │ │ │ ├── content.mobile.min.css │ │ │ │ │ ├── fonts │ │ │ │ │ │ └── tinymce-mobile.woff │ │ │ │ │ ├── skin.min.css │ │ │ │ │ ├── skin.mobile.min.css │ │ │ │ │ └── skin.shadowdom.min.css │ │ │ │ │ └── oxide │ │ │ │ │ ├── content.inline.min.css │ │ │ │ │ ├── content.min.css │ │ │ │ │ ├── content.mobile.min.css │ │ │ │ │ ├── fonts │ │ │ │ │ └── tinymce-mobile.woff │ │ │ │ │ ├── skin.min.css │ │ │ │ │ ├── skin.mobile.min.css │ │ │ │ │ └── skin.shadowdom.min.css │ │ │ │ ├── themes │ │ │ │ ├── mobile │ │ │ │ │ └── theme.min.js │ │ │ │ └── silver │ │ │ │ │ └── theme.min.js │ │ │ │ ├── tinymce.d.ts │ │ │ │ └── tinymce.min.js │ │ └── xss.min.js │ ├── overrides.js │ ├── pullDownToRefresh.js │ └── siteConfig.js └── styles │ ├── angular-color-picker.css │ ├── appStyle.css │ ├── defaults.css │ ├── helper.css │ ├── input.css │ ├── loading-bar.css │ ├── material-icons.css │ ├── photoswipe.css │ ├── photoswipe.skin.css │ └── pulldown.css ├── plugins ├── myPlugin │ ├── control │ │ ├── content │ │ │ └── index.html │ │ ├── design │ │ │ └── index.html │ │ └── settings │ │ │ └── index.html │ ├── plugin.json │ ├── resources │ │ ├── README.md │ │ ├── icon.png │ │ └── image.png │ └── widget │ │ ├── .images │ │ ├── .nomedia │ │ └── README.md │ │ └── index.html └── testPlugin │ ├── control │ └── content │ │ └── index.html │ ├── plugin.json │ └── widget │ └── index.html ├── scripts ├── _bundles │ ├── buildfire_lightcarousel.min.js │ ├── buildfire_lightcarousel.min.js.map │ ├── jquery_angular_buildfire_smartcrop.min.js │ └── jquery_angular_buildfire_smartcrop.min.js.map ├── angular │ ├── angular-animate.min.js │ ├── angular-route.min.js │ ├── angular-touch.js │ ├── angular-ui-sortable.js │ ├── angular.min.js │ ├── angulargrid.js │ ├── ng-file-upload-shim.min.js │ ├── ng-file-upload.min.js │ ├── ng-infinite-scroll.custom.js │ ├── ng-infinite-scroll.min.js │ ├── ng-map.min.js │ ├── ngAutocomplete.js │ └── ui-bootstrap.min.js ├── buildfire.js ├── buildfire.min.js ├── buildfire.min.js.map ├── buildfire │ ├── components │ │ ├── actionItems │ │ │ └── sortableList.js │ │ ├── aiStateSeeder │ │ │ └── aiStateSeeder.js │ │ ├── carousel │ │ │ └── carousel.js │ │ ├── carouselLight │ │ │ ├── carouselLight.js │ │ │ ├── carouselLight.min.js │ │ │ ├── carouselLight.min.js.map │ │ │ └── carouselLightEditor.js │ │ ├── contentSlider │ │ │ └── contentSlider.js │ │ ├── control │ │ │ ├── listView │ │ │ │ └── listView.js │ │ │ ├── reactions │ │ │ │ ├── reactionGroupsPicker.js │ │ │ │ └── reactionGroupsPicker.min.js │ │ │ └── tagsInput │ │ │ │ ├── tagsInput.js │ │ │ │ ├── tagsInput.min.js │ │ │ │ └── tagsInput.min.js.map │ │ ├── drawer │ │ │ └── drawer.js │ │ ├── fabSpeedDial │ │ │ └── fabSpeedDial.js │ │ ├── images │ │ │ └── thumbnail.js │ │ ├── listView │ │ │ └── listView.js │ │ ├── listView@2.0 │ │ │ └── listView.js │ │ ├── notifications │ │ │ └── notifications.js │ │ ├── pluginInstance │ │ │ └── sortableList.js │ │ ├── popup │ │ │ └── popup.js │ │ ├── ratingSystem │ │ │ ├── index.css │ │ │ ├── index.js │ │ │ ├── index.min.css │ │ │ └── index.min.js │ │ ├── reactions │ │ │ ├── reactions.js │ │ │ └── reactions.min.js │ │ ├── signatureBox │ │ │ ├── signatureBox.js │ │ │ └── signature_pad.min.js │ │ ├── skeleton │ │ │ └── skeleton.js │ │ ├── swipeableDrawer │ │ │ └── swipeableDrawer.js │ │ ├── toast │ │ │ └── toast.js │ │ └── web-components │ │ │ ├── .DS_Store │ │ │ ├── buildfire-components.js │ │ │ ├── buildfire-components │ │ │ ├── buildfire-components.73mqvcjd.js │ │ │ ├── buildfire-components.gxl1fals.js │ │ │ ├── dbckgtkz.entry.js │ │ │ ├── dbckgtkz.es5.entry.js │ │ │ ├── dbckgtkz.sc.entry.js │ │ │ └── dbckgtkz.sc.es5.entry.js │ │ │ ├── collection │ │ │ ├── collection-manifest.json │ │ │ ├── components │ │ │ │ ├── bf-grid │ │ │ │ │ ├── bf-grid.css │ │ │ │ │ └── bf-grid.js │ │ │ │ ├── bf-image-grid │ │ │ │ │ ├── bf-image-grid.css │ │ │ │ │ └── bf-image-grid.js │ │ │ │ ├── bf-image-list │ │ │ │ │ ├── bf-image-list.css │ │ │ │ │ └── bf-image-list.js │ │ │ │ └── bf-img │ │ │ │ │ ├── bf-img.css │ │ │ │ │ └── bf-img.js │ │ │ └── interface.js │ │ │ ├── esm │ │ │ ├── es2017 │ │ │ │ ├── build │ │ │ │ │ ├── dbckgtkz.entry.js │ │ │ │ │ └── dbckgtkz.sc.entry.js │ │ │ │ ├── buildfire-components.components.js │ │ │ │ ├── buildfire-components.core.js │ │ │ │ ├── buildfire-components.define.js │ │ │ │ └── index.js │ │ │ ├── es5 │ │ │ │ ├── build │ │ │ │ │ ├── dbckgtkz.entry.js │ │ │ │ │ └── dbckgtkz.sc.entry.js │ │ │ │ ├── buildfire-components.components.js │ │ │ │ ├── buildfire-components.core.js │ │ │ │ ├── buildfire-components.define.js │ │ │ │ ├── index.js │ │ │ │ └── polyfills │ │ │ │ │ ├── array.js │ │ │ │ │ ├── dom.js │ │ │ │ │ ├── fetch.js │ │ │ │ │ ├── object.js │ │ │ │ │ ├── promise.js │ │ │ │ │ ├── string.js │ │ │ │ │ ├── tslib.js │ │ │ │ │ └── url.js │ │ │ └── index.js │ │ │ ├── index.js │ │ │ ├── loader │ │ │ ├── index.d.ts │ │ │ ├── index.es2017.js │ │ │ ├── index.js │ │ │ └── package.json │ │ │ └── types │ │ │ ├── components.d.ts │ │ │ ├── components │ │ │ ├── bf-grid │ │ │ │ └── bf-grid.d.ts │ │ │ ├── bf-image-grid │ │ │ │ └── bf-image-grid.d.ts │ │ │ ├── bf-image-list │ │ │ │ └── bf-image-list.d.ts │ │ │ └── bf-img │ │ │ │ └── bf-img.d.ts │ │ │ └── stencil.core.d.ts │ └── services │ │ ├── ai │ │ └── ai.js │ │ ├── bluetooth │ │ ├── ble.js │ │ ├── bleCentral.js │ │ └── iBeacon.js │ │ ├── cachedNotes │ │ └── cachedNotes.js │ │ ├── camera │ │ ├── barcodeScanner.js │ │ └── camera.js │ │ ├── commerce │ │ └── inAppPurchase.js │ │ ├── credits │ │ └── credits.js │ │ ├── fileSystem │ │ └── fileManager.js │ │ ├── firebase │ │ └── firebase.js │ │ ├── format │ │ └── format.js │ │ ├── gamify │ │ ├── scoreboard.js │ │ ├── scoreboard.min.js │ │ └── scoreboard.min.js.map │ │ ├── health │ │ └── healthAPI.js │ │ ├── media │ │ └── audioPlayer.js │ │ ├── notifications │ │ ├── localNotifications.js │ │ └── pushNotifications.js │ │ ├── publicFiles │ │ └── publicFiles.js │ │ ├── reportAbuse │ │ └── reportAbuse.js │ │ ├── searchEngine │ │ └── searchEngine.js │ │ ├── social │ │ └── reactions.js │ │ └── stripe │ │ └── stripe.js ├── dynamic │ ├── dynamicEngine.js │ ├── dynamicEngine.min.js │ └── dynamicEngine.min.js.map ├── fastclick.js ├── firebase │ ├── firebase@7 │ │ ├── firebase-app.js │ │ ├── firebase-auth.js │ │ └── firebase-firestore.js │ └── firebase@9 │ │ ├── firebase-app.js │ │ ├── firebase-auth.js │ │ └── firebase-firestore.js ├── jquery │ ├── bootstrap.min.js │ ├── jquery-1.11.2.min.js │ └── jquery-ui.min.js ├── lory │ └── lory.min.js ├── materialDesign │ └── material-components-web@4.0.0.min.js ├── owlCarousel │ ├── owlCarousel.css │ └── owlCarousel.js ├── readme.txt ├── smartcrop.js ├── sortable.min.js ├── tagify │ ├── tagify.min.js │ └── tagify.polyfills.min.js └── tinymce │ ├── LICENSE.TXT │ ├── bf_tinymce.css │ ├── bf_tinymce_plugins.css │ ├── icons │ └── default │ │ └── icons.min.js │ ├── jquery.tinymce.min.js │ ├── langs │ └── README.md │ ├── license.txt │ ├── plugins │ ├── advlist │ │ └── plugin.min.js │ ├── anchor │ │ └── plugin.min.js │ ├── autolink │ │ └── plugin.min.js │ ├── autoresize │ │ └── plugin.min.js │ ├── autosave │ │ └── plugin.min.js │ ├── bbcode │ │ └── plugin.min.js │ ├── bf_actionitem │ │ └── plugin.min.js │ ├── bf_ai │ │ └── plugin.min.js │ ├── bf_buttons │ │ ├── dialog.html │ │ ├── plugin.js │ │ ├── plugin.min.js │ │ ├── script.js │ │ └── style.css │ ├── bf_imagelib │ │ ├── dialog.html │ │ ├── plugin.min.js │ │ ├── script.js │ │ └── style.css │ ├── bf_layouts │ │ ├── dialog.html │ │ ├── layouts.json │ │ ├── layouts │ │ │ ├── bf_mce_layout1.css │ │ │ ├── bf_mce_layout10.css │ │ │ ├── bf_mce_layout11.css │ │ │ ├── bf_mce_layout12.css │ │ │ ├── bf_mce_layout2.css │ │ │ ├── bf_mce_layout3.css │ │ │ ├── bf_mce_layout4.css │ │ │ ├── bf_mce_layout5.css │ │ │ ├── bf_mce_layout6.css │ │ │ ├── bf_mce_layout7.css │ │ │ ├── bf_mce_layout8.css │ │ │ ├── bf_mce_layout9.css │ │ │ ├── previews │ │ │ │ ├── lyt_1.jpg │ │ │ │ ├── lyt_10.png │ │ │ │ ├── lyt_11.png │ │ │ │ ├── lyt_12.png │ │ │ │ ├── lyt_2.jpg │ │ │ │ ├── lyt_3.jpg │ │ │ │ ├── lyt_4.jpg │ │ │ │ ├── lyt_5.jpg │ │ │ │ ├── lyt_6.jpg │ │ │ │ ├── lyt_7.jpg │ │ │ │ ├── lyt_8.jpg │ │ │ │ └── lyt_9.jpg │ │ │ ├── resources │ │ │ │ ├── img1.jpeg │ │ │ │ ├── img2.jpeg │ │ │ │ └── img3.jpeg │ │ │ ├── template_a.html │ │ │ ├── template_b.html │ │ │ ├── template_c.html │ │ │ ├── template_d.html │ │ │ ├── template_e.html │ │ │ ├── template_f.html │ │ │ └── template_g.html │ │ ├── plugin.js │ │ ├── plugin.min.js │ │ ├── script.js │ │ └── style.css │ ├── bf_rating │ │ ├── dialog.html │ │ ├── plugin.js │ │ └── plugin.min.js │ ├── charmap │ │ └── plugin.min.js │ ├── code │ │ └── plugin.min.js │ ├── codesample │ │ └── plugin.min.js │ ├── colorpicker │ │ └── plugin.min.js │ ├── contextmenu │ │ └── plugin.min.js │ ├── directionality │ │ └── plugin.min.js │ ├── emoticons │ │ ├── js │ │ │ ├── emojiimages.js │ │ │ ├── emojiimages.min.js │ │ │ ├── emojis.js │ │ │ └── emojis.min.js │ │ └── plugin.min.js │ ├── fullpage │ │ └── plugin.min.js │ ├── fullscreen │ │ └── plugin.min.js │ ├── help │ │ └── plugin.min.js │ ├── hr │ │ └── plugin.min.js │ ├── image │ │ └── plugin.min.js │ ├── imagetools │ │ └── plugin.min.js │ ├── importcss │ │ └── plugin.min.js │ ├── insertdatetime │ │ └── plugin.min.js │ ├── legacyoutput │ │ └── plugin.min.js │ ├── link │ │ └── plugin.min.js │ ├── lists │ │ └── plugin.min.js │ ├── media │ │ └── plugin.min.js │ ├── nonbreaking │ │ └── plugin.min.js │ ├── noneditable │ │ └── plugin.min.js │ ├── pagebreak │ │ └── plugin.min.js │ ├── paste │ │ └── plugin.min.js │ ├── preview │ │ └── plugin.min.js │ ├── print │ │ └── plugin.min.js │ ├── quickbars │ │ └── plugin.min.js │ ├── save │ │ └── plugin.min.js │ ├── searchreplace │ │ └── plugin.min.js │ ├── spellchecker │ │ └── plugin.min.js │ ├── tabfocus │ │ └── plugin.min.js │ ├── table │ │ └── plugin.min.js │ ├── template │ │ └── plugin.min.js │ ├── textcolor │ │ └── plugin.min.js │ ├── textpattern │ │ └── plugin.min.js │ ├── toc │ │ └── plugin.min.js │ ├── visualblocks │ │ └── plugin.min.js │ ├── visualchars │ │ └── plugin.min.js │ └── wordcount │ │ └── plugin.min.js │ ├── skins │ ├── content │ │ └── default │ │ │ └── content.min.css │ └── ui │ │ └── bf-skin │ │ ├── content.inline.min.css │ │ ├── content.min.css │ │ ├── content.mobile.min.css │ │ ├── fonts │ │ └── tinymce-mobile.woff │ │ ├── skin.min.css │ │ ├── skin.mobile.min.css │ │ └── skin.shadowdom.min.css │ ├── themes │ └── silver │ │ └── theme.min.js │ ├── tinymce.d.ts │ ├── tinymce.min.js │ └── ui-tinymce.js ├── server.js ├── styles ├── appStyle.css ├── auth.css ├── bfUIElements.css ├── bootstrap.css ├── components │ ├── contentSlider │ │ └── contentSlider.css │ ├── control │ │ ├── listView │ │ │ └── listView.css │ │ └── tagsInput │ │ │ ├── tagsInput.css │ │ │ └── tagsInput.min.css │ ├── fabSpeedDial │ │ └── fabSpeedDial.css │ ├── listView.css │ ├── listView@2.0 │ │ └── listView.css │ ├── reactions │ │ ├── reactions.css │ │ └── reactions.min.css │ ├── skeleton.css │ └── swipeableDrawer │ │ └── swipeableDrawer.css ├── control │ ├── bf-base.css │ └── siteIcons-control.css ├── helper.css ├── icons │ ├── bootstrap@5.0 │ │ ├── bf-bootstrap-icons.css │ │ ├── bootstrap-icons.css │ │ ├── bootstrap-icons.min.css │ │ └── fonts │ │ │ ├── bootstrap-icons.woff │ │ │ └── bootstrap-icons.woff2 │ └── glyph@3.0 │ │ ├── bf-glyph-icons.css │ │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ │ └── glyph-icons.css ├── loading.css ├── material-icons.css ├── materialDesign │ └── material-components-web@4.0.0.min.css ├── media │ ├── avatar-placeholder.png │ ├── empty.svg │ ├── holder-16x9.gif │ ├── holder-16x9.png │ ├── holder-1x1.gif │ ├── holder-1x1.png │ ├── holder-239x1.gif │ ├── holder-239x1.png │ ├── holder-2x1.gif │ ├── holder-2x1.png │ ├── holder-4x1.gif │ ├── holder-4x1.png │ ├── holder-4x3.gif │ ├── holder-4x3.png │ └── reactions │ │ ├── confused_selected.png │ │ ├── confused_unselected.png │ │ ├── crying_selected.png │ │ ├── crying_unselected.png │ │ ├── eco_selected.png │ │ ├── eco_unselected.png │ │ ├── fire_selected.png │ │ ├── fire_unselected.png │ │ ├── happy_selected.png │ │ ├── happy_unselected.png │ │ ├── heart_selected.png │ │ ├── heart_unselected.png │ │ ├── in-love_selected.png │ │ ├── in-love_unselected.png │ │ ├── laughing_selected.png │ │ ├── laughing_unselected.png │ │ ├── like_selected.png │ │ ├── like_unselected.png │ │ ├── relax_selected.png │ │ └── relax_unselected.png ├── pluginScreen.css ├── reactions.css ├── siteIcons.css ├── siteStyle.css └── transitionAnimation.css ├── test.html └── test ├── actionItems.spec.js ├── analytics.spec.js ├── appearance.spec.js ├── auth.spec.js ├── datastore.spec.js ├── deeplink.spec.js ├── device.spec.js ├── fnTests.js ├── ftest ├── actionItems.spec.js ├── datastore.spec.js ├── deeplink.spec.js ├── device.spec.js ├── geo.spec.js ├── history.spec.js ├── imageLib.spec.js ├── messaging.spec.js ├── navigation.spec.js └── pluginInstance.spec.js ├── geo.spec.js ├── history.spec.js ├── imageLib.spec.js ├── messaging.spec.js ├── navigation.spec.js ├── notifications.spec.js ├── parentPost.js ├── pluginInstance.spec.js ├── publicData.spec.js ├── server.js └── spec.js /.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "test/ftest/assets/bower_components" 3 | } -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # https://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | indent_style = tab 8 | indent_size = 4 9 | end_of_line = lf 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | max_line_length = 100 13 | 14 | [*.md] 15 | max_line_length = 0 16 | trim_trailing_whitespace = false 17 | insert_final_newline = false 18 | 19 | [COMMIT_EDITMSG] 20 | max_line_length = 0 21 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | /scripts/*.min.js 4 | /scripts/**/*.min.js 5 | /scripts/**/*.min.js.map 6 | /scripts/*.min.js.map 7 | 8 | /scripts/angular 9 | /scripts/owlCarousel 10 | /scripts/tinymce 11 | /scripts/fastclick.js 12 | /scripts/smartcrop.js 13 | 14 | /pluginTester/scripts/*.min.js 15 | /pluginTester/scripts/**/*.min.js 16 | /pluginTester/scripts/angular 17 | /pluginTester/scripts/lib 18 | 19 | /test/ftest/assets 20 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'env': { 3 | 'browser': true, 4 | 'es2020': true 5 | }, 6 | 'extends': 'eslint:recommended', 7 | 'parserOptions': { 8 | 'ecmaVersion': 2020 9 | }, 10 | 'rules': { 11 | 'indent': [ 12 | 'error', 13 | 'tab' 14 | ], 15 | 'linebreak-style': [ 16 | 'error', 17 | 'unix' 18 | ], 19 | 'quotes': [ 20 | 'error', 21 | 'single' 22 | ], 23 | 'semi': [ 24 | 'error', 25 | 'always' 26 | ] 27 | }, 28 | "globals": { 29 | "buildfire": true, 30 | "dynamicEngine": true, 31 | "tinymce": true, 32 | "FastClick": true 33 | } 34 | }; 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | 5 | # Runtime data 6 | pids 7 | *.pid 8 | *.seed 9 | 10 | # Directory for instrumented libs generated by jscoverage/JSCover 11 | lib-cov 12 | 13 | # Coverage directory used by tools like istanbul 14 | coverage 15 | 16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 17 | .grunt 18 | 19 | # node-waf configuration 20 | .lock-wscript 21 | 22 | # Compiled binary addons (http://nodejs.org/api/addons.html) 23 | build/Release 24 | 25 | # Dependency directory 26 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git 27 | node_modules 28 | bower_components 29 | .idea 30 | /zip.cmd 31 | /fonticons.zip 32 | /styles.zip 33 | /scripts.zip 34 | plugins 35 | !/plugins/myPlugin/ 36 | !/plugins/testPlugin/ 37 | !/scripts/tinymce/plugins/ 38 | !/plugintester/scripts/lib/tinymce/js/tinymce/plugins/ 39 | package-lock.json 40 | .DS_Store -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "4.1" 4 | env: 5 | - CXX=g++-4.8 6 | addons: 7 | apt: 8 | sources: 9 | - ubuntu-toolchain-r-test 10 | packages: 11 | - g++-4.8 12 | notifications: 13 | email: 14 | recipients: 15 | - builds@buildfire.com 16 | services: 17 | - xvfb 18 | script: 19 | - npm test 20 | # - npm run fnTest 21 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BuildFireSDK", 3 | "version": "1.0.0", 4 | "ignore": [ 5 | "**/.*", 6 | "node_modules", 7 | "bower_components", 8 | "test", 9 | "ftest" 10 | ], 11 | "dependencies": { 12 | "WebConsole": "*" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /fonticons/MaterialIcons-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonticons/MaterialIcons-Regular.eot -------------------------------------------------------------------------------- /fonticons/MaterialIcons-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonticons/MaterialIcons-Regular.ttf -------------------------------------------------------------------------------- /fonticons/MaterialIcons-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonticons/MaterialIcons-Regular.woff -------------------------------------------------------------------------------- /fonticons/MaterialIcons-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonticons/MaterialIcons-Regular.woff2 -------------------------------------------------------------------------------- /fonticons/control/icomoon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonticons/control/icomoon.eot -------------------------------------------------------------------------------- /fonticons/control/icomoon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonticons/control/icomoon.ttf -------------------------------------------------------------------------------- /fonticons/control/icomoon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonticons/control/icomoon.woff -------------------------------------------------------------------------------- /fonticons/icomoon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonticons/icomoon.eot -------------------------------------------------------------------------------- /fonticons/icomoon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonticons/icomoon.ttf -------------------------------------------------------------------------------- /fonticons/icomoon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonticons/icomoon.woff -------------------------------------------------------------------------------- /fonticons/icomoon.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonticons/icomoon.woff2 -------------------------------------------------------------------------------- /fonts/Inter-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonts/Inter-Medium.otf -------------------------------------------------------------------------------- /fonts/Inter-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonts/Inter-Medium.ttf -------------------------------------------------------------------------------- /fonts/Inter-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonts/Inter-Medium.woff2 -------------------------------------------------------------------------------- /fonts/Inter-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonts/Inter-Regular.otf -------------------------------------------------------------------------------- /fonts/Inter-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonts/Inter-Regular.ttf -------------------------------------------------------------------------------- /fonts/Inter-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonts/Inter-Regular.woff2 -------------------------------------------------------------------------------- /fonts/apercu_bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonts/apercu_bold.eot -------------------------------------------------------------------------------- /fonts/apercu_bold.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonts/apercu_bold.svg -------------------------------------------------------------------------------- /fonts/apercu_bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonts/apercu_bold.ttf -------------------------------------------------------------------------------- /fonts/apercu_bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonts/apercu_bold.woff -------------------------------------------------------------------------------- /fonts/apercu_regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonts/apercu_regular.eot -------------------------------------------------------------------------------- /fonts/apercu_regular.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonts/apercu_regular.svg -------------------------------------------------------------------------------- /fonts/apercu_regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonts/apercu_regular.ttf -------------------------------------------------------------------------------- /fonts/apercu_regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/fonts/apercu_regular.woff -------------------------------------------------------------------------------- /images/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/images/favicon-16x16.png -------------------------------------------------------------------------------- /images/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/images/favicon-32x32.png -------------------------------------------------------------------------------- /karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration 2 | // Generated on Fri Oct 09 2015 09:12:13 GMT-0700 (Pacific Daylight Time) 3 | 4 | module.exports = function(config) { 5 | config.set({ 6 | 7 | // base path that will be used to resolve all patterns (eg. files, exclude) 8 | basePath: '', 9 | 10 | 11 | // frameworks to use 12 | // available frameworks: https://npmjs.org/browse/keyword/karma-adapter 13 | frameworks: ['jasmine'], 14 | 15 | 16 | // list of files / patterns to load in the browser 17 | files: [ 18 | './scripts/buildfire.js', 19 | './test/parentPost.js', 20 | './test/*.spec.js' 21 | ], 22 | 23 | 24 | // list of files to exclude 25 | exclude: [ 26 | ], 27 | 28 | 29 | // preprocess matching files before serving them to the browser 30 | // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor 31 | preprocessors: { 32 | 'scripts/buildfire.js':['coverage'], 33 | }, 34 | 35 | 36 | // test results reporter to use 37 | // possible values: 'dots', 'progress' 38 | // available reporters: https://npmjs.org/browse/keyword/karma-reporter 39 | reporters: ['progress', 'coverage'], 40 | 41 | coverageReporter: { 42 | type: 'html', 43 | dir: 'test/coverage/', 44 | check: { 45 | global: { 46 | statements: 20 47 | } 48 | } 49 | }, 50 | 51 | // web server port 52 | port: 9876, 53 | 54 | 55 | // enable / disable colors in the output (reporters and logs) 56 | colors: true, 57 | 58 | 59 | // level of logging 60 | // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG 61 | logLevel: config.LOG_INFO, 62 | 63 | 64 | // enable / disable watching file and executing tests whenever any file changes 65 | autoWatch: true, 66 | 67 | 68 | // start these browsers 69 | // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher 70 | browsers: ['PhantomJS'], // ,'Chrome', 'Safari', 'IE' 71 | 72 | 73 | // Continuous Integration mode 74 | // if true, Karma captures browsers, runs the tests and exits 75 | singleRun: true 76 | }); 77 | }; 78 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BuildFireSDK", 3 | "version": "1.112.1", 4 | "description": "This SDK helps in building BuildFire Plugins", 5 | "main": "index.js", 6 | "scripts": { 7 | "postinstall": "./node_modules/.bin/bower install", 8 | "fnTest": "node test/server.js", 9 | "test": ".\\node_modules\\.bin\\karma start karma.conf.js", 10 | "build": "gulp build", 11 | "lint": "eslint . --fix" 12 | }, 13 | "dependencies": { 14 | "bower": "^1.7.6" 15 | }, 16 | "repository": { 17 | "type": "git", 18 | "url": "https:/github.com/BuildFire/sdk.git" 19 | }, 20 | "keywords": [ 21 | "BuildFire", 22 | "Plugins" 23 | ], 24 | "author": "Daniel Hindi", 25 | "license": "ISC", 26 | "devDependencies": { 27 | "body-parser": "1.11.0", 28 | "chai": "^3.3.0", 29 | "eslint": "^6.8.0", 30 | "express": "^4.0.0", 31 | "gulp": "^3.9.1", 32 | "gulp-concat": "^2.6.1", 33 | "gulp-header-comment": "^0.2.1", 34 | "gulp-sourcemaps": "^2.6.1", 35 | "gulp-uglify": "^3.0.0", 36 | "jasmine-core": "^2.8.0", 37 | "karma": "^0.13.10", 38 | "karma-chai": "^0.1.0", 39 | "karma-chrome-launcher": "^0.2.1", 40 | "karma-coverage": "^0.5.1", 41 | "karma-firefox-launcher": "^0.1.6", 42 | "karma-ie-launcher": "^0.2.0", 43 | "karma-jasmine": "^0.3.6", 44 | "karma-junit-reporter": "^0.3.3", 45 | "karma-mocha": "^0.2.0", 46 | "karma-phantomjs-launcher": "^0.2.1", 47 | "karma-safari-launcher": "^0.1.1", 48 | "mocha": "^2.2.5", 49 | "phantom": "0.8.4", 50 | "phantomjs": "^1.9.17", 51 | "run-sequence": "^2.1.0" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /pluginTester/app/media/fb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/pluginTester/app/media/fb.png -------------------------------------------------------------------------------- /pluginTester/app/media/googleplus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/pluginTester/app/media/googleplus.png -------------------------------------------------------------------------------- /pluginTester/app/media/twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/pluginTester/app/media/twitter.png -------------------------------------------------------------------------------- /pluginTester/images/avatar-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/pluginTester/images/avatar-2.png -------------------------------------------------------------------------------- /pluginTester/images/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/pluginTester/images/avatar.png -------------------------------------------------------------------------------- /pluginTester/media/PoweredByGiphy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/pluginTester/media/PoweredByGiphy.png -------------------------------------------------------------------------------- /pluginTester/media/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/pluginTester/media/avatar.png -------------------------------------------------------------------------------- /pluginTester/media/cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/pluginTester/media/cover.png -------------------------------------------------------------------------------- /pluginTester/media/fb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/pluginTester/media/fb.png -------------------------------------------------------------------------------- /pluginTester/media/googleplus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/pluginTester/media/googleplus.png -------------------------------------------------------------------------------- /pluginTester/media/logo_apple_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/pluginTester/media/logo_apple_b.png -------------------------------------------------------------------------------- /pluginTester/media/logo_apple_w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/pluginTester/media/logo_apple_w.png -------------------------------------------------------------------------------- /pluginTester/media/logo_facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/pluginTester/media/logo_facebook.png -------------------------------------------------------------------------------- /pluginTester/media/logo_google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/pluginTester/media/logo_google.png -------------------------------------------------------------------------------- /pluginTester/media/logo_x_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/pluginTester/media/logo_x_b.png -------------------------------------------------------------------------------- /pluginTester/media/logo_x_w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/pluginTester/media/logo_x_w.png -------------------------------------------------------------------------------- /pluginTester/pages/controllers/apiKeysCtrl.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | $app.controller('apiKeysCtrl', ['$scope', 3 | function ($scope) { 4 | $scope.keys = {}; 5 | 6 | $scope.load = function () { 7 | var keys = localStorage.getItem('apiKeys'); 8 | if (keys) { 9 | keys = JSON.parse(keys); 10 | } 11 | $scope.keys = keys; 12 | }; 13 | 14 | $scope.load(); 15 | 16 | $scope.save = function () { 17 | var keys = {}; 18 | angular.copy($scope.keys, keys); 19 | localStorage.setItem('apiKeys', JSON.stringify(keys)); 20 | 21 | window.appContext.currentApp.apiKeys = keys; 22 | 23 | window.toast('Saved'); 24 | }; 25 | }]); 26 | -------------------------------------------------------------------------------- /pluginTester/pages/controllers/loginCtrl.js: -------------------------------------------------------------------------------- 1 | $app.controller('loginCtrl', ['$scope', '$http' 2 | , function ($scope, $http) { 3 | $scope.loggingIn = false; 4 | $scope.errors = {}; 5 | $scope.submit = function () { 6 | /// will auto navigate to dashboard on its own 7 | if ($scope.validate()) { 8 | $scope.loggingIn = true; 9 | 10 | $http.post('https://app.buildfire.com/api/login/controlPanel/', { 11 | email: $scope.username, 12 | password: $scope.password 13 | }, {bypassInterceptorForStatus: 404}) 14 | .success(function (user) { 15 | if (user) { 16 | localStorage.setItem('user', JSON.stringify(user)); 17 | window.currentUser = user; 18 | window.location.hash = '/'; 19 | } 20 | else { 21 | $scope.errors.serverError = 'Invalid username or password'; 22 | } 23 | }) 24 | .error(function (err) { 25 | if(err){ 26 | switch (err.code) { 27 | case 'authServiceUserExists': 28 | $scope.errors.serverError = 'Invalid account, make sure to use control panel account'; 29 | break; 30 | case 'NOTFOUND': 31 | $scope.errors.serverError = 'Invalid username or password'; 32 | break; 33 | } 34 | } 35 | }); 36 | } 37 | }; 38 | 39 | $scope.forgotPassword = function () { 40 | window.location = '/pages/forgetPassword.html'; 41 | }; 42 | 43 | $scope.validate = function () { 44 | $scope.errors.serverError = false; 45 | var valid = true; 46 | if (!$scope.username || !isValidEmail($scope.username)) { 47 | $scope.errors.email = true; 48 | valid = false; 49 | } else { 50 | $scope.errors.email = false; 51 | } 52 | 53 | 54 | if (!$scope.password) { 55 | $scope.errors.password = true; 56 | valid = false; 57 | } else { 58 | $scope.errors.password = false; 59 | } 60 | 61 | 62 | return valid; 63 | }; 64 | 65 | var isValidEmail = function (literal) { 66 | return (/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z\-0-9]{2,}))$/).test(literal); 67 | }; 68 | 69 | 70 | } 71 | ]); 72 | -------------------------------------------------------------------------------- /pluginTester/pages/controllers/settingsCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by Daniel on 11/8/2015. 3 | */ 4 | 5 | $app.controller('settingsCtrl', ['$scope', function ($scope) { 6 | let key = window.appContext.currentApp.appId; 7 | let context = { 8 | currentApp: window.appContext.currentApp, 9 | currentPlugin: { 10 | pluginId: key, 11 | pluginPath: '', 12 | instanceId: key, 13 | mode: 0 14 | } 15 | }; 16 | 17 | $scope.appContext = JSON.parse(JSON.stringify(context));// make a copy 18 | 19 | var tmr; 20 | $scope.$watch('appContext', function (newContext) { 21 | if (tmr) clearTimeout(tmr); 22 | tmr = setTimeout(function () { 23 | window.appContext = newContext; 24 | let key = window.appContext.currentApp.appId; 25 | let context = { 26 | currentApp: window.appContext.currentApp, 27 | currentPlugin: { 28 | pluginId: key, 29 | pluginPath: '', 30 | instanceId: key, 31 | mode: 0 32 | } 33 | }; 34 | window.localStorage.setItem('appContext', JSON.stringify(context)); 35 | } 36 | , 500); 37 | }, true); 38 | }]); -------------------------------------------------------------------------------- /pluginTester/pages/services/gdprService.js: -------------------------------------------------------------------------------- 1 | $app.service('gdprService', [function () { 2 | var service = {}; 3 | 4 | service.shouldShowAppTerms = function() { 5 | if (appContext.currentApp && appContext.currentApp.config && appContext.currentApp.config.TermsOfUse) { 6 | return appContext.currentApp.config.TermsOfUse.indexOf('appdocumentation.com') < 0; 7 | } else { 8 | return false; 9 | } 10 | }; 11 | 12 | return service; 13 | }]); 14 | -------------------------------------------------------------------------------- /pluginTester/pages/templates/login.html: -------------------------------------------------------------------------------- 1 |  36 | 37 |
38 |
39 |
{{errors.serverError}}
40 |
41 | 43 | 44 |
Invalid Email
45 |
46 |
47 | 49 | 50 |
Invalid Password
51 |
52 |
53 | 56 |
57 | 60 |
61 |
-------------------------------------------------------------------------------- /pluginTester/pages/templates/modal.html: -------------------------------------------------------------------------------- 1 |
2 |

{{ modal.title }}

3 |
4 |
5 |
6 |

{{ modal.body }}

7 |
8 |
9 | 10 |
11 |
12 | {{ modal.okText }} 13 |
14 |
15 | {{ modal.cancelText }} 16 |
17 |
-------------------------------------------------------------------------------- /pluginTester/pages/templates/settings.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

Settings

4 |
5 |
6 |
7 |
8 |
9 | App ID 10 |
11 |
12 | 13 |
14 |
15 |
16 |
17 |
18 | Datastore Write Key 19 |
20 |
21 | 22 |
23 |
24 |
25 |
26 |
-------------------------------------------------------------------------------- /pluginTester/scripts/appContext.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | 3 | var strContext = window.localStorage.getItem('appContext'); 4 | if (strContext) { 5 | try { 6 | window.appContext = JSON.parse(strContext); 7 | } catch (e) { 8 | } 9 | } 10 | 11 | if (!window.appContext || !window.appContext.currentApp || !window.appContext.currentApp.config) { 12 | var key = window.localStorage.getItem('autoGenKey'); //legacy 13 | if (!key) key = ((new Date()).getTime() + '-' + Math.random()).replace('.', ''); 14 | window.appContext = { 15 | currentApp: { 16 | appId: key 17 | , keys: {datastoreKey: key} 18 | , config: {type: 'trial'} 19 | } 20 | , currentPlugin: { 21 | pluginId: key 22 | , pluginPath: '' 23 | , instanceId: key 24 | , mode: 0 25 | } 26 | }; 27 | 28 | window.localStorage.setItem('appContext', JSON.stringify(window.appContext)); 29 | } 30 | 31 | if (!window.whitelabelContext) { 32 | window.whitelabelContext = { 33 | whitelabelId: '1717' 34 | }; 35 | } 36 | 37 | if (window.appContext.currentApp) { 38 | window.appContext.currentApp.liveMode = 0; 39 | } 40 | 41 | var hash = window.location.hash.split('/'); 42 | if (hash && hash.length > 2) 43 | hash = hash[2]; 44 | else 45 | hash = 'myPlugin'; 46 | 47 | window.appContext.currentPlugin.pluginPath = hash; 48 | 49 | var apiKeys = localStorage.getItem('apiKeys'); 50 | if (apiKeys) { 51 | apiKeys = JSON.parse(apiKeys); 52 | } 53 | 54 | if (apiKeys) { 55 | if(!apiKeys.cloudImageKey) apiKeys.cloudImageKey = 'alnnibitpo'; 56 | window.appContext.currentApp.apiKeys = apiKeys; 57 | } else { 58 | apiKeys = { 59 | creditsSystemPublicKey: 'test-public', 60 | stripePublicKey: 'pk_test_Uc7I6bT2fxNiTp3bFqstkyFh00mbnGl0A5', 61 | cloudImageKey: 'alnnibitpo' 62 | }; 63 | localStorage.setItem('apiKeys', JSON.stringify(apiKeys)); 64 | 65 | window.appContext.currentApp.apiKeys = apiKeys; 66 | } 67 | 68 | })(); -------------------------------------------------------------------------------- /pluginTester/scripts/appOverrides.js: -------------------------------------------------------------------------------- 1 | /* 2 | Use only for overriding postMaster.widgetPluginAPI or postMaster.servicePluginAPIs functions 3 | to allow distinction between functions triggered from widget side or control side. 4 | 5 | Don't minify or rename as the name "appOverrides.js" is detected in callstack to figure out the source 6 | in any nested API function calls to handle issues from control plugin APIs and widget plugin APIs 7 | living in one space (pluginTester) 8 | */ 9 | (function () { 10 | let forceOriginationFromAppOverride = function(object) { 11 | // Function to wrap each method in the object 12 | function wrapMethod(obj, methodName) { 13 | const originalMethod = obj[methodName]; 14 | obj[methodName] = function() { 15 | return originalMethod.apply(this, arguments); 16 | }; 17 | } 18 | 19 | // Wrap each method in the object 20 | for (const methodName in object) { 21 | if (typeof object[methodName] === 'function') { 22 | wrapMethod(object, methodName); 23 | } 24 | } 25 | } 26 | 27 | postMaster.widgetPluginAPI.auth = { ...authAPI }; 28 | postMaster.widgetPluginAPI.auth.searchUsers = authAPI.appSearchUsers; 29 | postMaster.controlPluginAPI.auth = { ...authAPI }; 30 | postMaster.controlPluginAPI.auth.searchUsers = authAPI.cpSearchUsers; 31 | postMaster.servicePluginAPIs.service.auth = { ...authAPI }; 32 | postMaster.servicePluginAPIs.service.auth.searchUsers = authAPI.appSearchUsers; 33 | forceOriginationFromAppOverride(postMaster.widgetPluginAPI.auth); 34 | forceOriginationFromAppOverride(postMaster.servicePluginAPIs.service.auth); 35 | })(); 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /pluginTester/scripts/lib/tinymce/js/tinymce/langs/readme.md: -------------------------------------------------------------------------------- 1 | This is where language files should be placed. 2 | 3 | Please DO NOT translate these directly use this service: https://www.transifex.com/projects/p/tinymce/ 4 | -------------------------------------------------------------------------------- /pluginTester/scripts/lib/tinymce/js/tinymce/plugins/autoresize/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.6.1 (2020-11-25) 8 | */ 9 | !function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),h=tinymce.util.Tools.resolve("tinymce.Env"),r=tinymce.util.Tools.resolve("tinymce.util.Delay"),y=function(e){return e.getParam("min_height",e.getElement().offsetHeight,"number")},a=function(e,t,n,i,o){r.setEditorTimeout(e,function(){b(e,t),n--?a(e,t,n,i,o):o&&o()},i)},p=function(e,t){var n=e.getBody();n&&(n.style.overflowY=t?"":"hidden",t||(n.scrollTop=0))},v=function(e,t,n,i){var o=parseInt(e.getStyle(t,n,i),10);return isNaN(o)?0:o},b=function(e,t){var n,i,o,r,s,a,g,u,l,c,m,f=e.dom,d=e.getDoc();d&&((n=e).plugins.fullscreen&&n.plugins.fullscreen.isFullscreen()?p(e,!0):(i=d.documentElement,o=e.getParam("autoresize_bottom_margin",50,"number"),r=y(e),s=v(f,i,"margin-top",!0),a=v(f,i,"margin-bottom",!0),(g=i.offsetHeight+s+a+o)<0&&(g=0),g+(u=e.getContainer().offsetHeight-e.getContentAreaContainer().offsetHeight)>y(e)&&(r=g+u),(l=e.getParam("max_height",0,"number"))&&l")}),(t=n).ui.registry.addButton("hr",{icon:"horizontal-rule",tooltip:"Horizontal line",onAction:function(){return t.execCommand("InsertHorizontalRule")}}),t.ui.registry.addMenuItem("hr",{icon:"horizontal-rule",text:"Horizontal line",onAction:function(){return t.execCommand("InsertHorizontalRule")}})})}(); -------------------------------------------------------------------------------- /pluginTester/scripts/lib/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.6.1 (2020-11-25) 8 | */ 9 | !function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(n,e){for(var a="",o=0;o'+i(" ",e)+"":i(" ",e);n.undoManager.transact(function(){return n.insertContent(o)})},c=tinymce.util.Tools.resolve("tinymce.util.VK");n.add("nonbreaking",function(n){var e,a,o,i,t;(e=n).addCommand("mceNonBreaking",function(){r(e,1)}),(a=n).ui.registry.addButton("nonbreaking",{icon:"non-breaking",tooltip:"Nonbreaking space",onAction:function(){return a.execCommand("mceNonBreaking")}}),a.ui.registry.addMenuItem("nonbreaking",{icon:"non-breaking",text:"Nonbreaking space",onAction:function(){return a.execCommand("mceNonBreaking")}}),0<(t="boolean"==typeof(i=(o=n).getParam("nonbreaking_force_tab",0))?!0===i?3:0:i)&&o.on("keydown",function(n){if(n.keyCode===c.TAB&&!n.isDefaultPrevented()){if(n.shiftKey)return;n.preventDefault(),n.stopImmediatePropagation(),r(o,t)}})})}(); -------------------------------------------------------------------------------- /pluginTester/scripts/lib/tinymce/js/tinymce/plugins/noneditable/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.6.1 (2020-11-25) 8 | */ 9 | !function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),l=tinymce.util.Tools.resolve("tinymce.util.Tools"),u=function(t){return t.getParam("noneditable_noneditable_class","mceNonEditable")},f=function(e){return function(t){return-1!==(" "+t.attr("class")+" ").indexOf(e)}},e=function(e){var t,r="contenteditable",n=" "+l.trim(e.getParam("noneditable_editable_class","mceEditable"))+" ",a=" "+l.trim(u(e))+" ",i=f(n),o=f(a),c=(t=e.getParam("noneditable_regexp",[]))&&t.constructor===RegExp?[t]:t;e.on("PreInit",function(){0"===r){var a=o.lastIndexOf("<",n);if(-1!==a)if(-1!==o.substring(a,n).indexOf('contenteditable="false"'))return t}return''+i.dom.encode("string"==typeof e[1]?e[1]:e[0])+""}}(t,a,u(t)));n.content=a}}(e,c,t)}),e.parser.addAttributeFilter("class",function(t){for(var e,n=t.length;n--;)e=t[n],i(e)?e.attr(r,"true"):o(e)&&e.attr(r,"false")}),e.serializer.addAttributeFilter(r,function(t){for(var e,n=t.length;n--;)e=t[n],(i(e)||o(e))&&(0'};e.add("pagebreak",function(e){var a,n,o,c,t,r;(a=e).addCommand("mcePageBreak",function(){i(a)?a.insertContent("

"+m()+"

"):a.insertContent(m())}),(n=e).ui.registry.addButton("pagebreak",{icon:"page-break",tooltip:"Page break",onAction:function(){return n.execCommand("mcePageBreak")}}),n.ui.registry.addMenuItem("pagebreak",{text:"Page break",icon:"page-break",onAction:function(){return n.execCommand("mcePageBreak")}}),c=(o=e).getParam("pagebreak_separator","\x3c!-- pagebreak --\x3e"),t=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(e){return"\\"+e}),"gi"),o.on("BeforeSetContent",function(e){e.content=e.content.replace(t,m())}),o.on("PreInit",function(){o.serializer.addNodeFilter("img",function(e){for(var a,n,t=e.length;t--;)if((n=(a=e[t]).attr("class"))&&-1!==n.indexOf("mce-pagebreak")){var r=a.parent;if(o.schema.getBlockElements()[r.name]&&i(o)){r.type=3,r.value=c,r.raw=!0,a.remove();continue}a.type=3,a.value=c,a.raw=!0}})}),(r=e).on("ResolveName",function(e){"IMG"===e.target.nodeName&&r.dom.hasClass(e.target,g())&&(e.name="pagebreak")})})}(); -------------------------------------------------------------------------------- /pluginTester/scripts/lib/tinymce/js/tinymce/plugins/preview/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.6.1 (2020-11-25) 8 | */ 9 | !function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),f=tinymce.util.Tools.resolve("tinymce.Env"),w=tinymce.util.Tools.resolve("tinymce.util.Tools"),i=function(e){var t=function(t){var n="",i=t.dom.encode,e=t.getParam("content_style","","string");n+='',e&&(n+='");var o=t.getParam("content_css_cors",!1,"boolean")?' crossorigin="anonymous"':"";w.each(t.contentCSS,function(e){n+='"});var r,a,c,s,d,m,l,y=-1===(s=(r=t).getParam("body_id","tinymce","string")).indexOf("=")?s:(c=(a=r).getParam("body_id","","hash"))[a.id]||c,u=-1===(l=(d=t).getParam("body_class","","string")).indexOf("=")?l:(m=d).getParam("body_class","","hash")[m.id]||"",v=' 20 | 21 | 27 | 28 | 29 | Content - Hello world! 30 | 31 | -------------------------------------------------------------------------------- /plugins/myPlugin/control/design/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 19 | 20 | 21 | Design - Hello world! 22 | 23 | -------------------------------------------------------------------------------- /plugins/myPlugin/control/settings/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 19 | 20 | 21 | Settings - Hello world! 22 | 23 | -------------------------------------------------------------------------------- /plugins/myPlugin/plugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "author":"Daniel Hindi" 3 | ,"pluginName":"Hello World" 4 | ,"pluginDescription":"Bare bones plugin showing simple autonomy of a plugin" 5 | ,"supportEmail":"devSupport@buildfire.com" 6 | ,"control":{ 7 | "content":{ 8 | "enabled":true 9 | } 10 | , "design":{ 11 | "enabled":false 12 | } 13 | , "settings":{ 14 | "enabled":false 15 | } 16 | } 17 | ,"widget":{ 18 | 19 | }, 20 | "features" : [], 21 | "languages" : ["en"] 22 | } -------------------------------------------------------------------------------- /plugins/myPlugin/resources/README.md: -------------------------------------------------------------------------------- 1 | 2 | #### the Resources (folder) 3 | The Resources is the default images which will be used for your widget . 4 | * image.png : this image file will be used as a default image for your widget which will appear when App Owners installed your plugin in their plugin Manager . 5 | 6 | * icon.png : this image file will be used as a default icon for your widget which will appear as an icon for the widget on the emulator and the actual device . 7 | 8 | * **Note** :This folder is only meant for plugin configuration resource like default widget icon and widget hero image.** You can replace those two files if you need by overriding the default hero image and default icon image. **Don't add any other files in this folder, any dependencies in this folder WILL NOT be carried over to the app.** 9 | 10 | 11 | -------------------------------------------------------------------------------- /plugins/myPlugin/resources/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/plugins/myPlugin/resources/icon.png -------------------------------------------------------------------------------- /plugins/myPlugin/resources/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/plugins/myPlugin/resources/image.png -------------------------------------------------------------------------------- /plugins/myPlugin/widget/.images/.nomedia: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/plugins/myPlugin/widget/.images/.nomedia -------------------------------------------------------------------------------- /plugins/myPlugin/widget/.images/README.md: -------------------------------------------------------------------------------- 1 | 2 | #### the .images (folder) 3 | This folder contains images which will be used on the widget section like 4 | placeholder images. 5 | 6 | * .nomedia : This file prevents images from showing up in your Android 7 | phone's image gallery. 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /plugins/myPlugin/widget/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 13 | 14 | 17 | 18 | 19 | 20 | 21 | 27 | 28 | 29 | Widget - Hello, world! 30 | 31 | -------------------------------------------------------------------------------- /plugins/testPlugin/plugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "author":"Daniel Hindi" 3 | ,"pluginName":"testPlugin" 4 | ,"pluginDescription":"This plugin is used for Unit testing. If you are not testing you may remove this from your local copy of the SDK" 5 | ,"supportEmail":"" 6 | ,"control":{ 7 | "content":{ 8 | "enabled":true 9 | } 10 | , "design":{ 11 | "enabled":false 12 | } 13 | , "settings":{ 14 | "enabled":false 15 | } 16 | } 17 | ,"widget":{ 18 | 19 | }, 20 | "features" : [], 21 | "languages" : ["en"] 22 | } -------------------------------------------------------------------------------- /plugins/testPlugin/widget/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 20 | 21 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /scripts/buildfire/components/popup/popup.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | if (typeof (buildfire) == 'undefined') throw ('please add buildfire.js first to use popup components'); 4 | 5 | if (typeof (buildfire.components) == 'undefined') 6 | buildfire.components = {}; 7 | 8 | if (typeof (buildfire.components.popup) == 'undefined') 9 | buildfire.components.popup = {}; 10 | 11 | buildfire.components.popup.display = function (options, callback) { 12 | var p = new Packet(null, 'popup.display', options); 13 | buildfire._sendPacket(p, callback); 14 | }; -------------------------------------------------------------------------------- /scripts/buildfire/components/toast/toast.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | if (typeof buildfire == 'undefined') throw 'please add buildfire.js first to use popup components'; 4 | 5 | if (typeof buildfire.components == 'undefined') buildfire.components = {}; 6 | 7 | if (typeof buildfire.components.toast == 'undefined') buildfire.components.toast = {}; 8 | 9 | buildfire.components.toast.showToastMessage = function(options, callback) { 10 | var p = new Packet(null, 'componentUI.showToastMessage', options); 11 | buildfire._sendPacket(p, callback); 12 | }; 13 | 14 | buildfire.components.toast.closeToastMessage = function(options, callback) { 15 | var p = new Packet(null, 'componentUI.closeToastMessage', options); 16 | buildfire._sendPacket(p, callback); 17 | }; 18 | -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/scripts/buildfire/components/web-components/.DS_Store -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/collection/components/bf-grid/bf-grid.css: -------------------------------------------------------------------------------- 1 | .wrapper { 2 | display: grid; 3 | grid-gap: 2px; 4 | } 5 | 6 | .box{ 7 | margin: 2vh 0 2vh 0; 8 | } 9 | 10 | .row-1{ 11 | grid-template-columns: 100%; 12 | } 13 | 14 | .row-2{ 15 | grid-template-columns: 50% 50%; 16 | } 17 | 18 | .row-3{ 19 | grid-template-columns: 33% 33% 33%; 20 | } 21 | 22 | .row-4{ 23 | grid-template-columns: 25% 25% 25% 25%; 24 | } 25 | 26 | .row-5{ 27 | grid-template-columns: 20% 20% 20% 20% 20%; 28 | } -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/collection/components/bf-grid/bf-grid.js: -------------------------------------------------------------------------------- 1 | var View; 2 | (function (View) { 3 | View[View["grid"] = 0] = "grid"; 4 | View[View["list"] = 1] = "list"; 5 | })(View || (View = {})); 6 | ; 7 | export class Grid { 8 | constructor() { 9 | this.images = []; 10 | this.viewState = View.grid; 11 | } 12 | handleBack(event) { 13 | event.preventDefault; 14 | if (this.viewState != View.grid) { 15 | this.viewState = View.grid; 16 | } 17 | } 18 | showList(event) { 19 | event.preventDefault; 20 | if (this.viewState === View.grid) { 21 | this.viewState = View.list; 22 | } 23 | } 24 | render() { 25 | return (h("div", null, this.viewState == View.grid ? 26 | h("bf-image-grid", { images: this.images, token: this.token, onClick: this.showList.bind(this) }) 27 | : 28 | h("bf-image-list", { images: this.images, token: this.token }))); 29 | } 30 | static get is() { return "bf-grid"; } 31 | static get encapsulation() { return "shadow"; } 32 | static get properties() { return { 33 | "images": { 34 | "type": "Any", 35 | "attr": "images" 36 | }, 37 | "token": { 38 | "type": String, 39 | "attr": "token" 40 | }, 41 | "viewState": { 42 | "state": true 43 | } 44 | }; } 45 | static get events() { return [{ 46 | "name": "imageSelected", 47 | "method": "imageSelected", 48 | "bubbles": true, 49 | "cancelable": true, 50 | "composed": true 51 | }]; } 52 | static get listeners() { return [{ 53 | "name": "body:backClick", 54 | "method": "handleBack" 55 | }]; } 56 | static get style() { return "/**style-placeholder:bf-grid:**/"; } 57 | } 58 | -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/collection/components/bf-image-grid/bf-image-grid.css: -------------------------------------------------------------------------------- 1 | .wrapper { 2 | display: grid; 3 | grid-gap: 2px; 4 | } 5 | 6 | .box{ 7 | margin: 2vh 0 2vh 0; 8 | } 9 | 10 | .row-1{ 11 | grid-template-columns: 100%; 12 | } 13 | 14 | .row-2{ 15 | grid-template-columns: 50% 50%; 16 | } 17 | 18 | .row-3{ 19 | grid-template-columns: 33% 33% 33%; 20 | } 21 | 22 | .row-4{ 23 | grid-template-columns: 25% 25% 25% 25%; 24 | } 25 | 26 | .row-5{ 27 | grid-template-columns: 20% 20% 20% 20% 20%; 28 | } -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/collection/components/bf-image-grid/bf-image-grid.js: -------------------------------------------------------------------------------- 1 | export class Grid1 { 2 | watchHandler() { 3 | this.setItemCount(); 4 | this.calculateWidth(); 5 | } 6 | calculateWidth() { 7 | const windowWidth = window.innerWidth; 8 | const windowHeight = window.innerHeight; 9 | const padding = 2; 10 | if (this.imageCount > 0) { 11 | this.imageWidth = Math.floor(windowWidth / this.imageCount) - (padding * 2); 12 | this.imageHeight = Math.floor(windowHeight / 4); 13 | } 14 | } 15 | setItemCount() { 16 | this.imageCount = (this.images && this.images.length) ? this.images.length : 0; 17 | } 18 | componentWillLoad() { 19 | this.setItemCount(); 20 | this.calculateWidth(); 21 | } 22 | render() { 23 | const classes = `wrapper row-${this.imageCount}`; 24 | return (h("div", { class: classes }, this.images.map((image) => h("bf-img", { token: this.token, operation: "crop", width: this.imageWidth.toString(), height: this.imageHeight.toString(), url: image })))); 25 | } 26 | static get is() { return "bf-image-grid"; } 27 | static get encapsulation() { return "shadow"; } 28 | static get properties() { return { 29 | "imageCount": { 30 | "state": true 31 | }, 32 | "imageHeight": { 33 | "state": true 34 | }, 35 | "images": { 36 | "type": "Any", 37 | "attr": "images", 38 | "watchCallbacks": ["watchHandler"] 39 | }, 40 | "imageWidth": { 41 | "state": true 42 | }, 43 | "token": { 44 | "type": String, 45 | "attr": "token" 46 | } 47 | }; } 48 | static get listeners() { return [{ 49 | "name": "window:resize", 50 | "method": "calculateWidth", 51 | "passive": true 52 | }]; } 53 | static get style() { return "/**style-placeholder:bf-image-grid:**/"; } 54 | } 55 | -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/collection/components/bf-image-list/bf-image-list.css: -------------------------------------------------------------------------------- 1 | .box{ 2 | margin: 2vh 0 2vh 0; 3 | max-width: 100%; 4 | overflow: hidden; 5 | } -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/collection/components/bf-img/bf-img.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/scripts/buildfire/components/web-components/collection/components/bf-img/bf-img.css -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/collection/interface.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/scripts/buildfire/components/web-components/collection/interface.js -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/esm/es2017/buildfire-components.components.js: -------------------------------------------------------------------------------- 1 | // BuildfireComponents: Host Data, ES Module/es2017 Target 2 | export const Grid = ["bf-grid","dbckgtkz",1,[["images",1],["token",1,0,1,2],["viewState",16]],1,[["body:backClick","handleBack"]]]; 3 | export const Grid1 = ["bf-image-grid","dbckgtkz",1,[["imageCount",16],["imageHeight",16],["imageWidth",16],["images",1],["token",1,0,1,2]],1,[["window:resize","calculateWidth",0,1]]]; 4 | export const ImageList = ["bf-image-list","dbckgtkz",1,[["height",1,0,1,8],["imageCount",16],["images",1],["listImageHeight",16],["listImageWidth",16],["token",1,0,1,2],["width",1,0,1,8]],1,[["window:resize","calculateWidth",0,1]]]; 5 | export const Img = ["bf-img","dbckgtkz",1,[["height",1,0,1,2],["operation",1,0,1,2],["quality",1,0,1,8],["realSrc",16],["token",1,0,1,2],["url",1,0,1,2],["width",1,0,1,2]],1]; -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/esm/es2017/buildfire-components.define.js: -------------------------------------------------------------------------------- 1 | 2 | // BuildfireComponents: Custom Elements Define Library, ES Module/es2017 Target 3 | 4 | import { defineCustomElement } from './buildfire-components.core.js'; 5 | import { 6 | Grid, 7 | Grid1, 8 | ImageList, 9 | Img 10 | } from './buildfire-components.components.js'; 11 | 12 | export function defineCustomElements(win, opts) { 13 | return defineCustomElement(win, [ 14 | Grid, 15 | Grid1, 16 | ImageList, 17 | Img 18 | ], opts); 19 | } 20 | -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/esm/es2017/index.js: -------------------------------------------------------------------------------- 1 | // BuildfireComponents: ES Module -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/esm/es5/buildfire-components.components.js: -------------------------------------------------------------------------------- 1 | // BuildfireComponents: Host Data, ES Module/es5 Target 2 | export var Grid = ["bf-grid","dbckgtkz",1,[["images",1],["token",1,0,1,2],["viewState",16]],1,[["body:backClick","handleBack"]]]; 3 | export var Grid1 = ["bf-image-grid","dbckgtkz",1,[["imageCount",16],["imageHeight",16],["imageWidth",16],["images",1],["token",1,0,1,2]],1,[["window:resize","calculateWidth",0,1]]]; 4 | export var ImageList = ["bf-image-list","dbckgtkz",1,[["height",1,0,1,8],["imageCount",16],["images",1],["listImageHeight",16],["listImageWidth",16],["token",1,0,1,2],["width",1,0,1,8]],1,[["window:resize","calculateWidth",0,1]]]; 5 | export var Img = ["bf-img","dbckgtkz",1,[["height",1,0,1,2],["operation",1,0,1,2],["quality",1,0,1,8],["realSrc",16],["token",1,0,1,2],["url",1,0,1,2],["width",1,0,1,2]],1]; -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/esm/es5/buildfire-components.define.js: -------------------------------------------------------------------------------- 1 | 2 | // BuildfireComponents: Custom Elements Define Library, ES Module/es5 Target 3 | 4 | import { defineCustomElement } from './buildfire-components.core.js'; 5 | import { 6 | Grid, 7 | Grid1, 8 | ImageList, 9 | Img 10 | } from './buildfire-components.components.js'; 11 | 12 | export function defineCustomElements(win, opts) { 13 | return defineCustomElement(win, [ 14 | Grid, 15 | Grid1, 16 | ImageList, 17 | Img 18 | ], opts); 19 | } 20 | -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/esm/es5/index.js: -------------------------------------------------------------------------------- 1 | // BuildfireComponents: ES Module -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/esm/es5/polyfills/array.js: -------------------------------------------------------------------------------- 1 | export function applyPolyfill(window, document) {/*! 2 | Array.prototype.find 3 | */ 4 | Array.prototype.find||Object.defineProperty(Array.prototype,"find",{writable:!0,configurable:!0,value:function(c,e){if(null==this)throw new TypeError('"this" is null or not defined');var b=Object(this),f=b.length>>>0;if("function"!==typeof c)throw new TypeError("predicate must be a function");for(var a=0;a>>0;if(0===n)return!1;var i,o,a=0|e,u=Math.max(0<=a?a:n-Math.abs(a),0);for(;uthis.length)a=this.length;return this.substring(a-b.length,a)===b}}); 5 | /*! 6 | String.prototype.includes 7 | */ 8 | String.prototype.includes||(String.prototype.includes=function(b,a){"number"!==typeof a&&(a=0);return a+b.length>this.length?!1:-1!==this.indexOf(b,a)}); 9 | /*! 10 | String.prototype.startsWith 11 | */ 12 | String.prototype.startsWith||Object.defineProperty(String.prototype,"startsWith",{writable:!0,configurable:!0,value:function(b,a){return this.substr(!a||0>a?0:+a,b.length)===b}});} -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/esm/index.js: -------------------------------------------------------------------------------- 1 | export * from './es5/index.js'; -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/index.js: -------------------------------------------------------------------------------- 1 | // BuildfireComponents: CommonJS Main -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/loader/index.d.ts: -------------------------------------------------------------------------------- 1 | export declare function defineCustomElements(win: any): Promise; -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/loader/index.es2017.js: -------------------------------------------------------------------------------- 1 | export * from '../esm/es2017/buildfire-components.define.js'; -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/loader/index.js: -------------------------------------------------------------------------------- 1 | export * from '../esm/es5/buildfire-components.define.js'; -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/loader/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "loader", 3 | "typings": "./index.d.ts", 4 | "module": "./index.js", 5 | "es2017": "./index.es2017.js" 6 | } -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/types/components/bf-grid/bf-grid.d.ts: -------------------------------------------------------------------------------- 1 | import '../../stencil.core'; 2 | import { EventEmitter } from '../../stencil.core'; 3 | declare enum View { 4 | grid = 0, 5 | list = 1 6 | } 7 | export declare class Grid { 8 | token: string; 9 | images: string[]; 10 | viewState: View; 11 | handleBack(event: any): void; 12 | imageSelected: EventEmitter; 13 | showList(event: UIEvent): void; 14 | render(): JSX.Element; 15 | } 16 | export {}; 17 | -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/types/components/bf-image-grid/bf-image-grid.d.ts: -------------------------------------------------------------------------------- 1 | import '../../stencil.core'; 2 | export declare class Grid1 { 3 | token: string; 4 | images: string[]; 5 | imageWidth: number; 6 | imageHeight: number; 7 | imageCount: number; 8 | watchHandler(): void; 9 | calculateWidth(): void; 10 | setItemCount(): void; 11 | componentWillLoad(): void; 12 | render(): JSX.Element; 13 | } 14 | -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/types/components/bf-image-list/bf-image-list.d.ts: -------------------------------------------------------------------------------- 1 | import '../../stencil.core'; 2 | import { EventEmitter } from '../../stencil.core'; 3 | export declare class ImageList { 4 | token: string; 5 | images: string[]; 6 | width: number; 7 | height: number; 8 | listImageWidth: number; 9 | listImageHeight: number; 10 | imageCount: number; 11 | selectedImages: any[]; 12 | componentWillLoad(): void; 13 | componentDidLoad(): void; 14 | calculateWidth(): void; 15 | imageSelected: EventEmitter; 16 | setItemCount(): void; 17 | selectImage(selectedImage: string, event: any): void; 18 | render(): JSX.Element[]; 19 | } 20 | -------------------------------------------------------------------------------- /scripts/buildfire/components/web-components/types/components/bf-img/bf-img.d.ts: -------------------------------------------------------------------------------- 1 | import '../../stencil.core'; 2 | export declare class Img { 3 | realSrc: string; 4 | suffix: string; 5 | filterDefault: string; 6 | operations: { 7 | cdn: string; 8 | cdno: string; 9 | width: string; 10 | height: string; 11 | crop: string; 12 | }; 13 | defaultOperation: string; 14 | token: string; 15 | url: string; 16 | operation: string; 17 | quality: number; 18 | width: string; 19 | height: string; 20 | getOperation(): string; 21 | getSize(): string; 22 | buildUrl(): string; 23 | componentWillUpdate(): void; 24 | componentDidLoad(): void; 25 | render(): JSX.Element; 26 | } 27 | -------------------------------------------------------------------------------- /scripts/buildfire/services/ai/ai.js: -------------------------------------------------------------------------------- 1 | if (typeof (buildfire) == 'undefined') throw ('please add buildfire.js first to use BuildFire services'); 2 | 3 | if (typeof (buildfire.ai) == 'undefined') buildfire.ai = {}; 4 | 5 | buildfire.ai.conversation = class Conversation { 6 | constructor () { 7 | this.messages = []; 8 | } 9 | 10 | systemSays(content) { 11 | this.messages.push({ role: "system", content }); 12 | } 13 | 14 | assistantSays(content) { 15 | this.messages.push({ role: "assistant", content }); 16 | } 17 | 18 | userSays(content) { 19 | this.messages.push({ role: "user", content }); 20 | } 21 | 22 | fetchJsonResponse (params, callback) { 23 | if (!params) { 24 | params = {}; 25 | } 26 | if (!params.jsonTemplate || typeof params.jsonTemplate != 'object') { 27 | callback('invalid JSON template'); 28 | return; 29 | } 30 | const options = { 31 | messages: this.messages, 32 | jsonTemplate: params.jsonTemplate, 33 | hideAiAnimation: params.hideAiAnimation 34 | } 35 | const p = new Packet(null, 'ai.chat', options); 36 | buildfire._sendPacket(p, callback); 37 | } 38 | 39 | fetchTextResponse (params, callback) { 40 | const options = { 41 | messages: this.messages, 42 | } 43 | const p = new Packet(null, 'ai.chat', options); 44 | buildfire._sendPacket(p, callback); 45 | } 46 | 47 | clear () { 48 | this.messages = []; 49 | } 50 | }; -------------------------------------------------------------------------------- /scripts/buildfire/services/bluetooth/iBeacon.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by danielhindi on 1/19/17. 3 | * ref: https://github.com/BuildFire/sdk/wiki/iBeacon-Bluetooth-Services 4 | */ 5 | 6 | 7 | 8 | if (typeof (buildfire) == 'undefined') throw ('please add buildfire.js first to use BuildFire services'); 9 | 10 | if (typeof (buildfire.services) == 'undefined') buildfire.services = {}; 11 | 12 | if (typeof (buildfire.services.bluetooth) == 'undefined') buildfire.services.bluetooth = {}; 13 | 14 | 15 | buildfire.services.bluetooth.iBeacon = { 16 | createBeaconRegion: function(uuid,identifier,minor,major){ 17 | var br = new Object(); 18 | br.uuid = uuid; 19 | br.identifier = identifier; 20 | br.minor = minor; 21 | br.major = major; 22 | return br; 23 | } 24 | ,startMonitoring:function(beaconRegion, callback){ 25 | var p = new Packet(null, 'iBeacon.startBeaconMonitor', beaconRegion); 26 | buildfire._sendPacket(p, callback); 27 | } 28 | ,stopMonitoring:function(beaconRegion, callback){ 29 | var p = new Packet(null, 'iBeacon.stopBeaconMonitor', beaconRegion); 30 | buildfire._sendPacket(p, callback); 31 | } 32 | 33 | ,startRanging:function(beaconRegion, callback){ 34 | var p = new Packet(null, 'iBeacon.startBeaconRanging', beaconRegion); 35 | buildfire._sendPacket(p, callback); 36 | } 37 | ,stopRanging:function(beaconRegion, callback){ 38 | var p = new Packet(null, 'iBeacon.stopBeaconRanging', beaconRegion); 39 | buildfire._sendPacket(p, callback); 40 | } 41 | ,onRegionEntered: function(err,beaconRegion){ 42 | console.log('iBeacon.onRegionEntered', JSON.stringify(beaconRegion)); 43 | } 44 | ,onRegionExited: function(err,beaconRegion){ 45 | console.log('iBeacon.onRegionExited', JSON.stringify(beaconRegion)); 46 | } 47 | ,onRangingUpdate: function(err,beaconRegion){ 48 | console.log('iBeacon.onRangingUpdate', JSON.stringify(beaconRegion)); 49 | } 50 | }; 51 | 52 | if(buildfire._whitelistedCommands) { 53 | buildfire._whitelistedCommands.push('services.bluetooth.iBeacon.onRegionEntered'); 54 | buildfire._whitelistedCommands.push('services.bluetooth.iBeacon.onRegionExited'); 55 | buildfire._whitelistedCommands.push('services.bluetooth.iBeacon.onRangingUpdate'); 56 | } -------------------------------------------------------------------------------- /scripts/buildfire/services/camera/barcodeScanner.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by danielhindi on 2/15/17. 3 | */ 4 | 5 | 6 | if (typeof (buildfire) == 'undefined') throw ('please add buildfire.js first to use BuildFire services'); 7 | 8 | if (typeof (buildfire.services) == 'undefined') buildfire.services = {}; 9 | 10 | if (typeof (buildfire.services.camera) == 'undefined') buildfire.services.camera = {}; 11 | 12 | 13 | buildfire.services.camera.barcodeScanner = { 14 | scan: function (options, callback) { 15 | if(!options) 16 | options={ 17 | preferFrontCamera : false, 18 | showFlipCameraButton : true, 19 | showTorchButton : true, 20 | formats : 'QR_CODE,PDF_417' // default: all but PDF_417 and RSS_EXPANDED 21 | }; 22 | buildfire._sendPacket(new Packet(null,'barcodeScanner.scan',options),callback); 23 | } 24 | }; -------------------------------------------------------------------------------- /scripts/buildfire/services/camera/camera.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by aymanhabeb on 16/4/17. 3 | */ 4 | 5 | 6 | if (typeof (buildfire) == 'undefined') throw ('please add buildfire.js first to use BuildFire services'); 7 | 8 | if (typeof (buildfire.services) == 'undefined') buildfire.services = {}; 9 | 10 | if (typeof (buildfire.services.camera) == 'undefined') buildfire.services.camera = {}; 11 | 12 | buildfire.services.camera.getPicture = function (options, callback) { 13 | if (!options) options = {}; 14 | buildfire._sendPacket(new Packet(null, 'camera.getPicture', options), callback); 15 | }; 16 | 17 | buildfire.services.camera.getVideo = function (options, callback) { 18 | if (!options) options = {}; 19 | buildfire._sendPacket(new Packet(null, 'camera.getVideo', options), callback); 20 | }; 21 | 22 | buildfire.services.camera.requestAuthorization = function (options, callback) { 23 | if (!callback) { 24 | throw 'callback function is mandatory'; 25 | } 26 | buildfire._sendPacket(new Packet(null, 'camera.requestAuthorization', {}), callback); 27 | }; 28 | 29 | buildfire.services.camera.isAuthorized = function (options, callback) { 30 | if (!callback) { 31 | throw 'callback function is mandatory'; 32 | } 33 | buildfire._sendPacket(new Packet(null, 'camera.isAuthorized', {}), callback); 34 | }; 35 | -------------------------------------------------------------------------------- /scripts/buildfire/services/commerce/inAppPurchase.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | if (typeof (buildfire) == 'undefined') throw ('please add buildfire.js first to use BuildFire services'); 4 | 5 | if (typeof (buildfire.services) == 'undefined') buildfire.services = {}; 6 | 7 | if (typeof (buildfire.services.commerce) == 'undefined') buildfire.services.commerce = {}; 8 | 9 | buildfire.services.commerce.inAppPurchase = { 10 | purchase: function (productId, callback) { 11 | if (!productId) { 12 | console.error('no product id'); 13 | } 14 | 15 | var p = new Packet(null, 'inAppPurchase.purchase', { 16 | productId: productId 17 | }); 18 | buildfire._sendPacket(p, callback); 19 | }, 20 | getProducts: function (callback) { 21 | var p = new Packet(null, 'inAppPurchase.getProducts'); 22 | buildfire._sendPacket(p, callback); 23 | }, 24 | getSubscriptions: function (callback) { 25 | var p = new Packet(null, 'inAppPurchase.getSubscriptions'); 26 | buildfire._sendPacket(p, callback); 27 | }, 28 | checkIsPurchased: function (options, callback) { 29 | var p = new Packet(null, 'inAppPurchase.checkIsPurchased', options); 30 | buildfire._sendPacket(p, callback); 31 | }, 32 | 33 | //////////////////////////////////// EVENTS ///////////////////////////////////// 34 | 35 | onPurchaseResult: function (callback, allowMultipleHandlers) { 36 | buildfire.eventManager.add('inAppPurchase.onPurchaseResult', callback, allowMultipleHandlers); 37 | }, 38 | _triggerOnPurchaseResult: function (purchaseResult) { 39 | buildfire.eventManager.trigger('inAppPurchase.onPurchaseResult', purchaseResult); 40 | }, 41 | onPurchaseRequested: function (callback, allowMultipleHandlers) { 42 | buildfire.eventManager.add('inAppPurchase.onPurchaseRequested', callback, allowMultipleHandlers); 43 | }, 44 | _triggerOnPurchaseRequested: function (requestData) { 45 | buildfire.eventManager.trigger('inAppPurchase.onPurchaseRequested', requestData); 46 | } 47 | }; -------------------------------------------------------------------------------- /scripts/buildfire/services/health/healthAPI.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | if (typeof buildfire == 'undefined') throw 'please add buildfire.js first to use BuildFire services'; 4 | 5 | if (typeof buildfire.services == 'undefined') buildfire.services = {}; 6 | 7 | if (typeof buildfire.services.health == 'undefined') buildfire.services.health = {}; 8 | 9 | buildfire.services.health = { 10 | requestAuthorization: function (dataTypes, callback) { 11 | var p = new Packet(null, 'health.requestAuthorization', dataTypes); 12 | buildfire._sendPacket(p, callback); 13 | }, 14 | query: function (options, callback) { 15 | var p = new Packet(null, 'health.query', options); 16 | buildfire._sendPacket(p, callback); 17 | }, 18 | queryAggregated: function (options, callback) { 19 | var p = new Packet(null, 'health.queryAggregated', options); 20 | buildfire._sendPacket(p, callback); 21 | }, 22 | }; 23 | -------------------------------------------------------------------------------- /scripts/buildfire/services/notifications/pushNotifications.js: -------------------------------------------------------------------------------- 1 | if (typeof (buildfire) == 'undefined') throw ('please add buildfire.js first to use BuildFire services'); 2 | if (!buildfire.notifications) buildfire.notifications = {}; 3 | 4 | //https://github.com/BuildFire/sdk/wiki/Buildfire-Push-Notifications-API 5 | buildfire.notifications.pushNotification = { 6 | //--- options properties --- 7 | //title: string 8 | //text: string 9 | //at: Date (optional), representing the time to send the push notification. 10 | //users: array (optional) 11 | //userTags: array (optional) 12 | //groupName: string (optional) 13 | //queryString: string (optional) 14 | schedule: function (options, callback) { 15 | var packetId = null; 16 | var command = 'pushNotifications.schedule'; 17 | 18 | var packet = new Packet(packetId, command, options); 19 | buildfire._sendPacket(packet, callback); 20 | }, 21 | //--- properties --- 22 | //id: string, notification Id 23 | cancel: function (id, callback) { 24 | var packetId = null; 25 | var command = 'pushNotifications.cancel'; 26 | 27 | var packet = new Packet(packetId, command, id); 28 | buildfire._sendPacket(packet, callback); 29 | }, 30 | //--- options properties --- 31 | //groupName: string (optional) 32 | subscribe: function (options, callback) { 33 | var packetId = null; 34 | var command = 'pushNotifications.subscribe'; 35 | 36 | var packet = new Packet(packetId, command, options); 37 | buildfire._sendPacket(packet, callback); 38 | }, 39 | //--- options properties --- 40 | //groupName: string (optional) 41 | unsubscribe: function (options, callback) { 42 | var packetId = null; 43 | var command = 'pushNotifications.unsubscribe'; 44 | 45 | var packet = new Packet(packetId, command, options); 46 | buildfire._sendPacket(packet, callback); 47 | } 48 | }; -------------------------------------------------------------------------------- /scripts/readme.txt: -------------------------------------------------------------------------------- 1 | NOTE: to plugin developer...dont change anything in this folder. it WILL NOT be imported with your plugin -------------------------------------------------------------------------------- /scripts/tinymce/bf_tinymce.css: -------------------------------------------------------------------------------- 1 | body img { 2 | max-width : 100%; 3 | height: auto; 4 | } 5 | body.slim-tinymce { 6 | width: 50%; 7 | margin: 0 auto; 8 | } 9 | body *:hover { 10 | box-shadow: 0 0 0 1px var(--bf-theme-container-highlight, --bf-theme-body-text) !important; 11 | transition: 0.3s; 12 | } 13 | .bf-wysiwyg-hide-app:not(style) { 14 | display: inherit; 15 | } 16 | img[data-expr-src] { 17 | visibility: hidden; 18 | } 19 | -------------------------------------------------------------------------------- /scripts/tinymce/bf_tinymce_plugins.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'icomoon'; 3 | src:url(../../fonticons/icomoon.eot); 4 | src:url(../../fonticons/icomoon.eot) format('embedded-opentype'), 5 | url(../../fonticons/icomoon.woff2) format('woff2'), 6 | url(../../fonticons/icomoon.ttf) format('truetype'), 7 | url(../../fonticons/icomoon.woff) format('woff'), 8 | url(../../fonticons/icomoon.svg) format('svg'); 9 | font-weight: 400; 10 | font-style: normal 11 | } 12 | [class*=" icon-"],[class^=icon-]{ 13 | font-family: 'icomoon' !important; 14 | speak: none; 15 | font-style: normal; 16 | font-weight: 400; 17 | font-variant: normal; 18 | text-transform: none; 19 | line-height: 1; 20 | -webkit-font-smoothing: antialiased; 21 | -moz-osx-font-smoothing: grayscale 22 | } 23 | .icon-chevron-down:before { 24 | content : "\e60f" 25 | } 26 | .dropdown-menu>li { 27 | display: block; 28 | padding: 6px 12px; 29 | clear: both; 30 | font-size: 13px; 31 | line-height: 20px; 32 | font-weight: 300; 33 | color: #5f5f5f; 34 | white-space: nowrap; 35 | font-weight: bold; 36 | cursor: pointer; 37 | transition: 0.3s; 38 | } 39 | .dropdown-menu>li:hover { 40 | text-decoration: none; 41 | background-color: #eef0f0; 42 | padding-left: 16px !important; 43 | } -------------------------------------------------------------------------------- /scripts/tinymce/langs/README.md: -------------------------------------------------------------------------------- 1 | This is where language files should be placed. 2 | 3 | Please DO NOT translate these directly use this service: https://www.transifex.com/projects/p/tinymce/ 4 | -------------------------------------------------------------------------------- /scripts/tinymce/plugins/autoresize/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.8.2 (2021-06-23) 8 | */ 9 | !function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),h=tinymce.util.Tools.resolve("tinymce.Env"),r=tinymce.util.Tools.resolve("tinymce.util.Delay"),y=function(e){return e.getParam("min_height",e.getElement().offsetHeight,"number")},a=function(e,t,n,i,o){r.setEditorTimeout(e,function(){b(e,t),n--?a(e,t,n,i,o):o&&o()},i)},p=function(e,t){var n=e.getBody();n&&(n.style.overflowY=t?"":"hidden",t||(n.scrollTop=0))},v=function(e,t,n,i){var o=parseInt(e.getStyle(t,n,i),10);return isNaN(o)?0:o},b=function(e,t){var n,i,o,r,s,a,g,u,l,c,m,f=e.dom,d=e.getDoc();d&&((n=e).plugins.fullscreen&&n.plugins.fullscreen.isFullscreen()?p(e,!0):(i=d.documentElement,o=e.getParam("autoresize_bottom_margin",50,"number"),r=y(e),s=v(f,i,"margin-top",!0),a=v(f,i,"margin-bottom",!0),(g=i.offsetHeight+s+a+o)<0&&(g=0),g+(u=e.getContainer().offsetHeight-e.getContentAreaContainer().offsetHeight)>y(e)&&(r=g+u),(l=e.getParam("max_height",0,"number"))&&l { 14 | if (err) return console.error(err); 15 | if (result) { 16 | editor.insertContent(result.content); 17 | editor.isNotDirty = false; 18 | editor.fire("change"); 19 | } 20 | 21 | }); 22 | } 23 | 24 | return { 25 | getMetadata: function () { 26 | return { 27 | name: "AI", 28 | url: "https://github.com/BuildFire/sdk/wiki/How-to-use-action-Items", 29 | }; 30 | }, 31 | }; 32 | }); 33 | -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_buttons/dialog.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
12 |
Type
13 |
14 |
15 | 16 | 17 |
18 |
19 | 20 | 21 |
22 |
23 |
24 |
25 | 26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_buttons/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: var(--bf-theme-background); 3 | font-size: 13px; 4 | } 5 | .btns { 6 | content: " "; 7 | display: table; 8 | } 9 | #main { 10 | display: none; 11 | } 12 | .col-xs-6 div { 13 | border: 1px solid transparent; 14 | padding: 16px; 15 | width: 200px; 16 | } 17 | .btns-width { 18 | width: 160px; 19 | } 20 | .margin-top-20 { 21 | margin-top : 20px !important; 22 | } 23 | #buttonsContainer , #linksContainer { 24 | text-transform: capitalize; 25 | margin-top: 0.5rem; 26 | padding: 0 1rem; 27 | text-align: center; 28 | display: none; 29 | } 30 | .bf-border-primary, 31 | .bf-border-success, 32 | .bf-border-info, 33 | .bf-border-warning, 34 | .bf-border-default, 35 | .bf-border-danger { 36 | border-radius: 0.5rem; 37 | transition: 0.3s; 38 | } 39 | #typesDiv { 40 | padding: 8px 8px 24px 8px; 41 | font-family: sans-serif; 42 | border-bottom: 1px solid #ddd; 43 | } 44 | #typesDiv, #typesDiv * { 45 | background: white; 46 | } 47 | #typesDiv div:first-child { 48 | margin-left: 5px; 49 | } 50 | #types { 51 | padding: 8px 0 16px 0; 52 | font-weight: bold; 53 | } 54 | #linksContainer div { 55 | cursor: pointer; 56 | } 57 | #linksContainer div a { 58 | display: inline-block; 59 | padding: 6px 12px; 60 | font-size: 13px; 61 | } -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_imagelib/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: sans-serif; 3 | padding: 16px 8px; 4 | margin: 0; 5 | } 6 | #container { 7 | padding: 16px 16px 0px 16px; 8 | font-weight: bold; 9 | } 10 | #imageDiv img { 11 | max-width: 100%; 12 | max-height: 100%; 13 | width: auto; 14 | height: auto; 15 | } 16 | #imageContainer { 17 | display: flex; 18 | justify-content: center; 19 | } 20 | #imageDiv { 21 | width: 200px; 22 | height: 200px; 23 | border: 1px dashed grey; 24 | display: flex; 25 | justify-content: center; 26 | align-items: center; 27 | } 28 | #fixedOptions, #responsiveOptions { 29 | top: auto; 30 | bottom: 100% 31 | } 32 | .margin-10-bottom { 33 | margin-bottom: 10px; 34 | } 35 | .margin-20-bottom { 36 | margin-bottom: 20px; 37 | } 38 | #cropDropDownValue, #responsiveValue, #fixedValue { 39 | font-weight: bold; 40 | } 41 | #radioButtonsDiv { 42 | display: flex 43 | } 44 | #radioButtonsDiv div { 45 | flex: 1; 46 | margin-left: 0; 47 | } 48 | #cropAspectRatios { 49 | height: 150px; 50 | } -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/dialog.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 |
9 | Select Preset 10 |
11 | Link Data 12 |
13 |
14 |
15 |
16 |
17 |

Customize the selected layout by manually entering data or dynamic expressions. After inserting the layout, you can continue editing it using the WYSIWYG editor.

18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/bf_mce_layout1.css: -------------------------------------------------------------------------------- 1 | #bf_mce_layout_1 *>span { 2 | color: currentColor; 3 | } 4 | 5 | #bf_mce_layout_1 { 6 | font-size: 16px; 7 | padding: 3rem 1rem; 8 | margin: 1rem; 9 | border-radius: 1rem; 10 | overflow: hidden; 11 | position: relative; 12 | text-align: center; 13 | box-shadow: 0 .5rem 1rem rgba(77, 77, 77, 0.5); 14 | } 15 | 16 | #bf_mce_layout_1 .bf_mce_img-container { 17 | position: absolute; 18 | left: 0; 19 | top: 0; 20 | height: 100%; 21 | width: 100%; 22 | z-index: 1; 23 | } 24 | 25 | #bf_mce_layout_1 .bf_mce_img-container::after { 26 | content: ''; 27 | width: 100%; 28 | height: 100%; 29 | position: absolute; 30 | top: 0; 31 | left: 0; 32 | background-color: rgba(0, 0, 0, 0.5); 33 | pointer-events: none; 34 | } 35 | 36 | #bf_mce_layout_1 .bf_mce_img-container img { 37 | width: 100%; 38 | height: 100%; 39 | object-fit: cover; 40 | } 41 | 42 | #bf_mce_layout_1 .bf_mce_copy { 43 | color: #fff; 44 | margin-bottom: 3rem; 45 | position: relative; 46 | z-index: 1; 47 | } 48 | 49 | #bf_mce_layout_1 .bf_mce_copy h1 { 50 | padding-top: 3rem; 51 | margin-bottom: .5rem; 52 | } 53 | 54 | #bf_mce_layout_1 .bf_mce_copy .bf_mce_caption { 55 | font-size: .75rem !important; 56 | margin-bottom: 2rem; 57 | } 58 | 59 | #bf_mce_layout_1 .bf_mce_copy p { 60 | line-height: 1.5; 61 | } 62 | 63 | #bf_mce_layout_1 button { 64 | position: relative; 65 | min-width: 150px; 66 | z-index: 1; 67 | } 68 | 69 | #bf_mce_layout_1 h1, 70 | #bf_mce_layout_1 h2, 71 | #bf_mce_layout_1 h3, 72 | #bf_mce_layout_1 h4, 73 | #bf_mce_layout_1 h5, 74 | #bf_mce_layout_1 h6, 75 | #bf_mce_layout_1 .headerTextTheme { 76 | color: var(--bf-theme-header-text); 77 | } 78 | 79 | #bf_mce_layout_1 p, 80 | #bf_mce_layout_1 span, 81 | #bf_mce_layout_1 label, 82 | #bf_mce_layout_1 body { 83 | color: var(--bf-theme-body-text); 84 | } -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/bf_mce_layout10.css: -------------------------------------------------------------------------------- 1 | #bf_mce_layout_10 *>span { 2 | color: currentColor; 3 | } 4 | 5 | #bf_mce_layout_10 { 6 | margin: 1rem; 7 | } 8 | 9 | #bf_mce_layout_10 .bf_mce_container-grid { 10 | font-size: 16px; 11 | display: grid; 12 | grid-gap: 1em; 13 | grid-template-columns: 1fr 1fr; 14 | margin: 0; 15 | padding: 1rem 0; 16 | } 17 | 18 | #bf_mce_layout_10 .bf_mce_container { 19 | font-size: 16px !important; 20 | padding: 1em .75em; 21 | border-radius: 1em; 22 | position: relative; 23 | overflow: hidden; 24 | box-shadow: 0 .3em .3em rgba(77, 77, 77, 0.2); 25 | backdrop-filter: blur(16px); 26 | background-color: rgba(150, 150, 150, 0.2); 27 | } 28 | 29 | #bf_mce_layout_10 .bf_mce_container *>span { 30 | font-size: inherit; 31 | } 32 | 33 | #bf_mce_layout_10 .bf_mce_img-container { 34 | border-radius: .5em; 35 | width: 2.5em; 36 | height: 2.5em; 37 | border-radius: 50%; 38 | overflow: hidden; 39 | } 40 | 41 | #bf_mce_layout_10 .bf_mce_img-container img { 42 | width: 100%; 43 | height: 100%; 44 | object-fit: cover; 45 | } 46 | 47 | #bf_mce_layout_10 .bf_mce_secondary-title { 48 | font-size: 1em; 49 | font-weight: bold; 50 | margin-top: 1em; 51 | margin-bottom: 0; 52 | overflow: hidden; 53 | white-space: nowrap; 54 | text-overflow: ellipsis; 55 | } 56 | 57 | #bf_mce_layout_10 #bf_mce_banner { 58 | display: none; 59 | } 60 | 61 | #bf_mce_layout_10 h1, 62 | #bf_mce_layout_10 h2, 63 | #bf_mce_layout_10 h3, 64 | #bf_mce_layout_10 h4, 65 | #bf_mce_layout_10 h5, 66 | #bf_mce_layout_10 h6, 67 | #bf_mce_layout_10 .headerTextTheme { 68 | color: var(--bf-theme-header-text); 69 | } 70 | 71 | #bf_mce_layout_10 p, 72 | #bf_mce_layout_10 span, 73 | #bf_mce_layout_10 label, 74 | #bf_mce_layout_10 body { 75 | color: var(--bf-theme-body-text); 76 | } -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/bf_mce_layout11.css: -------------------------------------------------------------------------------- 1 | #bf_mce_layout_11 *>span { 2 | color: currentColor; 3 | } 4 | 5 | #bf_mce_layout_11 { 6 | margin: 1rem; 7 | } 8 | 9 | #bf_mce_layout_11 .bf_mce_container-grid { 10 | font-size: 16px; 11 | display: grid; 12 | grid-gap: 1em; 13 | margin: 0; 14 | padding: 1rem 0; 15 | } 16 | 17 | #bf_mce_layout_11 .bf_mce_container { 18 | display: flex; 19 | flex-direction: row; 20 | align-items: center; 21 | gap: 1em; 22 | font-size: 16px !important; 23 | padding: .75em; 24 | border-radius: 1em; 25 | position: relative; 26 | overflow: hidden; 27 | box-shadow: 0 .3em .3em rgba(77, 77, 77, 0.2); 28 | backdrop-filter: blur(16px); 29 | background-color: rgba(150, 150, 150, 0.2); 30 | } 31 | 32 | #bf_mce_layout_11 .bf_mce_container *>span { 33 | font-size: inherit; 34 | } 35 | 36 | #bf_mce_layout_11 .bf_mce_img-container { 37 | border-radius: .5em; 38 | width: 3.5em; 39 | height: 3.5em; 40 | border-radius: 50%; 41 | overflow: hidden; 42 | } 43 | 44 | #bf_mce_layout_11 .bf_mce_img-container img { 45 | width: 100%; 46 | height: 100%; 47 | object-fit: cover; 48 | } 49 | 50 | #bf_mce_layout_11 .bf_mce_secondary-title { 51 | font-size: 1em; 52 | font-weight: bold; 53 | overflow: hidden; 54 | white-space: nowrap; 55 | text-overflow: ellipsis; 56 | } 57 | 58 | #bf_mce_layout_11 #bf_mce_banner { 59 | display: none; 60 | } 61 | 62 | #bf_mce_layout_11 h1, 63 | #bf_mce_layout_11 h2, 64 | #bf_mce_layout_11 h3, 65 | #bf_mce_layout_11 h4, 66 | #bf_mce_layout_11 h5, 67 | #bf_mce_layout_11 h6, 68 | #bf_mce_layout_11 .headerTextTheme { 69 | color: var(--bf-theme-header-text); 70 | } 71 | 72 | #bf_mce_layout_11 p, 73 | #bf_mce_layout_11 span, 74 | #bf_mce_layout_11 label, 75 | #bf_mce_layout_11 body { 76 | color: var(--bf-theme-body-text); 77 | } -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/bf_mce_layout2.css: -------------------------------------------------------------------------------- 1 | #bf_mce_layout_2 *>span { 2 | color: currentColor; 3 | } 4 | 5 | #bf_mce_layout_2 { 6 | font-size: 16px; 7 | margin: 1rem; 8 | border-radius: 1rem; 9 | overflow: hidden; 10 | position: relative; 11 | text-align: center; 12 | box-shadow: 0 .5rem 1rem rgba(77, 77, 77, 0.5); 13 | } 14 | 15 | #bf_mce_layout_2 .bf_mce_img-container { 16 | position: relative; 17 | left: 0; 18 | top: 0; 19 | height: 200px; 20 | width: 100%; 21 | } 22 | 23 | #bf_mce_layout_2 .bf_mce_img-container img { 24 | width: 100%; 25 | height: 100%; 26 | object-fit: cover; 27 | } 28 | 29 | #bf_mce_layout_2 .bf_mce_copy { 30 | padding: 1rem; 31 | } 32 | 33 | #bf_mce_layout_2 .bf_mce_copy h1 { 34 | margin-top: 0; 35 | margin-bottom: .5rem; 36 | } 37 | 38 | #bf_mce_layout_2 .bf_mce_copy .bf_mce_caption { 39 | font-size: .75rem !important; 40 | margin-bottom: 2rem; 41 | } 42 | 43 | #bf_mce_layout_2 .bf_mce_copy p { 44 | line-height: 1.5; 45 | } 46 | 47 | #bf_mce_layout_2 button { 48 | position: relative; 49 | margin-bottom: 2rem; 50 | min-width: 150px; 51 | z-index: 1; 52 | } 53 | 54 | #bf_mce_layout_2 h1, 55 | #bf_mce_layout_2 h2, 56 | #bf_mce_layout_2 h3, 57 | #bf_mce_layout_2 h4, 58 | #bf_mce_layout_2 h5, 59 | #bf_mce_layout_2 h6, 60 | #bf_mce_layout_2 .headerTextTheme { 61 | color: var(--bf-theme-header-text); 62 | } 63 | 64 | #bf_mce_layout_2 p, 65 | #bf_mce_layout_2 span, 66 | #bf_mce_layout_2 label, 67 | #bf_mce_layout_2 body { 68 | color: var(--bf-theme-body-text); 69 | } -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/bf_mce_layout3.css: -------------------------------------------------------------------------------- 1 | #bf_mce_layout_3 *>span { 2 | color: currentColor; 3 | } 4 | 5 | #bf_mce_layout_3 { 6 | font-size: 16px !important; 7 | text-align: center; 8 | line-height: 1.5; 9 | padding: .75em; 10 | margin: 1em; 11 | border-radius: 1em; 12 | position: relative; 13 | box-shadow: 0 .5em 1em rgba(77, 77, 77, 0.5); 14 | } 15 | 16 | #bf_mce_layout_3 .bf_mce_img-container { 17 | border-radius: .5em; 18 | overflow: hidden; 19 | min-height: 12em; 20 | position: relative; 21 | } 22 | 23 | #bf_mce_layout_3 .bf_mce_img-container .bf_mce_img-copy { 24 | margin: 1rem; 25 | text-align: center; 26 | color: #fff; 27 | position: relative; 28 | z-index: 2; 29 | } 30 | 31 | #bf_mce_layout_3 .bf_mce_img-container>img { 32 | position: absolute; 33 | top: 0; 34 | left: 0; 35 | width: 100%; 36 | height: 100%; 37 | object-fit: cover; 38 | z-index: 0; 39 | } 40 | 41 | #bf_mce_layout_3 .bf_mce_img-container::after { 42 | content: ''; 43 | width: 100%; 44 | height: 100%; 45 | position: absolute; 46 | top: 0; 47 | left: 0; 48 | background-color: rgba(0, 0, 0, 0.2); 49 | pointer-events: none; 50 | z-index: 1; 51 | } 52 | 53 | #bf_mce_layout_3 .bf_mce_img-container .bf_mce_main-title, 54 | #bf_mce_layout_3 .bf_mce_img-container .bf_mce_main-title>span { 55 | margin-bottom: 0; 56 | padding-top: 3em; 57 | font-size: 1.5em; 58 | } 59 | 60 | #bf_mce_layout_3 .bf_mce_img-container .bf_mce_main-title>span { 61 | font-size: inherit; 62 | } 63 | 64 | #bf_mce_layout_3 .bf_mce_img-container .bf_mce_caption, 65 | #bf_mce_layout_3 .bf_mce_img-container .bf_mce_caption>span { 66 | font-size: .75em; 67 | margin-bottom: 6em; 68 | margin-top: 0; 69 | } 70 | 71 | #bf_mce_layout_3 button { 72 | min-width: 150px; 73 | margin-bottom: 1em; 74 | } 75 | 76 | #bf_mce_layout_3 h1, 77 | #bf_mce_layout_3 h2, 78 | #bf_mce_layout_3 h3, 79 | #bf_mce_layout_3 h4, 80 | #bf_mce_layout_3 h5, 81 | #bf_mce_layout_3 h6, 82 | #bf_mce_layout_3 .headerTextTheme { 83 | color: var(--bf-theme-header-text); 84 | } 85 | 86 | #bf_mce_layout_3 p, 87 | #bf_mce_layout_3 span, 88 | #bf_mce_layout_3 label, 89 | #bf_mce_layout_3 body { 90 | color: var(--bf-theme-body-text); 91 | } -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/bf_mce_layout4.css: -------------------------------------------------------------------------------- 1 | #bf_mce_layout_4 { 2 | font-size: 16px !important; 3 | line-height: 1.5; 4 | padding: 1.5em; 5 | margin: 1em; 6 | border-radius: 1em; 7 | position: relative; 8 | border: 1px solid rgba(77, 77, 77, 0.2); 9 | box-shadow: 0 .5em 1em rgba(77, 77, 77, 0.5); 10 | backdrop-filter: blur(24px); 11 | -webkit-backdrop-filter: blur(24px); 12 | } 13 | 14 | #bf_mce_layout_4 *>span { 15 | color: currentColor; 16 | } 17 | 18 | #bf_mce_layout_4 .bf_mce_main-title { 19 | font-size: 2.5em; 20 | font-weight: bold; 21 | margin-top: 0; 22 | margin-bottom: 1em; 23 | } 24 | 25 | #bf_mce_layout_4 .bf_mce_secondary-title { 26 | font-size: 1.5em; 27 | font-weight: bold; 28 | margin-top: 0; 29 | margin-bottom: .125em; 30 | } 31 | 32 | #bf_mce_layout_4 .bf_mce_caption { 33 | font-size: .75em; 34 | margin-top: 0; 35 | margin-bottom: 1.5em; 36 | } 37 | 38 | #bf_mce_layout_4 .bf_mce_body-copy { 39 | margin-top: 0; 40 | font-size: .875em; 41 | margin-bottom: 2em; 42 | } 43 | 44 | #bf_mce_layout_4 .bf-btn { 45 | width: 100%; 46 | } 47 | 48 | #bf_mce_layout_4 h1, 49 | #bf_mce_layout_4 h2, 50 | #bf_mce_layout_4 h3, 51 | #bf_mce_layout_4 h4, 52 | #bf_mce_layout_4 h5, 53 | #bf_mce_layout_4 h6, 54 | #bf_mce_layout_4 .headerTextTheme { 55 | color: var(--bf-theme-header-text); 56 | } 57 | 58 | #bf_mce_layout_4 p, 59 | #bf_mce_layout_4 span, 60 | #bf_mce_layout_4 label, 61 | #bf_mce_layout_4 body { 62 | color: var(--bf-theme-body-text); 63 | } -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/bf_mce_layout5.css: -------------------------------------------------------------------------------- 1 | #bf_mce_layout_5 *>span { 2 | color: currentColor; 3 | } 4 | 5 | #bf_mce_layout_5 .bf_mce_container-grid { 6 | font-size: 16px; 7 | display: grid; 8 | grid-gap: 1em; 9 | grid-template-columns: 1fr 1fr; 10 | grid-column: col 3 / span 2; 11 | grid-row: row 2; 12 | margin: 1em; 13 | } 14 | 15 | #bf_mce_layout_5 .bf_mce_grid-1 { 16 | grid-column: 1 / 1; 17 | grid-row: 1; 18 | } 19 | 20 | #bf_mce_layout_5 .bf_mce_grid-2 { 21 | grid-column: 2 / 2; 22 | grid-row: 1; 23 | } 24 | 25 | #bf_mce_layout_5 .bf_mce_grid-3 { 26 | grid-column: 1 / 3; 27 | grid-row: 2; 28 | } 29 | 30 | #bf_mce_layout_5 .bf_mce_container { 31 | font-size: 16px !important; 32 | padding: .75em; 33 | border-radius: 1em; 34 | position: relative; 35 | border: 1px solid rgba(77, 77, 77, 0.2); 36 | box-shadow: 0 .5em .75em rgba(77, 77, 77, 0.3); 37 | backdrop-filter: blur(24px); 38 | -webkit-backdrop-filter: blur(24px); 39 | } 40 | 41 | #bf_mce_layout_5 .bf_mce_container *>span { 42 | font-size: inherit; 43 | } 44 | 45 | #bf_mce_layout_5 .bf_mce_main-title { 46 | font-size: 2.5em; 47 | font-weight: bold; 48 | margin-top: 0; 49 | margin-bottom: .5em; 50 | line-height: 1.5; 51 | } 52 | 53 | #bf_mce_layout_5 .bf_mce_secondary-title { 54 | font-size: 1em; 55 | font-weight: bold; 56 | margin-top: 0; 57 | margin-bottom: .75em; 58 | } 59 | 60 | #bf_mce_layout_5 .bf_mce_body-copy { 61 | margin-top: 0; 62 | font-size: .75em; 63 | } 64 | 65 | #bf_mce_layout_5 .bf-btn { 66 | width: 100%; 67 | } 68 | 69 | #bf_mce_layout_5 h1, 70 | #bf_mce_layout_5 h2, 71 | #bf_mce_layout_5 h3, 72 | #bf_mce_layout_5 h4, 73 | #bf_mce_layout_5 h5, 74 | #bf_mce_layout_5 h6, 75 | #bf_mce_layout_5 .headerTextTheme { 76 | color: var(--bf-theme-header-text); 77 | } 78 | 79 | #bf_mce_layout_5 p, 80 | #bf_mce_layout_5 span, 81 | #bf_mce_layout_5 label, 82 | #bf_mce_layout_5 body { 83 | color: var(--bf-theme-body-text); 84 | } -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/bf_mce_layout6.css: -------------------------------------------------------------------------------- 1 | #bf_mce_layout_6 *>span { 2 | color: currentColor; 3 | } 4 | 5 | #bf_mce_layout_6 .bf_mce_container-grid { 6 | font-size: 16px; 7 | display: grid; 8 | grid-gap: 1em; 9 | grid-template-columns: 1fr 1fr; 10 | grid-column: col 3 / span 2; 11 | grid-row: row 2; 12 | margin: 1em; 13 | } 14 | 15 | #bf_mce_layout_6 .bf_mce_grid-1 { 16 | grid-column: 1 / 1; 17 | grid-row: 1 / 3; 18 | } 19 | 20 | #bf_mce_layout_6 .bf_mce_grid-2 { 21 | grid-column: 2 / 2; 22 | grid-row: 1; 23 | } 24 | 25 | #bf_mce_layout_6 .bf_mce_grid-3 { 26 | grid-column: 2 / 3; 27 | grid-row: 2; 28 | } 29 | 30 | #bf_mce_layout_6 .bf_mce_container { 31 | font-size: 16px !important; 32 | padding: .75em; 33 | border-radius: 1em; 34 | position: relative; 35 | border: 1px solid rgba(77, 77, 77, 0.2); 36 | box-shadow: 0 .5em .75em rgba(77, 77, 77, 0.3); 37 | backdrop-filter: blur(24px); 38 | -webkit-backdrop-filter: blur(24px); 39 | } 40 | 41 | #bf_mce_layout_6 .bf_mce_container *>span { 42 | font-size: inherit; 43 | } 44 | 45 | #bf_mce_layout_6 .bf_mce_main-title { 46 | font-size: 2.5em; 47 | font-weight: bold; 48 | margin-top: 0; 49 | margin-bottom: .5em; 50 | line-height: 1.5; 51 | } 52 | 53 | #bf_mce_layout_6 .bf_mce_secondary-title { 54 | font-size: 1em; 55 | font-weight: bold; 56 | margin-top: 0; 57 | margin-bottom: .75em; 58 | } 59 | 60 | #bf_mce_layout_6 .bf_mce_body-copy { 61 | margin-top: 0; 62 | font-size: .75em; 63 | } 64 | 65 | #bf_mce_layout_6 .bf-btn { 66 | width: 100%; 67 | } 68 | 69 | #bf_mce_layout_6 .bf_mce_btn-container { 70 | margin: 1em; 71 | } 72 | 73 | #bf_mce_layout_6 h1, 74 | #bf_mce_layout_6 h2, 75 | #bf_mce_layout_6 h3, 76 | #bf_mce_layout_6 h4, 77 | #bf_mce_layout_6 h5, 78 | #bf_mce_layout_6 h6, 79 | #bf_mce_layout_6 .headerTextTheme { 80 | color: var(--bf-theme-header-text); 81 | } 82 | 83 | #bf_mce_layout_6 p, 84 | #bf_mce_layout_6 span, 85 | #bf_mce_layout_6 label, 86 | #bf_mce_layout_6 body { 87 | color: var(--bf-theme-body-text); 88 | } -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/bf_mce_layout8.css: -------------------------------------------------------------------------------- 1 | #bf_mce_layout_8 *>span { 2 | color: currentColor; 3 | } 4 | 5 | #bf_mce_layout_8 { 6 | font-size: 16px !important; 7 | 8 | line-height: 1.5; 9 | padding: .75em; 10 | margin: 1em; 11 | border-radius: 1em; 12 | position: relative; 13 | box-shadow: 0 .5em 1em rgba(77, 77, 77, 0.5); 14 | text-align: center; 15 | } 16 | 17 | #bf_mce_layout_8 .bf_mce_img-container { 18 | border-radius: .5em; 19 | width: 200px; 20 | height: 200px; 21 | border-radius: 50%; 22 | transform: translateZ(0); 23 | overflow: hidden; 24 | min-height: 12em; 25 | margin: 0 auto; 26 | margin-top: .5em; 27 | } 28 | 29 | #bf_mce_layout_8 .bf_mce_img-container img { 30 | width: 100%; 31 | height: 100%; 32 | object-fit: cover; 33 | } 34 | 35 | #bf_mce_layout_8 .bf_mce_copy { 36 | padding: 1rem; 37 | } 38 | 39 | #bf_mce_layout_8 .bf_mce_copy h1 { 40 | margin-top: 0; 41 | margin-bottom: .5rem; 42 | } 43 | 44 | #bf_mce_layout_8 .bf_mce_copy .bf_mce_caption { 45 | font-size: .75rem !important; 46 | margin-bottom: 2rem; 47 | margin-top: 0; 48 | } 49 | 50 | #bf_mce_layout_8 .bf_mce_copy p { 51 | line-height: 1.5; 52 | } 53 | 54 | #bf_mce_layout_8 button { 55 | position: relative; 56 | margin-bottom: 2rem; 57 | min-width: 150px; 58 | z-index: 1; 59 | } 60 | 61 | #bf_mce_layout_8 h1, 62 | #bf_mce_layout_8 h2, 63 | #bf_mce_layout_8 h3, 64 | #bf_mce_layout_8 h4, 65 | #bf_mce_layout_8 h5, 66 | #bf_mce_layout_8 h6, 67 | #bf_mce_layout_8 .headerTextTheme { 68 | color: var(--bf-theme-header-text); 69 | } 70 | 71 | #bf_mce_layout_8 p, 72 | #bf_mce_layout_8 span, 73 | #bf_mce_layout_8 label, 74 | #bf_mce_layout_8 body { 75 | color: var(--bf-theme-body-text); 76 | } -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_1.jpg -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_10.png -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_11.png -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_12.png -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_2.jpg -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_3.jpg -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_4.jpg -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_5.jpg -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_6.jpg -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_7.jpg -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_8.jpg -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/scripts/tinymce/plugins/bf_layouts/layouts/previews/lyt_9.jpg -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/resources/img1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/scripts/tinymce/plugins/bf_layouts/layouts/resources/img1.jpeg -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/resources/img2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/scripts/tinymce/plugins/bf_layouts/layouts/resources/img2.jpeg -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/resources/img3.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BuildFire/sdk/35645e86e487f642f536b1ba49e0bb16d476fbfc/scripts/tinymce/plugins/bf_layouts/layouts/resources/img3.jpeg -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/template_a.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 |
6 |

Title

7 |

Caption

8 |

Lorem ipsum, dolor sit amet consectetur adipisicing elit. Natus placeat ab, commodi quo, officiis voluptatum earum perferendis doloremque.

9 |
10 | -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/template_b.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 |

Title

6 |

Caption

7 |
8 |
9 |

Lorem ipsum dolor sit amet consectetur adipisicing elit. Similique ducimus ullam dolor, expedita nihil corporis architecto eveniet ipsam nulla aperiam!

10 | -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/template_c.html: -------------------------------------------------------------------------------- 1 | 2 |

1

3 |

Card Title

4 |

Caption

5 |

Lorem, ipsum dolor sit amet consectetur adipisicing elit. Veritatis expedita incidunt sed nam. Aperiam temporibus maxime voluptatum dolorum obcaecati. Eligendi?

6 | 7 | 8 | -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/template_d.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 |

1

6 |

Card Title

7 |

Lorem ipsum dolor sit amet.

8 |
9 |
10 |

2

11 |

Card Title

12 |

Lorem ipsum dolor sit amet.

13 |
14 |
15 |

3

16 |

Card Title

17 |

Lorem ipsum, dolor sit amet consectetur adipisicing elit. Impedit delectus atque dolorem animi.

18 | 19 |
20 | 21 |
-------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/template_e.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 |

1

6 |

Card Title

7 |

Lorem ipsum dolor sit amet consectetur, adipisicing elit. A, et! Id voluptatibus est quo dolore deserunt, tenetur beatae laboriosam explicabo eaque iusto nobis, incidunt aliquam quae illum porro aspernatur dolorem?

8 |
9 |
10 |

2

11 |

Card Title

12 |

Lorem ipsum dolor sit amet.

13 |
14 |
15 |

3

16 |

Card Title

17 |

Lorem ipsum dolor sit amet.

18 |
19 | 20 |
21 |
22 | 23 |
-------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/template_f.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 |
6 |

01

7 |

Card Title

8 |

Caption

9 |
10 |
11 |

Lorem ipsum, dolor sit amet consectetur adipisicing elit. Nulla, neque! Vitae tempore voluptatem officia dignissimos illum placeat expedita vel aliquam!

12 | 13 |
14 | -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_layouts/layouts/template_g.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |

Banner Title

4 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod.

5 | 6 |
7 |
8 |
9 |
10 |

Card Title

11 |
12 |
13 |
14 |

Card Title

15 |
16 |
17 |
18 |

Card Title

19 |
20 |
21 |
22 |

Card Title

23 |
24 |
25 |
26 |

Card Title

27 |
28 |
29 |
30 |

Card Title

31 |
32 |
-------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_rating/dialog.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 41 | 42 | 43 | 44 |
45 |
We are rating:
46 | 47 |
48 | 62 | 63 | -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_rating/plugin.js: -------------------------------------------------------------------------------- 1 | 2 | tinymce.PluginManager.add("bf_rating", function (editor, url) { 3 | editor.ui.registry.addMenuItem('bf_insertRating', { 4 | text: 'Insert rating', 5 | onAction: function() { 6 | showDialog(); 7 | } 8 | }); 9 | 10 | function showDialog() { 11 | editor.windowManager.openUrl({ 12 | title: "Add New Rating", 13 | url: url + "/dialog.html", 14 | width: 400, 15 | buttons: [ 16 | { 17 | text: 'Cancel', 18 | type: 'cancel' 19 | }, 20 | { 21 | text: "Add", 22 | type: 'custom', 23 | name: 'Add Rating', 24 | primary: true, 25 | }, 26 | ], 27 | onAction: (dialogApi, details) => { 28 | if (details.name === 'Add Rating') { 29 | dialogApi.sendMessage({ 30 | message: 'getDataId' 31 | }); 32 | } 33 | }, 34 | onMessage : (dialogApi, details) => { 35 | let result = details.data.content; 36 | let mceAction = details.mceAction; 37 | if (result && mceAction === 'setDataId') { 38 | let val = result.trim(); 39 | val = escape(val); 40 | editor.insertContent( 41 | ` 42 |

43 | ★ ★ ★ ★ ★ 44 |


45 | ` 46 | ); 47 | dialogApi.close(); 48 | } 49 | } 50 | }); 51 | } 52 | 53 | return { 54 | getMetadata: function () { 55 | return { 56 | name: "Rating Plugin", 57 | }; 58 | }, 59 | }; 60 | }); 61 | -------------------------------------------------------------------------------- /scripts/tinymce/plugins/bf_rating/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("bf_rating",function(t,e){return t.ui.registry.addMenuItem("bf_insertRating",{text:"Insert rating",onAction:function(){t.windowManager.openUrl({title:"Add New Rating",url:e+"/dialog.html",width:400,buttons:[{text:"Cancel",type:"cancel"},{text:"Add",type:"custom",name:"Add Rating",primary:!0}],onAction:(t,e)=>{"Add Rating"===e.name&&t.sendMessage({message:"getDataId"})},onMessage:(e,n)=>{let a=n.data.content,i=n.mceAction;if(a&&"setDataId"===i){let n=a.trim();n=escape(n),t.insertContent(`\n

\n ★ ★ ★ ★ ★\n


\n `),e.close()}}})}}),{getMetadata:function(){return{name:"Rating Plugin"}}}}); 2 | -------------------------------------------------------------------------------- /scripts/tinymce/plugins/code/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.8.2 (2021-06-23) 8 | */ 9 | !function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=function(o){var e=o.getContent({source_view:!0});o.windowManager.open({title:"Source Code",size:"large",body:{type:"panel",items:[{type:"textarea",name:"code"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{code:e},onSubmit:function(e){var t,n;t=o,n=e.getData().code,t.focus(),t.undoManager.transact(function(){t.setContent(n)}),t.selection.setCursorLocation(),t.nodeChanged(),e.close()}})};e.add("code",function(e){var t,n;return(t=e).addCommand("mceCodeEditor",function(){o(t)}),(n=e).ui.registry.addButton("code",{icon:"sourcecode",tooltip:"Source code",onAction:function(){return o(n)}}),n.ui.registry.addMenuItem("code",{icon:"sourcecode",text:"Source code",onAction:function(){return o(n)}}),{}})}(); -------------------------------------------------------------------------------- /scripts/tinymce/plugins/colorpicker/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.8.2 (2021-06-23) 8 | */ 9 | !function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("colorpicker",function(){console.warn("Color picker plugin is now built in to the core editor, please remove it from your editor configuration")})}(); -------------------------------------------------------------------------------- /scripts/tinymce/plugins/contextmenu/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.8.2 (2021-06-23) 8 | */ 9 | !function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("contextmenu",function(){console.warn("Context menu plugin is now built in to the core editor, please remove it from your editor configuration")})}(); -------------------------------------------------------------------------------- /scripts/tinymce/plugins/hr/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.8.2 (2021-06-23) 8 | */ 9 | !function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager");n.add("hr",function(n){var o,t;(o=n).addCommand("InsertHorizontalRule",function(){o.execCommand("mceInsertContent",!1,"
")}),(t=n).ui.registry.addButton("hr",{icon:"horizontal-rule",tooltip:"Horizontal line",onAction:function(){return t.execCommand("InsertHorizontalRule")}}),t.ui.registry.addMenuItem("hr",{icon:"horizontal-rule",text:"Horizontal line",onAction:function(){return t.execCommand("InsertHorizontalRule")}})})}(); -------------------------------------------------------------------------------- /scripts/tinymce/plugins/nonbreaking/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.8.2 (2021-06-23) 8 | */ 9 | !function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(n,e){for(var a="",o=0;o'+i(" ",e)+"":i(" ",e);n.undoManager.transact(function(){return n.insertContent(o)})},c=tinymce.util.Tools.resolve("tinymce.util.VK");n.add("nonbreaking",function(n){var e,a,o,i,t;(e=n).addCommand("mceNonBreaking",function(){r(e,1)}),(a=n).ui.registry.addButton("nonbreaking",{icon:"non-breaking",tooltip:"Nonbreaking space",onAction:function(){return a.execCommand("mceNonBreaking")}}),a.ui.registry.addMenuItem("nonbreaking",{icon:"non-breaking",text:"Nonbreaking space",onAction:function(){return a.execCommand("mceNonBreaking")}}),0<(t="boolean"==typeof(i=(o=n).getParam("nonbreaking_force_tab",0))?!0===i?3:0:i)&&o.on("keydown",function(n){if(n.keyCode===c.TAB&&!n.isDefaultPrevented()){if(n.shiftKey)return;n.preventDefault(),n.stopImmediatePropagation(),r(o,t)}})})}(); -------------------------------------------------------------------------------- /scripts/tinymce/plugins/noneditable/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.8.2 (2021-06-23) 8 | */ 9 | !function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),l=tinymce.util.Tools.resolve("tinymce.util.Tools"),u=function(t){return t.getParam("noneditable_noneditable_class","mceNonEditable")},f=function(e){return function(t){return-1!==(" "+t.attr("class")+" ").indexOf(e)}},e=function(e){var t,r="contenteditable",n=" "+l.trim(e.getParam("noneditable_editable_class","mceEditable"))+" ",a=" "+l.trim(u(e))+" ",i=f(n),o=f(a),c=(t=e.getParam("noneditable_regexp",[]))&&t.constructor===RegExp?[t]:t;e.on("PreInit",function(){0"===r){var a=o.lastIndexOf("<",n);if(-1!==a)if(-1!==o.substring(a,n).indexOf('contenteditable="false"'))return t}return''+i.dom.encode("string"==typeof e[1]?e[1]:e[0])+""}}(t,a,u(t)));n.content=a}}(e,c,t)}),e.parser.addAttributeFilter("class",function(t){for(var e,n=t.length;n--;)e=t[n],i(e)?e.attr(r,"true"):o(e)&&e.attr(r,"false")}),e.serializer.addAttributeFilter(r,function(t){for(var e,n=t.length;n--;)e=t[n],(i(e)||o(e))&&(0';return e?"

"+a+"

":a};e.add("pagebreak",function(e){var a,n,o,c,i,t,r;(a=e).addCommand("mcePageBreak",function(){a.insertContent(m(g(a)))}),(n=e).ui.registry.addButton("pagebreak",{icon:"page-break",tooltip:"Page break",onAction:function(){return n.execCommand("mcePageBreak")}}),n.ui.registry.addMenuItem("pagebreak",{text:"Page break",icon:"page-break",onAction:function(){return n.execCommand("mcePageBreak")}}),c=(o=e).getParam("pagebreak_separator","\x3c!-- pagebreak --\x3e"),i=function(){return g(o)},t=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(e){return"\\"+e}),"gi"),o.on("BeforeSetContent",function(e){e.content=e.content.replace(t,m(i()))}),o.on("PreInit",function(){o.serializer.addNodeFilter("img",function(e){for(var a,n,t=e.length;t--;)if((n=(a=e[t]).attr("class"))&&-1!==n.indexOf(u)){var r=a.parent;if(o.schema.getBlockElements()[r.name]&&i()){r.type=3,r.value=c,r.raw=!0,a.remove();continue}a.type=3,a.value=c,a.raw=!0}})}),(r=e).on("ResolveName",function(e){"IMG"===e.target.nodeName&&r.dom.hasClass(e.target,u)&&(e.name="pagebreak")})})}(); -------------------------------------------------------------------------------- /scripts/tinymce/plugins/preview/plugin.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Tiny Technologies, Inc. All rights reserved. 3 | * Licensed under the LGPL or a commercial license. 4 | * For LGPL see License.txt in the project root for license information. 5 | * For commercial licenses see https://www.tiny.cloud/ 6 | * 7 | * Version: 5.8.2 (2021-06-23) 8 | */ 9 | !function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),f=tinymce.util.Tools.resolve("tinymce.Env"),w=tinymce.util.Tools.resolve("tinymce.util.Tools"),i=function(e){var t=function(t){var n="",i=t.dom.encode,e=t.getParam("content_style","","string");n+='';var o=t.getParam("content_css_cors",!1,"boolean")?' crossorigin="anonymous"':"";w.each(t.contentCSS,function(e){n+='"}),e&&(n+='");var r,a,c,s,d,m,l,y=-1===(s=(r=t).getParam("body_id","tinymce","string")).indexOf("=")?s:(c=(a=r).getParam("body_id","","hash"))[a.id]||c,u=-1===(l=(d=t).getParam("body_class","","string")).indexOf("=")?l:(m=d).getParam("body_class","","hash")[m.id]||"",v=' 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 24 | 25 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /test/analytics.spec.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zain on 12/27/15. 3 | */ 4 | 5 | describe('buildfire.analytics', function () { 6 | describe('buildfire.analytics.trackView', function () { 7 | beforeEach( function () { 8 | spyOn(buildfire.analytics, 'trackView'); 9 | 10 | buildfire.analytics.trackView('contact-us', { number : 1 }); 11 | }); 12 | 13 | it('buildfire.analytics.trackView should exist and be a function', function () { 14 | expect(typeof buildfire.analytics.trackView).toEqual('function'); 15 | }); 16 | 17 | it('buildfire.analytics.trackView ', function () { 18 | 19 | expect(buildfire.analytics.trackView).toHaveBeenCalledWith('contact-us', { number : 1 }); 20 | }); 21 | }); 22 | 23 | describe('buildfire.analytics.trackAction', function () { 24 | beforeEach( function () { 25 | spyOn(buildfire.analytics, 'trackAction'); 26 | 27 | buildfire.analytics.trackAction('contact-us', { number : 1 }); 28 | }); 29 | 30 | it('buildfire.analytics.trackAction should exist and be a function', function () { 31 | expect(typeof buildfire.analytics.trackAction).toEqual('function'); 32 | }); 33 | 34 | it('buildfire.analytics.trackAction ', function () { 35 | 36 | expect(buildfire.analytics.trackAction).toHaveBeenCalledWith('contact-us', { number : 1 }); 37 | }); 38 | }); 39 | }); -------------------------------------------------------------------------------- /test/appearance.spec.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zain on 12/27/15. 3 | */ 4 | 5 | //only set header visibility is documented ! 6 | 7 | describe('buildfire.appearance', function () { 8 | describe('buildfire.appearance.setHeaderVisibility', function () { 9 | beforeEach( function () { 10 | spyOn(buildfire.appearance, 'setHeaderVisibility'); 11 | 12 | buildfire.appearance.setHeaderVisibility(true); 13 | }); 14 | 15 | it('buildfire.actionItems.setHeaderVisibility should exist and be a function', function () { 16 | expect(typeof buildfire.appearance.setHeaderVisibility).toEqual('function'); 17 | }); 18 | 19 | it('buildfire.actionItems.showDialog should be called with an actionItem', function () { 20 | 21 | expect(buildfire.appearance.setHeaderVisibility).toHaveBeenCalledWith(true); 22 | }); 23 | }); 24 | }); -------------------------------------------------------------------------------- /test/deeplink.spec.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zain on 12/27/15. 3 | */ 4 | 5 | var mockErr, mockResult; 6 | 7 | describe('buildfire.deeplink', function () { 8 | 9 | 10 | describe('deeplink getData', function () { 11 | var link = 'app999e0f7c-9d2f-11e5-aa33-02f7ca55c361://plugin?dld="section:7"'; 12 | 13 | beforeEach (function() { 14 | mockErr = null; 15 | mockResult = { 16 | pluginLink : link 17 | }; 18 | }); 19 | afterAll (function() { 20 | mockErr = null; 21 | mockResult = null; 22 | }); 23 | 24 | it('deeplink getData should exist and be a function', function () { 25 | expect(typeof buildfire.deeplink.getData).toEqual('function'); 26 | }); 27 | 28 | it('deeplink getData should retrieve available links', function () { 29 | buildfire.deeplink.getData(function(err, data){ 30 | link; 31 | 32 | }); 33 | }); 34 | }); 35 | 36 | }); -------------------------------------------------------------------------------- /test/device.spec.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zain on 12/12/15. 3 | */ 4 | 5 | var mockErr, mockResult; 6 | 7 | describe('buildfire.device', function () { 8 | 9 | describe('buildfire.device.calender.addEvent', function () { 10 | 11 | beforeEach (function() { 12 | mockErr = null; 13 | mockResult = { 14 | event : 'event has been added to your calender' 15 | }; 16 | }); 17 | afterAll (function() { 18 | mockErr = null; 19 | mockResult = null; 20 | }); 21 | 22 | it('buildfire.device.calender.addEvent should be exist and be a function', function () { 23 | expect(typeof buildfire.device.calendar.addEvent).toBe('function'); 24 | }); 25 | 26 | it('buildfire.device.calender.addEvent', function () { 27 | buildfire.device.calendar.addEvent( 28 | { 29 | title: 'Dannys Birthday' 30 | , location: '1950 Main st, NYC, NY' 31 | , notes: 'Better bring a gift' 32 | , startDate: new Date(2015, 10, 20, 8, 0, 0) 33 | , endDate: new Date(2015, 10, 20, 10, 0, 0) 34 | , options: { 35 | firstReminderMinutes: 120 36 | , secondReminderMinutes: 5 37 | , recurrence: 'yearly' 38 | , recurrenceEndDate: new Date(2025, 6, 1, 0, 0, 0, 0, 0) 39 | } 40 | }, 41 | function (err, result) { 42 | expect(err).toBeNull(); 43 | expect(result.event).toEqual('event has been added to your calender'); 44 | }); 45 | }); 46 | }); 47 | 48 | describe('buildfire.device.calender.share', function () { 49 | 50 | beforeEach (function() { 51 | mockErr = null; 52 | mockResult = { 53 | data : true 54 | }; 55 | }); 56 | afterAll (function() { 57 | mockErr = null; 58 | mockResult = null; 59 | }); 60 | 61 | it('buildfire.device.calender.share', function () { 62 | buildfire.device.share({ 63 | subject:'my message title', 64 | text:'my message text', 65 | image: 'http://myImageUrl', 66 | link: 'http://anyLink' 67 | }, function (err, result) { 68 | expect(err).toBeNull(); 69 | expect(result.data).toEqual(true); 70 | }); 71 | }); 72 | }); 73 | }); -------------------------------------------------------------------------------- /test/fnTests.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by danielhindi on 1/25/16. 3 | */ 4 | 5 | var phantom = require('phantom'); 6 | 7 | module.exports = { 8 | run: function(port,callback){ 9 | phantom.create(function (ph) { 10 | 11 | console.log('create page'); 12 | 13 | ph.createPage(function (page) { 14 | console.log('set url'); 15 | 16 | var url ='http://localhost:' + port + '/pluginTester/#/plugin/testPlugin'; 17 | 18 | var failed = false; 19 | page.onConsoleMessage(function(msg) { 20 | console.log(msg); 21 | 22 | if(/[0-9]+[\s]+failures/.test(msg)) { 23 | failed = true; 24 | } 25 | if(/Run all tests [\S+]+/.test(msg)) { 26 | var exit_code = 0; 27 | if(failed) 28 | exit_code = 1; 29 | 30 | callback(exit_code); 31 | ph.exit(); 32 | } 33 | }); 34 | 35 | console.log('open page'); 36 | 37 | page.open(url, function (status) { 38 | console.log(url , ' opened? ', status); 39 | }); 40 | }); 41 | }); 42 | } 43 | }; -------------------------------------------------------------------------------- /test/ftest/actionItems.spec.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zain on 12/12/15. 3 | */ 4 | 5 | var expect = chai.expect; 6 | 7 | describe('buildfire.actionItems', function () { 8 | describe('buildfire.actionItems showDialog', function () { 9 | it('buildfire.actionItems.showDialog should exist and be a function', function () { 10 | expect(buildfire.actionItems.showDialog).to.a('function'); 11 | }); 12 | }); 13 | 14 | describe('buildfire.actionItems execute', function () { 15 | it('buildfire.actionItems.execute should exist and be a function', function () { 16 | expect(buildfire.actionItems.execute).to.a('function'); 17 | }); 18 | }); 19 | 20 | describe('buildfire.actionItems list', function () { 21 | it('buildfire.actionItems.list should exist and be a function', function () { 22 | expect(buildfire.actionItems.list).to.a('function'); 23 | }); 24 | }); 25 | 26 | describe('buildfire.actionItems create', function () { 27 | it('buildfire.actionItems.list should exist and be a function', function () { 28 | expect(buildfire.actionItems.create).to.a('function'); 29 | }); 30 | 31 | it('buildfire.actionItems.create', function () { 32 | var item = buildfire.actionItems.create('linkToWeb','','buildfire'); 33 | expect(item).to.an('object'); 34 | expect(item).to.have.property('action','linkToWeb'); 35 | }); 36 | 37 | }); 38 | }); -------------------------------------------------------------------------------- /test/ftest/deeplink.spec.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zain on 12/27/15. 3 | */ 4 | 5 | var expect = chai.expect; 6 | describe('buildfire.deeplink', function () { 7 | describe('deeplink getData', function () { 8 | it('deeplink getData should exist and be a function', function () { 9 | expect(buildfire.deeplink.getData).to.a('function'); 10 | }); 11 | }); 12 | 13 | }); -------------------------------------------------------------------------------- /test/ftest/device.spec.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zain on 12/12/15. 3 | */ 4 | 5 | var expect = chai.expect; 6 | 7 | describe('buildfire.device', function () { 8 | 9 | describe('buildfire.device.calender.addEvent', function () { 10 | it('buildfire.device.calender.addEvent should be exist and be a function', function () { 11 | expect(buildfire.device.calendar.addEvent).to.a('function'); 12 | }); 13 | 14 | it('buildfire.device..calender.share', function (done) { 15 | buildfire.device.share({ 16 | subject:'my message title', 17 | text:'my message text', 18 | image: 'http://myImageUrl', 19 | link: 'http://anyLink' 20 | }, function (err,result) { 21 | expect(err).to.null; 22 | done(); 23 | }); 24 | }); 25 | }); 26 | }); -------------------------------------------------------------------------------- /test/ftest/geo.spec.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zain on 12/12/15. 3 | */ 4 | 5 | var expect = chai.expect; 6 | 7 | describe('buildfire.geo', function () { 8 | 9 | describe('buildfire.geo.getCurrentPosition', function () { 10 | it('buildfire.geo.getCurrentPosition should be exist and be a function', function () { 11 | expect(buildfire.geo.getCurrentPosition).to.a('function'); 12 | }); 13 | }); 14 | 15 | describe('buildfire.geo.watchPosition', function () { 16 | it('buildfire.geo.watchPosition should be exist and be a function', function () { 17 | expect(buildfire.geo.watchPosition).to.a('function'); 18 | }); 19 | }); 20 | 21 | describe('buildfire.geo.clearWatch', function () { 22 | it('buildfire.geo.clearWatch should be exist and be a function', function () { 23 | expect(buildfire.geo.clearWatch).to.a('function'); 24 | }); 25 | 26 | 27 | it('buildfire.geo.clearWatch to stop watching the device position ', function (done) { 28 | var watchId; 29 | buildfire.geo.watchPosition(null, function (err,position) { 30 | watchId = position.watchid; 31 | }); 32 | buildfire.geo.clearWatch(watchId, function () { 33 | expect(watchId).to.not.exist; 34 | done(); 35 | }); 36 | 37 | }); 38 | }); 39 | }); -------------------------------------------------------------------------------- /test/ftest/history.spec.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zain on 12/12/15. 3 | */ 4 | 5 | var expect = chai.expect; 6 | 7 | describe('buildfire.history', function () { 8 | 9 | describe('buildfire.history push', function () { 10 | it('buildfire.history.push should exist and be a function', function () { 11 | expect(buildfire.history.push).to.a('function'); 12 | }); 13 | }); 14 | 15 | describe('buildfire.history pop', function () { 16 | it('buildfire.history.pop should exist and be a function', function () { 17 | expect(buildfire.history.pop).to.a('function'); 18 | }); 19 | }); 20 | 21 | describe('buildfire.history get', function () { 22 | it('buildfire.history.get should exist and be a function', function () { 23 | expect(buildfire.history.get).to.a('function'); 24 | }); 25 | 26 | it('buildfire.history.get should retrieve history ', function (done) { 27 | buildfire.history.get({ pluginBreadcrumbsOnly: true }, function(err, result) { 28 | expect(err).to.null; 29 | done(); 30 | }); 31 | }); 32 | }); 33 | 34 | describe('buildfire.history onPop', function () { 35 | it('buildfire.history.onPop should exist and be a function', function () { 36 | expect(buildfire.history.onPop).to.a('function'); 37 | }); 38 | 39 | it('buildfire.history.onPop should retrieve the passed object ', function (done) { 40 | 41 | buildfire.history.onPop(function(result) { 42 | expect(result).to.an('object'); 43 | expect(result).to.have.property('home','home'); 44 | done(); 45 | }); 46 | 47 | buildfire.history.triggerOnPop({home:'home'}); 48 | }); 49 | }); 50 | }); 51 | -------------------------------------------------------------------------------- /test/ftest/imageLib.spec.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zain on 12/12/15. 3 | */ 4 | 5 | var expect = chai.expect; 6 | 7 | describe('buildfire.imageLib', function () { 8 | 9 | describe('buildfire.imageLib resizeImage', function () { 10 | it('buildfire.imageLib.resizeImage should exist and be a function', function () { 11 | expect(buildfire.imageLib.resizeImage).to.a('function'); 12 | }); 13 | 14 | it('buildfire.imageLib.resizeImage should return resized image url ', function () { 15 | var newUrl = buildfire.imageLib.resizeImage('https://www.google.com/images/srpr/logo11w.png', {width:100,height:150}); 16 | expect(newUrl).to.equal('https://alnnibitpo.cloudimg.io/v7/https://www.google.com/images/srpr/logo11w.png?func=bound&width=100&height=150'); 17 | }); 18 | }); 19 | 20 | describe('buildfire.imageLib cropImage', function () { 21 | it('buildfire.imageLib.cropImage should exist and be a function', function () { 22 | expect(buildfire.imageLib.cropImage).to.a('function'); 23 | }); 24 | 25 | it('buildfire.imageLib.cropImage should return cropped image url ', function () { 26 | var newUrl = buildfire.imageLib.cropImage('https://www.google.com/images/srpr/logo11w.png', {width:100,height:150}); 27 | expect(newUrl).to.equal('https://alnnibitpo.cloudimg.io/v7/https://www.google.com/images/srpr/logo11w.png?func=crop&width=100&height=150'); 28 | }); 29 | }); 30 | }); 31 | -------------------------------------------------------------------------------- /test/ftest/messaging.spec.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zain on 12/12/15. 3 | */ 4 | 5 | var expect = chai.expect; 6 | describe('buildfire.messaging', function () { 7 | 8 | describe('buildfire.messaging.sendMessageToWidget', function () { 9 | it('buildfire.messaging.sendMessageToWidget should exist and be a function', function () { 10 | expect(buildfire.messaging.sendMessageToWidget).to.a('function'); 11 | }); 12 | }); 13 | 14 | describe('buildfire.messaging.sendMessageToControl', function () { 15 | it('buildfire.messaging.sendMessageToControl should exist and be a function', function () { 16 | expect(buildfire.messaging.sendMessageToControl).to.a('function'); 17 | }); 18 | }); 19 | }); -------------------------------------------------------------------------------- /test/ftest/navigation.spec.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zain on 09/12/15. 3 | */ 4 | 5 | var expect = chai.expect; 6 | 7 | describe('buildfire.navigation', function () { 8 | describe('buildfire.navigation.openWindow', function () { 9 | it('buildfire.navigateTo should exist and be a function', function () { 10 | expect(buildfire.navigation.navigateTo).to.a('function'); 11 | }); 12 | }); 13 | describe('buildfire.navigation.openWindow', function () { 14 | it('buildfire.navigateHome should exist and be a function', function () { 15 | expect(buildfire.navigation.navigateHome).to.a('function'); 16 | }); 17 | }); 18 | describe('buildfire.navigation.openWindow', function () { 19 | it('buildfire.openWindow should exist and be a function', function () { 20 | expect(buildfire.navigation.openWindow).to.a('function'); 21 | }); 22 | }); 23 | 24 | describe('buildfire.navigation.scrollTop', function () { 25 | it('buildfire.scrollTop should exist and be a function', function () { 26 | expect(buildfire.navigation.scrollTop).to.a('function'); 27 | }); 28 | }); 29 | 30 | describe('buildfire.navigation.goBack', function () { 31 | it('buildfire.goBack should exist and be a function', function () { 32 | expect(buildfire.navigation.goBack).to.a('function'); 33 | }); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /test/ftest/pluginInstance.spec.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zain on 12/27/15. 3 | */ 4 | var expect = chai.expect; 5 | describe('buildfire.pluginInstance', function () { 6 | describe('pluginInstance showDialog', function () { 7 | it('pluginInstance showDialog should exist and be a function', function () { 8 | expect(buildfire.pluginInstance.showDialog).to.a('function'); 9 | }); 10 | }); 11 | 12 | describe('pluginInstance get', function () { 13 | it('pluginInstance get should exist and be a function', function () { 14 | expect(buildfire.pluginInstance.get).to.a('function'); 15 | }); 16 | }); 17 | }); 18 | 19 | -------------------------------------------------------------------------------- /test/messaging.spec.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zain on 12/12/15. 3 | */ 4 | 5 | describe('buildfire.messaging', function () { 6 | 7 | describe('buildfire.messaging.sendMessageToWidget', function () { 8 | beforeEach( function () { 9 | spyOn(buildfire.messaging, 'sendMessageToWidget'); 10 | 11 | buildfire.messaging.sendMessageToWidget({name:'buildfire'}); 12 | }); 13 | 14 | it('buildfire.messaging.sendMessageToWidget should exist and be a function', function () { 15 | expect(typeof buildfire.messaging.sendMessageToWidget).toEqual('function'); 16 | }); 17 | 18 | it('buildfire.messaging.sendMessageToWidget should send message to widget', function () { 19 | expect(buildfire.messaging.sendMessageToWidget).toHaveBeenCalledWith({name:'buildfire'}); 20 | }); 21 | }); 22 | 23 | describe('buildfire.messaging.sendMessageToControl', function () { 24 | beforeEach( function () { 25 | spyOn(buildfire.messaging, 'sendMessageToControl'); 26 | 27 | buildfire.messaging.sendMessageToControl({name:'buildfire'}); 28 | }); 29 | 30 | it('buildfire.messaging.sendMessageToControl should exist and be a function', function () { 31 | expect(typeof buildfire.messaging.sendMessageToControl).toEqual('function'); 32 | }); 33 | 34 | it('buildfire.messaging.sendMessageToControl should send message to control', function () { 35 | expect(buildfire.messaging.sendMessageToControl).toHaveBeenCalledWith({name:'buildfire'}); 36 | }); 37 | }); 38 | 39 | describe('buildfire.messaging.onReceivedMessage', function () { 40 | it('buildfire.messaging.onReceivedMessage should exist and be a function', function () { 41 | expect(typeof buildfire.messaging.onReceivedMessage).toEqual('function'); 42 | }); 43 | }); 44 | }); -------------------------------------------------------------------------------- /test/parentPost.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zain on 12/28/15. 3 | */ 4 | 5 | buildfire._parentPost = function (packet) { 6 | var replyPacket = new Packet(packet.id, packet.cmd, mockResult); 7 | replyPacket.error = mockErr; 8 | buildfire._postMessageHandler({ 9 | id: packet.id, 10 | data: replyPacket, 11 | source: null 12 | }); 13 | }; 14 | -------------------------------------------------------------------------------- /test/pluginInstance.spec.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by zain on 12/27/15. 3 | */ 4 | 5 | describe('buildfire.pluginInstance', function () { 6 | describe('pluginInstance showDialog', function () { 7 | beforeEach( function () { 8 | spyOn(buildfire.pluginInstance, 'showDialog'); 9 | 10 | buildfire.pluginInstance.showDialog({ 11 | prop1:'' 12 | }); 13 | }); 14 | 15 | it('pluginInstance showDialog should exist and be a function', function () { 16 | expect(typeof buildfire.pluginInstance.showDialog).toEqual('function'); 17 | }); 18 | 19 | it('pluginInstance showDialog', function () { 20 | expect(buildfire.pluginInstance.showDialog).toHaveBeenCalled(); 21 | }); 22 | }); 23 | 24 | describe('pluginInstance get', function () { 25 | beforeEach( function () { 26 | spyOn(buildfire.pluginInstance, 'get'); 27 | 28 | buildfire.pluginInstance.get(['123','321']); 29 | }); 30 | 31 | it('pluginInstance get should exist and be a function', function () { 32 | expect(typeof buildfire.pluginInstance.get).toEqual('function'); 33 | }); 34 | 35 | it('pluginInstance get', function () { 36 | expect(buildfire.pluginInstance.get).toHaveBeenCalledWith(['123','321']); 37 | }); 38 | }); 39 | 40 | 41 | describe('pluginInstance search', function () { 42 | beforeEach( function () { 43 | spyOn(buildfire.pluginInstance, 'search'); 44 | 45 | buildfire.pluginInstance.search({}); 46 | }); 47 | 48 | it('pluginInstance search should exist and be a function', function () { 49 | expect(typeof buildfire.pluginInstance.search).toEqual('function'); 50 | }); 51 | 52 | it('pluginInstance search', function () { 53 | expect(buildfire.pluginInstance.search).toHaveBeenCalledWith({}); 54 | }); 55 | }); 56 | }); 57 | 58 | -------------------------------------------------------------------------------- /test/server.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by danielhindi on 1/25/16. 3 | */ 4 | 5 | 6 | var fnTests = require('./fnTests.js'); 7 | 8 | /// create http server ////////////////////////////////////////////////////// 9 | var express = require('express'); 10 | var http = require('http'); 11 | 12 | var app = express(); 13 | app.set('port', process.env.PORT || 8888); 14 | 15 | 16 | var bodyParser = require('body-parser'); 17 | app.use(bodyParser.json()); 18 | app.use(bodyParser.urlencoded({ extended: true })); 19 | 20 | 21 | 22 | /// Expose static content ///////////////////////////////////////////////////////////////// 23 | app.use('/',express.static(__dirname + '/../')); 24 | 25 | 26 | /// Run server ///////////////////////////////////////////////////////////////// 27 | http.createServer(app).listen(app.get('port'), function () { 28 | console.log('server started localhost:',app.get('port')); 29 | console.log('start running tests' ); 30 | 31 | fnTests.run(app.get('port'), function(exit_code) { 32 | process.exit(exit_code); 33 | }); 34 | }); 35 | 36 | --------------------------------------------------------------------------------