rademade_admin 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +34 -0
- data/app/assets/fonts/rademade_admin/glyphicons-halflings-regular.eot +0 -0
- data/app/assets/fonts/rademade_admin/glyphicons-halflings-regular.svg +228 -0
- data/app/assets/fonts/rademade_admin/glyphicons-halflings-regular.ttf +0 -0
- data/app/assets/fonts/rademade_admin/glyphicons-halflings-regular.woff +0 -0
- data/app/assets/images/rademade_admin/backgrounds/back-blue.jpg +0 -0
- data/app/assets/images/rademade_admin/backgrounds/back-green.jpg +0 -0
- data/app/assets/images/rademade_admin/backgrounds/back-orange.png +0 -0
- data/app/assets/images/rademade_admin/backgrounds/blueish.jpg +0 -0
- data/app/assets/images/rademade_admin/backgrounds/select-bg.png +0 -0
- data/app/assets/images/rademade_admin/datatables/back_disabled.png +0 -0
- data/app/assets/images/rademade_admin/datatables/back_enabled.png +0 -0
- data/app/assets/images/rademade_admin/datatables/back_enabled_hover.png +0 -0
- data/app/assets/images/rademade_admin/datatables/forward_disabled.png +0 -0
- data/app/assets/images/rademade_admin/datatables/forward_enabled.png +0 -0
- data/app/assets/images/rademade_admin/datatables/forward_enabled_hover.png +0 -0
- data/app/assets/images/rademade_admin/datatables/sort_asc.png +0 -0
- data/app/assets/images/rademade_admin/datatables/sort_asc_disabled.png +0 -0
- data/app/assets/images/rademade_admin/datatables/sort_both.png +0 -0
- data/app/assets/images/rademade_admin/datatables/sort_desc.png +0 -0
- data/app/assets/images/rademade_admin/datatables/sort_desc_disabled.png +0 -0
- data/app/assets/images/rademade_admin/icons/btn-attach.png +0 -0
- data/app/assets/images/rademade_admin/icons/btn-setting.png +0 -0
- data/app/assets/images/rademade_admin/icons/btn-shuffle.png +0 -0
- data/app/assets/images/rademade_admin/icons/btn-tool.png +0 -0
- data/app/assets/images/rademade_admin/icons/buble.png +0 -0
- data/app/assets/images/rademade_admin/icons/glyphicons-halflings-white.png +0 -0
- data/app/assets/images/rademade_admin/icons/glyphicons-halflings.png +0 -0
- data/app/assets/images/rademade_admin/icons/ico-arrow-black.png +0 -0
- data/app/assets/images/rademade_admin/icons/ico-gallery-edit.png +0 -0
- data/app/assets/images/rademade_admin/icons/ico-gallery-trash.png +0 -0
- data/app/assets/images/rademade_admin/icons/ico-mail.png +0 -0
- data/app/assets/images/rademade_admin/icons/ico-phone.png +0 -0
- data/app/assets/images/rademade_admin/icons/ico-table-delete.png +0 -0
- data/app/assets/images/rademade_admin/icons/ico-table-edit.png +0 -0
- data/app/assets/images/rademade_admin/icons/ico-table-new.png +0 -0
- data/app/assets/images/rademade_admin/icons/lens.png +0 -0
- data/app/assets/images/rademade_admin/icons/skin-nav-bullets.png +0 -0
- data/app/assets/images/rademade_admin/icons/table-icons.png +0 -0
- data/app/assets/images/rademade_admin/icons/table-img.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/animated-overlay.gif +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/slider-handler.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/slider-handler2.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-bg_flat_10_000000_40x100.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-icons_222222_256x240.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-icons_228ef1_256x240.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-icons_ef8c08_256x240.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-icons_ffd27a_256x240.png +0 -0
- data/app/assets/images/rademade_admin/jquery-ui/ui-icons_ffffff_256x240.png +0 -0
- data/app/assets/images/rademade_admin/logos/logo-white.png +0 -0
- data/app/assets/images/rademade_admin/logos/logo.png +0 -0
- data/app/assets/images/rademade_admin/notifier-loader-clean.gif +0 -0
- data/app/assets/images/rademade_admin/notifier-loader-plastic.gif +0 -0
- data/app/assets/images/rademade_admin/placeholders/new-gallery-img.png +0 -0
- data/app/assets/images/rademade_admin/placeholders/no-img-gallery.png +0 -0
- data/app/assets/images/rademade_admin/select2/select2.png +0 -0
- data/app/assets/images/rademade_admin/select2/select2x2.png +0 -0
- data/app/assets/images/rademade_admin/select2/spinner.gif +0 -0
- data/app/assets/images/rademade_admin/uniform/bg-input-focus.png +0 -0
- data/app/assets/images/rademade_admin/uniform/bg-input.png +0 -0
- data/app/assets/images/rademade_admin/uniform/sprite.png +0 -0
- data/app/assets/javascripts/rademade_admin.coffee +14 -0
- data/app/assets/javascripts/rademade_admin/app/app.coffee +1 -0
- data/app/assets/javascripts/rademade_admin/app/common/dnd-sort.coffee +42 -0
- data/app/assets/javascripts/rademade_admin/app/common/pagination.coffee +6 -0
- data/app/assets/javascripts/rademade_admin/app/common/related-index.coffee +54 -0
- data/app/assets/javascripts/rademade_admin/app/common/relation-list.coffee +109 -0
- data/app/assets/javascripts/rademade_admin/app/common/sort-list.coffee +47 -0
- data/app/assets/javascripts/rademade_admin/app/common/uploader.coffee +53 -0
- data/app/assets/javascripts/rademade_admin/app/form-popup/collection.coffee +20 -0
- data/app/assets/javascripts/rademade_admin/app/form-popup/initializer.coffee +43 -0
- data/app/assets/javascripts/rademade_admin/app/form-popup/model.coffee +4 -0
- data/app/assets/javascripts/rademade_admin/app/form-popup/view.coffee +57 -0
- data/app/assets/javascripts/rademade_admin/app/forms/insert.coffee +7 -0
- data/app/assets/javascripts/rademade_admin/app/forms/login.coffee +4 -0
- data/app/assets/javascripts/rademade_admin/app/forms/remove.coffee +6 -0
- data/app/assets/javascripts/rademade_admin/app/notifier/initialize.js +31 -0
- data/app/assets/javascripts/rademade_admin/detail_admin/theme.js +56 -0
- data/app/assets/javascripts/rademade_admin/form/form-ajax-submit.coffee +153 -0
- data/app/assets/javascripts/rademade_admin/form/library/jquery.form-serialize.js +54 -0
- data/app/assets/javascripts/rademade_admin/form/library/jquery.form.js +1121 -0
- data/app/assets/javascripts/rademade_admin/form/library/jquery.formrestrict.js +27 -0
- data/app/assets/javascripts/rademade_admin/form/library/jquery.validate.js +1231 -0
- data/app/assets/javascripts/rademade_admin/form/library/jquery.validate.messages_ru.js +27 -0
- data/app/assets/javascripts/rademade_admin/library/backbone.js +1581 -0
- data/app/assets/javascripts/rademade_admin/library/bootstrap/bootstrap.datepicker.js +989 -0
- data/app/assets/javascripts/rademade_admin/library/bootstrap/bootstrap.js +1992 -0
- data/app/assets/javascripts/rademade_admin/library/ckeditor/config.js +12 -0
- data/app/assets/javascripts/rademade_admin/library/jquery/jquery-ui-1.10.4.custom.min.js +6 -0
- data/app/assets/javascripts/rademade_admin/library/jquery/jquery.dataTables.js +12099 -0
- data/app/assets/javascripts/rademade_admin/library/jquery/jquery.flot.js +2960 -0
- data/app/assets/javascripts/rademade_admin/library/jquery/jquery.flot.resize.js +60 -0
- data/app/assets/javascripts/rademade_admin/library/jquery/jquery.flot.stack.js +188 -0
- data/app/assets/javascripts/rademade_admin/library/jquery/jquery.knob.js +661 -0
- data/app/assets/javascripts/rademade_admin/library/jquery/jquery.tablednd.js +1 -0
- data/app/assets/javascripts/rademade_admin/library/jquery/jquery.uniform.min.js +1 -0
- data/app/assets/javascripts/rademade_admin/library/notifier.custom.js +431 -0
- data/app/assets/javascripts/rademade_admin/library/notifier.custom.min.js +15 -0
- data/app/assets/javascripts/rademade_admin/library/underscore.js +1276 -0
- data/app/assets/javascripts/rademade_admin/library/wysihtml5-0.3.0.js +9463 -0
- data/app/assets/stylesheets/rademade_admin.css +14 -0
- data/app/assets/stylesheets/rademade_admin/base.scss.erb +23 -0
- data/app/assets/stylesheets/rademade_admin/bootstrap/bootstrap-overrides.css.erb +341 -0
- data/app/assets/stylesheets/rademade_admin/bootstrap/bootstrap.css.erb +5911 -0
- data/app/assets/stylesheets/rademade_admin/bootstrap/main.scss.erb +78 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/chart-showcase.scss.erb +33 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/datatables.scss.erb +3 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/elements.scss.erb +665 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/error.scss.erb +19 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/form-showcase.scss.erb +87 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/form-wizard.scss.erb +261 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/gallery.scss.erb +106 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/grids.scss.erb +21 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/icons.scss.erb +115 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/index.scss.erb +290 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/layout.scss.erb +523 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/new-user.scss.erb +49 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/personal-info.scss.erb +144 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/popup.scss.erb +3 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/signin.scss.erb +128 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/tables.scss.erb +195 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/ui-elements.scss.erb +177 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/user-list.scss.erb +112 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/user-profile.scss.erb +169 -0
- data/app/assets/stylesheets/rademade_admin/detail_admin/web-app-icons.scss.erb +25 -0
- data/app/assets/stylesheets/rademade_admin/edit.css +7 -0
- data/app/assets/stylesheets/rademade_admin/file-upload.scss.erb +12 -0
- data/app/assets/stylesheets/rademade_admin/lib/bootstrap.datepicker.css.erb +302 -0
- data/app/assets/stylesheets/rademade_admin/lib/jquery-ui-1.10.2.custom.css.erb +544 -0
- data/app/assets/stylesheets/rademade_admin/lib/morris.css.erb +2 -0
- data/app/assets/stylesheets/rademade_admin/lib/select2.css.erb +513 -0
- data/app/assets/stylesheets/rademade_admin/lib/uniform.default.css.erb +366 -0
- data/app/assets/stylesheets/rademade_admin/notifier.custom.css.erb +661 -0
- data/app/assets/stylesheets/rademade_admin/scaffolds.scss.erb +32 -0
- data/app/controllers/rademade_admin/abstract_controller.rb +24 -0
- data/app/controllers/rademade_admin/admin_users_controller.rb +16 -0
- data/app/controllers/rademade_admin/application_controller.rb +7 -0
- data/app/controllers/rademade_admin/dashboard_controller.rb +16 -0
- data/app/controllers/rademade_admin/model_controller.rb +122 -0
- data/app/controllers/rademade_admin/sessions_controller.rb +22 -0
- data/app/helpers/rademade_admin/field_helper.rb +27 -0
- data/app/helpers/rademade_admin/form_helper.rb +63 -0
- data/app/helpers/rademade_admin/menu_helper.rb +45 -0
- data/app/helpers/rademade_admin/name_helper.rb +17 -0
- data/app/helpers/rademade_admin/upload_preview_helper.rb +59 -0
- data/app/helpers/rademade_admin/uri_helper.rb +104 -0
- data/app/inputs/rademade_admin/admin_file_input.rb +70 -0
- data/app/inputs/rademade_admin/admin_select_input.rb +81 -0
- data/app/inputs/rademade_admin/admin_textarea_input.rb +5 -0
- data/app/inputs/rademade_admin/boolean_input.rb +13 -0
- data/app/models/rademade_admin/ability.rb +39 -0
- data/app/models/rademade_admin/user.rb +6 -0
- data/app/serializers/autocomplete_serializer.rb +46 -0
- data/app/services/form_builder.rb +3 -0
- data/app/services/loader_service.rb +7 -0
- data/app/services/login.rb +18 -0
- data/app/services/login/error.rb +17 -0
- data/app/services/model_controller/instance_options.rb +38 -0
- data/app/services/model_controller/linker.rb +49 -0
- data/app/services/model_controller/model_options.rb +39 -0
- data/app/services/model_controller/notifier.rb +40 -0
- data/app/services/model_controller/templates.rb +27 -0
- data/app/services/saver.rb +69 -0
- data/app/services/search/conditions/abstract.rb +53 -0
- data/app/services/search/conditions/autocomplete.rb +44 -0
- data/app/services/search/conditions/list.rb +35 -0
- data/app/services/search/query_adapter/abstract.rb +54 -0
- data/app/services/search/query_adapter/active_record.rb +33 -0
- data/app/services/search/query_adapter/mongoid.rb +33 -0
- data/app/services/search/searcher.rb +19 -0
- data/app/services/sortable_service.rb +37 -0
- data/app/services/video_service.rb +22 -0
- data/app/views/layouts/rademade_admin.html.erb +13 -0
- data/app/views/rademade_admin/_blocks/_form_control.html.erb +5 -0
- data/app/views/rademade_admin/_blocks/_header.html.erb +30 -0
- data/app/views/rademade_admin/_blocks/_menu.html.erb +41 -0
- data/app/views/rademade_admin/_blocks/_pagination.html.erb +18 -0
- data/app/views/rademade_admin/_blocks/_sub_menu.html.erb +19 -0
- data/app/views/rademade_admin/_blocks/sub_menu/_link.html.erb +5 -0
- data/app/views/rademade_admin/_layouts/inner.html.erb +37 -0
- data/app/views/rademade_admin/_layouts/inner/form.html.erb +15 -0
- data/app/views/rademade_admin/_layouts/inner/index_table.html.erb +59 -0
- data/app/views/rademade_admin/_layouts/inner/related_index_table.html.erb +55 -0
- data/app/views/rademade_admin/abstract/_form.html.erb +10 -0
- data/app/views/rademade_admin/abstract/edit.html.erb +9 -0
- data/app/views/rademade_admin/abstract/form.html.erb +1 -0
- data/app/views/rademade_admin/abstract/index.html.erb +77 -0
- data/app/views/rademade_admin/abstract/new.html.erb +9 -0
- data/app/views/rademade_admin/abstract/related_index.html.erb +78 -0
- data/app/views/rademade_admin/dashboard/index.html.erb +9 -0
- data/app/views/rademade_admin/dashboard/login.html.erb +31 -0
- data/config/initializers/devise.rb +250 -0
- data/config/initializers/routes.rb +3 -0
- data/config/locales/devise.en.yml +59 -0
- data/config/routes.rb +17 -0
- data/lib/rademade_admin.rb +26 -0
- data/lib/rademade_admin/configuration.rb +17 -0
- data/lib/rademade_admin/engine.rb +22 -0
- data/lib/rademade_admin/file_info_formatter.rb +12 -0
- data/lib/rademade_admin/hrml_buffer.rb +14 -0
- data/lib/rademade_admin/model/configuration.rb +52 -0
- data/lib/rademade_admin/model/configuration/fields.rb +33 -0
- data/lib/rademade_admin/model/data_adapter.rb +59 -0
- data/lib/rademade_admin/model/data_adapter/active_record.rb +53 -0
- data/lib/rademade_admin/model/data_adapter/mongoid.rb +49 -0
- data/lib/rademade_admin/model/graph.rb +36 -0
- data/lib/rademade_admin/model/info.rb +106 -0
- data/lib/rademade_admin/model/reflection.rb +31 -0
- data/lib/rademade_admin/model/reflection/data.rb +47 -0
- data/lib/rademade_admin/model/reflection/uploader.rb +18 -0
- data/lib/rademade_admin/routing.rb +3 -0
- data/lib/rademade_admin/routing/mapper.rb +42 -0
- data/lib/rademade_admin/routing/resource.rb +6 -0
- data/lib/rademade_admin/sortable.rb +12 -0
- data/lib/rademade_admin/uploader/photo.rb +13 -0
- data/lib/rademade_admin/uploader/video.rb +11 -0
- data/lib/rademade_admin/user.rb +16 -0
- data/lib/rademade_admin/version.rb +3 -0
- data/lib/tasks/rademade_admin_tasks.rake +4 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/controllers/rademade_admin/posts_controller.rb +9 -0
- data/test/dummy/app/controllers/rademade_admin/users_controller.rb +14 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/models/post.rb +9 -0
- data/test/dummy/app/models/user.rb +7 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +29 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +29 -0
- data/test/dummy/config/environments/production.rb +80 -0
- data/test/dummy/config/environments/test.rb +36 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/rademade_admin.rb +3 -0
- data/test/dummy/config/initializers/secret_token.rb +12 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/mongoid.yml +6 -0
- data/test/dummy/config/routes.rb +8 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/public/404.html +58 -0
- data/test/dummy/public/422.html +58 -0
- data/test/dummy/public/500.html +57 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/rademade_admin_test.rb +7 -0
- data/test/test_helper.rb +15 -0
- metadata +691 -0
@@ -0,0 +1 @@
|
|
1
|
+
var hasTouch='ontouchstart'in document.documentElement,startEvent=hasTouch?'touchstart':'mousedown',moveEvent=hasTouch?'touchmove':'mousemove',endEvent=hasTouch?'touchend':'mouseup';if(hasTouch){$.each("touchstart touchmove touchend".split(" "),function(i,name){jQuery.event.fixHooks[name]=jQuery.event.mouseHooks});alert("has Touch")}jQuery.tableDnD={currentTable:null,dragObject:null,mouseOffset:null,oldY:0,build:function(options){this.each(function(){this.tableDnDConfig=jQuery.extend({onDragStyle:null,onDropStyle:null,onDragClass:"tDnD_whileDrag",onDrop:null,onDragStart:null,scrollAmount:5,serializeRegexp:/[^\-]*$/,serializeParamName:null,dragHandle:null},options||{});jQuery.tableDnD.makeDraggable(this)});return this},makeDraggable:function(table){var config=table.tableDnDConfig;if(config.dragHandle){var cells=jQuery(table.tableDnDConfig.dragHandle,table);cells.each(function(){jQuery(this).bind(startEvent,function(ev){jQuery.tableDnD.initialiseDrag(jQuery(this).parents('tr')[0],table,this,ev,config);return false})})}else{var rows=jQuery("tr",table);rows.each(function(){var row=jQuery(this);if(!row.hasClass("nodrag")){row.bind(startEvent,function(ev){if(ev.target.tagName=="TD"){jQuery.tableDnD.initialiseDrag(this,table,this,ev,config);return false}}).css("cursor","move")}})}},initialiseDrag:function(dragObject,table,target,evnt,config){jQuery.tableDnD.dragObject=dragObject;jQuery.tableDnD.currentTable=table;jQuery.tableDnD.mouseOffset=jQuery.tableDnD.getMouseOffset(target,evnt);jQuery.tableDnD.originalOrder=jQuery.tableDnD.serialize();jQuery(document).bind(moveEvent,jQuery.tableDnD.mousemove).bind(endEvent,jQuery.tableDnD.mouseup);if(config.onDragStart){config.onDragStart(table,target)}},updateTables:function(){this.each(function(){if(this.tableDnDConfig){jQuery.tableDnD.makeDraggable(this)}})},mouseCoords:function(ev){if(ev.pageX||ev.pageY){return{x:ev.pageX,y:ev.pageY}}return{x:ev.clientX+document.body.scrollLeft-document.body.clientLeft,y:ev.clientY+document.body.scrollTop-document.body.clientTop}},getMouseOffset:function(target,ev){ev=ev||window.event;var docPos=this.getPosition(target);var mousePos=this.mouseCoords(ev);return{x:mousePos.x-docPos.x,y:mousePos.y-docPos.y}},getPosition:function(e){var left=0;var top=0;if(e.offsetHeight==0){e=e.firstChild}while(e.offsetParent){left+=e.offsetLeft;top+=e.offsetTop;e=e.offsetParent}left+=e.offsetLeft;top+=e.offsetTop;return{x:left,y:top}},mousemove:function(ev){if(jQuery.tableDnD.dragObject==null){return}if(ev.type=='touchmove'){event.preventDefault()}var dragObj=jQuery(jQuery.tableDnD.dragObject);var config=jQuery.tableDnD.currentTable.tableDnDConfig;var mousePos=jQuery.tableDnD.mouseCoords(ev);var y=mousePos.y-jQuery.tableDnD.mouseOffset.y;var yOffset=window.pageYOffset;if(document.all){if(typeof document.compatMode!='undefined'&&document.compatMode!='BackCompat'){yOffset=document.documentElement.scrollTop}else if(typeof document.body!='undefined'){yOffset=document.body.scrollTop}}if(mousePos.y-yOffset<config.scrollAmount){window.scrollBy(0,-config.scrollAmount)}else{var windowHeight=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:document.body.clientHeight;if(windowHeight-(mousePos.y-yOffset)<config.scrollAmount){window.scrollBy(0,config.scrollAmount)}}if(y!=jQuery.tableDnD.oldY){var movingDown=y>jQuery.tableDnD.oldY;jQuery.tableDnD.oldY=y;if(config.onDragClass){dragObj.addClass(config.onDragClass)}else{dragObj.css(config.onDragStyle)}var currentRow=jQuery.tableDnD.findDropTargetRow(dragObj,y);if(currentRow){if(movingDown&&jQuery.tableDnD.dragObject!=currentRow){jQuery.tableDnD.dragObject.parentNode.insertBefore(jQuery.tableDnD.dragObject,currentRow.nextSibling)}else if(!movingDown&&jQuery.tableDnD.dragObject!=currentRow){jQuery.tableDnD.dragObject.parentNode.insertBefore(jQuery.tableDnD.dragObject,currentRow)}}}return false},findDropTargetRow:function(draggedRow,y){var rows=jQuery.tableDnD.currentTable.rows;for(var i=0;i<rows.length;i++){var row=rows[i];var rowY=this.getPosition(row).y;var rowHeight=parseInt(row.offsetHeight)/2;if(row.offsetHeight==0){rowY=this.getPosition(row.firstChild).y;rowHeight=parseInt(row.firstChild.offsetHeight)/2}if((y>rowY-rowHeight)&&(y<(rowY+rowHeight))){if(row==draggedRow){return null}var config=jQuery.tableDnD.currentTable.tableDnDConfig;if(config.onAllowDrop){if(config.onAllowDrop(draggedRow,row)){return row}else{return null}}else{var nodrop=jQuery(row).hasClass("nodrop");if(!nodrop){return row}else{return null}}return row}}return null},mouseup:function(e){if(jQuery.tableDnD.currentTable&&jQuery.tableDnD.dragObject){jQuery(document).unbind(moveEvent,jQuery.tableDnD.mousemove).unbind(endEvent,jQuery.tableDnD.mouseup);var droppedRow=jQuery.tableDnD.dragObject;var config=jQuery.tableDnD.currentTable.tableDnDConfig;if(config.onDragClass){jQuery(droppedRow).removeClass(config.onDragClass)}else{jQuery(droppedRow).css(config.onDropStyle)}jQuery.tableDnD.dragObject=null;var newOrder=jQuery.tableDnD.serialize();if(config.onDrop&&(jQuery.tableDnD.originalOrder!=newOrder)){config.onDrop(jQuery.tableDnD.currentTable,droppedRow)}jQuery.tableDnD.currentTable=null}},serialize:function(){if(jQuery.tableDnD.currentTable){return jQuery.tableDnD.serializeTable(jQuery.tableDnD.currentTable)}else{return"Error: No Table id set, you need to set an id on your table and every row"}},serializeTable:function(table){var result="";var tableId=table.id;var rows=table.rows;for(var i=0;i<rows.length;i++){if(result.length>0)result+="&";var rowId=rows[i].id;if(rowId&&rowId&&table.tableDnDConfig&&table.tableDnDConfig.serializeRegexp){rowId=rowId.match(table.tableDnDConfig.serializeRegexp)[0]}result+=tableId+'[]='+rowId}return result},serializeTables:function(){var result="";this.each(function(){result+=jQuery.tableDnD.serializeTable(this)});return result}};jQuery.fn.extend({tableDnD:jQuery.tableDnD.build,tableDnDUpdate:jQuery.tableDnD.updateTables,tableDnDSerialize:jQuery.tableDnD.serializeTables});
|
@@ -0,0 +1 @@
|
|
1
|
+
(function(e,t){"use strict";function n(e){var t=Array.prototype.slice.call(arguments,1);return e.prop?e.prop.apply(e,t):e.attr.apply(e,t)}function s(e,t,n){var s,a;for(s in n)n.hasOwnProperty(s)&&(a=s.replace(/ |$/g,t.eventNamespace),e.bind(a,n[s]))}function a(e,t,n){s(e,n,{focus:function(){t.addClass(n.focusClass)},blur:function(){t.removeClass(n.focusClass),t.removeClass(n.activeClass)},mouseenter:function(){t.addClass(n.hoverClass)},mouseleave:function(){t.removeClass(n.hoverClass),t.removeClass(n.activeClass)},"mousedown touchbegin":function(){e.is(":disabled")||t.addClass(n.activeClass)},"mouseup touchend":function(){t.removeClass(n.activeClass)}})}function i(e,t){e.removeClass(t.hoverClass+" "+t.focusClass+" "+t.activeClass)}function r(e,t,n){n?e.addClass(t):e.removeClass(t)}function l(e,t,n){var s="checked",a=t.is(":"+s);t.prop?t.prop(s,a):a?t.attr(s,s):t.removeAttr(s),r(e,n.checkedClass,a)}function u(e,t,n){r(e,n.disabledClass,t.is(":disabled"))}function o(e,t,n){switch(n){case"after":return e.after(t),e.next();case"before":return e.before(t),e.prev();case"wrap":return e.wrap(t),e.parent()}return null}function c(t,s,a){var i,r,l;return a||(a={}),a=e.extend({bind:{},divClass:null,divWrap:"wrap",spanClass:null,spanHtml:null,spanWrap:"wrap"},a),i=e("<div />"),r=e("<span />"),s.autoHide&&t.is(":hidden")&&"none"===t.css("display")&&i.hide(),a.divClass&&i.addClass(a.divClass),s.wrapperClass&&i.addClass(s.wrapperClass),a.spanClass&&r.addClass(a.spanClass),l=n(t,"id"),s.useID&&l&&n(i,"id",s.idPrefix+"-"+l),a.spanHtml&&r.html(a.spanHtml),i=o(t,i,a.divWrap),r=o(t,r,a.spanWrap),u(i,t,s),{div:i,span:r}}function d(t,n){var s;return n.wrapperClass?(s=e("<span />").addClass(n.wrapperClass),s=o(t,s,"wrap")):null}function f(){var t,n,s,a;return a="rgb(120,2,153)",n=e('<div style="width:0;height:0;color:'+a+'">'),e("body").append(n),s=n.get(0),t=window.getComputedStyle?window.getComputedStyle(s,"").color:(s.currentStyle||s.style||{}).color,n.remove(),t.replace(/ /g,"")!==a}function p(t){return t?e("<span />").text(t).html():""}function m(){return navigator.cpuClass&&!navigator.product}function v(){return window.XMLHttpRequest!==void 0?!0:!1}function h(e){var t;return e[0].multiple?!0:(t=n(e,"size"),!t||1>=t?!1:!0)}function C(){return!1}function w(e,t){var n="none";s(e,t,{"selectstart dragstart mousedown":C}),e.css({MozUserSelect:n,msUserSelect:n,webkitUserSelect:n,userSelect:n})}function b(e,t,n){var s=e.val();""===s?s=n.fileDefaultHtml:(s=s.split(/[\/\\]+/),s=s[s.length-1]),t.text(s)}function y(e,t,n){var s,a;for(s=[],e.each(function(){var e;for(e in t)Object.prototype.hasOwnProperty.call(t,e)&&(s.push({el:this,name:e,old:this.style[e]}),this.style[e]=t[e])}),n();s.length;)a=s.pop(),a.el.style[a.name]=a.old}function g(e,t){var n;n=e.parents(),n.push(e[0]),n=n.not(":visible"),y(n,{visibility:"hidden",display:"block",position:"absolute"},t)}function k(e,t){return function(){e.unwrap().unwrap().unbind(t.eventNamespace)}}var H=!0,x=!1,A=[{match:function(e){return e.is("a, button, :submit, :reset, input[type='button']")},apply:function(e,t){var r,l,o,d,f;return l=t.submitDefaultHtml,e.is(":reset")&&(l=t.resetDefaultHtml),d=e.is("a, button")?function(){return e.html()||l}:function(){return p(n(e,"value"))||l},o=c(e,t,{divClass:t.buttonClass,spanHtml:d()}),r=o.div,a(e,r,t),f=!1,s(r,t,{"click touchend":function(){var t,s,a,i;f||e.is(":disabled")||(f=!0,e[0].dispatchEvent?(t=document.createEvent("MouseEvents"),t.initEvent("click",!0,!0),s=e[0].dispatchEvent(t),e.is("a")&&s&&(a=n(e,"target"),i=n(e,"href"),a&&"_self"!==a?window.open(i,a):document.location.href=i)):e.click(),f=!1)}}),w(r,t),{remove:function(){return r.after(e),r.remove(),e.unbind(t.eventNamespace),e},update:function(){i(r,t),u(r,e,t),e.detach(),o.span.html(d()).append(e)}}}},{match:function(e){return e.is(":checkbox")},apply:function(e,t){var n,r,o;return n=c(e,t,{divClass:t.checkboxClass}),r=n.div,o=n.span,a(e,r,t),s(e,t,{"click touchend":function(){l(o,e,t)}}),l(o,e,t),{remove:k(e,t),update:function(){i(r,t),o.removeClass(t.checkedClass),l(o,e,t),u(r,e,t)}}}},{match:function(e){return e.is(":file")},apply:function(t,r){function l(){b(t,p,r)}var d,f,p,v;return d=c(t,r,{divClass:r.fileClass,spanClass:r.fileButtonClass,spanHtml:r.fileButtonHtml,spanWrap:"after"}),f=d.div,v=d.span,p=e("<span />").html(r.fileDefaultHtml),p.addClass(r.filenameClass),p=o(t,p,"after"),n(t,"size")||n(t,"size",f.width()/10),a(t,f,r),l(),m()?s(t,r,{click:function(){t.trigger("change"),setTimeout(l,0)}}):s(t,r,{change:l}),w(p,r),w(v,r),{remove:function(){return p.remove(),v.remove(),t.unwrap().unbind(r.eventNamespace)},update:function(){i(f,r),b(t,p,r),u(f,t,r)}}}},{match:function(e){if(e.is("input")){var t=(" "+n(e,"type")+" ").toLowerCase(),s=" color date datetime datetime-local email month number password search tel text time url week ";return s.indexOf(t)>=0}return!1},apply:function(e,t){var s,i;return s=n(e,"type"),e.addClass(t.inputClass),i=d(e,t),a(e,e,t),t.inputAddTypeAsClass&&e.addClass(s),{remove:function(){e.removeClass(t.inputClass),t.inputAddTypeAsClass&&e.removeClass(s),i&&e.unwrap()},update:C}}},{match:function(e){return e.is(":radio")},apply:function(t,r){var o,d,f;return o=c(t,r,{divClass:r.radioClass}),d=o.div,f=o.span,a(t,d,r),s(t,r,{"click touchend":function(){e.uniform.update(e(':radio[name="'+n(t,"name")+'"]'))}}),l(f,t,r),{remove:k(t,r),update:function(){i(d,r),l(f,t,r),u(d,t,r)}}}},{match:function(e){return e.is("select")&&!h(e)?!0:!1},apply:function(t,n){var r,l,o,d;return n.selectAutoWidth&&g(t,function(){d=t.width()}),r=c(t,n,{divClass:n.selectClass,spanHtml:(t.find(":selected:first")||t.find("option:first")).html(),spanWrap:"before"}),l=r.div,o=r.span,n.selectAutoWidth?g(t,function(){y(e([o[0],l[0]]),{display:"block"},function(){var e;e=o.outerWidth()-o.width(),l.width(d+e),o.width(d)})}):l.addClass("fixedWidth"),a(t,l,n),s(t,n,{change:function(){o.html(t.find(":selected").html()),l.removeClass(n.activeClass)},"click touchend":function(){var e=t.find(":selected").html();o.html()!==e&&t.trigger("change")},keyup:function(){o.html(t.find(":selected").html())}}),w(o,n),{remove:function(){return o.remove(),t.unwrap().unbind(n.eventNamespace),t},update:function(){n.selectAutoWidth?(e.uniform.restore(t),t.uniform(n)):(i(l,n),o.html(t.find(":selected").html()),u(l,t,n))}}}},{match:function(e){return e.is("select")&&h(e)?!0:!1},apply:function(e,t){var n;return e.addClass(t.selectMultiClass),n=d(e,t),a(e,e,t),{remove:function(){e.removeClass(t.selectMultiClass),n&&e.unwrap()},update:C}}},{match:function(e){return e.is("textarea")},apply:function(e,t){var n;return e.addClass(t.textareaClass),n=d(e,t),a(e,e,t),{remove:function(){e.removeClass(t.textareaClass),n&&e.unwrap()},update:C}}}];m()&&!v()&&(H=!1),e.uniform={defaults:{activeClass:"active",autoHide:!0,buttonClass:"button",checkboxClass:"checker",checkedClass:"checked",disabledClass:"disabled",eventNamespace:".uniform",fileButtonClass:"action",fileButtonHtml:"Choose File",fileClass:"uploader",fileDefaultHtml:"No file selected",filenameClass:"filename",focusClass:"focus",hoverClass:"hover",idPrefix:"uniform",inputAddTypeAsClass:!0,inputClass:"uniform-input",radioClass:"radio",resetDefaultHtml:"Reset",resetSelector:!1,selectAutoWidth:!0,selectClass:"selector",selectMultiClass:"uniform-multiselect",submitDefaultHtml:"Submit",textareaClass:"uniform",useID:!0,wrapperClass:null},elements:[]},e.fn.uniform=function(t){var n=this;return t=e.extend({},e.uniform.defaults,t),x||(x=!0,f()&&(H=!1)),H?(t.resetSelector&&e(t.resetSelector).mouseup(function(){window.setTimeout(function(){e.uniform.update(n)},10)}),this.each(function(){var n,s,a,i=e(this);if(i.data("uniformed"))return e.uniform.update(i),void 0;for(n=0;A.length>n;n+=1)if(s=A[n],s.match(i,t))return a=s.apply(i,t),i.data("uniformed",a),e.uniform.elements.push(i.get(0)),void 0})):this},e.uniform.restore=e.fn.uniform.restore=function(n){n===t&&(n=e.uniform.elements),e(n).each(function(){var t,n,s=e(this);n=s.data("uniformed"),n&&(n.remove(),t=e.inArray(this,e.uniform.elements),t>=0&&e.uniform.elements.splice(t,1),s.removeData("uniformed"))})},e.uniform.update=e.fn.uniform.update=function(n){n===t&&(n=e.uniform.elements),e(n).each(function(){var t,n=e(this);t=n.data("uniformed"),t&&t.update(n,t.options)})}})(jQuery);
|
@@ -0,0 +1,431 @@
|
|
1
|
+
/*!
|
2
|
+
* Backbone.Notifier.js v0.2.5
|
3
|
+
* Copyright 2012, Eyal Weiss
|
4
|
+
* Backbone.Notifier.js may be freely distributed under the MIT license.
|
5
|
+
*/
|
6
|
+
(function ($, Backbone, _) {
|
7
|
+
var emptyFn = function () {},
|
8
|
+
Notifier = Backbone.Notifier = Backbone.Model.extend({
|
9
|
+
defaults: {
|
10
|
+
'baseCls': 'notifier',
|
11
|
+
'types': ['warning', 'error', 'info', 'success'], // available notification styles
|
12
|
+
'dialog': false, // whether display the notification with a title bar and a dialog style (sets 'hideOnClick' to false, unless defined)
|
13
|
+
'theme': 'plastic', // default theme for notifications (currently available: 'plastic' / 'clean').
|
14
|
+
'message': '', // message content
|
15
|
+
'closeBtn': false,
|
16
|
+
'title': undefined, // notification title, if defined causes the notification to be 'dialog' (unless dialog is 'false')
|
17
|
+
'hideOnClick': true, // whether to hide the notifications on mouse click
|
18
|
+
'type': null, // default notification style (null / 'warning' / 'error' / 'info' / 'success')
|
19
|
+
'cls': null, // additional css class
|
20
|
+
'ms': 10000, // milliseconds before hiding
|
21
|
+
'loader': false, // whether to display loader animation in notifactions
|
22
|
+
'destroy': false, // notification or selector of nofications to hide on show
|
23
|
+
'modal': false, // whether to dark and block the UI behind the nofication
|
24
|
+
'opacity': 1, // opacity of nofications
|
25
|
+
'offsetY': 0, // distance between the notifications and the top/bottom edge
|
26
|
+
'fadeInMs': 500, // duration (milliseconds) of notification's fade-in effect
|
27
|
+
'fadeOutMs': 500, // duration (milliseconds) of notification's fade-out effect
|
28
|
+
'position': 'top', // default notifications position ('top' / 'center' / 'bottom')
|
29
|
+
'screenOpacity': .65, // opacity of dark screen background that goes behind for modals (between 0 to 1)
|
30
|
+
'zIndex': 10000, // minimal z-index for notifications
|
31
|
+
'width': undefined, // notification's width
|
32
|
+
'modules': undefined // modules to register immediately
|
33
|
+
},
|
34
|
+
transitions: {
|
35
|
+
top: {
|
36
|
+
'in': function (el, inner, options, duration, callback) {
|
37
|
+
el.css({display: 'block', top: -1000});
|
38
|
+
el.css({top: -inner.innerHeight()})
|
39
|
+
.animate({top: options.offsetY, opacity: options.opacity}, duration, callback || emptyFn);
|
40
|
+
},
|
41
|
+
'out': function (el, inner, options, duration, callback) {
|
42
|
+
el.animate({top: -inner.innerHeight(), opacity: 0}, duration, callback || emptyFn);
|
43
|
+
}
|
44
|
+
},
|
45
|
+
center: {
|
46
|
+
'in': function (el, inner, options, duration, callback) {
|
47
|
+
el.css({top: options.offsetY - 40, display: 'block'})
|
48
|
+
.animate({ top: '50%', marginTop: -inner.innerHeight() / 2, opacity: options.opacity}, duration, callback || emptyFn);
|
49
|
+
},
|
50
|
+
'out': function (el, inner, options, duration, callback) {
|
51
|
+
el.animate({top: '0%', opacity: 0}, duration, callback || emptyFn);
|
52
|
+
}
|
53
|
+
},
|
54
|
+
bottom: {
|
55
|
+
'in': function (el, inner, options, duration, callback) {
|
56
|
+
el.css({bottom: options.offsetY - 40, top: 'auto', display: 'block'})
|
57
|
+
.animate({bottom: inner.innerHeight() + options.offsetY, opacity: options.opacity}, duration, callback || emptyFn);
|
58
|
+
},
|
59
|
+
'out': function (el, inner, options, duration, callback) {
|
60
|
+
el.animate({bottom: -inner.height(), opacity: 0}, duration, callback || emptyFn);
|
61
|
+
}
|
62
|
+
}
|
63
|
+
},
|
64
|
+
template: function (settings) { //function(settings){ ... return html; }
|
65
|
+
var strBuilder = [
|
66
|
+
'<div class="' + settings.wrapperCls + '">',
|
67
|
+
'<div class="' + settings.innerCls + '">',
|
68
|
+
(settings.title ? '<div class="' + settings.baseCls + '-title">' + settings.title + '</div>' : ''),
|
69
|
+
(settings.closeBtn ? '<button class="' + settings.baseCls + '-close" data-handler="destroy"><span>x</span></button>' : '')
|
70
|
+
];
|
71
|
+
if (settings.dialog) {
|
72
|
+
strBuilder.push(
|
73
|
+
'<div class="' + settings.baseCls + '-message">' + settings.message +
|
74
|
+
(settings.loader ? '<div class="' + settings.baseCls + '-loader"></div>' : '') +
|
75
|
+
'</div>'
|
76
|
+
);
|
77
|
+
} else {
|
78
|
+
strBuilder.push(
|
79
|
+
'<div class="' + settings.baseCls + '-message">' + settings.message + '</div>',
|
80
|
+
(settings.loader ? '<div class="' + settings.baseCls + '-loader"></div>' : '')
|
81
|
+
);
|
82
|
+
}
|
83
|
+
if (settings.buttons) {
|
84
|
+
var btnPh = $('<div />');
|
85
|
+
_.each(settings.buttons, function (btn) {
|
86
|
+
btnPh.append($('<button/>', btn));
|
87
|
+
});
|
88
|
+
strBuilder.push('<div class="' + settings.baseCls + '-btns">' + btnPh.html() + '</div>');
|
89
|
+
}
|
90
|
+
strBuilder.push('</div></div>');
|
91
|
+
return strBuilder.join('');
|
92
|
+
},
|
93
|
+
initEl: function () {
|
94
|
+
var el = this.el ? this.el : 'body',
|
95
|
+
$el = _.isObject(el) ? el : $(el);
|
96
|
+
if (!$el.length) {
|
97
|
+
return $($.proxy(this.initEl, this));
|
98
|
+
}
|
99
|
+
this.$el = $el;
|
100
|
+
this._cssPos = ($el.get(0) === document.body) ? 'fixed' : 'absolute';
|
101
|
+
($el.get(0) !== document.body) && $el.css('position', 'relative');
|
102
|
+
if (this._cssPos === 'absolute') {
|
103
|
+
$el.css('overflow', 'hidden');
|
104
|
+
}
|
105
|
+
},
|
106
|
+
initialize: function (options) {
|
107
|
+
var scope = this;
|
108
|
+
this.el = options && options.el;
|
109
|
+
this.initEl.call(this, options && options.el);
|
110
|
+
|
111
|
+
this.current = {};
|
112
|
+
scope.NotificationView = Backbone.View.extend({
|
113
|
+
defaults: scope.attributes,
|
114
|
+
on: function (eventName, handler) {
|
115
|
+
var fn = handler,
|
116
|
+
view = this;
|
117
|
+
if (_.isString(handler)) {
|
118
|
+
fn = function () {
|
119
|
+
view[handler].apply(view, arguments);
|
120
|
+
};
|
121
|
+
}
|
122
|
+
return Backbone.View.prototype.on.call(this, eventName, fn);
|
123
|
+
}
|
124
|
+
});
|
125
|
+
|
126
|
+
var notifyFn = function (type, opts) {
|
127
|
+
if (_.isString(opts)) {
|
128
|
+
opts = {message: opts};
|
129
|
+
}
|
130
|
+
var o = _.extend({}, {'type': ''}, opts);
|
131
|
+
o.type = o.type ? type + ' ' + o.type : type;
|
132
|
+
return scope.notify(o);
|
133
|
+
};
|
134
|
+
|
135
|
+
var createNotifyFn = function (type) {
|
136
|
+
scope[type] = scope[type] || function (opts) {
|
137
|
+
return notifyFn(type, opts);
|
138
|
+
};
|
139
|
+
};
|
140
|
+
|
141
|
+
_.each(scope.attributes.types, function (type) {
|
142
|
+
createNotifyFn(type);
|
143
|
+
});
|
144
|
+
|
145
|
+
if (scope.attributes) {
|
146
|
+
var initialModules = this.attributes.modules;
|
147
|
+
initialModules && $.each(initialModules, function (mName, m) {
|
148
|
+
m.name = _.isArray(initialModules) ? m.name : mName;
|
149
|
+
Notifier.regModule(m);
|
150
|
+
});
|
151
|
+
scope.attributes.modules = undefined;
|
152
|
+
}
|
153
|
+
},
|
154
|
+
calcZIndex: function () {
|
155
|
+
if (this._cssPos === 'absolute') {
|
156
|
+
return this.attributes.zIndex;
|
157
|
+
}
|
158
|
+
var z = this.attributes.zIndex + 1,
|
159
|
+
scope = this;
|
160
|
+
_.each(scope.current, function (view) {
|
161
|
+
z = view.zIndex > z ? view.zIndex : z;
|
162
|
+
});
|
163
|
+
return ++z;
|
164
|
+
},
|
165
|
+
destroyAll: function (keyFilter, valueFilter) {
|
166
|
+
var i = 0,
|
167
|
+
scope = this;
|
168
|
+
if (_.isFunction(keyFilter)) {
|
169
|
+
_.each(scope.current, function (view) {
|
170
|
+
if (keyFilter(view)) {
|
171
|
+
view.destroy.call(view);
|
172
|
+
i++;
|
173
|
+
}
|
174
|
+
});
|
175
|
+
} else if (keyFilter !== undefined) {
|
176
|
+
_.each(scope.current, function (view) {
|
177
|
+
if (view.settings[keyFilter] === valueFilter) {
|
178
|
+
view.destroy.call(view);
|
179
|
+
i++;
|
180
|
+
}
|
181
|
+
});
|
182
|
+
} else {
|
183
|
+
_.each(scope.current, function (view) {
|
184
|
+
view.destroy.call(view);
|
185
|
+
i++;
|
186
|
+
});
|
187
|
+
}
|
188
|
+
return i;
|
189
|
+
},
|
190
|
+
getWrapperCls: function (settings) {
|
191
|
+
var c = (settings.baseCls + ' ') +
|
192
|
+
(settings.type ? settings.type + ' ' : '') +
|
193
|
+
('theme-' + settings.theme + ' ') +
|
194
|
+
(settings.dialog ? 'dialog ' : '') +
|
195
|
+
('pos-' + settings.position + ' ') +
|
196
|
+
(settings.buttons ? 'with-buttons ' : '') +
|
197
|
+
(settings.loader ? 'with-loader ' : '') +
|
198
|
+
(settings.closeBtn ? 'with-close-btn ' : '');
|
199
|
+
return $.trim(c).split(' ').join(' ' + settings.baseCls + '-') +
|
200
|
+
' ' + (settings.cls || '');
|
201
|
+
},
|
202
|
+
getSettings: function (options) {
|
203
|
+
if (_.isString(options)) {
|
204
|
+
options = {message: options};
|
205
|
+
}
|
206
|
+
var settings = $.extend({}, this.attributes, options);
|
207
|
+
if (settings.title && options.dialog === undefined) {
|
208
|
+
settings.dialog = true;
|
209
|
+
}
|
210
|
+
if ((settings.modal || settings.dialog) && options.hideOnClick === undefined) {
|
211
|
+
settings.hideOnClick = false;
|
212
|
+
}
|
213
|
+
if (settings.dialog && options.ms === undefined) {
|
214
|
+
settings.ms = null;
|
215
|
+
}
|
216
|
+
if (settings.dialog && options.position === undefined) {
|
217
|
+
settings.position = 'center';
|
218
|
+
}
|
219
|
+
return settings;
|
220
|
+
},
|
221
|
+
notify: function (options) {
|
222
|
+
options = options || {};
|
223
|
+
if (options.el) {
|
224
|
+
this.el = options && options.el;
|
225
|
+
this.initEl.call(this, options && options.el);
|
226
|
+
}
|
227
|
+
var scope = this,
|
228
|
+
settings = this.getSettings(options);
|
229
|
+
if (_.isObject(settings.destroy)) {
|
230
|
+
if (settings.destroy instanceof scope.NotificationView) {
|
231
|
+
settings.destroy.destroy();
|
232
|
+
} else {
|
233
|
+
scope.destroyAll.apply(scope, _.isArray(settings.destroy) ? settings.destroy : [settings.destroy]);
|
234
|
+
}
|
235
|
+
} else if (settings.destroy === true) {
|
236
|
+
scope.destroyAll();
|
237
|
+
}
|
238
|
+
var zIndex = options.zIndex || scope.calcZIndex.call(scope);
|
239
|
+
|
240
|
+
settings.wrapperCls = scope.getWrapperCls(settings);
|
241
|
+
settings.innerCls = settings.baseCls + '-inner';
|
242
|
+
|
243
|
+
var msgEl = $(scope.template(settings)),
|
244
|
+
msgInner = msgEl.find('.' + settings.innerCls);
|
245
|
+
settings.width && msgInner.css({width: settings.width});
|
246
|
+
Notifier._modulesBinder.trigger('beforeAppendMsgEl', scope, settings, msgEl, msgInner);
|
247
|
+
msgEl.css({display: 'none', opacity: 0, position: scope._cssPos, zIndex: settings.modal ? ++zIndex : zIndex}).prependTo(scope.$el);
|
248
|
+
var msgView = new scope.NotificationView({
|
249
|
+
el: msgEl
|
250
|
+
});
|
251
|
+
msgView.settings = settings;
|
252
|
+
|
253
|
+
if (settings.buttons || msgInner.find('button').length) {
|
254
|
+
msgInner.on('click', 'button[data-handler]', function () {
|
255
|
+
var handler = $(this).data('handler'),
|
256
|
+
fn = _.isFunction(handler) ? handler : msgView[handler];
|
257
|
+
fn.apply(msgView, arguments);
|
258
|
+
});
|
259
|
+
msgInner.on('button click', function (e) {
|
260
|
+
msgView.trigger('click:' + $(e.target).data('role'));
|
261
|
+
});
|
262
|
+
}
|
263
|
+
|
264
|
+
var removeFn = msgView.destroy = function (e) {
|
265
|
+
if (_.isObject(e) && e.preventDefault) {
|
266
|
+
e.preventDefault();
|
267
|
+
e.stopPropagation();
|
268
|
+
}
|
269
|
+
msgView.trigger('beforeHide', msgView, msgEl);
|
270
|
+
settings.modal && msgView.screenEl.fadeOut(300, function () {
|
271
|
+
msgView.trigger('screenHide', msgView, msgEl);
|
272
|
+
msgView.screenEl.remove();
|
273
|
+
});
|
274
|
+
|
275
|
+
Notifier._modulesBinder.trigger('beforeHideMsgEl', scope, settings, msgEl, msgInner, msgView);
|
276
|
+
var outAnimFn = $.isFunction(settings.out) ? settings.out : scope.transitions[settings.position].out;
|
277
|
+
outAnimFn.call(scope, msgEl, msgInner, settings, settings.fadeOutMs, function () {
|
278
|
+
msgView.remove();
|
279
|
+
msgView.trigger('destroy', msgView, msgEl);
|
280
|
+
Notifier._modulesBinder.trigger('afterDestroyMsgEl', scope, settings, msgEl, msgInner, msgView);
|
281
|
+
_.isFunction(e) && e.call(msgView, msgView, msgEl);
|
282
|
+
});
|
283
|
+
if (msgView.timeoutId) {
|
284
|
+
clearTimeout(msgView.timeoutId);
|
285
|
+
}
|
286
|
+
delete msgView.timeoutId;
|
287
|
+
delete scope.current[msgView.cid];
|
288
|
+
};
|
289
|
+
|
290
|
+
var preventDefaultFn = function (e) {
|
291
|
+
if (e) {
|
292
|
+
e.preventDefault();
|
293
|
+
e.stopPropagation();
|
294
|
+
}
|
295
|
+
};
|
296
|
+
|
297
|
+
if (settings.modal) {
|
298
|
+
msgView.screenEl = $('<div/>', {
|
299
|
+
'class': settings.baseCls + '-screen ' + settings.baseCls + '-theme-' + settings.theme,
|
300
|
+
css: { position: scope._cssPos, top: 0, left: 0, width: '100%', height: '100%', opacity: 0, zIndex: zIndex - 1 }
|
301
|
+
}).prependTo(scope.$el)
|
302
|
+
.click(function (e) {
|
303
|
+
e.preventDefault();
|
304
|
+
e.stopPropagation();
|
305
|
+
return false;
|
306
|
+
}).fadeTo(300, settings.screenOpacity);
|
307
|
+
|
308
|
+
}
|
309
|
+
|
310
|
+
if (settings.ms > 0 || settings.ms === 0) {
|
311
|
+
msgView.timeoutId = setTimeout(function () {
|
312
|
+
msgView.trigger('timeout', msgView, msgEl);
|
313
|
+
removeFn();
|
314
|
+
}, settings.ms);
|
315
|
+
}
|
316
|
+
|
317
|
+
msgInner.click(settings.hideOnClick ? removeFn : preventDefaultFn);
|
318
|
+
|
319
|
+
settings.css && msgInner.css(settings.css);
|
320
|
+
var animateFn = $.isFunction(settings['in']) ? settings['in'] : scope.transitions[settings.position]['in'];
|
321
|
+
scope.current[msgView.cid] = msgView;
|
322
|
+
msgView.zIndex = zIndex;
|
323
|
+
|
324
|
+
Notifier._modulesBinder.trigger('beforeAnimateInMsgEl', scope, settings, msgEl, msgInner, msgView);
|
325
|
+
animateFn.call(scope, msgEl, msgInner, settings, settings.fadeInMs, function () {
|
326
|
+
Notifier._modulesBinder.trigger('afterAnimateInMsgEl', scope, settings, msgEl, msgInner, msgView);
|
327
|
+
});
|
328
|
+
return msgView;
|
329
|
+
}
|
330
|
+
});
|
331
|
+
|
332
|
+
|
333
|
+
// ====================== Modules mechanism ======================
|
334
|
+
Notifier.getModule = function (moduleName) {
|
335
|
+
return (_.isObject(moduleName)) ? moduleName : Notifier.modules[moduleName];
|
336
|
+
};
|
337
|
+
|
338
|
+
var modulesBinder = {},
|
339
|
+
shift = Array.prototype.shift;
|
340
|
+
_.extend(modulesBinder, Backbone.Events);
|
341
|
+
Notifier._modulesBinder = modulesBinder;
|
342
|
+
|
343
|
+
Notifier.regModule = function (moduleName, m) {
|
344
|
+
if (arguments.length === 1) {
|
345
|
+
m = $.isFunction(moduleName) ? moduleName() : moduleName;
|
346
|
+
moduleName = m.name;
|
347
|
+
} else {
|
348
|
+
m = $.isFunction(m) ? m() : m;
|
349
|
+
m.name = moduleName;
|
350
|
+
}
|
351
|
+
if (!moduleName) {
|
352
|
+
throw('module name is not defined.');
|
353
|
+
}
|
354
|
+
if (m.extend) {
|
355
|
+
$.each(m.extend, function (k, v) {
|
356
|
+
var orig = Notifier.prototype[k];
|
357
|
+
if (_.isFunction(v) || orig === undefined) {
|
358
|
+
Notifier.prototype[k] = function () {
|
359
|
+
return v.apply({scope: this, supr: orig, module: m}, arguments);
|
360
|
+
};
|
361
|
+
} else if (!_.isObject(v)) {
|
362
|
+
Notifier.prototype[k] = v;
|
363
|
+
} else {
|
364
|
+
Notifier.prototype[k] = $.extend(true, {}, orig, v);
|
365
|
+
}
|
366
|
+
});
|
367
|
+
}
|
368
|
+
(Notifier.modules = Notifier.modules || {})[moduleName] = m;
|
369
|
+
$.isFunction(m.register) && m.register.call(m, Notifier);
|
370
|
+
m.enabled && Notifier.enableModule(m);
|
371
|
+
return m;
|
372
|
+
};
|
373
|
+
|
374
|
+
Notifier.enableModule = function (moduleName) {
|
375
|
+
var m = Notifier.getModule(moduleName);
|
376
|
+
if (m) {
|
377
|
+
m._handlers = m._handlers || {};
|
378
|
+
m.events && $.each(m.events, function (k, fn) {
|
379
|
+
var handler = m._handlers[k] = function () {
|
380
|
+
var notifier = shift.call(arguments);
|
381
|
+
fn.apply({module: m, scope: notifier}, arguments);
|
382
|
+
};
|
383
|
+
Notifier._modulesBinder.on(k, handler);
|
384
|
+
});
|
385
|
+
m.enabled = true;
|
386
|
+
$.isFunction(m.enable) && m.enable.call(m, Notifier);
|
387
|
+
return m;
|
388
|
+
}
|
389
|
+
|
390
|
+
// console.log('module "' + moduleName + '" is not registered.');
|
391
|
+
return false;
|
392
|
+
};
|
393
|
+
|
394
|
+
Notifier.disableModule = function (moduleName) {
|
395
|
+
var m = Notifier.getModule(moduleName);
|
396
|
+
if (m) {
|
397
|
+
$.each(m._handlers, function (k, fn) {
|
398
|
+
Notifier._modulesBinder.off(k, fn);
|
399
|
+
});
|
400
|
+
m.enabled = false;
|
401
|
+
$.isFunction(m.disable) && m.disable.call(m, Notifier);
|
402
|
+
return m;
|
403
|
+
}
|
404
|
+
// console.log('module "' + moduleName + '" is not registered.');
|
405
|
+
return false;
|
406
|
+
};
|
407
|
+
|
408
|
+
})(jQuery, Backbone, _);
|
409
|
+
|
410
|
+
/*!
|
411
|
+
* Backbone.Notifier Template Module v0.0.1
|
412
|
+
* Copyright 2012, Eyal Weiss
|
413
|
+
* Backbone.Notifier Template Module be freely distributed under the MIT license.
|
414
|
+
*/
|
415
|
+
(function(Notifier, $, _){
|
416
|
+
|
417
|
+
Notifier.regModule({
|
418
|
+
name: 'template',
|
419
|
+
enabled: true,
|
420
|
+
extend: {
|
421
|
+
template: function(settings){
|
422
|
+
if (settings.data) {
|
423
|
+
var compiled = _.template(settings.message);
|
424
|
+
settings.message = compiled(settings.data);
|
425
|
+
}
|
426
|
+
return this.supr.call(this.scope, settings);
|
427
|
+
}
|
428
|
+
}
|
429
|
+
});
|
430
|
+
|
431
|
+
})(Backbone.Notifier, jQuery, _);
|
@@ -0,0 +1,15 @@
|
|
1
|
+
(function(f,j,i){var k=function(){},h=j.Notifier=j.Model.extend({defaults:{baseCls:"notifier",types:["warning","error","info","success"],dialog:!1,theme:"plastic",message:"",closeBtn:!1,title:void 0,hideOnClick:!0,type:null,cls:null,ms:1E4,loader:!1,destroy:!1,modal:!1,opacity:1,offsetY:0,fadeInMs:500,fadeOutMs:500,position:"top",screenOpacity:0.65,zIndex:1E4,width:void 0,modules:void 0},transitions:{top:{"in":function(a,b,c,d,g){a.css({display:"block",top:-1E3});a.css({top:-b.innerHeight()}).animate({top:c.offsetY,
|
2
|
+
opacity:c.opacity},d,g||k)},out:function(a,b,c,d,g){a.animate({top:-b.innerHeight(),opacity:0},d,g||k)}},center:{"in":function(a,b,c,d,g){a.css({top:c.offsetY-40,display:"block"}).animate({top:"50%",marginTop:-b.innerHeight()/2,opacity:c.opacity},d,g||k)},out:function(a,b,c,d,g){a.animate({top:"0%",opacity:0},d,g||k)}},bottom:{"in":function(a,b,c,d,g){a.css({bottom:c.offsetY-40,top:"auto",display:"block"}).animate({bottom:b.innerHeight()+c.offsetY,opacity:c.opacity},d,g||k)},out:function(a,b,c,d,
|
3
|
+
g){a.animate({bottom:-b.height(),opacity:0},d,g||k)}}},template:function(a){var b=['<div class="'+a.wrapperCls+'">','<div class="'+a.innerCls+'">',a.title?'<div class="'+a.baseCls+'-title">'+a.title+"</div>":"",a.closeBtn?'<button class="'+a.baseCls+'-close" data-handler="destroy"><span>x</span></button>':""];a.dialog?b.push('<div class="'+a.baseCls+'-message">'+a.message+(a.loader?'<div class="'+a.baseCls+'-loader"></div>':"")+"</div>"):b.push('<div class="'+a.baseCls+'-message">'+a.message+"</div>",
|
4
|
+
a.loader?'<div class="'+a.baseCls+'-loader"></div>':"");if(a.buttons){var c=f("<div />");i.each(a.buttons,function(a){c.append(f("<button/>",a))});b.push('<div class="'+a.baseCls+'-btns">'+c.html()+"</div>")}b.push("</div></div>");return b.join("")},initEl:function(){var a=this.el?this.el:"body",a=i.isObject(a)?a:f(a);if(!a.length)return f(f.proxy(this.initEl,this));this.$el=a;this._cssPos=a.get(0)===document.body?"fixed":"absolute";a.get(0)!==document.body&&a.css("position","relative");"absolute"===
|
5
|
+
this._cssPos&&a.css("overflow","hidden")},initialize:function(a){var b=this;this.el=a&&a.el;this.initEl.call(this,a&&a.el);this.current={};b.NotificationView=j.View.extend({defaults:b.attributes,on:function(a,b){var c=b,d=this;i.isString(b)&&(c=function(){d[b].apply(d,arguments)});return j.View.prototype.on.call(this,a,c)}});var c=function(a){b[a]=b[a]||function(c){i.isString(c)&&(c={message:c});c=i.extend({},{type:""},c);c.type=c.type?a+" "+c.type:a;return b.notify(c)}};i.each(b.attributes.types,
|
6
|
+
function(a){c(a)});if(b.attributes){var d=this.attributes.modules;d&&f.each(d,function(a,b){b.name=i.isArray(d)?b.name:a;h.regModule(b)});b.attributes.modules=void 0}},calcZIndex:function(){if("absolute"===this._cssPos)return this.attributes.zIndex;var a=this.attributes.zIndex+1;i.each(this.current,function(b){a=b.zIndex>a?b.zIndex:a});return++a},destroyAll:function(a,b){var c=0;i.isFunction(a)?i.each(this.current,function(b){a(b)&&(b.destroy.call(b),c++)}):void 0!==a?i.each(this.current,function(d){d.settings[a]===
|
7
|
+
b&&(d.destroy.call(d),c++)}):i.each(this.current,function(a){a.destroy.call(a);c++});return c},getWrapperCls:function(a){return f.trim(a.baseCls+" "+(a.type?a.type+" ":"")+("theme-"+a.theme+" ")+(a.dialog?"dialog ":"")+("pos-"+a.position+" ")+(a.buttons?"with-buttons ":"")+(a.loader?"with-loader ":"")+(a.closeBtn?"with-close-btn ":"")).split(" ").join(" "+a.baseCls+"-")+" "+(a.cls||"")},getSettings:function(a){i.isString(a)&&(a={message:a});var b=f.extend({},this.attributes,a);b.title&&void 0===a.dialog&&
|
8
|
+
(b.dialog=!0);if((b.modal||b.dialog)&&void 0===a.hideOnClick)b.hideOnClick=!1;b.dialog&&void 0===a.ms&&(b.ms=null);b.dialog&&void 0===a.position&&(b.position="center");return b},notify:function(a){a=a||{};a.el&&(this.el=a&&a.el,this.initEl.call(this,a&&a.el));var b=this,c=this.getSettings(a);i.isObject(c.destroy)?c.destroy instanceof b.NotificationView?c.destroy.destroy():b.destroyAll.apply(b,i.isArray(c.destroy)?c.destroy:[c.destroy]):!0===c.destroy&&b.destroyAll();a=a.zIndex||b.calcZIndex.call(b);
|
9
|
+
c.wrapperCls=b.getWrapperCls(c);c.innerCls=c.baseCls+"-inner";var d=f(b.template(c)),g=d.find("."+c.innerCls);c.width&&g.css({width:c.width});h._modulesBinder.trigger("beforeAppendMsgEl",b,c,d,g);d.css({display:"none",opacity:0,position:b._cssPos,zIndex:c.modal?++a:a}).prependTo(b.$el);var e=new b.NotificationView({el:d});e.settings=c;if(c.buttons||g.find("button").length)g.on("click","button[data-handler]",function(){var a=f(this).data("handler");(i.isFunction(a)?a:e[a]).apply(e,arguments)}),g.on("button click",
|
10
|
+
function(a){e.trigger("click:"+f(a.target).data("role"))});var k=e.destroy=function(a){if(i.isObject(a)&&a.preventDefault){a.preventDefault();a.stopPropagation()}e.trigger("beforeHide",e,d);c.modal&&e.screenEl.fadeOut(300,function(){e.trigger("screenHide",e,d);e.screenEl.remove()});h._modulesBinder.trigger("beforeHideMsgEl",b,c,d,g,e);(f.isFunction(c.out)?c.out:b.transitions[c.position].out).call(b,d,g,c,c.fadeOutMs,function(){e.remove();e.trigger("destroy",e,d);h._modulesBinder.trigger("afterDestroyMsgEl",
|
11
|
+
b,c,d,g,e);i.isFunction(a)&&a.call(e,e,d)});e.timeoutId&&clearTimeout(e.timeoutId);delete e.timeoutId;delete b.current[e.cid]},j=function(a){if(a){a.preventDefault();a.stopPropagation()}};c.modal&&(e.screenEl=f("<div/>",{"class":c.baseCls+"-screen "+c.baseCls+"-theme-"+c.theme,css:{position:b._cssPos,top:0,left:0,width:"100%",height:"100%",opacity:0,zIndex:a-1}}).prependTo(b.$el).click(function(a){a.preventDefault();a.stopPropagation();return false}).fadeTo(300,c.screenOpacity));if(0<c.ms||0===c.ms)e.timeoutId=
|
12
|
+
setTimeout(function(){e.trigger("timeout",e,d);k()},c.ms);g.click(c.hideOnClick?k:j);c.css&&g.css(c.css);j=f.isFunction(c["in"])?c["in"]:b.transitions[c.position]["in"];b.current[e.cid]=e;e.zIndex=a;h._modulesBinder.trigger("beforeAnimateInMsgEl",b,c,d,g,e);j.call(b,d,g,c,c.fadeInMs,function(){h._modulesBinder.trigger("afterAnimateInMsgEl",b,c,d,g,e)});return e}});h.getModule=function(a){return i.isObject(a)?a:h.modules[a]};var l={},m=Array.prototype.shift;i.extend(l,j.Events);h._modulesBinder=l;
|
13
|
+
h.regModule=function(a,b){1===arguments.length?(b=f.isFunction(a)?a():a,a=b.name):(b=f.isFunction(b)?b():b,b.name=a);if(!a)throw"module name is not defined.";b.extend&&f.each(b.extend,function(a,d){var g=h.prototype[a];h.prototype[a]=i.isFunction(d)||g===void 0?function(){return d.apply({scope:this,supr:g,module:b},arguments)}:i.isObject(d)?f.extend(true,{},g,d):d});(h.modules=h.modules||{})[a]=b;f.isFunction(b.register)&&b.register.call(b,h);b.enabled&&h.enableModule(b);return b};h.enableModule=
|
14
|
+
function(a){var b=h.getModule(a);return b?(b._handlers=b._handlers||{},b.events&&f.each(b.events,function(a,d){var g=b._handlers[a]=function(){var a=m.call(arguments);d.apply({module:b,scope:a},arguments)};h._modulesBinder.on(a,g)}),b.enabled=!0,f.isFunction(b.enable)&&b.enable.call(b,h),b):!1};h.disableModule=function(a){return(a=h.getModule(a))?(f.each(a._handlers,function(a,c){h._modulesBinder.off(a,c)}),a.enabled=!1,f.isFunction(a.disable)&&a.disable.call(a,h),a):!1}})(jQuery,Backbone,_);
|
15
|
+
(function(f,j,i){f.regModule({name:"template",enabled:!0,extend:{template:function(f){if(f.data){var h=i.template(f.message);f.message=h(f.data)}return this.supr.call(this.scope,f)}}})})(Backbone.Notifier,jQuery,_);
|